diff --git a/.github/actionlint.yaml b/.github/actionlint.yaml new file mode 100644 index 0000000000..6755904cab --- /dev/null +++ b/.github/actionlint.yaml @@ -0,0 +1,8 @@ +self-hosted-runner: + # Labels of self-hosted runner in array of strings. + labels: + - buildjet-16vcpu-ubuntu-2204 +# Configuration variables in array of strings defined in your repository or +# organization. `null` means disabling configuration variables check. +# Empty array means no configuration variable is allowed. +config-variables: null diff --git a/.github/workflows/ci-lint.yml b/.github/workflows/ci-lint.yml new file mode 100644 index 0000000000..1379478275 --- /dev/null +++ b/.github/workflows/ci-lint.yml @@ -0,0 +1,15 @@ +name: Lint GitHub Actions workflows +on: [push, pull_request] + +jobs: + actionlint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Download actionlint + id: get_actionlint + run: bash <(curl https://raw.githubusercontent.com/rhysd/actionlint/main/scripts/download-actionlint.bash) + shell: bash + - name: Check workflow files + run: ${{ steps.get_actionlint.outputs.executable }} -color + shell: bash \ No newline at end of file diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml deleted file mode 100644 index 52f7cd7f4d..0000000000 --- a/.github/workflows/e2e-tests.yml +++ /dev/null @@ -1,66 +0,0 @@ -# on: -# push: -# branches: -# - main -# paths: -# - "zk.js/**" -# - ".github/workflows/e2e-tests.yml" -# - "psp-examples/**" - -# pull_request: -# branches: -# - main -# paths: -# - "zk.js/**" -# - ".github/workflows/e2e-tests.yml" -# - "psp-examples/**" - -# types: -# - opened -# - synchronize -# - reopened -# - ready_for_review - -# name: e2e-tests - -# concurrency: -# group: ${{ github.workflow }}-${{ github.ref }} -# cancel-in-progress: true - -# jobs: -# e2e-tests: -# name: web End-to-end test - -# if: github.event.pull_request.draft == false -# runs-on: buildjet-16vcpu-ubuntu-2204 -# strategy: -# matrix: -# include: -# - test: psp-examples-tests -# sub-tests: '[ -# "@lightprotocol/streaming-payments:test", -# ]' -# services: -# redis: -# image: redis -# options: >- -# --health-cmd "redis-cli ping" -# --health-interval 10s -# --health-timeout 5s -# --health-retries 5 -# ports: -# - 6379:6379 -# steps: -# - name: Checkout sources -# uses: actions/checkout@v2 - -# - name: Setup and build -# uses: ./.github/actions/setup-and-build - -# - name: ${{ matrix.test }} -# run: | -# source ./scripts/devenv.sh -# IFS=', ' read -r -a sub_tests <<< "${{ join(fromJSON(matrix['sub-tests']), ', ') }}" -# for subtest in "${sub_tests[@]}" -# do -# npx nx run $subtest -# done diff --git a/.github/workflows/js.yml b/.github/workflows/js.yml index b3952d8cb9..02d62b02d7 100644 --- a/.github/workflows/js.yml +++ b/.github/workflows/js.yml @@ -2,17 +2,9 @@ on: push: branches: - main - paths: - - "js/stateless.js/**" - - "js/compressed-token/**" - - ".github/workflows/js.yml" pull_request: branches: - main - paths: - - "js/stateless.js/**" - - "js/compressed-token/**" - - ".github/workflows/js.yml" types: - opened - synchronize @@ -34,7 +26,6 @@ jobs: steps: - name: Checkout sources uses: actions/checkout@v4 - with: - name: Setup and build uses: ./.github/actions/setup-and-build diff --git a/.github/workflows/light-sdk-tests.yml b/.github/workflows/light-sdk-tests.yml index fcb3743495..7b9b7a9b1f 100644 --- a/.github/workflows/light-sdk-tests.yml +++ b/.github/workflows/light-sdk-tests.yml @@ -60,7 +60,7 @@ jobs: IFS=', ' read -r -a sub_tests <<< "${{ join(fromJSON(matrix['sub-tests']), ', ') }}" for subtest in "${sub_tests[@]}" do - npx nx run $subtest + npx nx run "$subtest" done - name: Log out diff --git a/.github/workflows/light-system-programs-tests.yml b/.github/workflows/light-system-programs-tests.yml index 9b42096d84..8266e0c5b1 100644 --- a/.github/workflows/light-system-programs-tests.yml +++ b/.github/workflows/light-system-programs-tests.yml @@ -53,7 +53,7 @@ jobs: IFS=', ' read -r -a sub_tests <<< "${{ join(fromJSON(matrix['sub-tests']), ', ') }}" for subtest in "${sub_tests[@]}" do - npx nx run $subtest + npx nx run "$subtest" done cd programs/light && cargo test-sbf diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index c12f586feb..557109ad9b 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -43,7 +43,7 @@ jobs: - name: Get pnpm store directory shell: bash run: | - echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + echo "STORE_PATH=$(pnpm store path --silent)" >> "$GITHUB_ENV" - uses: actions/cache@v3 name: Setup pnpm cache diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 70e2498389..e75696523f 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -2,7 +2,7 @@ name: "Lint PR" on: pull_request: - branch: + branches: - main types: - opened diff --git a/.github/workflows/prover-release.yml b/.github/workflows/prover-release.yml index 4d78d618bd..d103aeae2c 100644 --- a/.github/workflows/prover-release.yml +++ b/.github/workflows/prover-release.yml @@ -17,15 +17,17 @@ jobs: uses: actions/setup-go@v4 with: go-version: 1.21 + - name: Build artifacts run: | for cfgstr in "darwin amd64" "darwin arm64" "linux amd64" "windows amd64"; do - cfg=( $cfgstr ) - export GOOS=${cfg[0]} - export GOARCH=${cfg[1]} + cfg=( "$cfgstr" ) + export GOOS="${cfg[0]}" + export GOARCH="${cfg[1]}" export CGO_ENABLED=0 - go build -o prover-$GOOS-$GOARCH + go build -o prover-"$GOOS"-"$GOARCH" done + - name: Create Release uses: softprops/action-gh-release@v1 with: diff --git a/.github/workflows/prover-test.yml b/.github/workflows/prover-test.yml index d838e205f5..35e7630396 100644 --- a/.github/workflows/prover-test.yml +++ b/.github/workflows/prover-test.yml @@ -1,31 +1,50 @@ -name: Test -on: push +name: Test gnark prover +on: + push: + branches: + - main + paths: + - "gnark-prover/**" + - ".github/workflows/prover-test.yml" + - ".github/workflows/prover-release.yml" + pull_request: + branches: + - main + paths: + - "gnark-prover/**" + - ".github/workflows/prover-test.yml" + - ".github/workflows/prover-release.yml" + types: + - opened + - synchronize + - reopened + - ready_for_review + jobs: build-and-test: if: github.event.pull_request.draft == false - runs-on: ubuntu-latest - timeout-minutes: 600 + runs-on: buildjet-16vcpu-ubuntu-2204 + timeout-minutes: 2400 steps: - name: Checkout sources uses: actions/checkout@v4 - with: - submodules: true - - name: Cache dependencies - uses: actions/cache@v3 - name: Set up Go uses: actions/setup-go@v4 with: go-version-file: './gnark-prover/go.mod' - - name: Download prover keys + + - name: Download keys run: | cd gnark-prover ./scripts/download_keys.sh + - name: Build run: | cd gnark-prover go build - - name: Prover unit tests + + - name: Unit tests run: | cd gnark-prover go test ./prover diff --git a/.github/workflows/release-pr.yml b/.github/workflows/release-pr.yml index 390dc217d2..30cdef3b7a 100644 --- a/.github/workflows/release-pr.yml +++ b/.github/workflows/release-pr.yml @@ -45,10 +45,10 @@ jobs: - name: Install cargo-release run: | - VERSION=$(curl --silent "https://api.github.com/repos/crate-ci/cargo-release/releases/latest" | jq -r .tag_name) - wget https://github.com/crate-ci/cargo-release/releases/download/$VERSION/cargo-release-$VERSION-x86_64-unknown-linux-gnu.tar.gz - tar -xzvf cargo-release-$VERSION-x86_64-unknown-linux-gnu.tar.gz --wildcards '*cargo-release' --strip-components=1 - cp cargo-release $HOME/.cargo/bin + VERSION="$(curl --silent "https://api.github.com/repos/crate-ci/cargo-release/releases/latest" | jq -r .tag_name)" + wget https://github.com/crate-ci/cargo-release/releases/download/"$VERSION"/cargo-release-"$VERSION"-x86_64-unknown-linux-gnu.tar.gz + tar -xzvf cargo-release-"$VERSION"-x86_64-unknown-linux-gnu.tar.gz --wildcards '*cargo-release' --strip-components=1 + cp cargo-release "$HOME"/.cargo/bin - uses: cargo-bins/release-pr@v2 with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a10b23b9e8..b4aa6db0c4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -24,36 +24,36 @@ jobs: - name: Extract crate name from tag id: extract-crate run: | - TAG_NAME=${GITHUB_REF#refs/tags/} - CRATE_NAME=$(echo $TAG_NAME | rev | cut -d'-' -f2- | rev) + TAG_NAME="${GITHUB_REF#refs/tags/}" + CRATE_NAME="$(echo "$TAG_NAME" | rev | cut -d'-' -f2- | rev)" - if [ "$CRATE_NAME" == *"light-merkle-tree-program"* ]; then + if [[ "$CRATE_NAME" == *"light-merkle-tree-program"* ]]; then ARTIFACT="light_merkle_tree_program.so" - elif [ "$CRATE_NAME" == *"light-psp2in2out"* ]; then + elif [[ "$CRATE_NAME" == *"light-psp2in2out"* ]]; then ARTIFACT="light_psp2in2out.so" - elif [ "$CRATE_NAME" == *"light-psp10in2out"* ]; then + elif [[ "$CRATE_NAME" == *"light-psp10in2out"* ]]; then ARTIFACT="light_psp10in2out.so" - elif [ "$CRATE_NAME" == *"light-psp4in4out-app-storage"* ]; then + elif [[ "$CRATE_NAME" == *"light-psp4in4out-app-storage"* ]]; then ARTIFACT="light_psp4in4out_app_storage.so" - elif [ "$CRATE_NAME" == *"light-psp2in2out-storage"* ]; then + elif [[ "$CRATE_NAME" == *"light-psp2in2out-storage"* ]]; then ARTIFACT="light_psp2in2out_storage.so" - elif [ "$CRATE_NAME" == *"macro-circom"* ]; then + elif [[ "$CRATE_NAME" == *"macro-circom"* ]]; then ARTIFACT="macro-circom" fi - echo "crate=$CRATE_NAME" >> $GITHUB_OUTPUT - echo "artifact=$ARTIFACT" >> $GITHUB_OUTPUT + echo "crate=$CRATE_NAME" >> "$GITHUB_OUTPUT" + echo "artifact=$ARTIFACT" >> "$GITHUB_OUTPUT" - name: Prepare artifacts run: | - if [ "$CRATE_NAME" == *"light-merkle-tree-program"* ]; then + if [[ "$CRATE_NAME" == *"light-merkle-tree-program"* ]]; then cp target/deploy/light_merkle_tree_program.so . - elif [ "$CRATE_NAME" == *"light-psp2in2out"* ]; then + elif [[ "$CRATE_NAME" == *"light-psp2in2out"* ]]; then cp target/deploy/light_psp2in2out.so . - elif [ "$CRATE_NAME" == *"light-psp10in2out"* ]; then + elif [[ "$CRATE_NAME" == *"light-psp10in2out"* ]]; then cp target/deploy/light_psp10in2out.so . - elif [ "$CRATE_NAME" == *"light-psp4in4out-app-storage"* ]; then + elif [[ "$CRATE_NAME" == *"light-psp4in4out-app-storage"* ]]; then cp target/deploy/light_psp4in4out_app_storage.so . - elif [ "$CRATE_NAME" == *"light-psp2in2out-storage"* ]; then + elif [[ "$CRATE_NAME" == *"light-psp2in2out-storage"* ]]; then cp target/deploy/light_psp2in2out_storage.so . fi @@ -63,7 +63,7 @@ jobs: with: token: ${{ secrets.PAT_TOKEN }} files: | - ${{ steps.extract-crate.outputs.artifact }} + "${{ steps.extract-crate.outputs.artifact }}" - name: Run cargo publish # Skip macro-circom, it has a git dependency preventing it from publishing. @@ -71,4 +71,4 @@ jobs: env: CARGO_REGISTRY_TOKEN: ${{ secrets.CRATES_IO_TOKEN }} run: | - cargo publish -p ${{ steps.extract-crate.outputs.crate }} --token $CARGO_REGISTRY_TOKEN + cargo publish -p "${{ steps.extract-crate.outputs.crate }}" --token "$CARGO_REGISTRY_TOKEN" diff --git a/Cargo.lock b/Cargo.lock index 4f746447e3..63d2356c18 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1199,6 +1199,7 @@ dependencies = [ "serde", "serde_json", "solana-program", + "sysinfo", "thiserror", "tokio", "zeroize", @@ -2618,7 +2619,7 @@ dependencies = [ "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows", + "windows 0.48.0", ] [[package]] @@ -3295,6 +3296,15 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "ntapi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" +dependencies = [ + "winapi", +] + [[package]] name = "num" version = "0.2.1" @@ -6449,6 +6459,21 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "sysinfo" +version = "0.30.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b1a378e48fb3ce3a5cf04359c456c9c98ff689bcf1c1bc6e6a31f247686f275" +dependencies = [ + "cfg-if", + "core-foundation-sys", + "libc", + "ntapi", + "once_cell", + "rayon", + "windows 0.52.0", +] + [[package]] name = "system-configuration" version = "0.5.1" @@ -7567,6 +7592,25 @@ dependencies = [ "windows-targets 0.48.5", ] +[[package]] +name = "windows" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" +dependencies = [ + "windows-core", + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.0", +] + [[package]] name = "windows-sys" version = "0.33.0" @@ -7960,23 +8004,3 @@ dependencies = [ "libc", "pkg-config", ] - -[[patch.unused]] -name = "ark-bn254" -version = "0.3.0" -source = "git+https://github.com/Lightprotocol/curves?branch=release-0.3.0#7c901afc3ec80bf3eaea654237ffe73356f68c86" - -[[patch.unused]] -name = "ark-ec" -version = "0.3.0" -source = "git+https://github.com/Lightprotocol/algebra?branch=release-0.3.0#d45d741649114ab36dca7a88d08c044174f6b8b5" - -[[patch.unused]] -name = "ark-ff" -version = "0.3.0" -source = "git+https://github.com/Lightprotocol/algebra?branch=release-0.3.0#d45d741649114ab36dca7a88d08c044174f6b8b5" - -[[patch.unused]] -name = "ark-serialize" -version = "0.3.0" -source = "git+https://github.com/Lightprotocol/algebra?branch=release-0.3.0#d45d741649114ab36dca7a88d08c044174f6b8b5" diff --git a/Cargo.toml b/Cargo.toml index ff83a75c84..01a8399685 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,12 +12,6 @@ members = [ "xtask", ] -[patch.crates-io] -ark-ff = { git = "https://github.com/Lightprotocol/algebra", branch="release-0.3.0" } -ark-bn254 = { git = "https://github.com/Lightprotocol/curves", branch="release-0.3.0" } -ark-ec = { git = "https://github.com/Lightprotocol/algebra", branch="release-0.3.0" } -ark-serialize = { git = "https://github.com/Lightprotocol/algebra", branch="release-0.3.0" } - [profile.release] overflow-checks = true diff --git a/circuit-lib/circuit-lib.circom/package.json b/circuit-lib/circuit-lib.circom/package.json index a4e23f053f..000805ed92 100644 --- a/circuit-lib/circuit-lib.circom/package.json +++ b/circuit-lib/circuit-lib.circom/package.json @@ -4,7 +4,7 @@ "description": "", "license": "GPL-3.0", "scripts": { - "build-merkle": "./scripts/buildMerkle.sh" + "build-circuits": "./scripts/buildCircuits.sh" }, "author": "", "devDependencies": { diff --git a/circuit-lib/circuit-lib.circom/scripts/buildCombinedMerkleCircuits.sh b/circuit-lib/circuit-lib.circom/scripts/buildCircuits.sh similarity index 90% rename from circuit-lib/circuit-lib.circom/scripts/buildCombinedMerkleCircuits.sh rename to circuit-lib/circuit-lib.circom/scripts/buildCircuits.sh index cc8e895248..adf3aec4e4 100755 --- a/circuit-lib/circuit-lib.circom/scripts/buildCombinedMerkleCircuits.sh +++ b/circuit-lib/circuit-lib.circom/scripts/buildCircuits.sh @@ -102,17 +102,4 @@ for ((i=1; i<=MAX_COUNT; i++)); do execute_commands "non-inclusion" "$MERKLE_TREE_HEIGHT" "$i" "$POWERS_OF_TAU" || exit done -execute_commands "non-inclusion" "$MERKLE_TREE_HEIGHT" 8 "$POWERS_OF_TAU" || exit - - -for ((i=1; i<=MAX_COUNT; i++)); do - execute_commands "combined" "$MERKLE_TREE_HEIGHT" "$i" "$POWERS_OF_TAU" 1 || exit -done - -execute_commands "combined" "$MERKLE_TREE_HEIGHT" 8 "$POWERS_OF_TAU" 1 || exit - -for ((i=1; i<=MAX_COUNT; i++)); do - execute_commands "combined" "$MERKLE_TREE_HEIGHT" "$i" "$POWERS_OF_TAU" 2 || exit -done - -execute_commands "combined" "$MERKLE_TREE_HEIGHT" 8 "$POWERS_OF_TAU" 2 || exit \ No newline at end of file +execute_commands "non-inclusion" "$MERKLE_TREE_HEIGHT" 8 "$POWERS_OF_TAU" || exit \ No newline at end of file diff --git a/circuit-lib/circuit-lib.circom/scripts/buildMerkle.sh b/circuit-lib/circuit-lib.circom/scripts/buildMerkle.sh deleted file mode 100755 index d35a8388e9..0000000000 --- a/circuit-lib/circuit-lib.circom/scripts/buildMerkle.sh +++ /dev/null @@ -1,82 +0,0 @@ -#!/bin/bash -e - -function download_ptau { - directory="$1" - ptau_number="$2" - - if [ ! -f "$directory/ptau$ptau_number" ]; then - echo "Downloading powers of tau file" - curl -L "https://hermez.s3-eu-west-1.amazonaws.com/powersOfTau28_hez_final_$ptau_number.ptau" --create-dirs -o "$directory/ptau$ptau_number" || { echo "Download failed"; exit 1; } - fi -} - -function execute_commands { - echo "Building merkle tree with height $1 and $2 UTXOs..." - - merkle_number="$1" - utxo_count="$2" - ptau_number="$3" - - if [[ $# -ne 3 ]]; then - echo "Invalid number of arguments" - exit 1; - fi - - temp_directory="/tmp" - - build_directory="$CIRCUIT_RS_DIR/test-data/merkle${merkle_number}_$utxo_count" - src_directory="$CIRCUIT_RS_VERIFYINGKEY_DIR/merkle${merkle_number}_$utxo_count" - circuits_circom_directory="$REPO_TOP_DIR/circuit-lib/circuit-lib.circom" - mkdir -p "$build_directory" - mkdir -p "$src_directory" - download_ptau "$temp_directory" "$ptau_number" || { echo "download_ptau failed"; exit 1; } - echo "Compiling circuits..." - circom --r1cs --wasm --sym "$circuits_circom_directory/src/merkle-tree/merkle${merkle_number}_$utxo_count.circom" \ - -o "$temp_directory" -l "$circuits_circom_directory/node_modules/circomlib/circuits" || { echo "circom failed"; exit 1; } - - echo "Generating keys..." - npx snarkjs groth16 setup "$temp_directory/merkle${merkle_number}_$utxo_count.r1cs" "$temp_directory/ptau$ptau_number" "$temp_directory/tmp_circuit.zkey" \ - || { echo "snarkjs groth16 setup failed"; exit 1; } - - echo "Contributing to powers of tau..." - npx snarkjs zkey contribute "$temp_directory/tmp_circuit.zkey" "$temp_directory/circuit.zkey" -e="321432151325321543215" \ - || { echo "snarkjs zkey contribute failed"; exit 1; } - rm "$temp_directory/tmp_circuit.zkey" - - echo "Verifying proof..." - npx snarkjs zkey verify "$temp_directory/merkle${merkle_number}_$utxo_count.r1cs" "$temp_directory/ptau$ptau_number" "$temp_directory/circuit.zkey" || { echo "snarkjs zkey verify failed"; exit 1; } - - echo "Exporting verification key..." - npx snarkjs zkey export verificationkey "$temp_directory/circuit.zkey" "$temp_directory/merkle${merkle_number}_$utxo_count.json" - - cp "$temp_directory/circuit.zkey" "$build_directory/circuit.zkey" - cp "$temp_directory/merkle${merkle_number}_${utxo_count}_js/merkle${merkle_number}_${utxo_count}.wasm" "$build_directory/circuit.wasm" - - - echo "Parsing verification key to Rust..." - npx ts-node "$circuits_circom_directory/scripts/parseVerifyingKeyToRust.js" "$temp_directory/merkle${merkle_number}_$utxo_count.json" "$src_directory" - echo "mod merkle${merkle_number}_$utxo_count;" >> "$CIRCUIT_RS_VERIFYINGKEY_DIR/mod.rs"; - echo "pub use crate::verifying_keys::merkle${merkle_number}_$utxo_count::VERIFYINGKEY as VK${merkle_number}_$utxo_count;" >> "$CIRCUIT_RS_VERIFYINGKEY_DIR/mod.rs"; - - echo "Done" -} - -REPO_TOP_DIR=$(git rev-parse --show-toplevel) - -CIRCUIT_RS_DIR="$REPO_TOP_DIR/circuit-lib/circuitlib-rs" -CIRCUIT_RS_VERIFYINGKEY_DIR="$CIRCUIT_RS_DIR/src/verifying_keys" - -rm "$CIRCUIT_RS_VERIFYINGKEY_DIR/mod.rs" -touch "$CIRCUIT_RS_VERIFYINGKEY_DIR/mod.rs" -echo "mod helpers;" >> "$CIRCUIT_RS_VERIFYINGKEY_DIR/mod.rs"; -echo "pub use crate::verifying_keys::helpers::vk;" >> "$CIRCUIT_RS_VERIFYINGKEY_DIR/mod.rs"; - -POWERS_OF_TAU=16 -MAX_COUNT=4 - -MERKLE_TREE_HEIGHT=26 -for ((i=1; i<=MAX_COUNT; i++)); do - execute_commands "$MERKLE_TREE_HEIGHT" "$i" "$POWERS_OF_TAU" || exit -done - -execute_commands "$MERKLE_TREE_HEIGHT" 8 "$POWERS_OF_TAU" || exit diff --git a/circuit-lib/circuit-lib.circom/scripts/buildNonInclusion.sh b/circuit-lib/circuit-lib.circom/scripts/buildNonInclusion.sh deleted file mode 100755 index 2b6bce0778..0000000000 --- a/circuit-lib/circuit-lib.circom/scripts/buildNonInclusion.sh +++ /dev/null @@ -1,82 +0,0 @@ -#!/bin/bash -e - -function download_ptau { - directory="$1" - ptau_number="$2" - - if [ ! -f "$directory/ptau$ptau_number" ]; then - echo "Downloading powers of tau file" - curl -L "https://hermez.s3-eu-west-1.amazonaws.com/powersOfTau28_hez_final_$ptau_number.ptau" --create-dirs -o "$directory/ptau$ptau_number" || { echo "Download failed"; exit 1; } - fi -} - -function execute_commands { - echo "Building non-inclusion merkle tree with height $1 and $2 UTXOs..." - - merkle_number="$1" - utxo_count="$2" - ptau_number="$3" - - if [[ $# -ne 3 ]]; then - echo "Invalid number of arguments" - exit 1; - fi - - temp_directory="/tmp" - name="ni_${merkle_number}_$utxo_count" - build_directory="$CIRCUIT_RS_DIR/test-data/$name" - src_directory="$CIRCUIT_RS_VERIFYINGKEY_DIR/$name" - circuits_circom_directory="$REPO_TOP_DIR/circuit-lib/circuit-lib.circom" - mkdir -p "$build_directory" - mkdir -p "$src_directory" - - download_ptau "$temp_directory" "$ptau_number" || { echo "download_ptau failed"; exit 1; } - echo "Compiling circuits..." - circom --r1cs --wasm --sym "$circuits_circom_directory/src/non-inclusion-merkle-tree/$name.circom" \ - -o "$temp_directory" -l "$circuits_circom_directory/node_modules/circomlib/circuits" || { echo "circom failed"; exit 1; } - - echo "Generating keys..." - npx snarkjs groth16 setup "$temp_directory/$name.r1cs" "$temp_directory/ptau$ptau_number" "$temp_directory/tmp_$name.zkey" \ - || { echo "snarkjs groth16 setup failed"; exit 1; } - - echo "Contributing to powers of tau..." - npx snarkjs zkey contribute "$temp_directory/tmp_$name.zkey" "$temp_directory/$name.zkey" -e="321432151325321543215" \ - || { echo "snarkjs zkey contribute failed"; exit 1; } - rm "$temp_directory/tmp_$name.zkey" - - echo "Verifying proof..." - npx snarkjs zkey verify "$temp_directory/$name.r1cs" "$temp_directory/ptau$ptau_number" "$temp_directory/$name.zkey" || { echo "snarkjs zkey verify failed"; exit 1; } - - echo "Exporting verification key..." - npx snarkjs zkey export verificationkey "$temp_directory/$name.zkey" "$temp_directory/$name.json" - - cp "$temp_directory/$name.zkey" "$build_directory/$name.zkey" - cp "$temp_directory/${name}_js/$name.wasm" "$build_directory/circuit.wasm" - - echo "Parsing verification key to Rust..." - npx ts-node "$circuits_circom_directory/scripts/parseVerifyingKeyToRust.js" "$temp_directory/$name.json" "$src_directory" - echo "mod $name;" >> "$CIRCUIT_RS_VERIFYINGKEY_DIR/mod.rs"; - echo "pub use crate::verifying_keys::$name::VERIFYINGKEY as VK_$name;" >> "$CIRCUIT_RS_VERIFYINGKEY_DIR/mod.rs"; - - echo "Done" -} - -REPO_TOP_DIR=$(git rev-parse --show-toplevel) - -CIRCUIT_RS_DIR="$REPO_TOP_DIR/circuit-lib/circuitlib-rs" -CIRCUIT_RS_VERIFYINGKEY_DIR="$CIRCUIT_RS_DIR/src/verifying_keys" - -rm "$CIRCUIT_RS_VERIFYINGKEY_DIR/mod.rs" -touch "$CIRCUIT_RS_VERIFYINGKEY_DIR/mod.rs" -echo "mod helpers;" >> "$CIRCUIT_RS_VERIFYINGKEY_DIR/mod.rs"; -echo "pub use crate::verifying_keys::helpers::vk;" >> "$CIRCUIT_RS_VERIFYINGKEY_DIR/mod.rs"; - -POWERS_OF_TAU=16 -MAX_COUNT=4 - -MERKLE_TREE_HEIGHT=26 -for ((i=1; i<=MAX_COUNT; i++)); do - execute_commands "$MERKLE_TREE_HEIGHT" "$i" "$POWERS_OF_TAU" || exit -done - -execute_commands "$MERKLE_TREE_HEIGHT" 8 "$POWERS_OF_TAU" || exit diff --git a/circuit-lib/circuit-lib.js/package.json b/circuit-lib/circuit-lib.js/package.json index b07964dcf3..370eb2614a 100644 --- a/circuit-lib/circuit-lib.js/package.json +++ b/circuit-lib/circuit-lib.js/package.json @@ -6,7 +6,7 @@ "scripts": { "test": "pnpm test-gnark", "test-gnark": "pnpm gnark-prover && ts-mocha --resolveJsonModule ./tsconfig.json -t 100000000 tests/gnark.test.ts --exit", - "gnark-prover": "./scripts/prover.sh", + "gnark-prover": "./scripts/prover.sh \"inclusion non-inclusion\"", "format": "prettier --write \"tests/**/*.{ts,js}\" \"src/**/*.{ts,js}\"", "lint": "pnpm prettier \"tests/**/*.{ts,js}\" \"src/**/*.{ts,js}\" --check", "build": "rimraf lib && pnpm tsc" diff --git a/circuit-lib/circuit-lib.js/scripts/prover.sh b/circuit-lib/circuit-lib.js/scripts/prover.sh index 21f88d2f3a..1c6b44ec9c 100755 --- a/circuit-lib/circuit-lib.js/scripts/prover.sh +++ b/circuit-lib/circuit-lib.js/scripts/prover.sh @@ -1,20 +1,74 @@ #!/usr/bin/env bash -killall light-prover +kill_light_prover() { + killall light-prover || echo "light-prover process not found" +} -# Get the root directory of the Git repository -root_dir=$(git rev-parse --show-toplevel) +# Get the root directory of the Git repository (robust error handling) +root_dir=$(git rev-parse --show-toplevel 2>/dev/null) || { + echo "Error: Not in a Git repository or 'git' command not found." + exit 1 +} -# Change the directory to 'gnark-prover' within the Git root directory -# shellcheck disable=SC2164 cd "$root_dir/gnark-prover" -# If 'gnark-prover' directory does not exist, print error and exit -if [ $? -ne 0 ]; then - echo "Directory gnark-prover does not exist in the Git root directory. Run \`git submodule update --init\` to fetch the submodule." +go build || { + echo "Build failed. Check for errors." + exit 1 +} + +if [[ $# -ne 1 ]]; then + echo "Error: Please provide a single argument containing light-prover options." + echo "Allowed options: inclusion, non-inclusion, combined (individually or combined)" exit 1 fi -go build -# Execute 'go run main.go start' -./light-prover start & \ No newline at end of file +options=($1) +inclusion="" +non_inclusion="" +combined="" + +for option in "${options[@]}"; do + case $option in + inclusion) + inclusion="--inclusion=true" + ;; + non-inclusion) + non_inclusion="--non-inclusion=true" + ;; + combined) + combined="--combined=true" + ;; + *) + echo "Error: Invalid option '$option'. Allowed options: inclusion, non-inclusion, combined" + exit 1 + ;; + esac +done + +kill_light_prover && ./light-prover start $inclusion $non_inclusion $combined & +light_prover_pid=$! + +health_check_url="http://localhost:3001/health" +timeout=120 +interval=2 + +start_time=$(date +%s) + +while true; do + status_code=$(curl -s -o /dev/null -w "%{http_code}" "$health_check_url") + + if [[ "$status_code" -eq 200 ]]; then + echo "light-prover health check successful!" + break + fi + + current_time=$(date +%s) + if (( current_time - start_time >= timeout )); then + echo "light-prover failed to start within $timeout seconds." + kill_light_prover + exit 1 + fi + + sleep "$interval" +done \ No newline at end of file diff --git a/circuit-lib/circuit-lib.js/tests/gnark.test.ts b/circuit-lib/circuit-lib.js/tests/gnark.test.ts index 7b8fb0afb5..30d729c33b 100644 --- a/circuit-lib/circuit-lib.js/tests/gnark.test.ts +++ b/circuit-lib/circuit-lib.js/tests/gnark.test.ts @@ -42,15 +42,15 @@ describe("Tests", () => { const leaf = hasher.poseidonHashString(["1"]); const merkleTree = new MerkleTree(merkleHeights[i], hasher, [leaf]); - const pathEements: string[] = merkleTree.path( + const pathElements: string[] = merkleTree.path( merkleTree.indexOf(leaf), ).pathElements; - const hexPathElements = pathEements.map((value) => toHex(value)); + const hexPathElements = pathElements.map((value) => toHex(value)); let inputs = { - root: new Array(utxos[j]).fill(toHex(merkleTree.root())), + roots: new Array(utxos[j]).fill(toHex(merkleTree.root())), inPathIndices: new Array(utxos[j]).fill(merkleTree.indexOf(leaf)), inPathElements: new Array(utxos[j]).fill(hexPathElements), - leaf: new Array(utxos[j]).fill(toHex(leaf)), + leaves: new Array(utxos[j]).fill(toHex(leaf)), }; const inputsData = JSON.stringify(inputs); console.time(`Proof generation for ${merkleHeights[i]} ${utxos[j]}`); diff --git a/circuit-lib/circuitlib-rs/Cargo.toml b/circuit-lib/circuitlib-rs/Cargo.toml index 1fe93bc42f..61329ccedd 100644 --- a/circuit-lib/circuitlib-rs/Cargo.toml +++ b/circuit-lib/circuitlib-rs/Cargo.toml @@ -44,6 +44,7 @@ serde_json = "1.0.60" num-traits = "0.2.18" tokio = { version = "1.36.0", features = ["rt", "macros"], optional = true } reqwest = { version = "0.11.24", features = ["json", "rustls-tls"], optional = true } +sysinfo = "0.30" [dev-dependencies] duct = "0.13.7" \ No newline at end of file diff --git a/circuit-lib/circuitlib-rs/src/gnark/helpers.rs b/circuit-lib/circuitlib-rs/src/gnark/helpers.rs index 420bc47b39..ff9f8b7c18 100644 --- a/circuit-lib/circuitlib-rs/src/gnark/helpers.rs +++ b/circuit-lib/circuitlib-rs/src/gnark/helpers.rs @@ -1,6 +1,7 @@ use std::{ - process::{Child, Command}, - thread, + fmt::{Display, Formatter}, + process::Command, + sync::atomic::{AtomicBool, Ordering}, time::Duration, }; @@ -8,49 +9,77 @@ use num_bigint::BigInt; use num_traits::ToPrimitive; use serde::Serialize; use serde_json::json; +use sysinfo::{Signal, System}; use crate::gnark::constants::{HEALTH_CHECK, SERVER_ADDRESS}; -pub fn spawn_gnark_server(path: &str, wait_time: u64) -> Child { - let server_process = Command::new("sh") - .arg("-c") - .arg(path) - .spawn() - .expect("Failed to start server process"); +static IS_LOADING: AtomicBool = AtomicBool::new(false); - // Wait for the server to launch before proceeding. - thread::sleep(Duration::from_secs(wait_time)); - - server_process +pub enum ProofType { + Inclusion, + NonInclusion, + Combined, } -pub fn kill_gnark_server(gnark: &mut Child) { - Command::new("sh") - .arg("-c") - .arg("killall light-prover") - .spawn() - .unwrap(); - gnark.kill().unwrap(); +impl Display for ProofType { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + write!( + f, + "{}", + match self { + ProofType::Inclusion => "inclusion", + ProofType::NonInclusion => "non-inclusion", + ProofType::Combined => "combined", + } + ) + } +} +pub async fn spawn_gnark_server(path: &str, restart: bool, proof_type: ProofType) { + if restart { + kill_gnark_server(); + } + if !health_check(1, 3).await && !IS_LOADING.load(Ordering::Relaxed) { + IS_LOADING.store(true, Ordering::Relaxed); + Command::new("sh") + .arg("-c") + .arg(format!("{} {}", path, proof_type)) + .spawn() + .expect("Failed to start server process"); + health_check(20, 5).await; + IS_LOADING.store(false, Ordering::Relaxed); + } } -pub async fn health_check() { - const MAX_RETRIES: usize = 20; - const TIMEOUT: usize = 5; +pub fn kill_gnark_server() { + let mut system = System::new_all(); + system.refresh_all(); - let client = reqwest::Client::new(); + for process in system.processes().values() { + if process.name() == "light-prover" { + process.kill_with(Signal::Term); + } + } +} - for _ in 0..MAX_RETRIES { +pub async fn health_check(retries: usize, timeout: usize) -> bool { + let client = reqwest::Client::new(); + let mut result = false; + for _ in 0..retries { match client .get(&format!("{}{}", SERVER_ADDRESS, HEALTH_CHECK)) .send() .await { - Ok(_) => break, + Ok(_) => { + result = true; + break; + } Err(_) => { - tokio::time::sleep(Duration::from_secs(TIMEOUT as u64)).await; + tokio::time::sleep(Duration::from_secs(timeout as u64)).await; } } } + result } pub fn create_vec_of_string(number_of_utxos: usize, element: &BigInt) -> Vec { diff --git a/circuit-lib/circuitlib-rs/src/gnark/inclusion_json_formatter.rs b/circuit-lib/circuitlib-rs/src/gnark/inclusion_json_formatter.rs index ae4db5fc97..3d4731098e 100644 --- a/circuit-lib/circuitlib-rs/src/gnark/inclusion_json_formatter.rs +++ b/circuit-lib/circuitlib-rs/src/gnark/inclusion_json_formatter.rs @@ -14,8 +14,8 @@ use crate::{ #[allow(non_snake_case)] #[derive(Serialize)] pub struct InclusionJsonStruct { - root: Vec, - leaf: Vec, + roots: Vec, + leaves: Vec, inPathIndices: Vec, inPathElements: Vec>, } @@ -23,15 +23,15 @@ pub struct InclusionJsonStruct { impl InclusionJsonStruct { fn new_with_public_inputs(number_of_utxos: usize) -> (Self, InclusionMerkleProofInputs) { let merkle_inputs = inclusion_merkle_tree_inputs(MerkleTreeInfo::H26); - let roots = create_vec_of_string(number_of_utxos, &merkle_inputs.root); - let leafs = create_vec_of_string(number_of_utxos, &merkle_inputs.leaf); + let roots = create_vec_of_string(number_of_utxos, &merkle_inputs.roots); + let leaves = create_vec_of_string(number_of_utxos, &merkle_inputs.leaves); let in_path_indices = create_vec_of_u32(number_of_utxos, &merkle_inputs.in_path_indices); let in_path_elements = create_vec_of_vec_of_string(number_of_utxos, &merkle_inputs.in_path_elements); ( Self { - root: roots, - leaf: leafs, + roots, + leaves, inPathIndices: in_path_indices, inPathElements: in_path_elements, }, @@ -50,8 +50,8 @@ impl InclusionJsonStruct { let mut in_path_indices = Vec::new(); let mut in_path_elements = Vec::new(); for input in inputs.0 { - roots.push(format!("0x{}", input.root.to_str_radix(16))); - leaves.push(format!("0x{}", input.leaf.to_str_radix(16))); + roots.push(format!("0x{}", input.roots.to_str_radix(16))); + leaves.push(format!("0x{}", input.leaves.to_str_radix(16))); in_path_indices.push(input.in_path_indices.clone().try_into().unwrap()); in_path_elements.push( input @@ -63,8 +63,8 @@ impl InclusionJsonStruct { } Self { - root: roots, - leaf: leaves, + roots, + leaves, inPathIndices: in_path_indices, inPathElements: in_path_elements, } diff --git a/circuit-lib/circuitlib-rs/src/inclusion/merkle_inclusion_proof_inputs.rs b/circuit-lib/circuitlib-rs/src/inclusion/merkle_inclusion_proof_inputs.rs index e3c541fa1f..baed14be8b 100644 --- a/circuit-lib/circuitlib-rs/src/inclusion/merkle_inclusion_proof_inputs.rs +++ b/circuit-lib/circuitlib-rs/src/inclusion/merkle_inclusion_proof_inputs.rs @@ -7,17 +7,17 @@ use crate::helpers::bigint_to_u8_32; #[derive(Clone, Debug)] pub struct InclusionMerkleProofInputs { - pub root: BigInt, - pub leaf: BigInt, + pub roots: BigInt, + pub leaves: BigInt, pub in_path_indices: BigInt, pub in_path_elements: Vec, } impl InclusionMerkleProofInputs { pub fn public_inputs_arr(&self) -> [[u8; 32]; 2] { - let root = bigint_to_u8_32(&self.root).unwrap(); - let leaf = bigint_to_u8_32(&self.leaf).unwrap(); - [root, leaf] + let roots = bigint_to_u8_32(&self.roots).unwrap(); + let leaves = bigint_to_u8_32(&self.leaves).unwrap(); + [roots, leaves] } } @@ -26,13 +26,13 @@ pub struct InclusionProofInputs<'a>(pub &'a [InclusionMerkleProofInputs]); impl InclusionProofInputs<'_> { pub fn public_inputs(&self) -> Vec<[u8; 32]> { let mut roots = Vec::new(); - let mut leafs = Vec::new(); + let mut leaves = Vec::new(); for input in self.0 { let input_arr = input.public_inputs_arr(); roots.push(input_arr[0]); - leafs.push(input_arr[1]); + leaves.push(input_arr[1]); } - [roots, leafs].concat() + [roots, leaves].concat() } } @@ -42,23 +42,23 @@ impl<'a> TryInto> for InclusionProofInputs<'a> { fn try_into(self) -> Result, Self::Error> { let mut inputs: HashMap = HashMap::new(); let mut roots: Vec = Vec::new(); - let mut leafs: Vec = Vec::new(); + let mut leaves: Vec = Vec::new(); let mut indices: Vec = Vec::new(); let mut els: Vec> = Vec::new(); for input in self.0 { - roots.push(input.root.clone()); - leafs.push(input.leaf.clone()); + roots.push(input.roots.clone()); + leaves.push(input.leaves.clone()); indices.push(input.in_path_indices.clone()); els.push(input.in_path_elements.clone()); } inputs - .entry("root".to_string()) + .entry("roots".to_string()) .or_insert_with(|| Inputs::BigIntVec(roots)); inputs - .entry("leaf".to_string()) - .or_insert_with(|| Inputs::BigIntVec(leafs)); + .entry("leaves".to_string()) + .or_insert_with(|| Inputs::BigIntVec(leaves)); inputs .entry("inPathIndices".to_string()) .or_insert_with(|| Inputs::BigIntVec(indices)); @@ -79,8 +79,8 @@ mod tests { #[test] fn test_conversion_to_hashmap() { let zero_input = InclusionMerkleProofInputs { - leaf: BigInt::zero(), - root: BigInt::zero(), + leaves: BigInt::zero(), + roots: BigInt::zero(), in_path_elements: vec![BigInt::zero()], in_path_indices: BigInt::zero(), }; diff --git a/circuit-lib/circuitlib-rs/src/init_merkle_tree.rs b/circuit-lib/circuitlib-rs/src/init_merkle_tree.rs index 3ef7df5f1b..1487d4341a 100644 --- a/circuit-lib/circuitlib-rs/src/init_merkle_tree.rs +++ b/circuit-lib/circuitlib-rs/src/init_merkle_tree.rs @@ -61,8 +61,8 @@ fn inclusion_merkle_tree_inputs_26() -> InclusionMerkleProofInputs { let in_path_indices = BigInt::zero(); InclusionMerkleProofInputs { - leaf: leaf_bn, - root: root_bn, + roots: root_bn, + leaves: leaf_bn, in_path_indices, in_path_elements, } diff --git a/circuit-lib/circuitlib-rs/src/verifying_keys/i_26_1/mod.rs b/circuit-lib/circuitlib-rs/src/verifying_keys/i_26_1/mod.rs index e7f114265b..1f86d357d2 100644 --- a/circuit-lib/circuitlib-rs/src/verifying_keys/i_26_1/mod.rs +++ b/circuit-lib/circuitlib-rs/src/verifying_keys/i_26_1/mod.rs @@ -31,13 +31,13 @@ pub const VERIFYINGKEY: Groth16Verifyingkey = Groth16Verifyingkey { ], vk_delta_g2: [ - 36, 66, 255, 97, 104, 255, 86, 172, 160, 53, 245, 239, 67, 240, 13, 220, 179, 240, 181, - 128, 243, 0, 64, 214, 42, 23, 75, 195, 138, 106, 169, 2, 12, 38, 89, 96, 206, 103, 67, 146, - 68, 105, 137, 76, 3, 139, 186, 70, 41, 165, 244, 193, 207, 24, 224, 191, 168, 208, 225, 80, - 88, 168, 33, 178, 36, 128, 164, 59, 150, 184, 121, 222, 54, 235, 221, 62, 245, 68, 9, 251, - 189, 213, 12, 195, 166, 195, 148, 116, 23, 244, 157, 254, 15, 150, 58, 98, 7, 179, 44, 183, - 41, 24, 166, 165, 28, 93, 176, 247, 108, 189, 174, 220, 208, 215, 9, 3, 206, 62, 142, 132, - 71, 129, 174, 160, 131, 103, 156, 176, + 47, 47, 203, 186, 64, 75, 72, 24, 240, 177, 216, 49, 193, 148, 200, 203, 48, 146, 171, 2, + 210, 104, 56, 23, 80, 26, 104, 171, 172, 107, 151, 129, 22, 70, 253, 144, 106, 238, 234, + 22, 250, 250, 93, 199, 93, 46, 254, 62, 189, 234, 124, 70, 245, 189, 50, 243, 117, 58, 81, + 107, 228, 121, 130, 89, 19, 184, 145, 107, 116, 133, 106, 105, 112, 176, 39, 253, 111, 192, + 236, 87, 46, 208, 41, 57, 102, 132, 108, 222, 211, 224, 94, 248, 142, 196, 128, 69, 28, + 177, 49, 160, 223, 62, 176, 7, 71, 188, 80, 16, 32, 176, 49, 159, 24, 124, 87, 217, 78, 98, + 236, 53, 124, 18, 189, 206, 112, 23, 192, 210, ], vk_ic: &[ diff --git a/circuit-lib/circuitlib-rs/src/verifying_keys/i_26_2/mod.rs b/circuit-lib/circuitlib-rs/src/verifying_keys/i_26_2/mod.rs index e067995090..44ae808a11 100644 --- a/circuit-lib/circuitlib-rs/src/verifying_keys/i_26_2/mod.rs +++ b/circuit-lib/circuitlib-rs/src/verifying_keys/i_26_2/mod.rs @@ -31,13 +31,13 @@ pub const VERIFYINGKEY: Groth16Verifyingkey = Groth16Verifyingkey { ], vk_delta_g2: [ - 28, 91, 90, 60, 112, 211, 18, 130, 79, 183, 192, 192, 86, 114, 33, 92, 255, 168, 34, 215, - 18, 131, 96, 103, 41, 214, 156, 14, 38, 25, 176, 104, 27, 100, 29, 249, 169, 211, 33, 87, - 104, 117, 122, 216, 158, 119, 250, 2, 126, 164, 126, 183, 147, 88, 97, 181, 187, 19, 103, - 85, 252, 49, 77, 174, 8, 225, 111, 88, 179, 65, 253, 71, 227, 155, 226, 56, 115, 150, 228, - 130, 34, 214, 223, 12, 24, 32, 180, 98, 166, 71, 213, 148, 191, 150, 53, 5, 19, 141, 192, - 18, 69, 203, 225, 115, 137, 250, 132, 86, 234, 207, 187, 13, 77, 93, 27, 166, 134, 113, - 152, 204, 221, 168, 224, 250, 247, 118, 153, 185, + 47, 227, 76, 114, 196, 38, 33, 159, 239, 45, 220, 128, 224, 250, 116, 117, 57, 7, 38, 81, + 6, 193, 106, 203, 67, 255, 124, 70, 70, 141, 27, 128, 13, 38, 11, 37, 82, 149, 156, 205, + 161, 113, 219, 15, 230, 116, 212, 207, 165, 2, 52, 27, 118, 20, 164, 90, 229, 58, 129, 135, + 224, 3, 221, 121, 29, 138, 184, 163, 118, 126, 126, 80, 161, 206, 6, 13, 225, 91, 96, 41, + 71, 66, 14, 25, 51, 71, 147, 164, 46, 155, 20, 167, 228, 120, 82, 194, 22, 52, 166, 53, + 108, 109, 102, 64, 179, 33, 53, 189, 149, 238, 106, 106, 113, 52, 217, 180, 135, 224, 60, + 52, 223, 6, 103, 116, 120, 235, 70, 221, ], vk_ic: &[ diff --git a/circuit-lib/circuitlib-rs/src/verifying_keys/i_26_3/mod.rs b/circuit-lib/circuitlib-rs/src/verifying_keys/i_26_3/mod.rs index 9402720eb4..be941cb740 100644 --- a/circuit-lib/circuitlib-rs/src/verifying_keys/i_26_3/mod.rs +++ b/circuit-lib/circuitlib-rs/src/verifying_keys/i_26_3/mod.rs @@ -31,13 +31,13 @@ pub const VERIFYINGKEY: Groth16Verifyingkey = Groth16Verifyingkey { ], vk_delta_g2: [ - 38, 37, 169, 244, 168, 1, 99, 14, 193, 127, 56, 131, 215, 66, 213, 239, 14, 202, 247, 104, - 222, 39, 13, 21, 221, 253, 173, 170, 126, 247, 124, 138, 32, 72, 122, 53, 127, 22, 97, 144, - 255, 29, 76, 255, 173, 218, 27, 252, 180, 58, 249, 18, 98, 225, 253, 159, 86, 230, 241, - 126, 170, 219, 58, 250, 43, 128, 91, 111, 130, 218, 191, 114, 137, 21, 186, 158, 175, 130, - 148, 206, 194, 121, 179, 227, 146, 159, 0, 129, 19, 199, 80, 111, 128, 74, 92, 240, 24, - 169, 43, 46, 207, 88, 247, 221, 112, 149, 79, 64, 127, 133, 42, 192, 183, 117, 249, 163, - 12, 78, 72, 53, 58, 136, 253, 28, 168, 29, 8, 30, + 25, 122, 203, 25, 101, 25, 61, 246, 158, 45, 87, 28, 51, 252, 177, 181, 169, 153, 60, 107, + 54, 166, 125, 174, 163, 130, 216, 253, 54, 157, 116, 150, 7, 52, 130, 221, 140, 110, 212, + 16, 161, 223, 106, 99, 12, 200, 203, 151, 111, 205, 173, 51, 128, 236, 133, 129, 246, 228, + 133, 118, 37, 123, 73, 132, 23, 117, 70, 90, 215, 33, 175, 191, 19, 198, 250, 97, 140, 66, + 26, 207, 92, 205, 107, 27, 58, 227, 102, 63, 192, 27, 108, 10, 94, 53, 218, 62, 22, 19, + 233, 92, 152, 250, 220, 192, 188, 145, 141, 213, 105, 51, 255, 218, 9, 218, 93, 45, 25, 46, + 209, 41, 56, 121, 128, 162, 125, 241, 49, 105, ], vk_ic: &[ diff --git a/circuit-lib/circuitlib-rs/src/verifying_keys/i_26_4/mod.rs b/circuit-lib/circuitlib-rs/src/verifying_keys/i_26_4/mod.rs index 72c7c834c4..d0171801c2 100644 --- a/circuit-lib/circuitlib-rs/src/verifying_keys/i_26_4/mod.rs +++ b/circuit-lib/circuitlib-rs/src/verifying_keys/i_26_4/mod.rs @@ -31,13 +31,13 @@ pub const VERIFYINGKEY: Groth16Verifyingkey = Groth16Verifyingkey { ], vk_delta_g2: [ - 10, 239, 216, 19, 244, 219, 73, 65, 245, 157, 194, 174, 162, 178, 185, 227, 21, 217, 253, - 203, 69, 161, 107, 173, 52, 231, 112, 149, 233, 135, 10, 61, 24, 249, 187, 177, 187, 208, - 118, 249, 79, 165, 219, 136, 54, 103, 75, 110, 72, 30, 20, 242, 179, 131, 68, 208, 122, 40, - 190, 170, 86, 226, 205, 58, 32, 143, 138, 89, 64, 70, 127, 186, 146, 33, 171, 239, 22, 174, - 195, 173, 26, 45, 253, 222, 88, 215, 89, 20, 99, 219, 173, 15, 47, 7, 170, 224, 1, 44, 171, - 34, 64, 69, 16, 181, 105, 79, 89, 12, 235, 247, 22, 144, 238, 59, 55, 127, 153, 37, 62, 74, - 130, 164, 20, 4, 113, 48, 245, 204, + 7, 13, 204, 181, 234, 193, 63, 20, 253, 50, 19, 170, 122, 115, 181, 142, 226, 184, 53, 231, + 190, 229, 130, 94, 59, 63, 165, 166, 232, 200, 94, 151, 13, 144, 177, 122, 51, 137, 34, + 225, 109, 76, 142, 33, 87, 48, 167, 52, 101, 221, 212, 226, 102, 102, 137, 220, 129, 246, + 8, 226, 221, 81, 37, 208, 6, 243, 111, 24, 31, 234, 51, 200, 73, 171, 50, 20, 110, 137, + 251, 158, 1, 91, 99, 62, 154, 73, 111, 149, 165, 110, 67, 112, 10, 144, 247, 155, 42, 55, + 250, 79, 102, 109, 83, 29, 184, 139, 140, 94, 122, 227, 82, 134, 53, 145, 26, 149, 200, + 236, 217, 167, 190, 199, 29, 31, 178, 15, 95, 52, ], vk_ic: &[ diff --git a/circuit-lib/circuitlib-rs/src/verifying_keys/i_26_8/mod.rs b/circuit-lib/circuitlib-rs/src/verifying_keys/i_26_8/mod.rs index d4b22bc618..4065728e30 100644 --- a/circuit-lib/circuitlib-rs/src/verifying_keys/i_26_8/mod.rs +++ b/circuit-lib/circuitlib-rs/src/verifying_keys/i_26_8/mod.rs @@ -31,13 +31,13 @@ pub const VERIFYINGKEY: Groth16Verifyingkey = Groth16Verifyingkey { ], vk_delta_g2: [ - 44, 138, 174, 99, 141, 159, 152, 24, 247, 249, 217, 149, 163, 228, 48, 24, 129, 198, 255, - 253, 193, 57, 252, 27, 158, 31, 103, 211, 113, 37, 95, 158, 27, 178, 64, 251, 223, 180, - 193, 204, 78, 86, 31, 156, 211, 65, 192, 27, 42, 247, 161, 211, 214, 210, 81, 78, 54, 89, - 24, 16, 61, 13, 133, 108, 43, 71, 176, 147, 103, 140, 87, 181, 67, 234, 241, 96, 100, 127, - 140, 188, 140, 79, 213, 242, 190, 122, 53, 89, 19, 149, 106, 243, 172, 251, 36, 58, 33, - 210, 172, 208, 46, 123, 27, 161, 150, 53, 153, 195, 136, 129, 108, 235, 85, 153, 9, 250, - 175, 32, 110, 228, 92, 32, 247, 185, 100, 117, 44, 170, + 38, 64, 170, 170, 131, 189, 246, 56, 6, 217, 77, 180, 0, 18, 226, 170, 9, 202, 49, 150, 68, + 226, 148, 30, 204, 232, 28, 47, 246, 184, 30, 136, 47, 186, 93, 158, 183, 30, 86, 236, 36, + 68, 164, 171, 204, 237, 70, 155, 57, 237, 46, 239, 179, 153, 220, 43, 99, 34, 210, 243, + 148, 18, 64, 231, 36, 53, 217, 237, 138, 186, 188, 6, 34, 218, 185, 146, 118, 69, 101, 48, + 253, 158, 74, 130, 94, 249, 80, 37, 155, 59, 172, 200, 219, 193, 149, 24, 24, 3, 188, 85, + 75, 164, 243, 182, 94, 246, 215, 38, 18, 132, 229, 108, 228, 112, 67, 8, 249, 167, 179, + 206, 145, 167, 91, 225, 100, 219, 76, 63, ], vk_ic: &[ diff --git a/circuit-lib/circuitlib-rs/src/verifying_keys/mod.rs b/circuit-lib/circuitlib-rs/src/verifying_keys/mod.rs index b0b54a01ab..0a377c2fe0 100644 --- a/circuit-lib/circuitlib-rs/src/verifying_keys/mod.rs +++ b/circuit-lib/circuitlib-rs/src/verifying_keys/mod.rs @@ -14,9 +14,3 @@ mod ni_26_1; pub use crate::verifying_keys::ni_26_1::VERIFYINGKEY as VK_ni_26_1; mod ni_26_2; pub use crate::verifying_keys::ni_26_2::VERIFYINGKEY as VK_ni_26_2; -mod ni_26_3; -pub use crate::verifying_keys::ni_26_3::VERIFYINGKEY as VK_ni_26_3; -mod ni_26_4; -pub use crate::verifying_keys::ni_26_4::VERIFYINGKEY as VK_ni_26_4; -mod ni_26_8; -pub use crate::verifying_keys::ni_26_8::VERIFYINGKEY as VK_ni_26_8; diff --git a/circuit-lib/circuitlib-rs/src/verifying_keys/ni_26_1/mod.rs b/circuit-lib/circuitlib-rs/src/verifying_keys/ni_26_1/mod.rs index a1e5337663..27e94b1a6b 100644 --- a/circuit-lib/circuitlib-rs/src/verifying_keys/ni_26_1/mod.rs +++ b/circuit-lib/circuitlib-rs/src/verifying_keys/ni_26_1/mod.rs @@ -31,13 +31,13 @@ pub const VERIFYINGKEY: Groth16Verifyingkey = Groth16Verifyingkey { ], vk_delta_g2: [ - 9, 112, 121, 8, 13, 41, 99, 52, 161, 125, 153, 212, 159, 69, 135, 252, 216, 149, 83, 187, - 190, 50, 80, 251, 92, 155, 252, 24, 34, 154, 149, 156, 12, 39, 163, 21, 24, 164, 28, 39, 1, - 49, 81, 221, 174, 174, 31, 9, 96, 209, 121, 84, 15, 98, 107, 24, 9, 180, 146, 101, 69, 140, - 19, 51, 29, 132, 210, 240, 238, 97, 1, 123, 110, 124, 123, 100, 83, 11, 244, 228, 7, 157, - 70, 158, 206, 146, 71, 96, 157, 215, 31, 176, 6, 174, 87, 54, 25, 9, 41, 6, 193, 123, 171, - 221, 187, 65, 17, 238, 133, 25, 161, 81, 251, 176, 189, 151, 76, 59, 55, 237, 108, 178, 60, - 235, 99, 68, 225, 189, + 36, 193, 161, 116, 185, 230, 1, 83, 32, 225, 156, 92, 93, 2, 89, 116, 132, 96, 83, 147, + 199, 33, 238, 159, 88, 9, 140, 69, 20, 196, 227, 102, 13, 112, 124, 241, 185, 27, 188, 67, + 184, 79, 124, 136, 23, 155, 223, 72, 139, 135, 115, 142, 142, 87, 160, 111, 7, 255, 36, + 132, 123, 46, 135, 138, 9, 172, 55, 98, 103, 78, 59, 180, 43, 208, 147, 36, 151, 129, 239, + 132, 137, 135, 75, 219, 129, 8, 99, 19, 148, 197, 248, 86, 106, 141, 235, 195, 14, 47, 241, + 127, 102, 249, 91, 98, 202, 81, 168, 26, 250, 251, 128, 123, 99, 126, 132, 225, 53, 42, + 199, 66, 35, 180, 242, 71, 231, 59, 104, 207, ], vk_ic: &[ diff --git a/circuit-lib/circuitlib-rs/src/verifying_keys/ni_26_2/mod.rs b/circuit-lib/circuitlib-rs/src/verifying_keys/ni_26_2/mod.rs index 01742c15cb..948ec4fc91 100644 --- a/circuit-lib/circuitlib-rs/src/verifying_keys/ni_26_2/mod.rs +++ b/circuit-lib/circuitlib-rs/src/verifying_keys/ni_26_2/mod.rs @@ -31,13 +31,13 @@ pub const VERIFYINGKEY: Groth16Verifyingkey = Groth16Verifyingkey { ], vk_delta_g2: [ - 8, 80, 188, 119, 233, 130, 55, 30, 83, 188, 44, 190, 213, 178, 167, 89, 164, 189, 54, 120, - 193, 136, 136, 145, 79, 185, 9, 251, 72, 26, 98, 227, 31, 148, 91, 82, 101, 24, 46, 42, - 237, 34, 102, 253, 51, 0, 237, 159, 154, 119, 108, 254, 85, 60, 3, 72, 183, 239, 22, 211, - 7, 190, 28, 111, 15, 36, 117, 124, 17, 98, 129, 90, 206, 27, 163, 240, 31, 179, 194, 234, - 126, 133, 93, 88, 170, 252, 72, 222, 8, 82, 181, 139, 85, 117, 101, 72, 11, 83, 225, 131, - 152, 209, 228, 113, 143, 122, 142, 98, 45, 117, 146, 39, 7, 123, 124, 76, 89, 80, 249, 102, - 49, 176, 128, 12, 255, 249, 143, 24, + 5, 97, 217, 5, 136, 166, 125, 128, 138, 2, 8, 41, 135, 129, 134, 80, 236, 163, 187, 2, 152, + 235, 119, 157, 2, 103, 138, 102, 16, 208, 77, 252, 28, 121, 16, 254, 177, 80, 165, 18, 222, + 235, 135, 194, 164, 55, 245, 221, 9, 172, 19, 41, 109, 140, 114, 245, 0, 171, 139, 97, 30, + 9, 105, 168, 15, 115, 60, 100, 144, 39, 74, 0, 79, 238, 170, 168, 146, 119, 0, 148, 122, + 144, 68, 107, 11, 163, 127, 155, 112, 7, 157, 142, 145, 88, 221, 237, 31, 52, 164, 169, 83, + 159, 246, 70, 7, 89, 123, 176, 172, 37, 221, 232, 12, 158, 148, 103, 70, 10, 235, 241, 72, + 122, 148, 8, 2, 2, 224, 83, ], vk_ic: &[ diff --git a/circuit-lib/circuitlib-rs/src/verifying_keys/ni_26_3/mod.rs b/circuit-lib/circuitlib-rs/src/verifying_keys/ni_26_3/mod.rs deleted file mode 100644 index c803f24cbb..0000000000 --- a/circuit-lib/circuitlib-rs/src/verifying_keys/ni_26_3/mod.rs +++ /dev/null @@ -1,87 +0,0 @@ -use groth16_solana::groth16::Groth16Verifyingkey; - -pub const VERIFYINGKEY: Groth16Verifyingkey = Groth16Verifyingkey { - nr_pubinputs: 7, - - vk_alpha_g1: [ - 45, 77, 154, 167, 227, 2, 217, 223, 65, 116, 157, 85, 7, 148, 157, 5, 219, 234, 51, 251, - 177, 108, 100, 59, 34, 245, 153, 162, 190, 109, 242, 226, 20, 190, 221, 80, 60, 55, 206, - 176, 97, 216, 236, 96, 32, 159, 227, 69, 206, 137, 131, 10, 25, 35, 3, 1, 240, 118, 202, - 255, 0, 77, 25, 38, - ], - - vk_beta_g2: [ - 9, 103, 3, 47, 203, 247, 118, 209, 175, 201, 133, 248, 136, 119, 241, 130, 211, 132, 128, - 166, 83, 242, 222, 202, 169, 121, 76, 188, 59, 243, 6, 12, 14, 24, 120, 71, 173, 76, 121, - 131, 116, 208, 214, 115, 43, 245, 1, 132, 125, 214, 139, 192, 224, 113, 36, 30, 2, 19, 188, - 127, 193, 61, 183, 171, 48, 76, 251, 209, 224, 138, 112, 74, 153, 245, 232, 71, 217, 63, - 140, 60, 170, 253, 222, 196, 107, 122, 13, 55, 157, 166, 154, 77, 17, 35, 70, 167, 23, 57, - 193, 177, 164, 87, 168, 199, 49, 49, 35, 210, 77, 47, 145, 146, 248, 150, 183, 198, 62, - 234, 5, 169, 213, 127, 6, 84, 122, 208, 206, 200, - ], - - vk_gamme_g2: [ - 25, 142, 147, 147, 146, 13, 72, 58, 114, 96, 191, 183, 49, 251, 93, 37, 241, 170, 73, 51, - 53, 169, 231, 18, 151, 228, 133, 183, 174, 243, 18, 194, 24, 0, 222, 239, 18, 31, 30, 118, - 66, 106, 0, 102, 94, 92, 68, 121, 103, 67, 34, 212, 247, 94, 218, 221, 70, 222, 189, 92, - 217, 146, 246, 237, 9, 6, 137, 208, 88, 95, 240, 117, 236, 158, 153, 173, 105, 12, 51, 149, - 188, 75, 49, 51, 112, 179, 142, 243, 85, 172, 218, 220, 209, 34, 151, 91, 18, 200, 94, 165, - 219, 140, 109, 235, 74, 171, 113, 128, 141, 203, 64, 143, 227, 209, 231, 105, 12, 67, 211, - 123, 76, 230, 204, 1, 102, 250, 125, 170, - ], - - vk_delta_g2: [ - 19, 67, 212, 2, 216, 125, 55, 219, 106, 25, 244, 78, 17, 154, 80, 137, 7, 94, 20, 129, 189, - 30, 153, 9, 181, 247, 7, 1, 175, 128, 107, 254, 35, 187, 214, 16, 100, 35, 221, 200, 197, - 212, 110, 90, 194, 63, 207, 162, 123, 68, 222, 124, 170, 60, 88, 99, 248, 92, 22, 4, 222, - 107, 155, 188, 7, 237, 158, 52, 51, 15, 103, 135, 5, 34, 129, 163, 204, 48, 39, 166, 234, - 125, 111, 162, 42, 94, 140, 213, 235, 98, 33, 122, 70, 43, 96, 238, 28, 172, 216, 52, 170, - 20, 88, 195, 23, 112, 69, 176, 41, 65, 31, 182, 222, 58, 186, 90, 59, 254, 201, 33, 67, - 117, 108, 168, 122, 169, 201, 244, - ], - - vk_ic: &[ - [ - 8, 231, 62, 36, 64, 78, 160, 70, 170, 59, 22, 113, 70, 18, 242, 71, 249, 67, 66, 197, - 126, 101, 156, 72, 194, 239, 132, 60, 247, 29, 228, 81, 9, 86, 186, 185, 239, 22, 37, - 40, 74, 109, 219, 222, 43, 4, 133, 96, 110, 232, 102, 231, 161, 135, 16, 188, 190, 150, - 69, 111, 176, 7, 28, 167, - ], - [ - 33, 153, 177, 58, 116, 5, 68, 96, 250, 183, 23, 26, 157, 141, 192, 110, 155, 123, 53, - 183, 20, 101, 217, 125, 63, 8, 166, 97, 37, 20, 124, 162, 24, 64, 55, 224, 77, 156, - 149, 54, 121, 5, 147, 135, 136, 74, 228, 222, 156, 229, 43, 74, 159, 80, 98, 8, 207, - 114, 252, 208, 213, 63, 81, 45, - ], - [ - 7, 122, 82, 52, 36, 103, 175, 231, 184, 13, 225, 203, 6, 108, 56, 182, 203, 221, 52, - 64, 221, 181, 248, 182, 233, 54, 196, 232, 140, 222, 68, 77, 37, 5, 166, 199, 170, 204, - 92, 154, 38, 221, 48, 87, 44, 96, 10, 69, 10, 20, 138, 8, 9, 38, 25, 37, 229, 218, 31, - 27, 211, 129, 164, 93, - ], - [ - 2, 152, 181, 251, 123, 99, 42, 211, 29, 64, 144, 6, 101, 197, 162, 247, 88, 76, 83, 18, - 27, 214, 195, 100, 69, 178, 72, 145, 189, 200, 19, 150, 0, 171, 204, 57, 155, 52, 225, - 49, 10, 7, 168, 0, 161, 178, 3, 71, 215, 82, 30, 43, 61, 100, 215, 214, 141, 33, 232, - 50, 138, 1, 89, 84, - ], - [ - 43, 150, 151, 188, 80, 40, 95, 72, 234, 232, 240, 133, 129, 130, 234, 161, 150, 154, - 241, 144, 191, 86, 70, 156, 3, 177, 105, 148, 60, 109, 59, 14, 39, 83, 5, 206, 231, - 204, 19, 29, 16, 160, 166, 165, 59, 102, 198, 131, 13, 5, 161, 197, 94, 139, 78, 127, - 238, 145, 240, 99, 109, 217, 44, 10, - ], - [ - 16, 207, 231, 176, 43, 227, 24, 190, 105, 48, 110, 122, 169, 66, 11, 26, 97, 93, 44, - 72, 199, 58, 254, 193, 209, 135, 18, 76, 247, 142, 117, 32, 9, 97, 60, 67, 30, 103, - 231, 159, 212, 11, 160, 235, 52, 67, 144, 144, 224, 207, 207, 243, 17, 115, 115, 63, - 47, 189, 113, 204, 242, 103, 249, 166, - ], - [ - 43, 61, 38, 61, 219, 153, 254, 100, 222, 94, 248, 232, 83, 38, 141, 17, 84, 18, 179, - 109, 95, 77, 253, 98, 22, 120, 27, 19, 3, 75, 150, 216, 44, 218, 52, 104, 252, 49, 15, - 125, 228, 74, 141, 134, 204, 168, 58, 87, 69, 221, 241, 76, 96, 214, 65, 241, 195, 35, - 7, 204, 214, 53, 18, 177, - ], - ], -}; diff --git a/circuit-lib/circuitlib-rs/src/verifying_keys/ni_26_4/mod.rs b/circuit-lib/circuitlib-rs/src/verifying_keys/ni_26_4/mod.rs deleted file mode 100644 index 676e706ebb..0000000000 --- a/circuit-lib/circuitlib-rs/src/verifying_keys/ni_26_4/mod.rs +++ /dev/null @@ -1,99 +0,0 @@ -use groth16_solana::groth16::Groth16Verifyingkey; - -pub const VERIFYINGKEY: Groth16Verifyingkey = Groth16Verifyingkey { - nr_pubinputs: 9, - - vk_alpha_g1: [ - 45, 77, 154, 167, 227, 2, 217, 223, 65, 116, 157, 85, 7, 148, 157, 5, 219, 234, 51, 251, - 177, 108, 100, 59, 34, 245, 153, 162, 190, 109, 242, 226, 20, 190, 221, 80, 60, 55, 206, - 176, 97, 216, 236, 96, 32, 159, 227, 69, 206, 137, 131, 10, 25, 35, 3, 1, 240, 118, 202, - 255, 0, 77, 25, 38, - ], - - vk_beta_g2: [ - 9, 103, 3, 47, 203, 247, 118, 209, 175, 201, 133, 248, 136, 119, 241, 130, 211, 132, 128, - 166, 83, 242, 222, 202, 169, 121, 76, 188, 59, 243, 6, 12, 14, 24, 120, 71, 173, 76, 121, - 131, 116, 208, 214, 115, 43, 245, 1, 132, 125, 214, 139, 192, 224, 113, 36, 30, 2, 19, 188, - 127, 193, 61, 183, 171, 48, 76, 251, 209, 224, 138, 112, 74, 153, 245, 232, 71, 217, 63, - 140, 60, 170, 253, 222, 196, 107, 122, 13, 55, 157, 166, 154, 77, 17, 35, 70, 167, 23, 57, - 193, 177, 164, 87, 168, 199, 49, 49, 35, 210, 77, 47, 145, 146, 248, 150, 183, 198, 62, - 234, 5, 169, 213, 127, 6, 84, 122, 208, 206, 200, - ], - - vk_gamme_g2: [ - 25, 142, 147, 147, 146, 13, 72, 58, 114, 96, 191, 183, 49, 251, 93, 37, 241, 170, 73, 51, - 53, 169, 231, 18, 151, 228, 133, 183, 174, 243, 18, 194, 24, 0, 222, 239, 18, 31, 30, 118, - 66, 106, 0, 102, 94, 92, 68, 121, 103, 67, 34, 212, 247, 94, 218, 221, 70, 222, 189, 92, - 217, 146, 246, 237, 9, 6, 137, 208, 88, 95, 240, 117, 236, 158, 153, 173, 105, 12, 51, 149, - 188, 75, 49, 51, 112, 179, 142, 243, 85, 172, 218, 220, 209, 34, 151, 91, 18, 200, 94, 165, - 219, 140, 109, 235, 74, 171, 113, 128, 141, 203, 64, 143, 227, 209, 231, 105, 12, 67, 211, - 123, 76, 230, 204, 1, 102, 250, 125, 170, - ], - - vk_delta_g2: [ - 10, 37, 112, 6, 255, 223, 131, 207, 228, 65, 121, 217, 20, 60, 183, 156, 3, 133, 71, 22, - 26, 24, 154, 84, 85, 191, 55, 124, 99, 161, 6, 18, 12, 182, 13, 127, 123, 153, 64, 189, - 212, 243, 22, 118, 159, 46, 195, 208, 222, 182, 236, 60, 250, 131, 97, 142, 192, 229, 130, - 98, 18, 47, 90, 84, 3, 101, 63, 110, 240, 139, 172, 87, 127, 245, 169, 138, 185, 62, 133, - 173, 225, 198, 39, 106, 87, 197, 15, 208, 6, 96, 146, 23, 22, 223, 82, 0, 46, 127, 116, - 140, 238, 9, 225, 239, 63, 233, 238, 175, 85, 124, 180, 227, 207, 57, 186, 186, 12, 87, 15, - 32, 225, 164, 114, 147, 237, 173, 7, 118, - ], - - vk_ic: &[ - [ - 22, 73, 169, 124, 24, 21, 4, 133, 34, 102, 228, 195, 95, 239, 117, 173, 34, 217, 68, - 20, 13, 72, 254, 62, 119, 133, 44, 87, 66, 28, 195, 106, 2, 7, 172, 120, 184, 239, 63, - 75, 229, 71, 159, 125, 174, 24, 35, 235, 118, 219, 175, 179, 218, 186, 185, 98, 63, 90, - 211, 113, 224, 70, 221, 143, - ], - [ - 15, 185, 182, 178, 190, 39, 242, 182, 68, 47, 27, 233, 89, 225, 134, 160, 79, 96, 254, - 94, 93, 8, 200, 211, 215, 31, 14, 240, 64, 235, 82, 181, 13, 48, 115, 1, 89, 212, 79, - 129, 226, 177, 63, 114, 252, 252, 9, 40, 25, 162, 60, 141, 97, 18, 36, 226, 207, 220, - 155, 20, 115, 232, 228, 171, - ], - [ - 12, 148, 24, 154, 161, 166, 207, 212, 255, 0, 180, 115, 200, 79, 210, 184, 81, 61, 165, - 61, 8, 126, 65, 255, 135, 194, 179, 162, 33, 214, 100, 141, 24, 249, 118, 246, 187, 84, - 234, 218, 140, 96, 173, 132, 241, 18, 184, 130, 137, 86, 68, 166, 243, 221, 207, 117, - 69, 213, 76, 226, 244, 18, 241, 15, - ], - [ - 30, 207, 170, 68, 146, 134, 112, 92, 237, 22, 194, 136, 207, 91, 143, 37, 9, 62, 38, - 195, 197, 4, 109, 158, 4, 182, 227, 234, 209, 92, 37, 24, 38, 171, 100, 129, 82, 106, - 59, 65, 205, 91, 236, 0, 191, 66, 152, 120, 245, 201, 215, 148, 17, 244, 0, 158, 155, - 229, 8, 106, 65, 55, 92, 102, - ], - [ - 36, 166, 214, 151, 47, 198, 147, 12, 77, 131, 34, 187, 197, 9, 25, 245, 109, 39, 149, - 151, 219, 30, 81, 85, 182, 72, 158, 201, 85, 137, 92, 138, 43, 71, 13, 250, 182, 4, - 202, 33, 249, 200, 54, 115, 15, 195, 26, 43, 208, 189, 183, 22, 2, 99, 9, 54, 47, 129, - 212, 49, 89, 33, 95, 231, - ], - [ - 19, 51, 166, 223, 174, 130, 103, 188, 131, 182, 159, 86, 124, 56, 50, 32, 224, 191, - 157, 28, 218, 113, 186, 68, 150, 12, 117, 180, 128, 142, 40, 105, 24, 77, 31, 245, 90, - 202, 242, 170, 128, 186, 127, 184, 115, 230, 105, 223, 62, 47, 104, 237, 87, 209, 125, - 216, 221, 159, 192, 148, 156, 42, 188, 198, - ], - [ - 34, 148, 36, 14, 201, 208, 105, 168, 128, 24, 182, 92, 32, 178, 151, 133, 88, 138, 236, - 134, 86, 185, 70, 230, 201, 93, 72, 43, 69, 198, 161, 51, 16, 60, 0, 235, 254, 245, 51, - 176, 53, 45, 44, 116, 142, 171, 19, 59, 225, 5, 90, 195, 115, 83, 102, 29, 211, 235, - 92, 161, 181, 41, 171, 130, - ], - [ - 14, 90, 130, 0, 43, 226, 86, 29, 252, 20, 195, 90, 136, 204, 35, 199, 97, 125, 200, 22, - 101, 64, 15, 55, 90, 9, 140, 142, 253, 102, 148, 232, 11, 101, 197, 194, 113, 142, 217, - 164, 83, 197, 166, 31, 229, 208, 58, 170, 209, 86, 203, 147, 95, 152, 65, 97, 133, 122, - 179, 104, 244, 1, 153, 57, - ], - [ - 37, 77, 91, 190, 238, 89, 172, 121, 155, 35, 78, 67, 128, 178, 55, 86, 222, 209, 49, - 61, 6, 186, 226, 25, 176, 241, 35, 132, 94, 155, 203, 202, 3, 21, 46, 139, 167, 102, - 143, 189, 157, 14, 90, 29, 165, 193, 230, 22, 228, 253, 91, 228, 95, 51, 38, 242, 106, - 162, 73, 30, 15, 186, 4, 48, - ], - ], -}; diff --git a/circuit-lib/circuitlib-rs/src/verifying_keys/ni_26_8/mod.rs b/circuit-lib/circuitlib-rs/src/verifying_keys/ni_26_8/mod.rs deleted file mode 100644 index 9cd2d0d85c..0000000000 --- a/circuit-lib/circuitlib-rs/src/verifying_keys/ni_26_8/mod.rs +++ /dev/null @@ -1,147 +0,0 @@ -use groth16_solana::groth16::Groth16Verifyingkey; - -pub const VERIFYINGKEY: Groth16Verifyingkey = Groth16Verifyingkey { - nr_pubinputs: 17, - - vk_alpha_g1: [ - 45, 77, 154, 167, 227, 2, 217, 223, 65, 116, 157, 85, 7, 148, 157, 5, 219, 234, 51, 251, - 177, 108, 100, 59, 34, 245, 153, 162, 190, 109, 242, 226, 20, 190, 221, 80, 60, 55, 206, - 176, 97, 216, 236, 96, 32, 159, 227, 69, 206, 137, 131, 10, 25, 35, 3, 1, 240, 118, 202, - 255, 0, 77, 25, 38, - ], - - vk_beta_g2: [ - 9, 103, 3, 47, 203, 247, 118, 209, 175, 201, 133, 248, 136, 119, 241, 130, 211, 132, 128, - 166, 83, 242, 222, 202, 169, 121, 76, 188, 59, 243, 6, 12, 14, 24, 120, 71, 173, 76, 121, - 131, 116, 208, 214, 115, 43, 245, 1, 132, 125, 214, 139, 192, 224, 113, 36, 30, 2, 19, 188, - 127, 193, 61, 183, 171, 48, 76, 251, 209, 224, 138, 112, 74, 153, 245, 232, 71, 217, 63, - 140, 60, 170, 253, 222, 196, 107, 122, 13, 55, 157, 166, 154, 77, 17, 35, 70, 167, 23, 57, - 193, 177, 164, 87, 168, 199, 49, 49, 35, 210, 77, 47, 145, 146, 248, 150, 183, 198, 62, - 234, 5, 169, 213, 127, 6, 84, 122, 208, 206, 200, - ], - - vk_gamme_g2: [ - 25, 142, 147, 147, 146, 13, 72, 58, 114, 96, 191, 183, 49, 251, 93, 37, 241, 170, 73, 51, - 53, 169, 231, 18, 151, 228, 133, 183, 174, 243, 18, 194, 24, 0, 222, 239, 18, 31, 30, 118, - 66, 106, 0, 102, 94, 92, 68, 121, 103, 67, 34, 212, 247, 94, 218, 221, 70, 222, 189, 92, - 217, 146, 246, 237, 9, 6, 137, 208, 88, 95, 240, 117, 236, 158, 153, 173, 105, 12, 51, 149, - 188, 75, 49, 51, 112, 179, 142, 243, 85, 172, 218, 220, 209, 34, 151, 91, 18, 200, 94, 165, - 219, 140, 109, 235, 74, 171, 113, 128, 141, 203, 64, 143, 227, 209, 231, 105, 12, 67, 211, - 123, 76, 230, 204, 1, 102, 250, 125, 170, - ], - - vk_delta_g2: [ - 20, 33, 251, 19, 120, 231, 109, 215, 201, 62, 48, 34, 127, 155, 16, 139, 14, 11, 218, 118, - 24, 62, 53, 243, 223, 108, 19, 246, 183, 68, 186, 216, 16, 73, 73, 33, 80, 88, 144, 24, 88, - 123, 193, 48, 39, 11, 81, 31, 118, 198, 83, 24, 189, 230, 6, 119, 232, 130, 210, 62, 225, - 232, 95, 251, 42, 246, 179, 215, 213, 7, 91, 213, 141, 65, 83, 2, 168, 201, 44, 39, 116, - 81, 46, 129, 52, 63, 95, 25, 232, 79, 205, 226, 166, 233, 102, 193, 27, 74, 102, 58, 7, - 100, 198, 195, 29, 148, 225, 128, 64, 149, 220, 44, 172, 159, 3, 54, 244, 4, 248, 116, 111, - 13, 140, 127, 34, 188, 160, 130, - ], - - vk_ic: &[ - [ - 3, 105, 232, 31, 185, 107, 81, 243, 111, 56, 0, 37, 232, 251, 207, 229, 163, 21, 73, 0, - 173, 101, 142, 3, 110, 132, 1, 52, 22, 80, 192, 33, 28, 32, 28, 78, 76, 162, 89, 52, - 103, 101, 251, 130, 79, 251, 240, 41, 246, 3, 25, 166, 109, 204, 255, 144, 84, 142, - 120, 177, 112, 12, 255, 52, - ], - [ - 7, 86, 92, 56, 238, 193, 82, 144, 237, 32, 90, 25, 27, 208, 100, 188, 243, 213, 87, - 204, 193, 182, 203, 111, 226, 21, 36, 130, 77, 104, 148, 247, 2, 226, 187, 213, 162, - 151, 203, 129, 133, 181, 146, 74, 58, 65, 36, 209, 230, 244, 218, 55, 187, 139, 37, - 184, 123, 142, 192, 157, 63, 67, 194, 252, - ], - [ - 0, 8, 122, 166, 217, 250, 240, 31, 118, 84, 122, 65, 31, 67, 201, 173, 93, 93, 66, 9, - 33, 141, 114, 231, 69, 167, 108, 17, 131, 250, 227, 209, 24, 210, 107, 204, 113, 12, - 173, 217, 38, 2, 35, 119, 126, 199, 229, 47, 177, 22, 3, 232, 59, 10, 177, 89, 189, 80, - 83, 112, 66, 140, 177, 58, - ], - [ - 2, 111, 228, 230, 77, 181, 178, 185, 57, 40, 27, 57, 242, 37, 74, 104, 251, 140, 38, - 177, 247, 232, 247, 87, 204, 42, 17, 156, 37, 79, 58, 252, 11, 82, 25, 96, 94, 113, 48, - 238, 118, 72, 164, 250, 166, 2, 195, 6, 242, 149, 133, 92, 55, 143, 148, 218, 62, 227, - 35, 94, 78, 90, 226, 191, - ], - [ - 5, 65, 185, 60, 163, 192, 22, 101, 56, 3, 16, 152, 143, 91, 148, 52, 228, 220, 124, - 179, 14, 168, 197, 185, 17, 251, 82, 202, 208, 134, 92, 116, 46, 90, 135, 49, 56, 152, - 230, 168, 58, 198, 33, 180, 101, 100, 194, 98, 56, 213, 135, 48, 239, 237, 163, 95, 37, - 5, 91, 145, 35, 152, 142, 193, - ], - [ - 11, 151, 252, 167, 25, 67, 34, 243, 147, 252, 110, 228, 232, 23, 251, 66, 3, 248, 176, - 25, 238, 221, 113, 16, 114, 118, 147, 78, 25, 109, 85, 0, 44, 125, 129, 173, 236, 85, - 99, 26, 162, 43, 167, 10, 95, 190, 191, 208, 160, 144, 28, 164, 69, 152, 124, 236, 162, - 143, 237, 143, 66, 162, 32, 177, - ], - [ - 0, 192, 122, 191, 5, 15, 124, 201, 140, 17, 76, 211, 123, 99, 101, 190, 130, 94, 17, - 183, 94, 188, 238, 188, 117, 111, 86, 36, 45, 105, 131, 121, 13, 24, 227, 207, 155, - 156, 71, 80, 18, 125, 64, 52, 149, 142, 158, 109, 193, 242, 9, 180, 78, 102, 116, 65, - 206, 159, 88, 58, 39, 90, 89, 63, - ], - [ - 2, 99, 19, 204, 160, 201, 165, 0, 63, 239, 34, 94, 86, 180, 222, 52, 71, 126, 101, 167, - 111, 68, 101, 112, 25, 142, 115, 48, 206, 200, 228, 162, 15, 47, 86, 250, 43, 43, 74, - 82, 94, 177, 144, 144, 156, 35, 123, 226, 111, 36, 226, 85, 142, 91, 40, 148, 192, 249, - 146, 154, 35, 239, 215, 218, - ], - [ - 20, 136, 158, 33, 130, 163, 235, 120, 155, 27, 26, 0, 103, 249, 34, 68, 183, 21, 233, - 197, 198, 111, 40, 21, 180, 11, 17, 175, 250, 153, 183, 136, 20, 50, 159, 83, 132, 179, - 162, 177, 87, 65, 234, 61, 43, 64, 150, 7, 60, 85, 216, 194, 147, 179, 197, 71, 33, - 238, 109, 211, 5, 23, 218, 225, - ], - [ - 31, 81, 233, 107, 52, 230, 176, 30, 196, 115, 32, 193, 207, 243, 208, 168, 77, 91, 210, - 96, 82, 214, 131, 251, 131, 49, 80, 6, 204, 134, 68, 177, 0, 95, 24, 130, 22, 96, 46, - 246, 151, 81, 153, 254, 75, 234, 234, 53, 222, 132, 193, 170, 24, 160, 140, 242, 139, - 212, 157, 82, 127, 69, 213, 164, - ], - [ - 43, 255, 46, 253, 138, 77, 135, 92, 194, 98, 131, 228, 20, 98, 216, 163, 62, 171, 97, - 93, 252, 101, 98, 216, 105, 234, 52, 106, 66, 179, 56, 35, 2, 28, 44, 99, 89, 150, 82, - 193, 190, 137, 228, 65, 99, 135, 100, 155, 197, 185, 196, 140, 251, 198, 29, 232, 238, - 200, 134, 154, 177, 201, 30, 117, - ], - [ - 32, 72, 90, 247, 143, 58, 83, 189, 214, 216, 193, 231, 193, 105, 27, 138, 126, 19, 188, - 140, 185, 126, 63, 49, 58, 233, 112, 196, 226, 1, 56, 136, 12, 147, 21, 195, 135, 38, - 216, 149, 42, 129, 41, 7, 252, 215, 196, 194, 202, 38, 190, 92, 81, 223, 61, 156, 234, - 102, 244, 17, 189, 158, 90, 165, - ], - [ - 34, 80, 4, 246, 167, 206, 147, 8, 11, 134, 56, 178, 71, 180, 121, 151, 102, 239, 161, - 76, 251, 3, 190, 40, 168, 61, 91, 135, 242, 244, 121, 95, 3, 112, 174, 147, 25, 184, - 50, 126, 232, 12, 74, 163, 16, 246, 86, 213, 116, 163, 23, 102, 154, 202, 175, 59, 189, - 208, 135, 38, 220, 231, 91, 99, - ], - [ - 45, 154, 18, 94, 70, 174, 4, 129, 9, 212, 74, 84, 17, 40, 46, 36, 60, 95, 147, 139, - 135, 239, 148, 120, 180, 166, 208, 13, 180, 199, 175, 21, 29, 50, 4, 72, 213, 0, 26, - 154, 156, 101, 200, 58, 153, 149, 110, 2, 238, 155, 43, 163, 105, 46, 175, 111, 31, 14, - 7, 16, 76, 80, 183, 60, - ], - [ - 3, 192, 78, 59, 194, 119, 223, 225, 144, 30, 150, 25, 182, 61, 111, 4, 137, 112, 234, - 103, 113, 185, 7, 49, 166, 214, 93, 195, 143, 236, 164, 110, 29, 175, 170, 53, 238, - 240, 124, 211, 138, 173, 98, 137, 110, 171, 146, 201, 107, 99, 71, 145, 218, 142, 100, - 87, 193, 128, 96, 154, 85, 119, 149, 247, - ], - [ - 20, 167, 162, 7, 235, 83, 30, 78, 19, 73, 243, 11, 82, 50, 246, 22, 50, 55, 74, 168, - 222, 155, 14, 234, 41, 222, 200, 158, 166, 34, 116, 172, 26, 132, 38, 124, 114, 249, - 11, 164, 234, 207, 145, 155, 54, 172, 233, 67, 52, 164, 255, 122, 134, 119, 163, 173, - 165, 154, 216, 143, 217, 234, 175, 177, - ], - [ - 24, 56, 208, 210, 249, 115, 43, 57, 64, 91, 240, 169, 99, 110, 23, 24, 246, 250, 242, - 250, 191, 9, 131, 72, 148, 254, 118, 219, 206, 57, 108, 3, 19, 205, 117, 135, 236, 12, - 31, 233, 129, 167, 25, 160, 251, 67, 220, 118, 168, 199, 30, 184, 4, 131, 147, 157, - 140, 225, 90, 56, 181, 15, 158, 14, - ], - ], -}; diff --git a/circuit-lib/circuitlib-rs/tests/gnark.rs b/circuit-lib/circuitlib-rs/tests/gnark.rs index f50c6ba22d..852dcd8c12 100644 --- a/circuit-lib/circuitlib-rs/tests/gnark.rs +++ b/circuit-lib/circuitlib-rs/tests/gnark.rs @@ -1,7 +1,7 @@ use circuitlib_rs::{ gnark::{ constants::{INCLUSION_PATH, SERVER_ADDRESS}, - helpers::{health_check, kill_gnark_server, spawn_gnark_server}, + helpers::{kill_gnark_server, spawn_gnark_server, ProofType}, inclusion_json_formatter::inclusion_inputs_string, }, helpers::init_logger, @@ -11,8 +11,7 @@ use reqwest::Client; #[tokio::test] async fn prove_inclusion() { init_logger(); - let mut gnark = spawn_gnark_server("scripts/prover.sh", 5); - health_check().await; + spawn_gnark_server("scripts/prover.sh", true, ProofType::Inclusion).await; let client = Client::new(); for number_of_utxos in &[1, 2, 3, 4, 8] { let (inputs, _) = inclusion_inputs_string(*number_of_utxos as usize); @@ -26,5 +25,5 @@ async fn prove_inclusion() { .expect("Failed to execute request."); assert!(response_result.status().is_success()); } - kill_gnark_server(&mut gnark); + kill_gnark_server(); } diff --git a/cli/package.json b/cli/package.json index e8e6858e92..1c5713ec2c 100644 --- a/cli/package.json +++ b/cli/package.json @@ -96,9 +96,11 @@ "test-mint-to": "mocha ./test/commands/mint-to/index.test.ts -t 10000000 --exit", "test-transfer": "mocha ./test/commands/transfer/index.test.ts -t 10000000 --exit", "test-balance": "mocha ./test/commands/balance/index.test.ts -t 10000000 --exit", + "test-compress-sol": "mocha ./test/commands/compress-sol/index.test.ts -t 10000000 --exit", + "test-decompress-sol": "mocha ./test/commands/decompress-sol/index.test.ts -t 10000000 --exit", "kill": "killall solana-test-validator || true && killall solana-test-val || true && sleep 1", "test-cli": "pnpm test-config && pnpm kill", - "test": "pnpm kill && pnpm test-cli && pnpm test-utils && pnpm test-create-mint && pnpm test-mint-to && pnpm test-transfer && pnpm test-balance", + "test": "pnpm kill && pnpm test-cli && pnpm test-utils && pnpm test-create-mint && pnpm test-mint-to && pnpm test-transfer && pnpm test-balance && pnpm test-compress-sol && pnpm test-decompress-sol", "install-local": "pnpm build && pnpm global remove @lightprotocol/cli || true && pnpm global add $PWD", "version": "oclif readme && git add README.md" }, diff --git a/cli/src/commands/compress-sol/index.ts b/cli/src/commands/compress-sol/index.ts new file mode 100644 index 0000000000..573833e3d1 --- /dev/null +++ b/cli/src/commands/compress-sol/index.ts @@ -0,0 +1,63 @@ +import { Command, Flags } from "@oclif/core"; +import { + CustomLoader, + defaultSolanaWalletKeypair, + generateSolanaTransactionURL, + getSolanaRpcUrl, +} from "../../utils/utils"; +import { Connection, PublicKey, LAMPORTS_PER_SOL } from "@solana/web3.js"; +import { Rpc, compressLamports, getTestRpc } from "@lightprotocol/stateless.js"; + +class MintToCommand extends Command { + static summary = "Compress SOL."; + + static examples = ["$ light compress-sol --to PublicKey --amount 10"]; + + static flags = { + to: Flags.string({ + description: "Specify the recipient address.", + required: true, + }), + amount: Flags.integer({ + description: "Amount to mint, in SOL.", + required: true, + }), + }; + + static args = {}; + + async run() { + const { flags } = await this.parse(MintToCommand); + const to = flags["to"]; + const amount = flags["amount"]; + if (!to || !amount) { + throw new Error("Invalid arguments"); + } + + const loader = new CustomLoader(`Performing compress-sol...\n`); + loader.start(); + + try { + const toPublicKey = new PublicKey(to); + const payer = defaultSolanaWalletKeypair(); + + const rpc = await getTestRpc(getSolanaRpcUrl()); + const txId = await compressLamports( + rpc, + payer, + amount * LAMPORTS_PER_SOL, + toPublicKey, + ); + loader.stop(false); + console.log( + "\x1b[compress-sol:\x1b[0m ", + generateSolanaTransactionURL("tx", txId, "custom"), + ); + console.log("compress-sol successful"); + } catch (error) { + this.error(`Failed to compress-sol!\n${error}`); + } + } +} + +export default MintToCommand; diff --git a/cli/src/commands/decompress-sol/index.ts b/cli/src/commands/decompress-sol/index.ts new file mode 100644 index 0000000000..468db7a5d7 --- /dev/null +++ b/cli/src/commands/decompress-sol/index.ts @@ -0,0 +1,67 @@ +import { Command, Flags } from "@oclif/core"; +import { + CustomLoader, + defaultSolanaWalletKeypair, + generateSolanaTransactionURL, + getSolanaRpcUrl, +} from "../../utils/utils"; +import { Connection, PublicKey, LAMPORTS_PER_SOL } from "@solana/web3.js"; +import { + Rpc, + decompressLamports, + getTestRpc, +} from "@lightprotocol/stateless.js"; + +class MintToCommand extends Command { + static summary = "Decompress SOL."; + + static examples = ["$ light decompress-sol --to PublicKey --amount 10"]; + + static flags = { + to: Flags.string({ + description: "Specify the recipient address.", + required: true, + }), + amount: Flags.integer({ + description: "Amount to mint, in SOL.", + required: true, + }), + }; + + static args = {}; + + async run() { + const { flags } = await this.parse(MintToCommand); + const to = flags["to"]; + const amount = flags["amount"]; + if (!to || !amount) { + throw new Error("Invalid arguments"); + } + + const loader = new CustomLoader(`Performing compress-sol...\n`); + loader.start(); + + try { + const toPublicKey = new PublicKey(to); + const payer = defaultSolanaWalletKeypair(); + + const rpc = await getTestRpc(getSolanaRpcUrl()); + const txId = await decompressLamports( + rpc, + payer, + amount * LAMPORTS_PER_SOL, + toPublicKey, + ); + loader.stop(false); + console.log( + "\x1b[decompress-sol:\x1b[0m ", + generateSolanaTransactionURL("tx", txId, "custom"), + ); + console.log("decompress-sol successful"); + } catch (error) { + this.error(`Failed to decompress-sol!\n${error}`); + } + } +} + +export default MintToCommand; diff --git a/cli/src/commands/prove/index.ts b/cli/src/commands/prove/index.ts index fbf1a3806b..2f733c48e4 100644 --- a/cli/src/commands/prove/index.ts +++ b/cli/src/commands/prove/index.ts @@ -5,10 +5,10 @@ import { provingArgs } from "../../utils/proverUtils"; class ProveCommand extends Command { static examples = [ - `$ light prove -i '{"root":["0x1ebf5c4eb04bf878b46937be63d12308bb14841813441f041812ea54ecb7b2d5"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d","0x2fa5e5f18f6027a6501bec864564472a616b2e274a41211a444cbe3a99f3cc61","0xe884376d0d8fd21ecb780389e941f66e45e7acce3e228ab3e2156a614fcd747","0x1b7201da72494f1e28717ad1a52eb469f95892f957713533de6175e5da190af2","0x1f8d8822725e36385200c0b201249819a6e6e1e4650808b5bebc6bface7d7636","0x2c5d82f66c914bafb9701589ba8cfcfb6162b0a12acf88a8d0879a0471b5f85a","0x14c54148a0940bb820957f5adf3fa1134ef5c4aaa113f4646458f270e0bfbfd0","0x190d33b12f986f961e10c0ee44d8b9af11be25588cad89d416118e4bf4ebe80c","0x22f98aa9ce704152ac17354914ad73ed1167ae6596af510aa5b3649325e06c92","0x2a7c7c9b6ce5880b9f6f228d72bf6a575a526f29c66ecceef8b753d38bba7323","0x2e8186e558698ec1c67af9c14d463ffc470043c9c2988b954d75dd643f36b992","0xf57c5571e9a4eab49e2c8cf050dae948aef6ead647392273546249d1c1ff10f","0x1830ee67b5fb554ad5f63d4388800e1cfe78e310697d46e43c9ce36134f72cca","0x2134e76ac5d21aab186c2be1dd8f84ee880a1e46eaf712f9d371b6df22191f3e","0x19df90ec844ebc4ffeebd866f33859b0c051d8c958ee3aa88f8f8df3db91a5b1","0x18cca2a66b5c0787981e69aefd84852d74af0e93ef4912b4648c05f722efe52b","0x2388909415230d1b4d1304d2d54f473a628338f2efad83fadf05644549d2538d","0x27171fb4a97b6cc0e9e8f543b5294de866a2af2c9c8d0b1d96e673e4529ed540","0x2ff6650540f629fd5711a0bc74fc0d28dcb230b9392583e5f8d59696dde6ae21"]],"leaf":["0x29176100eaa962bdc1fe6c654d6a3c130e96a4d1168b33848b897dc502820133"]}'`, + `$ light prove -i '{"roots":["0x1ebf5c4eb04bf878b46937be63d12308bb14841813441f041812ea54ecb7b2d5"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d","0x2fa5e5f18f6027a6501bec864564472a616b2e274a41211a444cbe3a99f3cc61","0xe884376d0d8fd21ecb780389e941f66e45e7acce3e228ab3e2156a614fcd747","0x1b7201da72494f1e28717ad1a52eb469f95892f957713533de6175e5da190af2","0x1f8d8822725e36385200c0b201249819a6e6e1e4650808b5bebc6bface7d7636","0x2c5d82f66c914bafb9701589ba8cfcfb6162b0a12acf88a8d0879a0471b5f85a","0x14c54148a0940bb820957f5adf3fa1134ef5c4aaa113f4646458f270e0bfbfd0","0x190d33b12f986f961e10c0ee44d8b9af11be25588cad89d416118e4bf4ebe80c","0x22f98aa9ce704152ac17354914ad73ed1167ae6596af510aa5b3649325e06c92","0x2a7c7c9b6ce5880b9f6f228d72bf6a575a526f29c66ecceef8b753d38bba7323","0x2e8186e558698ec1c67af9c14d463ffc470043c9c2988b954d75dd643f36b992","0xf57c5571e9a4eab49e2c8cf050dae948aef6ead647392273546249d1c1ff10f","0x1830ee67b5fb554ad5f63d4388800e1cfe78e310697d46e43c9ce36134f72cca","0x2134e76ac5d21aab186c2be1dd8f84ee880a1e46eaf712f9d371b6df22191f3e","0x19df90ec844ebc4ffeebd866f33859b0c051d8c958ee3aa88f8f8df3db91a5b1","0x18cca2a66b5c0787981e69aefd84852d74af0e93ef4912b4648c05f722efe52b","0x2388909415230d1b4d1304d2d54f473a628338f2efad83fadf05644549d2538d","0x27171fb4a97b6cc0e9e8f543b5294de866a2af2c9c8d0b1d96e673e4529ed540","0x2ff6650540f629fd5711a0bc74fc0d28dcb230b9392583e5f8d59696dde6ae21"]],"leaves":["0x29176100eaa962bdc1fe6c654d6a3c130e96a4d1168b33848b897dc502820133"]}'`, ]; - static description = "Make a proof of inclusion of a leaf in a Merkle tree."; + static description = "Make a proof of inclusion for a leaf in a Merkle tree."; static flags = { inputs: Flags.string({ diff --git a/cli/test/commands/compress-sol/index.test.ts b/cli/test/commands/compress-sol/index.test.ts new file mode 100644 index 0000000000..4967f1a518 --- /dev/null +++ b/cli/test/commands/compress-sol/index.test.ts @@ -0,0 +1,22 @@ +import { expect, test } from "@oclif/test"; +import { initTestEnvIfNeeded } from "../../../src/utils/initTestEnv"; +import { defaultSolanaWalletKeypair } from "../../../src"; +import { Keypair } from "@solana/web3.js"; +import { requestAirdrop } from "../../helpers/helpers"; + +describe("compress-sol", () => { + test.it(async () => { + await initTestEnvIfNeeded(); + const keypair = defaultSolanaWalletKeypair() || Keypair.generate(); + await requestAirdrop(keypair.publicKey); + const to = keypair.publicKey.toBase58(); + const amount = 0.5; + + return test + .stdout() + .command(["compress-sol", `--amount=${amount}`, `--to=${to}`]) + .it(`compress-sol ${amount} SOL to ${to}`, (ctx: any) => { + expect(ctx.stdout).to.contain("mint-to successful"); + }); + }); +}); diff --git a/cli/test/commands/decompress-sol/index.test.ts b/cli/test/commands/decompress-sol/index.test.ts new file mode 100644 index 0000000000..573c3e5fb1 --- /dev/null +++ b/cli/test/commands/decompress-sol/index.test.ts @@ -0,0 +1,24 @@ +import { expect, test } from "@oclif/test"; +import { initTestEnvIfNeeded } from "../../../src/utils/initTestEnv"; +import { defaultSolanaWalletKeypair, getSolanaRpcUrl } from "../../../src"; +import { Keypair } from "@solana/web3.js"; +import { requestAirdrop } from "../../helpers/helpers"; +import { getTestRpc } from "@lightprotocol/stateless.js"; + +describe("decompress-sol", () => { + test.it(async () => { + await initTestEnvIfNeeded(); + const keypair = defaultSolanaWalletKeypair() || Keypair.generate(); + await requestAirdrop(keypair.publicKey); + const to = keypair.publicKey.toBase58(); + const amount = 0.5; + const rpc = await getTestRpc(getSolanaRpcUrl()); + return test + .stdout() + .command(["compress-sol", `--amount=${amount}`, `--to=${to}`]) + .command(["decompress-sol", `--amount=${amount}`, `--to=${to}`]) + .it(`decompress-sol ${amount} SOL to ${to}`, (ctx: any) => { + expect(ctx.stdout).to.contain("decompress-sol successful"); + }); + }); +}); diff --git a/cli/test/commands/prove/index.test.ts b/cli/test/commands/prove/index.test.ts index e7f81bcb0a..9304412c16 100644 --- a/cli/test/commands/prove/index.test.ts +++ b/cli/test/commands/prove/index.test.ts @@ -3,11 +3,11 @@ import { initTestEnvIfNeeded } from "../../../src/utils/initTestEnv"; describe("prove", () => { const correctInputs = - '{"root":["0x1ebf5c4eb04bf878b46937be63d12308bb14841813441f041812ea54ecb7b2d5"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d","0x2fa5e5f18f6027a6501bec864564472a616b2e274a41211a444cbe3a99f3cc61","0xe884376d0d8fd21ecb780389e941f66e45e7acce3e228ab3e2156a614fcd747","0x1b7201da72494f1e28717ad1a52eb469f95892f957713533de6175e5da190af2","0x1f8d8822725e36385200c0b201249819a6e6e1e4650808b5bebc6bface7d7636","0x2c5d82f66c914bafb9701589ba8cfcfb6162b0a12acf88a8d0879a0471b5f85a","0x14c54148a0940bb820957f5adf3fa1134ef5c4aaa113f4646458f270e0bfbfd0","0x190d33b12f986f961e10c0ee44d8b9af11be25588cad89d416118e4bf4ebe80c","0x22f98aa9ce704152ac17354914ad73ed1167ae6596af510aa5b3649325e06c92","0x2a7c7c9b6ce5880b9f6f228d72bf6a575a526f29c66ecceef8b753d38bba7323","0x2e8186e558698ec1c67af9c14d463ffc470043c9c2988b954d75dd643f36b992","0xf57c5571e9a4eab49e2c8cf050dae948aef6ead647392273546249d1c1ff10f","0x1830ee67b5fb554ad5f63d4388800e1cfe78e310697d46e43c9ce36134f72cca","0x2134e76ac5d21aab186c2be1dd8f84ee880a1e46eaf712f9d371b6df22191f3e","0x19df90ec844ebc4ffeebd866f33859b0c051d8c958ee3aa88f8f8df3db91a5b1","0x18cca2a66b5c0787981e69aefd84852d74af0e93ef4912b4648c05f722efe52b","0x2388909415230d1b4d1304d2d54f473a628338f2efad83fadf05644549d2538d","0x27171fb4a97b6cc0e9e8f543b5294de866a2af2c9c8d0b1d96e673e4529ed540","0x2ff6650540f629fd5711a0bc74fc0d28dcb230b9392583e5f8d59696dde6ae21"]],"leaf":["0x29176100eaa962bdc1fe6c654d6a3c130e96a4d1168b33848b897dc502820133"]}'; + '{"roots":["0x1ebf5c4eb04bf878b46937be63d12308bb14841813441f041812ea54ecb7b2d5"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d","0x2fa5e5f18f6027a6501bec864564472a616b2e274a41211a444cbe3a99f3cc61","0xe884376d0d8fd21ecb780389e941f66e45e7acce3e228ab3e2156a614fcd747","0x1b7201da72494f1e28717ad1a52eb469f95892f957713533de6175e5da190af2","0x1f8d8822725e36385200c0b201249819a6e6e1e4650808b5bebc6bface7d7636","0x2c5d82f66c914bafb9701589ba8cfcfb6162b0a12acf88a8d0879a0471b5f85a","0x14c54148a0940bb820957f5adf3fa1134ef5c4aaa113f4646458f270e0bfbfd0","0x190d33b12f986f961e10c0ee44d8b9af11be25588cad89d416118e4bf4ebe80c","0x22f98aa9ce704152ac17354914ad73ed1167ae6596af510aa5b3649325e06c92","0x2a7c7c9b6ce5880b9f6f228d72bf6a575a526f29c66ecceef8b753d38bba7323","0x2e8186e558698ec1c67af9c14d463ffc470043c9c2988b954d75dd643f36b992","0xf57c5571e9a4eab49e2c8cf050dae948aef6ead647392273546249d1c1ff10f","0x1830ee67b5fb554ad5f63d4388800e1cfe78e310697d46e43c9ce36134f72cca","0x2134e76ac5d21aab186c2be1dd8f84ee880a1e46eaf712f9d371b6df22191f3e","0x19df90ec844ebc4ffeebd866f33859b0c051d8c958ee3aa88f8f8df3db91a5b1","0x18cca2a66b5c0787981e69aefd84852d74af0e93ef4912b4648c05f722efe52b","0x2388909415230d1b4d1304d2d54f473a628338f2efad83fadf05644549d2538d","0x27171fb4a97b6cc0e9e8f543b5294de866a2af2c9c8d0b1d96e673e4529ed540","0x2ff6650540f629fd5711a0bc74fc0d28dcb230b9392583e5f8d59696dde6ae21"]],"leaves":["0x29176100eaa962bdc1fe6c654d6a3c130e96a4d1168b33848b897dc502820133"]}'; const invalidInputs = - '{"root":["0x0"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d","0x2fa5e5f18f6027a6501bec864564472a616b2e274a41211a444cbe3a99f3cc61","0xe884376d0d8fd21ecb780389e941f66e45e7acce3e228ab3e2156a614fcd747","0x1b7201da72494f1e28717ad1a52eb469f95892f957713533de6175e5da190af2","0x1f8d8822725e36385200c0b201249819a6e6e1e4650808b5bebc6bface7d7636","0x2c5d82f66c914bafb9701589ba8cfcfb6162b0a12acf88a8d0879a0471b5f85a","0x14c54148a0940bb820957f5adf3fa1134ef5c4aaa113f4646458f270e0bfbfd0","0x190d33b12f986f961e10c0ee44d8b9af11be25588cad89d416118e4bf4ebe80c","0x22f98aa9ce704152ac17354914ad73ed1167ae6596af510aa5b3649325e06c92","0x2a7c7c9b6ce5880b9f6f228d72bf6a575a526f29c66ecceef8b753d38bba7323","0x2e8186e558698ec1c67af9c14d463ffc470043c9c2988b954d75dd643f36b992","0xf57c5571e9a4eab49e2c8cf050dae948aef6ead647392273546249d1c1ff10f","0x1830ee67b5fb554ad5f63d4388800e1cfe78e310697d46e43c9ce36134f72cca","0x2134e76ac5d21aab186c2be1dd8f84ee880a1e46eaf712f9d371b6df22191f3e","0x19df90ec844ebc4ffeebd866f33859b0c051d8c958ee3aa88f8f8df3db91a5b1","0x18cca2a66b5c0787981e69aefd84852d74af0e93ef4912b4648c05f722efe52b","0x2388909415230d1b4d1304d2d54f473a628338f2efad83fadf05644549d2538d","0x27171fb4a97b6cc0e9e8f543b5294de866a2af2c9c8d0b1d96e673e4529ed540","0x2ff6650540f629fd5711a0bc74fc0d28dcb230b9392583e5f8d59696dde6ae21"]],"leaf":["0x29176100eaa962bdc1fe6c654d6a3c130e96a4d1168b33848b897dc502820133"]}'; + '{"roots":["0x0"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d","0x2fa5e5f18f6027a6501bec864564472a616b2e274a41211a444cbe3a99f3cc61","0xe884376d0d8fd21ecb780389e941f66e45e7acce3e228ab3e2156a614fcd747","0x1b7201da72494f1e28717ad1a52eb469f95892f957713533de6175e5da190af2","0x1f8d8822725e36385200c0b201249819a6e6e1e4650808b5bebc6bface7d7636","0x2c5d82f66c914bafb9701589ba8cfcfb6162b0a12acf88a8d0879a0471b5f85a","0x14c54148a0940bb820957f5adf3fa1134ef5c4aaa113f4646458f270e0bfbfd0","0x190d33b12f986f961e10c0ee44d8b9af11be25588cad89d416118e4bf4ebe80c","0x22f98aa9ce704152ac17354914ad73ed1167ae6596af510aa5b3649325e06c92","0x2a7c7c9b6ce5880b9f6f228d72bf6a575a526f29c66ecceef8b753d38bba7323","0x2e8186e558698ec1c67af9c14d463ffc470043c9c2988b954d75dd643f36b992","0xf57c5571e9a4eab49e2c8cf050dae948aef6ead647392273546249d1c1ff10f","0x1830ee67b5fb554ad5f63d4388800e1cfe78e310697d46e43c9ce36134f72cca","0x2134e76ac5d21aab186c2be1dd8f84ee880a1e46eaf712f9d371b6df22191f3e","0x19df90ec844ebc4ffeebd866f33859b0c051d8c958ee3aa88f8f8df3db91a5b1","0x18cca2a66b5c0787981e69aefd84852d74af0e93ef4912b4648c05f722efe52b","0x2388909415230d1b4d1304d2d54f473a628338f2efad83fadf05644549d2538d","0x27171fb4a97b6cc0e9e8f543b5294de866a2af2c9c8d0b1d96e673e4529ed540","0x2ff6650540f629fd5711a0bc74fc0d28dcb230b9392583e5f8d59696dde6ae21"]],"leaf":["0x29176100eaa962bdc1fe6c654d6a3c130e96a4d1168b33848b897dc502820133"]}'; const invalidTreeHeightInputs = - '{"root":["0x0"],"inPathIndices":[0],"inPathElements":[["0x0"]],"leaf":["0x0"]}'; + '{"roots":["0x0"],"inPathIndices":[0],"inPathElements":[["0x0"]],"leaves":["0x0"]}'; test .stdout() diff --git a/gnark-prover/config.toml b/gnark-prover/config.toml index ffe302a4d5..9869902a24 100644 --- a/gnark-prover/config.toml +++ b/gnark-prover/config.toml @@ -4,4 +4,14 @@ keys = [ "circuits/inclusion_26_3.key", "circuits/inclusion_26_4.key", "circuits/inclusion_26_8.key", + "circuits/non-inclusion_26_1.key", + "circuits/non-inclusion_26_2.key", + "circuits/combined_26_1_1.key", + "circuits/combined_26_1_2.key", + "circuits/combined_26_2_1.key", + "circuits/combined_26_2_2.key", + "circuits/combined_26_3_1.key", + "circuits/combined_26_3_2.key", + "circuits/combined_26_4_1.key", + "circuits/combined_26_4_2.key", ] \ No newline at end of file diff --git a/gnark-prover/generate_keys.sh b/gnark-prover/generate_keys.sh deleted file mode 100755 index a9b9d59fcc..0000000000 --- a/gnark-prover/generate_keys.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env bash - -DEPTH="26" - -gnark() { - local args=("$@") - ./light-prover "${args[@]}" -} - -generate() { - local UTXOS=$1 - local CIRCUIT_TYPE=$2 - mkdir -p circuits - CIRCUIT_FILE="./circuits/${CIRCUIT_TYPE}_${DEPTH}_${UTXOS}.key" - CIRCUIT_VKEY_FILE="./circuits/${CIRCUIT_TYPE}_${DEPTH}_${UTXOS}.vkey" - CIRCUIT_VKEY_RS_FILE="../programs/compressed-pda/src/verifying_keys/${CIRCUIT_TYPE}_${DEPTH}_${UTXOS}.rs" - - echo "Generating ${CIRCUIT_TYPE} circuit for ${UTXOS} UTXOs..." - gnark setup --utxos "$UTXOS" --tree-depth "$DEPTH" --output "${CIRCUIT_FILE}" --output-vkey "${CIRCUIT_VKEY_FILE}" - cargo xtask generate-vkey-rs --input-path "${CIRCUIT_VKEY_FILE}" --output-path "${CIRCUIT_VKEY_RS_FILE}" -} - -declare -a utxos_arr=("1" "2" "3" "4" "8") - -for utxos in "${utxos_arr[@]}" -do - generate $utxos "inclusion" -done \ No newline at end of file diff --git a/gnark-prover/integration_test.go b/gnark-prover/integration_test.go index d45b6f2193..50e80a02f6 100644 --- a/gnark-prover/integration_test.go +++ b/gnark-prover/integration_test.go @@ -125,7 +125,7 @@ func TestInclusionHappyPath26_12348(t *testing.T) { func TestInclusionHappyPath26_1_JSON(t *testing.T) { testInput := ` -{"root":["0x1ebf5c4eb04bf878b46937be63d12308bb14841813441f041812ea54ecb7b2d5"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d","0x2fa5e5f18f6027a6501bec864564472a616b2e274a41211a444cbe3a99f3cc61","0xe884376d0d8fd21ecb780389e941f66e45e7acce3e228ab3e2156a614fcd747","0x1b7201da72494f1e28717ad1a52eb469f95892f957713533de6175e5da190af2","0x1f8d8822725e36385200c0b201249819a6e6e1e4650808b5bebc6bface7d7636","0x2c5d82f66c914bafb9701589ba8cfcfb6162b0a12acf88a8d0879a0471b5f85a","0x14c54148a0940bb820957f5adf3fa1134ef5c4aaa113f4646458f270e0bfbfd0","0x190d33b12f986f961e10c0ee44d8b9af11be25588cad89d416118e4bf4ebe80c","0x22f98aa9ce704152ac17354914ad73ed1167ae6596af510aa5b3649325e06c92","0x2a7c7c9b6ce5880b9f6f228d72bf6a575a526f29c66ecceef8b753d38bba7323","0x2e8186e558698ec1c67af9c14d463ffc470043c9c2988b954d75dd643f36b992","0xf57c5571e9a4eab49e2c8cf050dae948aef6ead647392273546249d1c1ff10f","0x1830ee67b5fb554ad5f63d4388800e1cfe78e310697d46e43c9ce36134f72cca","0x2134e76ac5d21aab186c2be1dd8f84ee880a1e46eaf712f9d371b6df22191f3e","0x19df90ec844ebc4ffeebd866f33859b0c051d8c958ee3aa88f8f8df3db91a5b1","0x18cca2a66b5c0787981e69aefd84852d74af0e93ef4912b4648c05f722efe52b","0x2388909415230d1b4d1304d2d54f473a628338f2efad83fadf05644549d2538d","0x27171fb4a97b6cc0e9e8f543b5294de866a2af2c9c8d0b1d96e673e4529ed540","0x2ff6650540f629fd5711a0bc74fc0d28dcb230b9392583e5f8d59696dde6ae21"]],"leaf":["0x29176100eaa962bdc1fe6c654d6a3c130e96a4d1168b33848b897dc502820133"]} +{"roots":["0x1ebf5c4eb04bf878b46937be63d12308bb14841813441f041812ea54ecb7b2d5"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d","0x2fa5e5f18f6027a6501bec864564472a616b2e274a41211a444cbe3a99f3cc61","0xe884376d0d8fd21ecb780389e941f66e45e7acce3e228ab3e2156a614fcd747","0x1b7201da72494f1e28717ad1a52eb469f95892f957713533de6175e5da190af2","0x1f8d8822725e36385200c0b201249819a6e6e1e4650808b5bebc6bface7d7636","0x2c5d82f66c914bafb9701589ba8cfcfb6162b0a12acf88a8d0879a0471b5f85a","0x14c54148a0940bb820957f5adf3fa1134ef5c4aaa113f4646458f270e0bfbfd0","0x190d33b12f986f961e10c0ee44d8b9af11be25588cad89d416118e4bf4ebe80c","0x22f98aa9ce704152ac17354914ad73ed1167ae6596af510aa5b3649325e06c92","0x2a7c7c9b6ce5880b9f6f228d72bf6a575a526f29c66ecceef8b753d38bba7323","0x2e8186e558698ec1c67af9c14d463ffc470043c9c2988b954d75dd643f36b992","0xf57c5571e9a4eab49e2c8cf050dae948aef6ead647392273546249d1c1ff10f","0x1830ee67b5fb554ad5f63d4388800e1cfe78e310697d46e43c9ce36134f72cca","0x2134e76ac5d21aab186c2be1dd8f84ee880a1e46eaf712f9d371b6df22191f3e","0x19df90ec844ebc4ffeebd866f33859b0c051d8c958ee3aa88f8f8df3db91a5b1","0x18cca2a66b5c0787981e69aefd84852d74af0e93ef4912b4648c05f722efe52b","0x2388909415230d1b4d1304d2d54f473a628338f2efad83fadf05644549d2538d","0x27171fb4a97b6cc0e9e8f543b5294de866a2af2c9c8d0b1d96e673e4529ed540","0x2ff6650540f629fd5711a0bc74fc0d28dcb230b9392583e5f8d59696dde6ae21"]],"leaves":["0x29176100eaa962bdc1fe6c654d6a3c130e96a4d1168b33848b897dc502820133"]} ` response, err := http.Post("http://"+ProverAddress+"/inclusion", "application/json", strings.NewReader(testInput)) if err != nil { @@ -202,7 +202,7 @@ func TestInclusionWrongRoot(t *testing.T) { func TestParsingEmptyTreeWithOneLeaf(t *testing.T) { testInput := ` - {"root":["0xeb3a12b56841d019b26e4452bf7db8cf474a2d63e21781c5d2f143db039924a"], + {"roots":["0xeb3a12b56841d019b26e4452bf7db8cf474a2d63e21781c5d2f143db039924a"], "inPathIndices":[0], "inPathElements":[ ["0x0", @@ -228,7 +228,7 @@ func TestParsingEmptyTreeWithOneLeaf(t *testing.T) { "0x2134e76ac5d21aab186c2be1dd8f84ee880a1e46eaf712f9d371b6df22191f3e", "0x19df90ec844ebc4ffeebd866f33859b0c051d8c958ee3aa88f8f8df3db91a5b1"] ], - "leaf":["0x29176100eaa962bdc1fe6c654d6a3c130e96a4d1168b33848b897dc502820133"] + "leaves":["0x29176100eaa962bdc1fe6c654d6a3c130e96a4d1168b33848b897dc502820133"] }` proofData, err := prover.ParseInput(testInput) @@ -238,19 +238,22 @@ func TestParsingEmptyTreeWithOneLeaf(t *testing.T) { tree := merkletree.BuildTestTree(22, 1, false) - if len(tree.Root) != len(proofData.Root) || len(tree.Leaf) != len(proofData.Leaf) || len(tree.InPathElements) != len(proofData.InPathElements) || len(tree.InPathIndices) != len(proofData.InPathIndices) { - t.Errorf("Invalid shape: expected %d, got %d", len(tree.Root), len(proofData.Root)) + if len(tree.Roots) != len(proofData.Roots) || + len(tree.Leaves) != len(proofData.Leaves) || + len(tree.InPathElements) != len(proofData.InPathElements) || + len(tree.InPathIndices) != len(proofData.InPathIndices) { + t.Errorf("Invalid shape: expected %d, got %d", len(tree.Roots), len(proofData.Roots)) } - for i, bi := range tree.Root { - if bi.String() != proofData.Root[i].String() { - t.Errorf("Invalid root: expected %s, got %s", bi.String(), proofData.Root[i].String()) + for i, bi := range tree.Roots { + if bi.String() != proofData.Roots[i].String() { + t.Errorf("Invalid root: expected %s, got %s", bi.String(), proofData.Roots[i].String()) } } - for i, bi := range tree.Leaf { - if bi.String() != proofData.Leaf[i].String() { - t.Errorf("Invalid leaf: expected %s, got %s", bi.String(), proofData.Leaf[i].String()) + for i, bi := range tree.Leaves { + if bi.String() != proofData.Leaves[i].String() { + t.Errorf("Invalid leaf: expected %s, got %s", bi.String(), proofData.Leaves[i].String()) } } @@ -268,3 +271,41 @@ func TestParsingEmptyTreeWithOneLeaf(t *testing.T) { } } } + +func TestNonInclusionHappyPath26_1_JSON(t *testing.T) { + testInput := ` + {"roots":["0x25a5c4f28064c652bb113742eedc9d1c8b5beb96d633ff4fde5e584a6534f4ec"],"values":["0x2"],"leafLowerRangeValues":["0x1"],"leafHigherRangeValues":["0x3"],"leafIndices":[2],"inPathElements":[["0x1870293e9c4572d377d13ee4d3a10bd0aadc2b2804e159a088b5b066e2afa305","0x2aeda0b6795f709a521e3ca32c7d865d64d58d100b2ac064a91a2e638354695e","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x07f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x078295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d","0x2fa5e5f18f6027a6501bec864564472a616b2e274a41211a444cbe3a99f3cc61","0x0e884376d0d8fd21ecb780389e941f66e45e7acce3e228ab3e2156a614fcd747","0x1b7201da72494f1e28717ad1a52eb469f95892f957713533de6175e5da190af2","0x1f8d8822725e36385200c0b201249819a6e6e1e4650808b5bebc6bface7d7636","0x2c5d82f66c914bafb9701589ba8cfcfb6162b0a12acf88a8d0879a0471b5f85a","0x14c54148a0940bb820957f5adf3fa1134ef5c4aaa113f4646458f270e0bfbfd0","0x190d33b12f986f961e10c0ee44d8b9af11be25588cad89d416118e4bf4ebe80c","0x22f98aa9ce704152ac17354914ad73ed1167ae6596af510aa5b3649325e06c92","0x2a7c7c9b6ce5880b9f6f228d72bf6a575a526f29c66ecceef8b753d38bba7323","0x2e8186e558698ec1c67af9c14d463ffc470043c9c2988b954d75dd643f36b992","0x0f57c5571e9a4eab49e2c8cf050dae948aef6ead647392273546249d1c1ff10f","0x1830ee67b5fb554ad5f63d4388800e1cfe78e310697d46e43c9ce36134f72cca","0x2134e76ac5d21aab186c2be1dd8f84ee880a1e46eaf712f9d371b6df22191f3e","0x19df90ec844ebc4ffeebd866f33859b0c051d8c958ee3aa88f8f8df3db91a5b1","0x18cca2a66b5c0787981e69aefd84852d74af0e93ef4912b4648c05f722efe52b","0x2388909415230d1b4d1304d2d54f473a628338f2efad83fadf05644549d2538d","0x27171fb4a97b6cc0e9e8f543b5294de866a2af2c9c8d0b1d96e673e4529ed540","0x2ff6650540f629fd5711a0bc74fc0d28dcb230b9392583e5f8d59696dde6ae21"]],"inPathIndices":[1]} +` + response, err := http.Post("http://"+ProverAddress+"/noninclusion", "application/json", strings.NewReader(testInput)) + if err != nil { + t.Fatal(err) + } + + responseBody, err := io.ReadAll(response.Body) + if err != nil { + t.Fatal(err) + } + + if response.StatusCode != http.StatusOK { + t.Fatalf("Expected status code %d, got %d %s", http.StatusOK, response.StatusCode, string(responseBody)) + } +} + +func TestCombinedHappyPath_JSON(t *testing.T) { + testInput := ` +{"inclusion":{"roots":["0x2c3801daa43f9629566825442892388ac0d91ac153aa89ddeaa246e2ca6612eb"],"inPathIndices":[3],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d","0x2fa5e5f18f6027a6501bec864564472a616b2e274a41211a444cbe3a99f3cc61","0xe884376d0d8fd21ecb780389e941f66e45e7acce3e228ab3e2156a614fcd747","0x1b7201da72494f1e28717ad1a52eb469f95892f957713533de6175e5da190af2","0x1f8d8822725e36385200c0b201249819a6e6e1e4650808b5bebc6bface7d7636","0x2c5d82f66c914bafb9701589ba8cfcfb6162b0a12acf88a8d0879a0471b5f85a","0x14c54148a0940bb820957f5adf3fa1134ef5c4aaa113f4646458f270e0bfbfd0","0x190d33b12f986f961e10c0ee44d8b9af11be25588cad89d416118e4bf4ebe80c","0x22f98aa9ce704152ac17354914ad73ed1167ae6596af510aa5b3649325e06c92","0x2a7c7c9b6ce5880b9f6f228d72bf6a575a526f29c66ecceef8b753d38bba7323","0x2e8186e558698ec1c67af9c14d463ffc470043c9c2988b954d75dd643f36b992","0xf57c5571e9a4eab49e2c8cf050dae948aef6ead647392273546249d1c1ff10f","0x1830ee67b5fb554ad5f63d4388800e1cfe78e310697d46e43c9ce36134f72cca","0x2134e76ac5d21aab186c2be1dd8f84ee880a1e46eaf712f9d371b6df22191f3e","0x19df90ec844ebc4ffeebd866f33859b0c051d8c958ee3aa88f8f8df3db91a5b1","0x18cca2a66b5c0787981e69aefd84852d74af0e93ef4912b4648c05f722efe52b","0x2388909415230d1b4d1304d2d54f473a628338f2efad83fadf05644549d2538d","0x27171fb4a97b6cc0e9e8f543b5294de866a2af2c9c8d0b1d96e673e4529ed540","0x2ff6650540f629fd5711a0bc74fc0d28dcb230b9392583e5f8d59696dde6ae21"]],"leaves":["0x2bb25cb01b75d0d2211f102fdbebd3b1eab14bc2ead46a6306d260b6ae36d4e1"]},"nonInclusion":{"roots":["0xe25e68886ddf6fe5043f6c4871f49b2ed4ee12909572716e8e8dab0f2f6c748"],"inPathIndices":[22],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d","0x2fa5e5f18f6027a6501bec864564472a616b2e274a41211a444cbe3a99f3cc61","0xe884376d0d8fd21ecb780389e941f66e45e7acce3e228ab3e2156a614fcd747","0x1b7201da72494f1e28717ad1a52eb469f95892f957713533de6175e5da190af2","0x1f8d8822725e36385200c0b201249819a6e6e1e4650808b5bebc6bface7d7636","0x2c5d82f66c914bafb9701589ba8cfcfb6162b0a12acf88a8d0879a0471b5f85a","0x14c54148a0940bb820957f5adf3fa1134ef5c4aaa113f4646458f270e0bfbfd0","0x190d33b12f986f961e10c0ee44d8b9af11be25588cad89d416118e4bf4ebe80c","0x22f98aa9ce704152ac17354914ad73ed1167ae6596af510aa5b3649325e06c92","0x2a7c7c9b6ce5880b9f6f228d72bf6a575a526f29c66ecceef8b753d38bba7323","0x2e8186e558698ec1c67af9c14d463ffc470043c9c2988b954d75dd643f36b992","0xf57c5571e9a4eab49e2c8cf050dae948aef6ead647392273546249d1c1ff10f","0x1830ee67b5fb554ad5f63d4388800e1cfe78e310697d46e43c9ce36134f72cca","0x2134e76ac5d21aab186c2be1dd8f84ee880a1e46eaf712f9d371b6df22191f3e","0x19df90ec844ebc4ffeebd866f33859b0c051d8c958ee3aa88f8f8df3db91a5b1","0x18cca2a66b5c0787981e69aefd84852d74af0e93ef4912b4648c05f722efe52b","0x2388909415230d1b4d1304d2d54f473a628338f2efad83fadf05644549d2538d","0x27171fb4a97b6cc0e9e8f543b5294de866a2af2c9c8d0b1d96e673e4529ed540","0x2ff6650540f629fd5711a0bc74fc0d28dcb230b9392583e5f8d59696dde6ae21"]],"values":["0x2b3"],"leafLowerRangeValues":["0x2b2"],"leafHigherRangeValues":["0x2b4"],"leafIndices":[66303413]}} +` + response, err := http.Post("http://"+ProverAddress+"/combined", "application/json", strings.NewReader(testInput)) + if err != nil { + t.Fatal(err) + } + + responseBody, err := io.ReadAll(response.Body) + if err != nil { + t.Fatal(err) + } + + if response.StatusCode != http.StatusOK { + t.Fatalf("Expected status code %d, got %d %s", http.StatusOK, response.StatusCode, string(responseBody)) + } +} diff --git a/gnark-prover/main.go b/gnark-prover/main.go index 2de61fae6d..ffa31683e7 100644 --- a/gnark-prover/main.go +++ b/gnark-prover/main.go @@ -33,22 +33,49 @@ func runCli() { { Name: "setup", Flags: []cli.Flag{ + &cli.StringFlag{Name: "circuit", Usage: "Type of circuit (\"inclusion\" / \"non-inclusion\" / \"combined\")", Required: true}, &cli.StringFlag{Name: "output", Usage: "Output file", Required: true}, &cli.StringFlag{Name: "output-vkey", Usage: "Output file", Required: true}, - &cli.UintFlag{Name: "tree-depth", Usage: "Merkle tree depth", Required: true}, - &cli.UintFlag{Name: "utxos", Usage: "Number of Utxos", Required: true}, + &cli.UintFlag{Name: "inclusion-tree-depth", Usage: "Merkle tree depth", Required: false}, + &cli.UintFlag{Name: "inclusion-utxos", Usage: "Number of Utxos", Required: false}, + &cli.UintFlag{Name: "non-inclusion-tree-depth", Usage: "Non-inclusion merkle tree depth", Required: false}, + &cli.UintFlag{Name: "non-inclusion-utxos", Usage: "Non-inclusion number of Utxos", Required: false}, }, Action: func(context *cli.Context) error { + circuit := context.String("circuit") + if circuit != "inclusion" && circuit != "non-inclusion" && circuit != "combined" { + return fmt.Errorf("invalid circuit type %s", circuit) + } + path := context.String("output") path_vkey := context.String("output-vkey") - treeDepth := uint32(context.Uint("tree-depth")) - numberOfUtxos := uint32(context.Uint("utxos")) + inclusionTreeDepth := uint32(context.Uint("inclusion-tree-depth")) + inclusionNumberOfUtxos := uint32(context.Uint("inclusion-utxos")) + nonInclusionTreeDepth := uint32(context.Uint("non-inclusion-tree-depth")) + nonInclusionNumberOfUtxos := uint32(context.Uint("non-inclusion-utxos")) + + if (inclusionTreeDepth == 0 || inclusionNumberOfUtxos == 0) && circuit == "inclusion" { + return fmt.Errorf("inclusion tree depth and number of utxos must be provided") + } + + if (nonInclusionTreeDepth == 0 || nonInclusionNumberOfUtxos == 0) && circuit == "non-inclusion" { + return fmt.Errorf("non-inclusion tree depth and number of utxos must be provided") + } + + if circuit == "combined" { + if inclusionTreeDepth == 0 || inclusionNumberOfUtxos == 0 { + return fmt.Errorf("inclusion tree depth and number of utxos must be provided") + } + if nonInclusionTreeDepth == 0 || nonInclusionNumberOfUtxos == 0 { + return fmt.Errorf("non-inclusion tree depth and number of utxos must be provided") + } + } + logging.Logger().Info().Msg("Running setup") var system *prover.ProvingSystem var err error - system, err = prover.SetupCircuit("inclusion", treeDepth, numberOfUtxos) - + system, err = prover.SetupCircuit(circuit, inclusionTreeDepth, inclusionNumberOfUtxos, nonInclusionTreeDepth, nonInclusionNumberOfUtxos) if err != nil { return err } @@ -124,24 +151,61 @@ func runCli() { { Name: "import-setup", Flags: []cli.Flag{ + &cli.StringFlag{Name: "circuit", Usage: "Type of circuit (\"inclusion\" / \"non-inclusion\" / \"combined\")", Required: true}, &cli.StringFlag{Name: "output", Usage: "Output file", Required: true}, &cli.StringFlag{Name: "pk", Usage: "Proving key", Required: true}, &cli.StringFlag{Name: "vk", Usage: "Verifying key", Required: true}, - &cli.UintFlag{Name: "tree-depth", Usage: "Merkle tree depth", Required: true}, - &cli.UintFlag{Name: "utxos", Usage: "Number of utxos", Required: true}, + &cli.UintFlag{Name: "inclusion-tree-depth", Usage: "Merkle tree depth", Required: false}, + &cli.UintFlag{Name: "inclusion-utxos", Usage: "Number of Utxos", Required: false}, + &cli.UintFlag{Name: "non-inclusion-tree-depth", Usage: "Non-inclusion merkle tree depth", Required: false}, + &cli.UintFlag{Name: "non-inclusion-utxos", Usage: "Non-inclusion number of Utxos", Required: false}, }, Action: func(context *cli.Context) error { + circuit := context.String("circuit") + if circuit != "inclusion" && circuit != "non-inclusion" && circuit != "combined" { + return fmt.Errorf("invalid circuit type %s", circuit) + } + path := context.String("output") pk := context.String("pk") vk := context.String("vk") - treeDepth := uint32(context.Uint("tree-depth")) - utxos := uint32(context.Uint("utxos")) + + inclusionTreeDepth := uint32(context.Uint("inclusion-tree-depth")) + inclusionNumberOfUtxos := uint32(context.Uint("inclusion-utxos")) + nonInclusionTreeDepth := uint32(context.Uint("non-inclusion-tree-depth")) + nonInclusionNumberOfUtxos := uint32(context.Uint("non-inclusion-utxos")) + + if (inclusionTreeDepth == 0 || inclusionNumberOfUtxos == 0) && circuit == "inclusion" { + return fmt.Errorf("inclusion tree depth and number of utxos must be provided") + } + + if (nonInclusionTreeDepth == 0 || nonInclusionNumberOfUtxos == 0) && circuit == "non-inclusion" { + return fmt.Errorf("non-inclusion tree depth and number of utxos must be provided") + } + + if circuit == "combined" { + if inclusionTreeDepth == 0 || inclusionNumberOfUtxos == 0 { + return fmt.Errorf("inclusion tree depth and number of utxos must be provided") + } + if nonInclusionTreeDepth == 0 || nonInclusionNumberOfUtxos == 0 { + return fmt.Errorf("non-inclusion tree depth and number of utxos must be provided") + } + } + var system *prover.ProvingSystem var err error logging.Logger().Info().Msg("Importing setup") - system, err = prover.ImportInclusionSetup(treeDepth, utxos, pk, vk) + if circuit == "inclusion" { + system, err = prover.ImportInclusionSetup(inclusionTreeDepth, inclusionNumberOfUtxos, pk, vk) + } else if circuit == "non-inclusion" { + system, err = prover.ImportNonInclusionSetup(nonInclusionTreeDepth, nonInclusionNumberOfUtxos, pk, vk) + } else if circuit == "combined " { + system, err = prover.ImportCombinedSetup(inclusionTreeDepth, inclusionNumberOfUtxos, nonInclusionTreeDepth, nonInclusionNumberOfUtxos, pk, vk) + } else { + return fmt.Errorf("invalid circuit type %s", circuit) + } if err != nil { return err @@ -232,7 +296,9 @@ func runCli() { Usage: "Load configuration from `FILE`", Required: false, }, - &cli.StringSliceFlag{Name: "keys-file", Aliases: []string{"k"}, Value: cli.NewStringSlice(), Usage: "Proving system file"}, + &cli.BoolFlag{Name: "inclusion", Usage: "Run inclusion circuit", Required: false}, + &cli.BoolFlag{Name: "non-inclusion", Usage: "Run non-inclusion circuit", Required: false}, + &cli.BoolFlag{Name: "combined", Usage: "Run combined circuit", Required: false}, }, Action: func(context *cli.Context) error { if context.Bool("json-logging") { @@ -262,6 +328,7 @@ func runCli() { { Name: "prove", Flags: []cli.Flag{ + &cli.StringFlag{Name: "circuit", Usage: "Type of circuit (\"inclusion\" / \"non-inclusion\" / \"combined\")", Required: true}, &cli.StringFlag{ Name: "config", Aliases: []string{"c"}, @@ -271,6 +338,10 @@ func runCli() { &cli.StringSliceFlag{Name: "keys-file", Aliases: []string{"k"}, Value: cli.NewStringSlice(), Usage: "Proving system file"}, }, Action: func(context *cli.Context) error { + circuit := context.String("circuit") + if circuit != "inclusion" && circuit != "non-inclusion" && circuit != "combined" { + return fmt.Errorf("invalid circuit type %s", circuit) + } ps, err := LoadKeysFromConfigOrInline(context) if err != nil { @@ -284,6 +355,7 @@ func runCli() { } var proof *prover.Proof + if circuit == "inclusion" { var params prover.InclusionParameters err = json.Unmarshal(bytes, ¶ms) if err != nil { @@ -291,15 +363,50 @@ func runCli() { } treeDepth := params.TreeDepth() - if treeDepth != 26 { - return fmt.Errorf("tree depth must be 26, got %d", treeDepth) + utxos := params.NumberOfUTXOs() + + for _, provingSystem := range ps { + if provingSystem.InclusionTreeDepth == treeDepth && provingSystem.InclusionNumberOfUtxos == utxos { + proof, err = provingSystem.ProveInclusion(¶ms) + if err != nil { + return err + } + r, _ := json.Marshal(&proof) + fmt.Println(string(r)) + break + } + } + } else if circuit == "non-inclusion" { + var params prover.NonInclusionParameters + err = json.Unmarshal(bytes, ¶ms) + if err != nil { + return err } + treeDepth := params.TreeDepth() utxos := params.NumberOfUTXOs() for _, provingSystem := range ps { - if provingSystem.TreeDepth == treeDepth && provingSystem.NumberOfUtxos == utxos { - proof, err = provingSystem.ProveInclusion(¶ms) + if provingSystem.NonInclusionTreeDepth == treeDepth && provingSystem.NonInclusionNumberOfUtxos == utxos { + proof, err = provingSystem.ProveNonInclusion(¶ms) + if err != nil { + return err + } + r, _ := json.Marshal(&proof) + fmt.Println(string(r)) + break + } + } + } else if circuit == "combined" { + var params prover.CombinedParameters + err = json.Unmarshal(bytes, ¶ms) + if err != nil { + return err + } + + for _, provingSystem := range ps { + if provingSystem.InclusionTreeDepth == params.TreeDepth() && provingSystem.InclusionNumberOfUtxos == params.NumberOfUTXOs() && provingSystem.NonInclusionTreeDepth == params.NonInclusionTreeDepth() && provingSystem.InclusionNumberOfUtxos == params.NonInclusionNumberOfUTXOs() { + proof, err = provingSystem.ProveCombined(¶ms) if err != nil { return err } @@ -308,6 +415,7 @@ func runCli() { break } } + } return nil }, @@ -350,7 +458,12 @@ func runCli() { if err != nil { return err } - logging.Logger().Info().Uint32("treeDepth", ps.TreeDepth).Uint32("utxos", ps.NumberOfUtxos).Msg("Read proving system") + logging.Logger().Info(). + Uint32("treeDepth", ps.InclusionTreeDepth). + Uint32("utxos", ps.InclusionNumberOfUtxos). + Uint32("nonInclusionTreeDepth", ps.NonInclusionTreeDepth). + Uint32("nonInclusionUtxos", ps.NonInclusionNumberOfUtxos). + Msg("Read proving system") logging.Logger().Info().Msg("Reading proof from stdin") bytes, err := io.ReadAll(os.Stdin) if err != nil { @@ -419,31 +532,34 @@ func runCli() { func LoadKeysFromConfigOrInline(context *cli.Context) ([]*prover.ProvingSystem, error) { var cfg = config.Config{} - if context.IsSet("config") { - configFile := context.String("config") - cfg, _ = config.ReadConfig(configFile) + var keys []string + if context.Bool("inclusion") { + keys = append(keys, "circuits/inclusion_26_1.key") + keys = append(keys, "circuits/inclusion_26_2.key") + keys = append(keys, "circuits/inclusion_26_3.key") + keys = append(keys, "circuits/inclusion_26_4.key") + keys = append(keys, "circuits/inclusion_26_8.key") } - - if context.IsSet("keys-file") { - keys := context.StringSlice("keys-file") - for _, key := range keys { - trimmed := strings.TrimSpace(key) - if !cfg.HasKey(trimmed) { - cfg.Keys = append(cfg.Keys, trimmed) + if context.Bool("non-inclusion") { + keys = append(keys, "circuits/non-inclusion_26_1.key") + keys = append(keys, "circuits/non-inclusion_26_2.key") } + if context.Bool("combined") { + keys = append(keys, "circuits/combined_26_1_1.key") + keys = append(keys, "circuits/combined_26_1_2.key") + keys = append(keys, "circuits/combined_26_2_1.key") + keys = append(keys, "circuits/combined_26_2_2.key") + keys = append(keys, "circuits/combined_26_3_1.key") + keys = append(keys, "circuits/combined_26_3_2.key") + keys = append(keys, "circuits/combined_26_4_1.key") + keys = append(keys, "circuits/combined_26_4_2.key") } - } - if len(cfg.Keys) == 0 { - logging.Logger().Info().Msg("No config file provided, using defaults") - cfg = config.Config{ - Keys: []string{ - "circuits/inclusion_26_1.key", - "circuits/inclusion_26_2.key", - "circuits/inclusion_26_3.key", - "circuits/inclusion_26_4.key", - "circuits/inclusion_26_8.key", - }, - } + + if len(keys) > 0 { + cfg.Keys = keys + } else if context.IsSet("config") { + configFile := context.String("config") + cfg, _ = config.ReadConfig(configFile) } var pss = make([]*prover.ProvingSystem, len(cfg.Keys)) @@ -455,25 +571,32 @@ func LoadKeysFromConfigOrInline(context *cli.Context) ([]*prover.ProvingSystem, return nil, err } pss[i] = ps - logging.Logger().Info().Uint32("treeDepth", ps.TreeDepth).Uint32("utxos", ps.NumberOfUtxos).Msg("Read proving system") + logging.Logger().Info(). + Uint32("treeDepth", ps.InclusionTreeDepth). + Uint32("utxos", ps.InclusionNumberOfUtxos). + Uint32("nonInclusionTreeDepth", ps.NonInclusionTreeDepth). + Uint32("nonInclusionUtxos", ps.NonInclusionNumberOfUtxos). + Msg("Read proving system") } return pss, nil } func createFileAndWriteBytes(filePath string, data []byte) error { - // Create or open the file for writing. The file is created if it does not exist, - // or truncated if it does. file, err := os.Create(filePath) if err != nil { return err // Return the error to the caller } - defer file.Close() // Ensure the file is closed when the function completes + defer func(file *os.File) { + err := file.Close() + if err != nil { + return + } + }(file) - // Write the bytes to the file _, err = io.WriteString(file, fmt.Sprintf("%d", data)) if err != nil { return err // Return any error that occurs during writing } - fmt.Println("Wrote", len(data), "bytes to", filePath) // Write a log message - return nil // No errors, return nil + fmt.Println("Wrote", len(data), "bytes to", filePath) + return nil } diff --git a/gnark-prover/merkle-tree/test_tree.go b/gnark-prover/merkle-tree/test_tree.go index 7adb5cfdd0..4344ab8cac 100644 --- a/gnark-prover/merkle-tree/test_tree.go +++ b/gnark-prover/merkle-tree/test_tree.go @@ -1,6 +1,7 @@ package merkle_tree import ( + "fmt" "light/light-prover/prover" "math/big" "math/rand" @@ -168,9 +169,91 @@ func BuildTestTree(depth int, numberOfUtxos int, random bool) prover.InclusionPa } return prover.InclusionParameters{ - Root: roots, + Roots: roots, InPathIndices: inPathIndicesBatch, InPathElements: inPathElementsBatch, - Leaf: leaves, + Leaves: leaves, + } +} + +func rangeIn(low, hi int) int { + return low + rand.Intn(hi-low) +} + +func BuildValidTestNonInclusionTree(depth int, numberOfUtxos int, random bool) prover.NonInclusionParameters { + return BuildTestNonInclusionTree(depth, numberOfUtxos, random, true, false) +} + +func BuildTestNonInclusionTree(depth int, numberOfUtxos int, random bool, valid bool, lowValue bool) prover.NonInclusionParameters { + tree := NewTree(depth) + + rand.Seed(time.Now().UnixNano()) + var value *big.Int = big.NewInt(0) + var inPathIndices int + var leafLower *big.Int + var leafUpper *big.Int = big.NewInt(2) + var leafIndex int + if random { + leafLower = big.NewInt(int64(rangeIn(0, 1000))) + leafUpper.Add(leafUpper, leafLower) + numberOfLeaves := 1 << depth + leafIndex = rand.Intn(numberOfLeaves) + if valid { + value.Add(leafLower, big.NewInt(1)) + } else { + if lowValue { + value.Add(leafLower, big.NewInt(-1)) + } else { + value.Add(leafUpper, big.NewInt(1)) + } + } + inPathIndices = rand.Intn(depth) + } else { + leafLower = big.NewInt(1) + leafUpper = big.NewInt(123) + leafIndex = 1 + if valid { + value = big.NewInt(2) + } else { + value = big.NewInt(4) + } + inPathIndices = 0 + } + + leafLowerRangeValue := make([]big.Int, numberOfUtxos) + leafHigherRangeValue := make([]big.Int, numberOfUtxos) + leafIndices := make([]uint32, numberOfUtxos) + + leaf, err := poseidon.Hash([]*big.Int{leafLower, big.NewInt(int64(leafIndex)), leafUpper}) + if err != nil { + fmt.Println("error: ", err) + } + + inPathElements := tree.Update(inPathIndices, *leaf) + root := tree.Root() + + roots := make([]big.Int, numberOfUtxos) + inPathIndicesBatch := make([]uint32, numberOfUtxos) + inPathElementsBatch := make([][]big.Int, numberOfUtxos) + values := make([]big.Int, numberOfUtxos) + + for i := 0; i < numberOfUtxos; i++ { + roots[i] = root + inPathIndicesBatch[i] = uint32(inPathIndices) + inPathElementsBatch[i] = inPathElements + values[i] = *value + leafLowerRangeValue[i] = *leafLower + leafHigherRangeValue[i] = *leafUpper + leafIndices[i] = uint32(leafIndex) + } + + return prover.NonInclusionParameters{ + Roots: roots, + Values: values, + InPathIndices: inPathIndicesBatch, + InPathElements: inPathElementsBatch, + LeafIndices: leafIndices, + LeafLowerRangeValues: leafLowerRangeValue, + LeafHigherRangeValues: leafHigherRangeValue, } } diff --git a/gnark-prover/merkle-tree/tree_test.go b/gnark-prover/merkle-tree/tree_test.go index 7b3c6d5982..0a8343feee 100644 --- a/gnark-prover/merkle-tree/tree_test.go +++ b/gnark-prover/merkle-tree/tree_test.go @@ -2,58 +2,296 @@ package merkle_tree import ( "fmt" + "light/light-prover/prover" "math/big" "os" "testing" ) func TestInclusionParameters_TestTree(t *testing.T) { - var tree = BuildTestTree(3, 1, true) - var json = tree.ToJSON() - fmt.Println(json) - - file, err := os.OpenFile("../test-data/inclusion2.csv", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + file, err := os.OpenFile("../test-data/inclusion_tmp.csv", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) if err != nil { fmt.Println(err) return } - defer file.Close() + defer func(file *os.File) { + err := file.Close() + if err != nil { + t.Errorf("Error closing file: %v", err) + } + }(file) + + for i := 1; i <= 4; i++ { + for j := 1; j <= 2; j++ { + trees := MakeTestIncludedTrees(i, j) + for _, tree := range trees { + var json, err = tree.Tree.MarshalJSON() + if err != nil { + t.Errorf("Error marshalling JSON: %v", err) + return + } - // generate trees with depth 1..26 and numberOfUtxos 1..10 and store the serialized results in a file - for i := 1; i <= 8; i++ { - for j := 1; j <= 4; j++ { - tree := BuildTestTree(i, j, true) - json := tree.ToJSON() + _, err = fmt.Fprintf(file, "%d;%s\n", flag(tree.Valid), json) + if err != nil { + t.Errorf("Error writing to file: %v", err) + return + } + } + } + } +} - _, err = file.WriteString(fmt.Sprintf("%d;%s\n", 1, json)) +func TestNonInclusionParameters_TestTree(t *testing.T) { + file, err := os.OpenFile("../test-data/non-inclusion_tmp.csv", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + if err != nil { + t.Errorf("Error opening file: %v", err) + return + } + defer func(file *os.File) { + err := file.Close() + if err != nil { + t.Errorf("Error closing file: %v", err) + } + }(file) - if err != nil { - fmt.Println(err) - return + for i := 1; i <= 4; i++ { + for j := 1; j <= 2; j++ { + trees := MakeTestNonInclusionTrees(i, j) + for _, tree := range trees { + var json, err = tree.Tree.MarshalJSON() + if err != nil { + t.Errorf("Error marshalling JSON: %v", err) + return + } + _, err = fmt.Fprintf(file, "%d;%s\n", flag(tree.Valid), json) + if err != nil { + t.Errorf("Error writing to file: %v", err) + return + } } + } + } +} + +func TestCombined(t *testing.T) { + file, err := os.OpenFile("../test-data/combined_tmp.csv", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + if err != nil { + t.Errorf("Error opening file: %v", err) + return + } + defer func(file *os.File) { + err := file.Close() + if err != nil { + t.Errorf("Error closing file: %v", err) + } + }(file) - invalidValue := big.NewInt(999) - tree.Root[0] = *invalidValue - json = tree.ToJSON() - _, err = file.WriteString(fmt.Sprintf("%d;%s\n", 0, json)) + tree1 := BuildTestTree(26, 1, true) + tree2 := BuildValidTestNonInclusionTree(26, 1, true) - tree.Leaf[0] = *invalidValue - json = tree.ToJSON() - _, err = file.WriteString(fmt.Sprintf("%d;%s\n", 0, json)) + var combinedParams = prover.CombinedParameters{ + InclusionParameters: tree1, + NonInclusionParameters: tree2, + } - tree.InPathIndices[0] = 999 - json = tree.ToJSON() - _, err = file.WriteString(fmt.Sprintf("%d;%s\n", 0, json)) + var json, err2 = combinedParams.MarshalJSON() + if err2 != nil { + t.Errorf("Error marshalling JSON: %v", err) + return + } + fmt.Println(string(json)) - tree.InPathElements[0][0] = *invalidValue - json = tree.ToJSON() - _, err = file.WriteString(fmt.Sprintf("%d;%s\n", 0, json)) + for i := 1; i <= 4; i++ { + for j := 1; j <= 2; j++ { + trees1 := MakeTestIncludedTrees(i, j) + trees2 := MakeTestNonInclusionTrees(i, j) + for k, tree1 := range trees1 { + for l, tree2 := range trees2 { + var combinedParams = prover.CombinedParameters{ + InclusionParameters: tree1.Tree, + NonInclusionParameters: tree2.Tree, + } + var json, err = combinedParams.MarshalJSON() + if err != nil { + t.Errorf("Error marshalling JSON: %v", err) + return + } - if err != nil { - fmt.Println(err) - return + valid := tree1.Valid && tree2.Valid + _, err = fmt.Fprintf(file, "%d;%s\n", flag(valid), json) + if err != nil { + t.Errorf("Error writing to file: %v", err) + return + } + fmt.Printf("Test %d: %d, %d\n", i, k, l) + } } - } } } + +func flag(valid bool) int { + if valid { + return 1 + } + return 0 +} + +type InclusionTreeValidPair struct { + Tree prover.InclusionParameters + Valid bool +} + +// Function +// +// `MakeTestIncludedTrees` +// +// ```go +// func MakeTestIncludedTrees(depth int, numberOfUtxos int) []InclusionTreeValidPair +// ``` +// +// # Description +// +// The `MakeTestIncludedTrees` function creates an array of InclusionTreeValidPair instances for testing. +// The variation between valid and invalid trees helps simulate real-world scenarios and assists in better +// testing for robustness and error-handling. +// +// Parameters: +// +// - `depth (int)`: Defines the depth of each included tree. +// - `numberOfUtxos (int)`: Number of unspent transaction outputs (UTXOs) to include in each tree. +// +// Returns: +// - `[]InclusionTreeValidPair`: An array of `InclusionTreeValidPair` instances, each containing +// an `InclusionParameters` instance and a boolean value indicating whether the tree is valid. +// +// Pairs Explanation: +// +// - `validPair`: A valid tree constructed with input parameters. The Valid field is set to `true`. +// - `invalidRootPair`: A valid tree but the root value is invalidated by setting it to an integer 999. The Valid field is set to `false`. +// - `invalidLeafPair`: A valid tree where a leaf value is invalidated by setting it to an integer 999. The Valid field is set to `false`. +// - `invalidInPathIndicesPair`: A valid tree but the InPathIndices value is invalidated by setting it to an integer 999. The Valid field is set to `false`. +// - `invalidInPathElementsPair`: A valid tree where the InPathElements is invalidated by setting a value to an integer 999. The Valid field is set to `false`. +// +// Example usage: +// +// ```go +// trees := MakeTestIncludedTrees(4, 2) +// +// for _, tree := range trees { +// // perform operations on tree +// } +// +// ``` +func MakeTestIncludedTrees(depth int, numberOfUtxos int) []InclusionTreeValidPair { + var trees []InclusionTreeValidPair + + validTree := BuildTestTree(depth, numberOfUtxos, true) + validPair := InclusionTreeValidPair{Tree: validTree, Valid: true} + + invalidRootTree := BuildTestTree(depth, numberOfUtxos, true) + invalidRootTree.Root[0] = *big.NewInt(999) + invalidRootPair := InclusionTreeValidPair{Tree: invalidRootTree, Valid: false} + + invalidLeafTree := BuildTestTree(depth, numberOfUtxos, true) + invalidLeafTree.Leaf[0] = *big.NewInt(999) + invalidLeafPair := InclusionTreeValidPair{Tree: invalidLeafTree, Valid: false} + + invalidInPathIndicesTree := BuildTestTree(depth, numberOfUtxos, true) + invalidInPathIndicesTree.InPathIndices[0] = 999 + invalidInPathIndicesPair := InclusionTreeValidPair{Tree: invalidInPathIndicesTree, Valid: false} + + invalidInPathElementsTree := BuildTestTree(depth, numberOfUtxos, true) + invalidInPathElementsTree.InPathElements[0][0] = *big.NewInt(999) + invalidInPathElementsPair := InclusionTreeValidPair{Tree: invalidInPathElementsTree, Valid: false} + + trees = append(trees, validPair) + trees = append(trees, invalidRootPair) + trees = append(trees, invalidLeafPair) + trees = append(trees, invalidInPathIndicesPair) + trees = append(trees, invalidInPathElementsPair) + return trees +} + +type NonInclusionTreeValidPair struct { + Tree prover.NonInclusionParameters + Valid bool +} + +// Function +// +// `MakeTestNonInclusionTrees` +// +// ```go +// func MakeTestNonInclusionTrees(depth int, numberOfUtxos int) []NonInclusionTreeValidPair +// ``` +// +// # Description +// +// The `MakeTestNonInclusionTrees` function creates an array of `NonInclusionTreeValidPair` instances for testing. These instances include various valid and invalid cases to simulate diverse scenarios and strengthen code robustness and error handling. This function helps in creating a testing environment that closely mimics a variety of real-world scenarios. +// +// # Parameters +// +// - `depth (int)`: Defines the depth of each included tree. +// - `numberOfUtxos (int)`: Number of unspent transaction outputs (UTXOs) to include in each tree. +// +// # Returns +// +// - `[]NonInclusionTreeValidPair`: An array of `NonInclusionTreeValidPair` instances, each containing an `InclusionParameters` instance and a boolean value indicating whether the tree is valid. +// +// # Pairs Explanation +// +// - `validPair`: A tree constructed with input parameters. The `Valid` field is set to `true`. +// +// - `invalidRootPair`: A valid tree but the root value is invalidated by setting it to an integer 999. The `Valid` field is set to `false`. +// +// - `invalidLowValuePair`: An invalid tree with a low value. The `Valid` field is set to `false`. +// +// - `invalidHighValuePair`: An invalid tree with a high value. The `Valid` field is set to `false`. +// +// - `invalidInPathIndicesPair`: A valid tree but the `InPathIndices` value is invalidated by setting it to an integer 999. The `Valid` field is set to `false`. +// +// - `invalidInPathElementsPair`: A valid tree where the `InPathElements` are invalidated by an integer 999. The `Valid` field is set to `false`. +// +// # Example Usage +// +// ```go +// trees := MakeTestNonInclusionTrees(4, 2) +// +// for _, tree := range trees { +// // perform operations on tree +// } +// +// ``` +func MakeTestNonInclusionTrees(depth int, numberOfUtxos int) []NonInclusionTreeValidPair { + var trees []NonInclusionTreeValidPair + + validTree := BuildValidTestNonInclusionTree(depth, numberOfUtxos, true) + validPair := NonInclusionTreeValidPair{Tree: validTree, Valid: true} + + invalidRootTree := BuildValidTestNonInclusionTree(depth, numberOfUtxos, true) + invalidRootTree.Root[0] = *big.NewInt(999) + invalidRootPair := NonInclusionTreeValidPair{Tree: invalidRootTree, Valid: false} + + invalidLowValueTree := BuildTestNonInclusionTree(depth, numberOfUtxos, true, false, true) + invalidLowValuePair := NonInclusionTreeValidPair{Tree: invalidLowValueTree, Valid: false} + + invalidHighValueTree := BuildTestNonInclusionTree(depth, numberOfUtxos, true, false, false) + invalidHighValuePair := NonInclusionTreeValidPair{Tree: invalidHighValueTree, Valid: false} + + invalidInPathIndicesTree := BuildValidTestNonInclusionTree(depth, numberOfUtxos, true) + invalidInPathIndicesTree.InPathIndices[0] = 999 + invalidInPathIndicesPair := NonInclusionTreeValidPair{Tree: invalidInPathIndicesTree, Valid: false} + + invalidInPathElementsTree := BuildValidTestNonInclusionTree(depth, numberOfUtxos, true) + invalidInPathElementsTree.InPathElements[0][0] = *big.NewInt(999) + invalidInPathElementsPair := NonInclusionTreeValidPair{Tree: invalidInPathElementsTree, Valid: false} + + trees = append(trees, validPair) + trees = append(trees, invalidRootPair) + trees = append(trees, invalidLowValuePair) + trees = append(trees, invalidHighValuePair) + trees = append(trees, invalidInPathIndicesPair) + trees = append(trees, invalidInPathElementsPair) + return trees +} diff --git a/gnark-prover/prover/circuit_builder.go b/gnark-prover/prover/circuit_builder.go index 5723d93203..444af6c243 100644 --- a/gnark-prover/prover/circuit_builder.go +++ b/gnark-prover/prover/circuit_builder.go @@ -2,9 +2,13 @@ package prover import "fmt" -func SetupCircuit(circuit string, treeDepth uint32, numberOfUtxos uint32) (*ProvingSystem, error) { +func SetupCircuit(circuit string, inclusionTreeDepth uint32, inclusionNumberOfUtxos uint32, nonInclusionTreeDepth uint32, nonInclusionNumberOfUtxos uint32) (*ProvingSystem, error) { if circuit == "inclusion" { - return SetupInclusion(treeDepth, numberOfUtxos) + return SetupInclusion(inclusionTreeDepth, inclusionNumberOfUtxos) + } else if circuit == "non-inclusion" { + return SetupNonInclusion(nonInclusionTreeDepth, nonInclusionNumberOfUtxos) + } else if circuit == "combined" { + return SetupCombined(inclusionTreeDepth, inclusionNumberOfUtxos, nonInclusionTreeDepth, nonInclusionNumberOfUtxos) } else { return nil, fmt.Errorf("invalid circuit: %s", circuit) } diff --git a/gnark-prover/prover/circuit_utils.go b/gnark-prover/prover/circuit_utils.go index b91232e59d..446cc52727 100644 --- a/gnark-prover/prover/circuit_utils.go +++ b/gnark-prover/prover/circuit_utils.go @@ -18,12 +18,13 @@ type Proof struct { } type ProvingSystem struct { - TreeDepth uint32 - NumberOfUtxos uint32 - Inclusion bool - ProvingKey groth16.ProvingKey - VerifyingKey groth16.VerifyingKey - ConstraintSystem constraint.ConstraintSystem + InclusionTreeDepth uint32 + InclusionNumberOfUtxos uint32 + NonInclusionTreeDepth uint32 + NonInclusionNumberOfUtxos uint32 + ProvingKey groth16.ProvingKey + VerifyingKey groth16.VerifyingKey + ConstraintSystem constraint.ConstraintSystem } // ProofRound gadget generates the ParentHash @@ -42,8 +43,8 @@ func (gadget ProofRound) DefineGadget(api frontend.API) interface{} { } type InclusionProof struct { - Root []frontend.Variable - Leaf []frontend.Variable + Roots []frontend.Variable + Leaves []frontend.Variable InPathIndices []frontend.Variable InPathElements [][]frontend.Variable @@ -54,15 +55,97 @@ type InclusionProof struct { func (gadget InclusionProof) DefineGadget(api frontend.API) interface{} { currentHash := make([]frontend.Variable, gadget.NumberOfUtxos) for proofIndex := 0; proofIndex < gadget.NumberOfUtxos; proofIndex++ { - currentPath := api.ToBinary(gadget.InPathIndices[proofIndex], gadget.Depth) - currentHash[proofIndex] = gadget.Leaf[proofIndex] - for j := 0; j < gadget.Depth; j++ { - currentHash[proofIndex] = abstractor.Call(api, ProofRound{Direction: currentPath[j], Hash: currentHash[proofIndex], Sibling: gadget.InPathElements[proofIndex][j]}) - } + hash := MerkleRootGadget{ + Hash: gadget.Leaves[proofIndex], + Index: gadget.InPathIndices[proofIndex], + Path: gadget.InPathElements[proofIndex], + Depth: gadget.Depth} + currentHash[proofIndex] = abstractor.Call(api, hash) + api.AssertIsEqual(currentHash[proofIndex], gadget.Roots[proofIndex]) } return currentHash } +type NonInclusionProof struct { + Roots []frontend.Variable + Values []frontend.Variable + + LeafLowerRangeValues []frontend.Variable + LeafHigherRangeValues []frontend.Variable + LeafIndices []frontend.Variable + + InPathIndices []frontend.Variable + InPathElements [][]frontend.Variable + + NumberOfUtxos int + Depth int +} + +func (gadget NonInclusionProof) DefineGadget(api frontend.API) interface{} { + currentHash := make([]frontend.Variable, gadget.NumberOfUtxos) + for proofIndex := 0; proofIndex < gadget.NumberOfUtxos; proofIndex++ { + leaf := LeafHashGadget{ + LeafLowerRangeValue: gadget.LeafLowerRangeValues[proofIndex], + LeafIndex: gadget.LeafIndices[proofIndex], + LeafHigherRangeValue: gadget.LeafHigherRangeValues[proofIndex], + Value: gadget.Values[proofIndex]} + currentHash[proofIndex] = abstractor.Call(api, leaf) + + hash := MerkleRootGadget{ + Hash: currentHash[proofIndex], + Index: gadget.InPathIndices[proofIndex], + Path: gadget.InPathElements[proofIndex], + Depth: gadget.Depth} + currentHash[proofIndex] = abstractor.Call(api, hash) + api.AssertIsEqual(currentHash[proofIndex], gadget.Roots[proofIndex]) + } + return currentHash +} + +type CombinedProof struct { + InclusionProof InclusionProof + NonInclusionProof NonInclusionProof +} + +func (gadget CombinedProof) DefineGadget(api frontend.API) interface{} { + x := abstractor.Call(api, gadget.InclusionProof) + y := abstractor.Call(api, gadget.NonInclusionProof) + if x == nil || y == nil { + return nil + } + return nil +} + +type LeafHashGadget struct { + LeafLowerRangeValue frontend.Variable + LeafIndex frontend.Variable + LeafHigherRangeValue frontend.Variable + Value frontend.Variable +} + +func (gadget LeafHashGadget) DefineGadget(api frontend.API) interface{} { + api.AssertIsDifferent(gadget.LeafLowerRangeValue, gadget.Value) + api.AssertIsLessOrEqual(gadget.LeafLowerRangeValue, gadget.Value) + api.AssertIsDifferent(gadget.LeafHigherRangeValue, gadget.Value) + api.AssertIsLessOrEqual(gadget.Value, gadget.LeafHigherRangeValue) + return abstractor.Call(api, poseidon.Poseidon3{In1: gadget.LeafLowerRangeValue, In2: gadget.LeafIndex, In3: gadget.LeafHigherRangeValue}) +} + +type MerkleRootGadget struct { + Hash frontend.Variable + Index frontend.Variable + Path []frontend.Variable + Depth int +} + +func (gadget MerkleRootGadget) DefineGadget(api frontend.API) interface{} { + currentPath := api.ToBinary(gadget.Index, gadget.Depth) + for i := 0; i < gadget.Depth; i++ { + gadget.Hash = abstractor.Call(api, ProofRound{Direction: currentPath[i], Hash: gadget.Hash, Sibling: gadget.Path[i]}) + } + return gadget.Hash +} + // Trusted setup utility functions // Taken from: https://github.com/bnb-chain/zkbnb/blob/master/common/prove/proof_keys.go#L19 func LoadProvingKey(filepath string) (pk groth16.ProvingKey, err error) { @@ -73,8 +156,10 @@ func LoadProvingKey(filepath string) (pk groth16.ProvingKey, err error) { if err != nil { return pk, fmt.Errorf("read file error") } - f.Close() - + err = f.Close() + if err != nil { + return nil, err + } return pk, nil } @@ -87,7 +172,10 @@ func LoadVerifyingKey(filepath string) (verifyingKey groth16.VerifyingKey, err e if err != nil { return verifyingKey, fmt.Errorf("read file error") } - f.Close() + err = f.Close() + if err != nil { + return nil, err + } return verifyingKey, nil } diff --git a/gnark-prover/prover/combined_circuit.go b/gnark-prover/prover/combined_circuit.go new file mode 100644 index 0000000000..21d6518bec --- /dev/null +++ b/gnark-prover/prover/combined_circuit.go @@ -0,0 +1,56 @@ +package prover + +import ( + "github.com/consensys/gnark/frontend" + "github.com/reilabs/gnark-lean-extractor/v2/abstractor" +) + +type CombinedCircuit struct { + Inclusion InclusionCircuit + NonInclusion NonInclusionCircuit +} + +func (circuit *CombinedCircuit) Define(api frontend.API) error { + abstractor.CallVoid(api, InclusionProof{ + Roots: circuit.Inclusion.Roots, + Leaves: circuit.Inclusion.Leaves, + InPathElements: circuit.Inclusion.InPathElements, + InPathIndices: circuit.Inclusion.InPathIndices, + NumberOfUtxos: circuit.Inclusion.NumberOfUtxos, + Depth: circuit.Inclusion.Depth, + }) + + abstractor.CallVoid(api, NonInclusionProof{ + Roots: circuit.NonInclusion.Roots, + Values: circuit.NonInclusion.Values, + LeafLowerRangeValues: circuit.NonInclusion.LeafLowerRangeValues, + LeafHigherRangeValues: circuit.NonInclusion.LeafHigherRangeValues, + LeafIndices: circuit.NonInclusion.LeafIndices, + InPathIndices: circuit.NonInclusion.InPathIndices, + InPathElements: circuit.NonInclusion.InPathElements, + NumberOfUtxos: circuit.NonInclusion.NumberOfUtxos, + Depth: circuit.NonInclusion.Depth, + }) + return nil +} + +func ImportCombinedSetup(inclusionTreeDepth uint32, inclusionNumberOfUtxos uint32, nonInclusionTreeDepth uint32, nonInclusionNumberOfUtxos uint32, pkPath string, vkPath string) (*ProvingSystem, error) { + ccs, err := R1CSCombined(inclusionTreeDepth, inclusionNumberOfUtxos, nonInclusionTreeDepth, nonInclusionNumberOfUtxos) + if err != nil { + return nil, err + } + + pk, err := LoadProvingKey(pkPath) + + if err != nil { + return nil, err + } + + vk, err := LoadVerifyingKey(vkPath) + + if err != nil { + return nil, err + } + + return &ProvingSystem{inclusionTreeDepth, inclusionNumberOfUtxos, nonInclusionTreeDepth, nonInclusionNumberOfUtxos, pk, vk, ccs}, nil +} diff --git a/gnark-prover/prover/combined_proving_system.go b/gnark-prover/prover/combined_proving_system.go new file mode 100644 index 0000000000..1740ba940f --- /dev/null +++ b/gnark-prover/prover/combined_proving_system.go @@ -0,0 +1,151 @@ +package prover + +import ( + "light/light-prover/logging" + "strconv" + + "github.com/consensys/gnark-crypto/ecc" + "github.com/consensys/gnark/backend/groth16" + "github.com/consensys/gnark/constraint" + "github.com/consensys/gnark/frontend" + "github.com/consensys/gnark/frontend/cs/r1cs" +) + +type CombinedParameters struct { + InclusionParameters InclusionParameters + NonInclusionParameters NonInclusionParameters +} + +func (p *CombinedParameters) NumberOfUTXOs() uint32 { + return p.InclusionParameters.NumberOfUTXOs() +} + +func (p *CombinedParameters) TreeDepth() uint32 { + return p.InclusionParameters.TreeDepth() +} + +func (p *CombinedParameters) NonInclusionNumberOfUTXOs() uint32 { + return p.NonInclusionParameters.NumberOfUTXOs() +} + +func (p *CombinedParameters) NonInclusionTreeDepth() uint32 { + return p.NonInclusionParameters.TreeDepth() +} + +func (p *CombinedParameters) ValidateShape(inclusionTreeDepth uint32, inclusionNumOfUTXOs uint32, nonInclusionTreeDepth uint32, nonInclusionNumOfUTXOs uint32) error { + if err := p.InclusionParameters.ValidateShape(inclusionTreeDepth, inclusionNumOfUTXOs); err != nil { + return err + } + if err := p.NonInclusionParameters.ValidateShape(nonInclusionTreeDepth, nonInclusionNumOfUTXOs); err != nil { + return err + } + return nil +} + +func R1CSCombined(inclusionTreeDepth uint32, inclusionNumberOfUtxos uint32, nonInclusionTreeDepth uint32, nonInclusionNumberOfUtxos uint32) (constraint.ConstraintSystem, error) { + circuit := InitializeCombinedCircuit(inclusionTreeDepth, inclusionNumberOfUtxos, nonInclusionTreeDepth, nonInclusionNumberOfUtxos) + return frontend.Compile(ecc.BN254.ScalarField(), r1cs.NewBuilder, &circuit) +} + +func InitializeCombinedCircuit(inclusionTreeDepth uint32, inclusionNumberOfUtxos uint32, nonInclusionTreeDepth uint32, nonInclusionNumberOfUtxos uint32) CombinedCircuit { + inclusionRoots := make([]frontend.Variable, inclusionNumberOfUtxos) + inclusionLeaves := make([]frontend.Variable, inclusionNumberOfUtxos) + inclusionInPathIndices := make([]frontend.Variable, inclusionNumberOfUtxos) + inclusionInPathElements := make([][]frontend.Variable, inclusionNumberOfUtxos) + for i := 0; i < int(inclusionNumberOfUtxos); i++ { + inclusionInPathElements[i] = make([]frontend.Variable, inclusionTreeDepth) + } + + nonInclusionRoots := make([]frontend.Variable, nonInclusionNumberOfUtxos) + nonInclusionValues := make([]frontend.Variable, nonInclusionNumberOfUtxos) + nonInclusionLeafLowerRangeValues := make([]frontend.Variable, nonInclusionNumberOfUtxos) + nonInclusionLeafHigherRangeValues := make([]frontend.Variable, nonInclusionNumberOfUtxos) + nonInclusionLeafIndices := make([]frontend.Variable, nonInclusionNumberOfUtxos) + + nonInclusionInPathIndices := make([]frontend.Variable, nonInclusionNumberOfUtxos) + nonInclusionInPathElements := make([][]frontend.Variable, nonInclusionNumberOfUtxos) + + for i := 0; i < int(nonInclusionNumberOfUtxos); i++ { + nonInclusionInPathElements[i] = make([]frontend.Variable, nonInclusionTreeDepth) + } + + circuit := CombinedCircuit{ + Inclusion: InclusionCircuit{ + Roots: inclusionRoots, + Leaves: inclusionLeaves, + InPathIndices: inclusionInPathIndices, + InPathElements: inclusionInPathElements, + NumberOfUtxos: int(inclusionNumberOfUtxos), + Depth: int(inclusionTreeDepth), + }, + NonInclusion: NonInclusionCircuit{ + Roots: nonInclusionRoots, + Values: nonInclusionValues, + LeafLowerRangeValues: nonInclusionLeafLowerRangeValues, + LeafHigherRangeValues: nonInclusionLeafHigherRangeValues, + LeafIndices: nonInclusionLeafIndices, + InPathIndices: nonInclusionInPathIndices, + InPathElements: nonInclusionInPathElements, + NumberOfUtxos: int(nonInclusionNumberOfUtxos), + Depth: int(nonInclusionTreeDepth), + }, + } + return circuit +} + +func SetupCombined(inclusionTreeDepth uint32, inclusionNumberOfUtxos uint32, nonInclusionTreeDepth uint32, nonInclusionNumberOfUtxos uint32) (*ProvingSystem, error) { + ccs, err := R1CSCombined(inclusionTreeDepth, inclusionNumberOfUtxos, nonInclusionTreeDepth, nonInclusionNumberOfUtxos) + if err != nil { + return nil, err + } + pk, vk, err := groth16.Setup(ccs) + if err != nil { + return nil, err + } + return &ProvingSystem{inclusionTreeDepth, inclusionNumberOfUtxos, nonInclusionTreeDepth, nonInclusionNumberOfUtxos, pk, vk, ccs}, nil +} + +func (ps *ProvingSystem) ProveCombined(params *CombinedParameters) (*Proof, error) { + if err := params.ValidateShape(ps.InclusionTreeDepth, ps.InclusionNumberOfUtxos, ps.NonInclusionTreeDepth, ps.NonInclusionNumberOfUtxos); err != nil { + return nil, err + } + + circuit := InitializeCombinedCircuit(ps.InclusionTreeDepth, ps.InclusionNumberOfUtxos, ps.NonInclusionTreeDepth, ps.NonInclusionNumberOfUtxos) + + for i := 0; i < int(ps.InclusionNumberOfUtxos); i++ { + circuit.Inclusion.Roots[i] = params.InclusionParameters.Roots[i] + circuit.Inclusion.Leaves[i] = params.InclusionParameters.Leaves[i] + circuit.Inclusion.InPathIndices[i] = params.InclusionParameters.InPathIndices[i] + circuit.Inclusion.InPathElements[i] = make([]frontend.Variable, ps.InclusionTreeDepth) + for j := 0; j < int(ps.InclusionTreeDepth); j++ { + circuit.Inclusion.InPathElements[i][j] = params.InclusionParameters.InPathElements[i][j] + } + } + + for i := 0; i < int(ps.NonInclusionNumberOfUtxos); i++ { + circuit.NonInclusion.Roots[i] = params.NonInclusionParameters.Roots[i] + circuit.NonInclusion.Values[i] = params.NonInclusionParameters.Values[i] + circuit.NonInclusion.LeafLowerRangeValues[i] = params.NonInclusionParameters.LeafLowerRangeValues[i] + circuit.NonInclusion.LeafHigherRangeValues[i] = params.NonInclusionParameters.LeafHigherRangeValues[i] + circuit.NonInclusion.LeafIndices[i] = params.NonInclusionParameters.LeafIndices[i] + circuit.NonInclusion.InPathIndices[i] = params.NonInclusionParameters.InPathIndices[i] + circuit.NonInclusion.InPathElements[i] = make([]frontend.Variable, ps.NonInclusionTreeDepth) + for j := 0; j < int(ps.NonInclusionTreeDepth); j++ { + circuit.NonInclusion.InPathElements[i][j] = params.NonInclusionParameters.InPathElements[i][j] + } + } + + witness, err := frontend.NewWitness(&circuit, ecc.BN254.ScalarField()) + if err != nil { + return nil, err + } + + logging.Logger().Info().Msg("Proof combined" + strconv.Itoa(int(ps.InclusionTreeDepth)) + " " + strconv.Itoa(int(ps.InclusionNumberOfUtxos)) + " " + strconv.Itoa(int(ps.NonInclusionTreeDepth)) + " " + strconv.Itoa(int(ps.NonInclusionNumberOfUtxos))) + proof, err := groth16.Prove(ps.ConstraintSystem, ps.ProvingKey, witness) + if err != nil { + logging.Logger().Error().Msg("combined prove error: " + err.Error()) + return nil, err + } + + return &Proof{proof}, nil +} diff --git a/gnark-prover/prover/combined_test.go b/gnark-prover/prover/combined_test.go new file mode 100644 index 0000000000..7b4d25546b --- /dev/null +++ b/gnark-prover/prover/combined_test.go @@ -0,0 +1,176 @@ +package prover + +import ( + "bufio" + "encoding/json" + "fmt" + "github.com/consensys/gnark-crypto/ecc" + "github.com/consensys/gnark/backend" + "github.com/consensys/gnark/frontend" + "github.com/consensys/gnark/test" + "os" + "strings" + "testing" +) + +func TestCombined(t *testing.T) { + assert := test.NewAssert(t) + + file, err := os.Open("../test-data/combined.csv") + defer func(file *os.File) { + err := file.Close() + if err != nil { + fmt.Println("Error closing file: ", err) + } + }(file) + + assert.Nil(err, "Error opening file: ", err) + + scanner := bufio.NewScanner(file) + for scanner.Scan() { + line := scanner.Text() + if line == "" { + continue + } + splitLine := strings.Split(line, ";") + assert.Equal(len(splitLine), 2, "Invalid line: ", line) + + var params CombinedParameters + err := json.Unmarshal([]byte(splitLine[1]), ¶ms) + assert.Nil(err, "Error unmarshalling inputs: ", err) + + var inclusionNumberOfUtxos = len(params.InclusionParameters.Roots) + var inclusionTreeDepth = len(params.InclusionParameters.InPathElements[0]) + + inclusionRoots := make([]frontend.Variable, inclusionNumberOfUtxos) + for i, v := range params.InclusionParameters.Roots { + inclusionRoots[i] = v + } + + inclusionLeaves := make([]frontend.Variable, inclusionNumberOfUtxos) + for i, v := range params.InclusionParameters.Leaves { + inclusionLeaves[i] = v + } + + inclusionInPathIndices := make([]frontend.Variable, inclusionNumberOfUtxos) + for i, v := range params.InclusionParameters.InPathIndices { + inclusionInPathIndices[i] = v + } + + inclusionInPathElements := make([][]frontend.Variable, inclusionNumberOfUtxos) + for i := 0; i < inclusionNumberOfUtxos; i++ { + inclusionInPathElements[i] = make([]frontend.Variable, inclusionTreeDepth) + } + + for i, v := range params.InclusionParameters.InPathElements { + for j, v2 := range v { + inclusionInPathElements[i][j] = v2 + } + } + + var nonInclusionNumberOfUtxos = len(params.NonInclusionParameters.Roots) + var nonInclusionTreeDepth = len(params.NonInclusionParameters.InPathElements[0]) + + nonInclusionRoots := make([]frontend.Variable, nonInclusionNumberOfUtxos) + for i, v := range params.NonInclusionParameters.Roots { + nonInclusionRoots[i] = v + } + + nonInclusionValues := make([]frontend.Variable, nonInclusionNumberOfUtxos) + for i, v := range params.NonInclusionParameters.Values { + nonInclusionValues[i] = v + } + + nonInclusionLeafLowerRangeValues := make([]frontend.Variable, nonInclusionNumberOfUtxos) + for i, v := range params.NonInclusionParameters.LeafLowerRangeValues { + nonInclusionLeafLowerRangeValues[i] = v + } + + nonInclusionLeafHigherRangeValues := make([]frontend.Variable, nonInclusionNumberOfUtxos) + for i, v := range params.NonInclusionParameters.LeafHigherRangeValues { + nonInclusionLeafHigherRangeValues[i] = v + } + + nonInclusionLeafIndices := make([]frontend.Variable, nonInclusionNumberOfUtxos) + for i, v := range params.NonInclusionParameters.LeafIndices { + nonInclusionLeafIndices[i] = v + } + + nonInclusionInPathIndices := make([]frontend.Variable, nonInclusionNumberOfUtxos) + for i, v := range params.NonInclusionParameters.InPathIndices { + nonInclusionInPathIndices[i] = v + } + + nonInclusionInPathElements := make([][]frontend.Variable, nonInclusionNumberOfUtxos) + for i := 0; i < nonInclusionNumberOfUtxos; i++ { + nonInclusionInPathElements[i] = make([]frontend.Variable, nonInclusionTreeDepth) + } + + for i, v := range params.NonInclusionParameters.InPathElements { + for j, v2 := range v { + nonInclusionInPathElements[i][j] = v2 + } + } + + var circuit CombinedCircuit + + circuit.Inclusion.Roots = make([]frontend.Variable, inclusionNumberOfUtxos) + circuit.Inclusion.Leaves = make([]frontend.Variable, inclusionNumberOfUtxos) + circuit.Inclusion.InPathIndices = make([]frontend.Variable, inclusionNumberOfUtxos) + circuit.Inclusion.InPathElements = make([][]frontend.Variable, inclusionNumberOfUtxos) + for i := 0; i < inclusionNumberOfUtxos; i++ { + circuit.Inclusion.InPathElements[i] = make([]frontend.Variable, inclusionTreeDepth) + } + + circuit.Inclusion.NumberOfUtxos = inclusionNumberOfUtxos + circuit.Inclusion.Depth = inclusionTreeDepth + + circuit.NonInclusion.Roots = make([]frontend.Variable, nonInclusionNumberOfUtxos) + circuit.NonInclusion.Values = make([]frontend.Variable, nonInclusionNumberOfUtxos) + circuit.NonInclusion.LeafLowerRangeValues = make([]frontend.Variable, nonInclusionNumberOfUtxos) + circuit.NonInclusion.LeafHigherRangeValues = make([]frontend.Variable, nonInclusionNumberOfUtxos) + circuit.NonInclusion.LeafIndices = make([]frontend.Variable, nonInclusionNumberOfUtxos) + circuit.NonInclusion.InPathIndices = make([]frontend.Variable, nonInclusionNumberOfUtxos) + circuit.NonInclusion.InPathElements = make([][]frontend.Variable, nonInclusionNumberOfUtxos) + for i := 0; i < nonInclusionNumberOfUtxos; i++ { + circuit.NonInclusion.InPathElements[i] = make([]frontend.Variable, nonInclusionTreeDepth) + } + + circuit.NonInclusion.NumberOfUtxos = nonInclusionNumberOfUtxos + circuit.NonInclusion.Depth = nonInclusionTreeDepth + + assignment := &CombinedCircuit{ + Inclusion: InclusionCircuit{ + Roots: inclusionRoots, + Leaves: inclusionLeaves, + InPathIndices: inclusionInPathIndices, + InPathElements: inclusionInPathElements, + NumberOfUtxos: inclusionNumberOfUtxos, + Depth: inclusionTreeDepth, + }, + NonInclusion: NonInclusionCircuit{ + Roots: nonInclusionRoots, + Values: nonInclusionValues, + LeafLowerRangeValues: nonInclusionLeafLowerRangeValues, + LeafHigherRangeValues: nonInclusionLeafHigherRangeValues, + LeafIndices: nonInclusionLeafIndices, + InPathIndices: nonInclusionInPathIndices, + InPathElements: nonInclusionInPathElements, + NumberOfUtxos: nonInclusionNumberOfUtxos, + Depth: nonInclusionTreeDepth, + }, + } + + // Check if the expected result is "true" or "false" + expectedResult := splitLine[0] + if expectedResult == "0" { + // Run the failing test + assert.ProverFailed(&circuit, assignment, test.WithBackends(backend.GROTH16), test.WithCurves(ecc.BN254), test.NoSerialization()) + } else if expectedResult == "1" { + // Run the passing test + assert.ProverSucceeded(&circuit, assignment, test.WithBackends(backend.GROTH16), test.WithCurves(ecc.BN254), test.NoSerialization()) + } else { + fmt.Println("Invalid expected result: ", expectedResult) + } + } +} diff --git a/gnark-prover/prover/extractor.go b/gnark-prover/prover/extractor.go index eded6197e6..7aa4938879 100644 --- a/gnark-prover/prover/extractor.go +++ b/gnark-prover/prover/extractor.go @@ -10,8 +10,8 @@ func ExtractLean(treeDepth uint32, numberOfUtxos uint32) (string, error) { // Not checking for numberOfUtxos === 0 or treeDepth === 0 // Initialising MerkleProofs slice with correct dimentions - root := make([]frontend.Variable, numberOfUtxos) - leaf := make([]frontend.Variable, numberOfUtxos) + roots := make([]frontend.Variable, numberOfUtxos) + leaves := make([]frontend.Variable, numberOfUtxos) inPathIndices := make([]frontend.Variable, numberOfUtxos) inPathElements := make([][]frontend.Variable, numberOfUtxos) @@ -22,8 +22,8 @@ func ExtractLean(treeDepth uint32, numberOfUtxos uint32) (string, error) { inclusionCircuit := InclusionCircuit{ Depth: int(treeDepth), NumberOfUtxos: int(numberOfUtxos), - Root: root, - Leaf: leaf, + Roots: roots, + Leaves: leaves, InPathIndices: inPathIndices, InPathElements: inPathElements, } diff --git a/gnark-prover/prover/inclusion_circuit.go b/gnark-prover/prover/inclusion_circuit.go index 7cc40202f0..cb67a0451e 100644 --- a/gnark-prover/prover/inclusion_circuit.go +++ b/gnark-prover/prover/inclusion_circuit.go @@ -9,8 +9,8 @@ import ( type InclusionCircuit struct { // public inputs - Root []frontend.Variable `gnark:",public"` - Leaf []frontend.Variable `gnark:",public"` + Roots []frontend.Variable `gnark:",public"` + Leaves []frontend.Variable `gnark:",public"` // private inputs InPathIndices []frontend.Variable `gnark:"input"` @@ -22,34 +22,29 @@ type InclusionCircuit struct { func (circuit *InclusionCircuit) Define(api frontend.API) error { // Actual merkle proof verification. - roots := abstractor.Call1(api, InclusionProof{ - Root: circuit.Root, - Leaf: circuit.Leaf, + abstractor.Call1(api, InclusionProof{ + Roots: circuit.Roots, + Leaves: circuit.Leaves, InPathElements: circuit.InPathElements, InPathIndices: circuit.InPathIndices, NumberOfUtxos: circuit.NumberOfUtxos, Depth: circuit.Depth, }) - - for i := 0; i < circuit.NumberOfUtxos; i++ { - api.AssertIsEqual(roots[i], circuit.Root[i]) - } - return nil } func ImportInclusionSetup(treeDepth uint32, numberOfUtxos uint32, pkPath string, vkPath string) (*ProvingSystem, error) { - root := make([]frontend.Variable, numberOfUtxos) - leaf := make([]frontend.Variable, numberOfUtxos) + roots := make([]frontend.Variable, numberOfUtxos) + leaves := make([]frontend.Variable, numberOfUtxos) inPathIndices := make([]frontend.Variable, numberOfUtxos) inPathElements := make([][]frontend.Variable, numberOfUtxos) circuit := InclusionCircuit{ Depth: int(treeDepth), NumberOfUtxos: int(numberOfUtxos), - Root: root, - Leaf: leaf, + Roots: roots, + Leaves: leaves, InPathIndices: inPathIndices, InPathElements: inPathElements, } @@ -70,5 +65,5 @@ func ImportInclusionSetup(treeDepth uint32, numberOfUtxos uint32, pkPath string, return nil, err } - return &ProvingSystem{treeDepth, numberOfUtxos, true, pk, vk, ccs}, nil + return &ProvingSystem{treeDepth, numberOfUtxos, 0, 0, pk, vk, ccs}, nil } diff --git a/gnark-prover/prover/inclusion_proving_system.go b/gnark-prover/prover/inclusion_proving_system.go index 7fd4dac338..186496f8d6 100644 --- a/gnark-prover/prover/inclusion_proving_system.go +++ b/gnark-prover/prover/inclusion_proving_system.go @@ -14,68 +14,14 @@ import ( ) type InclusionParameters struct { - Root []big.Int + Roots []big.Int InPathIndices []uint32 InPathElements [][]big.Int - Leaf []big.Int -} - -func (p *InclusionParameters) ToJSON() string { - // convert params to string of hex values like: {"root":["0x0"],"inPathIndices":[0],"inPathElements":[["0x0"]],"leaf":["0x0"]} - // create json string variable - var jsonStr string - jsonStr += fmt.Sprintf("{\"root\": [") - // convert root to string of hex values - for i, v := range p.Root { - jsonStr += fmt.Sprintf("\"0x%s\"", v.Text(16)) - if i < len(p.Root)-1 { - jsonStr += "," - } - } - jsonStr += fmt.Sprintf("],") - - jsonStr += fmt.Sprintf("\"inPathIndices\": [") - // convert inPathIndices to string of uint32 values - for i, v := range p.InPathIndices { - jsonStr += fmt.Sprintf("%d", v) - if i < len(p.InPathIndices)-1 { - jsonStr += "," - } - } - jsonStr += fmt.Sprintf("],") - - jsonStr += fmt.Sprintf("\"inPathElements\": [") - // convert inPathElements to string of array of hex values - for i, v := range p.InPathElements { - jsonStr += "[" - for j, w := range v { - jsonStr += fmt.Sprintf("\"0x%s\"", w.Text(16)) - if j < len(v)-1 { - jsonStr += "," - } - } - jsonStr += "]" - if i < len(p.InPathElements)-1 { - jsonStr += "," - } - } - jsonStr += fmt.Sprintf("],") - - jsonStr += fmt.Sprintf("\"leaf\": [") - // convert leaf to string of hex values - for i, v := range p.Leaf { - jsonStr += fmt.Sprintf("\"0x%s\"", v.Text(16)) - if i < len(p.Leaf)-1 { - jsonStr += "," - } - } - jsonStr += fmt.Sprintf("]}") - - return jsonStr + Leaves []big.Int } func (p *InclusionParameters) NumberOfUTXOs() uint32 { - return uint32(len(p.Root)) + return uint32(len(p.Roots)) } func (p *InclusionParameters) TreeDepth() uint32 { @@ -87,7 +33,7 @@ func (p *InclusionParameters) TreeDepth() uint32 { func (p *InclusionParameters) ValidateShape(treeDepth uint32, numOfUTXOs uint32) error { if p.NumberOfUTXOs() != numOfUTXOs { - return fmt.Errorf("wrong number of utxos: %d", len(p.Root)) + return fmt.Errorf("wrong number of utxos: %d", len(p.Roots)) } if p.TreeDepth() != treeDepth { return fmt.Errorf("wrong size of merkle proof for proof %d: %d", p.NumberOfUTXOs(), p.TreeDepth()) @@ -96,8 +42,8 @@ func (p *InclusionParameters) ValidateShape(treeDepth uint32, numOfUTXOs uint32) } func R1CSInclusion(treeDepth uint32, numberOfUtxos uint32) (constraint.ConstraintSystem, error) { - root := make([]frontend.Variable, numberOfUtxos) - leaf := make([]frontend.Variable, numberOfUtxos) + roots := make([]frontend.Variable, numberOfUtxos) + leaves := make([]frontend.Variable, numberOfUtxos) inPathIndices := make([]frontend.Variable, numberOfUtxos) inPathElements := make([][]frontend.Variable, numberOfUtxos) @@ -108,8 +54,8 @@ func R1CSInclusion(treeDepth uint32, numberOfUtxos uint32) (constraint.Constrain circuit := InclusionCircuit{ Depth: int(treeDepth), NumberOfUtxos: int(numberOfUtxos), - Root: root, - Leaf: leaf, + Roots: roots, + Leaves: leaves, InPathIndices: inPathIndices, InPathElements: inPathElements, } @@ -125,32 +71,32 @@ func SetupInclusion(treeDepth uint32, numberOfUtxos uint32) (*ProvingSystem, err if err != nil { return nil, err } - return &ProvingSystem{treeDepth, numberOfUtxos, true, pk, vk, ccs}, nil + return &ProvingSystem{treeDepth, numberOfUtxos, 0, 0, pk, vk, ccs}, nil } func (ps *ProvingSystem) ProveInclusion(params *InclusionParameters) (*Proof, error) { - if err := params.ValidateShape(ps.TreeDepth, ps.NumberOfUtxos); err != nil { + if err := params.ValidateShape(ps.InclusionTreeDepth, ps.InclusionNumberOfUtxos); err != nil { return nil, err } - inPathIndices := make([]frontend.Variable, ps.NumberOfUtxos) - root := make([]frontend.Variable, ps.NumberOfUtxos) - leaf := make([]frontend.Variable, ps.NumberOfUtxos) - inPathElements := make([][]frontend.Variable, ps.NumberOfUtxos) + inPathIndices := make([]frontend.Variable, ps.InclusionNumberOfUtxos) + roots := make([]frontend.Variable, ps.InclusionNumberOfUtxos) + leaves := make([]frontend.Variable, ps.InclusionNumberOfUtxos) + inPathElements := make([][]frontend.Variable, ps.InclusionNumberOfUtxos) - for i := 0; i < int(ps.NumberOfUtxos); i++ { - root[i] = params.Root[i] - leaf[i] = params.Leaf[i] + for i := 0; i < int(ps.InclusionNumberOfUtxos); i++ { + roots[i] = params.Roots[i] + leaves[i] = params.Leaves[i] inPathIndices[i] = params.InPathIndices[i] - inPathElements[i] = make([]frontend.Variable, ps.TreeDepth) - for j := 0; j < int(ps.TreeDepth); j++ { + inPathElements[i] = make([]frontend.Variable, ps.InclusionTreeDepth) + for j := 0; j < int(ps.InclusionTreeDepth); j++ { inPathElements[i][j] = params.InPathElements[i][j] } } assignment := InclusionCircuit{ - Root: root, - Leaf: leaf, + Roots: roots, + Leaves: leaves, InPathIndices: inPathIndices, InPathElements: inPathElements, } @@ -160,7 +106,7 @@ func (ps *ProvingSystem) ProveInclusion(params *InclusionParameters) (*Proof, er return nil, err } - logging.Logger().Info().Msg("Proof inclusion" + strconv.Itoa(int(ps.TreeDepth)) + " " + strconv.Itoa(int(ps.NumberOfUtxos))) + logging.Logger().Info().Msg("Proof inclusion" + strconv.Itoa(int(ps.InclusionTreeDepth)) + " " + strconv.Itoa(int(ps.InclusionNumberOfUtxos))) proof, err := groth16.Prove(ps.ConstraintSystem, ps.ProvingKey, witness) if err != nil { return nil, err @@ -170,19 +116,19 @@ func (ps *ProvingSystem) ProveInclusion(params *InclusionParameters) (*Proof, er } func (ps *ProvingSystem) VerifyInclusion(root []big.Int, leaf []big.Int, proof *Proof) error { - leafArray := make([]frontend.Variable, ps.NumberOfUtxos) + leaves := make([]frontend.Variable, ps.InclusionNumberOfUtxos) for i, v := range leaf { - leafArray[i] = v + leaves[i] = v } - rootArray := make([]frontend.Variable, ps.NumberOfUtxos) + roots := make([]frontend.Variable, ps.InclusionNumberOfUtxos) for i, v := range root { - rootArray[i] = v + roots[i] = v } publicAssignment := InclusionCircuit{ - Leaf: leafArray, - Root: rootArray, + Roots: roots, + Leaves: leaves, } witness, err := frontend.NewWitness(&publicAssignment, ecc.BN254.ScalarField(), frontend.PublicOnly()) if err != nil { diff --git a/gnark-prover/prover/inclusion_test.go b/gnark-prover/prover/inclusion_test.go index 4b17dbcf68..00e2d50e88 100644 --- a/gnark-prover/prover/inclusion_test.go +++ b/gnark-prover/prover/inclusion_test.go @@ -38,17 +38,17 @@ func TestInclusion(t *testing.T) { err := json.Unmarshal([]byte(splitLine[1]), ¶ms) assert.Nil(err, "Error unmarshalling inputs: ", err) - var numberOfUtxos = len(params.Root) + var numberOfUtxos = len(params.Roots) var treeDepth = len(params.InPathElements[0]) - root := make([]frontend.Variable, numberOfUtxos) - for i, v := range params.Root { - root[i] = v + roots := make([]frontend.Variable, numberOfUtxos) + for i, v := range params.Roots { + roots[i] = v } - leaf := make([]frontend.Variable, numberOfUtxos) - for i, v := range params.Leaf { - leaf[i] = v + leaves := make([]frontend.Variable, numberOfUtxos) + for i, v := range params.Leaves { + leaves[i] = v } inPathIndices := make([]frontend.Variable, numberOfUtxos) @@ -68,8 +68,8 @@ func TestInclusion(t *testing.T) { } var circuit InclusionCircuit - circuit.Root = make([]frontend.Variable, numberOfUtxos) - circuit.Leaf = make([]frontend.Variable, numberOfUtxos) + circuit.Roots = make([]frontend.Variable, numberOfUtxos) + circuit.Leaves = make([]frontend.Variable, numberOfUtxos) circuit.InPathIndices = make([]frontend.Variable, numberOfUtxos) circuit.InPathElements = make([][]frontend.Variable, numberOfUtxos) for i := 0; i < int(numberOfUtxos); i++ { @@ -84,8 +84,8 @@ func TestInclusion(t *testing.T) { if expectedResult == "0" { // Run the failing test assert.ProverFailed(&circuit, &InclusionCircuit{ - Root: root, - Leaf: leaf, + Roots: roots, + Leaves: leaves, InPathIndices: inPathIndices, InPathElements: inPathElements, NumberOfUtxos: numberOfUtxos, @@ -94,8 +94,8 @@ func TestInclusion(t *testing.T) { } else if expectedResult == "1" { // Run the passing test assert.ProverSucceeded(&circuit, &InclusionCircuit{ - Root: root, - Leaf: leaf, + Roots: roots, + Leaves: leaves, InPathIndices: inPathIndices, InPathElements: inPathElements, NumberOfUtxos: numberOfUtxos, diff --git a/gnark-prover/prover/marshal.go b/gnark-prover/prover/marshal.go index afaca16a74..a02bb72750 100644 --- a/gnark-prover/prover/marshal.go +++ b/gnark-prover/prover/marshal.go @@ -97,30 +97,28 @@ func (ps *ProvingSystem) WriteTo(w io.Writer) (int64, error) { var totalWritten int64 = 0 var intBuf [4]byte - binary.BigEndian.PutUint32(intBuf[:], ps.TreeDepth) + binary.BigEndian.PutUint32(intBuf[:], ps.InclusionTreeDepth) written, err := w.Write(intBuf[:]) totalWritten += int64(written) if err != nil { return totalWritten, err } - binary.BigEndian.PutUint32(intBuf[:], ps.NumberOfUtxos) + binary.BigEndian.PutUint32(intBuf[:], ps.InclusionNumberOfUtxos) written, err = w.Write(intBuf[:]) totalWritten += int64(written) if err != nil { return totalWritten, err } - // todo: serialize bool ps.Inclusion with writer - - var inclusionInt uint32 - if ps.Inclusion { - inclusionInt = 1 - } else { - inclusionInt = 0 + binary.BigEndian.PutUint32(intBuf[:], ps.NonInclusionTreeDepth) + written, err = w.Write(intBuf[:]) + totalWritten += int64(written) + if err != nil { + return totalWritten, err } - binary.BigEndian.PutUint32(intBuf[:], inclusionInt) + binary.BigEndian.PutUint32(intBuf[:], ps.NonInclusionNumberOfUtxos) written, err = w.Write(intBuf[:]) totalWritten += int64(written) if err != nil { @@ -157,26 +155,28 @@ func (ps *ProvingSystem) UnsafeReadFrom(r io.Reader) (int64, error) { if err != nil { return totalRead, err } - ps.TreeDepth = binary.BigEndian.Uint32(intBuf[:]) + ps.InclusionTreeDepth = binary.BigEndian.Uint32(intBuf[:]) read, err = io.ReadFull(r, intBuf[:]) totalRead += int64(read) if err != nil { return totalRead, err } - ps.NumberOfUtxos = binary.BigEndian.Uint32(intBuf[:]) + ps.InclusionNumberOfUtxos = binary.BigEndian.Uint32(intBuf[:]) read, err = io.ReadFull(r, intBuf[:]) totalRead += int64(read) if err != nil { return totalRead, err } - var intInclusion = binary.BigEndian.Uint32(intBuf[:]) - if intInclusion == 1 { - ps.Inclusion = true - } else { - ps.Inclusion = false + ps.NonInclusionTreeDepth = binary.BigEndian.Uint32(intBuf[:]) + + read, err = io.ReadFull(r, intBuf[:]) + totalRead += int64(read) + if err != nil { + return totalRead, err } + ps.NonInclusionNumberOfUtxos = binary.BigEndian.Uint32(intBuf[:]) ps.ProvingKey = groth16.NewProvingKey(ecc.BN254) keyRead, err := ps.ProvingKey.UnsafeReadFrom(r) diff --git a/gnark-prover/prover/marshal_combined.go b/gnark-prover/prover/marshal_combined.go new file mode 100644 index 0000000000..ca46954244 --- /dev/null +++ b/gnark-prover/prover/marshal_combined.go @@ -0,0 +1,63 @@ +package prover + +import ( + "encoding/json" + "fmt" +) + +type CombinedParametersJSON struct { + InclusionParametersJSON `json:"inclusion"` + NonInclusionParametersJSON `json:"nonInclusion"` +} + +func ParseCombined(inputJSON string) (NonInclusionParameters, error) { + var proofData NonInclusionParameters + err := json.Unmarshal([]byte(inputJSON), &proofData) + if err != nil { + return NonInclusionParameters{}, fmt.Errorf("error parsing JSON: %v", err) + } + return proofData, nil +} + +func (p *CombinedParameters) MarshalJSON() ([]byte, error) { + inclusionParams, err := p.InclusionParameters.MarshalJSON() + if err != nil { + return nil, err + } + + nonInclusionParams, err := p.NonInclusionParameters.MarshalJSON() + if err != nil { + return nil, err + } + + combined := map[string]json.RawMessage{ + "inclusion": json.RawMessage(inclusionParams), + "nonInclusion": json.RawMessage(nonInclusionParams), + } + + return json.Marshal(combined) +} + +func (p *CombinedParameters) UnmarshalJSON(data []byte) error { + var rawMessages map[string]json.RawMessage + err := json.Unmarshal(data, &rawMessages) + if err != nil { + return err + } + + if msg, ok := rawMessages["inclusion"]; ok { + err := p.InclusionParameters.UnmarshalJSON(msg) + if err != nil { + return err + } + } + + if msg, ok := rawMessages["nonInclusion"]; ok { + err := p.NonInclusionParameters.UnmarshalJSON(msg) + if err != nil { + return err + } + } + + return nil +} diff --git a/gnark-prover/prover/marshal_inclusion.go b/gnark-prover/prover/marshal_inclusion.go index 14530c7f9e..228d99e40a 100644 --- a/gnark-prover/prover/marshal_inclusion.go +++ b/gnark-prover/prover/marshal_inclusion.go @@ -7,10 +7,10 @@ import ( ) type InclusionParametersJSON struct { - Root []string `json:"root"` + Roots []string `json:"roots"` InPathIndices []uint32 `json:"inPathIndices"` InPathElements [][]string `json:"inPathElements"` - Leaf []string `json:"leaf"` + Leaf []string `json:"leaves"` } func ParseInput(inputJSON string) (InclusionParameters, error) { @@ -25,9 +25,9 @@ func ParseInput(inputJSON string) (InclusionParameters, error) { func (p *InclusionParameters) MarshalJSON() ([]byte, error) { paramsJson := InclusionParametersJSON{} - paramsJson.Root = make([]string, len(p.Root)) - for i := 0; i < len(p.Root); i++ { - paramsJson.Root[i] = toHex(&p.Root[i]) + paramsJson.Roots = make([]string, len(p.Roots)) + for i := 0; i < len(p.Roots); i++ { + paramsJson.Roots[i] = toHex(&p.Roots[i]) } paramsJson.InPathIndices = make([]uint32, len(p.InPathIndices)) @@ -41,9 +41,9 @@ func (p *InclusionParameters) MarshalJSON() ([]byte, error) { } } - paramsJson.Leaf = make([]string, len(p.Leaf)) - for i := 0; i < len(p.Leaf); i++ { - paramsJson.Leaf[i] = toHex(&p.Leaf[i]) + paramsJson.Leaf = make([]string, len(p.Leaves)) + for i := 0; i < len(p.Leaves); i++ { + paramsJson.Leaf[i] = toHex(&p.Leaves[i]) } return json.Marshal(paramsJson) @@ -58,17 +58,17 @@ func (p *InclusionParameters) UnmarshalJSON(data []byte) error { return err } - p.Root = make([]big.Int, len(params.Root)) - for i := 0; i < len(params.Root); i++ { - err = fromHex(&p.Root[i], params.Root[i]) + p.Roots = make([]big.Int, len(params.Roots)) + for i := 0; i < len(params.Roots); i++ { + err = fromHex(&p.Roots[i], params.Roots[i]) if err != nil { return err } } - p.Leaf = make([]big.Int, len(params.Leaf)) + p.Leaves = make([]big.Int, len(params.Leaf)) for i := 0; i < len(params.Leaf); i++ { - err = fromHex(&p.Leaf[i], params.Leaf[i]) + err = fromHex(&p.Leaves[i], params.Leaf[i]) if err != nil { return err } diff --git a/gnark-prover/prover/marshal_non_inclusion.go b/gnark-prover/prover/marshal_non_inclusion.go new file mode 100644 index 0000000000..d4eb7e9c22 --- /dev/null +++ b/gnark-prover/prover/marshal_non_inclusion.go @@ -0,0 +1,136 @@ +package prover + +import ( + "encoding/json" + "fmt" + "math/big" +) + +type NonInclusionParametersJSON struct { + Roots []string `json:"roots"` + Values []string `json:"values"` + InPathIndices []uint32 `json:"inPathIndices"` + InPathElements [][]string `json:"inPathElements"` + + LeafLowerRangeValues []string `json:"leafLowerRangeValues"` + LeafHigherRangeValues []string `json:"leafHigherRangeValues"` + LeafIndices []uint32 `json:"leafIndices"` +} + +func ParseNonInclusion(inputJSON string) (NonInclusionParameters, error) { + var proofData NonInclusionParameters + err := json.Unmarshal([]byte(inputJSON), &proofData) + if err != nil { + return NonInclusionParameters{}, fmt.Errorf("error parsing JSON: %v", err) + } + return proofData, nil +} + +func (p *NonInclusionParameters) MarshalJSON() ([]byte, error) { + paramsJson := NonInclusionParametersJSON{} + + paramsJson.Roots = make([]string, len(p.Roots)) + for i := 0; i < len(p.Roots); i++ { + paramsJson.Roots[i] = toHex(&p.Roots[i]) + } + + paramsJson.Values = make([]string, len(p.Values)) + for i := 0; i < len(p.Values); i++ { + paramsJson.Values[i] = toHex(&p.Values[i]) + } + + paramsJson.LeafLowerRangeValues = make([]string, len(p.LeafLowerRangeValues)) + for i := 0; i < len(p.LeafLowerRangeValues); i++ { + paramsJson.LeafLowerRangeValues[i] = toHex(&p.LeafLowerRangeValues[i]) + } + + paramsJson.LeafHigherRangeValues = make([]string, len(p.LeafHigherRangeValues)) + for i := 0; i < len(p.LeafHigherRangeValues); i++ { + paramsJson.LeafHigherRangeValues[i] = toHex(&p.LeafHigherRangeValues[i]) + } + + paramsJson.LeafIndices = make([]uint32, len(p.LeafIndices)) + for i := 0; i < len(p.LeafIndices); i++ { + paramsJson.LeafIndices[i] = p.LeafIndices[i] + } + + paramsJson.InPathIndices = make([]uint32, len(p.InPathIndices)) + for i := 0; i < len(p.InPathIndices); i++ { + paramsJson.InPathIndices[i] = p.InPathIndices[i] + } + + paramsJson.InPathElements = make([][]string, len(p.InPathElements)) + for i := 0; i < len(p.InPathElements); i++ { + paramsJson.InPathElements[i] = make([]string, len(p.InPathElements[i])) + for j := 0; j < len(p.InPathElements[i]); j++ { + paramsJson.InPathElements[i][j] = toHex(&p.InPathElements[i][j]) + } + } + + return json.Marshal(paramsJson) +} + +func (p *NonInclusionParameters) UnmarshalJSON(data []byte) error { + + var params NonInclusionParametersJSON + + err := json.Unmarshal(data, ¶ms) + if err != nil { + return err + } + + p.Roots = make([]big.Int, len(params.Roots)) + for i := 0; i < len(params.Roots); i++ { + err = fromHex(&p.Roots[i], params.Roots[i]) + if err != nil { + return err + } + } + + p.Values = make([]big.Int, len(params.Values)) + for i := 0; i < len(params.Values); i++ { + err = fromHex(&p.Values[i], params.Values[i]) + if err != nil { + return err + } + } + + p.LeafLowerRangeValues = make([]big.Int, len(params.LeafLowerRangeValues)) + for i := 0; i < len(params.LeafLowerRangeValues); i++ { + err = fromHex(&p.LeafLowerRangeValues[i], params.LeafLowerRangeValues[i]) + if err != nil { + return err + } + } + + p.LeafHigherRangeValues = make([]big.Int, len(params.LeafHigherRangeValues)) + for i := 0; i < len(params.LeafHigherRangeValues); i++ { + err = fromHex(&p.LeafHigherRangeValues[i], params.LeafHigherRangeValues[i]) + if err != nil { + return err + } + } + + p.LeafIndices = make([]uint32, len(params.LeafIndices)) + for i := 0; i < len(params.LeafIndices); i++ { + p.LeafIndices[i] = params.LeafIndices[i] + } + + p.InPathIndices = make([]uint32, len(params.InPathIndices)) + for i := 0; i < len(params.InPathIndices); i++ { + p.InPathIndices[i] = params.InPathIndices[i] + } + + p.InPathElements = make([][]big.Int, len(params.InPathElements)) + for i := 0; i < len(params.InPathElements); i++ { + p.InPathElements[i] = make([]big.Int, len(params.InPathElements[i])) + for j := 0; j < len(params.InPathElements[i]); j++ { + err = fromHex(&p.InPathElements[i][j], params.InPathElements[i][j]) + if err != nil { + return err + } + } + } + + return nil +} diff --git a/gnark-prover/prover/non_inclusion_circuit.go b/gnark-prover/prover/non_inclusion_circuit.go new file mode 100644 index 0000000000..e06e5e997b --- /dev/null +++ b/gnark-prover/prover/non_inclusion_circuit.go @@ -0,0 +1,95 @@ +package prover + +import ( + "github.com/consensys/gnark-crypto/ecc" + "github.com/consensys/gnark/frontend" + "github.com/consensys/gnark/frontend/cs/r1cs" + "github.com/reilabs/gnark-lean-extractor/v2/abstractor" +) + +type NonInclusionCircuit struct { + // public inputs + Roots []frontend.Variable `gnark:",public"` + Values []frontend.Variable `gnark:",public"` + + // private inputs + LeafLowerRangeValues []frontend.Variable `gnark:"input"` + LeafHigherRangeValues []frontend.Variable `gnark:"input"` + LeafIndices []frontend.Variable `gnark:"input"` + + InPathIndices []frontend.Variable `gnark:"input"` + InPathElements [][]frontend.Variable `gnark:"input"` + + NumberOfUtxos int + Depth int +} + +func (circuit *NonInclusionCircuit) Define(api frontend.API) error { + proof := NonInclusionProof{ + Roots: circuit.Roots, + Values: circuit.Values, + + LeafLowerRangeValues: circuit.LeafLowerRangeValues, + LeafHigherRangeValues: circuit.LeafHigherRangeValues, + LeafIndices: circuit.LeafIndices, + + InPathElements: circuit.InPathElements, + InPathIndices: circuit.InPathIndices, + + NumberOfUtxos: circuit.NumberOfUtxos, + Depth: circuit.Depth, + } + roots := abstractor.Call1(api, proof) + + for i := 0; i < circuit.NumberOfUtxos; i++ { + api.AssertIsEqual(roots[i], circuit.Roots[i]) + } + return nil +} + +func ImportNonInclusionSetup(treeDepth uint32, numberOfUtxos uint32, pkPath string, vkPath string) (*ProvingSystem, error) { + roots := make([]frontend.Variable, numberOfUtxos) + values := make([]frontend.Variable, numberOfUtxos) + + leafLowerRangeValues := make([]frontend.Variable, numberOfUtxos) + leafHigherRangeValues := make([]frontend.Variable, numberOfUtxos) + leafIndices := make([]frontend.Variable, numberOfUtxos) + + inPathIndices := make([]frontend.Variable, numberOfUtxos) + inPathElements := make([][]frontend.Variable, numberOfUtxos) + + for i := 0; i < int(numberOfUtxos); i++ { + inPathElements[i] = make([]frontend.Variable, treeDepth) + } + + circuit := NonInclusionCircuit{ + Depth: int(treeDepth), + NumberOfUtxos: int(numberOfUtxos), + Roots: roots, + Values: values, + LeafLowerRangeValues: leafLowerRangeValues, + LeafHigherRangeValues: leafHigherRangeValues, + LeafIndices: leafIndices, + InPathIndices: inPathIndices, + InPathElements: inPathElements, + } + + ccs, err := frontend.Compile(ecc.BN254.ScalarField(), r1cs.NewBuilder, &circuit) + if err != nil { + return nil, err + } + + pk, err := LoadProvingKey(pkPath) + + if err != nil { + return nil, err + } + + vk, err := LoadVerifyingKey(vkPath) + + if err != nil { + return nil, err + } + + return &ProvingSystem{0, 0, treeDepth, numberOfUtxos, pk, vk, ccs}, nil +} diff --git a/gnark-prover/prover/non_inclusion_proving_system.go b/gnark-prover/prover/non_inclusion_proving_system.go new file mode 100644 index 0000000000..a03eb5c912 --- /dev/null +++ b/gnark-prover/prover/non_inclusion_proving_system.go @@ -0,0 +1,141 @@ +package prover + +import ( + "fmt" + "light/light-prover/logging" + "math/big" + "strconv" + + "github.com/consensys/gnark-crypto/ecc" + "github.com/consensys/gnark/backend/groth16" + "github.com/consensys/gnark/constraint" + "github.com/consensys/gnark/frontend" + "github.com/consensys/gnark/frontend/cs/r1cs" +) + +type NonInclusionParameters struct { + Roots []big.Int + Values []big.Int + + LeafLowerRangeValues []big.Int + LeafHigherRangeValues []big.Int + LeafIndices []uint32 + + InPathIndices []uint32 + InPathElements [][]big.Int +} + +func (p *NonInclusionParameters) NumberOfUTXOs() uint32 { + return uint32(len(p.Roots)) +} + +func (p *NonInclusionParameters) TreeDepth() uint32 { + if len(p.InPathElements) == 0 { + return 0 + } + return uint32(len(p.InPathElements[0])) +} + +func (p *NonInclusionParameters) ValidateShape(treeDepth uint32, numOfUTXOs uint32) error { + if p.NumberOfUTXOs() != numOfUTXOs { + return fmt.Errorf("wrong number of utxos: %d", len(p.Roots)) + } + if p.TreeDepth() != treeDepth { + return fmt.Errorf("wrong size of merkle proof for proof %d: %d", p.NumberOfUTXOs(), p.TreeDepth()) + } + return nil +} + +func R1CSNonInclusion(treeDepth uint32, numberOfUtxos uint32) (constraint.ConstraintSystem, error) { + roots := make([]frontend.Variable, numberOfUtxos) + values := make([]frontend.Variable, numberOfUtxos) + + leafLowerRangeValues := make([]frontend.Variable, numberOfUtxos) + leafHigherRangeValues := make([]frontend.Variable, numberOfUtxos) + leafIndices := make([]frontend.Variable, numberOfUtxos) + + inPathIndices := make([]frontend.Variable, numberOfUtxos) + inPathElements := make([][]frontend.Variable, numberOfUtxos) + + for i := 0; i < int(numberOfUtxos); i++ { + inPathElements[i] = make([]frontend.Variable, treeDepth) + } + + circuit := NonInclusionCircuit{ + Depth: int(treeDepth), + NumberOfUtxos: int(numberOfUtxos), + Roots: roots, + Values: values, + LeafLowerRangeValues: leafLowerRangeValues, + LeafHigherRangeValues: leafHigherRangeValues, + LeafIndices: leafIndices, + InPathIndices: inPathIndices, + InPathElements: inPathElements, + } + return frontend.Compile(ecc.BN254.ScalarField(), r1cs.NewBuilder, &circuit) +} + +func SetupNonInclusion(treeDepth uint32, numberOfUtxos uint32) (*ProvingSystem, error) { + ccs, err := R1CSNonInclusion(treeDepth, numberOfUtxos) + if err != nil { + return nil, err + } + pk, vk, err := groth16.Setup(ccs) + if err != nil { + return nil, err + } + return &ProvingSystem{0, 0, treeDepth, numberOfUtxos, pk, vk, ccs}, nil +} + +func (ps *ProvingSystem) ProveNonInclusion(params *NonInclusionParameters) (*Proof, error) { + if err := params.ValidateShape(ps.NonInclusionTreeDepth, ps.NonInclusionNumberOfUtxos); err != nil { + return nil, err + } + + roots := make([]frontend.Variable, ps.NonInclusionNumberOfUtxos) + values := make([]frontend.Variable, ps.NonInclusionNumberOfUtxos) + + leafLowerRangeValues := make([]frontend.Variable, ps.NonInclusionNumberOfUtxos) + leafHigherRangeValues := make([]frontend.Variable, ps.NonInclusionNumberOfUtxos) + leafIndices := make([]frontend.Variable, ps.NonInclusionNumberOfUtxos) + + inPathElements := make([][]frontend.Variable, ps.NonInclusionNumberOfUtxos) + inPathIndices := make([]frontend.Variable, ps.NonInclusionNumberOfUtxos) + + for i := 0; i < int(ps.NonInclusionNumberOfUtxos); i++ { + roots[i] = params.Roots[i] + values[i] = params.Values[i] + leafLowerRangeValues[i] = params.LeafLowerRangeValues[i] + leafHigherRangeValues[i] = params.LeafHigherRangeValues[i] + leafIndices[i] = params.LeafIndices[i] + inPathIndices[i] = params.InPathIndices[i] + inPathElements[i] = make([]frontend.Variable, ps.NonInclusionTreeDepth) + for j := 0; j < int(ps.NonInclusionTreeDepth); j++ { + inPathElements[i][j] = params.InPathElements[i][j] + } + } + + assignment := NonInclusionCircuit{ + Roots: roots, + Values: values, + LeafLowerRangeValues: leafLowerRangeValues, + LeafHigherRangeValues: leafHigherRangeValues, + LeafIndices: leafIndices, + InPathIndices: inPathIndices, + InPathElements: inPathElements, + } + + witness, err := frontend.NewWitness(&assignment, ecc.BN254.ScalarField()) + if err != nil { + return nil, err + } + + logging.Logger().Info().Msg("Proof non-inclusion" + strconv.Itoa(int(ps.NonInclusionTreeDepth)) + " " + strconv.Itoa(int(ps.NonInclusionNumberOfUtxos))) + proof, err := groth16.Prove(ps.ConstraintSystem, ps.ProvingKey, witness) + if err != nil { + logging.Logger().Error().Msg("non-inclusion prove error: " + err.Error()) + return nil, err + } + + return &Proof{proof}, nil +} diff --git a/gnark-prover/prover/non_inclusion_test.go b/gnark-prover/prover/non_inclusion_test.go new file mode 100644 index 0000000000..dc6b30514a --- /dev/null +++ b/gnark-prover/prover/non_inclusion_test.go @@ -0,0 +1,132 @@ +package prover + +import ( + "bufio" + "encoding/json" + "fmt" + "github.com/consensys/gnark-crypto/ecc" + "github.com/consensys/gnark/backend" + "github.com/consensys/gnark/frontend" + "github.com/consensys/gnark/test" + "os" + "strings" + "testing" +) + +// Iterate over data from csv file "inclusion_test_data.tsv", which contains test data for the inclusion proof. +// The file has two columns, separated by a semicolon. +// First column is the expected result, second column is the input. +// For each row, run the test with the input and check if the result is as expected. +func TestNonInclusion(t *testing.T) { + assert := test.NewAssert(t) + + file, err := os.Open("../test-data/non_inclusion.csv") + defer file.Close() + + assert.Nil(err, "Error opening file: ", err) + + scanner := bufio.NewScanner(file) + for scanner.Scan() { + line := scanner.Text() + if line == "" { + continue + } + splitLine := strings.Split(line, ";") + assert.Equal(len(splitLine), 2, "Invalid line: ", line) + + var params NonInclusionParameters + err := json.Unmarshal([]byte(splitLine[1]), ¶ms) + assert.Nil(err, "Error unmarshalling inputs: ", err) + + var numberOfUtxos = len(params.Roots) + var treeDepth = len(params.InPathElements[0]) + + roots := make([]frontend.Variable, numberOfUtxos) + for i, v := range params.Roots { + roots[i] = v + } + + values := make([]frontend.Variable, numberOfUtxos) + for i, v := range params.Values { + values[i] = v + } + + leafLowerRangeValues := make([]frontend.Variable, numberOfUtxos) + for i, v := range params.LeafLowerRangeValues { + leafLowerRangeValues[i] = v + } + + leafHigherRangeValues := make([]frontend.Variable, numberOfUtxos) + for i, v := range params.LeafHigherRangeValues { + leafHigherRangeValues[i] = v + } + + leafIndices := make([]frontend.Variable, numberOfUtxos) + for i, v := range params.LeafIndices { + leafIndices[i] = v + } + + inPathIndices := make([]frontend.Variable, numberOfUtxos) + for i, v := range params.InPathIndices { + inPathIndices[i] = v + } + + inPathElements := make([][]frontend.Variable, numberOfUtxos) + for i := 0; i < int(numberOfUtxos); i++ { + inPathElements[i] = make([]frontend.Variable, treeDepth) + } + + for i, v := range params.InPathElements { + for j, v2 := range v { + inPathElements[i][j] = v2 + } + } + + var circuit NonInclusionCircuit + circuit.Roots = make([]frontend.Variable, numberOfUtxos) + circuit.Values = make([]frontend.Variable, numberOfUtxos) + circuit.LeafLowerRangeValues = make([]frontend.Variable, numberOfUtxos) + circuit.LeafHigherRangeValues = make([]frontend.Variable, numberOfUtxos) + circuit.LeafIndices = make([]frontend.Variable, numberOfUtxos) + circuit.InPathIndices = make([]frontend.Variable, numberOfUtxos) + circuit.InPathElements = make([][]frontend.Variable, numberOfUtxos) + for i := 0; i < int(numberOfUtxos); i++ { + circuit.InPathElements[i] = make([]frontend.Variable, treeDepth) + } + + circuit.NumberOfUtxos = int(numberOfUtxos) + circuit.Depth = int(treeDepth) + + // Check if the expected result is "true" or "false" + expectedResult := splitLine[0] + if expectedResult == "0" { + // Run the failing test + assert.ProverFailed(&circuit, &NonInclusionCircuit{ + Roots: roots, + Values: values, + LeafLowerRangeValues: leafLowerRangeValues, + LeafHigherRangeValues: leafHigherRangeValues, + LeafIndices: leafIndices, + InPathIndices: inPathIndices, + InPathElements: inPathElements, + NumberOfUtxos: numberOfUtxos, + Depth: treeDepth, + }, test.WithBackends(backend.GROTH16), test.WithCurves(ecc.BN254), test.NoSerialization()) + } else if expectedResult == "1" { + // Run the passing test + assert.ProverSucceeded(&circuit, &NonInclusionCircuit{ + Roots: roots, + Values: values, + LeafLowerRangeValues: leafLowerRangeValues, + LeafHigherRangeValues: leafHigherRangeValues, + LeafIndices: leafIndices, + InPathIndices: inPathIndices, + InPathElements: inPathElements, + NumberOfUtxos: numberOfUtxos, + Depth: treeDepth, + }, test.WithBackends(backend.GROTH16), test.WithCurves(ecc.BN254), test.NoSerialization()) + } else { + fmt.Println("Invalid expected result: ", expectedResult) + } + } +} diff --git a/gnark-prover/prover/poseidon/constants.go b/gnark-prover/prover/poseidon/constants.go index d6c159b97d..165502928e 100644 --- a/gnark-prover/prover/poseidon/constants.go +++ b/gnark-prover/prover/poseidon/constants.go @@ -8,8 +8,7 @@ import ( func hex(s string) big.Int { var bi big.Int - bi.SetString(s, - 0) + bi.SetString(s, 0) return bi } @@ -500,3 +499,417 @@ var CONSTANTS_3 = [][]frontend.Variable{ hex("0x1da55cc900f0d21f4a3e694391918a1b3c23b2ac773c6b3ef88e2e4228325161"), }, } + +var MDS_4 = [][]frontend.Variable{ + { + hex("0x236d13393ef85cc48a351dd786dd7a1de5e39942296127fd87947223ae5108ad"), + hex("0x277686494f7644bbc4a9b194e10724eb967f1dc58718e59e3cedc821b2a7ae19"), + hex("0x023db68784e3f0cc0b85618826a9b3505129c16479973b0a84a4529e66b09c62"), + hex("0x1d359d245f286c12d50d663bae733f978af08cdbd63017c57b3a75646ff382c1"), + }, + { + hex("0x2a75a171563b807db525be259699ab28fe9bc7fb1f70943ff049bc970e841a0c"), + hex("0x083abff5e10051f078e2827d092e1ae808b4dd3e15ccc3706f38ce4157b6770e"), + hex("0x1a5ad71bbbecd8a97dc49cfdbae303ad24d5c4741eab8b7568a9ff8253a1eb6f"), + hex("0x0d745fd00dd167fb86772133640f02ce945004a7bc2c59e8790f725c5d84f0af"), + }, + { + hex("0x2070679e798782ef592a52ca9cef820d497ad2eecbaa7e42f366b3e521c4ed42"), + hex("0x2e18c8570d20bf5df800739a53da75d906ece318cd224ab6b3a2be979e2d7eab"), + hex("0x0fa86f0f27e4d3dd7f3367ce86f684f1f2e4386d3e5b9f38fa283c6aa723b608"), + hex("0x03f3e6fab791f16628168e4b14dbaeb657035ee3da6b2ca83f0c2491e0b403eb"), + }, + { + hex("0x2f545e578202c9732488540e41f783b68ff0613fd79375f8ba8b3d30958e7677"), + hex("0x23810bf82877fc19bff7eefeae3faf4bb8104c32ba4cd701596a15623d01476e"), + hex("0x014fcd5eb0be6d5beeafc4944034cf321c068ef930f10be2207ed58d2a34cdd6"), + hex("0xc15fc3a1d5733dd835eae0823e377f8ba4a8b627627cc2bb661c25d20fb52a"), + }, +} + +var CONSTANTS_4 = [][]frontend.Variable{ + { + hex("0x19b849f69450b06848da1d39bd5e4a4302bb86744edc26238b0878e269ed23e5"), + hex("0x265ddfe127dd51bd7239347b758f0a1320eb2cc7450acc1dad47f80c8dcf34d6"), + hex("0x199750ec472f1809e0f66a545e1e51624108ac845015c2aa3dfc36bab497d8aa"), + hex("0x157ff3fe65ac7208110f06a5f74302b14d743ea25067f0ffd032f787c7f1cdf8"), + }, + { + hex("0x2e49c43c4569dd9c5fd35ac45fca33f10b15c590692f8beefe18f4896ac94902"), + hex("0x0e35fb89981890520d4aef2b6d6506c3cb2f0b6973c24fa82731345ffa2d1f1e"), + hex("0x251ad47cb15c4f1105f109ae5e944f1ba9d9e7806d667ffec6fe723002e0b996"), + hex("0x13da07dc64d428369873e97160234641f8beb56fdd05e5f3563fa39d9c22df4e"), + }, + { + hex("0x0c009b84e650e6d23dc00c7dccef7483a553939689d350cd46e7b89055fd4738"), + hex("0x011f16b1c63a854f01992e3956f42d8b04eb650c6d535eb0203dec74befdca06"), + hex("0x0ed69e5e383a688f209d9a561daa79612f3f78d0467ad45485df07093f367549"), + hex("0x04dba94a7b0ce9e221acad41472b6bbe3aec507f5eb3d33f463672264c9f789b"), + }, + { + hex("0x0a3f2637d840f3a16eb094271c9d237b6036757d4bb50bf7ce732ff1d4fa28e8"), + hex("0x259a666f129eea198f8a1c502fdb38fa39b1f075569564b6e54a485d1182323f"), + hex("0x28bf7459c9b2f4c6d8e7d06a4ee3a47f7745d4271038e5157a32fdf7ede0d6a1"), + hex("0x0a1ca941f057037526ea200f489be8d4c37c85bbcce6a2aeec91bd6941432447"), + }, + { + hex("0x0c6f8f958be0e93053d7fd4fc54512855535ed1539f051dcb43a26fd926361cf"), + hex("0x123106a93cd17578d426e8128ac9d90aa9e8a00708e296e084dd57e69caaf811"), + hex("0x26e1ba52ad9285d97dd3ab52f8e840085e8fa83ff1e8f1877b074867cd2dee75"), + hex("0x1cb55cad7bd133de18a64c5c47b9c97cbe4d8b7bf9e095864471537e6a4ae2c5"), + }, + { + hex("0x1dcd73e46acd8f8e0e2c7ce04bde7f6d2a53043d5060a41c7143f08e6e9055d0"), + hex("0x011003e32f6d9c66f5852f05474a4def0cda294a0eb4e9b9b12b9bb4512e5574"), + hex("0x2b1e809ac1d10ab29ad5f20d03a57dfebadfe5903f58bafed7c508dd2287ae8c"), + hex("0x2539de1785b735999fb4dac35ee17ed0ef995d05ab2fc5faeaa69ae87bcec0a5"), + }, + { + hex("0x0c246c5a2ef8ee0126497f222b3e0a0ef4e1c3d41c86d46e43982cb11d77951d"), + hex("0x192089c4974f68e95408148f7c0632edbb09e6a6ad1a1c2f3f0305f5d03b527b"), + hex("0x1eae0ad8ab68b2f06a0ee36eeb0d0c058529097d91096b756d8fdc2fb5a60d85"), + hex("0x179190e5d0e22179e46f8282872abc88db6e2fdc0dee99e69768bd98c5d06bfb"), + }, + { + hex("0x29bb9e2c9076732576e9a81c7ac4b83214528f7db00f31bf6cafe794a9b3cd1c"), + hex("0x225d394e42207599403efd0c2464a90d52652645882aac35b10e590e6e691e08"), + hex("0x064760623c25c8cf753d238055b444532be13557451c087de09efd454b23fd59"), + hex("0x10ba3a0e01df92e87f301c4b716d8a394d67f4bf42a75c10922910a78f6b5b87"), + }, + { + hex("0x0e070bf53f8451b24f9c6e96b0c2a801cb511bc0c242eb9d361b77693f21471c"), + hex("0x1b94cd61b051b04dd39755ff93821a73ccd6cb11d2491d8aa7f921014de252fb"), + hex("0x1d7cb39bafb8c744e148787a2e70230f9d4e917d5713bb050487b5aa7d74070b"), + hex("0x2ec93189bd1ab4f69117d0fe980c80ff8785c2961829f701bb74ac1f303b17db"), + }, + { + hex("0x2db366bfdd36d277a692bb825b86275beac404a19ae07a9082ea46bd83517926"), + hex("0x062100eb485db06269655cf186a68532985275428450359adc99cec6960711b8"), + hex("0x0761d33c66614aaa570e7f1e8244ca1120243f92fa59e4f900c567bf41f5a59b"), + hex("0x20fc411a114d13992c2705aa034e3f315d78608a0f7de4ccf7a72e494855ad0d"), + }, + { + hex("0x25b5c004a4bdfcb5add9ec4e9ab219ba102c67e8b3effb5fc3a30f317250bc5a"), + hex("0x23b1822d278ed632a494e58f6df6f5ed038b186d8474155ad87e7dff62b37f4b"), + hex("0x22734b4c5c3f9493606c4ba9012499bf0f14d13bfcfcccaa16102a29cc2f69e0"), + hex("0x26c0c8fe09eb30b7e27a74dc33492347e5bdff409aa3610254413d3fad795ce5"), + }, + { + hex("0x070dd0ccb6bd7bbae88eac03fa1fbb26196be3083a809829bbd626df348ccad9"), + hex("0x12b6595bdb329b6fb043ba78bb28c3bec2c0a6de46d8c5ad6067c4ebfd4250da"), + hex("0x248d97d7f76283d63bec30e7a5876c11c06fca9b275c671c5e33d95bb7e8d729"), + hex("0x1a306d439d463b0816fc6fd64cc939318b45eb759ddde4aa106d15d9bd9baaaa"), + }, + { + hex("0x28a8f8372e3c38daced7c00421cb4621f4f1b54ddc27821b0d62d3d6ec7c56cf"), + hex("0x0094975717f9a8a8bb35152f24d43294071ce320c829f388bc852183e1e2ce7e"), + hex("0x04d5ee4c3aa78f7d80fde60d716480d3593f74d4f653ae83f4103246db2e8d65"), + hex("0x2a6cf5e9aa03d4336349ad6fb8ed2269c7bef54b8822cc76d08495c12efde187"), + }, + { + hex("0x2304d31eaab960ba9274da43e19ddeb7f792180808fd6e43baae48d7efcba3f3"), + hex("0x03fd9ac865a4b2a6d5e7009785817249bff08a7e0726fcb4e1c11d39d199f0b0"), + hex("0x00b7258ded52bbda2248404d55ee5044798afc3a209193073f7954d4d63b0b64"), + hex("0x159f81ada0771799ec38fca2d4bf65ebb13d3a74f3298db36272c5ca65e92d9a"), + }, + { + hex("0x1ef90e67437fbc8550237a75bc28e3bb9000130ea25f0c5471e144cf4264431f"), + hex("0x1e65f838515e5ff0196b49aa41a2d2568df739bc176b08ec95a79ed82932e30d"), + hex("0x2b1b045def3a166cec6ce768d079ba74b18c844e570e1f826575c1068c94c33f"), + hex("0x0832e5753ceb0ff6402543b1109229c165dc2d73bef715e3f1c6e07c168bb173"), + }, + { + hex("0x02f614e9cedfb3dc6b762ae0a37d41bab1b841c2e8b6451bc5a8e3c390b6ad16"), + hex("0x0e2427d38bd46a60dd640b8e362cad967370ebb777bedff40f6a0be27e7ed705"), + hex("0x0493630b7c670b6deb7c84d414e7ce79049f0ec098c3c7c50768bbe29214a53a"), + hex("0x22ead100e8e482674decdab17066c5a26bb1515355d5461a3dc06cc85327cea9"), + }, + { + hex("0x25b3e56e655b42cdaae2626ed2554d48583f1ae35626d04de5084e0b6d2a6f16"), + hex("0x1e32752ada8836ef5837a6cde8ff13dbb599c336349e4c584b4fdc0a0cf6f9d0"), + hex("0x2fa2a871c15a387cc50f68f6f3c3455b23c00995f05078f672a9864074d412e5"), + hex("0x2f569b8a9a4424c9278e1db7311e889f54ccbf10661bab7fcd18e7c7a7d83505"), + }, + { + hex("0x044cb455110a8fdd531ade530234c518a7df93f7332ffd2144165374b246b43d"), + hex("0x227808de93906d5d420246157f2e42b191fe8c90adfe118178ddc723a5319025"), + hex("0x02fcca2934e046bc623adead873579865d03781ae090ad4a8579d2e7a6800355"), + hex("0x0ef915f0ac120b876abccceb344a1d36bad3f3c5ab91a8ddcbec2e060d8befac"), + }, + { + hex("0x1797130f4b7a3e1777eb757bc6f287f6ab0fb85f6be63b09f3b16ef2b1405d38"), + hex("0x0a76225dc04170ae3306c85abab59e608c7f497c20156d4d36c668555decc6e5"), + hex("0x1fffb9ec1992d66ba1e77a7b93209af6f8fa76d48acb664796174b5326a31a5c"), + hex("0x25721c4fc15a3f2853b57c338fa538d85f8fbba6c6b9c6090611889b797b9c5f"), + }, + { + hex("0x0c817fd42d5f7a41215e3d07ba197216adb4c3790705da95eb63b982bfcaf75a"), + hex("0x13abe3f5239915d39f7e13c2c24970b6df8cf86ce00a22002bc15866e52b5a96"), + hex("0x2106feea546224ea12ef7f39987a46c85c1bc3dc29bdbd7a92cd60acb4d391ce"), + hex("0x21ca859468a746b6aaa79474a37dab49f1ca5a28c748bc7157e1b3345bb0f959"), + }, + { + hex("0x05ccd6255c1e6f0c5cf1f0df934194c62911d14d0321662a8f1a48999e34185b"), + hex("0x0f0e34a64b70a626e464d846674c4c8816c4fb267fe44fe6ea28678cb09490a4"), + hex("0x0558531a4e25470c6157794ca36d0e9647dbfcfe350d64838f5b1a8a2de0d4bf"), + hex("0x09d3dca9173ed2faceea125157683d18924cadad3f655a60b72f5864961f1455"), + }, + { + hex("0x0328cbd54e8c0913493f866ed03d218bf23f92d68aaec48617d4c722e5bd4335"), + hex("0x2bf07216e2aff0a223a487b1a7094e07e79e7bcc9798c648ee3347dd5329d34b"), + hex("0x1daf345a58006b736499c583cb76c316d6f78ed6a6dffc82111e11a63fe412df"), + hex("0x176563472456aaa746b694c60e1823611ef39039b2edc7ff391e6f2293d2c404"), + }, + { + hex("0x2ef1e0fad9f08e87a3bb5e47d7e33538ca964d2b7d1083d4fb0225035bd3f8db"), + hex("0x226c9b1af95babcf17b2b1f57c7310179c1803dec5ae8f0a1779ed36c817ae2a"), + hex("0x14bce3549cc3db7428126b4c3a15ae0ff8148c89f13fb35d35734eb5d4ad0def"), + hex("0x2debff156e276bb5742c3373f2635b48b8e923d301f372f8e550cfd4034212c7"), + }, + { + hex("0x2d4083cf5a87f5b6fc2395b22e356b6441afe1b6b29c47add7d0432d1d4760c7"), + hex("0x0c225b7bcd04bf9c34b911262fdc9c1b91bf79a10c0184d89c317c53d7161c29"), + hex("0x03152169d4f3d06ec33a79bfac91a02c99aa0200db66d5aa7b835265f9c9c8f3"), + hex("0x0b61811a9210be78b05974587486d58bddc8f51bfdfebbb87afe8b7aa7d3199c"), + }, + { + hex("0x203e000cad298daaf7eba6a5c5921878b8ae48acf7048f16046d637a533b6f78"), + hex("0x1a44bf0937c722d1376672b69f6c9655ba7ee386fda1112c0757143d1bfa9146"), + hex("0x0376b4fae08cb03d3500afec1a1f56acb8e0fde75a2106d7002f59c5611d4daa"), + hex("0x00780af2ca1cad6465a2171250fdfc32d6fc241d3214177f3d553ef363182185"), + }, + { + hex("0x10774d9ab80c25bdeb808bedfd72a8d9b75dbe18d5221c87e9d857079bdc31d5"), + hex("0x10dc6e9c006ea38b04b1e03b4bd9490c0d03f98929ca1d7fb56821fd19d3b6e8"), + hex("0x00544b8338791518b2c7645a50392798b21f75bb60e3596170067d00141cac16"), + hex("0x222c01175718386f2e2e82eb122789e352e105a3b8fa852613bc534433ee428c"), + }, + { + hex("0x2840d045e9bc22b259cfb8811b1e0f45b77f7bdb7f7e2b46151a1430f608e3c5"), + hex("0x062752f86eebe11a009c937e468c335b04554574c2990196508e01fa5860186b"), + hex("0x06041bdac48205ac87adb87c20a478a71c9950c12a80bc0a55a8e83eaaf04746"), + hex("0x04a533f236c422d1ff900a368949b0022c7a2ae092f308d82b1dcbbf51f5000d"), + }, + { + hex("0x13e31d7a67232fd811d6a955b3d4f25dfe066d1e7dc33df04bde50a2b2d05b2a"), + hex("0x011c2683ae91eb4dfbc13d6357e8599a9279d1648ff2c95d2f79905bb13920f1"), + hex("0x0b0d219346b8574525b1a270e0b4cba5d56c928e3e2c2bd0a1ecaed015aaf6ae"), + hex("0x14abdec8db9c6dc970291ee638690209b65080781ef9fd13d84c7a726b5f1364"), + }, + { + hex("0x1a0b70b4b26fdc28fcd32aa3d266478801eb12202ef47ced988d0376610be106"), + hex("0x278543721f96d1307b6943f9804e7fe56401deb2ef99c4d12704882e7278b607"), + hex("0x16eb59494a9776cf57866214dbd1473f3f0738a325638d8ba36535e011d58259"), + hex("0x2567a658a81ffb444f240088fa5524c69a9e53eeab6b7f8c41c3479dcf8c644a"), + }, + { + hex("0x29aa1d7c151e9ad0a7ab39f1abd9cf77ab78e0215a5715a6b882ade840bb13d8"), + hex("0x15c091233e60efe0d4bbfce2b36415006a4f017f9a85388ce206b91f99f2c984"), + hex("0x16bd7d22ff858e5e0882c2c999558d77e7673ad5f1915f9feb679a8115f014cf"), + hex("0x02db50480a07be0eb2c2e13ed6ef4074c0182d9b668b8e08ffe6769250042025"), + }, + { + hex("0x05e4a220e6a3bc9f7b6806ec9d6cdba186330ef2bf7adb4c13ba866343b73119"), + hex("0x1dda05ebc30170bc98cbf2a5ee3b50e8b5f70bc424d39fa4104d37f1cbcf7a42"), + hex("0x0184bef721888187f645b6fee3667f3c91da214414d89ba5cd301f22b0de8990"), + hex("0x1498a307e68900065f5e8276f62aef1c37414b84494e1577ad1a6d64341b78ec"), + }, + { + hex("0x25f40f82b31dacc4f4939800b9d2c3eacef737b8fab1f864fe33548ad46bd49d"), + hex("0x09d317cc670251943f6f5862a30d2ea9e83056ce4907bfbbcb1ff31ce5bb9650"), + hex("0x2f77d77786d979b23ba4ce4a4c1b3bd0a41132cd467a86ab29b913b6cf3149d0"), + hex("0x0f53dafd535a9f4473dc266b6fccc6841bbd336963f254c152f89e785f729bbf"), + }, + { + hex("0x25c1fd72e223045265c3a099e17526fa0e6976e1c00baf16de96de85deef2fa2"), + hex("0x2a902c8980c17faae368d385d52d16be41af95c84eaea3cf893e65d6ce4a8f62"), + hex("0x1ce1580a3452ecf302878c8976b82be96676dd114d1dc8d25527405762f83529"), + hex("0x24a6073f91addc33a49a1fa306df008801c5ec569609034d2fc50f7f0f4d0056"), + }, + { + hex("0x25e52dbd6124530d9fc27fe306d71d4583e07ca554b5d1577f256c68b0be2b74"), + hex("0x23dffae3c423fa7a93468dbccfb029855974be4d0a7b29946796e5b6cd70f15d"), + hex("0x06342da370cc0d8c49b77594f6b027c480615d50be36243a99591bc9924ed6f5"), + hex("0x2754114281286546b75f09f115fc751b4778303d0405c1b4cc7df0d8e9f63925"), + }, + { + hex("0x15c19e8534c5c1a8862c2bc1d119eddeabf214153833d7bdb59ee197f8187cf5"), + hex("0x265fe062766d08fab4c78d0d9ef3cabe366f3be0a821061679b4b3d2d77d5f3e"), + hex("0x13ccf689d67a3ec9f22cb7cd0ac3a327d377ac5cd0146f048debfd098d3ec7be"), + hex("0x17662f7456789739f81cd3974827a887d92a5e05bdf3fe6b9fbccca4524aaebd"), + }, + { + hex("0x21b29c76329b31c8ef18631e515f7f2f82ca6a5cca70cee4e809fd624be7ad5d"), + hex("0x18137478382aadba441eb97fe27901989c06738165215319939eb17b01fa975c"), + hex("0x2bc07ea2bfad68e8dc724f5fef2b37c2d34f761935ffd3b739ceec4668f37e88"), + hex("0x2ddb2e376f54d64a563840480df993feb4173203c2bd94ad0e602077aef9a03e"), + }, + { + hex("0x277eb50f2baa706106b41cb24c602609e8a20f8d72f613708adb25373596c3f7"), + hex("0x0d4de47e1aba34269d0c620904f01a56b33fc4b450c0db50bb7f87734c9a1fe5"), + hex("0x0b8442bfe9e4a1b4428673b6bd3eea6f9f445697058f134aae908d0279a29f0c"), + hex("0x11fe5b18fbbea1a86e06930cb89f7d4a26e186a65945e96574247fddb720f8f5"), + }, + { + hex("0x224026f6dfaf71e24d25d8f6d9f90021df5b774dcad4d883170e4ad89c33a0d6"), + hex("0x0b2ca6a999fe6887e0704dad58d03465a96bc9e37d1091f61bc9f9c62bbeb824"), + hex("0x221b63d66f0b45f9d40c54053a28a06b1d0a4ce41d364797a1a7e0c96529f421"), + hex("0x30185c48b7b2f1d53d4120801b047d087493bce64d4d24aedce2f4836bb84ad4"), + }, + { + hex("0x23f5d372a3f0e3cba989e223056227d3533356f0faa48f27f8267318632a61f0"), + hex("0x2716683b32c755fd1bf8235ea162b1f388e1e0090d06162e8e6dfbe4328f3e3b"), + hex("0x0977545836866fa204ca1d853ec0909e3d140770c80ac67dc930c69748d5d4bc"), + hex("0x1444e8f592bdbfd8025d91ab4982dd425f51682d31472b05e81c43c0f9434b31"), + }, + { + hex("0x26e04b65e9ca8270beb74a1c5cb8fee8be3ffbfe583f7012a00f874e7718fbe3"), + hex("0x22a5c2fa860d11fe34ee47a5cd9f869800f48f4febe29ad6df69816fb1a914d2"), + hex("0x174b54d9907d8f5c6afd672a738f42737ec338f3a0964c629f7474dd44c5c8d7"), + hex("0x1db1db8aa45283f31168fa66694cf2808d2189b87c8c8143d56c871907b39b87"), + }, + { + hex("0x1530bf0f46527e889030b8c7b7dfde126f65faf8cce0ab66387341d813d1bfd1"), + hex("0x0b73f613993229f59f01c1cec8760e9936ead9edc8f2814889330a2f2bade457"), + hex("0x29c25a22fe2164604552aaea377f448d587ab977fc8227787bd2dc0f36bcf41e"), + hex("0x2b30d53ed1759bfb8503da66c92cf4077abe82795dc272b377df57d77c875526"), + }, + { + hex("0x12f6d703b5702aab7b7b7e69359d53a2756c08c85ede7227cf5f0a2916787cd2"), + hex("0x2520e18300afda3f61a40a0b8837293a55ad01071028d4841ffa9ac706364113"), + hex("0x1ec9daea860971ecdda8ed4f346fa967ac9bc59278277393c68f09fa03b8b95f"), + hex("0x0a99b3e178db2e2e432f5cd5bef8fe4483bf5cbf70ed407c08aae24b830ad725"), + }, + { + hex("0x07cda9e63db6e39f086b89b601c2bbe407ee0abac3c817a1317abad7c5778492"), + hex("0x08c9c65a4f955e8952d571b191bb0adb49bd8290963203b35d48aab38f8fc3a3"), + hex("0x2737f8ce1d5a67b349590ddbfbd709ed9af54a2a3f2719d33801c9c17bdd9c9e"), + hex("0x1049a6c65ff019f0d28770072798e8b7909432bd0c129813a9f179ba627f7d6a"), + }, + { + hex("0x18b4fe968732c462c0ea5a9beb27cecbde8868944fdf64ee60a5122361daeddb"), + hex("0x2ff2b6fd22df49d2440b2eaeeefa8c02a6f478cfcf11f1b2a4f7473483885d19"), + hex("0x2ec5f2f1928fe932e56c789b8f6bbcb3e8be4057cbd8dbd18a1b352f5cef42ff"), + hex("0x265a5eccd8b92975e33ad9f75bf3426d424a4c6a7794ee3f08c1d100378e545e"), + }, + { + hex("0x2405eaa4c0bde1129d6242bb5ada0e68778e656cfcb366bf20517da1dfd4279c"), + hex("0x094c97d8c194c42e88018004cbbf2bc5fdb51955d8b2d66b76dd98a2dbf60417"), + hex("0x2c30d5f33bb32c5c22b9979a605bf64d508b705221e6a686330c9625c2afe0b8"), + hex("0x01a75666f6241f6825d01cc6dcb1622d4886ea583e87299e6aa2fc716fdb6cf5"), + }, + { + hex("0x0a3290e8398113ea4d12ac091e87be7c6d359ab9a66979fcf47bf2e87d382fcb"), + hex("0x154ade9ca36e268dfeb38461425bb0d8c31219d8fa0dfc75ecd21bf69aa0cc74"), + hex("0x27aa8d3e25380c0b1b172d79c6f22eee99231ef5dc69d8dc13a4b5095d028772"), + hex("0x2cf4051e6cab48301a8b2e3bca6099d756bbdf485afa1f549d395bbcbd806461"), + }, + { + hex("0x301e70f729f3c94b1d3f517ddff9f2015131feab8afa5eebb0843d7f84b23e71"), + hex("0x298beb64f812d25d8b4d9620347ab02332dc4cef113ae60d17a8d7a4c91f83bc"), + hex("0x1b362e72a5f847f84d03fd291c3c471ed1c14a15b221680acf11a3f02e46aa95"), + hex("0x0dc8a2146110c0b375432902999223d5aa1ef6e78e1e5ebcbc1d9ba41dc1c737"), + }, + { + hex("0x0a48663b34ce5e1c05dc93092cb69778cb21729a72ddc03a08afa1eb922ff279"), + hex("0x0a87391fb1cd8cdf6096b64a82f9e95f0fe46f143b702d74545bb314881098ee"), + hex("0x1b5b2946f7c28975f0512ff8e6ca362f8826edd7ea9c29f382ba8a2a0892fd5d"), + hex("0x01001cf512ac241d47ebe2239219bc6a173a8bbcb8a5b987b4eac1f533315b6b"), + }, + { + hex("0x2fd977c70f645db4f704fa7d7693da727ac093d3fb5f5febc72beb17d8358a32"), + hex("0x23c0039a3fab4ad3c2d7cc688164f39e761d5355c05444d99be763a97793a9c4"), + hex("0x19d43ee0c6081c052c9c0df6161eaac1aec356cf435888e79f27f22ff03fa25d"), + hex("0x2d9b10c2f2e7ac1afddccffd94a563028bf29b646d020830919f9d5ca1cefe59"), + }, + { + hex("0x2457ca6c2f2aa30ec47e4aff5a66f5ce2799283e166fc81cdae2f2b9f83e4267"), + hex("0x0abc392fe85eda855820592445094022811ee8676ed6f0c3044dfb54a7c10b35"), + hex("0x19d2cc5ca549d1d40cebcd37f3ea54f31161ac3993acf3101d2c2bc30eac1eb0"), + hex("0x0f97ae3033ffa01608aafb26ae13cd393ee0e4ec041ba644a3d3ab546e98c9c8"), + }, + { + hex("0x16dbc78fd28b7fb8260e404cf1d427a7fa15537ea4e168e88a166496e88cfeca"), + hex("0x240faf28f11499b916f085f73bc4f22eef8344e576f8ad3d1827820366d5e07b"), + hex("0x0a1bb075aa37ff0cfe6c8531e55e1770eaba808c8fdb6dbf46f8cab58d9ef1af"), + hex("0x2e47e15ea4a47ff1a6a853aaf3a644ca38d5b085ac1042fdc4a705a7ce089f4d"), + }, + { + hex("0x166e5bf073378348860ca4a9c09d39e1673ab059935f4df35fb14528375772b6"), + hex("0x18b42d7ffdd2ea4faf235902f057a2740cacccd027233001ed10f96538f0916f"), + hex("0x089cb1b032238f5e4914788e3e3c7ead4fc368020b3ed38221deab1051c37702"), + hex("0x242acd3eb3a2f72baf7c7076dd165adf89f9339c7b971921d9e70863451dd8d1"), + }, + { + hex("0x174fbb104a4ee302bf47f2bd82fce896eac9a068283f326474af860457245c3b"), + hex("0x17340e71d96f466d61f3058ce092c67d2891fb2bb318613f780c275fe1116c6b"), + hex("0x1e8e40ac853b7d42f00f2e383982d024f098b9f8fd455953a2fd380c4df7f6b2"), + hex("0x0529898dc0649907e1d4d5e284b8d1075198c55cad66e8a9bf40f92938e2e961"), + }, + { + hex("0x2162754db0baa030bf7de5bb797364dce8c77aa017ee1d7bf65f21c4d4e5df8f"), + hex("0x12c7553698c4bf6f3ceb250ae00c58c2a9f9291efbde4c8421bef44741752ec6"), + hex("0x292643e3ba2026affcb8c5279313bd51a733c93353e9d9c79cb723136526508e"), + hex("0x00ccf13e0cb6f9d81d52951bea990bd5b6c07c5d98e66ff71db6e74d5b87d158"), + }, + { + hex("0x185d1e20e23b0917dd654128cf2f3aaab6723873cb30fc22b0f86c15ab645b4b"), + hex("0x14c61c836d55d3df742bdf11c60efa186778e3de0f024c0f13fe53f8d8764e1f"), + hex("0x0f356841b3f556fce5dbe4680457691c2919e2af53008184d03ee1195d72449e"), + hex("0x1b8fd9ff39714e075df124f887bf40b383143374fd2080ba0c0a6b6e8fa5b3e8"), + }, + { + hex("0x0e86a8c2009c140ca3f873924e2aaa14fc3c8ae04e9df0b3e9103418796f6024"), + hex("0x2e6c5e898f5547770e5462ad932fcdd2373fc43820ca2b16b0861421e79155c8"), + hex("0x05d797f1ab3647237c14f9d1df032bc9ff9fe1a0ecd377972ce5fd5a0c014604"), + hex("0x29a3110463a5aae76c3d152875981d0c1daf2dcd65519ef5ca8929851da8c008"), + }, + { + hex("0x2974da7bc074322273c3a4b91c05354cdc71640a8bbd1f864b732f8163883314"), + hex("0x1ed0fb06699ba249b2a30621c05eb12ca29cb91aa082c8bfcce9c522889b47dc"), + hex("0x1c793ef0dcc51123654ff26d8d863feeae29e8c572eca912d80c8ae36e40fe9b"), + hex("0x1e6aac1c6d3dd3157956257d3d234ef18c91e82589a78169fbb4a8770977dc2f"), + }, + { + hex("0x1a20ada7576234eee6273dd6fa98b25ed037748080a47d948fcda33256fb6bf5"), + hex("0x191033d6d85ceaa6fc7a9a23a6fd9996642d772045ece51335d49306728af96c"), + hex("0x006e5979da7e7ef53a825aa6fddc3abfc76f200b3740b8b232ef481f5d06297b"), + hex("0x0b0d7e69c651910bbef3e68d417e9fa0fbd57f596c8f29831eff8c0174cdb06d"), + }, + { + hex("0x25caf5b0c1b93bc516435ec084e2ecd44ac46dbbb033c5112c4b20a25c9cdf9d"), + hex("0x12c1ea892cc31e0d9af8b796d9645872f7f77442d62fd4c8085b2f150f72472a"), + hex("0x16af29695157aba9b8bbe3afeb245feee5a929d9f928b9b81de6dadc78c32aae"), + hex("0x0136df457c80588dd687fb2f3be18691705b87ec5a4cfdc168d31084256b67dc"), + }, + { + hex("0x1639a28c5b4c81166aea984fba6e71479e07b1efbc74434db95a285060e7b089"), + hex("0x03d62fbf82fd1d4313f8e650f587ec06816c28b700bdc50f7e232bd9b5ca9b76"), + hex("0x11aeeb527dc8ce44b4d14aaddca3cfe2f77a1e40fc6da97c249830de1edfde54"), + hex("0x13f9b9a41274129479c5e6138c6c8ee36a670e6bc68c7a49642b645807bfc824"), + }, + { + hex("0x0e4772fa3d75179dc8484cd26c7c1f635ddeeed7a939440c506cae8b7ebcd15b"), + hex("0x1b39a00cbc81e427de4bdec58febe8d8b5971752067a612b39fc46a68c5d4db4"), + hex("0x2bedb66e1ad5a1d571e16e2953f48731f66463c2eb54a245444d1c0a3a25707e"), + hex("0x2cf0a09a55ca93af8abd068f06a7287fb08b193b608582a27379ce35da915dec"), + }, + { + hex("0x2d1bd78fa90e77aa88830cabfef2f8d27d1a512050ba7db0753c8fb863efb387"), + hex("0x065610c6f4f92491f423d3071eb83539f7c0d49c1387062e630d7fd283dc3394"), + hex("0x2d933ff19217a5545013b12873452bebcc5f9969033f15ec642fb464bd607368"), + hex("0x1aa9d3fe4c644910f76b92b3e13b30d500dae5354e79508c3c49c8aa99e0258b"), + }, + { + hex("0x027ef04869e482b1c748638c59111c6b27095fa773e1aca078cea1f1c8450bdd"), + hex("0x2b7d524c5172cbbb15db4e00668a8c449f67a2605d9ec03802e3fa136ad0b8fb"), + hex("0x0c7c382443c6aa787c8718d86747c7f74693ae25b1e55df13f7c3c1dd735db0f"), + hex("0x00b4567186bc3f7c62a7b56acf4f76207a1f43c2d30d0fe4a627dcdd9bd79078"), + }, + { + hex("0x1e41fc29b825454fe6d61737fe08b47fb07fe739e4c1e61d0337490883db4fd5"), + hex("0x12507cd556b7bbcc72ee6dafc616584421e1af872d8c0e89002ae8d3ba0653b6"), + hex("0x13d437083553006bcef312e5e6f52a5d97eb36617ef36fe4d77d3e97f71cb5db"), + hex("0x163ec73251f85443687222487dda9a65467d90b22f0b38664686077c6a4486d5"), + }, +} diff --git a/gnark-prover/prover/poseidon/poseidon.go b/gnark-prover/prover/poseidon/poseidon.go index 4485ade625..444ae91752 100644 --- a/gnark-prover/prover/poseidon/poseidon.go +++ b/gnark-prover/prover/poseidon/poseidon.go @@ -25,12 +25,21 @@ var CFG_3 = cfg{ mds: MDS_3, } +var CFG_4 = cfg{ + RF: 8, + RP: 56, + constants: CONSTANTS_4, + mds: MDS_4, +} + func cfgFor(t int) *cfg { switch t { case 2: return &CFG_2 case 3: return &CFG_3 + case 4: + return &CFG_4 } panic("Poseidon: unsupported arg count") } @@ -135,5 +144,6 @@ func (h fullRound) DefineGadget(api frontend.API) interface{} { for i := 0; i < len(h.Inp); i += 1 { h.Inp[i] = abstractor.Call(api, sbox{h.Inp[i]}) } - return abstractor.Call1(api, mds{h.Inp}) + result := abstractor.Call1(api, mds{h.Inp}) + return result } diff --git a/gnark-prover/prover/poseidon/poseidon_test.go b/gnark-prover/prover/poseidon/poseidon_test.go index 07ac028a88..0ba3fc60be 100644 --- a/gnark-prover/prover/poseidon/poseidon_test.go +++ b/gnark-prover/prover/poseidon/poseidon_test.go @@ -46,10 +46,11 @@ func (circuit *TestPoseidonCircuit3) Define(api frontend.API) error { return nil } -func TestPoseidon(t *testing.T) { +func TestPoseidon1(t *testing.T) { assert := test.NewAssert(t) var circuit1 TestPoseidonCircuit1 + assert.ProverSucceeded(&circuit1, &TestPoseidonCircuit1{ Input: 0, Hash: hex("0x2a09a9fd93c590c26b91effbb2499f07e8f7aa12e2b4940a3aed2411cb65e11c"), @@ -64,6 +65,10 @@ func TestPoseidon(t *testing.T) { Input: 2, Hash: hex("0x131d73cf6b30079aca0dff6a561cd0ee50b540879abe379a25a06b24bde2bebd"), }, test.WithBackends(backend.GROTH16), test.WithCurves(ecc.BN254)) +} + +func TestPoseidon2(t *testing.T) { + assert := test.NewAssert(t) var circuit2 TestPoseidonCircuit2 @@ -98,3 +103,37 @@ func TestPoseidon(t *testing.T) { }, test.WithBackends(backend.GROTH16), test.WithCurves(ecc.BN254)) } + +func TestPoseidon3(t *testing.T) { + assert := test.NewAssert(t) + + var circuit3 TestPoseidonCircuit3 + + assert.ProverSucceeded(&circuit3, &TestPoseidonCircuit3{ + First: 123, + Second: 456, + Third: 789, + Hash: hex("0x15bf2dbca201b7b45f1ae01c1c1ac0eee26854c01758b9df14a319959c50155f"), + }, test.WithBackends(backend.GROTH16), test.WithCurves(ecc.BN254)) + + assert.ProverSucceeded(&circuit3, &TestPoseidonCircuit3{ + First: 1, + Second: 1, + Third: 1, + Hash: hex("0x2c0066e10a72abd2b33c3b214cb3e81bcb1b6e30961cd23c202b18673bf2543"), + }, test.WithBackends(backend.GROTH16), test.WithCurves(ecc.BN254)) + + assert.ProverSucceeded(&circuit3, &TestPoseidonCircuit3{ + First: 1, + Second: 2, + Third: 3, + Hash: hex("0xe7732d89e6939c0ff03d5e58dab6302f3230e269dc5b968f725df34ab36d732"), + }, test.WithBackends(backend.GROTH16), test.WithCurves(ecc.BN254)) + + assert.ProverSucceeded(&circuit3, &TestPoseidonCircuit3{ + First: 1, + Second: 2, + Third: 3, + Hash: hex("0xe7732d89e6939c0ff03d5e58dab6302f3230e269dc5b968f725df34ab36d732"), + }, test.WithBackends(backend.GROTH16), test.WithCurves(ecc.BN254)) +} diff --git a/gnark-prover/scripts/download_keys.sh b/gnark-prover/scripts/download_keys.sh index 2332f5f8a1..83446d6855 100755 --- a/gnark-prover/scripts/download_keys.sh +++ b/gnark-prover/scripts/download_keys.sh @@ -8,7 +8,7 @@ if [ ! -d "$KEYS_DIR" ]; then mkdir -p "$KEYS_DIR" fi -BUCKET="bafybeidml266k4d62vu5gpvvv3qejwokuok5oveabjtzomdrm7oxu5z7su" +BUCKET="bafybeidjo25d7b3b4n4alotac3ceszqrxr3owxkqwcmeeigayfrueuy5c4" FILES=( "inclusion_26_1.key" "inclusion_26_1.vkey" @@ -20,6 +20,26 @@ FILES=( "inclusion_26_4.vkey" "inclusion_26_8.key" "inclusion_26_8.vkey" + "non-inclusion_26_1.key" + "non-inclusion_26_1.vkey" + "non-inclusion_26_2.key" + "non-inclusion_26_2.vkey" + "combined_26_1_1.key" + "combined_26_1_1.vkey" + "combined_26_1_2.key" + "combined_26_1_2.vkey" + "combined_26_2_1.key" + "combined_26_2_1.vkey" + "combined_26_2_2.key" + "combined_26_2_2.vkey" + "combined_26_3_1.key" + "combined_26_3_1.vkey" + "combined_26_3_2.key" + "combined_26_3_2.vkey" + "combined_26_4_1.key" + "combined_26_4_1.vkey" + "combined_26_4_2.key" + "combined_26_4_2.vkey" ) for FILE in "${FILES[@]}" diff --git a/gnark-prover/scripts/generate_keys.sh b/gnark-prover/scripts/generate_keys.sh new file mode 100755 index 0000000000..5e176d90da --- /dev/null +++ b/gnark-prover/scripts/generate_keys.sh @@ -0,0 +1,63 @@ +#!/usr/bin/env bash + +DEPTH="26" + +gnark() { + local args=("$@") + ./light-prover "${args[@]}" +} + +generate() { + local INCLUSION_UTXOS=$1 + local NON_INCLUSION_UTXOS=$2 + local CIRCUIT_TYPE=$3 + mkdir -p circuits + if [ "$CIRCUIT_TYPE" == "inclusion" ]; then + UTXOS=$INCLUSION_UTXOS + elif [ "$CIRCUIT_TYPE" == "non-inclusion" ]; then + UTXOS=$NON_INCLUSION_UTXOS + else + UTXOS="${INCLUSION_UTXOS}_${NON_INCLUSION_UTXOS}" + fi + CIRCUIT_FILE="./circuits/${CIRCUIT_TYPE}_${DEPTH}_${UTXOS}.key" + CIRCUIT_VKEY_FILE="./circuits/${CIRCUIT_TYPE}_${DEPTH}_${UTXOS}.vkey" + CIRCUIT_VKEY_RS_FILE="../programs/compressed-pda/src/verifying_keys/${CIRCUIT_TYPE}_${DEPTH}_${UTXOS}.rs" + + echo "Generating ${CIRCUIT_TYPE} circuit for ${UTXOS} UTXOs..." + echo "go run . setup --circuit ${CIRCUIT_TYPE} --inclusion-utxos ${INCLUSION_UTXOS} --non-inclusion-utxos ${NON_INCLUSION_UTXOS} --inclusion-tree-depth ${DEPTH} --non-inclusion-tree-depth ${DEPTH} --output ${CIRCUIT_FILE} --output-vkey ${CIRCUIT_VKEY_FILE}" + + gnark setup \ + --circuit "${CIRCUIT_TYPE}" \ + --inclusion-utxos "$INCLUSION_UTXOS" \ + --non-inclusion-utxos "$NON_INCLUSION_UTXOS" \ + --inclusion-tree-depth "$DEPTH" \ + --non-inclusion-tree-depth "$DEPTH" \ + --output "${CIRCUIT_FILE}" \ + --output-vkey "${CIRCUIT_VKEY_FILE}" + cargo xtask generate-vkey-rs --input-path "${CIRCUIT_VKEY_FILE}" --output-path "${CIRCUIT_VKEY_RS_FILE}" +} + +declare -a inclusion_utxos_arr=("1" "2" "3" "4" "8") + +for utxos in "${inclusion_utxos_arr[@]}" +do + generate "$utxos" "0" "inclusion" +done + +declare -a non_inclusion_utxos_arr=("1" "2") + +for utxos in "${non_inclusion_utxos_arr[@]}" +do + generate "0" "$utxos" "non-inclusion" +done + +declare -a combined_inclusion_utxos_arr=("1" "2" "3" "4") +declare -a combined_non_inclusion_utxos_arr=("1" "2") + +for i_utxos in "${combined_inclusion_utxos_arr[@]}" +do + for ni_utxos in "${combined_non_inclusion_utxos_arr[@]}" + do + generate "$i_utxos" "$ni_utxos" "combined" + done +done \ No newline at end of file diff --git a/gnark-prover/server.sh b/gnark-prover/scripts/server.sh similarity index 100% rename from gnark-prover/server.sh rename to gnark-prover/scripts/server.sh diff --git a/gnark-prover/server/server.go b/gnark-prover/server/server.go index cee7abc8a3..6a8932bfcd 100644 --- a/gnark-prover/server/server.go +++ b/gnark-prover/server/server.go @@ -3,6 +3,7 @@ package server import ( "context" "encoding/json" + "errors" "fmt" "io" "light/light-prover/logging" @@ -56,7 +57,7 @@ type Config struct { func spawnServerJob(server *http.Server, label string) RunningJob { start := func() { err := server.ListenAndServe() - if err != nil && err != http.ErrServerClosed { + if err != nil && !errors.Is(err, http.ErrServerClosed) { panic(fmt.Sprintf("%s failed: %s", label, err)) } } @@ -80,7 +81,10 @@ func Run(config *Config, provingSystem []*prover.ProvingSystem) RunningJob { logging.Logger().Info().Str("addr", config.MetricsAddress).Msg("metrics server started") proverMux := http.NewServeMux() - proverMux.Handle("/inclusion", proveHandler{provingSystem: provingSystem}) + proverMux.Handle("/inclusion", inclusionHandler{provingSystem: provingSystem}) + proverMux.Handle("/noninclusion", nonInclusionHandler{provingSystem: provingSystem}) + proverMux.Handle("/combined", combinedHandler{provingSystem: provingSystem}) + proverMux.Handle("/health", healthHandler{}) proverServer := &http.Server{Addr: config.ProverAddress, Handler: proverMux} proverJob := spawnServerJob(proverServer, "prover server") @@ -89,14 +93,22 @@ func Run(config *Config, provingSystem []*prover.ProvingSystem) RunningJob { return CombineJobs(metricsJob, proverJob) } -type proveHandler struct { +type inclusionHandler struct { + provingSystem []*prover.ProvingSystem +} + +type nonInclusionHandler struct { + provingSystem []*prover.ProvingSystem +} + +type combinedHandler struct { provingSystem []*prover.ProvingSystem } type healthHandler struct { } -func (handler proveHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { +func (handler inclusionHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { w.WriteHeader(http.StatusMethodNotAllowed) return @@ -122,11 +134,11 @@ func (handler proveHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { return } - var numberOfUtxos = uint32(len(params.Root)) + var numberOfUtxos = uint32(len(params.Roots)) var ps *prover.ProvingSystem for _, provingSystem := range handler.provingSystem { - if provingSystem.Inclusion && provingSystem.NumberOfUtxos == numberOfUtxos { + if provingSystem.InclusionNumberOfUtxos == numberOfUtxos { ps = provingSystem break } @@ -141,16 +153,75 @@ func (handler proveHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { proof, err = ps.ProveInclusion(¶ms) if err != nil { - logging.Logger().Info().Msg("error ProveInclusion") - logging.Logger().Info().Msg(err.Error()) + logging.Logger().Err(err) provingError(err).send(w) return } responseBytes, err := json.Marshal(&proof) if err != nil { - logging.Logger().Info().Msg("Error marshal response bytes") + logging.Logger().Err(err) + unexpectedError(err).send(w) + return + } + + w.WriteHeader(http.StatusOK) + _, err = w.Write(responseBytes) + + if err != nil { + logging.Logger().Err(err) + } +} + +func (handler nonInclusionHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + w.WriteHeader(http.StatusMethodNotAllowed) + return + } + logging.Logger().Info().Msg("received prove request") + buf, err := io.ReadAll(r.Body) + if err != nil { + logging.Logger().Info().Msg("error reading request body") logging.Logger().Info().Msg(err.Error()) + malformedBodyError(err).send(w) + return + } + + var proof *prover.Proof + + logging.Logger().Info().Msg("non-inclusion proof") + var params prover.NonInclusionParameters + + err = json.Unmarshal(buf, ¶ms) + if err != nil { + malformedBodyError(err).send(w) + return + } + + var numberOfUtxos = uint32(len(params.Roots)) + var ps *prover.ProvingSystem + for _, provingSystem := range handler.provingSystem { + if provingSystem.NonInclusionNumberOfUtxos == numberOfUtxos { + ps = provingSystem + break + } + } + + if ps == nil { + provingError(fmt.Errorf("no proving system for %d utxos", numberOfUtxos)).send(w) + return + } + proof, err = ps.ProveNonInclusion(¶ms) + + if err != nil { + logging.Logger().Err(err) + provingError(err).send(w) + return + } + + responseBytes, err := json.Marshal(&proof) + if err != nil { + logging.Logger().Err(err) unexpectedError(err).send(w) return } @@ -159,8 +230,68 @@ func (handler proveHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { _, err = w.Write(responseBytes) if err != nil { - logging.Logger().Error().Err(err).Msg("error writing response") + logging.Logger().Err(err) + } +} +func (handler combinedHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + w.WriteHeader(http.StatusMethodNotAllowed) + return + } + logging.Logger().Info().Msg("received prove request") + buf, err := io.ReadAll(r.Body) + if err != nil { + logging.Logger().Info().Msg("error reading request body") logging.Logger().Info().Msg(err.Error()) + malformedBodyError(err).send(w) + return + } + + var proof *prover.Proof + + logging.Logger().Info().Msg("non-inclusion proof") + var params prover.CombinedParameters + + err = json.Unmarshal(buf, ¶ms) + if err != nil { + malformedBodyError(err).send(w) + return + } + + var inclusionNumberOfUtxos = uint32(len(params.InclusionParameters.Roots)) + var nonInclusionNumberOfUtxos = uint32(len(params.NonInclusionParameters.Roots)) + var ps *prover.ProvingSystem + for _, provingSystem := range handler.provingSystem { + if provingSystem.InclusionNumberOfUtxos == inclusionNumberOfUtxos && provingSystem.NonInclusionNumberOfUtxos == nonInclusionNumberOfUtxos { + ps = provingSystem + break + } + } + + if ps == nil { + provingError(fmt.Errorf("no proving system for %d inclusion utxos & %d non-inclusion", inclusionNumberOfUtxos, nonInclusionNumberOfUtxos)).send(w) + return + } + proof, err = ps.ProveCombined(¶ms) + + if err != nil { + logging.Logger().Err(err) + provingError(err).send(w) + return + } + + responseBytes, err := json.Marshal(&proof) + if err != nil { + logging.Logger().Err(err) + unexpectedError(err).send(w) + return + } + + w.WriteHeader(http.StatusOK) + _, err = w.Write(responseBytes) + + if err != nil { + logging.Logger().Err(err) } } diff --git a/gnark-prover/test-data/combined.csv b/gnark-prover/test-data/combined.csv new file mode 100644 index 0000000000..3338d5c7e6 --- /dev/null +++ b/gnark-prover/test-data/combined.csv @@ -0,0 +1,240 @@ +1;{"inclusion":{"roots":["0x95b9c57aff2e9a4542697930de9a2045afd3d5d13a25b2fddbc3146f9abbcbb"],"inPathIndices":[0],"inPathElements":[["0x0"]],"leaves":["0x43a45e0c2fea642fd016c9e1eccbd6703e0f8216fc6055f95e1a244bd0f0537"]},"nonInclusion":{"roots":["0x215b48daa4ad2516f755084184ebe9dd2f375cbca0a955560670bdef4df7c6"],"inPathIndices":[0],"inPathElements":[["0x0"]],"values":["0x3af"],"leafLowerRangeValues":["0x3ae"],"leafHigherRangeValues":["0x3b0"],"leafIndices":[1]}} +0;{"inclusion":{"roots":["0x95b9c57aff2e9a4542697930de9a2045afd3d5d13a25b2fddbc3146f9abbcbb"],"inPathIndices":[0],"inPathElements":[["0x0"]],"leaves":["0x43a45e0c2fea642fd016c9e1eccbd6703e0f8216fc6055f95e1a244bd0f0537"]},"nonInclusion":{"roots":["0x3e7"],"inPathIndices":[0],"inPathElements":[["0x0"]],"values":["0x16f"],"leafLowerRangeValues":["0x16e"],"leafHigherRangeValues":["0x170"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x95b9c57aff2e9a4542697930de9a2045afd3d5d13a25b2fddbc3146f9abbcbb"],"inPathIndices":[0],"inPathElements":[["0x0"]],"leaves":["0x43a45e0c2fea642fd016c9e1eccbd6703e0f8216fc6055f95e1a244bd0f0537"]},"nonInclusion":{"roots":["0x2e7f761d9a2918f7185ac17eb4975ff918bd38ead4e66c29a07b02eaf51549c4"],"inPathIndices":[0],"inPathElements":[["0x0"]],"values":["0x11e"],"leafLowerRangeValues":["0x11f"],"leafHigherRangeValues":["0x121"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x95b9c57aff2e9a4542697930de9a2045afd3d5d13a25b2fddbc3146f9abbcbb"],"inPathIndices":[0],"inPathElements":[["0x0"]],"leaves":["0x43a45e0c2fea642fd016c9e1eccbd6703e0f8216fc6055f95e1a244bd0f0537"]},"nonInclusion":{"roots":["0x2141b300f8bdc0294bec1955c595b50ac34a9ade1ff3323d828a550752097e95"],"inPathIndices":[0],"inPathElements":[["0x0"]],"values":["0x2a9"],"leafLowerRangeValues":["0x2a6"],"leafHigherRangeValues":["0x2a8"],"leafIndices":[1]}} +0;{"inclusion":{"roots":["0x95b9c57aff2e9a4542697930de9a2045afd3d5d13a25b2fddbc3146f9abbcbb"],"inPathIndices":[0],"inPathElements":[["0x0"]],"leaves":["0x43a45e0c2fea642fd016c9e1eccbd6703e0f8216fc6055f95e1a244bd0f0537"]},"nonInclusion":{"roots":["0x22c3f04ee41dc847016fa84de7358698429d589e687a579d08fdf9f665192129"],"inPathIndices":[999],"inPathElements":[["0x0"]],"values":["0x2ba"],"leafLowerRangeValues":["0x2b9"],"leafHigherRangeValues":["0x2bb"],"leafIndices":[1]}} +0;{"inclusion":{"roots":["0x95b9c57aff2e9a4542697930de9a2045afd3d5d13a25b2fddbc3146f9abbcbb"],"inPathIndices":[0],"inPathElements":[["0x0"]],"leaves":["0x43a45e0c2fea642fd016c9e1eccbd6703e0f8216fc6055f95e1a244bd0f0537"]},"nonInclusion":{"roots":["0xfd29c6488ca0d85e63668613ce4e1a83843a4ba1113aa573cfcb8113702a0db"],"inPathIndices":[0],"inPathElements":[["0x3e7"]],"values":["0x2aa"],"leafLowerRangeValues":["0x2a9"],"leafHigherRangeValues":["0x2ab"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x3e7"],"inPathIndices":[0],"inPathElements":[["0x0"]],"leaves":["0x27a724f056c7ace91dcef134662ab15980f1a897f53b97ffcd041bf096a6be2f"]},"nonInclusion":{"roots":["0x215b48daa4ad2516f755084184ebe9dd2f375cbca0a955560670bdef4df7c6"],"inPathIndices":[0],"inPathElements":[["0x0"]],"values":["0x3af"],"leafLowerRangeValues":["0x3ae"],"leafHigherRangeValues":["0x3b0"],"leafIndices":[1]}} +0;{"inclusion":{"roots":["0x3e7"],"inPathIndices":[0],"inPathElements":[["0x0"]],"leaves":["0x27a724f056c7ace91dcef134662ab15980f1a897f53b97ffcd041bf096a6be2f"]},"nonInclusion":{"roots":["0x3e7"],"inPathIndices":[0],"inPathElements":[["0x0"]],"values":["0x16f"],"leafLowerRangeValues":["0x16e"],"leafHigherRangeValues":["0x170"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x3e7"],"inPathIndices":[0],"inPathElements":[["0x0"]],"leaves":["0x27a724f056c7ace91dcef134662ab15980f1a897f53b97ffcd041bf096a6be2f"]},"nonInclusion":{"roots":["0x2e7f761d9a2918f7185ac17eb4975ff918bd38ead4e66c29a07b02eaf51549c4"],"inPathIndices":[0],"inPathElements":[["0x0"]],"values":["0x11e"],"leafLowerRangeValues":["0x11f"],"leafHigherRangeValues":["0x121"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x3e7"],"inPathIndices":[0],"inPathElements":[["0x0"]],"leaves":["0x27a724f056c7ace91dcef134662ab15980f1a897f53b97ffcd041bf096a6be2f"]},"nonInclusion":{"roots":["0x2141b300f8bdc0294bec1955c595b50ac34a9ade1ff3323d828a550752097e95"],"inPathIndices":[0],"inPathElements":[["0x0"]],"values":["0x2a9"],"leafLowerRangeValues":["0x2a6"],"leafHigherRangeValues":["0x2a8"],"leafIndices":[1]}} +0;{"inclusion":{"roots":["0x3e7"],"inPathIndices":[0],"inPathElements":[["0x0"]],"leaves":["0x27a724f056c7ace91dcef134662ab15980f1a897f53b97ffcd041bf096a6be2f"]},"nonInclusion":{"roots":["0x22c3f04ee41dc847016fa84de7358698429d589e687a579d08fdf9f665192129"],"inPathIndices":[999],"inPathElements":[["0x0"]],"values":["0x2ba"],"leafLowerRangeValues":["0x2b9"],"leafHigherRangeValues":["0x2bb"],"leafIndices":[1]}} +0;{"inclusion":{"roots":["0x3e7"],"inPathIndices":[0],"inPathElements":[["0x0"]],"leaves":["0x27a724f056c7ace91dcef134662ab15980f1a897f53b97ffcd041bf096a6be2f"]},"nonInclusion":{"roots":["0xfd29c6488ca0d85e63668613ce4e1a83843a4ba1113aa573cfcb8113702a0db"],"inPathIndices":[0],"inPathElements":[["0x3e7"]],"values":["0x2aa"],"leafLowerRangeValues":["0x2a9"],"leafHigherRangeValues":["0x2ab"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x20763d3b4b5fe863cd8f90c4a6c95822df5a8e91c35f17ce739d31aa7aad35e2"],"inPathIndices":[0],"inPathElements":[["0x0"]],"leaves":["0x3e7"]},"nonInclusion":{"roots":["0x215b48daa4ad2516f755084184ebe9dd2f375cbca0a955560670bdef4df7c6"],"inPathIndices":[0],"inPathElements":[["0x0"]],"values":["0x3af"],"leafLowerRangeValues":["0x3ae"],"leafHigherRangeValues":["0x3b0"],"leafIndices":[1]}} +0;{"inclusion":{"roots":["0x20763d3b4b5fe863cd8f90c4a6c95822df5a8e91c35f17ce739d31aa7aad35e2"],"inPathIndices":[0],"inPathElements":[["0x0"]],"leaves":["0x3e7"]},"nonInclusion":{"roots":["0x3e7"],"inPathIndices":[0],"inPathElements":[["0x0"]],"values":["0x16f"],"leafLowerRangeValues":["0x16e"],"leafHigherRangeValues":["0x170"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x20763d3b4b5fe863cd8f90c4a6c95822df5a8e91c35f17ce739d31aa7aad35e2"],"inPathIndices":[0],"inPathElements":[["0x0"]],"leaves":["0x3e7"]},"nonInclusion":{"roots":["0x2e7f761d9a2918f7185ac17eb4975ff918bd38ead4e66c29a07b02eaf51549c4"],"inPathIndices":[0],"inPathElements":[["0x0"]],"values":["0x11e"],"leafLowerRangeValues":["0x11f"],"leafHigherRangeValues":["0x121"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x20763d3b4b5fe863cd8f90c4a6c95822df5a8e91c35f17ce739d31aa7aad35e2"],"inPathIndices":[0],"inPathElements":[["0x0"]],"leaves":["0x3e7"]},"nonInclusion":{"roots":["0x2141b300f8bdc0294bec1955c595b50ac34a9ade1ff3323d828a550752097e95"],"inPathIndices":[0],"inPathElements":[["0x0"]],"values":["0x2a9"],"leafLowerRangeValues":["0x2a6"],"leafHigherRangeValues":["0x2a8"],"leafIndices":[1]}} +0;{"inclusion":{"roots":["0x20763d3b4b5fe863cd8f90c4a6c95822df5a8e91c35f17ce739d31aa7aad35e2"],"inPathIndices":[0],"inPathElements":[["0x0"]],"leaves":["0x3e7"]},"nonInclusion":{"roots":["0x22c3f04ee41dc847016fa84de7358698429d589e687a579d08fdf9f665192129"],"inPathIndices":[999],"inPathElements":[["0x0"]],"values":["0x2ba"],"leafLowerRangeValues":["0x2b9"],"leafHigherRangeValues":["0x2bb"],"leafIndices":[1]}} +0;{"inclusion":{"roots":["0x20763d3b4b5fe863cd8f90c4a6c95822df5a8e91c35f17ce739d31aa7aad35e2"],"inPathIndices":[0],"inPathElements":[["0x0"]],"leaves":["0x3e7"]},"nonInclusion":{"roots":["0xfd29c6488ca0d85e63668613ce4e1a83843a4ba1113aa573cfcb8113702a0db"],"inPathIndices":[0],"inPathElements":[["0x3e7"]],"values":["0x2aa"],"leafLowerRangeValues":["0x2a9"],"leafHigherRangeValues":["0x2ab"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x2117c2bc586146580d9120fc30a1953ea16ea840856fe82621be5b6c685aa664"],"inPathIndices":[999],"inPathElements":[["0x0"]],"leaves":["0x27bedf0fc62d9f081163a2a75a403494f083748eafc332ecd5d9c72d921aa956"]},"nonInclusion":{"roots":["0x215b48daa4ad2516f755084184ebe9dd2f375cbca0a955560670bdef4df7c6"],"inPathIndices":[0],"inPathElements":[["0x0"]],"values":["0x3af"],"leafLowerRangeValues":["0x3ae"],"leafHigherRangeValues":["0x3b0"],"leafIndices":[1]}} +0;{"inclusion":{"roots":["0x2117c2bc586146580d9120fc30a1953ea16ea840856fe82621be5b6c685aa664"],"inPathIndices":[999],"inPathElements":[["0x0"]],"leaves":["0x27bedf0fc62d9f081163a2a75a403494f083748eafc332ecd5d9c72d921aa956"]},"nonInclusion":{"roots":["0x3e7"],"inPathIndices":[0],"inPathElements":[["0x0"]],"values":["0x16f"],"leafLowerRangeValues":["0x16e"],"leafHigherRangeValues":["0x170"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x2117c2bc586146580d9120fc30a1953ea16ea840856fe82621be5b6c685aa664"],"inPathIndices":[999],"inPathElements":[["0x0"]],"leaves":["0x27bedf0fc62d9f081163a2a75a403494f083748eafc332ecd5d9c72d921aa956"]},"nonInclusion":{"roots":["0x2e7f761d9a2918f7185ac17eb4975ff918bd38ead4e66c29a07b02eaf51549c4"],"inPathIndices":[0],"inPathElements":[["0x0"]],"values":["0x11e"],"leafLowerRangeValues":["0x11f"],"leafHigherRangeValues":["0x121"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x2117c2bc586146580d9120fc30a1953ea16ea840856fe82621be5b6c685aa664"],"inPathIndices":[999],"inPathElements":[["0x0"]],"leaves":["0x27bedf0fc62d9f081163a2a75a403494f083748eafc332ecd5d9c72d921aa956"]},"nonInclusion":{"roots":["0x2141b300f8bdc0294bec1955c595b50ac34a9ade1ff3323d828a550752097e95"],"inPathIndices":[0],"inPathElements":[["0x0"]],"values":["0x2a9"],"leafLowerRangeValues":["0x2a6"],"leafHigherRangeValues":["0x2a8"],"leafIndices":[1]}} +0;{"inclusion":{"roots":["0x2117c2bc586146580d9120fc30a1953ea16ea840856fe82621be5b6c685aa664"],"inPathIndices":[999],"inPathElements":[["0x0"]],"leaves":["0x27bedf0fc62d9f081163a2a75a403494f083748eafc332ecd5d9c72d921aa956"]},"nonInclusion":{"roots":["0x22c3f04ee41dc847016fa84de7358698429d589e687a579d08fdf9f665192129"],"inPathIndices":[999],"inPathElements":[["0x0"]],"values":["0x2ba"],"leafLowerRangeValues":["0x2b9"],"leafHigherRangeValues":["0x2bb"],"leafIndices":[1]}} +0;{"inclusion":{"roots":["0x2117c2bc586146580d9120fc30a1953ea16ea840856fe82621be5b6c685aa664"],"inPathIndices":[999],"inPathElements":[["0x0"]],"leaves":["0x27bedf0fc62d9f081163a2a75a403494f083748eafc332ecd5d9c72d921aa956"]},"nonInclusion":{"roots":["0xfd29c6488ca0d85e63668613ce4e1a83843a4ba1113aa573cfcb8113702a0db"],"inPathIndices":[0],"inPathElements":[["0x3e7"]],"values":["0x2aa"],"leafLowerRangeValues":["0x2a9"],"leafHigherRangeValues":["0x2ab"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x2fd15775df723e1093461da54f17cae22d502b1e11023082547fb8c6cc714d78"],"inPathIndices":[0],"inPathElements":[["0x3e7"]],"leaves":["0x2d09df8ae10da3c06d97561bf091f192454b1aa846cdab730603027637a607c1"]},"nonInclusion":{"roots":["0x215b48daa4ad2516f755084184ebe9dd2f375cbca0a955560670bdef4df7c6"],"inPathIndices":[0],"inPathElements":[["0x0"]],"values":["0x3af"],"leafLowerRangeValues":["0x3ae"],"leafHigherRangeValues":["0x3b0"],"leafIndices":[1]}} +0;{"inclusion":{"roots":["0x2fd15775df723e1093461da54f17cae22d502b1e11023082547fb8c6cc714d78"],"inPathIndices":[0],"inPathElements":[["0x3e7"]],"leaves":["0x2d09df8ae10da3c06d97561bf091f192454b1aa846cdab730603027637a607c1"]},"nonInclusion":{"roots":["0x3e7"],"inPathIndices":[0],"inPathElements":[["0x0"]],"values":["0x16f"],"leafLowerRangeValues":["0x16e"],"leafHigherRangeValues":["0x170"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x2fd15775df723e1093461da54f17cae22d502b1e11023082547fb8c6cc714d78"],"inPathIndices":[0],"inPathElements":[["0x3e7"]],"leaves":["0x2d09df8ae10da3c06d97561bf091f192454b1aa846cdab730603027637a607c1"]},"nonInclusion":{"roots":["0x2e7f761d9a2918f7185ac17eb4975ff918bd38ead4e66c29a07b02eaf51549c4"],"inPathIndices":[0],"inPathElements":[["0x0"]],"values":["0x11e"],"leafLowerRangeValues":["0x11f"],"leafHigherRangeValues":["0x121"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x2fd15775df723e1093461da54f17cae22d502b1e11023082547fb8c6cc714d78"],"inPathIndices":[0],"inPathElements":[["0x3e7"]],"leaves":["0x2d09df8ae10da3c06d97561bf091f192454b1aa846cdab730603027637a607c1"]},"nonInclusion":{"roots":["0x2141b300f8bdc0294bec1955c595b50ac34a9ade1ff3323d828a550752097e95"],"inPathIndices":[0],"inPathElements":[["0x0"]],"values":["0x2a9"],"leafLowerRangeValues":["0x2a6"],"leafHigherRangeValues":["0x2a8"],"leafIndices":[1]}} +0;{"inclusion":{"roots":["0x2fd15775df723e1093461da54f17cae22d502b1e11023082547fb8c6cc714d78"],"inPathIndices":[0],"inPathElements":[["0x3e7"]],"leaves":["0x2d09df8ae10da3c06d97561bf091f192454b1aa846cdab730603027637a607c1"]},"nonInclusion":{"roots":["0x22c3f04ee41dc847016fa84de7358698429d589e687a579d08fdf9f665192129"],"inPathIndices":[999],"inPathElements":[["0x0"]],"values":["0x2ba"],"leafLowerRangeValues":["0x2b9"],"leafHigherRangeValues":["0x2bb"],"leafIndices":[1]}} +0;{"inclusion":{"roots":["0x2fd15775df723e1093461da54f17cae22d502b1e11023082547fb8c6cc714d78"],"inPathIndices":[0],"inPathElements":[["0x3e7"]],"leaves":["0x2d09df8ae10da3c06d97561bf091f192454b1aa846cdab730603027637a607c1"]},"nonInclusion":{"roots":["0xfd29c6488ca0d85e63668613ce4e1a83843a4ba1113aa573cfcb8113702a0db"],"inPathIndices":[0],"inPathElements":[["0x3e7"]],"values":["0x2aa"],"leafLowerRangeValues":["0x2a9"],"leafHigherRangeValues":["0x2ab"],"leafIndices":[0]}} +1;{"inclusion":{"roots":["0x23e3759d0d0289d6ec6263956473f5a6467f1eabc85b34fd3e74a1e88cde06cd","0x23e3759d0d0289d6ec6263956473f5a6467f1eabc85b34fd3e74a1e88cde06cd"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"leaves":["0x1ba69c4c8faa0688b51440efe2a7dfab636e11f9f693d979fbae6ce65e41fe0c","0x1ba69c4c8faa0688b51440efe2a7dfab636e11f9f693d979fbae6ce65e41fe0c"]},"nonInclusion":{"roots":["0x1c14d67ba97893c9d419c44159563475b34c8833c817cd7a999a8cccf5d3f19f","0x1c14d67ba97893c9d419c44159563475b34c8833c817cd7a999a8cccf5d3f19f"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"values":["0x12d","0x12d"],"leafLowerRangeValues":["0x12c","0x12c"],"leafHigherRangeValues":["0x12e","0x12e"],"leafIndices":[1,1]}} +0;{"inclusion":{"roots":["0x23e3759d0d0289d6ec6263956473f5a6467f1eabc85b34fd3e74a1e88cde06cd","0x23e3759d0d0289d6ec6263956473f5a6467f1eabc85b34fd3e74a1e88cde06cd"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"leaves":["0x1ba69c4c8faa0688b51440efe2a7dfab636e11f9f693d979fbae6ce65e41fe0c","0x1ba69c4c8faa0688b51440efe2a7dfab636e11f9f693d979fbae6ce65e41fe0c"]},"nonInclusion":{"roots":["0x3e7","0x4fa8a0c221ea6280edaece3926242bb5cfbf4627cd1ea68265a5f997208ae91"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"values":["0x15e","0x15e"],"leafLowerRangeValues":["0x15d","0x15d"],"leafHigherRangeValues":["0x15f","0x15f"],"leafIndices":[1,1]}} +0;{"inclusion":{"roots":["0x23e3759d0d0289d6ec6263956473f5a6467f1eabc85b34fd3e74a1e88cde06cd","0x23e3759d0d0289d6ec6263956473f5a6467f1eabc85b34fd3e74a1e88cde06cd"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"leaves":["0x1ba69c4c8faa0688b51440efe2a7dfab636e11f9f693d979fbae6ce65e41fe0c","0x1ba69c4c8faa0688b51440efe2a7dfab636e11f9f693d979fbae6ce65e41fe0c"]},"nonInclusion":{"roots":["0x75dacf824689816e58867c265aabcb63f92efc04fd8c6cdafc142f94f726eff","0x75dacf824689816e58867c265aabcb63f92efc04fd8c6cdafc142f94f726eff"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"values":["0x27b","0x27b"],"leafLowerRangeValues":["0x27c","0x27c"],"leafHigherRangeValues":["0x27e","0x27e"],"leafIndices":[1,1]}} +0;{"inclusion":{"roots":["0x23e3759d0d0289d6ec6263956473f5a6467f1eabc85b34fd3e74a1e88cde06cd","0x23e3759d0d0289d6ec6263956473f5a6467f1eabc85b34fd3e74a1e88cde06cd"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"leaves":["0x1ba69c4c8faa0688b51440efe2a7dfab636e11f9f693d979fbae6ce65e41fe0c","0x1ba69c4c8faa0688b51440efe2a7dfab636e11f9f693d979fbae6ce65e41fe0c"]},"nonInclusion":{"roots":["0x298e47ce8f4dde16a403299de528dbf14509817a6d81a37e7b58bbaa9877f767","0x298e47ce8f4dde16a403299de528dbf14509817a6d81a37e7b58bbaa9877f767"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"values":["0x255","0x255"],"leafLowerRangeValues":["0x252","0x252"],"leafHigherRangeValues":["0x254","0x254"],"leafIndices":[0,0]}} +0;{"inclusion":{"roots":["0x23e3759d0d0289d6ec6263956473f5a6467f1eabc85b34fd3e74a1e88cde06cd","0x23e3759d0d0289d6ec6263956473f5a6467f1eabc85b34fd3e74a1e88cde06cd"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"leaves":["0x1ba69c4c8faa0688b51440efe2a7dfab636e11f9f693d979fbae6ce65e41fe0c","0x1ba69c4c8faa0688b51440efe2a7dfab636e11f9f693d979fbae6ce65e41fe0c"]},"nonInclusion":{"roots":["0xf93f84d39fc33727e85ed82d8e868b6c25b6b4e346020a833fee1d9a4e656e1","0xf93f84d39fc33727e85ed82d8e868b6c25b6b4e346020a833fee1d9a4e656e1"],"inPathIndices":[999,0],"inPathElements":[["0x0"],["0x0"]],"values":["0x2d8","0x2d8"],"leafLowerRangeValues":["0x2d7","0x2d7"],"leafHigherRangeValues":["0x2d9","0x2d9"],"leafIndices":[0,0]}} +0;{"inclusion":{"roots":["0x23e3759d0d0289d6ec6263956473f5a6467f1eabc85b34fd3e74a1e88cde06cd","0x23e3759d0d0289d6ec6263956473f5a6467f1eabc85b34fd3e74a1e88cde06cd"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"leaves":["0x1ba69c4c8faa0688b51440efe2a7dfab636e11f9f693d979fbae6ce65e41fe0c","0x1ba69c4c8faa0688b51440efe2a7dfab636e11f9f693d979fbae6ce65e41fe0c"]},"nonInclusion":{"roots":["0x243f25af1c015104aaa6192ef954236248a9075dd1eb0a6eff7293f51136f73d","0x243f25af1c015104aaa6192ef954236248a9075dd1eb0a6eff7293f51136f73d"],"inPathIndices":[0,0],"inPathElements":[["0x3e7"],["0x3e7"]],"values":["0x1a","0x1a"],"leafLowerRangeValues":["0x19","0x19"],"leafHigherRangeValues":["0x1b","0x1b"],"leafIndices":[0,0]}} +0;{"inclusion":{"roots":["0x3e7","0x2971a0621cbb3388f115452f3d719480d50985bae3269de17e8e00d5b5730a15"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"leaves":["0x1c9497e5999c1305ae652e52f298321d4107471a77afd47e476ea870a332c340","0x1c9497e5999c1305ae652e52f298321d4107471a77afd47e476ea870a332c340"]},"nonInclusion":{"roots":["0x1c14d67ba97893c9d419c44159563475b34c8833c817cd7a999a8cccf5d3f19f","0x1c14d67ba97893c9d419c44159563475b34c8833c817cd7a999a8cccf5d3f19f"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"values":["0x12d","0x12d"],"leafLowerRangeValues":["0x12c","0x12c"],"leafHigherRangeValues":["0x12e","0x12e"],"leafIndices":[1,1]}} +0;{"inclusion":{"roots":["0x3e7","0x2971a0621cbb3388f115452f3d719480d50985bae3269de17e8e00d5b5730a15"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"leaves":["0x1c9497e5999c1305ae652e52f298321d4107471a77afd47e476ea870a332c340","0x1c9497e5999c1305ae652e52f298321d4107471a77afd47e476ea870a332c340"]},"nonInclusion":{"roots":["0x3e7","0x4fa8a0c221ea6280edaece3926242bb5cfbf4627cd1ea68265a5f997208ae91"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"values":["0x15e","0x15e"],"leafLowerRangeValues":["0x15d","0x15d"],"leafHigherRangeValues":["0x15f","0x15f"],"leafIndices":[1,1]}} +0;{"inclusion":{"roots":["0x3e7","0x2971a0621cbb3388f115452f3d719480d50985bae3269de17e8e00d5b5730a15"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"leaves":["0x1c9497e5999c1305ae652e52f298321d4107471a77afd47e476ea870a332c340","0x1c9497e5999c1305ae652e52f298321d4107471a77afd47e476ea870a332c340"]},"nonInclusion":{"roots":["0x75dacf824689816e58867c265aabcb63f92efc04fd8c6cdafc142f94f726eff","0x75dacf824689816e58867c265aabcb63f92efc04fd8c6cdafc142f94f726eff"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"values":["0x27b","0x27b"],"leafLowerRangeValues":["0x27c","0x27c"],"leafHigherRangeValues":["0x27e","0x27e"],"leafIndices":[1,1]}} +0;{"inclusion":{"roots":["0x3e7","0x2971a0621cbb3388f115452f3d719480d50985bae3269de17e8e00d5b5730a15"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"leaves":["0x1c9497e5999c1305ae652e52f298321d4107471a77afd47e476ea870a332c340","0x1c9497e5999c1305ae652e52f298321d4107471a77afd47e476ea870a332c340"]},"nonInclusion":{"roots":["0x298e47ce8f4dde16a403299de528dbf14509817a6d81a37e7b58bbaa9877f767","0x298e47ce8f4dde16a403299de528dbf14509817a6d81a37e7b58bbaa9877f767"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"values":["0x255","0x255"],"leafLowerRangeValues":["0x252","0x252"],"leafHigherRangeValues":["0x254","0x254"],"leafIndices":[0,0]}} +0;{"inclusion":{"roots":["0x3e7","0x2971a0621cbb3388f115452f3d719480d50985bae3269de17e8e00d5b5730a15"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"leaves":["0x1c9497e5999c1305ae652e52f298321d4107471a77afd47e476ea870a332c340","0x1c9497e5999c1305ae652e52f298321d4107471a77afd47e476ea870a332c340"]},"nonInclusion":{"roots":["0xf93f84d39fc33727e85ed82d8e868b6c25b6b4e346020a833fee1d9a4e656e1","0xf93f84d39fc33727e85ed82d8e868b6c25b6b4e346020a833fee1d9a4e656e1"],"inPathIndices":[999,0],"inPathElements":[["0x0"],["0x0"]],"values":["0x2d8","0x2d8"],"leafLowerRangeValues":["0x2d7","0x2d7"],"leafHigherRangeValues":["0x2d9","0x2d9"],"leafIndices":[0,0]}} +0;{"inclusion":{"roots":["0x3e7","0x2971a0621cbb3388f115452f3d719480d50985bae3269de17e8e00d5b5730a15"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"leaves":["0x1c9497e5999c1305ae652e52f298321d4107471a77afd47e476ea870a332c340","0x1c9497e5999c1305ae652e52f298321d4107471a77afd47e476ea870a332c340"]},"nonInclusion":{"roots":["0x243f25af1c015104aaa6192ef954236248a9075dd1eb0a6eff7293f51136f73d","0x243f25af1c015104aaa6192ef954236248a9075dd1eb0a6eff7293f51136f73d"],"inPathIndices":[0,0],"inPathElements":[["0x3e7"],["0x3e7"]],"values":["0x1a","0x1a"],"leafLowerRangeValues":["0x19","0x19"],"leafHigherRangeValues":["0x1b","0x1b"],"leafIndices":[0,0]}} +0;{"inclusion":{"roots":["0x675b46c8e369387a285c53aeb3dec9b20810afbbf9f9a97005dcfe2a2d8ffd3","0x675b46c8e369387a285c53aeb3dec9b20810afbbf9f9a97005dcfe2a2d8ffd3"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"leaves":["0x3e7","0x1b3e726c6008c78d0bc0ac2cee959ea7247166bcce496d9383db2297b4eed59"]},"nonInclusion":{"roots":["0x1c14d67ba97893c9d419c44159563475b34c8833c817cd7a999a8cccf5d3f19f","0x1c14d67ba97893c9d419c44159563475b34c8833c817cd7a999a8cccf5d3f19f"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"values":["0x12d","0x12d"],"leafLowerRangeValues":["0x12c","0x12c"],"leafHigherRangeValues":["0x12e","0x12e"],"leafIndices":[1,1]}} +0;{"inclusion":{"roots":["0x675b46c8e369387a285c53aeb3dec9b20810afbbf9f9a97005dcfe2a2d8ffd3","0x675b46c8e369387a285c53aeb3dec9b20810afbbf9f9a97005dcfe2a2d8ffd3"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"leaves":["0x3e7","0x1b3e726c6008c78d0bc0ac2cee959ea7247166bcce496d9383db2297b4eed59"]},"nonInclusion":{"roots":["0x3e7","0x4fa8a0c221ea6280edaece3926242bb5cfbf4627cd1ea68265a5f997208ae91"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"values":["0x15e","0x15e"],"leafLowerRangeValues":["0x15d","0x15d"],"leafHigherRangeValues":["0x15f","0x15f"],"leafIndices":[1,1]}} +0;{"inclusion":{"roots":["0x675b46c8e369387a285c53aeb3dec9b20810afbbf9f9a97005dcfe2a2d8ffd3","0x675b46c8e369387a285c53aeb3dec9b20810afbbf9f9a97005dcfe2a2d8ffd3"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"leaves":["0x3e7","0x1b3e726c6008c78d0bc0ac2cee959ea7247166bcce496d9383db2297b4eed59"]},"nonInclusion":{"roots":["0x75dacf824689816e58867c265aabcb63f92efc04fd8c6cdafc142f94f726eff","0x75dacf824689816e58867c265aabcb63f92efc04fd8c6cdafc142f94f726eff"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"values":["0x27b","0x27b"],"leafLowerRangeValues":["0x27c","0x27c"],"leafHigherRangeValues":["0x27e","0x27e"],"leafIndices":[1,1]}} +0;{"inclusion":{"roots":["0x675b46c8e369387a285c53aeb3dec9b20810afbbf9f9a97005dcfe2a2d8ffd3","0x675b46c8e369387a285c53aeb3dec9b20810afbbf9f9a97005dcfe2a2d8ffd3"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"leaves":["0x3e7","0x1b3e726c6008c78d0bc0ac2cee959ea7247166bcce496d9383db2297b4eed59"]},"nonInclusion":{"roots":["0x298e47ce8f4dde16a403299de528dbf14509817a6d81a37e7b58bbaa9877f767","0x298e47ce8f4dde16a403299de528dbf14509817a6d81a37e7b58bbaa9877f767"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"values":["0x255","0x255"],"leafLowerRangeValues":["0x252","0x252"],"leafHigherRangeValues":["0x254","0x254"],"leafIndices":[0,0]}} +0;{"inclusion":{"roots":["0x675b46c8e369387a285c53aeb3dec9b20810afbbf9f9a97005dcfe2a2d8ffd3","0x675b46c8e369387a285c53aeb3dec9b20810afbbf9f9a97005dcfe2a2d8ffd3"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"leaves":["0x3e7","0x1b3e726c6008c78d0bc0ac2cee959ea7247166bcce496d9383db2297b4eed59"]},"nonInclusion":{"roots":["0xf93f84d39fc33727e85ed82d8e868b6c25b6b4e346020a833fee1d9a4e656e1","0xf93f84d39fc33727e85ed82d8e868b6c25b6b4e346020a833fee1d9a4e656e1"],"inPathIndices":[999,0],"inPathElements":[["0x0"],["0x0"]],"values":["0x2d8","0x2d8"],"leafLowerRangeValues":["0x2d7","0x2d7"],"leafHigherRangeValues":["0x2d9","0x2d9"],"leafIndices":[0,0]}} +0;{"inclusion":{"roots":["0x675b46c8e369387a285c53aeb3dec9b20810afbbf9f9a97005dcfe2a2d8ffd3","0x675b46c8e369387a285c53aeb3dec9b20810afbbf9f9a97005dcfe2a2d8ffd3"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"leaves":["0x3e7","0x1b3e726c6008c78d0bc0ac2cee959ea7247166bcce496d9383db2297b4eed59"]},"nonInclusion":{"roots":["0x243f25af1c015104aaa6192ef954236248a9075dd1eb0a6eff7293f51136f73d","0x243f25af1c015104aaa6192ef954236248a9075dd1eb0a6eff7293f51136f73d"],"inPathIndices":[0,0],"inPathElements":[["0x3e7"],["0x3e7"]],"values":["0x1a","0x1a"],"leafLowerRangeValues":["0x19","0x19"],"leafHigherRangeValues":["0x1b","0x1b"],"leafIndices":[0,0]}} +0;{"inclusion":{"roots":["0x59b1a7747da515ab82197a14ea3b3a54624d6c836a4444de763217fede6ae2a","0x59b1a7747da515ab82197a14ea3b3a54624d6c836a4444de763217fede6ae2a"],"inPathIndices":[999,0],"inPathElements":[["0x0"],["0x0"]],"leaves":["0xd203fe2640b0a6edd4845c88aa7eaaf7e40ac24f406aeef910c5515b52a9cb5","0xd203fe2640b0a6edd4845c88aa7eaaf7e40ac24f406aeef910c5515b52a9cb5"]},"nonInclusion":{"roots":["0x1c14d67ba97893c9d419c44159563475b34c8833c817cd7a999a8cccf5d3f19f","0x1c14d67ba97893c9d419c44159563475b34c8833c817cd7a999a8cccf5d3f19f"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"values":["0x12d","0x12d"],"leafLowerRangeValues":["0x12c","0x12c"],"leafHigherRangeValues":["0x12e","0x12e"],"leafIndices":[1,1]}} +0;{"inclusion":{"roots":["0x59b1a7747da515ab82197a14ea3b3a54624d6c836a4444de763217fede6ae2a","0x59b1a7747da515ab82197a14ea3b3a54624d6c836a4444de763217fede6ae2a"],"inPathIndices":[999,0],"inPathElements":[["0x0"],["0x0"]],"leaves":["0xd203fe2640b0a6edd4845c88aa7eaaf7e40ac24f406aeef910c5515b52a9cb5","0xd203fe2640b0a6edd4845c88aa7eaaf7e40ac24f406aeef910c5515b52a9cb5"]},"nonInclusion":{"roots":["0x3e7","0x4fa8a0c221ea6280edaece3926242bb5cfbf4627cd1ea68265a5f997208ae91"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"values":["0x15e","0x15e"],"leafLowerRangeValues":["0x15d","0x15d"],"leafHigherRangeValues":["0x15f","0x15f"],"leafIndices":[1,1]}} +0;{"inclusion":{"roots":["0x59b1a7747da515ab82197a14ea3b3a54624d6c836a4444de763217fede6ae2a","0x59b1a7747da515ab82197a14ea3b3a54624d6c836a4444de763217fede6ae2a"],"inPathIndices":[999,0],"inPathElements":[["0x0"],["0x0"]],"leaves":["0xd203fe2640b0a6edd4845c88aa7eaaf7e40ac24f406aeef910c5515b52a9cb5","0xd203fe2640b0a6edd4845c88aa7eaaf7e40ac24f406aeef910c5515b52a9cb5"]},"nonInclusion":{"roots":["0x75dacf824689816e58867c265aabcb63f92efc04fd8c6cdafc142f94f726eff","0x75dacf824689816e58867c265aabcb63f92efc04fd8c6cdafc142f94f726eff"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"values":["0x27b","0x27b"],"leafLowerRangeValues":["0x27c","0x27c"],"leafHigherRangeValues":["0x27e","0x27e"],"leafIndices":[1,1]}} +0;{"inclusion":{"roots":["0x59b1a7747da515ab82197a14ea3b3a54624d6c836a4444de763217fede6ae2a","0x59b1a7747da515ab82197a14ea3b3a54624d6c836a4444de763217fede6ae2a"],"inPathIndices":[999,0],"inPathElements":[["0x0"],["0x0"]],"leaves":["0xd203fe2640b0a6edd4845c88aa7eaaf7e40ac24f406aeef910c5515b52a9cb5","0xd203fe2640b0a6edd4845c88aa7eaaf7e40ac24f406aeef910c5515b52a9cb5"]},"nonInclusion":{"roots":["0x298e47ce8f4dde16a403299de528dbf14509817a6d81a37e7b58bbaa9877f767","0x298e47ce8f4dde16a403299de528dbf14509817a6d81a37e7b58bbaa9877f767"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"values":["0x255","0x255"],"leafLowerRangeValues":["0x252","0x252"],"leafHigherRangeValues":["0x254","0x254"],"leafIndices":[0,0]}} +0;{"inclusion":{"roots":["0x59b1a7747da515ab82197a14ea3b3a54624d6c836a4444de763217fede6ae2a","0x59b1a7747da515ab82197a14ea3b3a54624d6c836a4444de763217fede6ae2a"],"inPathIndices":[999,0],"inPathElements":[["0x0"],["0x0"]],"leaves":["0xd203fe2640b0a6edd4845c88aa7eaaf7e40ac24f406aeef910c5515b52a9cb5","0xd203fe2640b0a6edd4845c88aa7eaaf7e40ac24f406aeef910c5515b52a9cb5"]},"nonInclusion":{"roots":["0xf93f84d39fc33727e85ed82d8e868b6c25b6b4e346020a833fee1d9a4e656e1","0xf93f84d39fc33727e85ed82d8e868b6c25b6b4e346020a833fee1d9a4e656e1"],"inPathIndices":[999,0],"inPathElements":[["0x0"],["0x0"]],"values":["0x2d8","0x2d8"],"leafLowerRangeValues":["0x2d7","0x2d7"],"leafHigherRangeValues":["0x2d9","0x2d9"],"leafIndices":[0,0]}} +0;{"inclusion":{"roots":["0x59b1a7747da515ab82197a14ea3b3a54624d6c836a4444de763217fede6ae2a","0x59b1a7747da515ab82197a14ea3b3a54624d6c836a4444de763217fede6ae2a"],"inPathIndices":[999,0],"inPathElements":[["0x0"],["0x0"]],"leaves":["0xd203fe2640b0a6edd4845c88aa7eaaf7e40ac24f406aeef910c5515b52a9cb5","0xd203fe2640b0a6edd4845c88aa7eaaf7e40ac24f406aeef910c5515b52a9cb5"]},"nonInclusion":{"roots":["0x243f25af1c015104aaa6192ef954236248a9075dd1eb0a6eff7293f51136f73d","0x243f25af1c015104aaa6192ef954236248a9075dd1eb0a6eff7293f51136f73d"],"inPathIndices":[0,0],"inPathElements":[["0x3e7"],["0x3e7"]],"values":["0x1a","0x1a"],"leafLowerRangeValues":["0x19","0x19"],"leafHigherRangeValues":["0x1b","0x1b"],"leafIndices":[0,0]}} +0;{"inclusion":{"roots":["0x20b0ba13870eceed6be345e9244906fe2af7d3404a9017d66cbee78f0e4e93e3","0x20b0ba13870eceed6be345e9244906fe2af7d3404a9017d66cbee78f0e4e93e3"],"inPathIndices":[0,0],"inPathElements":[["0x3e7"],["0x3e7"]],"leaves":["0x792bb611ef6449ffa74f4be3615d8457520fcefc94ad6b3048f87e88887781f","0x792bb611ef6449ffa74f4be3615d8457520fcefc94ad6b3048f87e88887781f"]},"nonInclusion":{"roots":["0x1c14d67ba97893c9d419c44159563475b34c8833c817cd7a999a8cccf5d3f19f","0x1c14d67ba97893c9d419c44159563475b34c8833c817cd7a999a8cccf5d3f19f"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"values":["0x12d","0x12d"],"leafLowerRangeValues":["0x12c","0x12c"],"leafHigherRangeValues":["0x12e","0x12e"],"leafIndices":[1,1]}} +0;{"inclusion":{"roots":["0x20b0ba13870eceed6be345e9244906fe2af7d3404a9017d66cbee78f0e4e93e3","0x20b0ba13870eceed6be345e9244906fe2af7d3404a9017d66cbee78f0e4e93e3"],"inPathIndices":[0,0],"inPathElements":[["0x3e7"],["0x3e7"]],"leaves":["0x792bb611ef6449ffa74f4be3615d8457520fcefc94ad6b3048f87e88887781f","0x792bb611ef6449ffa74f4be3615d8457520fcefc94ad6b3048f87e88887781f"]},"nonInclusion":{"roots":["0x3e7","0x4fa8a0c221ea6280edaece3926242bb5cfbf4627cd1ea68265a5f997208ae91"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"values":["0x15e","0x15e"],"leafLowerRangeValues":["0x15d","0x15d"],"leafHigherRangeValues":["0x15f","0x15f"],"leafIndices":[1,1]}} +0;{"inclusion":{"roots":["0x20b0ba13870eceed6be345e9244906fe2af7d3404a9017d66cbee78f0e4e93e3","0x20b0ba13870eceed6be345e9244906fe2af7d3404a9017d66cbee78f0e4e93e3"],"inPathIndices":[0,0],"inPathElements":[["0x3e7"],["0x3e7"]],"leaves":["0x792bb611ef6449ffa74f4be3615d8457520fcefc94ad6b3048f87e88887781f","0x792bb611ef6449ffa74f4be3615d8457520fcefc94ad6b3048f87e88887781f"]},"nonInclusion":{"roots":["0x75dacf824689816e58867c265aabcb63f92efc04fd8c6cdafc142f94f726eff","0x75dacf824689816e58867c265aabcb63f92efc04fd8c6cdafc142f94f726eff"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"values":["0x27b","0x27b"],"leafLowerRangeValues":["0x27c","0x27c"],"leafHigherRangeValues":["0x27e","0x27e"],"leafIndices":[1,1]}} +0;{"inclusion":{"roots":["0x20b0ba13870eceed6be345e9244906fe2af7d3404a9017d66cbee78f0e4e93e3","0x20b0ba13870eceed6be345e9244906fe2af7d3404a9017d66cbee78f0e4e93e3"],"inPathIndices":[0,0],"inPathElements":[["0x3e7"],["0x3e7"]],"leaves":["0x792bb611ef6449ffa74f4be3615d8457520fcefc94ad6b3048f87e88887781f","0x792bb611ef6449ffa74f4be3615d8457520fcefc94ad6b3048f87e88887781f"]},"nonInclusion":{"roots":["0x298e47ce8f4dde16a403299de528dbf14509817a6d81a37e7b58bbaa9877f767","0x298e47ce8f4dde16a403299de528dbf14509817a6d81a37e7b58bbaa9877f767"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"values":["0x255","0x255"],"leafLowerRangeValues":["0x252","0x252"],"leafHigherRangeValues":["0x254","0x254"],"leafIndices":[0,0]}} +0;{"inclusion":{"roots":["0x20b0ba13870eceed6be345e9244906fe2af7d3404a9017d66cbee78f0e4e93e3","0x20b0ba13870eceed6be345e9244906fe2af7d3404a9017d66cbee78f0e4e93e3"],"inPathIndices":[0,0],"inPathElements":[["0x3e7"],["0x3e7"]],"leaves":["0x792bb611ef6449ffa74f4be3615d8457520fcefc94ad6b3048f87e88887781f","0x792bb611ef6449ffa74f4be3615d8457520fcefc94ad6b3048f87e88887781f"]},"nonInclusion":{"roots":["0xf93f84d39fc33727e85ed82d8e868b6c25b6b4e346020a833fee1d9a4e656e1","0xf93f84d39fc33727e85ed82d8e868b6c25b6b4e346020a833fee1d9a4e656e1"],"inPathIndices":[999,0],"inPathElements":[["0x0"],["0x0"]],"values":["0x2d8","0x2d8"],"leafLowerRangeValues":["0x2d7","0x2d7"],"leafHigherRangeValues":["0x2d9","0x2d9"],"leafIndices":[0,0]}} +0;{"inclusion":{"roots":["0x20b0ba13870eceed6be345e9244906fe2af7d3404a9017d66cbee78f0e4e93e3","0x20b0ba13870eceed6be345e9244906fe2af7d3404a9017d66cbee78f0e4e93e3"],"inPathIndices":[0,0],"inPathElements":[["0x3e7"],["0x3e7"]],"leaves":["0x792bb611ef6449ffa74f4be3615d8457520fcefc94ad6b3048f87e88887781f","0x792bb611ef6449ffa74f4be3615d8457520fcefc94ad6b3048f87e88887781f"]},"nonInclusion":{"roots":["0x243f25af1c015104aaa6192ef954236248a9075dd1eb0a6eff7293f51136f73d","0x243f25af1c015104aaa6192ef954236248a9075dd1eb0a6eff7293f51136f73d"],"inPathIndices":[0,0],"inPathElements":[["0x3e7"],["0x3e7"]],"values":["0x1a","0x1a"],"leafLowerRangeValues":["0x19","0x19"],"leafHigherRangeValues":["0x1b","0x1b"],"leafIndices":[0,0]}} +1;{"inclusion":{"roots":["0x1a3a8baef805cbc17424920bf9a9af79fe4c3ce610bc59ebbca967b7f18120cc"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x1da8e20c69334c58009d72192ea7b99f05768f7d158c6ffb6f344d9f62235257"]},"nonInclusion":{"roots":["0x2657e9db575f4a069b735f63625f0ef7ff4709b28aed8e6a51629317d758c6aa"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x217"],"leafLowerRangeValues":["0x216"],"leafHigherRangeValues":["0x218"],"leafIndices":[1]}} +0;{"inclusion":{"roots":["0x1a3a8baef805cbc17424920bf9a9af79fe4c3ce610bc59ebbca967b7f18120cc"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x1da8e20c69334c58009d72192ea7b99f05768f7d158c6ffb6f344d9f62235257"]},"nonInclusion":{"roots":["0x3e7"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x2aa"],"leafLowerRangeValues":["0x2a9"],"leafHigherRangeValues":["0x2ab"],"leafIndices":[1]}} +0;{"inclusion":{"roots":["0x1a3a8baef805cbc17424920bf9a9af79fe4c3ce610bc59ebbca967b7f18120cc"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x1da8e20c69334c58009d72192ea7b99f05768f7d158c6ffb6f344d9f62235257"]},"nonInclusion":{"roots":["0x2e73ca149aa930a613e573da62b00d6c909ae5be74362b6001108d536968b769"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x2bf"],"leafLowerRangeValues":["0x2c0"],"leafHigherRangeValues":["0x2c2"],"leafIndices":[3]}} +0;{"inclusion":{"roots":["0x1a3a8baef805cbc17424920bf9a9af79fe4c3ce610bc59ebbca967b7f18120cc"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x1da8e20c69334c58009d72192ea7b99f05768f7d158c6ffb6f344d9f62235257"]},"nonInclusion":{"roots":["0x12dc4ff489179110dffbda63a8c735751ad8d1d0761ceb254803ff30bcc7bfa3"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x33e"],"leafLowerRangeValues":["0x33b"],"leafHigherRangeValues":["0x33d"],"leafIndices":[3]}} +0;{"inclusion":{"roots":["0x1a3a8baef805cbc17424920bf9a9af79fe4c3ce610bc59ebbca967b7f18120cc"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x1da8e20c69334c58009d72192ea7b99f05768f7d158c6ffb6f344d9f62235257"]},"nonInclusion":{"roots":["0x2fe14e2c096c245211720e39919378611c6145587ac824b5c2de112fa2d3e3f3"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x21b"],"leafLowerRangeValues":["0x21a"],"leafHigherRangeValues":["0x21c"],"leafIndices":[2]}} +0;{"inclusion":{"roots":["0x1a3a8baef805cbc17424920bf9a9af79fe4c3ce610bc59ebbca967b7f18120cc"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x1da8e20c69334c58009d72192ea7b99f05768f7d158c6ffb6f344d9f62235257"]},"nonInclusion":{"roots":["0x2c40c157d1ffb8ebc89b459997a2a01e0ce82fee030ccac7921143b85d6512be"],"inPathIndices":[0],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x2eb"],"leafLowerRangeValues":["0x2ea"],"leafHigherRangeValues":["0x2ec"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x3e7"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x30e992ebb7eac77764922534487c52d1466fe645b70e00cdb091399149d493b"]},"nonInclusion":{"roots":["0x2657e9db575f4a069b735f63625f0ef7ff4709b28aed8e6a51629317d758c6aa"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x217"],"leafLowerRangeValues":["0x216"],"leafHigherRangeValues":["0x218"],"leafIndices":[1]}} +0;{"inclusion":{"roots":["0x3e7"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x30e992ebb7eac77764922534487c52d1466fe645b70e00cdb091399149d493b"]},"nonInclusion":{"roots":["0x3e7"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x2aa"],"leafLowerRangeValues":["0x2a9"],"leafHigherRangeValues":["0x2ab"],"leafIndices":[1]}} +0;{"inclusion":{"roots":["0x3e7"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x30e992ebb7eac77764922534487c52d1466fe645b70e00cdb091399149d493b"]},"nonInclusion":{"roots":["0x2e73ca149aa930a613e573da62b00d6c909ae5be74362b6001108d536968b769"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x2bf"],"leafLowerRangeValues":["0x2c0"],"leafHigherRangeValues":["0x2c2"],"leafIndices":[3]}} +0;{"inclusion":{"roots":["0x3e7"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x30e992ebb7eac77764922534487c52d1466fe645b70e00cdb091399149d493b"]},"nonInclusion":{"roots":["0x12dc4ff489179110dffbda63a8c735751ad8d1d0761ceb254803ff30bcc7bfa3"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x33e"],"leafLowerRangeValues":["0x33b"],"leafHigherRangeValues":["0x33d"],"leafIndices":[3]}} +0;{"inclusion":{"roots":["0x3e7"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x30e992ebb7eac77764922534487c52d1466fe645b70e00cdb091399149d493b"]},"nonInclusion":{"roots":["0x2fe14e2c096c245211720e39919378611c6145587ac824b5c2de112fa2d3e3f3"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x21b"],"leafLowerRangeValues":["0x21a"],"leafHigherRangeValues":["0x21c"],"leafIndices":[2]}} +0;{"inclusion":{"roots":["0x3e7"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x30e992ebb7eac77764922534487c52d1466fe645b70e00cdb091399149d493b"]},"nonInclusion":{"roots":["0x2c40c157d1ffb8ebc89b459997a2a01e0ce82fee030ccac7921143b85d6512be"],"inPathIndices":[0],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x2eb"],"leafLowerRangeValues":["0x2ea"],"leafHigherRangeValues":["0x2ec"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x13e5c8b01ac40d375e02ed105bd66100befdbd7e80829347112d2828ced661b6"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x3e7"]},"nonInclusion":{"roots":["0x2657e9db575f4a069b735f63625f0ef7ff4709b28aed8e6a51629317d758c6aa"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x217"],"leafLowerRangeValues":["0x216"],"leafHigherRangeValues":["0x218"],"leafIndices":[1]}} +0;{"inclusion":{"roots":["0x13e5c8b01ac40d375e02ed105bd66100befdbd7e80829347112d2828ced661b6"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x3e7"]},"nonInclusion":{"roots":["0x3e7"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x2aa"],"leafLowerRangeValues":["0x2a9"],"leafHigherRangeValues":["0x2ab"],"leafIndices":[1]}} +0;{"inclusion":{"roots":["0x13e5c8b01ac40d375e02ed105bd66100befdbd7e80829347112d2828ced661b6"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x3e7"]},"nonInclusion":{"roots":["0x2e73ca149aa930a613e573da62b00d6c909ae5be74362b6001108d536968b769"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x2bf"],"leafLowerRangeValues":["0x2c0"],"leafHigherRangeValues":["0x2c2"],"leafIndices":[3]}} +0;{"inclusion":{"roots":["0x13e5c8b01ac40d375e02ed105bd66100befdbd7e80829347112d2828ced661b6"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x3e7"]},"nonInclusion":{"roots":["0x12dc4ff489179110dffbda63a8c735751ad8d1d0761ceb254803ff30bcc7bfa3"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x33e"],"leafLowerRangeValues":["0x33b"],"leafHigherRangeValues":["0x33d"],"leafIndices":[3]}} +0;{"inclusion":{"roots":["0x13e5c8b01ac40d375e02ed105bd66100befdbd7e80829347112d2828ced661b6"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x3e7"]},"nonInclusion":{"roots":["0x2fe14e2c096c245211720e39919378611c6145587ac824b5c2de112fa2d3e3f3"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x21b"],"leafLowerRangeValues":["0x21a"],"leafHigherRangeValues":["0x21c"],"leafIndices":[2]}} +0;{"inclusion":{"roots":["0x13e5c8b01ac40d375e02ed105bd66100befdbd7e80829347112d2828ced661b6"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x3e7"]},"nonInclusion":{"roots":["0x2c40c157d1ffb8ebc89b459997a2a01e0ce82fee030ccac7921143b85d6512be"],"inPathIndices":[0],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x2eb"],"leafLowerRangeValues":["0x2ea"],"leafHigherRangeValues":["0x2ec"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x2129fe4bbccaf815ea9636f57db4cf87fa6dd3186e0b936b8c62596981787bbf"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x2fca2a9eeceb312508ed22cf11c7ccd3c8d04e80d705259629c71cbb785ceb0f"]},"nonInclusion":{"roots":["0x2657e9db575f4a069b735f63625f0ef7ff4709b28aed8e6a51629317d758c6aa"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x217"],"leafLowerRangeValues":["0x216"],"leafHigherRangeValues":["0x218"],"leafIndices":[1]}} +0;{"inclusion":{"roots":["0x2129fe4bbccaf815ea9636f57db4cf87fa6dd3186e0b936b8c62596981787bbf"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x2fca2a9eeceb312508ed22cf11c7ccd3c8d04e80d705259629c71cbb785ceb0f"]},"nonInclusion":{"roots":["0x3e7"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x2aa"],"leafLowerRangeValues":["0x2a9"],"leafHigherRangeValues":["0x2ab"],"leafIndices":[1]}} +0;{"inclusion":{"roots":["0x2129fe4bbccaf815ea9636f57db4cf87fa6dd3186e0b936b8c62596981787bbf"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x2fca2a9eeceb312508ed22cf11c7ccd3c8d04e80d705259629c71cbb785ceb0f"]},"nonInclusion":{"roots":["0x2e73ca149aa930a613e573da62b00d6c909ae5be74362b6001108d536968b769"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x2bf"],"leafLowerRangeValues":["0x2c0"],"leafHigherRangeValues":["0x2c2"],"leafIndices":[3]}} +0;{"inclusion":{"roots":["0x2129fe4bbccaf815ea9636f57db4cf87fa6dd3186e0b936b8c62596981787bbf"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x2fca2a9eeceb312508ed22cf11c7ccd3c8d04e80d705259629c71cbb785ceb0f"]},"nonInclusion":{"roots":["0x12dc4ff489179110dffbda63a8c735751ad8d1d0761ceb254803ff30bcc7bfa3"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x33e"],"leafLowerRangeValues":["0x33b"],"leafHigherRangeValues":["0x33d"],"leafIndices":[3]}} +0;{"inclusion":{"roots":["0x2129fe4bbccaf815ea9636f57db4cf87fa6dd3186e0b936b8c62596981787bbf"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x2fca2a9eeceb312508ed22cf11c7ccd3c8d04e80d705259629c71cbb785ceb0f"]},"nonInclusion":{"roots":["0x2fe14e2c096c245211720e39919378611c6145587ac824b5c2de112fa2d3e3f3"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x21b"],"leafLowerRangeValues":["0x21a"],"leafHigherRangeValues":["0x21c"],"leafIndices":[2]}} +0;{"inclusion":{"roots":["0x2129fe4bbccaf815ea9636f57db4cf87fa6dd3186e0b936b8c62596981787bbf"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x2fca2a9eeceb312508ed22cf11c7ccd3c8d04e80d705259629c71cbb785ceb0f"]},"nonInclusion":{"roots":["0x2c40c157d1ffb8ebc89b459997a2a01e0ce82fee030ccac7921143b85d6512be"],"inPathIndices":[0],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x2eb"],"leafLowerRangeValues":["0x2ea"],"leafHigherRangeValues":["0x2ec"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x9568c5b34e28c111e4d060dbc037018d1f2f8df0fccec553b87d1d2e3fa2347"],"inPathIndices":[1],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x78a48db2daba79d98e6fe3a6f492603793cae5e16f15239f06961210365f121"]},"nonInclusion":{"roots":["0x2657e9db575f4a069b735f63625f0ef7ff4709b28aed8e6a51629317d758c6aa"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x217"],"leafLowerRangeValues":["0x216"],"leafHigherRangeValues":["0x218"],"leafIndices":[1]}} +0;{"inclusion":{"roots":["0x9568c5b34e28c111e4d060dbc037018d1f2f8df0fccec553b87d1d2e3fa2347"],"inPathIndices":[1],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x78a48db2daba79d98e6fe3a6f492603793cae5e16f15239f06961210365f121"]},"nonInclusion":{"roots":["0x3e7"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x2aa"],"leafLowerRangeValues":["0x2a9"],"leafHigherRangeValues":["0x2ab"],"leafIndices":[1]}} +0;{"inclusion":{"roots":["0x9568c5b34e28c111e4d060dbc037018d1f2f8df0fccec553b87d1d2e3fa2347"],"inPathIndices":[1],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x78a48db2daba79d98e6fe3a6f492603793cae5e16f15239f06961210365f121"]},"nonInclusion":{"roots":["0x2e73ca149aa930a613e573da62b00d6c909ae5be74362b6001108d536968b769"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x2bf"],"leafLowerRangeValues":["0x2c0"],"leafHigherRangeValues":["0x2c2"],"leafIndices":[3]}} +0;{"inclusion":{"roots":["0x9568c5b34e28c111e4d060dbc037018d1f2f8df0fccec553b87d1d2e3fa2347"],"inPathIndices":[1],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x78a48db2daba79d98e6fe3a6f492603793cae5e16f15239f06961210365f121"]},"nonInclusion":{"roots":["0x12dc4ff489179110dffbda63a8c735751ad8d1d0761ceb254803ff30bcc7bfa3"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x33e"],"leafLowerRangeValues":["0x33b"],"leafHigherRangeValues":["0x33d"],"leafIndices":[3]}} +0;{"inclusion":{"roots":["0x9568c5b34e28c111e4d060dbc037018d1f2f8df0fccec553b87d1d2e3fa2347"],"inPathIndices":[1],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x78a48db2daba79d98e6fe3a6f492603793cae5e16f15239f06961210365f121"]},"nonInclusion":{"roots":["0x2fe14e2c096c245211720e39919378611c6145587ac824b5c2de112fa2d3e3f3"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x21b"],"leafLowerRangeValues":["0x21a"],"leafHigherRangeValues":["0x21c"],"leafIndices":[2]}} +0;{"inclusion":{"roots":["0x9568c5b34e28c111e4d060dbc037018d1f2f8df0fccec553b87d1d2e3fa2347"],"inPathIndices":[1],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x78a48db2daba79d98e6fe3a6f492603793cae5e16f15239f06961210365f121"]},"nonInclusion":{"roots":["0x2c40c157d1ffb8ebc89b459997a2a01e0ce82fee030ccac7921143b85d6512be"],"inPathIndices":[0],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x2eb"],"leafLowerRangeValues":["0x2ea"],"leafHigherRangeValues":["0x2ec"],"leafIndices":[0]}} +1;{"inclusion":{"roots":["0x22cd23052aa47617d992de93f3b5c3e6627bd352c529b097c8b45c23380103f1","0x22cd23052aa47617d992de93f3b5c3e6627bd352c529b097c8b45c23380103f1"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x2a3b5324229347d27fea4ecb1570b64f695698fdbfbe20ac5989faf463869499","0x2a3b5324229347d27fea4ecb1570b64f695698fdbfbe20ac5989faf463869499"]},"nonInclusion":{"roots":["0x229c477ba8ca964a5352b415eb1835cef7d40bd9b4fb26a87c32740ba37f106c","0x229c477ba8ca964a5352b415eb1835cef7d40bd9b4fb26a87c32740ba37f106c"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x35a","0x35a"],"leafLowerRangeValues":["0x359","0x359"],"leafHigherRangeValues":["0x35b","0x35b"],"leafIndices":[3,3]}} +0;{"inclusion":{"roots":["0x22cd23052aa47617d992de93f3b5c3e6627bd352c529b097c8b45c23380103f1","0x22cd23052aa47617d992de93f3b5c3e6627bd352c529b097c8b45c23380103f1"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x2a3b5324229347d27fea4ecb1570b64f695698fdbfbe20ac5989faf463869499","0x2a3b5324229347d27fea4ecb1570b64f695698fdbfbe20ac5989faf463869499"]},"nonInclusion":{"roots":["0x3e7","0x2eba49535489e830b434cc08493d1278cd072ca86a8e0915c43cda54bd7e3d8b"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x189","0x189"],"leafLowerRangeValues":["0x188","0x188"],"leafHigherRangeValues":["0x18a","0x18a"],"leafIndices":[3,3]}} +0;{"inclusion":{"roots":["0x22cd23052aa47617d992de93f3b5c3e6627bd352c529b097c8b45c23380103f1","0x22cd23052aa47617d992de93f3b5c3e6627bd352c529b097c8b45c23380103f1"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x2a3b5324229347d27fea4ecb1570b64f695698fdbfbe20ac5989faf463869499","0x2a3b5324229347d27fea4ecb1570b64f695698fdbfbe20ac5989faf463869499"]},"nonInclusion":{"roots":["0xbda9b898ab01d465de1ec0fc8a9777bf0723ce45350111aa35df87c3b5ae8d2","0xbda9b898ab01d465de1ec0fc8a9777bf0723ce45350111aa35df87c3b5ae8d2"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x1b7","0x1b7"],"leafLowerRangeValues":["0x1b8","0x1b8"],"leafHigherRangeValues":["0x1ba","0x1ba"],"leafIndices":[2,2]}} +0;{"inclusion":{"roots":["0x22cd23052aa47617d992de93f3b5c3e6627bd352c529b097c8b45c23380103f1","0x22cd23052aa47617d992de93f3b5c3e6627bd352c529b097c8b45c23380103f1"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x2a3b5324229347d27fea4ecb1570b64f695698fdbfbe20ac5989faf463869499","0x2a3b5324229347d27fea4ecb1570b64f695698fdbfbe20ac5989faf463869499"]},"nonInclusion":{"roots":["0xb9545be725c945a37eaf37c70ab5979cc0135b380c62b6cd43b7b385782da15","0xb9545be725c945a37eaf37c70ab5979cc0135b380c62b6cd43b7b385782da15"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x6e","0x6e"],"leafLowerRangeValues":["0x6b","0x6b"],"leafHigherRangeValues":["0x6d","0x6d"],"leafIndices":[3,3]}} +0;{"inclusion":{"roots":["0x22cd23052aa47617d992de93f3b5c3e6627bd352c529b097c8b45c23380103f1","0x22cd23052aa47617d992de93f3b5c3e6627bd352c529b097c8b45c23380103f1"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x2a3b5324229347d27fea4ecb1570b64f695698fdbfbe20ac5989faf463869499","0x2a3b5324229347d27fea4ecb1570b64f695698fdbfbe20ac5989faf463869499"]},"nonInclusion":{"roots":["0xa27152c9417262314529b83da96928b0066d32027344dd3aec1861e13d0c032","0xa27152c9417262314529b83da96928b0066d32027344dd3aec1861e13d0c032"],"inPathIndices":[999,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x3f","0x3f"],"leafLowerRangeValues":["0x3e","0x3e"],"leafHigherRangeValues":["0x40","0x40"],"leafIndices":[1,1]}} +0;{"inclusion":{"roots":["0x22cd23052aa47617d992de93f3b5c3e6627bd352c529b097c8b45c23380103f1","0x22cd23052aa47617d992de93f3b5c3e6627bd352c529b097c8b45c23380103f1"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x2a3b5324229347d27fea4ecb1570b64f695698fdbfbe20ac5989faf463869499","0x2a3b5324229347d27fea4ecb1570b64f695698fdbfbe20ac5989faf463869499"]},"nonInclusion":{"roots":["0x108a1955f5dfea80ad8b105b08ccab5c3f8f73e65af4228b80959aba11b15bc8","0x108a1955f5dfea80ad8b105b08ccab5c3f8f73e65af4228b80959aba11b15bc8"],"inPathIndices":[1,1],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x1dd","0x1dd"],"leafLowerRangeValues":["0x1dc","0x1dc"],"leafHigherRangeValues":["0x1de","0x1de"],"leafIndices":[1,1]}} +0;{"inclusion":{"roots":["0x3e7","0x21b6dbc66b805987add417b2b4ed114e2cfea7db4816765c2c0dcbfaca8d5e7e"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x1185191f17699c26a87b2107505e47744715d724f767b59639ba0354cffe56cd","0x1185191f17699c26a87b2107505e47744715d724f767b59639ba0354cffe56cd"]},"nonInclusion":{"roots":["0x229c477ba8ca964a5352b415eb1835cef7d40bd9b4fb26a87c32740ba37f106c","0x229c477ba8ca964a5352b415eb1835cef7d40bd9b4fb26a87c32740ba37f106c"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x35a","0x35a"],"leafLowerRangeValues":["0x359","0x359"],"leafHigherRangeValues":["0x35b","0x35b"],"leafIndices":[3,3]}} +0;{"inclusion":{"roots":["0x3e7","0x21b6dbc66b805987add417b2b4ed114e2cfea7db4816765c2c0dcbfaca8d5e7e"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x1185191f17699c26a87b2107505e47744715d724f767b59639ba0354cffe56cd","0x1185191f17699c26a87b2107505e47744715d724f767b59639ba0354cffe56cd"]},"nonInclusion":{"roots":["0x3e7","0x2eba49535489e830b434cc08493d1278cd072ca86a8e0915c43cda54bd7e3d8b"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x189","0x189"],"leafLowerRangeValues":["0x188","0x188"],"leafHigherRangeValues":["0x18a","0x18a"],"leafIndices":[3,3]}} +0;{"inclusion":{"roots":["0x3e7","0x21b6dbc66b805987add417b2b4ed114e2cfea7db4816765c2c0dcbfaca8d5e7e"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x1185191f17699c26a87b2107505e47744715d724f767b59639ba0354cffe56cd","0x1185191f17699c26a87b2107505e47744715d724f767b59639ba0354cffe56cd"]},"nonInclusion":{"roots":["0xbda9b898ab01d465de1ec0fc8a9777bf0723ce45350111aa35df87c3b5ae8d2","0xbda9b898ab01d465de1ec0fc8a9777bf0723ce45350111aa35df87c3b5ae8d2"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x1b7","0x1b7"],"leafLowerRangeValues":["0x1b8","0x1b8"],"leafHigherRangeValues":["0x1ba","0x1ba"],"leafIndices":[2,2]}} +0;{"inclusion":{"roots":["0x3e7","0x21b6dbc66b805987add417b2b4ed114e2cfea7db4816765c2c0dcbfaca8d5e7e"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x1185191f17699c26a87b2107505e47744715d724f767b59639ba0354cffe56cd","0x1185191f17699c26a87b2107505e47744715d724f767b59639ba0354cffe56cd"]},"nonInclusion":{"roots":["0xb9545be725c945a37eaf37c70ab5979cc0135b380c62b6cd43b7b385782da15","0xb9545be725c945a37eaf37c70ab5979cc0135b380c62b6cd43b7b385782da15"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x6e","0x6e"],"leafLowerRangeValues":["0x6b","0x6b"],"leafHigherRangeValues":["0x6d","0x6d"],"leafIndices":[3,3]}} +0;{"inclusion":{"roots":["0x3e7","0x21b6dbc66b805987add417b2b4ed114e2cfea7db4816765c2c0dcbfaca8d5e7e"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x1185191f17699c26a87b2107505e47744715d724f767b59639ba0354cffe56cd","0x1185191f17699c26a87b2107505e47744715d724f767b59639ba0354cffe56cd"]},"nonInclusion":{"roots":["0xa27152c9417262314529b83da96928b0066d32027344dd3aec1861e13d0c032","0xa27152c9417262314529b83da96928b0066d32027344dd3aec1861e13d0c032"],"inPathIndices":[999,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x3f","0x3f"],"leafLowerRangeValues":["0x3e","0x3e"],"leafHigherRangeValues":["0x40","0x40"],"leafIndices":[1,1]}} +0;{"inclusion":{"roots":["0x3e7","0x21b6dbc66b805987add417b2b4ed114e2cfea7db4816765c2c0dcbfaca8d5e7e"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x1185191f17699c26a87b2107505e47744715d724f767b59639ba0354cffe56cd","0x1185191f17699c26a87b2107505e47744715d724f767b59639ba0354cffe56cd"]},"nonInclusion":{"roots":["0x108a1955f5dfea80ad8b105b08ccab5c3f8f73e65af4228b80959aba11b15bc8","0x108a1955f5dfea80ad8b105b08ccab5c3f8f73e65af4228b80959aba11b15bc8"],"inPathIndices":[1,1],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x1dd","0x1dd"],"leafLowerRangeValues":["0x1dc","0x1dc"],"leafHigherRangeValues":["0x1de","0x1de"],"leafIndices":[1,1]}} +0;{"inclusion":{"roots":["0x22b65815a88f1b79311d4174dcae0a20a59cfc401d4f351f40694e5a42925cf2","0x22b65815a88f1b79311d4174dcae0a20a59cfc401d4f351f40694e5a42925cf2"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x3e7","0x2394a0db860596e041fc42245fcbfc69d6785ee021226759715c864eb5a133f2"]},"nonInclusion":{"roots":["0x229c477ba8ca964a5352b415eb1835cef7d40bd9b4fb26a87c32740ba37f106c","0x229c477ba8ca964a5352b415eb1835cef7d40bd9b4fb26a87c32740ba37f106c"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x35a","0x35a"],"leafLowerRangeValues":["0x359","0x359"],"leafHigherRangeValues":["0x35b","0x35b"],"leafIndices":[3,3]}} +0;{"inclusion":{"roots":["0x22b65815a88f1b79311d4174dcae0a20a59cfc401d4f351f40694e5a42925cf2","0x22b65815a88f1b79311d4174dcae0a20a59cfc401d4f351f40694e5a42925cf2"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x3e7","0x2394a0db860596e041fc42245fcbfc69d6785ee021226759715c864eb5a133f2"]},"nonInclusion":{"roots":["0x3e7","0x2eba49535489e830b434cc08493d1278cd072ca86a8e0915c43cda54bd7e3d8b"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x189","0x189"],"leafLowerRangeValues":["0x188","0x188"],"leafHigherRangeValues":["0x18a","0x18a"],"leafIndices":[3,3]}} +0;{"inclusion":{"roots":["0x22b65815a88f1b79311d4174dcae0a20a59cfc401d4f351f40694e5a42925cf2","0x22b65815a88f1b79311d4174dcae0a20a59cfc401d4f351f40694e5a42925cf2"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x3e7","0x2394a0db860596e041fc42245fcbfc69d6785ee021226759715c864eb5a133f2"]},"nonInclusion":{"roots":["0xbda9b898ab01d465de1ec0fc8a9777bf0723ce45350111aa35df87c3b5ae8d2","0xbda9b898ab01d465de1ec0fc8a9777bf0723ce45350111aa35df87c3b5ae8d2"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x1b7","0x1b7"],"leafLowerRangeValues":["0x1b8","0x1b8"],"leafHigherRangeValues":["0x1ba","0x1ba"],"leafIndices":[2,2]}} +0;{"inclusion":{"roots":["0x22b65815a88f1b79311d4174dcae0a20a59cfc401d4f351f40694e5a42925cf2","0x22b65815a88f1b79311d4174dcae0a20a59cfc401d4f351f40694e5a42925cf2"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x3e7","0x2394a0db860596e041fc42245fcbfc69d6785ee021226759715c864eb5a133f2"]},"nonInclusion":{"roots":["0xb9545be725c945a37eaf37c70ab5979cc0135b380c62b6cd43b7b385782da15","0xb9545be725c945a37eaf37c70ab5979cc0135b380c62b6cd43b7b385782da15"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x6e","0x6e"],"leafLowerRangeValues":["0x6b","0x6b"],"leafHigherRangeValues":["0x6d","0x6d"],"leafIndices":[3,3]}} +0;{"inclusion":{"roots":["0x22b65815a88f1b79311d4174dcae0a20a59cfc401d4f351f40694e5a42925cf2","0x22b65815a88f1b79311d4174dcae0a20a59cfc401d4f351f40694e5a42925cf2"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x3e7","0x2394a0db860596e041fc42245fcbfc69d6785ee021226759715c864eb5a133f2"]},"nonInclusion":{"roots":["0xa27152c9417262314529b83da96928b0066d32027344dd3aec1861e13d0c032","0xa27152c9417262314529b83da96928b0066d32027344dd3aec1861e13d0c032"],"inPathIndices":[999,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x3f","0x3f"],"leafLowerRangeValues":["0x3e","0x3e"],"leafHigherRangeValues":["0x40","0x40"],"leafIndices":[1,1]}} +0;{"inclusion":{"roots":["0x22b65815a88f1b79311d4174dcae0a20a59cfc401d4f351f40694e5a42925cf2","0x22b65815a88f1b79311d4174dcae0a20a59cfc401d4f351f40694e5a42925cf2"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x3e7","0x2394a0db860596e041fc42245fcbfc69d6785ee021226759715c864eb5a133f2"]},"nonInclusion":{"roots":["0x108a1955f5dfea80ad8b105b08ccab5c3f8f73e65af4228b80959aba11b15bc8","0x108a1955f5dfea80ad8b105b08ccab5c3f8f73e65af4228b80959aba11b15bc8"],"inPathIndices":[1,1],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x1dd","0x1dd"],"leafLowerRangeValues":["0x1dc","0x1dc"],"leafHigherRangeValues":["0x1de","0x1de"],"leafIndices":[1,1]}} +0;{"inclusion":{"roots":["0x177739fd86b8bc895d8e010699d8bf695040f24e7a70f96eb4f5d86cb92277df","0x177739fd86b8bc895d8e010699d8bf695040f24e7a70f96eb4f5d86cb92277df"],"inPathIndices":[999,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x2f9c1db0d65e1a938d94d5a226f646cf601dfdc9bc45340349b318e14cdb4277","0x2f9c1db0d65e1a938d94d5a226f646cf601dfdc9bc45340349b318e14cdb4277"]},"nonInclusion":{"roots":["0x229c477ba8ca964a5352b415eb1835cef7d40bd9b4fb26a87c32740ba37f106c","0x229c477ba8ca964a5352b415eb1835cef7d40bd9b4fb26a87c32740ba37f106c"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x35a","0x35a"],"leafLowerRangeValues":["0x359","0x359"],"leafHigherRangeValues":["0x35b","0x35b"],"leafIndices":[3,3]}} +0;{"inclusion":{"roots":["0x177739fd86b8bc895d8e010699d8bf695040f24e7a70f96eb4f5d86cb92277df","0x177739fd86b8bc895d8e010699d8bf695040f24e7a70f96eb4f5d86cb92277df"],"inPathIndices":[999,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x2f9c1db0d65e1a938d94d5a226f646cf601dfdc9bc45340349b318e14cdb4277","0x2f9c1db0d65e1a938d94d5a226f646cf601dfdc9bc45340349b318e14cdb4277"]},"nonInclusion":{"roots":["0x3e7","0x2eba49535489e830b434cc08493d1278cd072ca86a8e0915c43cda54bd7e3d8b"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x189","0x189"],"leafLowerRangeValues":["0x188","0x188"],"leafHigherRangeValues":["0x18a","0x18a"],"leafIndices":[3,3]}} +0;{"inclusion":{"roots":["0x177739fd86b8bc895d8e010699d8bf695040f24e7a70f96eb4f5d86cb92277df","0x177739fd86b8bc895d8e010699d8bf695040f24e7a70f96eb4f5d86cb92277df"],"inPathIndices":[999,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x2f9c1db0d65e1a938d94d5a226f646cf601dfdc9bc45340349b318e14cdb4277","0x2f9c1db0d65e1a938d94d5a226f646cf601dfdc9bc45340349b318e14cdb4277"]},"nonInclusion":{"roots":["0xbda9b898ab01d465de1ec0fc8a9777bf0723ce45350111aa35df87c3b5ae8d2","0xbda9b898ab01d465de1ec0fc8a9777bf0723ce45350111aa35df87c3b5ae8d2"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x1b7","0x1b7"],"leafLowerRangeValues":["0x1b8","0x1b8"],"leafHigherRangeValues":["0x1ba","0x1ba"],"leafIndices":[2,2]}} +0;{"inclusion":{"roots":["0x177739fd86b8bc895d8e010699d8bf695040f24e7a70f96eb4f5d86cb92277df","0x177739fd86b8bc895d8e010699d8bf695040f24e7a70f96eb4f5d86cb92277df"],"inPathIndices":[999,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x2f9c1db0d65e1a938d94d5a226f646cf601dfdc9bc45340349b318e14cdb4277","0x2f9c1db0d65e1a938d94d5a226f646cf601dfdc9bc45340349b318e14cdb4277"]},"nonInclusion":{"roots":["0xb9545be725c945a37eaf37c70ab5979cc0135b380c62b6cd43b7b385782da15","0xb9545be725c945a37eaf37c70ab5979cc0135b380c62b6cd43b7b385782da15"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x6e","0x6e"],"leafLowerRangeValues":["0x6b","0x6b"],"leafHigherRangeValues":["0x6d","0x6d"],"leafIndices":[3,3]}} +0;{"inclusion":{"roots":["0x177739fd86b8bc895d8e010699d8bf695040f24e7a70f96eb4f5d86cb92277df","0x177739fd86b8bc895d8e010699d8bf695040f24e7a70f96eb4f5d86cb92277df"],"inPathIndices":[999,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x2f9c1db0d65e1a938d94d5a226f646cf601dfdc9bc45340349b318e14cdb4277","0x2f9c1db0d65e1a938d94d5a226f646cf601dfdc9bc45340349b318e14cdb4277"]},"nonInclusion":{"roots":["0xa27152c9417262314529b83da96928b0066d32027344dd3aec1861e13d0c032","0xa27152c9417262314529b83da96928b0066d32027344dd3aec1861e13d0c032"],"inPathIndices":[999,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x3f","0x3f"],"leafLowerRangeValues":["0x3e","0x3e"],"leafHigherRangeValues":["0x40","0x40"],"leafIndices":[1,1]}} +0;{"inclusion":{"roots":["0x177739fd86b8bc895d8e010699d8bf695040f24e7a70f96eb4f5d86cb92277df","0x177739fd86b8bc895d8e010699d8bf695040f24e7a70f96eb4f5d86cb92277df"],"inPathIndices":[999,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x2f9c1db0d65e1a938d94d5a226f646cf601dfdc9bc45340349b318e14cdb4277","0x2f9c1db0d65e1a938d94d5a226f646cf601dfdc9bc45340349b318e14cdb4277"]},"nonInclusion":{"roots":["0x108a1955f5dfea80ad8b105b08ccab5c3f8f73e65af4228b80959aba11b15bc8","0x108a1955f5dfea80ad8b105b08ccab5c3f8f73e65af4228b80959aba11b15bc8"],"inPathIndices":[1,1],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x1dd","0x1dd"],"leafLowerRangeValues":["0x1dc","0x1dc"],"leafHigherRangeValues":["0x1de","0x1de"],"leafIndices":[1,1]}} +0;{"inclusion":{"roots":["0x15124b13ada145df71514f6aa9270aed5404d3c30882951ea6b1c7eaa6bc130c","0x15124b13ada145df71514f6aa9270aed5404d3c30882951ea6b1c7eaa6bc130c"],"inPathIndices":[0,0],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0xa58d7332c89631040547bd2c938f6a0739734da727c01d504f02fb03c272177","0xa58d7332c89631040547bd2c938f6a0739734da727c01d504f02fb03c272177"]},"nonInclusion":{"roots":["0x229c477ba8ca964a5352b415eb1835cef7d40bd9b4fb26a87c32740ba37f106c","0x229c477ba8ca964a5352b415eb1835cef7d40bd9b4fb26a87c32740ba37f106c"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x35a","0x35a"],"leafLowerRangeValues":["0x359","0x359"],"leafHigherRangeValues":["0x35b","0x35b"],"leafIndices":[3,3]}} +0;{"inclusion":{"roots":["0x15124b13ada145df71514f6aa9270aed5404d3c30882951ea6b1c7eaa6bc130c","0x15124b13ada145df71514f6aa9270aed5404d3c30882951ea6b1c7eaa6bc130c"],"inPathIndices":[0,0],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0xa58d7332c89631040547bd2c938f6a0739734da727c01d504f02fb03c272177","0xa58d7332c89631040547bd2c938f6a0739734da727c01d504f02fb03c272177"]},"nonInclusion":{"roots":["0x3e7","0x2eba49535489e830b434cc08493d1278cd072ca86a8e0915c43cda54bd7e3d8b"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x189","0x189"],"leafLowerRangeValues":["0x188","0x188"],"leafHigherRangeValues":["0x18a","0x18a"],"leafIndices":[3,3]}} +0;{"inclusion":{"roots":["0x15124b13ada145df71514f6aa9270aed5404d3c30882951ea6b1c7eaa6bc130c","0x15124b13ada145df71514f6aa9270aed5404d3c30882951ea6b1c7eaa6bc130c"],"inPathIndices":[0,0],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0xa58d7332c89631040547bd2c938f6a0739734da727c01d504f02fb03c272177","0xa58d7332c89631040547bd2c938f6a0739734da727c01d504f02fb03c272177"]},"nonInclusion":{"roots":["0xbda9b898ab01d465de1ec0fc8a9777bf0723ce45350111aa35df87c3b5ae8d2","0xbda9b898ab01d465de1ec0fc8a9777bf0723ce45350111aa35df87c3b5ae8d2"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x1b7","0x1b7"],"leafLowerRangeValues":["0x1b8","0x1b8"],"leafHigherRangeValues":["0x1ba","0x1ba"],"leafIndices":[2,2]}} +0;{"inclusion":{"roots":["0x15124b13ada145df71514f6aa9270aed5404d3c30882951ea6b1c7eaa6bc130c","0x15124b13ada145df71514f6aa9270aed5404d3c30882951ea6b1c7eaa6bc130c"],"inPathIndices":[0,0],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0xa58d7332c89631040547bd2c938f6a0739734da727c01d504f02fb03c272177","0xa58d7332c89631040547bd2c938f6a0739734da727c01d504f02fb03c272177"]},"nonInclusion":{"roots":["0xb9545be725c945a37eaf37c70ab5979cc0135b380c62b6cd43b7b385782da15","0xb9545be725c945a37eaf37c70ab5979cc0135b380c62b6cd43b7b385782da15"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x6e","0x6e"],"leafLowerRangeValues":["0x6b","0x6b"],"leafHigherRangeValues":["0x6d","0x6d"],"leafIndices":[3,3]}} +0;{"inclusion":{"roots":["0x15124b13ada145df71514f6aa9270aed5404d3c30882951ea6b1c7eaa6bc130c","0x15124b13ada145df71514f6aa9270aed5404d3c30882951ea6b1c7eaa6bc130c"],"inPathIndices":[0,0],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0xa58d7332c89631040547bd2c938f6a0739734da727c01d504f02fb03c272177","0xa58d7332c89631040547bd2c938f6a0739734da727c01d504f02fb03c272177"]},"nonInclusion":{"roots":["0xa27152c9417262314529b83da96928b0066d32027344dd3aec1861e13d0c032","0xa27152c9417262314529b83da96928b0066d32027344dd3aec1861e13d0c032"],"inPathIndices":[999,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x3f","0x3f"],"leafLowerRangeValues":["0x3e","0x3e"],"leafHigherRangeValues":["0x40","0x40"],"leafIndices":[1,1]}} +0;{"inclusion":{"roots":["0x15124b13ada145df71514f6aa9270aed5404d3c30882951ea6b1c7eaa6bc130c","0x15124b13ada145df71514f6aa9270aed5404d3c30882951ea6b1c7eaa6bc130c"],"inPathIndices":[0,0],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0xa58d7332c89631040547bd2c938f6a0739734da727c01d504f02fb03c272177","0xa58d7332c89631040547bd2c938f6a0739734da727c01d504f02fb03c272177"]},"nonInclusion":{"roots":["0x108a1955f5dfea80ad8b105b08ccab5c3f8f73e65af4228b80959aba11b15bc8","0x108a1955f5dfea80ad8b105b08ccab5c3f8f73e65af4228b80959aba11b15bc8"],"inPathIndices":[1,1],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x1dd","0x1dd"],"leafLowerRangeValues":["0x1dc","0x1dc"],"leafHigherRangeValues":["0x1de","0x1de"],"leafIndices":[1,1]}} +1;{"inclusion":{"roots":["0x986ab492c76ec9998c6fd061a880ead27e40d5a9e05e823dcc897b6880198e6"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x16ef0e5bed21c7f14a37ae28fd4eee16978a24521e070a0094b67a4d35c1bf33"]},"nonInclusion":{"roots":["0x131f827bdc973bb2ef9c6e8ca33ed670a668ed677d0ff78ca26702ec666b11ce"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x4d"],"leafLowerRangeValues":["0x4c"],"leafHigherRangeValues":["0x4e"],"leafIndices":[5]}} +0;{"inclusion":{"roots":["0x986ab492c76ec9998c6fd061a880ead27e40d5a9e05e823dcc897b6880198e6"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x16ef0e5bed21c7f14a37ae28fd4eee16978a24521e070a0094b67a4d35c1bf33"]},"nonInclusion":{"roots":["0x3e7"],"inPathIndices":[2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0xc0"],"leafLowerRangeValues":["0xbf"],"leafHigherRangeValues":["0xc1"],"leafIndices":[6]}} +0;{"inclusion":{"roots":["0x986ab492c76ec9998c6fd061a880ead27e40d5a9e05e823dcc897b6880198e6"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x16ef0e5bed21c7f14a37ae28fd4eee16978a24521e070a0094b67a4d35c1bf33"]},"nonInclusion":{"roots":["0x163ede8b662be11f6ed215a7241639dc2a6ddeaf257fca4e032778a01775ad9e"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x50"],"leafLowerRangeValues":["0x51"],"leafHigherRangeValues":["0x53"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x986ab492c76ec9998c6fd061a880ead27e40d5a9e05e823dcc897b6880198e6"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x16ef0e5bed21c7f14a37ae28fd4eee16978a24521e070a0094b67a4d35c1bf33"]},"nonInclusion":{"roots":["0x19fe3de81f3157c4f372f3f05d450d398fb2af116bfe39b2da08dc87631a000b"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x242"],"leafLowerRangeValues":["0x23f"],"leafHigherRangeValues":["0x241"],"leafIndices":[5]}} +0;{"inclusion":{"roots":["0x986ab492c76ec9998c6fd061a880ead27e40d5a9e05e823dcc897b6880198e6"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x16ef0e5bed21c7f14a37ae28fd4eee16978a24521e070a0094b67a4d35c1bf33"]},"nonInclusion":{"roots":["0x2ce597fa75e0106f58e304d47cd09b17049d9a5076ad2286fb1166c13b7b4c4e"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x1b1"],"leafLowerRangeValues":["0x1b0"],"leafHigherRangeValues":["0x1b2"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x986ab492c76ec9998c6fd061a880ead27e40d5a9e05e823dcc897b6880198e6"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x16ef0e5bed21c7f14a37ae28fd4eee16978a24521e070a0094b67a4d35c1bf33"]},"nonInclusion":{"roots":["0x1444340e013071f0d5506720f296ac9f4df9ae51d4b440cf583db048aeb66c6f"],"inPathIndices":[1],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x169"],"leafLowerRangeValues":["0x168"],"leafHigherRangeValues":["0x16a"],"leafIndices":[6]}} +0;{"inclusion":{"roots":["0x3e7"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x25178997a47367bd4a1025dd9d1383c4293c50996565ffc83da80ee65c3f104e"]},"nonInclusion":{"roots":["0x131f827bdc973bb2ef9c6e8ca33ed670a668ed677d0ff78ca26702ec666b11ce"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x4d"],"leafLowerRangeValues":["0x4c"],"leafHigherRangeValues":["0x4e"],"leafIndices":[5]}} +0;{"inclusion":{"roots":["0x3e7"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x25178997a47367bd4a1025dd9d1383c4293c50996565ffc83da80ee65c3f104e"]},"nonInclusion":{"roots":["0x3e7"],"inPathIndices":[2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0xc0"],"leafLowerRangeValues":["0xbf"],"leafHigherRangeValues":["0xc1"],"leafIndices":[6]}} +0;{"inclusion":{"roots":["0x3e7"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x25178997a47367bd4a1025dd9d1383c4293c50996565ffc83da80ee65c3f104e"]},"nonInclusion":{"roots":["0x163ede8b662be11f6ed215a7241639dc2a6ddeaf257fca4e032778a01775ad9e"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x50"],"leafLowerRangeValues":["0x51"],"leafHigherRangeValues":["0x53"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x3e7"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x25178997a47367bd4a1025dd9d1383c4293c50996565ffc83da80ee65c3f104e"]},"nonInclusion":{"roots":["0x19fe3de81f3157c4f372f3f05d450d398fb2af116bfe39b2da08dc87631a000b"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x242"],"leafLowerRangeValues":["0x23f"],"leafHigherRangeValues":["0x241"],"leafIndices":[5]}} +0;{"inclusion":{"roots":["0x3e7"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x25178997a47367bd4a1025dd9d1383c4293c50996565ffc83da80ee65c3f104e"]},"nonInclusion":{"roots":["0x2ce597fa75e0106f58e304d47cd09b17049d9a5076ad2286fb1166c13b7b4c4e"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x1b1"],"leafLowerRangeValues":["0x1b0"],"leafHigherRangeValues":["0x1b2"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x3e7"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x25178997a47367bd4a1025dd9d1383c4293c50996565ffc83da80ee65c3f104e"]},"nonInclusion":{"roots":["0x1444340e013071f0d5506720f296ac9f4df9ae51d4b440cf583db048aeb66c6f"],"inPathIndices":[1],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x169"],"leafLowerRangeValues":["0x168"],"leafHigherRangeValues":["0x16a"],"leafIndices":[6]}} +0;{"inclusion":{"roots":["0x95536eca88889ce927f76f75bdde8fde6e3a3ccc0e70fb272f58e39fdde7246"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x3e7"]},"nonInclusion":{"roots":["0x131f827bdc973bb2ef9c6e8ca33ed670a668ed677d0ff78ca26702ec666b11ce"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x4d"],"leafLowerRangeValues":["0x4c"],"leafHigherRangeValues":["0x4e"],"leafIndices":[5]}} +0;{"inclusion":{"roots":["0x95536eca88889ce927f76f75bdde8fde6e3a3ccc0e70fb272f58e39fdde7246"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x3e7"]},"nonInclusion":{"roots":["0x3e7"],"inPathIndices":[2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0xc0"],"leafLowerRangeValues":["0xbf"],"leafHigherRangeValues":["0xc1"],"leafIndices":[6]}} +0;{"inclusion":{"roots":["0x95536eca88889ce927f76f75bdde8fde6e3a3ccc0e70fb272f58e39fdde7246"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x3e7"]},"nonInclusion":{"roots":["0x163ede8b662be11f6ed215a7241639dc2a6ddeaf257fca4e032778a01775ad9e"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x50"],"leafLowerRangeValues":["0x51"],"leafHigherRangeValues":["0x53"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x95536eca88889ce927f76f75bdde8fde6e3a3ccc0e70fb272f58e39fdde7246"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x3e7"]},"nonInclusion":{"roots":["0x19fe3de81f3157c4f372f3f05d450d398fb2af116bfe39b2da08dc87631a000b"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x242"],"leafLowerRangeValues":["0x23f"],"leafHigherRangeValues":["0x241"],"leafIndices":[5]}} +0;{"inclusion":{"roots":["0x95536eca88889ce927f76f75bdde8fde6e3a3ccc0e70fb272f58e39fdde7246"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x3e7"]},"nonInclusion":{"roots":["0x2ce597fa75e0106f58e304d47cd09b17049d9a5076ad2286fb1166c13b7b4c4e"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x1b1"],"leafLowerRangeValues":["0x1b0"],"leafHigherRangeValues":["0x1b2"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x95536eca88889ce927f76f75bdde8fde6e3a3ccc0e70fb272f58e39fdde7246"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x3e7"]},"nonInclusion":{"roots":["0x1444340e013071f0d5506720f296ac9f4df9ae51d4b440cf583db048aeb66c6f"],"inPathIndices":[1],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x169"],"leafLowerRangeValues":["0x168"],"leafHigherRangeValues":["0x16a"],"leafIndices":[6]}} +0;{"inclusion":{"roots":["0x197525ee1453a75f92f9874ba5035d49c3c3d226999429f7f08ea1483f335914"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x95ed0398813091607f786299bbb648dce0a45efb984cdd89d8516266c23eb18"]},"nonInclusion":{"roots":["0x131f827bdc973bb2ef9c6e8ca33ed670a668ed677d0ff78ca26702ec666b11ce"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x4d"],"leafLowerRangeValues":["0x4c"],"leafHigherRangeValues":["0x4e"],"leafIndices":[5]}} +0;{"inclusion":{"roots":["0x197525ee1453a75f92f9874ba5035d49c3c3d226999429f7f08ea1483f335914"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x95ed0398813091607f786299bbb648dce0a45efb984cdd89d8516266c23eb18"]},"nonInclusion":{"roots":["0x3e7"],"inPathIndices":[2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0xc0"],"leafLowerRangeValues":["0xbf"],"leafHigherRangeValues":["0xc1"],"leafIndices":[6]}} +0;{"inclusion":{"roots":["0x197525ee1453a75f92f9874ba5035d49c3c3d226999429f7f08ea1483f335914"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x95ed0398813091607f786299bbb648dce0a45efb984cdd89d8516266c23eb18"]},"nonInclusion":{"roots":["0x163ede8b662be11f6ed215a7241639dc2a6ddeaf257fca4e032778a01775ad9e"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x50"],"leafLowerRangeValues":["0x51"],"leafHigherRangeValues":["0x53"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x197525ee1453a75f92f9874ba5035d49c3c3d226999429f7f08ea1483f335914"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x95ed0398813091607f786299bbb648dce0a45efb984cdd89d8516266c23eb18"]},"nonInclusion":{"roots":["0x19fe3de81f3157c4f372f3f05d450d398fb2af116bfe39b2da08dc87631a000b"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x242"],"leafLowerRangeValues":["0x23f"],"leafHigherRangeValues":["0x241"],"leafIndices":[5]}} +0;{"inclusion":{"roots":["0x197525ee1453a75f92f9874ba5035d49c3c3d226999429f7f08ea1483f335914"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x95ed0398813091607f786299bbb648dce0a45efb984cdd89d8516266c23eb18"]},"nonInclusion":{"roots":["0x2ce597fa75e0106f58e304d47cd09b17049d9a5076ad2286fb1166c13b7b4c4e"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x1b1"],"leafLowerRangeValues":["0x1b0"],"leafHigherRangeValues":["0x1b2"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x197525ee1453a75f92f9874ba5035d49c3c3d226999429f7f08ea1483f335914"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x95ed0398813091607f786299bbb648dce0a45efb984cdd89d8516266c23eb18"]},"nonInclusion":{"roots":["0x1444340e013071f0d5506720f296ac9f4df9ae51d4b440cf583db048aeb66c6f"],"inPathIndices":[1],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x169"],"leafLowerRangeValues":["0x168"],"leafHigherRangeValues":["0x16a"],"leafIndices":[6]}} +0;{"inclusion":{"roots":["0x1c41b9437c85cf45e0fa59cc037b833364d46164b77b227833c290b9c774b27b"],"inPathIndices":[1],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x1864d10d3ecf844d207a851531327215f2e0ef6e17bdf556bdb969092f4fef8e"]},"nonInclusion":{"roots":["0x131f827bdc973bb2ef9c6e8ca33ed670a668ed677d0ff78ca26702ec666b11ce"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x4d"],"leafLowerRangeValues":["0x4c"],"leafHigherRangeValues":["0x4e"],"leafIndices":[5]}} +0;{"inclusion":{"roots":["0x1c41b9437c85cf45e0fa59cc037b833364d46164b77b227833c290b9c774b27b"],"inPathIndices":[1],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x1864d10d3ecf844d207a851531327215f2e0ef6e17bdf556bdb969092f4fef8e"]},"nonInclusion":{"roots":["0x3e7"],"inPathIndices":[2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0xc0"],"leafLowerRangeValues":["0xbf"],"leafHigherRangeValues":["0xc1"],"leafIndices":[6]}} +0;{"inclusion":{"roots":["0x1c41b9437c85cf45e0fa59cc037b833364d46164b77b227833c290b9c774b27b"],"inPathIndices":[1],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x1864d10d3ecf844d207a851531327215f2e0ef6e17bdf556bdb969092f4fef8e"]},"nonInclusion":{"roots":["0x163ede8b662be11f6ed215a7241639dc2a6ddeaf257fca4e032778a01775ad9e"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x50"],"leafLowerRangeValues":["0x51"],"leafHigherRangeValues":["0x53"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x1c41b9437c85cf45e0fa59cc037b833364d46164b77b227833c290b9c774b27b"],"inPathIndices":[1],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x1864d10d3ecf844d207a851531327215f2e0ef6e17bdf556bdb969092f4fef8e"]},"nonInclusion":{"roots":["0x19fe3de81f3157c4f372f3f05d450d398fb2af116bfe39b2da08dc87631a000b"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x242"],"leafLowerRangeValues":["0x23f"],"leafHigherRangeValues":["0x241"],"leafIndices":[5]}} +0;{"inclusion":{"roots":["0x1c41b9437c85cf45e0fa59cc037b833364d46164b77b227833c290b9c774b27b"],"inPathIndices":[1],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x1864d10d3ecf844d207a851531327215f2e0ef6e17bdf556bdb969092f4fef8e"]},"nonInclusion":{"roots":["0x2ce597fa75e0106f58e304d47cd09b17049d9a5076ad2286fb1166c13b7b4c4e"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x1b1"],"leafLowerRangeValues":["0x1b0"],"leafHigherRangeValues":["0x1b2"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x1c41b9437c85cf45e0fa59cc037b833364d46164b77b227833c290b9c774b27b"],"inPathIndices":[1],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x1864d10d3ecf844d207a851531327215f2e0ef6e17bdf556bdb969092f4fef8e"]},"nonInclusion":{"roots":["0x1444340e013071f0d5506720f296ac9f4df9ae51d4b440cf583db048aeb66c6f"],"inPathIndices":[1],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x169"],"leafLowerRangeValues":["0x168"],"leafHigherRangeValues":["0x16a"],"leafIndices":[6]}} +1;{"inclusion":{"roots":["0x1d0fe9417a491a750b5e7e883f80456096b32f0ec78d6133f3b3baf5fa659ad9","0x1d0fe9417a491a750b5e7e883f80456096b32f0ec78d6133f3b3baf5fa659ad9"],"inPathIndices":[2,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x6063c6136ef9bde857db688c03cb6e656dbd68f1d44609d20ddecfbfd11a61e","0x6063c6136ef9bde857db688c03cb6e656dbd68f1d44609d20ddecfbfd11a61e"]},"nonInclusion":{"roots":["0x2f440bd39ecc691a5f008dfa5afcf8044a61c1c9a9a0357335fc6da0afe9294e","0x2f440bd39ecc691a5f008dfa5afcf8044a61c1c9a9a0357335fc6da0afe9294e"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x149","0x149"],"leafLowerRangeValues":["0x148","0x148"],"leafHigherRangeValues":["0x14a","0x14a"],"leafIndices":[3,3]}} +0;{"inclusion":{"roots":["0x1d0fe9417a491a750b5e7e883f80456096b32f0ec78d6133f3b3baf5fa659ad9","0x1d0fe9417a491a750b5e7e883f80456096b32f0ec78d6133f3b3baf5fa659ad9"],"inPathIndices":[2,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x6063c6136ef9bde857db688c03cb6e656dbd68f1d44609d20ddecfbfd11a61e","0x6063c6136ef9bde857db688c03cb6e656dbd68f1d44609d20ddecfbfd11a61e"]},"nonInclusion":{"roots":["0x3e7","0xd937fe1563ef3b8e6fbef399f4b3db8c404a197adf5c22c5b79b8b87e85423f"],"inPathIndices":[2,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x333","0x333"],"leafLowerRangeValues":["0x332","0x332"],"leafHigherRangeValues":["0x334","0x334"],"leafIndices":[3,3]}} +0;{"inclusion":{"roots":["0x1d0fe9417a491a750b5e7e883f80456096b32f0ec78d6133f3b3baf5fa659ad9","0x1d0fe9417a491a750b5e7e883f80456096b32f0ec78d6133f3b3baf5fa659ad9"],"inPathIndices":[2,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x6063c6136ef9bde857db688c03cb6e656dbd68f1d44609d20ddecfbfd11a61e","0x6063c6136ef9bde857db688c03cb6e656dbd68f1d44609d20ddecfbfd11a61e"]},"nonInclusion":{"roots":["0x2d2780a34cc89bfa4e3b5b4014a1b01015f7fe946e54ab53cc8abaad4f3a98bc","0x2d2780a34cc89bfa4e3b5b4014a1b01015f7fe946e54ab53cc8abaad4f3a98bc"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x282","0x282"],"leafLowerRangeValues":["0x283","0x283"],"leafHigherRangeValues":["0x285","0x285"],"leafIndices":[5,5]}} +0;{"inclusion":{"roots":["0x1d0fe9417a491a750b5e7e883f80456096b32f0ec78d6133f3b3baf5fa659ad9","0x1d0fe9417a491a750b5e7e883f80456096b32f0ec78d6133f3b3baf5fa659ad9"],"inPathIndices":[2,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x6063c6136ef9bde857db688c03cb6e656dbd68f1d44609d20ddecfbfd11a61e","0x6063c6136ef9bde857db688c03cb6e656dbd68f1d44609d20ddecfbfd11a61e"]},"nonInclusion":{"roots":["0x2496b8f59bdc1e2ede1ba87a50ea713ac6d3f9d3e913d850ab69982366b416f6","0x2496b8f59bdc1e2ede1ba87a50ea713ac6d3f9d3e913d850ab69982366b416f6"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x248","0x248"],"leafLowerRangeValues":["0x245","0x245"],"leafHigherRangeValues":["0x247","0x247"],"leafIndices":[6,6]}} +0;{"inclusion":{"roots":["0x1d0fe9417a491a750b5e7e883f80456096b32f0ec78d6133f3b3baf5fa659ad9","0x1d0fe9417a491a750b5e7e883f80456096b32f0ec78d6133f3b3baf5fa659ad9"],"inPathIndices":[2,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x6063c6136ef9bde857db688c03cb6e656dbd68f1d44609d20ddecfbfd11a61e","0x6063c6136ef9bde857db688c03cb6e656dbd68f1d44609d20ddecfbfd11a61e"]},"nonInclusion":{"roots":["0x18d565e815f8775e9e1846a48971314fb165d52ee2e73024e43370016bc96a2","0x18d565e815f8775e9e1846a48971314fb165d52ee2e73024e43370016bc96a2"],"inPathIndices":[999,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x1f8","0x1f8"],"leafLowerRangeValues":["0x1f7","0x1f7"],"leafHigherRangeValues":["0x1f9","0x1f9"],"leafIndices":[0,0]}} +0;{"inclusion":{"roots":["0x1d0fe9417a491a750b5e7e883f80456096b32f0ec78d6133f3b3baf5fa659ad9","0x1d0fe9417a491a750b5e7e883f80456096b32f0ec78d6133f3b3baf5fa659ad9"],"inPathIndices":[2,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x6063c6136ef9bde857db688c03cb6e656dbd68f1d44609d20ddecfbfd11a61e","0x6063c6136ef9bde857db688c03cb6e656dbd68f1d44609d20ddecfbfd11a61e"]},"nonInclusion":{"roots":["0x17b41ec3ecf398bcaab995862536abc535f780b62b9cb027fce1f0885b2c00fa","0x17b41ec3ecf398bcaab995862536abc535f780b62b9cb027fce1f0885b2c00fa"],"inPathIndices":[0,0],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x190","0x190"],"leafLowerRangeValues":["0x18f","0x18f"],"leafHigherRangeValues":["0x191","0x191"],"leafIndices":[2,2]}} +0;{"inclusion":{"roots":["0x3e7","0x875e9b053716879fbd064440c19d4e35336cbb335c00380617361a16b069df2"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x250bacdab0b430aa69764bad1132856bd456ae8f212a4efa843d66651e230589","0x250bacdab0b430aa69764bad1132856bd456ae8f212a4efa843d66651e230589"]},"nonInclusion":{"roots":["0x2f440bd39ecc691a5f008dfa5afcf8044a61c1c9a9a0357335fc6da0afe9294e","0x2f440bd39ecc691a5f008dfa5afcf8044a61c1c9a9a0357335fc6da0afe9294e"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x149","0x149"],"leafLowerRangeValues":["0x148","0x148"],"leafHigherRangeValues":["0x14a","0x14a"],"leafIndices":[3,3]}} +0;{"inclusion":{"roots":["0x3e7","0x875e9b053716879fbd064440c19d4e35336cbb335c00380617361a16b069df2"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x250bacdab0b430aa69764bad1132856bd456ae8f212a4efa843d66651e230589","0x250bacdab0b430aa69764bad1132856bd456ae8f212a4efa843d66651e230589"]},"nonInclusion":{"roots":["0x3e7","0xd937fe1563ef3b8e6fbef399f4b3db8c404a197adf5c22c5b79b8b87e85423f"],"inPathIndices":[2,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x333","0x333"],"leafLowerRangeValues":["0x332","0x332"],"leafHigherRangeValues":["0x334","0x334"],"leafIndices":[3,3]}} +0;{"inclusion":{"roots":["0x3e7","0x875e9b053716879fbd064440c19d4e35336cbb335c00380617361a16b069df2"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x250bacdab0b430aa69764bad1132856bd456ae8f212a4efa843d66651e230589","0x250bacdab0b430aa69764bad1132856bd456ae8f212a4efa843d66651e230589"]},"nonInclusion":{"roots":["0x2d2780a34cc89bfa4e3b5b4014a1b01015f7fe946e54ab53cc8abaad4f3a98bc","0x2d2780a34cc89bfa4e3b5b4014a1b01015f7fe946e54ab53cc8abaad4f3a98bc"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x282","0x282"],"leafLowerRangeValues":["0x283","0x283"],"leafHigherRangeValues":["0x285","0x285"],"leafIndices":[5,5]}} +0;{"inclusion":{"roots":["0x3e7","0x875e9b053716879fbd064440c19d4e35336cbb335c00380617361a16b069df2"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x250bacdab0b430aa69764bad1132856bd456ae8f212a4efa843d66651e230589","0x250bacdab0b430aa69764bad1132856bd456ae8f212a4efa843d66651e230589"]},"nonInclusion":{"roots":["0x2496b8f59bdc1e2ede1ba87a50ea713ac6d3f9d3e913d850ab69982366b416f6","0x2496b8f59bdc1e2ede1ba87a50ea713ac6d3f9d3e913d850ab69982366b416f6"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x248","0x248"],"leafLowerRangeValues":["0x245","0x245"],"leafHigherRangeValues":["0x247","0x247"],"leafIndices":[6,6]}} +0;{"inclusion":{"roots":["0x3e7","0x875e9b053716879fbd064440c19d4e35336cbb335c00380617361a16b069df2"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x250bacdab0b430aa69764bad1132856bd456ae8f212a4efa843d66651e230589","0x250bacdab0b430aa69764bad1132856bd456ae8f212a4efa843d66651e230589"]},"nonInclusion":{"roots":["0x18d565e815f8775e9e1846a48971314fb165d52ee2e73024e43370016bc96a2","0x18d565e815f8775e9e1846a48971314fb165d52ee2e73024e43370016bc96a2"],"inPathIndices":[999,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x1f8","0x1f8"],"leafLowerRangeValues":["0x1f7","0x1f7"],"leafHigherRangeValues":["0x1f9","0x1f9"],"leafIndices":[0,0]}} +0;{"inclusion":{"roots":["0x3e7","0x875e9b053716879fbd064440c19d4e35336cbb335c00380617361a16b069df2"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x250bacdab0b430aa69764bad1132856bd456ae8f212a4efa843d66651e230589","0x250bacdab0b430aa69764bad1132856bd456ae8f212a4efa843d66651e230589"]},"nonInclusion":{"roots":["0x17b41ec3ecf398bcaab995862536abc535f780b62b9cb027fce1f0885b2c00fa","0x17b41ec3ecf398bcaab995862536abc535f780b62b9cb027fce1f0885b2c00fa"],"inPathIndices":[0,0],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x190","0x190"],"leafLowerRangeValues":["0x18f","0x18f"],"leafHigherRangeValues":["0x191","0x191"],"leafIndices":[2,2]}} +0;{"inclusion":{"roots":["0x28398c825dc97794f21a96a546884692623a25d8d0e0cfa4e3801e2437441095","0x28398c825dc97794f21a96a546884692623a25d8d0e0cfa4e3801e2437441095"],"inPathIndices":[2,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x3e7","0x2178859857cb97e3617ef45fbe11e0232f8ab6afc9e2ccc6caf9f6990f79c50f"]},"nonInclusion":{"roots":["0x2f440bd39ecc691a5f008dfa5afcf8044a61c1c9a9a0357335fc6da0afe9294e","0x2f440bd39ecc691a5f008dfa5afcf8044a61c1c9a9a0357335fc6da0afe9294e"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x149","0x149"],"leafLowerRangeValues":["0x148","0x148"],"leafHigherRangeValues":["0x14a","0x14a"],"leafIndices":[3,3]}} +0;{"inclusion":{"roots":["0x28398c825dc97794f21a96a546884692623a25d8d0e0cfa4e3801e2437441095","0x28398c825dc97794f21a96a546884692623a25d8d0e0cfa4e3801e2437441095"],"inPathIndices":[2,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x3e7","0x2178859857cb97e3617ef45fbe11e0232f8ab6afc9e2ccc6caf9f6990f79c50f"]},"nonInclusion":{"roots":["0x3e7","0xd937fe1563ef3b8e6fbef399f4b3db8c404a197adf5c22c5b79b8b87e85423f"],"inPathIndices":[2,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x333","0x333"],"leafLowerRangeValues":["0x332","0x332"],"leafHigherRangeValues":["0x334","0x334"],"leafIndices":[3,3]}} +0;{"inclusion":{"roots":["0x28398c825dc97794f21a96a546884692623a25d8d0e0cfa4e3801e2437441095","0x28398c825dc97794f21a96a546884692623a25d8d0e0cfa4e3801e2437441095"],"inPathIndices":[2,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x3e7","0x2178859857cb97e3617ef45fbe11e0232f8ab6afc9e2ccc6caf9f6990f79c50f"]},"nonInclusion":{"roots":["0x2d2780a34cc89bfa4e3b5b4014a1b01015f7fe946e54ab53cc8abaad4f3a98bc","0x2d2780a34cc89bfa4e3b5b4014a1b01015f7fe946e54ab53cc8abaad4f3a98bc"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x282","0x282"],"leafLowerRangeValues":["0x283","0x283"],"leafHigherRangeValues":["0x285","0x285"],"leafIndices":[5,5]}} +0;{"inclusion":{"roots":["0x28398c825dc97794f21a96a546884692623a25d8d0e0cfa4e3801e2437441095","0x28398c825dc97794f21a96a546884692623a25d8d0e0cfa4e3801e2437441095"],"inPathIndices":[2,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x3e7","0x2178859857cb97e3617ef45fbe11e0232f8ab6afc9e2ccc6caf9f6990f79c50f"]},"nonInclusion":{"roots":["0x2496b8f59bdc1e2ede1ba87a50ea713ac6d3f9d3e913d850ab69982366b416f6","0x2496b8f59bdc1e2ede1ba87a50ea713ac6d3f9d3e913d850ab69982366b416f6"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x248","0x248"],"leafLowerRangeValues":["0x245","0x245"],"leafHigherRangeValues":["0x247","0x247"],"leafIndices":[6,6]}} +0;{"inclusion":{"roots":["0x28398c825dc97794f21a96a546884692623a25d8d0e0cfa4e3801e2437441095","0x28398c825dc97794f21a96a546884692623a25d8d0e0cfa4e3801e2437441095"],"inPathIndices":[2,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x3e7","0x2178859857cb97e3617ef45fbe11e0232f8ab6afc9e2ccc6caf9f6990f79c50f"]},"nonInclusion":{"roots":["0x18d565e815f8775e9e1846a48971314fb165d52ee2e73024e43370016bc96a2","0x18d565e815f8775e9e1846a48971314fb165d52ee2e73024e43370016bc96a2"],"inPathIndices":[999,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x1f8","0x1f8"],"leafLowerRangeValues":["0x1f7","0x1f7"],"leafHigherRangeValues":["0x1f9","0x1f9"],"leafIndices":[0,0]}} +0;{"inclusion":{"roots":["0x28398c825dc97794f21a96a546884692623a25d8d0e0cfa4e3801e2437441095","0x28398c825dc97794f21a96a546884692623a25d8d0e0cfa4e3801e2437441095"],"inPathIndices":[2,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x3e7","0x2178859857cb97e3617ef45fbe11e0232f8ab6afc9e2ccc6caf9f6990f79c50f"]},"nonInclusion":{"roots":["0x17b41ec3ecf398bcaab995862536abc535f780b62b9cb027fce1f0885b2c00fa","0x17b41ec3ecf398bcaab995862536abc535f780b62b9cb027fce1f0885b2c00fa"],"inPathIndices":[0,0],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x190","0x190"],"leafLowerRangeValues":["0x18f","0x18f"],"leafHigherRangeValues":["0x191","0x191"],"leafIndices":[2,2]}} +0;{"inclusion":{"roots":["0x47651ed1142765fc503e0627bde7b40682338d63108b7e8f9e73459aafbb991","0x47651ed1142765fc503e0627bde7b40682338d63108b7e8f9e73459aafbb991"],"inPathIndices":[999,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x24905f099f6f27fee1301a4c95a37629ee27cec5996c350479c72d6f3e1f53d7","0x24905f099f6f27fee1301a4c95a37629ee27cec5996c350479c72d6f3e1f53d7"]},"nonInclusion":{"roots":["0x2f440bd39ecc691a5f008dfa5afcf8044a61c1c9a9a0357335fc6da0afe9294e","0x2f440bd39ecc691a5f008dfa5afcf8044a61c1c9a9a0357335fc6da0afe9294e"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x149","0x149"],"leafLowerRangeValues":["0x148","0x148"],"leafHigherRangeValues":["0x14a","0x14a"],"leafIndices":[3,3]}} +0;{"inclusion":{"roots":["0x47651ed1142765fc503e0627bde7b40682338d63108b7e8f9e73459aafbb991","0x47651ed1142765fc503e0627bde7b40682338d63108b7e8f9e73459aafbb991"],"inPathIndices":[999,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x24905f099f6f27fee1301a4c95a37629ee27cec5996c350479c72d6f3e1f53d7","0x24905f099f6f27fee1301a4c95a37629ee27cec5996c350479c72d6f3e1f53d7"]},"nonInclusion":{"roots":["0x3e7","0xd937fe1563ef3b8e6fbef399f4b3db8c404a197adf5c22c5b79b8b87e85423f"],"inPathIndices":[2,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x333","0x333"],"leafLowerRangeValues":["0x332","0x332"],"leafHigherRangeValues":["0x334","0x334"],"leafIndices":[3,3]}} +0;{"inclusion":{"roots":["0x47651ed1142765fc503e0627bde7b40682338d63108b7e8f9e73459aafbb991","0x47651ed1142765fc503e0627bde7b40682338d63108b7e8f9e73459aafbb991"],"inPathIndices":[999,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x24905f099f6f27fee1301a4c95a37629ee27cec5996c350479c72d6f3e1f53d7","0x24905f099f6f27fee1301a4c95a37629ee27cec5996c350479c72d6f3e1f53d7"]},"nonInclusion":{"roots":["0x2d2780a34cc89bfa4e3b5b4014a1b01015f7fe946e54ab53cc8abaad4f3a98bc","0x2d2780a34cc89bfa4e3b5b4014a1b01015f7fe946e54ab53cc8abaad4f3a98bc"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x282","0x282"],"leafLowerRangeValues":["0x283","0x283"],"leafHigherRangeValues":["0x285","0x285"],"leafIndices":[5,5]}} +0;{"inclusion":{"roots":["0x47651ed1142765fc503e0627bde7b40682338d63108b7e8f9e73459aafbb991","0x47651ed1142765fc503e0627bde7b40682338d63108b7e8f9e73459aafbb991"],"inPathIndices":[999,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x24905f099f6f27fee1301a4c95a37629ee27cec5996c350479c72d6f3e1f53d7","0x24905f099f6f27fee1301a4c95a37629ee27cec5996c350479c72d6f3e1f53d7"]},"nonInclusion":{"roots":["0x2496b8f59bdc1e2ede1ba87a50ea713ac6d3f9d3e913d850ab69982366b416f6","0x2496b8f59bdc1e2ede1ba87a50ea713ac6d3f9d3e913d850ab69982366b416f6"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x248","0x248"],"leafLowerRangeValues":["0x245","0x245"],"leafHigherRangeValues":["0x247","0x247"],"leafIndices":[6,6]}} +0;{"inclusion":{"roots":["0x47651ed1142765fc503e0627bde7b40682338d63108b7e8f9e73459aafbb991","0x47651ed1142765fc503e0627bde7b40682338d63108b7e8f9e73459aafbb991"],"inPathIndices":[999,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x24905f099f6f27fee1301a4c95a37629ee27cec5996c350479c72d6f3e1f53d7","0x24905f099f6f27fee1301a4c95a37629ee27cec5996c350479c72d6f3e1f53d7"]},"nonInclusion":{"roots":["0x18d565e815f8775e9e1846a48971314fb165d52ee2e73024e43370016bc96a2","0x18d565e815f8775e9e1846a48971314fb165d52ee2e73024e43370016bc96a2"],"inPathIndices":[999,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x1f8","0x1f8"],"leafLowerRangeValues":["0x1f7","0x1f7"],"leafHigherRangeValues":["0x1f9","0x1f9"],"leafIndices":[0,0]}} +0;{"inclusion":{"roots":["0x47651ed1142765fc503e0627bde7b40682338d63108b7e8f9e73459aafbb991","0x47651ed1142765fc503e0627bde7b40682338d63108b7e8f9e73459aafbb991"],"inPathIndices":[999,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x24905f099f6f27fee1301a4c95a37629ee27cec5996c350479c72d6f3e1f53d7","0x24905f099f6f27fee1301a4c95a37629ee27cec5996c350479c72d6f3e1f53d7"]},"nonInclusion":{"roots":["0x17b41ec3ecf398bcaab995862536abc535f780b62b9cb027fce1f0885b2c00fa","0x17b41ec3ecf398bcaab995862536abc535f780b62b9cb027fce1f0885b2c00fa"],"inPathIndices":[0,0],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x190","0x190"],"leafLowerRangeValues":["0x18f","0x18f"],"leafHigherRangeValues":["0x191","0x191"],"leafIndices":[2,2]}} +0;{"inclusion":{"roots":["0xde04036e245b030d985d5d5596d69bb6793e7171410f0620d08a091d4f77fc4","0xde04036e245b030d985d5d5596d69bb6793e7171410f0620d08a091d4f77fc4"],"inPathIndices":[2,2],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x188c00485fea0e47ada954e6981b2e083200f6ad57ca49a0d15f2de2fc7e145f","0x188c00485fea0e47ada954e6981b2e083200f6ad57ca49a0d15f2de2fc7e145f"]},"nonInclusion":{"roots":["0x2f440bd39ecc691a5f008dfa5afcf8044a61c1c9a9a0357335fc6da0afe9294e","0x2f440bd39ecc691a5f008dfa5afcf8044a61c1c9a9a0357335fc6da0afe9294e"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x149","0x149"],"leafLowerRangeValues":["0x148","0x148"],"leafHigherRangeValues":["0x14a","0x14a"],"leafIndices":[3,3]}} +0;{"inclusion":{"roots":["0xde04036e245b030d985d5d5596d69bb6793e7171410f0620d08a091d4f77fc4","0xde04036e245b030d985d5d5596d69bb6793e7171410f0620d08a091d4f77fc4"],"inPathIndices":[2,2],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x188c00485fea0e47ada954e6981b2e083200f6ad57ca49a0d15f2de2fc7e145f","0x188c00485fea0e47ada954e6981b2e083200f6ad57ca49a0d15f2de2fc7e145f"]},"nonInclusion":{"roots":["0x3e7","0xd937fe1563ef3b8e6fbef399f4b3db8c404a197adf5c22c5b79b8b87e85423f"],"inPathIndices":[2,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x333","0x333"],"leafLowerRangeValues":["0x332","0x332"],"leafHigherRangeValues":["0x334","0x334"],"leafIndices":[3,3]}} +0;{"inclusion":{"roots":["0xde04036e245b030d985d5d5596d69bb6793e7171410f0620d08a091d4f77fc4","0xde04036e245b030d985d5d5596d69bb6793e7171410f0620d08a091d4f77fc4"],"inPathIndices":[2,2],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x188c00485fea0e47ada954e6981b2e083200f6ad57ca49a0d15f2de2fc7e145f","0x188c00485fea0e47ada954e6981b2e083200f6ad57ca49a0d15f2de2fc7e145f"]},"nonInclusion":{"roots":["0x2d2780a34cc89bfa4e3b5b4014a1b01015f7fe946e54ab53cc8abaad4f3a98bc","0x2d2780a34cc89bfa4e3b5b4014a1b01015f7fe946e54ab53cc8abaad4f3a98bc"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x282","0x282"],"leafLowerRangeValues":["0x283","0x283"],"leafHigherRangeValues":["0x285","0x285"],"leafIndices":[5,5]}} +0;{"inclusion":{"roots":["0xde04036e245b030d985d5d5596d69bb6793e7171410f0620d08a091d4f77fc4","0xde04036e245b030d985d5d5596d69bb6793e7171410f0620d08a091d4f77fc4"],"inPathIndices":[2,2],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x188c00485fea0e47ada954e6981b2e083200f6ad57ca49a0d15f2de2fc7e145f","0x188c00485fea0e47ada954e6981b2e083200f6ad57ca49a0d15f2de2fc7e145f"]},"nonInclusion":{"roots":["0x2496b8f59bdc1e2ede1ba87a50ea713ac6d3f9d3e913d850ab69982366b416f6","0x2496b8f59bdc1e2ede1ba87a50ea713ac6d3f9d3e913d850ab69982366b416f6"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x248","0x248"],"leafLowerRangeValues":["0x245","0x245"],"leafHigherRangeValues":["0x247","0x247"],"leafIndices":[6,6]}} +0;{"inclusion":{"roots":["0xde04036e245b030d985d5d5596d69bb6793e7171410f0620d08a091d4f77fc4","0xde04036e245b030d985d5d5596d69bb6793e7171410f0620d08a091d4f77fc4"],"inPathIndices":[2,2],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x188c00485fea0e47ada954e6981b2e083200f6ad57ca49a0d15f2de2fc7e145f","0x188c00485fea0e47ada954e6981b2e083200f6ad57ca49a0d15f2de2fc7e145f"]},"nonInclusion":{"roots":["0x18d565e815f8775e9e1846a48971314fb165d52ee2e73024e43370016bc96a2","0x18d565e815f8775e9e1846a48971314fb165d52ee2e73024e43370016bc96a2"],"inPathIndices":[999,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x1f8","0x1f8"],"leafLowerRangeValues":["0x1f7","0x1f7"],"leafHigherRangeValues":["0x1f9","0x1f9"],"leafIndices":[0,0]}} +0;{"inclusion":{"roots":["0xde04036e245b030d985d5d5596d69bb6793e7171410f0620d08a091d4f77fc4","0xde04036e245b030d985d5d5596d69bb6793e7171410f0620d08a091d4f77fc4"],"inPathIndices":[2,2],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x188c00485fea0e47ada954e6981b2e083200f6ad57ca49a0d15f2de2fc7e145f","0x188c00485fea0e47ada954e6981b2e083200f6ad57ca49a0d15f2de2fc7e145f"]},"nonInclusion":{"roots":["0x17b41ec3ecf398bcaab995862536abc535f780b62b9cb027fce1f0885b2c00fa","0x17b41ec3ecf398bcaab995862536abc535f780b62b9cb027fce1f0885b2c00fa"],"inPathIndices":[0,0],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x190","0x190"],"leafLowerRangeValues":["0x18f","0x18f"],"leafHigherRangeValues":["0x191","0x191"],"leafIndices":[2,2]}} +1;{"inclusion":{"roots":["0x5a5f7dba85a5cf6e87fa07e4dc94028b16ea30dc263eb27237b1bb2ba430cc9"],"inPathIndices":[2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x23ea3051d2348ef6588089872a08c9c2c053ffec1f9c91ffa2461e497a4d4d25"]},"nonInclusion":{"roots":["0x12bb498dd9cb8145776d7a3c96064d30905595a4caa7edaaa519e21422ded493"],"inPathIndices":[2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x2f9"],"leafLowerRangeValues":["0x2f8"],"leafHigherRangeValues":["0x2fa"],"leafIndices":[6]}} +0;{"inclusion":{"roots":["0x5a5f7dba85a5cf6e87fa07e4dc94028b16ea30dc263eb27237b1bb2ba430cc9"],"inPathIndices":[2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x23ea3051d2348ef6588089872a08c9c2c053ffec1f9c91ffa2461e497a4d4d25"]},"nonInclusion":{"roots":["0x3e7"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x12b"],"leafLowerRangeValues":["0x12a"],"leafHigherRangeValues":["0x12c"],"leafIndices":[13]}} +0;{"inclusion":{"roots":["0x5a5f7dba85a5cf6e87fa07e4dc94028b16ea30dc263eb27237b1bb2ba430cc9"],"inPathIndices":[2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x23ea3051d2348ef6588089872a08c9c2c053ffec1f9c91ffa2461e497a4d4d25"]},"nonInclusion":{"roots":["0xf7a9c9f7d58b1971d55342b3d8e2725d73fd8b96730c441afe83e7a8c13f26f"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x269"],"leafLowerRangeValues":["0x26a"],"leafHigherRangeValues":["0x26c"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x5a5f7dba85a5cf6e87fa07e4dc94028b16ea30dc263eb27237b1bb2ba430cc9"],"inPathIndices":[2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x23ea3051d2348ef6588089872a08c9c2c053ffec1f9c91ffa2461e497a4d4d25"]},"nonInclusion":{"roots":["0x4d5e2548398124285fd6fc4447b2a06c84b4ffc206823fbaf7b887d9341d3bf"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x20d"],"leafLowerRangeValues":["0x20a"],"leafHigherRangeValues":["0x20c"],"leafIndices":[1]}} +0;{"inclusion":{"roots":["0x5a5f7dba85a5cf6e87fa07e4dc94028b16ea30dc263eb27237b1bb2ba430cc9"],"inPathIndices":[2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x23ea3051d2348ef6588089872a08c9c2c053ffec1f9c91ffa2461e497a4d4d25"]},"nonInclusion":{"roots":["0x2e45aa2cfdb027bfd658b038c323aa1daace92ae96d326b855de4c7515056064"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x200"],"leafLowerRangeValues":["0x1ff"],"leafHigherRangeValues":["0x201"],"leafIndices":[2]}} +0;{"inclusion":{"roots":["0x5a5f7dba85a5cf6e87fa07e4dc94028b16ea30dc263eb27237b1bb2ba430cc9"],"inPathIndices":[2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x23ea3051d2348ef6588089872a08c9c2c053ffec1f9c91ffa2461e497a4d4d25"]},"nonInclusion":{"roots":["0x2ec07f678cf16a7ca22c852cd725aae47f503e5e9b6aaedabfc47dc7f64340d0"],"inPathIndices":[2],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x340"],"leafLowerRangeValues":["0x33f"],"leafHigherRangeValues":["0x341"],"leafIndices":[3]}} +0;{"inclusion":{"roots":["0x3e7"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x18178bce15cc56351e00321d5bfd3ed7aacc51bfd37b003ecafe90ab31d24877"]},"nonInclusion":{"roots":["0x12bb498dd9cb8145776d7a3c96064d30905595a4caa7edaaa519e21422ded493"],"inPathIndices":[2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x2f9"],"leafLowerRangeValues":["0x2f8"],"leafHigherRangeValues":["0x2fa"],"leafIndices":[6]}} +0;{"inclusion":{"roots":["0x3e7"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x18178bce15cc56351e00321d5bfd3ed7aacc51bfd37b003ecafe90ab31d24877"]},"nonInclusion":{"roots":["0x3e7"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x12b"],"leafLowerRangeValues":["0x12a"],"leafHigherRangeValues":["0x12c"],"leafIndices":[13]}} +0;{"inclusion":{"roots":["0x3e7"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x18178bce15cc56351e00321d5bfd3ed7aacc51bfd37b003ecafe90ab31d24877"]},"nonInclusion":{"roots":["0xf7a9c9f7d58b1971d55342b3d8e2725d73fd8b96730c441afe83e7a8c13f26f"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x269"],"leafLowerRangeValues":["0x26a"],"leafHigherRangeValues":["0x26c"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x3e7"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x18178bce15cc56351e00321d5bfd3ed7aacc51bfd37b003ecafe90ab31d24877"]},"nonInclusion":{"roots":["0x4d5e2548398124285fd6fc4447b2a06c84b4ffc206823fbaf7b887d9341d3bf"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x20d"],"leafLowerRangeValues":["0x20a"],"leafHigherRangeValues":["0x20c"],"leafIndices":[1]}} +0;{"inclusion":{"roots":["0x3e7"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x18178bce15cc56351e00321d5bfd3ed7aacc51bfd37b003ecafe90ab31d24877"]},"nonInclusion":{"roots":["0x2e45aa2cfdb027bfd658b038c323aa1daace92ae96d326b855de4c7515056064"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x200"],"leafLowerRangeValues":["0x1ff"],"leafHigherRangeValues":["0x201"],"leafIndices":[2]}} +0;{"inclusion":{"roots":["0x3e7"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x18178bce15cc56351e00321d5bfd3ed7aacc51bfd37b003ecafe90ab31d24877"]},"nonInclusion":{"roots":["0x2ec07f678cf16a7ca22c852cd725aae47f503e5e9b6aaedabfc47dc7f64340d0"],"inPathIndices":[2],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x340"],"leafLowerRangeValues":["0x33f"],"leafHigherRangeValues":["0x341"],"leafIndices":[3]}} +0;{"inclusion":{"roots":["0x1e2180a2fcf532c688870917bb2e1d2fa873807a34bb733817dc141439c66d47"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x3e7"]},"nonInclusion":{"roots":["0x12bb498dd9cb8145776d7a3c96064d30905595a4caa7edaaa519e21422ded493"],"inPathIndices":[2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x2f9"],"leafLowerRangeValues":["0x2f8"],"leafHigherRangeValues":["0x2fa"],"leafIndices":[6]}} +0;{"inclusion":{"roots":["0x1e2180a2fcf532c688870917bb2e1d2fa873807a34bb733817dc141439c66d47"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x3e7"]},"nonInclusion":{"roots":["0x3e7"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x12b"],"leafLowerRangeValues":["0x12a"],"leafHigherRangeValues":["0x12c"],"leafIndices":[13]}} +0;{"inclusion":{"roots":["0x1e2180a2fcf532c688870917bb2e1d2fa873807a34bb733817dc141439c66d47"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x3e7"]},"nonInclusion":{"roots":["0xf7a9c9f7d58b1971d55342b3d8e2725d73fd8b96730c441afe83e7a8c13f26f"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x269"],"leafLowerRangeValues":["0x26a"],"leafHigherRangeValues":["0x26c"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x1e2180a2fcf532c688870917bb2e1d2fa873807a34bb733817dc141439c66d47"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x3e7"]},"nonInclusion":{"roots":["0x4d5e2548398124285fd6fc4447b2a06c84b4ffc206823fbaf7b887d9341d3bf"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x20d"],"leafLowerRangeValues":["0x20a"],"leafHigherRangeValues":["0x20c"],"leafIndices":[1]}} +0;{"inclusion":{"roots":["0x1e2180a2fcf532c688870917bb2e1d2fa873807a34bb733817dc141439c66d47"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x3e7"]},"nonInclusion":{"roots":["0x2e45aa2cfdb027bfd658b038c323aa1daace92ae96d326b855de4c7515056064"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x200"],"leafLowerRangeValues":["0x1ff"],"leafHigherRangeValues":["0x201"],"leafIndices":[2]}} +0;{"inclusion":{"roots":["0x1e2180a2fcf532c688870917bb2e1d2fa873807a34bb733817dc141439c66d47"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x3e7"]},"nonInclusion":{"roots":["0x2ec07f678cf16a7ca22c852cd725aae47f503e5e9b6aaedabfc47dc7f64340d0"],"inPathIndices":[2],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x340"],"leafLowerRangeValues":["0x33f"],"leafHigherRangeValues":["0x341"],"leafIndices":[3]}} +0;{"inclusion":{"roots":["0x141ecb92ee827e72c857fb6a0f11a0d1a25b170e5e2a60197f752c59744aa19d"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x2c04db42473a5961bd139f85033f0bcf57e26ffcf4e9e95b65f3020b5b2e9b3f"]},"nonInclusion":{"roots":["0x12bb498dd9cb8145776d7a3c96064d30905595a4caa7edaaa519e21422ded493"],"inPathIndices":[2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x2f9"],"leafLowerRangeValues":["0x2f8"],"leafHigherRangeValues":["0x2fa"],"leafIndices":[6]}} +0;{"inclusion":{"roots":["0x141ecb92ee827e72c857fb6a0f11a0d1a25b170e5e2a60197f752c59744aa19d"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x2c04db42473a5961bd139f85033f0bcf57e26ffcf4e9e95b65f3020b5b2e9b3f"]},"nonInclusion":{"roots":["0x3e7"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x12b"],"leafLowerRangeValues":["0x12a"],"leafHigherRangeValues":["0x12c"],"leafIndices":[13]}} +0;{"inclusion":{"roots":["0x141ecb92ee827e72c857fb6a0f11a0d1a25b170e5e2a60197f752c59744aa19d"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x2c04db42473a5961bd139f85033f0bcf57e26ffcf4e9e95b65f3020b5b2e9b3f"]},"nonInclusion":{"roots":["0xf7a9c9f7d58b1971d55342b3d8e2725d73fd8b96730c441afe83e7a8c13f26f"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x269"],"leafLowerRangeValues":["0x26a"],"leafHigherRangeValues":["0x26c"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x141ecb92ee827e72c857fb6a0f11a0d1a25b170e5e2a60197f752c59744aa19d"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x2c04db42473a5961bd139f85033f0bcf57e26ffcf4e9e95b65f3020b5b2e9b3f"]},"nonInclusion":{"roots":["0x4d5e2548398124285fd6fc4447b2a06c84b4ffc206823fbaf7b887d9341d3bf"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x20d"],"leafLowerRangeValues":["0x20a"],"leafHigherRangeValues":["0x20c"],"leafIndices":[1]}} +0;{"inclusion":{"roots":["0x141ecb92ee827e72c857fb6a0f11a0d1a25b170e5e2a60197f752c59744aa19d"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x2c04db42473a5961bd139f85033f0bcf57e26ffcf4e9e95b65f3020b5b2e9b3f"]},"nonInclusion":{"roots":["0x2e45aa2cfdb027bfd658b038c323aa1daace92ae96d326b855de4c7515056064"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x200"],"leafLowerRangeValues":["0x1ff"],"leafHigherRangeValues":["0x201"],"leafIndices":[2]}} +0;{"inclusion":{"roots":["0x141ecb92ee827e72c857fb6a0f11a0d1a25b170e5e2a60197f752c59744aa19d"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x2c04db42473a5961bd139f85033f0bcf57e26ffcf4e9e95b65f3020b5b2e9b3f"]},"nonInclusion":{"roots":["0x2ec07f678cf16a7ca22c852cd725aae47f503e5e9b6aaedabfc47dc7f64340d0"],"inPathIndices":[2],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x340"],"leafLowerRangeValues":["0x33f"],"leafHigherRangeValues":["0x341"],"leafIndices":[3]}} +0;{"inclusion":{"roots":["0x294cdd1a2c155ae715ea43790572195c2e61e20e75abbd1beba8123b83d73c1d"],"inPathIndices":[1],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x122720d36599e7f419aaee9f9c1ba634584a40df097f2fc87245964428e07f7f"]},"nonInclusion":{"roots":["0x12bb498dd9cb8145776d7a3c96064d30905595a4caa7edaaa519e21422ded493"],"inPathIndices":[2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x2f9"],"leafLowerRangeValues":["0x2f8"],"leafHigherRangeValues":["0x2fa"],"leafIndices":[6]}} +0;{"inclusion":{"roots":["0x294cdd1a2c155ae715ea43790572195c2e61e20e75abbd1beba8123b83d73c1d"],"inPathIndices":[1],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x122720d36599e7f419aaee9f9c1ba634584a40df097f2fc87245964428e07f7f"]},"nonInclusion":{"roots":["0x3e7"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x12b"],"leafLowerRangeValues":["0x12a"],"leafHigherRangeValues":["0x12c"],"leafIndices":[13]}} +0;{"inclusion":{"roots":["0x294cdd1a2c155ae715ea43790572195c2e61e20e75abbd1beba8123b83d73c1d"],"inPathIndices":[1],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x122720d36599e7f419aaee9f9c1ba634584a40df097f2fc87245964428e07f7f"]},"nonInclusion":{"roots":["0xf7a9c9f7d58b1971d55342b3d8e2725d73fd8b96730c441afe83e7a8c13f26f"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x269"],"leafLowerRangeValues":["0x26a"],"leafHigherRangeValues":["0x26c"],"leafIndices":[0]}} +0;{"inclusion":{"roots":["0x294cdd1a2c155ae715ea43790572195c2e61e20e75abbd1beba8123b83d73c1d"],"inPathIndices":[1],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x122720d36599e7f419aaee9f9c1ba634584a40df097f2fc87245964428e07f7f"]},"nonInclusion":{"roots":["0x4d5e2548398124285fd6fc4447b2a06c84b4ffc206823fbaf7b887d9341d3bf"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x20d"],"leafLowerRangeValues":["0x20a"],"leafHigherRangeValues":["0x20c"],"leafIndices":[1]}} +0;{"inclusion":{"roots":["0x294cdd1a2c155ae715ea43790572195c2e61e20e75abbd1beba8123b83d73c1d"],"inPathIndices":[1],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x122720d36599e7f419aaee9f9c1ba634584a40df097f2fc87245964428e07f7f"]},"nonInclusion":{"roots":["0x2e45aa2cfdb027bfd658b038c323aa1daace92ae96d326b855de4c7515056064"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x200"],"leafLowerRangeValues":["0x1ff"],"leafHigherRangeValues":["0x201"],"leafIndices":[2]}} +0;{"inclusion":{"roots":["0x294cdd1a2c155ae715ea43790572195c2e61e20e75abbd1beba8123b83d73c1d"],"inPathIndices":[1],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x122720d36599e7f419aaee9f9c1ba634584a40df097f2fc87245964428e07f7f"]},"nonInclusion":{"roots":["0x2ec07f678cf16a7ca22c852cd725aae47f503e5e9b6aaedabfc47dc7f64340d0"],"inPathIndices":[2],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x340"],"leafLowerRangeValues":["0x33f"],"leafHigherRangeValues":["0x341"],"leafIndices":[3]}} +1;{"inclusion":{"roots":["0x13eb96a26b7898e77ae1a6c9662fdd8b6569bc113142d234d127d63bf17b5fa0","0x13eb96a26b7898e77ae1a6c9662fdd8b6569bc113142d234d127d63bf17b5fa0"],"inPathIndices":[2,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0xc6ba085d22ba0d802e4c003000bacf22316750a15904bb8c1a89dbf07ade990","0xc6ba085d22ba0d802e4c003000bacf22316750a15904bb8c1a89dbf07ade990"]},"nonInclusion":{"roots":["0x28ba2839b3c26c73d45de960980a971814fcc52a3ec2c2aaa863e28859ce5b38","0x28ba2839b3c26c73d45de960980a971814fcc52a3ec2c2aaa863e28859ce5b38"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x238","0x238"],"leafLowerRangeValues":["0x237","0x237"],"leafHigherRangeValues":["0x239","0x239"],"leafIndices":[11,11]}} +0;{"inclusion":{"roots":["0x13eb96a26b7898e77ae1a6c9662fdd8b6569bc113142d234d127d63bf17b5fa0","0x13eb96a26b7898e77ae1a6c9662fdd8b6569bc113142d234d127d63bf17b5fa0"],"inPathIndices":[2,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0xc6ba085d22ba0d802e4c003000bacf22316750a15904bb8c1a89dbf07ade990","0xc6ba085d22ba0d802e4c003000bacf22316750a15904bb8c1a89dbf07ade990"]},"nonInclusion":{"roots":["0x3e7","0x245257a111e68c7a1b8765a4204817c2d5fc42bbc20b00afb2d20dac720ef4d2"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x152","0x152"],"leafLowerRangeValues":["0x151","0x151"],"leafHigherRangeValues":["0x153","0x153"],"leafIndices":[13,13]}} +0;{"inclusion":{"roots":["0x13eb96a26b7898e77ae1a6c9662fdd8b6569bc113142d234d127d63bf17b5fa0","0x13eb96a26b7898e77ae1a6c9662fdd8b6569bc113142d234d127d63bf17b5fa0"],"inPathIndices":[2,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0xc6ba085d22ba0d802e4c003000bacf22316750a15904bb8c1a89dbf07ade990","0xc6ba085d22ba0d802e4c003000bacf22316750a15904bb8c1a89dbf07ade990"]},"nonInclusion":{"roots":["0x1eec7b6b58c747b4b3379d1292acf7f70682ea9351a9e809054eb95770910d84","0x1eec7b6b58c747b4b3379d1292acf7f70682ea9351a9e809054eb95770910d84"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x359","0x359"],"leafLowerRangeValues":["0x35a","0x35a"],"leafHigherRangeValues":["0x35c","0x35c"],"leafIndices":[13,13]}} +0;{"inclusion":{"roots":["0x13eb96a26b7898e77ae1a6c9662fdd8b6569bc113142d234d127d63bf17b5fa0","0x13eb96a26b7898e77ae1a6c9662fdd8b6569bc113142d234d127d63bf17b5fa0"],"inPathIndices":[2,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0xc6ba085d22ba0d802e4c003000bacf22316750a15904bb8c1a89dbf07ade990","0xc6ba085d22ba0d802e4c003000bacf22316750a15904bb8c1a89dbf07ade990"]},"nonInclusion":{"roots":["0x20fba3b67b52c693ccfc46e79b82aeb92127ac3a56a8d4938cc4d9d2f0476eb9","0x20fba3b67b52c693ccfc46e79b82aeb92127ac3a56a8d4938cc4d9d2f0476eb9"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x290","0x290"],"leafLowerRangeValues":["0x28d","0x28d"],"leafHigherRangeValues":["0x28f","0x28f"],"leafIndices":[10,10]}} +0;{"inclusion":{"roots":["0x13eb96a26b7898e77ae1a6c9662fdd8b6569bc113142d234d127d63bf17b5fa0","0x13eb96a26b7898e77ae1a6c9662fdd8b6569bc113142d234d127d63bf17b5fa0"],"inPathIndices":[2,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0xc6ba085d22ba0d802e4c003000bacf22316750a15904bb8c1a89dbf07ade990","0xc6ba085d22ba0d802e4c003000bacf22316750a15904bb8c1a89dbf07ade990"]},"nonInclusion":{"roots":["0x24242930b891e85ef82e3584c0a8082456ef046e5736ca06afe7b62a2166159d","0x24242930b891e85ef82e3584c0a8082456ef046e5736ca06afe7b62a2166159d"],"inPathIndices":[999,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0xd","0xd"],"leafLowerRangeValues":["0xc","0xc"],"leafHigherRangeValues":["0xe","0xe"],"leafIndices":[11,11]}} +0;{"inclusion":{"roots":["0x13eb96a26b7898e77ae1a6c9662fdd8b6569bc113142d234d127d63bf17b5fa0","0x13eb96a26b7898e77ae1a6c9662fdd8b6569bc113142d234d127d63bf17b5fa0"],"inPathIndices":[2,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0xc6ba085d22ba0d802e4c003000bacf22316750a15904bb8c1a89dbf07ade990","0xc6ba085d22ba0d802e4c003000bacf22316750a15904bb8c1a89dbf07ade990"]},"nonInclusion":{"roots":["0x1d6d686315e5121d2a05251f4eec85d07314318d888832982fce0cb17d52bdba","0x1d6d686315e5121d2a05251f4eec85d07314318d888832982fce0cb17d52bdba"],"inPathIndices":[3,3],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x2e6","0x2e6"],"leafLowerRangeValues":["0x2e5","0x2e5"],"leafHigherRangeValues":["0x2e7","0x2e7"],"leafIndices":[12,12]}} +0;{"inclusion":{"roots":["0x3e7","0xa9a1ba4aa0643cfac948aa13cdd9ccd45251a3571d08e4a6535323153d2a7f8"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x257d8832b01edcd8d754885c8096be93d9d0e97c25bde5eb2e4102b2cfff6184","0x257d8832b01edcd8d754885c8096be93d9d0e97c25bde5eb2e4102b2cfff6184"]},"nonInclusion":{"roots":["0x28ba2839b3c26c73d45de960980a971814fcc52a3ec2c2aaa863e28859ce5b38","0x28ba2839b3c26c73d45de960980a971814fcc52a3ec2c2aaa863e28859ce5b38"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x238","0x238"],"leafLowerRangeValues":["0x237","0x237"],"leafHigherRangeValues":["0x239","0x239"],"leafIndices":[11,11]}} +0;{"inclusion":{"roots":["0x3e7","0xa9a1ba4aa0643cfac948aa13cdd9ccd45251a3571d08e4a6535323153d2a7f8"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x257d8832b01edcd8d754885c8096be93d9d0e97c25bde5eb2e4102b2cfff6184","0x257d8832b01edcd8d754885c8096be93d9d0e97c25bde5eb2e4102b2cfff6184"]},"nonInclusion":{"roots":["0x3e7","0x245257a111e68c7a1b8765a4204817c2d5fc42bbc20b00afb2d20dac720ef4d2"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x152","0x152"],"leafLowerRangeValues":["0x151","0x151"],"leafHigherRangeValues":["0x153","0x153"],"leafIndices":[13,13]}} +0;{"inclusion":{"roots":["0x3e7","0xa9a1ba4aa0643cfac948aa13cdd9ccd45251a3571d08e4a6535323153d2a7f8"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x257d8832b01edcd8d754885c8096be93d9d0e97c25bde5eb2e4102b2cfff6184","0x257d8832b01edcd8d754885c8096be93d9d0e97c25bde5eb2e4102b2cfff6184"]},"nonInclusion":{"roots":["0x1eec7b6b58c747b4b3379d1292acf7f70682ea9351a9e809054eb95770910d84","0x1eec7b6b58c747b4b3379d1292acf7f70682ea9351a9e809054eb95770910d84"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x359","0x359"],"leafLowerRangeValues":["0x35a","0x35a"],"leafHigherRangeValues":["0x35c","0x35c"],"leafIndices":[13,13]}} +0;{"inclusion":{"roots":["0x3e7","0xa9a1ba4aa0643cfac948aa13cdd9ccd45251a3571d08e4a6535323153d2a7f8"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x257d8832b01edcd8d754885c8096be93d9d0e97c25bde5eb2e4102b2cfff6184","0x257d8832b01edcd8d754885c8096be93d9d0e97c25bde5eb2e4102b2cfff6184"]},"nonInclusion":{"roots":["0x20fba3b67b52c693ccfc46e79b82aeb92127ac3a56a8d4938cc4d9d2f0476eb9","0x20fba3b67b52c693ccfc46e79b82aeb92127ac3a56a8d4938cc4d9d2f0476eb9"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x290","0x290"],"leafLowerRangeValues":["0x28d","0x28d"],"leafHigherRangeValues":["0x28f","0x28f"],"leafIndices":[10,10]}} +0;{"inclusion":{"roots":["0x3e7","0xa9a1ba4aa0643cfac948aa13cdd9ccd45251a3571d08e4a6535323153d2a7f8"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x257d8832b01edcd8d754885c8096be93d9d0e97c25bde5eb2e4102b2cfff6184","0x257d8832b01edcd8d754885c8096be93d9d0e97c25bde5eb2e4102b2cfff6184"]},"nonInclusion":{"roots":["0x24242930b891e85ef82e3584c0a8082456ef046e5736ca06afe7b62a2166159d","0x24242930b891e85ef82e3584c0a8082456ef046e5736ca06afe7b62a2166159d"],"inPathIndices":[999,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0xd","0xd"],"leafLowerRangeValues":["0xc","0xc"],"leafHigherRangeValues":["0xe","0xe"],"leafIndices":[11,11]}} +0;{"inclusion":{"roots":["0x3e7","0xa9a1ba4aa0643cfac948aa13cdd9ccd45251a3571d08e4a6535323153d2a7f8"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x257d8832b01edcd8d754885c8096be93d9d0e97c25bde5eb2e4102b2cfff6184","0x257d8832b01edcd8d754885c8096be93d9d0e97c25bde5eb2e4102b2cfff6184"]},"nonInclusion":{"roots":["0x1d6d686315e5121d2a05251f4eec85d07314318d888832982fce0cb17d52bdba","0x1d6d686315e5121d2a05251f4eec85d07314318d888832982fce0cb17d52bdba"],"inPathIndices":[3,3],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x2e6","0x2e6"],"leafLowerRangeValues":["0x2e5","0x2e5"],"leafHigherRangeValues":["0x2e7","0x2e7"],"leafIndices":[12,12]}} +0;{"inclusion":{"roots":["0x28b205a7751e4aff2ca5931fc86ed4f3e01fdc2f3a9b26914dc2e68761114610","0x28b205a7751e4aff2ca5931fc86ed4f3e01fdc2f3a9b26914dc2e68761114610"],"inPathIndices":[3,3],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x3e7","0x179ed3521a9df993cf5302c6cbbce3ac05cc9ca24df531512274b068b282bdd6"]},"nonInclusion":{"roots":["0x28ba2839b3c26c73d45de960980a971814fcc52a3ec2c2aaa863e28859ce5b38","0x28ba2839b3c26c73d45de960980a971814fcc52a3ec2c2aaa863e28859ce5b38"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x238","0x238"],"leafLowerRangeValues":["0x237","0x237"],"leafHigherRangeValues":["0x239","0x239"],"leafIndices":[11,11]}} +0;{"inclusion":{"roots":["0x28b205a7751e4aff2ca5931fc86ed4f3e01fdc2f3a9b26914dc2e68761114610","0x28b205a7751e4aff2ca5931fc86ed4f3e01fdc2f3a9b26914dc2e68761114610"],"inPathIndices":[3,3],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x3e7","0x179ed3521a9df993cf5302c6cbbce3ac05cc9ca24df531512274b068b282bdd6"]},"nonInclusion":{"roots":["0x3e7","0x245257a111e68c7a1b8765a4204817c2d5fc42bbc20b00afb2d20dac720ef4d2"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x152","0x152"],"leafLowerRangeValues":["0x151","0x151"],"leafHigherRangeValues":["0x153","0x153"],"leafIndices":[13,13]}} +0;{"inclusion":{"roots":["0x28b205a7751e4aff2ca5931fc86ed4f3e01fdc2f3a9b26914dc2e68761114610","0x28b205a7751e4aff2ca5931fc86ed4f3e01fdc2f3a9b26914dc2e68761114610"],"inPathIndices":[3,3],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x3e7","0x179ed3521a9df993cf5302c6cbbce3ac05cc9ca24df531512274b068b282bdd6"]},"nonInclusion":{"roots":["0x1eec7b6b58c747b4b3379d1292acf7f70682ea9351a9e809054eb95770910d84","0x1eec7b6b58c747b4b3379d1292acf7f70682ea9351a9e809054eb95770910d84"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x359","0x359"],"leafLowerRangeValues":["0x35a","0x35a"],"leafHigherRangeValues":["0x35c","0x35c"],"leafIndices":[13,13]}} +0;{"inclusion":{"roots":["0x28b205a7751e4aff2ca5931fc86ed4f3e01fdc2f3a9b26914dc2e68761114610","0x28b205a7751e4aff2ca5931fc86ed4f3e01fdc2f3a9b26914dc2e68761114610"],"inPathIndices":[3,3],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x3e7","0x179ed3521a9df993cf5302c6cbbce3ac05cc9ca24df531512274b068b282bdd6"]},"nonInclusion":{"roots":["0x20fba3b67b52c693ccfc46e79b82aeb92127ac3a56a8d4938cc4d9d2f0476eb9","0x20fba3b67b52c693ccfc46e79b82aeb92127ac3a56a8d4938cc4d9d2f0476eb9"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x290","0x290"],"leafLowerRangeValues":["0x28d","0x28d"],"leafHigherRangeValues":["0x28f","0x28f"],"leafIndices":[10,10]}} +0;{"inclusion":{"roots":["0x28b205a7751e4aff2ca5931fc86ed4f3e01fdc2f3a9b26914dc2e68761114610","0x28b205a7751e4aff2ca5931fc86ed4f3e01fdc2f3a9b26914dc2e68761114610"],"inPathIndices":[3,3],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x3e7","0x179ed3521a9df993cf5302c6cbbce3ac05cc9ca24df531512274b068b282bdd6"]},"nonInclusion":{"roots":["0x24242930b891e85ef82e3584c0a8082456ef046e5736ca06afe7b62a2166159d","0x24242930b891e85ef82e3584c0a8082456ef046e5736ca06afe7b62a2166159d"],"inPathIndices":[999,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0xd","0xd"],"leafLowerRangeValues":["0xc","0xc"],"leafHigherRangeValues":["0xe","0xe"],"leafIndices":[11,11]}} +0;{"inclusion":{"roots":["0x28b205a7751e4aff2ca5931fc86ed4f3e01fdc2f3a9b26914dc2e68761114610","0x28b205a7751e4aff2ca5931fc86ed4f3e01fdc2f3a9b26914dc2e68761114610"],"inPathIndices":[3,3],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x3e7","0x179ed3521a9df993cf5302c6cbbce3ac05cc9ca24df531512274b068b282bdd6"]},"nonInclusion":{"roots":["0x1d6d686315e5121d2a05251f4eec85d07314318d888832982fce0cb17d52bdba","0x1d6d686315e5121d2a05251f4eec85d07314318d888832982fce0cb17d52bdba"],"inPathIndices":[3,3],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x2e6","0x2e6"],"leafLowerRangeValues":["0x2e5","0x2e5"],"leafHigherRangeValues":["0x2e7","0x2e7"],"leafIndices":[12,12]}} +0;{"inclusion":{"roots":["0x28c520896efb6afb95d47dc70ec251e2cbfa4fd9fe682ca297901e6b9cf4a2d5","0x28c520896efb6afb95d47dc70ec251e2cbfa4fd9fe682ca297901e6b9cf4a2d5"],"inPathIndices":[999,3],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0xd122087b1cb8b2dfb7856bc14e0d1dd3a47c8a440034a3d92f24d67a7a5ca8a","0xd122087b1cb8b2dfb7856bc14e0d1dd3a47c8a440034a3d92f24d67a7a5ca8a"]},"nonInclusion":{"roots":["0x28ba2839b3c26c73d45de960980a971814fcc52a3ec2c2aaa863e28859ce5b38","0x28ba2839b3c26c73d45de960980a971814fcc52a3ec2c2aaa863e28859ce5b38"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x238","0x238"],"leafLowerRangeValues":["0x237","0x237"],"leafHigherRangeValues":["0x239","0x239"],"leafIndices":[11,11]}} +0;{"inclusion":{"roots":["0x28c520896efb6afb95d47dc70ec251e2cbfa4fd9fe682ca297901e6b9cf4a2d5","0x28c520896efb6afb95d47dc70ec251e2cbfa4fd9fe682ca297901e6b9cf4a2d5"],"inPathIndices":[999,3],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0xd122087b1cb8b2dfb7856bc14e0d1dd3a47c8a440034a3d92f24d67a7a5ca8a","0xd122087b1cb8b2dfb7856bc14e0d1dd3a47c8a440034a3d92f24d67a7a5ca8a"]},"nonInclusion":{"roots":["0x3e7","0x245257a111e68c7a1b8765a4204817c2d5fc42bbc20b00afb2d20dac720ef4d2"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x152","0x152"],"leafLowerRangeValues":["0x151","0x151"],"leafHigherRangeValues":["0x153","0x153"],"leafIndices":[13,13]}} +0;{"inclusion":{"roots":["0x28c520896efb6afb95d47dc70ec251e2cbfa4fd9fe682ca297901e6b9cf4a2d5","0x28c520896efb6afb95d47dc70ec251e2cbfa4fd9fe682ca297901e6b9cf4a2d5"],"inPathIndices":[999,3],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0xd122087b1cb8b2dfb7856bc14e0d1dd3a47c8a440034a3d92f24d67a7a5ca8a","0xd122087b1cb8b2dfb7856bc14e0d1dd3a47c8a440034a3d92f24d67a7a5ca8a"]},"nonInclusion":{"roots":["0x1eec7b6b58c747b4b3379d1292acf7f70682ea9351a9e809054eb95770910d84","0x1eec7b6b58c747b4b3379d1292acf7f70682ea9351a9e809054eb95770910d84"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x359","0x359"],"leafLowerRangeValues":["0x35a","0x35a"],"leafHigherRangeValues":["0x35c","0x35c"],"leafIndices":[13,13]}} +0;{"inclusion":{"roots":["0x28c520896efb6afb95d47dc70ec251e2cbfa4fd9fe682ca297901e6b9cf4a2d5","0x28c520896efb6afb95d47dc70ec251e2cbfa4fd9fe682ca297901e6b9cf4a2d5"],"inPathIndices":[999,3],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0xd122087b1cb8b2dfb7856bc14e0d1dd3a47c8a440034a3d92f24d67a7a5ca8a","0xd122087b1cb8b2dfb7856bc14e0d1dd3a47c8a440034a3d92f24d67a7a5ca8a"]},"nonInclusion":{"roots":["0x20fba3b67b52c693ccfc46e79b82aeb92127ac3a56a8d4938cc4d9d2f0476eb9","0x20fba3b67b52c693ccfc46e79b82aeb92127ac3a56a8d4938cc4d9d2f0476eb9"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x290","0x290"],"leafLowerRangeValues":["0x28d","0x28d"],"leafHigherRangeValues":["0x28f","0x28f"],"leafIndices":[10,10]}} +0;{"inclusion":{"roots":["0x28c520896efb6afb95d47dc70ec251e2cbfa4fd9fe682ca297901e6b9cf4a2d5","0x28c520896efb6afb95d47dc70ec251e2cbfa4fd9fe682ca297901e6b9cf4a2d5"],"inPathIndices":[999,3],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0xd122087b1cb8b2dfb7856bc14e0d1dd3a47c8a440034a3d92f24d67a7a5ca8a","0xd122087b1cb8b2dfb7856bc14e0d1dd3a47c8a440034a3d92f24d67a7a5ca8a"]},"nonInclusion":{"roots":["0x24242930b891e85ef82e3584c0a8082456ef046e5736ca06afe7b62a2166159d","0x24242930b891e85ef82e3584c0a8082456ef046e5736ca06afe7b62a2166159d"],"inPathIndices":[999,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0xd","0xd"],"leafLowerRangeValues":["0xc","0xc"],"leafHigherRangeValues":["0xe","0xe"],"leafIndices":[11,11]}} +0;{"inclusion":{"roots":["0x28c520896efb6afb95d47dc70ec251e2cbfa4fd9fe682ca297901e6b9cf4a2d5","0x28c520896efb6afb95d47dc70ec251e2cbfa4fd9fe682ca297901e6b9cf4a2d5"],"inPathIndices":[999,3],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0xd122087b1cb8b2dfb7856bc14e0d1dd3a47c8a440034a3d92f24d67a7a5ca8a","0xd122087b1cb8b2dfb7856bc14e0d1dd3a47c8a440034a3d92f24d67a7a5ca8a"]},"nonInclusion":{"roots":["0x1d6d686315e5121d2a05251f4eec85d07314318d888832982fce0cb17d52bdba","0x1d6d686315e5121d2a05251f4eec85d07314318d888832982fce0cb17d52bdba"],"inPathIndices":[3,3],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x2e6","0x2e6"],"leafLowerRangeValues":["0x2e5","0x2e5"],"leafHigherRangeValues":["0x2e7","0x2e7"],"leafIndices":[12,12]}} +0;{"inclusion":{"roots":["0x14ee3d0aa5266992bd3e2aae6cb1dedf7d61b8790a5c2f22b5fc5cafd2de5216","0x14ee3d0aa5266992bd3e2aae6cb1dedf7d61b8790a5c2f22b5fc5cafd2de5216"],"inPathIndices":[0,0],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x11092fd40140a60c82b5486b29a10d8974ba49ca7c897db2ec007d356c960f41","0x11092fd40140a60c82b5486b29a10d8974ba49ca7c897db2ec007d356c960f41"]},"nonInclusion":{"roots":["0x28ba2839b3c26c73d45de960980a971814fcc52a3ec2c2aaa863e28859ce5b38","0x28ba2839b3c26c73d45de960980a971814fcc52a3ec2c2aaa863e28859ce5b38"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x238","0x238"],"leafLowerRangeValues":["0x237","0x237"],"leafHigherRangeValues":["0x239","0x239"],"leafIndices":[11,11]}} +0;{"inclusion":{"roots":["0x14ee3d0aa5266992bd3e2aae6cb1dedf7d61b8790a5c2f22b5fc5cafd2de5216","0x14ee3d0aa5266992bd3e2aae6cb1dedf7d61b8790a5c2f22b5fc5cafd2de5216"],"inPathIndices":[0,0],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x11092fd40140a60c82b5486b29a10d8974ba49ca7c897db2ec007d356c960f41","0x11092fd40140a60c82b5486b29a10d8974ba49ca7c897db2ec007d356c960f41"]},"nonInclusion":{"roots":["0x3e7","0x245257a111e68c7a1b8765a4204817c2d5fc42bbc20b00afb2d20dac720ef4d2"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x152","0x152"],"leafLowerRangeValues":["0x151","0x151"],"leafHigherRangeValues":["0x153","0x153"],"leafIndices":[13,13]}} +0;{"inclusion":{"roots":["0x14ee3d0aa5266992bd3e2aae6cb1dedf7d61b8790a5c2f22b5fc5cafd2de5216","0x14ee3d0aa5266992bd3e2aae6cb1dedf7d61b8790a5c2f22b5fc5cafd2de5216"],"inPathIndices":[0,0],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x11092fd40140a60c82b5486b29a10d8974ba49ca7c897db2ec007d356c960f41","0x11092fd40140a60c82b5486b29a10d8974ba49ca7c897db2ec007d356c960f41"]},"nonInclusion":{"roots":["0x1eec7b6b58c747b4b3379d1292acf7f70682ea9351a9e809054eb95770910d84","0x1eec7b6b58c747b4b3379d1292acf7f70682ea9351a9e809054eb95770910d84"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x359","0x359"],"leafLowerRangeValues":["0x35a","0x35a"],"leafHigherRangeValues":["0x35c","0x35c"],"leafIndices":[13,13]}} +0;{"inclusion":{"roots":["0x14ee3d0aa5266992bd3e2aae6cb1dedf7d61b8790a5c2f22b5fc5cafd2de5216","0x14ee3d0aa5266992bd3e2aae6cb1dedf7d61b8790a5c2f22b5fc5cafd2de5216"],"inPathIndices":[0,0],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x11092fd40140a60c82b5486b29a10d8974ba49ca7c897db2ec007d356c960f41","0x11092fd40140a60c82b5486b29a10d8974ba49ca7c897db2ec007d356c960f41"]},"nonInclusion":{"roots":["0x20fba3b67b52c693ccfc46e79b82aeb92127ac3a56a8d4938cc4d9d2f0476eb9","0x20fba3b67b52c693ccfc46e79b82aeb92127ac3a56a8d4938cc4d9d2f0476eb9"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x290","0x290"],"leafLowerRangeValues":["0x28d","0x28d"],"leafHigherRangeValues":["0x28f","0x28f"],"leafIndices":[10,10]}} +0;{"inclusion":{"roots":["0x14ee3d0aa5266992bd3e2aae6cb1dedf7d61b8790a5c2f22b5fc5cafd2de5216","0x14ee3d0aa5266992bd3e2aae6cb1dedf7d61b8790a5c2f22b5fc5cafd2de5216"],"inPathIndices":[0,0],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x11092fd40140a60c82b5486b29a10d8974ba49ca7c897db2ec007d356c960f41","0x11092fd40140a60c82b5486b29a10d8974ba49ca7c897db2ec007d356c960f41"]},"nonInclusion":{"roots":["0x24242930b891e85ef82e3584c0a8082456ef046e5736ca06afe7b62a2166159d","0x24242930b891e85ef82e3584c0a8082456ef046e5736ca06afe7b62a2166159d"],"inPathIndices":[999,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0xd","0xd"],"leafLowerRangeValues":["0xc","0xc"],"leafHigherRangeValues":["0xe","0xe"],"leafIndices":[11,11]}} +0;{"inclusion":{"roots":["0x14ee3d0aa5266992bd3e2aae6cb1dedf7d61b8790a5c2f22b5fc5cafd2de5216","0x14ee3d0aa5266992bd3e2aae6cb1dedf7d61b8790a5c2f22b5fc5cafd2de5216"],"inPathIndices":[0,0],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x11092fd40140a60c82b5486b29a10d8974ba49ca7c897db2ec007d356c960f41","0x11092fd40140a60c82b5486b29a10d8974ba49ca7c897db2ec007d356c960f41"]},"nonInclusion":{"roots":["0x1d6d686315e5121d2a05251f4eec85d07314318d888832982fce0cb17d52bdba","0x1d6d686315e5121d2a05251f4eec85d07314318d888832982fce0cb17d52bdba"],"inPathIndices":[3,3],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x2e6","0x2e6"],"leafLowerRangeValues":["0x2e5","0x2e5"],"leafHigherRangeValues":["0x2e7","0x2e7"],"leafIndices":[12,12]}} diff --git a/gnark-prover/test-data/inclusion.csv b/gnark-prover/test-data/inclusion.csv index f48655cff7..4750c1de66 100644 --- a/gnark-prover/test-data/inclusion.csv +++ b/gnark-prover/test-data/inclusion.csv @@ -1,167 +1,40 @@ -1; {"root":["0x1ebf5c4eb04bf878b46937be63d12308bb14841813441f041812ea54ecb7b2d5"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d","0x2fa5e5f18f6027a6501bec864564472a616b2e274a41211a444cbe3a99f3cc61","0xe884376d0d8fd21ecb780389e941f66e45e7acce3e228ab3e2156a614fcd747","0x1b7201da72494f1e28717ad1a52eb469f95892f957713533de6175e5da190af2","0x1f8d8822725e36385200c0b201249819a6e6e1e4650808b5bebc6bface7d7636","0x2c5d82f66c914bafb9701589ba8cfcfb6162b0a12acf88a8d0879a0471b5f85a","0x14c54148a0940bb820957f5adf3fa1134ef5c4aaa113f4646458f270e0bfbfd0","0x190d33b12f986f961e10c0ee44d8b9af11be25588cad89d416118e4bf4ebe80c","0x22f98aa9ce704152ac17354914ad73ed1167ae6596af510aa5b3649325e06c92","0x2a7c7c9b6ce5880b9f6f228d72bf6a575a526f29c66ecceef8b753d38bba7323","0x2e8186e558698ec1c67af9c14d463ffc470043c9c2988b954d75dd643f36b992","0xf57c5571e9a4eab49e2c8cf050dae948aef6ead647392273546249d1c1ff10f","0x1830ee67b5fb554ad5f63d4388800e1cfe78e310697d46e43c9ce36134f72cca","0x2134e76ac5d21aab186c2be1dd8f84ee880a1e46eaf712f9d371b6df22191f3e","0x19df90ec844ebc4ffeebd866f33859b0c051d8c958ee3aa88f8f8df3db91a5b1","0x18cca2a66b5c0787981e69aefd84852d74af0e93ef4912b4648c05f722efe52b","0x2388909415230d1b4d1304d2d54f473a628338f2efad83fadf05644549d2538d","0x27171fb4a97b6cc0e9e8f543b5294de866a2af2c9c8d0b1d96e673e4529ed540","0x2ff6650540f629fd5711a0bc74fc0d28dcb230b9392583e5f8d59696dde6ae21"]],"leaf":["0x29176100eaa962bdc1fe6c654d6a3c130e96a4d1168b33848b897dc502820133"]} -0; {"root":["0x0"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d","0x2fa5e5f18f6027a6501bec864564472a616b2e274a41211a444cbe3a99f3cc61","0xe884376d0d8fd21ecb780389e941f66e45e7acce3e228ab3e2156a614fcd747","0x1b7201da72494f1e28717ad1a52eb469f95892f957713533de6175e5da190af2","0x1f8d8822725e36385200c0b201249819a6e6e1e4650808b5bebc6bface7d7636","0x2c5d82f66c914bafb9701589ba8cfcfb6162b0a12acf88a8d0879a0471b5f85a","0x14c54148a0940bb820957f5adf3fa1134ef5c4aaa113f4646458f270e0bfbfd0","0x190d33b12f986f961e10c0ee44d8b9af11be25588cad89d416118e4bf4ebe80c","0x22f98aa9ce704152ac17354914ad73ed1167ae6596af510aa5b3649325e06c92","0x2a7c7c9b6ce5880b9f6f228d72bf6a575a526f29c66ecceef8b753d38bba7323","0x2e8186e558698ec1c67af9c14d463ffc470043c9c2988b954d75dd643f36b992","0xf57c5571e9a4eab49e2c8cf050dae948aef6ead647392273546249d1c1ff10f","0x1830ee67b5fb554ad5f63d4388800e1cfe78e310697d46e43c9ce36134f72cca","0x2134e76ac5d21aab186c2be1dd8f84ee880a1e46eaf712f9d371b6df22191f3e","0x19df90ec844ebc4ffeebd866f33859b0c051d8c958ee3aa88f8f8df3db91a5b1","0x18cca2a66b5c0787981e69aefd84852d74af0e93ef4912b4648c05f722efe52b","0x2388909415230d1b4d1304d2d54f473a628338f2efad83fadf05644549d2538d","0x27171fb4a97b6cc0e9e8f543b5294de866a2af2c9c8d0b1d96e673e4529ed540","0x2ff6650540f629fd5711a0bc74fc0d28dcb230b9392583e5f8d59696dde6ae21"]],"leaf":["0x29176100eaa962bdc1fe6c654d6a3c130e96a4d1168b33848b897dc502820133"]} -0; {"root":["0x1ebf5c4eb04bf878b46937be63d12308bb14841813441f041812ea54ecb7b2d5"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d","0x2fa5e5f18f6027a6501bec864564472a616b2e274a41211a444cbe3a99f3cc61","0xe884376d0d8fd21ecb780389e941f66e45e7acce3e228ab3e2156a614fcd747","0x1b7201da72494f1e28717ad1a52eb469f95892f957713533de6175e5da190af2","0x1f8d8822725e36385200c0b201249819a6e6e1e4650808b5bebc6bface7d7636","0x2c5d82f66c914bafb9701589ba8cfcfb6162b0a12acf88a8d0879a0471b5f85a","0x14c54148a0940bb820957f5adf3fa1134ef5c4aaa113f4646458f270e0bfbfd0","0x190d33b12f986f961e10c0ee44d8b9af11be25588cad89d416118e4bf4ebe80c","0x22f98aa9ce704152ac17354914ad73ed1167ae6596af510aa5b3649325e06c92","0x2a7c7c9b6ce5880b9f6f228d72bf6a575a526f29c66ecceef8b753d38bba7323","0x2e8186e558698ec1c67af9c14d463ffc470043c9c2988b954d75dd643f36b992","0xf57c5571e9a4eab49e2c8cf050dae948aef6ead647392273546249d1c1ff10f","0x1830ee67b5fb554ad5f63d4388800e1cfe78e310697d46e43c9ce36134f72cca","0x2134e76ac5d21aab186c2be1dd8f84ee880a1e46eaf712f9d371b6df22191f3e","0x19df90ec844ebc4ffeebd866f33859b0c051d8c958ee3aa88f8f8df3db91a5b1","0x18cca2a66b5c0787981e69aefd84852d74af0e93ef4912b4648c05f722efe52b","0x2388909415230d1b4d1304d2d54f473a628338f2efad83fadf05644549d2538d","0x27171fb4a97b6cc0e9e8f543b5294de866a2af2c9c8d0b1d96e673e4529ed540","0x2ff6650540f629fd5711a0bc74fc0d28dcb230b9392583e5f8d59696dde6ae21"]],"leaf":["0x29176100eaa962bdc1fe6c654d6a3c130e96a4d1168b33848b897dc502820133"]} -0; {"root":["0x1ebf5c4eb04bf878b46937be63d12308bb14841813441f041812ea54ecb7b2d5"],"inPathIndices":[0],"inPathElements":[["0x1","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d","0x2fa5e5f18f6027a6501bec864564472a616b2e274a41211a444cbe3a99f3cc61","0xe884376d0d8fd21ecb780389e941f66e45e7acce3e228ab3e2156a614fcd747","0x1b7201da72494f1e28717ad1a52eb469f95892f957713533de6175e5da190af2","0x1f8d8822725e36385200c0b201249819a6e6e1e4650808b5bebc6bface7d7636","0x2c5d82f66c914bafb9701589ba8cfcfb6162b0a12acf88a8d0879a0471b5f85a","0x14c54148a0940bb820957f5adf3fa1134ef5c4aaa113f4646458f270e0bfbfd0","0x190d33b12f986f961e10c0ee44d8b9af11be25588cad89d416118e4bf4ebe80c","0x22f98aa9ce704152ac17354914ad73ed1167ae6596af510aa5b3649325e06c92","0x2a7c7c9b6ce5880b9f6f228d72bf6a575a526f29c66ecceef8b753d38bba7323","0x2e8186e558698ec1c67af9c14d463ffc470043c9c2988b954d75dd643f36b992","0xf57c5571e9a4eab49e2c8cf050dae948aef6ead647392273546249d1c1ff10f","0x1830ee67b5fb554ad5f63d4388800e1cfe78e310697d46e43c9ce36134f72cca","0x2134e76ac5d21aab186c2be1dd8f84ee880a1e46eaf712f9d371b6df22191f3e","0x19df90ec844ebc4ffeebd866f33859b0c051d8c958ee3aa88f8f8df3db91a5b1","0x18cca2a66b5c0787981e69aefd84852d74af0e93ef4912b4648c05f722efe52b","0x2388909415230d1b4d1304d2d54f473a628338f2efad83fadf05644549d2538d","0x27171fb4a97b6cc0e9e8f543b5294de866a2af2c9c8d0b1d96e673e4529ed540","0x2ff6650540f629fd5711a0bc74fc0d28dcb230b9392583e5f8d59696dde6ae21"]],"leaf":["0x29176100eaa962bdc1fe6c654d6a3c130e96a4d1168b33848b897dc502820133"]} -0; {"root":["0x1ebf5c4eb04bf878b46937be63d12308bb14841813441f041812ea54ecb7b2d5"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d","0x2fa5e5f18f6027a6501bec864564472a616b2e274a41211a444cbe3a99f3cc61","0xe884376d0d8fd21ecb780389e941f66e45e7acce3e228ab3e2156a614fcd747","0x1b7201da72494f1e28717ad1a52eb469f95892f957713533de6175e5da190af2","0x1f8d8822725e36385200c0b201249819a6e6e1e4650808b5bebc6bface7d7636","0x2c5d82f66c914bafb9701589ba8cfcfb6162b0a12acf88a8d0879a0471b5f85a","0x14c54148a0940bb820957f5adf3fa1134ef5c4aaa113f4646458f270e0bfbfd0","0x190d33b12f986f961e10c0ee44d8b9af11be25588cad89d416118e4bf4ebe80c","0x22f98aa9ce704152ac17354914ad73ed1167ae6596af510aa5b3649325e06c92","0x2a7c7c9b6ce5880b9f6f228d72bf6a575a526f29c66ecceef8b753d38bba7323","0x2e8186e558698ec1c67af9c14d463ffc470043c9c2988b954d75dd643f36b992","0xf57c5571e9a4eab49e2c8cf050dae948aef6ead647392273546249d1c1ff10f","0x1830ee67b5fb554ad5f63d4388800e1cfe78e310697d46e43c9ce36134f72cca","0x2134e76ac5d21aab186c2be1dd8f84ee880a1e46eaf712f9d371b6df22191f3e","0x19df90ec844ebc4ffeebd866f33859b0c051d8c958ee3aa88f8f8df3db91a5b1","0x18cca2a66b5c0787981e69aefd84852d74af0e93ef4912b4648c05f722efe52b","0x2388909415230d1b4d1304d2d54f473a628338f2efad83fadf05644549d2538d","0x27171fb4a97b6cc0e9e8f543b5294de866a2af2c9c8d0b1d96e673e4529ed540","0x2ff6650540f629fd5711a0bc74fc0d28dcb230b9392583e5f8d59696dde6ae21"]],"leaf":["0x0"]} -0; {"root":["0x0"],"inPathIndices":[0],"inPathElements":[["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"]],"leaf":["0x0"]} -0; {"root":["0x0"],"inPathIndices":[0],"inPathElements":[["0x0"]],"leaf":["0x0"]} -1;{"root": ["0x1a4af161a558e2416f93d666386bcc47d3ab35bcd74182fb0dd0ca8f989b8d4a"],"inPathIndices": [0],"inPathElements": [["0x0"]],"leaf": ["0x2bb3b32bba8349827012d2ca0aaac3ec519ac73692aadc172feb68a11de60ae5"]} -0;{"root": ["0x3e7"],"inPathIndices": [0],"inPathElements": [["0x0"]],"leaf": ["0x2bb3b32bba8349827012d2ca0aaac3ec519ac73692aadc172feb68a11de60ae5"]} -0;{"root": ["0x3e7"],"inPathIndices": [0],"inPathElements": [["0x0"]],"leaf": ["0x3e7"]} -0;{"root": ["0x3e7"],"inPathIndices": [999],"inPathElements": [["0x0"]],"leaf": ["0x3e7"]} -0;{"root": ["0x3e7"],"inPathIndices": [999],"inPathElements": [["0x3e7"]],"leaf": ["0x3e7"]} -1;{"root": ["0x24862cdfcb07500239febb54b849cfc2bab58667284a452a3e0483c5405ebf83","0x24862cdfcb07500239febb54b849cfc2bab58667284a452a3e0483c5405ebf83"],"inPathIndices": [0,0],"inPathElements": [["0x0"],["0x0"]],"leaf": ["0x2bac96cfab765b1e8d19cc18b97bca136454815c877e158c3ebb586f5f3bb98f","0x2bac96cfab765b1e8d19cc18b97bca136454815c877e158c3ebb586f5f3bb98f"]} -0;{"root": ["0x3e7","0x24862cdfcb07500239febb54b849cfc2bab58667284a452a3e0483c5405ebf83"],"inPathIndices": [0,0],"inPathElements": [["0x0"],["0x0"]],"leaf": ["0x2bac96cfab765b1e8d19cc18b97bca136454815c877e158c3ebb586f5f3bb98f","0x2bac96cfab765b1e8d19cc18b97bca136454815c877e158c3ebb586f5f3bb98f"]} -0;{"root": ["0x3e7","0x24862cdfcb07500239febb54b849cfc2bab58667284a452a3e0483c5405ebf83"],"inPathIndices": [0,0],"inPathElements": [["0x0"],["0x0"]],"leaf": ["0x3e7","0x2bac96cfab765b1e8d19cc18b97bca136454815c877e158c3ebb586f5f3bb98f"]} -0;{"root": ["0x3e7","0x24862cdfcb07500239febb54b849cfc2bab58667284a452a3e0483c5405ebf83"],"inPathIndices": [999,0],"inPathElements": [["0x0"],["0x0"]],"leaf": ["0x3e7","0x2bac96cfab765b1e8d19cc18b97bca136454815c877e158c3ebb586f5f3bb98f"]} -0;{"root": ["0x3e7","0x24862cdfcb07500239febb54b849cfc2bab58667284a452a3e0483c5405ebf83"],"inPathIndices": [999,0],"inPathElements": [["0x3e7"],["0x3e7"]],"leaf": ["0x3e7","0x2bac96cfab765b1e8d19cc18b97bca136454815c877e158c3ebb586f5f3bb98f"]} -1;{"root": ["0x2b124a5c3f17db12731aa7b4ae1379cb31a6e1cf342af81f2003521349d2e116","0x2b124a5c3f17db12731aa7b4ae1379cb31a6e1cf342af81f2003521349d2e116","0x2b124a5c3f17db12731aa7b4ae1379cb31a6e1cf342af81f2003521349d2e116"],"inPathIndices": [0,0,0],"inPathElements": [["0x0"],["0x0"],["0x0"]],"leaf": ["0x298dff3762e45c265ef8beb20a22d312f35e81c49cc5cca8f00fa9bda6738bf6","0x298dff3762e45c265ef8beb20a22d312f35e81c49cc5cca8f00fa9bda6738bf6","0x298dff3762e45c265ef8beb20a22d312f35e81c49cc5cca8f00fa9bda6738bf6"]} -0;{"root": ["0x3e7","0x2b124a5c3f17db12731aa7b4ae1379cb31a6e1cf342af81f2003521349d2e116","0x2b124a5c3f17db12731aa7b4ae1379cb31a6e1cf342af81f2003521349d2e116"],"inPathIndices": [0,0,0],"inPathElements": [["0x0"],["0x0"],["0x0"]],"leaf": ["0x298dff3762e45c265ef8beb20a22d312f35e81c49cc5cca8f00fa9bda6738bf6","0x298dff3762e45c265ef8beb20a22d312f35e81c49cc5cca8f00fa9bda6738bf6","0x298dff3762e45c265ef8beb20a22d312f35e81c49cc5cca8f00fa9bda6738bf6"]} -0;{"root": ["0x3e7","0x2b124a5c3f17db12731aa7b4ae1379cb31a6e1cf342af81f2003521349d2e116","0x2b124a5c3f17db12731aa7b4ae1379cb31a6e1cf342af81f2003521349d2e116"],"inPathIndices": [0,0,0],"inPathElements": [["0x0"],["0x0"],["0x0"]],"leaf": ["0x3e7","0x298dff3762e45c265ef8beb20a22d312f35e81c49cc5cca8f00fa9bda6738bf6","0x298dff3762e45c265ef8beb20a22d312f35e81c49cc5cca8f00fa9bda6738bf6"]} -0;{"root": ["0x3e7","0x2b124a5c3f17db12731aa7b4ae1379cb31a6e1cf342af81f2003521349d2e116","0x2b124a5c3f17db12731aa7b4ae1379cb31a6e1cf342af81f2003521349d2e116"],"inPathIndices": [999,0,0],"inPathElements": [["0x0"],["0x0"],["0x0"]],"leaf": ["0x3e7","0x298dff3762e45c265ef8beb20a22d312f35e81c49cc5cca8f00fa9bda6738bf6","0x298dff3762e45c265ef8beb20a22d312f35e81c49cc5cca8f00fa9bda6738bf6"]} -0;{"root": ["0x3e7","0x2b124a5c3f17db12731aa7b4ae1379cb31a6e1cf342af81f2003521349d2e116","0x2b124a5c3f17db12731aa7b4ae1379cb31a6e1cf342af81f2003521349d2e116"],"inPathIndices": [999,0,0],"inPathElements": [["0x3e7"],["0x3e7"],["0x3e7"]],"leaf": ["0x3e7","0x298dff3762e45c265ef8beb20a22d312f35e81c49cc5cca8f00fa9bda6738bf6","0x298dff3762e45c265ef8beb20a22d312f35e81c49cc5cca8f00fa9bda6738bf6"]} -1;{"root": ["0xb0821efe434997654698d5dd8bd91a116d1c4bf6a1d7811bbd29734d81a2057","0xb0821efe434997654698d5dd8bd91a116d1c4bf6a1d7811bbd29734d81a2057","0xb0821efe434997654698d5dd8bd91a116d1c4bf6a1d7811bbd29734d81a2057","0xb0821efe434997654698d5dd8bd91a116d1c4bf6a1d7811bbd29734d81a2057"],"inPathIndices": [0,0,0,0],"inPathElements": [["0x0"],["0x0"],["0x0"],["0x0"]],"leaf": ["0x22d7e904968b38dd8d60ffd333a3407d9f041703c3419abcceef1c82a5cdb38d","0x22d7e904968b38dd8d60ffd333a3407d9f041703c3419abcceef1c82a5cdb38d","0x22d7e904968b38dd8d60ffd333a3407d9f041703c3419abcceef1c82a5cdb38d","0x22d7e904968b38dd8d60ffd333a3407d9f041703c3419abcceef1c82a5cdb38d"]} -0;{"root": ["0x3e7","0xb0821efe434997654698d5dd8bd91a116d1c4bf6a1d7811bbd29734d81a2057","0xb0821efe434997654698d5dd8bd91a116d1c4bf6a1d7811bbd29734d81a2057","0xb0821efe434997654698d5dd8bd91a116d1c4bf6a1d7811bbd29734d81a2057"],"inPathIndices": [0,0,0,0],"inPathElements": [["0x0"],["0x0"],["0x0"],["0x0"]],"leaf": ["0x22d7e904968b38dd8d60ffd333a3407d9f041703c3419abcceef1c82a5cdb38d","0x22d7e904968b38dd8d60ffd333a3407d9f041703c3419abcceef1c82a5cdb38d","0x22d7e904968b38dd8d60ffd333a3407d9f041703c3419abcceef1c82a5cdb38d","0x22d7e904968b38dd8d60ffd333a3407d9f041703c3419abcceef1c82a5cdb38d"]} -0;{"root": ["0x3e7","0xb0821efe434997654698d5dd8bd91a116d1c4bf6a1d7811bbd29734d81a2057","0xb0821efe434997654698d5dd8bd91a116d1c4bf6a1d7811bbd29734d81a2057","0xb0821efe434997654698d5dd8bd91a116d1c4bf6a1d7811bbd29734d81a2057"],"inPathIndices": [0,0,0,0],"inPathElements": [["0x0"],["0x0"],["0x0"],["0x0"]],"leaf": ["0x3e7","0x22d7e904968b38dd8d60ffd333a3407d9f041703c3419abcceef1c82a5cdb38d","0x22d7e904968b38dd8d60ffd333a3407d9f041703c3419abcceef1c82a5cdb38d","0x22d7e904968b38dd8d60ffd333a3407d9f041703c3419abcceef1c82a5cdb38d"]} -0;{"root": ["0x3e7","0xb0821efe434997654698d5dd8bd91a116d1c4bf6a1d7811bbd29734d81a2057","0xb0821efe434997654698d5dd8bd91a116d1c4bf6a1d7811bbd29734d81a2057","0xb0821efe434997654698d5dd8bd91a116d1c4bf6a1d7811bbd29734d81a2057"],"inPathIndices": [999,0,0,0],"inPathElements": [["0x0"],["0x0"],["0x0"],["0x0"]],"leaf": ["0x3e7","0x22d7e904968b38dd8d60ffd333a3407d9f041703c3419abcceef1c82a5cdb38d","0x22d7e904968b38dd8d60ffd333a3407d9f041703c3419abcceef1c82a5cdb38d","0x22d7e904968b38dd8d60ffd333a3407d9f041703c3419abcceef1c82a5cdb38d"]} -0;{"root": ["0x3e7","0xb0821efe434997654698d5dd8bd91a116d1c4bf6a1d7811bbd29734d81a2057","0xb0821efe434997654698d5dd8bd91a116d1c4bf6a1d7811bbd29734d81a2057","0xb0821efe434997654698d5dd8bd91a116d1c4bf6a1d7811bbd29734d81a2057"],"inPathIndices": [999,0,0,0],"inPathElements": [["0x3e7"],["0x3e7"],["0x3e7"],["0x3e7"]],"leaf": ["0x3e7","0x22d7e904968b38dd8d60ffd333a3407d9f041703c3419abcceef1c82a5cdb38d","0x22d7e904968b38dd8d60ffd333a3407d9f041703c3419abcceef1c82a5cdb38d","0x22d7e904968b38dd8d60ffd333a3407d9f041703c3419abcceef1c82a5cdb38d"]} -1;{"root": ["0x29bdcaf8e76b6a928cf9750c96e7711b9efefcf11d15314cac09d9052b9d08c7"],"inPathIndices": [0],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaf": ["0x271fadf57cc5c5e64407f3a31c6f11921f97fc25d5e30fa397757270eaf6e65c"]} -0;{"root": ["0x3e7"],"inPathIndices": [0],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaf": ["0x271fadf57cc5c5e64407f3a31c6f11921f97fc25d5e30fa397757270eaf6e65c"]} -0;{"root": ["0x3e7"],"inPathIndices": [0],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaf": ["0x3e7"]} -0;{"root": ["0x3e7"],"inPathIndices": [999],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaf": ["0x3e7"]} -0;{"root": ["0x3e7"],"inPathIndices": [999],"inPathElements": [["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaf": ["0x3e7"]} -1;{"root": ["0x18c7ad1e5917699eef8be11586a2b0e18ad64203271f91d1f84a6bf88b897a40","0x18c7ad1e5917699eef8be11586a2b0e18ad64203271f91d1f84a6bf88b897a40"],"inPathIndices": [0,0],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaf": ["0x18a0a1672f0f8ecf064aadde1229ac47aa8d58e8bc75054965c13022ea216a5","0x18a0a1672f0f8ecf064aadde1229ac47aa8d58e8bc75054965c13022ea216a5"]} -0;{"root": ["0x3e7","0x18c7ad1e5917699eef8be11586a2b0e18ad64203271f91d1f84a6bf88b897a40"],"inPathIndices": [0,0],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaf": ["0x18a0a1672f0f8ecf064aadde1229ac47aa8d58e8bc75054965c13022ea216a5","0x18a0a1672f0f8ecf064aadde1229ac47aa8d58e8bc75054965c13022ea216a5"]} -0;{"root": ["0x3e7","0x18c7ad1e5917699eef8be11586a2b0e18ad64203271f91d1f84a6bf88b897a40"],"inPathIndices": [0,0],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaf": ["0x3e7","0x18a0a1672f0f8ecf064aadde1229ac47aa8d58e8bc75054965c13022ea216a5"]} -0;{"root": ["0x3e7","0x18c7ad1e5917699eef8be11586a2b0e18ad64203271f91d1f84a6bf88b897a40"],"inPathIndices": [999,0],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaf": ["0x3e7","0x18a0a1672f0f8ecf064aadde1229ac47aa8d58e8bc75054965c13022ea216a5"]} -0;{"root": ["0x3e7","0x18c7ad1e5917699eef8be11586a2b0e18ad64203271f91d1f84a6bf88b897a40"],"inPathIndices": [999,0],"inPathElements": [["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaf": ["0x3e7","0x18a0a1672f0f8ecf064aadde1229ac47aa8d58e8bc75054965c13022ea216a5"]} -1;{"root": ["0x2423d36c9a861f4230fd0fd88dd4c5575ebb9100c6e98aa4caee4ab7c37840a6","0x2423d36c9a861f4230fd0fd88dd4c5575ebb9100c6e98aa4caee4ab7c37840a6","0x2423d36c9a861f4230fd0fd88dd4c5575ebb9100c6e98aa4caee4ab7c37840a6"],"inPathIndices": [1,1,1],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaf": ["0x55c896028bb76db1721bbf586edb006a2a396575a5c7bc0eadba06dac011c04","0x55c896028bb76db1721bbf586edb006a2a396575a5c7bc0eadba06dac011c04","0x55c896028bb76db1721bbf586edb006a2a396575a5c7bc0eadba06dac011c04"]} -0;{"root": ["0x3e7","0x2423d36c9a861f4230fd0fd88dd4c5575ebb9100c6e98aa4caee4ab7c37840a6","0x2423d36c9a861f4230fd0fd88dd4c5575ebb9100c6e98aa4caee4ab7c37840a6"],"inPathIndices": [1,1,1],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaf": ["0x55c896028bb76db1721bbf586edb006a2a396575a5c7bc0eadba06dac011c04","0x55c896028bb76db1721bbf586edb006a2a396575a5c7bc0eadba06dac011c04","0x55c896028bb76db1721bbf586edb006a2a396575a5c7bc0eadba06dac011c04"]} -0;{"root": ["0x3e7","0x2423d36c9a861f4230fd0fd88dd4c5575ebb9100c6e98aa4caee4ab7c37840a6","0x2423d36c9a861f4230fd0fd88dd4c5575ebb9100c6e98aa4caee4ab7c37840a6"],"inPathIndices": [1,1,1],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaf": ["0x3e7","0x55c896028bb76db1721bbf586edb006a2a396575a5c7bc0eadba06dac011c04","0x55c896028bb76db1721bbf586edb006a2a396575a5c7bc0eadba06dac011c04"]} -0;{"root": ["0x3e7","0x2423d36c9a861f4230fd0fd88dd4c5575ebb9100c6e98aa4caee4ab7c37840a6","0x2423d36c9a861f4230fd0fd88dd4c5575ebb9100c6e98aa4caee4ab7c37840a6"],"inPathIndices": [999,1,1],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaf": ["0x3e7","0x55c896028bb76db1721bbf586edb006a2a396575a5c7bc0eadba06dac011c04","0x55c896028bb76db1721bbf586edb006a2a396575a5c7bc0eadba06dac011c04"]} -0;{"root": ["0x3e7","0x2423d36c9a861f4230fd0fd88dd4c5575ebb9100c6e98aa4caee4ab7c37840a6","0x2423d36c9a861f4230fd0fd88dd4c5575ebb9100c6e98aa4caee4ab7c37840a6"],"inPathIndices": [999,1,1],"inPathElements": [["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaf": ["0x3e7","0x55c896028bb76db1721bbf586edb006a2a396575a5c7bc0eadba06dac011c04","0x55c896028bb76db1721bbf586edb006a2a396575a5c7bc0eadba06dac011c04"]} -1;{"root": ["0x2f72b6a758a0396a3c705194db5d82bc846e12358d8550618f4817371d693d31","0x2f72b6a758a0396a3c705194db5d82bc846e12358d8550618f4817371d693d31","0x2f72b6a758a0396a3c705194db5d82bc846e12358d8550618f4817371d693d31","0x2f72b6a758a0396a3c705194db5d82bc846e12358d8550618f4817371d693d31"],"inPathIndices": [1,1,1,1],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaf": ["0x1ccc90ba879731731776c661ed0c7a67bb4968f770be26e2e21121265b69f59b","0x1ccc90ba879731731776c661ed0c7a67bb4968f770be26e2e21121265b69f59b","0x1ccc90ba879731731776c661ed0c7a67bb4968f770be26e2e21121265b69f59b","0x1ccc90ba879731731776c661ed0c7a67bb4968f770be26e2e21121265b69f59b"]} -0;{"root": ["0x3e7","0x2f72b6a758a0396a3c705194db5d82bc846e12358d8550618f4817371d693d31","0x2f72b6a758a0396a3c705194db5d82bc846e12358d8550618f4817371d693d31","0x2f72b6a758a0396a3c705194db5d82bc846e12358d8550618f4817371d693d31"],"inPathIndices": [1,1,1,1],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaf": ["0x1ccc90ba879731731776c661ed0c7a67bb4968f770be26e2e21121265b69f59b","0x1ccc90ba879731731776c661ed0c7a67bb4968f770be26e2e21121265b69f59b","0x1ccc90ba879731731776c661ed0c7a67bb4968f770be26e2e21121265b69f59b","0x1ccc90ba879731731776c661ed0c7a67bb4968f770be26e2e21121265b69f59b"]} -0;{"root": ["0x3e7","0x2f72b6a758a0396a3c705194db5d82bc846e12358d8550618f4817371d693d31","0x2f72b6a758a0396a3c705194db5d82bc846e12358d8550618f4817371d693d31","0x2f72b6a758a0396a3c705194db5d82bc846e12358d8550618f4817371d693d31"],"inPathIndices": [1,1,1,1],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaf": ["0x3e7","0x1ccc90ba879731731776c661ed0c7a67bb4968f770be26e2e21121265b69f59b","0x1ccc90ba879731731776c661ed0c7a67bb4968f770be26e2e21121265b69f59b","0x1ccc90ba879731731776c661ed0c7a67bb4968f770be26e2e21121265b69f59b"]} -0;{"root": ["0x3e7","0x2f72b6a758a0396a3c705194db5d82bc846e12358d8550618f4817371d693d31","0x2f72b6a758a0396a3c705194db5d82bc846e12358d8550618f4817371d693d31","0x2f72b6a758a0396a3c705194db5d82bc846e12358d8550618f4817371d693d31"],"inPathIndices": [999,1,1,1],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaf": ["0x3e7","0x1ccc90ba879731731776c661ed0c7a67bb4968f770be26e2e21121265b69f59b","0x1ccc90ba879731731776c661ed0c7a67bb4968f770be26e2e21121265b69f59b","0x1ccc90ba879731731776c661ed0c7a67bb4968f770be26e2e21121265b69f59b"]} -0;{"root": ["0x3e7","0x2f72b6a758a0396a3c705194db5d82bc846e12358d8550618f4817371d693d31","0x2f72b6a758a0396a3c705194db5d82bc846e12358d8550618f4817371d693d31","0x2f72b6a758a0396a3c705194db5d82bc846e12358d8550618f4817371d693d31"],"inPathIndices": [999,1,1,1],"inPathElements": [["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaf": ["0x3e7","0x1ccc90ba879731731776c661ed0c7a67bb4968f770be26e2e21121265b69f59b","0x1ccc90ba879731731776c661ed0c7a67bb4968f770be26e2e21121265b69f59b","0x1ccc90ba879731731776c661ed0c7a67bb4968f770be26e2e21121265b69f59b"]} -1;{"root": ["0x2d4c70511b8a34af2e52ceaec245449de909d842dedab6140c99c72ee4aa4e45"],"inPathIndices": [1],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaf": ["0x8c3405e94a13781073c1def10bd0eabce3d7746fe24521b9dbdc82a02fbef92"]} -0;{"root": ["0x3e7"],"inPathIndices": [1],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaf": ["0x8c3405e94a13781073c1def10bd0eabce3d7746fe24521b9dbdc82a02fbef92"]} -0;{"root": ["0x3e7"],"inPathIndices": [1],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaf": ["0x3e7"]} -0;{"root": ["0x3e7"],"inPathIndices": [999],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaf": ["0x3e7"]} -0;{"root": ["0x3e7"],"inPathIndices": [999],"inPathElements": [["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaf": ["0x3e7"]} -1;{"root": ["0x254323892deeab22e7986750aec6ad159c6ed6e18d709593e3cc4fd3c64e0633","0x254323892deeab22e7986750aec6ad159c6ed6e18d709593e3cc4fd3c64e0633"],"inPathIndices": [2,2],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaf": ["0x548d0ced181fb1c7320a720efb71f2ed964dd6879f7c44a05a6b554265fee8b","0x548d0ced181fb1c7320a720efb71f2ed964dd6879f7c44a05a6b554265fee8b"]} -0;{"root": ["0x3e7","0x254323892deeab22e7986750aec6ad159c6ed6e18d709593e3cc4fd3c64e0633"],"inPathIndices": [2,2],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaf": ["0x548d0ced181fb1c7320a720efb71f2ed964dd6879f7c44a05a6b554265fee8b","0x548d0ced181fb1c7320a720efb71f2ed964dd6879f7c44a05a6b554265fee8b"]} -0;{"root": ["0x3e7","0x254323892deeab22e7986750aec6ad159c6ed6e18d709593e3cc4fd3c64e0633"],"inPathIndices": [2,2],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaf": ["0x3e7","0x548d0ced181fb1c7320a720efb71f2ed964dd6879f7c44a05a6b554265fee8b"]} -0;{"root": ["0x3e7","0x254323892deeab22e7986750aec6ad159c6ed6e18d709593e3cc4fd3c64e0633"],"inPathIndices": [999,2],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaf": ["0x3e7","0x548d0ced181fb1c7320a720efb71f2ed964dd6879f7c44a05a6b554265fee8b"]} -0;{"root": ["0x3e7","0x254323892deeab22e7986750aec6ad159c6ed6e18d709593e3cc4fd3c64e0633"],"inPathIndices": [999,2],"inPathElements": [["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaf": ["0x3e7","0x548d0ced181fb1c7320a720efb71f2ed964dd6879f7c44a05a6b554265fee8b"]} -1;{"root": ["0xb68d773a218e635c32b9f77ea41713897926804640cc8ef78ff43184fbab12a","0xb68d773a218e635c32b9f77ea41713897926804640cc8ef78ff43184fbab12a","0xb68d773a218e635c32b9f77ea41713897926804640cc8ef78ff43184fbab12a"],"inPathIndices": [1,1,1],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaf": ["0x24a3897f3de11e69738724107896c52ffeeacb0ec25d85158e4b40266196cbab","0x24a3897f3de11e69738724107896c52ffeeacb0ec25d85158e4b40266196cbab","0x24a3897f3de11e69738724107896c52ffeeacb0ec25d85158e4b40266196cbab"]} -0;{"root": ["0x3e7","0xb68d773a218e635c32b9f77ea41713897926804640cc8ef78ff43184fbab12a","0xb68d773a218e635c32b9f77ea41713897926804640cc8ef78ff43184fbab12a"],"inPathIndices": [1,1,1],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaf": ["0x24a3897f3de11e69738724107896c52ffeeacb0ec25d85158e4b40266196cbab","0x24a3897f3de11e69738724107896c52ffeeacb0ec25d85158e4b40266196cbab","0x24a3897f3de11e69738724107896c52ffeeacb0ec25d85158e4b40266196cbab"]} -0;{"root": ["0x3e7","0xb68d773a218e635c32b9f77ea41713897926804640cc8ef78ff43184fbab12a","0xb68d773a218e635c32b9f77ea41713897926804640cc8ef78ff43184fbab12a"],"inPathIndices": [1,1,1],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaf": ["0x3e7","0x24a3897f3de11e69738724107896c52ffeeacb0ec25d85158e4b40266196cbab","0x24a3897f3de11e69738724107896c52ffeeacb0ec25d85158e4b40266196cbab"]} -0;{"root": ["0x3e7","0xb68d773a218e635c32b9f77ea41713897926804640cc8ef78ff43184fbab12a","0xb68d773a218e635c32b9f77ea41713897926804640cc8ef78ff43184fbab12a"],"inPathIndices": [999,1,1],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaf": ["0x3e7","0x24a3897f3de11e69738724107896c52ffeeacb0ec25d85158e4b40266196cbab","0x24a3897f3de11e69738724107896c52ffeeacb0ec25d85158e4b40266196cbab"]} -0;{"root": ["0x3e7","0xb68d773a218e635c32b9f77ea41713897926804640cc8ef78ff43184fbab12a","0xb68d773a218e635c32b9f77ea41713897926804640cc8ef78ff43184fbab12a"],"inPathIndices": [999,1,1],"inPathElements": [["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaf": ["0x3e7","0x24a3897f3de11e69738724107896c52ffeeacb0ec25d85158e4b40266196cbab","0x24a3897f3de11e69738724107896c52ffeeacb0ec25d85158e4b40266196cbab"]} -1;{"root": ["0x27eb5b1fcb9a05fae24f2014e82c23e1bbf49d8cfdebfbf1d0ccc8a868b3c509","0x27eb5b1fcb9a05fae24f2014e82c23e1bbf49d8cfdebfbf1d0ccc8a868b3c509","0x27eb5b1fcb9a05fae24f2014e82c23e1bbf49d8cfdebfbf1d0ccc8a868b3c509","0x27eb5b1fcb9a05fae24f2014e82c23e1bbf49d8cfdebfbf1d0ccc8a868b3c509"],"inPathIndices": [2,2,2,2],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaf": ["0x1922c3d8516fbe9a9f105655b15bb913270af6a9bd34808505282f82b75a87db","0x1922c3d8516fbe9a9f105655b15bb913270af6a9bd34808505282f82b75a87db","0x1922c3d8516fbe9a9f105655b15bb913270af6a9bd34808505282f82b75a87db","0x1922c3d8516fbe9a9f105655b15bb913270af6a9bd34808505282f82b75a87db"]} -0;{"root": ["0x3e7","0x27eb5b1fcb9a05fae24f2014e82c23e1bbf49d8cfdebfbf1d0ccc8a868b3c509","0x27eb5b1fcb9a05fae24f2014e82c23e1bbf49d8cfdebfbf1d0ccc8a868b3c509","0x27eb5b1fcb9a05fae24f2014e82c23e1bbf49d8cfdebfbf1d0ccc8a868b3c509"],"inPathIndices": [2,2,2,2],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaf": ["0x1922c3d8516fbe9a9f105655b15bb913270af6a9bd34808505282f82b75a87db","0x1922c3d8516fbe9a9f105655b15bb913270af6a9bd34808505282f82b75a87db","0x1922c3d8516fbe9a9f105655b15bb913270af6a9bd34808505282f82b75a87db","0x1922c3d8516fbe9a9f105655b15bb913270af6a9bd34808505282f82b75a87db"]} -0;{"root": ["0x3e7","0x27eb5b1fcb9a05fae24f2014e82c23e1bbf49d8cfdebfbf1d0ccc8a868b3c509","0x27eb5b1fcb9a05fae24f2014e82c23e1bbf49d8cfdebfbf1d0ccc8a868b3c509","0x27eb5b1fcb9a05fae24f2014e82c23e1bbf49d8cfdebfbf1d0ccc8a868b3c509"],"inPathIndices": [2,2,2,2],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaf": ["0x3e7","0x1922c3d8516fbe9a9f105655b15bb913270af6a9bd34808505282f82b75a87db","0x1922c3d8516fbe9a9f105655b15bb913270af6a9bd34808505282f82b75a87db","0x1922c3d8516fbe9a9f105655b15bb913270af6a9bd34808505282f82b75a87db"]} -0;{"root": ["0x3e7","0x27eb5b1fcb9a05fae24f2014e82c23e1bbf49d8cfdebfbf1d0ccc8a868b3c509","0x27eb5b1fcb9a05fae24f2014e82c23e1bbf49d8cfdebfbf1d0ccc8a868b3c509","0x27eb5b1fcb9a05fae24f2014e82c23e1bbf49d8cfdebfbf1d0ccc8a868b3c509"],"inPathIndices": [999,2,2,2],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaf": ["0x3e7","0x1922c3d8516fbe9a9f105655b15bb913270af6a9bd34808505282f82b75a87db","0x1922c3d8516fbe9a9f105655b15bb913270af6a9bd34808505282f82b75a87db","0x1922c3d8516fbe9a9f105655b15bb913270af6a9bd34808505282f82b75a87db"]} -0;{"root": ["0x3e7","0x27eb5b1fcb9a05fae24f2014e82c23e1bbf49d8cfdebfbf1d0ccc8a868b3c509","0x27eb5b1fcb9a05fae24f2014e82c23e1bbf49d8cfdebfbf1d0ccc8a868b3c509","0x27eb5b1fcb9a05fae24f2014e82c23e1bbf49d8cfdebfbf1d0ccc8a868b3c509"],"inPathIndices": [999,2,2,2],"inPathElements": [["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaf": ["0x3e7","0x1922c3d8516fbe9a9f105655b15bb913270af6a9bd34808505282f82b75a87db","0x1922c3d8516fbe9a9f105655b15bb913270af6a9bd34808505282f82b75a87db","0x1922c3d8516fbe9a9f105655b15bb913270af6a9bd34808505282f82b75a87db"]} -1;{"root": ["0x2f71e1bb45102ad39f1e437aebbedb91f3e2c7bc9d59e673f258cda3c45115b3"],"inPathIndices": [0],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaf": ["0x203659563bcdf5ae5879e4d60d7af9853c390298698aa2b729a924db6e848332"]} -0;{"root": ["0x3e7"],"inPathIndices": [0],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaf": ["0x203659563bcdf5ae5879e4d60d7af9853c390298698aa2b729a924db6e848332"]} -0;{"root": ["0x3e7"],"inPathIndices": [0],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaf": ["0x3e7"]} -0;{"root": ["0x3e7"],"inPathIndices": [999],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaf": ["0x3e7"]} -0;{"root": ["0x3e7"],"inPathIndices": [999],"inPathElements": [["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaf": ["0x3e7"]} -1;{"root": ["0x11a873f8304433132274220b1deebaac7f5563634d74d06d13726968ad3c8ae5","0x11a873f8304433132274220b1deebaac7f5563634d74d06d13726968ad3c8ae5"],"inPathIndices": [0,0],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaf": ["0x213f6f5648d54e8915e28d52bf4a1b7201a4d2d58ffc5234c93da04e77ae65bd","0x213f6f5648d54e8915e28d52bf4a1b7201a4d2d58ffc5234c93da04e77ae65bd"]} -0;{"root": ["0x3e7","0x11a873f8304433132274220b1deebaac7f5563634d74d06d13726968ad3c8ae5"],"inPathIndices": [0,0],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaf": ["0x213f6f5648d54e8915e28d52bf4a1b7201a4d2d58ffc5234c93da04e77ae65bd","0x213f6f5648d54e8915e28d52bf4a1b7201a4d2d58ffc5234c93da04e77ae65bd"]} -0;{"root": ["0x3e7","0x11a873f8304433132274220b1deebaac7f5563634d74d06d13726968ad3c8ae5"],"inPathIndices": [0,0],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaf": ["0x3e7","0x213f6f5648d54e8915e28d52bf4a1b7201a4d2d58ffc5234c93da04e77ae65bd"]} -0;{"root": ["0x3e7","0x11a873f8304433132274220b1deebaac7f5563634d74d06d13726968ad3c8ae5"],"inPathIndices": [999,0],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaf": ["0x3e7","0x213f6f5648d54e8915e28d52bf4a1b7201a4d2d58ffc5234c93da04e77ae65bd"]} -0;{"root": ["0x3e7","0x11a873f8304433132274220b1deebaac7f5563634d74d06d13726968ad3c8ae5"],"inPathIndices": [999,0],"inPathElements": [["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaf": ["0x3e7","0x213f6f5648d54e8915e28d52bf4a1b7201a4d2d58ffc5234c93da04e77ae65bd"]} -1;{"root": ["0x101a9ff126cdf2704fdbb9fd0310bae23c7562173ff556b480be9518ddb3d741","0x101a9ff126cdf2704fdbb9fd0310bae23c7562173ff556b480be9518ddb3d741","0x101a9ff126cdf2704fdbb9fd0310bae23c7562173ff556b480be9518ddb3d741"],"inPathIndices": [2,2,2],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaf": ["0x212ee86a05bd3447f412bd4cbf58fc3dea8b02e52c20adfc60254ae3d66ea5bc","0x212ee86a05bd3447f412bd4cbf58fc3dea8b02e52c20adfc60254ae3d66ea5bc","0x212ee86a05bd3447f412bd4cbf58fc3dea8b02e52c20adfc60254ae3d66ea5bc"]} -0;{"root": ["0x3e7","0x101a9ff126cdf2704fdbb9fd0310bae23c7562173ff556b480be9518ddb3d741","0x101a9ff126cdf2704fdbb9fd0310bae23c7562173ff556b480be9518ddb3d741"],"inPathIndices": [2,2,2],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaf": ["0x212ee86a05bd3447f412bd4cbf58fc3dea8b02e52c20adfc60254ae3d66ea5bc","0x212ee86a05bd3447f412bd4cbf58fc3dea8b02e52c20adfc60254ae3d66ea5bc","0x212ee86a05bd3447f412bd4cbf58fc3dea8b02e52c20adfc60254ae3d66ea5bc"]} -0;{"root": ["0x3e7","0x101a9ff126cdf2704fdbb9fd0310bae23c7562173ff556b480be9518ddb3d741","0x101a9ff126cdf2704fdbb9fd0310bae23c7562173ff556b480be9518ddb3d741"],"inPathIndices": [2,2,2],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaf": ["0x3e7","0x212ee86a05bd3447f412bd4cbf58fc3dea8b02e52c20adfc60254ae3d66ea5bc","0x212ee86a05bd3447f412bd4cbf58fc3dea8b02e52c20adfc60254ae3d66ea5bc"]} -0;{"root": ["0x3e7","0x101a9ff126cdf2704fdbb9fd0310bae23c7562173ff556b480be9518ddb3d741","0x101a9ff126cdf2704fdbb9fd0310bae23c7562173ff556b480be9518ddb3d741"],"inPathIndices": [999,2,2],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaf": ["0x3e7","0x212ee86a05bd3447f412bd4cbf58fc3dea8b02e52c20adfc60254ae3d66ea5bc","0x212ee86a05bd3447f412bd4cbf58fc3dea8b02e52c20adfc60254ae3d66ea5bc"]} -0;{"root": ["0x3e7","0x101a9ff126cdf2704fdbb9fd0310bae23c7562173ff556b480be9518ddb3d741","0x101a9ff126cdf2704fdbb9fd0310bae23c7562173ff556b480be9518ddb3d741"],"inPathIndices": [999,2,2],"inPathElements": [["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaf": ["0x3e7","0x212ee86a05bd3447f412bd4cbf58fc3dea8b02e52c20adfc60254ae3d66ea5bc","0x212ee86a05bd3447f412bd4cbf58fc3dea8b02e52c20adfc60254ae3d66ea5bc"]} -1;{"root": ["0xf70ba1fe0c7432ebc1723550fb7c4f92887749e34a04fa7f6b9b408e1ab199d","0xf70ba1fe0c7432ebc1723550fb7c4f92887749e34a04fa7f6b9b408e1ab199d","0xf70ba1fe0c7432ebc1723550fb7c4f92887749e34a04fa7f6b9b408e1ab199d","0xf70ba1fe0c7432ebc1723550fb7c4f92887749e34a04fa7f6b9b408e1ab199d"],"inPathIndices": [1,1,1,1],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaf": ["0x3988af2d3bf12f1707d44bee4d79649e6987f30ca5143127892b35e14c0e810","0x3988af2d3bf12f1707d44bee4d79649e6987f30ca5143127892b35e14c0e810","0x3988af2d3bf12f1707d44bee4d79649e6987f30ca5143127892b35e14c0e810","0x3988af2d3bf12f1707d44bee4d79649e6987f30ca5143127892b35e14c0e810"]} -0;{"root": ["0x3e7","0xf70ba1fe0c7432ebc1723550fb7c4f92887749e34a04fa7f6b9b408e1ab199d","0xf70ba1fe0c7432ebc1723550fb7c4f92887749e34a04fa7f6b9b408e1ab199d","0xf70ba1fe0c7432ebc1723550fb7c4f92887749e34a04fa7f6b9b408e1ab199d"],"inPathIndices": [1,1,1,1],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaf": ["0x3988af2d3bf12f1707d44bee4d79649e6987f30ca5143127892b35e14c0e810","0x3988af2d3bf12f1707d44bee4d79649e6987f30ca5143127892b35e14c0e810","0x3988af2d3bf12f1707d44bee4d79649e6987f30ca5143127892b35e14c0e810","0x3988af2d3bf12f1707d44bee4d79649e6987f30ca5143127892b35e14c0e810"]} -0;{"root": ["0x3e7","0xf70ba1fe0c7432ebc1723550fb7c4f92887749e34a04fa7f6b9b408e1ab199d","0xf70ba1fe0c7432ebc1723550fb7c4f92887749e34a04fa7f6b9b408e1ab199d","0xf70ba1fe0c7432ebc1723550fb7c4f92887749e34a04fa7f6b9b408e1ab199d"],"inPathIndices": [1,1,1,1],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaf": ["0x3e7","0x3988af2d3bf12f1707d44bee4d79649e6987f30ca5143127892b35e14c0e810","0x3988af2d3bf12f1707d44bee4d79649e6987f30ca5143127892b35e14c0e810","0x3988af2d3bf12f1707d44bee4d79649e6987f30ca5143127892b35e14c0e810"]} -0;{"root": ["0x3e7","0xf70ba1fe0c7432ebc1723550fb7c4f92887749e34a04fa7f6b9b408e1ab199d","0xf70ba1fe0c7432ebc1723550fb7c4f92887749e34a04fa7f6b9b408e1ab199d","0xf70ba1fe0c7432ebc1723550fb7c4f92887749e34a04fa7f6b9b408e1ab199d"],"inPathIndices": [999,1,1,1],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaf": ["0x3e7","0x3988af2d3bf12f1707d44bee4d79649e6987f30ca5143127892b35e14c0e810","0x3988af2d3bf12f1707d44bee4d79649e6987f30ca5143127892b35e14c0e810","0x3988af2d3bf12f1707d44bee4d79649e6987f30ca5143127892b35e14c0e810"]} -0;{"root": ["0x3e7","0xf70ba1fe0c7432ebc1723550fb7c4f92887749e34a04fa7f6b9b408e1ab199d","0xf70ba1fe0c7432ebc1723550fb7c4f92887749e34a04fa7f6b9b408e1ab199d","0xf70ba1fe0c7432ebc1723550fb7c4f92887749e34a04fa7f6b9b408e1ab199d"],"inPathIndices": [999,1,1,1],"inPathElements": [["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaf": ["0x3e7","0x3988af2d3bf12f1707d44bee4d79649e6987f30ca5143127892b35e14c0e810","0x3988af2d3bf12f1707d44bee4d79649e6987f30ca5143127892b35e14c0e810","0x3988af2d3bf12f1707d44bee4d79649e6987f30ca5143127892b35e14c0e810"]} -1;{"root": ["0x24f0134c93b03f35b5e2d5fad7f6e1b8a5defa34c62e588fc1f05276ad5d1b03"],"inPathIndices": [3],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"]],"leaf": ["0x22cca230e1892f5747ad5eb7257f935a147b6714f568f696e70cf2ec9f5acba6"]} -0;{"root": ["0x3e7"],"inPathIndices": [3],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"]],"leaf": ["0x22cca230e1892f5747ad5eb7257f935a147b6714f568f696e70cf2ec9f5acba6"]} -0;{"root": ["0x3e7"],"inPathIndices": [3],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"]],"leaf": ["0x3e7"]} -0;{"root": ["0x3e7"],"inPathIndices": [999],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"]],"leaf": ["0x3e7"]} -0;{"root": ["0x3e7"],"inPathIndices": [999],"inPathElements": [["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"]],"leaf": ["0x3e7"]} -1;{"root": ["0x1c0f9e85ca8cbfccd445b5c6f614ff31809b15acb2e59ddb74c82a0ce5847fb6","0x1c0f9e85ca8cbfccd445b5c6f614ff31809b15acb2e59ddb74c82a0ce5847fb6"],"inPathIndices": [0,0],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"]],"leaf": ["0x262b05c86039e2332912dd07d49078cda0921f74cde4746d37912052d18c17f6","0x262b05c86039e2332912dd07d49078cda0921f74cde4746d37912052d18c17f6"]} -0;{"root": ["0x3e7","0x1c0f9e85ca8cbfccd445b5c6f614ff31809b15acb2e59ddb74c82a0ce5847fb6"],"inPathIndices": [0,0],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"]],"leaf": ["0x262b05c86039e2332912dd07d49078cda0921f74cde4746d37912052d18c17f6","0x262b05c86039e2332912dd07d49078cda0921f74cde4746d37912052d18c17f6"]} -0;{"root": ["0x3e7","0x1c0f9e85ca8cbfccd445b5c6f614ff31809b15acb2e59ddb74c82a0ce5847fb6"],"inPathIndices": [0,0],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"]],"leaf": ["0x3e7","0x262b05c86039e2332912dd07d49078cda0921f74cde4746d37912052d18c17f6"]} -0;{"root": ["0x3e7","0x1c0f9e85ca8cbfccd445b5c6f614ff31809b15acb2e59ddb74c82a0ce5847fb6"],"inPathIndices": [999,0],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"]],"leaf": ["0x3e7","0x262b05c86039e2332912dd07d49078cda0921f74cde4746d37912052d18c17f6"]} -0;{"root": ["0x3e7","0x1c0f9e85ca8cbfccd445b5c6f614ff31809b15acb2e59ddb74c82a0ce5847fb6"],"inPathIndices": [999,0],"inPathElements": [["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"]],"leaf": ["0x3e7","0x262b05c86039e2332912dd07d49078cda0921f74cde4746d37912052d18c17f6"]} -1;{"root": ["0x1024ec4df75d4df2b1811d0a2d17a0ce6c5ca5c4da9bae22e4cef1e7b540b027","0x1024ec4df75d4df2b1811d0a2d17a0ce6c5ca5c4da9bae22e4cef1e7b540b027","0x1024ec4df75d4df2b1811d0a2d17a0ce6c5ca5c4da9bae22e4cef1e7b540b027"],"inPathIndices": [0,0,0],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"]],"leaf": ["0x127de37ba97a2587287d76c40513f7cf5ac67478404fb4803278ef6e0d8148b6","0x127de37ba97a2587287d76c40513f7cf5ac67478404fb4803278ef6e0d8148b6","0x127de37ba97a2587287d76c40513f7cf5ac67478404fb4803278ef6e0d8148b6"]} -0;{"root": ["0x3e7","0x1024ec4df75d4df2b1811d0a2d17a0ce6c5ca5c4da9bae22e4cef1e7b540b027","0x1024ec4df75d4df2b1811d0a2d17a0ce6c5ca5c4da9bae22e4cef1e7b540b027"],"inPathIndices": [0,0,0],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"]],"leaf": ["0x127de37ba97a2587287d76c40513f7cf5ac67478404fb4803278ef6e0d8148b6","0x127de37ba97a2587287d76c40513f7cf5ac67478404fb4803278ef6e0d8148b6","0x127de37ba97a2587287d76c40513f7cf5ac67478404fb4803278ef6e0d8148b6"]} -0;{"root": ["0x3e7","0x1024ec4df75d4df2b1811d0a2d17a0ce6c5ca5c4da9bae22e4cef1e7b540b027","0x1024ec4df75d4df2b1811d0a2d17a0ce6c5ca5c4da9bae22e4cef1e7b540b027"],"inPathIndices": [0,0,0],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"]],"leaf": ["0x3e7","0x127de37ba97a2587287d76c40513f7cf5ac67478404fb4803278ef6e0d8148b6","0x127de37ba97a2587287d76c40513f7cf5ac67478404fb4803278ef6e0d8148b6"]} -0;{"root": ["0x3e7","0x1024ec4df75d4df2b1811d0a2d17a0ce6c5ca5c4da9bae22e4cef1e7b540b027","0x1024ec4df75d4df2b1811d0a2d17a0ce6c5ca5c4da9bae22e4cef1e7b540b027"],"inPathIndices": [999,0,0],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"]],"leaf": ["0x3e7","0x127de37ba97a2587287d76c40513f7cf5ac67478404fb4803278ef6e0d8148b6","0x127de37ba97a2587287d76c40513f7cf5ac67478404fb4803278ef6e0d8148b6"]} -0;{"root": ["0x3e7","0x1024ec4df75d4df2b1811d0a2d17a0ce6c5ca5c4da9bae22e4cef1e7b540b027","0x1024ec4df75d4df2b1811d0a2d17a0ce6c5ca5c4da9bae22e4cef1e7b540b027"],"inPathIndices": [999,0,0],"inPathElements": [["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"]],"leaf": ["0x3e7","0x127de37ba97a2587287d76c40513f7cf5ac67478404fb4803278ef6e0d8148b6","0x127de37ba97a2587287d76c40513f7cf5ac67478404fb4803278ef6e0d8148b6"]} -1;{"root": ["0x1f3b13683bbc14e97a36902e455a950ca869a57e58bc750fad64902b887c086f","0x1f3b13683bbc14e97a36902e455a950ca869a57e58bc750fad64902b887c086f","0x1f3b13683bbc14e97a36902e455a950ca869a57e58bc750fad64902b887c086f","0x1f3b13683bbc14e97a36902e455a950ca869a57e58bc750fad64902b887c086f"],"inPathIndices": [3,3,3,3],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"]],"leaf": ["0x111808b57d95d8fdb5a946de2a8484abb2bdf3c47cfa7404480de39ecd0f50f2","0x111808b57d95d8fdb5a946de2a8484abb2bdf3c47cfa7404480de39ecd0f50f2","0x111808b57d95d8fdb5a946de2a8484abb2bdf3c47cfa7404480de39ecd0f50f2","0x111808b57d95d8fdb5a946de2a8484abb2bdf3c47cfa7404480de39ecd0f50f2"]} -0;{"root": ["0x3e7","0x1f3b13683bbc14e97a36902e455a950ca869a57e58bc750fad64902b887c086f","0x1f3b13683bbc14e97a36902e455a950ca869a57e58bc750fad64902b887c086f","0x1f3b13683bbc14e97a36902e455a950ca869a57e58bc750fad64902b887c086f"],"inPathIndices": [3,3,3,3],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"]],"leaf": ["0x111808b57d95d8fdb5a946de2a8484abb2bdf3c47cfa7404480de39ecd0f50f2","0x111808b57d95d8fdb5a946de2a8484abb2bdf3c47cfa7404480de39ecd0f50f2","0x111808b57d95d8fdb5a946de2a8484abb2bdf3c47cfa7404480de39ecd0f50f2","0x111808b57d95d8fdb5a946de2a8484abb2bdf3c47cfa7404480de39ecd0f50f2"]} -0;{"root": ["0x3e7","0x1f3b13683bbc14e97a36902e455a950ca869a57e58bc750fad64902b887c086f","0x1f3b13683bbc14e97a36902e455a950ca869a57e58bc750fad64902b887c086f","0x1f3b13683bbc14e97a36902e455a950ca869a57e58bc750fad64902b887c086f"],"inPathIndices": [3,3,3,3],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"]],"leaf": ["0x3e7","0x111808b57d95d8fdb5a946de2a8484abb2bdf3c47cfa7404480de39ecd0f50f2","0x111808b57d95d8fdb5a946de2a8484abb2bdf3c47cfa7404480de39ecd0f50f2","0x111808b57d95d8fdb5a946de2a8484abb2bdf3c47cfa7404480de39ecd0f50f2"]} -0;{"root": ["0x3e7","0x1f3b13683bbc14e97a36902e455a950ca869a57e58bc750fad64902b887c086f","0x1f3b13683bbc14e97a36902e455a950ca869a57e58bc750fad64902b887c086f","0x1f3b13683bbc14e97a36902e455a950ca869a57e58bc750fad64902b887c086f"],"inPathIndices": [999,3,3,3],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"]],"leaf": ["0x3e7","0x111808b57d95d8fdb5a946de2a8484abb2bdf3c47cfa7404480de39ecd0f50f2","0x111808b57d95d8fdb5a946de2a8484abb2bdf3c47cfa7404480de39ecd0f50f2","0x111808b57d95d8fdb5a946de2a8484abb2bdf3c47cfa7404480de39ecd0f50f2"]} -0;{"root": ["0x3e7","0x1f3b13683bbc14e97a36902e455a950ca869a57e58bc750fad64902b887c086f","0x1f3b13683bbc14e97a36902e455a950ca869a57e58bc750fad64902b887c086f","0x1f3b13683bbc14e97a36902e455a950ca869a57e58bc750fad64902b887c086f"],"inPathIndices": [999,3,3,3],"inPathElements": [["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a"]],"leaf": ["0x3e7","0x111808b57d95d8fdb5a946de2a8484abb2bdf3c47cfa7404480de39ecd0f50f2","0x111808b57d95d8fdb5a946de2a8484abb2bdf3c47cfa7404480de39ecd0f50f2","0x111808b57d95d8fdb5a946de2a8484abb2bdf3c47cfa7404480de39ecd0f50f2"]} -1;{"root": ["0x2b99165d7e898d8c8630f308cfc482911caaa5f590db89a5f6f975f40e8f80c1"],"inPathIndices": [5],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"]],"leaf": ["0x2e3a08bcacc16c36dd7d747f6e6ce123e9485bd6c718b7d7931ad47598b8d70d"]} -0;{"root": ["0x3e7"],"inPathIndices": [5],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"]],"leaf": ["0x2e3a08bcacc16c36dd7d747f6e6ce123e9485bd6c718b7d7931ad47598b8d70d"]} -0;{"root": ["0x3e7"],"inPathIndices": [5],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"]],"leaf": ["0x3e7"]} -0;{"root": ["0x3e7"],"inPathIndices": [999],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"]],"leaf": ["0x3e7"]} -0;{"root": ["0x3e7"],"inPathIndices": [999],"inPathElements": [["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"]],"leaf": ["0x3e7"]} -1;{"root": ["0x2613c21c0b319a5ee903b1cfcc3fc4819bbcbbf1a236df16f2bf02a08265da58","0x2613c21c0b319a5ee903b1cfcc3fc4819bbcbbf1a236df16f2bf02a08265da58"],"inPathIndices": [2,2],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"]],"leaf": ["0xbb5bcc107f119d0fc5bd283116b0e399a84eff9e3bc7d0963a6bd0ac9fad432","0xbb5bcc107f119d0fc5bd283116b0e399a84eff9e3bc7d0963a6bd0ac9fad432"]} -0;{"root": ["0x3e7","0x2613c21c0b319a5ee903b1cfcc3fc4819bbcbbf1a236df16f2bf02a08265da58"],"inPathIndices": [2,2],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"]],"leaf": ["0xbb5bcc107f119d0fc5bd283116b0e399a84eff9e3bc7d0963a6bd0ac9fad432","0xbb5bcc107f119d0fc5bd283116b0e399a84eff9e3bc7d0963a6bd0ac9fad432"]} -0;{"root": ["0x3e7","0x2613c21c0b319a5ee903b1cfcc3fc4819bbcbbf1a236df16f2bf02a08265da58"],"inPathIndices": [2,2],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"]],"leaf": ["0x3e7","0xbb5bcc107f119d0fc5bd283116b0e399a84eff9e3bc7d0963a6bd0ac9fad432"]} -0;{"root": ["0x3e7","0x2613c21c0b319a5ee903b1cfcc3fc4819bbcbbf1a236df16f2bf02a08265da58"],"inPathIndices": [999,2],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"]],"leaf": ["0x3e7","0xbb5bcc107f119d0fc5bd283116b0e399a84eff9e3bc7d0963a6bd0ac9fad432"]} -0;{"root": ["0x3e7","0x2613c21c0b319a5ee903b1cfcc3fc4819bbcbbf1a236df16f2bf02a08265da58"],"inPathIndices": [999,2],"inPathElements": [["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"]],"leaf": ["0x3e7","0xbb5bcc107f119d0fc5bd283116b0e399a84eff9e3bc7d0963a6bd0ac9fad432"]} -1;{"root": ["0x26f4a3f6896cd2c28d03244d29bb4385138a5576db3d5708f48704a41abe2a0d","0x26f4a3f6896cd2c28d03244d29bb4385138a5576db3d5708f48704a41abe2a0d","0x26f4a3f6896cd2c28d03244d29bb4385138a5576db3d5708f48704a41abe2a0d"],"inPathIndices": [3,3,3],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"]],"leaf": ["0x1e2504522d990135e1900628532e0284546396f4ba499866c550b9eae05ea586","0x1e2504522d990135e1900628532e0284546396f4ba499866c550b9eae05ea586","0x1e2504522d990135e1900628532e0284546396f4ba499866c550b9eae05ea586"]} -0;{"root": ["0x3e7","0x26f4a3f6896cd2c28d03244d29bb4385138a5576db3d5708f48704a41abe2a0d","0x26f4a3f6896cd2c28d03244d29bb4385138a5576db3d5708f48704a41abe2a0d"],"inPathIndices": [3,3,3],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"]],"leaf": ["0x1e2504522d990135e1900628532e0284546396f4ba499866c550b9eae05ea586","0x1e2504522d990135e1900628532e0284546396f4ba499866c550b9eae05ea586","0x1e2504522d990135e1900628532e0284546396f4ba499866c550b9eae05ea586"]} -0;{"root": ["0x3e7","0x26f4a3f6896cd2c28d03244d29bb4385138a5576db3d5708f48704a41abe2a0d","0x26f4a3f6896cd2c28d03244d29bb4385138a5576db3d5708f48704a41abe2a0d"],"inPathIndices": [3,3,3],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"]],"leaf": ["0x3e7","0x1e2504522d990135e1900628532e0284546396f4ba499866c550b9eae05ea586","0x1e2504522d990135e1900628532e0284546396f4ba499866c550b9eae05ea586"]} -0;{"root": ["0x3e7","0x26f4a3f6896cd2c28d03244d29bb4385138a5576db3d5708f48704a41abe2a0d","0x26f4a3f6896cd2c28d03244d29bb4385138a5576db3d5708f48704a41abe2a0d"],"inPathIndices": [999,3,3],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"]],"leaf": ["0x3e7","0x1e2504522d990135e1900628532e0284546396f4ba499866c550b9eae05ea586","0x1e2504522d990135e1900628532e0284546396f4ba499866c550b9eae05ea586"]} -0;{"root": ["0x3e7","0x26f4a3f6896cd2c28d03244d29bb4385138a5576db3d5708f48704a41abe2a0d","0x26f4a3f6896cd2c28d03244d29bb4385138a5576db3d5708f48704a41abe2a0d"],"inPathIndices": [999,3,3],"inPathElements": [["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"]],"leaf": ["0x3e7","0x1e2504522d990135e1900628532e0284546396f4ba499866c550b9eae05ea586","0x1e2504522d990135e1900628532e0284546396f4ba499866c550b9eae05ea586"]} -1;{"root": ["0x2b070dbfc0d27b775f39749d5f2e1011eaaea837892beeb81c4db8c627c33968","0x2b070dbfc0d27b775f39749d5f2e1011eaaea837892beeb81c4db8c627c33968","0x2b070dbfc0d27b775f39749d5f2e1011eaaea837892beeb81c4db8c627c33968","0x2b070dbfc0d27b775f39749d5f2e1011eaaea837892beeb81c4db8c627c33968"],"inPathIndices": [1,1,1,1],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"]],"leaf": ["0x9045cd0bf38828bd53d73f55e7a0dfa3ee7d0d4cb91d7f0760522d35257f270","0x9045cd0bf38828bd53d73f55e7a0dfa3ee7d0d4cb91d7f0760522d35257f270","0x9045cd0bf38828bd53d73f55e7a0dfa3ee7d0d4cb91d7f0760522d35257f270","0x9045cd0bf38828bd53d73f55e7a0dfa3ee7d0d4cb91d7f0760522d35257f270"]} -0;{"root": ["0x3e7","0x2b070dbfc0d27b775f39749d5f2e1011eaaea837892beeb81c4db8c627c33968","0x2b070dbfc0d27b775f39749d5f2e1011eaaea837892beeb81c4db8c627c33968","0x2b070dbfc0d27b775f39749d5f2e1011eaaea837892beeb81c4db8c627c33968"],"inPathIndices": [1,1,1,1],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"]],"leaf": ["0x9045cd0bf38828bd53d73f55e7a0dfa3ee7d0d4cb91d7f0760522d35257f270","0x9045cd0bf38828bd53d73f55e7a0dfa3ee7d0d4cb91d7f0760522d35257f270","0x9045cd0bf38828bd53d73f55e7a0dfa3ee7d0d4cb91d7f0760522d35257f270","0x9045cd0bf38828bd53d73f55e7a0dfa3ee7d0d4cb91d7f0760522d35257f270"]} -0;{"root": ["0x3e7","0x2b070dbfc0d27b775f39749d5f2e1011eaaea837892beeb81c4db8c627c33968","0x2b070dbfc0d27b775f39749d5f2e1011eaaea837892beeb81c4db8c627c33968","0x2b070dbfc0d27b775f39749d5f2e1011eaaea837892beeb81c4db8c627c33968"],"inPathIndices": [1,1,1,1],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"]],"leaf": ["0x3e7","0x9045cd0bf38828bd53d73f55e7a0dfa3ee7d0d4cb91d7f0760522d35257f270","0x9045cd0bf38828bd53d73f55e7a0dfa3ee7d0d4cb91d7f0760522d35257f270","0x9045cd0bf38828bd53d73f55e7a0dfa3ee7d0d4cb91d7f0760522d35257f270"]} -0;{"root": ["0x3e7","0x2b070dbfc0d27b775f39749d5f2e1011eaaea837892beeb81c4db8c627c33968","0x2b070dbfc0d27b775f39749d5f2e1011eaaea837892beeb81c4db8c627c33968","0x2b070dbfc0d27b775f39749d5f2e1011eaaea837892beeb81c4db8c627c33968"],"inPathIndices": [999,1,1,1],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"]],"leaf": ["0x3e7","0x9045cd0bf38828bd53d73f55e7a0dfa3ee7d0d4cb91d7f0760522d35257f270","0x9045cd0bf38828bd53d73f55e7a0dfa3ee7d0d4cb91d7f0760522d35257f270","0x9045cd0bf38828bd53d73f55e7a0dfa3ee7d0d4cb91d7f0760522d35257f270"]} -0;{"root": ["0x3e7","0x2b070dbfc0d27b775f39749d5f2e1011eaaea837892beeb81c4db8c627c33968","0x2b070dbfc0d27b775f39749d5f2e1011eaaea837892beeb81c4db8c627c33968","0x2b070dbfc0d27b775f39749d5f2e1011eaaea837892beeb81c4db8c627c33968"],"inPathIndices": [999,1,1,1],"inPathElements": [["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55"]],"leaf": ["0x3e7","0x9045cd0bf38828bd53d73f55e7a0dfa3ee7d0d4cb91d7f0760522d35257f270","0x9045cd0bf38828bd53d73f55e7a0dfa3ee7d0d4cb91d7f0760522d35257f270","0x9045cd0bf38828bd53d73f55e7a0dfa3ee7d0d4cb91d7f0760522d35257f270"]} -1;{"root": ["0xd1eb7bd24e1dccfa485bfa91ce4b39e431a9470b232b3843bc8114e23feacee"],"inPathIndices": [2],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"]],"leaf": ["0x293a1015f8494633c4bd285be6aec5984e1e19ac8908bb4a4cf986aa63961f66"]} -0;{"root": ["0x3e7"],"inPathIndices": [2],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"]],"leaf": ["0x293a1015f8494633c4bd285be6aec5984e1e19ac8908bb4a4cf986aa63961f66"]} -0;{"root": ["0x3e7"],"inPathIndices": [2],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"]],"leaf": ["0x3e7"]} -0;{"root": ["0x3e7"],"inPathIndices": [999],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"]],"leaf": ["0x3e7"]} -0;{"root": ["0x3e7"],"inPathIndices": [999],"inPathElements": [["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"]],"leaf": ["0x3e7"]} -1;{"root": ["0x23f44fd2e2615669b0d99069c31a104e2357ee000f822480a93b62335b02ef5d","0x23f44fd2e2615669b0d99069c31a104e2357ee000f822480a93b62335b02ef5d"],"inPathIndices": [3,3],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"]],"leaf": ["0x9dbfbca8cae5a62aacd2a9432fffd651bc7792c08270d36c41eefae30c71255","0x9dbfbca8cae5a62aacd2a9432fffd651bc7792c08270d36c41eefae30c71255"]} -0;{"root": ["0x3e7","0x23f44fd2e2615669b0d99069c31a104e2357ee000f822480a93b62335b02ef5d"],"inPathIndices": [3,3],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"]],"leaf": ["0x9dbfbca8cae5a62aacd2a9432fffd651bc7792c08270d36c41eefae30c71255","0x9dbfbca8cae5a62aacd2a9432fffd651bc7792c08270d36c41eefae30c71255"]} -0;{"root": ["0x3e7","0x23f44fd2e2615669b0d99069c31a104e2357ee000f822480a93b62335b02ef5d"],"inPathIndices": [3,3],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"]],"leaf": ["0x3e7","0x9dbfbca8cae5a62aacd2a9432fffd651bc7792c08270d36c41eefae30c71255"]} -0;{"root": ["0x3e7","0x23f44fd2e2615669b0d99069c31a104e2357ee000f822480a93b62335b02ef5d"],"inPathIndices": [999,3],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"]],"leaf": ["0x3e7","0x9dbfbca8cae5a62aacd2a9432fffd651bc7792c08270d36c41eefae30c71255"]} -0;{"root": ["0x3e7","0x23f44fd2e2615669b0d99069c31a104e2357ee000f822480a93b62335b02ef5d"],"inPathIndices": [999,3],"inPathElements": [["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"]],"leaf": ["0x3e7","0x9dbfbca8cae5a62aacd2a9432fffd651bc7792c08270d36c41eefae30c71255"]} -1;{"root": ["0x2a3074adad236c307a3bc9e10484d7bc893ca38507857cf1b067516d73bbc91b","0x2a3074adad236c307a3bc9e10484d7bc893ca38507857cf1b067516d73bbc91b","0x2a3074adad236c307a3bc9e10484d7bc893ca38507857cf1b067516d73bbc91b"],"inPathIndices": [4,4,4],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"]],"leaf": ["0x242863266626ea8cd8da6dd525ff881e90541541010e41d9ff0a442df6aee4e9","0x242863266626ea8cd8da6dd525ff881e90541541010e41d9ff0a442df6aee4e9","0x242863266626ea8cd8da6dd525ff881e90541541010e41d9ff0a442df6aee4e9"]} -0;{"root": ["0x3e7","0x2a3074adad236c307a3bc9e10484d7bc893ca38507857cf1b067516d73bbc91b","0x2a3074adad236c307a3bc9e10484d7bc893ca38507857cf1b067516d73bbc91b"],"inPathIndices": [4,4,4],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"]],"leaf": ["0x242863266626ea8cd8da6dd525ff881e90541541010e41d9ff0a442df6aee4e9","0x242863266626ea8cd8da6dd525ff881e90541541010e41d9ff0a442df6aee4e9","0x242863266626ea8cd8da6dd525ff881e90541541010e41d9ff0a442df6aee4e9"]} -0;{"root": ["0x3e7","0x2a3074adad236c307a3bc9e10484d7bc893ca38507857cf1b067516d73bbc91b","0x2a3074adad236c307a3bc9e10484d7bc893ca38507857cf1b067516d73bbc91b"],"inPathIndices": [4,4,4],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"]],"leaf": ["0x3e7","0x242863266626ea8cd8da6dd525ff881e90541541010e41d9ff0a442df6aee4e9","0x242863266626ea8cd8da6dd525ff881e90541541010e41d9ff0a442df6aee4e9"]} -0;{"root": ["0x3e7","0x2a3074adad236c307a3bc9e10484d7bc893ca38507857cf1b067516d73bbc91b","0x2a3074adad236c307a3bc9e10484d7bc893ca38507857cf1b067516d73bbc91b"],"inPathIndices": [999,4,4],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"]],"leaf": ["0x3e7","0x242863266626ea8cd8da6dd525ff881e90541541010e41d9ff0a442df6aee4e9","0x242863266626ea8cd8da6dd525ff881e90541541010e41d9ff0a442df6aee4e9"]} -0;{"root": ["0x3e7","0x2a3074adad236c307a3bc9e10484d7bc893ca38507857cf1b067516d73bbc91b","0x2a3074adad236c307a3bc9e10484d7bc893ca38507857cf1b067516d73bbc91b"],"inPathIndices": [999,4,4],"inPathElements": [["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"]],"leaf": ["0x3e7","0x242863266626ea8cd8da6dd525ff881e90541541010e41d9ff0a442df6aee4e9","0x242863266626ea8cd8da6dd525ff881e90541541010e41d9ff0a442df6aee4e9"]} -1;{"root": ["0x1e95c76244e27606ba1ab7d62cb697f609bcf2d56040a8c05f6a407882857860","0x1e95c76244e27606ba1ab7d62cb697f609bcf2d56040a8c05f6a407882857860","0x1e95c76244e27606ba1ab7d62cb697f609bcf2d56040a8c05f6a407882857860","0x1e95c76244e27606ba1ab7d62cb697f609bcf2d56040a8c05f6a407882857860"],"inPathIndices": [4,4,4,4],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"]],"leaf": ["0x4475f39ac139fb547bfa464399b100826a4e4bbfcefdeccfdd60dab6ed0e580","0x4475f39ac139fb547bfa464399b100826a4e4bbfcefdeccfdd60dab6ed0e580","0x4475f39ac139fb547bfa464399b100826a4e4bbfcefdeccfdd60dab6ed0e580","0x4475f39ac139fb547bfa464399b100826a4e4bbfcefdeccfdd60dab6ed0e580"]} -0;{"root": ["0x3e7","0x1e95c76244e27606ba1ab7d62cb697f609bcf2d56040a8c05f6a407882857860","0x1e95c76244e27606ba1ab7d62cb697f609bcf2d56040a8c05f6a407882857860","0x1e95c76244e27606ba1ab7d62cb697f609bcf2d56040a8c05f6a407882857860"],"inPathIndices": [4,4,4,4],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"]],"leaf": ["0x4475f39ac139fb547bfa464399b100826a4e4bbfcefdeccfdd60dab6ed0e580","0x4475f39ac139fb547bfa464399b100826a4e4bbfcefdeccfdd60dab6ed0e580","0x4475f39ac139fb547bfa464399b100826a4e4bbfcefdeccfdd60dab6ed0e580","0x4475f39ac139fb547bfa464399b100826a4e4bbfcefdeccfdd60dab6ed0e580"]} -0;{"root": ["0x3e7","0x1e95c76244e27606ba1ab7d62cb697f609bcf2d56040a8c05f6a407882857860","0x1e95c76244e27606ba1ab7d62cb697f609bcf2d56040a8c05f6a407882857860","0x1e95c76244e27606ba1ab7d62cb697f609bcf2d56040a8c05f6a407882857860"],"inPathIndices": [4,4,4,4],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"]],"leaf": ["0x3e7","0x4475f39ac139fb547bfa464399b100826a4e4bbfcefdeccfdd60dab6ed0e580","0x4475f39ac139fb547bfa464399b100826a4e4bbfcefdeccfdd60dab6ed0e580","0x4475f39ac139fb547bfa464399b100826a4e4bbfcefdeccfdd60dab6ed0e580"]} -0;{"root": ["0x3e7","0x1e95c76244e27606ba1ab7d62cb697f609bcf2d56040a8c05f6a407882857860","0x1e95c76244e27606ba1ab7d62cb697f609bcf2d56040a8c05f6a407882857860","0x1e95c76244e27606ba1ab7d62cb697f609bcf2d56040a8c05f6a407882857860"],"inPathIndices": [999,4,4,4],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"]],"leaf": ["0x3e7","0x4475f39ac139fb547bfa464399b100826a4e4bbfcefdeccfdd60dab6ed0e580","0x4475f39ac139fb547bfa464399b100826a4e4bbfcefdeccfdd60dab6ed0e580","0x4475f39ac139fb547bfa464399b100826a4e4bbfcefdeccfdd60dab6ed0e580"]} -0;{"root": ["0x3e7","0x1e95c76244e27606ba1ab7d62cb697f609bcf2d56040a8c05f6a407882857860","0x1e95c76244e27606ba1ab7d62cb697f609bcf2d56040a8c05f6a407882857860","0x1e95c76244e27606ba1ab7d62cb697f609bcf2d56040a8c05f6a407882857860"],"inPathIndices": [999,4,4,4],"inPathElements": [["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78"]],"leaf": ["0x3e7","0x4475f39ac139fb547bfa464399b100826a4e4bbfcefdeccfdd60dab6ed0e580","0x4475f39ac139fb547bfa464399b100826a4e4bbfcefdeccfdd60dab6ed0e580","0x4475f39ac139fb547bfa464399b100826a4e4bbfcefdeccfdd60dab6ed0e580"]} -1;{"root": ["0x2d51fb0341e6f74e4cc6bee3c50732bab3d0821d45e2dcab74266800d8b8b294"],"inPathIndices": [2],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"]],"leaf": ["0x24d687d8c926aed0dbef794d8dac1803d05a252d627c5e16a72a68d6e372a01a"]} -0;{"root": ["0x3e7"],"inPathIndices": [2],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"]],"leaf": ["0x24d687d8c926aed0dbef794d8dac1803d05a252d627c5e16a72a68d6e372a01a"]} -0;{"root": ["0x3e7"],"inPathIndices": [2],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"]],"leaf": ["0x3e7"]} -0;{"root": ["0x3e7"],"inPathIndices": [999],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"]],"leaf": ["0x3e7"]} -0;{"root": ["0x3e7"],"inPathIndices": [999],"inPathElements": [["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"]],"leaf": ["0x3e7"]} -1;{"root": ["0x2ec3de36c28dc512a3fb7b2a2ebbc684e45deda50ffb7be393f0ee73026a9c90","0x2ec3de36c28dc512a3fb7b2a2ebbc684e45deda50ffb7be393f0ee73026a9c90"],"inPathIndices": [0,0],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"]],"leaf": ["0x2088beff98fe0160c66531f4e8ad9756ca0bbc90ed99a2118ded7d7b2b70f2ab","0x2088beff98fe0160c66531f4e8ad9756ca0bbc90ed99a2118ded7d7b2b70f2ab"]} -0;{"root": ["0x3e7","0x2ec3de36c28dc512a3fb7b2a2ebbc684e45deda50ffb7be393f0ee73026a9c90"],"inPathIndices": [0,0],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"]],"leaf": ["0x2088beff98fe0160c66531f4e8ad9756ca0bbc90ed99a2118ded7d7b2b70f2ab","0x2088beff98fe0160c66531f4e8ad9756ca0bbc90ed99a2118ded7d7b2b70f2ab"]} -0;{"root": ["0x3e7","0x2ec3de36c28dc512a3fb7b2a2ebbc684e45deda50ffb7be393f0ee73026a9c90"],"inPathIndices": [0,0],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"]],"leaf": ["0x3e7","0x2088beff98fe0160c66531f4e8ad9756ca0bbc90ed99a2118ded7d7b2b70f2ab"]} -0;{"root": ["0x3e7","0x2ec3de36c28dc512a3fb7b2a2ebbc684e45deda50ffb7be393f0ee73026a9c90"],"inPathIndices": [999,0],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"]],"leaf": ["0x3e7","0x2088beff98fe0160c66531f4e8ad9756ca0bbc90ed99a2118ded7d7b2b70f2ab"]} -0;{"root": ["0x3e7","0x2ec3de36c28dc512a3fb7b2a2ebbc684e45deda50ffb7be393f0ee73026a9c90"],"inPathIndices": [999,0],"inPathElements": [["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"]],"leaf": ["0x3e7","0x2088beff98fe0160c66531f4e8ad9756ca0bbc90ed99a2118ded7d7b2b70f2ab"]} -1;{"root": ["0x27a29bd08037d9feaf946c1a8016aaeb0b4951619784dd7a6b032a162762c043","0x27a29bd08037d9feaf946c1a8016aaeb0b4951619784dd7a6b032a162762c043","0x27a29bd08037d9feaf946c1a8016aaeb0b4951619784dd7a6b032a162762c043"],"inPathIndices": [3,3,3],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"]],"leaf": ["0xb530053e76fccb831e81f0aa3034b2d764b87fb747cef4a42e0a1f5a1df9c3c","0xb530053e76fccb831e81f0aa3034b2d764b87fb747cef4a42e0a1f5a1df9c3c","0xb530053e76fccb831e81f0aa3034b2d764b87fb747cef4a42e0a1f5a1df9c3c"]} -0;{"root": ["0x3e7","0x27a29bd08037d9feaf946c1a8016aaeb0b4951619784dd7a6b032a162762c043","0x27a29bd08037d9feaf946c1a8016aaeb0b4951619784dd7a6b032a162762c043"],"inPathIndices": [3,3,3],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"]],"leaf": ["0xb530053e76fccb831e81f0aa3034b2d764b87fb747cef4a42e0a1f5a1df9c3c","0xb530053e76fccb831e81f0aa3034b2d764b87fb747cef4a42e0a1f5a1df9c3c","0xb530053e76fccb831e81f0aa3034b2d764b87fb747cef4a42e0a1f5a1df9c3c"]} -0;{"root": ["0x3e7","0x27a29bd08037d9feaf946c1a8016aaeb0b4951619784dd7a6b032a162762c043","0x27a29bd08037d9feaf946c1a8016aaeb0b4951619784dd7a6b032a162762c043"],"inPathIndices": [3,3,3],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"]],"leaf": ["0x3e7","0xb530053e76fccb831e81f0aa3034b2d764b87fb747cef4a42e0a1f5a1df9c3c","0xb530053e76fccb831e81f0aa3034b2d764b87fb747cef4a42e0a1f5a1df9c3c"]} -0;{"root": ["0x3e7","0x27a29bd08037d9feaf946c1a8016aaeb0b4951619784dd7a6b032a162762c043","0x27a29bd08037d9feaf946c1a8016aaeb0b4951619784dd7a6b032a162762c043"],"inPathIndices": [999,3,3],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"]],"leaf": ["0x3e7","0xb530053e76fccb831e81f0aa3034b2d764b87fb747cef4a42e0a1f5a1df9c3c","0xb530053e76fccb831e81f0aa3034b2d764b87fb747cef4a42e0a1f5a1df9c3c"]} -0;{"root": ["0x3e7","0x27a29bd08037d9feaf946c1a8016aaeb0b4951619784dd7a6b032a162762c043","0x27a29bd08037d9feaf946c1a8016aaeb0b4951619784dd7a6b032a162762c043"],"inPathIndices": [999,3,3],"inPathElements": [["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"]],"leaf": ["0x3e7","0xb530053e76fccb831e81f0aa3034b2d764b87fb747cef4a42e0a1f5a1df9c3c","0xb530053e76fccb831e81f0aa3034b2d764b87fb747cef4a42e0a1f5a1df9c3c"]} -1;{"root": ["0xadcce8d93aed9fa23efe7663b02b794a5e9386973892b23d462210512838011","0xadcce8d93aed9fa23efe7663b02b794a5e9386973892b23d462210512838011","0xadcce8d93aed9fa23efe7663b02b794a5e9386973892b23d462210512838011","0xadcce8d93aed9fa23efe7663b02b794a5e9386973892b23d462210512838011"],"inPathIndices": [4,4,4,4],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"]],"leaf": ["0x2d14dcb388a6678e5482d0a6ba25da4000a9196b2673f4312831877eb115486d","0x2d14dcb388a6678e5482d0a6ba25da4000a9196b2673f4312831877eb115486d","0x2d14dcb388a6678e5482d0a6ba25da4000a9196b2673f4312831877eb115486d","0x2d14dcb388a6678e5482d0a6ba25da4000a9196b2673f4312831877eb115486d"]} -0;{"root": ["0x3e7","0xadcce8d93aed9fa23efe7663b02b794a5e9386973892b23d462210512838011","0xadcce8d93aed9fa23efe7663b02b794a5e9386973892b23d462210512838011","0xadcce8d93aed9fa23efe7663b02b794a5e9386973892b23d462210512838011"],"inPathIndices": [4,4,4,4],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"]],"leaf": ["0x2d14dcb388a6678e5482d0a6ba25da4000a9196b2673f4312831877eb115486d","0x2d14dcb388a6678e5482d0a6ba25da4000a9196b2673f4312831877eb115486d","0x2d14dcb388a6678e5482d0a6ba25da4000a9196b2673f4312831877eb115486d","0x2d14dcb388a6678e5482d0a6ba25da4000a9196b2673f4312831877eb115486d"]} -0;{"root": ["0x3e7","0xadcce8d93aed9fa23efe7663b02b794a5e9386973892b23d462210512838011","0xadcce8d93aed9fa23efe7663b02b794a5e9386973892b23d462210512838011","0xadcce8d93aed9fa23efe7663b02b794a5e9386973892b23d462210512838011"],"inPathIndices": [4,4,4,4],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"]],"leaf": ["0x3e7","0x2d14dcb388a6678e5482d0a6ba25da4000a9196b2673f4312831877eb115486d","0x2d14dcb388a6678e5482d0a6ba25da4000a9196b2673f4312831877eb115486d","0x2d14dcb388a6678e5482d0a6ba25da4000a9196b2673f4312831877eb115486d"]} -0;{"root": ["0x3e7","0xadcce8d93aed9fa23efe7663b02b794a5e9386973892b23d462210512838011","0xadcce8d93aed9fa23efe7663b02b794a5e9386973892b23d462210512838011","0xadcce8d93aed9fa23efe7663b02b794a5e9386973892b23d462210512838011"],"inPathIndices": [999,4,4,4],"inPathElements": [["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"]],"leaf": ["0x3e7","0x2d14dcb388a6678e5482d0a6ba25da4000a9196b2673f4312831877eb115486d","0x2d14dcb388a6678e5482d0a6ba25da4000a9196b2673f4312831877eb115486d","0x2d14dcb388a6678e5482d0a6ba25da4000a9196b2673f4312831877eb115486d"]} -0;{"root": ["0x3e7","0xadcce8d93aed9fa23efe7663b02b794a5e9386973892b23d462210512838011","0xadcce8d93aed9fa23efe7663b02b794a5e9386973892b23d462210512838011","0xadcce8d93aed9fa23efe7663b02b794a5e9386973892b23d462210512838011"],"inPathIndices": [999,4,4,4],"inPathElements": [["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238","0x7f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a","0x2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55","0x2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78","0x78295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d"]],"leaf": ["0x3e7","0x2d14dcb388a6678e5482d0a6ba25da4000a9196b2673f4312831877eb115486d","0x2d14dcb388a6678e5482d0a6ba25da4000a9196b2673f4312831877eb115486d","0x2d14dcb388a6678e5482d0a6ba25da4000a9196b2673f4312831877eb115486d"]} +1;{"roots":["0x2d3374e220f0a958f59afa8c423f17a38353160b01a04658d79757fb53f04822"],"inPathIndices":[0],"inPathElements":[["0x0"]],"leaves":["0x480c57b1b899cd957999f5ff5b61046cee9ab55e39ee9c2486b531766ccff20"]} +0;{"roots":["0x3e7"],"inPathIndices":[0],"inPathElements":[["0x0"]],"leaves":["0xc94d037289b9be1258a1d97a9e844bc5bd815223f35ed38c2a1b563445f81f5"]} +0;{"roots":["0x3d4987ffcdde6082e78070dc1fbfa2487fbe40b14130f11a8d854fc10317b5e"],"inPathIndices":[0],"inPathElements":[["0x0"]],"leaves":["0x3e7"]} +0;{"roots":["0x93dccd08d29768bf61f3a0c33f86c81999960f6adeb3c44e747ad386494d83d"],"inPathIndices":[999],"inPathElements":[["0x0"]],"leaves":["0x2101f991d22c3e60df8f3976c645e0cdbe2315b0a4c586042d87be46618b67cc"]} +0;{"roots":["0x1c0380a4a14712c16e1086e08a3dbe232dbc88a23d8036b762fb74c8b4638c2d"],"inPathIndices":[0],"inPathElements":[["0x3e7"]],"leaves":["0x2361863408be64b6c00837bc4d1d994ea506e5858ab0408fa8810fc88df46675"]} +1;{"roots":["0x153ecf16b428ba51da5a8aabb1779fee553e207a62c84eea6b6d0eac6f62d951","0x153ecf16b428ba51da5a8aabb1779fee553e207a62c84eea6b6d0eac6f62d951"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"leaves":["0x1ef339d7a389764814ff940efc6a7a1b1c634df4cfb66fc8d9f7e7a222d4f04f","0x1ef339d7a389764814ff940efc6a7a1b1c634df4cfb66fc8d9f7e7a222d4f04f"]} +0;{"roots":["0x3e7","0xfa6980c81f602ffe377de2ae5453f9170eb03d3bbed049966c5c67e3b83a397"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"leaves":["0x14a05ffe3607ef57545e659ba231fd4c1111a4484a1238360510205be88b938e","0x14a05ffe3607ef57545e659ba231fd4c1111a4484a1238360510205be88b938e"]} +0;{"roots":["0x1e780ce491259e9a68d7f06148f1bf8aa0fe79bdcd58fe27d582db3da3b7f12e","0x1e780ce491259e9a68d7f06148f1bf8aa0fe79bdcd58fe27d582db3da3b7f12e"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"leaves":["0x3e7","0xf0f8fb6e43223282c432e77b140a84bbd09b138d25c65cc5dc390744b22018c"]} +0;{"roots":["0x1124ec5561dd5e45b74f73ce9a682545777f46ce087797cf2e86475d5fd9e0e6","0x1124ec5561dd5e45b74f73ce9a682545777f46ce087797cf2e86475d5fd9e0e6"],"inPathIndices":[999,0],"inPathElements":[["0x0"],["0x0"]],"leaves":["0x66f1eb3451ec984be747e87c2b53df9a3ecd0d152b2ba763ed20daa4065f22f","0x66f1eb3451ec984be747e87c2b53df9a3ecd0d152b2ba763ed20daa4065f22f"]} +0;{"roots":["0x4083e9a39dfc27355f931bc46452fc543c0427dce4bafe7168442cd3f29ba38","0x4083e9a39dfc27355f931bc46452fc543c0427dce4bafe7168442cd3f29ba38"],"inPathIndices":[0,0],"inPathElements":[["0x3e7"],["0x3e7"]],"leaves":["0x23b3bac0e0bcac079b4dee071fb8009bb296ff2ebaa55e7108b421b0a57199a1","0x23b3bac0e0bcac079b4dee071fb8009bb296ff2ebaa55e7108b421b0a57199a1"]} +1;{"roots":["0x6de0a8b8adb0f3b56d1ee71b5f71d7f091d9a472c9a4ac3581ba6d0db6ba72a"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x770f06f5d221c1f0a8d3d1a7014896d9f1e689f2477640c0b699486c09090b6"]} +0;{"roots":["0x3e7"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x2f486305c71aba2943dba4f7c0db0451328d0c4444f0d9695c36f69804f476ca"]} +0;{"roots":["0x240522cef9fa24c09913aff4494c78533365923e325b9e6d28449a419661485f"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x3e7"]} +0;{"roots":["0x1f3fe853129fd15b3326c7e34059a7498629aca0697b00679407f984f3c523f"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x25162e3bc72db086fea915f6c0bf10e6c5c67d5ba5dccff8af7267907d4e4b75"]} +0;{"roots":["0x24a3e5927430bf08fbe58047a874249bf02d25c33fad1ebfef10e20c742305b8"],"inPathIndices":[0],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x2c01ccbfaa1e77e243d1c1db4330a7fa4e790e7c1c3f3dd552609214684370f4"]} +1;{"roots":["0x1add27ef6a8f877b204226a75e8245196a8577363e19506888a0438bd107b7dd","0x1add27ef6a8f877b204226a75e8245196a8577363e19506888a0438bd107b7dd"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x1085be09b92bda7ded4de4368f622b5b42666da75033d2b3121744c036798dc1","0x1085be09b92bda7ded4de4368f622b5b42666da75033d2b3121744c036798dc1"]} +0;{"roots":["0x3e7","0x2d9d1144efd45316fe2fb3019d00a5869f2558ddfe5de2023aa03fe0ce127f37"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0xf147cdc5ed24c7d19ddef9581cc2285bc32003b7f1140b91871b457ef1d37ee","0xf147cdc5ed24c7d19ddef9581cc2285bc32003b7f1140b91871b457ef1d37ee"]} +0;{"roots":["0xa36e5b43b315eee47df2b4b171e882cda4ecee6a554928eb75f4e9d471f3a1f","0xa36e5b43b315eee47df2b4b171e882cda4ecee6a554928eb75f4e9d471f3a1f"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x3e7","0x23ff470f020b78b1d4b558cb562b5e194dfb869bc4635cf309f11a4f77ff78c2"]} +0;{"roots":["0x285a786f7ef3ec5cc0e53755b1b3cf5d4caa6d961883720fd2cf6d894b8c2951","0x285a786f7ef3ec5cc0e53755b1b3cf5d4caa6d961883720fd2cf6d894b8c2951"],"inPathIndices":[999,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x89daa30907a9202a95be3f9795dd36d73d1505bc882de362a792666fb69633e","0x89daa30907a9202a95be3f9795dd36d73d1505bc882de362a792666fb69633e"]} +0;{"roots":["0x2060b11eb7d37971811460df8bd24ba16dd34cb20501760aa6989042098e4b0f","0x2060b11eb7d37971811460df8bd24ba16dd34cb20501760aa6989042098e4b0f"],"inPathIndices":[0,0],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"leaves":["0x1f52889eae4db41bef55987c467d6ee3ef13f65f5acc6f19d44dc2fe47e32870","0x1f52889eae4db41bef55987c467d6ee3ef13f65f5acc6f19d44dc2fe47e32870"]} +1;{"roots":["0x2b3e297622eabfa97525862bd40abe32dd4e80f24ec1a14281bbc779ed9860bb"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x3f3b65d48ee38c446fc4b2383ba1c5ef56789b2ea911c5457b1bab5f8e6d015"]} +0;{"roots":["0x3e7"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x1dbdd6083ef1e1fbc490f5d94010b4d64451ca213a45215c8dd4c7d3a2098479"]} +0;{"roots":["0x2997c510c94e5e3fa186a85b0756c270b20a0032d79a085013c602738660db24"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x3e7"]} +0;{"roots":["0x1c47a6ec3ce15ef5c4a9e97411d71d5ef29aa47182641b0209b3aa0b7c70ca48"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0xdc43e327ab1f8be1168717daff9f5a4ed20336d3d375f77a3429467f524cb6f"]} +0;{"roots":["0x3a26d36ba92a840c0e05649b558266cd0c9e7efd76abea0f12dab86b6371d7a"],"inPathIndices":[2],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0xac686eb83300d5941ae67b8cb540e0661e85dcf958bc89734a0a318b82eb41"]} +1;{"roots":["0x12c27774f9577b470b490939bf28d1f1d615645e29b7f3dd8757c115cefceb6f","0x12c27774f9577b470b490939bf28d1f1d615645e29b7f3dd8757c115cefceb6f"],"inPathIndices":[2,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x188cdda073bda000a08c8bdd5cdeb1ffd8f8456325d908b663a264f1dfc10fad","0x188cdda073bda000a08c8bdd5cdeb1ffd8f8456325d908b663a264f1dfc10fad"]} +0;{"roots":["0x3e7","0x25411ce1b19be8b20f8f2f6029e8584c9f0468ba3317a82efd3487be1e1ccd62"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x8c9546f18b383a28104a1051dcad355e88611499249a5ec5bef84574408f6fe","0x8c9546f18b383a28104a1051dcad355e88611499249a5ec5bef84574408f6fe"]} +0;{"roots":["0x296a603d8b7733c0cc1ac0799c8478234cbf82ea9a90c2e05143feff48cfa89b","0x296a603d8b7733c0cc1ac0799c8478234cbf82ea9a90c2e05143feff48cfa89b"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x3e7","0x2f312f0faefbf6182228bf80ee0da6a2c8f8a1c2fcb2af25915240a89ab55c2"]} +0;{"roots":["0x185729651d25b12f08e1d13de9d4a208e98901791805f68fdbdfd4cbeec2664b","0x185729651d25b12f08e1d13de9d4a208e98901791805f68fdbdfd4cbeec2664b"],"inPathIndices":[999,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x13f7ea939021efd2ed79863eacf6e3ad8ce1a5f7fc4ba49b4ce836b9634ff930","0x13f7ea939021efd2ed79863eacf6e3ad8ce1a5f7fc4ba49b4ce836b9634ff930"]} +0;{"roots":["0x2f213bfdf9363a9497a647efacc1207648459bb0e8c84a078439cc048255ea5c","0x2f213bfdf9363a9497a647efacc1207648459bb0e8c84a078439cc048255ea5c"],"inPathIndices":[0,0],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"leaves":["0x244262352ec0c8691bebdb90b010401874906d289c6c4f6138f7b2b9e365f114","0x244262352ec0c8691bebdb90b010401874906d289c6c4f6138f7b2b9e365f114"]} +1;{"roots":["0x1faaa33170de2baecb5e92d34ff3393b0bfde03c52d216ea047f1c3bb7be10a6"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x587713d012decace6c316a76908bde3276289d95bbc2078fd7949c35955ac21"]} +0;{"roots":["0x3e7"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x16b18ae5be0b15712fccd32079b1482d1fe7967298a5f5461390918c50f45333"]} +0;{"roots":["0x2c940b66dc83a8fa8342ca04725842840e7aff2420d23922ccfe65c127e99827"],"inPathIndices":[2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x3e7"]} +0;{"roots":["0x1e404f204598926e5a1432132bc9463775d0953bb155a6dcfb67224d0ee83655"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x16eafb46e9005d48403f23f4cb54c8bd8fc5da6ee6546f17ba92710aa17e489b"]} +0;{"roots":["0xeaa8af4744edf800790b4ca0979d4946451e16636e9bb03aa165010d24f4717"],"inPathIndices":[0],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x3051e826a60cfe791bf991d523d9e935e54a66c370ccfa3b07e3cc8cbe41c46c"]} +1;{"roots":["0x26ca8a74e6614aab290c50331d758daa581e793c06998c7fe1e8f1ea04f098e7","0x26ca8a74e6614aab290c50331d758daa581e793c06998c7fe1e8f1ea04f098e7"],"inPathIndices":[2,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x25339d51afc1ec52b79455d7ca498ef939a39d9351be8db3613d7dabb262fc5d","0x25339d51afc1ec52b79455d7ca498ef939a39d9351be8db3613d7dabb262fc5d"]} +0;{"roots":["0x3e7","0x20076c4a8ef9689b19a86952ca59a811ba53d96d4efa8d1eac3407c5dd9e8ea9"],"inPathIndices":[3,3],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0xb621d9f24a9a3bce1b736d2a422690ddcd70623db74f6961cf4a4466c584dbe","0xb621d9f24a9a3bce1b736d2a422690ddcd70623db74f6961cf4a4466c584dbe"]} +0;{"roots":["0xbc066ad94b429b8f168ffc4f9f8023f582ac36caacfa2809521f489882ec7b2","0xbc066ad94b429b8f168ffc4f9f8023f582ac36caacfa2809521f489882ec7b2"],"inPathIndices":[0,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x3e7","0x68b32cd16577b51986379f4743bf3d03314b727706d60dd7939805ddcde1230"]} +0;{"roots":["0x1c5e169b0857d727684379749ca8057550f94514587b0b2611638e1d6ac2cb95","0x1c5e169b0857d727684379749ca8057550f94514587b0b2611638e1d6ac2cb95"],"inPathIndices":[999,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x2d466546ae2fd128f9ee79357cc053ef8a58f7795f766227e9168a0833f5c3cf","0x2d466546ae2fd128f9ee79357cc053ef8a58f7795f766227e9168a0833f5c3cf"]} +0;{"roots":["0x88bf38ded337f11f5a3415906f2b5148bb7c940f5ed2f0a947acd3b95d016de","0x88bf38ded337f11f5a3415906f2b5148bb7c940f5ed2f0a947acd3b95d016de"],"inPathIndices":[0,0],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"leaves":["0x2b5c121a0d3f688e8282bde327a93a2a384525bb22abb5e3aaf114240ad89825","0x2b5c121a0d3f688e8282bde327a93a2a384525bb22abb5e3aaf114240ad89825"]} \ No newline at end of file diff --git a/gnark-prover/test-data/non_inclusion.csv b/gnark-prover/test-data/non_inclusion.csv new file mode 100644 index 0000000000..2a30787069 --- /dev/null +++ b/gnark-prover/test-data/non_inclusion.csv @@ -0,0 +1,48 @@ +1;{"roots":["0x35f0dbf127f3024a8426f22ec9f18823fdca4d09c85193b3a4717236869f56"],"inPathIndices":[0],"inPathElements":[["0x0"]],"values":["0x1d7"],"leafLowerRangeValues":["0x1d6"],"leafHigherRangeValues":["0x1d8"],"leafIndices":[0]} +0;{"roots":["0x3e7"],"inPathIndices":[0],"inPathElements":[["0x0"]],"values":["0x20f"],"leafLowerRangeValues":["0x20e"],"leafHigherRangeValues":["0x210"],"leafIndices":[0]} +0;{"roots":["0x2fa87ca80c25ca7ccd8a2ab97b278d8e705df725de6e7fc82276e990203dd6a5"],"inPathIndices":[0],"inPathElements":[["0x0"]],"values":["0x108"],"leafLowerRangeValues":["0x109"],"leafHigherRangeValues":["0x10b"],"leafIndices":[1]} +0;{"roots":["0x1f3cddca1082ce9f3242c3bfe5493bd721541725d86a715fa25ba28b0b57d3ce"],"inPathIndices":[0],"inPathElements":[["0x0"]],"values":["0x1b1"],"leafLowerRangeValues":["0x1ae"],"leafHigherRangeValues":["0x1b0"],"leafIndices":[1]} +0;{"roots":["0x2178a14c47db8f2ab59f2efecd82ea04262fc253aa5df168dc0957809dae1255"],"inPathIndices":[999],"inPathElements":[["0x0"]],"values":["0x99"],"leafLowerRangeValues":["0x98"],"leafHigherRangeValues":["0x9a"],"leafIndices":[1]} +0;{"roots":["0x55a41f1951a20fa4f96be9d3e8a21a6024b0a13c43547e93c24a4d12419746d"],"inPathIndices":[0],"inPathElements":[["0x3e7"]],"values":["0x132"],"leafLowerRangeValues":["0x131"],"leafHigherRangeValues":["0x133"],"leafIndices":[0]} +1;{"roots":["0x19d7d1cd514725184f3b6bbe92d4e3a62d3d22ecf7221456d0a446ec67388778","0x19d7d1cd514725184f3b6bbe92d4e3a62d3d22ecf7221456d0a446ec67388778"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"values":["0x41","0x41"],"leafLowerRangeValues":["0x40","0x40"],"leafHigherRangeValues":["0x42","0x42"],"leafIndices":[0,0]} +0;{"roots":["0x3e7","0x3643b912cc9980f7a95ec59e1500b02ecb7179560404142075cbafbdf4b8f2e"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"values":["0x226","0x226"],"leafLowerRangeValues":["0x225","0x225"],"leafHigherRangeValues":["0x227","0x227"],"leafIndices":[0,0]} +0;{"roots":["0x2e486863b9c8a76a486928db18ef8642881b48b3e062dd955c47e7b5af7e58e","0x2e486863b9c8a76a486928db18ef8642881b48b3e062dd955c47e7b5af7e58e"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"values":["0x1b1","0x1b1"],"leafLowerRangeValues":["0x1b2","0x1b2"],"leafHigherRangeValues":["0x1b4","0x1b4"],"leafIndices":[0,0]} +0;{"roots":["0x1599e5a843a8265e61ee69db3b16022748e00c87514eaffbc54a411288399b92","0x1599e5a843a8265e61ee69db3b16022748e00c87514eaffbc54a411288399b92"],"inPathIndices":[0,0],"inPathElements":[["0x0"],["0x0"]],"values":["0x35","0x35"],"leafLowerRangeValues":["0x32","0x32"],"leafHigherRangeValues":["0x34","0x34"],"leafIndices":[1,1]} +0;{"roots":["0x2d129d136de4c3b03d36e21e6eb99ea8f5986991449291e7a9b0e4dc9f043339","0x2d129d136de4c3b03d36e21e6eb99ea8f5986991449291e7a9b0e4dc9f043339"],"inPathIndices":[999,0],"inPathElements":[["0x0"],["0x0"]],"values":["0xb5","0xb5"],"leafLowerRangeValues":["0xb4","0xb4"],"leafHigherRangeValues":["0xb6","0xb6"],"leafIndices":[1,1]} +0;{"roots":["0x59086aa51f42127e7a497b92e652ddb9a3ccc6a6804644da0de9dd32865e29","0x59086aa51f42127e7a497b92e652ddb9a3ccc6a6804644da0de9dd32865e29"],"inPathIndices":[0,0],"inPathElements":[["0x3e7"],["0x3e7"]],"values":["0x31e","0x31e"],"leafLowerRangeValues":["0x31d","0x31d"],"leafHigherRangeValues":["0x31f","0x31f"],"leafIndices":[1,1]} +1;{"roots":["0x24b2bba7a7fb4abbb284b69e04445ec804584106543fb27b4c08d5dc5645d511"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x60"],"leafLowerRangeValues":["0x5f"],"leafHigherRangeValues":["0x61"],"leafIndices":[3]} +0;{"roots":["0x3e7"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x323"],"leafLowerRangeValues":["0x322"],"leafHigherRangeValues":["0x324"],"leafIndices":[2]} +0;{"roots":["0x1e6294684abbecb21310dd40e2ea6c01a34254303749ce7145200c971166046d"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x89"],"leafLowerRangeValues":["0x8a"],"leafHigherRangeValues":["0x8c"],"leafIndices":[3]} +0;{"roots":["0x227cb32b7e7975070c31e7ca03370dc857af17c3cf5a04316edb16dfe2c354d2"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x305"],"leafLowerRangeValues":["0x302"],"leafHigherRangeValues":["0x304"],"leafIndices":[3]} +0;{"roots":["0x2340ae63dffadb418cb0c65ccdfd81fa58ec6908614785ac52576c9e8d14a283"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x126"],"leafLowerRangeValues":["0x125"],"leafHigherRangeValues":["0x127"],"leafIndices":[0]} +0;{"roots":["0x263f76f1192e41033de39daca9d6862ab0c0e7a27db62e57d7b74dd948f8e4f"],"inPathIndices":[0],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x181"],"leafLowerRangeValues":["0x180"],"leafHigherRangeValues":["0x182"],"leafIndices":[3]} +1;{"roots":["0x13bd56d8808467ddaf103ddce2ad577fa3f149ad6db98753ed6afed79293164","0x13bd56d8808467ddaf103ddce2ad577fa3f149ad6db98753ed6afed79293164"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x4c","0x4c"],"leafLowerRangeValues":["0x4b","0x4b"],"leafHigherRangeValues":["0x4d","0x4d"],"leafIndices":[0,0]} +0;{"roots":["0x3e7","0x3fdb34af6fcfcd69cc4ffad40327f6d7ffe325c814bbdb12a1168b72c91d2d8"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x24","0x24"],"leafLowerRangeValues":["0x23","0x23"],"leafHigherRangeValues":["0x25","0x25"],"leafIndices":[3,3]} +0;{"roots":["0x18ea374fae5947b229dc42ae0c1ec9bb57506916d61379c36412bc2b1a214f6b","0x18ea374fae5947b229dc42ae0c1ec9bb57506916d61379c36412bc2b1a214f6b"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x219","0x219"],"leafLowerRangeValues":["0x21a","0x21a"],"leafHigherRangeValues":["0x21c","0x21c"],"leafIndices":[3,3]} +0;{"roots":["0x2eb071105d20205d13e24fa40fc80a77690b062ce8713dab39c10163744af38d","0x2eb071105d20205d13e24fa40fc80a77690b062ce8713dab39c10163744af38d"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x1bf","0x1bf"],"leafLowerRangeValues":["0x1bc","0x1bc"],"leafHigherRangeValues":["0x1be","0x1be"],"leafIndices":[2,2]} +0;{"roots":["0x18acc00a358248edc585b469871a7b1f33324b53cfcdc1f46fa07716d69f4a8b","0x18acc00a358248edc585b469871a7b1f33324b53cfcdc1f46fa07716d69f4a8b"],"inPathIndices":[999,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x37e","0x37e"],"leafLowerRangeValues":["0x37d","0x37d"],"leafHigherRangeValues":["0x37f","0x37f"],"leafIndices":[2,2]} +0;{"roots":["0x19dbb3bf194b4646cca6cef42335f19fb4c402a73ab484226fb0cd15c88180cb","0x19dbb3bf194b4646cca6cef42335f19fb4c402a73ab484226fb0cd15c88180cb"],"inPathIndices":[0,0],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864"]],"values":["0x20","0x20"],"leafLowerRangeValues":["0x1f","0x1f"],"leafHigherRangeValues":["0x21","0x21"],"leafIndices":[1,1]} +1;{"roots":["0x21450bedbb3af4fe2d88138824604a954ea19306b6ab8c8001f9daeba86f28b2"],"inPathIndices":[2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x12a"],"leafLowerRangeValues":["0x129"],"leafHigherRangeValues":["0x12b"],"leafIndices":[2]} +0;{"roots":["0x3e7"],"inPathIndices":[1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0xa1"],"leafLowerRangeValues":["0xa0"],"leafHigherRangeValues":["0xa2"],"leafIndices":[1]} +0;{"roots":["0x153cf27d5ab299bbefb2b34448658608497ef15793889c247429e650457f5650"],"inPathIndices":[2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0xe"],"leafLowerRangeValues":["0xf"],"leafHigherRangeValues":["0x11"],"leafIndices":[0]} +0;{"roots":["0x17fb1ae453d95eba4b4f9c4be2eff01aaa9a2c9627fd678dfe56675174a3846a"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x14e"],"leafLowerRangeValues":["0x14b"],"leafHigherRangeValues":["0x14d"],"leafIndices":[0]} +0;{"roots":["0xcaa64f70c4697641f23a7ebb0268427c103b5881d1609800b4043c5bfa4903b"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x23b"],"leafLowerRangeValues":["0x23a"],"leafHigherRangeValues":["0x23c"],"leafIndices":[1]} +0;{"roots":["0x1fc54049366676ac791c8428989e3941129696f86726acc3c6e0edd1a5a6110b"],"inPathIndices":[2],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0xd0"],"leafLowerRangeValues":["0xcf"],"leafHigherRangeValues":["0xd1"],"leafIndices":[4]} +1;{"roots":["0x21631a8ce19fcec63f314190376a90300d21dd57eb67812bd41f1ada6c066b4e","0x21631a8ce19fcec63f314190376a90300d21dd57eb67812bd41f1ada6c066b4e"],"inPathIndices":[2,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x2dc","0x2dc"],"leafLowerRangeValues":["0x2db","0x2db"],"leafHigherRangeValues":["0x2dd","0x2dd"],"leafIndices":[3,3]} +0;{"roots":["0x3e7","0x1dcf83d80e1f4dfc0cc0e870610edabafb3ad2bdc8a2025d9de256e9fd3be30"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x1a8","0x1a8"],"leafLowerRangeValues":["0x1a7","0x1a7"],"leafHigherRangeValues":["0x1a9","0x1a9"],"leafIndices":[5,5]} +0;{"roots":["0x2a2c196a603e74efb992d3f362a330ed987966203b0b06d5eef80ca89d72bb7a","0x2a2c196a603e74efb992d3f362a330ed987966203b0b06d5eef80ca89d72bb7a"],"inPathIndices":[2,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x24d","0x24d"],"leafLowerRangeValues":["0x24e","0x24e"],"leafHigherRangeValues":["0x250","0x250"],"leafIndices":[4,4]} +0;{"roots":["0x2f5605f089d28d803c80019e3be477cdb262d364b751ae7a3829549d4217897a","0x2f5605f089d28d803c80019e3be477cdb262d364b751ae7a3829549d4217897a"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x1cc","0x1cc"],"leafLowerRangeValues":["0x1c9","0x1c9"],"leafHigherRangeValues":["0x1cb","0x1cb"],"leafIndices":[0,0]} +0;{"roots":["0x2f31ffe83f0c0cc28e0ed752f06b246639a752d6f326678a7d26bf9f1f3ec9d4","0x2f31ffe83f0c0cc28e0ed752f06b246639a752d6f326678a7d26bf9f1f3ec9d4"],"inPathIndices":[999,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x134","0x134"],"leafLowerRangeValues":["0x133","0x133"],"leafHigherRangeValues":["0x135","0x135"],"leafIndices":[6,6]} +0;{"roots":["0x1a5654fa400552a30a940b832ab85213af7366a301736488a7498f6656da0e29","0x1a5654fa400552a30a940b832ab85213af7366a301736488a7498f6656da0e29"],"inPathIndices":[0,0],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1"]],"values":["0x38e","0x38e"],"leafLowerRangeValues":["0x38d","0x38d"],"leafHigherRangeValues":["0x38f","0x38f"],"leafIndices":[2,2]} +1;{"roots":["0xa2a3633c8faaddd7577340be0cd4f19c8813aea4a1ef37283f1cb10650e731e"],"inPathIndices":[3],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x186"],"leafLowerRangeValues":["0x185"],"leafHigherRangeValues":["0x187"],"leafIndices":[15]} +0;{"roots":["0x3e7"],"inPathIndices":[0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x2a4"],"leafLowerRangeValues":["0x2a3"],"leafHigherRangeValues":["0x2a5"],"leafIndices":[6]} +0;{"roots":["0x238ad7b6bf3d32fdc25a216f73031f45d33b8533e9b4970791e7ee25af5a1b6c"],"inPathIndices":[2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x288"],"leafLowerRangeValues":["0x289"],"leafHigherRangeValues":["0x28b"],"leafIndices":[4]} +0;{"roots":["0xff6b5489488a59627f9269143cda10a42e3d0568af6fd3b91f647cfe48e68b5"],"inPathIndices":[2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0xbb"],"leafLowerRangeValues":["0xb8"],"leafHigherRangeValues":["0xba"],"leafIndices":[0]} +0;{"roots":["0x1aa3e336545a05fd094fe736f799f3dfc86d29f0e1e12f31e336544ba8e84bbf"],"inPathIndices":[999],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x22c"],"leafLowerRangeValues":["0x22b"],"leafHigherRangeValues":["0x22d"],"leafIndices":[9]} +0;{"roots":["0x17fa73ff7e93a5cbdaada04fb488b6fbd535956853731f9f5930971c6e4c1a03"],"inPathIndices":[2],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x3a2"],"leafLowerRangeValues":["0x3a1"],"leafHigherRangeValues":["0x3a3"],"leafIndices":[14]} +1;{"roots":["0x1da0630873b35b25645260855be83c206dce8ffebb4f5f5d0ef6ddf5f8938f32","0x1da0630873b35b25645260855be83c206dce8ffebb4f5f5d0ef6ddf5f8938f32"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0xfe","0xfe"],"leafLowerRangeValues":["0xfd","0xfd"],"leafHigherRangeValues":["0xff","0xff"],"leafIndices":[11,11]} +0;{"roots":["0x3e7","0x69a83ca7219e4dfedc9a505f2fbfc12d86e1e42baf6254dc2e2f6b3596ca26"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x3a6","0x3a6"],"leafLowerRangeValues":["0x3a5","0x3a5"],"leafHigherRangeValues":["0x3a7","0x3a7"],"leafIndices":[10,10]} +0;{"roots":["0x2ee5bf4d4dacfcf6c354dd72fbd36d5cc23bcbdbdc4ab85f69407800518ee530","0x2ee5bf4d4dacfcf6c354dd72fbd36d5cc23bcbdbdc4ab85f69407800518ee530"],"inPathIndices":[1,1],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x3d3","0x3d3"],"leafLowerRangeValues":["0x3d4","0x3d4"],"leafHigherRangeValues":["0x3d6","0x3d6"],"leafIndices":[11,11]} +0;{"roots":["0x27f588b464e37f41daa90defd93ddb514695abd78af50838e364edccd2ab7f59","0x27f588b464e37f41daa90defd93ddb514695abd78af50838e364edccd2ab7f59"],"inPathIndices":[2,2],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x1f1","0x1f1"],"leafLowerRangeValues":["0x1ee","0x1ee"],"leafHigherRangeValues":["0x1f0","0x1f0"],"leafIndices":[2,2]} +0;{"roots":["0x2fa7b764d313f58ed66a383d29353adec4d7e4dac02787db8c3deca0e90a9287","0x2fa7b764d313f58ed66a383d29353adec4d7e4dac02787db8c3deca0e90a9287"],"inPathIndices":[999,0],"inPathElements":[["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x0","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0x8a","0x8a"],"leafLowerRangeValues":["0x89","0x89"],"leafHigherRangeValues":["0x8b","0x8b"],"leafIndices":[11,11]} +0;{"roots":["0x139220584fbd092654aa4a03dd97dc594928c8631420d5a1c9759d91f772396","0x139220584fbd092654aa4a03dd97dc594928c8631420d5a1c9759d91f772396"],"inPathIndices":[1,1],"inPathElements":[["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"],["0x3e7","0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864","0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1","0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238"]],"values":["0xe1","0xe1"],"leafLowerRangeValues":["0xe0","0xe0"],"leafHigherRangeValues":["0xe2","0xe2"],"leafIndices":[12,12]} diff --git a/hasher.rs/benches/blake.test.ts b/hasher.rs/benches/blake.test.ts index 46e8639b9b..dade2616ba 100644 --- a/hasher.rs/benches/blake.test.ts +++ b/hasher.rs/benches/blake.test.ts @@ -1,14 +1,8 @@ -import {blake2str, poseidon} from "light-wasm"; -import {BN} from "@coral-xyz/anchor"; import { blake2b } from "@noble/hashes/blake2b"; - import { Bench } from 'tinybench'; const bench = new Bench({ time: 1000 }); bench -.add('wasm blake', () => { - blake2str("", 32); -}) .add('@noble/hashes/blake2b', async () => { blake2b.create({ dkLen: 32 }).update("").digest(); }) diff --git a/js/compressed-token/package.json b/js/compressed-token/package.json index f27817a050..0258ad7429 100644 --- a/js/compressed-token/package.json +++ b/js/compressed-token/package.json @@ -23,7 +23,7 @@ "test-all": "vitest run", "test:unit:all": "EXCLUDE_E2E=true vitest run", "test-all:verbose": "vitest run --reporter=verbose", - "gnark-prover": "../../circuit-lib/circuit-lib.js/scripts/prover.sh", + "gnark-prover": "../../circuit-lib/circuit-lib.js/scripts/prover.sh inclusion", "test-validator": "./../../cli/test_bin/run test-validator", "pretest:e2e": "./../../cli/test_bin/run test-validator -b && pnpm gnark-prover", "test:e2e:create-mint": "pnpm pretest:e2e && vitest run tests/e2e/create-mint.test.ts", diff --git a/js/compressed-token/src/idl/psp_compressed_token.ts b/js/compressed-token/src/idl/psp_compressed_token.ts index 57eeccfa7c..348a55bfb5 100644 --- a/js/compressed-token/src/idl/psp_compressed_token.ts +++ b/js/compressed-token/src/idl/psp_compressed_token.ts @@ -332,7 +332,7 @@ export type PspCompressedToken = { type: 'bool'; }, { - name: 'deCompressAmount'; + name: 'deCompressLamports'; type: { option: 'u64'; }; @@ -422,6 +422,16 @@ export type PspCompressedToken = { option: 'u64'; }; }, + { + name: 'deCompressLamports'; + type: { + option: 'u64'; + }; + }, + { + name: 'isCompress'; + type: 'bool'; + }, ]; }; }, @@ -1035,7 +1045,7 @@ export const IDL: PspCompressedToken = { type: 'bool', }, { - name: 'deCompressAmount', + name: 'deCompressLamports', type: { option: 'u64', }, @@ -1125,6 +1135,16 @@ export const IDL: PspCompressedToken = { option: 'u64', }, }, + { + name: 'deCompressLamports', + type: { + option: 'u64', + }, + }, + { + name: 'isCompress', + type: 'bool', + }, ], }, }, diff --git a/js/stateless.js/package.json b/js/stateless.js/package.json index d8c68ca704..ba6c479e73 100644 --- a/js/stateless.js/package.json +++ b/js/stateless.js/package.json @@ -23,8 +23,10 @@ "test-all": "vitest run", "test:unit:all": "EXCLUDE_E2E=true vitest run", "test-validator": "./../../cli/test_bin/run test-validator", - "pretest:e2e": "./../../cli/test_bin/run test-validator -b ", + "gnark-prover": "../../circuit-lib/circuit-lib.js/scripts/prover.sh inclusion", + "pretest:e2e": "./../../cli/test_bin/run test-validator -b && pnpm gnark-prover", "test:e2e:transfer": "pnpm pretest:e2e && vitest run tests/e2e/transfer.test.ts", + "test:e2e:compress": "pnpm pretest:e2e && vitest run tests/e2e/compress.test.ts", "test:e2e:all": "pnpm pretest:e2e && vitest run tests/e2e/*.test.ts", "test:index": "vitest run tests/e2e/program.test.ts", "test:e2e:serde": "vitest run tests/e2e/serde.test.ts", diff --git a/js/stateless.js/src/actions/common.ts b/js/stateless.js/src/actions/common.ts new file mode 100644 index 0000000000..7f77015cae --- /dev/null +++ b/js/stateless.js/src/actions/common.ts @@ -0,0 +1,27 @@ +import { Signer, PublicKey } from '@solana/web3.js'; + +/** @internal */ +export function getSigners( + signerOrMultisig: Signer | PublicKey, + multiSigners: Signer[], +): [PublicKey, Signer[]] { + // TODO: add multisig support + if (multiSigners.length > 0) throw new Error('Multisig not supported yet.'); + + if (signerOrMultisig instanceof PublicKey) + throw new Error('Multisig not supported yet.'); + + return signerOrMultisig instanceof PublicKey + ? [signerOrMultisig, multiSigners] + : [signerOrMultisig.publicKey, [signerOrMultisig]]; +} + +/** @internal remove signer from signers if part of signers */ +export function dedupeSigner(signer: Signer, signers: Signer[]): Signer[] { + if (signers.includes(signer)) { + return signers.filter( + s => s.publicKey.toString() !== signer.publicKey.toString(), + ); + } + return signers; +} diff --git a/js/stateless.js/src/actions/compress-lamports.ts b/js/stateless.js/src/actions/compress-lamports.ts new file mode 100644 index 0000000000..2466ed4c24 --- /dev/null +++ b/js/stateless.js/src/actions/compress-lamports.ts @@ -0,0 +1,53 @@ +import { + ConfirmOptions, + PublicKey, + Signer, + TransactionSignature, +} from '@solana/web3.js'; + +import { dedupeSigner } from './common'; +import { LightSystemProgram } from '../programs'; +import { Rpc } from '../rpc'; +import { buildAndSignTx, sendAndConfirmTx } from '../utils'; +import { BN } from '@coral-xyz/anchor'; +import { defaultTestStateTreeAccounts } from '../constants'; + +/** + * Init the SOL omnibus account for Light + * + * @param rpc RPC to use + * @param payer Payer of the transaction and initialization fees + * @param lamports Amount of lamports to compress + * @param toAddress Address of the recipient compressed account + * @param outputStateTree Optional output state tree. Defaults to a current shared state tree. + * @param confirmOptions Options for confirming the transaction + * + * @return Transaction signature + */ +/// TODO: add multisig support +/// TODO: add support for payer != owner +export async function compressLamports( + rpc: Rpc, + payer: Signer, + lamports: number | BN, + toAddress: PublicKey, + outputStateTree?: PublicKey, + confirmOptions?: ConfirmOptions, +): Promise { + const { blockhash } = await rpc.getLatestBlockhash(); + + const ixs = await LightSystemProgram.compress({ + payer: payer.publicKey, + toAddress, + lamports, + outputStateTree: outputStateTree + ? outputStateTree + : defaultTestStateTreeAccounts().merkleTree, // TODO: should fetch the current shared state tree + }); + + const tx = buildAndSignTx(ixs, payer, blockhash, []); + + const txId = await sendAndConfirmTx(rpc, tx, confirmOptions); + + return txId; +} diff --git a/js/stateless.js/src/actions/decompress-lamports.ts b/js/stateless.js/src/actions/decompress-lamports.ts new file mode 100644 index 0000000000..adf6778a93 --- /dev/null +++ b/js/stateless.js/src/actions/decompress-lamports.ts @@ -0,0 +1,96 @@ +import { + ConfirmOptions, + PublicKey, + Signer, + TransactionSignature, +} from '@solana/web3.js'; + +import { LightSystemProgram, sumUpLamports } from '../programs'; +import { Rpc } from '../rpc'; +import { buildAndSignTx, sendAndConfirmTx } from '../utils'; +import { BN } from '@coral-xyz/anchor'; +import { defaultTestStateTreeAccounts } from '../constants'; +import { + CompressedAccountWithMerkleContext, + PublicTransactionEvent, + bn, +} from '../state'; +import { CompressedAccountMerkleProofResult } from '../rpc-interface'; + +/** + * Init the SOL omnibus account for Light + * + * @param rpc RPC to use + * @param payer Payer of the transaction and initialization fees + * @param lamports Amount of lamports to compress + * @param toAddress Address of the recipient compressed account + * @param outputStateTree Optional output state tree. Defaults to a current shared state tree. + * @param confirmOptions Options for confirming the transaction + * + * @return Transaction signature + */ +/// TODO: add multisig support +/// TODO: add support for payer != owner +export async function decompressLamports( + rpc: Rpc, + payer: Signer, + lamports: number | BN, + recipient: PublicKey, + outputStateTree?: PublicKey, + confirmOptions?: ConfirmOptions, +): Promise { + /// TODO: refactor into using rpc.getCompressedAccount + /// TODO: use dynamic state tree and nullifier queue + // @ts-ignore + const indexedEvents = await rpc.getParsedEvents(); + + const userEvents = indexedEvents.filter((event: PublicTransactionEvent) => { + return event.outputCompressedAccounts.some(account => { + return account.owner.equals(payer.publicKey); + }); + }); + + const userCompressedAccountsWithMerkleContext: CompressedAccountWithMerkleContext[] = + userEvents.flatMap((event: PublicTransactionEvent) => + event.outputCompressedAccounts.map((account, i) => ({ + ...account, + hash: event.outputCompressedAccountHashes[i], + leafIndex: event.outputLeafIndices[i], + merkleTree: defaultTestStateTreeAccounts().merkleTree, + nullifierQueue: defaultTestStateTreeAccounts().nullifierQueue, + })), + ); + + lamports = bn(lamports); + + const inputLamports = sumUpLamports( + userCompressedAccountsWithMerkleContext, + ); + + if (lamports.gt(inputLamports)) { + throw new Error( + `Not enough compressed lamports. Expected ${lamports}, got ${inputLamports}`, + ); + } + + const proof = await rpc.getValidityProof( + userCompressedAccountsWithMerkleContext.map(x => bn(x.hash)), + ); + + const { blockhash } = await rpc.getLatestBlockhash(); + const ixs = await LightSystemProgram.decompress({ + payer: payer.publicKey, + toAddress: recipient, + outputStateTree: outputStateTree, + inputCompressedAccounts: userCompressedAccountsWithMerkleContext, + recentValidityProof: proof.compressedProof, + recentInputStateRootIndices: proof.rootIndices, + lamports, + }); + + const tx = buildAndSignTx(ixs, payer, blockhash, []); + + const txId = await sendAndConfirmTx(rpc, tx, confirmOptions); + + return txId; +} diff --git a/js/stateless.js/src/actions/index.ts b/js/stateless.js/src/actions/index.ts new file mode 100644 index 0000000000..e7fda29455 --- /dev/null +++ b/js/stateless.js/src/actions/index.ts @@ -0,0 +1,3 @@ +export * from './compress-lamports'; +export * from './decompress-lamports'; +export * from './init-sol-omnibus-account'; diff --git a/js/stateless.js/src/actions/init-sol-omnibus-account.ts b/js/stateless.js/src/actions/init-sol-omnibus-account.ts new file mode 100644 index 0000000000..1ebc24af3b --- /dev/null +++ b/js/stateless.js/src/actions/init-sol-omnibus-account.ts @@ -0,0 +1,41 @@ +import { ConfirmOptions, Signer, TransactionSignature } from '@solana/web3.js'; + +import { dedupeSigner } from './common'; +import { LightSystemProgram } from '../programs'; +import { Rpc } from '../rpc'; +import { buildAndSignTx, sendAndConfirmTx } from '../utils'; + +/** + * Init the SOL omnibus account for Light + * + * @param rpc RPC to use + * @param payer Payer of the transaction and initialization fees + * @param initAuthority Init authority. + * @param confirmOptions Options for confirming the transaction + * + * @return Transaction signature + */ +/// TODO: add multisig support +export async function initSolOmnibusAccount( + rpc: Rpc, + payer: Signer, + initAuthority?: Signer, + confirmOptions?: ConfirmOptions, +): Promise { + const { blockhash } = await rpc.getLatestBlockhash(); + + const additionalSigners = dedupeSigner( + payer, + initAuthority ? [initAuthority] : [], + ); + + const ix = await LightSystemProgram.initCompressedSolPda( + initAuthority ? initAuthority.publicKey : payer.publicKey, + ); + + const tx = buildAndSignTx([ix], payer, blockhash, additionalSigners); + + const txId = await sendAndConfirmTx(rpc, tx, confirmOptions); + + return txId; +} diff --git a/js/stateless.js/src/idls/index.ts b/js/stateless.js/src/idls/index.ts index 2c583657ac..d0b9fdcfa3 100644 --- a/js/stateless.js/src/idls/index.ts +++ b/js/stateless.js/src/idls/index.ts @@ -3,10 +3,7 @@ import { IDL as AccountCompressionIDL, AccountCompression, } from './account_compression'; -import { - IDL as LightMerkleTreeProgramIDL, - LightMerkleTreeProgram, -} from './light_merkle_tree_program'; + import { IDL as LightIDL, Light } from './light'; import { IDL as PspCompressedPdaIDL, @@ -17,8 +14,6 @@ import { IDL as UserRegistryIDL, UserRegistry } from './user_registry'; export { AccountCompressionIDL, AccountCompression, - LightMerkleTreeProgramIDL, - LightMerkleTreeProgram, LightIDL, Light, PspCompressedPdaIDL, diff --git a/js/stateless.js/src/idls/light_merkle_tree_program.ts b/js/stateless.js/src/idls/light_merkle_tree_program.ts deleted file mode 100644 index 316afca691..0000000000 --- a/js/stateless.js/src/idls/light_merkle_tree_program.ts +++ /dev/null @@ -1,1747 +0,0 @@ -export type LightMerkleTreeProgram = { - version: '0.3.1'; - name: 'light_merkle_tree_program'; - constants: [ - { - name: 'ENCRYPTED_UTXOS_LENGTH'; - type: { - defined: 'usize'; - }; - value: '174'; - }, - { - name: 'MERKLE_TREE_HEIGHT'; - type: { - defined: 'usize'; - }; - value: '22'; - }, - { - name: 'MERKLE_TREE_CHANGELOG'; - type: { - defined: 'usize'; - }; - value: '0'; - }, - { - name: 'MERKLE_TREE_ROOTS'; - type: { - defined: 'usize'; - }; - value: '2800'; - }, - { - name: 'INITIAL_MERKLE_TREE_AUTHORITY'; - type: { - array: ['u8', 32]; - }; - value: '[2 , 99 , 226 , 251 , 88 , 66 , 92 , 33 , 25 , 216 , 211 , 185 , 112 , 203 , 212 , 238 , 105 , 144 , 72 , 121 , 176 , 253 , 106 , 168 , 115 , 158 , 154 , 188 , 62 , 255 , 166 , 81 ,]'; - }, - { - name: 'ZERO_BYTES_MERKLE_TREE_18'; - type: { - array: [ - { - array: ['u8', 32]; - }, - 19, - ]; - }; - value: '[[40 , 66 , 58 , 227 , 48 , 224 , 249 , 227 , 188 , 18 , 133 , 168 , 156 , 214 , 220 , 144 , 244 , 144 , 67 , 82 , 76 , 6 , 135 , 78 , 64 , 186 , 52 , 113 , 234 , 47 , 27 , 32 ,] , [227 , 42 , 164 , 149 , 188 , 70 , 170 , 8 , 197 , 44 , 134 , 162 , 211 , 186 , 50 , 238 , 97 , 71 , 25 , 130 , 77 , 70 , 37 , 128 , 172 , 154 , 54 , 111 , 93 , 193 , 105 , 27 ,] , [25 , 241 , 255 , 33 , 65 , 214 , 48 , 229 , 38 , 116 , 134 , 103 , 44 , 146 , 163 , 214 , 31 , 238 , 148 , 206 , 34 , 137 , 144 , 221 , 184 , 11 , 5 , 213 , 10 , 188 , 143 , 18 ,] , [211 , 61 , 251 , 33 , 128 , 34 , 4 , 100 , 229 , 47 , 99 , 121 , 109 , 204 , 224 , 90 , 200 , 149 , 219 , 20 , 48 , 206 , 210 , 177 , 161 , 66 , 44 , 10 , 169 , 56 , 248 , 8 ,] , [200 , 15 , 65 , 80 , 151 , 74 , 72 , 69 , 229 , 131 , 25 , 215 , 86 , 36 , 195 , 74 , 67 , 59 , 117 , 179 , 51 , 60 , 181 , 13 , 242 , 192 , 228 , 228 , 189 , 238 , 70 , 8 ,] , [171 , 62 , 122 , 81 , 181 , 197 , 22 , 238 , 224 , 40 , 154 , 231 , 127 , 202 , 201 , 169 , 196 , 109 , 244 , 175 , 117 , 101 , 23 , 67 , 103 , 57 , 127 , 200 , 37 , 43 , 111 , 7 ,] , [59 , 78 , 126 , 104 , 199 , 143 , 213 , 10 , 2 , 158 , 64 , 78 , 153 , 25 , 107 , 190 , 32 , 122 , 123 , 211 , 116 , 179 , 175 , 172 , 70 , 54 , 175 , 59 , 201 , 120 , 64 , 44 ,] , [110 , 91 , 92 , 81 , 205 , 89 , 122 , 223 , 55 , 163 , 42 , 227 , 109 , 54 , 38 , 22 , 110 , 217 , 29 , 148 , 107 , 99 , 128 , 106 , 146 , 47 , 239 , 41 , 55 , 157 , 155 , 22 ,] , [18 , 231 , 42 , 5 , 245 , 159 , 211 , 227 , 239 , 89 , 35 , 142 , 223 , 69 , 166 , 224 , 14 , 114 , 128 , 14 , 123 , 123 , 215 , 2 , 241 , 185 , 191 , 60 , 252 , 61 , 146 , 12 ,] , [231 , 0 , 84 , 227 , 127 , 64 , 158 , 7 , 171 , 179 , 137 , 231 , 92 , 87 , 25 , 221 , 156 , 229 , 53 , 208 , 194 , 201 , 12 , 165 , 105 , 150 , 41 , 142 , 29 , 205 , 136 , 29 ,] , [195 , 2 , 103 , 231 , 62 , 207 , 214 , 105 , 214 , 210 , 108 , 23 , 28 , 151 , 77 , 100 , 78 , 194 , 210 , 29 , 227 , 14 , 17 , 242 , 211 , 50 , 33 , 194 , 106 , 18 , 246 , 45 ,] , [131 , 178 , 24 , 157 , 251 , 247 , 103 , 69 , 101 , 229 , 194 , 14 , 167 , 57 , 158 , 128 , 212 , 19 , 140 , 234 , 69 , 37 , 10 , 156 , 249 , 96 , 152 , 52 , 97 , 96 , 119 , 41 ,] , [30 , 223 , 20 , 181 , 108 , 110 , 112 , 102 , 234 , 54 , 99 , 29 , 213 , 3 , 55 , 225 , 125 , 185 , 223 , 234 , 188 , 108 , 83 , 89 , 27 , 3 , 100 , 6 , 65 , 107 , 3 , 24 ,] , [167 , 32 , 85 , 233 , 205 , 253 , 154 , 214 , 236 , 82 , 147 , 75 , 252 , 144 , 109 , 73 , 63 , 167 , 77 , 233 , 12 , 201 , 150 , 242 , 103 , 15 , 158 , 83 , 137 , 24 , 170 , 16 ,] , [45 , 98 , 238 , 69 , 136 , 141 , 101 , 226 , 94 , 209 , 58 , 215 , 212 , 14 , 210 , 135 , 110 , 96 , 52 , 16 , 101 , 177 , 121 , 109 , 134 , 81 , 189 , 146 , 113 , 243 , 97 , 42 ,] , [71 , 51 , 251 , 48 , 95 , 193 , 94 , 26 , 180 , 17 , 124 , 203 , 48 , 98 , 55 , 17 , 60 , 104 , 186 , 175 , 213 , 189 , 7 , 239 , 92 , 175 , 16 , 5 , 220 , 168 , 70 , 21 ,] , [35 , 92 , 72 , 197 , 23 , 142 , 16 , 200 , 136 , 38 , 44 , 255 , 162 , 115 , 11 , 1 , 248 , 182 , 236 , 78 , 90 , 24 , 128 , 245 , 168 , 17 , 130 , 2 , 73 , 51 , 196 , 6 ,] , [89 , 178 , 154 , 246 , 236 , 130 , 30 , 100 , 27 , 230 , 24 , 196 , 8 , 172 , 176 , 196 , 197 , 13 , 157 , 194 , 169 , 106 , 207 , 70 , 66 , 117 , 69 , 53 , 56 , 154 , 78 , 0 ,] , [231 , 174 , 226 , 37 , 211 , 160 , 187 , 178 , 149 , 82 , 17 , 60 , 110 , 116 , 28 , 61 , 58 , 145 , 58 , 71 , 25 , 42 , 67 , 46 , 189 , 214 , 248 , 234 , 182 , 251 , 238 , 34 ,] ,]'; - }, - { - name: 'IX_ORDER'; - type: { - array: ['u8', 57]; - }; - value: '[34 , 14 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 241 ,]'; - }, - { - name: 'AUTHORITY_SEED'; - type: 'bytes'; - value: '[65, 85, 84, 72, 79, 82, 73, 84, 89, 95, 83, 69, 69, 68]'; - }, - { - name: 'MERKLE_TREE_AUTHORITY_SEED'; - type: 'bytes'; - value: '[77, 69, 82, 75, 76, 69, 95, 84, 82, 69, 69, 95, 65, 85, 84, 72, 79, 82, 73, 84, 89]'; - }, - { - name: 'TREE_ROOT_SEED'; - type: 'bytes'; - value: '[84, 82, 69, 69, 95, 82, 79, 79, 84, 95, 83, 69, 69, 68]'; - }, - { - name: 'STORAGE_SEED'; - type: 'bytes'; - value: '[115, 116, 111, 114, 97, 103, 101]'; - }, - { - name: 'LEAVES_SEED'; - type: 'bytes'; - value: '[108, 101, 97, 118, 101, 115]'; - }, - { - name: 'NULLIFIER_SEED'; - type: 'bytes'; - value: '[110, 102]'; - }, - { - name: 'POOL_TYPE_SEED'; - type: 'bytes'; - value: '[112, 111, 111, 108, 116, 121, 112, 101]'; - }, - { - name: 'POOL_CONFIG_SEED'; - type: 'bytes'; - value: '[112, 111, 111, 108, 45, 99, 111, 110, 102, 105, 103]'; - }, - { - name: 'POOL_SEED'; - type: 'bytes'; - value: '[112, 111, 111, 108]'; - }, - { - name: 'TOKEN_AUTHORITY_SEED'; - type: 'bytes'; - value: '[115, 112, 108]'; - }, - ]; - instructions: [ - { - name: 'initializeNewMerkleTreeSet'; - docs: [ - 'Initializes a new Merkle tree from config bytes.', - 'Can only be called from the merkle_tree_authority.', - ]; - accounts: [ - { - name: 'authority'; - isMut: true; - isSigner: true; - }, - { - name: 'newMerkleTreeSet'; - isMut: true; - isSigner: false; - }, - { - name: 'systemProgram'; - isMut: false; - isSigner: false; - }, - { - name: 'rent'; - isMut: false; - isSigner: false; - }, - { - name: 'merkleTreeAuthorityPda'; - isMut: true; - isSigner: false; - }, - ]; - args: []; - }, - { - name: 'initializeMerkleTreeAuthority'; - docs: [ - 'Initializes a new merkle tree authority which can register new verifiers and configure', - 'permissions to create new pools.', - ]; - accounts: [ - { - name: 'merkleTreeAuthorityPda'; - isMut: true; - isSigner: false; - }, - { - name: 'merkleTreeSet'; - isMut: true; - isSigner: false; - }, - { - name: 'authority'; - isMut: true; - isSigner: true; - }, - { - name: 'systemProgram'; - isMut: false; - isSigner: false; - }, - { - name: 'rent'; - isMut: false; - isSigner: false; - }, - ]; - args: []; - }, - { - name: 'updateMerkleTreeAuthority'; - docs: ['Updates the merkle tree authority to a new authority.']; - accounts: [ - { - name: 'merkleTreeAuthorityPda'; - isMut: true; - isSigner: false; - }, - { - name: 'authority'; - isMut: false; - isSigner: true; - }, - { - name: 'newAuthority'; - isMut: false; - isSigner: false; - }, - ]; - args: []; - }, - { - name: 'enablePermissionlessSplTokens'; - docs: ['Enables anyone to create token pools.']; - accounts: [ - { - name: 'merkleTreeAuthorityPda'; - isMut: true; - isSigner: false; - }, - { - name: 'authority'; - isMut: false; - isSigner: true; - }, - ]; - args: [ - { - name: 'enablePermissionless'; - type: 'bool'; - }, - ]; - }, - { - name: 'registerVerifier'; - docs: [ - 'Registers a new verifier which can decompress tokens, insert new nullifiers, add new leaves.', - 'These functions can only be invoked from registered verifiers.', - ]; - accounts: [ - { - name: 'registeredVerifierPda'; - isMut: true; - isSigner: false; - }, - { - name: 'authority'; - isMut: true; - isSigner: true; - }, - { - name: 'merkleTreeAuthorityPda'; - isMut: false; - isSigner: false; - }, - { - name: 'systemProgram'; - isMut: false; - isSigner: false; - }, - { - name: 'rent'; - isMut: false; - isSigner: false; - }, - ]; - args: [ - { - name: 'verifierPubkey'; - type: 'publicKey'; - }, - ]; - }, - { - name: 'registerPoolType'; - docs: ['Registers a new pooltype.']; - accounts: [ - { - name: 'registeredPoolTypePda'; - isMut: true; - isSigner: false; - }, - { - name: 'authority'; - isMut: true; - isSigner: true; - }, - { - name: 'systemProgram'; - isMut: false; - isSigner: false; - }, - { - name: 'rent'; - isMut: false; - isSigner: false; - }, - { - name: 'merkleTreeAuthorityPda'; - isMut: false; - isSigner: false; - }, - ]; - args: [ - { - name: 'poolType'; - type: { - array: ['u8', 32]; - }; - }, - ]; - }, - { - name: 'registerSplPool'; - docs: [ - 'Creates a new spl token pool which can be used by any registered verifier.', - ]; - accounts: [ - { - name: 'registeredAssetPoolPda'; - isMut: true; - isSigner: false; - }, - { - name: 'merkleTreePdaToken'; - isMut: true; - isSigner: false; - }, - { - name: 'authority'; - isMut: true; - isSigner: true; - }, - { - name: 'systemProgram'; - isMut: false; - isSigner: false; - }, - { - name: 'rent'; - isMut: false; - isSigner: false; - }, - { - name: 'mint'; - isMut: true; - isSigner: false; - }, - { - name: 'tokenAuthority'; - isMut: true; - isSigner: false; - }, - { - name: 'tokenProgram'; - isMut: false; - isSigner: false; - }, - { - name: 'registeredPoolTypePda'; - isMut: false; - isSigner: false; - docs: ['Just needs to exist and be derived correctly.']; - }, - { - name: 'merkleTreeAuthorityPda'; - isMut: true; - isSigner: false; - }, - ]; - args: []; - }, - { - name: 'registerSolPool'; - docs: [ - 'Creates a new sol pool which can be used by any registered verifier.', - ]; - accounts: [ - { - name: 'registeredAssetPoolPda'; - isMut: true; - isSigner: false; - }, - { - name: 'authority'; - isMut: true; - isSigner: true; - }, - { - name: 'systemProgram'; - isMut: false; - isSigner: false; - }, - { - name: 'rent'; - isMut: false; - isSigner: false; - }, - { - name: 'registeredPoolTypePda'; - isMut: false; - isSigner: false; - }, - { - name: 'merkleTreeAuthorityPda'; - isMut: true; - isSigner: false; - }, - ]; - args: []; - }, - { - name: 'insertTwoLeaves'; - docs: [ - 'Creates and initializes a pda which stores two merkle tree leaves and encrypted Utxos.', - 'The inserted leaves are not part of the Merkle tree yet and marked accordingly.', - 'The Merkle tree has to be updated after.', - 'Can only be called from a registered verifier program.', - ]; - accounts: [ - { - name: 'authority'; - isMut: true; - isSigner: true; - }, - { - name: 'merkleTreeSet'; - isMut: true; - isSigner: false; - }, - { - name: 'systemProgram'; - isMut: false; - isSigner: false; - }, - { - name: 'registeredVerifierPda'; - isMut: false; - isSigner: false; - }, - { - name: 'logWrapper'; - isMut: false; - isSigner: false; - }, - ]; - args: [ - { - name: 'leaves'; - type: { - vec: { - array: ['u8', 32]; - }; - }; - }, - ]; - }, - { - name: 'insertTwoLeavesEvent'; - accounts: [ - { - name: 'authority'; - isMut: true; - isSigner: true; - }, - { - name: 'merkleTreeSet'; - isMut: true; - isSigner: false; - }, - { - name: 'systemProgram'; - isMut: false; - isSigner: false; - }, - { - name: 'registeredVerifier'; - isMut: false; - isSigner: false; - }, - ]; - args: [ - { - name: 'leafLeft'; - type: { - array: ['u8', 32]; - }; - }, - { - name: 'leafRight'; - type: { - array: ['u8', 32]; - }; - }, - ]; - }, - { - name: 'decompressSol'; - docs: [ - 'Decompresses sol from a liquidity pool.', - 'An arbitrary number of recipients can be passed in with remaining accounts.', - 'Can only be called from a registered verifier program.', - ]; - accounts: [ - { - name: 'authority'; - isMut: true; - isSigner: true; - }, - { - name: 'merkleTreeToken'; - isMut: true; - isSigner: false; - }, - { - name: 'registeredVerifierPda'; - isMut: true; - isSigner: false; - }, - { - name: 'recipient'; - isMut: true; - isSigner: false; - }, - ]; - args: [ - { - name: 'amount'; - type: 'u64'; - }, - ]; - }, - { - name: 'decompressSpl'; - docs: [ - 'Decompresses spl tokens from a liquidity pool.', - 'An arbitrary number of recipients can be passed in with remaining accounts.', - 'Can only be called from a registered verifier program.', - ]; - accounts: [ - { - name: 'authority'; - isMut: true; - isSigner: true; - }, - { - name: 'merkleTreeToken'; - isMut: true; - isSigner: false; - }, - { - name: 'recipient'; - isMut: true; - isSigner: false; - }, - { - name: 'tokenProgram'; - isMut: false; - isSigner: false; - }, - { - name: 'tokenAuthority'; - isMut: true; - isSigner: false; - }, - { - name: 'registeredVerifierPda'; - isMut: false; - isSigner: false; - }, - ]; - args: [ - { - name: 'amount'; - type: 'u64'; - }, - ]; - }, - { - name: 'initializeNullifiers'; - accounts: [ - { - name: 'authority'; - isMut: true; - isSigner: true; - }, - { - name: 'systemProgram'; - isMut: false; - isSigner: false; - }, - { - name: 'registeredVerifierPda'; - isMut: false; - isSigner: false; - }, - ]; - args: [ - { - name: 'nullifiers'; - type: { - vec: { - array: ['u8', 32]; - }; - }; - }, - ]; - }, - ]; - accounts: [ - { - name: 'registeredAssetPool'; - docs: [ - 'Nullfier pdas are derived from the nullifier', - 'existence of a nullifier is the check to prevent double spends.', - ]; - type: { - kind: 'struct'; - fields: [ - { - name: 'assetPoolPubkey'; - type: 'publicKey'; - }, - { - name: 'poolType'; - type: { - array: ['u8', 32]; - }; - }, - { - name: 'index'; - type: 'u64'; - }, - ]; - }; - }, - { - name: 'registeredPoolType'; - docs: ['Pool type']; - type: { - kind: 'struct'; - fields: [ - { - name: 'poolType'; - type: { - array: ['u8', 32]; - }; - }, - ]; - }; - }, - { - name: 'merkleTreeAuthority'; - docs: [ - 'Configures the authority of the merkle tree which can:', - '- register new verifiers', - '- register new asset pools', - '- register new asset pool types', - '- set permissions for new asset pool creation', - '- keeps current highest index for assets and merkle trees to enable lookups of these', - ]; - type: { - kind: 'struct'; - fields: [ - { - name: 'pubkey'; - type: 'publicKey'; - }, - { - name: 'merkleTreeSetIndex'; - type: 'u64'; - }, - { - name: 'registeredAssetIndex'; - type: 'u64'; - }, - { - name: 'enablePermissionlessSplTokens'; - type: 'bool'; - }, - { - name: 'enablePermissionlessMerkleTreeRegistration'; - type: 'bool'; - }, - ]; - }; - }, - { - name: 'registeredVerifier'; - docs: ['']; - type: { - kind: 'struct'; - fields: [ - { - name: 'pubkey'; - type: 'publicKey'; - }, - ]; - }; - }, - { - name: 'merkleTreeSet'; - docs: ['Set of on-chain Merkle trees.']; - type: { - kind: 'struct'; - fields: [ - { - name: 'index'; - docs: ['Unique index.']; - type: 'u64'; - }, - { - name: 'nextMerkleTree'; - docs: ['Public key of the next Merkle tree set.']; - type: 'publicKey'; - }, - { - name: 'owner'; - docs: ['Owner of the Merkle tree set.']; - type: 'publicKey'; - }, - { - name: 'stateMerkleTree'; - docs: ['Merkle tree for the transaction state.']; - type: { - array: ['u8', 90368]; - }; - }, - { - name: 'eventMerkleTree'; - docs: ['Merkle tree for event compression.']; - type: { - array: ['u8', 90368]; - }; - }, - ]; - }; - }, - ]; - errors: [ - { - code: 6000; - name: 'MtTmpPdaInitFailed'; - msg: 'Merkle tree tmp account init failed wrong pda.'; - }, - { - code: 6001; - name: 'MerkleTreeInitFailed'; - msg: 'Merkle tree tmp account init failed.'; - }, - { - code: 6002; - name: 'ContractStillLocked'; - msg: 'Contract is still locked.'; - }, - { - code: 6003; - name: 'InvalidMerkleTree'; - msg: 'InvalidMerkleTree.'; - }, - { - code: 6004; - name: 'InvalidMerkleTreeOwner'; - msg: 'InvalidMerkleTreeOwner.'; - }, - { - code: 6005; - name: 'PubkeyCheckFailed'; - msg: 'PubkeyCheckFailed'; - }, - { - code: 6006; - name: 'CloseAccountFailed'; - msg: 'CloseAccountFailed'; - }, - { - code: 6007; - name: 'DecompressFailed'; - msg: 'DecompressFailed'; - }, - { - code: 6008; - name: 'MerkleTreeUpdateNotInRootInsert'; - msg: 'MerkleTreeUpdateNotInRootInsert'; - }, - { - code: 6009; - name: 'MerkleTreeUpdateNotInRootInsertState'; - msg: 'MerkleTreeUpdateNotInRootInsert'; - }, - { - code: 6010; - name: 'InvalidNumberOfLeaves'; - msg: 'InvalidNumberOfLeaves'; - }, - { - code: 6011; - name: 'LeafAlreadyInserted'; - msg: 'LeafAlreadyInserted'; - }, - { - code: 6012; - name: 'WrongLeavesLastTx'; - msg: 'WrongLeavesLastTx'; - }, - { - code: 6013; - name: 'FirstLeavesPdaIncorrectIndex'; - msg: 'FirstLeavesPdaIncorrectIndex'; - }, - { - code: 6014; - name: 'NullifierAlreadyExists'; - msg: 'NullifierAlreadyExists'; - }, - { - code: 6015; - name: 'LeavesOfWrongTree'; - msg: 'LeavesOfWrongTree'; - }, - { - code: 6016; - name: 'InvalidAuthority'; - msg: 'InvalidAuthority'; - }, - { - code: 6017; - name: 'InvalidVerifier'; - msg: 'InvalidVerifier'; - }, - { - code: 6018; - name: 'PubkeyTryFromFailed'; - msg: 'PubkeyTryFromFailed'; - }, - { - code: 6019; - name: 'ExpectedOldMerkleTrees'; - msg: 'Expected old Merkle trees as remaining account.'; - }, - { - code: 6020; - name: 'InvalidOldMerkleTree'; - msg: 'Invalid old Merkle tree account.'; - }, - { - code: 6021; - name: 'NotNewestOldMerkleTree'; - msg: 'Provided old Merkle tree is not the newest one.'; - }, - { - code: 6022; - name: 'ExpectedTwoLeavesPda'; - msg: 'Expected two leaves PDA as a remaining account.'; - }, - { - code: 6023; - name: 'InvalidTwoLeavesPda'; - msg: 'Invalid two leaves PDA.'; - }, - { - code: 6024; - name: 'OddNumberOfLeaves'; - msg: 'Odd number of leaves.'; - }, - { - code: 6025; - name: 'IntegerOverflow'; - msg: 'Integer overflow, value too large'; - }, - { - code: 6026; - name: 'InvalidNoopPubkey'; - msg: 'Provided noop program public key is invalid'; - }, - { - code: 6027; - name: 'EventNoChangelogEntry'; - msg: 'Emitting an event requires at least one changelog entry'; - }, - ]; -}; - -export const IDL: LightMerkleTreeProgram = { - version: '0.3.1', - name: 'light_merkle_tree_program', - constants: [ - { - name: 'ENCRYPTED_UTXOS_LENGTH', - type: { - defined: 'usize', - }, - value: '174', - }, - { - name: 'MERKLE_TREE_HEIGHT', - type: { - defined: 'usize', - }, - value: '22', - }, - { - name: 'MERKLE_TREE_CHANGELOG', - type: { - defined: 'usize', - }, - value: '0', - }, - { - name: 'MERKLE_TREE_ROOTS', - type: { - defined: 'usize', - }, - value: '2800', - }, - { - name: 'INITIAL_MERKLE_TREE_AUTHORITY', - type: { - array: ['u8', 32], - }, - value: '[2 , 99 , 226 , 251 , 88 , 66 , 92 , 33 , 25 , 216 , 211 , 185 , 112 , 203 , 212 , 238 , 105 , 144 , 72 , 121 , 176 , 253 , 106 , 168 , 115 , 158 , 154 , 188 , 62 , 255 , 166 , 81 ,]', - }, - { - name: 'ZERO_BYTES_MERKLE_TREE_18', - type: { - array: [ - { - array: ['u8', 32], - }, - 19, - ], - }, - value: '[[40 , 66 , 58 , 227 , 48 , 224 , 249 , 227 , 188 , 18 , 133 , 168 , 156 , 214 , 220 , 144 , 244 , 144 , 67 , 82 , 76 , 6 , 135 , 78 , 64 , 186 , 52 , 113 , 234 , 47 , 27 , 32 ,] , [227 , 42 , 164 , 149 , 188 , 70 , 170 , 8 , 197 , 44 , 134 , 162 , 211 , 186 , 50 , 238 , 97 , 71 , 25 , 130 , 77 , 70 , 37 , 128 , 172 , 154 , 54 , 111 , 93 , 193 , 105 , 27 ,] , [25 , 241 , 255 , 33 , 65 , 214 , 48 , 229 , 38 , 116 , 134 , 103 , 44 , 146 , 163 , 214 , 31 , 238 , 148 , 206 , 34 , 137 , 144 , 221 , 184 , 11 , 5 , 213 , 10 , 188 , 143 , 18 ,] , [211 , 61 , 251 , 33 , 128 , 34 , 4 , 100 , 229 , 47 , 99 , 121 , 109 , 204 , 224 , 90 , 200 , 149 , 219 , 20 , 48 , 206 , 210 , 177 , 161 , 66 , 44 , 10 , 169 , 56 , 248 , 8 ,] , [200 , 15 , 65 , 80 , 151 , 74 , 72 , 69 , 229 , 131 , 25 , 215 , 86 , 36 , 195 , 74 , 67 , 59 , 117 , 179 , 51 , 60 , 181 , 13 , 242 , 192 , 228 , 228 , 189 , 238 , 70 , 8 ,] , [171 , 62 , 122 , 81 , 181 , 197 , 22 , 238 , 224 , 40 , 154 , 231 , 127 , 202 , 201 , 169 , 196 , 109 , 244 , 175 , 117 , 101 , 23 , 67 , 103 , 57 , 127 , 200 , 37 , 43 , 111 , 7 ,] , [59 , 78 , 126 , 104 , 199 , 143 , 213 , 10 , 2 , 158 , 64 , 78 , 153 , 25 , 107 , 190 , 32 , 122 , 123 , 211 , 116 , 179 , 175 , 172 , 70 , 54 , 175 , 59 , 201 , 120 , 64 , 44 ,] , [110 , 91 , 92 , 81 , 205 , 89 , 122 , 223 , 55 , 163 , 42 , 227 , 109 , 54 , 38 , 22 , 110 , 217 , 29 , 148 , 107 , 99 , 128 , 106 , 146 , 47 , 239 , 41 , 55 , 157 , 155 , 22 ,] , [18 , 231 , 42 , 5 , 245 , 159 , 211 , 227 , 239 , 89 , 35 , 142 , 223 , 69 , 166 , 224 , 14 , 114 , 128 , 14 , 123 , 123 , 215 , 2 , 241 , 185 , 191 , 60 , 252 , 61 , 146 , 12 ,] , [231 , 0 , 84 , 227 , 127 , 64 , 158 , 7 , 171 , 179 , 137 , 231 , 92 , 87 , 25 , 221 , 156 , 229 , 53 , 208 , 194 , 201 , 12 , 165 , 105 , 150 , 41 , 142 , 29 , 205 , 136 , 29 ,] , [195 , 2 , 103 , 231 , 62 , 207 , 214 , 105 , 214 , 210 , 108 , 23 , 28 , 151 , 77 , 100 , 78 , 194 , 210 , 29 , 227 , 14 , 17 , 242 , 211 , 50 , 33 , 194 , 106 , 18 , 246 , 45 ,] , [131 , 178 , 24 , 157 , 251 , 247 , 103 , 69 , 101 , 229 , 194 , 14 , 167 , 57 , 158 , 128 , 212 , 19 , 140 , 234 , 69 , 37 , 10 , 156 , 249 , 96 , 152 , 52 , 97 , 96 , 119 , 41 ,] , [30 , 223 , 20 , 181 , 108 , 110 , 112 , 102 , 234 , 54 , 99 , 29 , 213 , 3 , 55 , 225 , 125 , 185 , 223 , 234 , 188 , 108 , 83 , 89 , 27 , 3 , 100 , 6 , 65 , 107 , 3 , 24 ,] , [167 , 32 , 85 , 233 , 205 , 253 , 154 , 214 , 236 , 82 , 147 , 75 , 252 , 144 , 109 , 73 , 63 , 167 , 77 , 233 , 12 , 201 , 150 , 242 , 103 , 15 , 158 , 83 , 137 , 24 , 170 , 16 ,] , [45 , 98 , 238 , 69 , 136 , 141 , 101 , 226 , 94 , 209 , 58 , 215 , 212 , 14 , 210 , 135 , 110 , 96 , 52 , 16 , 101 , 177 , 121 , 109 , 134 , 81 , 189 , 146 , 113 , 243 , 97 , 42 ,] , [71 , 51 , 251 , 48 , 95 , 193 , 94 , 26 , 180 , 17 , 124 , 203 , 48 , 98 , 55 , 17 , 60 , 104 , 186 , 175 , 213 , 189 , 7 , 239 , 92 , 175 , 16 , 5 , 220 , 168 , 70 , 21 ,] , [35 , 92 , 72 , 197 , 23 , 142 , 16 , 200 , 136 , 38 , 44 , 255 , 162 , 115 , 11 , 1 , 248 , 182 , 236 , 78 , 90 , 24 , 128 , 245 , 168 , 17 , 130 , 2 , 73 , 51 , 196 , 6 ,] , [89 , 178 , 154 , 246 , 236 , 130 , 30 , 100 , 27 , 230 , 24 , 196 , 8 , 172 , 176 , 196 , 197 , 13 , 157 , 194 , 169 , 106 , 207 , 70 , 66 , 117 , 69 , 53 , 56 , 154 , 78 , 0 ,] , [231 , 174 , 226 , 37 , 211 , 160 , 187 , 178 , 149 , 82 , 17 , 60 , 110 , 116 , 28 , 61 , 58 , 145 , 58 , 71 , 25 , 42 , 67 , 46 , 189 , 214 , 248 , 234 , 182 , 251 , 238 , 34 ,] ,]', - }, - { - name: 'IX_ORDER', - type: { - array: ['u8', 57], - }, - value: '[34 , 14 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 241 ,]', - }, - { - name: 'AUTHORITY_SEED', - type: 'bytes', - value: '[65, 85, 84, 72, 79, 82, 73, 84, 89, 95, 83, 69, 69, 68]', - }, - { - name: 'MERKLE_TREE_AUTHORITY_SEED', - type: 'bytes', - value: '[77, 69, 82, 75, 76, 69, 95, 84, 82, 69, 69, 95, 65, 85, 84, 72, 79, 82, 73, 84, 89]', - }, - { - name: 'TREE_ROOT_SEED', - type: 'bytes', - value: '[84, 82, 69, 69, 95, 82, 79, 79, 84, 95, 83, 69, 69, 68]', - }, - { - name: 'STORAGE_SEED', - type: 'bytes', - value: '[115, 116, 111, 114, 97, 103, 101]', - }, - { - name: 'LEAVES_SEED', - type: 'bytes', - value: '[108, 101, 97, 118, 101, 115]', - }, - { - name: 'NULLIFIER_SEED', - type: 'bytes', - value: '[110, 102]', - }, - { - name: 'POOL_TYPE_SEED', - type: 'bytes', - value: '[112, 111, 111, 108, 116, 121, 112, 101]', - }, - { - name: 'POOL_CONFIG_SEED', - type: 'bytes', - value: '[112, 111, 111, 108, 45, 99, 111, 110, 102, 105, 103]', - }, - { - name: 'POOL_SEED', - type: 'bytes', - value: '[112, 111, 111, 108]', - }, - { - name: 'TOKEN_AUTHORITY_SEED', - type: 'bytes', - value: '[115, 112, 108]', - }, - ], - instructions: [ - { - name: 'initializeNewMerkleTreeSet', - docs: [ - 'Initializes a new Merkle tree from config bytes.', - 'Can only be called from the merkle_tree_authority.', - ], - accounts: [ - { - name: 'authority', - isMut: true, - isSigner: true, - }, - { - name: 'newMerkleTreeSet', - isMut: true, - isSigner: false, - }, - { - name: 'systemProgram', - isMut: false, - isSigner: false, - }, - { - name: 'rent', - isMut: false, - isSigner: false, - }, - { - name: 'merkleTreeAuthorityPda', - isMut: true, - isSigner: false, - }, - ], - args: [], - }, - { - name: 'initializeMerkleTreeAuthority', - docs: [ - 'Initializes a new merkle tree authority which can register new verifiers and configure', - 'permissions to create new pools.', - ], - accounts: [ - { - name: 'merkleTreeAuthorityPda', - isMut: true, - isSigner: false, - }, - { - name: 'merkleTreeSet', - isMut: true, - isSigner: false, - }, - { - name: 'authority', - isMut: true, - isSigner: true, - }, - { - name: 'systemProgram', - isMut: false, - isSigner: false, - }, - { - name: 'rent', - isMut: false, - isSigner: false, - }, - ], - args: [], - }, - { - name: 'updateMerkleTreeAuthority', - docs: ['Updates the merkle tree authority to a new authority.'], - accounts: [ - { - name: 'merkleTreeAuthorityPda', - isMut: true, - isSigner: false, - }, - { - name: 'authority', - isMut: false, - isSigner: true, - }, - { - name: 'newAuthority', - isMut: false, - isSigner: false, - }, - ], - args: [], - }, - { - name: 'enablePermissionlessSplTokens', - docs: ['Enables anyone to create token pools.'], - accounts: [ - { - name: 'merkleTreeAuthorityPda', - isMut: true, - isSigner: false, - }, - { - name: 'authority', - isMut: false, - isSigner: true, - }, - ], - args: [ - { - name: 'enablePermissionless', - type: 'bool', - }, - ], - }, - { - name: 'registerVerifier', - docs: [ - 'Registers a new verifier which can decompress tokens, insert new nullifiers, add new leaves.', - 'These functions can only be invoked from registered verifiers.', - ], - accounts: [ - { - name: 'registeredVerifierPda', - isMut: true, - isSigner: false, - }, - { - name: 'authority', - isMut: true, - isSigner: true, - }, - { - name: 'merkleTreeAuthorityPda', - isMut: false, - isSigner: false, - }, - { - name: 'systemProgram', - isMut: false, - isSigner: false, - }, - { - name: 'rent', - isMut: false, - isSigner: false, - }, - ], - args: [ - { - name: 'verifierPubkey', - type: 'publicKey', - }, - ], - }, - { - name: 'registerPoolType', - docs: ['Registers a new pooltype.'], - accounts: [ - { - name: 'registeredPoolTypePda', - isMut: true, - isSigner: false, - }, - { - name: 'authority', - isMut: true, - isSigner: true, - }, - { - name: 'systemProgram', - isMut: false, - isSigner: false, - }, - { - name: 'rent', - isMut: false, - isSigner: false, - }, - { - name: 'merkleTreeAuthorityPda', - isMut: false, - isSigner: false, - }, - ], - args: [ - { - name: 'poolType', - type: { - array: ['u8', 32], - }, - }, - ], - }, - { - name: 'registerSplPool', - docs: [ - 'Creates a new spl token pool which can be used by any registered verifier.', - ], - accounts: [ - { - name: 'registeredAssetPoolPda', - isMut: true, - isSigner: false, - }, - { - name: 'merkleTreePdaToken', - isMut: true, - isSigner: false, - }, - { - name: 'authority', - isMut: true, - isSigner: true, - }, - { - name: 'systemProgram', - isMut: false, - isSigner: false, - }, - { - name: 'rent', - isMut: false, - isSigner: false, - }, - { - name: 'mint', - isMut: true, - isSigner: false, - }, - { - name: 'tokenAuthority', - isMut: true, - isSigner: false, - }, - { - name: 'tokenProgram', - isMut: false, - isSigner: false, - }, - { - name: 'registeredPoolTypePda', - isMut: false, - isSigner: false, - docs: ['Just needs to exist and be derived correctly.'], - }, - { - name: 'merkleTreeAuthorityPda', - isMut: true, - isSigner: false, - }, - ], - args: [], - }, - { - name: 'registerSolPool', - docs: [ - 'Creates a new sol pool which can be used by any registered verifier.', - ], - accounts: [ - { - name: 'registeredAssetPoolPda', - isMut: true, - isSigner: false, - }, - { - name: 'authority', - isMut: true, - isSigner: true, - }, - { - name: 'systemProgram', - isMut: false, - isSigner: false, - }, - { - name: 'rent', - isMut: false, - isSigner: false, - }, - { - name: 'registeredPoolTypePda', - isMut: false, - isSigner: false, - }, - { - name: 'merkleTreeAuthorityPda', - isMut: true, - isSigner: false, - }, - ], - args: [], - }, - { - name: 'insertTwoLeaves', - docs: [ - 'Creates and initializes a pda which stores two merkle tree leaves and encrypted Utxos.', - 'The inserted leaves are not part of the Merkle tree yet and marked accordingly.', - 'The Merkle tree has to be updated after.', - 'Can only be called from a registered verifier program.', - ], - accounts: [ - { - name: 'authority', - isMut: true, - isSigner: true, - }, - { - name: 'merkleTreeSet', - isMut: true, - isSigner: false, - }, - { - name: 'systemProgram', - isMut: false, - isSigner: false, - }, - { - name: 'registeredVerifierPda', - isMut: false, - isSigner: false, - }, - { - name: 'logWrapper', - isMut: false, - isSigner: false, - }, - ], - args: [ - { - name: 'leaves', - type: { - vec: { - array: ['u8', 32], - }, - }, - }, - ], - }, - { - name: 'insertTwoLeavesEvent', - accounts: [ - { - name: 'authority', - isMut: true, - isSigner: true, - }, - { - name: 'merkleTreeSet', - isMut: true, - isSigner: false, - }, - { - name: 'systemProgram', - isMut: false, - isSigner: false, - }, - { - name: 'registeredVerifier', - isMut: false, - isSigner: false, - }, - ], - args: [ - { - name: 'leafLeft', - type: { - array: ['u8', 32], - }, - }, - { - name: 'leafRight', - type: { - array: ['u8', 32], - }, - }, - ], - }, - { - name: 'decompressSol', - docs: [ - 'Decompresses sol from a liquidity pool.', - 'An arbitrary number of recipients can be passed in with remaining accounts.', - 'Can only be called from a registered verifier program.', - ], - accounts: [ - { - name: 'authority', - isMut: true, - isSigner: true, - }, - { - name: 'merkleTreeToken', - isMut: true, - isSigner: false, - }, - { - name: 'registeredVerifierPda', - isMut: true, - isSigner: false, - }, - { - name: 'recipient', - isMut: true, - isSigner: false, - }, - ], - args: [ - { - name: 'amount', - type: 'u64', - }, - ], - }, - { - name: 'decompressSpl', - docs: [ - 'Decompresses spl tokens from a liquidity pool.', - 'An arbitrary number of recipients can be passed in with remaining accounts.', - 'Can only be called from a registered verifier program.', - ], - accounts: [ - { - name: 'authority', - isMut: true, - isSigner: true, - }, - { - name: 'merkleTreeToken', - isMut: true, - isSigner: false, - }, - { - name: 'recipient', - isMut: true, - isSigner: false, - }, - { - name: 'tokenProgram', - isMut: false, - isSigner: false, - }, - { - name: 'tokenAuthority', - isMut: true, - isSigner: false, - }, - { - name: 'registeredVerifierPda', - isMut: false, - isSigner: false, - }, - ], - args: [ - { - name: 'amount', - type: 'u64', - }, - ], - }, - { - name: 'initializeNullifiers', - accounts: [ - { - name: 'authority', - isMut: true, - isSigner: true, - }, - { - name: 'systemProgram', - isMut: false, - isSigner: false, - }, - { - name: 'registeredVerifierPda', - isMut: false, - isSigner: false, - }, - ], - args: [ - { - name: 'nullifiers', - type: { - vec: { - array: ['u8', 32], - }, - }, - }, - ], - }, - ], - accounts: [ - { - name: 'registeredAssetPool', - docs: [ - 'Nullfier pdas are derived from the nullifier', - 'existence of a nullifier is the check to prevent double spends.', - ], - type: { - kind: 'struct', - fields: [ - { - name: 'assetPoolPubkey', - type: 'publicKey', - }, - { - name: 'poolType', - type: { - array: ['u8', 32], - }, - }, - { - name: 'index', - type: 'u64', - }, - ], - }, - }, - { - name: 'registeredPoolType', - docs: ['Pool type'], - type: { - kind: 'struct', - fields: [ - { - name: 'poolType', - type: { - array: ['u8', 32], - }, - }, - ], - }, - }, - { - name: 'merkleTreeAuthority', - docs: [ - 'Configures the authority of the merkle tree which can:', - '- register new verifiers', - '- register new asset pools', - '- register new asset pool types', - '- set permissions for new asset pool creation', - '- keeps current highest index for assets and merkle trees to enable lookups of these', - ], - type: { - kind: 'struct', - fields: [ - { - name: 'pubkey', - type: 'publicKey', - }, - { - name: 'merkleTreeSetIndex', - type: 'u64', - }, - { - name: 'registeredAssetIndex', - type: 'u64', - }, - { - name: 'enablePermissionlessSplTokens', - type: 'bool', - }, - { - name: 'enablePermissionlessMerkleTreeRegistration', - type: 'bool', - }, - ], - }, - }, - { - name: 'registeredVerifier', - docs: [''], - type: { - kind: 'struct', - fields: [ - { - name: 'pubkey', - type: 'publicKey', - }, - ], - }, - }, - { - name: 'merkleTreeSet', - docs: ['Set of on-chain Merkle trees.'], - type: { - kind: 'struct', - fields: [ - { - name: 'index', - docs: ['Unique index.'], - type: 'u64', - }, - { - name: 'nextMerkleTree', - docs: ['Public key of the next Merkle tree set.'], - type: 'publicKey', - }, - { - name: 'owner', - docs: ['Owner of the Merkle tree set.'], - type: 'publicKey', - }, - { - name: 'stateMerkleTree', - docs: ['Merkle tree for the transaction state.'], - type: { - array: ['u8', 90368], - }, - }, - { - name: 'eventMerkleTree', - docs: ['Merkle tree for event compression.'], - type: { - array: ['u8', 90368], - }, - }, - ], - }, - }, - ], - errors: [ - { - code: 6000, - name: 'MtTmpPdaInitFailed', - msg: 'Merkle tree tmp account init failed wrong pda.', - }, - { - code: 6001, - name: 'MerkleTreeInitFailed', - msg: 'Merkle tree tmp account init failed.', - }, - { - code: 6002, - name: 'ContractStillLocked', - msg: 'Contract is still locked.', - }, - { - code: 6003, - name: 'InvalidMerkleTree', - msg: 'InvalidMerkleTree.', - }, - { - code: 6004, - name: 'InvalidMerkleTreeOwner', - msg: 'InvalidMerkleTreeOwner.', - }, - { - code: 6005, - name: 'PubkeyCheckFailed', - msg: 'PubkeyCheckFailed', - }, - { - code: 6006, - name: 'CloseAccountFailed', - msg: 'CloseAccountFailed', - }, - { - code: 6007, - name: 'DecompressFailed', - msg: 'DecompressFailed', - }, - { - code: 6008, - name: 'MerkleTreeUpdateNotInRootInsert', - msg: 'MerkleTreeUpdateNotInRootInsert', - }, - { - code: 6009, - name: 'MerkleTreeUpdateNotInRootInsertState', - msg: 'MerkleTreeUpdateNotInRootInsert', - }, - { - code: 6010, - name: 'InvalidNumberOfLeaves', - msg: 'InvalidNumberOfLeaves', - }, - { - code: 6011, - name: 'LeafAlreadyInserted', - msg: 'LeafAlreadyInserted', - }, - { - code: 6012, - name: 'WrongLeavesLastTx', - msg: 'WrongLeavesLastTx', - }, - { - code: 6013, - name: 'FirstLeavesPdaIncorrectIndex', - msg: 'FirstLeavesPdaIncorrectIndex', - }, - { - code: 6014, - name: 'NullifierAlreadyExists', - msg: 'NullifierAlreadyExists', - }, - { - code: 6015, - name: 'LeavesOfWrongTree', - msg: 'LeavesOfWrongTree', - }, - { - code: 6016, - name: 'InvalidAuthority', - msg: 'InvalidAuthority', - }, - { - code: 6017, - name: 'InvalidVerifier', - msg: 'InvalidVerifier', - }, - { - code: 6018, - name: 'PubkeyTryFromFailed', - msg: 'PubkeyTryFromFailed', - }, - { - code: 6019, - name: 'ExpectedOldMerkleTrees', - msg: 'Expected old Merkle trees as remaining account.', - }, - { - code: 6020, - name: 'InvalidOldMerkleTree', - msg: 'Invalid old Merkle tree account.', - }, - { - code: 6021, - name: 'NotNewestOldMerkleTree', - msg: 'Provided old Merkle tree is not the newest one.', - }, - { - code: 6022, - name: 'ExpectedTwoLeavesPda', - msg: 'Expected two leaves PDA as a remaining account.', - }, - { - code: 6023, - name: 'InvalidTwoLeavesPda', - msg: 'Invalid two leaves PDA.', - }, - { - code: 6024, - name: 'OddNumberOfLeaves', - msg: 'Odd number of leaves.', - }, - { - code: 6025, - name: 'IntegerOverflow', - msg: 'Integer overflow, value too large', - }, - { - code: 6026, - name: 'InvalidNoopPubkey', - msg: 'Provided noop program public key is invalid', - }, - { - code: 6027, - name: 'EventNoChangelogEntry', - msg: 'Emitting an event requires at least one changelog entry', - }, - ], -}; diff --git a/js/stateless.js/src/idls/psp_compressed_pda.ts b/js/stateless.js/src/idls/psp_compressed_pda.ts index b83ab76ecd..7f442bfd54 100644 --- a/js/stateless.js/src/idls/psp_compressed_pda.ts +++ b/js/stateless.js/src/idls/psp_compressed_pda.ts @@ -1,7 +1,39 @@ export type PspCompressedPda = { version: '0.3.0'; name: 'psp_compressed_pda'; + constants: [ + { + name: 'COMPRESSED_SOL_PDA_SEED'; + type: 'bytes'; + value: '[99, 111, 109, 112, 114, 101, 115, 115, 101, 100, 95, 115, 111, 108, 95, 112, 100, 97]'; + }, + ]; instructions: [ + { + name: 'initCompressSolPda'; + docs: [ + 'Initializes the compressed sol pda.', + 'This pda is used to store compressed sol for the protocol.', + ]; + accounts: [ + { + name: 'feePayer'; + isMut: true; + isSigner: true; + }, + { + name: 'compressedSolPda'; + isMut: true; + isSigner: false; + }, + { + name: 'systemProgram'; + isMut: false; + isSigner: false; + }, + ]; + args: []; + }, { name: 'executeCompressedTransaction'; docs: [ @@ -47,6 +79,24 @@ export type PspCompressedPda = { isSigner: false; isOptional: true; }, + { + name: 'compressedSolPda'; + isMut: true; + isSigner: false; + isOptional: true; + }, + { + name: 'deCompressRecipient'; + isMut: true; + isSigner: false; + isOptional: true; + }, + { + name: 'systemProgram'; + isMut: false; + isSigner: false; + isOptional: true; + }, ]; args: [ { @@ -60,6 +110,13 @@ export type PspCompressedPda = { }, ]; accounts: [ + { + name: 'compressedSolPda'; + type: { + kind: 'struct'; + fields: []; + }; + }, { name: 'cpiSignatureAccount'; docs: [ @@ -226,7 +283,7 @@ export type PspCompressedPda = { type: 'bool'; }, { - name: 'deCompressAmount'; + name: 'deCompressLamports'; type: { option: 'u64'; }; @@ -316,6 +373,16 @@ export type PspCompressedPda = { option: 'u64'; }; }, + { + name: 'deCompressLamports'; + type: { + option: 'u64'; + }; + }, + { + name: 'isCompress'; + type: 'bool'; + }, ]; }; }, @@ -457,13 +524,75 @@ export type PspCompressedPda = { name: 'DeriveAddressError'; msg: 'DeriveAddressError'; }, + { + code: 6022; + name: 'CompressSolTransferFailed'; + msg: 'CompressSolTransferFailed'; + }, + { + code: 6023; + name: 'CompressedSolPdaUndefinedForCompressSol'; + msg: 'CompressedSolPdaUndefinedForCompressSol'; + }, + { + code: 6024; + name: 'DeCompressLamportsUndefinedForCompressSol'; + msg: 'DeCompressLamportsUndefinedForCompressSol'; + }, + { + code: 6025; + name: 'CompressedSolPdaUndefinedForDecompressSol'; + msg: 'CompressedSolPdaUndefinedForDecompressSol'; + }, + { + code: 6026; + name: 'DeCompressLamportsUndefinedForDecompressSol'; + msg: 'DeCompressLamportsUndefinedForDecompressSol'; + }, + { + code: 6027; + name: 'DecompressRecipientUndefinedForDecompressSol'; + msg: 'DecompressRecipientUndefinedForDecompressSol'; + }, ]; }; export const IDL: PspCompressedPda = { version: '0.3.0', name: 'psp_compressed_pda', + constants: [ + { + name: 'COMPRESSED_SOL_PDA_SEED', + type: 'bytes', + value: '[99, 111, 109, 112, 114, 101, 115, 115, 101, 100, 95, 115, 111, 108, 95, 112, 100, 97]', + }, + ], instructions: [ + { + name: 'initCompressSolPda', + docs: [ + 'Initializes the compressed sol pda.', + 'This pda is used to store compressed sol for the protocol.', + ], + accounts: [ + { + name: 'feePayer', + isMut: true, + isSigner: true, + }, + { + name: 'compressedSolPda', + isMut: true, + isSigner: false, + }, + { + name: 'systemProgram', + isMut: false, + isSigner: false, + }, + ], + args: [], + }, { name: 'executeCompressedTransaction', docs: [ @@ -509,6 +638,24 @@ export const IDL: PspCompressedPda = { isSigner: false, isOptional: true, }, + { + name: 'compressedSolPda', + isMut: true, + isSigner: false, + isOptional: true, + }, + { + name: 'deCompressRecipient', + isMut: true, + isSigner: false, + isOptional: true, + }, + { + name: 'systemProgram', + isMut: false, + isSigner: false, + isOptional: true, + }, ], args: [ { @@ -522,6 +669,13 @@ export const IDL: PspCompressedPda = { }, ], accounts: [ + { + name: 'compressedSolPda', + type: { + kind: 'struct', + fields: [], + }, + }, { name: 'cpiSignatureAccount', docs: [ @@ -688,7 +842,7 @@ export const IDL: PspCompressedPda = { type: 'bool', }, { - name: 'deCompressAmount', + name: 'deCompressLamports', type: { option: 'u64', }, @@ -778,6 +932,16 @@ export const IDL: PspCompressedPda = { option: 'u64', }, }, + { + name: 'deCompressLamports', + type: { + option: 'u64', + }, + }, + { + name: 'isCompress', + type: 'bool', + }, ], }, }, @@ -919,5 +1083,35 @@ export const IDL: PspCompressedPda = { name: 'DeriveAddressError', msg: 'DeriveAddressError', }, + { + code: 6022, + name: 'CompressSolTransferFailed', + msg: 'CompressSolTransferFailed', + }, + { + code: 6023, + name: 'CompressedSolPdaUndefinedForCompressSol', + msg: 'CompressedSolPdaUndefinedForCompressSol', + }, + { + code: 6024, + name: 'DeCompressLamportsUndefinedForCompressSol', + msg: 'DeCompressLamportsUndefinedForCompressSol', + }, + { + code: 6025, + name: 'CompressedSolPdaUndefinedForDecompressSol', + msg: 'CompressedSolPdaUndefinedForDecompressSol', + }, + { + code: 6026, + name: 'DeCompressLamportsUndefinedForDecompressSol', + msg: 'DeCompressLamportsUndefinedForDecompressSol', + }, + { + code: 6027, + name: 'DecompressRecipientUndefinedForDecompressSol', + msg: 'DecompressRecipientUndefinedForDecompressSol', + }, ], }; diff --git a/js/stateless.js/src/index.ts b/js/stateless.js/src/index.ts index 7ad257f222..c0c084f417 100644 --- a/js/stateless.js/src/index.ts +++ b/js/stateless.js/src/index.ts @@ -1,3 +1,4 @@ +export * from './actions'; export * from './idls'; export * from './instruction'; export * from './programs'; diff --git a/js/stateless.js/src/instruction/pack-compressed-accounts.ts b/js/stateless.js/src/instruction/pack-compressed-accounts.ts index 805093ffd9..e15f086d02 100644 --- a/js/stateless.js/src/instruction/pack-compressed-accounts.ts +++ b/js/stateless.js/src/instruction/pack-compressed-accounts.ts @@ -92,6 +92,7 @@ export function packCompressedAccounts( _remainingAccounts, account.merkleTree, ); + const nullifierQueuePubkeyIndex = getIndexOrAdd( _remainingAccounts, account.nullifierQueue, diff --git a/js/stateless.js/src/programs/compressed-pda.ts b/js/stateless.js/src/programs/compressed-pda.ts index 0495fc99c4..f57ee42e10 100644 --- a/js/stateless.js/src/programs/compressed-pda.ts +++ b/js/stateless.js/src/programs/compressed-pda.ts @@ -6,6 +6,7 @@ import { TransactionInstruction, AccountMeta, ComputeBudgetProgram, + SystemProgram, } from '@solana/web3.js'; import { IDL, PspCompressedPda } from '../idls/psp_compressed_pda'; import { useWallet } from '../wallet'; @@ -22,8 +23,11 @@ import { validateSameOwner, validateSufficientBalance, } from '../utils/validation'; +import { placeholderValidityProof } from '../test-utils'; -const sumupLamports = (accounts: CompressedAccountWithMerkleContext[]): BN => { +export const sumUpLamports = ( + accounts: CompressedAccountWithMerkleContext[], +): BN => { return accounts.reduce( (acc, account) => acc.add(bn(account.lamports)), bn(0), @@ -70,6 +74,74 @@ type TransferParams = { outputStateTrees?: PublicKey[] | PublicKey; }; +/// TODO: +/// - add option to compress to another owner +/// - add option to merge with input state +/** + * Defines the parameters for the transfer method + */ +type CompressParams = { + /** + * The payer of the transaction. + */ + payer: PublicKey; + /** + * address that the lamports are attached to. also defaults to the recipient owner + */ + toAddress: PublicKey; + /** + * amount of lamports to compress. + */ + lamports: number | BN; + /** + * The state tree that the tx output should be inserted into. This can be a + * + */ + outputStateTree: PublicKey; +}; + +/** + * Defines the parameters for the transfer method + */ +type DecompressParams = { + /** + * The payer of the transaction. + */ + payer: PublicKey; + /** + * The input state to be consumed. + */ + inputCompressedAccounts: CompressedAccountWithMerkleContext[]; + /** + * Recipient address of uncompressed lamports + */ + toAddress: PublicKey; + /** + * amount of lamports to decompress. + */ + lamports: number | BN; + /** + * The recent state root indices of the input state. The expiry is tied to + * the proof. + * + * TODO: Add support for passing recent-values after instruction creation. + */ + recentInputStateRootIndices: number[]; + /** + * The recent validity proof for state inclusion of the input state. It + * expires after n slots. + */ + recentValidityProof: CompressedProof; + /** + * The state trees that the tx output should be inserted into. This can be a + * single PublicKey or an array of PublicKey. Defaults to the 0th state tree + * of input state. + */ + outputStateTree?: PublicKey; +}; + +const COMPRESSED_SOL_PDA_SEED = Buffer.from('compressed_sol_pda'); + export class LightSystemProgram { /** * @internal @@ -93,6 +165,18 @@ export class LightSystemProgram { return this._program!; } + /** + * @internal + * Cwct1kQLwJm8Z3HetLu8m4SXkhD6FZ5fXbJQCxTxPnGY + */ + static deriveCompressedSolPda(): PublicKey { + const seeds = [COMPRESSED_SOL_PDA_SEED]; + const [address, _] = PublicKey.findProgramAddressSync( + seeds, + this.programId, + ); + return address; + } /** * Initializes the program statically if not already initialized. */ @@ -122,7 +206,7 @@ export class LightSystemProgram { lamports: number | BN, ): CompressedAccount[] { lamports = bn(lamports); - const inputLamports = sumupLamports(inputCompressedAccounts); + const inputLamports = sumUpLamports(inputCompressedAccounts); const changeLamports = inputLamports.sub(lamports); validateSufficientBalance(changeLamports); @@ -143,6 +227,32 @@ export class LightSystemProgram { return outputCompressedAccounts; } + static createDecompressOutputState( + inputCompressedAccounts: CompressedAccountWithMerkleContext[], + lamports: number | BN, + ): CompressedAccount[] { + lamports = bn(lamports); + const inputLamports = sumUpLamports(inputCompressedAccounts); + const changeLamports = inputLamports.sub(lamports); + + validateSufficientBalance(changeLamports); + + /// lamports gets decompressed + if (changeLamports.eq(bn(0))) { + return []; + } + + validateSameOwner(inputCompressedAccounts); + + const outputCompressedAccounts: CompressedAccount[] = [ + createCompressedAccount( + inputCompressedAccounts[0].owner, + changeLamports, + ), + ]; + return outputCompressedAccounts; + } + /** * Creates a transaction instruction that transfers compressed lamports from * one owner to another. @@ -195,14 +305,204 @@ export class LightSystemProgram { outputStateMerkleTreeIndices, ), relayFee: null, + deCompressLamports: null, + isCompress: false, + }, + ); + + /// Format accounts + const staticAccounts = { + ...defaultStaticAccountsStruct(), + signer: payer, + invokingProgram: this.programId, + compressedSolPda: null, + deCompressRecipient: null, + systemProgram: null, + }; + + const remainingAccountMetas = remainingAccounts.map( + (account): AccountMeta => ({ + pubkey: account, + isWritable: true, + isSigner: false, + }), + ); + + /// Build anchor instruction + const instruction = await this.program.methods + .executeCompressedTransaction(data) + .accounts(staticAccounts) + .remainingAccounts(remainingAccountMetas) + .instruction(); + + const instructions = [ + ComputeBudgetProgram.setComputeUnitLimit({ units: 1_000_000 }), + instruction, + ]; + + return instructions; + } + + /** + * Initialize the compressed sol pda + */ + static async initCompressedSolPda( + feePayer: PublicKey, + ): Promise { + const accounts = { + feePayer, + compressedSolPda: this.deriveCompressedSolPda(), + systemProgram: SystemProgram.programId, + }; + + const instruction = await this.program.methods + .initCompressSolPda() + .accounts(accounts) + .instruction(); + return instruction; + } + + /** + * Creates a transaction instruction that transfers compressed lamports from + * one owner to another. + */ + // TODO: add support for non-fee-payer owner + static async compress( + params: CompressParams, + ): Promise { + const { payer, outputStateTree, toAddress } = params; + + /// Create output state + const lamports = bn(params.lamports); + const outputCompressedAccount = createCompressedAccount( + toAddress, + lamports, + ); + + /// Pack accounts + const { + packedInputCompressedAccounts, + outputStateMerkleTreeIndices, + remainingAccounts, + } = packCompressedAccounts([], 1, outputStateTree); + + /// Encode instruction data + const data = this.program.coder.types.encode( + 'InstructionDataTransfer', + { + proof: placeholderValidityProof(), + inputRootIndices: [], + /// TODO: here and on-chain: option or similar. + newAddressSeeds: [], + addressQueueAccountIndices: Buffer.from([]), + addressMerkleTreeAccountIndices: Buffer.from([]), + addressMerkleTreeRootIndices: [], + inputCompressedAccountsWithMerkleContext: + packedInputCompressedAccounts, + outputCompressedAccounts: [outputCompressedAccount], + outputStateMerkleTreeAccountIndices: Buffer.from( + new Uint8Array(outputStateMerkleTreeIndices), + ), + relayFee: null, + deCompressLamports: lamports, + isCompress: true, + }, + ); + + /// TODO : refactor + /// Format accounts + const staticAccounts = { + ...defaultStaticAccountsStruct(), + signer: payer, + invokingProgram: this.programId, + compressedSolPda: this.deriveCompressedSolPda(), + deCompressRecipient: null, + systemProgram: SystemProgram.programId, + }; + + const remainingAccountMetas = remainingAccounts.map( + (account): AccountMeta => ({ + pubkey: account, + isWritable: true, + isSigner: false, + }), + ); + + /// Build anchor instruction + const instruction = await this.program.methods + .executeCompressedTransaction(data) + .accounts(staticAccounts) + .remainingAccounts(remainingAccountMetas) + .instruction(); + + const instructions = [ + ComputeBudgetProgram.setComputeUnitLimit({ units: 1_000_000 }), + instruction, + ]; + + return instructions; + } + + /** + * Creates a transaction instruction that transfers compressed lamports from + * one owner to another. + */ + /// TODO: add check that outputStateTree is provided or supplemented if change exists + static async decompress( + params: DecompressParams, + ): Promise { + const { payer, outputStateTree, toAddress } = params; + + /// Create output state + const lamports = bn(params.lamports); + const outputCompressedAccounts = this.createDecompressOutputState( + params.inputCompressedAccounts, + lamports, + ); + + /// Pack accounts + const { + packedInputCompressedAccounts, + outputStateMerkleTreeIndices, + remainingAccounts, + } = packCompressedAccounts( + params.inputCompressedAccounts, + outputCompressedAccounts.length, + outputStateTree, + ); + + /// Encode instruction data + const data = this.program.coder.types.encode( + 'InstructionDataTransfer', + { + proof: params.recentValidityProof, + inputRootIndices: params.recentInputStateRootIndices, + /// TODO: here and on-chain: option or similar. + newAddressSeeds: [], + addressQueueAccountIndices: Buffer.from([]), + addressMerkleTreeAccountIndices: Buffer.from([]), + addressMerkleTreeRootIndices: [], + inputCompressedAccountsWithMerkleContext: + packedInputCompressedAccounts, + outputCompressedAccounts: outputCompressedAccounts, + outputStateMerkleTreeAccountIndices: Buffer.from( + new Uint8Array(outputStateMerkleTreeIndices), + ), + relayFee: null, + deCompressLamports: lamports, + isCompress: false, }, ); + /// TODO : refactor /// Format accounts const staticAccounts = { ...defaultStaticAccountsStruct(), signer: payer, invokingProgram: this.programId, + compressedSolPda: this.deriveCompressedSolPda(), + deCompressRecipient: toAddress, + systemProgram: SystemProgram.programId, }; const remainingAccountMetas = remainingAccounts.map( diff --git a/js/stateless.js/src/rpc-interface.ts b/js/stateless.js/src/rpc-interface.ts index 8b38317834..ce66881fd1 100644 --- a/js/stateless.js/src/rpc-interface.ts +++ b/js/stateless.js/src/rpc-interface.ts @@ -22,6 +22,7 @@ import { createBN254, CompressedProof, CompressedAccountWithMerkleContext, + MerkleContextWithMerkleProof, } from './state'; import { BN } from '@coral-xyz/anchor'; @@ -32,22 +33,51 @@ export type CompressedProofWithContext = { // for now we assume latest root = allLeaves.length rootIndices: number[]; leafIndices: number[]; - leafs: BN[]; + leaves: BN[]; merkleTree: PublicKey; nullifierQueue: PublicKey; }; export type GetCompressedAccountsFilter = MemcmpFilter | DataSizeFilter; -export type GetUtxoConfig = { +export type GetCompressedAccountConfig = { encoding?: string; }; -export type GetCompressedAccountConfig = GetUtxoConfig; export type GetCompressedAccountsConfig = { encoding?: string; filters?: GetCompressedAccountsFilter[]; }; +interface PaginatedCompressedAccountList { + items: CompressedAccountWithMerkleContext[]; + cursor: number[]; // hash +} + +/// TODO: update +interface TokenAccountData { + hash: BN254; + account: PublicKey; // pubkey + owner: PublicKey; // pubkey + mint: PublicKey; // pubkey + amount: BN; + delegate: PublicKey; // pubkey + isNative: boolean; + // add delegatedAmount + closeAuthority: PublicKey; // pubkey + frozen: boolean; +} + +interface PaginatedCompressedTokenAccountList { + items: TokenAccountData[]; + // todo: add underlying utxo. items: CompressedAccountWithMerkleContext[]; + cursor: number[]; // hash +} + +interface Options { + cursor?: number[]; + limit?: BN; +} + export type WithMerkleUpdateContext = { /** merkle update context */ context: MerkleUpdateContext | null; @@ -55,6 +85,15 @@ export type WithMerkleUpdateContext = { value: T; }; +export type WithContext = { + /** context */ + context: { + slot: number; + }; + /** response value */ + value: T; +}; + /** * @internal */ @@ -75,23 +114,10 @@ const BN254FromString = coerce(instance(BN), string(), value => /** * @internal */ -const Base64EncodedUtxoDataResult = tuple([string(), literal('base64')]); - -// /** -// * @internal -// */ -// const TlvFromBase64EncodedUtxoData = coerce( -// instance(Array), -// Base64EncodedUtxoDataResult, -// value => { -// const decodedData = decodeUtxoData(Buffer.from(value[0], 'base64')); -// if (decodedData.tlvElements.every(isValidTlvDataElement)) { -// return decodedData; -// } else { -// throw new Error('Invalid TlvDataElement structure'); -// } -// }, -// ); +const Base64EncodedCompressedAccountDataResult = tuple([ + string(), + literal('base64'), +]); /** * @internal @@ -153,18 +179,18 @@ export function jsonRpcResultAndContext(value: Struct) { /** * @internal */ -// /// Utxo with merkle context -// export const UtxoResult = pick({ -// data: TlvFromBase64EncodedUtxoData, -// owner: PublicKeyFromString, -// lamports: number(), -// leafIndex: number(), -// merkleTree: PublicKeyFromString, -// nullifierQueue: PublicKeyFromString, -// slotCreated: number(), -// seq: number(), -// address: optional(PublicKeyFromString), -// }); +/// Compressed Account With Merkle Context +export const CompressedAccountResult = pick({ + // todo: check hash format + hash: array(number()), + address: optional(PublicKeyFromString), + data: string(), + owner: PublicKeyFromString, + lamports: number(), + tree: optional(PublicKeyFromString), + seq: optional(number()), + slotUpdated: number(), +}); /** * @internal @@ -183,42 +209,97 @@ export function jsonRpcResultAndContext(value: Struct) { // address: optional(PublicKeyFromString), // }), // ); -/** - * @internal - */ -export const MerkleProofResult = pick({ - merkleTree: PublicKeyFromString, - nullifierQueue: PublicKeyFromString, - leafIndex: number(), - proof: array(BN254FromString), - rootIndex: number(), -}); +// /** +// * @internal +// */ +// export const MerkleProofResult = pick({ +// merkleTree: PublicKeyFromString, +// nullifierQueue: PublicKeyFromString, +// leafIndex: number(), +// proof: array(BN254FromString), +// rootIndex: number(), +// }); -/** - * @internal - */ -export const CompressedAccountMerkleProofResult = pick({ - utxoHash: PublicKeyFromString, - merkleTree: PublicKeyFromString, - nullifierQueue: PublicKeyFromString, - leafIndex: number(), - proof: array(BN254FromString), - rootIndex: number(), +// /** +// * @internal +// */ +// export const CompressedAccountMerkleProofResult = pick({ +// utxoHash: PublicKeyFromString, +// merkleTree: PublicKeyFromString, +// nullifierQueue: PublicKeyFromString, +// leafIndex: number(), +// proof: array(BN254FromString), +// rootIndex: number(), +// }); + +/// TODO: we need to add: tree, nullifierQueue, leafIndex, rootIndex +export const AccountProofResult = pick({ + hash: array(number()), + root: array(number()), + proof: array(array(number())), }); export interface CompressionApiInterface { - /** Retrieve a utxo */ - // getUtxo( - // utxoHash: BN254, - // config?: GetUtxoConfig, - // ): Promise | null>; - /** Retrieve the proof for a utxo */ - // getUtxoProof(utxoHash: BN254): Promise; - /** Retrieve utxos by owner */ - getUtxos( - owner: PublicKey, - config?: GetUtxoConfig, - ): Promise[]>; - - getValidityProof(utxoHashes: BN254[]): Promise; + /** Retrieve compressed account by hash or address */ + getCompressedAccount( + hash?: BN254, + address?: BN254, + config?: GetCompressedAccountConfig, + ): Promise>; + + /** Retrieve merkle proof for a compressed account */ + getCompressedAccountProof( + hash: BN254, + address?: BN254, + config?: GetCompressedAccountConfig, + ): Promise; // TODO: expose context slot + + // TODO: consider utility of this. + /** Retrieve compressed balance for a compressed account */ + getCompressedBalance( + hash: BN254, + address?: BN254, + config?: GetCompressedAccountConfig, + ): Promise>; + + /** Receive validity Proof for n compressed accounts */ + getValidityProof( + hashes: BN254[], + ): Promise>; + + /** Retrieve health status of the node */ + getHealth(): Promise; + + /** Retrieve the current slot */ + getSlot(): Promise; + + // TODO: add filter options over raw bytes + getCompressedProgramAccounts( + programId: PublicKey, + options?: Options, + // filterOptions?: GetCompressedAccountsFilter[], + ): Promise>; + + getCompressedTokenAccountsByOwner( + publicKey: PublicKey, + options?: GetCompressedTokenAccountsByOwnerOptions, + ): Promise>; + + getCompressedTokenAccountsByDelegate( + publicKey: PublicKey, + options?: GetCompressedTokenAccountsByOwnerOptions, + ): Promise>; + + // TODO: evaluate utility + getCompressedTokenAccountBalance( + hash: BN254, + address?: BN254, + config?: GetCompressedAccountConfig, + ): Promise>; +} + +interface GetCompressedTokenAccountsByOwnerOptions { + mint?: PublicKey; + cursor?: string; + limit?: BN; } diff --git a/js/stateless.js/src/rpc.ts b/js/stateless.js/src/rpc.ts index 55793fadb6..cdebf3e492 100644 --- a/js/stateless.js/src/rpc.ts +++ b/js/stateless.js/src/rpc.ts @@ -73,6 +73,17 @@ export class Rpc extends Connection implements CompressionApiInterface { super(endpoint, config || 'confirmed'); } + async getCompressedAccount( + hash?: BN254, + address?: BN254, + config?: GetUtxoConfig, + ): Promise> { + // returns withContext + // { context: {slot}, value: Utxo} + // Utxo { .., tree, seq, slot_updated} + throw new Error('Method not implemented.'); + } + /** Retrieve the proof for a utxo */ async getUtxoProof( utxoHash: BN254, diff --git a/js/stateless.js/src/state/compressed-account.ts b/js/stateless.js/src/state/compressed-account.ts index 5a619c684c..81984af470 100644 --- a/js/stateless.js/src/state/compressed-account.ts +++ b/js/stateless.js/src/state/compressed-account.ts @@ -21,10 +21,13 @@ export type MerkleContext = { }; export type MerkleUpdateContext = { + /** Context slot */ + slot: number; + /// TODO: sync with photon /** Slot that the compressed account was appended at */ - slotCreated: number; + slotCreated?: number; /** Sequence */ - seq: number; + seq?: number; }; export type MerkleContextWithMerkleProof = MerkleContext & { diff --git a/js/stateless.js/src/state/types.ts b/js/stateless.js/src/state/types.ts index 6a4a3bd5a0..b1e4c009bd 100644 --- a/js/stateless.js/src/state/types.ts +++ b/js/stateless.js/src/state/types.ts @@ -43,7 +43,7 @@ export interface PublicTransactionEvent { outputLeafIndices: number[]; // Vec relayFee: BN | null; // Option isCompress: boolean; // bool - deCompressAmount: BN | null; // Option + deCompressLamports: BN | null; // Option pubkeyArray: PublicKey[]; // Vec message: Uint8Array | null; // Option } @@ -55,6 +55,8 @@ export interface InstructionDataTransfer { outputCompressedAccounts: CompressedAccount[]; outputStateMerkleTreeAccountIndices: Buffer; // bytes // FIXME: into Vec on-chain relayFee: BN | null; // Option + deCompressLamports: BN | null; // Option + isCompression: boolean; // bool } export interface CompressedProof { diff --git a/js/stateless.js/src/test-utils/test-rpc.ts b/js/stateless.js/src/test-utils/test-rpc.ts index 9409c8e1e6..8f49724b0e 100644 --- a/js/stateless.js/src/test-utils/test-rpc.ts +++ b/js/stateless.js/src/test-utils/test-rpc.ts @@ -287,14 +287,10 @@ export class TestRpc extends Rpc { ); const inputs = { - /// roots - root: roots, - /// array of leafIndices + roots, inPathIndices: leafIndices, - /// array of array of pathElements inPathElements: hexPathElementsAll, - /// array of leafs - leaf: compressedAccountHashes.map(compressedAccountHash => + leaves: compressedAccountHashes.map(compressedAccountHash => toHex(compressedAccountHash.toString()), ), }; @@ -335,7 +331,7 @@ export class TestRpc extends Rpc { // TODO: temporary rootIndices: leafIndices.map(_ => allLeafIndices.length), leafIndices, - leafs: compressedAccountHashes, + leaves: compressedAccountHashes, merkleTree: this.merkleTreeAddress, nullifierQueue: this.nullifierQueueAddress, }; diff --git a/js/stateless.js/src/utils/conversion.ts b/js/stateless.js/src/utils/conversion.ts index 0c45388f2b..962cda0b48 100644 --- a/js/stateless.js/src/utils/conversion.ts +++ b/js/stateless.js/src/utils/conversion.ts @@ -99,7 +99,7 @@ if (import.meta.vitest) { const buf = Buffer.from( '6500000000000000000000000000000000000000000000000000000000000000', 'hex', - ); + ).reverse(); expect(isSmallerThanBn254FieldSizeLe(buf)).toBe(false); }); }); @@ -117,7 +117,7 @@ if (import.meta.vitest) { 18, 44, ]; - it.only('should return a valid value for initial buffer', async () => { + it('should return a valid value for initial buffer', async () => { const result = await hashToBn254FieldSizeLe(Buffer.from(bytes)); expect(Array.from(result![0])).toEqual(refResult); @@ -132,7 +132,7 @@ if (import.meta.vitest) { expect(result).not.toBeNull(); if (result) { expect(result[0]).toBeInstanceOf(Buffer); - expect(result[1]).toBe(255); + expect(result[1]).toBe(254); } }); diff --git a/js/stateless.js/tests/e2e/compress.test.ts b/js/stateless.js/tests/e2e/compress.test.ts new file mode 100644 index 0000000000..b8b0cca783 --- /dev/null +++ b/js/stateless.js/tests/e2e/compress.test.ts @@ -0,0 +1,90 @@ +import { describe, it, assert, beforeAll } from 'vitest'; +import { Signer } from '@solana/web3.js'; +import { defaultTestStateTreeAccounts } from '../../src/constants'; +import { getTestRpc, newAccountWithLamports } from '../../src/test-utils'; +import { + Rpc, + compressLamports, + decompressLamports, + initSolOmnibusAccount, +} from '../../src'; + +/// TODO: add test case for payer != address +describe('compress', () => { + const { merkleTree } = defaultTestStateTreeAccounts(); + let rpc: Rpc; + let payer: Signer; + let initAuthority: Signer; + + beforeAll(async () => { + rpc = await getTestRpc(); + payer = await newAccountWithLamports(rpc, 1e9, 200); + initAuthority = await newAccountWithLamports(rpc, 1e9); + }); + + it('should compress lamports and then decompress', async () => { + const compressLamportsAmount = 20; + const preCompressBalance = await rpc.getBalance(payer.publicKey); + assert.equal(preCompressBalance, 1e9); + + /// TODO: add case for payer != initAuthority + await initSolOmnibusAccount(rpc, initAuthority, initAuthority); + + await compressLamports( + rpc, + payer, + compressLamportsAmount, + payer.publicKey, + merkleTree, + ); + + rpc = await getTestRpc(); + + // @ts-ignore + const indexedEvents = await rpc.getParsedEvents(); + assert.equal(indexedEvents.length, 2); + assert.equal(indexedEvents[0].inputCompressedAccounts.length, 0); + assert.equal(indexedEvents[0].outputCompressedAccounts.length, 1); + assert.equal( + Number(indexedEvents[0].outputCompressedAccounts[0].lamports), + compressLamportsAmount, + ); + assert.equal( + indexedEvents[0].outputCompressedAccounts[0].owner.toBase58(), + payer.publicKey.toBase58(), + ); + assert.equal(indexedEvents[0].outputCompressedAccounts[0].data, null); + const postCompressBalance = await rpc.getBalance(payer.publicKey); + assert.equal( + postCompressBalance, + preCompressBalance - compressLamportsAmount - 5000, + ); + + /// Decompress + const decompressLamportsAmount = 15; + const decompressRecipient = payer.publicKey; + + await decompressLamports( + rpc, + payer, + decompressLamportsAmount, + decompressRecipient, + merkleTree, + ); + + //@ts-ignore + const indexedEvents2 = await rpc.getParsedEvents(); + assert.equal(indexedEvents2.length, 3); + assert.equal(indexedEvents2[0].inputCompressedAccounts.length, 1); + assert.equal(indexedEvents2[0].outputCompressedAccounts.length, 1); + assert.equal( + Number(indexedEvents2[0].outputCompressedAccounts[0].lamports), + compressLamportsAmount - decompressLamportsAmount, + ); + const postDecompressBalance = await rpc.getBalance(decompressRecipient); + assert.equal( + postDecompressBalance, + postCompressBalance + decompressLamportsAmount - 5000, + ); + }); +}); diff --git a/js/stateless.js/tests/e2e/transfer.test.ts b/js/stateless.js/tests/e2e/transfer.test.ts index e17dc532f7..5606594da1 100644 --- a/js/stateless.js/tests/e2e/transfer.test.ts +++ b/js/stateless.js/tests/e2e/transfer.test.ts @@ -26,9 +26,7 @@ describe('transfer', () => { payer = await newAccountWithLamports(rpc); bob = Keypair.generate(); }); - // Note: - // We don't compress SOL yet, therefore cannot spend utxos with value yet. - // TODO: add one run with with inputUtxo where lamports: 0 + /// TODO: add compression step into beforeAll. it('should send compressed lamports alice -> bob', async () => { const proof_mock = placeholderValidityProof(); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8350d07e10..01a53bbd85 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -380,10 +380,6 @@ importers: specifier: ^0.34.6 version: 0.34.6(@vitest/browser@0.34.6)(playwright@1.40.1) - hasher.rs/src/main/wasm: {} - - hasher.rs/src/main/wasm-simd: {} - js/compressed-token: dependencies: '@coral-xyz/anchor': diff --git a/programs/compressed-pda/src/de_compression.rs b/programs/compressed-pda/src/de_compression.rs new file mode 100644 index 0000000000..a3634a0d1d --- /dev/null +++ b/programs/compressed-pda/src/de_compression.rs @@ -0,0 +1,112 @@ +use aligned_sized::*; +use anchor_lang::{ + prelude::*, + solana_program::{account_info::AccountInfo, pubkey::Pubkey}, +}; + +use crate::{append_state::get_seeds, InstructionDataTransfer, TransferInstruction}; + +#[account] +#[aligned_sized(anchor)] +pub struct CompressedSolPda {} + +#[constant] +pub const COMPRESSED_SOL_PDA_SEED: &[u8] = b"compressed_sol_pda"; + +#[derive(Accounts)] +pub struct InitializeCompressedSolPda<'info> { + #[account(mut)] + pub fee_payer: Signer<'info>, + #[account( + init, + payer = fee_payer, + seeds = [COMPRESSED_SOL_PDA_SEED], + bump, + space = CompressedSolPda::LEN, + )] + pub compressed_sol_pda: Account<'info, CompressedSolPda>, + pub system_program: Program<'info, System>, +} + +pub fn de_compress_lamports<'a, 'b, 'c: 'info, 'info>( + inputs: &'a InstructionDataTransfer, + ctx: &'a Context<'a, 'b, 'c, 'info, TransferInstruction<'info>>, +) -> Result<()> { + if inputs.is_compress { + compress_lamports(inputs, ctx) + } else if inputs.de_compress_lamports.is_some() { + decompress_lamports(inputs, ctx) + } else { + Ok(()) + } +} + +pub fn decompress_lamports<'a, 'b, 'c: 'info, 'info>( + inputs: &'a InstructionDataTransfer, + ctx: &'a Context<'a, 'b, 'c, 'info, TransferInstruction<'info>>, +) -> Result<()> { + let recipient = match ctx.accounts.de_compress_recipient.as_ref() { + Some(de_compress_recipient) => de_compress_recipient.to_account_info(), + None => return err!(crate::ErrorCode::DecompressRecipientUndefinedForDecompressSol), + }; + let compressed_sol_pda = match ctx.accounts.compressed_sol_pda.as_ref() { + Some(compressed_sol_pda) => compressed_sol_pda.to_account_info(), + None => return err!(crate::ErrorCode::CompressedSolPdaUndefinedForDecompressSol), + }; + let lamports = match inputs.de_compress_lamports { + Some(lamports) => lamports, + None => return err!(crate::ErrorCode::DeCompressLamportsUndefinedForDecompressSol), + }; + compressed_sol_pda.sub_lamports(lamports)?; + recipient.add_lamports(lamports)?; + Ok(()) +} + +pub fn compress_lamports<'a, 'b, 'c: 'info, 'info>( + inputs: &'a InstructionDataTransfer, + ctx: &'a Context<'a, 'b, 'c, 'info, TransferInstruction<'info>>, +) -> Result<()> { + let recipient = match ctx.accounts.compressed_sol_pda.as_ref() { + Some(compressed_sol_pda) => compressed_sol_pda.to_account_info(), + None => return err!(crate::ErrorCode::CompressedSolPdaUndefinedForCompressSol), + }; + let lamports = match inputs.de_compress_lamports { + Some(lamports) => lamports, + None => return err!(crate::ErrorCode::DeCompressLamportsUndefinedForCompressSol), + }; + + transfer_lamports( + &ctx.accounts.signer.to_account_info(), + &recipient, + &ctx.accounts + .psp_account_compression_authority + .to_account_info(), + lamports, + ) +} + +pub fn transfer_lamports<'info>( + sender: &AccountInfo<'info>, + receiver: &AccountInfo<'info>, + authority: &AccountInfo<'info>, + lamports: u64, +) -> Result<()> { + msg!("transfer_lamports {}", lamports); + msg!("sender lamports: {}", sender.lamports()); + msg!("receiver lamports: {}", receiver.lamports()); + let instruction = anchor_lang::solana_program::system_instruction::transfer( + sender.key, + receiver.key, + lamports, + ); + let (seed, bump) = get_seeds(&crate::ID, &authority.key())?; + let bump = &[bump]; + let seeds = &[&[b"cpi_authority", seed.as_slice(), bump][..]]; + + anchor_lang::solana_program::program::invoke_signed( + &instruction, + &[authority.clone(), sender.clone(), receiver.clone()], + seeds, + )?; + Ok(()) +} diff --git a/programs/compressed-pda/src/event.rs b/programs/compressed-pda/src/event.rs index d7893ced19..7a33ed65de 100644 --- a/programs/compressed-pda/src/event.rs +++ b/programs/compressed-pda/src/event.rs @@ -21,7 +21,7 @@ pub struct PublicTransactionEvent { pub output_leaf_indices: Vec, pub relay_fee: Option, pub is_compress: bool, - pub de_compress_amount: Option, + pub de_compress_lamports: Option, pub pubkey_array: Vec, pub message: Option>, } @@ -52,7 +52,7 @@ pub fn emit_state_transition_event<'a, 'b, 'c: 'info, 'info>( output_compressed_account_hashes: &[[u8; 32]], output_leaf_indices: &[u32], ) -> anchor_lang::Result { - // TODO: add message and de_compress_amount + // TODO: add message and de_compress_lamports let event = PublicTransactionEvent { input_compressed_account_hashes: input_compressed_account_hashes.to_vec(), output_compressed_account_hashes: output_compressed_account_hashes.to_vec(), @@ -64,7 +64,7 @@ pub fn emit_state_transition_event<'a, 'b, 'c: 'info, 'info>( output_leaf_indices: output_leaf_indices.to_vec(), relay_fee: inputs.relay_fee, pubkey_array: ctx.remaining_accounts.iter().map(|x| x.key()).collect(), - de_compress_amount: None, + de_compress_lamports: None, message: None, is_compress: false, }; diff --git a/programs/compressed-pda/src/instructions.rs b/programs/compressed-pda/src/instructions.rs index f4dbd422f9..9256b0dbe7 100644 --- a/programs/compressed-pda/src/instructions.rs +++ b/programs/compressed-pda/src/instructions.rs @@ -7,13 +7,14 @@ use crate::{ append_state::insert_output_compressed_accounts_into_state_merkle_tree, compressed_account::{derive_address, CompressedAccount, CompressedAccountWithMerkleContext}, create_address::insert_addresses_into_address_merkle_tree_queue, + de_compress_lamports, event::{emit_state_transition_event, PublicTransactionEvent}, nullify_state::insert_nullifiers, utils::CompressedProof, verify_state::{ fetch_roots, hash_input_compressed_accounts, signer_check, sum_check, verify_state_proof, }, - ErrorCode, + CompressedSolPda, ErrorCode, }; pub fn process_execute_compressed_transaction<'a, 'b, 'c: 'info, 'info>( inputs: &'a InstructionDataTransfer, @@ -25,6 +26,8 @@ pub fn process_execute_compressed_transaction<'a, 'b, 'c: 'info, 'info>( &inputs.input_compressed_accounts_with_merkle_context, &inputs.output_compressed_accounts, &inputs.relay_fee, + &inputs.de_compress_lamports, + &inputs.is_compress, )?; msg!("sum check success"); // signer check --------------------------------------------------- @@ -41,6 +44,8 @@ pub fn process_execute_compressed_transaction<'a, 'b, 'c: 'info, 'info>( } None => Ok(()), }?; + // de_compress_lamports --------------------------------------------------- + de_compress_lamports(inputs, ctx)?; let mut roots = vec![[0u8; 32]; inputs.input_compressed_accounts_with_merkle_context.len()]; fetch_roots(inputs, ctx, &mut roots)?; @@ -168,6 +173,11 @@ pub struct TransferInstruction<'info> { pub account_compression_program: Program<'info, AccountCompression>, pub cpi_signature_account: Option>, pub invoking_program: Option>, + #[account(mut)] + pub compressed_sol_pda: Option>, + #[account(mut)] + pub de_compress_recipient: Option>, + pub system_program: Option>, } /// collects invocations without proofs @@ -192,6 +202,8 @@ pub struct InstructionDataTransfer { /// The indices of the accounts in the output state merkle tree. pub output_state_merkle_tree_account_indices: Vec, pub relay_fee: Option, + pub de_compress_lamports: Option, + pub is_compress: bool, } // TODO: refactor to compressed_account diff --git a/programs/compressed-pda/src/lib.rs b/programs/compressed-pda/src/lib.rs index 27fe3d351c..a205ba7b39 100644 --- a/programs/compressed-pda/src/lib.rs +++ b/programs/compressed-pda/src/lib.rs @@ -4,9 +4,11 @@ pub mod append_state; pub mod event; pub mod instructions; pub mod utils; +pub use de_compression::*; pub use instructions::*; pub mod compressed_account; pub mod create_address; +pub mod de_compression; pub mod nullify_state; pub mod sdk; pub mod verify_state; @@ -60,6 +62,18 @@ pub enum ErrorCode { InvalidNullifierQueue, #[msg("DeriveAddressError")] DeriveAddressError, + #[msg("CompressSolTransferFailed")] + CompressSolTransferFailed, + #[msg("CompressedSolPdaUndefinedForCompressSol")] + CompressedSolPdaUndefinedForCompressSol, + #[msg("DeCompressLamportsUndefinedForCompressSol")] + DeCompressLamportsUndefinedForCompressSol, + #[msg("CompressedSolPdaUndefinedForDecompressSol")] + CompressedSolPdaUndefinedForDecompressSol, + #[msg("DeCompressLamportsUndefinedForDecompressSol")] + DeCompressLamportsUndefinedForDecompressSol, + #[msg("DecompressRecipientUndefinedForDecompressSol")] + DecompressRecipientUndefinedForDecompressSol, } #[program] @@ -72,6 +86,13 @@ pub mod psp_compressed_pda { }; use super::*; + /// Initializes the compressed sol pda. + /// This pda is used to store compressed sol for the protocol. + pub fn init_compress_sol_pda(_ctx: Context) -> Result<()> { + msg!("initialized compress sol pda"); + Ok(()) + } + /// This function can be used to transfer sol and execute any other compressed transaction. /// Instruction data is not optimized for space. /// This method can be called by cpi so that instruction data can be compressed with a custom algorithm. diff --git a/programs/compressed-pda/src/sdk.rs b/programs/compressed-pda/src/sdk.rs index 953edbe79e..016b429906 100644 --- a/programs/compressed-pda/src/sdk.rs +++ b/programs/compressed-pda/src/sdk.rs @@ -8,9 +8,13 @@ use solana_sdk::instruction::Instruction; use crate::{ compressed_account::{CompressedAccount, CompressedAccountWithMerkleContext}, utils::{get_cpi_authority_pda, get_registered_program_pda, CompressedProof}, - InstructionDataTransfer, + InstructionDataTransfer, COMPRESSED_SOL_PDA_SEED, }; +pub fn get_compressed_sol_pda() -> Pubkey { + Pubkey::find_program_address(&[COMPRESSED_SOL_PDA_SEED], &crate::ID).0 +} + #[allow(clippy::too_many_arguments)] pub fn create_execute_compressed_instruction( payer: &Pubkey, @@ -26,6 +30,9 @@ pub fn create_execute_compressed_instruction( address_merkle_tree_pubkeys: &[Pubkey], new_address_seeds: &[[u8; 32]], proof: &CompressedProof, + de_compress_lamports: Option, + is_compress: bool, + de_compress_recipient: Option, ) -> Instruction { let mut remaining_accounts = HashMap::::new(); let mut _input_compressed_accounts: Vec = @@ -117,6 +124,8 @@ pub fn create_execute_compressed_instruction( address_queue_account_indices, new_address_seeds: new_address_seeds.to_vec(), address_merkle_tree_account_indices, + de_compress_lamports, + is_compress, }; let mut inputs = Vec::new(); @@ -125,6 +134,8 @@ pub fn create_execute_compressed_instruction( let instruction_data = crate::instruction::ExecuteCompressedTransaction { inputs }; + let compressed_sol_pda = de_compress_lamports.map(|_| get_compressed_sol_pda()); + let accounts = crate::accounts::TransferInstruction { signer: *payer, // authority_pda: get_cpi_authority_pda(&crate::ID), @@ -134,6 +145,9 @@ pub fn create_execute_compressed_instruction( psp_account_compression_authority: get_cpi_authority_pda(&crate::ID), cpi_signature_account: None, invoking_program: None, + compressed_sol_pda, + de_compress_recipient, + system_program: Some(solana_sdk::system_program::ID), }; Instruction { program_id: crate::ID, @@ -321,6 +335,9 @@ mod test { Vec::::new().as_slice(), Vec::<[u8; 32]>::new().as_slice(), &proof.clone(), + Some(100), + true, + None, ); assert_eq!(instruction.program_id, crate::ID); @@ -371,6 +388,11 @@ mod test { deserialized_instruction_data.proof.clone().unwrap().c, proof.c ); + assert_eq!( + deserialized_instruction_data.de_compress_lamports.unwrap(), + 100 + ); + assert_eq!(deserialized_instruction_data.is_compress, true); let mut ref_account_meta = AccountMeta::new(payer, true); ref_account_meta.is_writable = false; assert_eq!(instruction.accounts[0], ref_account_meta); @@ -385,39 +407,39 @@ mod test { 1 ); assert_eq!( - instruction.accounts[7 + deserialized_instruction_data - .input_compressed_accounts_with_merkle_context[0] - .merkle_tree_pubkey_index as usize], + instruction.accounts[10 + + deserialized_instruction_data.input_compressed_accounts_with_merkle_context[0] + .merkle_tree_pubkey_index as usize], AccountMeta::new(merkle_tree_pubkey, false) ); assert_eq!( - instruction.accounts[7 + deserialized_instruction_data - .input_compressed_accounts_with_merkle_context[1] - .merkle_tree_pubkey_index as usize], + instruction.accounts[10 + + deserialized_instruction_data.input_compressed_accounts_with_merkle_context[1] + .merkle_tree_pubkey_index as usize], AccountMeta::new(merkle_tree_pubkey, false) ); assert_eq!( - instruction.accounts[7 + deserialized_instruction_data - .input_compressed_accounts_with_merkle_context[0] - .nullifier_queue_pubkey_index as usize], + instruction.accounts[10 + + deserialized_instruction_data.input_compressed_accounts_with_merkle_context[0] + .nullifier_queue_pubkey_index as usize], AccountMeta::new(nullifier_array_pubkey, false) ); assert_eq!( - instruction.accounts[7 + deserialized_instruction_data - .input_compressed_accounts_with_merkle_context[1] - .nullifier_queue_pubkey_index as usize], + instruction.accounts[10 + + deserialized_instruction_data.input_compressed_accounts_with_merkle_context[1] + .nullifier_queue_pubkey_index as usize], AccountMeta::new(nullifier_array_pubkey, false) ); assert_eq!( - instruction.accounts[7 + deserialized_instruction_data - .output_state_merkle_tree_account_indices[0] - as usize], + instruction.accounts[10 + + deserialized_instruction_data.output_state_merkle_tree_account_indices[0] + as usize], AccountMeta::new(merkle_tree_pubkey, false) ); assert_eq!( - instruction.accounts[7 + deserialized_instruction_data - .output_state_merkle_tree_account_indices[1] - as usize], + instruction.accounts[10 + + deserialized_instruction_data.output_state_merkle_tree_account_indices[1] + as usize], AccountMeta::new(merkle_tree_pubkey, false) ); } diff --git a/programs/compressed-pda/src/verify_state.rs b/programs/compressed-pda/src/verify_state.rs index 6b79c6e452..950a216705 100644 --- a/programs/compressed-pda/src/verify_state.rs +++ b/programs/compressed-pda/src/verify_state.rs @@ -63,7 +63,7 @@ pub fn hash_input_compressed_accounts<'a, 'b, 'c: 'info, 'info>( inputs: &'a InstructionDataTransfer, leaves: &'a mut [[u8; 32]], addresses: &'a mut [Option<[u8; 32]>], -) -> anchor_lang::Result<()> { +) -> Result<()> { let mut none_counter = 0; for (j, input_compressed_account_with_context) in inputs .input_compressed_accounts_with_merkle_context @@ -101,6 +101,8 @@ pub fn sum_check( input_compressed_accounts_with_merkle_context: &[CompressedAccountWithMerkleContext], output_compressed_account: &[CompressedAccount], relay_fee: &Option, + de_compress_lamports: &Option, + is_compress: &bool, ) -> anchor_lang::Result<()> { let mut sum: u64 = 0; for compressed_account_with_context in input_compressed_accounts_with_merkle_context.iter() { @@ -110,6 +112,23 @@ pub fn sum_check( .map_err(|_| ErrorCode::ComputeInputSumFailed)?; } + match de_compress_lamports { + Some(lamports) => { + if *is_compress { + sum = sum + .checked_add(*lamports) + .ok_or(ProgramError::ArithmeticOverflow) + .map_err(|_| ErrorCode::ComputeOutputSumFailed)?; + } else { + sum = sum + .checked_sub(*lamports) + .ok_or(ProgramError::ArithmeticOverflow) + .map_err(|_| ErrorCode::ComputeOutputSumFailed)?; + } + } + None => (), + } + for compressed_account in output_compressed_account.iter() { sum = sum .checked_sub(compressed_account.lamports) @@ -149,7 +168,7 @@ pub fn signer_check( // - The drawback is that the pda signer is the owner of the compressed account which is confusing if compressed_accounts.compressed_account.data.is_some() { let invoking_program_id = ctx.accounts.invoking_program.as_ref().unwrap().key(); - let signer = anchor_lang::prelude::Pubkey::find_program_address( + let signer = Pubkey::find_program_address( &[b"cpi_authority"], &invoking_program_id, ) @@ -401,7 +420,7 @@ mod test { use circuitlib_rs::{ gnark::{ constants::{INCLUSION_PATH, SERVER_ADDRESS}, - helpers::{health_check, kill_gnark_server, spawn_gnark_server}, + helpers::{kill_gnark_server, spawn_gnark_server, ProofType}, inclusion_json_formatter::inclusion_inputs_string, proof_helpers::{compress_proof, deserialize_gnark_proof_json, proof_from_json_struct}, }, @@ -415,12 +434,15 @@ mod test { #[tokio::test] async fn prove_inclusion() { init_logger(); - let mut gnark = spawn_gnark_server("../../circuit-lib/circuitlib-rs/scripts/prover.sh", 5); - health_check().await; + spawn_gnark_server( + "../../circuit-lib/circuitlib-rs/scripts/prover.sh", + true, + ProofType::Inclusion, + ) + .await; let client = Client::new(); for number_of_compressed_accounts in &[1usize, 2, 3, 4, 8] { - let (inputs, big_int_inputs) = - inclusion_inputs_string(*number_of_compressed_accounts as usize); + let (inputs, big_int_inputs) = inclusion_inputs_string(*number_of_compressed_accounts); let response_result = client .post(&format!("{}{}", SERVER_ADDRESS, INCLUSION_PATH)) .header("Content-Type", "text/plain; charset=utf-8") @@ -437,8 +459,8 @@ mod test { let mut leaves = Vec::<[u8; 32]>::new(); for _ in 0..*number_of_compressed_accounts { - roots.push(big_int_inputs.root.to_bytes_be().1.try_into().unwrap()); - leaves.push(big_int_inputs.leaf.to_bytes_be().1.try_into().unwrap()); + roots.push(big_int_inputs.roots.to_bytes_be().1.try_into().unwrap()); + leaves.push(big_int_inputs.leaves.to_bytes_be().1.try_into().unwrap()); } verify_merkle_proof_zkp( @@ -452,7 +474,7 @@ mod test { ) .unwrap(); } - kill_gnark_server(&mut gnark); + kill_gnark_server(); } #[test] @@ -495,10 +517,136 @@ mod test { &input_compressed_accounts_with_merkle_context, &output_compressed_account, &relay_fee, + &None, + &false, ); assert!(result.is_ok()); } + #[test] + fn test_sum_check_with_compress_passes() { + let input_compressed_accounts_with_merkle_context: Vec = vec![ + CompressedAccountWithMerkleContext { + compressed_account: CompressedAccount { + owner: Pubkey::new_unique(), + lamports: 50, + address: None, + data: None, + }, + merkle_tree_pubkey_index: 0, + nullifier_queue_pubkey_index: 0, + leaf_index: 0, + }, + CompressedAccountWithMerkleContext { + compressed_account: CompressedAccount { + owner: Pubkey::new_unique(), + lamports: 50, + address: None, + data: None, + }, + merkle_tree_pubkey_index: 0, + nullifier_queue_pubkey_index: 0, + leaf_index: 1, + }, + ]; + + let output_compressed_account: Vec = vec![CompressedAccount { + owner: Pubkey::new_unique(), + lamports: 150, + address: None, + data: None, + }]; + + let relay_fee = None; // No RPC fee + + let result = sum_check( + &input_compressed_accounts_with_merkle_context, + &output_compressed_account, + &relay_fee, + &Some(50), + &true, + ); + println!("{:?}", result); + assert!(result.is_ok()); + let result = sum_check( + &input_compressed_accounts_with_merkle_context, + &output_compressed_account, + &relay_fee, + &Some(49), + &true, + ); + assert!(result.is_err()); + let result = sum_check( + &input_compressed_accounts_with_merkle_context, + &output_compressed_account, + &relay_fee, + &Some(50), + &false, + ); + assert!(result.is_err()); + } + #[test] + fn test_sum_check_with_decompress_passes() { + let input_compressed_accounts_with_merkle_context: Vec = vec![ + CompressedAccountWithMerkleContext { + compressed_account: CompressedAccount { + owner: Pubkey::new_unique(), + lamports: 100, + address: None, + data: None, + }, + merkle_tree_pubkey_index: 0, + nullifier_queue_pubkey_index: 0, + leaf_index: 0, + }, + CompressedAccountWithMerkleContext { + compressed_account: CompressedAccount { + owner: Pubkey::new_unique(), + lamports: 50, + address: None, + data: None, + }, + merkle_tree_pubkey_index: 0, + nullifier_queue_pubkey_index: 0, + leaf_index: 1, + }, + ]; + + let output_compressed_account: Vec = vec![CompressedAccount { + owner: Pubkey::new_unique(), + lamports: 100, + address: None, + data: None, + }]; + + let relay_fee = None; // No RPC fee + + let result = sum_check( + &input_compressed_accounts_with_merkle_context, + &output_compressed_account, + &relay_fee, + &Some(50), + &false, + ); + println!("{:?}", result); + assert!(result.is_ok()); + let result = sum_check( + &input_compressed_accounts_with_merkle_context, + &output_compressed_account, + &relay_fee, + &Some(49), + &false, + ); + assert!(result.is_err()); + let result = sum_check( + &input_compressed_accounts_with_merkle_context, + &output_compressed_account, + &relay_fee, + &Some(50), + &true, + ); + assert!(result.is_err()); + } // TODO: add test for relay fee #[test] fn test_sum_check_fails() { @@ -540,6 +688,8 @@ mod test { &input_compressed_accounts_with_merkle_context, &output_compressed_account, &relay_fee, + &None, + &false, ); assert!(result.is_err()); } diff --git a/programs/compressed-pda/src/verifying_keys/combined_26_1_1.rs b/programs/compressed-pda/src/verifying_keys/combined_26_1_1.rs new file mode 100644 index 0000000000..4f2c853057 --- /dev/null +++ b/programs/compressed-pda/src/verifying_keys/combined_26_1_1.rs @@ -0,0 +1,86 @@ +// This file is generated by xtask. Do not edit it manually. + +use groth16_solana::groth16::Groth16Verifyingkey; +pub const VERIFYINGKEY: Groth16Verifyingkey = Groth16Verifyingkey { + nr_pubinputs: 4usize, + vk_alpha_g1: [ + 0u8, 199u8, 194u8, 128u8, 150u8, 36u8, 109u8, 189u8, 248u8, 145u8, 231u8, 237u8, 53u8, + 179u8, 60u8, 157u8, 64u8, 215u8, 14u8, 25u8, 224u8, 77u8, 250u8, 173u8, 48u8, 54u8, 178u8, + 206u8, 207u8, 36u8, 13u8, 44u8, 24u8, 87u8, 199u8, 44u8, 50u8, 171u8, 246u8, 163u8, 87u8, + 225u8, 54u8, 91u8, 254u8, 102u8, 72u8, 194u8, 181u8, 108u8, 226u8, 55u8, 132u8, 246u8, + 231u8, 147u8, 164u8, 176u8, 33u8, 109u8, 124u8, 149u8, 197u8, 151u8, + ], + vk_beta_g2: [ + 20u8, 227u8, 140u8, 214u8, 23u8, 152u8, 2u8, 231u8, 124u8, 41u8, 126u8, 19u8, 115u8, 249u8, + 251u8, 213u8, 88u8, 192u8, 69u8, 93u8, 7u8, 10u8, 228u8, 149u8, 37u8, 236u8, 214u8, 88u8, + 150u8, 241u8, 96u8, 159u8, 39u8, 69u8, 174u8, 177u8, 172u8, 5u8, 170u8, 239u8, 180u8, + 125u8, 96u8, 212u8, 11u8, 178u8, 70u8, 222u8, 56u8, 12u8, 157u8, 64u8, 139u8, 124u8, 147u8, + 242u8, 198u8, 110u8, 235u8, 61u8, 87u8, 128u8, 63u8, 132u8, 38u8, 190u8, 84u8, 124u8, 19u8, + 15u8, 106u8, 63u8, 62u8, 14u8, 190u8, 123u8, 229u8, 137u8, 117u8, 228u8, 239u8, 83u8, + 149u8, 21u8, 234u8, 105u8, 78u8, 111u8, 193u8, 228u8, 247u8, 177u8, 89u8, 134u8, 13u8, 4u8, + 30u8, 125u8, 178u8, 19u8, 240u8, 112u8, 148u8, 212u8, 40u8, 29u8, 224u8, 141u8, 104u8, + 120u8, 250u8, 0u8, 76u8, 24u8, 115u8, 110u8, 98u8, 14u8, 40u8, 227u8, 128u8, 232u8, 118u8, + 216u8, 103u8, 253u8, 174u8, 17u8, + ], + vk_gamme_g2: [ + 26u8, 246u8, 66u8, 59u8, 60u8, 112u8, 229u8, 146u8, 200u8, 154u8, 19u8, 105u8, 215u8, 23u8, + 233u8, 128u8, 214u8, 156u8, 43u8, 151u8, 172u8, 212u8, 94u8, 62u8, 18u8, 48u8, 113u8, + 237u8, 179u8, 221u8, 165u8, 232u8, 5u8, 99u8, 55u8, 242u8, 180u8, 210u8, 245u8, 28u8, + 245u8, 73u8, 65u8, 143u8, 172u8, 238u8, 197u8, 209u8, 144u8, 19u8, 182u8, 85u8, 106u8, + 199u8, 168u8, 123u8, 35u8, 171u8, 43u8, 69u8, 23u8, 221u8, 149u8, 54u8, 37u8, 34u8, 234u8, + 240u8, 146u8, 72u8, 167u8, 236u8, 196u8, 24u8, 12u8, 165u8, 76u8, 167u8, 6u8, 238u8, 253u8, + 0u8, 15u8, 146u8, 13u8, 183u8, 184u8, 12u8, 85u8, 123u8, 7u8, 215u8, 173u8, 114u8, 34u8, + 153u8, 23u8, 231u8, 131u8, 133u8, 201u8, 117u8, 72u8, 27u8, 234u8, 94u8, 172u8, 235u8, + 231u8, 253u8, 191u8, 209u8, 70u8, 51u8, 169u8, 173u8, 120u8, 158u8, 121u8, 199u8, 248u8, + 154u8, 249u8, 210u8, 174u8, 209u8, 226u8, 120u8, + ], + vk_delta_g2: [ + 26u8, 221u8, 67u8, 142u8, 11u8, 239u8, 204u8, 146u8, 224u8, 106u8, 8u8, 49u8, 42u8, 1u8, + 161u8, 137u8, 135u8, 94u8, 101u8, 253u8, 234u8, 160u8, 57u8, 214u8, 26u8, 85u8, 205u8, + 86u8, 14u8, 143u8, 207u8, 146u8, 39u8, 25u8, 0u8, 102u8, 6u8, 241u8, 15u8, 62u8, 94u8, + 78u8, 107u8, 225u8, 111u8, 59u8, 128u8, 207u8, 74u8, 221u8, 94u8, 186u8, 158u8, 191u8, + 117u8, 161u8, 219u8, 202u8, 146u8, 118u8, 52u8, 163u8, 117u8, 132u8, 8u8, 223u8, 168u8, + 129u8, 226u8, 23u8, 182u8, 152u8, 130u8, 120u8, 47u8, 232u8, 70u8, 206u8, 56u8, 77u8, + 227u8, 217u8, 31u8, 144u8, 130u8, 14u8, 149u8, 218u8, 79u8, 233u8, 242u8, 140u8, 200u8, + 98u8, 44u8, 200u8, 47u8, 195u8, 193u8, 102u8, 216u8, 54u8, 113u8, 98u8, 237u8, 21u8, 135u8, + 79u8, 18u8, 205u8, 213u8, 125u8, 55u8, 32u8, 159u8, 65u8, 22u8, 137u8, 178u8, 37u8, 72u8, + 162u8, 193u8, 34u8, 239u8, 183u8, 212u8, 163u8, + ], + vk_ic: &[ + [ + 15u8, 155u8, 183u8, 196u8, 227u8, 91u8, 90u8, 162u8, 165u8, 220u8, 57u8, 138u8, 147u8, + 17u8, 215u8, 62u8, 81u8, 56u8, 254u8, 244u8, 22u8, 168u8, 46u8, 172u8, 7u8, 18u8, + 163u8, 23u8, 114u8, 222u8, 63u8, 108u8, 1u8, 81u8, 213u8, 67u8, 166u8, 116u8, 29u8, + 17u8, 4u8, 230u8, 201u8, 158u8, 228u8, 149u8, 148u8, 163u8, 124u8, 76u8, 236u8, 36u8, + 128u8, 12u8, 137u8, 82u8, 140u8, 206u8, 154u8, 80u8, 33u8, 7u8, 48u8, 240u8, + ], + [ + 30u8, 121u8, 60u8, 24u8, 15u8, 183u8, 4u8, 25u8, 225u8, 210u8, 79u8, 0u8, 219u8, 76u8, + 52u8, 119u8, 155u8, 66u8, 95u8, 156u8, 213u8, 152u8, 131u8, 172u8, 45u8, 107u8, 94u8, + 146u8, 225u8, 219u8, 142u8, 29u8, 43u8, 114u8, 102u8, 210u8, 92u8, 93u8, 114u8, 159u8, + 237u8, 34u8, 21u8, 152u8, 53u8, 111u8, 33u8, 76u8, 185u8, 133u8, 250u8, 222u8, 43u8, + 82u8, 191u8, 233u8, 11u8, 205u8, 15u8, 186u8, 132u8, 156u8, 65u8, 134u8, + ], + [ + 12u8, 192u8, 137u8, 254u8, 251u8, 150u8, 39u8, 165u8, 24u8, 248u8, 69u8, 75u8, 153u8, + 180u8, 0u8, 80u8, 40u8, 218u8, 108u8, 238u8, 2u8, 133u8, 4u8, 172u8, 182u8, 226u8, + 152u8, 84u8, 190u8, 165u8, 166u8, 200u8, 16u8, 190u8, 16u8, 161u8, 205u8, 8u8, 239u8, + 36u8, 171u8, 110u8, 110u8, 139u8, 242u8, 215u8, 232u8, 97u8, 152u8, 231u8, 175u8, + 156u8, 238u8, 245u8, 97u8, 63u8, 76u8, 119u8, 69u8, 232u8, 116u8, 197u8, 168u8, 181u8, + ], + [ + 16u8, 40u8, 187u8, 96u8, 4u8, 117u8, 123u8, 25u8, 12u8, 26u8, 89u8, 81u8, 255u8, 174u8, + 12u8, 239u8, 4u8, 208u8, 252u8, 198u8, 10u8, 56u8, 91u8, 2u8, 186u8, 83u8, 90u8, 249u8, + 117u8, 69u8, 93u8, 33u8, 31u8, 179u8, 173u8, 153u8, 185u8, 0u8, 89u8, 177u8, 151u8, + 72u8, 10u8, 93u8, 222u8, 58u8, 49u8, 130u8, 230u8, 28u8, 71u8, 143u8, 26u8, 222u8, + 231u8, 81u8, 66u8, 65u8, 121u8, 64u8, 190u8, 103u8, 71u8, 34u8, + ], + [ + 45u8, 184u8, 96u8, 205u8, 101u8, 45u8, 84u8, 103u8, 220u8, 21u8, 185u8, 61u8, 115u8, + 254u8, 100u8, 99u8, 158u8, 135u8, 205u8, 166u8, 143u8, 238u8, 216u8, 124u8, 113u8, + 215u8, 167u8, 241u8, 135u8, 223u8, 224u8, 67u8, 46u8, 56u8, 164u8, 29u8, 76u8, 16u8, + 193u8, 64u8, 66u8, 42u8, 36u8, 9u8, 16u8, 226u8, 148u8, 207u8, 119u8, 133u8, 203u8, + 68u8, 156u8, 56u8, 96u8, 165u8, 90u8, 107u8, 31u8, 51u8, 97u8, 160u8, 128u8, 170u8, + ], + ], +}; diff --git a/programs/compressed-pda/src/verifying_keys/combined_26_1_2.rs b/programs/compressed-pda/src/verifying_keys/combined_26_1_2.rs new file mode 100644 index 0000000000..4925198406 --- /dev/null +++ b/programs/compressed-pda/src/verifying_keys/combined_26_1_2.rs @@ -0,0 +1,100 @@ +// This file is generated by xtask. Do not edit it manually. + +use groth16_solana::groth16::Groth16Verifyingkey; +pub const VERIFYINGKEY: Groth16Verifyingkey = Groth16Verifyingkey { + nr_pubinputs: 6usize, + vk_alpha_g1: [ + 41u8, 87u8, 107u8, 217u8, 181u8, 132u8, 59u8, 155u8, 207u8, 230u8, 176u8, 223u8, 165u8, + 63u8, 169u8, 207u8, 198u8, 212u8, 229u8, 218u8, 208u8, 178u8, 177u8, 116u8, 254u8, 26u8, + 178u8, 115u8, 98u8, 12u8, 12u8, 208u8, 32u8, 96u8, 205u8, 86u8, 34u8, 117u8, 244u8, 91u8, + 213u8, 149u8, 54u8, 137u8, 72u8, 139u8, 178u8, 194u8, 85u8, 233u8, 97u8, 66u8, 200u8, 87u8, + 134u8, 110u8, 225u8, 78u8, 90u8, 253u8, 68u8, 189u8, 89u8, 163u8, + ], + vk_beta_g2: [ + 22u8, 44u8, 239u8, 108u8, 233u8, 58u8, 3u8, 26u8, 10u8, 2u8, 215u8, 82u8, 62u8, 244u8, + 185u8, 228u8, 36u8, 233u8, 41u8, 89u8, 14u8, 182u8, 252u8, 192u8, 222u8, 232u8, 0u8, 68u8, + 174u8, 18u8, 49u8, 150u8, 25u8, 60u8, 9u8, 143u8, 252u8, 125u8, 50u8, 98u8, 27u8, 155u8, + 138u8, 250u8, 72u8, 246u8, 161u8, 81u8, 149u8, 190u8, 74u8, 83u8, 251u8, 32u8, 37u8, 101u8, + 57u8, 6u8, 89u8, 85u8, 29u8, 253u8, 205u8, 238u8, 8u8, 86u8, 170u8, 172u8, 37u8, 117u8, + 149u8, 90u8, 135u8, 241u8, 124u8, 64u8, 175u8, 168u8, 174u8, 19u8, 184u8, 92u8, 89u8, + 213u8, 206u8, 138u8, 180u8, 133u8, 155u8, 194u8, 203u8, 101u8, 3u8, 47u8, 69u8, 115u8, + 10u8, 69u8, 19u8, 79u8, 94u8, 21u8, 170u8, 13u8, 60u8, 0u8, 114u8, 82u8, 17u8, 192u8, + 182u8, 9u8, 244u8, 109u8, 124u8, 190u8, 116u8, 237u8, 191u8, 21u8, 64u8, 9u8, 101u8, 114u8, + 61u8, 55u8, 127u8, 207u8, + ], + vk_gamme_g2: [ + 11u8, 41u8, 13u8, 37u8, 12u8, 68u8, 184u8, 14u8, 133u8, 14u8, 44u8, 95u8, 0u8, 74u8, 161u8, + 100u8, 119u8, 44u8, 69u8, 106u8, 6u8, 184u8, 148u8, 204u8, 110u8, 235u8, 68u8, 205u8, + 126u8, 8u8, 170u8, 65u8, 40u8, 138u8, 124u8, 48u8, 87u8, 243u8, 175u8, 40u8, 76u8, 201u8, + 1u8, 90u8, 253u8, 93u8, 119u8, 46u8, 213u8, 214u8, 25u8, 145u8, 241u8, 109u8, 6u8, 127u8, + 154u8, 0u8, 184u8, 248u8, 59u8, 75u8, 192u8, 232u8, 19u8, 109u8, 14u8, 8u8, 234u8, 6u8, + 139u8, 174u8, 26u8, 200u8, 215u8, 118u8, 161u8, 208u8, 121u8, 50u8, 237u8, 113u8, 19u8, + 160u8, 86u8, 214u8, 208u8, 133u8, 66u8, 244u8, 96u8, 158u8, 39u8, 190u8, 79u8, 6u8, 41u8, + 24u8, 72u8, 155u8, 142u8, 225u8, 48u8, 190u8, 244u8, 17u8, 189u8, 47u8, 23u8, 247u8, 58u8, + 157u8, 213u8, 182u8, 108u8, 229u8, 224u8, 30u8, 137u8, 138u8, 183u8, 217u8, 207u8, 69u8, + 135u8, 231u8, 156u8, 173u8, + ], + vk_delta_g2: [ + 10u8, 102u8, 42u8, 139u8, 27u8, 230u8, 18u8, 100u8, 41u8, 210u8, 131u8, 104u8, 159u8, 18u8, + 161u8, 134u8, 240u8, 24u8, 112u8, 117u8, 1u8, 4u8, 99u8, 191u8, 189u8, 74u8, 137u8, 34u8, + 59u8, 89u8, 152u8, 126u8, 37u8, 114u8, 33u8, 109u8, 118u8, 58u8, 191u8, 223u8, 210u8, + 241u8, 93u8, 223u8, 50u8, 79u8, 104u8, 77u8, 149u8, 22u8, 100u8, 4u8, 116u8, 121u8, 244u8, + 108u8, 188u8, 254u8, 226u8, 72u8, 88u8, 132u8, 80u8, 169u8, 6u8, 42u8, 211u8, 217u8, 114u8, + 231u8, 2u8, 174u8, 172u8, 163u8, 175u8, 136u8, 72u8, 87u8, 213u8, 105u8, 188u8, 139u8, + 58u8, 5u8, 201u8, 20u8, 98u8, 5u8, 200u8, 10u8, 155u8, 182u8, 229u8, 9u8, 84u8, 161u8, + 29u8, 229u8, 190u8, 151u8, 108u8, 147u8, 35u8, 15u8, 134u8, 204u8, 67u8, 23u8, 73u8, 250u8, + 34u8, 19u8, 142u8, 80u8, 198u8, 196u8, 26u8, 73u8, 110u8, 42u8, 108u8, 87u8, 176u8, 128u8, + 231u8, 233u8, 238u8, 90u8, + ], + vk_ic: &[ + [ + 16u8, 22u8, 7u8, 38u8, 59u8, 219u8, 183u8, 51u8, 191u8, 128u8, 191u8, 101u8, 21u8, + 37u8, 170u8, 42u8, 125u8, 97u8, 16u8, 57u8, 76u8, 191u8, 47u8, 146u8, 137u8, 63u8, + 158u8, 109u8, 71u8, 155u8, 60u8, 231u8, 17u8, 218u8, 55u8, 46u8, 124u8, 128u8, 146u8, + 47u8, 23u8, 152u8, 126u8, 81u8, 107u8, 233u8, 32u8, 116u8, 16u8, 1u8, 137u8, 86u8, + 200u8, 186u8, 223u8, 206u8, 117u8, 95u8, 171u8, 129u8, 73u8, 171u8, 201u8, 202u8, + ], + [ + 37u8, 108u8, 192u8, 18u8, 76u8, 111u8, 15u8, 168u8, 166u8, 17u8, 73u8, 161u8, 224u8, + 110u8, 175u8, 234u8, 175u8, 197u8, 94u8, 83u8, 112u8, 196u8, 176u8, 183u8, 204u8, 1u8, + 236u8, 11u8, 217u8, 243u8, 73u8, 61u8, 40u8, 35u8, 145u8, 150u8, 174u8, 148u8, 69u8, + 203u8, 177u8, 32u8, 227u8, 52u8, 188u8, 176u8, 73u8, 2u8, 252u8, 0u8, 91u8, 90u8, 63u8, + 48u8, 242u8, 214u8, 4u8, 5u8, 90u8, 78u8, 50u8, 86u8, 134u8, 75u8, + ], + [ + 43u8, 233u8, 253u8, 111u8, 121u8, 83u8, 15u8, 55u8, 39u8, 240u8, 128u8, 237u8, 200u8, + 216u8, 26u8, 172u8, 113u8, 33u8, 79u8, 209u8, 94u8, 121u8, 213u8, 8u8, 170u8, 235u8, + 206u8, 41u8, 73u8, 33u8, 153u8, 227u8, 2u8, 203u8, 21u8, 34u8, 71u8, 193u8, 191u8, + 149u8, 49u8, 65u8, 46u8, 89u8, 209u8, 145u8, 220u8, 157u8, 86u8, 226u8, 207u8, 56u8, + 20u8, 17u8, 28u8, 13u8, 181u8, 212u8, 74u8, 188u8, 64u8, 120u8, 145u8, 196u8, + ], + [ + 37u8, 154u8, 84u8, 152u8, 76u8, 181u8, 151u8, 11u8, 244u8, 165u8, 36u8, 201u8, 161u8, + 73u8, 150u8, 100u8, 145u8, 18u8, 227u8, 242u8, 23u8, 14u8, 250u8, 76u8, 100u8, 7u8, + 106u8, 52u8, 66u8, 8u8, 231u8, 148u8, 27u8, 139u8, 26u8, 91u8, 163u8, 151u8, 98u8, + 112u8, 219u8, 51u8, 3u8, 44u8, 177u8, 129u8, 32u8, 227u8, 69u8, 23u8, 97u8, 74u8, 91u8, + 11u8, 248u8, 188u8, 151u8, 75u8, 166u8, 249u8, 80u8, 81u8, 239u8, 107u8, + ], + [ + 27u8, 123u8, 38u8, 177u8, 214u8, 254u8, 250u8, 171u8, 129u8, 36u8, 101u8, 104u8, 2u8, + 58u8, 35u8, 114u8, 3u8, 130u8, 93u8, 181u8, 95u8, 98u8, 194u8, 193u8, 12u8, 31u8, + 235u8, 243u8, 136u8, 136u8, 2u8, 153u8, 39u8, 126u8, 247u8, 228u8, 120u8, 215u8, 230u8, + 247u8, 90u8, 66u8, 121u8, 94u8, 160u8, 195u8, 160u8, 154u8, 34u8, 7u8, 40u8, 105u8, + 153u8, 236u8, 39u8, 31u8, 47u8, 62u8, 229u8, 185u8, 54u8, 38u8, 98u8, 53u8, + ], + [ + 42u8, 184u8, 98u8, 107u8, 117u8, 44u8, 35u8, 33u8, 198u8, 72u8, 133u8, 175u8, 47u8, + 0u8, 223u8, 94u8, 194u8, 16u8, 100u8, 161u8, 163u8, 176u8, 59u8, 251u8, 89u8, 25u8, + 154u8, 110u8, 93u8, 217u8, 32u8, 250u8, 27u8, 154u8, 150u8, 163u8, 238u8, 126u8, 91u8, + 189u8, 149u8, 98u8, 134u8, 190u8, 13u8, 249u8, 145u8, 197u8, 254u8, 210u8, 217u8, + 133u8, 82u8, 203u8, 93u8, 178u8, 236u8, 6u8, 104u8, 26u8, 215u8, 51u8, 225u8, 130u8, + ], + [ + 0u8, 196u8, 251u8, 77u8, 31u8, 29u8, 153u8, 116u8, 36u8, 120u8, 0u8, 194u8, 220u8, + 242u8, 113u8, 52u8, 253u8, 161u8, 100u8, 60u8, 9u8, 158u8, 43u8, 84u8, 16u8, 139u8, + 205u8, 104u8, 23u8, 188u8, 26u8, 51u8, 3u8, 139u8, 253u8, 242u8, 20u8, 160u8, 37u8, + 62u8, 243u8, 79u8, 176u8, 73u8, 49u8, 39u8, 185u8, 163u8, 42u8, 147u8, 143u8, 11u8, + 120u8, 181u8, 126u8, 214u8, 176u8, 0u8, 133u8, 215u8, 127u8, 57u8, 49u8, 185u8, + ], + ], +}; diff --git a/programs/compressed-pda/src/verifying_keys/combined_26_2_1.rs b/programs/compressed-pda/src/verifying_keys/combined_26_2_1.rs new file mode 100644 index 0000000000..0f8f47316a --- /dev/null +++ b/programs/compressed-pda/src/verifying_keys/combined_26_2_1.rs @@ -0,0 +1,101 @@ +// This file is generated by xtask. Do not edit it manually. + +use groth16_solana::groth16::Groth16Verifyingkey; +pub const VERIFYINGKEY: Groth16Verifyingkey = Groth16Verifyingkey { + nr_pubinputs: 6usize, + vk_alpha_g1: [ + 48u8, 50u8, 196u8, 92u8, 158u8, 80u8, 99u8, 104u8, 212u8, 168u8, 33u8, 234u8, 115u8, 56u8, + 27u8, 112u8, 197u8, 69u8, 43u8, 122u8, 99u8, 29u8, 172u8, 197u8, 247u8, 177u8, 71u8, 121u8, + 115u8, 153u8, 118u8, 215u8, 26u8, 38u8, 217u8, 2u8, 78u8, 92u8, 247u8, 235u8, 233u8, 53u8, + 140u8, 146u8, 111u8, 75u8, 142u8, 111u8, 120u8, 36u8, 66u8, 252u8, 239u8, 204u8, 117u8, + 55u8, 40u8, 254u8, 190u8, 96u8, 87u8, 248u8, 25u8, 16u8, + ], + vk_beta_g2: [ + 12u8, 228u8, 51u8, 105u8, 227u8, 123u8, 21u8, 84u8, 183u8, 127u8, 108u8, 8u8, 100u8, 109u8, + 232u8, 12u8, 20u8, 51u8, 85u8, 3u8, 246u8, 106u8, 155u8, 209u8, 1u8, 226u8, 200u8, 146u8, + 67u8, 21u8, 251u8, 237u8, 43u8, 8u8, 3u8, 168u8, 250u8, 205u8, 92u8, 133u8, 83u8, 47u8, + 229u8, 96u8, 162u8, 15u8, 224u8, 28u8, 142u8, 25u8, 212u8, 24u8, 15u8, 209u8, 169u8, 173u8, + 237u8, 228u8, 6u8, 75u8, 20u8, 128u8, 19u8, 91u8, 11u8, 160u8, 36u8, 209u8, 239u8, 193u8, + 234u8, 113u8, 16u8, 130u8, 245u8, 128u8, 93u8, 74u8, 190u8, 50u8, 91u8, 111u8, 35u8, 144u8, + 208u8, 0u8, 156u8, 183u8, 48u8, 42u8, 251u8, 219u8, 142u8, 214u8, 216u8, 108u8, 34u8, + 210u8, 65u8, 120u8, 79u8, 218u8, 249u8, 212u8, 251u8, 117u8, 72u8, 37u8, 157u8, 223u8, + 177u8, 140u8, 48u8, 51u8, 50u8, 214u8, 10u8, 170u8, 144u8, 226u8, 110u8, 118u8, 74u8, + 237u8, 197u8, 13u8, 160u8, 10u8, + ], + vk_gamme_g2: [ + 30u8, 102u8, 83u8, 136u8, 227u8, 104u8, 6u8, 204u8, 90u8, 236u8, 109u8, 58u8, 126u8, 87u8, + 76u8, 85u8, 35u8, 190u8, 190u8, 139u8, 83u8, 59u8, 184u8, 143u8, 191u8, 122u8, 87u8, 162u8, + 25u8, 7u8, 73u8, 86u8, 11u8, 243u8, 46u8, 91u8, 1u8, 65u8, 127u8, 59u8, 0u8, 143u8, 124u8, + 253u8, 132u8, 42u8, 246u8, 194u8, 38u8, 212u8, 135u8, 64u8, 162u8, 200u8, 70u8, 151u8, + 132u8, 222u8, 185u8, 151u8, 167u8, 18u8, 131u8, 156u8, 22u8, 146u8, 60u8, 18u8, 33u8, + 152u8, 168u8, 49u8, 172u8, 234u8, 109u8, 141u8, 32u8, 144u8, 103u8, 195u8, 99u8, 2u8, + 196u8, 204u8, 164u8, 70u8, 251u8, 176u8, 12u8, 70u8, 39u8, 161u8, 175u8, 169u8, 80u8, + 239u8, 11u8, 200u8, 44u8, 235u8, 179u8, 21u8, 227u8, 217u8, 231u8, 157u8, 223u8, 196u8, + 157u8, 126u8, 159u8, 175u8, 173u8, 62u8, 200u8, 113u8, 238u8, 106u8, 155u8, 121u8, 101u8, + 167u8, 198u8, 159u8, 182u8, 49u8, 58u8, 67u8, + ], + vk_delta_g2: [ + 35u8, 9u8, 203u8, 89u8, 164u8, 174u8, 124u8, 96u8, 52u8, 150u8, 175u8, 12u8, 196u8, 99u8, + 225u8, 220u8, 182u8, 8u8, 209u8, 7u8, 70u8, 119u8, 70u8, 94u8, 234u8, 44u8, 203u8, 50u8, + 28u8, 182u8, 46u8, 191u8, 29u8, 204u8, 31u8, 29u8, 79u8, 7u8, 97u8, 105u8, 199u8, 72u8, + 163u8, 105u8, 20u8, 104u8, 17u8, 155u8, 148u8, 175u8, 100u8, 233u8, 128u8, 113u8, 135u8, + 43u8, 103u8, 104u8, 26u8, 243u8, 20u8, 56u8, 230u8, 141u8, 3u8, 225u8, 246u8, 61u8, 3u8, + 31u8, 128u8, 175u8, 231u8, 227u8, 189u8, 237u8, 60u8, 253u8, 93u8, 30u8, 144u8, 136u8, + 86u8, 34u8, 127u8, 251u8, 73u8, 224u8, 30u8, 240u8, 199u8, 183u8, 69u8, 214u8, 172u8, + 110u8, 26u8, 97u8, 113u8, 80u8, 250u8, 51u8, 55u8, 129u8, 183u8, 104u8, 46u8, 6u8, 252u8, + 192u8, 163u8, 141u8, 134u8, 89u8, 97u8, 220u8, 243u8, 244u8, 121u8, 59u8, 42u8, 92u8, + 248u8, 128u8, 199u8, 52u8, 217u8, 119u8, + ], + vk_ic: &[ + [ + 22u8, 42u8, 230u8, 254u8, 28u8, 203u8, 84u8, 143u8, 107u8, 255u8, 109u8, 118u8, 31u8, + 129u8, 162u8, 244u8, 234u8, 76u8, 57u8, 252u8, 38u8, 255u8, 77u8, 165u8, 253u8, 178u8, + 27u8, 25u8, 215u8, 120u8, 106u8, 133u8, 15u8, 108u8, 16u8, 88u8, 216u8, 191u8, 226u8, + 39u8, 162u8, 117u8, 147u8, 196u8, 179u8, 60u8, 238u8, 62u8, 189u8, 221u8, 135u8, 152u8, + 221u8, 236u8, 204u8, 20u8, 176u8, 130u8, 141u8, 45u8, 110u8, 149u8, 124u8, 233u8, + ], + [ + 13u8, 232u8, 159u8, 239u8, 228u8, 101u8, 191u8, 196u8, 65u8, 177u8, 253u8, 2u8, 181u8, + 238u8, 31u8, 168u8, 197u8, 218u8, 254u8, 240u8, 161u8, 160u8, 30u8, 48u8, 202u8, 43u8, + 244u8, 169u8, 156u8, 110u8, 153u8, 174u8, 31u8, 23u8, 174u8, 1u8, 39u8, 22u8, 247u8, + 231u8, 100u8, 5u8, 38u8, 190u8, 214u8, 158u8, 79u8, 88u8, 87u8, 238u8, 50u8, 163u8, + 51u8, 79u8, 162u8, 238u8, 185u8, 22u8, 192u8, 121u8, 21u8, 30u8, 221u8, 197u8, + ], + [ + 3u8, 183u8, 107u8, 17u8, 22u8, 33u8, 56u8, 216u8, 103u8, 209u8, 202u8, 249u8, 29u8, + 96u8, 205u8, 238u8, 235u8, 72u8, 95u8, 41u8, 168u8, 82u8, 176u8, 208u8, 215u8, 119u8, + 169u8, 209u8, 28u8, 113u8, 189u8, 232u8, 44u8, 207u8, 229u8, 168u8, 141u8, 108u8, + 155u8, 103u8, 160u8, 28u8, 197u8, 231u8, 153u8, 82u8, 117u8, 162u8, 236u8, 185u8, + 185u8, 19u8, 232u8, 17u8, 4u8, 193u8, 52u8, 234u8, 46u8, 138u8, 224u8, 111u8, 132u8, + 170u8, + ], + [ + 29u8, 14u8, 60u8, 35u8, 200u8, 183u8, 203u8, 175u8, 33u8, 22u8, 179u8, 160u8, 177u8, + 113u8, 193u8, 253u8, 245u8, 204u8, 11u8, 46u8, 116u8, 149u8, 207u8, 50u8, 112u8, 28u8, + 12u8, 91u8, 12u8, 4u8, 123u8, 186u8, 36u8, 11u8, 71u8, 191u8, 40u8, 109u8, 202u8, + 254u8, 236u8, 37u8, 151u8, 44u8, 145u8, 213u8, 154u8, 82u8, 123u8, 44u8, 216u8, 243u8, + 110u8, 106u8, 255u8, 146u8, 95u8, 34u8, 62u8, 59u8, 250u8, 168u8, 162u8, 78u8, + ], + [ + 40u8, 250u8, 135u8, 50u8, 203u8, 51u8, 3u8, 167u8, 192u8, 198u8, 43u8, 233u8, 222u8, + 29u8, 172u8, 86u8, 127u8, 214u8, 231u8, 11u8, 143u8, 216u8, 73u8, 7u8, 226u8, 55u8, + 69u8, 230u8, 121u8, 89u8, 225u8, 138u8, 15u8, 57u8, 177u8, 13u8, 92u8, 124u8, 107u8, + 119u8, 70u8, 120u8, 133u8, 131u8, 11u8, 229u8, 29u8, 149u8, 233u8, 234u8, 252u8, 183u8, + 7u8, 158u8, 18u8, 235u8, 81u8, 109u8, 245u8, 55u8, 78u8, 200u8, 203u8, 127u8, + ], + [ + 38u8, 102u8, 58u8, 64u8, 39u8, 152u8, 80u8, 167u8, 49u8, 29u8, 251u8, 174u8, 176u8, + 99u8, 200u8, 9u8, 213u8, 128u8, 118u8, 234u8, 176u8, 229u8, 33u8, 8u8, 198u8, 212u8, + 134u8, 34u8, 109u8, 46u8, 227u8, 39u8, 39u8, 61u8, 17u8, 27u8, 37u8, 39u8, 77u8, 7u8, + 48u8, 20u8, 20u8, 212u8, 211u8, 118u8, 104u8, 95u8, 14u8, 122u8, 248u8, 89u8, 228u8, + 28u8, 254u8, 244u8, 106u8, 191u8, 170u8, 245u8, 51u8, 141u8, 55u8, 174u8, + ], + [ + 18u8, 113u8, 141u8, 196u8, 52u8, 19u8, 64u8, 18u8, 244u8, 155u8, 196u8, 94u8, 228u8, + 62u8, 107u8, 175u8, 12u8, 249u8, 32u8, 220u8, 254u8, 238u8, 76u8, 122u8, 18u8, 99u8, + 240u8, 103u8, 83u8, 204u8, 70u8, 83u8, 34u8, 75u8, 218u8, 70u8, 220u8, 177u8, 131u8, + 97u8, 107u8, 5u8, 253u8, 42u8, 24u8, 17u8, 14u8, 83u8, 55u8, 201u8, 233u8, 175u8, 58u8, + 118u8, 213u8, 147u8, 75u8, 46u8, 91u8, 164u8, 56u8, 234u8, 147u8, 61u8, + ], + ], +}; diff --git a/programs/compressed-pda/src/verifying_keys/combined_26_2_2.rs b/programs/compressed-pda/src/verifying_keys/combined_26_2_2.rs new file mode 100644 index 0000000000..1f95252691 --- /dev/null +++ b/programs/compressed-pda/src/verifying_keys/combined_26_2_2.rs @@ -0,0 +1,114 @@ +// This file is generated by xtask. Do not edit it manually. + +use groth16_solana::groth16::Groth16Verifyingkey; +pub const VERIFYINGKEY: Groth16Verifyingkey = Groth16Verifyingkey { + nr_pubinputs: 8usize, + vk_alpha_g1: [ + 47u8, 168u8, 13u8, 206u8, 151u8, 64u8, 167u8, 189u8, 36u8, 166u8, 138u8, 175u8, 70u8, + 211u8, 210u8, 183u8, 90u8, 153u8, 174u8, 219u8, 15u8, 107u8, 220u8, 116u8, 14u8, 249u8, + 1u8, 189u8, 228u8, 113u8, 48u8, 214u8, 26u8, 237u8, 12u8, 95u8, 37u8, 161u8, 3u8, 170u8, + 6u8, 29u8, 60u8, 120u8, 172u8, 28u8, 253u8, 38u8, 159u8, 234u8, 213u8, 208u8, 219u8, 26u8, + 38u8, 172u8, 212u8, 29u8, 41u8, 56u8, 187u8, 219u8, 50u8, 160u8, + ], + vk_beta_g2: [ + 19u8, 89u8, 81u8, 182u8, 32u8, 11u8, 52u8, 195u8, 141u8, 232u8, 184u8, 185u8, 42u8, 59u8, + 80u8, 165u8, 196u8, 107u8, 35u8, 122u8, 147u8, 183u8, 206u8, 181u8, 9u8, 102u8, 22u8, 20u8, + 112u8, 176u8, 221u8, 50u8, 16u8, 1u8, 152u8, 147u8, 136u8, 111u8, 24u8, 251u8, 35u8, 132u8, + 250u8, 87u8, 138u8, 121u8, 108u8, 47u8, 138u8, 46u8, 134u8, 138u8, 41u8, 170u8, 50u8, + 108u8, 157u8, 29u8, 87u8, 151u8, 68u8, 250u8, 204u8, 194u8, 6u8, 137u8, 206u8, 80u8, 126u8, + 203u8, 31u8, 206u8, 22u8, 73u8, 23u8, 88u8, 29u8, 82u8, 251u8, 147u8, 163u8, 159u8, 115u8, + 153u8, 200u8, 222u8, 114u8, 0u8, 27u8, 164u8, 217u8, 149u8, 27u8, 194u8, 161u8, 244u8, + 33u8, 48u8, 203u8, 198u8, 120u8, 115u8, 146u8, 182u8, 94u8, 133u8, 161u8, 250u8, 180u8, + 195u8, 214u8, 21u8, 54u8, 231u8, 77u8, 210u8, 193u8, 123u8, 219u8, 88u8, 220u8, 13u8, 0u8, + 231u8, 222u8, 132u8, 180u8, 133u8, + ], + vk_gamme_g2: [ + 17u8, 120u8, 215u8, 162u8, 193u8, 184u8, 168u8, 99u8, 141u8, 88u8, 36u8, 143u8, 175u8, + 143u8, 9u8, 240u8, 170u8, 139u8, 71u8, 206u8, 215u8, 167u8, 156u8, 142u8, 113u8, 62u8, + 130u8, 177u8, 210u8, 31u8, 104u8, 133u8, 41u8, 214u8, 152u8, 49u8, 140u8, 54u8, 129u8, + 217u8, 171u8, 94u8, 74u8, 32u8, 213u8, 50u8, 152u8, 217u8, 87u8, 161u8, 105u8, 222u8, + 122u8, 33u8, 237u8, 253u8, 165u8, 92u8, 133u8, 187u8, 235u8, 234u8, 45u8, 203u8, 2u8, 69u8, + 198u8, 0u8, 234u8, 36u8, 49u8, 178u8, 117u8, 62u8, 172u8, 251u8, 125u8, 105u8, 172u8, + 119u8, 74u8, 146u8, 74u8, 230u8, 124u8, 205u8, 179u8, 125u8, 216u8, 93u8, 235u8, 167u8, + 89u8, 117u8, 246u8, 183u8, 3u8, 182u8, 208u8, 164u8, 58u8, 3u8, 242u8, 96u8, 251u8, 216u8, + 195u8, 33u8, 66u8, 238u8, 74u8, 116u8, 206u8, 53u8, 84u8, 200u8, 91u8, 107u8, 182u8, 204u8, + 165u8, 86u8, 202u8, 167u8, 93u8, 160u8, 231u8, 136u8, + ], + vk_delta_g2: [ + 14u8, 168u8, 152u8, 202u8, 42u8, 43u8, 161u8, 63u8, 145u8, 99u8, 201u8, 171u8, 49u8, 118u8, + 101u8, 9u8, 217u8, 62u8, 48u8, 9u8, 91u8, 59u8, 99u8, 73u8, 16u8, 232u8, 111u8, 180u8, + 105u8, 160u8, 43u8, 16u8, 6u8, 182u8, 182u8, 25u8, 80u8, 55u8, 27u8, 187u8, 27u8, 140u8, + 234u8, 95u8, 169u8, 1u8, 247u8, 178u8, 228u8, 179u8, 152u8, 26u8, 14u8, 238u8, 128u8, 2u8, + 239u8, 89u8, 103u8, 252u8, 93u8, 192u8, 165u8, 251u8, 45u8, 14u8, 13u8, 71u8, 53u8, 239u8, + 23u8, 148u8, 196u8, 220u8, 226u8, 157u8, 112u8, 102u8, 253u8, 13u8, 51u8, 225u8, 112u8, + 64u8, 41u8, 8u8, 21u8, 149u8, 95u8, 194u8, 168u8, 144u8, 140u8, 242u8, 20u8, 45u8, 31u8, + 168u8, 41u8, 17u8, 85u8, 201u8, 143u8, 14u8, 28u8, 251u8, 130u8, 175u8, 199u8, 67u8, 77u8, + 189u8, 62u8, 112u8, 136u8, 146u8, 39u8, 130u8, 197u8, 97u8, 19u8, 155u8, 178u8, 139u8, + 144u8, 234u8, 252u8, 180u8, + ], + vk_ic: &[ + [ + 19u8, 248u8, 126u8, 124u8, 187u8, 236u8, 117u8, 221u8, 240u8, 164u8, 192u8, 176u8, + 39u8, 91u8, 104u8, 253u8, 17u8, 178u8, 68u8, 131u8, 225u8, 128u8, 209u8, 221u8, 231u8, + 31u8, 109u8, 225u8, 108u8, 138u8, 194u8, 74u8, 43u8, 158u8, 122u8, 222u8, 211u8, 218u8, + 61u8, 225u8, 143u8, 161u8, 27u8, 3u8, 136u8, 38u8, 102u8, 77u8, 24u8, 197u8, 234u8, + 254u8, 117u8, 118u8, 167u8, 160u8, 62u8, 196u8, 28u8, 35u8, 73u8, 203u8, 181u8, 183u8, + ], + [ + 15u8, 14u8, 60u8, 28u8, 215u8, 44u8, 0u8, 22u8, 19u8, 14u8, 247u8, 255u8, 236u8, 106u8, + 36u8, 206u8, 247u8, 6u8, 183u8, 49u8, 137u8, 238u8, 104u8, 235u8, 196u8, 175u8, 225u8, + 161u8, 21u8, 220u8, 8u8, 151u8, 37u8, 212u8, 68u8, 79u8, 254u8, 27u8, 113u8, 152u8, + 109u8, 9u8, 75u8, 4u8, 245u8, 195u8, 71u8, 162u8, 40u8, 171u8, 95u8, 6u8, 20u8, 246u8, + 246u8, 250u8, 122u8, 13u8, 188u8, 125u8, 19u8, 206u8, 143u8, 36u8, + ], + [ + 7u8, 74u8, 130u8, 62u8, 68u8, 141u8, 46u8, 240u8, 96u8, 188u8, 2u8, 81u8, 118u8, 83u8, + 147u8, 96u8, 44u8, 176u8, 192u8, 42u8, 105u8, 165u8, 48u8, 255u8, 80u8, 118u8, 95u8, + 202u8, 198u8, 142u8, 173u8, 235u8, 1u8, 235u8, 83u8, 187u8, 223u8, 63u8, 84u8, 121u8, + 82u8, 207u8, 167u8, 225u8, 119u8, 71u8, 4u8, 16u8, 106u8, 32u8, 200u8, 118u8, 120u8, + 91u8, 238u8, 237u8, 155u8, 171u8, 33u8, 155u8, 191u8, 95u8, 219u8, 249u8, + ], + [ + 2u8, 90u8, 164u8, 67u8, 210u8, 21u8, 203u8, 79u8, 226u8, 194u8, 154u8, 9u8, 47u8, + 161u8, 140u8, 90u8, 102u8, 108u8, 213u8, 146u8, 158u8, 28u8, 177u8, 149u8, 60u8, 227u8, + 212u8, 31u8, 201u8, 182u8, 170u8, 142u8, 35u8, 136u8, 190u8, 214u8, 88u8, 0u8, 92u8, + 250u8, 89u8, 120u8, 1u8, 222u8, 46u8, 107u8, 89u8, 244u8, 33u8, 187u8, 152u8, 67u8, + 39u8, 227u8, 246u8, 31u8, 165u8, 40u8, 211u8, 192u8, 114u8, 128u8, 99u8, 64u8, + ], + [ + 48u8, 52u8, 25u8, 150u8, 16u8, 191u8, 77u8, 70u8, 69u8, 171u8, 50u8, 205u8, 156u8, + 245u8, 73u8, 77u8, 144u8, 226u8, 166u8, 99u8, 114u8, 31u8, 128u8, 252u8, 229u8, 195u8, + 51u8, 185u8, 182u8, 222u8, 100u8, 92u8, 11u8, 100u8, 189u8, 162u8, 210u8, 199u8, 47u8, + 114u8, 94u8, 18u8, 84u8, 44u8, 2u8, 166u8, 16u8, 149u8, 58u8, 107u8, 219u8, 253u8, + 154u8, 205u8, 221u8, 10u8, 79u8, 12u8, 96u8, 89u8, 187u8, 141u8, 93u8, 130u8, + ], + [ + 23u8, 213u8, 238u8, 185u8, 189u8, 128u8, 88u8, 73u8, 17u8, 218u8, 85u8, 8u8, 62u8, + 178u8, 69u8, 153u8, 70u8, 172u8, 158u8, 97u8, 47u8, 139u8, 3u8, 206u8, 166u8, 36u8, + 163u8, 98u8, 224u8, 126u8, 126u8, 97u8, 18u8, 190u8, 128u8, 41u8, 141u8, 36u8, 168u8, + 210u8, 128u8, 31u8, 50u8, 11u8, 179u8, 41u8, 127u8, 15u8, 13u8, 194u8, 73u8, 253u8, + 149u8, 85u8, 3u8, 190u8, 123u8, 159u8, 153u8, 148u8, 65u8, 116u8, 24u8, 101u8, + ], + [ + 38u8, 221u8, 75u8, 226u8, 238u8, 95u8, 35u8, 156u8, 101u8, 149u8, 0u8, 89u8, 123u8, + 136u8, 77u8, 12u8, 245u8, 160u8, 38u8, 168u8, 253u8, 198u8, 137u8, 152u8, 197u8, 98u8, + 189u8, 37u8, 242u8, 129u8, 55u8, 149u8, 27u8, 111u8, 242u8, 100u8, 65u8, 12u8, 16u8, + 163u8, 38u8, 78u8, 145u8, 226u8, 27u8, 208u8, 29u8, 105u8, 146u8, 184u8, 133u8, 226u8, + 40u8, 105u8, 18u8, 50u8, 88u8, 249u8, 117u8, 225u8, 48u8, 171u8, 46u8, 50u8, + ], + [ + 15u8, 141u8, 22u8, 149u8, 211u8, 21u8, 111u8, 117u8, 168u8, 253u8, 233u8, 235u8, 9u8, + 152u8, 20u8, 136u8, 210u8, 71u8, 227u8, 24u8, 250u8, 23u8, 165u8, 162u8, 114u8, 168u8, + 34u8, 107u8, 255u8, 217u8, 9u8, 222u8, 48u8, 61u8, 160u8, 93u8, 177u8, 152u8, 0u8, + 30u8, 88u8, 126u8, 163u8, 250u8, 210u8, 185u8, 197u8, 207u8, 240u8, 36u8, 127u8, 168u8, + 26u8, 61u8, 73u8, 223u8, 81u8, 157u8, 148u8, 223u8, 110u8, 80u8, 53u8, 211u8, + ], + [ + 40u8, 124u8, 34u8, 64u8, 231u8, 143u8, 47u8, 187u8, 88u8, 117u8, 229u8, 223u8, 184u8, + 139u8, 168u8, 64u8, 54u8, 241u8, 114u8, 219u8, 124u8, 10u8, 243u8, 87u8, 67u8, 203u8, + 201u8, 117u8, 2u8, 254u8, 131u8, 243u8, 40u8, 177u8, 147u8, 101u8, 147u8, 203u8, 58u8, + 145u8, 176u8, 166u8, 155u8, 16u8, 11u8, 129u8, 156u8, 93u8, 108u8, 83u8, 203u8, 58u8, + 146u8, 126u8, 111u8, 161u8, 162u8, 121u8, 157u8, 227u8, 160u8, 158u8, 75u8, 152u8, + ], + ], +}; diff --git a/programs/compressed-pda/src/verifying_keys/combined_26_3_1.rs b/programs/compressed-pda/src/verifying_keys/combined_26_3_1.rs new file mode 100644 index 0000000000..5861ffb160 --- /dev/null +++ b/programs/compressed-pda/src/verifying_keys/combined_26_3_1.rs @@ -0,0 +1,114 @@ +// This file is generated by xtask. Do not edit it manually. + +use groth16_solana::groth16::Groth16Verifyingkey; +pub const VERIFYINGKEY: Groth16Verifyingkey = Groth16Verifyingkey { + nr_pubinputs: 8usize, + vk_alpha_g1: [ + 3u8, 150u8, 234u8, 173u8, 114u8, 21u8, 115u8, 161u8, 55u8, 200u8, 36u8, 73u8, 194u8, 204u8, + 194u8, 10u8, 157u8, 198u8, 170u8, 217u8, 110u8, 204u8, 187u8, 229u8, 139u8, 57u8, 221u8, + 234u8, 155u8, 38u8, 244u8, 62u8, 29u8, 219u8, 41u8, 63u8, 119u8, 161u8, 235u8, 26u8, 48u8, + 211u8, 254u8, 90u8, 18u8, 112u8, 129u8, 14u8, 134u8, 222u8, 112u8, 138u8, 14u8, 245u8, + 175u8, 237u8, 182u8, 255u8, 84u8, 14u8, 26u8, 105u8, 131u8, 143u8, + ], + vk_beta_g2: [ + 22u8, 75u8, 252u8, 45u8, 228u8, 188u8, 120u8, 159u8, 207u8, 242u8, 75u8, 94u8, 154u8, + 212u8, 253u8, 34u8, 6u8, 248u8, 29u8, 29u8, 187u8, 214u8, 27u8, 144u8, 44u8, 151u8, 210u8, + 82u8, 179u8, 78u8, 141u8, 9u8, 13u8, 247u8, 140u8, 6u8, 182u8, 24u8, 23u8, 138u8, 217u8, + 208u8, 44u8, 72u8, 125u8, 35u8, 184u8, 137u8, 100u8, 246u8, 191u8, 42u8, 184u8, 196u8, + 35u8, 203u8, 134u8, 47u8, 170u8, 215u8, 192u8, 61u8, 58u8, 46u8, 24u8, 226u8, 99u8, 170u8, + 219u8, 105u8, 61u8, 220u8, 123u8, 74u8, 40u8, 145u8, 147u8, 193u8, 131u8, 9u8, 179u8, + 224u8, 250u8, 65u8, 70u8, 107u8, 87u8, 167u8, 224u8, 199u8, 14u8, 17u8, 168u8, 114u8, + 166u8, 95u8, 22u8, 198u8, 76u8, 241u8, 62u8, 174u8, 147u8, 188u8, 120u8, 43u8, 204u8, 5u8, + 104u8, 62u8, 92u8, 235u8, 42u8, 162u8, 175u8, 22u8, 94u8, 159u8, 247u8, 60u8, 77u8, 156u8, + 253u8, 219u8, 10u8, 163u8, 138u8, 138u8, + ], + vk_gamme_g2: [ + 3u8, 31u8, 254u8, 159u8, 85u8, 82u8, 237u8, 196u8, 157u8, 184u8, 55u8, 192u8, 217u8, 172u8, + 185u8, 48u8, 129u8, 220u8, 63u8, 14u8, 200u8, 251u8, 196u8, 245u8, 132u8, 241u8, 113u8, + 20u8, 121u8, 186u8, 25u8, 145u8, 8u8, 154u8, 63u8, 148u8, 1u8, 191u8, 39u8, 105u8, 30u8, + 120u8, 151u8, 136u8, 58u8, 143u8, 90u8, 203u8, 90u8, 85u8, 194u8, 151u8, 56u8, 22u8, 80u8, + 192u8, 57u8, 25u8, 137u8, 175u8, 228u8, 193u8, 224u8, 135u8, 31u8, 86u8, 85u8, 41u8, 115u8, + 107u8, 245u8, 115u8, 192u8, 48u8, 111u8, 151u8, 240u8, 104u8, 196u8, 113u8, 44u8, 105u8, + 87u8, 140u8, 8u8, 45u8, 210u8, 128u8, 155u8, 159u8, 193u8, 241u8, 83u8, 146u8, 59u8, 34u8, + 8u8, 173u8, 248u8, 228u8, 24u8, 169u8, 21u8, 236u8, 23u8, 63u8, 15u8, 136u8, 172u8, 108u8, + 241u8, 160u8, 177u8, 14u8, 214u8, 158u8, 254u8, 22u8, 190u8, 206u8, 25u8, 182u8, 198u8, + 150u8, 115u8, 128u8, 185u8, 50u8, + ], + vk_delta_g2: [ + 23u8, 147u8, 225u8, 109u8, 39u8, 228u8, 154u8, 25u8, 217u8, 164u8, 221u8, 113u8, 104u8, + 52u8, 134u8, 231u8, 38u8, 9u8, 205u8, 69u8, 206u8, 13u8, 90u8, 165u8, 173u8, 164u8, 81u8, + 229u8, 170u8, 7u8, 84u8, 24u8, 15u8, 54u8, 124u8, 24u8, 173u8, 133u8, 134u8, 29u8, 98u8, + 206u8, 17u8, 182u8, 169u8, 243u8, 80u8, 92u8, 241u8, 227u8, 156u8, 206u8, 174u8, 147u8, + 60u8, 215u8, 159u8, 24u8, 84u8, 166u8, 85u8, 55u8, 58u8, 222u8, 44u8, 156u8, 233u8, 177u8, + 49u8, 43u8, 177u8, 84u8, 50u8, 76u8, 100u8, 43u8, 165u8, 177u8, 168u8, 235u8, 215u8, 220u8, + 90u8, 95u8, 229u8, 62u8, 156u8, 89u8, 10u8, 130u8, 43u8, 40u8, 132u8, 69u8, 156u8, 20u8, + 15u8, 30u8, 69u8, 93u8, 67u8, 201u8, 129u8, 80u8, 187u8, 147u8, 68u8, 1u8, 194u8, 74u8, + 226u8, 125u8, 39u8, 89u8, 191u8, 229u8, 94u8, 129u8, 176u8, 237u8, 85u8, 205u8, 45u8, + 117u8, 239u8, 253u8, 227u8, 120u8, + ], + vk_ic: &[ + [ + 32u8, 136u8, 228u8, 186u8, 118u8, 246u8, 75u8, 82u8, 30u8, 83u8, 222u8, 239u8, 214u8, + 253u8, 235u8, 250u8, 207u8, 188u8, 114u8, 70u8, 100u8, 87u8, 255u8, 82u8, 149u8, 57u8, + 129u8, 195u8, 198u8, 165u8, 77u8, 96u8, 2u8, 4u8, 211u8, 199u8, 6u8, 158u8, 170u8, + 18u8, 126u8, 217u8, 202u8, 237u8, 142u8, 215u8, 21u8, 60u8, 103u8, 188u8, 95u8, 175u8, + 223u8, 242u8, 76u8, 110u8, 3u8, 252u8, 25u8, 63u8, 240u8, 94u8, 237u8, 170u8, + ], + [ + 18u8, 210u8, 160u8, 133u8, 163u8, 9u8, 56u8, 166u8, 166u8, 87u8, 159u8, 169u8, 234u8, + 101u8, 128u8, 0u8, 189u8, 190u8, 133u8, 228u8, 197u8, 138u8, 201u8, 161u8, 90u8, 118u8, + 45u8, 223u8, 118u8, 99u8, 208u8, 21u8, 44u8, 181u8, 48u8, 10u8, 35u8, 150u8, 172u8, + 214u8, 93u8, 109u8, 247u8, 151u8, 43u8, 134u8, 46u8, 121u8, 252u8, 209u8, 11u8, 151u8, + 221u8, 10u8, 64u8, 32u8, 140u8, 161u8, 250u8, 81u8, 181u8, 215u8, 24u8, 22u8, + ], + [ + 25u8, 6u8, 223u8, 217u8, 153u8, 60u8, 226u8, 4u8, 144u8, 207u8, 192u8, 5u8, 51u8, + 243u8, 116u8, 72u8, 97u8, 178u8, 172u8, 219u8, 115u8, 170u8, 155u8, 253u8, 162u8, 52u8, + 156u8, 110u8, 254u8, 253u8, 54u8, 33u8, 29u8, 198u8, 114u8, 58u8, 31u8, 184u8, 0u8, + 156u8, 231u8, 157u8, 85u8, 93u8, 231u8, 69u8, 143u8, 228u8, 232u8, 190u8, 104u8, 67u8, + 74u8, 180u8, 140u8, 57u8, 47u8, 178u8, 81u8, 73u8, 87u8, 223u8, 67u8, 151u8, + ], + [ + 40u8, 20u8, 82u8, 243u8, 199u8, 116u8, 209u8, 100u8, 165u8, 41u8, 19u8, 63u8, 107u8, + 109u8, 64u8, 171u8, 193u8, 93u8, 135u8, 112u8, 122u8, 220u8, 112u8, 0u8, 130u8, 90u8, + 194u8, 211u8, 80u8, 190u8, 144u8, 225u8, 30u8, 187u8, 141u8, 209u8, 164u8, 177u8, 74u8, + 113u8, 202u8, 71u8, 208u8, 206u8, 226u8, 156u8, 88u8, 6u8, 104u8, 114u8, 217u8, 232u8, + 254u8, 109u8, 17u8, 50u8, 68u8, 101u8, 29u8, 128u8, 156u8, 47u8, 79u8, 101u8, + ], + [ + 27u8, 218u8, 223u8, 177u8, 218u8, 57u8, 48u8, 255u8, 34u8, 7u8, 35u8, 216u8, 119u8, + 45u8, 94u8, 16u8, 38u8, 228u8, 153u8, 16u8, 209u8, 173u8, 132u8, 218u8, 28u8, 124u8, + 178u8, 92u8, 163u8, 42u8, 196u8, 178u8, 27u8, 199u8, 84u8, 181u8, 239u8, 107u8, 140u8, + 75u8, 179u8, 189u8, 79u8, 172u8, 24u8, 169u8, 101u8, 245u8, 140u8, 30u8, 101u8, 132u8, + 22u8, 29u8, 24u8, 51u8, 159u8, 182u8, 184u8, 53u8, 244u8, 26u8, 126u8, 94u8, + ], + [ + 13u8, 183u8, 178u8, 167u8, 181u8, 7u8, 96u8, 212u8, 55u8, 86u8, 104u8, 20u8, 13u8, + 237u8, 143u8, 167u8, 88u8, 215u8, 238u8, 140u8, 60u8, 159u8, 214u8, 117u8, 6u8, 50u8, + 154u8, 225u8, 174u8, 106u8, 57u8, 36u8, 29u8, 108u8, 97u8, 226u8, 66u8, 229u8, 72u8, + 239u8, 69u8, 63u8, 212u8, 239u8, 246u8, 128u8, 185u8, 46u8, 45u8, 206u8, 199u8, 184u8, + 207u8, 234u8, 58u8, 59u8, 207u8, 131u8, 88u8, 71u8, 118u8, 0u8, 219u8, 215u8, + ], + [ + 0u8, 244u8, 172u8, 152u8, 173u8, 4u8, 55u8, 223u8, 32u8, 229u8, 107u8, 198u8, 151u8, + 91u8, 112u8, 177u8, 237u8, 162u8, 69u8, 17u8, 44u8, 14u8, 133u8, 243u8, 137u8, 229u8, + 157u8, 197u8, 17u8, 214u8, 251u8, 132u8, 7u8, 36u8, 44u8, 227u8, 210u8, 194u8, 20u8, + 244u8, 95u8, 158u8, 225u8, 113u8, 230u8, 124u8, 132u8, 159u8, 228u8, 242u8, 74u8, 83u8, + 69u8, 2u8, 218u8, 30u8, 193u8, 163u8, 114u8, 5u8, 169u8, 179u8, 88u8, 11u8, + ], + [ + 34u8, 24u8, 103u8, 56u8, 102u8, 43u8, 154u8, 246u8, 233u8, 220u8, 26u8, 26u8, 21u8, + 30u8, 27u8, 88u8, 169u8, 210u8, 39u8, 2u8, 127u8, 79u8, 98u8, 226u8, 203u8, 197u8, + 130u8, 169u8, 247u8, 237u8, 208u8, 249u8, 25u8, 212u8, 128u8, 42u8, 249u8, 191u8, 34u8, + 138u8, 168u8, 250u8, 22u8, 138u8, 159u8, 136u8, 152u8, 16u8, 223u8, 20u8, 227u8, 71u8, + 80u8, 59u8, 72u8, 214u8, 151u8, 249u8, 225u8, 62u8, 221u8, 243u8, 80u8, 219u8, + ], + [ + 42u8, 222u8, 111u8, 12u8, 226u8, 215u8, 134u8, 82u8, 163u8, 99u8, 137u8, 90u8, 21u8, + 215u8, 117u8, 216u8, 23u8, 243u8, 36u8, 6u8, 153u8, 22u8, 142u8, 114u8, 232u8, 148u8, + 194u8, 239u8, 82u8, 148u8, 17u8, 160u8, 32u8, 41u8, 164u8, 46u8, 184u8, 209u8, 99u8, + 52u8, 100u8, 224u8, 18u8, 169u8, 53u8, 56u8, 145u8, 106u8, 53u8, 106u8, 70u8, 181u8, + 131u8, 36u8, 19u8, 15u8, 73u8, 67u8, 3u8, 45u8, 13u8, 145u8, 240u8, 212u8, + ], + ], +}; diff --git a/programs/compressed-pda/src/verifying_keys/combined_26_3_2.rs b/programs/compressed-pda/src/verifying_keys/combined_26_3_2.rs new file mode 100644 index 0000000000..b486c3a2f9 --- /dev/null +++ b/programs/compressed-pda/src/verifying_keys/combined_26_3_2.rs @@ -0,0 +1,128 @@ +// This file is generated by xtask. Do not edit it manually. + +use groth16_solana::groth16::Groth16Verifyingkey; +pub const VERIFYINGKEY: Groth16Verifyingkey = Groth16Verifyingkey { + nr_pubinputs: 10usize, + vk_alpha_g1: [ + 44u8, 42u8, 105u8, 214u8, 243u8, 104u8, 113u8, 4u8, 56u8, 90u8, 15u8, 5u8, 212u8, 111u8, + 231u8, 167u8, 232u8, 204u8, 93u8, 10u8, 12u8, 163u8, 33u8, 237u8, 255u8, 53u8, 56u8, 55u8, + 29u8, 53u8, 70u8, 105u8, 25u8, 15u8, 203u8, 137u8, 222u8, 30u8, 56u8, 156u8, 154u8, 30u8, + 112u8, 203u8, 173u8, 141u8, 206u8, 128u8, 217u8, 219u8, 94u8, 209u8, 164u8, 10u8, 17u8, + 192u8, 155u8, 37u8, 183u8, 161u8, 129u8, 119u8, 170u8, 177u8, + ], + vk_beta_g2: [ + 4u8, 234u8, 131u8, 123u8, 224u8, 98u8, 128u8, 57u8, 110u8, 191u8, 205u8, 81u8, 82u8, 130u8, + 117u8, 101u8, 85u8, 196u8, 161u8, 126u8, 211u8, 251u8, 228u8, 252u8, 166u8, 1u8, 177u8, + 121u8, 207u8, 26u8, 231u8, 229u8, 33u8, 47u8, 13u8, 224u8, 4u8, 231u8, 71u8, 143u8, 7u8, + 228u8, 143u8, 255u8, 74u8, 190u8, 141u8, 167u8, 253u8, 101u8, 189u8, 222u8, 208u8, 251u8, + 3u8, 98u8, 208u8, 9u8, 238u8, 7u8, 66u8, 247u8, 55u8, 239u8, 2u8, 20u8, 28u8, 86u8, 150u8, + 126u8, 178u8, 61u8, 184u8, 44u8, 167u8, 122u8, 127u8, 217u8, 200u8, 94u8, 188u8, 0u8, + 164u8, 67u8, 133u8, 91u8, 163u8, 230u8, 189u8, 187u8, 25u8, 127u8, 9u8, 24u8, 47u8, 63u8, + 38u8, 207u8, 238u8, 140u8, 218u8, 213u8, 24u8, 58u8, 129u8, 204u8, 113u8, 58u8, 208u8, + 89u8, 134u8, 132u8, 76u8, 70u8, 171u8, 188u8, 53u8, 15u8, 39u8, 254u8, 48u8, 116u8, 251u8, + 50u8, 203u8, 23u8, 95u8, 217u8, + ], + vk_gamme_g2: [ + 30u8, 45u8, 50u8, 213u8, 214u8, 49u8, 242u8, 154u8, 213u8, 85u8, 215u8, 96u8, 79u8, 151u8, + 118u8, 230u8, 219u8, 67u8, 227u8, 211u8, 42u8, 99u8, 171u8, 182u8, 53u8, 249u8, 109u8, + 101u8, 244u8, 138u8, 63u8, 93u8, 26u8, 79u8, 186u8, 241u8, 131u8, 194u8, 30u8, 195u8, + 184u8, 248u8, 27u8, 205u8, 36u8, 74u8, 12u8, 102u8, 221u8, 203u8, 147u8, 204u8, 196u8, + 148u8, 21u8, 197u8, 185u8, 41u8, 149u8, 162u8, 232u8, 215u8, 95u8, 40u8, 46u8, 172u8, + 148u8, 143u8, 31u8, 236u8, 243u8, 12u8, 251u8, 154u8, 163u8, 72u8, 36u8, 117u8, 16u8, 74u8, + 116u8, 100u8, 88u8, 35u8, 217u8, 26u8, 10u8, 101u8, 101u8, 130u8, 236u8, 32u8, 210u8, + 230u8, 218u8, 47u8, 30u8, 175u8, 166u8, 39u8, 50u8, 248u8, 136u8, 190u8, 104u8, 5u8, 238u8, + 188u8, 218u8, 59u8, 199u8, 67u8, 200u8, 91u8, 120u8, 34u8, 56u8, 165u8, 156u8, 32u8, 196u8, + 254u8, 236u8, 71u8, 252u8, 243u8, 247u8, 114u8, + ], + vk_delta_g2: [ + 17u8, 72u8, 79u8, 138u8, 25u8, 243u8, 246u8, 7u8, 145u8, 160u8, 58u8, 160u8, 150u8, 235u8, + 53u8, 137u8, 215u8, 37u8, 77u8, 159u8, 30u8, 157u8, 249u8, 96u8, 89u8, 80u8, 69u8, 114u8, + 113u8, 255u8, 131u8, 230u8, 29u8, 196u8, 51u8, 165u8, 208u8, 204u8, 43u8, 0u8, 227u8, + 141u8, 112u8, 116u8, 102u8, 184u8, 38u8, 139u8, 33u8, 240u8, 167u8, 63u8, 29u8, 92u8, 65u8, + 33u8, 181u8, 167u8, 79u8, 230u8, 23u8, 46u8, 162u8, 71u8, 18u8, 138u8, 68u8, 204u8, 192u8, + 153u8, 254u8, 26u8, 52u8, 22u8, 247u8, 124u8, 234u8, 253u8, 170u8, 85u8, 107u8, 190u8, + 150u8, 115u8, 255u8, 109u8, 225u8, 73u8, 244u8, 241u8, 170u8, 185u8, 231u8, 3u8, 83u8, + 39u8, 28u8, 87u8, 35u8, 23u8, 248u8, 228u8, 11u8, 33u8, 165u8, 9u8, 225u8, 249u8, 30u8, + 109u8, 49u8, 251u8, 24u8, 37u8, 181u8, 12u8, 77u8, 193u8, 175u8, 241u8, 94u8, 107u8, 67u8, + 150u8, 81u8, 8u8, 150u8, 128u8, + ], + vk_ic: &[ + [ + 21u8, 199u8, 219u8, 37u8, 12u8, 43u8, 19u8, 160u8, 224u8, 184u8, 239u8, 104u8, 78u8, + 89u8, 135u8, 47u8, 92u8, 82u8, 150u8, 125u8, 59u8, 181u8, 176u8, 142u8, 13u8, 101u8, + 6u8, 91u8, 183u8, 183u8, 57u8, 253u8, 30u8, 218u8, 140u8, 207u8, 4u8, 132u8, 239u8, + 30u8, 147u8, 178u8, 12u8, 230u8, 163u8, 58u8, 173u8, 59u8, 97u8, 11u8, 176u8, 147u8, + 0u8, 49u8, 57u8, 148u8, 117u8, 81u8, 143u8, 215u8, 27u8, 41u8, 142u8, 93u8, + ], + [ + 37u8, 85u8, 38u8, 88u8, 154u8, 139u8, 124u8, 248u8, 112u8, 212u8, 102u8, 169u8, 118u8, + 74u8, 50u8, 99u8, 127u8, 16u8, 129u8, 21u8, 161u8, 78u8, 102u8, 10u8, 219u8, 3u8, 14u8, + 102u8, 64u8, 27u8, 14u8, 39u8, 6u8, 245u8, 87u8, 86u8, 114u8, 22u8, 126u8, 14u8, 85u8, + 158u8, 120u8, 213u8, 152u8, 170u8, 9u8, 101u8, 181u8, 238u8, 41u8, 33u8, 22u8, 147u8, + 141u8, 155u8, 179u8, 58u8, 36u8, 162u8, 85u8, 118u8, 113u8, 187u8, + ], + [ + 37u8, 0u8, 200u8, 104u8, 83u8, 8u8, 122u8, 231u8, 21u8, 140u8, 106u8, 205u8, 136u8, + 0u8, 100u8, 36u8, 161u8, 114u8, 120u8, 190u8, 191u8, 225u8, 52u8, 211u8, 44u8, 104u8, + 229u8, 24u8, 33u8, 152u8, 170u8, 116u8, 47u8, 146u8, 22u8, 222u8, 110u8, 201u8, 152u8, + 178u8, 193u8, 63u8, 116u8, 26u8, 68u8, 112u8, 90u8, 59u8, 196u8, 252u8, 71u8, 20u8, + 103u8, 80u8, 211u8, 129u8, 114u8, 135u8, 249u8, 108u8, 166u8, 213u8, 246u8, 197u8, + ], + [ + 40u8, 234u8, 113u8, 136u8, 209u8, 125u8, 124u8, 139u8, 37u8, 174u8, 196u8, 82u8, 65u8, + 92u8, 146u8, 124u8, 40u8, 223u8, 140u8, 9u8, 164u8, 37u8, 106u8, 26u8, 174u8, 165u8, + 190u8, 250u8, 21u8, 123u8, 67u8, 160u8, 6u8, 87u8, 155u8, 49u8, 95u8, 85u8, 254u8, + 207u8, 127u8, 165u8, 112u8, 148u8, 232u8, 183u8, 116u8, 214u8, 44u8, 60u8, 61u8, 198u8, + 222u8, 66u8, 159u8, 28u8, 77u8, 182u8, 13u8, 79u8, 33u8, 113u8, 231u8, 72u8, + ], + [ + 44u8, 141u8, 176u8, 84u8, 92u8, 141u8, 186u8, 220u8, 212u8, 74u8, 250u8, 192u8, 37u8, + 83u8, 106u8, 121u8, 38u8, 72u8, 76u8, 74u8, 252u8, 253u8, 202u8, 125u8, 2u8, 246u8, + 218u8, 152u8, 24u8, 245u8, 119u8, 34u8, 13u8, 41u8, 148u8, 138u8, 106u8, 241u8, 251u8, + 43u8, 226u8, 12u8, 149u8, 159u8, 246u8, 217u8, 69u8, 51u8, 54u8, 188u8, 76u8, 112u8, + 0u8, 120u8, 237u8, 80u8, 85u8, 121u8, 37u8, 2u8, 50u8, 182u8, 122u8, 142u8, + ], + [ + 8u8, 244u8, 105u8, 248u8, 243u8, 118u8, 65u8, 17u8, 24u8, 53u8, 102u8, 228u8, 101u8, + 224u8, 109u8, 241u8, 101u8, 113u8, 5u8, 232u8, 58u8, 46u8, 63u8, 206u8, 99u8, 140u8, + 7u8, 178u8, 49u8, 62u8, 214u8, 30u8, 21u8, 102u8, 180u8, 119u8, 247u8, 75u8, 26u8, + 220u8, 71u8, 120u8, 174u8, 217u8, 253u8, 65u8, 46u8, 218u8, 164u8, 208u8, 126u8, 211u8, + 165u8, 113u8, 176u8, 88u8, 29u8, 69u8, 127u8, 192u8, 75u8, 145u8, 133u8, 18u8, + ], + [ + 37u8, 72u8, 64u8, 59u8, 58u8, 234u8, 154u8, 74u8, 181u8, 23u8, 3u8, 89u8, 67u8, 214u8, + 237u8, 180u8, 151u8, 217u8, 156u8, 180u8, 251u8, 204u8, 37u8, 21u8, 58u8, 221u8, 111u8, + 156u8, 240u8, 236u8, 136u8, 180u8, 35u8, 222u8, 221u8, 120u8, 58u8, 246u8, 101u8, + 140u8, 14u8, 34u8, 114u8, 208u8, 181u8, 84u8, 146u8, 24u8, 104u8, 33u8, 125u8, 18u8, + 116u8, 36u8, 246u8, 38u8, 254u8, 187u8, 177u8, 142u8, 121u8, 215u8, 27u8, 155u8, + ], + [ + 2u8, 20u8, 154u8, 121u8, 41u8, 56u8, 56u8, 18u8, 93u8, 9u8, 141u8, 46u8, 218u8, 65u8, + 61u8, 58u8, 221u8, 155u8, 204u8, 227u8, 186u8, 37u8, 11u8, 87u8, 91u8, 29u8, 135u8, + 205u8, 236u8, 134u8, 142u8, 235u8, 26u8, 155u8, 132u8, 15u8, 194u8, 39u8, 65u8, 107u8, + 82u8, 73u8, 8u8, 45u8, 55u8, 54u8, 1u8, 173u8, 45u8, 99u8, 136u8, 12u8, 87u8, 146u8, + 154u8, 133u8, 78u8, 208u8, 191u8, 220u8, 84u8, 175u8, 25u8, 23u8, + ], + [ + 33u8, 55u8, 45u8, 136u8, 113u8, 237u8, 4u8, 50u8, 195u8, 115u8, 248u8, 192u8, 61u8, + 114u8, 219u8, 170u8, 3u8, 220u8, 243u8, 161u8, 66u8, 61u8, 20u8, 175u8, 158u8, 192u8, + 148u8, 199u8, 22u8, 25u8, 127u8, 184u8, 1u8, 10u8, 143u8, 242u8, 87u8, 64u8, 159u8, + 16u8, 130u8, 218u8, 44u8, 5u8, 8u8, 241u8, 9u8, 95u8, 218u8, 130u8, 78u8, 102u8, 126u8, + 237u8, 3u8, 29u8, 78u8, 136u8, 222u8, 126u8, 141u8, 254u8, 29u8, 138u8, + ], + [ + 47u8, 127u8, 31u8, 128u8, 245u8, 215u8, 242u8, 111u8, 185u8, 77u8, 130u8, 254u8, 142u8, + 132u8, 43u8, 252u8, 212u8, 23u8, 132u8, 72u8, 24u8, 13u8, 67u8, 102u8, 97u8, 43u8, + 241u8, 27u8, 107u8, 7u8, 153u8, 155u8, 23u8, 101u8, 168u8, 78u8, 250u8, 22u8, 157u8, + 192u8, 9u8, 79u8, 151u8, 237u8, 110u8, 163u8, 174u8, 171u8, 19u8, 175u8, 82u8, 119u8, + 77u8, 198u8, 196u8, 140u8, 166u8, 213u8, 4u8, 124u8, 102u8, 113u8, 236u8, 95u8, + ], + [ + 37u8, 158u8, 79u8, 63u8, 255u8, 85u8, 125u8, 68u8, 208u8, 21u8, 187u8, 39u8, 250u8, + 96u8, 181u8, 186u8, 21u8, 154u8, 179u8, 101u8, 24u8, 62u8, 139u8, 187u8, 151u8, 186u8, + 138u8, 78u8, 108u8, 123u8, 103u8, 113u8, 40u8, 218u8, 96u8, 98u8, 129u8, 226u8, 179u8, + 241u8, 46u8, 215u8, 247u8, 146u8, 150u8, 214u8, 103u8, 61u8, 165u8, 149u8, 212u8, 66u8, + 81u8, 216u8, 154u8, 197u8, 134u8, 31u8, 177u8, 107u8, 251u8, 200u8, 139u8, 198u8, + ], + ], +}; diff --git a/programs/compressed-pda/src/verifying_keys/combined_26_4_1.rs b/programs/compressed-pda/src/verifying_keys/combined_26_4_1.rs new file mode 100644 index 0000000000..e136798df6 --- /dev/null +++ b/programs/compressed-pda/src/verifying_keys/combined_26_4_1.rs @@ -0,0 +1,128 @@ +// This file is generated by xtask. Do not edit it manually. + +use groth16_solana::groth16::Groth16Verifyingkey; +pub const VERIFYINGKEY: Groth16Verifyingkey = Groth16Verifyingkey { + nr_pubinputs: 10usize, + vk_alpha_g1: [ + 35u8, 85u8, 87u8, 142u8, 132u8, 25u8, 184u8, 46u8, 245u8, 145u8, 142u8, 178u8, 199u8, + 184u8, 15u8, 101u8, 126u8, 80u8, 75u8, 56u8, 122u8, 223u8, 135u8, 6u8, 148u8, 172u8, 218u8, + 219u8, 253u8, 70u8, 98u8, 163u8, 16u8, 248u8, 182u8, 135u8, 164u8, 13u8, 10u8, 235u8, 86u8, + 189u8, 235u8, 35u8, 227u8, 110u8, 9u8, 109u8, 162u8, 123u8, 247u8, 174u8, 38u8, 232u8, + 84u8, 11u8, 127u8, 228u8, 74u8, 208u8, 49u8, 42u8, 19u8, 23u8, + ], + vk_beta_g2: [ + 40u8, 195u8, 202u8, 187u8, 60u8, 79u8, 109u8, 199u8, 121u8, 205u8, 228u8, 155u8, 17u8, 4u8, + 93u8, 72u8, 117u8, 168u8, 162u8, 205u8, 233u8, 54u8, 2u8, 30u8, 212u8, 206u8, 12u8, 132u8, + 128u8, 61u8, 179u8, 74u8, 42u8, 203u8, 195u8, 167u8, 203u8, 74u8, 166u8, 22u8, 24u8, 160u8, + 223u8, 108u8, 29u8, 76u8, 203u8, 88u8, 36u8, 233u8, 188u8, 250u8, 193u8, 212u8, 96u8, + 246u8, 90u8, 117u8, 57u8, 244u8, 134u8, 78u8, 124u8, 22u8, 11u8, 240u8, 187u8, 140u8, + 155u8, 78u8, 158u8, 197u8, 129u8, 80u8, 84u8, 125u8, 50u8, 57u8, 74u8, 85u8, 151u8, 27u8, + 32u8, 22u8, 202u8, 124u8, 178u8, 188u8, 200u8, 146u8, 112u8, 116u8, 31u8, 38u8, 235u8, + 26u8, 23u8, 107u8, 214u8, 65u8, 247u8, 42u8, 14u8, 170u8, 113u8, 28u8, 48u8, 203u8, 166u8, + 143u8, 143u8, 51u8, 128u8, 81u8, 65u8, 3u8, 112u8, 151u8, 54u8, 53u8, 217u8, 181u8, 44u8, + 255u8, 19u8, 134u8, 152u8, 173u8, + ], + vk_gamme_g2: [ + 33u8, 155u8, 142u8, 133u8, 136u8, 216u8, 22u8, 7u8, 131u8, 156u8, 224u8, 22u8, 68u8, 234u8, + 152u8, 24u8, 21u8, 85u8, 40u8, 219u8, 3u8, 91u8, 182u8, 192u8, 218u8, 73u8, 39u8, 93u8, + 124u8, 100u8, 181u8, 127u8, 21u8, 255u8, 127u8, 243u8, 238u8, 62u8, 193u8, 94u8, 69u8, + 204u8, 248u8, 184u8, 191u8, 28u8, 181u8, 87u8, 208u8, 176u8, 3u8, 59u8, 115u8, 141u8, 72u8, + 205u8, 72u8, 243u8, 156u8, 44u8, 71u8, 149u8, 136u8, 240u8, 1u8, 6u8, 88u8, 28u8, 243u8, + 197u8, 204u8, 172u8, 181u8, 82u8, 181u8, 56u8, 237u8, 140u8, 126u8, 209u8, 220u8, 115u8, + 215u8, 50u8, 169u8, 202u8, 135u8, 84u8, 199u8, 11u8, 34u8, 208u8, 199u8, 142u8, 12u8, 1u8, + 47u8, 94u8, 195u8, 242u8, 116u8, 113u8, 96u8, 72u8, 138u8, 146u8, 140u8, 233u8, 1u8, 157u8, + 154u8, 39u8, 143u8, 246u8, 72u8, 89u8, 133u8, 41u8, 149u8, 255u8, 105u8, 131u8, 29u8, + 197u8, 52u8, 69u8, 151u8, 101u8, + ], + vk_delta_g2: [ + 22u8, 95u8, 132u8, 147u8, 180u8, 184u8, 146u8, 186u8, 85u8, 168u8, 239u8, 129u8, 144u8, + 43u8, 173u8, 54u8, 26u8, 122u8, 27u8, 75u8, 143u8, 64u8, 134u8, 244u8, 160u8, 160u8, 147u8, + 169u8, 59u8, 249u8, 209u8, 59u8, 17u8, 33u8, 144u8, 246u8, 121u8, 236u8, 233u8, 0u8, 73u8, + 72u8, 215u8, 241u8, 132u8, 26u8, 122u8, 237u8, 237u8, 155u8, 128u8, 17u8, 162u8, 75u8, + 252u8, 35u8, 212u8, 251u8, 120u8, 197u8, 143u8, 165u8, 64u8, 122u8, 8u8, 55u8, 95u8, 73u8, + 173u8, 145u8, 56u8, 200u8, 217u8, 149u8, 175u8, 68u8, 224u8, 112u8, 167u8, 44u8, 25u8, + 62u8, 189u8, 150u8, 110u8, 152u8, 93u8, 1u8, 129u8, 200u8, 199u8, 49u8, 102u8, 65u8, 138u8, + 136u8, 21u8, 123u8, 12u8, 29u8, 12u8, 82u8, 22u8, 20u8, 43u8, 122u8, 199u8, 70u8, 132u8, + 255u8, 209u8, 128u8, 16u8, 231u8, 88u8, 119u8, 6u8, 26u8, 77u8, 212u8, 174u8, 72u8, 42u8, + 166u8, 129u8, 85u8, 234u8, 211u8, + ], + vk_ic: &[ + [ + 0u8, 218u8, 125u8, 233u8, 8u8, 248u8, 186u8, 125u8, 46u8, 248u8, 251u8, 25u8, 158u8, + 129u8, 111u8, 108u8, 148u8, 249u8, 93u8, 41u8, 26u8, 111u8, 102u8, 167u8, 43u8, 15u8, + 107u8, 45u8, 64u8, 190u8, 42u8, 252u8, 31u8, 125u8, 124u8, 36u8, 123u8, 166u8, 76u8, + 103u8, 250u8, 85u8, 2u8, 5u8, 196u8, 233u8, 208u8, 123u8, 66u8, 110u8, 143u8, 25u8, + 199u8, 129u8, 205u8, 217u8, 248u8, 237u8, 85u8, 143u8, 4u8, 192u8, 29u8, 130u8, + ], + [ + 16u8, 146u8, 122u8, 188u8, 227u8, 7u8, 23u8, 197u8, 154u8, 38u8, 143u8, 192u8, 89u8, + 63u8, 236u8, 75u8, 226u8, 11u8, 220u8, 214u8, 189u8, 44u8, 126u8, 110u8, 36u8, 17u8, + 129u8, 102u8, 250u8, 0u8, 154u8, 165u8, 16u8, 240u8, 163u8, 13u8, 197u8, 160u8, 69u8, + 226u8, 63u8, 133u8, 28u8, 29u8, 118u8, 36u8, 159u8, 106u8, 192u8, 147u8, 226u8, 22u8, + 51u8, 21u8, 85u8, 193u8, 47u8, 98u8, 122u8, 231u8, 219u8, 194u8, 17u8, 139u8, + ], + [ + 45u8, 47u8, 198u8, 240u8, 242u8, 69u8, 49u8, 211u8, 148u8, 36u8, 75u8, 206u8, 64u8, + 191u8, 171u8, 95u8, 17u8, 120u8, 70u8, 88u8, 150u8, 234u8, 131u8, 105u8, 206u8, 230u8, + 159u8, 55u8, 154u8, 7u8, 31u8, 217u8, 10u8, 41u8, 134u8, 46u8, 253u8, 4u8, 202u8, 7u8, + 125u8, 8u8, 224u8, 244u8, 152u8, 27u8, 134u8, 100u8, 207u8, 219u8, 152u8, 154u8, 195u8, + 202u8, 98u8, 124u8, 186u8, 71u8, 214u8, 42u8, 67u8, 188u8, 5u8, 170u8, + ], + [ + 10u8, 40u8, 33u8, 161u8, 8u8, 33u8, 108u8, 193u8, 15u8, 216u8, 178u8, 221u8, 97u8, + 212u8, 197u8, 152u8, 67u8, 152u8, 34u8, 46u8, 253u8, 217u8, 103u8, 96u8, 99u8, 193u8, + 186u8, 247u8, 76u8, 205u8, 185u8, 22u8, 43u8, 248u8, 20u8, 35u8, 180u8, 221u8, 90u8, + 15u8, 185u8, 200u8, 213u8, 233u8, 159u8, 69u8, 242u8, 175u8, 159u8, 233u8, 188u8, 46u8, + 23u8, 220u8, 250u8, 87u8, 84u8, 195u8, 139u8, 14u8, 182u8, 115u8, 36u8, 250u8, + ], + [ + 26u8, 0u8, 176u8, 60u8, 204u8, 137u8, 242u8, 4u8, 20u8, 23u8, 232u8, 82u8, 90u8, 136u8, + 45u8, 217u8, 3u8, 81u8, 128u8, 112u8, 179u8, 83u8, 55u8, 228u8, 23u8, 22u8, 232u8, + 162u8, 148u8, 252u8, 64u8, 74u8, 31u8, 155u8, 93u8, 145u8, 159u8, 20u8, 73u8, 120u8, + 127u8, 53u8, 189u8, 248u8, 143u8, 203u8, 48u8, 70u8, 125u8, 72u8, 215u8, 238u8, 136u8, + 170u8, 104u8, 192u8, 197u8, 236u8, 17u8, 160u8, 30u8, 47u8, 178u8, 86u8, + ], + [ + 44u8, 180u8, 56u8, 54u8, 47u8, 83u8, 243u8, 137u8, 159u8, 37u8, 89u8, 49u8, 160u8, + 217u8, 227u8, 101u8, 158u8, 112u8, 205u8, 249u8, 185u8, 201u8, 120u8, 33u8, 90u8, 26u8, + 89u8, 68u8, 243u8, 152u8, 83u8, 201u8, 17u8, 219u8, 117u8, 133u8, 35u8, 200u8, 204u8, + 71u8, 183u8, 42u8, 234u8, 100u8, 52u8, 185u8, 246u8, 255u8, 41u8, 69u8, 232u8, 246u8, + 139u8, 143u8, 93u8, 1u8, 82u8, 65u8, 205u8, 48u8, 172u8, 95u8, 55u8, 8u8, + ], + [ + 36u8, 54u8, 113u8, 70u8, 68u8, 246u8, 132u8, 240u8, 1u8, 70u8, 35u8, 153u8, 91u8, + 209u8, 145u8, 249u8, 193u8, 99u8, 127u8, 54u8, 203u8, 104u8, 236u8, 33u8, 235u8, 201u8, + 121u8, 68u8, 139u8, 233u8, 86u8, 141u8, 36u8, 57u8, 23u8, 12u8, 143u8, 48u8, 134u8, + 192u8, 252u8, 142u8, 34u8, 202u8, 162u8, 188u8, 234u8, 197u8, 229u8, 117u8, 66u8, 52u8, + 138u8, 23u8, 85u8, 136u8, 219u8, 36u8, 240u8, 142u8, 105u8, 164u8, 81u8, 41u8, + ], + [ + 3u8, 148u8, 255u8, 96u8, 72u8, 70u8, 235u8, 122u8, 119u8, 137u8, 32u8, 9u8, 230u8, + 79u8, 87u8, 32u8, 66u8, 57u8, 188u8, 35u8, 143u8, 247u8, 234u8, 84u8, 166u8, 238u8, + 246u8, 12u8, 13u8, 52u8, 48u8, 34u8, 39u8, 53u8, 206u8, 29u8, 28u8, 110u8, 221u8, + 121u8, 64u8, 167u8, 94u8, 181u8, 180u8, 131u8, 18u8, 206u8, 109u8, 61u8, 80u8, 69u8, + 154u8, 85u8, 106u8, 48u8, 30u8, 178u8, 153u8, 88u8, 130u8, 19u8, 202u8, 21u8, + ], + [ + 4u8, 100u8, 205u8, 202u8, 6u8, 54u8, 62u8, 94u8, 54u8, 103u8, 252u8, 220u8, 95u8, + 201u8, 194u8, 107u8, 81u8, 99u8, 221u8, 46u8, 100u8, 98u8, 232u8, 159u8, 146u8, 100u8, + 143u8, 251u8, 60u8, 213u8, 128u8, 129u8, 41u8, 97u8, 229u8, 60u8, 9u8, 42u8, 159u8, + 229u8, 101u8, 29u8, 143u8, 214u8, 225u8, 160u8, 53u8, 137u8, 164u8, 169u8, 203u8, + 203u8, 205u8, 147u8, 100u8, 18u8, 184u8, 98u8, 14u8, 128u8, 13u8, 82u8, 185u8, 61u8, + ], + [ + 18u8, 139u8, 145u8, 237u8, 90u8, 105u8, 6u8, 160u8, 43u8, 235u8, 119u8, 223u8, 189u8, + 77u8, 40u8, 215u8, 246u8, 120u8, 250u8, 245u8, 25u8, 23u8, 170u8, 203u8, 208u8, 197u8, + 59u8, 82u8, 104u8, 147u8, 176u8, 249u8, 22u8, 206u8, 204u8, 174u8, 164u8, 70u8, 96u8, + 181u8, 47u8, 203u8, 108u8, 199u8, 211u8, 72u8, 56u8, 82u8, 206u8, 177u8, 89u8, 194u8, + 85u8, 162u8, 73u8, 134u8, 186u8, 86u8, 18u8, 74u8, 217u8, 103u8, 171u8, 136u8, + ], + [ + 13u8, 39u8, 159u8, 149u8, 36u8, 17u8, 66u8, 20u8, 130u8, 23u8, 105u8, 229u8, 129u8, + 140u8, 152u8, 184u8, 163u8, 3u8, 9u8, 15u8, 167u8, 94u8, 32u8, 97u8, 91u8, 41u8, 211u8, + 218u8, 112u8, 185u8, 232u8, 99u8, 34u8, 200u8, 77u8, 103u8, 184u8, 247u8, 90u8, 200u8, + 245u8, 100u8, 56u8, 20u8, 212u8, 75u8, 91u8, 74u8, 174u8, 43u8, 16u8, 150u8, 34u8, + 34u8, 119u8, 100u8, 112u8, 199u8, 81u8, 56u8, 20u8, 211u8, 17u8, 21u8, + ], + ], +}; diff --git a/programs/compressed-pda/src/verifying_keys/combined_26_4_2.rs b/programs/compressed-pda/src/verifying_keys/combined_26_4_2.rs new file mode 100644 index 0000000000..869efae597 --- /dev/null +++ b/programs/compressed-pda/src/verifying_keys/combined_26_4_2.rs @@ -0,0 +1,143 @@ +// This file is generated by xtask. Do not edit it manually. + +use groth16_solana::groth16::Groth16Verifyingkey; +pub const VERIFYINGKEY: Groth16Verifyingkey = Groth16Verifyingkey { + nr_pubinputs: 12usize, + vk_alpha_g1: [ + 12u8, 85u8, 203u8, 148u8, 251u8, 76u8, 92u8, 227u8, 53u8, 149u8, 193u8, 26u8, 151u8, 222u8, + 78u8, 6u8, 178u8, 49u8, 210u8, 225u8, 166u8, 199u8, 177u8, 128u8, 200u8, 198u8, 166u8, + 68u8, 29u8, 10u8, 253u8, 36u8, 45u8, 185u8, 69u8, 172u8, 78u8, 88u8, 74u8, 141u8, 215u8, + 41u8, 252u8, 189u8, 235u8, 41u8, 234u8, 138u8, 48u8, 107u8, 158u8, 163u8, 91u8, 224u8, + 39u8, 100u8, 70u8, 237u8, 122u8, 235u8, 238u8, 249u8, 22u8, 153u8, + ], + vk_beta_g2: [ + 17u8, 255u8, 224u8, 17u8, 172u8, 212u8, 221u8, 85u8, 82u8, 253u8, 0u8, 59u8, 53u8, 220u8, + 240u8, 79u8, 32u8, 173u8, 207u8, 214u8, 52u8, 158u8, 88u8, 234u8, 58u8, 28u8, 84u8, 79u8, + 223u8, 177u8, 113u8, 155u8, 14u8, 5u8, 96u8, 85u8, 142u8, 18u8, 187u8, 39u8, 30u8, 151u8, + 1u8, 137u8, 70u8, 181u8, 141u8, 122u8, 194u8, 45u8, 251u8, 60u8, 139u8, 3u8, 48u8, 250u8, + 130u8, 87u8, 252u8, 44u8, 30u8, 132u8, 245u8, 102u8, 29u8, 25u8, 20u8, 118u8, 49u8, 55u8, + 103u8, 65u8, 133u8, 209u8, 103u8, 6u8, 9u8, 97u8, 160u8, 176u8, 159u8, 86u8, 127u8, 217u8, + 238u8, 141u8, 159u8, 146u8, 20u8, 212u8, 154u8, 209u8, 2u8, 42u8, 152u8, 20u8, 18u8, 69u8, + 62u8, 19u8, 103u8, 51u8, 189u8, 189u8, 120u8, 37u8, 247u8, 83u8, 27u8, 219u8, 166u8, 8u8, + 136u8, 27u8, 14u8, 76u8, 123u8, 248u8, 181u8, 45u8, 213u8, 37u8, 252u8, 20u8, 112u8, 206u8, + 37u8, 72u8, + ], + vk_gamme_g2: [ + 46u8, 137u8, 126u8, 72u8, 11u8, 138u8, 73u8, 155u8, 82u8, 185u8, 45u8, 233u8, 218u8, 220u8, + 38u8, 118u8, 204u8, 216u8, 68u8, 224u8, 132u8, 221u8, 59u8, 239u8, 199u8, 254u8, 168u8, + 63u8, 41u8, 158u8, 156u8, 200u8, 40u8, 25u8, 190u8, 230u8, 89u8, 247u8, 68u8, 209u8, 20u8, + 131u8, 17u8, 0u8, 58u8, 41u8, 51u8, 3u8, 73u8, 141u8, 238u8, 185u8, 146u8, 153u8, 58u8, + 41u8, 81u8, 18u8, 126u8, 203u8, 99u8, 55u8, 105u8, 232u8, 18u8, 98u8, 32u8, 60u8, 149u8, + 26u8, 200u8, 49u8, 174u8, 239u8, 56u8, 6u8, 106u8, 87u8, 15u8, 96u8, 242u8, 0u8, 130u8, + 4u8, 153u8, 80u8, 159u8, 226u8, 72u8, 176u8, 209u8, 151u8, 113u8, 27u8, 79u8, 0u8, 11u8, + 43u8, 80u8, 141u8, 117u8, 0u8, 5u8, 144u8, 3u8, 65u8, 226u8, 167u8, 26u8, 72u8, 32u8, 56u8, + 11u8, 100u8, 120u8, 172u8, 3u8, 234u8, 154u8, 22u8, 7u8, 26u8, 189u8, 213u8, 235u8, 45u8, + 199u8, 108u8, + ], + vk_delta_g2: [ + 9u8, 150u8, 99u8, 237u8, 77u8, 123u8, 105u8, 212u8, 67u8, 23u8, 76u8, 138u8, 180u8, 213u8, + 125u8, 60u8, 168u8, 244u8, 165u8, 157u8, 181u8, 158u8, 95u8, 247u8, 40u8, 52u8, 228u8, + 136u8, 117u8, 8u8, 247u8, 253u8, 5u8, 23u8, 161u8, 47u8, 126u8, 179u8, 235u8, 85u8, 38u8, + 201u8, 215u8, 33u8, 230u8, 196u8, 237u8, 195u8, 230u8, 154u8, 2u8, 221u8, 206u8, 72u8, + 111u8, 49u8, 177u8, 22u8, 251u8, 186u8, 0u8, 108u8, 248u8, 247u8, 4u8, 98u8, 194u8, 62u8, + 212u8, 254u8, 35u8, 24u8, 54u8, 192u8, 234u8, 236u8, 82u8, 237u8, 131u8, 123u8, 233u8, + 164u8, 107u8, 204u8, 223u8, 155u8, 249u8, 180u8, 152u8, 48u8, 85u8, 136u8, 124u8, 9u8, + 170u8, 183u8, 36u8, 252u8, 18u8, 200u8, 3u8, 8u8, 98u8, 91u8, 73u8, 71u8, 75u8, 148u8, + 238u8, 181u8, 75u8, 80u8, 141u8, 178u8, 133u8, 213u8, 61u8, 202u8, 81u8, 26u8, 70u8, 36u8, + 199u8, 89u8, 33u8, 16u8, 81u8, 106u8, + ], + vk_ic: &[ + [ + 6u8, 103u8, 143u8, 218u8, 53u8, 116u8, 216u8, 18u8, 51u8, 245u8, 95u8, 95u8, 144u8, + 199u8, 21u8, 181u8, 87u8, 104u8, 52u8, 241u8, 93u8, 220u8, 63u8, 1u8, 43u8, 115u8, + 35u8, 137u8, 11u8, 225u8, 18u8, 120u8, 20u8, 26u8, 16u8, 174u8, 115u8, 7u8, 108u8, + 13u8, 2u8, 6u8, 178u8, 230u8, 201u8, 170u8, 156u8, 77u8, 90u8, 7u8, 19u8, 255u8, 180u8, + 167u8, 140u8, 191u8, 3u8, 22u8, 246u8, 102u8, 4u8, 109u8, 202u8, 99u8, + ], + [ + 19u8, 154u8, 245u8, 71u8, 4u8, 59u8, 170u8, 100u8, 66u8, 235u8, 1u8, 9u8, 80u8, 152u8, + 253u8, 79u8, 165u8, 153u8, 156u8, 166u8, 27u8, 169u8, 190u8, 211u8, 184u8, 91u8, 215u8, + 189u8, 199u8, 142u8, 60u8, 170u8, 38u8, 76u8, 171u8, 90u8, 13u8, 115u8, 254u8, 93u8, + 201u8, 138u8, 185u8, 198u8, 132u8, 79u8, 179u8, 54u8, 42u8, 67u8, 101u8, 134u8, 29u8, + 132u8, 128u8, 196u8, 65u8, 64u8, 139u8, 73u8, 235u8, 89u8, 28u8, 215u8, + ], + [ + 25u8, 167u8, 222u8, 118u8, 17u8, 61u8, 80u8, 147u8, 78u8, 197u8, 224u8, 224u8, 43u8, + 164u8, 249u8, 212u8, 225u8, 186u8, 175u8, 65u8, 156u8, 110u8, 233u8, 41u8, 154u8, 47u8, + 203u8, 56u8, 67u8, 68u8, 153u8, 18u8, 20u8, 171u8, 68u8, 225u8, 250u8, 63u8, 185u8, + 247u8, 242u8, 161u8, 185u8, 60u8, 173u8, 194u8, 175u8, 145u8, 228u8, 177u8, 136u8, + 52u8, 106u8, 252u8, 173u8, 206u8, 98u8, 119u8, 181u8, 246u8, 176u8, 172u8, 241u8, + 227u8, + ], + [ + 16u8, 42u8, 183u8, 5u8, 91u8, 144u8, 96u8, 21u8, 47u8, 77u8, 203u8, 126u8, 30u8, 164u8, + 202u8, 106u8, 78u8, 207u8, 127u8, 225u8, 34u8, 76u8, 156u8, 72u8, 252u8, 155u8, 239u8, + 88u8, 2u8, 250u8, 30u8, 184u8, 33u8, 81u8, 178u8, 73u8, 159u8, 3u8, 34u8, 222u8, 124u8, + 8u8, 214u8, 109u8, 70u8, 111u8, 64u8, 0u8, 255u8, 163u8, 41u8, 91u8, 201u8, 80u8, + 158u8, 211u8, 121u8, 181u8, 102u8, 209u8, 39u8, 105u8, 19u8, 77u8, + ], + [ + 21u8, 43u8, 95u8, 251u8, 69u8, 113u8, 98u8, 145u8, 7u8, 197u8, 131u8, 13u8, 109u8, + 185u8, 55u8, 167u8, 224u8, 253u8, 133u8, 155u8, 251u8, 229u8, 34u8, 2u8, 118u8, 54u8, + 213u8, 24u8, 66u8, 37u8, 30u8, 206u8, 0u8, 158u8, 132u8, 101u8, 200u8, 145u8, 151u8, + 232u8, 164u8, 191u8, 152u8, 253u8, 73u8, 102u8, 99u8, 251u8, 54u8, 190u8, 103u8, 133u8, + 40u8, 219u8, 238u8, 236u8, 171u8, 224u8, 113u8, 104u8, 128u8, 121u8, 240u8, 52u8, + ], + [ + 1u8, 151u8, 31u8, 217u8, 78u8, 32u8, 60u8, 131u8, 80u8, 172u8, 49u8, 222u8, 79u8, + 235u8, 4u8, 113u8, 185u8, 47u8, 82u8, 168u8, 203u8, 62u8, 143u8, 172u8, 56u8, 58u8, + 126u8, 49u8, 68u8, 159u8, 255u8, 24u8, 32u8, 194u8, 140u8, 210u8, 188u8, 49u8, 9u8, + 174u8, 243u8, 4u8, 79u8, 232u8, 151u8, 58u8, 69u8, 52u8, 198u8, 201u8, 85u8, 191u8, + 172u8, 149u8, 105u8, 56u8, 93u8, 104u8, 214u8, 178u8, 206u8, 68u8, 213u8, 64u8, + ], + [ + 10u8, 30u8, 23u8, 231u8, 151u8, 72u8, 124u8, 57u8, 136u8, 129u8, 249u8, 115u8, 83u8, + 65u8, 204u8, 37u8, 234u8, 249u8, 72u8, 35u8, 239u8, 77u8, 200u8, 142u8, 178u8, 157u8, + 147u8, 46u8, 50u8, 106u8, 32u8, 8u8, 15u8, 168u8, 45u8, 9u8, 10u8, 74u8, 106u8, 189u8, + 220u8, 3u8, 102u8, 251u8, 32u8, 110u8, 162u8, 69u8, 188u8, 205u8, 157u8, 29u8, 37u8, + 106u8, 245u8, 233u8, 184u8, 166u8, 54u8, 224u8, 97u8, 18u8, 90u8, 225u8, + ], + [ + 46u8, 251u8, 181u8, 155u8, 251u8, 166u8, 164u8, 128u8, 195u8, 76u8, 227u8, 110u8, + 141u8, 189u8, 154u8, 25u8, 54u8, 133u8, 38u8, 138u8, 82u8, 63u8, 36u8, 53u8, 125u8, + 27u8, 45u8, 198u8, 176u8, 152u8, 7u8, 46u8, 21u8, 27u8, 152u8, 154u8, 20u8, 83u8, + 217u8, 78u8, 238u8, 169u8, 86u8, 112u8, 42u8, 94u8, 41u8, 116u8, 18u8, 150u8, 155u8, + 117u8, 21u8, 189u8, 10u8, 242u8, 47u8, 38u8, 139u8, 174u8, 15u8, 246u8, 226u8, 23u8, + ], + [ + 39u8, 219u8, 168u8, 61u8, 100u8, 120u8, 80u8, 30u8, 245u8, 143u8, 3u8, 101u8, 105u8, + 23u8, 189u8, 162u8, 147u8, 19u8, 33u8, 201u8, 163u8, 92u8, 46u8, 91u8, 64u8, 129u8, + 78u8, 177u8, 229u8, 170u8, 49u8, 245u8, 32u8, 20u8, 181u8, 110u8, 154u8, 188u8, 158u8, + 187u8, 38u8, 161u8, 121u8, 168u8, 231u8, 250u8, 116u8, 208u8, 83u8, 4u8, 208u8, 31u8, + 149u8, 86u8, 201u8, 42u8, 79u8, 211u8, 68u8, 227u8, 3u8, 97u8, 66u8, 207u8, + ], + [ + 1u8, 120u8, 246u8, 103u8, 1u8, 10u8, 209u8, 199u8, 221u8, 145u8, 37u8, 134u8, 134u8, + 233u8, 21u8, 22u8, 227u8, 123u8, 65u8, 145u8, 25u8, 110u8, 66u8, 52u8, 240u8, 90u8, + 230u8, 36u8, 246u8, 42u8, 157u8, 158u8, 13u8, 3u8, 59u8, 254u8, 219u8, 143u8, 246u8, + 247u8, 33u8, 212u8, 8u8, 152u8, 185u8, 235u8, 252u8, 79u8, 185u8, 126u8, 167u8, 188u8, + 32u8, 186u8, 123u8, 194u8, 199u8, 4u8, 237u8, 11u8, 1u8, 221u8, 142u8, 167u8, + ], + [ + 12u8, 33u8, 93u8, 244u8, 190u8, 120u8, 189u8, 172u8, 247u8, 136u8, 134u8, 221u8, 251u8, + 177u8, 127u8, 231u8, 146u8, 211u8, 213u8, 247u8, 186u8, 131u8, 185u8, 2u8, 123u8, + 143u8, 230u8, 128u8, 30u8, 145u8, 17u8, 203u8, 20u8, 23u8, 39u8, 68u8, 115u8, 18u8, + 79u8, 17u8, 238u8, 171u8, 84u8, 206u8, 204u8, 133u8, 50u8, 160u8, 136u8, 245u8, 62u8, + 183u8, 82u8, 172u8, 4u8, 17u8, 95u8, 75u8, 114u8, 51u8, 223u8, 20u8, 166u8, 22u8, + ], + [ + 29u8, 237u8, 81u8, 121u8, 99u8, 49u8, 226u8, 118u8, 52u8, 174u8, 176u8, 153u8, 7u8, + 37u8, 182u8, 247u8, 246u8, 195u8, 52u8, 242u8, 249u8, 130u8, 78u8, 178u8, 20u8, 128u8, + 107u8, 172u8, 141u8, 3u8, 91u8, 63u8, 24u8, 179u8, 217u8, 135u8, 109u8, 130u8, 110u8, + 141u8, 144u8, 55u8, 72u8, 167u8, 85u8, 181u8, 160u8, 85u8, 67u8, 53u8, 28u8, 61u8, + 68u8, 138u8, 39u8, 142u8, 196u8, 82u8, 7u8, 119u8, 114u8, 161u8, 136u8, 214u8, + ], + [ + 4u8, 118u8, 76u8, 190u8, 149u8, 224u8, 108u8, 101u8, 53u8, 55u8, 28u8, 204u8, 4u8, 8u8, + 53u8, 186u8, 112u8, 106u8, 86u8, 236u8, 108u8, 209u8, 72u8, 238u8, 206u8, 216u8, 106u8, + 66u8, 175u8, 135u8, 254u8, 144u8, 33u8, 88u8, 170u8, 91u8, 143u8, 3u8, 19u8, 252u8, + 236u8, 169u8, 57u8, 84u8, 50u8, 45u8, 185u8, 136u8, 134u8, 23u8, 239u8, 39u8, 212u8, + 27u8, 96u8, 217u8, 163u8, 88u8, 231u8, 195u8, 186u8, 177u8, 236u8, 183u8, + ], + ], +}; diff --git a/programs/compressed-pda/src/verifying_keys/inclusion_26_1.rs b/programs/compressed-pda/src/verifying_keys/inclusion_26_1.rs index 3551facccc..715ceef9d2 100644 --- a/programs/compressed-pda/src/verifying_keys/inclusion_26_1.rs +++ b/programs/compressed-pda/src/verifying_keys/inclusion_26_1.rs @@ -4,69 +4,69 @@ use groth16_solana::groth16::Groth16Verifyingkey; pub const VERIFYINGKEY: Groth16Verifyingkey = Groth16Verifyingkey { nr_pubinputs: 2usize, vk_alpha_g1: [ - 2u8, 165u8, 24u8, 132u8, 243u8, 53u8, 11u8, 170u8, 106u8, 105u8, 211u8, 38u8, 161u8, 240u8, - 126u8, 176u8, 58u8, 60u8, 27u8, 252u8, 154u8, 145u8, 89u8, 79u8, 178u8, 198u8, 65u8, 84u8, - 85u8, 21u8, 203u8, 124u8, 14u8, 181u8, 159u8, 186u8, 100u8, 34u8, 61u8, 62u8, 38u8, 64u8, - 54u8, 166u8, 104u8, 70u8, 44u8, 89u8, 204u8, 91u8, 209u8, 241u8, 159u8, 166u8, 52u8, 41u8, - 50u8, 83u8, 142u8, 81u8, 248u8, 50u8, 179u8, 199u8, + 6u8, 41u8, 7u8, 150u8, 78u8, 21u8, 216u8, 236u8, 94u8, 254u8, 133u8, 59u8, 160u8, 23u8, + 212u8, 175u8, 21u8, 200u8, 47u8, 253u8, 168u8, 105u8, 161u8, 178u8, 16u8, 195u8, 55u8, 7u8, + 75u8, 202u8, 199u8, 185u8, 11u8, 216u8, 163u8, 217u8, 224u8, 44u8, 48u8, 28u8, 37u8, 142u8, + 162u8, 57u8, 173u8, 131u8, 32u8, 121u8, 243u8, 49u8, 85u8, 253u8, 151u8, 215u8, 236u8, + 43u8, 80u8, 37u8, 154u8, 127u8, 197u8, 214u8, 41u8, 53u8, ], vk_beta_g2: [ - 5u8, 90u8, 1u8, 77u8, 241u8, 117u8, 177u8, 171u8, 121u8, 189u8, 101u8, 46u8, 252u8, 78u8, - 31u8, 133u8, 152u8, 185u8, 221u8, 3u8, 90u8, 30u8, 9u8, 148u8, 153u8, 75u8, 75u8, 47u8, - 192u8, 228u8, 89u8, 224u8, 13u8, 102u8, 177u8, 40u8, 4u8, 203u8, 148u8, 216u8, 116u8, 88u8, - 30u8, 71u8, 205u8, 236u8, 189u8, 207u8, 178u8, 178u8, 129u8, 155u8, 7u8, 102u8, 3u8, 237u8, - 21u8, 210u8, 248u8, 44u8, 20u8, 118u8, 155u8, 200u8, 46u8, 137u8, 111u8, 227u8, 41u8, - 191u8, 38u8, 195u8, 222u8, 172u8, 20u8, 86u8, 191u8, 29u8, 157u8, 49u8, 127u8, 148u8, 79u8, - 120u8, 66u8, 48u8, 39u8, 195u8, 217u8, 118u8, 64u8, 136u8, 238u8, 225u8, 182u8, 28u8, 16u8, - 164u8, 96u8, 254u8, 176u8, 223u8, 220u8, 184u8, 196u8, 118u8, 111u8, 71u8, 10u8, 75u8, - 154u8, 127u8, 7u8, 197u8, 199u8, 199u8, 191u8, 171u8, 77u8, 219u8, 206u8, 190u8, 149u8, - 91u8, 50u8, 180u8, 111u8, 58u8, + 10u8, 88u8, 178u8, 12u8, 189u8, 50u8, 35u8, 4u8, 234u8, 196u8, 14u8, 200u8, 157u8, 42u8, + 178u8, 69u8, 182u8, 31u8, 51u8, 246u8, 145u8, 145u8, 95u8, 66u8, 63u8, 72u8, 55u8, 4u8, + 7u8, 59u8, 159u8, 135u8, 35u8, 48u8, 52u8, 16u8, 225u8, 103u8, 38u8, 171u8, 39u8, 183u8, + 110u8, 8u8, 137u8, 34u8, 41u8, 138u8, 131u8, 76u8, 140u8, 109u8, 57u8, 183u8, 16u8, 254u8, + 120u8, 59u8, 179u8, 10u8, 227u8, 24u8, 250u8, 186u8, 11u8, 205u8, 184u8, 245u8, 190u8, + 171u8, 231u8, 22u8, 208u8, 192u8, 195u8, 197u8, 156u8, 121u8, 81u8, 251u8, 158u8, 71u8, + 44u8, 228u8, 249u8, 241u8, 200u8, 115u8, 253u8, 29u8, 253u8, 176u8, 21u8, 94u8, 72u8, 58u8, + 24u8, 132u8, 206u8, 119u8, 95u8, 119u8, 102u8, 151u8, 42u8, 123u8, 131u8, 74u8, 70u8, + 206u8, 184u8, 144u8, 90u8, 77u8, 176u8, 180u8, 129u8, 178u8, 150u8, 213u8, 79u8, 83u8, + 65u8, 201u8, 194u8, 97u8, 68u8, 180u8, ], vk_gamme_g2: [ - 46u8, 207u8, 26u8, 107u8, 193u8, 158u8, 170u8, 133u8, 47u8, 14u8, 103u8, 174u8, 228u8, 8u8, - 66u8, 159u8, 241u8, 226u8, 65u8, 180u8, 25u8, 129u8, 194u8, 9u8, 86u8, 175u8, 145u8, 217u8, - 230u8, 167u8, 43u8, 136u8, 32u8, 76u8, 205u8, 75u8, 77u8, 79u8, 14u8, 50u8, 220u8, 33u8, - 154u8, 90u8, 46u8, 174u8, 58u8, 233u8, 167u8, 61u8, 244u8, 200u8, 216u8, 185u8, 130u8, - 227u8, 186u8, 158u8, 0u8, 182u8, 101u8, 109u8, 53u8, 195u8, 35u8, 32u8, 19u8, 231u8, 209u8, - 66u8, 62u8, 230u8, 251u8, 189u8, 79u8, 186u8, 159u8, 144u8, 216u8, 48u8, 195u8, 17u8, - 125u8, 174u8, 71u8, 143u8, 213u8, 250u8, 206u8, 209u8, 244u8, 227u8, 211u8, 74u8, 136u8, - 14u8, 32u8, 3u8, 93u8, 44u8, 206u8, 209u8, 149u8, 108u8, 105u8, 5u8, 34u8, 248u8, 182u8, - 197u8, 16u8, 19u8, 206u8, 198u8, 99u8, 201u8, 93u8, 205u8, 7u8, 137u8, 218u8, 63u8, 150u8, - 96u8, 122u8, 215u8, 82u8, 39u8, + 43u8, 225u8, 220u8, 31u8, 204u8, 205u8, 90u8, 168u8, 157u8, 29u8, 146u8, 38u8, 140u8, 84u8, + 72u8, 137u8, 167u8, 72u8, 194u8, 53u8, 241u8, 30u8, 42u8, 63u8, 193u8, 23u8, 179u8, 100u8, + 237u8, 114u8, 150u8, 143u8, 37u8, 146u8, 76u8, 176u8, 172u8, 24u8, 10u8, 162u8, 197u8, + 218u8, 214u8, 116u8, 171u8, 223u8, 179u8, 226u8, 93u8, 135u8, 121u8, 166u8, 37u8, 197u8, + 142u8, 218u8, 74u8, 42u8, 75u8, 95u8, 236u8, 48u8, 255u8, 156u8, 3u8, 25u8, 209u8, 39u8, + 217u8, 31u8, 153u8, 64u8, 197u8, 188u8, 38u8, 160u8, 154u8, 24u8, 184u8, 2u8, 75u8, 216u8, + 77u8, 225u8, 113u8, 2u8, 227u8, 100u8, 168u8, 190u8, 44u8, 46u8, 18u8, 97u8, 221u8, 54u8, + 29u8, 119u8, 160u8, 146u8, 139u8, 169u8, 121u8, 233u8, 218u8, 178u8, 231u8, 135u8, 19u8, + 239u8, 124u8, 63u8, 9u8, 67u8, 248u8, 42u8, 83u8, 8u8, 172u8, 61u8, 27u8, 115u8, 96u8, + 73u8, 248u8, 48u8, 149u8, 14u8, ], vk_delta_g2: [ - 34u8, 94u8, 74u8, 61u8, 15u8, 42u8, 179u8, 118u8, 53u8, 52u8, 144u8, 193u8, 71u8, 50u8, - 85u8, 228u8, 168u8, 19u8, 212u8, 163u8, 19u8, 65u8, 2u8, 234u8, 90u8, 5u8, 90u8, 11u8, - 210u8, 246u8, 101u8, 47u8, 5u8, 253u8, 162u8, 89u8, 120u8, 106u8, 95u8, 66u8, 108u8, 150u8, - 39u8, 31u8, 69u8, 127u8, 146u8, 192u8, 83u8, 232u8, 185u8, 197u8, 252u8, 101u8, 162u8, - 165u8, 242u8, 51u8, 176u8, 62u8, 175u8, 205u8, 181u8, 48u8, 39u8, 82u8, 27u8, 177u8, 40u8, - 233u8, 9u8, 67u8, 206u8, 144u8, 236u8, 4u8, 192u8, 185u8, 197u8, 168u8, 172u8, 94u8, 18u8, - 54u8, 72u8, 157u8, 57u8, 72u8, 86u8, 45u8, 82u8, 245u8, 116u8, 46u8, 158u8, 119u8, 47u8, - 26u8, 195u8, 224u8, 185u8, 181u8, 129u8, 86u8, 145u8, 77u8, 230u8, 64u8, 128u8, 112u8, - 122u8, 27u8, 53u8, 182u8, 62u8, 142u8, 219u8, 78u8, 219u8, 210u8, 79u8, 118u8, 96u8, 3u8, - 52u8, 182u8, 34u8, 234u8, + 41u8, 54u8, 28u8, 99u8, 36u8, 226u8, 68u8, 78u8, 131u8, 237u8, 96u8, 50u8, 77u8, 188u8, + 27u8, 200u8, 204u8, 150u8, 245u8, 160u8, 119u8, 239u8, 30u8, 214u8, 230u8, 158u8, 42u8, + 40u8, 35u8, 188u8, 67u8, 135u8, 32u8, 94u8, 27u8, 141u8, 62u8, 245u8, 198u8, 211u8, 254u8, + 168u8, 164u8, 146u8, 223u8, 49u8, 155u8, 222u8, 58u8, 98u8, 191u8, 143u8, 65u8, 104u8, + 255u8, 237u8, 185u8, 38u8, 178u8, 138u8, 240u8, 124u8, 28u8, 157u8, 5u8, 40u8, 230u8, 90u8, + 71u8, 9u8, 213u8, 202u8, 56u8, 46u8, 47u8, 118u8, 34u8, 23u8, 161u8, 74u8, 115u8, 237u8, + 183u8, 169u8, 235u8, 33u8, 141u8, 49u8, 197u8, 13u8, 227u8, 176u8, 188u8, 157u8, 165u8, + 19u8, 30u8, 150u8, 185u8, 34u8, 118u8, 250u8, 185u8, 247u8, 209u8, 88u8, 160u8, 194u8, + 91u8, 206u8, 177u8, 37u8, 159u8, 254u8, 112u8, 24u8, 157u8, 46u8, 164u8, 187u8, 59u8, 74u8, + 212u8, 178u8, 222u8, 166u8, 172u8, 18u8, ], vk_ic: &[ [ - 46u8, 54u8, 135u8, 124u8, 2u8, 227u8, 164u8, 107u8, 166u8, 233u8, 0u8, 219u8, 171u8, - 188u8, 0u8, 42u8, 13u8, 225u8, 161u8, 206u8, 236u8, 96u8, 67u8, 218u8, 223u8, 75u8, - 78u8, 224u8, 25u8, 17u8, 30u8, 145u8, 21u8, 35u8, 204u8, 241u8, 113u8, 151u8, 235u8, - 148u8, 1u8, 184u8, 240u8, 23u8, 66u8, 216u8, 54u8, 41u8, 68u8, 167u8, 118u8, 7u8, - 208u8, 168u8, 162u8, 136u8, 42u8, 101u8, 48u8, 3u8, 12u8, 37u8, 123u8, 221u8, + 19u8, 58u8, 228u8, 202u8, 221u8, 2u8, 6u8, 213u8, 80u8, 208u8, 194u8, 81u8, 230u8, + 183u8, 54u8, 45u8, 59u8, 36u8, 110u8, 142u8, 49u8, 128u8, 214u8, 11u8, 113u8, 74u8, + 141u8, 151u8, 204u8, 106u8, 125u8, 74u8, 30u8, 148u8, 116u8, 141u8, 92u8, 194u8, 106u8, + 59u8, 155u8, 164u8, 247u8, 89u8, 55u8, 64u8, 115u8, 11u8, 58u8, 117u8, 199u8, 217u8, + 155u8, 214u8, 79u8, 122u8, 60u8, 120u8, 205u8, 46u8, 45u8, 62u8, 10u8, 140u8, ], [ - 30u8, 107u8, 211u8, 6u8, 235u8, 70u8, 178u8, 38u8, 55u8, 136u8, 120u8, 168u8, 204u8, - 41u8, 66u8, 220u8, 160u8, 77u8, 108u8, 41u8, 38u8, 122u8, 242u8, 229u8, 47u8, 70u8, - 250u8, 11u8, 193u8, 192u8, 48u8, 41u8, 39u8, 155u8, 53u8, 76u8, 24u8, 252u8, 22u8, - 178u8, 242u8, 69u8, 113u8, 29u8, 223u8, 96u8, 172u8, 203u8, 30u8, 151u8, 146u8, 135u8, - 3u8, 141u8, 177u8, 205u8, 128u8, 39u8, 72u8, 124u8, 119u8, 194u8, 101u8, 203u8, + 6u8, 34u8, 117u8, 188u8, 152u8, 88u8, 152u8, 224u8, 26u8, 90u8, 64u8, 118u8, 182u8, + 2u8, 19u8, 213u8, 52u8, 241u8, 8u8, 120u8, 114u8, 1u8, 220u8, 251u8, 207u8, 93u8, 91u8, + 62u8, 160u8, 185u8, 105u8, 119u8, 35u8, 37u8, 108u8, 0u8, 45u8, 44u8, 178u8, 30u8, + 233u8, 78u8, 110u8, 14u8, 49u8, 242u8, 160u8, 159u8, 93u8, 10u8, 80u8, 215u8, 241u8, + 122u8, 33u8, 236u8, 165u8, 247u8, 161u8, 197u8, 221u8, 254u8, 97u8, 130u8, ], [ - 22u8, 167u8, 217u8, 71u8, 169u8, 98u8, 75u8, 175u8, 40u8, 3u8, 137u8, 201u8, 225u8, - 52u8, 171u8, 92u8, 3u8, 251u8, 156u8, 193u8, 77u8, 149u8, 157u8, 61u8, 226u8, 44u8, - 199u8, 32u8, 71u8, 170u8, 17u8, 23u8, 23u8, 17u8, 12u8, 7u8, 96u8, 230u8, 100u8, 148u8, - 176u8, 200u8, 230u8, 201u8, 97u8, 188u8, 37u8, 197u8, 72u8, 132u8, 249u8, 141u8, 34u8, - 78u8, 39u8, 126u8, 117u8, 224u8, 159u8, 158u8, 247u8, 196u8, 225u8, 170u8, + 26u8, 240u8, 64u8, 129u8, 164u8, 31u8, 46u8, 118u8, 111u8, 159u8, 185u8, 238u8, 163u8, + 175u8, 199u8, 222u8, 33u8, 76u8, 0u8, 198u8, 142u8, 252u8, 231u8, 108u8, 201u8, 123u8, + 71u8, 238u8, 44u8, 244u8, 15u8, 21u8, 35u8, 193u8, 118u8, 120u8, 225u8, 147u8, 42u8, + 176u8, 94u8, 57u8, 82u8, 104u8, 70u8, 189u8, 99u8, 25u8, 99u8, 209u8, 29u8, 17u8, + 200u8, 239u8, 36u8, 184u8, 119u8, 184u8, 90u8, 195u8, 130u8, 13u8, 64u8, 83u8, ], ], }; diff --git a/programs/compressed-pda/src/verifying_keys/inclusion_26_2.rs b/programs/compressed-pda/src/verifying_keys/inclusion_26_2.rs index 925fa28493..031c23ea3b 100644 --- a/programs/compressed-pda/src/verifying_keys/inclusion_26_2.rs +++ b/programs/compressed-pda/src/verifying_keys/inclusion_26_2.rs @@ -4,84 +4,83 @@ use groth16_solana::groth16::Groth16Verifyingkey; pub const VERIFYINGKEY: Groth16Verifyingkey = Groth16Verifyingkey { nr_pubinputs: 4usize, vk_alpha_g1: [ - 39u8, 82u8, 130u8, 213u8, 14u8, 108u8, 119u8, 96u8, 187u8, 86u8, 248u8, 33u8, 131u8, 96u8, - 226u8, 204u8, 253u8, 194u8, 212u8, 67u8, 113u8, 137u8, 24u8, 142u8, 133u8, 193u8, 181u8, - 208u8, 93u8, 81u8, 35u8, 247u8, 34u8, 188u8, 22u8, 207u8, 89u8, 9u8, 140u8, 133u8, 244u8, - 192u8, 110u8, 234u8, 223u8, 32u8, 120u8, 229u8, 96u8, 202u8, 64u8, 192u8, 177u8, 161u8, - 214u8, 95u8, 124u8, 239u8, 105u8, 204u8, 76u8, 128u8, 229u8, 233u8, + 28u8, 168u8, 66u8, 172u8, 124u8, 76u8, 154u8, 58u8, 130u8, 142u8, 17u8, 84u8, 217u8, 17u8, + 131u8, 24u8, 167u8, 24u8, 135u8, 117u8, 86u8, 144u8, 169u8, 224u8, 187u8, 254u8, 95u8, + 88u8, 148u8, 55u8, 156u8, 7u8, 28u8, 245u8, 104u8, 44u8, 79u8, 202u8, 219u8, 101u8, 162u8, + 71u8, 79u8, 211u8, 94u8, 150u8, 176u8, 63u8, 186u8, 6u8, 161u8, 229u8, 105u8, 163u8, 18u8, + 69u8, 84u8, 44u8, 61u8, 31u8, 219u8, 83u8, 202u8, 95u8, ], vk_beta_g2: [ - 29u8, 9u8, 180u8, 13u8, 173u8, 165u8, 187u8, 58u8, 119u8, 137u8, 51u8, 139u8, 59u8, 161u8, - 237u8, 167u8, 208u8, 91u8, 126u8, 110u8, 104u8, 127u8, 74u8, 90u8, 171u8, 55u8, 121u8, - 136u8, 126u8, 136u8, 114u8, 12u8, 4u8, 6u8, 110u8, 245u8, 184u8, 229u8, 242u8, 63u8, 251u8, - 205u8, 193u8, 1u8, 10u8, 96u8, 55u8, 145u8, 106u8, 100u8, 88u8, 247u8, 8u8, 166u8, 212u8, - 47u8, 244u8, 115u8, 167u8, 216u8, 127u8, 215u8, 151u8, 119u8, 10u8, 11u8, 134u8, 60u8, - 118u8, 13u8, 119u8, 118u8, 163u8, 104u8, 91u8, 152u8, 183u8, 221u8, 38u8, 94u8, 79u8, - 124u8, 93u8, 231u8, 238u8, 61u8, 8u8, 133u8, 169u8, 45u8, 253u8, 197u8, 43u8, 175u8, 94u8, - 109u8, 0u8, 58u8, 19u8, 155u8, 145u8, 71u8, 243u8, 25u8, 97u8, 67u8, 192u8, 213u8, 164u8, - 125u8, 203u8, 196u8, 161u8, 82u8, 109u8, 122u8, 57u8, 122u8, 37u8, 120u8, 170u8, 13u8, - 230u8, 126u8, 115u8, 178u8, 175u8, 180u8, + 47u8, 9u8, 148u8, 52u8, 251u8, 126u8, 201u8, 26u8, 222u8, 101u8, 66u8, 120u8, 39u8, 225u8, + 76u8, 245u8, 173u8, 21u8, 74u8, 171u8, 135u8, 64u8, 62u8, 167u8, 34u8, 177u8, 217u8, 21u8, + 196u8, 6u8, 13u8, 113u8, 42u8, 92u8, 33u8, 90u8, 198u8, 56u8, 189u8, 140u8, 49u8, 173u8, + 66u8, 4u8, 142u8, 24u8, 36u8, 93u8, 199u8, 237u8, 42u8, 78u8, 126u8, 182u8, 145u8, 157u8, + 232u8, 114u8, 191u8, 227u8, 137u8, 94u8, 62u8, 66u8, 45u8, 3u8, 8u8, 94u8, 205u8, 87u8, + 242u8, 129u8, 38u8, 141u8, 95u8, 219u8, 162u8, 203u8, 170u8, 53u8, 68u8, 216u8, 247u8, + 187u8, 15u8, 95u8, 173u8, 46u8, 48u8, 26u8, 81u8, 121u8, 116u8, 82u8, 45u8, 118u8, 25u8, + 145u8, 186u8, 3u8, 196u8, 90u8, 181u8, 243u8, 30u8, 18u8, 225u8, 110u8, 52u8, 122u8, 125u8, + 145u8, 32u8, 70u8, 12u8, 176u8, 90u8, 60u8, 75u8, 93u8, 84u8, 253u8, 63u8, 223u8, 18u8, + 242u8, 104u8, 53u8, ], vk_gamme_g2: [ - 9u8, 164u8, 230u8, 172u8, 9u8, 61u8, 43u8, 199u8, 120u8, 45u8, 68u8, 90u8, 31u8, 132u8, - 176u8, 28u8, 32u8, 30u8, 118u8, 67u8, 83u8, 231u8, 185u8, 109u8, 122u8, 195u8, 24u8, 86u8, - 43u8, 45u8, 117u8, 230u8, 47u8, 222u8, 213u8, 149u8, 251u8, 76u8, 207u8, 88u8, 86u8, 208u8, - 207u8, 150u8, 151u8, 255u8, 86u8, 159u8, 16u8, 224u8, 167u8, 31u8, 21u8, 234u8, 94u8, 56u8, - 242u8, 190u8, 223u8, 176u8, 161u8, 158u8, 116u8, 45u8, 15u8, 95u8, 79u8, 27u8, 168u8, - 120u8, 105u8, 44u8, 174u8, 25u8, 177u8, 35u8, 236u8, 144u8, 68u8, 99u8, 231u8, 30u8, 126u8, - 46u8, 184u8, 70u8, 83u8, 151u8, 251u8, 188u8, 43u8, 236u8, 63u8, 188u8, 47u8, 152u8, 4u8, - 246u8, 70u8, 152u8, 159u8, 198u8, 220u8, 59u8, 120u8, 164u8, 186u8, 177u8, 253u8, 230u8, - 63u8, 55u8, 145u8, 130u8, 77u8, 195u8, 120u8, 1u8, 225u8, 187u8, 18u8, 126u8, 210u8, 248u8, - 25u8, 34u8, 50u8, 182u8, + 23u8, 116u8, 255u8, 9u8, 3u8, 158u8, 209u8, 139u8, 43u8, 69u8, 237u8, 184u8, 166u8, 156u8, + 124u8, 82u8, 230u8, 146u8, 45u8, 76u8, 126u8, 53u8, 86u8, 50u8, 184u8, 127u8, 139u8, 47u8, + 248u8, 230u8, 66u8, 231u8, 5u8, 60u8, 91u8, 186u8, 169u8, 235u8, 242u8, 240u8, 58u8, 66u8, + 110u8, 217u8, 238u8, 216u8, 115u8, 11u8, 162u8, 89u8, 160u8, 157u8, 123u8, 122u8, 40u8, + 71u8, 139u8, 98u8, 93u8, 204u8, 122u8, 64u8, 60u8, 126u8, 38u8, 240u8, 90u8, 178u8, 144u8, + 68u8, 235u8, 91u8, 217u8, 253u8, 144u8, 158u8, 127u8, 25u8, 119u8, 63u8, 174u8, 154u8, + 223u8, 30u8, 213u8, 127u8, 58u8, 238u8, 8u8, 187u8, 159u8, 252u8, 79u8, 139u8, 130u8, 56u8, + 46u8, 227u8, 100u8, 71u8, 53u8, 10u8, 160u8, 142u8, 54u8, 229u8, 114u8, 139u8, 77u8, 204u8, + 77u8, 160u8, 104u8, 39u8, 228u8, 10u8, 190u8, 84u8, 207u8, 104u8, 129u8, 139u8, 61u8, + 175u8, 49u8, 122u8, 151u8, 129u8, ], vk_delta_g2: [ - 38u8, 144u8, 102u8, 11u8, 157u8, 198u8, 106u8, 212u8, 52u8, 60u8, 192u8, 160u8, 60u8, - 175u8, 38u8, 72u8, 46u8, 207u8, 51u8, 129u8, 138u8, 168u8, 223u8, 104u8, 14u8, 108u8, 22u8, - 29u8, 161u8, 141u8, 198u8, 119u8, 17u8, 144u8, 3u8, 160u8, 59u8, 172u8, 93u8, 84u8, 147u8, - 231u8, 106u8, 75u8, 22u8, 251u8, 143u8, 127u8, 213u8, 159u8, 127u8, 16u8, 162u8, 109u8, - 187u8, 221u8, 81u8, 211u8, 126u8, 24u8, 116u8, 115u8, 28u8, 12u8, 17u8, 140u8, 55u8, 35u8, - 77u8, 246u8, 126u8, 86u8, 159u8, 63u8, 13u8, 50u8, 197u8, 231u8, 201u8, 169u8, 65u8, 69u8, - 22u8, 255u8, 59u8, 192u8, 176u8, 104u8, 206u8, 250u8, 87u8, 5u8, 180u8, 212u8, 144u8, 7u8, - 20u8, 183u8, 92u8, 3u8, 95u8, 118u8, 36u8, 245u8, 9u8, 244u8, 89u8, 118u8, 211u8, 118u8, - 1u8, 145u8, 48u8, 184u8, 109u8, 46u8, 145u8, 162u8, 3u8, 170u8, 251u8, 2u8, 46u8, 195u8, - 23u8, 115u8, 248u8, 219u8, + 9u8, 220u8, 50u8, 237u8, 194u8, 75u8, 106u8, 197u8, 210u8, 165u8, 168u8, 227u8, 207u8, + 37u8, 163u8, 37u8, 21u8, 240u8, 123u8, 16u8, 229u8, 99u8, 57u8, 151u8, 53u8, 71u8, 105u8, + 172u8, 99u8, 214u8, 73u8, 178u8, 34u8, 201u8, 158u8, 95u8, 202u8, 208u8, 136u8, 54u8, + 187u8, 132u8, 1u8, 162u8, 17u8, 235u8, 253u8, 50u8, 137u8, 170u8, 161u8, 227u8, 200u8, + 239u8, 23u8, 162u8, 86u8, 169u8, 44u8, 68u8, 129u8, 125u8, 87u8, 75u8, 9u8, 208u8, 155u8, + 73u8, 52u8, 44u8, 198u8, 59u8, 38u8, 166u8, 125u8, 226u8, 139u8, 100u8, 95u8, 154u8, 13u8, + 92u8, 101u8, 59u8, 138u8, 57u8, 99u8, 6u8, 190u8, 55u8, 33u8, 19u8, 72u8, 211u8, 198u8, + 217u8, 5u8, 253u8, 188u8, 70u8, 2u8, 25u8, 235u8, 235u8, 138u8, 179u8, 78u8, 103u8, 48u8, + 162u8, 137u8, 115u8, 156u8, 190u8, 74u8, 149u8, 165u8, 137u8, 120u8, 157u8, 154u8, 167u8, + 203u8, 89u8, 254u8, 54u8, 172u8, 131u8, ], vk_ic: &[ [ - 9u8, 51u8, 235u8, 235u8, 14u8, 103u8, 222u8, 176u8, 104u8, 119u8, 126u8, 177u8, 109u8, - 48u8, 213u8, 35u8, 220u8, 148u8, 158u8, 233u8, 28u8, 205u8, 219u8, 83u8, 37u8, 164u8, - 181u8, 179u8, 41u8, 224u8, 137u8, 244u8, 19u8, 79u8, 176u8, 17u8, 123u8, 243u8, 128u8, - 140u8, 58u8, 203u8, 227u8, 68u8, 35u8, 228u8, 31u8, 141u8, 239u8, 161u8, 44u8, 158u8, - 114u8, 231u8, 222u8, 116u8, 92u8, 72u8, 38u8, 153u8, 86u8, 32u8, 52u8, 22u8, + 6u8, 156u8, 203u8, 243u8, 159u8, 189u8, 249u8, 194u8, 188u8, 25u8, 202u8, 117u8, 108u8, + 105u8, 129u8, 113u8, 123u8, 98u8, 195u8, 125u8, 180u8, 193u8, 116u8, 74u8, 249u8, + 214u8, 128u8, 61u8, 230u8, 236u8, 109u8, 223u8, 43u8, 48u8, 177u8, 10u8, 179u8, 4u8, + 94u8, 232u8, 190u8, 222u8, 93u8, 195u8, 122u8, 138u8, 236u8, 182u8, 242u8, 48u8, 252u8, + 64u8, 90u8, 87u8, 115u8, 109u8, 168u8, 60u8, 35u8, 58u8, 32u8, 85u8, 35u8, 40u8, ], [ - 24u8, 70u8, 61u8, 35u8, 65u8, 4u8, 39u8, 141u8, 54u8, 13u8, 106u8, 171u8, 49u8, 197u8, - 162u8, 79u8, 97u8, 210u8, 31u8, 67u8, 142u8, 39u8, 201u8, 244u8, 52u8, 137u8, 114u8, - 187u8, 165u8, 87u8, 51u8, 135u8, 4u8, 44u8, 68u8, 186u8, 164u8, 50u8, 54u8, 37u8, - 185u8, 146u8, 74u8, 179u8, 26u8, 124u8, 93u8, 24u8, 88u8, 181u8, 236u8, 28u8, 165u8, - 90u8, 196u8, 116u8, 147u8, 212u8, 134u8, 235u8, 21u8, 182u8, 102u8, 10u8, + 34u8, 135u8, 128u8, 151u8, 147u8, 5u8, 99u8, 65u8, 218u8, 127u8, 169u8, 133u8, 194u8, + 212u8, 200u8, 72u8, 251u8, 69u8, 155u8, 129u8, 103u8, 163u8, 187u8, 139u8, 155u8, 74u8, + 63u8, 245u8, 31u8, 211u8, 58u8, 83u8, 42u8, 59u8, 144u8, 26u8, 2u8, 5u8, 5u8, 108u8, + 171u8, 75u8, 252u8, 28u8, 170u8, 5u8, 10u8, 207u8, 80u8, 38u8, 150u8, 243u8, 120u8, + 20u8, 151u8, 125u8, 100u8, 162u8, 237u8, 122u8, 243u8, 49u8, 128u8, 71u8, ], [ - 22u8, 189u8, 133u8, 130u8, 203u8, 27u8, 199u8, 23u8, 106u8, 189u8, 217u8, 132u8, 68u8, - 99u8, 209u8, 214u8, 195u8, 253u8, 163u8, 10u8, 195u8, 130u8, 237u8, 102u8, 163u8, - 188u8, 200u8, 168u8, 191u8, 79u8, 153u8, 204u8, 20u8, 127u8, 93u8, 184u8, 11u8, 81u8, - 227u8, 206u8, 248u8, 138u8, 171u8, 183u8, 171u8, 130u8, 216u8, 80u8, 59u8, 247u8, - 201u8, 219u8, 69u8, 147u8, 166u8, 105u8, 28u8, 193u8, 6u8, 220u8, 139u8, 86u8, 233u8, - 229u8, + 13u8, 111u8, 246u8, 155u8, 27u8, 152u8, 149u8, 11u8, 228u8, 106u8, 232u8, 143u8, 51u8, + 1u8, 141u8, 154u8, 105u8, 178u8, 86u8, 14u8, 61u8, 134u8, 114u8, 100u8, 190u8, 114u8, + 218u8, 78u8, 127u8, 120u8, 46u8, 132u8, 22u8, 207u8, 26u8, 23u8, 63u8, 236u8, 175u8, + 153u8, 94u8, 182u8, 22u8, 129u8, 78u8, 118u8, 106u8, 214u8, 225u8, 81u8, 12u8, 200u8, + 239u8, 242u8, 217u8, 109u8, 215u8, 62u8, 60u8, 205u8, 175u8, 228u8, 98u8, 52u8, ], [ - 45u8, 247u8, 190u8, 200u8, 153u8, 146u8, 76u8, 242u8, 85u8, 158u8, 109u8, 85u8, 216u8, - 142u8, 141u8, 40u8, 161u8, 148u8, 97u8, 36u8, 196u8, 13u8, 237u8, 22u8, 109u8, 62u8, - 69u8, 166u8, 45u8, 208u8, 60u8, 236u8, 9u8, 60u8, 127u8, 229u8, 194u8, 236u8, 138u8, - 104u8, 112u8, 223u8, 183u8, 233u8, 231u8, 229u8, 152u8, 3u8, 240u8, 94u8, 233u8, 52u8, - 248u8, 105u8, 17u8, 125u8, 35u8, 11u8, 25u8, 27u8, 32u8, 229u8, 24u8, 85u8, + 45u8, 111u8, 0u8, 178u8, 131u8, 77u8, 230u8, 143u8, 132u8, 241u8, 24u8, 162u8, 82u8, + 51u8, 127u8, 237u8, 233u8, 8u8, 39u8, 144u8, 244u8, 160u8, 130u8, 254u8, 186u8, 214u8, + 154u8, 176u8, 25u8, 209u8, 54u8, 122u8, 2u8, 5u8, 105u8, 246u8, 70u8, 196u8, 32u8, + 248u8, 182u8, 204u8, 27u8, 220u8, 160u8, 182u8, 21u8, 23u8, 44u8, 198u8, 123u8, 201u8, + 245u8, 106u8, 69u8, 93u8, 62u8, 228u8, 84u8, 96u8, 195u8, 253u8, 186u8, 1u8, ], [ - 12u8, 106u8, 233u8, 137u8, 139u8, 82u8, 51u8, 198u8, 236u8, 190u8, 88u8, 46u8, 10u8, - 242u8, 47u8, 254u8, 40u8, 65u8, 193u8, 197u8, 41u8, 120u8, 35u8, 119u8, 50u8, 241u8, - 93u8, 204u8, 78u8, 240u8, 158u8, 236u8, 8u8, 92u8, 173u8, 56u8, 147u8, 207u8, 221u8, - 123u8, 62u8, 89u8, 173u8, 135u8, 184u8, 134u8, 52u8, 211u8, 209u8, 231u8, 93u8, 229u8, - 18u8, 249u8, 90u8, 248u8, 184u8, 192u8, 87u8, 145u8, 137u8, 180u8, 59u8, 72u8, + 32u8, 208u8, 200u8, 217u8, 5u8, 131u8, 220u8, 23u8, 224u8, 38u8, 190u8, 118u8, 82u8, + 86u8, 228u8, 233u8, 160u8, 103u8, 75u8, 2u8, 224u8, 4u8, 138u8, 88u8, 192u8, 49u8, + 95u8, 212u8, 208u8, 190u8, 215u8, 251u8, 4u8, 76u8, 92u8, 155u8, 80u8, 201u8, 190u8, + 8u8, 90u8, 179u8, 44u8, 249u8, 28u8, 35u8, 91u8, 240u8, 136u8, 77u8, 205u8, 82u8, + 178u8, 97u8, 4u8, 172u8, 209u8, 109u8, 29u8, 123u8, 94u8, 188u8, 165u8, 194u8, ], ], }; diff --git a/programs/compressed-pda/src/verifying_keys/inclusion_26_3.rs b/programs/compressed-pda/src/verifying_keys/inclusion_26_3.rs index d8e02cbc5a..e276b501aa 100644 --- a/programs/compressed-pda/src/verifying_keys/inclusion_26_3.rs +++ b/programs/compressed-pda/src/verifying_keys/inclusion_26_3.rs @@ -4,97 +4,98 @@ use groth16_solana::groth16::Groth16Verifyingkey; pub const VERIFYINGKEY: Groth16Verifyingkey = Groth16Verifyingkey { nr_pubinputs: 6usize, vk_alpha_g1: [ - 15u8, 248u8, 135u8, 127u8, 159u8, 215u8, 164u8, 54u8, 133u8, 232u8, 36u8, 118u8, 220u8, - 90u8, 191u8, 60u8, 123u8, 248u8, 34u8, 17u8, 112u8, 11u8, 163u8, 121u8, 90u8, 172u8, 99u8, - 74u8, 246u8, 173u8, 247u8, 172u8, 2u8, 108u8, 187u8, 34u8, 43u8, 51u8, 141u8, 173u8, 120u8, - 42u8, 195u8, 235u8, 91u8, 200u8, 18u8, 57u8, 50u8, 88u8, 241u8, 104u8, 95u8, 224u8, 200u8, - 197u8, 136u8, 131u8, 89u8, 93u8, 16u8, 67u8, 159u8, 154u8, + 38u8, 253u8, 87u8, 194u8, 189u8, 162u8, 222u8, 214u8, 252u8, 4u8, 148u8, 232u8, 242u8, + 223u8, 65u8, 146u8, 15u8, 56u8, 247u8, 237u8, 83u8, 210u8, 160u8, 31u8, 123u8, 119u8, 13u8, + 11u8, 243u8, 102u8, 156u8, 62u8, 13u8, 101u8, 123u8, 175u8, 175u8, 61u8, 252u8, 99u8, 98u8, + 109u8, 214u8, 130u8, 21u8, 8u8, 79u8, 155u8, 43u8, 70u8, 148u8, 179u8, 180u8, 23u8, 115u8, + 45u8, 69u8, 31u8, 120u8, 135u8, 135u8, 173u8, 36u8, 29u8, ], vk_beta_g2: [ - 35u8, 64u8, 46u8, 220u8, 198u8, 197u8, 13u8, 10u8, 139u8, 93u8, 29u8, 102u8, 196u8, 173u8, - 161u8, 253u8, 144u8, 239u8, 99u8, 38u8, 175u8, 68u8, 65u8, 92u8, 238u8, 241u8, 165u8, - 196u8, 54u8, 212u8, 105u8, 47u8, 39u8, 112u8, 36u8, 100u8, 63u8, 230u8, 177u8, 105u8, - 224u8, 114u8, 17u8, 212u8, 198u8, 145u8, 24u8, 243u8, 99u8, 196u8, 247u8, 36u8, 69u8, - 181u8, 125u8, 198u8, 128u8, 154u8, 185u8, 207u8, 128u8, 28u8, 39u8, 170u8, 5u8, 241u8, - 15u8, 184u8, 47u8, 223u8, 108u8, 217u8, 233u8, 32u8, 244u8, 178u8, 121u8, 140u8, 247u8, - 42u8, 249u8, 165u8, 13u8, 211u8, 239u8, 141u8, 5u8, 143u8, 80u8, 29u8, 172u8, 136u8, 7u8, - 178u8, 80u8, 243u8, 1u8, 51u8, 230u8, 50u8, 150u8, 161u8, 254u8, 110u8, 12u8, 46u8, 157u8, - 121u8, 68u8, 119u8, 25u8, 2u8, 213u8, 103u8, 32u8, 210u8, 89u8, 85u8, 242u8, 200u8, 41u8, - 79u8, 238u8, 132u8, 77u8, 203u8, 250u8, 203u8, + 1u8, 61u8, 129u8, 252u8, 135u8, 193u8, 77u8, 250u8, 98u8, 234u8, 113u8, 33u8, 234u8, 50u8, + 34u8, 115u8, 89u8, 178u8, 6u8, 60u8, 202u8, 80u8, 72u8, 12u8, 51u8, 94u8, 29u8, 22u8, + 154u8, 181u8, 73u8, 32u8, 14u8, 184u8, 234u8, 21u8, 8u8, 199u8, 195u8, 54u8, 25u8, 43u8, + 134u8, 149u8, 251u8, 108u8, 33u8, 40u8, 93u8, 157u8, 253u8, 229u8, 217u8, 32u8, 70u8, 37u8, + 57u8, 32u8, 7u8, 20u8, 121u8, 59u8, 102u8, 230u8, 27u8, 48u8, 202u8, 154u8, 181u8, 132u8, + 12u8, 47u8, 156u8, 76u8, 227u8, 70u8, 137u8, 161u8, 236u8, 151u8, 241u8, 129u8, 70u8, + 199u8, 60u8, 124u8, 151u8, 201u8, 178u8, 180u8, 226u8, 146u8, 135u8, 224u8, 188u8, 195u8, + 27u8, 25u8, 176u8, 117u8, 119u8, 180u8, 233u8, 235u8, 128u8, 154u8, 146u8, 171u8, 62u8, + 0u8, 58u8, 122u8, 76u8, 113u8, 113u8, 23u8, 15u8, 159u8, 50u8, 98u8, 80u8, 55u8, 124u8, + 252u8, 97u8, 242u8, 138u8, 19u8, ], vk_gamme_g2: [ - 38u8, 161u8, 72u8, 192u8, 169u8, 222u8, 88u8, 198u8, 197u8, 90u8, 130u8, 125u8, 107u8, - 101u8, 85u8, 117u8, 88u8, 63u8, 141u8, 103u8, 73u8, 208u8, 160u8, 129u8, 172u8, 67u8, 93u8, - 146u8, 130u8, 109u8, 16u8, 98u8, 22u8, 193u8, 75u8, 229u8, 89u8, 22u8, 247u8, 64u8, 236u8, - 7u8, 201u8, 210u8, 228u8, 163u8, 1u8, 182u8, 26u8, 1u8, 23u8, 192u8, 145u8, 171u8, 13u8, - 170u8, 100u8, 232u8, 41u8, 219u8, 97u8, 110u8, 157u8, 153u8, 29u8, 213u8, 138u8, 28u8, - 13u8, 255u8, 105u8, 173u8, 173u8, 2u8, 98u8, 64u8, 160u8, 183u8, 26u8, 116u8, 141u8, 139u8, - 21u8, 158u8, 124u8, 145u8, 234u8, 209u8, 250u8, 212u8, 32u8, 89u8, 115u8, 17u8, 23u8, - 136u8, 11u8, 109u8, 175u8, 207u8, 73u8, 0u8, 216u8, 224u8, 200u8, 60u8, 129u8, 70u8, 222u8, - 156u8, 73u8, 197u8, 58u8, 113u8, 94u8, 62u8, 214u8, 204u8, 93u8, 93u8, 175u8, 30u8, 139u8, - 146u8, 73u8, 29u8, 255u8, 238u8, + 39u8, 67u8, 157u8, 10u8, 195u8, 13u8, 116u8, 189u8, 11u8, 210u8, 85u8, 91u8, 10u8, 252u8, + 133u8, 115u8, 172u8, 148u8, 243u8, 233u8, 147u8, 48u8, 156u8, 248u8, 234u8, 233u8, 94u8, + 250u8, 131u8, 27u8, 117u8, 195u8, 5u8, 65u8, 6u8, 173u8, 92u8, 45u8, 182u8, 80u8, 208u8, + 37u8, 69u8, 253u8, 23u8, 45u8, 141u8, 138u8, 212u8, 122u8, 6u8, 249u8, 129u8, 219u8, 157u8, + 101u8, 173u8, 126u8, 200u8, 210u8, 165u8, 250u8, 229u8, 118u8, 46u8, 223u8, 88u8, 84u8, + 79u8, 180u8, 255u8, 131u8, 148u8, 69u8, 79u8, 44u8, 183u8, 156u8, 139u8, 46u8, 122u8, 50u8, + 168u8, 102u8, 130u8, 169u8, 252u8, 104u8, 31u8, 254u8, 49u8, 130u8, 121u8, 233u8, 193u8, + 132u8, 44u8, 228u8, 134u8, 66u8, 170u8, 54u8, 119u8, 173u8, 208u8, 60u8, 118u8, 80u8, 55u8, + 118u8, 3u8, 251u8, 252u8, 63u8, 74u8, 231u8, 2u8, 126u8, 47u8, 194u8, 210u8, 182u8, 87u8, + 108u8, 240u8, 28u8, 101u8, 178u8, ], vk_delta_g2: [ - 1u8, 124u8, 99u8, 142u8, 59u8, 163u8, 116u8, 143u8, 105u8, 91u8, 173u8, 249u8, 67u8, 47u8, - 207u8, 192u8, 127u8, 203u8, 98u8, 174u8, 81u8, 95u8, 124u8, 42u8, 9u8, 128u8, 126u8, 91u8, - 71u8, 225u8, 251u8, 43u8, 3u8, 179u8, 50u8, 103u8, 120u8, 205u8, 43u8, 8u8, 64u8, 250u8, - 226u8, 244u8, 147u8, 204u8, 185u8, 7u8, 177u8, 248u8, 156u8, 142u8, 43u8, 217u8, 28u8, - 199u8, 251u8, 187u8, 15u8, 90u8, 246u8, 246u8, 245u8, 249u8, 9u8, 102u8, 215u8, 173u8, - 148u8, 154u8, 119u8, 252u8, 160u8, 205u8, 55u8, 41u8, 71u8, 156u8, 83u8, 83u8, 122u8, - 217u8, 20u8, 77u8, 70u8, 48u8, 35u8, 210u8, 21u8, 72u8, 97u8, 46u8, 14u8, 142u8, 207u8, - 150u8, 35u8, 205u8, 140u8, 3u8, 109u8, 44u8, 80u8, 5u8, 34u8, 14u8, 196u8, 124u8, 70u8, - 79u8, 87u8, 46u8, 222u8, 137u8, 66u8, 73u8, 198u8, 121u8, 149u8, 86u8, 163u8, 45u8, 195u8, - 243u8, 56u8, 15u8, 203u8, 76u8, + 23u8, 179u8, 120u8, 56u8, 64u8, 52u8, 68u8, 120u8, 74u8, 114u8, 127u8, 238u8, 80u8, 193u8, + 247u8, 55u8, 41u8, 215u8, 231u8, 182u8, 99u8, 224u8, 100u8, 37u8, 115u8, 163u8, 250u8, + 231u8, 83u8, 154u8, 118u8, 8u8, 17u8, 70u8, 147u8, 167u8, 217u8, 157u8, 153u8, 32u8, 201u8, + 93u8, 40u8, 142u8, 64u8, 181u8, 19u8, 228u8, 237u8, 49u8, 113u8, 155u8, 184u8, 40u8, 188u8, + 45u8, 51u8, 226u8, 144u8, 111u8, 150u8, 209u8, 236u8, 67u8, 13u8, 245u8, 39u8, 179u8, + 138u8, 8u8, 207u8, 93u8, 100u8, 252u8, 231u8, 25u8, 185u8, 14u8, 121u8, 89u8, 211u8, 137u8, + 206u8, 197u8, 132u8, 113u8, 148u8, 255u8, 184u8, 40u8, 53u8, 217u8, 161u8, 190u8, 4u8, + 43u8, 21u8, 89u8, 20u8, 21u8, 113u8, 63u8, 71u8, 207u8, 115u8, 40u8, 132u8, 78u8, 219u8, + 176u8, 107u8, 33u8, 138u8, 225u8, 237u8, 201u8, 193u8, 57u8, 125u8, 240u8, 100u8, 70u8, + 151u8, 126u8, 117u8, 104u8, 202u8, 67u8, ], vk_ic: &[ [ - 7u8, 29u8, 93u8, 17u8, 135u8, 244u8, 182u8, 209u8, 186u8, 212u8, 82u8, 98u8, 118u8, - 193u8, 42u8, 191u8, 224u8, 167u8, 84u8, 91u8, 128u8, 156u8, 177u8, 254u8, 92u8, 57u8, - 89u8, 71u8, 164u8, 85u8, 3u8, 146u8, 25u8, 5u8, 123u8, 225u8, 180u8, 156u8, 19u8, 49u8, - 142u8, 173u8, 76u8, 0u8, 79u8, 176u8, 237u8, 169u8, 125u8, 42u8, 164u8, 243u8, 210u8, - 230u8, 130u8, 225u8, 208u8, 215u8, 13u8, 174u8, 246u8, 232u8, 183u8, 136u8, + 21u8, 169u8, 211u8, 72u8, 87u8, 209u8, 174u8, 42u8, 111u8, 134u8, 109u8, 195u8, 96u8, + 216u8, 71u8, 8u8, 38u8, 15u8, 164u8, 41u8, 251u8, 66u8, 29u8, 187u8, 46u8, 60u8, 172u8, + 176u8, 68u8, 150u8, 206u8, 240u8, 28u8, 231u8, 167u8, 2u8, 142u8, 241u8, 112u8, 154u8, + 175u8, 84u8, 42u8, 133u8, 253u8, 0u8, 26u8, 123u8, 70u8, 149u8, 241u8, 88u8, 237u8, + 180u8, 55u8, 73u8, 195u8, 82u8, 183u8, 159u8, 179u8, 208u8, 170u8, 196u8, ], [ - 23u8, 101u8, 44u8, 1u8, 51u8, 41u8, 101u8, 104u8, 207u8, 190u8, 163u8, 117u8, 245u8, - 47u8, 194u8, 174u8, 99u8, 163u8, 208u8, 225u8, 29u8, 72u8, 62u8, 179u8, 162u8, 200u8, - 93u8, 177u8, 69u8, 57u8, 9u8, 72u8, 0u8, 244u8, 50u8, 76u8, 90u8, 243u8, 109u8, 140u8, - 41u8, 66u8, 40u8, 115u8, 179u8, 184u8, 203u8, 218u8, 208u8, 63u8, 177u8, 131u8, 219u8, - 23u8, 199u8, 121u8, 54u8, 247u8, 113u8, 46u8, 1u8, 100u8, 28u8, 77u8, + 37u8, 39u8, 182u8, 15u8, 129u8, 88u8, 168u8, 55u8, 150u8, 224u8, 72u8, 72u8, 202u8, + 56u8, 73u8, 100u8, 180u8, 226u8, 240u8, 99u8, 121u8, 146u8, 18u8, 21u8, 117u8, 71u8, + 61u8, 238u8, 123u8, 58u8, 112u8, 103u8, 8u8, 146u8, 53u8, 127u8, 37u8, 228u8, 35u8, + 113u8, 190u8, 207u8, 155u8, 132u8, 200u8, 253u8, 124u8, 28u8, 166u8, 24u8, 202u8, + 159u8, 194u8, 93u8, 160u8, 241u8, 241u8, 149u8, 220u8, 66u8, 180u8, 239u8, 23u8, 192u8, ], [ - 40u8, 130u8, 215u8, 53u8, 21u8, 19u8, 80u8, 166u8, 11u8, 118u8, 41u8, 176u8, 183u8, - 103u8, 246u8, 94u8, 202u8, 247u8, 76u8, 72u8, 247u8, 157u8, 81u8, 135u8, 197u8, 53u8, - 234u8, 245u8, 112u8, 84u8, 131u8, 41u8, 27u8, 124u8, 123u8, 60u8, 193u8, 194u8, 163u8, - 120u8, 32u8, 173u8, 112u8, 252u8, 74u8, 34u8, 47u8, 145u8, 152u8, 40u8, 121u8, 207u8, - 233u8, 16u8, 65u8, 65u8, 47u8, 49u8, 249u8, 226u8, 41u8, 254u8, 103u8, 23u8, + 43u8, 32u8, 21u8, 252u8, 142u8, 115u8, 100u8, 81u8, 219u8, 155u8, 238u8, 143u8, 158u8, + 95u8, 205u8, 194u8, 1u8, 135u8, 98u8, 108u8, 108u8, 87u8, 21u8, 135u8, 71u8, 166u8, + 115u8, 156u8, 208u8, 137u8, 21u8, 20u8, 25u8, 209u8, 132u8, 31u8, 96u8, 167u8, 99u8, + 210u8, 187u8, 45u8, 246u8, 66u8, 26u8, 17u8, 217u8, 34u8, 69u8, 111u8, 64u8, 149u8, + 217u8, 6u8, 239u8, 50u8, 31u8, 254u8, 198u8, 135u8, 97u8, 172u8, 167u8, 72u8, ], [ - 39u8, 199u8, 207u8, 23u8, 67u8, 214u8, 132u8, 7u8, 7u8, 218u8, 218u8, 75u8, 175u8, - 217u8, 160u8, 4u8, 137u8, 231u8, 152u8, 65u8, 69u8, 218u8, 156u8, 53u8, 84u8, 108u8, - 24u8, 234u8, 6u8, 154u8, 232u8, 188u8, 1u8, 237u8, 221u8, 4u8, 103u8, 27u8, 62u8, - 215u8, 244u8, 117u8, 167u8, 234u8, 111u8, 161u8, 233u8, 172u8, 124u8, 211u8, 159u8, - 110u8, 182u8, 53u8, 158u8, 36u8, 161u8, 196u8, 48u8, 142u8, 211u8, 122u8, 101u8, 28u8, + 16u8, 168u8, 170u8, 108u8, 24u8, 69u8, 217u8, 4u8, 58u8, 151u8, 29u8, 241u8, 18u8, + 101u8, 244u8, 182u8, 31u8, 31u8, 167u8, 55u8, 177u8, 98u8, 9u8, 72u8, 37u8, 63u8, + 171u8, 14u8, 168u8, 31u8, 90u8, 131u8, 28u8, 232u8, 152u8, 127u8, 200u8, 231u8, 159u8, + 138u8, 96u8, 141u8, 17u8, 210u8, 40u8, 112u8, 1u8, 210u8, 44u8, 68u8, 215u8, 174u8, + 97u8, 29u8, 5u8, 34u8, 84u8, 51u8, 181u8, 40u8, 135u8, 93u8, 18u8, 55u8, ], [ - 22u8, 63u8, 235u8, 232u8, 142u8, 246u8, 77u8, 139u8, 130u8, 87u8, 246u8, 2u8, 240u8, - 105u8, 3u8, 149u8, 75u8, 225u8, 51u8, 180u8, 36u8, 121u8, 64u8, 109u8, 131u8, 4u8, - 107u8, 42u8, 141u8, 105u8, 12u8, 12u8, 6u8, 115u8, 194u8, 253u8, 127u8, 121u8, 25u8, - 215u8, 141u8, 196u8, 125u8, 14u8, 132u8, 93u8, 161u8, 34u8, 178u8, 215u8, 155u8, 75u8, - 207u8, 129u8, 233u8, 254u8, 137u8, 51u8, 72u8, 243u8, 239u8, 167u8, 200u8, 223u8, + 9u8, 246u8, 29u8, 128u8, 209u8, 146u8, 97u8, 111u8, 230u8, 144u8, 173u8, 28u8, 58u8, + 36u8, 192u8, 48u8, 173u8, 60u8, 144u8, 217u8, 7u8, 224u8, 185u8, 80u8, 217u8, 30u8, + 81u8, 106u8, 145u8, 140u8, 187u8, 188u8, 29u8, 44u8, 175u8, 10u8, 113u8, 149u8, 1u8, + 198u8, 106u8, 77u8, 39u8, 101u8, 165u8, 123u8, 2u8, 120u8, 90u8, 230u8, 218u8, 152u8, + 129u8, 36u8, 247u8, 239u8, 30u8, 221u8, 225u8, 18u8, 18u8, 161u8, 214u8, 156u8, ], [ - 43u8, 8u8, 2u8, 213u8, 164u8, 162u8, 133u8, 29u8, 150u8, 229u8, 231u8, 226u8, 206u8, - 206u8, 113u8, 83u8, 32u8, 221u8, 204u8, 23u8, 191u8, 91u8, 129u8, 194u8, 192u8, 132u8, - 77u8, 59u8, 65u8, 119u8, 254u8, 239u8, 6u8, 23u8, 152u8, 135u8, 49u8, 153u8, 114u8, - 54u8, 17u8, 157u8, 150u8, 162u8, 138u8, 61u8, 107u8, 150u8, 166u8, 113u8, 100u8, 204u8, - 13u8, 78u8, 187u8, 161u8, 176u8, 53u8, 143u8, 3u8, 2u8, 74u8, 206u8, 240u8, + 1u8, 166u8, 6u8, 234u8, 182u8, 158u8, 91u8, 174u8, 209u8, 180u8, 107u8, 69u8, 158u8, + 94u8, 15u8, 75u8, 101u8, 243u8, 120u8, 123u8, 11u8, 169u8, 1u8, 86u8, 187u8, 11u8, + 48u8, 228u8, 59u8, 226u8, 107u8, 172u8, 6u8, 236u8, 30u8, 225u8, 197u8, 3u8, 145u8, + 218u8, 190u8, 65u8, 231u8, 61u8, 129u8, 89u8, 123u8, 134u8, 88u8, 244u8, 117u8, 197u8, + 140u8, 141u8, 247u8, 89u8, 90u8, 231u8, 182u8, 176u8, 142u8, 161u8, 39u8, 174u8, ], [ - 48u8, 55u8, 159u8, 177u8, 220u8, 108u8, 20u8, 5u8, 0u8, 219u8, 18u8, 80u8, 49u8, 170u8, - 110u8, 110u8, 127u8, 207u8, 126u8, 227u8, 201u8, 53u8, 105u8, 226u8, 187u8, 31u8, - 124u8, 121u8, 125u8, 82u8, 214u8, 50u8, 5u8, 212u8, 59u8, 17u8, 112u8, 109u8, 49u8, - 152u8, 173u8, 56u8, 57u8, 150u8, 230u8, 245u8, 58u8, 201u8, 89u8, 92u8, 208u8, 17u8, - 57u8, 115u8, 115u8, 131u8, 204u8, 1u8, 238u8, 205u8, 204u8, 6u8, 180u8, 110u8, + 27u8, 239u8, 180u8, 134u8, 88u8, 47u8, 240u8, 173u8, 43u8, 106u8, 28u8, 76u8, 11u8, + 188u8, 112u8, 110u8, 224u8, 47u8, 210u8, 136u8, 150u8, 25u8, 221u8, 141u8, 82u8, 8u8, + 218u8, 96u8, 114u8, 96u8, 196u8, 213u8, 31u8, 239u8, 157u8, 247u8, 71u8, 81u8, 65u8, + 241u8, 133u8, 34u8, 228u8, 148u8, 178u8, 140u8, 167u8, 247u8, 224u8, 128u8, 252u8, + 108u8, 245u8, 37u8, 135u8, 159u8, 121u8, 159u8, 131u8, 24u8, 105u8, 252u8, 186u8, + 116u8, ], ], }; diff --git a/programs/compressed-pda/src/verifying_keys/inclusion_26_4.rs b/programs/compressed-pda/src/verifying_keys/inclusion_26_4.rs index b304545ffc..5b79c7fa72 100644 --- a/programs/compressed-pda/src/verifying_keys/inclusion_26_4.rs +++ b/programs/compressed-pda/src/verifying_keys/inclusion_26_4.rs @@ -4,113 +4,111 @@ use groth16_solana::groth16::Groth16Verifyingkey; pub const VERIFYINGKEY: Groth16Verifyingkey = Groth16Verifyingkey { nr_pubinputs: 8usize, vk_alpha_g1: [ - 26u8, 131u8, 169u8, 184u8, 86u8, 199u8, 75u8, 163u8, 60u8, 227u8, 43u8, 74u8, 80u8, 53u8, - 242u8, 250u8, 44u8, 106u8, 244u8, 109u8, 90u8, 130u8, 58u8, 75u8, 30u8, 108u8, 245u8, - 124u8, 119u8, 18u8, 248u8, 159u8, 6u8, 44u8, 122u8, 240u8, 18u8, 168u8, 208u8, 239u8, - 239u8, 21u8, 58u8, 73u8, 121u8, 96u8, 71u8, 248u8, 118u8, 64u8, 23u8, 211u8, 167u8, 121u8, - 165u8, 187u8, 224u8, 99u8, 90u8, 44u8, 162u8, 160u8, 164u8, 60u8, + 30u8, 178u8, 38u8, 130u8, 243u8, 194u8, 201u8, 75u8, 129u8, 107u8, 184u8, 145u8, 159u8, + 168u8, 34u8, 219u8, 141u8, 155u8, 213u8, 59u8, 95u8, 163u8, 231u8, 243u8, 31u8, 13u8, 26u8, + 171u8, 88u8, 176u8, 40u8, 135u8, 12u8, 213u8, 89u8, 186u8, 123u8, 54u8, 37u8, 67u8, 72u8, + 192u8, 148u8, 56u8, 184u8, 218u8, 99u8, 22u8, 207u8, 182u8, 21u8, 42u8, 220u8, 81u8, 193u8, + 101u8, 23u8, 140u8, 109u8, 119u8, 31u8, 203u8, 163u8, 78u8, ], vk_beta_g2: [ - 24u8, 92u8, 214u8, 27u8, 197u8, 48u8, 78u8, 93u8, 188u8, 153u8, 218u8, 103u8, 220u8, 113u8, - 105u8, 128u8, 207u8, 141u8, 176u8, 14u8, 194u8, 134u8, 120u8, 154u8, 123u8, 1u8, 16u8, - 77u8, 251u8, 39u8, 249u8, 170u8, 30u8, 104u8, 36u8, 32u8, 167u8, 191u8, 79u8, 60u8, 229u8, - 170u8, 201u8, 36u8, 139u8, 0u8, 65u8, 234u8, 152u8, 83u8, 28u8, 37u8, 211u8, 9u8, 180u8, - 69u8, 247u8, 135u8, 238u8, 123u8, 221u8, 234u8, 146u8, 120u8, 28u8, 54u8, 225u8, 31u8, - 223u8, 61u8, 145u8, 167u8, 105u8, 137u8, 252u8, 68u8, 81u8, 231u8, 101u8, 61u8, 168u8, - 55u8, 26u8, 151u8, 211u8, 240u8, 25u8, 49u8, 29u8, 121u8, 84u8, 254u8, 17u8, 146u8, 43u8, - 169u8, 47u8, 163u8, 204u8, 181u8, 143u8, 136u8, 245u8, 237u8, 139u8, 10u8, 57u8, 230u8, - 41u8, 252u8, 173u8, 25u8, 85u8, 32u8, 141u8, 209u8, 157u8, 232u8, 108u8, 221u8, 85u8, - 134u8, 27u8, 195u8, 241u8, 15u8, 123u8, 192u8, + 45u8, 10u8, 139u8, 173u8, 101u8, 29u8, 43u8, 208u8, 190u8, 20u8, 59u8, 143u8, 38u8, 64u8, + 254u8, 33u8, 104u8, 197u8, 219u8, 81u8, 176u8, 29u8, 189u8, 253u8, 178u8, 159u8, 111u8, + 198u8, 226u8, 137u8, 35u8, 50u8, 9u8, 35u8, 254u8, 202u8, 187u8, 110u8, 178u8, 171u8, + 235u8, 236u8, 93u8, 222u8, 108u8, 225u8, 249u8, 14u8, 175u8, 34u8, 224u8, 124u8, 32u8, 4u8, + 123u8, 87u8, 147u8, 20u8, 136u8, 48u8, 98u8, 167u8, 42u8, 229u8, 1u8, 143u8, 93u8, 186u8, + 20u8, 190u8, 40u8, 136u8, 68u8, 174u8, 109u8, 247u8, 233u8, 199u8, 148u8, 209u8, 197u8, + 155u8, 235u8, 64u8, 157u8, 11u8, 131u8, 138u8, 194u8, 238u8, 141u8, 191u8, 28u8, 98u8, + 184u8, 165u8, 23u8, 36u8, 222u8, 28u8, 75u8, 174u8, 48u8, 60u8, 185u8, 175u8, 172u8, 189u8, + 223u8, 123u8, 65u8, 241u8, 151u8, 162u8, 30u8, 0u8, 172u8, 71u8, 114u8, 166u8, 94u8, 188u8, + 234u8, 83u8, 251u8, 139u8, 131u8, 91u8, ], vk_gamme_g2: [ - 33u8, 93u8, 223u8, 115u8, 223u8, 126u8, 191u8, 196u8, 224u8, 187u8, 216u8, 114u8, 198u8, - 122u8, 143u8, 179u8, 143u8, 69u8, 108u8, 39u8, 117u8, 8u8, 211u8, 247u8, 158u8, 191u8, - 120u8, 68u8, 182u8, 165u8, 81u8, 251u8, 31u8, 57u8, 62u8, 241u8, 174u8, 118u8, 248u8, 32u8, - 160u8, 119u8, 26u8, 4u8, 39u8, 124u8, 224u8, 5u8, 7u8, 33u8, 150u8, 80u8, 235u8, 27u8, - 83u8, 20u8, 68u8, 26u8, 180u8, 219u8, 108u8, 60u8, 231u8, 193u8, 43u8, 18u8, 27u8, 185u8, - 123u8, 217u8, 210u8, 39u8, 232u8, 32u8, 242u8, 86u8, 231u8, 240u8, 40u8, 220u8, 74u8, - 178u8, 217u8, 4u8, 89u8, 244u8, 246u8, 190u8, 51u8, 227u8, 91u8, 151u8, 126u8, 93u8, 137u8, - 247u8, 32u8, 96u8, 225u8, 106u8, 98u8, 106u8, 146u8, 136u8, 170u8, 32u8, 2u8, 38u8, 3u8, - 14u8, 140u8, 184u8, 68u8, 0u8, 244u8, 207u8, 215u8, 170u8, 50u8, 131u8, 113u8, 124u8, - 237u8, 84u8, 240u8, 80u8, 69u8, 188u8, + 45u8, 232u8, 81u8, 80u8, 208u8, 207u8, 145u8, 213u8, 167u8, 81u8, 29u8, 29u8, 17u8, 17u8, + 201u8, 29u8, 224u8, 156u8, 56u8, 130u8, 99u8, 234u8, 65u8, 223u8, 189u8, 100u8, 222u8, + 106u8, 72u8, 23u8, 39u8, 9u8, 16u8, 62u8, 85u8, 28u8, 172u8, 166u8, 71u8, 9u8, 36u8, 254u8, + 178u8, 6u8, 104u8, 70u8, 87u8, 160u8, 223u8, 124u8, 58u8, 162u8, 21u8, 52u8, 244u8, 65u8, + 6u8, 136u8, 149u8, 90u8, 148u8, 128u8, 44u8, 28u8, 32u8, 220u8, 222u8, 129u8, 219u8, 114u8, + 23u8, 37u8, 42u8, 175u8, 228u8, 38u8, 86u8, 57u8, 73u8, 15u8, 63u8, 97u8, 244u8, 21u8, + 35u8, 128u8, 252u8, 21u8, 187u8, 149u8, 36u8, 239u8, 250u8, 96u8, 91u8, 222u8, 40u8, 97u8, + 57u8, 126u8, 7u8, 86u8, 227u8, 174u8, 254u8, 246u8, 208u8, 84u8, 193u8, 139u8, 149u8, + 155u8, 72u8, 210u8, 9u8, 64u8, 32u8, 38u8, 119u8, 147u8, 194u8, 130u8, 62u8, 54u8, 158u8, + 122u8, 81u8, 24u8, ], vk_delta_g2: [ - 45u8, 78u8, 74u8, 91u8, 179u8, 57u8, 14u8, 181u8, 220u8, 38u8, 171u8, 68u8, 22u8, 110u8, - 154u8, 5u8, 189u8, 151u8, 6u8, 110u8, 3u8, 26u8, 212u8, 26u8, 164u8, 69u8, 197u8, 111u8, - 182u8, 38u8, 122u8, 22u8, 2u8, 52u8, 116u8, 163u8, 88u8, 94u8, 211u8, 22u8, 93u8, 52u8, - 252u8, 126u8, 223u8, 15u8, 248u8, 55u8, 146u8, 165u8, 224u8, 58u8, 84u8, 185u8, 193u8, - 229u8, 175u8, 135u8, 3u8, 130u8, 94u8, 235u8, 192u8, 207u8, 33u8, 46u8, 78u8, 216u8, 220u8, - 155u8, 248u8, 50u8, 88u8, 29u8, 140u8, 244u8, 84u8, 92u8, 78u8, 165u8, 24u8, 33u8, 168u8, - 94u8, 221u8, 123u8, 113u8, 127u8, 149u8, 26u8, 185u8, 21u8, 5u8, 235u8, 114u8, 24u8, 35u8, - 190u8, 214u8, 57u8, 16u8, 142u8, 144u8, 90u8, 210u8, 23u8, 152u8, 10u8, 29u8, 194u8, 249u8, - 104u8, 48u8, 247u8, 215u8, 207u8, 50u8, 137u8, 249u8, 166u8, 85u8, 127u8, 191u8, 141u8, - 126u8, 41u8, 197u8, 76u8, + 10u8, 9u8, 46u8, 182u8, 149u8, 152u8, 123u8, 17u8, 142u8, 143u8, 130u8, 117u8, 39u8, 150u8, + 106u8, 214u8, 37u8, 166u8, 22u8, 127u8, 203u8, 85u8, 28u8, 221u8, 6u8, 116u8, 33u8, 239u8, + 147u8, 78u8, 78u8, 87u8, 16u8, 216u8, 194u8, 121u8, 90u8, 156u8, 196u8, 11u8, 169u8, 54u8, + 100u8, 39u8, 22u8, 52u8, 46u8, 234u8, 65u8, 246u8, 128u8, 84u8, 188u8, 153u8, 158u8, 252u8, + 74u8, 0u8, 162u8, 74u8, 200u8, 137u8, 109u8, 233u8, 38u8, 200u8, 143u8, 180u8, 196u8, + 213u8, 227u8, 82u8, 43u8, 197u8, 162u8, 77u8, 30u8, 185u8, 118u8, 42u8, 251u8, 101u8, + 134u8, 45u8, 171u8, 177u8, 120u8, 98u8, 196u8, 185u8, 208u8, 93u8, 107u8, 218u8, 1u8, 1u8, + 34u8, 50u8, 202u8, 72u8, 64u8, 36u8, 103u8, 1u8, 93u8, 188u8, 131u8, 141u8, 237u8, 140u8, + 10u8, 230u8, 167u8, 250u8, 132u8, 40u8, 237u8, 99u8, 17u8, 96u8, 78u8, 136u8, 80u8, 141u8, + 27u8, 52u8, 117u8, 112u8, ], vk_ic: &[ [ - 34u8, 154u8, 197u8, 61u8, 253u8, 170u8, 81u8, 115u8, 18u8, 167u8, 68u8, 146u8, 152u8, - 151u8, 216u8, 202u8, 192u8, 141u8, 125u8, 83u8, 155u8, 32u8, 163u8, 127u8, 221u8, - 204u8, 204u8, 205u8, 150u8, 7u8, 237u8, 124u8, 35u8, 242u8, 136u8, 240u8, 161u8, 14u8, - 80u8, 7u8, 35u8, 18u8, 114u8, 10u8, 141u8, 219u8, 65u8, 120u8, 15u8, 89u8, 132u8, - 234u8, 217u8, 125u8, 150u8, 154u8, 109u8, 71u8, 82u8, 230u8, 203u8, 168u8, 219u8, - 217u8, + 34u8, 40u8, 229u8, 133u8, 82u8, 28u8, 41u8, 26u8, 169u8, 226u8, 122u8, 53u8, 41u8, + 58u8, 129u8, 152u8, 13u8, 22u8, 191u8, 31u8, 248u8, 234u8, 203u8, 73u8, 110u8, 149u8, + 66u8, 240u8, 148u8, 84u8, 217u8, 72u8, 22u8, 238u8, 58u8, 149u8, 33u8, 237u8, 203u8, + 118u8, 14u8, 196u8, 96u8, 212u8, 140u8, 184u8, 6u8, 234u8, 103u8, 195u8, 61u8, 88u8, + 37u8, 126u8, 92u8, 250u8, 234u8, 14u8, 79u8, 67u8, 159u8, 111u8, 225u8, 112u8, ], [ - 26u8, 241u8, 27u8, 80u8, 53u8, 198u8, 227u8, 208u8, 171u8, 78u8, 52u8, 109u8, 179u8, - 31u8, 53u8, 45u8, 158u8, 215u8, 170u8, 92u8, 137u8, 38u8, 127u8, 165u8, 131u8, 0u8, - 237u8, 13u8, 11u8, 120u8, 32u8, 62u8, 24u8, 190u8, 123u8, 65u8, 68u8, 177u8, 43u8, - 252u8, 144u8, 177u8, 246u8, 10u8, 181u8, 152u8, 119u8, 29u8, 198u8, 68u8, 233u8, 210u8, - 38u8, 217u8, 108u8, 127u8, 194u8, 218u8, 85u8, 32u8, 20u8, 159u8, 225u8, 200u8, + 41u8, 27u8, 238u8, 182u8, 28u8, 146u8, 194u8, 36u8, 226u8, 56u8, 156u8, 190u8, 79u8, + 146u8, 124u8, 248u8, 142u8, 16u8, 174u8, 235u8, 35u8, 202u8, 73u8, 219u8, 56u8, 56u8, + 117u8, 193u8, 117u8, 174u8, 179u8, 16u8, 38u8, 185u8, 93u8, 51u8, 17u8, 137u8, 137u8, + 178u8, 107u8, 140u8, 209u8, 119u8, 184u8, 206u8, 191u8, 224u8, 16u8, 51u8, 10u8, 142u8, + 176u8, 115u8, 8u8, 227u8, 48u8, 50u8, 239u8, 3u8, 72u8, 129u8, 114u8, 123u8, ], [ - 13u8, 230u8, 158u8, 214u8, 38u8, 220u8, 108u8, 64u8, 248u8, 231u8, 236u8, 36u8, 212u8, - 229u8, 77u8, 76u8, 79u8, 66u8, 197u8, 124u8, 3u8, 247u8, 223u8, 137u8, 204u8, 247u8, - 69u8, 129u8, 24u8, 195u8, 69u8, 209u8, 30u8, 112u8, 190u8, 216u8, 233u8, 111u8, 136u8, - 12u8, 25u8, 239u8, 140u8, 64u8, 85u8, 78u8, 80u8, 199u8, 59u8, 85u8, 109u8, 59u8, 21u8, - 53u8, 6u8, 133u8, 130u8, 64u8, 173u8, 38u8, 123u8, 59u8, 53u8, 137u8, + 16u8, 82u8, 15u8, 220u8, 235u8, 15u8, 216u8, 73u8, 154u8, 193u8, 54u8, 198u8, 220u8, + 124u8, 127u8, 204u8, 142u8, 195u8, 41u8, 117u8, 197u8, 206u8, 189u8, 20u8, 253u8, + 211u8, 57u8, 126u8, 195u8, 221u8, 240u8, 80u8, 16u8, 39u8, 106u8, 72u8, 22u8, 138u8, + 57u8, 229u8, 188u8, 39u8, 191u8, 42u8, 117u8, 36u8, 157u8, 246u8, 10u8, 28u8, 93u8, + 23u8, 157u8, 122u8, 235u8, 72u8, 180u8, 87u8, 34u8, 219u8, 217u8, 30u8, 192u8, 46u8, ], [ - 36u8, 176u8, 254u8, 64u8, 167u8, 141u8, 117u8, 194u8, 104u8, 186u8, 53u8, 60u8, 148u8, - 157u8, 38u8, 181u8, 208u8, 18u8, 35u8, 197u8, 38u8, 116u8, 179u8, 199u8, 211u8, 145u8, - 98u8, 216u8, 124u8, 109u8, 231u8, 222u8, 16u8, 210u8, 188u8, 127u8, 129u8, 42u8, 164u8, - 2u8, 68u8, 236u8, 243u8, 183u8, 186u8, 75u8, 15u8, 173u8, 182u8, 11u8, 211u8, 165u8, - 24u8, 39u8, 200u8, 183u8, 214u8, 225u8, 111u8, 106u8, 103u8, 189u8, 172u8, 38u8, + 10u8, 201u8, 135u8, 151u8, 152u8, 201u8, 120u8, 132u8, 247u8, 45u8, 78u8, 218u8, 38u8, + 85u8, 80u8, 175u8, 164u8, 127u8, 23u8, 254u8, 46u8, 212u8, 128u8, 173u8, 22u8, 169u8, + 108u8, 94u8, 241u8, 197u8, 249u8, 57u8, 32u8, 204u8, 9u8, 251u8, 38u8, 153u8, 37u8, + 175u8, 162u8, 165u8, 231u8, 146u8, 162u8, 223u8, 228u8, 33u8, 96u8, 184u8, 249u8, 80u8, + 191u8, 150u8, 216u8, 230u8, 52u8, 217u8, 120u8, 180u8, 71u8, 186u8, 64u8, 58u8, ], [ - 10u8, 248u8, 186u8, 186u8, 136u8, 12u8, 34u8, 19u8, 224u8, 168u8, 205u8, 57u8, 73u8, - 239u8, 57u8, 251u8, 134u8, 145u8, 158u8, 46u8, 227u8, 182u8, 55u8, 136u8, 132u8, 192u8, - 124u8, 29u8, 154u8, 86u8, 103u8, 161u8, 30u8, 217u8, 91u8, 247u8, 73u8, 165u8, 73u8, - 230u8, 245u8, 120u8, 33u8, 240u8, 255u8, 210u8, 248u8, 150u8, 140u8, 145u8, 113u8, - 74u8, 100u8, 30u8, 222u8, 94u8, 234u8, 246u8, 111u8, 128u8, 131u8, 8u8, 86u8, 174u8, + 18u8, 228u8, 146u8, 240u8, 122u8, 86u8, 11u8, 51u8, 235u8, 242u8, 180u8, 75u8, 106u8, + 202u8, 226u8, 4u8, 143u8, 212u8, 250u8, 204u8, 6u8, 0u8, 97u8, 177u8, 2u8, 240u8, 56u8, + 85u8, 247u8, 159u8, 97u8, 145u8, 28u8, 85u8, 198u8, 84u8, 157u8, 83u8, 205u8, 184u8, + 173u8, 79u8, 87u8, 198u8, 86u8, 79u8, 47u8, 131u8, 24u8, 99u8, 42u8, 196u8, 208u8, + 107u8, 122u8, 157u8, 3u8, 153u8, 37u8, 134u8, 227u8, 54u8, 85u8, 145u8, ], [ - 25u8, 118u8, 72u8, 220u8, 79u8, 70u8, 193u8, 216u8, 42u8, 198u8, 16u8, 18u8, 224u8, - 114u8, 84u8, 226u8, 64u8, 201u8, 226u8, 9u8, 103u8, 137u8, 21u8, 124u8, 255u8, 126u8, - 206u8, 19u8, 146u8, 192u8, 224u8, 123u8, 41u8, 40u8, 17u8, 162u8, 121u8, 251u8, 94u8, - 186u8, 116u8, 155u8, 98u8, 149u8, 175u8, 240u8, 85u8, 183u8, 233u8, 189u8, 160u8, - 160u8, 214u8, 208u8, 205u8, 10u8, 48u8, 172u8, 184u8, 34u8, 64u8, 39u8, 138u8, 102u8, + 8u8, 165u8, 16u8, 115u8, 100u8, 137u8, 66u8, 238u8, 130u8, 136u8, 41u8, 230u8, 57u8, + 180u8, 52u8, 228u8, 82u8, 49u8, 27u8, 121u8, 152u8, 57u8, 6u8, 11u8, 216u8, 242u8, + 246u8, 253u8, 195u8, 92u8, 59u8, 237u8, 15u8, 254u8, 39u8, 222u8, 137u8, 92u8, 173u8, + 168u8, 71u8, 36u8, 181u8, 165u8, 40u8, 156u8, 60u8, 15u8, 171u8, 180u8, 198u8, 36u8, + 210u8, 126u8, 2u8, 192u8, 173u8, 193u8, 9u8, 136u8, 19u8, 1u8, 173u8, 112u8, ], [ - 11u8, 11u8, 253u8, 116u8, 151u8, 212u8, 177u8, 160u8, 128u8, 203u8, 148u8, 224u8, - 110u8, 160u8, 252u8, 36u8, 112u8, 108u8, 122u8, 87u8, 63u8, 77u8, 115u8, 221u8, 69u8, - 163u8, 108u8, 189u8, 219u8, 244u8, 57u8, 140u8, 34u8, 170u8, 154u8, 169u8, 218u8, - 255u8, 110u8, 201u8, 154u8, 12u8, 106u8, 52u8, 112u8, 123u8, 236u8, 232u8, 84u8, 241u8, - 188u8, 71u8, 26u8, 150u8, 237u8, 25u8, 122u8, 234u8, 211u8, 176u8, 28u8, 128u8, 41u8, - 19u8, + 21u8, 54u8, 147u8, 5u8, 86u8, 132u8, 140u8, 200u8, 244u8, 84u8, 37u8, 212u8, 88u8, + 55u8, 221u8, 17u8, 244u8, 195u8, 86u8, 60u8, 146u8, 194u8, 18u8, 236u8, 71u8, 31u8, + 229u8, 57u8, 55u8, 84u8, 153u8, 98u8, 23u8, 85u8, 57u8, 251u8, 151u8, 104u8, 125u8, + 92u8, 88u8, 237u8, 101u8, 252u8, 164u8, 23u8, 12u8, 187u8, 30u8, 72u8, 255u8, 191u8, + 159u8, 169u8, 132u8, 239u8, 126u8, 78u8, 169u8, 200u8, 132u8, 77u8, 245u8, 58u8, ], [ - 0u8, 207u8, 43u8, 105u8, 50u8, 245u8, 90u8, 224u8, 61u8, 49u8, 113u8, 0u8, 120u8, - 186u8, 194u8, 27u8, 233u8, 185u8, 213u8, 153u8, 128u8, 252u8, 163u8, 190u8, 163u8, - 118u8, 252u8, 170u8, 10u8, 68u8, 243u8, 124u8, 28u8, 5u8, 135u8, 104u8, 79u8, 239u8, - 163u8, 121u8, 211u8, 254u8, 107u8, 62u8, 82u8, 207u8, 143u8, 94u8, 71u8, 222u8, 176u8, - 212u8, 177u8, 134u8, 202u8, 28u8, 212u8, 44u8, 177u8, 7u8, 55u8, 46u8, 152u8, 172u8, + 33u8, 74u8, 33u8, 14u8, 92u8, 1u8, 30u8, 61u8, 10u8, 72u8, 199u8, 151u8, 32u8, 197u8, + 220u8, 246u8, 213u8, 144u8, 145u8, 83u8, 68u8, 128u8, 226u8, 254u8, 86u8, 135u8, 132u8, + 78u8, 226u8, 143u8, 30u8, 68u8, 30u8, 180u8, 171u8, 78u8, 190u8, 230u8, 98u8, 125u8, + 8u8, 169u8, 143u8, 15u8, 200u8, 100u8, 72u8, 64u8, 26u8, 252u8, 233u8, 162u8, 57u8, + 129u8, 221u8, 105u8, 31u8, 194u8, 88u8, 255u8, 119u8, 221u8, 228u8, 205u8, ], [ - 22u8, 99u8, 6u8, 150u8, 96u8, 245u8, 122u8, 236u8, 191u8, 138u8, 20u8, 103u8, 144u8, - 94u8, 26u8, 101u8, 200u8, 66u8, 153u8, 141u8, 189u8, 54u8, 118u8, 123u8, 24u8, 193u8, - 150u8, 23u8, 100u8, 55u8, 169u8, 147u8, 14u8, 11u8, 35u8, 32u8, 237u8, 22u8, 216u8, - 229u8, 128u8, 24u8, 244u8, 92u8, 236u8, 7u8, 16u8, 234u8, 76u8, 86u8, 189u8, 33u8, - 153u8, 184u8, 244u8, 123u8, 45u8, 61u8, 222u8, 53u8, 153u8, 113u8, 195u8, 63u8, + 44u8, 3u8, 102u8, 151u8, 230u8, 249u8, 208u8, 139u8, 45u8, 73u8, 243u8, 54u8, 172u8, + 19u8, 222u8, 144u8, 45u8, 15u8, 8u8, 28u8, 47u8, 174u8, 155u8, 177u8, 245u8, 145u8, + 185u8, 165u8, 220u8, 157u8, 216u8, 26u8, 18u8, 139u8, 79u8, 191u8, 9u8, 172u8, 107u8, + 45u8, 226u8, 89u8, 106u8, 11u8, 166u8, 234u8, 211u8, 108u8, 255u8, 17u8, 189u8, 215u8, + 117u8, 220u8, 210u8, 139u8, 232u8, 38u8, 206u8, 191u8, 149u8, 22u8, 86u8, 250u8, ], ], }; diff --git a/programs/compressed-pda/src/verifying_keys/inclusion_26_8.rs b/programs/compressed-pda/src/verifying_keys/inclusion_26_8.rs index 857b25280f..b593c794f3 100644 --- a/programs/compressed-pda/src/verifying_keys/inclusion_26_8.rs +++ b/programs/compressed-pda/src/verifying_keys/inclusion_26_8.rs @@ -4,167 +4,167 @@ use groth16_solana::groth16::Groth16Verifyingkey; pub const VERIFYINGKEY: Groth16Verifyingkey = Groth16Verifyingkey { nr_pubinputs: 16usize, vk_alpha_g1: [ - 42u8, 134u8, 64u8, 33u8, 49u8, 37u8, 50u8, 221u8, 168u8, 20u8, 48u8, 77u8, 125u8, 232u8, - 181u8, 137u8, 122u8, 148u8, 253u8, 147u8, 60u8, 52u8, 98u8, 107u8, 234u8, 3u8, 54u8, 156u8, - 187u8, 128u8, 136u8, 130u8, 26u8, 12u8, 19u8, 113u8, 250u8, 243u8, 30u8, 170u8, 138u8, - 133u8, 0u8, 131u8, 71u8, 68u8, 103u8, 101u8, 201u8, 170u8, 172u8, 197u8, 136u8, 228u8, - 215u8, 152u8, 220u8, 21u8, 239u8, 228u8, 253u8, 241u8, 98u8, 81u8, + 17u8, 191u8, 151u8, 126u8, 203u8, 142u8, 128u8, 97u8, 101u8, 74u8, 107u8, 7u8, 196u8, + 169u8, 93u8, 238u8, 16u8, 234u8, 209u8, 120u8, 179u8, 241u8, 95u8, 16u8, 94u8, 40u8, 167u8, + 164u8, 148u8, 230u8, 233u8, 5u8, 36u8, 74u8, 222u8, 251u8, 119u8, 25u8, 123u8, 179u8, + 187u8, 163u8, 227u8, 91u8, 227u8, 95u8, 13u8, 35u8, 130u8, 206u8, 17u8, 211u8, 107u8, 98u8, + 43u8, 28u8, 92u8, 5u8, 167u8, 95u8, 159u8, 48u8, 128u8, 59u8, ], vk_beta_g2: [ - 48u8, 62u8, 226u8, 1u8, 149u8, 131u8, 56u8, 125u8, 201u8, 180u8, 36u8, 160u8, 13u8, 93u8, - 33u8, 251u8, 100u8, 10u8, 197u8, 202u8, 100u8, 211u8, 67u8, 205u8, 35u8, 90u8, 22u8, 7u8, - 155u8, 46u8, 203u8, 105u8, 26u8, 245u8, 131u8, 68u8, 86u8, 58u8, 72u8, 69u8, 255u8, 29u8, - 150u8, 22u8, 19u8, 181u8, 102u8, 2u8, 19u8, 9u8, 130u8, 157u8, 69u8, 241u8, 143u8, 205u8, - 127u8, 216u8, 243u8, 44u8, 238u8, 36u8, 170u8, 8u8, 47u8, 153u8, 235u8, 220u8, 43u8, 72u8, - 69u8, 149u8, 31u8, 132u8, 251u8, 97u8, 190u8, 128u8, 198u8, 145u8, 93u8, 67u8, 185u8, 6u8, - 42u8, 34u8, 122u8, 113u8, 47u8, 195u8, 187u8, 191u8, 19u8, 54u8, 58u8, 105u8, 37u8, 39u8, - 89u8, 58u8, 220u8, 152u8, 196u8, 43u8, 43u8, 2u8, 242u8, 180u8, 113u8, 23u8, 119u8, 75u8, - 69u8, 130u8, 113u8, 81u8, 28u8, 242u8, 173u8, 209u8, 165u8, 25u8, 13u8, 60u8, 55u8, 105u8, - 112u8, 145u8, + 15u8, 180u8, 165u8, 158u8, 151u8, 134u8, 44u8, 28u8, 50u8, 226u8, 83u8, 110u8, 97u8, 97u8, + 241u8, 131u8, 42u8, 31u8, 46u8, 65u8, 97u8, 225u8, 139u8, 233u8, 172u8, 117u8, 174u8, + 125u8, 195u8, 63u8, 13u8, 228u8, 38u8, 154u8, 81u8, 123u8, 153u8, 55u8, 77u8, 164u8, 223u8, + 148u8, 6u8, 97u8, 144u8, 204u8, 28u8, 166u8, 247u8, 52u8, 241u8, 43u8, 90u8, 76u8, 9u8, + 243u8, 22u8, 215u8, 42u8, 219u8, 209u8, 18u8, 254u8, 185u8, 27u8, 51u8, 60u8, 35u8, 118u8, + 4u8, 54u8, 7u8, 80u8, 217u8, 14u8, 90u8, 188u8, 190u8, 133u8, 14u8, 167u8, 186u8, 158u8, + 17u8, 137u8, 9u8, 195u8, 158u8, 212u8, 26u8, 116u8, 33u8, 156u8, 195u8, 235u8, 200u8, 30u8, + 203u8, 85u8, 144u8, 121u8, 131u8, 166u8, 153u8, 8u8, 29u8, 20u8, 143u8, 215u8, 143u8, + 146u8, 9u8, 166u8, 184u8, 53u8, 50u8, 221u8, 240u8, 149u8, 9u8, 85u8, 180u8, 234u8, 191u8, + 113u8, 53u8, 56u8, 171u8, ], vk_gamme_g2: [ - 4u8, 244u8, 30u8, 68u8, 90u8, 98u8, 121u8, 73u8, 154u8, 3u8, 85u8, 83u8, 129u8, 197u8, - 149u8, 35u8, 39u8, 82u8, 180u8, 182u8, 34u8, 174u8, 87u8, 67u8, 183u8, 27u8, 247u8, 226u8, - 89u8, 132u8, 159u8, 113u8, 41u8, 232u8, 25u8, 6u8, 86u8, 197u8, 133u8, 24u8, 209u8, 6u8, - 48u8, 250u8, 95u8, 170u8, 39u8, 28u8, 5u8, 111u8, 167u8, 246u8, 105u8, 208u8, 237u8, 17u8, - 230u8, 225u8, 171u8, 1u8, 210u8, 43u8, 140u8, 186u8, 44u8, 241u8, 123u8, 46u8, 29u8, 10u8, - 154u8, 153u8, 174u8, 6u8, 111u8, 40u8, 179u8, 145u8, 106u8, 73u8, 131u8, 243u8, 200u8, - 23u8, 5u8, 84u8, 151u8, 64u8, 3u8, 218u8, 241u8, 142u8, 113u8, 117u8, 129u8, 3u8, 1u8, - 174u8, 6u8, 37u8, 10u8, 120u8, 106u8, 218u8, 217u8, 187u8, 21u8, 182u8, 170u8, 156u8, 45u8, - 236u8, 255u8, 15u8, 113u8, 238u8, 49u8, 100u8, 162u8, 44u8, 138u8, 241u8, 96u8, 164u8, - 108u8, 229u8, 149u8, 110u8, + 46u8, 55u8, 193u8, 79u8, 16u8, 82u8, 77u8, 75u8, 29u8, 33u8, 64u8, 17u8, 76u8, 180u8, 7u8, + 70u8, 210u8, 242u8, 138u8, 90u8, 11u8, 9u8, 43u8, 216u8, 114u8, 233u8, 45u8, 53u8, 146u8, + 220u8, 90u8, 180u8, 42u8, 236u8, 192u8, 252u8, 168u8, 134u8, 202u8, 179u8, 110u8, 163u8, + 27u8, 231u8, 61u8, 45u8, 95u8, 155u8, 101u8, 182u8, 253u8, 64u8, 200u8, 231u8, 145u8, 98u8, + 138u8, 122u8, 26u8, 104u8, 101u8, 13u8, 161u8, 60u8, 16u8, 239u8, 49u8, 38u8, 174u8, 220u8, + 161u8, 70u8, 242u8, 131u8, 69u8, 94u8, 7u8, 98u8, 242u8, 115u8, 100u8, 38u8, 171u8, 96u8, + 107u8, 85u8, 184u8, 145u8, 46u8, 31u8, 91u8, 95u8, 103u8, 159u8, 251u8, 200u8, 17u8, 106u8, + 224u8, 248u8, 56u8, 133u8, 5u8, 110u8, 33u8, 11u8, 21u8, 147u8, 94u8, 92u8, 116u8, 251u8, + 184u8, 103u8, 121u8, 138u8, 238u8, 72u8, 200u8, 165u8, 132u8, 0u8, 8u8, 61u8, 29u8, 34u8, + 217u8, 224u8, ], vk_delta_g2: [ - 17u8, 216u8, 150u8, 86u8, 162u8, 43u8, 252u8, 171u8, 10u8, 152u8, 22u8, 28u8, 135u8, 5u8, - 61u8, 184u8, 96u8, 180u8, 113u8, 211u8, 234u8, 63u8, 231u8, 101u8, 247u8, 250u8, 209u8, - 132u8, 189u8, 250u8, 31u8, 191u8, 37u8, 249u8, 40u8, 43u8, 14u8, 214u8, 63u8, 4u8, 25u8, - 82u8, 213u8, 80u8, 131u8, 150u8, 15u8, 195u8, 19u8, 194u8, 221u8, 102u8, 171u8, 127u8, - 142u8, 197u8, 3u8, 193u8, 174u8, 151u8, 8u8, 38u8, 149u8, 80u8, 16u8, 252u8, 245u8, 74u8, - 220u8, 65u8, 54u8, 242u8, 55u8, 166u8, 159u8, 91u8, 49u8, 28u8, 209u8, 112u8, 17u8, 221u8, - 20u8, 100u8, 223u8, 99u8, 104u8, 5u8, 236u8, 25u8, 110u8, 160u8, 29u8, 106u8, 0u8, 102u8, - 39u8, 134u8, 24u8, 185u8, 219u8, 51u8, 154u8, 132u8, 227u8, 163u8, 91u8, 182u8, 165u8, - 27u8, 150u8, 99u8, 221u8, 29u8, 85u8, 159u8, 96u8, 121u8, 31u8, 252u8, 198u8, 221u8, 180u8, - 185u8, 101u8, 238u8, 68u8, 69u8, + 28u8, 85u8, 12u8, 38u8, 137u8, 116u8, 182u8, 148u8, 210u8, 68u8, 163u8, 73u8, 132u8, 69u8, + 188u8, 173u8, 176u8, 218u8, 251u8, 253u8, 44u8, 55u8, 241u8, 47u8, 107u8, 142u8, 187u8, + 248u8, 144u8, 212u8, 76u8, 159u8, 11u8, 99u8, 31u8, 161u8, 246u8, 94u8, 165u8, 26u8, 109u8, + 241u8, 86u8, 202u8, 219u8, 78u8, 61u8, 162u8, 77u8, 44u8, 116u8, 130u8, 104u8, 226u8, 93u8, + 225u8, 37u8, 107u8, 113u8, 94u8, 51u8, 89u8, 153u8, 54u8, 4u8, 150u8, 55u8, 61u8, 99u8, + 254u8, 163u8, 17u8, 181u8, 210u8, 240u8, 123u8, 177u8, 207u8, 106u8, 172u8, 86u8, 109u8, + 83u8, 165u8, 93u8, 137u8, 46u8, 209u8, 218u8, 57u8, 151u8, 203u8, 117u8, 43u8, 125u8, + 211u8, 33u8, 108u8, 174u8, 30u8, 78u8, 102u8, 112u8, 176u8, 115u8, 176u8, 164u8, 135u8, + 164u8, 172u8, 147u8, 143u8, 155u8, 38u8, 57u8, 237u8, 98u8, 146u8, 24u8, 125u8, 37u8, 59u8, + 157u8, 136u8, 244u8, 218u8, 146u8, 194u8, ], vk_ic: &[ [ - 4u8, 100u8, 64u8, 72u8, 159u8, 133u8, 155u8, 189u8, 81u8, 171u8, 207u8, 192u8, 185u8, - 137u8, 90u8, 159u8, 165u8, 12u8, 119u8, 34u8, 237u8, 247u8, 250u8, 254u8, 91u8, 159u8, - 229u8, 120u8, 164u8, 175u8, 167u8, 34u8, 3u8, 215u8, 73u8, 23u8, 67u8, 72u8, 153u8, - 196u8, 87u8, 226u8, 45u8, 235u8, 160u8, 185u8, 175u8, 194u8, 17u8, 109u8, 118u8, 252u8, - 236u8, 189u8, 110u8, 157u8, 12u8, 8u8, 115u8, 169u8, 95u8, 179u8, 150u8, 137u8, + 47u8, 20u8, 194u8, 176u8, 120u8, 162u8, 37u8, 122u8, 65u8, 250u8, 149u8, 88u8, 223u8, + 126u8, 239u8, 31u8, 23u8, 175u8, 163u8, 224u8, 113u8, 132u8, 138u8, 16u8, 36u8, 27u8, + 82u8, 219u8, 212u8, 174u8, 190u8, 124u8, 19u8, 246u8, 4u8, 197u8, 89u8, 177u8, 231u8, + 91u8, 158u8, 73u8, 75u8, 229u8, 67u8, 138u8, 84u8, 34u8, 71u8, 245u8, 111u8, 186u8, + 183u8, 44u8, 56u8, 44u8, 231u8, 227u8, 131u8, 201u8, 103u8, 155u8, 222u8, 11u8, ], [ - 37u8, 108u8, 225u8, 253u8, 124u8, 156u8, 236u8, 69u8, 247u8, 230u8, 99u8, 70u8, 176u8, - 137u8, 177u8, 185u8, 55u8, 194u8, 215u8, 174u8, 138u8, 97u8, 40u8, 164u8, 1u8, 35u8, - 225u8, 72u8, 105u8, 149u8, 101u8, 96u8, 3u8, 107u8, 36u8, 91u8, 209u8, 103u8, 194u8, - 29u8, 89u8, 94u8, 5u8, 239u8, 252u8, 126u8, 72u8, 146u8, 71u8, 162u8, 219u8, 154u8, - 82u8, 96u8, 190u8, 176u8, 50u8, 15u8, 49u8, 250u8, 24u8, 255u8, 166u8, 175u8, + 7u8, 203u8, 90u8, 56u8, 91u8, 171u8, 238u8, 140u8, 49u8, 18u8, 74u8, 13u8, 169u8, 56u8, + 58u8, 158u8, 133u8, 70u8, 229u8, 56u8, 242u8, 44u8, 68u8, 113u8, 223u8, 24u8, 137u8, + 160u8, 37u8, 51u8, 68u8, 236u8, 26u8, 245u8, 163u8, 21u8, 179u8, 43u8, 121u8, 248u8, + 119u8, 82u8, 191u8, 50u8, 117u8, 70u8, 204u8, 13u8, 243u8, 161u8, 89u8, 36u8, 137u8, + 6u8, 21u8, 73u8, 98u8, 33u8, 11u8, 216u8, 22u8, 59u8, 206u8, 80u8, ], [ - 45u8, 8u8, 208u8, 116u8, 220u8, 167u8, 91u8, 20u8, 206u8, 210u8, 29u8, 78u8, 45u8, - 26u8, 201u8, 49u8, 26u8, 32u8, 215u8, 198u8, 185u8, 10u8, 35u8, 155u8, 139u8, 18u8, - 45u8, 240u8, 76u8, 193u8, 165u8, 20u8, 18u8, 183u8, 76u8, 7u8, 48u8, 75u8, 230u8, - 223u8, 202u8, 229u8, 230u8, 62u8, 164u8, 47u8, 239u8, 221u8, 203u8, 151u8, 129u8, - 255u8, 107u8, 194u8, 170u8, 19u8, 85u8, 68u8, 130u8, 169u8, 9u8, 40u8, 227u8, 223u8, + 7u8, 163u8, 11u8, 12u8, 166u8, 234u8, 20u8, 180u8, 164u8, 128u8, 249u8, 249u8, 206u8, + 66u8, 228u8, 215u8, 210u8, 129u8, 28u8, 15u8, 32u8, 150u8, 127u8, 209u8, 84u8, 238u8, + 207u8, 233u8, 65u8, 214u8, 138u8, 232u8, 40u8, 54u8, 60u8, 192u8, 89u8, 93u8, 223u8, + 36u8, 230u8, 207u8, 16u8, 167u8, 44u8, 99u8, 81u8, 80u8, 22u8, 17u8, 194u8, 217u8, + 233u8, 254u8, 28u8, 124u8, 253u8, 95u8, 175u8, 253u8, 135u8, 50u8, 41u8, 99u8, ], [ - 33u8, 56u8, 64u8, 56u8, 186u8, 118u8, 16u8, 13u8, 65u8, 185u8, 60u8, 27u8, 26u8, 151u8, - 12u8, 147u8, 48u8, 157u8, 183u8, 139u8, 69u8, 40u8, 88u8, 168u8, 239u8, 90u8, 17u8, - 119u8, 22u8, 54u8, 199u8, 16u8, 25u8, 141u8, 154u8, 139u8, 17u8, 81u8, 204u8, 34u8, - 18u8, 45u8, 178u8, 84u8, 69u8, 46u8, 79u8, 175u8, 82u8, 209u8, 86u8, 36u8, 228u8, - 178u8, 115u8, 8u8, 116u8, 121u8, 75u8, 211u8, 11u8, 122u8, 26u8, 152u8, + 14u8, 176u8, 93u8, 15u8, 215u8, 52u8, 180u8, 69u8, 241u8, 240u8, 102u8, 43u8, 251u8, + 41u8, 82u8, 117u8, 19u8, 55u8, 135u8, 212u8, 204u8, 187u8, 211u8, 28u8, 68u8, 1u8, + 83u8, 229u8, 132u8, 166u8, 44u8, 8u8, 17u8, 135u8, 39u8, 238u8, 24u8, 169u8, 157u8, + 247u8, 14u8, 80u8, 243u8, 104u8, 214u8, 199u8, 182u8, 162u8, 75u8, 222u8, 132u8, 111u8, + 174u8, 89u8, 93u8, 29u8, 66u8, 79u8, 144u8, 122u8, 167u8, 21u8, 149u8, 123u8, ], [ - 11u8, 24u8, 31u8, 252u8, 76u8, 21u8, 251u8, 205u8, 11u8, 188u8, 156u8, 239u8, 188u8, - 92u8, 249u8, 50u8, 101u8, 170u8, 23u8, 90u8, 199u8, 252u8, 56u8, 226u8, 161u8, 143u8, - 25u8, 50u8, 10u8, 184u8, 236u8, 28u8, 7u8, 234u8, 196u8, 18u8, 97u8, 28u8, 132u8, - 226u8, 109u8, 182u8, 125u8, 17u8, 169u8, 204u8, 92u8, 48u8, 60u8, 161u8, 95u8, 34u8, - 57u8, 108u8, 93u8, 139u8, 47u8, 149u8, 17u8, 186u8, 87u8, 47u8, 72u8, 45u8, + 9u8, 103u8, 240u8, 45u8, 171u8, 73u8, 215u8, 67u8, 136u8, 123u8, 86u8, 102u8, 50u8, + 137u8, 210u8, 26u8, 168u8, 98u8, 151u8, 18u8, 92u8, 6u8, 50u8, 139u8, 60u8, 37u8, + 172u8, 100u8, 107u8, 13u8, 213u8, 48u8, 35u8, 140u8, 21u8, 105u8, 37u8, 14u8, 8u8, 2u8, + 74u8, 61u8, 14u8, 50u8, 87u8, 14u8, 101u8, 136u8, 171u8, 1u8, 190u8, 99u8, 17u8, 115u8, + 210u8, 55u8, 143u8, 235u8, 57u8, 97u8, 150u8, 252u8, 142u8, 2u8, ], [ - 10u8, 33u8, 57u8, 195u8, 143u8, 58u8, 55u8, 44u8, 34u8, 84u8, 149u8, 54u8, 218u8, 18u8, - 230u8, 255u8, 199u8, 69u8, 145u8, 192u8, 3u8, 247u8, 159u8, 21u8, 230u8, 2u8, 201u8, - 193u8, 226u8, 202u8, 106u8, 87u8, 23u8, 21u8, 20u8, 117u8, 94u8, 171u8, 144u8, 5u8, - 189u8, 58u8, 252u8, 106u8, 71u8, 146u8, 39u8, 91u8, 239u8, 204u8, 53u8, 89u8, 191u8, - 213u8, 185u8, 180u8, 240u8, 237u8, 179u8, 167u8, 167u8, 77u8, 32u8, 210u8, + 26u8, 122u8, 230u8, 230u8, 208u8, 37u8, 22u8, 224u8, 107u8, 204u8, 151u8, 162u8, 169u8, + 52u8, 218u8, 98u8, 169u8, 112u8, 209u8, 157u8, 223u8, 202u8, 89u8, 74u8, 224u8, 32u8, + 51u8, 247u8, 251u8, 121u8, 41u8, 192u8, 22u8, 44u8, 220u8, 127u8, 19u8, 59u8, 10u8, + 5u8, 21u8, 238u8, 120u8, 6u8, 101u8, 73u8, 38u8, 44u8, 154u8, 77u8, 243u8, 77u8, 186u8, + 70u8, 218u8, 17u8, 251u8, 204u8, 234u8, 86u8, 245u8, 252u8, 36u8, 237u8, ], [ - 39u8, 156u8, 126u8, 125u8, 177u8, 41u8, 218u8, 69u8, 229u8, 50u8, 7u8, 51u8, 198u8, - 7u8, 142u8, 16u8, 106u8, 168u8, 57u8, 254u8, 132u8, 152u8, 160u8, 214u8, 14u8, 242u8, - 12u8, 54u8, 168u8, 215u8, 129u8, 8u8, 16u8, 70u8, 133u8, 137u8, 85u8, 64u8, 119u8, - 210u8, 63u8, 175u8, 112u8, 208u8, 139u8, 133u8, 53u8, 8u8, 222u8, 154u8, 229u8, 110u8, - 158u8, 233u8, 43u8, 134u8, 211u8, 102u8, 144u8, 179u8, 81u8, 230u8, 67u8, 182u8, + 13u8, 225u8, 26u8, 11u8, 134u8, 115u8, 102u8, 118u8, 214u8, 232u8, 184u8, 180u8, 115u8, + 222u8, 24u8, 85u8, 217u8, 250u8, 174u8, 112u8, 5u8, 49u8, 144u8, 79u8, 210u8, 74u8, + 213u8, 79u8, 130u8, 164u8, 134u8, 206u8, 11u8, 109u8, 113u8, 125u8, 18u8, 64u8, 170u8, + 245u8, 91u8, 133u8, 220u8, 233u8, 168u8, 161u8, 226u8, 240u8, 187u8, 54u8, 203u8, + 237u8, 81u8, 4u8, 172u8, 51u8, 217u8, 179u8, 71u8, 172u8, 166u8, 195u8, 249u8, 76u8, ], [ - 23u8, 136u8, 255u8, 16u8, 116u8, 85u8, 110u8, 149u8, 167u8, 95u8, 41u8, 22u8, 195u8, - 146u8, 57u8, 70u8, 104u8, 33u8, 59u8, 232u8, 94u8, 54u8, 229u8, 126u8, 56u8, 90u8, - 222u8, 199u8, 201u8, 229u8, 103u8, 61u8, 47u8, 218u8, 74u8, 148u8, 48u8, 214u8, 156u8, - 54u8, 58u8, 194u8, 112u8, 107u8, 173u8, 50u8, 133u8, 35u8, 89u8, 13u8, 218u8, 253u8, - 21u8, 39u8, 195u8, 234u8, 45u8, 87u8, 173u8, 85u8, 87u8, 200u8, 100u8, 79u8, + 27u8, 162u8, 28u8, 113u8, 150u8, 33u8, 64u8, 184u8, 170u8, 182u8, 114u8, 160u8, 3u8, + 191u8, 144u8, 138u8, 246u8, 248u8, 96u8, 192u8, 228u8, 171u8, 69u8, 203u8, 100u8, + 112u8, 185u8, 54u8, 158u8, 49u8, 44u8, 70u8, 32u8, 37u8, 209u8, 148u8, 92u8, 156u8, + 143u8, 14u8, 213u8, 188u8, 188u8, 98u8, 25u8, 23u8, 107u8, 192u8, 70u8, 117u8, 119u8, + 139u8, 208u8, 101u8, 161u8, 204u8, 208u8, 217u8, 254u8, 30u8, 115u8, 52u8, 32u8, 25u8, ], [ - 12u8, 110u8, 178u8, 72u8, 140u8, 137u8, 10u8, 55u8, 197u8, 60u8, 86u8, 115u8, 69u8, - 130u8, 163u8, 55u8, 156u8, 242u8, 72u8, 87u8, 153u8, 91u8, 202u8, 30u8, 230u8, 11u8, - 41u8, 88u8, 112u8, 44u8, 6u8, 163u8, 24u8, 252u8, 159u8, 175u8, 118u8, 214u8, 34u8, - 122u8, 89u8, 26u8, 71u8, 138u8, 209u8, 214u8, 185u8, 201u8, 41u8, 194u8, 2u8, 15u8, - 33u8, 63u8, 214u8, 68u8, 119u8, 26u8, 177u8, 93u8, 137u8, 123u8, 52u8, 40u8, + 40u8, 182u8, 222u8, 179u8, 128u8, 197u8, 124u8, 173u8, 252u8, 119u8, 163u8, 33u8, + 202u8, 91u8, 129u8, 148u8, 201u8, 23u8, 141u8, 94u8, 50u8, 71u8, 229u8, 81u8, 237u8, + 213u8, 85u8, 26u8, 35u8, 244u8, 180u8, 191u8, 13u8, 70u8, 134u8, 181u8, 185u8, 138u8, + 43u8, 74u8, 215u8, 12u8, 252u8, 198u8, 162u8, 37u8, 169u8, 200u8, 223u8, 231u8, 166u8, + 218u8, 9u8, 200u8, 12u8, 240u8, 250u8, 29u8, 186u8, 52u8, 11u8, 167u8, 235u8, 142u8, ], [ - 9u8, 46u8, 24u8, 40u8, 136u8, 137u8, 124u8, 13u8, 105u8, 59u8, 186u8, 13u8, 186u8, - 181u8, 66u8, 111u8, 230u8, 128u8, 24u8, 73u8, 115u8, 177u8, 226u8, 82u8, 62u8, 136u8, - 236u8, 72u8, 152u8, 22u8, 188u8, 202u8, 14u8, 94u8, 40u8, 186u8, 57u8, 199u8, 164u8, - 234u8, 62u8, 17u8, 224u8, 207u8, 188u8, 199u8, 207u8, 22u8, 56u8, 82u8, 12u8, 85u8, - 113u8, 35u8, 144u8, 103u8, 167u8, 246u8, 195u8, 83u8, 38u8, 14u8, 58u8, 112u8, + 27u8, 239u8, 197u8, 109u8, 13u8, 165u8, 178u8, 81u8, 88u8, 132u8, 30u8, 100u8, 190u8, + 8u8, 76u8, 7u8, 196u8, 116u8, 2u8, 237u8, 206u8, 113u8, 236u8, 90u8, 166u8, 56u8, + 157u8, 186u8, 156u8, 151u8, 76u8, 1u8, 34u8, 67u8, 124u8, 193u8, 90u8, 89u8, 230u8, + 210u8, 229u8, 56u8, 112u8, 181u8, 214u8, 100u8, 63u8, 201u8, 95u8, 93u8, 166u8, 162u8, + 18u8, 44u8, 23u8, 218u8, 151u8, 45u8, 48u8, 233u8, 91u8, 173u8, 117u8, 229u8, ], [ - 2u8, 42u8, 121u8, 238u8, 30u8, 85u8, 74u8, 68u8, 80u8, 124u8, 84u8, 226u8, 15u8, 158u8, - 25u8, 234u8, 185u8, 134u8, 73u8, 13u8, 48u8, 70u8, 163u8, 185u8, 108u8, 27u8, 167u8, - 5u8, 54u8, 143u8, 195u8, 221u8, 44u8, 16u8, 74u8, 230u8, 198u8, 187u8, 175u8, 208u8, - 100u8, 64u8, 90u8, 120u8, 200u8, 200u8, 36u8, 32u8, 108u8, 23u8, 107u8, 59u8, 174u8, - 96u8, 128u8, 175u8, 139u8, 54u8, 196u8, 217u8, 89u8, 30u8, 215u8, 229u8, + 30u8, 68u8, 71u8, 121u8, 71u8, 226u8, 150u8, 135u8, 154u8, 182u8, 167u8, 222u8, 186u8, + 143u8, 42u8, 197u8, 223u8, 151u8, 191u8, 19u8, 72u8, 4u8, 236u8, 134u8, 41u8, 165u8, + 223u8, 251u8, 32u8, 156u8, 154u8, 176u8, 1u8, 182u8, 52u8, 117u8, 84u8, 167u8, 175u8, + 64u8, 57u8, 164u8, 68u8, 239u8, 40u8, 153u8, 180u8, 255u8, 129u8, 165u8, 130u8, 91u8, + 147u8, 25u8, 144u8, 174u8, 42u8, 11u8, 112u8, 53u8, 88u8, 218u8, 196u8, 195u8, ], [ - 1u8, 23u8, 178u8, 59u8, 153u8, 57u8, 177u8, 0u8, 41u8, 1u8, 181u8, 181u8, 108u8, 245u8, - 153u8, 38u8, 166u8, 27u8, 77u8, 129u8, 236u8, 214u8, 22u8, 167u8, 121u8, 201u8, 39u8, - 118u8, 102u8, 93u8, 120u8, 245u8, 28u8, 66u8, 62u8, 6u8, 228u8, 183u8, 129u8, 119u8, - 99u8, 215u8, 175u8, 217u8, 66u8, 46u8, 105u8, 163u8, 182u8, 91u8, 156u8, 48u8, 186u8, - 104u8, 38u8, 220u8, 56u8, 86u8, 172u8, 184u8, 33u8, 98u8, 230u8, 238u8, + 41u8, 254u8, 142u8, 92u8, 242u8, 150u8, 27u8, 223u8, 51u8, 197u8, 185u8, 112u8, 77u8, + 47u8, 93u8, 122u8, 130u8, 200u8, 191u8, 252u8, 190u8, 133u8, 24u8, 140u8, 123u8, 196u8, + 122u8, 20u8, 145u8, 244u8, 159u8, 110u8, 30u8, 130u8, 76u8, 67u8, 104u8, 206u8, 99u8, + 162u8, 153u8, 76u8, 130u8, 77u8, 59u8, 105u8, 168u8, 138u8, 64u8, 185u8, 48u8, 50u8, + 134u8, 172u8, 161u8, 175u8, 14u8, 189u8, 84u8, 192u8, 62u8, 64u8, 215u8, 101u8, ], [ - 39u8, 210u8, 46u8, 79u8, 164u8, 96u8, 37u8, 109u8, 182u8, 129u8, 97u8, 69u8, 69u8, - 140u8, 138u8, 2u8, 204u8, 115u8, 19u8, 189u8, 111u8, 152u8, 212u8, 249u8, 221u8, 253u8, - 225u8, 142u8, 73u8, 100u8, 87u8, 75u8, 5u8, 247u8, 240u8, 207u8, 104u8, 32u8, 184u8, - 48u8, 122u8, 223u8, 189u8, 19u8, 118u8, 43u8, 113u8, 27u8, 2u8, 38u8, 36u8, 52u8, 48u8, - 199u8, 74u8, 120u8, 152u8, 176u8, 227u8, 122u8, 76u8, 180u8, 5u8, 147u8, + 43u8, 156u8, 129u8, 221u8, 72u8, 221u8, 38u8, 113u8, 70u8, 15u8, 81u8, 106u8, 228u8, + 240u8, 68u8, 248u8, 83u8, 126u8, 154u8, 136u8, 162u8, 131u8, 7u8, 28u8, 121u8, 139u8, + 18u8, 236u8, 63u8, 71u8, 248u8, 129u8, 27u8, 208u8, 45u8, 148u8, 249u8, 51u8, 203u8, + 119u8, 69u8, 47u8, 144u8, 221u8, 213u8, 14u8, 128u8, 30u8, 249u8, 182u8, 159u8, 40u8, + 171u8, 35u8, 64u8, 33u8, 155u8, 32u8, 54u8, 187u8, 245u8, 111u8, 58u8, 6u8, ], [ - 43u8, 0u8, 84u8, 170u8, 187u8, 244u8, 105u8, 199u8, 238u8, 134u8, 223u8, 77u8, 242u8, - 223u8, 180u8, 18u8, 113u8, 192u8, 79u8, 72u8, 165u8, 41u8, 253u8, 79u8, 34u8, 28u8, - 76u8, 236u8, 50u8, 59u8, 48u8, 102u8, 35u8, 190u8, 24u8, 130u8, 139u8, 115u8, 37u8, - 82u8, 189u8, 122u8, 196u8, 174u8, 230u8, 34u8, 250u8, 92u8, 181u8, 221u8, 144u8, 136u8, - 75u8, 65u8, 155u8, 89u8, 168u8, 127u8, 212u8, 113u8, 29u8, 220u8, 254u8, 17u8, + 26u8, 125u8, 149u8, 190u8, 0u8, 3u8, 197u8, 119u8, 82u8, 11u8, 91u8, 151u8, 148u8, + 101u8, 255u8, 191u8, 230u8, 216u8, 223u8, 207u8, 207u8, 42u8, 56u8, 102u8, 52u8, 209u8, + 100u8, 193u8, 28u8, 225u8, 254u8, 97u8, 27u8, 75u8, 81u8, 93u8, 37u8, 30u8, 31u8, + 200u8, 154u8, 43u8, 198u8, 144u8, 91u8, 211u8, 147u8, 130u8, 248u8, 77u8, 119u8, 76u8, + 153u8, 222u8, 40u8, 45u8, 90u8, 146u8, 81u8, 29u8, 11u8, 104u8, 252u8, 84u8, ], [ - 39u8, 48u8, 38u8, 237u8, 236u8, 247u8, 189u8, 124u8, 159u8, 208u8, 217u8, 35u8, 193u8, - 28u8, 211u8, 166u8, 10u8, 208u8, 98u8, 118u8, 58u8, 46u8, 172u8, 60u8, 176u8, 134u8, - 57u8, 184u8, 25u8, 118u8, 48u8, 203u8, 27u8, 98u8, 9u8, 240u8, 218u8, 150u8, 235u8, - 173u8, 194u8, 187u8, 247u8, 230u8, 192u8, 104u8, 9u8, 132u8, 47u8, 36u8, 97u8, 131u8, - 146u8, 85u8, 223u8, 165u8, 176u8, 131u8, 39u8, 129u8, 82u8, 205u8, 181u8, 5u8, + 44u8, 57u8, 140u8, 100u8, 143u8, 65u8, 227u8, 147u8, 60u8, 215u8, 111u8, 239u8, 147u8, + 169u8, 143u8, 25u8, 49u8, 94u8, 149u8, 152u8, 186u8, 6u8, 13u8, 54u8, 9u8, 118u8, 61u8, + 231u8, 173u8, 202u8, 252u8, 20u8, 16u8, 36u8, 150u8, 16u8, 42u8, 105u8, 157u8, 238u8, + 241u8, 47u8, 110u8, 71u8, 237u8, 117u8, 138u8, 78u8, 53u8, 181u8, 214u8, 122u8, 236u8, + 253u8, 202u8, 180u8, 155u8, 25u8, 220u8, 140u8, 41u8, 47u8, 124u8, 201u8, ], [ - 37u8, 84u8, 93u8, 24u8, 220u8, 145u8, 23u8, 211u8, 235u8, 6u8, 176u8, 250u8, 106u8, - 191u8, 117u8, 75u8, 216u8, 30u8, 91u8, 223u8, 107u8, 165u8, 26u8, 38u8, 205u8, 95u8, - 201u8, 112u8, 25u8, 239u8, 4u8, 84u8, 18u8, 223u8, 149u8, 227u8, 213u8, 71u8, 105u8, - 19u8, 255u8, 111u8, 75u8, 116u8, 72u8, 232u8, 103u8, 23u8, 133u8, 254u8, 144u8, 89u8, - 63u8, 41u8, 225u8, 60u8, 17u8, 140u8, 25u8, 155u8, 213u8, 181u8, 70u8, 165u8, + 20u8, 84u8, 249u8, 215u8, 217u8, 127u8, 117u8, 157u8, 196u8, 88u8, 222u8, 208u8, 96u8, + 36u8, 18u8, 10u8, 31u8, 223u8, 240u8, 18u8, 112u8, 170u8, 166u8, 164u8, 254u8, 206u8, + 48u8, 214u8, 2u8, 209u8, 112u8, 99u8, 42u8, 232u8, 0u8, 213u8, 152u8, 149u8, 255u8, + 78u8, 132u8, 62u8, 234u8, 41u8, 44u8, 165u8, 228u8, 29u8, 119u8, 231u8, 150u8, 38u8, + 197u8, 106u8, 58u8, 228u8, 24u8, 5u8, 208u8, 237u8, 60u8, 96u8, 165u8, 215u8, ], [ - 45u8, 238u8, 255u8, 168u8, 246u8, 51u8, 180u8, 120u8, 191u8, 154u8, 53u8, 171u8, 222u8, - 239u8, 76u8, 49u8, 145u8, 77u8, 141u8, 133u8, 11u8, 6u8, 54u8, 10u8, 15u8, 6u8, 242u8, - 191u8, 176u8, 209u8, 113u8, 234u8, 9u8, 13u8, 66u8, 73u8, 111u8, 60u8, 191u8, 104u8, - 250u8, 133u8, 236u8, 130u8, 6u8, 79u8, 217u8, 122u8, 134u8, 132u8, 120u8, 196u8, 48u8, - 184u8, 138u8, 50u8, 231u8, 136u8, 80u8, 168u8, 168u8, 74u8, 157u8, 180u8, + 19u8, 183u8, 50u8, 55u8, 32u8, 197u8, 72u8, 10u8, 68u8, 39u8, 153u8, 137u8, 213u8, + 113u8, 124u8, 114u8, 79u8, 96u8, 208u8, 227u8, 170u8, 153u8, 2u8, 187u8, 79u8, 193u8, + 94u8, 246u8, 196u8, 42u8, 247u8, 104u8, 18u8, 184u8, 179u8, 69u8, 74u8, 86u8, 190u8, + 131u8, 211u8, 252u8, 5u8, 156u8, 88u8, 189u8, 39u8, 33u8, 98u8, 170u8, 244u8, 139u8, + 8u8, 101u8, 97u8, 20u8, 84u8, 222u8, 230u8, 98u8, 12u8, 61u8, 144u8, 149u8, ], ], }; diff --git a/programs/compressed-pda/src/verifying_keys/non-inclusion_26_1.rs b/programs/compressed-pda/src/verifying_keys/non-inclusion_26_1.rs new file mode 100644 index 0000000000..5daec72078 --- /dev/null +++ b/programs/compressed-pda/src/verifying_keys/non-inclusion_26_1.rs @@ -0,0 +1,72 @@ +// This file is generated by xtask. Do not edit it manually. + +use groth16_solana::groth16::Groth16Verifyingkey; +pub const VERIFYINGKEY: Groth16Verifyingkey = Groth16Verifyingkey { + nr_pubinputs: 2usize, + vk_alpha_g1: [ + 29u8, 213u8, 229u8, 89u8, 188u8, 151u8, 134u8, 177u8, 166u8, 172u8, 153u8, 39u8, 73u8, + 142u8, 223u8, 81u8, 72u8, 12u8, 124u8, 60u8, 53u8, 12u8, 86u8, 82u8, 163u8, 95u8, 32u8, + 11u8, 240u8, 254u8, 214u8, 125u8, 29u8, 198u8, 203u8, 92u8, 145u8, 95u8, 30u8, 162u8, + 107u8, 146u8, 218u8, 228u8, 221u8, 229u8, 146u8, 70u8, 122u8, 85u8, 117u8, 253u8, 223u8, + 13u8, 118u8, 98u8, 241u8, 234u8, 147u8, 12u8, 192u8, 72u8, 0u8, 91u8, + ], + vk_beta_g2: [ + 44u8, 29u8, 176u8, 97u8, 227u8, 92u8, 216u8, 57u8, 97u8, 128u8, 59u8, 253u8, 133u8, 250u8, + 133u8, 238u8, 0u8, 254u8, 248u8, 81u8, 104u8, 164u8, 26u8, 120u8, 123u8, 94u8, 133u8, 42u8, + 93u8, 147u8, 255u8, 190u8, 43u8, 137u8, 178u8, 249u8, 233u8, 223u8, 200u8, 200u8, 156u8, + 74u8, 0u8, 170u8, 237u8, 153u8, 155u8, 208u8, 123u8, 52u8, 126u8, 225u8, 66u8, 92u8, 201u8, + 56u8, 48u8, 66u8, 175u8, 132u8, 238u8, 33u8, 116u8, 32u8, 36u8, 98u8, 186u8, 192u8, 25u8, + 226u8, 160u8, 95u8, 155u8, 102u8, 36u8, 130u8, 82u8, 98u8, 133u8, 199u8, 86u8, 137u8, 15u8, + 75u8, 248u8, 86u8, 98u8, 222u8, 0u8, 189u8, 64u8, 70u8, 188u8, 11u8, 170u8, 195u8, 27u8, + 209u8, 6u8, 176u8, 149u8, 29u8, 16u8, 65u8, 249u8, 60u8, 10u8, 179u8, 23u8, 160u8, 12u8, + 7u8, 173u8, 32u8, 181u8, 103u8, 131u8, 41u8, 39u8, 8u8, 56u8, 175u8, 207u8, 19u8, 117u8, + 165u8, 108u8, 230u8, + ], + vk_gamme_g2: [ + 47u8, 33u8, 99u8, 181u8, 244u8, 133u8, 20u8, 145u8, 3u8, 200u8, 197u8, 231u8, 159u8, 177u8, + 143u8, 223u8, 27u8, 21u8, 225u8, 179u8, 37u8, 165u8, 104u8, 94u8, 108u8, 211u8, 202u8, + 80u8, 128u8, 54u8, 173u8, 15u8, 4u8, 14u8, 237u8, 96u8, 13u8, 144u8, 206u8, 107u8, 140u8, + 227u8, 219u8, 70u8, 214u8, 159u8, 42u8, 69u8, 41u8, 60u8, 216u8, 207u8, 27u8, 72u8, 181u8, + 81u8, 18u8, 226u8, 225u8, 6u8, 20u8, 48u8, 192u8, 114u8, 10u8, 163u8, 72u8, 112u8, 163u8, + 80u8, 208u8, 139u8, 201u8, 119u8, 246u8, 60u8, 8u8, 244u8, 195u8, 24u8, 19u8, 70u8, 245u8, + 83u8, 12u8, 213u8, 55u8, 28u8, 153u8, 251u8, 205u8, 226u8, 110u8, 12u8, 201u8, 169u8, 10u8, + 41u8, 228u8, 160u8, 248u8, 114u8, 211u8, 27u8, 4u8, 157u8, 63u8, 144u8, 235u8, 85u8, 7u8, + 237u8, 35u8, 37u8, 228u8, 138u8, 30u8, 20u8, 177u8, 1u8, 85u8, 119u8, 83u8, 156u8, 63u8, + 148u8, 3u8, 12u8, + ], + vk_delta_g2: [ + 43u8, 92u8, 2u8, 229u8, 130u8, 37u8, 224u8, 157u8, 75u8, 153u8, 212u8, 151u8, 65u8, 238u8, + 16u8, 17u8, 102u8, 211u8, 165u8, 66u8, 41u8, 14u8, 98u8, 71u8, 195u8, 252u8, 222u8, 137u8, + 235u8, 83u8, 225u8, 44u8, 12u8, 72u8, 63u8, 92u8, 109u8, 213u8, 239u8, 6u8, 74u8, 121u8, + 23u8, 71u8, 169u8, 18u8, 217u8, 18u8, 98u8, 65u8, 100u8, 46u8, 238u8, 19u8, 185u8, 183u8, + 194u8, 110u8, 248u8, 231u8, 98u8, 76u8, 48u8, 211u8, 38u8, 99u8, 121u8, 172u8, 11u8, 149u8, + 149u8, 183u8, 198u8, 138u8, 139u8, 33u8, 42u8, 37u8, 45u8, 26u8, 170u8, 188u8, 164u8, + 205u8, 148u8, 203u8, 125u8, 84u8, 83u8, 70u8, 131u8, 254u8, 99u8, 181u8, 203u8, 64u8, 45u8, + 170u8, 25u8, 236u8, 82u8, 69u8, 113u8, 134u8, 191u8, 10u8, 45u8, 28u8, 18u8, 34u8, 2u8, + 229u8, 50u8, 169u8, 113u8, 186u8, 181u8, 11u8, 72u8, 228u8, 147u8, 249u8, 109u8, 255u8, + 56u8, 122u8, 121u8, 102u8, + ], + vk_ic: &[ + [ + 30u8, 179u8, 9u8, 246u8, 79u8, 202u8, 26u8, 181u8, 143u8, 244u8, 160u8, 170u8, 20u8, + 124u8, 162u8, 67u8, 160u8, 83u8, 208u8, 89u8, 126u8, 17u8, 183u8, 249u8, 4u8, 32u8, + 192u8, 175u8, 191u8, 99u8, 79u8, 5u8, 23u8, 231u8, 182u8, 113u8, 42u8, 210u8, 160u8, + 154u8, 157u8, 234u8, 220u8, 183u8, 245u8, 113u8, 14u8, 86u8, 167u8, 70u8, 118u8, 49u8, + 91u8, 52u8, 139u8, 16u8, 67u8, 166u8, 209u8, 167u8, 230u8, 115u8, 23u8, 24u8, + ], + [ + 4u8, 166u8, 221u8, 86u8, 203u8, 73u8, 104u8, 68u8, 246u8, 205u8, 246u8, 156u8, 129u8, + 220u8, 77u8, 185u8, 91u8, 163u8, 241u8, 2u8, 180u8, 120u8, 167u8, 53u8, 199u8, 28u8, + 83u8, 59u8, 202u8, 145u8, 239u8, 207u8, 13u8, 121u8, 39u8, 126u8, 123u8, 134u8, 72u8, + 253u8, 205u8, 166u8, 191u8, 60u8, 217u8, 60u8, 187u8, 81u8, 224u8, 237u8, 182u8, 255u8, + 92u8, 1u8, 152u8, 141u8, 57u8, 162u8, 242u8, 192u8, 127u8, 13u8, 42u8, 123u8, + ], + [ + 3u8, 132u8, 145u8, 166u8, 251u8, 150u8, 131u8, 211u8, 77u8, 213u8, 200u8, 18u8, 119u8, + 206u8, 151u8, 132u8, 88u8, 227u8, 223u8, 239u8, 15u8, 249u8, 222u8, 224u8, 138u8, 43u8, + 154u8, 220u8, 62u8, 178u8, 116u8, 149u8, 31u8, 83u8, 170u8, 108u8, 72u8, 137u8, 229u8, + 57u8, 95u8, 66u8, 245u8, 221u8, 247u8, 223u8, 107u8, 130u8, 52u8, 36u8, 94u8, 142u8, + 144u8, 31u8, 218u8, 163u8, 12u8, 110u8, 172u8, 26u8, 46u8, 61u8, 10u8, 160u8, + ], + ], +}; diff --git a/programs/compressed-pda/src/verifying_keys/non-inclusion_26_2.rs b/programs/compressed-pda/src/verifying_keys/non-inclusion_26_2.rs new file mode 100644 index 0000000000..6812105ea5 --- /dev/null +++ b/programs/compressed-pda/src/verifying_keys/non-inclusion_26_2.rs @@ -0,0 +1,86 @@ +// This file is generated by xtask. Do not edit it manually. + +use groth16_solana::groth16::Groth16Verifyingkey; +pub const VERIFYINGKEY: Groth16Verifyingkey = Groth16Verifyingkey { + nr_pubinputs: 4usize, + vk_alpha_g1: [ + 11u8, 10u8, 205u8, 158u8, 196u8, 137u8, 146u8, 43u8, 109u8, 234u8, 27u8, 100u8, 27u8, 70u8, + 116u8, 180u8, 145u8, 249u8, 189u8, 216u8, 99u8, 10u8, 240u8, 211u8, 4u8, 175u8, 220u8, + 210u8, 130u8, 18u8, 72u8, 211u8, 23u8, 213u8, 236u8, 149u8, 8u8, 125u8, 79u8, 141u8, 33u8, + 31u8, 128u8, 239u8, 210u8, 75u8, 174u8, 142u8, 54u8, 156u8, 100u8, 108u8, 200u8, 182u8, + 236u8, 212u8, 165u8, 65u8, 199u8, 244u8, 61u8, 166u8, 92u8, 91u8, + ], + vk_beta_g2: [ + 32u8, 54u8, 102u8, 31u8, 121u8, 163u8, 222u8, 110u8, 226u8, 71u8, 62u8, 14u8, 40u8, 38u8, + 252u8, 184u8, 215u8, 183u8, 28u8, 140u8, 193u8, 212u8, 31u8, 29u8, 151u8, 57u8, 124u8, + 170u8, 211u8, 44u8, 127u8, 110u8, 38u8, 207u8, 186u8, 17u8, 51u8, 177u8, 211u8, 26u8, 40u8, + 58u8, 182u8, 118u8, 86u8, 157u8, 116u8, 206u8, 8u8, 172u8, 46u8, 35u8, 33u8, 160u8, 113u8, + 144u8, 45u8, 200u8, 106u8, 219u8, 254u8, 98u8, 100u8, 36u8, 22u8, 152u8, 85u8, 67u8, 120u8, + 173u8, 215u8, 249u8, 156u8, 201u8, 142u8, 168u8, 165u8, 229u8, 201u8, 125u8, 28u8, 74u8, + 245u8, 88u8, 35u8, 207u8, 15u8, 75u8, 88u8, 176u8, 25u8, 137u8, 21u8, 79u8, 26u8, 156u8, + 31u8, 169u8, 151u8, 199u8, 168u8, 24u8, 82u8, 172u8, 100u8, 23u8, 163u8, 143u8, 96u8, + 239u8, 151u8, 57u8, 139u8, 181u8, 155u8, 11u8, 65u8, 239u8, 183u8, 108u8, 201u8, 212u8, + 42u8, 81u8, 217u8, 9u8, 47u8, 237u8, + ], + vk_gamme_g2: [ + 13u8, 124u8, 207u8, 150u8, 190u8, 162u8, 248u8, 215u8, 27u8, 187u8, 192u8, 182u8, 138u8, + 12u8, 171u8, 240u8, 137u8, 70u8, 46u8, 79u8, 14u8, 154u8, 144u8, 228u8, 75u8, 135u8, 145u8, + 121u8, 70u8, 128u8, 34u8, 168u8, 8u8, 221u8, 158u8, 212u8, 66u8, 76u8, 101u8, 239u8, 120u8, + 2u8, 70u8, 71u8, 50u8, 18u8, 10u8, 16u8, 166u8, 135u8, 113u8, 20u8, 62u8, 89u8, 70u8, + 224u8, 49u8, 200u8, 57u8, 240u8, 72u8, 66u8, 16u8, 211u8, 35u8, 51u8, 161u8, 67u8, 62u8, + 247u8, 190u8, 23u8, 180u8, 133u8, 199u8, 70u8, 221u8, 231u8, 107u8, 218u8, 63u8, 248u8, + 30u8, 237u8, 191u8, 217u8, 86u8, 171u8, 169u8, 234u8, 90u8, 222u8, 235u8, 50u8, 3u8, 149u8, + 19u8, 22u8, 156u8, 236u8, 234u8, 205u8, 241u8, 110u8, 115u8, 88u8, 192u8, 207u8, 108u8, + 211u8, 120u8, 139u8, 251u8, 131u8, 242u8, 61u8, 118u8, 0u8, 127u8, 235u8, 91u8, 160u8, + 157u8, 146u8, 195u8, 101u8, 126u8, 218u8, + ], + vk_delta_g2: [ + 3u8, 52u8, 130u8, 52u8, 189u8, 170u8, 220u8, 168u8, 60u8, 246u8, 174u8, 88u8, 39u8, 94u8, + 137u8, 67u8, 194u8, 142u8, 232u8, 96u8, 183u8, 175u8, 232u8, 166u8, 99u8, 33u8, 162u8, + 236u8, 76u8, 139u8, 153u8, 171u8, 38u8, 115u8, 53u8, 31u8, 24u8, 251u8, 246u8, 79u8, 216u8, + 213u8, 114u8, 138u8, 227u8, 53u8, 29u8, 56u8, 168u8, 190u8, 127u8, 190u8, 170u8, 137u8, + 92u8, 180u8, 10u8, 144u8, 146u8, 247u8, 110u8, 133u8, 110u8, 217u8, 45u8, 127u8, 160u8, + 90u8, 101u8, 15u8, 87u8, 221u8, 120u8, 112u8, 225u8, 51u8, 173u8, 196u8, 0u8, 73u8, 250u8, + 247u8, 41u8, 186u8, 27u8, 58u8, 181u8, 109u8, 158u8, 189u8, 126u8, 188u8, 243u8, 179u8, + 129u8, 215u8, 41u8, 233u8, 115u8, 152u8, 219u8, 43u8, 52u8, 206u8, 62u8, 155u8, 207u8, + 195u8, 0u8, 49u8, 203u8, 16u8, 106u8, 201u8, 96u8, 242u8, 176u8, 78u8, 80u8, 69u8, 241u8, + 53u8, 127u8, 10u8, 164u8, 32u8, 17u8, 245u8, + ], + vk_ic: &[ + [ + 3u8, 255u8, 235u8, 131u8, 245u8, 106u8, 124u8, 212u8, 15u8, 81u8, 27u8, 195u8, 185u8, + 87u8, 183u8, 155u8, 38u8, 214u8, 39u8, 169u8, 124u8, 197u8, 24u8, 198u8, 191u8, 14u8, + 230u8, 83u8, 157u8, 242u8, 197u8, 72u8, 8u8, 78u8, 184u8, 216u8, 108u8, 224u8, 241u8, + 97u8, 95u8, 220u8, 53u8, 27u8, 42u8, 242u8, 97u8, 243u8, 151u8, 144u8, 13u8, 103u8, + 116u8, 140u8, 67u8, 139u8, 142u8, 68u8, 184u8, 166u8, 112u8, 202u8, 92u8, 12u8, + ], + [ + 18u8, 162u8, 190u8, 92u8, 155u8, 125u8, 164u8, 130u8, 225u8, 96u8, 161u8, 13u8, 216u8, + 43u8, 62u8, 67u8, 11u8, 106u8, 152u8, 27u8, 117u8, 171u8, 121u8, 113u8, 39u8, 103u8, + 140u8, 227u8, 114u8, 88u8, 199u8, 135u8, 9u8, 210u8, 216u8, 39u8, 237u8, 11u8, 157u8, + 106u8, 234u8, 180u8, 118u8, 174u8, 59u8, 204u8, 10u8, 242u8, 205u8, 205u8, 75u8, 118u8, + 6u8, 37u8, 115u8, 192u8, 10u8, 97u8, 30u8, 65u8, 181u8, 72u8, 138u8, 186u8, + ], + [ + 32u8, 152u8, 247u8, 72u8, 163u8, 161u8, 43u8, 233u8, 211u8, 28u8, 12u8, 89u8, 209u8, + 63u8, 25u8, 181u8, 233u8, 103u8, 73u8, 99u8, 11u8, 208u8, 192u8, 201u8, 105u8, 132u8, + 139u8, 238u8, 61u8, 111u8, 224u8, 40u8, 38u8, 90u8, 200u8, 196u8, 229u8, 146u8, 163u8, + 102u8, 178u8, 94u8, 91u8, 8u8, 193u8, 170u8, 218u8, 80u8, 248u8, 138u8, 185u8, 107u8, + 16u8, 24u8, 37u8, 47u8, 211u8, 149u8, 184u8, 209u8, 3u8, 12u8, 234u8, 1u8, + ], + [ + 12u8, 104u8, 14u8, 19u8, 225u8, 184u8, 159u8, 13u8, 129u8, 110u8, 150u8, 27u8, 45u8, + 56u8, 62u8, 90u8, 235u8, 47u8, 90u8, 197u8, 244u8, 56u8, 231u8, 204u8, 120u8, 40u8, + 147u8, 208u8, 206u8, 13u8, 20u8, 108u8, 36u8, 11u8, 130u8, 195u8, 196u8, 175u8, 9u8, + 32u8, 41u8, 40u8, 248u8, 211u8, 155u8, 127u8, 168u8, 246u8, 157u8, 109u8, 35u8, 7u8, + 118u8, 14u8, 190u8, 179u8, 135u8, 73u8, 226u8, 98u8, 122u8, 211u8, 111u8, 166u8, + ], + [ + 7u8, 53u8, 87u8, 161u8, 61u8, 101u8, 166u8, 159u8, 135u8, 188u8, 176u8, 85u8, 14u8, + 77u8, 205u8, 18u8, 114u8, 11u8, 61u8, 201u8, 81u8, 197u8, 103u8, 181u8, 42u8, 212u8, + 132u8, 42u8, 211u8, 247u8, 230u8, 87u8, 29u8, 35u8, 163u8, 244u8, 76u8, 160u8, 234u8, + 142u8, 3u8, 4u8, 42u8, 170u8, 132u8, 165u8, 78u8, 168u8, 30u8, 228u8, 237u8, 202u8, + 18u8, 238u8, 2u8, 26u8, 3u8, 91u8, 188u8, 216u8, 99u8, 65u8, 137u8, 98u8, + ], + ], +}; diff --git a/programs/compressed-pda/src/verifying_keys/non-inclusion_26_3.rs b/programs/compressed-pda/src/verifying_keys/non-inclusion_26_3.rs new file mode 100644 index 0000000000..ada7b7c7ee --- /dev/null +++ b/programs/compressed-pda/src/verifying_keys/non-inclusion_26_3.rs @@ -0,0 +1,100 @@ +// This file is generated by xtask. Do not edit it manually. + +use groth16_solana::groth16::Groth16Verifyingkey; +pub const VERIFYINGKEY: Groth16Verifyingkey = Groth16Verifyingkey { + nr_pubinputs: 6usize, + vk_alpha_g1: [ + 27u8, 251u8, 160u8, 95u8, 148u8, 194u8, 87u8, 247u8, 47u8, 229u8, 42u8, 90u8, 160u8, 246u8, + 57u8, 38u8, 66u8, 234u8, 95u8, 176u8, 43u8, 61u8, 215u8, 203u8, 44u8, 72u8, 35u8, 170u8, + 114u8, 178u8, 235u8, 56u8, 38u8, 140u8, 8u8, 233u8, 249u8, 173u8, 45u8, 105u8, 88u8, 113u8, + 224u8, 65u8, 248u8, 54u8, 17u8, 116u8, 49u8, 243u8, 238u8, 130u8, 94u8, 220u8, 160u8, + 212u8, 54u8, 52u8, 193u8, 98u8, 214u8, 43u8, 79u8, 197u8, + ], + vk_beta_g2: [ + 20u8, 177u8, 58u8, 25u8, 27u8, 185u8, 127u8, 41u8, 228u8, 9u8, 77u8, 181u8, 82u8, 124u8, + 41u8, 210u8, 41u8, 218u8, 149u8, 249u8, 47u8, 26u8, 17u8, 93u8, 135u8, 156u8, 108u8, 186u8, + 195u8, 227u8, 53u8, 69u8, 46u8, 31u8, 190u8, 155u8, 152u8, 70u8, 218u8, 17u8, 237u8, 82u8, + 225u8, 88u8, 212u8, 109u8, 250u8, 78u8, 230u8, 138u8, 234u8, 0u8, 215u8, 58u8, 38u8, 56u8, + 35u8, 71u8, 37u8, 154u8, 103u8, 139u8, 186u8, 165u8, 46u8, 180u8, 22u8, 195u8, 70u8, 145u8, + 43u8, 2u8, 138u8, 164u8, 153u8, 7u8, 106u8, 230u8, 111u8, 227u8, 12u8, 48u8, 24u8, 164u8, + 95u8, 145u8, 224u8, 94u8, 148u8, 60u8, 222u8, 161u8, 136u8, 200u8, 100u8, 219u8, 15u8, + 151u8, 110u8, 24u8, 192u8, 240u8, 246u8, 202u8, 161u8, 186u8, 225u8, 178u8, 55u8, 157u8, + 96u8, 236u8, 217u8, 223u8, 38u8, 216u8, 93u8, 113u8, 235u8, 96u8, 88u8, 49u8, 96u8, 22u8, + 148u8, 122u8, 206u8, 220u8, + ], + vk_gamme_g2: [ + 20u8, 64u8, 57u8, 251u8, 242u8, 216u8, 71u8, 95u8, 59u8, 164u8, 67u8, 202u8, 216u8, 62u8, + 15u8, 68u8, 77u8, 64u8, 135u8, 197u8, 64u8, 42u8, 225u8, 235u8, 115u8, 90u8, 71u8, 76u8, + 134u8, 228u8, 252u8, 87u8, 1u8, 32u8, 1u8, 31u8, 130u8, 11u8, 175u8, 140u8, 250u8, 131u8, + 44u8, 9u8, 166u8, 243u8, 252u8, 222u8, 70u8, 234u8, 65u8, 100u8, 233u8, 44u8, 175u8, 61u8, + 93u8, 55u8, 155u8, 183u8, 104u8, 27u8, 54u8, 195u8, 15u8, 131u8, 253u8, 118u8, 165u8, + 168u8, 128u8, 23u8, 223u8, 68u8, 59u8, 253u8, 102u8, 210u8, 128u8, 43u8, 174u8, 237u8, + 62u8, 166u8, 87u8, 165u8, 103u8, 205u8, 46u8, 229u8, 231u8, 82u8, 149u8, 49u8, 100u8, 66u8, + 41u8, 94u8, 228u8, 124u8, 189u8, 119u8, 84u8, 78u8, 95u8, 165u8, 220u8, 57u8, 250u8, 200u8, + 192u8, 15u8, 220u8, 229u8, 78u8, 144u8, 79u8, 246u8, 13u8, 226u8, 186u8, 204u8, 176u8, + 112u8, 67u8, 175u8, 166u8, 228u8, + ], + vk_delta_g2: [ + 38u8, 234u8, 112u8, 112u8, 18u8, 133u8, 60u8, 130u8, 3u8, 33u8, 97u8, 70u8, 60u8, 173u8, + 77u8, 161u8, 49u8, 183u8, 93u8, 21u8, 89u8, 160u8, 31u8, 177u8, 179u8, 148u8, 118u8, 205u8, + 140u8, 244u8, 130u8, 137u8, 47u8, 231u8, 25u8, 5u8, 215u8, 64u8, 215u8, 244u8, 251u8, + 108u8, 192u8, 76u8, 39u8, 163u8, 208u8, 31u8, 201u8, 79u8, 11u8, 241u8, 92u8, 250u8, 137u8, + 67u8, 132u8, 122u8, 229u8, 43u8, 199u8, 103u8, 140u8, 176u8, 15u8, 44u8, 38u8, 73u8, 202u8, + 54u8, 7u8, 186u8, 129u8, 13u8, 234u8, 222u8, 162u8, 88u8, 138u8, 90u8, 254u8, 200u8, 114u8, + 237u8, 50u8, 15u8, 168u8, 181u8, 47u8, 243u8, 118u8, 118u8, 29u8, 57u8, 18u8, 183u8, 47u8, + 5u8, 111u8, 29u8, 243u8, 141u8, 216u8, 149u8, 101u8, 174u8, 95u8, 138u8, 162u8, 109u8, + 167u8, 77u8, 225u8, 211u8, 208u8, 72u8, 218u8, 155u8, 90u8, 240u8, 26u8, 103u8, 8u8, 181u8, + 167u8, 144u8, 75u8, 87u8, + ], + vk_ic: &[ + [ + 20u8, 38u8, 27u8, 229u8, 135u8, 76u8, 81u8, 134u8, 67u8, 196u8, 48u8, 255u8, 16u8, + 105u8, 151u8, 32u8, 194u8, 48u8, 34u8, 44u8, 211u8, 74u8, 72u8, 214u8, 32u8, 145u8, + 51u8, 110u8, 58u8, 254u8, 132u8, 94u8, 26u8, 245u8, 77u8, 154u8, 114u8, 0u8, 96u8, + 165u8, 172u8, 117u8, 62u8, 137u8, 100u8, 172u8, 44u8, 182u8, 1u8, 137u8, 11u8, 16u8, + 173u8, 88u8, 107u8, 108u8, 71u8, 172u8, 99u8, 47u8, 14u8, 83u8, 97u8, 155u8, + ], + [ + 0u8, 77u8, 17u8, 8u8, 215u8, 77u8, 210u8, 249u8, 150u8, 122u8, 72u8, 32u8, 129u8, + 179u8, 191u8, 178u8, 155u8, 148u8, 139u8, 14u8, 72u8, 44u8, 248u8, 117u8, 79u8, 245u8, + 132u8, 96u8, 35u8, 154u8, 146u8, 222u8, 30u8, 31u8, 154u8, 110u8, 228u8, 83u8, 140u8, + 40u8, 43u8, 65u8, 129u8, 41u8, 198u8, 14u8, 213u8, 1u8, 93u8, 249u8, 208u8, 249u8, + 236u8, 216u8, 181u8, 151u8, 189u8, 188u8, 188u8, 86u8, 178u8, 142u8, 253u8, 95u8, + ], + [ + 34u8, 234u8, 83u8, 179u8, 39u8, 104u8, 115u8, 158u8, 186u8, 100u8, 214u8, 96u8, 210u8, + 197u8, 76u8, 208u8, 212u8, 245u8, 49u8, 235u8, 117u8, 254u8, 167u8, 165u8, 190u8, + 249u8, 82u8, 93u8, 155u8, 118u8, 0u8, 95u8, 47u8, 49u8, 27u8, 27u8, 19u8, 12u8, 63u8, + 79u8, 191u8, 5u8, 207u8, 55u8, 235u8, 74u8, 23u8, 213u8, 121u8, 104u8, 32u8, 147u8, + 56u8, 118u8, 110u8, 59u8, 60u8, 64u8, 18u8, 243u8, 191u8, 160u8, 250u8, 226u8, + ], + [ + 40u8, 81u8, 199u8, 86u8, 241u8, 67u8, 185u8, 86u8, 222u8, 93u8, 44u8, 30u8, 135u8, + 169u8, 37u8, 207u8, 12u8, 188u8, 5u8, 59u8, 165u8, 218u8, 18u8, 172u8, 108u8, 18u8, + 95u8, 41u8, 96u8, 201u8, 45u8, 2u8, 20u8, 96u8, 130u8, 151u8, 22u8, 9u8, 86u8, 66u8, + 16u8, 197u8, 58u8, 5u8, 83u8, 245u8, 19u8, 128u8, 150u8, 193u8, 166u8, 57u8, 28u8, + 49u8, 235u8, 118u8, 14u8, 134u8, 110u8, 25u8, 150u8, 15u8, 59u8, 140u8, + ], + [ + 42u8, 51u8, 49u8, 33u8, 162u8, 175u8, 162u8, 9u8, 146u8, 113u8, 90u8, 64u8, 53u8, + 140u8, 154u8, 176u8, 35u8, 12u8, 230u8, 76u8, 75u8, 241u8, 220u8, 235u8, 158u8, 141u8, + 22u8, 0u8, 155u8, 22u8, 220u8, 126u8, 25u8, 43u8, 242u8, 25u8, 191u8, 77u8, 150u8, + 182u8, 229u8, 213u8, 92u8, 183u8, 16u8, 209u8, 130u8, 144u8, 166u8, 125u8, 225u8, 44u8, + 239u8, 235u8, 198u8, 36u8, 176u8, 253u8, 212u8, 186u8, 103u8, 72u8, 30u8, 154u8, + ], + [ + 41u8, 209u8, 118u8, 146u8, 42u8, 16u8, 39u8, 98u8, 119u8, 185u8, 8u8, 7u8, 1u8, 134u8, + 161u8, 220u8, 229u8, 48u8, 40u8, 212u8, 187u8, 227u8, 212u8, 239u8, 210u8, 125u8, + 116u8, 190u8, 75u8, 186u8, 113u8, 40u8, 1u8, 158u8, 1u8, 119u8, 74u8, 169u8, 34u8, + 51u8, 163u8, 225u8, 238u8, 100u8, 64u8, 250u8, 65u8, 19u8, 208u8, 176u8, 13u8, 81u8, + 125u8, 251u8, 35u8, 248u8, 112u8, 146u8, 176u8, 77u8, 63u8, 193u8, 53u8, 165u8, + ], + [ + 6u8, 17u8, 68u8, 20u8, 87u8, 80u8, 158u8, 28u8, 211u8, 218u8, 53u8, 144u8, 79u8, 251u8, + 167u8, 154u8, 204u8, 217u8, 173u8, 86u8, 248u8, 222u8, 31u8, 189u8, 62u8, 206u8, 72u8, + 245u8, 234u8, 79u8, 163u8, 82u8, 46u8, 232u8, 11u8, 123u8, 185u8, 217u8, 156u8, 249u8, + 96u8, 44u8, 34u8, 120u8, 243u8, 13u8, 158u8, 11u8, 191u8, 51u8, 122u8, 101u8, 187u8, + 5u8, 170u8, 79u8, 211u8, 160u8, 69u8, 113u8, 136u8, 249u8, 94u8, 90u8, + ], + ], +}; diff --git a/programs/compressed-pda/src/verifying_keys/non-inclusion_26_4.rs b/programs/compressed-pda/src/verifying_keys/non-inclusion_26_4.rs new file mode 100644 index 0000000000..0d27fad076 --- /dev/null +++ b/programs/compressed-pda/src/verifying_keys/non-inclusion_26_4.rs @@ -0,0 +1,114 @@ +// This file is generated by xtask. Do not edit it manually. + +use groth16_solana::groth16::Groth16Verifyingkey; +pub const VERIFYINGKEY: Groth16Verifyingkey = Groth16Verifyingkey { + nr_pubinputs: 8usize, + vk_alpha_g1: [ + 29u8, 113u8, 29u8, 6u8, 131u8, 243u8, 55u8, 235u8, 192u8, 201u8, 211u8, 239u8, 51u8, 29u8, + 154u8, 76u8, 245u8, 225u8, 81u8, 164u8, 20u8, 184u8, 170u8, 54u8, 212u8, 206u8, 219u8, 3u8, + 172u8, 135u8, 81u8, 39u8, 34u8, 219u8, 142u8, 157u8, 153u8, 87u8, 148u8, 24u8, 172u8, 97u8, + 27u8, 132u8, 10u8, 243u8, 23u8, 158u8, 252u8, 208u8, 146u8, 197u8, 72u8, 126u8, 225u8, + 200u8, 77u8, 15u8, 38u8, 59u8, 18u8, 91u8, 251u8, 139u8, + ], + vk_beta_g2: [ + 3u8, 174u8, 186u8, 2u8, 169u8, 71u8, 109u8, 54u8, 42u8, 127u8, 129u8, 20u8, 211u8, 146u8, + 235u8, 131u8, 135u8, 229u8, 1u8, 131u8, 213u8, 36u8, 127u8, 203u8, 70u8, 95u8, 64u8, 226u8, + 76u8, 95u8, 217u8, 35u8, 33u8, 4u8, 142u8, 169u8, 68u8, 198u8, 252u8, 21u8, 119u8, 144u8, + 246u8, 144u8, 147u8, 77u8, 204u8, 64u8, 147u8, 178u8, 152u8, 38u8, 70u8, 90u8, 201u8, + 243u8, 207u8, 225u8, 234u8, 173u8, 103u8, 92u8, 146u8, 129u8, 14u8, 82u8, 169u8, 180u8, + 172u8, 20u8, 146u8, 138u8, 213u8, 124u8, 205u8, 147u8, 45u8, 133u8, 167u8, 190u8, 206u8, + 12u8, 255u8, 78u8, 209u8, 187u8, 41u8, 226u8, 235u8, 155u8, 184u8, 187u8, 122u8, 149u8, + 51u8, 198u8, 38u8, 162u8, 55u8, 169u8, 73u8, 112u8, 52u8, 143u8, 28u8, 134u8, 159u8, 232u8, + 188u8, 181u8, 51u8, 68u8, 31u8, 92u8, 162u8, 112u8, 98u8, 214u8, 186u8, 170u8, 244u8, + 237u8, 132u8, 190u8, 254u8, 234u8, 135u8, 205u8, + ], + vk_gamme_g2: [ + 34u8, 83u8, 62u8, 154u8, 6u8, 224u8, 137u8, 99u8, 186u8, 34u8, 58u8, 217u8, 31u8, 106u8, + 152u8, 129u8, 88u8, 237u8, 134u8, 209u8, 60u8, 34u8, 195u8, 8u8, 136u8, 115u8, 116u8, + 249u8, 40u8, 58u8, 89u8, 138u8, 3u8, 43u8, 177u8, 82u8, 16u8, 216u8, 238u8, 222u8, 251u8, + 192u8, 195u8, 215u8, 44u8, 6u8, 86u8, 204u8, 178u8, 122u8, 87u8, 73u8, 11u8, 64u8, 76u8, + 65u8, 55u8, 24u8, 191u8, 220u8, 57u8, 92u8, 89u8, 65u8, 40u8, 54u8, 35u8, 25u8, 96u8, + 166u8, 193u8, 23u8, 232u8, 197u8, 178u8, 232u8, 237u8, 58u8, 174u8, 239u8, 254u8, 123u8, + 56u8, 209u8, 65u8, 20u8, 68u8, 9u8, 43u8, 93u8, 40u8, 128u8, 5u8, 129u8, 245u8, 59u8, 5u8, + 88u8, 57u8, 84u8, 229u8, 85u8, 62u8, 49u8, 30u8, 130u8, 183u8, 187u8, 133u8, 82u8, 230u8, + 235u8, 20u8, 131u8, 66u8, 178u8, 94u8, 189u8, 12u8, 167u8, 30u8, 16u8, 188u8, 204u8, 206u8, + 170u8, 76u8, 55u8, + ], + vk_delta_g2: [ + 47u8, 151u8, 249u8, 47u8, 46u8, 133u8, 66u8, 4u8, 171u8, 96u8, 3u8, 137u8, 113u8, 251u8, + 118u8, 21u8, 216u8, 50u8, 175u8, 24u8, 247u8, 217u8, 88u8, 104u8, 176u8, 69u8, 110u8, 45u8, + 116u8, 166u8, 83u8, 9u8, 10u8, 237u8, 19u8, 178u8, 44u8, 14u8, 254u8, 48u8, 83u8, 221u8, + 207u8, 189u8, 77u8, 147u8, 68u8, 187u8, 20u8, 92u8, 41u8, 5u8, 65u8, 58u8, 15u8, 214u8, + 31u8, 254u8, 226u8, 52u8, 5u8, 8u8, 9u8, 189u8, 7u8, 81u8, 245u8, 67u8, 68u8, 167u8, 68u8, + 141u8, 215u8, 91u8, 198u8, 105u8, 165u8, 190u8, 223u8, 232u8, 50u8, 18u8, 197u8, 172u8, + 241u8, 116u8, 24u8, 95u8, 80u8, 115u8, 22u8, 92u8, 102u8, 3u8, 139u8, 184u8, 43u8, 18u8, + 177u8, 180u8, 135u8, 190u8, 226u8, 89u8, 91u8, 133u8, 160u8, 238u8, 18u8, 21u8, 204u8, + 32u8, 181u8, 223u8, 213u8, 53u8, 109u8, 93u8, 6u8, 131u8, 251u8, 68u8, 165u8, 108u8, 214u8, + 124u8, 231u8, 228u8, + ], + vk_ic: &[ + [ + 11u8, 28u8, 146u8, 228u8, 241u8, 38u8, 234u8, 22u8, 142u8, 29u8, 20u8, 152u8, 213u8, + 75u8, 189u8, 137u8, 211u8, 208u8, 189u8, 7u8, 176u8, 160u8, 167u8, 142u8, 171u8, 165u8, + 63u8, 156u8, 117u8, 27u8, 149u8, 86u8, 9u8, 72u8, 88u8, 92u8, 146u8, 133u8, 219u8, + 146u8, 60u8, 46u8, 74u8, 38u8, 25u8, 206u8, 138u8, 212u8, 230u8, 6u8, 76u8, 221u8, + 180u8, 142u8, 16u8, 152u8, 243u8, 101u8, 59u8, 79u8, 109u8, 200u8, 207u8, 209u8, + ], + [ + 6u8, 235u8, 156u8, 221u8, 137u8, 37u8, 178u8, 244u8, 153u8, 139u8, 16u8, 189u8, 68u8, + 89u8, 121u8, 151u8, 177u8, 231u8, 216u8, 39u8, 175u8, 169u8, 243u8, 181u8, 93u8, 89u8, + 187u8, 41u8, 241u8, 250u8, 38u8, 0u8, 15u8, 76u8, 198u8, 153u8, 67u8, 47u8, 247u8, + 68u8, 124u8, 31u8, 203u8, 171u8, 28u8, 19u8, 98u8, 108u8, 29u8, 196u8, 105u8, 216u8, + 38u8, 138u8, 21u8, 243u8, 6u8, 117u8, 60u8, 240u8, 130u8, 151u8, 79u8, 222u8, + ], + [ + 39u8, 105u8, 123u8, 26u8, 122u8, 63u8, 169u8, 111u8, 155u8, 101u8, 40u8, 138u8, 245u8, + 222u8, 122u8, 217u8, 37u8, 124u8, 55u8, 106u8, 206u8, 194u8, 25u8, 140u8, 175u8, 51u8, + 253u8, 233u8, 214u8, 39u8, 48u8, 29u8, 34u8, 226u8, 109u8, 159u8, 153u8, 175u8, 140u8, + 85u8, 124u8, 117u8, 7u8, 29u8, 153u8, 155u8, 156u8, 174u8, 79u8, 109u8, 35u8, 32u8, + 89u8, 64u8, 83u8, 142u8, 239u8, 167u8, 8u8, 134u8, 75u8, 220u8, 210u8, 48u8, + ], + [ + 15u8, 183u8, 131u8, 230u8, 7u8, 238u8, 186u8, 62u8, 93u8, 254u8, 167u8, 117u8, 199u8, + 139u8, 145u8, 159u8, 102u8, 178u8, 225u8, 196u8, 243u8, 216u8, 30u8, 181u8, 35u8, 57u8, + 54u8, 126u8, 235u8, 153u8, 171u8, 72u8, 29u8, 38u8, 92u8, 98u8, 24u8, 40u8, 59u8, + 164u8, 168u8, 181u8, 19u8, 241u8, 207u8, 143u8, 131u8, 140u8, 14u8, 77u8, 147u8, 127u8, + 161u8, 45u8, 31u8, 93u8, 163u8, 194u8, 89u8, 46u8, 121u8, 123u8, 30u8, 47u8, + ], + [ + 32u8, 5u8, 46u8, 147u8, 241u8, 49u8, 163u8, 28u8, 154u8, 254u8, 253u8, 63u8, 76u8, + 81u8, 25u8, 232u8, 107u8, 75u8, 34u8, 114u8, 232u8, 161u8, 161u8, 120u8, 189u8, 188u8, + 170u8, 144u8, 205u8, 99u8, 222u8, 210u8, 8u8, 109u8, 152u8, 145u8, 6u8, 208u8, 124u8, + 162u8, 34u8, 114u8, 123u8, 203u8, 175u8, 103u8, 108u8, 33u8, 240u8, 67u8, 222u8, 61u8, + 98u8, 236u8, 45u8, 13u8, 221u8, 170u8, 21u8, 210u8, 158u8, 145u8, 41u8, 21u8, + ], + [ + 30u8, 154u8, 108u8, 253u8, 219u8, 86u8, 192u8, 114u8, 49u8, 55u8, 68u8, 4u8, 35u8, + 155u8, 76u8, 221u8, 107u8, 221u8, 71u8, 213u8, 191u8, 60u8, 24u8, 35u8, 143u8, 107u8, + 91u8, 20u8, 106u8, 168u8, 124u8, 109u8, 12u8, 180u8, 132u8, 126u8, 247u8, 171u8, 219u8, + 178u8, 156u8, 137u8, 246u8, 197u8, 224u8, 145u8, 214u8, 227u8, 72u8, 55u8, 205u8, + 223u8, 39u8, 104u8, 186u8, 127u8, 12u8, 63u8, 7u8, 155u8, 96u8, 69u8, 216u8, 136u8, + ], + [ + 0u8, 63u8, 246u8, 148u8, 194u8, 178u8, 26u8, 134u8, 56u8, 63u8, 245u8, 57u8, 168u8, + 18u8, 90u8, 94u8, 140u8, 25u8, 64u8, 234u8, 250u8, 191u8, 57u8, 15u8, 55u8, 166u8, + 197u8, 195u8, 4u8, 92u8, 64u8, 145u8, 7u8, 227u8, 171u8, 234u8, 235u8, 14u8, 241u8, + 214u8, 183u8, 236u8, 228u8, 241u8, 183u8, 108u8, 221u8, 214u8, 170u8, 157u8, 72u8, + 181u8, 141u8, 149u8, 69u8, 86u8, 1u8, 130u8, 63u8, 120u8, 197u8, 41u8, 41u8, 53u8, + ], + [ + 46u8, 14u8, 2u8, 68u8, 231u8, 142u8, 114u8, 176u8, 42u8, 168u8, 10u8, 164u8, 7u8, + 208u8, 84u8, 98u8, 45u8, 127u8, 196u8, 129u8, 116u8, 161u8, 240u8, 87u8, 164u8, 147u8, + 222u8, 106u8, 29u8, 166u8, 141u8, 250u8, 5u8, 169u8, 197u8, 215u8, 204u8, 208u8, 199u8, + 112u8, 213u8, 40u8, 79u8, 180u8, 97u8, 208u8, 226u8, 230u8, 63u8, 236u8, 67u8, 11u8, + 69u8, 75u8, 174u8, 183u8, 33u8, 203u8, 246u8, 165u8, 32u8, 128u8, 197u8, 230u8, + ], + [ + 31u8, 179u8, 31u8, 74u8, 126u8, 8u8, 145u8, 25u8, 154u8, 185u8, 191u8, 33u8, 239u8, + 48u8, 158u8, 52u8, 54u8, 15u8, 69u8, 53u8, 205u8, 215u8, 193u8, 169u8, 227u8, 143u8, + 70u8, 100u8, 195u8, 153u8, 173u8, 205u8, 29u8, 233u8, 226u8, 22u8, 132u8, 90u8, 78u8, + 130u8, 217u8, 223u8, 152u8, 171u8, 200u8, 30u8, 21u8, 241u8, 119u8, 129u8, 114u8, 77u8, + 169u8, 16u8, 196u8, 46u8, 57u8, 178u8, 210u8, 32u8, 92u8, 111u8, 208u8, 193u8, + ], + ], +}; diff --git a/programs/compressed-pda/src/verifying_keys/non-inclusion_26_8.rs b/programs/compressed-pda/src/verifying_keys/non-inclusion_26_8.rs new file mode 100644 index 0000000000..cb1d0a20b5 --- /dev/null +++ b/programs/compressed-pda/src/verifying_keys/non-inclusion_26_8.rs @@ -0,0 +1,170 @@ +// This file is generated by xtask. Do not edit it manually. + +use groth16_solana::groth16::Groth16Verifyingkey; +pub const VERIFYINGKEY: Groth16Verifyingkey = Groth16Verifyingkey { + nr_pubinputs: 16usize, + vk_alpha_g1: [ + 38u8, 161u8, 137u8, 44u8, 234u8, 57u8, 107u8, 119u8, 194u8, 15u8, 7u8, 116u8, 143u8, 109u8, + 70u8, 149u8, 146u8, 96u8, 216u8, 109u8, 171u8, 198u8, 244u8, 44u8, 236u8, 77u8, 206u8, + 15u8, 169u8, 36u8, 169u8, 183u8, 37u8, 1u8, 44u8, 125u8, 82u8, 209u8, 47u8, 226u8, 25u8, + 77u8, 163u8, 233u8, 30u8, 31u8, 151u8, 225u8, 128u8, 93u8, 61u8, 115u8, 102u8, 46u8, 167u8, + 35u8, 245u8, 155u8, 52u8, 205u8, 60u8, 166u8, 52u8, 21u8, + ], + vk_beta_g2: [ + 9u8, 185u8, 173u8, 194u8, 94u8, 140u8, 12u8, 254u8, 242u8, 120u8, 100u8, 18u8, 241u8, + 103u8, 115u8, 221u8, 248u8, 27u8, 37u8, 67u8, 151u8, 53u8, 73u8, 104u8, 89u8, 164u8, 33u8, + 117u8, 83u8, 179u8, 157u8, 44u8, 33u8, 5u8, 7u8, 67u8, 140u8, 238u8, 14u8, 219u8, 240u8, + 55u8, 185u8, 41u8, 226u8, 150u8, 244u8, 25u8, 103u8, 87u8, 255u8, 68u8, 198u8, 241u8, + 205u8, 40u8, 130u8, 203u8, 153u8, 42u8, 238u8, 249u8, 120u8, 63u8, 28u8, 114u8, 232u8, + 208u8, 40u8, 20u8, 46u8, 82u8, 133u8, 34u8, 71u8, 220u8, 2u8, 29u8, 185u8, 11u8, 235u8, + 77u8, 22u8, 16u8, 206u8, 49u8, 167u8, 161u8, 230u8, 114u8, 243u8, 37u8, 5u8, 22u8, 20u8, + 182u8, 18u8, 160u8, 27u8, 166u8, 16u8, 39u8, 151u8, 255u8, 147u8, 154u8, 133u8, 190u8, + 211u8, 10u8, 194u8, 103u8, 247u8, 158u8, 49u8, 170u8, 240u8, 44u8, 19u8, 39u8, 213u8, 33u8, + 12u8, 141u8, 200u8, 211u8, 228u8, 234u8, + ], + vk_gamme_g2: [ + 22u8, 173u8, 108u8, 70u8, 5u8, 219u8, 202u8, 3u8, 176u8, 100u8, 126u8, 26u8, 135u8, 183u8, + 41u8, 208u8, 242u8, 202u8, 97u8, 108u8, 45u8, 206u8, 139u8, 7u8, 103u8, 193u8, 233u8, + 232u8, 14u8, 213u8, 121u8, 45u8, 24u8, 76u8, 142u8, 73u8, 211u8, 60u8, 225u8, 144u8, 52u8, + 0u8, 20u8, 112u8, 26u8, 217u8, 122u8, 105u8, 245u8, 184u8, 82u8, 1u8, 75u8, 161u8, 183u8, + 121u8, 227u8, 10u8, 96u8, 0u8, 125u8, 236u8, 231u8, 204u8, 11u8, 4u8, 160u8, 186u8, 184u8, + 252u8, 44u8, 70u8, 175u8, 202u8, 130u8, 58u8, 222u8, 1u8, 110u8, 93u8, 165u8, 220u8, 107u8, + 2u8, 195u8, 80u8, 252u8, 125u8, 65u8, 244u8, 39u8, 186u8, 98u8, 214u8, 253u8, 155u8, 10u8, + 129u8, 28u8, 246u8, 151u8, 2u8, 185u8, 230u8, 173u8, 133u8, 5u8, 175u8, 10u8, 218u8, 87u8, + 82u8, 186u8, 66u8, 228u8, 151u8, 33u8, 196u8, 32u8, 55u8, 145u8, 56u8, 91u8, 31u8, 229u8, + 83u8, 31u8, 186u8, + ], + vk_delta_g2: [ + 11u8, 11u8, 79u8, 24u8, 82u8, 214u8, 220u8, 229u8, 30u8, 32u8, 124u8, 9u8, 92u8, 147u8, + 211u8, 220u8, 234u8, 62u8, 238u8, 56u8, 92u8, 109u8, 123u8, 219u8, 12u8, 133u8, 184u8, + 40u8, 166u8, 203u8, 89u8, 18u8, 36u8, 2u8, 161u8, 125u8, 224u8, 44u8, 199u8, 158u8, 3u8, + 158u8, 9u8, 169u8, 21u8, 234u8, 113u8, 177u8, 100u8, 255u8, 87u8, 137u8, 123u8, 85u8, + 129u8, 47u8, 179u8, 85u8, 173u8, 64u8, 215u8, 163u8, 53u8, 179u8, 20u8, 244u8, 174u8, + 154u8, 146u8, 237u8, 26u8, 207u8, 68u8, 144u8, 27u8, 6u8, 206u8, 111u8, 81u8, 98u8, 134u8, + 42u8, 196u8, 194u8, 244u8, 43u8, 139u8, 27u8, 232u8, 25u8, 161u8, 67u8, 80u8, 112u8, 66u8, + 105u8, 42u8, 64u8, 15u8, 87u8, 229u8, 88u8, 71u8, 84u8, 27u8, 224u8, 63u8, 3u8, 108u8, + 223u8, 161u8, 137u8, 66u8, 203u8, 164u8, 66u8, 237u8, 240u8, 242u8, 176u8, 228u8, 118u8, + 96u8, 50u8, 234u8, 151u8, 105u8, 158u8, + ], + vk_ic: &[ + [ + 11u8, 106u8, 84u8, 167u8, 61u8, 17u8, 212u8, 187u8, 210u8, 22u8, 226u8, 116u8, 134u8, + 226u8, 99u8, 26u8, 158u8, 162u8, 35u8, 127u8, 12u8, 148u8, 163u8, 195u8, 160u8, 214u8, + 225u8, 24u8, 223u8, 133u8, 233u8, 87u8, 10u8, 85u8, 26u8, 91u8, 93u8, 162u8, 54u8, 5u8, + 121u8, 108u8, 48u8, 164u8, 47u8, 69u8, 64u8, 241u8, 179u8, 201u8, 57u8, 60u8, 90u8, + 201u8, 87u8, 96u8, 83u8, 90u8, 160u8, 177u8, 237u8, 25u8, 148u8, 50u8, + ], + [ + 20u8, 108u8, 155u8, 171u8, 246u8, 46u8, 181u8, 250u8, 133u8, 185u8, 136u8, 198u8, 36u8, + 179u8, 36u8, 168u8, 20u8, 135u8, 142u8, 62u8, 23u8, 10u8, 3u8, 236u8, 225u8, 214u8, + 84u8, 11u8, 103u8, 143u8, 202u8, 7u8, 8u8, 101u8, 180u8, 86u8, 236u8, 209u8, 63u8, + 211u8, 73u8, 115u8, 84u8, 173u8, 170u8, 249u8, 50u8, 136u8, 210u8, 91u8, 2u8, 170u8, + 189u8, 29u8, 234u8, 21u8, 254u8, 53u8, 73u8, 166u8, 110u8, 6u8, 124u8, 130u8, + ], + [ + 19u8, 37u8, 80u8, 40u8, 167u8, 118u8, 98u8, 105u8, 30u8, 236u8, 207u8, 202u8, 149u8, + 39u8, 242u8, 224u8, 39u8, 222u8, 90u8, 171u8, 21u8, 140u8, 226u8, 58u8, 8u8, 196u8, + 240u8, 121u8, 98u8, 206u8, 16u8, 76u8, 9u8, 83u8, 200u8, 155u8, 113u8, 44u8, 162u8, + 196u8, 47u8, 23u8, 121u8, 114u8, 0u8, 74u8, 123u8, 210u8, 212u8, 50u8, 134u8, 237u8, + 142u8, 58u8, 181u8, 65u8, 192u8, 52u8, 231u8, 179u8, 204u8, 108u8, 253u8, 165u8, + ], + [ + 46u8, 39u8, 134u8, 222u8, 161u8, 89u8, 60u8, 132u8, 190u8, 214u8, 38u8, 84u8, 144u8, + 195u8, 234u8, 106u8, 80u8, 76u8, 199u8, 100u8, 186u8, 140u8, 243u8, 100u8, 108u8, 40u8, + 214u8, 190u8, 244u8, 69u8, 69u8, 137u8, 2u8, 39u8, 246u8, 8u8, 59u8, 235u8, 91u8, + 243u8, 206u8, 75u8, 113u8, 77u8, 232u8, 209u8, 216u8, 121u8, 162u8, 77u8, 124u8, 19u8, + 253u8, 217u8, 42u8, 143u8, 160u8, 212u8, 132u8, 211u8, 205u8, 116u8, 46u8, 229u8, + ], + [ + 47u8, 212u8, 104u8, 38u8, 135u8, 145u8, 176u8, 33u8, 39u8, 196u8, 190u8, 59u8, 31u8, + 103u8, 108u8, 133u8, 88u8, 23u8, 50u8, 231u8, 67u8, 240u8, 30u8, 177u8, 21u8, 4u8, + 68u8, 30u8, 23u8, 244u8, 184u8, 63u8, 25u8, 176u8, 224u8, 151u8, 99u8, 15u8, 224u8, + 196u8, 0u8, 0u8, 169u8, 166u8, 207u8, 18u8, 19u8, 73u8, 58u8, 251u8, 122u8, 134u8, + 151u8, 43u8, 101u8, 133u8, 237u8, 179u8, 84u8, 103u8, 136u8, 4u8, 172u8, 207u8, + ], + [ + 8u8, 125u8, 185u8, 14u8, 85u8, 111u8, 10u8, 183u8, 177u8, 31u8, 166u8, 86u8, 18u8, + 64u8, 186u8, 19u8, 227u8, 163u8, 237u8, 195u8, 59u8, 109u8, 163u8, 42u8, 35u8, 65u8, + 61u8, 156u8, 8u8, 36u8, 9u8, 77u8, 20u8, 10u8, 42u8, 42u8, 136u8, 81u8, 210u8, 206u8, + 213u8, 110u8, 113u8, 172u8, 121u8, 161u8, 228u8, 165u8, 122u8, 237u8, 165u8, 97u8, + 255u8, 110u8, 63u8, 245u8, 103u8, 152u8, 90u8, 44u8, 70u8, 79u8, 6u8, 133u8, + ], + [ + 5u8, 182u8, 78u8, 190u8, 112u8, 179u8, 232u8, 64u8, 252u8, 40u8, 251u8, 165u8, 173u8, + 246u8, 134u8, 169u8, 45u8, 25u8, 198u8, 164u8, 139u8, 109u8, 87u8, 104u8, 23u8, 190u8, + 5u8, 150u8, 182u8, 144u8, 146u8, 182u8, 0u8, 14u8, 118u8, 138u8, 60u8, 158u8, 244u8, + 159u8, 179u8, 62u8, 65u8, 48u8, 242u8, 180u8, 65u8, 255u8, 251u8, 58u8, 7u8, 44u8, + 75u8, 90u8, 136u8, 190u8, 101u8, 10u8, 50u8, 115u8, 22u8, 221u8, 252u8, 191u8, + ], + [ + 38u8, 4u8, 137u8, 135u8, 239u8, 25u8, 139u8, 243u8, 148u8, 5u8, 89u8, 230u8, 104u8, + 69u8, 132u8, 34u8, 195u8, 168u8, 88u8, 215u8, 116u8, 182u8, 8u8, 229u8, 205u8, 56u8, + 5u8, 144u8, 210u8, 220u8, 239u8, 207u8, 36u8, 196u8, 235u8, 146u8, 49u8, 184u8, 183u8, + 162u8, 107u8, 226u8, 73u8, 233u8, 101u8, 37u8, 233u8, 236u8, 20u8, 173u8, 11u8, 8u8, + 62u8, 147u8, 182u8, 250u8, 137u8, 232u8, 94u8, 24u8, 225u8, 135u8, 209u8, 49u8, + ], + [ + 42u8, 220u8, 46u8, 1u8, 197u8, 222u8, 198u8, 236u8, 221u8, 23u8, 230u8, 193u8, 231u8, + 93u8, 243u8, 193u8, 203u8, 72u8, 194u8, 230u8, 13u8, 136u8, 239u8, 45u8, 195u8, 15u8, + 87u8, 70u8, 151u8, 102u8, 228u8, 208u8, 40u8, 133u8, 25u8, 165u8, 200u8, 91u8, 121u8, + 252u8, 246u8, 48u8, 142u8, 111u8, 15u8, 223u8, 127u8, 240u8, 14u8, 19u8, 200u8, 218u8, + 56u8, 166u8, 213u8, 66u8, 198u8, 73u8, 128u8, 10u8, 172u8, 208u8, 24u8, 40u8, + ], + [ + 35u8, 191u8, 12u8, 164u8, 195u8, 164u8, 165u8, 54u8, 158u8, 82u8, 144u8, 62u8, 105u8, + 54u8, 143u8, 204u8, 144u8, 208u8, 48u8, 189u8, 157u8, 206u8, 94u8, 119u8, 86u8, 106u8, + 8u8, 161u8, 200u8, 55u8, 102u8, 73u8, 14u8, 191u8, 10u8, 29u8, 71u8, 114u8, 41u8, 79u8, + 152u8, 120u8, 81u8, 201u8, 64u8, 72u8, 150u8, 249u8, 160u8, 185u8, 241u8, 80u8, 240u8, + 110u8, 15u8, 250u8, 206u8, 143u8, 42u8, 3u8, 104u8, 152u8, 181u8, 211u8, + ], + [ + 41u8, 136u8, 129u8, 154u8, 64u8, 99u8, 81u8, 223u8, 115u8, 66u8, 177u8, 91u8, 123u8, + 157u8, 206u8, 225u8, 84u8, 159u8, 245u8, 234u8, 131u8, 226u8, 37u8, 23u8, 105u8, 245u8, + 211u8, 10u8, 43u8, 166u8, 110u8, 1u8, 3u8, 11u8, 182u8, 19u8, 156u8, 181u8, 251u8, + 221u8, 2u8, 160u8, 212u8, 167u8, 123u8, 139u8, 101u8, 18u8, 205u8, 138u8, 232u8, 172u8, + 174u8, 45u8, 157u8, 68u8, 20u8, 254u8, 248u8, 161u8, 173u8, 169u8, 187u8, 42u8, + ], + [ + 38u8, 155u8, 176u8, 90u8, 27u8, 168u8, 58u8, 52u8, 253u8, 144u8, 247u8, 140u8, 141u8, + 255u8, 68u8, 192u8, 127u8, 43u8, 188u8, 197u8, 200u8, 234u8, 62u8, 145u8, 42u8, 76u8, + 236u8, 143u8, 255u8, 249u8, 205u8, 95u8, 42u8, 90u8, 241u8, 23u8, 131u8, 141u8, 226u8, + 165u8, 149u8, 145u8, 211u8, 150u8, 168u8, 127u8, 160u8, 129u8, 112u8, 72u8, 149u8, + 142u8, 168u8, 108u8, 81u8, 39u8, 68u8, 59u8, 138u8, 182u8, 155u8, 199u8, 179u8, 184u8, + ], + [ + 15u8, 24u8, 189u8, 142u8, 243u8, 23u8, 111u8, 150u8, 76u8, 38u8, 117u8, 247u8, 239u8, + 50u8, 94u8, 45u8, 251u8, 1u8, 87u8, 181u8, 209u8, 250u8, 226u8, 148u8, 45u8, 59u8, + 100u8, 138u8, 15u8, 50u8, 250u8, 97u8, 13u8, 152u8, 45u8, 112u8, 57u8, 253u8, 246u8, + 208u8, 142u8, 81u8, 145u8, 193u8, 163u8, 231u8, 141u8, 151u8, 134u8, 96u8, 206u8, 46u8, + 52u8, 148u8, 132u8, 48u8, 172u8, 216u8, 35u8, 85u8, 38u8, 236u8, 88u8, 62u8, + ], + [ + 0u8, 42u8, 41u8, 213u8, 222u8, 68u8, 153u8, 171u8, 245u8, 36u8, 3u8, 143u8, 198u8, + 255u8, 96u8, 27u8, 14u8, 72u8, 75u8, 218u8, 99u8, 226u8, 198u8, 224u8, 252u8, 123u8, + 127u8, 21u8, 14u8, 232u8, 25u8, 6u8, 2u8, 8u8, 34u8, 180u8, 116u8, 14u8, 121u8, 141u8, + 175u8, 237u8, 73u8, 11u8, 53u8, 199u8, 236u8, 162u8, 83u8, 8u8, 138u8, 89u8, 254u8, + 150u8, 54u8, 181u8, 126u8, 150u8, 185u8, 69u8, 35u8, 85u8, 246u8, 169u8, + ], + [ + 12u8, 80u8, 100u8, 106u8, 193u8, 139u8, 145u8, 78u8, 44u8, 168u8, 178u8, 178u8, 90u8, + 115u8, 227u8, 38u8, 235u8, 42u8, 240u8, 165u8, 114u8, 106u8, 151u8, 109u8, 178u8, 62u8, + 49u8, 3u8, 212u8, 253u8, 104u8, 149u8, 10u8, 198u8, 47u8, 241u8, 63u8, 35u8, 251u8, + 23u8, 31u8, 155u8, 96u8, 167u8, 43u8, 11u8, 251u8, 121u8, 18u8, 101u8, 67u8, 94u8, + 203u8, 8u8, 193u8, 14u8, 0u8, 179u8, 100u8, 185u8, 207u8, 179u8, 175u8, 28u8, + ], + [ + 39u8, 216u8, 71u8, 92u8, 210u8, 252u8, 201u8, 106u8, 141u8, 168u8, 132u8, 2u8, 37u8, + 127u8, 113u8, 26u8, 82u8, 27u8, 19u8, 145u8, 164u8, 135u8, 12u8, 23u8, 216u8, 144u8, + 93u8, 88u8, 73u8, 214u8, 109u8, 40u8, 11u8, 93u8, 224u8, 62u8, 0u8, 47u8, 228u8, 126u8, + 239u8, 157u8, 36u8, 88u8, 96u8, 58u8, 133u8, 120u8, 251u8, 240u8, 29u8, 54u8, 200u8, + 192u8, 79u8, 22u8, 155u8, 130u8, 245u8, 198u8, 53u8, 115u8, 119u8, 100u8, + ], + [ + 24u8, 250u8, 116u8, 159u8, 16u8, 137u8, 185u8, 242u8, 130u8, 82u8, 156u8, 126u8, 156u8, + 73u8, 165u8, 76u8, 51u8, 194u8, 96u8, 97u8, 51u8, 239u8, 241u8, 146u8, 64u8, 104u8, + 42u8, 132u8, 254u8, 101u8, 149u8, 142u8, 20u8, 166u8, 189u8, 147u8, 146u8, 27u8, 133u8, + 77u8, 0u8, 157u8, 45u8, 178u8, 22u8, 68u8, 248u8, 229u8, 197u8, 132u8, 27u8, 9u8, 96u8, + 225u8, 252u8, 253u8, 60u8, 157u8, 188u8, 212u8, 210u8, 221u8, 44u8, 68u8, + ], + ], +}; diff --git a/programs/compressed-pda/tests/test.rs b/programs/compressed-pda/tests/test.rs index e3c5a4ac0b..32f5b7e372 100644 --- a/programs/compressed-pda/tests/test.rs +++ b/programs/compressed-pda/tests/test.rs @@ -12,7 +12,7 @@ use anchor_lang::AnchorDeserialize; use circuitlib_rs::{ gnark::{ constants::{INCLUSION_PATH, SERVER_ADDRESS}, - helpers::{health_check, spawn_gnark_server}, + helpers::spawn_gnark_server, inclusion_json_formatter::InclusionJsonStruct, proof_helpers::{compress_proof, deserialize_gnark_proof_json, proof_from_json_struct}, }, @@ -26,23 +26,41 @@ use num_traits::ops::bytes::FromBytes; use psp_compressed_pda::{ compressed_account::{derive_address, CompressedAccount, CompressedAccountWithMerkleContext}, event::PublicTransactionEvent, - sdk::create_execute_compressed_instruction, + sdk::{create_execute_compressed_instruction, get_compressed_sol_pda}, utils::CompressedProof, - ErrorCode, + CompressedSolPda, ErrorCode, }; use reqwest::Client; use solana_cli_output::CliAccount; use solana_program_test::ProgramTestContext; use solana_sdk::{ - instruction::InstructionError, pubkey::Pubkey, signature::Keypair, signer::Signer, + instruction::{Instruction, InstructionError}, + pubkey::Pubkey, + signature::Keypair, + signer::Signer, transaction::Transaction, }; use tokio::fs::write as async_write; // TODO: use lazy_static to spawn the server once +async fn init_mock_indexer() -> MockIndexer { + let env: light_test_utils::test_env::EnvWithAccounts = + setup_test_programs_with_accounts().await; + let context = env.context; + let payer = context.payer.insecure_clone(); + let merkle_tree_pubkey = env.merkle_tree_pubkey; + let indexed_array_pubkey = env.indexed_array_pubkey; + MockIndexer::new( + merkle_tree_pubkey, + indexed_array_pubkey, + payer.insecure_clone(), + ) + .await +} + /// Tests Execute compressed transaction: -/// 1. should succeed: with out compressed account(0 lamports), no in compressed account +/// 1. should succeed: without compressed account(0 lamports), no in compressed account /// 2. should fail: in compressed account and invalid zkp /// 3. should fail: in compressed account and invalid signer /// 4. should succeed: in compressed account inserted in (1.) and valid zkp @@ -57,12 +75,8 @@ async fn test_execute_compressed_transaction() { let merkle_tree_pubkey = env.merkle_tree_pubkey; let indexed_array_pubkey = env.indexed_array_pubkey; - let mock_indexer = MockIndexer::new( - merkle_tree_pubkey, - indexed_array_pubkey, - payer.insecure_clone(), - None, - ); + + let mut mock_indexer = init_mock_indexer().await; let output_compressed_accounts = vec![CompressedAccount { lamports: 0, @@ -83,13 +97,16 @@ async fn test_execute_compressed_transaction() { &Vec::new(), &Vec::new(), &Vec::new(), - &vec![merkle_tree_pubkey], - &vec![0u16], + &[merkle_tree_pubkey], + &[0u16], &Vec::new(), &Vec::new(), &Vec::new(), &Vec::new(), &proof_mock, + None, + false, + None, ); // TODO: add function to create_send_transaction_update_indexer @@ -97,15 +114,14 @@ async fn test_execute_compressed_transaction() { &[instruction], Some(&payer_pubkey), &[&payer], - context.last_blockhash, + context.get_new_latest_blockhash().await.unwrap(), ); let res = solana_program_test::BanksClient::process_transaction_with_metadata( &mut context.banks_client, transaction, ) .await; - // Wait until now to reduce startup lag by prover server - let mut mock_indexer = mock_indexer.await; + mock_indexer.add_lamport_compressed_accounts( res.unwrap() .metadata @@ -128,16 +144,19 @@ async fn test_execute_compressed_transaction() { &payer_pubkey, &input_compressed_accounts, &output_compressed_accounts, - &vec![merkle_tree_pubkey], - &vec![0u32], - &vec![indexed_array_pubkey], - &vec![merkle_tree_pubkey], - &vec![0u16], + &[merkle_tree_pubkey], + &[0u32], + &[indexed_array_pubkey], + &[merkle_tree_pubkey], + &[0u16], &Vec::new(), &Vec::new(), &Vec::new(), &Vec::new(), &proof_mock, + None, + false, + None, ); let res = @@ -156,16 +175,19 @@ async fn test_execute_compressed_transaction() { &payer_pubkey, &invalid_signer_compressed_accounts, &output_compressed_accounts, - &vec![merkle_tree_pubkey], - &vec![0u32], - &vec![indexed_array_pubkey], - &vec![merkle_tree_pubkey], - &vec![0u16], + &[merkle_tree_pubkey], + &[0u32], + &[indexed_array_pubkey], + &[merkle_tree_pubkey], + &[0u16], &Vec::new(), &Vec::new(), &Vec::new(), &Vec::new(), &proof_mock, + None, + false, + None, ); let res = @@ -193,22 +215,25 @@ async fn test_execute_compressed_transaction() { &payer_pubkey, &input_compressed_accounts, &output_compressed_accounts, - &vec![merkle_tree_pubkey], - &vec![0u32], - &vec![indexed_array_pubkey], - &vec![merkle_tree_pubkey], + &[merkle_tree_pubkey], + &[0u32], + &[indexed_array_pubkey], + &[merkle_tree_pubkey], &root_indices, &Vec::new(), &Vec::new(), &Vec::new(), &Vec::new(), &proof, + None, + false, + None, ); let transaction = Transaction::new_signed_with_payer( &[instruction], Some(&payer_pubkey), &[&payer], - context.last_blockhash, + context.get_new_latest_blockhash().await.unwrap(), ); println!("Transaction with zkp -------------------------"); @@ -239,16 +264,19 @@ async fn test_execute_compressed_transaction() { &payer_pubkey, &input_compressed_accounts, &output_compressed_accounts, - &vec![merkle_tree_pubkey], - &vec![0u32], - &vec![indexed_array_pubkey], - &vec![merkle_tree_pubkey], + &[merkle_tree_pubkey], + &[0u32], + &[indexed_array_pubkey], + &[merkle_tree_pubkey], &root_indices, &Vec::new(), &Vec::new(), &Vec::new(), &Vec::new(), &proof, + None, + false, + None, ); let res = create_and_send_transaction(&mut context, &[instruction], &payer.pubkey(), &[&payer]).await; @@ -264,16 +292,19 @@ async fn test_execute_compressed_transaction() { &payer_pubkey, &input_compressed_accounts, &output_compressed_accounts, - &vec![merkle_tree_pubkey], - &vec![1u32], - &vec![indexed_array_pubkey], - &vec![merkle_tree_pubkey], + &[merkle_tree_pubkey], + &[1u32], + &[indexed_array_pubkey], + &[merkle_tree_pubkey], &root_indices, &Vec::new(), &Vec::new(), &Vec::new(), &Vec::new(), &proof, + None, + false, + None, ); let res = create_and_send_transaction(&mut context, &[instruction], &payer.pubkey(), &[&payer]).await; @@ -294,19 +325,16 @@ async fn test_with_address() { let merkle_tree_pubkey = env.merkle_tree_pubkey; let indexed_array_pubkey = env.indexed_array_pubkey; - let mock_indexer = MockIndexer::new( - merkle_tree_pubkey, - indexed_array_pubkey, - payer.insecure_clone(), - None, - ); + + let mut mock_indexer = init_mock_indexer().await; + let address_seed = [1u8; 32]; let derived_address = derive_address(&env.address_merkle_tree_pubkey, &address_seed).unwrap(); let output_compressed_accounts = vec![CompressedAccount { lamports: 0, owner: payer_pubkey, data: None, - address: Some(derived_address), // this should not be sent, only derived onchain + address: Some(derived_address), // this should not be sent, only derived on-chain }]; let proof_mock = CompressedProof { a: [0u8; 32], @@ -321,20 +349,23 @@ async fn test_with_address() { &Vec::new(), &Vec::new(), &Vec::new(), - &vec![merkle_tree_pubkey], - &vec![0u16], + &[merkle_tree_pubkey], + &[0u16], &Vec::new(), &Vec::new(), &Vec::new(), &Vec::new(), &proof_mock, + None, + false, + None, ); let transaction = Transaction::new_signed_with_payer( &[instruction], Some(&payer_pubkey), &[&payer], - context.last_blockhash, + context.get_new_latest_blockhash().await.unwrap(), ); let res = solana_program_test::BanksClient::process_transaction_with_metadata( &mut context.banks_client, @@ -356,28 +387,30 @@ async fn test_with_address() { &Vec::new(), &Vec::new(), &Vec::new(), - &vec![merkle_tree_pubkey], - &vec![0u16], - &vec![0u16], - &vec![env.address_merkle_tree_queue_pubkey], - &vec![env.address_merkle_tree_pubkey], - &vec![address_seed], + &[merkle_tree_pubkey], + &[0u16], + &[0u16], + &[env.address_merkle_tree_queue_pubkey], + &[env.address_merkle_tree_pubkey], + &[address_seed], &proof_mock, + None, + false, + None, ); let transaction = Transaction::new_signed_with_payer( &[instruction], Some(&payer_pubkey), &[&payer], - context.last_blockhash, + context.get_new_latest_blockhash().await.unwrap(), ); let res = solana_program_test::BanksClient::process_transaction_with_metadata( &mut context.banks_client, transaction, ) .await; - // Wait until now to reduce startup lag by prover server - let mut mock_indexer = mock_indexer.await; + mock_indexer.add_lamport_compressed_accounts( res.unwrap() .metadata @@ -420,22 +453,25 @@ async fn test_with_address() { &payer_pubkey, &input_compressed_accounts, &output_compressed_accounts, - &vec![merkle_tree_pubkey], - &vec![0u32], - &vec![indexed_array_pubkey], - &vec![merkle_tree_pubkey], + &[merkle_tree_pubkey], + &[0u32], + &[indexed_array_pubkey], + &[merkle_tree_pubkey], &root_indices, &Vec::new(), &Vec::new(), &Vec::new(), &Vec::new(), &proof, + None, + false, + None, ); let transaction = Transaction::new_signed_with_payer( &[instruction], Some(&payer_pubkey), &[&payer], - context.last_blockhash, + context.get_new_latest_blockhash().await.unwrap(), ); println!("Transaction with zkp -------------------------"); @@ -466,6 +502,318 @@ async fn test_with_address() { recipient_pubkey ); } +use anchor_lang::{InstructionData, ToAccountMetas}; +use circuitlib_rs::gnark::helpers::ProofType; + +#[tokio::test] +async fn test_with_compression() { + let env: light_test_utils::test_env::EnvWithAccounts = + setup_test_programs_with_accounts().await; + let mut context = env.context; + let payer = context.payer.insecure_clone(); + + let payer_pubkey = payer.pubkey(); + + let merkle_tree_pubkey = env.merkle_tree_pubkey; + let indexed_array_pubkey = env.indexed_array_pubkey; + let mock_indexer = MockIndexer::new( + merkle_tree_pubkey, + indexed_array_pubkey, + payer.insecure_clone(), + ); + let instruction_data = psp_compressed_pda::instruction::InitCompressSolPda {}; + let accounts = psp_compressed_pda::accounts::InitializeCompressedSolPda { + fee_payer: payer.pubkey(), + compressed_sol_pda: get_compressed_sol_pda(), + system_program: anchor_lang::solana_program::system_program::ID, + }; + let instruction = Instruction { + program_id: psp_compressed_pda::ID, + accounts: accounts.to_account_metas(Some(true)), + data: instruction_data.data(), + }; + create_and_send_transaction(&mut context, &[instruction], &payer_pubkey, &[&payer]) + .await + .unwrap(); + + let compress_amount = 1_000_000; + let output_compressed_accounts = vec![CompressedAccount { + lamports: compress_amount, + owner: payer_pubkey, + data: None, + address: None, // this should not be sent, only derived on-chain + }]; + let proof_mock = CompressedProof { + a: [0u8; 32], + b: [0u8; 64], + c: [0u8; 32], + }; + + let instruction = create_execute_compressed_instruction( + &payer_pubkey, + &Vec::new(), + &output_compressed_accounts, + &Vec::new(), + &Vec::new(), + &Vec::new(), + &[merkle_tree_pubkey], + &[0u16], + &Vec::new(), + &Vec::new(), + &Vec::new(), + &Vec::new(), + &proof_mock, + Some(compress_amount), + false, + None, + ); + + let transaction = Transaction::new_signed_with_payer( + &[instruction], + Some(&payer_pubkey), + &[&payer], + context.get_new_latest_blockhash().await.unwrap(), + ); + let res = solana_program_test::BanksClient::process_transaction_with_metadata( + &mut context.banks_client, + transaction, + ) + .await + .unwrap(); + // should fail because of insufficient input funds + assert_eq!( + res.result, + Err(solana_sdk::transaction::TransactionError::InstructionError( + 0, + InstructionError::Custom(ErrorCode::ComputeOutputSumFailed.into()) + )) + ); + let instruction = create_execute_compressed_instruction( + &payer_pubkey, + &Vec::new(), + &output_compressed_accounts, + &Vec::new(), + &Vec::new(), + &Vec::new(), + &[merkle_tree_pubkey], + &[0u16], + &Vec::new(), + &Vec::new(), + &Vec::new(), + &Vec::new(), + &proof_mock, + None, + true, + None, + ); + + let transaction = Transaction::new_signed_with_payer( + &[instruction], + Some(&payer_pubkey), + &[&payer], + context.get_new_latest_blockhash().await.unwrap(), + ); + let res = solana_program_test::BanksClient::process_transaction_with_metadata( + &mut context.banks_client, + transaction, + ) + .await + .unwrap(); + // should fail because of insufficient decompress amount funds + assert_eq!( + res.result, + Err(solana_sdk::transaction::TransactionError::InstructionError( + 0, + InstructionError::Custom(ErrorCode::ComputeOutputSumFailed.into()) + )) + ); + + let instruction = create_execute_compressed_instruction( + &payer_pubkey, + &Vec::new(), + &output_compressed_accounts, + &Vec::new(), + &Vec::new(), + &Vec::new(), + &[merkle_tree_pubkey], + &[0u16], + &Vec::new(), + &Vec::new(), + &Vec::new(), + &Vec::new(), + &proof_mock, + Some(compress_amount), + true, + None, + ); + + let transaction = Transaction::new_signed_with_payer( + &[instruction], + Some(&payer_pubkey), + &[&payer], + context.get_new_latest_blockhash().await.unwrap(), + ); + let res = solana_program_test::BanksClient::process_transaction_with_metadata( + &mut context.banks_client, + transaction, + ) + .await + .unwrap(); + + let compressed_sol_pda_balance = context + .banks_client + .get_account(get_compressed_sol_pda()) + .await + .unwrap() + .unwrap() + .lamports; + let rent = context.banks_client.get_rent().await.unwrap(); + let rent = rent.minimum_balance(CompressedSolPda::LEN); + assert_eq!( + compressed_sol_pda_balance, + compress_amount + rent, + "balance of compressed sol pda insufficient, compress sol failed" + ); + + // Wait until now to reduce startup lag by prover server + let mut mock_indexer = mock_indexer.await; + mock_indexer + .add_lamport_compressed_accounts(res.metadata.unwrap().return_data.unwrap().data.to_vec()); + assert_eq!(mock_indexer.compressed_accounts.len(), 1); + assert_eq!( + mock_indexer.compressed_accounts[0] + .compressed_account + .address, + None + ); + let compressed_account_with_context = mock_indexer.compressed_accounts[0].clone(); + let (root_indices, proof) = mock_indexer + .create_proof_for_compressed_accounts( + &[compressed_account_with_context + .compressed_account + .hash( + &merkle_tree_pubkey, + &compressed_account_with_context.leaf_index, + ) + .unwrap()], + &mut context, + ) + .await; + let input_compressed_accounts = vec![compressed_account_with_context.compressed_account]; + let recipient_pubkey = Pubkey::new_unique(); + let output_compressed_accounts = vec![CompressedAccount { + lamports: 0, + owner: recipient_pubkey, + data: None, + address: None, + }]; + let recipient = Pubkey::new_unique(); + let instruction = create_execute_compressed_instruction( + &payer_pubkey, + &input_compressed_accounts, + &output_compressed_accounts, + &[merkle_tree_pubkey], + &[0u32], + &[indexed_array_pubkey], + &[merkle_tree_pubkey], + &root_indices, + &Vec::new(), + &Vec::new(), + &Vec::new(), + &Vec::new(), + &proof, + Some(compress_amount), + true, + Some(recipient), + ); + let transaction = Transaction::new_signed_with_payer( + &[instruction], + Some(&payer_pubkey), + &[&payer], + context.get_new_latest_blockhash().await.unwrap(), + ); + println!("Transaction with zkp -------------------------"); + + let res = solana_program_test::BanksClient::process_transaction_with_metadata( + &mut context.banks_client, + transaction, + ) + .await + .unwrap(); + // should fail because of insufficient output funds + + assert_eq!( + res.result, + Err(solana_sdk::transaction::TransactionError::InstructionError( + 0, + InstructionError::Custom(ErrorCode::SumCheckFailed.into()) + )) + ); + + let instruction = create_execute_compressed_instruction( + &payer_pubkey, + &input_compressed_accounts, + &output_compressed_accounts, + &[merkle_tree_pubkey], + &[0u32], + &[indexed_array_pubkey], + &[merkle_tree_pubkey], + &root_indices, + &Vec::new(), + &Vec::new(), + &Vec::new(), + &Vec::new(), + &proof, + Some(compress_amount), + false, + Some(recipient), + ); + let transaction = Transaction::new_signed_with_payer( + &[instruction], + Some(&payer_pubkey), + &[&payer], + context.get_new_latest_blockhash().await.unwrap(), + ); + println!("Transaction with zkp -------------------------"); + + let res = solana_program_test::BanksClient::process_transaction_with_metadata( + &mut context.banks_client, + transaction, + ) + .await; + let recipient_balance = context + .banks_client + .get_account(recipient) + .await + .unwrap() + .unwrap() + .lamports; + assert_eq!( + recipient_balance, compress_amount, + "recipient balance incorrect, decompress sol failed" + ); + mock_indexer.add_lamport_compressed_accounts( + res.unwrap() + .metadata + .unwrap() + .return_data + .unwrap() + .data + .to_vec(), + ); + assert_eq!(mock_indexer.compressed_accounts.len(), 1); + assert_eq!( + mock_indexer.compressed_accounts[0] + .compressed_account + .address, + None + ); + assert_eq!( + mock_indexer.compressed_accounts[0].compressed_account.owner, + recipient_pubkey + ); +} + #[ignore = "this is a helper function to regenerate accounts"] #[tokio::test] async fn regenerate_accounts() { @@ -513,24 +861,16 @@ pub struct MockIndexer { pub nullified_compressed_accounts: Vec, pub events: Vec, pub merkle_tree: light_merkle_tree_reference::MerkleTree, - pub gnark_server: Option, } impl MockIndexer { - async fn new( - merkle_tree_pubkey: Pubkey, - indexed_array_pubkey: Pubkey, - payer: Keypair, - startup_time: Option, - ) -> Self { - let gnark_server = if startup_time.is_some() { - Some(spawn_gnark_server( - "../../circuit-lib/circuitlib-rs/scripts/prover.sh", - 0, - )) - } else { - None - }; + async fn new(merkle_tree_pubkey: Pubkey, indexed_array_pubkey: Pubkey, payer: Keypair) -> Self { + spawn_gnark_server( + "../../circuit-lib/circuitlib-rs/scripts/prover.sh", + true, + ProofType::Inclusion, + ) + .await; let merkle_tree = light_merkle_tree_reference::MerkleTree::::new( STATE_MERKLE_TREE_HEIGHT, @@ -538,9 +878,7 @@ impl MockIndexer { STATE_MERKLE_TREE_CANOPY_DEPTH, ) .unwrap(); - if startup_time.is_some() { - tokio::time::sleep(tokio::time::Duration::from_secs(startup_time.unwrap())).await; - } + Self { merkle_tree_pubkey, indexed_array_pubkey, @@ -549,7 +887,6 @@ impl MockIndexer { nullified_compressed_accounts: vec![], events: vec![], merkle_tree, - gnark_server, } } @@ -558,17 +895,6 @@ impl MockIndexer { compressed_accounts: &[[u8; 32]], context: &mut ProgramTestContext, ) -> (Vec, CompressedProof) { - self.gnark_server = if self.gnark_server.is_none() { - Some(spawn_gnark_server( - "../../circuit-lib/circuitlib-rs/scripts/prover.sh", - 4, - )) - } else { - None - }; - // waiting for server to start - health_check().await; - let client = Client::new(); let mut inclusion_proofs = Vec::::new(); @@ -579,8 +905,8 @@ impl MockIndexer { .get_proof_of_leaf(leaf_index, true) .unwrap(); inclusion_proofs.push(InclusionMerkleProofInputs { - root: BigInt::from_be_bytes(self.merkle_tree.root().unwrap().as_slice()), - leaf: BigInt::from_be_bytes(compressed_account), + roots: BigInt::from_be_bytes(self.merkle_tree.root().unwrap().as_slice()), + leaves: BigInt::from_be_bytes(compressed_account), in_path_indices: BigInt::from_be_bytes(leaf_index.to_be_bytes().as_slice()), // leaf_index as u32, in_path_elements: proof.iter().map(|x| BigInt::from_be_bytes(x)).collect(), }); @@ -602,11 +928,8 @@ impl MockIndexer { let (proof_a, proof_b, proof_c) = proof_from_json_struct(proof_json); let (proof_a, proof_b, proof_c) = compress_proof(&proof_a, &proof_b, &proof_c); - let merkle_tree_account = light_test_utils::AccountZeroCopy::::new( - context, - self.merkle_tree_pubkey, - ) - .await; + let merkle_tree_account = + AccountZeroCopy::::new(context, self.merkle_tree_pubkey).await; let merkle_tree = merkle_tree_account .deserialized() .copy_merkle_tree() @@ -614,7 +937,7 @@ impl MockIndexer { assert_eq!( self.merkle_tree.root().unwrap(), merkle_tree.root().unwrap(), - "Local Merkle tree root is not equal to latest onchain root" + "Local Merkle tree root is not equal to latest on-chain root" ); let root_indices: Vec = @@ -659,7 +982,7 @@ impl MockIndexer { self.compressed_accounts .push(CompressedAccountWithMerkleContext { compressed_account: compressed_account.clone(), - leaf_index: event.output_leaf_indices[i as usize], + leaf_index: event.output_leaf_indices[i], merkle_tree_pubkey_index: 0, nullifier_queue_pubkey_index: 0, }); @@ -667,10 +990,7 @@ impl MockIndexer { self.merkle_tree .append( &compressed_account - .hash( - &self.merkle_tree_pubkey, - &event.output_leaf_indices[i as usize], - ) + .hash(&self.merkle_tree_pubkey, &event.output_leaf_indices[i]) .unwrap(), ) .expect("insert failed"); @@ -689,11 +1009,8 @@ impl MockIndexer { ) .await; let indexed_array = array.deserialized().indexed_array; - let merkle_tree_account = light_test_utils::AccountZeroCopy::::new( - context, - self.merkle_tree_pubkey, - ) - .await; + let merkle_tree_account = + AccountZeroCopy::::new(context, self.merkle_tree_pubkey).await; let merkle_tree = merkle_tree_account .deserialized() .copy_merkle_tree() @@ -752,11 +1069,8 @@ impl MockIndexer { compressed_account.element ); let merkle_tree_account = - light_test_utils::AccountZeroCopy::::new( - context, - self.merkle_tree_pubkey, - ) - .await; + AccountZeroCopy::::new(context, self.merkle_tree_pubkey) + .await; assert_eq!( indexed_array[*index_in_indexed_array].merkle_tree_overwrite_sequence_number, merkle_tree_account @@ -764,7 +1078,7 @@ impl MockIndexer { .load_merkle_tree() .unwrap() .sequence_number as u64 - + account_compression::utils::constants::STATE_MERKLE_TREE_ROOTS as u64 + + STATE_MERKLE_TREE_ROOTS as u64 ); } } diff --git a/programs/compressed-token/src/process_mint.rs b/programs/compressed-token/src/process_mint.rs index 42b6b1110d..739c82ce58 100644 --- a/programs/compressed-token/src/process_mint.rs +++ b/programs/compressed-token/src/process_mint.rs @@ -112,6 +112,8 @@ pub fn cpi_execute_compressed_transaction_mint_to<'info>( address_merkle_tree_root_indices: Vec::new(), address_merkle_tree_account_indices: Vec::new(), address_queue_account_indices: Vec::new(), + de_compress_lamports: None, + is_compress: false, }; let mut inputs = Vec::new(); @@ -145,6 +147,9 @@ pub fn cpi_execute_compressed_transaction_mint_to<'info>( account_compression_program: ctx.accounts.account_compression_program.to_account_info(), cpi_signature_account: None, invoking_program: None, + compressed_sol_pda: None, + de_compress_recipient: None, + system_program: None, }; let mut cpi_ctx = CpiContext::new_with_signer( ctx.accounts.compressed_pda_program.to_account_info(), diff --git a/programs/compressed-token/src/process_transfer.rs b/programs/compressed-token/src/process_transfer.rs index 2a45db8067..39765e78e6 100644 --- a/programs/compressed-token/src/process_transfer.rs +++ b/programs/compressed-token/src/process_transfer.rs @@ -128,6 +128,8 @@ pub fn cpi_execute_compressed_transaction_transfer<'info>( address_merkle_tree_root_indices: Vec::new(), address_merkle_tree_account_indices: Vec::new(), address_queue_account_indices: Vec::new(), + de_compress_lamports: None, + is_compress: false, }; let mut inputs = Vec::new(); @@ -149,6 +151,9 @@ pub fn cpi_execute_compressed_transaction_transfer<'info>( account_compression_program: ctx.accounts.account_compression_program.to_account_info(), cpi_signature_account: None, invoking_program: Some(ctx.accounts.self_program.to_account_info()), + compressed_sol_pda: None, + de_compress_recipient: None, + system_program: None, }; let mut cpi_ctx = CpiContext::new_with_signer( ctx.accounts.compressed_pda_program.to_account_info(), diff --git a/programs/compressed-token/tests/test.rs b/programs/compressed-token/tests/test.rs index 1d5f61be83..b486db26fc 100644 --- a/programs/compressed-token/tests/test.rs +++ b/programs/compressed-token/tests/test.rs @@ -10,7 +10,7 @@ use anchor_lang::AnchorSerialize; use circuitlib_rs::{ gnark::{ constants::{INCLUSION_PATH, SERVER_ADDRESS}, - helpers::{health_check, spawn_gnark_server}, + helpers::spawn_gnark_server, inclusion_json_formatter::InclusionJsonStruct, proof_helpers::{compress_proof, deserialize_gnark_proof_json, proof_from_json_struct}, }, @@ -54,7 +54,7 @@ pub fn create_initialize_mint_instructions( mint_keypair: &Keypair, ) -> ([Instruction; 4], Pubkey) { let account_create_ix = create_account_instruction( - &payer, + payer, anchor_spl::token::Mint::LEN, rent, &anchor_spl::token::ID, @@ -72,9 +72,9 @@ pub fn create_initialize_mint_instructions( ) .unwrap(); let transfer_ix = - anchor_lang::solana_program::system_instruction::transfer(&payer, &mint_pubkey, rent); + anchor_lang::solana_program::system_instruction::transfer(payer, &mint_pubkey, rent); - let instruction = create_initialize_mint_instruction(&payer, &authority, &mint_pubkey); + let instruction = create_initialize_mint_instruction(payer, authority, &mint_pubkey); let pool_pubkey = get_token_pool_pda(&mint_pubkey); ( [ @@ -88,6 +88,8 @@ pub fn create_initialize_mint_instructions( } use anchor_lang::{solana_program::program_pack::Pack, AnchorDeserialize}; +use circuitlib_rs::gnark::helpers::ProofType; + async fn assert_create_mint( context: &mut ProgramTestContext, authority: &Pubkey, @@ -109,7 +111,7 @@ async fn assert_create_mint( assert_eq!(mint_account.decimals, 2); assert_eq!(mint_account.mint_authority.unwrap(), mint_authority); assert_eq!(mint_account.freeze_authority, None.into()); - assert_eq!(mint_account.is_initialized, true); + assert!(mint_account.is_initialized); let mint_account: spl_token::state::Account = spl_token::state::Account::unpack( &context .banks_client @@ -183,7 +185,6 @@ async fn test_mint_to() { merkle_tree_pubkey, indexed_array_pubkey, payer.insecure_clone(), - None, ); let recipient_keypair = Keypair::new(); let mint = create_mint_helper(&mut context, &payer).await; @@ -200,13 +201,10 @@ async fn test_mint_to() { &[instruction], Some(&payer_pubkey), &[&payer], - context.last_blockhash, + context.get_new_latest_blockhash().await.unwrap(), ); - let old_merkle_tree_account = light_test_utils::AccountZeroCopy::::new( - &mut context, - env.merkle_tree_pubkey, - ) - .await; + let old_merkle_tree_account = + AccountZeroCopy::::new(&mut context, env.merkle_tree_pubkey).await; let old_merkle_tree = old_merkle_tree_account .deserialized() .copy_merkle_tree() @@ -251,7 +249,6 @@ async fn test_transfer() { merkle_tree_pubkey, indexed_array_pubkey, payer.insecure_clone(), - Some(0), ); let recipient_keypair = Keypair::new(); let mint = create_mint_helper(&mut context, &payer).await; @@ -268,13 +265,10 @@ async fn test_transfer() { &[instruction], Some(&payer_pubkey), &[&payer], - context.last_blockhash, + context.get_new_latest_blockhash().await.unwrap(), ); - let old_merkle_tree_account = light_test_utils::AccountZeroCopy::::new( - &mut context, - env.merkle_tree_pubkey, - ) - .await; + let old_merkle_tree_account = + AccountZeroCopy::::new(&mut context, env.merkle_tree_pubkey).await; let old_merkle_tree = old_merkle_tree_account .deserialized() .copy_merkle_tree() @@ -304,9 +298,8 @@ async fn test_transfer() { ) .await; let transfer_recipient_keypair = Keypair::new(); - let input_compressed_account_token_data = - mock_indexer.token_compressed_accounts[0].token_data.clone(); - let input_compressed_accounts = vec![mock_indexer.compressed_accounts + let input_compressed_account_token_data = mock_indexer.token_compressed_accounts[0].token_data; + let input_compressed_accounts = [mock_indexer.compressed_accounts [mock_indexer.token_compressed_accounts[0].index] .clone()]; let input_compressed_account_indices: Vec = input_compressed_accounts @@ -343,11 +336,11 @@ async fn test_transfer() { let instruction = transfer_sdk::create_transfer_instruction( &payer_pubkey, &recipient_keypair.pubkey(), - &vec![merkle_tree_pubkey], // input compressed account Merkle trees - &vec![indexed_array_pubkey], // input compressed account indexed arrays - &vec![merkle_tree_pubkey, merkle_tree_pubkey], // output compressed account Merkle trees + &[merkle_tree_pubkey], // input compressed account Merkle trees + &[indexed_array_pubkey], // input compressed account indexed arrays + &[merkle_tree_pubkey, merkle_tree_pubkey], // output compressed account Merkle trees input_compressed_accounts.as_slice(), // input compressed_accounts - &vec![ + &[ change_out_compressed_account, transfer_recipient_out_compressed_account, ], @@ -360,13 +353,10 @@ async fn test_transfer() { &[instruction], Some(&payer_pubkey), [&payer, &recipient_keypair].as_slice(), - context.last_blockhash, + context.get_new_latest_blockhash().await.unwrap(), ); - let old_merkle_tree_account = light_test_utils::AccountZeroCopy::::new( - &mut context, - env.merkle_tree_pubkey, - ) - .await; + let old_merkle_tree_account = + AccountZeroCopy::::new(&mut context, env.merkle_tree_pubkey).await; let old_merkle_tree = old_merkle_tree_account .deserialized() .copy_merkle_tree() @@ -424,7 +414,6 @@ async fn test_invalid_inputs() { merkle_tree_pubkey, indexed_array_pubkey, payer.insecure_clone(), - Some(0), ); let recipient_keypair = Keypair::new(); airdrop_lamports(&mut context, &recipient_keypair.pubkey(), 1_000_000_000) @@ -444,13 +433,10 @@ async fn test_invalid_inputs() { &[instruction], Some(&payer_pubkey), &[&payer], - context.last_blockhash, + context.get_new_latest_blockhash().await.unwrap(), ); - let old_merkle_tree_account = light_test_utils::AccountZeroCopy::::new( - &mut context, - env.merkle_tree_pubkey, - ) - .await; + let old_merkle_tree_account = + AccountZeroCopy::::new(&mut context, env.merkle_tree_pubkey).await; let old_merkle_tree = old_merkle_tree_account .deserialized() .copy_merkle_tree() @@ -480,8 +466,7 @@ async fn test_invalid_inputs() { ) .await; let transfer_recipient_keypair = Keypair::new(); - let input_compressed_account_token_data = - mock_indexer.token_compressed_accounts[0].token_data.clone(); + let input_compressed_account_token_data = mock_indexer.token_compressed_accounts[0].token_data; let input_compressed_accounts = vec![mock_indexer.compressed_accounts [mock_indexer.token_compressed_accounts[0].index] .clone()]; @@ -639,7 +624,7 @@ async fn test_invalid_inputs() { ); let mut input_compressed_account_token_data_invalid_amount = - mock_indexer.token_compressed_accounts[0].token_data.clone(); + mock_indexer.token_compressed_accounts[0].token_data; input_compressed_account_token_data_invalid_amount.amount = 0; let mut input_compressed_accounts = vec![mock_indexer.compressed_accounts [mock_indexer.token_compressed_accounts[0].index] @@ -688,7 +673,7 @@ async fn test_invalid_inputs() { )) ); let mut input_compressed_account_token_data = - mock_indexer.token_compressed_accounts[0].token_data.clone(); + mock_indexer.token_compressed_accounts[0].token_data; input_compressed_account_token_data.delegate = Some(Pubkey::new_unique()); let mut input_compressed_accounts = vec![mock_indexer.compressed_accounts [mock_indexer.token_compressed_accounts[0].index] @@ -723,7 +708,7 @@ async fn test_invalid_inputs() { )) ); let mut input_compressed_account_token_data = - mock_indexer.token_compressed_accounts[0].token_data.clone(); + mock_indexer.token_compressed_accounts[0].token_data; input_compressed_account_token_data.owner = Pubkey::new_unique(); let mut input_compressed_accounts = vec![mock_indexer.compressed_accounts [mock_indexer.token_compressed_accounts[0].index] @@ -759,7 +744,7 @@ async fn test_invalid_inputs() { ); let mut input_compressed_account_token_data = - mock_indexer.token_compressed_accounts[0].token_data.clone(); + mock_indexer.token_compressed_accounts[0].token_data; input_compressed_account_token_data.is_native = Some(0); let mut input_compressed_accounts = vec![mock_indexer.compressed_accounts [mock_indexer.token_compressed_accounts[0].index] @@ -795,7 +780,7 @@ async fn test_invalid_inputs() { ); let mut input_compressed_account_token_data = - mock_indexer.token_compressed_accounts[0].token_data.clone(); + mock_indexer.token_compressed_accounts[0].token_data; input_compressed_account_token_data.state = AccountState::Uninitialized; let mut input_compressed_accounts = vec![mock_indexer.compressed_accounts [mock_indexer.token_compressed_accounts[0].index] @@ -830,7 +815,7 @@ async fn test_invalid_inputs() { )) ); let mut input_compressed_account_token_data = - mock_indexer.token_compressed_accounts[0].token_data.clone(); + mock_indexer.token_compressed_accounts[0].token_data; input_compressed_account_token_data.delegated_amount = 1; let mut input_compressed_accounts = vec![mock_indexer.compressed_accounts [mock_indexer.token_compressed_accounts[0].index] @@ -866,6 +851,7 @@ async fn test_invalid_inputs() { ); } +#[allow(clippy::too_many_arguments)] async fn create_transfer_out_utxo_test( context: &mut ProgramTestContext, change_token_transfer_output: TokenTransferOutputData, @@ -874,8 +860,8 @@ async fn create_transfer_out_utxo_test( indexed_array_pubkey: &Pubkey, payer: &Keypair, proof: &CompressedProof, - root_indices: &Vec, - input_compressed_accounts: &Vec, + root_indices: &[u16], + input_compressed_accounts: &[CompressedAccountWithMerkleContext], ) -> Result { let input_compressed_account_indices: Vec = input_compressed_accounts .iter() @@ -889,24 +875,24 @@ async fn create_transfer_out_utxo_test( let instruction = transfer_sdk::create_transfer_instruction( &payer.pubkey(), &payer.pubkey(), - &vec![*merkle_tree_pubkey], // input compressed account Merkle trees - &vec![*indexed_array_pubkey], // input compressed account indexed arrays - &vec![*merkle_tree_pubkey, *merkle_tree_pubkey], // output compressed account Merkle trees + &[*merkle_tree_pubkey], // input compressed account Merkle trees + &[*indexed_array_pubkey], // input compressed account indexed arrays + &[*merkle_tree_pubkey, *merkle_tree_pubkey], // output compressed account Merkle trees input_compressed_accounts.as_slice(), // input compressed_accounts - &vec![ + &[ change_token_transfer_output, transfer_recipient_token_transfer_output, ], root_indices, &input_compressed_account_indices, - &proof, + proof, ); let transaction = Transaction::new_signed_with_payer( &[instruction], Some(&payer.pubkey()), [&payer].as_slice(), - context.last_blockhash, + context.get_new_latest_blockhash().await.unwrap(), ); solana_program_test::BanksClient::process_transaction_with_metadata( &mut context.banks_client, @@ -923,8 +909,7 @@ async fn assert_mint_to<'a>( amount: u64, old_merkle_tree: &light_concurrent_merkle_tree::ConcurrentMerkleTree26<'a, Poseidon>, ) { - let token_compressed_account_data = - mock_indexer.token_compressed_accounts[0].token_data.clone(); + let token_compressed_account_data = mock_indexer.token_compressed_accounts[0].token_data; assert_eq!(token_compressed_account_data.amount, amount); assert_eq!( token_compressed_account_data.owner, @@ -935,11 +920,9 @@ async fn assert_mint_to<'a>( assert_eq!(token_compressed_account_data.is_native, None); assert_eq!(token_compressed_account_data.delegated_amount, 0); - let merkle_tree_account = light_test_utils::AccountZeroCopy::::new( - context, - mock_indexer.merkle_tree_pubkey, - ) - .await; + let merkle_tree_account = + AccountZeroCopy::::new(context, mock_indexer.merkle_tree_pubkey) + .await; // let merkle_tree = // state_merkle_tree_from_bytes(&merkle_tree_account.deserialized.state_merkle_tree); let merkle_tree = merkle_tree_account @@ -989,13 +972,11 @@ async fn assert_transfer<'a>( recipient_out_compressed_account: &TokenTransferOutputData, change_out_compressed_account: &TokenTransferOutputData, old_merkle_tree: &light_concurrent_merkle_tree::ConcurrentMerkleTree26<'a, Poseidon>, - input_compressed_accounts: &Vec, + input_compressed_accounts: &[CompressedAccount], ) { - let merkle_tree_account = light_test_utils::AccountZeroCopy::::new( - context, - mock_indexer.merkle_tree_pubkey, - ) - .await; + let merkle_tree_account = + AccountZeroCopy::::new(context, mock_indexer.merkle_tree_pubkey) + .await; let merkle_tree = merkle_tree_account .deserialized() .copy_merkle_tree() @@ -1025,10 +1006,6 @@ async fn assert_transfer<'a>( .amount, recipient_out_compressed_account.amount ); - assert_eq!( - transfer_recipient_token_compressed_account.token_data.mint, - transfer_recipient_token_compressed_account.token_data.mint - ); assert_eq!( transfer_recipient_token_compressed_account.token_data.owner, recipient_out_compressed_account.owner @@ -1149,8 +1126,7 @@ pub struct MockIndexer { pub token_compressed_accounts: Vec, pub token_nullified_compressed_accounts: Vec, pub events: Vec, - pub merkle_tree: light_merkle_tree_reference::MerkleTree, - pub gnark_server: Option, + pub merkle_tree: light_merkle_tree_reference::MerkleTree, } #[derive(Debug, Clone)] @@ -1160,30 +1136,21 @@ pub struct TokenDataWithContext { } impl MockIndexer { - async fn new( - merkle_tree_pubkey: Pubkey, - indexed_array_pubkey: Pubkey, - payer: Keypair, - startup_time: Option, - ) -> Self { - let gnark_server = if startup_time.is_some() { - Some(spawn_gnark_server( - "../../circuit-lib/circuitlib-rs/scripts/prover.sh", - 0, - )) - } else { - None - }; - - let merkle_tree = light_merkle_tree_reference::MerkleTree::::new( + async fn new(merkle_tree_pubkey: Pubkey, indexed_array_pubkey: Pubkey, payer: Keypair) -> Self { + spawn_gnark_server( + "../../circuit-lib/circuitlib-rs/scripts/prover.sh", + true, + ProofType::Inclusion, + ) + .await; + + let merkle_tree = light_merkle_tree_reference::MerkleTree::::new( STATE_MERKLE_TREE_HEIGHT, STATE_MERKLE_TREE_ROOTS, STATE_MERKLE_TREE_CANOPY_DEPTH, ) .unwrap(); - if startup_time.is_some() { - tokio::time::sleep(tokio::time::Duration::from_secs(startup_time.unwrap())).await; - } + Self { merkle_tree_pubkey, indexed_array_pubkey, @@ -1194,7 +1161,6 @@ impl MockIndexer { token_compressed_accounts: vec![], token_nullified_compressed_accounts: vec![], merkle_tree, - gnark_server, } } @@ -1203,17 +1169,6 @@ impl MockIndexer { compressed_accounts: &[[u8; 32]], context: &mut ProgramTestContext, ) -> (Vec, CompressedProof) { - self.gnark_server = if self.gnark_server.is_none() { - Some(spawn_gnark_server( - "../../circuit-lib/circuitlib-rs/scripts/prover.sh", - 4, - )) - } else { - None - }; - // waiting for server to start - health_check().await; - let client = Client::new(); let mut inclusion_proofs = Vec::::new(); @@ -1224,8 +1179,8 @@ impl MockIndexer { .get_proof_of_leaf(leaf_index, true) .unwrap(); inclusion_proofs.push(InclusionMerkleProofInputs { - root: BigInt::from_be_bytes(self.merkle_tree.root().unwrap().as_slice()), - leaf: BigInt::from_be_bytes(compressed_account), + roots: BigInt::from_be_bytes(self.merkle_tree.root().unwrap().as_slice()), + leaves: BigInt::from_be_bytes(compressed_account), in_path_indices: BigInt::from_be_bytes(leaf_index.to_be_bytes().as_slice()), // leaf_index as u32, in_path_elements: proof.iter().map(|x| BigInt::from_be_bytes(x)).collect(), }); @@ -1247,11 +1202,8 @@ impl MockIndexer { let (proof_a, proof_b, proof_c) = proof_from_json_struct(proof_json); let (proof_a, proof_b, proof_c) = compress_proof(&proof_a, &proof_b, &proof_c); - let merkle_tree_account = light_test_utils::AccountZeroCopy::::new( - context, - self.merkle_tree_pubkey, - ) - .await; + let merkle_tree_account = + AccountZeroCopy::::new(context, self.merkle_tree_pubkey).await; let merkle_tree = merkle_tree_account .deserialized() .copy_merkle_tree() @@ -1302,15 +1254,12 @@ impl MockIndexer { .compressed_accounts .iter() .position(|x| x == compressed_account); - match index { - Some(index) => { - let token_compressed_account_element = - self.token_compressed_accounts[index].clone(); - self.token_compressed_accounts.remove(index); - self.token_nullified_compressed_accounts - .push(token_compressed_account_element); - } - None => {} + if let Some(index) = index { + let token_compressed_account_element = + self.token_compressed_accounts[index].clone(); + self.token_compressed_accounts.remove(index); + self.token_nullified_compressed_accounts + .push(token_compressed_account_element); } } let mut indices = Vec::with_capacity(event.output_compressed_accounts.len()); @@ -1318,7 +1267,7 @@ impl MockIndexer { self.compressed_accounts .push(CompressedAccountWithMerkleContext { compressed_account: compressed_account.clone(), - leaf_index: event.output_leaf_indices[i as usize], + leaf_index: event.output_leaf_indices[i], merkle_tree_pubkey_index: 0, nullifier_queue_pubkey_index: 0, }); @@ -1326,10 +1275,7 @@ impl MockIndexer { self.merkle_tree .append( &compressed_account - .hash( - &self.merkle_tree_pubkey, - &event.output_leaf_indices[i as usize], - ) + .hash(&self.merkle_tree_pubkey, &event.output_leaf_indices[i]) .unwrap(), ) .expect("insert failed"); @@ -1372,11 +1318,8 @@ impl MockIndexer { ) .await; let indexed_array = array.deserialized().indexed_array; - let merkle_tree_account = light_test_utils::AccountZeroCopy::::new( - context, - self.merkle_tree_pubkey, - ) - .await; + let merkle_tree_account = + AccountZeroCopy::::new(context, self.merkle_tree_pubkey).await; let merkle_tree = merkle_tree_account .deserialized() .copy_merkle_tree() @@ -1435,11 +1378,8 @@ impl MockIndexer { compressed_account.element ); let merkle_tree_account = - light_test_utils::AccountZeroCopy::::new( - context, - self.merkle_tree_pubkey, - ) - .await; + AccountZeroCopy::::new(context, self.merkle_tree_pubkey) + .await; assert_eq!( indexed_array[*index_in_indexed_array].merkle_tree_overwrite_sequence_number, merkle_tree_account @@ -1447,7 +1387,7 @@ impl MockIndexer { .load_merkle_tree() .unwrap() .sequence_number as u64 - + account_compression::utils::constants::STATE_MERKLE_TREE_ROOTS as u64 + + STATE_MERKLE_TREE_ROOTS as u64 ); } } diff --git a/scripts/push-stateless-js-idls.sh b/scripts/push-stateless-js-idls.sh index ab058a63af..30337cb5db 100755 --- a/scripts/push-stateless-js-idls.sh +++ b/scripts/push-stateless-js-idls.sh @@ -5,7 +5,7 @@ SOURCE_DIR="./target/types" DEST_DIR="./js" DEST_DIR_STATELESS="$DEST_DIR/stateless.js/src/idls" -FILES_TO_COPY=("account_compression.ts" "light.ts" "light_merkle_tree_program.ts" "psp_compressed_pda.ts" "user_registry.ts") +FILES_TO_COPY=("account_compression.ts" "light.ts" "psp_compressed_pda.ts" "user_registry.ts") # copy each type file into the respective location for FILE in "${FILES_TO_COPY[@]}"; do diff --git a/test-utils/src/test_env.rs b/test-utils/src/test_env.rs index ef4ac5f1d0..172cbe3d86 100644 --- a/test-utils/src/test_env.rs +++ b/test-utils/src/test_env.rs @@ -228,6 +228,25 @@ pub async fn setup_test_programs_with_accounts() -> EnvWithAccounts { &address_merkle_tree_keypair.pubkey(), ) .await; + + // #[cfg(feature = "psp_compressed_pda")] + // { + // let compressed_sol_pda = psp_compressed_pda::de_compression::get_compressed_sol_pda(); + // let instruction_data = psp_compressed_pda::instruction::InitCompressSolPda {}; + // let accounts = psp_compressed_pda::accounts::InitializeCompressedSolPda { + // fee_payer: payer.pubkey(), + // compressed_sol_pda: compressed_sol_pda, + // system_program: anchor_lang::solana_program::system_program::ID, + // }; + // let instruction = Instruction { + // program_id: psp_compressed_pda::ID, + // accounts: accounts.to_account_metas(Some(true)), + // data: instruction_data.data(), + // }; + // create_and_send_transaction(&mut context, &[instruction], &payer.pubkey(), &[&payer]) + // .await + // .unwrap(); + // } EnvWithAccounts { context, merkle_tree_pubkey,