diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000..535897dae6 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +**/*.asm linguist-language=Rust +**/*.pil linguist-language=Rust diff --git a/.github/runner/Dockerfile b/.github/runner/Dockerfile new file mode 100644 index 0000000000..396581880a --- /dev/null +++ b/.github/runner/Dockerfile @@ -0,0 +1,55 @@ +# +# Runner for powdr github actions. +# We don't automate runner token generation yet. This image should be used as follows: +# - generate a runner token in github (valid for ~1h) +# - build the docker image passing the token as argument: +# docker buildx build -t github-runner --build-arg TOKEN=THE_GENERATED_TOKEN . +# - this will create an image already registered it with github +# - the container will start the runner (./run.sh) by default. + +# this base image was taken from the Dockerfile in the github runner repo +FROM mcr.microsoft.com/dotnet/runtime-deps:6.0-jammy AS build + +ARG RUNNER_VERSION=2.319.1 + +RUN apt-get update && apt install -y curl \ + sudo \ + libicu70 \ + liblttng-ust1 \ + libkrb5-3 \ + zlib1g \ + libssl3 \ + git \ + build-essential \ + clang-15 \ + nlohmann-json3-dev \ + libpqxx-dev \ + nasm \ + libgmp-dev \ + uuid-dev \ + zstd + +RUN adduser --disabled-password --uid 1001 runner \ + && usermod -aG sudo runner \ + && echo "%sudo ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers \ + && echo "Defaults env_keep += \"DEBIAN_FRONTEND\"" >> /etc/sudoers + +USER runner + +WORKDIR /home/runner + +RUN curl -f -L -o runner.tar.gz https://github.com/actions/runner/releases/download/v${RUNNER_VERSION}/actions-runner-linux-x64-${RUNNER_VERSION}.tar.gz \ + && tar xzf ./runner.tar.gz \ + && rm runner.tar.gz + +RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s - -y + +ARG TOKEN +RUN test -n "$TOKEN" || (echo "must set github runner TOKEN: --build-arg TOKEN=XXX" && false) + +RUN ./config.sh --name arch-server --work work --replace --url https://github.com/powdr-labs/powdr --token ${TOKEN} + +# anything that should be in the PATH of the runner must be setup here +ENV PATH="/home/runner/.cargo/bin:$PATH" + +CMD ["./run.sh"] diff --git a/.github/workflows/build-cache.yml b/.github/workflows/build-cache.yml new file mode 100644 index 0000000000..e73491d428 --- /dev/null +++ b/.github/workflows/build-cache.yml @@ -0,0 +1,51 @@ +name: Generate rust cache for PR builds +on: + workflow_dispatch: + schedule: + - cron: '0 2 * * *' # run at 2 AM UTC + +env: + CARGO_TERM_COLOR: always + +jobs: + build: + runs-on: warp-ubuntu-2404-x64-4x + + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + + ##### The block below is shared between cache build and PR build workflows ##### + - name: Install EStarkPolygon prover dependencies + run: sudo apt-get update && sudo apt-get install -y nlohmann-json3-dev libpqxx-dev nasm libgrpc++-dev libprotobuf-dev protobuf-compiler-grpc uuid-dev build-essential cmake pkg-config git + - name: Install Rust toolchain nightly-2024-09-21 (with clippy and rustfmt) + run: rustup toolchain install nightly-2024-09-21-x86_64-unknown-linux-gnu && rustup component add clippy --toolchain nightly-2024-09-21-x86_64-unknown-linux-gnu && rustup component add rustfmt --toolchain nightly-2024-09-21-x86_64-unknown-linux-gnu + - name: Install Rust toolchain 1.81 (stable) + run: rustup toolchain install 1.81-x86_64-unknown-linux-gnu + - name: Set cargo to perform shallow clones + run: echo "CARGO_NET_GIT_FETCH_WITH_CLI=true" >> $GITHUB_ENV + - name: Cargo check with Rust 1.81 (default features) + run: cargo +1.81-x86_64-unknown-linux-gnu check --all-targets + - name: Lint no default features + run: cargo clippy --all --all-targets --no-default-features --profile pr-tests --verbose -- -D warnings + - name: Lint all features + run: cargo clippy --all --all-targets --all-features --profile pr-tests --verbose -- -D warnings + - name: Format + run: cargo fmt --all --check --verbose + - name: Build + run: cargo build --all-targets --all --all-features --profile pr-tests --verbose + ############################################################################### + + - name: Save date of cache build + run: date -R -u > target/cache-build-date.txt + - name: ⚡ Save rust cache + uses: WarpBuilds/cache/save@v1 + with: + path: | + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + Cargo.lock + key: ${{ runner.os }}-cargo-pr-tests diff --git a/.github/workflows/dead-links.yml b/.github/workflows/dead-links.yml new file mode 100644 index 0000000000..13d248eeda --- /dev/null +++ b/.github/workflows/dead-links.yml @@ -0,0 +1,11 @@ +name: Check markdown links +on: [pull_request, merge_group] +jobs: + markdown-link-check: + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v4 + - uses: gaurav-nelson/github-action-markdown-link-check@v1 + with: + use-quiet-mode: 'no' + use-verbose-mode: 'yes' diff --git a/.github/workflows/deploy-book.yml b/.github/workflows/deploy-book.yml new file mode 100644 index 0000000000..29ed1a93f5 --- /dev/null +++ b/.github/workflows/deploy-book.yml @@ -0,0 +1,45 @@ +# adapted from https://github.com/rust-lang/mdBook/wiki/Automated-Deployment%3A-GitHub-Actions#GitHub-Pages-Deploy + +name: Deploy book +on: + push: + branches: + - main + +jobs: + deploy: + runs-on: ubuntu-24.04 + permissions: + contents: write # To push a branch + pull-requests: write # To create a PR from that branch + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Install latest mdbook + run: | + tag=$(curl 'https://api.github.com/repos/rust-lang/mdbook/releases/latest' | jq -r '.tag_name') + url="https://github.com/rust-lang/mdbook/releases/download/${tag}/mdbook-${tag}-x86_64-unknown-linux-gnu.tar.gz" + mkdir mdbook + curl -sSL $url | tar -xz --directory=./mdbook + echo `pwd`/mdbook >> $GITHUB_PATH + - name: Deploy GitHub Pages + run: | + # generate cli docs and inject them into the book + cargo run --package powdr-cli -- --markdown-help > book/src/cli/README.md + # build the book + cd book + mdbook build + git worktree add gh-pages + git config user.name "Deploy from CI" + git config user.email "" + cd gh-pages + # Delete the ref to avoid keeping history. + git update-ref -d refs/heads/gh-pages + rm -rf * + mv ../book/* . + # restore the benchmark directory + git restore --source=origin/gh-pages -- dev + git add . + git commit -m "Deploy $GITHUB_SHA to gh-pages" + git push --force --set-upstream origin gh-pages diff --git a/.github/workflows/nightly-tests.yml b/.github/workflows/nightly-tests.yml new file mode 100644 index 0000000000..55b6ef19d6 --- /dev/null +++ b/.github/workflows/nightly-tests.yml @@ -0,0 +1,88 @@ +name: Nightly tests +on: + workflow_dispatch: + schedule: + - cron: '0 2 * * *' # run at 2 AM UTC + +env: + CARGO_TERM_COLOR: always + IS_NIGHTLY_TEST: true + POWDR_GENERATE_PROOFS: "true" + +jobs: + check_if_needs_running: + runs-on: ubuntu-24.04 + outputs: + status: ${{ steps.count.outputs.status }} + + steps: + - uses: actions/checkout@v4 + - name: Count recent commits + id: count + run: echo "status=$(git log --oneline --since '24 hours ago' | wc -l)" >> $GITHUB_OUTPUT + + udeps: + runs-on: ubuntu-22.04 + needs: check_if_needs_running + if: needs.check_if_needs_running.outputs.status > 0 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install nightly toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: nightly + override: true + + - name: Run cargo-udeps + uses: aig787/cargo-udeps-action@v1 + with: + version: 'latest' + args: '--all-targets' + + test_release: + runs-on: ubuntu-24.04 + needs: check_if_needs_running + if: needs.check_if_needs_running.outputs.status > 0 + + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: ⚡ Cache rust + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ runner.os }}-cargo-release-${{ hashFiles('**/Cargo.toml') }} + - name: ⚡ Cache nodejs + uses: actions/cache@v4 + with: + path: | + ~/pilcom/node_modules + key: ${{ runner.os }}-pilcom-node-modules + - name: Install Rust toolchain 1.81 + run: rustup toolchain install 1.81-x86_64-unknown-linux-gnu + - name: Install nightly + run: rustup toolchain install nightly-2024-08-01-x86_64-unknown-linux-gnu + - name: Install std source + run: rustup component add rust-src --toolchain nightly-2024-08-01-x86_64-unknown-linux-gnu + - name: Install riscv target + run: rustup target add riscv32imac-unknown-none-elf --toolchain nightly-2024-08-01-x86_64-unknown-linux-gnu + - name: Install test dependencies + run: sudo apt-get update && sudo apt-get install -y binutils-riscv64-unknown-elf lld + - name: Install EStarkPolygon prover dependencies + run: sudo apt-get update && sudo apt-get install -y nlohmann-json3-dev libpqxx-dev nasm libgrpc++-dev libprotobuf-dev protobuf-compiler-grpc uuid-dev build-essential cmake pkg-config git + - name: Install pilcom + run: git clone https://github.com/0xPolygonHermez/pilcom.git && cd pilcom && npm install + - name: Check without Halo2 + run: cargo check --all --no-default-features + - name: Build + run: cargo build --all --release --all-features + - name: Run tests + # Number threads is set to 1 because the runner does not have enough memeory for more. + run: PILCOM=$(pwd)/pilcom/ cargo test --all --release --verbose --all-features -- --include-ignored --nocapture --test-threads=1 diff --git a/.github/workflows/nightly_tests_list.txt b/.github/workflows/nightly_tests_list.txt new file mode 100644 index 0000000000..69f6cf192e --- /dev/null +++ b/.github/workflows/nightly_tests_list.txt @@ -0,0 +1,60 @@ +test(=instruction_tests::add) | +test(=instruction_tests::addi) | +test(=instruction_tests::amoadd_w) | +test(=instruction_tests::and) | +test(=instruction_tests::andi) | +test(=instruction_tests::beq) | +test(=instruction_tests::bge) | +test(=instruction_tests::blt) | +test(=instruction_tests::bltu) | +test(=instruction_tests::bne) | +test(=instruction_tests::divu) | +test(=instruction_tests::j) | +test(=instruction_tests::jal) | +test(=instruction_tests::lb) | +test(=instruction_tests::lbu) | +test(=instruction_tests::lh) | +test(=instruction_tests::lhu) | +test(=instruction_tests::lrsc) | +test(=instruction_tests::lw) | +test(=instruction_tests::mul) | +test(=instruction_tests::mulhsu) | +test(=instruction_tests::mulhu) | +test(=instruction_tests::or) | +test(=instruction_tests::ori) | +test(=instruction_tests::remu) | +test(=instruction_tests::rvc) | +test(=instruction_tests::sb) | +test(=instruction_tests::sh) | +test(=instruction_tests::simple) | +test(=instruction_tests::sll) | +test(=instruction_tests::slli) | +test(=instruction_tests::slt) | +test(=instruction_tests::slti) | +test(=instruction_tests::sltiu) | +test(=instruction_tests::sltu) | +test(=instruction_tests::srai) | +test(=instruction_tests::srl) | +test(=instruction_tests::sub) | +test(=instruction_tests::sw) | +test(=instruction_tests::xor) | +test(=instruction_tests::xori) | +test(=byte_access) | +test(=dispatch_table_pie_relocation) | +test(=dispatch_table_static_relocation) | +test(=function_pointer) | +test(=many_chunks_memory) | +test(=memfuncs) | +test(=password) | +test(=print) | +test(=runtime_affine_256) | +test(=runtime_ec_double) | +test(=runtime_modmul_256) | +test(=runtime_poseidon_gl) | +test(=sum) | +test(=trivial) | +test(=two_sums_serde) | +test(=zero_with_values) | +test(=arith_large_test) | +(package(powdr-riscv) and test(=evm)) | +(package(powdr-riscv) and test(=features)) \ No newline at end of file diff --git a/.github/workflows/pr-tests.yml b/.github/workflows/pr-tests.yml new file mode 100644 index 0000000000..1ad5f45a3c --- /dev/null +++ b/.github/workflows/pr-tests.yml @@ -0,0 +1,310 @@ +name: PR tests + +on: + workflow_dispatch: + pull_request: + merge_group: + push: + branches: + - main + +# cancel any previous running workflows for the same branch +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} + +env: + CARGO_TERM_COLOR: always + POWDR_GENERATE_PROOFS: "true" + POWDR_JIT_OPT_LEVEL: "1" + MAX_DEGREE_LOG: "20" + +jobs: + build: + runs-on: warp-ubuntu-2404-x64-8x + + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: ⚡ Restore rust cache + id: cache + uses: WarpBuilds/cache/restore@v1 + with: + path: | + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + Cargo.lock + key: ${{ runner.os }}-cargo-pr-tests + - name: Date of the restored cache + run: cat target/cache-build-date.txt + continue-on-error: true + + ##### The block below is shared between cache build and PR build workflows ##### + - name: Install EStarkPolygon prover dependencies + run: sudo apt-get update && sudo apt-get install -y nlohmann-json3-dev libpqxx-dev nasm libgrpc++-dev uuid-dev + - name: Install Rust toolchain nightly-2024-12-17 (with clippy and rustfmt) + run: rustup toolchain install nightly-2024-12-17-x86_64-unknown-linux-gnu && rustup component add clippy --toolchain nightly-2024-12-17-x86_64-unknown-linux-gnu && rustup component add rustfmt --toolchain nightly-2024-12-17-x86_64-unknown-linux-gnu + - name: Install Rust toolchain 1.81 (stable) + run: rustup toolchain install 1.81-x86_64-unknown-linux-gnu + - name: Set cargo to perform shallow clones + run: echo "CARGO_NET_GIT_FETCH_WITH_CLI=true" >> $GITHUB_ENV + - name: Cargo check with Rust 1.81 (default features) + run: cargo +1.81-x86_64-unknown-linux-gnu check --all-targets + - name: Lint no default features + run: cargo clippy --all --all-targets --no-default-features --profile pr-tests --verbose -- -D warnings + - name: Lint all features + run: cargo clippy --all --all-targets --all-features --profile pr-tests --verbose -- -D warnings + - name: Format + run: cargo fmt --all --check --verbose + - name: Build + run: cargo build --all-targets --all --all-features --profile pr-tests --verbose + ############################################################################### + + - uses: taiki-e/install-action@nextest + - name: Archive EStarkPolygon prover built dependencies + run: tar --zstd -cf pil-stark-prover-deps.tar.zst target/pr-tests/build/pil-stark-prover-*/out + - name: Create tests archive + run: cargo nextest archive --archive-file tests.tar.zst --cargo-profile pr-tests --workspace --all-features + - name: Upload build artifacts + uses: actions/upload-artifact@v4 + with: + name: tests_archive + path: | + tests.tar.zst + pil-stark-prover-deps.tar.zst + + test_quick: + needs: build + runs-on: ubuntu-24.04 + strategy: + matrix: + test: + - "1" + - "2" + + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: Download build artifacts + uses: actions/download-artifact@v4 + with: + name: tests_archive + - name: ⚡ Cache nodejs + uses: actions/cache@v4 + with: + path: | + ~/pilcom/node_modules + key: ${{ runner.os }}-pilcom-node-modules + - name: Install Rust toolchain nightly-2024-12-17 (with clippy and rustfmt) + run: rustup toolchain install nightly-2024-12-17-x86_64-unknown-linux-gnu && rustup component add clippy --toolchain nightly-2024-12-17-x86_64-unknown-linux-gnu && rustup component add rustfmt --toolchain nightly-2024-12-17-x86_64-unknown-linux-gnu + - name: Install nightly-2024-08-01 + run: rustup toolchain install nightly-2024-08-01-x86_64-unknown-linux-gnu + - name: Install std source + run: rustup component add rust-src --toolchain nightly-2024-08-01-x86_64-unknown-linux-gnu + - name: Install riscv target + run: rustup target add riscv32imac-unknown-none-elf --toolchain nightly-2024-08-01-x86_64-unknown-linux-gnu + - name: Install test dependencies + run: sudo apt-get update && sudo apt-get install -y binutils-riscv64-unknown-elf lld + - name: Install pilcom + run: git clone https://github.com/0xPolygonHermez/pilcom.git && cd pilcom && npm install + - uses: taiki-e/install-action@nextest + - name: Run default tests + run: cargo nextest run --archive-file tests.tar.zst --workspace-remap . --verbose --partition count:"${{ matrix.test }}"/2 + env: + PILCOM: ${{ github.workspace }}/pilcom/ + POWDR_STD: ${{ github.workspace }}/std/ + + run_examples: + runs-on: warp-ubuntu-2404-x64-4x + + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: ⚡ Restore rust cache + id: cache + uses: WarpBuilds/cache/restore@v1 + with: + path: | + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + Cargo.lock + key: ${{ runner.os }}-cargo-pr-tests + - name: Install Rust toolchain nightly-2024-12-17 (with clippy and rustfmt) + run: rustup toolchain install nightly-2024-12-17-x86_64-unknown-linux-gnu && rustup component add clippy --toolchain nightly-2024-12-17-x86_64-unknown-linux-gnu && rustup component add rustfmt --toolchain nightly-2024-12-17-x86_64-unknown-linux-gnu + - name: Install nightly + run: rustup toolchain install nightly-2024-08-01-x86_64-unknown-linux-gnu + - name: Install std source + run: rustup component add rust-src --toolchain nightly-2024-08-01-x86_64-unknown-linux-gnu + - name: Install riscv target + run: rustup target add riscv32imac-unknown-none-elf --toolchain nightly-2024-08-01-x86_64-unknown-linux-gnu + - name: Install test dependencies + run: sudo apt-get update && sudo apt-get install -y binutils-riscv64-unknown-elf lld + - name: Run examples + run: cargo run --profile pr-tests --example hello_world && cargo run --profile pr-tests --example sqrt_with_publics && cargo run --profile pr-tests --example fibonacci + + test_estark_polygon: + needs: build + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: Download build artifacts + uses: actions/download-artifact@v4 + with: + name: tests_archive + - name: ⚡ Cache nodejs + uses: actions/cache@v4 + with: + path: | + ~/pilcom/node_modules + key: ${{ runner.os }}-pilcom-node-modules + - name: Install Rust toolchain nightly-2024-12-17(with clippy and rustfmt) + run: rustup toolchain install nightly-2024-12-17-x86_64-unknown-linux-gnu && rustup component add clippy --toolchain nightly-2024-12-17-x86_64-unknown-linux-gnu && rustup component add rustfmt --toolchain nightly-2024-12-17-x86_64-unknown-linux-gnu + - name: Install nightly-2024-08-01 + run: rustup toolchain install nightly-2024-08-01-x86_64-unknown-linux-gnu + - name: Install std source + run: rustup component add rust-src --toolchain nightly-2024-08-01-x86_64-unknown-linux-gnu + - name: Install riscv target + run: rustup target add riscv32imac-unknown-none-elf --toolchain nightly-2024-08-01-x86_64-unknown-linux-gnu + - name: Install pilcom + run: git clone https://github.com/0xPolygonHermez/pilcom.git && cd pilcom && npm install + - name: Install EStarkPolygon prover system dependency + run: sudo apt-get update && sudo apt-get install -y nlohmann-json3-dev + - uses: taiki-e/install-action@nextest + - name: Unpack EStarkPolygon built dependencies + run: tar --zstd -xf pil-stark-prover-deps.tar.zst + - name: Run EStark Polygon test + run: cargo nextest run --archive-file tests.tar.zst --workspace-remap . --verbose --run-ignored=ignored-only --no-capture -E "test(=vec_median_estark_polygon)" + env: + PILCOM: ${{ github.workspace }}/pilcom/ + POWDR_STD: ${{ github.workspace }}/std/ + + test_slow: + strategy: + matrix: + test: + - "1" + - "2" + - "3" + - "4" + - "5" + - "6" + - "7" + - "8" + needs: build + runs-on: ubuntu-24.04 + + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: Download build artifacts + uses: actions/download-artifact@v4 + with: + name: tests_archive + - name: ⚡ Cache nodejs + uses: actions/cache@v4 + with: + path: | + ~/pilcom/node_modules + key: ${{ runner.os }}-pilcom-node-modules + - name: Install Rust toolchain nightly-2024-12-17 (with clippy and rustfmt) + run: rustup toolchain install nightly-2024-12-17-x86_64-unknown-linux-gnu && rustup component add clippy --toolchain nightly-2024-12-17-x86_64-unknown-linux-gnu && rustup component add rustfmt --toolchain nightly-2024-12-17-x86_64-unknown-linux-gnu + - name: Install test dependencies + run: sudo apt-get update && sudo apt-get install -y binutils-riscv64-unknown-elf lld + - name: Install nightly-2024-08-01 + run: rustup toolchain install nightly-2024-08-01-x86_64-unknown-linux-gnu + - name: Install std source + run: rustup component add rust-src --toolchain nightly-2024-08-01-x86_64-unknown-linux-gnu + - name: Install riscv target + run: rustup target add riscv32imac-unknown-none-elf --toolchain nightly-2024-08-01-x86_64-unknown-linux-gnu + - name: Install pilcom + run: git clone https://github.com/0xPolygonHermez/pilcom.git && cd pilcom && npm install + - uses: taiki-e/install-action@nextest + - name: Run slow tests + # Number threads is set to 2 because the runner does not have enough memory for more. + run: | + NIGHTLY_TESTS=$(cat .github/workflows/nightly_tests_list.txt) + cargo nextest run --archive-file tests.tar.zst --workspace-remap . --verbose --run-ignored=ignored-only -E "!($NIGHTLY_TESTS)" --test-threads 2 --partition hash:"${{ matrix.test }}"/8 + shell: bash + env: + PILCOM: ${{ github.workspace }}/pilcom/ + POWDR_STD: ${{ github.workspace }}/std/ + + bench: + runs-on: warp-ubuntu-2404-x64-4x + permissions: + contents: write + deployments: write + pull-requests: write + + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: ⚡ Restore rust cache + id: cache + uses: WarpBuilds/cache/restore@v1 + with: + path: | + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + Cargo.lock + key: ${{ runner.os }}-cargo-pr-tests + - name: Install Rust toolchain 1.81 + run: rustup toolchain install 1.81-x86_64-unknown-linux-gnu + - name: Install nightly + run: rustup toolchain install nightly-2024-08-01-x86_64-unknown-linux-gnu + - name: Install std source + run: rustup component add rust-src --toolchain nightly-2024-08-01-x86_64-unknown-linux-gnu + - name: Install riscv target + run: rustup target add riscv32imac-unknown-none-elf --toolchain nightly-2024-08-01-x86_64-unknown-linux-gnu + - name: Install test dependencies + run: sudo apt-get update && sudo apt-get install -y binutils-riscv64-unknown-elf lld + - name: Install EStarkPolygon prover dependencies + run: sudo apt-get update && sudo apt-get install -y nlohmann-json3-dev libpqxx-dev nasm libgrpc++-dev libprotobuf-dev protobuf-compiler-grpc uuid-dev build-essential cmake pkg-config git + - name: Install pilcom + run: git clone https://github.com/0xPolygonHermez/pilcom.git && cd pilcom && npm install + - name: Run benchmarks + # we add `|| exit 1` to make sure the step fails if `cargo bench` fails + run: cargo bench --workspace --all-features -- --output-format bencher | tee output.txt || exit 1 + - name: Store benchmark result + uses: benchmark-action/github-action-benchmark@v1 + with: + name: Benchmarks + tool: "cargo" + output-file-path: output.txt + github-token: ${{ secrets.GITHUB_TOKEN }} + auto-push: true + alert-threshold: "120%" + comment-on-alert: true + summary-always: true + + udeps: + runs-on: ubuntu-22.04 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install nightly toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: nightly + override: true + + - name: Run cargo-udeps + uses: aig787/cargo-udeps-action@v1 + with: + version: "latest" + args: "--all-targets" diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..fb87f81494 --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +# Generated by Cargo +# will have compiled files and executables +/target/ + +# Cargo configuration +/.cargo/ + +# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries +# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html +Cargo.lock + +# These are backup files generated by rustfmt +**/*.rs.bk + +cargo_target/ +riscv/tests/riscv_data/**/target diff --git a/404.html b/404.html new file mode 100644 index 0000000000..8d33ec90bc --- /dev/null +++ b/404.html @@ -0,0 +1,197 @@ + + + + + + Page not found - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Document not found (404)

+

This URL is invalid, sorry. Please use the navigation bar or search to continue.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/CNAME b/CNAME new file mode 100644 index 0000000000..415a5c70e5 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +docs.powdr.org diff --git a/FontAwesome/css/font-awesome.css b/FontAwesome/css/font-awesome.css new file mode 100644 index 0000000000..540440ce89 --- /dev/null +++ b/FontAwesome/css/font-awesome.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} diff --git a/FontAwesome/fonts/FontAwesome.ttf b/FontAwesome/fonts/FontAwesome.ttf new file mode 100644 index 0000000000..35acda2fa1 Binary files /dev/null and b/FontAwesome/fonts/FontAwesome.ttf differ diff --git a/FontAwesome/fonts/fontawesome-webfont.eot b/FontAwesome/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000000..e9f60ca953 Binary files /dev/null and b/FontAwesome/fonts/fontawesome-webfont.eot differ diff --git a/FontAwesome/fonts/fontawesome-webfont.svg b/FontAwesome/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000000..855c845e53 --- /dev/null +++ b/FontAwesome/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FontAwesome/fonts/fontawesome-webfont.ttf b/FontAwesome/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000000..35acda2fa1 Binary files /dev/null and b/FontAwesome/fonts/fontawesome-webfont.ttf differ diff --git a/FontAwesome/fonts/fontawesome-webfont.woff b/FontAwesome/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000000..400014a4b0 Binary files /dev/null and b/FontAwesome/fonts/fontawesome-webfont.woff differ diff --git a/FontAwesome/fonts/fontawesome-webfont.woff2 b/FontAwesome/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000000..4d13fc6040 Binary files /dev/null and b/FontAwesome/fonts/fontawesome-webfont.woff2 differ diff --git a/architecture/compiler.html b/architecture/compiler.html new file mode 100644 index 0000000000..41037a7b65 --- /dev/null +++ b/architecture/compiler.html @@ -0,0 +1,229 @@ + + + + + + Compiler - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Compiler

+

In this section, we explain how the powdr compiler reduces a program made of virtual and constrained machines to a set of AIRs.

+

Virtual machine reduction

+

The first step is to reduce virtual machines to constrained machines. This step is run on all machines and does not affect constrained machines. +As a result of this step, for each machine:

+ +

Block enforcement

+

Block enforcement applies on constrained machines. It makes sure that the operation_id is constant within each machine block.

+

AIR generation

+

At this point, all machines contain only:

+
    +
  • an optional degree range
  • +
  • constraints
  • +
  • links to other machines
  • +
  • operations
  • +
+

Let's define AIR as a data structure with only these elements.

+

Starting from the main machine's type, we create a tree of AIR objects by traversing its submachines, recursively instantiating each machine as an AIR. +Let's define the AIR tree as the resulting tree.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/architecture/index.html b/architecture/index.html new file mode 100644 index 0000000000..4b2e7d48c1 --- /dev/null +++ b/architecture/index.html @@ -0,0 +1,217 @@ + + + + + + Architecture - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Architecture

+

powdr applies a number of steps in order to reduce a powdr-asm program into PIL.

+

We provide a high level overview of these steps.

+
            ┌────────────┐           ┌──────────┐
+            │            │           │          │
+ powdr-asm  │            │ AIR graph │          │  PIL
+───────────►│  compiler  ├───────────┤  linker  ├──────►
+            │            │           │          │
+            │            │           │          │
+            └────────────┘           └──────────┘
+
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/architecture/linker.html b/architecture/linker.html new file mode 100644 index 0000000000..47ce27d255 --- /dev/null +++ b/architecture/linker.html @@ -0,0 +1,221 @@ + + + + + + Linker - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Linker

+

A linker is used to turn an AIR tree into a single PIL file. +The linking process operates in the following way:

+
    +
  1. Create an empty PIL file
  2. +
  3. Start from the main AIR. Let main_degree_range be its degree.
  4. +
  5. For each AIR +
      +
    1. Create a new namespace in the PIL file +2a. If degrees-mode is vadcop, set the namespace degree to that of the AIR +2b. If degrees-mode is monolithic, set the namespace degree to main_degree_range
    2. +
    3. Add the constraints to the namespace
    4. +
    5. Turn the links into lookups and permutations and add them to the namespace
    6. +
    +
  6. +
+

The result is a monolithic AIR where:

+
    +
  • each machine instance is a namespace
  • +
  • each namespace defines its own degree range
  • +
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/asm/declarations.html b/asm/declarations.html new file mode 100644 index 0000000000..505d23e578 --- /dev/null +++ b/asm/declarations.html @@ -0,0 +1,250 @@ + + + + + + Declarations - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Declarations

+

Symbols can be defined via let <name> = <value>;, or via let <name>: <type> = <value>; if you want to +specify the type explicitly. The value is an arbitrary PIL-expression. +For details, see the Declarations section in the PIL part.

+

Other symbols available in the current module can be accessed by name, but it is also possible to specify +full relative paths in the form of e.g. super::super::module_name::symbol.

+

Here are some examples of how to define and use symbols:

+
mod utils {
+    // This defines a function by means of a lambda expression that
+    // computes the sum of an array of values. We fully specify its type.
+    let sum: int, int[] -> int = |len, arr| match len {
+        0 => 0,
+        _ => arr[len - 1] + sum(len - 1, arr)
+    };
+    // A simple function that returns the input incremented by one,
+    // as an expression.
+    let incremented: expr -> expr = |x| x + 1;
+    // This is a function that takes an expression as input and returns
+    // a constraint enforcing this expression increments by a certain value
+    // between rows.
+    // The type will be inferred here because `'` is only valid on `expr`.
+    let constrain_incremented_by = |x, inc| x' = x + inc;
+}
+
+machine Main with degree: 4 {
+    // Machines create local scopes in the way functions create local scopes:
+    // - all symbols in the machine's module are available without prefix,
+    // - new symbols can be defined but are only available inside the machine.
+    reg A;
+    reg pc[@pc];
+
+    // This defines a witness column,
+    let x;
+    // and now we force it to stay unchanged.
+    utils::constrain_incremented_by(x, 0);
+
+    // We define an instruction that uses a complicated way to increment a register.
+    instr incr_a { A' = utils::incremented(A) }
+
+    function main {
+        incr_a;
+        return;
+    }
+}
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/asm/expressions.html b/asm/expressions.html new file mode 100644 index 0000000000..bfe99e6d5a --- /dev/null +++ b/asm/expressions.html @@ -0,0 +1,216 @@ + + + + + + Expressions - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Expressions

+

Field element literals

+

Field element literals are signed elements of the prime field.

+
        CNT <=X= 3;
+

Registers and columns

+

Registers can be used as expressions, with the exception of assignment registers.

+
        CNT <=X= CNT - 1;
+

Instructions

+

Instructions which return outputs can be used as expressions.

+
        A, B <== square_and_double(A);
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/asm/functions.html b/asm/functions.html new file mode 100644 index 0000000000..32a1c8c079 --- /dev/null +++ b/asm/functions.html @@ -0,0 +1,291 @@ + + + + + + Functions - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Functions

+

Functions are the entry points to a virtual machine. They can be called from another machine or from the outside.

+

In this section, we describe functions with this simple virtual machine:

+

+machine Machine with degree: 16 {
+    reg pc[@pc];
+    reg X[<=];
+    reg Y[<=];
+    reg Z[<=];
+    reg CNT;
+    reg A;
+    reg B;
+
+    // an instruction to assert that a number is zero
+    instr assert_zero X {
+        X = 0
+    }
+
+    // an instruction to jump to a label
+    instr jmp l: label {
+        pc' = l 
+    }
+
+    // an instruction to jump to a label iff `X` is `0`, otherwise continue
+    instr jmpz X, l: label { 
+        pc' = XIsZero * l + (1 - XIsZero) * (pc + 1) 
+    }
+    
+    // an instruction to return the square of an input as well as its double
+    instr square_and_double X -> Y, Z {
+        Y = X * X,
+        Z = 2 * X
+    }
+
+    function main {
+        // initialise `A` to 2
+        A <=X= 2;
+        // initialise `CNT` to `3`
+        CNT <=X= 3;
+        start:
+        // if `CNT` is `0`, jump to `end`
+        jmpz CNT, end;
+        // decrement `CNT`
+        CNT <=X= CNT - 1;
+        // get the square and the double of `A`
+        A, B <== square_and_double(A);
+        // jump back to `start`
+        jmp start;
+        end:
+        // check that `A == ((2**2)**2)**2`
+        assert_zero A - ((2**2)**2)**2;
+        // check that `B == ((2**2)**2)*2`
+        assert_zero B - ((2**2)**2)*2;
+        return;
+    }
+
+    // some superpowers on `X` to allow us to check if it's 0
+    col witness XInv;
+    col witness XIsZero;
+    XIsZero  = 1 - X * XInv;
+    XIsZero * X = 0;
+    XIsZero * (1 - XIsZero) = 0;
+}
+
+

Function inputs and outputs

+
+

Function inputs and outputs are not supported yet

+
+

Statements

+

Labels

+

Labels allow referring to a location in a function by name.

+
        start:
+

Assignments

+

Assignments allow setting the values of some write registers to the values of some expressions expression using assignment registers.

+
        CNT <=X= 3;
+

If the right-hand side of the assignment is an instruction, assignment registers can be inferred and are optional:

+
        A, B <== square_and_double(A);
+

This will be inferred to be the same as A, B <=Y, Z= square_and_double(A); from the definition of the instruction:

+
    instr square_and_double X -> Y, Z {
+        Y = X * X,
+        Z = 2 * X
+    }
+

Instructions

+

Instructions which do not return outputs can be used as statements.

+
        assert_zero A - ((2**2)**2)**2;
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/asm/index.html b/asm/index.html new file mode 100644 index 0000000000..6e0a53767e --- /dev/null +++ b/asm/index.html @@ -0,0 +1,208 @@ + + + + + + asm - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

asm

+

powdr-asm is the higher level of abstraction in powdr. It allows defining Instruction Set Architectures (ISA) using virtual and constrained machines.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/asm/instructions.html b/asm/instructions.html new file mode 100644 index 0000000000..bbc58f8ea4 --- /dev/null +++ b/asm/instructions.html @@ -0,0 +1,355 @@ + + + + + + Instructions - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Instructions

+

Instructions are declared as part of a powdr virtual machine. +Once defined, they can be called by any function in this machine. +An instruction is composed of:

+
    +
  • a name
  • +
  • a set of inputs (assignment registers or labels)
  • +
  • a set of outputs (assignment registers)
  • +
  • a set of powdr-pil constraints to activate when the instruction is called
  • +
  • a set of links calling into functions/operations in submachines
  • +
+

Local instructions

+

A local instruction is the simplest type of instruction. +It is called local because its behavior is defined by a set of constraints over registers and columns of the machine it is defined in.

+
instr add X, Y -> Z {
+    X + Y = Z
+}
+

Instructions with links

+

Instructions may also delegate all or part of their implementation to functions/operations in submachines. +Each link in an instruction defines the inputs and outputs of a call to a specific function/operation in a submachine.

+

Assume we have a submachine with a single operation add:

+
machine SubMachine with
+    degree: 32,
+    latch: latch,
+    operation_id: operation_id
+{
+    col witness operation_id;
+    col fixed latch = [1]*;
+
+    operation add<0> x, y -> z;
+
+    col witness x;
+    col witness y;
+    col witness z;
+    z = y + x;
+}
+

An instruction calling into this operation can be declared as follows:

+
    SubMachine submachine;
+
+    instr add X, Y -> Z link => Z = submachine.add(X, Y); // - trivial usage: only instruction inputs/outputs used in the call
+

In the previous example, only assignment registers (instruction inputs and outputs) were used to call the submachine. +The following example shows more complex usage of link calls:

+
machine Main with degree: 32 {
+    reg pc[@pc];
+    reg X[<=];
+    reg Y[<=];
+    reg Z[<=];
+    reg A;
+    reg B;
+    reg C;
+
+    SubMachine submachine;
+
+    instr add X, Y -> Z link => Z = submachine.add(X, Y); // - trivial usage: only instruction inputs/outputs used in the call
+    instr add_to_A X, Y link => A' = submachine.add(X, Y);// - output to a regular register
+    instr addAB -> X link => X = submachine.add(A, B);    // - inputs from regular registers
+    instr addAB_to_C link => C' = submachine.add(A, B);   // - inputs and output from regular registers
+    instr addAB_to_A link => A' = submachine.add(A, B);   // - reusing an input register as output
+    instr sub X, Y -> Z link => X = submachine.add(Y, Z); // - swapping input/output
+    // expressions can also be used as call parameters
+    instr add5 X -> Z link => Z = submachine.add(X, 3+2); // - literal expression as argument
+    col fixed STEP(i) { i };
+    instr add_current_time_step X -> Z link => Z = submachine.add(X, STEP);// - machine columns can be referenced
+    let arr = [1,2,3,4,5];                          // - functions can be used
+    instr add_arr_sum X -> Z link => Z = submachine.add(X, std::array::sum(arr));
+
+    instr assert_eq X, Y { X = Y }
+
+    function main {
+        A <== add(2, 3);
+        assert_eq A, 5;
+        add_to_A 6, 7;
+        assert_eq A, 13;
+
+        A <== sub(6, 5);
+        assert_eq A, 1;
+        B <=X= 20;
+        C <== addAB();
+        assert_eq C, 21;
+
+        A <=X= 2;
+        B <=X= 3;
+        addAB_to_C;
+        assert_eq C, 5;
+
+        A <=X= 33;
+        B <=X= 44;
+        addAB_to_A;
+        assert_eq A, 77;
+
+        A <== add5(2);
+        assert_eq A, 7;
+        A <== add_arr_sum(3);
+        assert_eq A, 18;
+
+        // Note that the result of this operation depends on when it executed (STEP column)
+        A <== add_current_time_step(42);
+        B <== add_current_time_step(42);
+        assert_eq B - A, 1;
+
+        return;
+    }
+}
+

A single instruction can activate multiple links, and may also include a set of constraints. +Furthermore, each link can be activated conditionally, based on a given boolean flag:

+
machine Main with degree: 16 {
+    reg pc[@pc];
+    reg X[<=];
+    reg Y[<=];
+    reg Z[<=];
+    reg W[<=];
+    reg A;
+    col witness B;
+    col witness C;
+
+    SubMachine submachine;
+
+    // multiple links can be activated by a single instruction,
+    // witness columns can be used for temporary values,
+    // and additional constraints can be used
+    instr double_then_mul X, Y -> Z
+        link => B = submachine.add(X, X)
+        link => C = submachine.add(Y, Y)
+    {
+        Z = B * C
+    }
+
+    // links activated conditional on a boolean flag
+    instr add_or_sub W, X, Y -> Z
+        link if W => Z = submachine.add(X, Y)
+        link if (1 - W) => Z = submachine.sub(X, Y);
+
+    instr assert_eq X, Y { X = Y }
+
+    function main {
+        A <== double_then_mul(3, 2);
+        assert_eq A, 24;
+
+        A <== add_or_sub(1, 3, 2);
+        assert_eq A, 5;
+        A <== add_or_sub(0, 3, 2);
+        assert_eq A, 1;
+
+        return;
+    }
+}
+
+

Note that links cannot currently call functions from the same machine: they delegate computation to a submachine.

+
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/asm/links.html b/asm/links.html new file mode 100644 index 0000000000..728e456e80 --- /dev/null +++ b/asm/links.html @@ -0,0 +1,265 @@ + + + + + + Links - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Links

+

Links enable a constrained machine to call into another machine. +They are defined by a call to an operation, where inputs and outputs are expressions. +An optional boolean flag restricts the rows in which the link is active. +Links without a boolean flag are active in every row.

+
machine Add4 with
+    degree: 32,
+    latch: latch,
+    operation_id: operation_id
+{
+    Add adder;
+
+    operation add4<0> x, y, z, w -> r;
+
+    // Links without a flag are active on every row.
+    // - constrain the values of `x`, `y`, and `n` so that `n = adder.add(x, y)`
+    link => n = adder.add(x, y);
+    // - constrain the values of `z`, `w`, and `m` so that `m = adder.add(z, w)`
+    link => m = adder.add(z, w);
+    // - constrain the values of `m`, `n` and `r` so that `r = adder.add(m,n)`
+    link => r = adder.add(m, n);
+
+    col fixed operation_id = [0]*;
+    col fixed latch = [1]*;
+
+    col witness x;
+    col witness y;
+    col witness z;
+    col witness w;
+    col witness r;
+    col witness m;
+    col witness n;
+}
+
+machine Add with
+    degree: 32,
+    latch: latch
+{
+    // operation name, with column names as inputs and outputs
+    operation add a, b -> c;
+
+    col fixed latch = [1]*;
+
+    col witness a;
+    col witness b;
+    col witness c;
+
+    // constraint "implementing" the operation
+    c = a + b;
+}
+
+

If a boolean flag is given, the link is only active in rows where the flag evaluates to 1. +Whenever a link is active, the columns mapped as inputs and outputs are constrained by the operation implementation. +The following example demonstrates how to use links with flags.

+
col fixed odd_row = [0,1]*;
+
+link if odd_row => z = submachine.foo(x, y); // active on odd rows only
+link if (1 - odd_row) => z = submachine.bar(x, y); // active on even rows only
+
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/asm/machines.html b/asm/machines.html new file mode 100644 index 0000000000..537087ba09 --- /dev/null +++ b/asm/machines.html @@ -0,0 +1,308 @@ + + + + + + Machines - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Machines

+

Machines are the first main concept in powdr-asm. They can currently be of two types: virtual or constrained.

+

Virtual machines

+

Dynamic machines are defined by:

+ +

An example of a simple dynamic machine is the following:

+
machine HelloWorld with degree: 8 {
+    reg pc[@pc];
+    reg X[<=];
+    reg Y[<=];
+    reg A;
+
+    instr incr X -> Y {
+        Y = X + 1
+    }
+
+    instr decr X -> Y {
+        Y = X - 1
+    }
+
+    instr assert_zero X {
+        X = 0
+    }
+
+    function main {
+        // assign the first prover input to A
+        A <=X= ${ std::prelude::Query::Input(0, 1) };
+
+        // increment A
+        A <== incr(A);
+
+        // decrement A
+        A <== decr(A);
+
+        // assert that A is zero
+        assert_zero A;
+
+        return;
+    }
+}
+

Constrained machines

+

Constrained machines are a lower-level type of machine. They do not have registers, and instead rely on simple committed and fixed columns. They are used to implement hand-optimized computation.

+

They are defined by:

+
    +
  • a degree range, indicating the number of execution steps
  • +
  • a set of operations
  • +
  • an operation_identifier column, used to make constraints conditional over which function is called. It can be omitted with _ if the machine has at most one operation.
  • +
  • a latch column, used to identify rows at which the machine can be accessed from the outside (where the inputs and outputs are passed). It can be omitted if the machine has no operations.
  • +
  • a set of submachines
  • +
  • a set of links
  • +
+

An example of a simple constrained machine is the following:

+
machine SimpleStatic with
+    degree: 8,
+    latch: latch,
+    operation_id: operation_id
+{
+    operation power_4<0> x -> y;
+
+    col fixed operation_id = [0]*;
+    col fixed latch = [0, 0, 0, 1]*;
+    col witness x;
+    col witness y;
+
+    // initialise y to x at the beginning of each block
+    latch * (y' - x') = 0;
+    // x is unconstrained at the beginning of the block
+
+    // x is constant within a block
+    (1 - latch) * (x' - x) = 0;
+    // y is multiplied by x at each row
+    (1 - latch) * (y' - x * y) = 0;
+}
+

For more details on the powdr-pil statements, check out the pil section of this book. Note that the parameters of the operation are columns defined in powdr-pil statements.

+

Submachines

+

Machines can have submachines which they access by defining external instructions or links. They are declared as follows:

+
machine MySubmachine {
+    ...
+}
+
+machine MyMachine {
+    MySubmachine my_submachine;
+}
+

Machines can also receive submachines as construction parameters. +A machine passed in as an argument can be accessed in the same way as locally declared submachines:

+
machine MachineWithParam(subm: MySubmachine) {
+    // `subm` can be accessed as a submachine
+    ...
+}
+
+machine MyMachine {
+    MySubmachine my_submachine;
+    // `my_submachine` is passed to `another_submachine` as a construction argument
+    MachineWithParam another_submachine(my_submachine);
+}
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/asm/modules.html b/asm/modules.html new file mode 100644 index 0000000000..f360ecfddc --- /dev/null +++ b/asm/modules.html @@ -0,0 +1,275 @@ + + + + + + Modules - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Modules

+

powdr exposes a module system to help organise and reuse code.

+
use my_module::Other as LocalOther;
+
+// we can define a module at `./submodule.asm`
+mod submodule;
+
+// we can define a module at `./submodule_in_folder/mod.asm`
+mod submodule_in_folder;
+
+use submodule::Other as SubmoduleOther;
+use submodule_in_folder::Other as FolderSubmoduleOther;
+
+let zero: int = 0;
+
+// we can also define modules inline
+mod utils {
+    // Each module has a fresh symbol list. Every external symbol needs to be imported,
+    // even from the parent module.
+    use super::zero;
+
+    let one = zero + 1;
+}
+
+machine Main with degree: 8 {
+    // use a machine from another module by relative path
+    my_module::Other a;
+
+    // use a machine from another module using a local binding
+    LocalOther b;
+
+    // use a machine from another module defined in a different file
+    SubmoduleOther c;
+
+    // use a machine from another module defined in a different directory
+    FolderSubmoduleOther d;
+
+    reg pc[@pc];
+
+    instr nothing link => a.nothing();
+    instr also_nothing link => b.nothing();
+    instr still_nothing link => c.nothing();
+    instr nothing_again link => d.nothing();
+
+    function main {
+        nothing;
+        also_nothing;
+        still_nothing;
+        nothing_again;
+        return;
+    }
+}
+
+mod my_module {
+    machine Other with
+        degree: 8,
+        latch: latch,
+        operation_id: operation_id
+    {
+        operation nothing<0>;
+
+        col fixed latch = [1]*;
+        col fixed operation_id = [0]*;
+    }
+}
+

Note that a module can't be called std, as this name is reserved for the powdr standard library.

+

Similar to Rust, any reference that cannot be resolved is looked up once more in std::prelude. +This module exposes basic types and values such as Option, true and false. +This means that you can use Option anywhere without prefix.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/asm/operations.html b/asm/operations.html new file mode 100644 index 0000000000..bb2ed98c65 --- /dev/null +++ b/asm/operations.html @@ -0,0 +1,250 @@ + + + + + + Operations - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Operations

+

Operations enable a constrained machine to expose behavior to the outside. +If a machine has a single operation, it can simply be declared with its name and parameters:

+
machine Add with
+    degree: 32,
+    latch: latch
+{
+    // operation name, with column names as inputs and outputs
+    operation add a, b -> c;
+
+    col fixed latch = [1]*;
+
+    col witness a;
+    col witness b;
+    col witness c;
+
+    // constraint "implementing" the operation
+    c = a + b;
+}
+

The parameters of the operation (inputs and outputs) must be columns declared in the machine.

+

If a machine exposes more than one operation, the machine itself needs an operation id column (op_id in the following). +Then, each operation needs to be declared with its own unique operation id:

+
// machine declaration must include an operation id column name
+machine AddSub with
+    degree: 32,
+    latch: latch,
+    operation_id: op_id
+{
+    // each operation has its own unique operation id
+    operation add<0> a, b -> c;
+    operation sub<1> a, b -> c;
+
+    col fixed latch = [1]*;
+        // it also needs to be declared as a column
+    col witness op_id;
+
+    col witness a;
+    col witness b;
+    col witness c;
+
+    // constraint "implementing" both operations, depending on `op_id`
+    c = (1 - op_id) * (a + b) + op_id * (a - b);
+}
+

The actual behavior of an operation is defined by the machine constraints on the columns used as inputs and outputs.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/asm/registers.html b/asm/registers.html new file mode 100644 index 0000000000..46e11cecfb --- /dev/null +++ b/asm/registers.html @@ -0,0 +1,256 @@ + + + + + + Registers - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Registers

+

Registers are central to a machine. powdr supports a few types of registers:

+

Program counter

+

Each machine can have at most one program counter. In the absence of a program counter, the machine is considered static, and no other register can be declared. The program counter is defined as follows:

+
reg pc[@pc]
+

At each step execution step, the program counter points to the function line to execute. +The program counter behaves like a write register, with the exception that its value is incremented by default after each step.

+

Write registers

+

Write registers are the default type for registers. They are declared as follows:

+
reg A;
+

They hold a field element, are initialized as 0 at the beginning of a function and keep their value by default. They can be read from and written to.

+
// write to A
+A <=X= 1;
+// A is 1
+
+// read from A
+B <=X= A;
+// A is still 1
+

Assignment registers

+

Assignment registers are transient to an execution step: their value is not persisted across steps. They are required in order to pass inputs and receive outputs from instructions, as well as in assignments. +For example, if we want to assert that write register A is 0, we can use the following instruction:

+
reg pc[@pc];
+reg A;
+
+instr assert_A_is_zero {
+    A = 0
+}
+
+function main {
+    assert_A_is_zero;
+    return;
+}
+

However, if we want the instruction to accept any write register as input, we use an assignment register.

+
reg pc[@pc];
+reg X[<=];
+reg A;    
+
+instr assert_zero X {
+    X = 0
+}
+
+function main {
+    assert_zero A;
+    return;
+}
+

Read-only registers

+

Read-only registers are used for function inputs. However, powdr creates them automatically based on functions arguments, so that they do not need to be declared explicitly.

+
+

Read-only registers are only mentioned for completeness here and are currently only used inside the compiler. We advise against using them.

+
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/ayu-highlight.css b/ayu-highlight.css new file mode 100644 index 0000000000..32c9432224 --- /dev/null +++ b/ayu-highlight.css @@ -0,0 +1,78 @@ +/* +Based off of the Ayu theme +Original by Dempfi (https://github.com/dempfi/ayu) +*/ + +.hljs { + display: block; + overflow-x: auto; + background: #191f26; + color: #e6e1cf; +} + +.hljs-comment, +.hljs-quote { + color: #5c6773; + font-style: italic; +} + +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-attr, +.hljs-regexp, +.hljs-link, +.hljs-selector-id, +.hljs-selector-class { + color: #ff7733; +} + +.hljs-number, +.hljs-meta, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #ffee99; +} + +.hljs-string, +.hljs-bullet { + color: #b8cc52; +} + +.hljs-title, +.hljs-built_in, +.hljs-section { + color: #ffb454; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-symbol { + color: #ff7733; +} + +.hljs-name { + color: #36a3d9; +} + +.hljs-tag { + color: #00568d; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} + +.hljs-addition { + color: #91b362; +} + +.hljs-deletion { + color: #d96c75; +} diff --git a/backends/estark.html b/backends/estark.html new file mode 100644 index 0000000000..c38698c80f --- /dev/null +++ b/backends/estark.html @@ -0,0 +1,209 @@ + + + + + + eSTARK - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

eSTARK

+

powdr supports the eSTARK proof system with the Goldilocks field, +implemented by the starky library from eigen-zkvm.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/backends/halo2.html b/backends/halo2.html new file mode 100644 index 0000000000..08ca156689 --- /dev/null +++ b/backends/halo2.html @@ -0,0 +1,208 @@ + + + + + + Halo2 - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Halo2

+

powdr supports the PSE fork of halo2 with the bn254 field.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/backends/index.html b/backends/index.html new file mode 100644 index 0000000000..061b95a138 --- /dev/null +++ b/backends/index.html @@ -0,0 +1,208 @@ + + + + + + Backends - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Backends

+

powdr aims to have full flexibility when it comes to generating proofs and comes with a few built-in backends to get started with zkVMs.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/backends/plonky3.html b/backends/plonky3.html new file mode 100644 index 0000000000..ffba94bd2c --- /dev/null +++ b/backends/plonky3.html @@ -0,0 +1,208 @@ + + + + + + plonky3 - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Plonky3

+

powdr partially supports plonky3 with the Goldilocks, BabyBear, KoalaBear, and Mersenne31 fields.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/book.js b/book.js new file mode 100644 index 0000000000..178f1e902d --- /dev/null +++ b/book.js @@ -0,0 +1,690 @@ +"use strict"; + +// Fix back button cache problem +window.onunload = function () { }; + +// Global variable, shared between modules +function playground_text(playground, hidden = true) { + let code_block = playground.querySelector("code"); + + if (window.ace && code_block.classList.contains("editable")) { + let editor = window.ace.edit(code_block); + return editor.getValue(); + } else if (hidden) { + return code_block.textContent; + } else { + return code_block.innerText; + } +} + +(function codeSnippets() { + function fetch_with_timeout(url, options, timeout = 6000) { + return Promise.race([ + fetch(url, options), + new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), timeout)) + ]); + } + + var playgrounds = Array.from(document.querySelectorAll(".playground")); + if (playgrounds.length > 0) { + fetch_with_timeout("https://play.rust-lang.org/meta/crates", { + headers: { + 'Content-Type': "application/json", + }, + method: 'POST', + mode: 'cors', + }) + .then(response => response.json()) + .then(response => { + // get list of crates available in the rust playground + let playground_crates = response.crates.map(item => item["id"]); + playgrounds.forEach(block => handle_crate_list_update(block, playground_crates)); + }); + } + + function handle_crate_list_update(playground_block, playground_crates) { + // update the play buttons after receiving the response + update_play_button(playground_block, playground_crates); + + // and install on change listener to dynamically update ACE editors + if (window.ace) { + let code_block = playground_block.querySelector("code"); + if (code_block.classList.contains("editable")) { + let editor = window.ace.edit(code_block); + editor.addEventListener("change", function (e) { + update_play_button(playground_block, playground_crates); + }); + // add Ctrl-Enter command to execute rust code + editor.commands.addCommand({ + name: "run", + bindKey: { + win: "Ctrl-Enter", + mac: "Ctrl-Enter" + }, + exec: _editor => run_rust_code(playground_block) + }); + } + } + } + + // updates the visibility of play button based on `no_run` class and + // used crates vs ones available on https://play.rust-lang.org + function update_play_button(pre_block, playground_crates) { + var play_button = pre_block.querySelector(".play-button"); + + // skip if code is `no_run` + if (pre_block.querySelector('code').classList.contains("no_run")) { + play_button.classList.add("hidden"); + return; + } + + // get list of `extern crate`'s from snippet + var txt = playground_text(pre_block); + var re = /extern\s+crate\s+([a-zA-Z_0-9]+)\s*;/g; + var snippet_crates = []; + var item; + while (item = re.exec(txt)) { + snippet_crates.push(item[1]); + } + + // check if all used crates are available on play.rust-lang.org + var all_available = snippet_crates.every(function (elem) { + return playground_crates.indexOf(elem) > -1; + }); + + if (all_available) { + play_button.classList.remove("hidden"); + } else { + play_button.classList.add("hidden"); + } + } + + function run_rust_code(code_block) { + var result_block = code_block.querySelector(".result"); + if (!result_block) { + result_block = document.createElement('code'); + result_block.className = 'result hljs language-bash'; + + code_block.append(result_block); + } + + let text = playground_text(code_block); + let classes = code_block.querySelector('code').classList; + let edition = "2015"; + if(classes.contains("edition2018")) { + edition = "2018"; + } else if(classes.contains("edition2021")) { + edition = "2021"; + } + var params = { + version: "stable", + optimize: "0", + code: text, + edition: edition + }; + + if (text.indexOf("#![feature") !== -1) { + params.version = "nightly"; + } + + result_block.innerText = "Running..."; + + fetch_with_timeout("https://play.rust-lang.org/evaluate.json", { + headers: { + 'Content-Type': "application/json", + }, + method: 'POST', + mode: 'cors', + body: JSON.stringify(params) + }) + .then(response => response.json()) + .then(response => { + if (response.result.trim() === '') { + result_block.innerText = "No output"; + result_block.classList.add("result-no-output"); + } else { + result_block.innerText = response.result; + result_block.classList.remove("result-no-output"); + } + }) + .catch(error => result_block.innerText = "Playground Communication: " + error.message); + } + + // Syntax highlighting Configuration + hljs.configure({ + tabReplace: ' ', // 4 spaces + languages: [], // Languages used for auto-detection + }); + + let code_nodes = Array + .from(document.querySelectorAll('code')) + // Don't highlight `inline code` blocks in headers. + .filter(function (node) {return !node.parentElement.classList.contains("header"); }); + + if (window.ace) { + // language-rust class needs to be removed for editable + // blocks or highlightjs will capture events + code_nodes + .filter(function (node) {return node.classList.contains("editable"); }) + .forEach(function (block) { block.classList.remove('language-rust'); }); + + code_nodes + .filter(function (node) {return !node.classList.contains("editable"); }) + .forEach(function (block) { hljs.highlightBlock(block); }); + } else { + code_nodes.forEach(function (block) { hljs.highlightBlock(block); }); + } + + // Adding the hljs class gives code blocks the color css + // even if highlighting doesn't apply + code_nodes.forEach(function (block) { block.classList.add('hljs'); }); + + Array.from(document.querySelectorAll("code.hljs")).forEach(function (block) { + + var lines = Array.from(block.querySelectorAll('.boring')); + // If no lines were hidden, return + if (!lines.length) { return; } + block.classList.add("hide-boring"); + + var buttons = document.createElement('div'); + buttons.className = 'buttons'; + buttons.innerHTML = ""; + + // add expand button + var pre_block = block.parentNode; + pre_block.insertBefore(buttons, pre_block.firstChild); + + pre_block.querySelector('.buttons').addEventListener('click', function (e) { + if (e.target.classList.contains('fa-eye')) { + e.target.classList.remove('fa-eye'); + e.target.classList.add('fa-eye-slash'); + e.target.title = 'Hide lines'; + e.target.setAttribute('aria-label', e.target.title); + + block.classList.remove('hide-boring'); + } else if (e.target.classList.contains('fa-eye-slash')) { + e.target.classList.remove('fa-eye-slash'); + e.target.classList.add('fa-eye'); + e.target.title = 'Show hidden lines'; + e.target.setAttribute('aria-label', e.target.title); + + block.classList.add('hide-boring'); + } + }); + }); + + if (window.playground_copyable) { + Array.from(document.querySelectorAll('pre code')).forEach(function (block) { + var pre_block = block.parentNode; + if (!pre_block.classList.contains('playground')) { + var buttons = pre_block.querySelector(".buttons"); + if (!buttons) { + buttons = document.createElement('div'); + buttons.className = 'buttons'; + pre_block.insertBefore(buttons, pre_block.firstChild); + } + + var clipButton = document.createElement('button'); + clipButton.className = 'clip-button'; + clipButton.title = 'Copy to clipboard'; + clipButton.setAttribute('aria-label', clipButton.title); + clipButton.innerHTML = ''; + + buttons.insertBefore(clipButton, buttons.firstChild); + } + }); + } + + // Process playground code blocks + Array.from(document.querySelectorAll(".playground")).forEach(function (pre_block) { + // Add play button + var buttons = pre_block.querySelector(".buttons"); + if (!buttons) { + buttons = document.createElement('div'); + buttons.className = 'buttons'; + pre_block.insertBefore(buttons, pre_block.firstChild); + } + + var runCodeButton = document.createElement('button'); + runCodeButton.className = 'fa fa-play play-button'; + runCodeButton.hidden = true; + runCodeButton.title = 'Run this code'; + runCodeButton.setAttribute('aria-label', runCodeButton.title); + + buttons.insertBefore(runCodeButton, buttons.firstChild); + runCodeButton.addEventListener('click', function (e) { + run_rust_code(pre_block); + }); + + if (window.playground_copyable) { + var copyCodeClipboardButton = document.createElement('button'); + copyCodeClipboardButton.className = 'clip-button'; + copyCodeClipboardButton.innerHTML = ''; + copyCodeClipboardButton.title = 'Copy to clipboard'; + copyCodeClipboardButton.setAttribute('aria-label', copyCodeClipboardButton.title); + + buttons.insertBefore(copyCodeClipboardButton, buttons.firstChild); + } + + let code_block = pre_block.querySelector("code"); + if (window.ace && code_block.classList.contains("editable")) { + var undoChangesButton = document.createElement('button'); + undoChangesButton.className = 'fa fa-history reset-button'; + undoChangesButton.title = 'Undo changes'; + undoChangesButton.setAttribute('aria-label', undoChangesButton.title); + + buttons.insertBefore(undoChangesButton, buttons.firstChild); + + undoChangesButton.addEventListener('click', function () { + let editor = window.ace.edit(code_block); + editor.setValue(editor.originalCode); + editor.clearSelection(); + }); + } + }); +})(); + +(function themes() { + var html = document.querySelector('html'); + var themeToggleButton = document.getElementById('theme-toggle'); + var themePopup = document.getElementById('theme-list'); + var themeColorMetaTag = document.querySelector('meta[name="theme-color"]'); + var themeIds = []; + themePopup.querySelectorAll('button.theme').forEach(function (el) { + themeIds.push(el.id); + }); + var stylesheets = { + ayuHighlight: document.querySelector("[href$='ayu-highlight.css']"), + tomorrowNight: document.querySelector("[href$='tomorrow-night.css']"), + highlight: document.querySelector("[href$='highlight.css']"), + }; + + function showThemes() { + themePopup.style.display = 'block'; + themeToggleButton.setAttribute('aria-expanded', true); + themePopup.querySelector("button#" + get_theme()).focus(); + } + + function updateThemeSelected() { + themePopup.querySelectorAll('.theme-selected').forEach(function (el) { + el.classList.remove('theme-selected'); + }); + themePopup.querySelector("button#" + get_theme()).classList.add('theme-selected'); + } + + function hideThemes() { + themePopup.style.display = 'none'; + themeToggleButton.setAttribute('aria-expanded', false); + themeToggleButton.focus(); + } + + function get_theme() { + var theme; + try { theme = localStorage.getItem('mdbook-theme'); } catch (e) { } + if (theme === null || theme === undefined || !themeIds.includes(theme)) { + return default_theme; + } else { + return theme; + } + } + + function set_theme(theme, store = true) { + let ace_theme; + + if (theme == 'coal' || theme == 'navy') { + stylesheets.ayuHighlight.disabled = true; + stylesheets.tomorrowNight.disabled = false; + stylesheets.highlight.disabled = true; + + ace_theme = "ace/theme/tomorrow_night"; + } else if (theme == 'ayu') { + stylesheets.ayuHighlight.disabled = false; + stylesheets.tomorrowNight.disabled = true; + stylesheets.highlight.disabled = true; + ace_theme = "ace/theme/tomorrow_night"; + } else { + stylesheets.ayuHighlight.disabled = true; + stylesheets.tomorrowNight.disabled = true; + stylesheets.highlight.disabled = false; + ace_theme = "ace/theme/dawn"; + } + + setTimeout(function () { + themeColorMetaTag.content = getComputedStyle(document.documentElement).backgroundColor; + }, 1); + + if (window.ace && window.editors) { + window.editors.forEach(function (editor) { + editor.setTheme(ace_theme); + }); + } + + var previousTheme = get_theme(); + + if (store) { + try { localStorage.setItem('mdbook-theme', theme); } catch (e) { } + } + + html.classList.remove(previousTheme); + html.classList.add(theme); + updateThemeSelected(); + } + + // Set theme + var theme = get_theme(); + + set_theme(theme, false); + + themeToggleButton.addEventListener('click', function () { + if (themePopup.style.display === 'block') { + hideThemes(); + } else { + showThemes(); + } + }); + + themePopup.addEventListener('click', function (e) { + var theme; + if (e.target.className === "theme") { + theme = e.target.id; + } else if (e.target.parentElement.className === "theme") { + theme = e.target.parentElement.id; + } else { + return; + } + set_theme(theme); + }); + + themePopup.addEventListener('focusout', function(e) { + // e.relatedTarget is null in Safari and Firefox on macOS (see workaround below) + if (!!e.relatedTarget && !themeToggleButton.contains(e.relatedTarget) && !themePopup.contains(e.relatedTarget)) { + hideThemes(); + } + }); + + // Should not be needed, but it works around an issue on macOS & iOS: https://github.com/rust-lang/mdBook/issues/628 + document.addEventListener('click', function(e) { + if (themePopup.style.display === 'block' && !themeToggleButton.contains(e.target) && !themePopup.contains(e.target)) { + hideThemes(); + } + }); + + document.addEventListener('keydown', function (e) { + if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) { return; } + if (!themePopup.contains(e.target)) { return; } + + switch (e.key) { + case 'Escape': + e.preventDefault(); + hideThemes(); + break; + case 'ArrowUp': + e.preventDefault(); + var li = document.activeElement.parentElement; + if (li && li.previousElementSibling) { + li.previousElementSibling.querySelector('button').focus(); + } + break; + case 'ArrowDown': + e.preventDefault(); + var li = document.activeElement.parentElement; + if (li && li.nextElementSibling) { + li.nextElementSibling.querySelector('button').focus(); + } + break; + case 'Home': + e.preventDefault(); + themePopup.querySelector('li:first-child button').focus(); + break; + case 'End': + e.preventDefault(); + themePopup.querySelector('li:last-child button').focus(); + break; + } + }); +})(); + +(function sidebar() { + var body = document.querySelector("body"); + var sidebar = document.getElementById("sidebar"); + var sidebarLinks = document.querySelectorAll('#sidebar a'); + var sidebarToggleButton = document.getElementById("sidebar-toggle"); + var sidebarResizeHandle = document.getElementById("sidebar-resize-handle"); + var firstContact = null; + + function showSidebar() { + body.classList.remove('sidebar-hidden') + body.classList.add('sidebar-visible'); + Array.from(sidebarLinks).forEach(function (link) { + link.setAttribute('tabIndex', 0); + }); + sidebarToggleButton.setAttribute('aria-expanded', true); + sidebar.setAttribute('aria-hidden', false); + try { localStorage.setItem('mdbook-sidebar', 'visible'); } catch (e) { } + } + + function hideSidebar() { + body.classList.remove('sidebar-visible') + body.classList.add('sidebar-hidden'); + Array.from(sidebarLinks).forEach(function (link) { + link.setAttribute('tabIndex', -1); + }); + sidebarToggleButton.setAttribute('aria-expanded', false); + sidebar.setAttribute('aria-hidden', true); + try { localStorage.setItem('mdbook-sidebar', 'hidden'); } catch (e) { } + } + + // Toggle sidebar + sidebarToggleButton.addEventListener('click', function sidebarToggle() { + if (body.classList.contains("sidebar-hidden")) { + var current_width = parseInt( + document.documentElement.style.getPropertyValue('--sidebar-width'), 10); + if (current_width < 150) { + document.documentElement.style.setProperty('--sidebar-width', '150px'); + } + showSidebar(); + } else if (body.classList.contains("sidebar-visible")) { + hideSidebar(); + } else { + if (getComputedStyle(sidebar)['transform'] === 'none') { + hideSidebar(); + } else { + showSidebar(); + } + } + }); + + sidebarResizeHandle.addEventListener('mousedown', initResize, false); + + function initResize(e) { + window.addEventListener('mousemove', resize, false); + window.addEventListener('mouseup', stopResize, false); + body.classList.add('sidebar-resizing'); + } + function resize(e) { + var pos = (e.clientX - sidebar.offsetLeft); + if (pos < 20) { + hideSidebar(); + } else { + if (body.classList.contains("sidebar-hidden")) { + showSidebar(); + } + pos = Math.min(pos, window.innerWidth - 100); + document.documentElement.style.setProperty('--sidebar-width', pos + 'px'); + } + } + //on mouseup remove windows functions mousemove & mouseup + function stopResize(e) { + body.classList.remove('sidebar-resizing'); + window.removeEventListener('mousemove', resize, false); + window.removeEventListener('mouseup', stopResize, false); + } + + document.addEventListener('touchstart', function (e) { + firstContact = { + x: e.touches[0].clientX, + time: Date.now() + }; + }, { passive: true }); + + document.addEventListener('touchmove', function (e) { + if (!firstContact) + return; + + var curX = e.touches[0].clientX; + var xDiff = curX - firstContact.x, + tDiff = Date.now() - firstContact.time; + + if (tDiff < 250 && Math.abs(xDiff) >= 150) { + if (xDiff >= 0 && firstContact.x < Math.min(document.body.clientWidth * 0.25, 300)) + showSidebar(); + else if (xDiff < 0 && curX < 300) + hideSidebar(); + + firstContact = null; + } + }, { passive: true }); +})(); + +(function chapterNavigation() { + document.addEventListener('keydown', function (e) { + if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) { return; } + if (window.search && window.search.hasFocus()) { return; } + var html = document.querySelector('html'); + + function next() { + var nextButton = document.querySelector('.nav-chapters.next'); + if (nextButton) { + window.location.href = nextButton.href; + } + } + function prev() { + var previousButton = document.querySelector('.nav-chapters.previous'); + if (previousButton) { + window.location.href = previousButton.href; + } + } + switch (e.key) { + case 'ArrowRight': + e.preventDefault(); + if (html.dir == 'rtl') { + prev(); + } else { + next(); + } + break; + case 'ArrowLeft': + e.preventDefault(); + if (html.dir == 'rtl') { + next(); + } else { + prev(); + } + break; + } + }); +})(); + +(function clipboard() { + var clipButtons = document.querySelectorAll('.clip-button'); + + function hideTooltip(elem) { + elem.firstChild.innerText = ""; + elem.className = 'clip-button'; + } + + function showTooltip(elem, msg) { + elem.firstChild.innerText = msg; + elem.className = 'clip-button tooltipped'; + } + + var clipboardSnippets = new ClipboardJS('.clip-button', { + text: function (trigger) { + hideTooltip(trigger); + let playground = trigger.closest("pre"); + return playground_text(playground, false); + } + }); + + Array.from(clipButtons).forEach(function (clipButton) { + clipButton.addEventListener('mouseout', function (e) { + hideTooltip(e.currentTarget); + }); + }); + + clipboardSnippets.on('success', function (e) { + e.clearSelection(); + showTooltip(e.trigger, "Copied!"); + }); + + clipboardSnippets.on('error', function (e) { + showTooltip(e.trigger, "Clipboard error!"); + }); +})(); + +(function scrollToTop () { + var menuTitle = document.querySelector('.menu-title'); + + menuTitle.addEventListener('click', function () { + document.scrollingElement.scrollTo({ top: 0, behavior: 'smooth' }); + }); +})(); + +(function controllMenu() { + var menu = document.getElementById('menu-bar'); + + (function controllPosition() { + var scrollTop = document.scrollingElement.scrollTop; + var prevScrollTop = scrollTop; + var minMenuY = -menu.clientHeight - 50; + // When the script loads, the page can be at any scroll (e.g. if you reforesh it). + menu.style.top = scrollTop + 'px'; + // Same as parseInt(menu.style.top.slice(0, -2), but faster + var topCache = menu.style.top.slice(0, -2); + menu.classList.remove('sticky'); + var stickyCache = false; // Same as menu.classList.contains('sticky'), but faster + document.addEventListener('scroll', function () { + scrollTop = Math.max(document.scrollingElement.scrollTop, 0); + // `null` means that it doesn't need to be updated + var nextSticky = null; + var nextTop = null; + var scrollDown = scrollTop > prevScrollTop; + var menuPosAbsoluteY = topCache - scrollTop; + if (scrollDown) { + nextSticky = false; + if (menuPosAbsoluteY > 0) { + nextTop = prevScrollTop; + } + } else { + if (menuPosAbsoluteY > 0) { + nextSticky = true; + } else if (menuPosAbsoluteY < minMenuY) { + nextTop = prevScrollTop + minMenuY; + } + } + if (nextSticky === true && stickyCache === false) { + menu.classList.add('sticky'); + stickyCache = true; + } else if (nextSticky === false && stickyCache === true) { + menu.classList.remove('sticky'); + stickyCache = false; + } + if (nextTop !== null) { + menu.style.top = nextTop + 'px'; + topCache = nextTop; + } + prevScrollTop = scrollTop; + }, { passive: true }); + })(); + (function controllBorder() { + function updateBorder() { + if (menu.offsetTop === 0) { + menu.classList.remove('bordered'); + } else { + menu.classList.add('bordered'); + } + } + updateBorder(); + document.addEventListener('scroll', updateBorder, { passive: true }); + })(); +})(); diff --git a/cli/.gitignore b/cli/.gitignore new file mode 100644 index 0000000000..42061c01a1 --- /dev/null +++ b/cli/.gitignore @@ -0,0 +1 @@ +README.md \ No newline at end of file diff --git a/cli/index.html b/cli/index.html new file mode 100644 index 0000000000..2d193737e6 --- /dev/null +++ b/cli/index.html @@ -0,0 +1,508 @@ + + + + + + CLI - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Command-Line Help for powdr

+

This document contains the help content for the powdr command-line program.

+

Command Overview:

+ +

powdr

+

powdr CLI to compile powdr-asm and powdr-pil programs

+

Usage: powdr [OPTIONS] [COMMAND]

+
Subcommands:
+
    +
  • pil — Runs compilation and witness generation for .pil and .asm files. First converts .asm files to .pil, if needed. Then converts the .pil file to json and generates fixed and witness column data files
  • +
  • prove
  • +
  • verify
  • +
  • verification-key
  • +
  • export-verifier
  • +
  • setup
  • +
  • reformat — Parses and prints the PIL file on stdout
  • +
  • optimize-pil — Optimizes the PIL file and outputs it on stdout
  • +
  • test — Executes all functions starting with test_ in every module called test (or sub-module thereof) starting from the given module
  • +
+
Options:
+
    +
  • +

    --log-level <LOG_LEVEL> — Set log filter value [ off, error, warn, info, debug, trace ]

    +

    Default value: INFO

    +
  • +
+

powdr pil

+

Runs compilation and witness generation for .pil and .asm files. First converts .asm files to .pil, if needed. Then converts the .pil file to json and generates fixed and witness column data files

+

Usage: powdr pil [OPTIONS] <FILE>

+
Arguments:
+
    +
  • <FILE> — Input file
  • +
+
Options:
+
    +
  • +

    --field <FIELD> — The field to use

    +

    Default value: gl

    +

    Possible values: bb, kb, m31, gl, bn254

    +
  • +
  • +

    -o, --output-directory <OUTPUT_DIRECTORY> — Output directory for the PIL file, json file and fixed and witness column data

    +

    Default value: .

    +
  • +
  • +

    -w, --witness-values <WITNESS_VALUES> — Path to a CSV file containing externally computed witness values

    +
  • +
  • +

    -i, --inputs <INPUTS> — Comma-separated list of free inputs (numbers)

    +

    Default value: ``

    +
  • +
  • +

    -f, --force — Force overwriting of PIL output file

    +

    Default value: false

    +
  • +
  • +

    --pilo — Whether to output the pilo PIL object

    +

    Default value: false

    +
  • +
  • +

    -p, --prove-with <PROVE_WITH> — Generate a proof with a given backend

    +

    Possible values: mock, halo2, halo2-composite, halo2-mock, halo2-mock-composite, plonky3, plonky3-composite

    +
  • +
  • +

    --params <PARAMS> — File containing previously generated setup parameters

    +
  • +
  • +

    --backend-options <BACKEND_OPTIONS> — Backend options. Halo2: "poseidon", "snark_single" or "snark_aggr". EStark and PilStarkCLI: "stark_gl", "stark_bn" or "snark_bn"

    +
  • +
  • +

    --linker-mode <LINKER_MODE> — Linker mode, deciding how to reduce links to constraints

    +

    Possible values: native, bus

    +
  • +
  • +

    --degree-mode <DEGREE_MODE> — Degree mode, deciding whether to use a single monolithic table or a set of dynamically sized tables

    +
  • +
  • +

    --export-witness-csv — Generate a CSV file containing the witness column values

    +

    Default value: false

    +
  • +
  • +

    --export-all-columns-csv — Generate a CSV file containing all fixed and witness column values. Useful for debugging purposes

    +

    Default value: false

    +
  • +
  • +

    --csv-mode <CSV_MODE> — How to render field elements in the csv file

    +

    Default value: hex

    +

    Possible values: i, ui, hex

    +
  • +
+

powdr prove

+

Usage: powdr prove [OPTIONS] --backend <BACKEND> <FILE>

+
Arguments:
+
    +
  • <FILE> — Input PIL file
  • +
+
Options:
+
    +
  • +

    -d, --dir <DIR> — Directory to find the committed and fixed values

    +

    Default value: .

    +
  • +
  • +

    --field <FIELD> — The field to use

    +

    Default value: gl

    +

    Possible values: bb, kb, m31, gl, bn254

    +
  • +
  • +

    -b, --backend <BACKEND> — Generate a proof with a given backend

    +

    Possible values: mock, halo2, halo2-composite, halo2-mock, halo2-mock-composite, plonky3, plonky3-composite

    +
  • +
  • +

    --backend-options <BACKEND_OPTIONS> — Backend options. Halo2: "poseidon", "snark_single" or "snark_aggr". EStark and PilStarkCLI: "stark_gl", "stark_bn" or "snark_bn"

    +
  • +
  • +

    --proof <PROOF> — File containing previously generated proof for aggregation

    +
  • +
  • +

    --vkey <VKEY> — File containing previously generated verification key

    +
  • +
  • +

    --vkey-app <VKEY_APP> — File containing the verification key of a proof to be verified recursively

    +
  • +
  • +

    --params <PARAMS> — File containing previously generated setup parameters

    +
  • +
+

powdr verify

+

Usage: powdr verify [OPTIONS] --backend <BACKEND> --proof <PROOF> --vkey <VKEY> <FILE>

+
Arguments:
+
    +
  • <FILE> — Input PIL file
  • +
+
Options:
+
    +
  • +

    -d, --dir <DIR> — Directory to find the fixed values

    +

    Default value: .

    +
  • +
  • +

    --field <FIELD> — The field to use

    +

    Default value: gl

    +

    Possible values: bb, kb, m31, gl, bn254

    +
  • +
  • +

    -b, --backend <BACKEND> — Generate a proof with a given backend

    +

    Possible values: mock, halo2, halo2-composite, halo2-mock, halo2-mock-composite, plonky3, plonky3-composite

    +
  • +
  • +

    --backend-options <BACKEND_OPTIONS> — Backend options. Halo2: "poseidon", "snark_single" or "snark_aggr". EStark and PilStarkCLI: "stark_gl", "stark_bn" or "snark_bn"

    +
  • +
  • +

    --proof <PROOF> — File containing the proof

    +
  • +
  • +

    --publics <PUBLICS> — Comma-separated list of public inputs (numbers)

    +

    Default value: ``

    +
  • +
  • +

    --vkey <VKEY> — File containing the verification key

    +
  • +
  • +

    --params <PARAMS> — File containing the params

    +
  • +
+

powdr verification-key

+

Usage: powdr verification-key [OPTIONS] --backend <BACKEND> <FILE>

+
Arguments:
+
    +
  • <FILE> — Input PIL file
  • +
+
Options:
+
    +
  • +

    -d, --dir <DIR> — Directory to find the fixed values

    +

    Default value: .

    +
  • +
  • +

    --field <FIELD> — The field to use

    +

    Default value: gl

    +

    Possible values: bb, kb, m31, gl, bn254

    +
  • +
  • +

    -b, --backend <BACKEND> — Chosen backend

    +

    Possible values: mock, halo2, halo2-composite, halo2-mock, halo2-mock-composite, plonky3, plonky3-composite

    +
  • +
  • +

    --backend-options <BACKEND_OPTIONS> — Backend options. Halo2: "poseidon", "snark_single" or "snark_aggr". EStark and PilStarkCLI: "stark_gl", "stark_bn" or "snark_bn"

    +
  • +
  • +

    --params <PARAMS> — File containing previously generated setup parameters. This will be needed for SNARK verification keys but not for STARK

    +
  • +
  • +

    --vkey-app <VKEY_APP> — File containing the verification key of a proof to be verified recursively

    +
  • +
+

powdr export-verifier

+

Usage: powdr export-verifier [OPTIONS] --backend <BACKEND> <FILE>

+
Arguments:
+
    +
  • <FILE> — Input PIL file
  • +
+
Options:
+
    +
  • +

    -d, --dir <DIR> — Directory to find the fixed values

    +

    Default value: .

    +
  • +
  • +

    --field <FIELD> — The field to use

    +

    Default value: gl

    +

    Possible values: bb, kb, m31, gl, bn254

    +
  • +
  • +

    -b, --backend <BACKEND> — Chosen backend

    +

    Possible values: mock, halo2, halo2-composite, halo2-mock, halo2-mock-composite, plonky3, plonky3-composite

    +
  • +
  • +

    --backend-options <BACKEND_OPTIONS> — Backend options. Halo2: "poseidon", "snark_single" or "snark_aggr". EStark and PilStarkCLI: "stark_gl", "stark_bn" or "snark_bn"

    +
  • +
  • +

    --params <PARAMS> — File containing previously generated setup parameters. This will be needed for SNARK verification keys but not for STARK

    +
  • +
  • +

    --vkey <VKEY> — File containing previously generated verification key

    +
  • +
+

powdr setup

+

Usage: powdr setup [OPTIONS] --backend <BACKEND> <SIZE>

+
Arguments:
+
    +
  • <SIZE> — Size of the parameters
  • +
+
Options:
+
    +
  • +

    -d, --dir <DIR> — Directory to output the generated parameters

    +

    Default value: .

    +
  • +
  • +

    --field <FIELD> — The field to use

    +

    Default value: gl

    +

    Possible values: bb, kb, m31, gl, bn254

    +
  • +
  • +

    -b, --backend <BACKEND> — Generate a proof with a given backend

    +

    Possible values: mock, halo2, halo2-composite, halo2-mock, halo2-mock-composite, plonky3, plonky3-composite

    +
  • +
+

powdr reformat

+

Parses and prints the PIL file on stdout

+

Usage: powdr reformat <FILE>

+
Arguments:
+
    +
  • <FILE> — Input file
  • +
+

powdr optimize-pil

+

Optimizes the PIL file and outputs it on stdout

+

Usage: powdr optimize-pil [OPTIONS] <FILE>

+
Arguments:
+
    +
  • <FILE> — Input file
  • +
+
Options:
+
    +
  • +

    --field <FIELD> — The field to use

    +

    Default value: gl

    +

    Possible values: bb, kb, m31, gl, bn254

    +
  • +
+

powdr test

+

Executes all functions starting with test_ in every module called test (or sub-module thereof) starting from the given module

+

Usage: powdr test [OPTIONS] <FILE>

+
Arguments:
+
    +
  • <FILE> — Input file
  • +
+
Options:
+
    +
  • +

    --field <FIELD> — The field to use

    +

    Default value: gl

    +

    Possible values: bb, kb, m31, gl, bn254

    +
  • +
+
+

+This document was generated automatically by +clap-markdown. +

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/clipboard.min.js b/clipboard.min.js new file mode 100644 index 0000000000..02c549e35c --- /dev/null +++ b/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.4 + * https://zenorocha.github.io/clipboard.js + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return function(n){var o={};function r(t){if(o[t])return o[t].exports;var e=o[t]={i:t,l:!1,exports:{}};return n[t].call(e.exports,e,e.exports,r),e.l=!0,e.exports}return r.m=n,r.c=o,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=0)}([function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function o(t,e){for(var n=0;n .hljs { + color: var(--links); +} + +/* + body-container is necessary because mobile browsers don't seem to like + overflow-x on the body tag when there is a tag. +*/ +#body-container { + /* + This is used when the sidebar pushes the body content off the side of + the screen on small screens. Without it, dragging on mobile Safari + will want to reposition the viewport in a weird way. + */ + overflow-x: clip; +} + +/* Menu Bar */ + +#menu-bar, +#menu-bar-hover-placeholder { + z-index: 101; + margin: auto calc(0px - var(--page-padding)); +} +#menu-bar { + position: relative; + display: flex; + flex-wrap: wrap; + background-color: var(--bg); + border-block-end-color: var(--bg); + border-block-end-width: 1px; + border-block-end-style: solid; +} +#menu-bar.sticky, +#menu-bar-hover-placeholder:hover + #menu-bar, +#menu-bar:hover, +html.sidebar-visible #menu-bar { + position: -webkit-sticky; + position: sticky; + top: 0 !important; +} +#menu-bar-hover-placeholder { + position: sticky; + position: -webkit-sticky; + top: 0; + height: var(--menu-bar-height); +} +#menu-bar.bordered { + border-block-end-color: var(--table-border-color); +} +#menu-bar i, #menu-bar .icon-button { + position: relative; + padding: 0 8px; + z-index: 10; + line-height: var(--menu-bar-height); + cursor: pointer; + transition: color 0.5s; +} +@media only screen and (max-width: 420px) { + #menu-bar i, #menu-bar .icon-button { + padding: 0 5px; + } +} + +.icon-button { + border: none; + background: none; + padding: 0; + color: inherit; +} +.icon-button i { + margin: 0; +} + +.right-buttons { + margin: 0 15px; +} +.right-buttons a { + text-decoration: none; +} + +.left-buttons { + display: flex; + margin: 0 5px; +} +html:not(.js) .left-buttons button { + display: none; +} + +.menu-title { + display: inline-block; + font-weight: 200; + font-size: 2.4rem; + line-height: var(--menu-bar-height); + text-align: center; + margin: 0; + flex: 1; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.menu-title { + cursor: pointer; +} + +.menu-bar, +.menu-bar:visited, +.nav-chapters, +.nav-chapters:visited, +.mobile-nav-chapters, +.mobile-nav-chapters:visited, +.menu-bar .icon-button, +.menu-bar a i { + color: var(--icons); +} + +.menu-bar i:hover, +.menu-bar .icon-button:hover, +.nav-chapters:hover, +.mobile-nav-chapters i:hover { + color: var(--icons-hover); +} + +/* Nav Icons */ + +.nav-chapters { + font-size: 2.5em; + text-align: center; + text-decoration: none; + + position: fixed; + top: 0; + bottom: 0; + margin: 0; + max-width: 150px; + min-width: 90px; + + display: flex; + justify-content: center; + align-content: center; + flex-direction: column; + + transition: color 0.5s, background-color 0.5s; +} + +.nav-chapters:hover { + text-decoration: none; + background-color: var(--theme-hover); + transition: background-color 0.15s, color 0.15s; +} + +.nav-wrapper { + margin-block-start: 50px; + display: none; +} + +.mobile-nav-chapters { + font-size: 2.5em; + text-align: center; + text-decoration: none; + width: 90px; + border-radius: 5px; + background-color: var(--sidebar-bg); +} + +/* Only Firefox supports flow-relative values */ +.previous { float: left; } +[dir=rtl] .previous { float: right; } + +/* Only Firefox supports flow-relative values */ +.next { + float: right; + right: var(--page-padding); +} +[dir=rtl] .next { + float: left; + right: unset; + left: var(--page-padding); +} + +/* Use the correct buttons for RTL layouts*/ +[dir=rtl] .previous i.fa-angle-left:before {content:"\f105";} +[dir=rtl] .next i.fa-angle-right:before { content:"\f104"; } + +@media only screen and (max-width: 1080px) { + .nav-wide-wrapper { display: none; } + .nav-wrapper { display: block; } +} + +/* sidebar-visible */ +@media only screen and (max-width: 1380px) { + #sidebar-toggle-anchor:checked ~ .page-wrapper .nav-wide-wrapper { display: none; } + #sidebar-toggle-anchor:checked ~ .page-wrapper .nav-wrapper { display: block; } +} + +/* Inline code */ + +:not(pre) > .hljs { + display: inline; + padding: 0.1em 0.3em; + border-radius: 3px; +} + +:not(pre):not(a) > .hljs { + color: var(--inline-code-color); + overflow-x: initial; +} + +a:hover > .hljs { + text-decoration: underline; +} + +pre { + position: relative; +} +pre > .buttons { + position: absolute; + z-index: 100; + right: 0px; + top: 2px; + margin: 0px; + padding: 2px 0px; + + color: var(--sidebar-fg); + cursor: pointer; + visibility: hidden; + opacity: 0; + transition: visibility 0.1s linear, opacity 0.1s linear; +} +pre:hover > .buttons { + visibility: visible; + opacity: 1 +} +pre > .buttons :hover { + color: var(--sidebar-active); + border-color: var(--icons-hover); + background-color: var(--theme-hover); +} +pre > .buttons i { + margin-inline-start: 8px; +} +pre > .buttons button { + cursor: inherit; + margin: 0px 5px; + padding: 4px 4px 3px 5px; + font-size: 23px; + + border-style: solid; + border-width: 1px; + border-radius: 4px; + border-color: var(--icons); + background-color: var(--theme-popup-bg); + transition: 100ms; + transition-property: color,border-color,background-color; + color: var(--icons); +} + +pre > .buttons button.clip-button { + padding: 2px 4px 0px 6px; +} +pre > .buttons button.clip-button::before { + /* clipboard image from octicons (https://github.com/primer/octicons/tree/v2.0.0) MIT license + */ + content: url('data:image/svg+xml,\ +\ +\ +'); + filter: var(--copy-button-filter); +} +pre > .buttons button.clip-button:hover::before { + filter: var(--copy-button-filter-hover); +} + +@media (pointer: coarse) { + pre > .buttons button { + /* On mobile, make it easier to tap buttons. */ + padding: 0.3rem 1rem; + } + + .sidebar-resize-indicator { + /* Hide resize indicator on devices with limited accuracy */ + display: none; + } +} +pre > code { + display: block; + padding: 1rem; +} + +/* FIXME: ACE editors overlap their buttons because ACE does absolute + positioning within the code block which breaks padding. The only solution I + can think of is to move the padding to the outer pre tag (or insert a div + wrapper), but that would require fixing a whole bunch of CSS rules. +*/ +.hljs.ace_editor { + padding: 0rem 0rem; +} + +pre > .result { + margin-block-start: 10px; +} + +/* Search */ + +#searchresults a { + text-decoration: none; +} + +mark { + border-radius: 2px; + padding-block-start: 0; + padding-block-end: 1px; + padding-inline-start: 3px; + padding-inline-end: 3px; + margin-block-start: 0; + margin-block-end: -1px; + margin-inline-start: -3px; + margin-inline-end: -3px; + background-color: var(--search-mark-bg); + transition: background-color 300ms linear; + cursor: pointer; +} + +mark.fade-out { + background-color: rgba(0,0,0,0) !important; + cursor: auto; +} + +.searchbar-outer { + margin-inline-start: auto; + margin-inline-end: auto; + max-width: var(--content-max-width); +} + +#searchbar { + width: 100%; + margin-block-start: 5px; + margin-block-end: 0; + margin-inline-start: auto; + margin-inline-end: auto; + padding: 10px 16px; + transition: box-shadow 300ms ease-in-out; + border: 1px solid var(--searchbar-border-color); + border-radius: 3px; + background-color: var(--searchbar-bg); + color: var(--searchbar-fg); +} +#searchbar:focus, +#searchbar.active { + box-shadow: 0 0 3px var(--searchbar-shadow-color); +} + +.searchresults-header { + font-weight: bold; + font-size: 1em; + padding-block-start: 18px; + padding-block-end: 0; + padding-inline-start: 5px; + padding-inline-end: 0; + color: var(--searchresults-header-fg); +} + +.searchresults-outer { + margin-inline-start: auto; + margin-inline-end: auto; + max-width: var(--content-max-width); + border-block-end: 1px dashed var(--searchresults-border-color); +} + +ul#searchresults { + list-style: none; + padding-inline-start: 20px; +} +ul#searchresults li { + margin: 10px 0px; + padding: 2px; + border-radius: 2px; +} +ul#searchresults li.focus { + background-color: var(--searchresults-li-bg); +} +ul#searchresults span.teaser { + display: block; + clear: both; + margin-block-start: 5px; + margin-block-end: 0; + margin-inline-start: 20px; + margin-inline-end: 0; + font-size: 0.8em; +} +ul#searchresults span.teaser em { + font-weight: bold; + font-style: normal; +} + +/* Sidebar */ + +.sidebar { + position: fixed; + left: 0; + top: 0; + bottom: 0; + width: var(--sidebar-width); + font-size: 0.875em; + box-sizing: border-box; + -webkit-overflow-scrolling: touch; + overscroll-behavior-y: contain; + background-color: var(--sidebar-bg); + color: var(--sidebar-fg); +} +.sidebar-iframe-inner { + background-color: var(--sidebar-bg); + color: var(--sidebar-fg); + padding: 10px 10px; + margin: 0; + font-size: 1.4rem; +} +.sidebar-iframe-outer { + border: none; + height: 100%; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; +} +[dir=rtl] .sidebar { left: unset; right: 0; } +.sidebar-resizing { + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; +} +html:not(.sidebar-resizing) .sidebar { + transition: transform 0.3s; /* Animation: slide away */ +} +.sidebar code { + line-height: 2em; +} +.sidebar .sidebar-scrollbox { + overflow-y: auto; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + padding: 10px 10px; +} +.sidebar .sidebar-resize-handle { + position: absolute; + cursor: col-resize; + width: 0; + right: calc(var(--sidebar-resize-indicator-width) * -1); + top: 0; + bottom: 0; + display: flex; + align-items: center; +} + +.sidebar-resize-handle .sidebar-resize-indicator { + width: 100%; + height: 12px; + background-color: var(--icons); + margin-inline-start: var(--sidebar-resize-indicator-space); +} + +[dir=rtl] .sidebar .sidebar-resize-handle { + left: calc(var(--sidebar-resize-indicator-width) * -1); + right: unset; +} +.js .sidebar .sidebar-resize-handle { + cursor: col-resize; + width: calc(var(--sidebar-resize-indicator-width) - var(--sidebar-resize-indicator-space)); +} +/* sidebar-hidden */ +#sidebar-toggle-anchor:not(:checked) ~ .sidebar { + transform: translateX(calc(0px - var(--sidebar-width) - var(--sidebar-resize-indicator-width))); + z-index: -1; +} +[dir=rtl] #sidebar-toggle-anchor:not(:checked) ~ .sidebar { + transform: translateX(calc(var(--sidebar-width) + var(--sidebar-resize-indicator-width))); +} +.sidebar::-webkit-scrollbar { + background: var(--sidebar-bg); +} +.sidebar::-webkit-scrollbar-thumb { + background: var(--scrollbar); +} + +/* sidebar-visible */ +#sidebar-toggle-anchor:checked ~ .page-wrapper { + transform: translateX(calc(var(--sidebar-width) + var(--sidebar-resize-indicator-width))); +} +[dir=rtl] #sidebar-toggle-anchor:checked ~ .page-wrapper { + transform: translateX(calc(0px - var(--sidebar-width) - var(--sidebar-resize-indicator-width))); +} +@media only screen and (min-width: 620px) { + #sidebar-toggle-anchor:checked ~ .page-wrapper { + transform: none; + margin-inline-start: calc(var(--sidebar-width) + var(--sidebar-resize-indicator-width)); + } + [dir=rtl] #sidebar-toggle-anchor:checked ~ .page-wrapper { + transform: none; + } +} + +.chapter { + list-style: none outside none; + padding-inline-start: 0; + line-height: 2.2em; +} + +.chapter ol { + width: 100%; +} + +.chapter li { + display: flex; + color: var(--sidebar-non-existant); +} +.chapter li a { + display: block; + padding: 0; + text-decoration: none; + color: var(--sidebar-fg); +} + +.chapter li a:hover { + color: var(--sidebar-active); +} + +.chapter li a.active { + color: var(--sidebar-active); +} + +.chapter li > a.toggle { + cursor: pointer; + display: block; + margin-inline-start: auto; + padding: 0 10px; + user-select: none; + opacity: 0.68; +} + +.chapter li > a.toggle div { + transition: transform 0.5s; +} + +/* collapse the section */ +.chapter li:not(.expanded) + li > ol { + display: none; +} + +.chapter li.chapter-item { + line-height: 1.5em; + margin-block-start: 0.6em; +} + +.chapter li.expanded > a.toggle div { + transform: rotate(90deg); +} + +.spacer { + width: 100%; + height: 3px; + margin: 5px 0px; +} +.chapter .spacer { + background-color: var(--sidebar-spacer); +} + +@media (-moz-touch-enabled: 1), (pointer: coarse) { + .chapter li a { padding: 5px 0; } + .spacer { margin: 10px 0; } +} + +.section { + list-style: none outside none; + padding-inline-start: 20px; + line-height: 1.9em; +} + +/* Theme Menu Popup */ + +.theme-popup { + position: absolute; + left: 10px; + top: var(--menu-bar-height); + z-index: 1000; + border-radius: 4px; + font-size: 0.7em; + color: var(--fg); + background: var(--theme-popup-bg); + border: 1px solid var(--theme-popup-border); + margin: 0; + padding: 0; + list-style: none; + display: none; + /* Don't let the children's background extend past the rounded corners. */ + overflow: hidden; +} +[dir=rtl] .theme-popup { left: unset; right: 10px; } +.theme-popup .default { + color: var(--icons); +} +.theme-popup .theme { + width: 100%; + border: 0; + margin: 0; + padding: 2px 20px; + line-height: 25px; + white-space: nowrap; + text-align: start; + cursor: pointer; + color: inherit; + background: inherit; + font-size: inherit; +} +.theme-popup .theme:hover { + background-color: var(--theme-hover); +} + +.theme-selected::before { + display: inline-block; + content: "✓"; + margin-inline-start: -14px; + width: 14px; +} diff --git a/css/general.css b/css/general.css new file mode 100644 index 0000000000..0862b51673 --- /dev/null +++ b/css/general.css @@ -0,0 +1,242 @@ +/* Base styles and content styles */ + +:root { + /* Browser default font-size is 16px, this way 1 rem = 10px */ + font-size: 62.5%; + color-scheme: var(--color-scheme); +} + +html { + font-family: "Open Sans", sans-serif; + color: var(--fg); + background-color: var(--bg); + text-size-adjust: none; + -webkit-text-size-adjust: none; +} + +body { + margin: 0; + font-size: 1.6rem; + overflow-x: hidden; +} + +code { + font-family: var(--mono-font) !important; + font-size: var(--code-font-size); + direction: ltr !important; +} + +/* make long words/inline code not x overflow */ +main { + overflow-wrap: break-word; +} + +/* make wide tables scroll if they overflow */ +.table-wrapper { + overflow-x: auto; +} + +/* Don't change font size in headers. */ +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + font-size: unset; +} + +.left { float: left; } +.right { float: right; } +.boring { opacity: 0.6; } +.hide-boring .boring { display: none; } +.hidden { display: none !important; } + +h2, h3 { margin-block-start: 2.5em; } +h4, h5 { margin-block-start: 2em; } + +.header + .header h3, +.header + .header h4, +.header + .header h5 { + margin-block-start: 1em; +} + +h1:target::before, +h2:target::before, +h3:target::before, +h4:target::before, +h5:target::before, +h6:target::before { + display: inline-block; + content: "»"; + margin-inline-start: -30px; + width: 30px; +} + +/* This is broken on Safari as of version 14, but is fixed + in Safari Technology Preview 117 which I think will be Safari 14.2. + https://bugs.webkit.org/show_bug.cgi?id=218076 +*/ +:target { + /* Safari does not support logical properties */ + scroll-margin-top: calc(var(--menu-bar-height) + 0.5em); +} + +.page { + outline: 0; + padding: 0 var(--page-padding); + margin-block-start: calc(0px - var(--menu-bar-height)); /* Compensate for the #menu-bar-hover-placeholder */ +} +.page-wrapper { + box-sizing: border-box; + background-color: var(--bg); +} +.no-js .page-wrapper, +.js:not(.sidebar-resizing) .page-wrapper { + transition: margin-left 0.3s ease, transform 0.3s ease; /* Animation: slide away */ +} +[dir=rtl] .js:not(.sidebar-resizing) .page-wrapper { + transition: margin-right 0.3s ease, transform 0.3s ease; /* Animation: slide away */ +} + +.content { + overflow-y: auto; + padding: 0 5px 50px 5px; +} +.content main { + margin-inline-start: auto; + margin-inline-end: auto; + max-width: var(--content-max-width); +} +.content p { line-height: 1.45em; } +.content ol { line-height: 1.45em; } +.content ul { line-height: 1.45em; } +.content a { text-decoration: none; } +.content a:hover { text-decoration: underline; } +.content img, .content video { max-width: 100%; } +.content .header:link, +.content .header:visited { + color: var(--fg); +} +.content .header:link, +.content .header:visited:hover { + text-decoration: none; +} + +table { + margin: 0 auto; + border-collapse: collapse; +} +table td { + padding: 3px 20px; + border: 1px var(--table-border-color) solid; +} +table thead { + background: var(--table-header-bg); +} +table thead td { + font-weight: 700; + border: none; +} +table thead th { + padding: 3px 20px; +} +table thead tr { + border: 1px var(--table-header-bg) solid; +} +/* Alternate background colors for rows */ +table tbody tr:nth-child(2n) { + background: var(--table-alternate-bg); +} + + +blockquote { + margin: 20px 0; + padding: 0 20px; + color: var(--fg); + background-color: var(--quote-bg); + border-block-start: .1em solid var(--quote-border); + border-block-end: .1em solid var(--quote-border); +} + +.warning { + margin: 20px; + padding: 0 20px; + border-inline-start: 2px solid var(--warning-border); +} + +.warning:before { + position: absolute; + width: 3rem; + height: 3rem; + margin-inline-start: calc(-1.5rem - 21px); + content: "ⓘ"; + text-align: center; + background-color: var(--bg); + color: var(--warning-border); + font-weight: bold; + font-size: 2rem; +} + +blockquote .warning:before { + background-color: var(--quote-bg); +} + +kbd { + background-color: var(--table-border-color); + border-radius: 4px; + border: solid 1px var(--theme-popup-border); + box-shadow: inset 0 -1px 0 var(--theme-hover); + display: inline-block; + font-size: var(--code-font-size); + font-family: var(--mono-font); + line-height: 10px; + padding: 4px 5px; + vertical-align: middle; +} + +sup { + /* Set the line-height for superscript and footnote references so that there + isn't an awkward space appearing above lines that contain the footnote. + + See https://github.com/rust-lang/mdBook/pull/2443#discussion_r1813773583 + for an explanation. + */ + line-height: 0; +} + +:not(.footnote-definition) + .footnote-definition, +.footnote-definition + :not(.footnote-definition) { + margin-block-start: 2em; +} +.footnote-definition { + font-size: 0.9em; + margin: 0.5em 0; +} +.footnote-definition p { + display: inline; +} + +.tooltiptext { + position: absolute; + visibility: hidden; + color: #fff; + background-color: #333; + transform: translateX(-50%); /* Center by moving tooltip 50% of its width left */ + left: -8px; /* Half of the width of the icon */ + top: -35px; + font-size: 0.8em; + text-align: center; + border-radius: 6px; + padding: 5px 8px; + margin: 5px; + z-index: 1000; +} +.tooltipped .tooltiptext { + visibility: visible; +} + +.chapter li.part-title { + color: var(--sidebar-fg); + margin: 5px 0px; + font-weight: bold; +} + +.result-no-output { + font-style: italic; +} diff --git a/css/print.css b/css/print.css new file mode 100644 index 0000000000..80ec3a5441 --- /dev/null +++ b/css/print.css @@ -0,0 +1,50 @@ + +#sidebar, +#menu-bar, +.nav-chapters, +.mobile-nav-chapters { + display: none; +} + +#page-wrapper.page-wrapper { + transform: none !important; + margin-inline-start: 0px; + overflow-y: initial; +} + +#content { + max-width: none; + margin: 0; + padding: 0; +} + +.page { + overflow-y: initial; +} + +code { + direction: ltr !important; +} + +pre > .buttons { + z-index: 2; +} + +a, a:visited, a:active, a:hover { + color: #4183c4; + text-decoration: none; +} + +h1, h2, h3, h4, h5, h6 { + page-break-inside: avoid; + page-break-after: avoid; +} + +pre, code { + page-break-inside: avoid; + white-space: pre-wrap; +} + +.fa { + display: none !important; +} diff --git a/css/variables.css b/css/variables.css new file mode 100644 index 0000000000..12d1db7a33 --- /dev/null +++ b/css/variables.css @@ -0,0 +1,309 @@ + +/* Globals */ + +:root { + --sidebar-width: 300px; + --sidebar-resize-indicator-width: 8px; + --sidebar-resize-indicator-space: 2px; + --page-padding: 15px; + --content-max-width: 750px; + --menu-bar-height: 50px; + --mono-font: "Source Code Pro", Consolas, "Ubuntu Mono", Menlo, "DejaVu Sans Mono", monospace, monospace; + --code-font-size: 0.875em /* please adjust the ace font size accordingly in editor.js */ +} + +/* Themes */ + +.ayu { + --bg: hsl(210, 25%, 8%); + --fg: #c5c5c5; + + --sidebar-bg: #14191f; + --sidebar-fg: #c8c9db; + --sidebar-non-existant: #5c6773; + --sidebar-active: #ffb454; + --sidebar-spacer: #2d334f; + + --scrollbar: var(--sidebar-fg); + + --icons: #737480; + --icons-hover: #b7b9cc; + + --links: #0096cf; + + --inline-code-color: #ffb454; + + --theme-popup-bg: #14191f; + --theme-popup-border: #5c6773; + --theme-hover: #191f26; + + --quote-bg: hsl(226, 15%, 17%); + --quote-border: hsl(226, 15%, 22%); + + --warning-border: #ff8e00; + + --table-border-color: hsl(210, 25%, 13%); + --table-header-bg: hsl(210, 25%, 28%); + --table-alternate-bg: hsl(210, 25%, 11%); + + --searchbar-border-color: #848484; + --searchbar-bg: #424242; + --searchbar-fg: #fff; + --searchbar-shadow-color: #d4c89f; + --searchresults-header-fg: #666; + --searchresults-border-color: #888; + --searchresults-li-bg: #252932; + --search-mark-bg: #e3b171; + + --color-scheme: dark; + + /* Same as `--icons` */ + --copy-button-filter: invert(45%) sepia(6%) saturate(621%) hue-rotate(198deg) brightness(99%) contrast(85%); + /* Same as `--sidebar-active` */ + --copy-button-filter-hover: invert(68%) sepia(55%) saturate(531%) hue-rotate(341deg) brightness(104%) contrast(101%); +} + +.coal { + --bg: hsl(200, 7%, 8%); + --fg: #98a3ad; + + --sidebar-bg: #292c2f; + --sidebar-fg: #a1adb8; + --sidebar-non-existant: #505254; + --sidebar-active: #3473ad; + --sidebar-spacer: #393939; + + --scrollbar: var(--sidebar-fg); + + --icons: #43484d; + --icons-hover: #b3c0cc; + + --links: #2b79a2; + + --inline-code-color: #c5c8c6; + + --theme-popup-bg: #141617; + --theme-popup-border: #43484d; + --theme-hover: #1f2124; + + --quote-bg: hsl(234, 21%, 18%); + --quote-border: hsl(234, 21%, 23%); + + --warning-border: #ff8e00; + + --table-border-color: hsl(200, 7%, 13%); + --table-header-bg: hsl(200, 7%, 28%); + --table-alternate-bg: hsl(200, 7%, 11%); + + --searchbar-border-color: #aaa; + --searchbar-bg: #b7b7b7; + --searchbar-fg: #000; + --searchbar-shadow-color: #aaa; + --searchresults-header-fg: #666; + --searchresults-border-color: #98a3ad; + --searchresults-li-bg: #2b2b2f; + --search-mark-bg: #355c7d; + + --color-scheme: dark; + + /* Same as `--icons` */ + --copy-button-filter: invert(26%) sepia(8%) saturate(575%) hue-rotate(169deg) brightness(87%) contrast(82%); + /* Same as `--sidebar-active` */ + --copy-button-filter-hover: invert(36%) sepia(70%) saturate(503%) hue-rotate(167deg) brightness(98%) contrast(89%); +} + +.light, html:not(.js) { + --bg: hsl(0, 0%, 100%); + --fg: hsl(0, 0%, 0%); + + --sidebar-bg: #fafafa; + --sidebar-fg: hsl(0, 0%, 0%); + --sidebar-non-existant: #aaaaaa; + --sidebar-active: #1f1fff; + --sidebar-spacer: #f4f4f4; + + --scrollbar: #8F8F8F; + + --icons: #747474; + --icons-hover: #000000; + + --links: #20609f; + + --inline-code-color: #301900; + + --theme-popup-bg: #fafafa; + --theme-popup-border: #cccccc; + --theme-hover: #e6e6e6; + + --quote-bg: hsl(197, 37%, 96%); + --quote-border: hsl(197, 37%, 91%); + + --warning-border: #ff8e00; + + --table-border-color: hsl(0, 0%, 95%); + --table-header-bg: hsl(0, 0%, 80%); + --table-alternate-bg: hsl(0, 0%, 97%); + + --searchbar-border-color: #aaa; + --searchbar-bg: #fafafa; + --searchbar-fg: #000; + --searchbar-shadow-color: #aaa; + --searchresults-header-fg: #666; + --searchresults-border-color: #888; + --searchresults-li-bg: #e4f2fe; + --search-mark-bg: #a2cff5; + + --color-scheme: light; + + /* Same as `--icons` */ + --copy-button-filter: invert(45.49%); + /* Same as `--sidebar-active` */ + --copy-button-filter-hover: invert(14%) sepia(93%) saturate(4250%) hue-rotate(243deg) brightness(99%) contrast(130%); +} + +.navy { + --bg: hsl(226, 23%, 11%); + --fg: #bcbdd0; + + --sidebar-bg: #282d3f; + --sidebar-fg: #c8c9db; + --sidebar-non-existant: #505274; + --sidebar-active: #2b79a2; + --sidebar-spacer: #2d334f; + + --scrollbar: var(--sidebar-fg); + + --icons: #737480; + --icons-hover: #b7b9cc; + + --links: #2b79a2; + + --inline-code-color: #c5c8c6; + + --theme-popup-bg: #161923; + --theme-popup-border: #737480; + --theme-hover: #282e40; + + --quote-bg: hsl(226, 15%, 17%); + --quote-border: hsl(226, 15%, 22%); + + --warning-border: #ff8e00; + + --table-border-color: hsl(226, 23%, 16%); + --table-header-bg: hsl(226, 23%, 31%); + --table-alternate-bg: hsl(226, 23%, 14%); + + --searchbar-border-color: #aaa; + --searchbar-bg: #aeaec6; + --searchbar-fg: #000; + --searchbar-shadow-color: #aaa; + --searchresults-header-fg: #5f5f71; + --searchresults-border-color: #5c5c68; + --searchresults-li-bg: #242430; + --search-mark-bg: #a2cff5; + + --color-scheme: dark; + + /* Same as `--icons` */ + --copy-button-filter: invert(51%) sepia(10%) saturate(393%) hue-rotate(198deg) brightness(86%) contrast(87%); + /* Same as `--sidebar-active` */ + --copy-button-filter-hover: invert(46%) sepia(20%) saturate(1537%) hue-rotate(156deg) brightness(85%) contrast(90%); +} + +.rust { + --bg: hsl(60, 9%, 87%); + --fg: #262625; + + --sidebar-bg: #3b2e2a; + --sidebar-fg: #c8c9db; + --sidebar-non-existant: #505254; + --sidebar-active: #e69f67; + --sidebar-spacer: #45373a; + + --scrollbar: var(--sidebar-fg); + + --icons: #737480; + --icons-hover: #262625; + + --links: #2b79a2; + + --inline-code-color: #6e6b5e; + + --theme-popup-bg: #e1e1db; + --theme-popup-border: #b38f6b; + --theme-hover: #99908a; + + --quote-bg: hsl(60, 5%, 75%); + --quote-border: hsl(60, 5%, 70%); + + --warning-border: #ff8e00; + + --table-border-color: hsl(60, 9%, 82%); + --table-header-bg: #b3a497; + --table-alternate-bg: hsl(60, 9%, 84%); + + --searchbar-border-color: #aaa; + --searchbar-bg: #fafafa; + --searchbar-fg: #000; + --searchbar-shadow-color: #aaa; + --searchresults-header-fg: #666; + --searchresults-border-color: #888; + --searchresults-li-bg: #dec2a2; + --search-mark-bg: #e69f67; + + /* Same as `--icons` */ + --copy-button-filter: invert(51%) sepia(10%) saturate(393%) hue-rotate(198deg) brightness(86%) contrast(87%); + /* Same as `--sidebar-active` */ + --copy-button-filter-hover: invert(77%) sepia(16%) saturate(1798%) hue-rotate(328deg) brightness(98%) contrast(83%); +} + +@media (prefers-color-scheme: dark) { + html:not(.js) { + --bg: hsl(200, 7%, 8%); + --fg: #98a3ad; + + --sidebar-bg: #292c2f; + --sidebar-fg: #a1adb8; + --sidebar-non-existant: #505254; + --sidebar-active: #3473ad; + --sidebar-spacer: #393939; + + --scrollbar: var(--sidebar-fg); + + --icons: #43484d; + --icons-hover: #b3c0cc; + + --links: #2b79a2; + + --inline-code-color: #c5c8c6; + + --theme-popup-bg: #141617; + --theme-popup-border: #43484d; + --theme-hover: #1f2124; + + --quote-bg: hsl(234, 21%, 18%); + --quote-border: hsl(234, 21%, 23%); + + --warning-border: #ff8e00; + + --table-border-color: hsl(200, 7%, 13%); + --table-header-bg: hsl(200, 7%, 28%); + --table-alternate-bg: hsl(200, 7%, 11%); + + --searchbar-border-color: #aaa; + --searchbar-bg: #b7b7b7; + --searchbar-fg: #000; + --searchbar-shadow-color: #aaa; + --searchresults-header-fg: #666; + --searchresults-border-color: #98a3ad; + --searchresults-li-bg: #2b2b2f; + --search-mark-bg: #355c7d; + + --color-scheme: dark; + + /* Same as `--icons` */ + --copy-button-filter: invert(26%) sepia(8%) saturate(575%) hue-rotate(169deg) brightness(87%) contrast(82%); + /* Same as `--sidebar-active` */ + --copy-button-filter-hover: invert(36%) sepia(70%) saturate(503%) hue-rotate(167deg) brightness(98%) contrast(89%); + } +} diff --git a/dev/bench/data.js b/dev/bench/data.js new file mode 100644 index 0000000000..6b19b2cb85 --- /dev/null +++ b/dev/bench/data.js @@ -0,0 +1,41644 @@ +window.BENCHMARK_DATA = { + "lastUpdate": 1734956087677, + "repoUrl": "https://github.com/powdr-labs/powdr", + "entries": { + "Benchmarks": [ + { + "commit": { + "author": { + "email": "chris@ethereum.org", + "name": "chriseth", + "username": "chriseth" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": true, + "id": "0a12ffe1884b9fa39585bba18618baf2d26b166f", + "message": "Remove dependencies on build (#2217)\n\nThese runs make no use of the artefacts created in build and do a full\nre-build, so we might as well run them from the start.", + "timestamp": "2024-12-10T13:28:44Z", + "tree_id": "82f228ff2e5de67c94dd4d250fca00c3d961284b", + "url": "https://github.com/powdr-labs/powdr/commit/0a12ffe1884b9fa39585bba18618baf2d26b166f" + }, + "date": 1733840416560, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6946, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 599, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1106, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29190, + "range": "± 39", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24529, + "range": "± 34", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24437, + "range": "± 349", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17388, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 783889, + "range": "± 1113", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2707649, + "range": "± 2204", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9454093, + "range": "± 9186", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34895377, + "range": "± 48970", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 137826107, + "range": "± 296266", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3181, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2502, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2466, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1374, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65958, + "range": "± 167", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 254512, + "range": "± 178", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1032685, + "range": "± 1627", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4883911, + "range": "± 3773", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27696183, + "range": "± 17587", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8085657272, + "range": "± 39880323", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "192675f3d4f396d8a49f13733ccfaf7c540d033d", + "message": "Use arith-memory in RISCV", + "timestamp": "2024-12-10T12:27:33Z", + "url": "https://github.com/powdr-labs/powdr/pull/2199/commits/192675f3d4f396d8a49f13733ccfaf7c540d033d" + }, + "date": 1733840451463, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6785, + "range": "± 37", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 596, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1074, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28943, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24314, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24294, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17180, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 784201, + "range": "± 1172", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2707399, + "range": "± 3701", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9456314, + "range": "± 13185", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34742470, + "range": "± 40148", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 137915594, + "range": "± 163445", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3148, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2462, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2452, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1359, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66302, + "range": "± 36", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 254036, + "range": "± 329", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1032186, + "range": "± 1231", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4884420, + "range": "± 4782", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27821008, + "range": "± 42753", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8107346584, + "range": "± 14354288", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "Thibaut Schaeffer", + "username": "Schaeff", + "email": "schaeffer.thibaut@gmail.com" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "670802aaee125602269e7ef0e0f5422119598e69", + "message": "Fix book deploy again (#2218)\n\nTurns out `git worktree` does not track the remote branch, so the\nbenchmarks are not there.\nRevert to what we did before, and explicitly restore the benchmarks from\nthe remote `gh-pages` branch.", + "timestamp": "2024-12-10T14:09:38Z", + "url": "https://github.com/powdr-labs/powdr/commit/670802aaee125602269e7ef0e0f5422119598e69" + }, + "date": 1733840740595, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6926, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 597, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1068, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29024, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24212, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24193, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17006, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 780859, + "range": "± 1366", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2699338, + "range": "± 2649", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9393402, + "range": "± 10898", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34703373, + "range": "± 95989", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 137272431, + "range": "± 103376", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3117, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2457, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2492, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1360, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65658, + "range": "± 37", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251829, + "range": "± 437", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1028092, + "range": "± 1097", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4872321, + "range": "± 2677", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27607209, + "range": "± 14774", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8128908854, + "range": "± 63333675", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "33b9df440608e758f1000cd52a2b209a9f8ffe46", + "message": "Fix Plonky3 proofs for removed machines", + "timestamp": "2024-12-10T14:04:35Z", + "url": "https://github.com/powdr-labs/powdr/pull/2221/commits/33b9df440608e758f1000cd52a2b209a9f8ffe46" + }, + "date": 1733841086390, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6820, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 590, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1063, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28780, + "range": "± 30", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24030, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 23991, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 16952, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 783053, + "range": "± 629", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2716059, + "range": "± 2291", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9496616, + "range": "± 14580", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34858305, + "range": "± 69607", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138102849, + "range": "± 155048", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3124, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2451, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2453, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1373, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65931, + "range": "± 49", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252344, + "range": "± 247", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1028834, + "range": "± 919", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4892583, + "range": "± 5328", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27601338, + "range": "± 22526", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8193816946, + "range": "± 27359818", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "schaeffer.thibaut@gmail.com", + "name": "Thibaut Schaeffer", + "username": "Schaeff" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": false, + "id": "670802aaee125602269e7ef0e0f5422119598e69", + "message": "Fix book deploy again (#2218)\n\nTurns out `git worktree` does not track the remote branch, so the\nbenchmarks are not there.\nRevert to what we did before, and explicitly restore the benchmarks from\nthe remote `gh-pages` branch.", + "timestamp": "2024-12-10T14:09:38Z", + "tree_id": "bb3d3857b965109b4e4a9bb68d505dee34587967", + "url": "https://github.com/powdr-labs/powdr/commit/670802aaee125602269e7ef0e0f5422119598e69" + }, + "date": 1733842965112, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6860, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 593, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1097, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28906, + "range": "± 35", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24094, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24128, + "range": "± 106", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17032, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 786828, + "range": "± 1317", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2724686, + "range": "± 4274", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9487322, + "range": "± 25646", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35002965, + "range": "± 159836", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139679244, + "range": "± 633345", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3117, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2450, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2440, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1360, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65121, + "range": "± 63", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251539, + "range": "± 156", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1025114, + "range": "± 1076", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4894555, + "range": "± 18968", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27886722, + "range": "± 203357", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8358911831, + "range": "± 47137776", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "Georg Wiese", + "username": "georgwiese", + "email": "georgwiese@gmail.com" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "11c3c7023c8febdbb55cafcbd76003bd9f93ac58", + "message": "Fix Plonky3 proofs for removed machines (#2221)\n\nWe removed them in the proof, but still ran second-stage witgen for it.", + "timestamp": "2024-12-10T14:50:14Z", + "url": "https://github.com/powdr-labs/powdr/commit/11c3c7023c8febdbb55cafcbd76003bd9f93ac58" + }, + "date": 1733843172929, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7112, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 593, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1043, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29058, + "range": "± 49", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24266, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24140, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17028, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 792368, + "range": "± 1604", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2741509, + "range": "± 4898", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9601950, + "range": "± 29294", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35349442, + "range": "± 199344", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140483491, + "range": "± 500117", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3156, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2482, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2448, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1358, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65603, + "range": "± 35", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252742, + "range": "± 329", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1027643, + "range": "± 1025", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4882232, + "range": "± 8196", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28062539, + "range": "± 226821", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8563080642, + "range": "± 64921889", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "georgwiese@gmail.com", + "name": "Georg Wiese", + "username": "georgwiese" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": false, + "id": "11c3c7023c8febdbb55cafcbd76003bd9f93ac58", + "message": "Fix Plonky3 proofs for removed machines (#2221)\n\nWe removed them in the proof, but still ran second-stage witgen for it.", + "timestamp": "2024-12-10T14:50:14Z", + "tree_id": "ec8a7c6fd1de246be8fc15f9b58db2fb0fae2fba", + "url": "https://github.com/powdr-labs/powdr/commit/11c3c7023c8febdbb55cafcbd76003bd9f93ac58" + }, + "date": 1733845315646, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6902, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 609, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1080, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29363, + "range": "± 29", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24550, + "range": "± 29", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24457, + "range": "± 30", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17308, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 792151, + "range": "± 1530", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2726890, + "range": "± 4132", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9605808, + "range": "± 39812", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35375025, + "range": "± 160219", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141070332, + "range": "± 984061", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3129, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2467, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2447, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1360, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65990, + "range": "± 54", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 254335, + "range": "± 216", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1034316, + "range": "± 4964", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4926834, + "range": "± 22926", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28295362, + "range": "± 383996", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8700422324, + "range": "± 74187665", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "0a2099e7c5e5714ba026ab4fe715663e4d74dee9", + "message": "Expressions and solving routines.", + "timestamp": "2024-12-10T15:27:05Z", + "url": "https://github.com/powdr-labs/powdr/pull/2212/commits/0a2099e7c5e5714ba026ab4fe715663e4d74dee9" + }, + "date": 1733846261955, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6773, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 616, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1043, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 31093, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 26078, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 26015, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 18391, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 797890, + "range": "± 1364", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2767754, + "range": "± 4526", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9658930, + "range": "± 11845", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35338683, + "range": "± 153814", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140285564, + "range": "± 387460", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3148, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2470, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2462, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1359, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65554, + "range": "± 51", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251086, + "range": "± 159", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1028937, + "range": "± 1334", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4860606, + "range": "± 5227", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27626228, + "range": "± 71084", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8093755162, + "range": "± 68384782", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "5014950ae8fe812a160581718a7c0b04c52c495b", + "message": "Expressions and solving routines.", + "timestamp": "2024-12-10T15:27:05Z", + "url": "https://github.com/powdr-labs/powdr/pull/2212/commits/5014950ae8fe812a160581718a7c0b04c52c495b" + }, + "date": 1733847868523, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6822, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 699, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1058, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29045, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24285, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24260, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17111, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 788714, + "range": "± 1125", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2715407, + "range": "± 4296", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9529092, + "range": "± 33226", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35046022, + "range": "± 156792", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141582231, + "range": "± 1064401", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3497, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2514, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2472, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1360, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65300, + "range": "± 32", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 250506, + "range": "± 216", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1024135, + "range": "± 1050", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4862130, + "range": "± 9893", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28007293, + "range": "± 99052", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8567617485, + "range": "± 81738345", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "2a6a10ee65e259ee0e05f6e09c6abeb4be5b94d4", + "message": "Refactorings around `process_lookup_direct`", + "timestamp": "2024-12-10T15:27:05Z", + "url": "https://github.com/powdr-labs/powdr/pull/2209/commits/2a6a10ee65e259ee0e05f6e09c6abeb4be5b94d4" + }, + "date": 1733847978836, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7003, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 612, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1098, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29421, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24534, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24448, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17323, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 771257, + "range": "± 607", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2656028, + "range": "± 2622", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9381022, + "range": "± 12246", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34231894, + "range": "± 30421", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 136669839, + "range": "± 105912", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3127, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2461, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2449, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1359, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65313, + "range": "± 54", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251758, + "range": "± 293", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1031035, + "range": "± 1399", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4857603, + "range": "± 3125", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27650171, + "range": "± 21851", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 7994134808, + "range": "± 38354678", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "Georg Wiese", + "username": "georgwiese", + "email": "georgwiese@gmail.com" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "0180542559db8ea6811c2b57d5b2ca292ea7ea69", + "message": "Refactorings around `process_lookup_direct` (#2209)\n\nThis PR refactors a few things:\n- `process_lookup_direct` no longer has a default implementation.\nEventually, we want all machines to implement it, so I figured it would\nbe better to explicitly panic in each machine.\n- Refactored the implementation of\n`FixedLookupMachine::process_plookup`, pulling some stuff out into a new\n`CallerData` struct. This is similar to what @chriseth has done on\n[`call_jit_from_block`](https://github.com/powdr-labs/powdr/compare/main...call_jit_from_block),\nsee the comment below.\n- As a first test, I implemented `process_lookup_direct` for the\n\"large\"-field memory machine (and `process_plookup` by wrapping\n`process_lookup_direct`)", + "timestamp": "2024-12-10T16:44:15Z", + "url": "https://github.com/powdr-labs/powdr/commit/0180542559db8ea6811c2b57d5b2ca292ea7ea69" + }, + "date": 1733850030986, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6948, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 675, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1212, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28723, + "range": "± 39", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24025, + "range": "± 32", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24033, + "range": "± 34", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17008, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 900069, + "range": "± 945", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 3108252, + "range": "± 2877", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 10867962, + "range": "± 19871", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 39435248, + "range": "± 182221", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 154032830, + "range": "± 430375", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3182, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2496, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2499, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1381, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65899, + "range": "± 153", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252882, + "range": "± 237", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1029355, + "range": "± 1201", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4850843, + "range": "± 3422", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27680141, + "range": "± 139311", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8124413452, + "range": "± 58727336", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "e3e1fdb5035e6c43248799c6914a795f371460e9", + "message": "witgen inference.", + "timestamp": "2024-12-10T15:27:05Z", + "url": "https://github.com/powdr-labs/powdr/pull/2219/commits/e3e1fdb5035e6c43248799c6914a795f371460e9" + }, + "date": 1733850273981, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7082, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 615, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1107, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29306, + "range": "± 27", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24491, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24470, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17297, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 786735, + "range": "± 1343", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2710580, + "range": "± 5452", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9537467, + "range": "± 32851", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35112377, + "range": "± 152844", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141420686, + "range": "± 1083512", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3118, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2443, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2452, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1370, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66175, + "range": "± 46", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 254381, + "range": "± 195", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1041433, + "range": "± 983", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4909351, + "range": "± 11011", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28427496, + "range": "± 205965", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8647094773, + "range": "± 48960392", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "georgwiese@gmail.com", + "name": "Georg Wiese", + "username": "georgwiese" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": true, + "id": "0180542559db8ea6811c2b57d5b2ca292ea7ea69", + "message": "Refactorings around `process_lookup_direct` (#2209)\n\nThis PR refactors a few things:\n- `process_lookup_direct` no longer has a default implementation.\nEventually, we want all machines to implement it, so I figured it would\nbe better to explicitly panic in each machine.\n- Refactored the implementation of\n`FixedLookupMachine::process_plookup`, pulling some stuff out into a new\n`CallerData` struct. This is similar to what @chriseth has done on\n[`call_jit_from_block`](https://github.com/powdr-labs/powdr/compare/main...call_jit_from_block),\nsee the comment below.\n- As a first test, I implemented `process_lookup_direct` for the\n\"large\"-field memory machine (and `process_plookup` by wrapping\n`process_lookup_direct`)", + "timestamp": "2024-12-10T16:44:15Z", + "tree_id": "3c3050b6316c6db5af054b636680e99dbfb8e8f4", + "url": "https://github.com/powdr-labs/powdr/commit/0180542559db8ea6811c2b57d5b2ca292ea7ea69" + }, + "date": 1733852047972, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6848, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 593, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1069, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29045, + "range": "± 28", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24336, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24954, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17278, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 794429, + "range": "± 2244", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2749887, + "range": "± 4172", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9557325, + "range": "± 19595", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34950155, + "range": "± 50678", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139339462, + "range": "± 261637", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3118, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2482, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2439, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1373, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66209, + "range": "± 49", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 250827, + "range": "± 266", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1020246, + "range": "± 1272", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4851170, + "range": "± 7651", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27600525, + "range": "± 158186", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8132598043, + "range": "± 57065964", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "8226810aafc3646e17da94f287dde5406c1d984a", + "message": "riscv-executor: handle machines that have been optimized away", + "timestamp": "2024-12-10T17:18:46Z", + "url": "https://github.com/powdr-labs/powdr/pull/2222/commits/8226810aafc3646e17da94f287dde5406c1d984a" + }, + "date": 1733852415728, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6798, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 590, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1088, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29231, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24519, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24428, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17329, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 781199, + "range": "± 764", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2703162, + "range": "± 3144", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9427656, + "range": "± 13342", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34768873, + "range": "± 85096", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138600524, + "range": "± 435092", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3127, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2452, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2469, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1361, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65296, + "range": "± 61", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251140, + "range": "± 506", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1029373, + "range": "± 1121", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4861902, + "range": "± 2810", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27597517, + "range": "± 76464", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8131295941, + "range": "± 37691411", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "1070ce9f35f241cf1422090f31eaf1a964e185c1", + "message": "Expressions and solving routines.", + "timestamp": "2024-12-10T20:23:46Z", + "url": "https://github.com/powdr-labs/powdr/pull/2212/commits/1070ce9f35f241cf1422090f31eaf1a964e185c1" + }, + "date": 1733867500663, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6992, + "range": "± 146", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 602, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1095, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29163, + "range": "± 667", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24465, + "range": "± 803", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24240, + "range": "± 295", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17239, + "range": "± 199", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 809356, + "range": "± 14115", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2810556, + "range": "± 56851", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9943056, + "range": "± 168297", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 36547343, + "range": "± 738159", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 145662435, + "range": "± 2792554", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3133, + "range": "± 36", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2457, + "range": "± 27", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2500, + "range": "± 30", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1377, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66434, + "range": "± 804", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 253708, + "range": "± 2778", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1038743, + "range": "± 17060", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4935954, + "range": "± 60494", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28722311, + "range": "± 484488", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8905121057, + "range": "± 132840153", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "aa91ce3ded82584f74ea90aeacf5032174315fbb", + "message": "witgen inference.", + "timestamp": "2024-12-10T20:23:46Z", + "url": "https://github.com/powdr-labs/powdr/pull/2219/commits/aa91ce3ded82584f74ea90aeacf5032174315fbb" + }, + "date": 1733869034512, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6946, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 609, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1062, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29269, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24448, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24777, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17211, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 784069, + "range": "± 840", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2709876, + "range": "± 4912", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9462919, + "range": "± 28230", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34755597, + "range": "± 55975", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138068649, + "range": "± 282523", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3153, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2444, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2441, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1358, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65794, + "range": "± 44", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252510, + "range": "± 284", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1031902, + "range": "± 1074", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4874113, + "range": "± 6892", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27929252, + "range": "± 181440", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8228646763, + "range": "± 62235781", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "e6843ba1ea3671a7c793b40aae4e6b690285e349", + "message": "Expressions and solving routines.", + "timestamp": "2024-12-10T20:23:46Z", + "url": "https://github.com/powdr-labs/powdr/pull/2212/commits/e6843ba1ea3671a7c793b40aae4e6b690285e349" + }, + "date": 1733869383325, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6964, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 630, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1086, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28886, + "range": "± 49", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24150, + "range": "± 29", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24048, + "range": "± 26", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17105, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 788695, + "range": "± 1089", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2733969, + "range": "± 3096", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9564649, + "range": "± 11050", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34944178, + "range": "± 81546", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138822521, + "range": "± 152179", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3173, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2510, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2469, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1362, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65964, + "range": "± 60", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 253636, + "range": "± 333", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1030681, + "range": "± 1170", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4869144, + "range": "± 4434", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27637260, + "range": "± 34096", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8085384291, + "range": "± 18030517", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "eb62678bd00f6cc4083367ef86f32e1765b2312f", + "message": "witgen inference.", + "timestamp": "2024-12-10T20:23:46Z", + "url": "https://github.com/powdr-labs/powdr/pull/2219/commits/eb62678bd00f6cc4083367ef86f32e1765b2312f" + }, + "date": 1733870501651, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6864, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 585, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1090, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29017, + "range": "± 30", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24234, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24210, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17146, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 780696, + "range": "± 1386", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2682337, + "range": "± 2084", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9401869, + "range": "± 43191", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34518104, + "range": "± 74593", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138007852, + "range": "± 369781", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3132, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2453, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2448, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1371, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65935, + "range": "± 40", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251497, + "range": "± 195", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1026186, + "range": "± 928", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4903704, + "range": "± 42636", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27994275, + "range": "± 101196", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8384164136, + "range": "± 50323224", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "53dddb47c6ef599e793dca6e7d01bf5cb41bcb34", + "message": "witgen inference.", + "timestamp": "2024-12-10T20:23:46Z", + "url": "https://github.com/powdr-labs/powdr/pull/2219/commits/53dddb47c6ef599e793dca6e7d01bf5cb41bcb34" + }, + "date": 1733908642541, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6919, + "range": "± 39", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 592, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1068, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28839, + "range": "± 69", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24116, + "range": "± 79", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24078, + "range": "± 176", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17037, + "range": "± 37", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 790223, + "range": "± 1700", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2728802, + "range": "± 8949", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9495569, + "range": "± 19358", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34885126, + "range": "± 101185", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139222307, + "range": "± 317754", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3130, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2451, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2455, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1369, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66410, + "range": "± 210", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 258066, + "range": "± 426", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1055704, + "range": "± 3594", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4892673, + "range": "± 11940", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27649832, + "range": "± 215939", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8125199649, + "range": "± 30392651", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "67e238e7726a6ba2bb4f75bafb28d8969270a3d0", + "message": "witgen inference.", + "timestamp": "2024-12-10T20:23:46Z", + "url": "https://github.com/powdr-labs/powdr/pull/2219/commits/67e238e7726a6ba2bb4f75bafb28d8969270a3d0" + }, + "date": 1733912379668, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6984, + "range": "± 89", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 576, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1055, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28672, + "range": "± 31", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 23955, + "range": "± 26", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 23941, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 16874, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 783514, + "range": "± 1277", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2706418, + "range": "± 3614", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9476639, + "range": "± 26654", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34826178, + "range": "± 107254", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138301311, + "range": "± 267051", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3123, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2452, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2448, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1363, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65918, + "range": "± 70", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 253528, + "range": "± 214", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1031295, + "range": "± 1218", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4882176, + "range": "± 6637", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27833132, + "range": "± 105169", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8515955531, + "range": "± 60698934", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "57da9452218c6bbf1dbef10c8c619d676ed3817e", + "message": "Use arith-memory in RISCV", + "timestamp": "2024-12-10T20:23:46Z", + "url": "https://github.com/powdr-labs/powdr/pull/2199/commits/57da9452218c6bbf1dbef10c8c619d676ed3817e" + }, + "date": 1733913490627, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6990, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 577, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1093, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29439, + "range": "± 64", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24633, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24659, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17469, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 791267, + "range": "± 3702", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2743625, + "range": "± 5903", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9590665, + "range": "± 13231", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35156565, + "range": "± 73714", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139333335, + "range": "± 400542", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3136, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2457, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2460, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1362, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66557, + "range": "± 33", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 253801, + "range": "± 184", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1037939, + "range": "± 1020", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4888182, + "range": "± 3422", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27722900, + "range": "± 52353", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8133117144, + "range": "± 17016444", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "cad7f37b3b3e02686aab364bc7482b89310bf707", + "message": "Expressions and solving routines.", + "timestamp": "2024-12-10T20:23:46Z", + "url": "https://github.com/powdr-labs/powdr/pull/2212/commits/cad7f37b3b3e02686aab364bc7482b89310bf707" + }, + "date": 1733915892928, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6832, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 599, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1053, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29257, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24383, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24297, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17105, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 789599, + "range": "± 1137", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2709044, + "range": "± 3708", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9424252, + "range": "± 22784", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34571270, + "range": "± 181474", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138626634, + "range": "± 520676", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3143, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2468, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2449, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1374, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65370, + "range": "± 28", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 250842, + "range": "± 189", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1024417, + "range": "± 902", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4885528, + "range": "± 19379", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27817144, + "range": "± 174479", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8369665079, + "range": "± 51709188", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "84c5d7575d52dc71905190a6e92c8a2b134bb928", + "message": "Expressions and solving routines.", + "timestamp": "2024-12-10T20:23:46Z", + "url": "https://github.com/powdr-labs/powdr/pull/2212/commits/84c5d7575d52dc71905190a6e92c8a2b134bb928" + }, + "date": 1733919349948, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6730, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 573, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1040, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29492, + "range": "± 29", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24494, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24464, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17311, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 794693, + "range": "± 733", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2745211, + "range": "± 3148", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9627545, + "range": "± 14336", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35196482, + "range": "± 68460", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139661535, + "range": "± 227692", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3133, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2464, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2448, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1372, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65869, + "range": "± 35", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252155, + "range": "± 150", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1026857, + "range": "± 1074", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4855905, + "range": "± 3774", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27532762, + "range": "± 17906", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 7974903347, + "range": "± 24624152", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "a21ca0c84f5a496d77622d1483b1cf12e6a8a9a5", + "message": "Expressions and solving routines.", + "timestamp": "2024-12-10T20:23:46Z", + "url": "https://github.com/powdr-labs/powdr/pull/2212/commits/a21ca0c84f5a496d77622d1483b1cf12e6a8a9a5" + }, + "date": 1733921195590, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7100, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 589, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1103, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29483, + "range": "± 52", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24626, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24529, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17291, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 805029, + "range": "± 3933", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2758331, + "range": "± 4919", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9640749, + "range": "± 14302", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35294814, + "range": "± 43076", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139762146, + "range": "± 162927", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3146, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2454, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2457, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1359, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65742, + "range": "± 45", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 253032, + "range": "± 253", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1031183, + "range": "± 1021", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4878841, + "range": "± 4472", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27579164, + "range": "± 32664", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8029083668, + "range": "± 35739995", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "af614130ac955fe011d9812718eb5bbde2cb8457", + "message": "Add support for constant column in STWO backend", + "timestamp": "2024-12-10T20:23:46Z", + "url": "https://github.com/powdr-labs/powdr/pull/2112/commits/af614130ac955fe011d9812718eb5bbde2cb8457" + }, + "date": 1733921510976, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6816, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 584, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1078, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29240, + "range": "± 37", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24376, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24299, + "range": "± 28", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17238, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 790032, + "range": "± 910", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2730916, + "range": "± 2823", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9583956, + "range": "± 11620", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35123782, + "range": "± 54490", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139354229, + "range": "± 180956", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3215, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2462, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2461, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1378, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65824, + "range": "± 55", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252224, + "range": "± 168", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1035987, + "range": "± 1175", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4890308, + "range": "± 2814", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27676254, + "range": "± 15839", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8065243786, + "range": "± 35995453", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "2b4d6b688e03a314526ced48cd277fbed91c319c", + "message": "[WIP] RISCV executor trace", + "timestamp": "2024-12-10T20:23:46Z", + "url": "https://github.com/powdr-labs/powdr/pull/2207/commits/2b4d6b688e03a314526ced48cd277fbed91c319c" + }, + "date": 1733925023820, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7616, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 704, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1062, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 30120, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 25155, + "range": "± 30", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 25071, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17722, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 808527, + "range": "± 1586", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2791858, + "range": "± 4801", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9769054, + "range": "± 20234", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35746236, + "range": "± 91804", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141674739, + "range": "± 948073", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3286, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2591, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2550, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1360, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 67249, + "range": "± 70", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 253499, + "range": "± 184", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1032404, + "range": "± 1482", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4905880, + "range": "± 21904", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27930416, + "range": "± 99318", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8352919264, + "range": "± 70145074", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "479a96d5fe973a35e2bf82c415a0633681b88165", + "message": "Expressions and solving routines.", + "timestamp": "2024-12-10T20:23:46Z", + "url": "https://github.com/powdr-labs/powdr/pull/2212/commits/479a96d5fe973a35e2bf82c415a0633681b88165" + }, + "date": 1733925944743, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6909, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 577, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1051, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29202, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24437, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24395, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17339, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 781401, + "range": "± 1314", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2708347, + "range": "± 3537", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9494831, + "range": "± 27912", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34750249, + "range": "± 68379", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 137298704, + "range": "± 758539", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3127, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2500, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2454, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1370, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65443, + "range": "± 33", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251181, + "range": "± 188", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1031115, + "range": "± 853", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4873408, + "range": "± 6190", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27614964, + "range": "± 115397", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8167146128, + "range": "± 100570163", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "Leo", + "username": "leonardoalt", + "email": "leo@powdrlabs.com" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "4f1aa4a5f3879e974f8f668b728a8f7eb656b528", + "message": "Use arith-memory in RISCV (#2199)", + "timestamp": "2024-12-11T13:52:34Z", + "url": "https://github.com/powdr-labs/powdr/commit/4f1aa4a5f3879e974f8f668b728a8f7eb656b528" + }, + "date": 1733926118227, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6764, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 577, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1030, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 30115, + "range": "± 89", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24656, + "range": "± 82", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24590, + "range": "± 57", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17445, + "range": "± 118", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 783697, + "range": "± 3496", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2701887, + "range": "± 7363", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9451000, + "range": "± 40230", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34702673, + "range": "± 160801", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138424800, + "range": "± 520341", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3142, + "range": "± 29", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2534, + "range": "± 32", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2455, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1366, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65353, + "range": "± 208", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 250885, + "range": "± 2469", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1027114, + "range": "± 5995", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4890549, + "range": "± 33422", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27744278, + "range": "± 203185", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8338234447, + "range": "± 59173764", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "leo@powdrlabs.com", + "name": "Leo", + "username": "leonardoalt" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": true, + "id": "4f1aa4a5f3879e974f8f668b728a8f7eb656b528", + "message": "Use arith-memory in RISCV (#2199)", + "timestamp": "2024-12-11T13:52:34Z", + "tree_id": "c7c08c44429b486f3e1e65dfcf64de0dba717680", + "url": "https://github.com/powdr-labs/powdr/commit/4f1aa4a5f3879e974f8f668b728a8f7eb656b528" + }, + "date": 1733927612294, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6777, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 571, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1044, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28958, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24318, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24240, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17150, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 798226, + "range": "± 2612", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2756130, + "range": "± 2331", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9763550, + "range": "± 44170", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35974989, + "range": "± 248911", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 143369682, + "range": "± 1758683", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3157, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2474, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2465, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1368, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66472, + "range": "± 32", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251308, + "range": "± 153", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1029249, + "range": "± 1332", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4893876, + "range": "± 28253", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28659553, + "range": "± 182488", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 9059597557, + "range": "± 109381449", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "t", + "username": "MuhtasimTanmoy", + "email": "mtanmoy5086@gmail.com" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "56d43c48b94d1e57b3504da5191c4a5dcb4dcc7e", + "message": "cargo-powdr gitignore add on template (#2213)\n\nhttps://github.com/powdr-labs/powdr/issues/2210", + "timestamp": "2024-12-11T14:48:04Z", + "url": "https://github.com/powdr-labs/powdr/commit/56d43c48b94d1e57b3504da5191c4a5dcb4dcc7e" + }, + "date": 1733929419387, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6802, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 576, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1081, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29384, + "range": "± 30", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24595, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24521, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17230, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 781565, + "range": "± 960", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2691559, + "range": "± 2712", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9417262, + "range": "± 8204", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34600923, + "range": "± 41697", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 136993715, + "range": "± 133067", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3494, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2459, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2457, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1371, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65973, + "range": "± 42", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252922, + "range": "± 218", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1034834, + "range": "± 978", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4879814, + "range": "± 4496", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27654465, + "range": "± 22599", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8099162120, + "range": "± 32285667", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "f446e46182796b34c821b6087080ae85ab8ffa5d", + "message": "Add support for constant column in STWO backend", + "timestamp": "2024-12-11T14:17:05Z", + "url": "https://github.com/powdr-labs/powdr/pull/2112/commits/f446e46182796b34c821b6087080ae85ab8ffa5d" + }, + "date": 1733929684550, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6768, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 592, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1056, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28801, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24641, + "range": "± 36", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24152, + "range": "± 30", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17130, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 802367, + "range": "± 1596", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2768950, + "range": "± 5129", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9749418, + "range": "± 42539", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35727786, + "range": "± 215616", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 142213134, + "range": "± 747953", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3116, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2455, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2440, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1371, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65795, + "range": "± 29", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252426, + "range": "± 325", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1027952, + "range": "± 1049", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4907013, + "range": "± 19592", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28098290, + "range": "± 239473", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8680437473, + "range": "± 34458983", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "mtanmoy5086@gmail.com", + "name": "t", + "username": "MuhtasimTanmoy" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": true, + "id": "56d43c48b94d1e57b3504da5191c4a5dcb4dcc7e", + "message": "cargo-powdr gitignore add on template (#2213)\n\nhttps://github.com/powdr-labs/powdr/issues/2210", + "timestamp": "2024-12-11T14:48:04Z", + "tree_id": "263829c688edac6d59070ee6e10a9bdcf27a810c", + "url": "https://github.com/powdr-labs/powdr/commit/56d43c48b94d1e57b3504da5191c4a5dcb4dcc7e" + }, + "date": 1733930955256, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6942, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 572, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1051, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29341, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24566, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24509, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17423, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 786881, + "range": "± 949", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2711320, + "range": "± 4486", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9551580, + "range": "± 30120", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34850900, + "range": "± 74509", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138132465, + "range": "± 202563", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3125, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2451, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2457, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1372, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65548, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 254010, + "range": "± 132", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1026248, + "range": "± 859", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4875140, + "range": "± 14772", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27652815, + "range": "± 114851", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8270525389, + "range": "± 84237535", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "0557c6059583403875d627f9bb5ea6c968c43180", + "message": "Add support for constant column in STWO backend", + "timestamp": "2024-12-11T15:13:35Z", + "url": "https://github.com/powdr-labs/powdr/pull/2112/commits/0557c6059583403875d627f9bb5ea6c968c43180" + }, + "date": 1733931815775, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6932, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 588, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1059, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29590, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24562, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24560, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17324, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 797354, + "range": "± 1262", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2735583, + "range": "± 5614", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9594165, + "range": "± 35668", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35310689, + "range": "± 182100", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140167213, + "range": "± 817173", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3307, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2584, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2523, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1373, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65830, + "range": "± 34", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 255144, + "range": "± 294", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1033883, + "range": "± 1387", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4924157, + "range": "± 27829", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27993876, + "range": "± 223611", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8613457003, + "range": "± 89918067", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "81063fb8a5e69f848d5df706689b30cdd5742be7", + "message": "pilopt: equal-constrained witness columns removal", + "timestamp": "2024-12-11T15:13:35Z", + "url": "https://github.com/powdr-labs/powdr/pull/2224/commits/81063fb8a5e69f848d5df706689b30cdd5742be7" + }, + "date": 1733933089375, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6825, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 598, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1065, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28885, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24202, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24204, + "range": "± 28", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17169, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 783516, + "range": "± 835", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2715460, + "range": "± 2927", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9465747, + "range": "± 22941", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34801157, + "range": "± 56693", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138104254, + "range": "± 171783", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3149, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2459, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2469, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1376, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66278, + "range": "± 54", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 253632, + "range": "± 194", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1033363, + "range": "± 1283", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4881089, + "range": "± 4360", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27705315, + "range": "± 37530", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8089663985, + "range": "± 43465302", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "b3dc67843c9f286018dc8331978484c471a2e9c1", + "message": "pilopt: optimize until fixpoint", + "timestamp": "2024-12-11T15:13:35Z", + "url": "https://github.com/powdr-labs/powdr/pull/2225/commits/b3dc67843c9f286018dc8331978484c471a2e9c1" + }, + "date": 1733934891791, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6880, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 578, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1048, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28966, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24104, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24141, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 16947, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 785611, + "range": "± 800", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2709213, + "range": "± 2523", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9487988, + "range": "± 12733", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34763337, + "range": "± 31600", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139253586, + "range": "± 139861", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3130, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2462, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2443, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1370, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65372, + "range": "± 46", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251093, + "range": "± 191", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1022528, + "range": "± 1121", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4867443, + "range": "± 4409", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27569041, + "range": "± 22596", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8186551675, + "range": "± 38227913", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "0e2a45248393c03a90f59771bffc0268d7e244be", + "message": "pilopt: equal-constrained witness columns removal", + "timestamp": "2024-12-11T15:13:35Z", + "url": "https://github.com/powdr-labs/powdr/pull/2224/commits/0e2a45248393c03a90f59771bffc0268d7e244be" + }, + "date": 1733935075893, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7089, + "range": "± 34", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 605, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1101, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29616, + "range": "± 73", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24959, + "range": "± 80", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24919, + "range": "± 89", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17688, + "range": "± 52", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 812360, + "range": "± 3143", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2781359, + "range": "± 13913", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9751576, + "range": "± 50970", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35694065, + "range": "± 172327", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 142101299, + "range": "± 918719", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3126, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2459, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2450, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1362, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65794, + "range": "± 418", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251468, + "range": "± 1108", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1026233, + "range": "± 2197", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4910368, + "range": "± 41555", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28429967, + "range": "± 261212", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8899201331, + "range": "± 76750273", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "818362075d532b0acc2f0fbc7c3c422e890436a2", + "message": "Expressions and solving routines.", + "timestamp": "2024-12-11T15:13:35Z", + "url": "https://github.com/powdr-labs/powdr/pull/2212/commits/818362075d532b0acc2f0fbc7c3c422e890436a2" + }, + "date": 1733935894024, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6949, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 591, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1096, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29120, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24275, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24124, + "range": "± 37", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17201, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 792066, + "range": "± 904", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2732522, + "range": "± 3377", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9648150, + "range": "± 17454", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35758310, + "range": "± 113503", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 142629101, + "range": "± 636748", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3204, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2510, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2474, + "range": "± 46", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1371, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66096, + "range": "± 35", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252972, + "range": "± 192", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1038051, + "range": "± 919", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4988062, + "range": "± 24621", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28657614, + "range": "± 95381", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 9098258915, + "range": "± 41205932", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "be36d962aa355fcebf4e30c720d74591cc917636", + "message": "witgen inference.", + "timestamp": "2024-12-11T15:13:35Z", + "url": "https://github.com/powdr-labs/powdr/pull/2219/commits/be36d962aa355fcebf4e30c720d74591cc917636" + }, + "date": 1733937298133, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6911, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 586, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1044, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 30859, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 25822, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 25781, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 18232, + "range": "± 26", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 808948, + "range": "± 827", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2791553, + "range": "± 1884", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9728646, + "range": "± 10806", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35679750, + "range": "± 36495", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140871348, + "range": "± 149558", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3185, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2480, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2672, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1369, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65482, + "range": "± 63", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252648, + "range": "± 195", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1035208, + "range": "± 2058", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4880295, + "range": "± 4094", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27648346, + "range": "± 17989", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 7980045637, + "range": "± 49719428", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "chriseth", + "username": "chriseth", + "email": "chris@ethereum.org" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "598352a23d7f791124541788d8de5f637124b9d8", + "message": "Expressions and solving routines. (#2212)\n\nThis module is an equivalent of the existing affine_expression.rs, but\nfor compile-time execution on symbolic values instead of run-time\nexecution on concrete values.\n\nUsing the operators defined on that that type, you can build a\nSymbolicAffineExpression from a polynomial identity and then use\n`.solve()` to try to solve for one unknown variable. The result (instead\nof a concrete assignment as in affine_expression.rs) is a\nSymbolicExpression, i.e. a complex expression involving variables\n(assumed to have a concrete value known at run time), constants and\ncertain operators on them.\n\nThe idea is that SymbolicAffineExpression is used on polynomial\nidentities in turn and solving for one cell after the other in the\ntrace. The resulting SymbolicExpression can be translated to rust or\npil.", + "timestamp": "2024-12-11T17:06:18Z", + "url": "https://github.com/powdr-labs/powdr/commit/598352a23d7f791124541788d8de5f637124b9d8" + }, + "date": 1733937829630, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6880, + "range": "± 95", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 592, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1081, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29733, + "range": "± 126", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24921, + "range": "± 81", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 25025, + "range": "± 488", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17646, + "range": "± 137", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 803563, + "range": "± 13691", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2753869, + "range": "± 19307", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9815521, + "range": "± 94917", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 36417923, + "range": "± 703043", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 142713727, + "range": "± 2755336", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3251, + "range": "± 51", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2474, + "range": "± 35", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2444, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1363, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66882, + "range": "± 1313", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 255010, + "range": "± 1329", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1048079, + "range": "± 19402", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4982166, + "range": "± 62784", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28134755, + "range": "± 364422", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8904285465, + "range": "± 94188375", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "chris@ethereum.org", + "name": "chriseth", + "username": "chriseth" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": true, + "id": "598352a23d7f791124541788d8de5f637124b9d8", + "message": "Expressions and solving routines. (#2212)\n\nThis module is an equivalent of the existing affine_expression.rs, but\nfor compile-time execution on symbolic values instead of run-time\nexecution on concrete values.\n\nUsing the operators defined on that that type, you can build a\nSymbolicAffineExpression from a polynomial identity and then use\n`.solve()` to try to solve for one unknown variable. The result (instead\nof a concrete assignment as in affine_expression.rs) is a\nSymbolicExpression, i.e. a complex expression involving variables\n(assumed to have a concrete value known at run time), constants and\ncertain operators on them.\n\nThe idea is that SymbolicAffineExpression is used on polynomial\nidentities in turn and solving for one cell after the other in the\ntrace. The resulting SymbolicExpression can be translated to rust or\npil.", + "timestamp": "2024-12-11T17:06:18Z", + "tree_id": "30faa5d361e14b3a2606a744750845a8204a85ed", + "url": "https://github.com/powdr-labs/powdr/commit/598352a23d7f791124541788d8de5f637124b9d8" + }, + "date": 1733939580383, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7038, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 578, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1059, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 30277, + "range": "± 54", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 25303, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 25169, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17740, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 793151, + "range": "± 844", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2725395, + "range": "± 3014", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9562798, + "range": "± 18926", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34999900, + "range": "± 39224", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138423933, + "range": "± 138651", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3116, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2449, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2444, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1364, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65522, + "range": "± 30", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252207, + "range": "± 184", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1030792, + "range": "± 2214", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4880419, + "range": "± 3607", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27549003, + "range": "± 19272", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8102998803, + "range": "± 27472621", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "ShuangWu121", + "username": "ShuangWu121", + "email": "47602565+ShuangWu121@users.noreply.github.com" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "ad409564caae4aa407abf10170783ce16ce27534", + "message": "Add support for constant column in STWO backend (#2112)\n\n# Add Support for Constant Columns in Stwo Backend\n\nStwo's recent development introduced new APIs to support\nconstant/pre-processed columns. However, the `dev` branch of Stwo is\nstill using an older nightly toolchain, which is incompatible with\nPowdr.\n\nCurrently, Stwo has two open PRs\n[PR1](https://github.com/starkware-libs/stwo/pull/847),\n[PR2](https://github.com/starkware-libs/stwo/pull/871) aimed at updating\nthe toolchain to nightly `11-06`. Previously, our Stwo backend\ndependency relied on one of these PRs' branches. However, this branch is\nno longer updated with the latest commits from their `dev` branch. These\nnew commits are required to support constant columns.\n\n### Temporary Solution\nTo address this issue temporarily:\n- I moved Stwo's dependency to my fork of Stwo, where the branch is\nupdated with both the latest `dev` branch commits and the newer\ntoolchain.\n\n---\n\n### Tasks in this PR\n1. **Add APIs to support constant columns**:\n2. **Update test cases**:\n - Modify and add test cases to validate constant column support.\n\n---\n\n---------\n\nCo-authored-by: Thibaut Schaeffer ", + "timestamp": "2024-12-11T17:45:46Z", + "url": "https://github.com/powdr-labs/powdr/commit/ad409564caae4aa407abf10170783ce16ce27534" + }, + "date": 1733940122271, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6847, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 585, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1058, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29562, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24715, + "range": "± 27", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24656, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17391, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 796328, + "range": "± 1458", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2749032, + "range": "± 5036", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9630490, + "range": "± 37954", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35558310, + "range": "± 217805", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140365751, + "range": "± 722392", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3211, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2501, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2471, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1358, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66355, + "range": "± 62", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 253815, + "range": "± 211", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1032165, + "range": "± 1961", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4913147, + "range": "± 28722", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28000741, + "range": "± 162394", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8517560973, + "range": "± 43336867", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "b98ab700a12e36b717e18c693ac2595972547ce3", + "message": "pilopt: equal-constrained witness columns removal", + "timestamp": "2024-12-11T17:36:52Z", + "url": "https://github.com/powdr-labs/powdr/pull/2224/commits/b98ab700a12e36b717e18c693ac2595972547ce3" + }, + "date": 1733941003852, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6840, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 630, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1131, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28673, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 23973, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 23945, + "range": "± 29", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 16955, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 784804, + "range": "± 1178", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2715969, + "range": "± 4445", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9434893, + "range": "± 15877", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34746339, + "range": "± 69508", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 137916430, + "range": "± 248255", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3127, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2461, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2449, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1363, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65324, + "range": "± 54", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 250597, + "range": "± 261", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1026384, + "range": "± 1462", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4891388, + "range": "± 9302", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27796180, + "range": "± 45889", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8494001989, + "range": "± 35951610", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "47602565+ShuangWu121@users.noreply.github.com", + "name": "ShuangWu121", + "username": "ShuangWu121" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": true, + "id": "ad409564caae4aa407abf10170783ce16ce27534", + "message": "Add support for constant column in STWO backend (#2112)\n\n# Add Support for Constant Columns in Stwo Backend\n\nStwo's recent development introduced new APIs to support\nconstant/pre-processed columns. However, the `dev` branch of Stwo is\nstill using an older nightly toolchain, which is incompatible with\nPowdr.\n\nCurrently, Stwo has two open PRs\n[PR1](https://github.com/starkware-libs/stwo/pull/847),\n[PR2](https://github.com/starkware-libs/stwo/pull/871) aimed at updating\nthe toolchain to nightly `11-06`. Previously, our Stwo backend\ndependency relied on one of these PRs' branches. However, this branch is\nno longer updated with the latest commits from their `dev` branch. These\nnew commits are required to support constant columns.\n\n### Temporary Solution\nTo address this issue temporarily:\n- I moved Stwo's dependency to my fork of Stwo, where the branch is\nupdated with both the latest `dev` branch commits and the newer\ntoolchain.\n\n---\n\n### Tasks in this PR\n1. **Add APIs to support constant columns**:\n2. **Update test cases**:\n - Modify and add test cases to validate constant column support.\n\n---\n\n---------\n\nCo-authored-by: Thibaut Schaeffer ", + "timestamp": "2024-12-11T17:45:46Z", + "tree_id": "957a21733e8ae94c43f57985fd6b427827a7de72", + "url": "https://github.com/powdr-labs/powdr/commit/ad409564caae4aa407abf10170783ce16ce27534" + }, + "date": 1733942044675, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6998, + "range": "± 209", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 603, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1074, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29375, + "range": "± 398", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24452, + "range": "± 328", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24404, + "range": "± 371", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17302, + "range": "± 442", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 805295, + "range": "± 10968", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2778590, + "range": "± 55643", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9794996, + "range": "± 139776", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35570157, + "range": "± 307430", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 142659754, + "range": "± 3186196", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3209, + "range": "± 47", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2468, + "range": "± 37", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2462, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1382, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 67321, + "range": "± 1525", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 255987, + "range": "± 4525", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1055260, + "range": "± 18393", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4941345, + "range": "± 89721", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 29060717, + "range": "± 712489", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 9033694852, + "range": "± 133930372", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "6d9cc8e04db2315f5fbd925f50cfe07cd98669b2", + "message": "[WIP] RISCV executor trace", + "timestamp": "2024-12-11T18:17:41Z", + "url": "https://github.com/powdr-labs/powdr/pull/2207/commits/6d9cc8e04db2315f5fbd925f50cfe07cd98669b2" + }, + "date": 1733942650865, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7194, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 596, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1131, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 30571, + "range": "± 64", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 25637, + "range": "± 82", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 25573, + "range": "± 130", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 18127, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 814935, + "range": "± 1124", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2802361, + "range": "± 5842", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9780969, + "range": "± 19490", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35801562, + "range": "± 168836", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141244369, + "range": "± 302433", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3167, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2482, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2480, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1360, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66844, + "range": "± 159", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252529, + "range": "± 206", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1032169, + "range": "± 1628", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4901396, + "range": "± 20503", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27877507, + "range": "± 201322", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8671273351, + "range": "± 97202018", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "69af6341073d270452080ce7f0ba3fd23a9963bb", + "message": "witgen inference.", + "timestamp": "2024-12-11T18:17:41Z", + "url": "https://github.com/powdr-labs/powdr/pull/2219/commits/69af6341073d270452080ce7f0ba3fd23a9963bb" + }, + "date": 1733995822030, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6917, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 614, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1101, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29551, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24616, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24620, + "range": "± 29", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17279, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 805580, + "range": "± 1012", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2783182, + "range": "± 3134", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9719888, + "range": "± 22101", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35599344, + "range": "± 64018", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141104628, + "range": "± 184200", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3151, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2521, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2470, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1366, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65645, + "range": "± 40", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251733, + "range": "± 346", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1030497, + "range": "± 2767", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4875465, + "range": "± 4608", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27632027, + "range": "± 65445", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8177063124, + "range": "± 27432217", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "46860a1f4f991c4ad389459f11efff0ab4d9d832", + "message": "Prepare to call jit from block machine.", + "timestamp": "2024-12-11T18:17:41Z", + "url": "https://github.com/powdr-labs/powdr/pull/2098/commits/46860a1f4f991c4ad389459f11efff0ab4d9d832" + }, + "date": 1733998530067, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6866, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 596, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1078, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28894, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24170, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24142, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17007, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 783597, + "range": "± 664", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2713263, + "range": "± 2822", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9501362, + "range": "± 16521", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34884143, + "range": "± 139643", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138420641, + "range": "± 212977", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3160, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2705, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2461, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1371, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65760, + "range": "± 53", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 253900, + "range": "± 214", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1035954, + "range": "± 1246", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4884568, + "range": "± 5492", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27790169, + "range": "± 39804", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8169453817, + "range": "± 33910312", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "d31f8153b235b86e7a03b38fd87390d242349ff1", + "message": "[WIP] RISCV executor trace", + "timestamp": "2024-12-11T18:17:41Z", + "url": "https://github.com/powdr-labs/powdr/pull/2207/commits/d31f8153b235b86e7a03b38fd87390d242349ff1" + }, + "date": 1734001968326, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6895, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 595, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1059, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29232, + "range": "± 26", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24413, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24365, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17248, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 806450, + "range": "± 1623", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2779030, + "range": "± 2758", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9673169, + "range": "± 14363", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35593489, + "range": "± 51836", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141719696, + "range": "± 540508", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3123, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2459, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2447, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1359, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66949, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 253434, + "range": "± 333", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1035530, + "range": "± 1001", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4899309, + "range": "± 3021", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27692985, + "range": "± 19948", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8033335081, + "range": "± 23421614", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "f7bc144beb6c8beb86be928d517fe2bdb7a78d39", + "message": "witgen inference.", + "timestamp": "2024-12-11T18:17:41Z", + "url": "https://github.com/powdr-labs/powdr/pull/2219/commits/f7bc144beb6c8beb86be928d517fe2bdb7a78d39" + }, + "date": 1734004408134, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7052, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 597, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1096, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29448, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24561, + "range": "± 51", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24682, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17503, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 798625, + "range": "± 639", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2766389, + "range": "± 3746", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9646177, + "range": "± 10281", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35200180, + "range": "± 76937", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139644365, + "range": "± 105016", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3120, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2453, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2468, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1374, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66274, + "range": "± 157", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 253909, + "range": "± 192", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1031949, + "range": "± 937", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4883644, + "range": "± 10000", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27696536, + "range": "± 84435", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8154845769, + "range": "± 22896319", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "chriseth", + "username": "chriseth", + "email": "chris@ethereum.org" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "2aa7f8388cbea891bf23e3e09ce302f430710847", + "message": "Prepare to call jit from block machine. (#2098)\n\nThis PR performs preliminary preparations in the block machine so that\nit will be able to JIT-compile and evaluate lookups into this machine\ngiven a certain combination of \"known inputs\".\n\n---------\n\nCo-authored-by: Georg Wiese ", + "timestamp": "2024-12-12T11:58:23Z", + "url": "https://github.com/powdr-labs/powdr/commit/2aa7f8388cbea891bf23e3e09ce302f430710847" + }, + "date": 1734005695112, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6954, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 635, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1077, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 30025, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24453, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24389, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17261, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 786252, + "range": "± 691", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2713160, + "range": "± 2356", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9492574, + "range": "± 8823", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34762954, + "range": "± 31870", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 137977371, + "range": "± 148726", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3163, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2456, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2451, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1366, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65892, + "range": "± 75", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 253837, + "range": "± 238", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1031623, + "range": "± 1316", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4872427, + "range": "± 5238", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27667761, + "range": "± 27121", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8193290453, + "range": "± 27294110", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "chris@ethereum.org", + "name": "chriseth", + "username": "chriseth" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": true, + "id": "2aa7f8388cbea891bf23e3e09ce302f430710847", + "message": "Prepare to call jit from block machine. (#2098)\n\nThis PR performs preliminary preparations in the block machine so that\nit will be able to JIT-compile and evaluate lookups into this machine\ngiven a certain combination of \"known inputs\".\n\n---------\n\nCo-authored-by: Georg Wiese ", + "timestamp": "2024-12-12T11:58:23Z", + "tree_id": "5e00e7b9c3a52999f54a6ac426c6a3daffb9d1c1", + "url": "https://github.com/powdr-labs/powdr/commit/2aa7f8388cbea891bf23e3e09ce302f430710847" + }, + "date": 1734007625433, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6789, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 587, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1043, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29062, + "range": "± 40", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24287, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24204, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17107, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 785120, + "range": "± 555", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2712988, + "range": "± 2566", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9492630, + "range": "± 12779", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34886056, + "range": "± 55976", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138711991, + "range": "± 160191", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3119, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2454, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2442, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1358, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65195, + "range": "± 52", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 250062, + "range": "± 280", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1023842, + "range": "± 930", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4848946, + "range": "± 4721", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27567436, + "range": "± 17229", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8109770885, + "range": "± 27600533", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "3e848f5f483b9716a79b6ef89775092ef9dfb866", + "message": "pilopt: equal-constrained witness columns removal", + "timestamp": "2024-12-12T12:31:43Z", + "url": "https://github.com/powdr-labs/powdr/pull/2224/commits/3e848f5f483b9716a79b6ef89775092ef9dfb866" + }, + "date": 1734007932646, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7008, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 655, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1065, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29211, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24400, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24347, + "range": "± 30", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17284, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 787884, + "range": "± 1439", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2719141, + "range": "± 6216", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9511514, + "range": "± 34085", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35272963, + "range": "± 251578", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140407781, + "range": "± 1033307", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3174, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2498, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2467, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1358, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65615, + "range": "± 148", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 249836, + "range": "± 144", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1022327, + "range": "± 1537", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4919028, + "range": "± 26226", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27984550, + "range": "± 143662", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8811184416, + "range": "± 58928414", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "cc815d9e081d798d250587338ff7bfd1851309c7", + "message": "[WIP] RISCV executor trace", + "timestamp": "2024-12-12T12:31:43Z", + "url": "https://github.com/powdr-labs/powdr/pull/2207/commits/cc815d9e081d798d250587338ff7bfd1851309c7" + }, + "date": 1734008368359, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6985, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 587, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1087, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28839, + "range": "± 37", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24085, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24159, + "range": "± 89", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 16948, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 790230, + "range": "± 826", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2746296, + "range": "± 3837", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9537938, + "range": "± 14173", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34996340, + "range": "± 52793", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139181847, + "range": "± 459116", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3126, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2464, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2448, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1372, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65581, + "range": "± 88", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 249740, + "range": "± 166", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1021879, + "range": "± 1570", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4870343, + "range": "± 13782", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27553066, + "range": "± 58100", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8125455902, + "range": "± 61342385", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "ea24dd3508a026b9358bf4e81d2e806610d3e385", + "message": "pilopt: equal-constrained witness columns removal", + "timestamp": "2024-12-12T12:31:43Z", + "url": "https://github.com/powdr-labs/powdr/pull/2224/commits/ea24dd3508a026b9358bf4e81d2e806610d3e385" + }, + "date": 1734010508798, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6921, + "range": "± 30", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 610, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1073, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29018, + "range": "± 186", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24148, + "range": "± 104", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24108, + "range": "± 147", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17043, + "range": "± 51", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 796447, + "range": "± 1612", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2757460, + "range": "± 11057", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9618508, + "range": "± 29023", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35265157, + "range": "± 83281", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139988826, + "range": "± 529960", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3219, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2553, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2451, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1373, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65821, + "range": "± 238", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252099, + "range": "± 682", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1027169, + "range": "± 2371", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4881075, + "range": "± 28536", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27598242, + "range": "± 140629", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8300769876, + "range": "± 85358542", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "c37f8cd50aaeaa1db4e8c397f18f006014007868", + "message": "RISCV executor trace", + "timestamp": "2024-12-12T12:31:43Z", + "url": "https://github.com/powdr-labs/powdr/pull/2207/commits/c37f8cd50aaeaa1db4e8c397f18f006014007868" + }, + "date": 1734014455600, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6834, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 582, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1050, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29672, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24867, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24802, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17632, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 783837, + "range": "± 699", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2708104, + "range": "± 2367", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9471468, + "range": "± 11044", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34698127, + "range": "± 32654", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 137669076, + "range": "± 124571", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3134, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2452, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2457, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1372, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65403, + "range": "± 42", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252679, + "range": "± 245", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1029518, + "range": "± 1149", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4890639, + "range": "± 2944", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27652801, + "range": "± 19194", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8097841060, + "range": "± 35161039", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "cd35a60c39ea54ea0256ec9a74b295e143ce6c6a", + "message": "RISCV executor trace", + "timestamp": "2024-12-12T12:31:43Z", + "url": "https://github.com/powdr-labs/powdr/pull/2207/commits/cd35a60c39ea54ea0256ec9a74b295e143ce6c6a" + }, + "date": 1734015434759, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6871, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 596, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1050, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29489, + "range": "± 32", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 25257, + "range": "± 40", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24604, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17385, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 779756, + "range": "± 1605", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2687358, + "range": "± 5968", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9395858, + "range": "± 27337", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34573691, + "range": "± 128075", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 137599313, + "range": "± 617104", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3173, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2511, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2475, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1367, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65913, + "range": "± 38", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 253123, + "range": "± 274", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1031214, + "range": "± 1253", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4870205, + "range": "± 9006", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27673238, + "range": "± 176620", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8326813690, + "range": "± 49475946", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "b715662dddcc895980b39a041b905adc9536ff18", + "message": "Witgen inference.", + "timestamp": "2024-12-12T12:31:43Z", + "url": "https://github.com/powdr-labs/powdr/pull/2219/commits/b715662dddcc895980b39a041b905adc9536ff18" + }, + "date": 1734017431887, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6849, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 626, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1053, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29224, + "range": "± 31", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24551, + "range": "± 26", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24488, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17268, + "range": "± 42", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 779739, + "range": "± 2345", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2688838, + "range": "± 5186", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9531727, + "range": "± 50455", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35095450, + "range": "± 227974", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139441302, + "range": "± 918787", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3121, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2447, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2453, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1369, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65628, + "range": "± 102", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251933, + "range": "± 130", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1031589, + "range": "± 935", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4866285, + "range": "± 6519", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28082745, + "range": "± 240885", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8692119747, + "range": "± 32756843", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "c4dd3a3136e0f69e4d37e4a69b0d8a836e8ca65f", + "message": "pilopt: optimize until fixpoint", + "timestamp": "2024-12-12T12:31:43Z", + "url": "https://github.com/powdr-labs/powdr/pull/2225/commits/c4dd3a3136e0f69e4d37e4a69b0d8a836e8ca65f" + }, + "date": 1734018214105, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6971, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 583, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1102, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 30173, + "range": "± 54", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 25418, + "range": "± 39", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 25366, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17848, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 810367, + "range": "± 1242", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2786109, + "range": "± 4472", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9734705, + "range": "± 23560", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35679320, + "range": "± 91403", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141295508, + "range": "± 574195", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3140, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2452, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2453, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1360, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66406, + "range": "± 43", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 254842, + "range": "± 266", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1032092, + "range": "± 1271", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4885746, + "range": "± 7197", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27826732, + "range": "± 103205", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8223811077, + "range": "± 56384987", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "a905288b7ff3480a3b059872dbd8008a401a6592", + "message": "Witgen inference.", + "timestamp": "2024-12-12T12:31:43Z", + "url": "https://github.com/powdr-labs/powdr/pull/2219/commits/a905288b7ff3480a3b059872dbd8008a401a6592" + }, + "date": 1734019021330, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6912, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 615, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1051, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29000, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24248, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24200, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17084, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 782143, + "range": "± 865", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2709141, + "range": "± 8957", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9474580, + "range": "± 54411", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34937433, + "range": "± 311454", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138326178, + "range": "± 781053", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3134, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2452, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2451, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1359, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66667, + "range": "± 221", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 254839, + "range": "± 236", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1036916, + "range": "± 1334", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4894519, + "range": "± 9058", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27845345, + "range": "± 300203", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8419171025, + "range": "± 50306381", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "b345808bbd088d50995e339cd24a58d5ac607b2e", + "message": "pilopt: optimize until fixpoint", + "timestamp": "2024-12-12T15:56:50Z", + "url": "https://github.com/powdr-labs/powdr/pull/2225/commits/b345808bbd088d50995e339cd24a58d5ac607b2e" + }, + "date": 1734020077204, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6939, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 587, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1047, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28970, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24176, + "range": "± 30", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24329, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17070, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 787421, + "range": "± 831", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2718763, + "range": "± 4278", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9549568, + "range": "± 42030", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35127097, + "range": "± 115505", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140529393, + "range": "± 1064183", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3115, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2450, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2453, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1366, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65418, + "range": "± 51", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251540, + "range": "± 185", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1025032, + "range": "± 1178", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4922886, + "range": "± 50975", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27976759, + "range": "± 86621", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8747562832, + "range": "± 97079463", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "chriseth", + "username": "chriseth", + "email": "chris@ethereum.org" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "e3c4c858f017c57c4f856cb32a4dfbb5fd1e1fbf", + "message": "Witgen inference. (#2219)\n\nThis PR adds a component that can derive assignments and other code on\nidentities and multiple rows. It keeps track of which cells in the trace\nare already known and which not. The way to access fixed rows is\nabstracted because it does not have a concept of an absolute row. While\nthis might work for block machines with cyclic fixed columns, it does\nnot work in the general case.\n\nWhat it does not do:\n- have a sequence of which identities to consider on which rows\n- a mechanism that determines when it is finished\n\n---------\n\nCo-authored-by: Georg Wiese ", + "timestamp": "2024-12-12T16:12:30Z", + "url": "https://github.com/powdr-labs/powdr/commit/e3c4c858f017c57c4f856cb32a4dfbb5fd1e1fbf" + }, + "date": 1734020909618, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6982, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 616, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1117, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29379, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24478, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24472, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17361, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 781592, + "range": "± 1249", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2711997, + "range": "± 2533", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9434230, + "range": "± 10680", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34522977, + "range": "± 31921", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 137923927, + "range": "± 261190", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3235, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2486, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2461, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1371, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66038, + "range": "± 33", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 253974, + "range": "± 227", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1033596, + "range": "± 2537", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4884898, + "range": "± 2925", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27616096, + "range": "± 25685", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8112722518, + "range": "± 11272260", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "77422e74e0a4547d648650b3afbb01dcdf6e8246", + "message": "Various preparatory changes.", + "timestamp": "2024-12-12T15:56:50Z", + "url": "https://github.com/powdr-labs/powdr/pull/2228/commits/77422e74e0a4547d648650b3afbb01dcdf6e8246" + }, + "date": 1734022745364, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6825, + "range": "± 69", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 592, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1058, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28840, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24147, + "range": "± 27", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24119, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17098, + "range": "± 29", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 786622, + "range": "± 1164", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2719506, + "range": "± 3660", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9501693, + "range": "± 18375", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34943136, + "range": "± 130325", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138945886, + "range": "± 314091", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3131, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2520, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2456, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1371, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66180, + "range": "± 97", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 250407, + "range": "± 342", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1024528, + "range": "± 1312", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4862337, + "range": "± 4055", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27835567, + "range": "± 91972", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8491061644, + "range": "± 30661551", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "fb57219329fc7ad12a11f46a611867889ea923ee", + "message": "[WIP] Block machine processor", + "timestamp": "2024-12-12T15:56:50Z", + "url": "https://github.com/powdr-labs/powdr/pull/2226/commits/fb57219329fc7ad12a11f46a611867889ea923ee" + }, + "date": 1734022795270, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7027, + "range": "± 156", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 616, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1162, + "range": "± 29", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 31126, + "range": "± 1284", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 25572, + "range": "± 608", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 25719, + "range": "± 608", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17842, + "range": "± 342", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 809007, + "range": "± 23508", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2810107, + "range": "± 56420", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9800161, + "range": "± 178534", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35716328, + "range": "± 610699", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 142736342, + "range": "± 4231942", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3283, + "range": "± 74", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2535, + "range": "± 52", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2535, + "range": "± 57", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1418, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 70546, + "range": "± 1799", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 260478, + "range": "± 6190", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1073726, + "range": "± 29084", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 5074779, + "range": "± 117493", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 29008742, + "range": "± 697676", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 9102290565, + "range": "± 120472998", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "chris@ethereum.org", + "name": "chriseth", + "username": "chriseth" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": true, + "id": "e3c4c858f017c57c4f856cb32a4dfbb5fd1e1fbf", + "message": "Witgen inference. (#2219)\n\nThis PR adds a component that can derive assignments and other code on\nidentities and multiple rows. It keeps track of which cells in the trace\nare already known and which not. The way to access fixed rows is\nabstracted because it does not have a concept of an absolute row. While\nthis might work for block machines with cyclic fixed columns, it does\nnot work in the general case.\n\nWhat it does not do:\n- have a sequence of which identities to consider on which rows\n- a mechanism that determines when it is finished\n\n---------\n\nCo-authored-by: Georg Wiese ", + "timestamp": "2024-12-12T16:12:30Z", + "tree_id": "85815ba7f8495ef97aafbeaabb8559abd90b751a", + "url": "https://github.com/powdr-labs/powdr/commit/e3c4c858f017c57c4f856cb32a4dfbb5fd1e1fbf" + }, + "date": 1734022820592, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6924, + "range": "± 44", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 593, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1059, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29171, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24352, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24282, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17121, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 780871, + "range": "± 1393", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2694976, + "range": "± 3877", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9443917, + "range": "± 14990", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34546057, + "range": "± 60401", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 137830402, + "range": "± 423781", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3119, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2497, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2441, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1372, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65506, + "range": "± 42", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251709, + "range": "± 1002", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1028864, + "range": "± 1200", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4882991, + "range": "± 7026", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27670028, + "range": "± 118051", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8178148268, + "range": "± 163591247", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "35d4cbcabeb8440d6f4238b5a81fd01d2d8de093", + "message": "Various preparatory changes.", + "timestamp": "2024-12-12T16:44:26Z", + "url": "https://github.com/powdr-labs/powdr/pull/2228/commits/35d4cbcabeb8440d6f4238b5a81fd01d2d8de093" + }, + "date": 1734024375238, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6923, + "range": "± 30", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 586, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1053, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 30215, + "range": "± 36", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24672, + "range": "± 67", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24620, + "range": "± 44", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17498, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 777356, + "range": "± 1033", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2682308, + "range": "± 3620", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9391003, + "range": "± 12050", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34528194, + "range": "± 36170", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 137325121, + "range": "± 322116", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3178, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2456, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2461, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1371, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65706, + "range": "± 57", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251734, + "range": "± 361", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1035541, + "range": "± 1837", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4873685, + "range": "± 4805", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27616510, + "range": "± 21911", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8353628034, + "range": "± 37930372", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "c494ae2b56dbc4374721ae75c183d166e8e25536", + "message": "[WIP] Block machine processor", + "timestamp": "2024-12-12T16:44:26Z", + "url": "https://github.com/powdr-labs/powdr/pull/2226/commits/c494ae2b56dbc4374721ae75c183d166e8e25536" + }, + "date": 1734025644113, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6800, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 590, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1048, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28815, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24033, + "range": "± 146", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 23999, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 16971, + "range": "± 80", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 782322, + "range": "± 1293", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2706127, + "range": "± 15466", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9495413, + "range": "± 40509", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34986051, + "range": "± 182896", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140696029, + "range": "± 975939", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3162, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2445, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2461, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1371, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65892, + "range": "± 312", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252229, + "range": "± 2786", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1028453, + "range": "± 2284", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4884247, + "range": "± 9079", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28118344, + "range": "± 145272", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8787454790, + "range": "± 70414587", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "088bb1a60e8714643d581218782e05082c9523dd", + "message": "Effects to rust", + "timestamp": "2024-12-12T16:44:26Z", + "url": "https://github.com/powdr-labs/powdr/pull/2229/commits/088bb1a60e8714643d581218782e05082c9523dd" + }, + "date": 1734027129316, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6814, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 609, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1105, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28682, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24062, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24021, + "range": "± 35", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17022, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 796610, + "range": "± 750", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2750975, + "range": "± 2034", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9619548, + "range": "± 7976", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35333732, + "range": "± 71904", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139925326, + "range": "± 136582", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3128, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2454, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2462, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1372, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66337, + "range": "± 33", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 254772, + "range": "± 216", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1035774, + "range": "± 1078", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4878968, + "range": "± 3123", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27682054, + "range": "± 13798", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 7992885419, + "range": "± 31366982", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "chriseth", + "username": "chriseth", + "email": "chris@ethereum.org" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "12aca0e136cb39db408e47f9e67f5e50251e265c", + "message": "Various preparatory changes. (#2228)", + "timestamp": "2024-12-12T17:56:54Z", + "url": "https://github.com/powdr-labs/powdr/commit/12aca0e136cb39db408e47f9e67f5e50251e265c" + }, + "date": 1734027148590, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6886, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 597, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1097, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29172, + "range": "± 46", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24341, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24305, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17105, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 812659, + "range": "± 875", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2809811, + "range": "± 2993", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9829302, + "range": "± 18193", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35800927, + "range": "± 41757", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 142773645, + "range": "± 134400", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3132, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2449, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2452, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1364, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65804, + "range": "± 158", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 253863, + "range": "± 346", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1030350, + "range": "± 1108", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4875712, + "range": "± 4139", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27660389, + "range": "± 28449", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8091549626, + "range": "± 38000076", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "chris@ethereum.org", + "name": "chriseth", + "username": "chriseth" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": true, + "id": "12aca0e136cb39db408e47f9e67f5e50251e265c", + "message": "Various preparatory changes. (#2228)", + "timestamp": "2024-12-12T17:56:54Z", + "tree_id": "991bf1433e5e9bffcaa7f7fd27e46029afbef1d5", + "url": "https://github.com/powdr-labs/powdr/commit/12aca0e136cb39db408e47f9e67f5e50251e265c" + }, + "date": 1734029182306, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6797, + "range": "± 65", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 584, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1061, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29446, + "range": "± 348", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24552, + "range": "± 75", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24511, + "range": "± 75", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17392, + "range": "± 128", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 785295, + "range": "± 1704", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2711835, + "range": "± 5768", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9554931, + "range": "± 35419", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34897386, + "range": "± 197568", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138584166, + "range": "± 357186", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3321, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2656, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2607, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1377, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66127, + "range": "± 144", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252356, + "range": "± 789", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1028663, + "range": "± 1324", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4871730, + "range": "± 9791", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27799849, + "range": "± 69270", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8550277661, + "range": "± 49476958", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "6fe0a003c25a8179a5ed1de89168f0f451c36439", + "message": "Effects to rust", + "timestamp": "2024-12-12T18:30:21Z", + "url": "https://github.com/powdr-labs/powdr/pull/2229/commits/6fe0a003c25a8179a5ed1de89168f0f451c36439" + }, + "date": 1734031960073, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7006, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 606, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1063, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29023, + "range": "± 68", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24331, + "range": "± 341", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24269, + "range": "± 198", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17093, + "range": "± 319", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 807218, + "range": "± 11649", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2738632, + "range": "± 8167", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9597706, + "range": "± 69077", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35460848, + "range": "± 384258", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139993664, + "range": "± 1185006", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3129, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2451, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2452, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1361, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 67690, + "range": "± 140", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 254128, + "range": "± 271", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1035499, + "range": "± 1584", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4885491, + "range": "± 27342", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27677325, + "range": "± 360221", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8571815920, + "range": "± 220048554", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "13b8d15c21d5601e7c91011b76d416278c939380", + "message": "[WIP] Block machine processor", + "timestamp": "2024-12-12T18:30:21Z", + "url": "https://github.com/powdr-labs/powdr/pull/2226/commits/13b8d15c21d5601e7c91011b76d416278c939380" + }, + "date": 1734032584550, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6861, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 587, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1041, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29174, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24347, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24287, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17094, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 785728, + "range": "± 1554", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2705441, + "range": "± 2849", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9487577, + "range": "± 11228", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34723445, + "range": "± 27857", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 137818062, + "range": "± 114529", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3130, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2479, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2450, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1361, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65816, + "range": "± 58", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251558, + "range": "± 232", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1029531, + "range": "± 1341", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4881445, + "range": "± 5199", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27649670, + "range": "± 18120", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8101131763, + "range": "± 35861768", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "852ab8518556267ac2fd64edc2965ccf3a08b015", + "message": "[WIP] Block machine processor", + "timestamp": "2024-12-12T18:30:21Z", + "url": "https://github.com/powdr-labs/powdr/pull/2226/commits/852ab8518556267ac2fd64edc2965ccf3a08b015" + }, + "date": 1734033663084, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6999, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 611, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1066, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28995, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24335, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24270, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17189, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 791553, + "range": "± 1084", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2740601, + "range": "± 3096", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9570255, + "range": "± 11541", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35079752, + "range": "± 49443", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139335025, + "range": "± 134472", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3151, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2518, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2469, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1377, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65947, + "range": "± 47", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252505, + "range": "± 212", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1030249, + "range": "± 1115", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4884197, + "range": "± 4471", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27603700, + "range": "± 24064", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8164302769, + "range": "± 37550580", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "9ac32a24d120230bac9fe3290d6aef4b2299ce05", + "message": "[WIP] Block machine processor", + "timestamp": "2024-12-12T18:30:21Z", + "url": "https://github.com/powdr-labs/powdr/pull/2226/commits/9ac32a24d120230bac9fe3290d6aef4b2299ce05" + }, + "date": 1734036395614, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7062, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 615, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1095, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 30397, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 25616, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 25505, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 18449, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 806742, + "range": "± 1708", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2784971, + "range": "± 4248", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9805681, + "range": "± 15964", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35687875, + "range": "± 41609", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141353298, + "range": "± 173573", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3126, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2456, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2440, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1373, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65534, + "range": "± 48", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251703, + "range": "± 351", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1027053, + "range": "± 1384", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4861225, + "range": "± 3887", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27647927, + "range": "± 19708", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8066607807, + "range": "± 19177371", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "5aa3e08e836ba24ff25ffb1db86d9eaa03fd41bc", + "message": "[WIP] Block machine processor", + "timestamp": "2024-12-12T18:30:21Z", + "url": "https://github.com/powdr-labs/powdr/pull/2226/commits/5aa3e08e836ba24ff25ffb1db86d9eaa03fd41bc" + }, + "date": 1734040532747, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6874, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 625, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1053, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28806, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24094, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 23971, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 16983, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 787655, + "range": "± 1411", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2717450, + "range": "± 7956", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9497626, + "range": "± 25522", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35094710, + "range": "± 150044", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139384378, + "range": "± 954180", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3136, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2470, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2450, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1378, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65629, + "range": "± 46", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252142, + "range": "± 180", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1029447, + "range": "± 1149", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4888914, + "range": "± 4878", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27865314, + "range": "± 149437", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8326947787, + "range": "± 121841275", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "7ca71d70f18b2781610b6d88d3e5c10269345dd3", + "message": "Effects to rust", + "timestamp": "2024-12-12T18:30:21Z", + "url": "https://github.com/powdr-labs/powdr/pull/2229/commits/7ca71d70f18b2781610b6d88d3e5c10269345dd3" + }, + "date": 1734051049323, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6956, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 612, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1099, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29365, + "range": "± 41", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24577, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24515, + "range": "± 92", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17305, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 817106, + "range": "± 2004", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2820135, + "range": "± 4960", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9946755, + "range": "± 59487", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 36689423, + "range": "± 262448", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 145020703, + "range": "± 1098557", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3206, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2547, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2500, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1379, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65301, + "range": "± 32", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 249998, + "range": "± 181", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1031994, + "range": "± 964", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4878924, + "range": "± 34105", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28363902, + "range": "± 314631", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8680646783, + "range": "± 43729079", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "4d127f0a1208e0c67fd69d1fe5ffd295d224a90f", + "message": "Use padded bitvec.", + "timestamp": "2024-12-12T18:30:21Z", + "url": "https://github.com/powdr-labs/powdr/pull/2230/commits/4d127f0a1208e0c67fd69d1fe5ffd295d224a90f" + }, + "date": 1734051973614, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7000, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 605, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1119, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29080, + "range": "± 52", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24407, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24328, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17271, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 801092, + "range": "± 2220", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2760433, + "range": "± 3814", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9690700, + "range": "± 34025", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35520693, + "range": "± 152858", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141839511, + "range": "± 1348448", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3134, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2457, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2451, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1367, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65621, + "range": "± 47", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251944, + "range": "± 191", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1028719, + "range": "± 898", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4885680, + "range": "± 10207", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28106914, + "range": "± 151382", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "62e24d556058a21b95c8236c47627202ac40c39a", + "message": "Use padded bitvec.", + "timestamp": "2024-12-12T18:30:21Z", + "url": "https://github.com/powdr-labs/powdr/pull/2230/commits/62e24d556058a21b95c8236c47627202ac40c39a" + }, + "date": 1734085818991, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6946, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 613, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1077, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28894, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24179, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24091, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17077, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 794942, + "range": "± 973", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2723773, + "range": "± 3481", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9462844, + "range": "± 12646", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34764534, + "range": "± 51838", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138357837, + "range": "± 174867", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3132, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2460, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2482, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1361, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65045, + "range": "± 48", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252264, + "range": "± 256", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1027237, + "range": "± 1214", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4862417, + "range": "± 3552", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27620582, + "range": "± 46874", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "16ab4ae5dd067b112285922b4d6af56eb62d524e", + "message": "Use padded bitvec.", + "timestamp": "2024-12-12T18:30:21Z", + "url": "https://github.com/powdr-labs/powdr/pull/2230/commits/16ab4ae5dd067b112285922b4d6af56eb62d524e" + }, + "date": 1734089422443, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6853, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 583, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1046, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29019, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24307, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24267, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17170, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 786806, + "range": "± 946", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2718568, + "range": "± 3804", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9483692, + "range": "± 36167", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34644609, + "range": "± 112560", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138129885, + "range": "± 352662", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3212, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2469, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2558, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1363, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 67247, + "range": "± 44", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251102, + "range": "± 227", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1022445, + "range": "± 920", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4855065, + "range": "± 4343", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27675294, + "range": "± 19044", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "2e94cd96fdf372225eec8fc0a1fc7b43d6713568", + "message": "Effects to rust", + "timestamp": "2024-12-12T18:30:21Z", + "url": "https://github.com/powdr-labs/powdr/pull/2229/commits/2e94cd96fdf372225eec8fc0a1fc7b43d6713568" + }, + "date": 1734090406066, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6838, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 594, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1091, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29267, + "range": "± 33", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24377, + "range": "± 28", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24360, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17210, + "range": "± 29", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 800053, + "range": "± 2562", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2762905, + "range": "± 3675", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9686856, + "range": "± 13770", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35581836, + "range": "± 57648", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140979720, + "range": "± 167662", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3123, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2474, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2443, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1360, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65411, + "range": "± 47", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251923, + "range": "± 434", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1031806, + "range": "± 12915", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4863265, + "range": "± 5703", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27540663, + "range": "± 36026", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8126754285, + "range": "± 30357616", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "605be04fe94de043a9dd035b0810abdc942a9089", + "message": "Remove constant intermediates", + "timestamp": "2024-12-12T18:30:21Z", + "url": "https://github.com/powdr-labs/powdr/pull/2163/commits/605be04fe94de043a9dd035b0810abdc942a9089" + }, + "date": 1734095763016, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6859, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 588, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1059, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28796, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24045, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 23980, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 16955, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 793077, + "range": "± 1003", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2744987, + "range": "± 2933", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9578927, + "range": "± 16799", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35139991, + "range": "± 97056", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140806587, + "range": "± 801394", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3120, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2455, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2456, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1368, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66029, + "range": "± 46", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252683, + "range": "± 212", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1034369, + "range": "± 1753", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4894298, + "range": "± 6457", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28019557, + "range": "± 100424", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8588650000, + "range": "± 66145767", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "48de0e832e14da0e5dd5377bc75c6eea55c1bcc6", + "message": "Remove constant intermediates", + "timestamp": "2024-12-12T18:30:21Z", + "url": "https://github.com/powdr-labs/powdr/pull/2163/commits/48de0e832e14da0e5dd5377bc75c6eea55c1bcc6" + }, + "date": 1734099200978, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7036, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 602, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1117, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29040, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24295, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24336, + "range": "± 31", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17091, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 782821, + "range": "± 1568", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2703167, + "range": "± 5469", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9486703, + "range": "± 25206", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34855670, + "range": "± 136798", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138453765, + "range": "± 491739", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3200, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2458, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2460, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1373, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65633, + "range": "± 37", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252421, + "range": "± 123", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1042814, + "range": "± 1257", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4885339, + "range": "± 4170", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27876044, + "range": "± 210044", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8271288461, + "range": "± 38124442", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "5b3e45a1d9d186218b4dd5fab12d532988ba0ca1", + "message": "Effects to rust", + "timestamp": "2024-12-12T18:30:21Z", + "url": "https://github.com/powdr-labs/powdr/pull/2229/commits/5b3e45a1d9d186218b4dd5fab12d532988ba0ca1" + }, + "date": 1734100078097, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6802, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 622, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1098, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29032, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24182, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24141, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17084, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 782428, + "range": "± 1110", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2700478, + "range": "± 4555", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9422709, + "range": "± 15661", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34605928, + "range": "± 111735", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 137205911, + "range": "± 165821", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3184, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2450, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2443, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1358, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65672, + "range": "± 67", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 254514, + "range": "± 255", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1033287, + "range": "± 1378", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4856386, + "range": "± 2876", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27659303, + "range": "± 53257", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8280915258, + "range": "± 16886347", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "e369b9230c5865841c3428877125346f91f4b31a", + "message": "Effects to rust", + "timestamp": "2024-12-12T18:30:21Z", + "url": "https://github.com/powdr-labs/powdr/pull/2229/commits/e369b9230c5865841c3428877125346f91f4b31a" + }, + "date": 1734101557131, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6866, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 602, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1055, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28947, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24177, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24290, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17103, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 786779, + "range": "± 2401", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2723147, + "range": "± 6126", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9579132, + "range": "± 41933", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35416743, + "range": "± 287045", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140299301, + "range": "± 920906", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3228, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2556, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2528, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1353, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65687, + "range": "± 48", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252575, + "range": "± 189", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1027680, + "range": "± 1065", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4885617, + "range": "± 23980", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28050560, + "range": "± 257822", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8577520704, + "range": "± 97941857", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "13b7a3929450b81f480d64d8a4eeb6e174a3472c", + "message": "Remove reset instruction", + "timestamp": "2024-12-12T18:30:21Z", + "url": "https://github.com/powdr-labs/powdr/pull/1718/commits/13b7a3929450b81f480d64d8a4eeb6e174a3472c" + }, + "date": 1734104446031, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7074, + "range": "± 32", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 690, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1081, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29224, + "range": "± 28", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24529, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24355, + "range": "± 37", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17309, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 779025, + "range": "± 1042", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2692523, + "range": "± 3332", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9374815, + "range": "± 11121", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34403611, + "range": "± 53841", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 136675499, + "range": "± 129932", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3279, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2449, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2446, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1359, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65698, + "range": "± 34", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 254707, + "range": "± 175", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1029811, + "range": "± 1344", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4872373, + "range": "± 2528", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27608916, + "range": "± 28392", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8121202517, + "range": "± 37028591", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "62377e99f9ed4634c537c44155132ffb0eea72d9", + "message": "Prepare block machine processor", + "timestamp": "2024-12-12T18:30:21Z", + "url": "https://github.com/powdr-labs/powdr/pull/2231/commits/62377e99f9ed4634c537c44155132ffb0eea72d9" + }, + "date": 1734106084548, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7225, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 626, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1102, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29613, + "range": "± 93", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24768, + "range": "± 27", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24703, + "range": "± 32", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17408, + "range": "± 41", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 811013, + "range": "± 2871", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2804608, + "range": "± 8486", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9805771, + "range": "± 70646", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35835534, + "range": "± 232140", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 142654377, + "range": "± 884714", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3195, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2521, + "range": "± 30", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2476, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1384, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66278, + "range": "± 144", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 254356, + "range": "± 1088", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1038944, + "range": "± 4936", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4917520, + "range": "± 13502", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28161624, + "range": "± 183171", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8856098067, + "range": "± 60486521", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "db17f9c7ac704ac9ab29b784ea7ed3add45f953b", + "message": "[WIP] Block machine processor", + "timestamp": "2024-12-12T18:30:21Z", + "url": "https://github.com/powdr-labs/powdr/pull/2226/commits/db17f9c7ac704ac9ab29b784ea7ed3add45f953b" + }, + "date": 1734106105043, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6804, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 585, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1066, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29058, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24219, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24199, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17168, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 794430, + "range": "± 1853", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2736553, + "range": "± 4990", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9597378, + "range": "± 35453", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35040266, + "range": "± 76490", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138868110, + "range": "± 501529", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3140, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2466, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2453, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1375, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65872, + "range": "± 53", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251919, + "range": "± 204", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1028392, + "range": "± 982", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4897565, + "range": "± 4332", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27640106, + "range": "± 92950", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8172434296, + "range": "± 80199211", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "3365e53e7d9d4ff38384e3aba47acc05c32c4b75", + "message": "Remove reset instruction", + "timestamp": "2024-12-12T18:30:21Z", + "url": "https://github.com/powdr-labs/powdr/pull/1718/commits/3365e53e7d9d4ff38384e3aba47acc05c32c4b75" + }, + "date": 1734112083882, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7009, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 610, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1076, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29948, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 25040, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 25063, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17688, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 787574, + "range": "± 1574", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2713843, + "range": "± 3484", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9503879, + "range": "± 19675", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34880993, + "range": "± 140438", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138449389, + "range": "± 126394", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3125, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2464, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2451, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1372, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65500, + "range": "± 82", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251747, + "range": "± 330", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1027488, + "range": "± 1115", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4873102, + "range": "± 2356", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27623674, + "range": "± 16417", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8166958444, + "range": "± 29086000", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "3bb99a22b99cf8d89ef41fa44b81d4bce87f7f6d", + "message": "(WIP) make the RISCV executor look at the optimized PIL for link information", + "timestamp": "2024-12-12T18:30:21Z", + "url": "https://github.com/powdr-labs/powdr/pull/2232/commits/3bb99a22b99cf8d89ef41fa44b81d4bce87f7f6d" + }, + "date": 1734119373068, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6839, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 586, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1094, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29124, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24364, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24353, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17248, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 785479, + "range": "± 918", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2717505, + "range": "± 4076", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9582240, + "range": "± 24802", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34954402, + "range": "± 105315", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138948281, + "range": "± 299844", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3126, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2456, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2475, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1359, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65020, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 250914, + "range": "± 154", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1023447, + "range": "± 1249", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4844192, + "range": "± 3434", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27592154, + "range": "± 79934", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8263644981, + "range": "± 35101058", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "bc886586be4b10727cd6b1ba2ba8033fe24ee6a9", + "message": "Remove reset instruction", + "timestamp": "2024-12-12T18:30:21Z", + "url": "https://github.com/powdr-labs/powdr/pull/1718/commits/bc886586be4b10727cd6b1ba2ba8033fe24ee6a9" + }, + "date": 1734164021937, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6831, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 592, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1101, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29145, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24233, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24231, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17200, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 787800, + "range": "± 779", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2710336, + "range": "± 3067", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9382283, + "range": "± 13004", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34650846, + "range": "± 76807", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138974588, + "range": "± 326689", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3152, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2460, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2457, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1359, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65866, + "range": "± 107", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 253440, + "range": "± 197", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1031984, + "range": "± 1270", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4895391, + "range": "± 3876", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27700597, + "range": "± 38825", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8168331407, + "range": "± 21036553", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "3ffbd9ac3d99862a3cdf1d3d00cc23e38bca9662", + "message": "Use padded bitvec.", + "timestamp": "2024-12-15T22:24:48Z", + "url": "https://github.com/powdr-labs/powdr/pull/2230/commits/3ffbd9ac3d99862a3cdf1d3d00cc23e38bca9662" + }, + "date": 1734344524200, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7183, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 684, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1155, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29395, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24608, + "range": "± 30", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24510, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17283, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 831074, + "range": "± 776", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2878224, + "range": "± 3407", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 10026736, + "range": "± 16520", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 36554194, + "range": "± 154796", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 143374311, + "range": "± 226820", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3161, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2498, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2475, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1373, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65635, + "range": "± 62", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252632, + "range": "± 148", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1027060, + "range": "± 1004", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4867059, + "range": "± 2554", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27582955, + "range": "± 86585", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8357144342, + "range": "± 44057049", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "c75700d8296fdebfc81a118d6bc4c73517baeea5", + "message": "Prepare block machine processor", + "timestamp": "2024-12-15T22:24:48Z", + "url": "https://github.com/powdr-labs/powdr/pull/2231/commits/c75700d8296fdebfc81a118d6bc4c73517baeea5" + }, + "date": 1734345502166, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6951, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 607, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1096, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29150, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24343, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24209, + "range": "± 28", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17171, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 795299, + "range": "± 1080", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2747149, + "range": "± 4313", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9654320, + "range": "± 26580", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35168622, + "range": "± 134047", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139661584, + "range": "± 307596", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3128, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2450, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2458, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1368, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65728, + "range": "± 32", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 253129, + "range": "± 130", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1030747, + "range": "± 1512", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4868974, + "range": "± 4298", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27721138, + "range": "± 83483", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8150431618, + "range": "± 26134435", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "chriseth", + "username": "chriseth", + "email": "chris@ethereum.org" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "e5f93920104a3bcbb504f784a8f0d2624a551e77", + "message": "Use padded bitvec. (#2230)", + "timestamp": "2024-12-16T10:49:30Z", + "url": "https://github.com/powdr-labs/powdr/commit/e5f93920104a3bcbb504f784a8f0d2624a551e77" + }, + "date": 1734347150846, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7344, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 603, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1070, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29638, + "range": "± 52", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24686, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24719, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17469, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 791946, + "range": "± 2384", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2731358, + "range": "± 8045", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9559669, + "range": "± 64092", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34886381, + "range": "± 251723", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139038506, + "range": "± 1246305", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3158, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2502, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2465, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1361, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65685, + "range": "± 41", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252582, + "range": "± 267", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1031836, + "range": "± 2330", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4899260, + "range": "± 32674", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28073094, + "range": "± 164239", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8627108200, + "range": "± 228310971", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "7ef386c909b4d84714e5d15e78147eaa7a9b13c8", + "message": "executor fixes", + "timestamp": "2024-12-15T22:24:48Z", + "url": "https://github.com/powdr-labs/powdr/pull/2238/commits/7ef386c909b4d84714e5d15e78147eaa7a9b13c8" + }, + "date": 1734348784493, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6938, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 600, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1086, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28808, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24124, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24086, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17007, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 784718, + "range": "± 879", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2698581, + "range": "± 2451", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9465932, + "range": "± 11041", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34609027, + "range": "± 29198", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138121685, + "range": "± 284185", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3136, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2451, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2446, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1364, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 67783, + "range": "± 54", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 259288, + "range": "± 172", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1056500, + "range": "± 1072", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4963513, + "range": "± 2699", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28005111, + "range": "± 13910", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8370757426, + "range": "± 231160763", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "chris@ethereum.org", + "name": "chriseth", + "username": "chriseth" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": false, + "id": "e5f93920104a3bcbb504f784a8f0d2624a551e77", + "message": "Use padded bitvec. (#2230)", + "timestamp": "2024-12-16T10:49:30Z", + "tree_id": "6db302c3d2fd9014e8b4015398f6290fd9e5d524", + "url": "https://github.com/powdr-labs/powdr/commit/e5f93920104a3bcbb504f784a8f0d2624a551e77" + }, + "date": 1734348925266, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6904, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 590, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1069, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29332, + "range": "± 44", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24515, + "range": "± 43", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24426, + "range": "± 30", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17269, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 803208, + "range": "± 1380", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2772349, + "range": "± 3794", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9703568, + "range": "± 22964", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35521630, + "range": "± 98762", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141455033, + "range": "± 544764", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3145, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2521, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2537, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1372, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65881, + "range": "± 47", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 253404, + "range": "± 275", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1035369, + "range": "± 1624", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4900293, + "range": "± 3756", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27827796, + "range": "± 53720", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8499844073, + "range": "± 70304505", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "7cda443e11d21014404ff3b3d868fc87054799e0", + "message": "RISCV executor trace", + "timestamp": "2024-12-16T11:19:39Z", + "url": "https://github.com/powdr-labs/powdr/pull/2207/commits/7cda443e11d21014404ff3b3d868fc87054799e0" + }, + "date": 1734350209899, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6922, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 596, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1052, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29094, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24208, + "range": "± 33", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24154, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17097, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 791858, + "range": "± 1174", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2737077, + "range": "± 3101", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9531269, + "range": "± 18559", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35016240, + "range": "± 118655", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139174815, + "range": "± 398548", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3187, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2510, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2465, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1373, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65623, + "range": "± 44", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 253343, + "range": "± 246", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1036416, + "range": "± 1024", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4890367, + "range": "± 12592", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27617252, + "range": "± 154350", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8349171422, + "range": "± 40705727", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "5075bd154a015e4384cf5c35f9a37e4b399fc934", + "message": "Prepare block machine processor", + "timestamp": "2024-12-16T11:19:39Z", + "url": "https://github.com/powdr-labs/powdr/pull/2231/commits/5075bd154a015e4384cf5c35f9a37e4b399fc934" + }, + "date": 1734350324755, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7055, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 580, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1058, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 30829, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 25796, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 25700, + "range": "± 28", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 18268, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 809668, + "range": "± 2105", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2797620, + "range": "± 4815", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9746530, + "range": "± 29329", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35780000, + "range": "± 171839", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141800337, + "range": "± 277068", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3121, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2452, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2448, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1360, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65550, + "range": "± 47", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 250444, + "range": "± 237", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1024472, + "range": "± 770", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4878259, + "range": "± 6836", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27698614, + "range": "± 146903", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8342990069, + "range": "± 61665149", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "25ff483ae2bdf466bfed278af63bef26e77764f5", + "message": "(WIP) make the RISCV executor look at the optimized PIL for link information", + "timestamp": "2024-12-16T11:19:39Z", + "url": "https://github.com/powdr-labs/powdr/pull/2232/commits/25ff483ae2bdf466bfed278af63bef26e77764f5" + }, + "date": 1734352253146, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6896, + "range": "± 28", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 618, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1066, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29267, + "range": "± 38", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24469, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24365, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17227, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 799206, + "range": "± 659", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2766503, + "range": "± 2677", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9691575, + "range": "± 20677", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35367784, + "range": "± 99376", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139894844, + "range": "± 661885", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3169, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2509, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2456, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1368, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 67850, + "range": "± 31", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 255849, + "range": "± 197", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1036143, + "range": "± 1141", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4860327, + "range": "± 3922", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27543525, + "range": "± 18674", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8166587340, + "range": "± 45606664", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "c96cf506296be090d134118707568cb405096486", + "message": "Prepare block machine processor", + "timestamp": "2024-12-16T11:19:39Z", + "url": "https://github.com/powdr-labs/powdr/pull/2231/commits/c96cf506296be090d134118707568cb405096486" + }, + "date": 1734354210728, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6867, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 580, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1064, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29050, + "range": "± 443", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24213, + "range": "± 26", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24196, + "range": "± 36", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17097, + "range": "± 41", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 790173, + "range": "± 1173", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2730642, + "range": "± 5423", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9566850, + "range": "± 15792", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34914547, + "range": "± 42377", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138937418, + "range": "± 331387", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3159, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2492, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2480, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1376, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 67360, + "range": "± 91", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 255648, + "range": "± 199", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1039356, + "range": "± 1670", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4915037, + "range": "± 12196", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27656848, + "range": "± 55084", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8357423572, + "range": "± 71957768", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "04cc70a252f8fd13d59cfdb921ab51be75fe82d8", + "message": "(WIP) make the RISCV executor look at the optimized PIL for link information", + "timestamp": "2024-12-16T11:19:39Z", + "url": "https://github.com/powdr-labs/powdr/pull/2232/commits/04cc70a252f8fd13d59cfdb921ab51be75fe82d8" + }, + "date": 1734355021068, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6904, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 613, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1096, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29173, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24467, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24474, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17178, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 795925, + "range": "± 3597", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2789028, + "range": "± 4527", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9778167, + "range": "± 13801", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35775309, + "range": "± 36348", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140859656, + "range": "± 128251", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3240, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2493, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2512, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1374, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66073, + "range": "± 54", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 253607, + "range": "± 161", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1036662, + "range": "± 1144", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4883546, + "range": "± 2684", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27642021, + "range": "± 21733", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8173880930, + "range": "± 24761471", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "Leandro Pacheco", + "username": "pacheco", + "email": "contact@leandropacheco.com" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "19a945759eddbdea69acc64b8577b44246b345cd", + "message": "RISCV executor trace (#2207)\n\nRefactor the RISCV executor to produce a list of calls into submachines,\nin preparation of integrating with jit witgen.", + "timestamp": "2024-12-16T13:47:29Z", + "url": "https://github.com/powdr-labs/powdr/commit/19a945759eddbdea69acc64b8577b44246b345cd" + }, + "date": 1734357798671, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6910, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 583, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1060, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29554, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24690, + "range": "± 37", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24573, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17390, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 800872, + "range": "± 1189", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2760422, + "range": "± 4207", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9679198, + "range": "± 20568", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35329865, + "range": "± 34357", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139867247, + "range": "± 230909", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3246, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2510, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2473, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1361, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66518, + "range": "± 54", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 265397, + "range": "± 248", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1044253, + "range": "± 1158", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4896453, + "range": "± 3032", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27773329, + "range": "± 37185", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8167696757, + "range": "± 51149019", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "Georg Wiese", + "username": "georgwiese", + "email": "georgwiese@gmail.com" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "d007b8f14588f569ea20e7eb2aebddac3d051499", + "message": "Prepare block machine processor (#2231)\n\nA few preparations for #2226:\n- Extracted a `test_utils` module\n- Introduced a new `Variable` type, which can refer to either a cell or\na \"parameter\" (either input or output of a machine call). I think in the\nfuture, we could have more variants (e.g. scalar publics). `Variable` is\nnow used instead of `Cell` in `WitgenInference`.\n- `WitgenInference::process_identity` now also returns whether any\nprogress has been made.\n- Renamed `lookup` -> `machine_call` when rendering `Effect`s", + "timestamp": "2024-12-16T13:53:10Z", + "url": "https://github.com/powdr-labs/powdr/commit/d007b8f14588f569ea20e7eb2aebddac3d051499" + }, + "date": 1734358149542, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6838, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 577, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1060, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29705, + "range": "± 37", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24657, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24683, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17425, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 797501, + "range": "± 1675", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2735642, + "range": "± 5030", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9616960, + "range": "± 35036", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35262360, + "range": "± 141221", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139651426, + "range": "± 379748", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3155, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2484, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2448, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1359, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 67959, + "range": "± 46", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 254193, + "range": "± 399", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1036665, + "range": "± 1098", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4894300, + "range": "± 4224", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27810261, + "range": "± 105820", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8438058327, + "range": "± 74809948", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "2b87cc83a46a433fcfa42c94c05fa60567e09a30", + "message": "(WIP) make the RISCV executor look at the optimized PIL for link information", + "timestamp": "2024-12-16T11:19:39Z", + "url": "https://github.com/powdr-labs/powdr/pull/2232/commits/2b87cc83a46a433fcfa42c94c05fa60567e09a30" + }, + "date": 1734359431143, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7048, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 584, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1051, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29414, + "range": "± 105", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24764, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24602, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17580, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 805860, + "range": "± 767", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2791741, + "range": "± 5625", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9719146, + "range": "± 20180", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35676657, + "range": "± 74353", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141784340, + "range": "± 237857", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3139, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2473, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2461, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1383, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65391, + "range": "± 30", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 250994, + "range": "± 155", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1022734, + "range": "± 2725", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4874589, + "range": "± 15368", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27760206, + "range": "± 48483", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8270582340, + "range": "± 45890566", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "contact@leandropacheco.com", + "name": "Leandro Pacheco", + "username": "pacheco" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": false, + "id": "19a945759eddbdea69acc64b8577b44246b345cd", + "message": "RISCV executor trace (#2207)\n\nRefactor the RISCV executor to produce a list of calls into submachines,\nin preparation of integrating with jit witgen.", + "timestamp": "2024-12-16T13:47:29Z", + "tree_id": "6b357a7cd7b6a39ea2f97b344261e738012ea510", + "url": "https://github.com/powdr-labs/powdr/commit/19a945759eddbdea69acc64b8577b44246b345cd" + }, + "date": 1734359625048, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7118, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 600, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1072, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29651, + "range": "± 26", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24688, + "range": "± 29", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 25054, + "range": "± 50", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17413, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 792474, + "range": "± 1078", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2742348, + "range": "± 6370", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9572962, + "range": "± 24457", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35017832, + "range": "± 61364", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139186496, + "range": "± 570462", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3134, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2746, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2450, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1361, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66273, + "range": "± 39", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252832, + "range": "± 288", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1030289, + "range": "± 818", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4877573, + "range": "± 4870", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27773596, + "range": "± 89605", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8493913343, + "range": "± 103252813", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "8aafe83d9de2119ef8f2b817e2a3b6377aa7dc6a", + "message": "free input data", + "timestamp": "2024-12-16T14:17:57Z", + "url": "https://github.com/powdr-labs/powdr/pull/2239/commits/8aafe83d9de2119ef8f2b817e2a3b6377aa7dc6a" + }, + "date": 1734359789402, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6879, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 595, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1048, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29237, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24470, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24436, + "range": "± 27", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17254, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 791905, + "range": "± 837", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2734701, + "range": "± 3423", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9537380, + "range": "± 12117", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34980050, + "range": "± 49504", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138972011, + "range": "± 160845", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3165, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2504, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2484, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1372, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66901, + "range": "± 33", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 254860, + "range": "± 207", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1038468, + "range": "± 1179", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4896144, + "range": "± 3993", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27661206, + "range": "± 23387", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8144092817, + "range": "± 48585889", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "b1dd99eedd8572b0e33617fdf21bc73125b675a9", + "message": "[WIP] Block machine processor", + "timestamp": "2024-12-16T14:17:57Z", + "url": "https://github.com/powdr-labs/powdr/pull/2226/commits/b1dd99eedd8572b0e33617fdf21bc73125b675a9" + }, + "date": 1734359975784, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7001, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 597, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1050, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29359, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24452, + "range": "± 29", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24450, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17276, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 803330, + "range": "± 3230", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2773587, + "range": "± 5610", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9689934, + "range": "± 13876", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35579814, + "range": "± 60560", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140941835, + "range": "± 563744", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3111, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2454, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2524, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1374, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65634, + "range": "± 58", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 250599, + "range": "± 260", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1029001, + "range": "± 1646", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4868079, + "range": "± 7796", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27717382, + "range": "± 165613", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8475362877, + "range": "± 44060746", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "georgwiese@gmail.com", + "name": "Georg Wiese", + "username": "georgwiese" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": true, + "id": "d007b8f14588f569ea20e7eb2aebddac3d051499", + "message": "Prepare block machine processor (#2231)\n\nA few preparations for #2226:\n- Extracted a `test_utils` module\n- Introduced a new `Variable` type, which can refer to either a cell or\na \"parameter\" (either input or output of a machine call). I think in the\nfuture, we could have more variants (e.g. scalar publics). `Variable` is\nnow used instead of `Cell` in `WitgenInference`.\n- `WitgenInference::process_identity` now also returns whether any\nprogress has been made.\n- Renamed `lookup` -> `machine_call` when rendering `Effect`s", + "timestamp": "2024-12-16T13:53:10Z", + "tree_id": "3d58668c897c2fba0a259f011f0be33ece8e0c26", + "url": "https://github.com/powdr-labs/powdr/commit/d007b8f14588f569ea20e7eb2aebddac3d051499" + }, + "date": 1734361388347, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6987, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 591, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1098, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29448, + "range": "± 178", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24405, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24417, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17309, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 792768, + "range": "± 1512", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2729821, + "range": "± 4515", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9537799, + "range": "± 14920", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34964168, + "range": "± 133098", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139639228, + "range": "± 680860", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3176, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2522, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2476, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1378, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65793, + "range": "± 45", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251910, + "range": "± 178", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1031155, + "range": "± 1748", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4902718, + "range": "± 3942", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27674372, + "range": "± 117287", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8357366459, + "range": "± 71380549", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "338bd432deb517d6457c0863508098811dd16a4d", + "message": "[WIP] Block machine processor", + "timestamp": "2024-12-16T14:23:59Z", + "url": "https://github.com/powdr-labs/powdr/pull/2226/commits/338bd432deb517d6457c0863508098811dd16a4d" + }, + "date": 1734363338533, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6875, + "range": "± 35", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 581, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1068, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28994, + "range": "± 50", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24094, + "range": "± 123", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24002, + "range": "± 105", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 16972, + "range": "± 29", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 793410, + "range": "± 1027", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2731666, + "range": "± 3500", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9562742, + "range": "± 26407", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35043555, + "range": "± 416377", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140893327, + "range": "± 966038", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3130, + "range": "± 63", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2479, + "range": "± 42", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2562, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1375, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65995, + "range": "± 47", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251845, + "range": "± 680", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1029547, + "range": "± 6445", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4879497, + "range": "± 58846", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27702719, + "range": "± 253748", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8831370184, + "range": "± 281640271", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "f09ae213d07767a5ac4dd24859e5f04699c4bdc0", + "message": "(WIP) make the RISCV executor look at the optimized PIL for link information", + "timestamp": "2024-12-16T14:23:59Z", + "url": "https://github.com/powdr-labs/powdr/pull/2232/commits/f09ae213d07767a5ac4dd24859e5f04699c4bdc0" + }, + "date": 1734367179990, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7637, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 620, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1109, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 34160, + "range": "± 102", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 28587, + "range": "± 27", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 28534, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 20087, + "range": "± 46", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 836860, + "range": "± 2233", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2873263, + "range": "± 4573", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 10082724, + "range": "± 30014", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 36801483, + "range": "± 241321", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 144357779, + "range": "± 767107", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3128, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2452, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2443, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1359, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66075, + "range": "± 60", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252904, + "range": "± 184", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1036719, + "range": "± 1246", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4908816, + "range": "± 3752", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27710633, + "range": "± 19270", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8178344228, + "range": "± 24603338", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "86f70859c4eb01414963a8b37a3063631c6be95c", + "message": "make the RISCV executor look at the optimized PIL for link information", + "timestamp": "2024-12-16T14:23:59Z", + "url": "https://github.com/powdr-labs/powdr/pull/2232/commits/86f70859c4eb01414963a8b37a3063631c6be95c" + }, + "date": 1734369854946, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6923, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 579, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1108, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29583, + "range": "± 30", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24770, + "range": "± 27", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24657, + "range": "± 29", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17350, + "range": "± 32", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 798363, + "range": "± 1472", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2762696, + "range": "± 5182", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9715336, + "range": "± 57185", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35846336, + "range": "± 289678", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 143131989, + "range": "± 1242888", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3128, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2448, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2447, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1358, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65666, + "range": "± 51", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252730, + "range": "± 178", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1034705, + "range": "± 2587", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4992521, + "range": "± 79813", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30312526, + "range": "± 361819", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8963636725, + "range": "± 80829288", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "2910c59b819e81cc02fceffff5af2129f598b4e4", + "message": "[WIP] Block machine processor", + "timestamp": "2024-12-16T14:23:59Z", + "url": "https://github.com/powdr-labs/powdr/pull/2226/commits/2910c59b819e81cc02fceffff5af2129f598b4e4" + }, + "date": 1734371100196, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7009, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 598, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1075, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29575, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24616, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24537, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17366, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 808629, + "range": "± 783", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2785637, + "range": "± 4393", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9659115, + "range": "± 8021", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35774749, + "range": "± 45179", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140164058, + "range": "± 103087", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3141, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2454, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2453, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1360, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66087, + "range": "± 35", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 253469, + "range": "± 595", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1039225, + "range": "± 1196", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4892305, + "range": "± 2935", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27656184, + "range": "± 17358", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8072939427, + "range": "± 37897385", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "ecbf7de382bef8476b3382b24f4ec2aca5893269", + "message": "Effects to rust", + "timestamp": "2024-12-16T14:23:59Z", + "url": "https://github.com/powdr-labs/powdr/pull/2229/commits/ecbf7de382bef8476b3382b24f4ec2aca5893269" + }, + "date": 1734371402420, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6750, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 621, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1072, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29157, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24308, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24237, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 16920, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 798595, + "range": "± 1208", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2765995, + "range": "± 4363", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9670395, + "range": "± 10424", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35449255, + "range": "± 85340", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140340694, + "range": "± 229026", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3120, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2457, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2443, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1367, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65448, + "range": "± 62", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251842, + "range": "± 158", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1031076, + "range": "± 1418", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4876563, + "range": "± 3940", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27649427, + "range": "± 104609", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8429941210, + "range": "± 22561979", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "d4881d0fc12b65b598755fa946fa4e4189afeea8", + "message": "Effects to rust", + "timestamp": "2024-12-16T14:23:59Z", + "url": "https://github.com/powdr-labs/powdr/pull/2229/commits/d4881d0fc12b65b598755fa946fa4e4189afeea8" + }, + "date": 1734372591758, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6969, + "range": "± 95", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 597, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1086, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28953, + "range": "± 318", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24347, + "range": "± 289", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24408, + "range": "± 266", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17101, + "range": "± 219", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 819958, + "range": "± 12604", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2861286, + "range": "± 58889", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 10216103, + "range": "± 246400", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 36843064, + "range": "± 830752", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 143652736, + "range": "± 3613110", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3189, + "range": "± 50", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2527, + "range": "± 31", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2484, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1412, + "range": "± 34", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 68824, + "range": "± 1973", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 257108, + "range": "± 5891", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1046588, + "range": "± 17868", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4911650, + "range": "± 56686", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27721522, + "range": "± 483596", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8471916695, + "range": "± 56524969", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "e32252feeaae8200f123c6cfaf7d32a04decf717", + "message": "[WIP] Block machine processor", + "timestamp": "2024-12-16T14:23:59Z", + "url": "https://github.com/powdr-labs/powdr/pull/2226/commits/e32252feeaae8200f123c6cfaf7d32a04decf717" + }, + "date": 1734374221562, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6958, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 598, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1063, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28956, + "range": "± 43", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24003, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24092, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 16981, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 794491, + "range": "± 2679", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2783506, + "range": "± 6618", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9700098, + "range": "± 16500", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35553605, + "range": "± 72235", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141122260, + "range": "± 149053", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3120, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2460, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2443, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1373, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65272, + "range": "± 55", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251478, + "range": "± 306", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1025889, + "range": "± 1102", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4854197, + "range": "± 2719", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27653903, + "range": "± 20302", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8141363889, + "range": "± 36647862", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "262dc2d2bb332882d101aa2d7c636e91bca008d7", + "message": "Effects to rust", + "timestamp": "2024-12-16T14:23:59Z", + "url": "https://github.com/powdr-labs/powdr/pull/2229/commits/262dc2d2bb332882d101aa2d7c636e91bca008d7" + }, + "date": 1734376704486, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6883, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 642, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1072, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28938, + "range": "± 86", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24214, + "range": "± 111", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24186, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17160, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 788434, + "range": "± 865", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2686823, + "range": "± 5793", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9457867, + "range": "± 29833", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34489645, + "range": "± 81328", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 137449829, + "range": "± 313006", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3122, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2458, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2458, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1372, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66710, + "range": "± 49", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252905, + "range": "± 245", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1033478, + "range": "± 1652", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4868572, + "range": "± 6388", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27682269, + "range": "± 154543", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8361888275, + "range": "± 59325745", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "debacf88f9b0822dd86022e5b2691bc0c1a9b2c1", + "message": "Support machine calls.", + "timestamp": "2024-12-16T14:23:59Z", + "url": "https://github.com/powdr-labs/powdr/pull/2241/commits/debacf88f9b0822dd86022e5b2691bc0c1a9b2c1" + }, + "date": 1734380811988, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6918, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 606, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1066, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28755, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24047, + "range": "± 29", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24021, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17016, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 785405, + "range": "± 884", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2713383, + "range": "± 6300", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9479107, + "range": "± 24061", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34973862, + "range": "± 97455", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139363915, + "range": "± 754491", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3182, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2532, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2462, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1379, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65856, + "range": "± 37", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252679, + "range": "± 167", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1028834, + "range": "± 884", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4869464, + "range": "± 12464", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27722156, + "range": "± 35179", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8306107645, + "range": "± 73472711", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "f324eabecc243db442262641335aa3502d6aa2b1", + "message": "make the RISCV executor look at the optimized PIL for link information", + "timestamp": "2024-12-16T14:23:59Z", + "url": "https://github.com/powdr-labs/powdr/pull/2232/commits/f324eabecc243db442262641335aa3502d6aa2b1" + }, + "date": 1734384061189, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6969, + "range": "± 117", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 604, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1111, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29754, + "range": "± 591", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 25419, + "range": "± 559", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24841, + "range": "± 536", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17426, + "range": "± 338", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 829642, + "range": "± 16026", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2879631, + "range": "± 60788", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9924940, + "range": "± 151082", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 37458403, + "range": "± 735354", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 147957640, + "range": "± 3225669", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3253, + "range": "± 59", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2494, + "range": "± 51", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2491, + "range": "± 39", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1372, + "range": "± 30", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 67557, + "range": "± 1052", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 254860, + "range": "± 2386", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1037624, + "range": "± 6842", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4961831, + "range": "± 72811", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28359219, + "range": "± 386121", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 9040695621, + "range": "± 70012306", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "ebcc3f6380d11a9852d79b12ed68ce31d907cc46", + "message": "make the RISCV executor look at the optimized PIL for link information", + "timestamp": "2024-12-16T14:23:59Z", + "url": "https://github.com/powdr-labs/powdr/pull/2232/commits/ebcc3f6380d11a9852d79b12ed68ce31d907cc46" + }, + "date": 1734385336507, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6945, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 593, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1064, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29137, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24268, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24292, + "range": "± 26", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17201, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 799208, + "range": "± 2163", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2747648, + "range": "± 5465", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9664767, + "range": "± 51100", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35310124, + "range": "± 305360", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140633723, + "range": "± 652407", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3134, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2452, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2450, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1364, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65962, + "range": "± 93", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 253078, + "range": "± 322", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1030609, + "range": "± 1810", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4885684, + "range": "± 21020", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27837669, + "range": "± 189211", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8567130302, + "range": "± 189509891", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "9acf8c81cba767f7dc2a48a6340fb1a357fc4630", + "message": "[WIP] Block machine processor", + "timestamp": "2024-12-16T14:23:59Z", + "url": "https://github.com/powdr-labs/powdr/pull/2226/commits/9acf8c81cba767f7dc2a48a6340fb1a357fc4630" + }, + "date": 1734425413260, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7124, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 633, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1140, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29464, + "range": "± 34", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24609, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24594, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17373, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 797091, + "range": "± 1301", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2745053, + "range": "± 2462", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9579985, + "range": "± 10127", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35131746, + "range": "± 41011", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139815920, + "range": "± 669416", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3180, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2454, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2443, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1358, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65688, + "range": "± 55", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 250864, + "range": "± 259", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1024379, + "range": "± 859", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4865943, + "range": "± 4643", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27761747, + "range": "± 16794", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8097045858, + "range": "± 19853986", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "Leandro Pacheco", + "username": "pacheco", + "email": "contact@leandropacheco.com" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "e32108d44a4b7597b723c8728d7bf90229e09136", + "message": "make the RISCV executor look at the optimized PIL for link information (#2232)\n\nThis PR modifies the RISCV executor to look into the optimized PIL for\nlookup/permutation definitions.\nIn particular, to figure out which selectors are assigned for each link,\nbut also with the intent of later integration with witgen (which needs\nthe identity ids for \"submachine calls\")", + "timestamp": "2024-12-17T08:46:52Z", + "url": "https://github.com/powdr-labs/powdr/commit/e32108d44a4b7597b723c8728d7bf90229e09136" + }, + "date": 1734426195451, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6800, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 593, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1078, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29408, + "range": "± 26", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24598, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24491, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17330, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 779640, + "range": "± 1563", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2685834, + "range": "± 3376", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9390795, + "range": "± 8653", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34491107, + "range": "± 99411", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 136803243, + "range": "± 164978", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3127, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2449, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2508, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1356, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65911, + "range": "± 35", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252641, + "range": "± 845", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1035035, + "range": "± 1610", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4868966, + "range": "± 3077", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27665209, + "range": "± 19612", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8130478164, + "range": "± 24868012", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "516ae1c0baef167f27216009f1ca28bc0cf9cbeb", + "message": "[WIP] Block machine processor", + "timestamp": "2024-12-16T14:23:59Z", + "url": "https://github.com/powdr-labs/powdr/pull/2226/commits/516ae1c0baef167f27216009f1ca28bc0cf9cbeb" + }, + "date": 1734427784246, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7019, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 595, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1082, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29189, + "range": "± 28", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24396, + "range": "± 27", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24382, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17181, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 786912, + "range": "± 757", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2710535, + "range": "± 4058", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9475588, + "range": "± 12486", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34887877, + "range": "± 58664", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138401607, + "range": "± 384944", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3133, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2460, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2451, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1372, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66195, + "range": "± 56", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252890, + "range": "± 284", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1031157, + "range": "± 1197", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4915849, + "range": "± 2857", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27758288, + "range": "± 14887", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8180045332, + "range": "± 30495427", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "contact@leandropacheco.com", + "name": "Leandro Pacheco", + "username": "pacheco" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": true, + "id": "e32108d44a4b7597b723c8728d7bf90229e09136", + "message": "make the RISCV executor look at the optimized PIL for link information (#2232)\n\nThis PR modifies the RISCV executor to look into the optimized PIL for\nlookup/permutation definitions.\nIn particular, to figure out which selectors are assigned for each link,\nbut also with the intent of later integration with witgen (which needs\nthe identity ids for \"submachine calls\")", + "timestamp": "2024-12-17T08:46:52Z", + "tree_id": "68fecd393e2a5710ab9b51b76dc9c3ff6f9cb794", + "url": "https://github.com/powdr-labs/powdr/commit/e32108d44a4b7597b723c8728d7bf90229e09136" + }, + "date": 1734427974297, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6994, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 646, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1102, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29497, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24793, + "range": "± 26", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24758, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17621, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 803247, + "range": "± 1101", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2751184, + "range": "± 4503", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9616901, + "range": "± 23734", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35233563, + "range": "± 83105", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140243496, + "range": "± 988024", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3192, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2469, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2461, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1359, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65661, + "range": "± 29", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 253328, + "range": "± 216", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1026421, + "range": "± 1270", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4866870, + "range": "± 3697", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27648807, + "range": "± 209147", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8252091584, + "range": "± 72115001", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "b8c9333d305bc74ff82e3218d26beec8515279c1", + "message": "Lift some tests from nightly to pr-tests", + "timestamp": "2024-12-17T09:17:13Z", + "url": "https://github.com/powdr-labs/powdr/pull/2216/commits/b8c9333d305bc74ff82e3218d26beec8515279c1" + }, + "date": 1734428325843, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6808, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 596, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1061, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28940, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24555, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24488, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17270, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 791811, + "range": "± 896", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2719896, + "range": "± 3160", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9527570, + "range": "± 12426", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34868905, + "range": "± 87230", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139370069, + "range": "± 451465", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3150, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2462, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2461, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1360, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65516, + "range": "± 67", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251696, + "range": "± 289", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1028558, + "range": "± 1430", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4870481, + "range": "± 3982", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27652580, + "range": "± 28082", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8140865485, + "range": "± 42964095", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "Leo", + "username": "leonardoalt", + "email": "leo@powdrlabs.com" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "a5df8bc035bfcd77c8833fef3eb99f9068ff6bb8", + "message": "Lift some tests from nightly to pr-tests (#2216)", + "timestamp": "2024-12-17T09:50:58Z", + "url": "https://github.com/powdr-labs/powdr/commit/a5df8bc035bfcd77c8833fef3eb99f9068ff6bb8" + }, + "date": 1734430054589, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7008, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 605, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1094, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29113, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24349, + "range": "± 32", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24303, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17212, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 798398, + "range": "± 3328", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2749188, + "range": "± 10280", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9687125, + "range": "± 50019", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35459695, + "range": "± 210298", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141666600, + "range": "± 660927", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3159, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2497, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2463, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1372, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65414, + "range": "± 50", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251092, + "range": "± 163", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1027406, + "range": "± 1698", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4886854, + "range": "± 22308", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28162933, + "range": "± 190909", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8804812572, + "range": "± 68408360", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "71ee29c580fa9c2c42cb945bce0ca8388cd6e826", + "message": "Effects to rust", + "timestamp": "2024-12-17T09:17:13Z", + "url": "https://github.com/powdr-labs/powdr/pull/2229/commits/71ee29c580fa9c2c42cb945bce0ca8388cd6e826" + }, + "date": 1734431137834, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6939, + "range": "± 78", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 599, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1087, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29114, + "range": "± 256", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24312, + "range": "± 153", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24250, + "range": "± 45", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17191, + "range": "± 110", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 804946, + "range": "± 8465", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2772349, + "range": "± 6793", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9778172, + "range": "± 80641", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35998130, + "range": "± 574822", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140955676, + "range": "± 1228530", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3224, + "range": "± 41", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2532, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2473, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1362, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65638, + "range": "± 227", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252446, + "range": "± 243", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1031681, + "range": "± 3946", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4860542, + "range": "± 13538", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27576719, + "range": "± 44716", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8159764122, + "range": "± 35690889", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "555ac0d2e19f27efac7cd69367b2080da46490b9", + "message": "Remove reset instruction", + "timestamp": "2024-12-17T09:17:13Z", + "url": "https://github.com/powdr-labs/powdr/pull/1718/commits/555ac0d2e19f27efac7cd69367b2080da46490b9" + }, + "date": 1734431232923, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6954, + "range": "± 38", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 631, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1083, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29130, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24323, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24285, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17065, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 786043, + "range": "± 934", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2695696, + "range": "± 3423", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9447359, + "range": "± 20844", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34729086, + "range": "± 89467", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138764908, + "range": "± 364842", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3189, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2460, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2464, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1365, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66120, + "range": "± 81", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 253867, + "range": "± 182", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1036428, + "range": "± 2339", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4888908, + "range": "± 5680", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27648835, + "range": "± 108482", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8234720194, + "range": "± 52169378", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "71bd804d7cd2d5a4788fb83b70af33e9ae2a6a87", + "message": "Block machine processor", + "timestamp": "2024-12-17T09:17:13Z", + "url": "https://github.com/powdr-labs/powdr/pull/2226/commits/71bd804d7cd2d5a4788fb83b70af33e9ae2a6a87" + }, + "date": 1734431573552, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6800, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 626, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1129, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28975, + "range": "± 65", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24308, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24251, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17261, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 794422, + "range": "± 939", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2737287, + "range": "± 3130", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9595441, + "range": "± 10855", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35247383, + "range": "± 51084", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138785140, + "range": "± 147325", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3124, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2466, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2445, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1373, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65784, + "range": "± 41", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252242, + "range": "± 227", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1033084, + "range": "± 1038", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4870607, + "range": "± 3143", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27629682, + "range": "± 25182", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8254207650, + "range": "± 42600270", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "leo@powdrlabs.com", + "name": "Leo", + "username": "leonardoalt" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": false, + "id": "a5df8bc035bfcd77c8833fef3eb99f9068ff6bb8", + "message": "Lift some tests from nightly to pr-tests (#2216)", + "timestamp": "2024-12-17T09:50:58Z", + "tree_id": "af205775030009746e8d8cf77698b681f202df16", + "url": "https://github.com/powdr-labs/powdr/commit/a5df8bc035bfcd77c8833fef3eb99f9068ff6bb8" + }, + "date": 1734431744203, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6933, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 591, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1062, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29351, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24566, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24536, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17254, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 798927, + "range": "± 2426", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2745919, + "range": "± 4252", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9751892, + "range": "± 48298", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35104303, + "range": "± 255396", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 143428392, + "range": "± 2035286", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3209, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2534, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2506, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1373, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66804, + "range": "± 94", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 250947, + "range": "± 187", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1027998, + "range": "± 1315", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4872904, + "range": "± 25159", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28053154, + "range": "± 354508", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8662625109, + "range": "± 219759721", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "Thibaut Schaeffer", + "username": "Schaeff", + "email": "schaeffer.thibaut@gmail.com" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "9e9fb9050ba587b8060daf4290157693edf944cd", + "message": "Remove constant intermediates (#2163)\n\nSee [added\ntest](https://github.com/powdr-labs/powdr/blob/48de0e832e14da0e5dd5377bc75c6eea55c1bcc6/pilopt/tests/optimizer.rs#L34)\n\nThis propagates knowledge about constant intermediates forward in source\norder. We could run this backwards as well but I think in practice\nintermediates are defined before usage.\n\n---------\n\nCo-authored-by: chriseth ", + "timestamp": "2024-12-17T10:33:59Z", + "url": "https://github.com/powdr-labs/powdr/commit/9e9fb9050ba587b8060daf4290157693edf944cd" + }, + "date": 1734432629030, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6842, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 600, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1069, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28589, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 23917, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 23880, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 16917, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 787057, + "range": "± 1650", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2709487, + "range": "± 3985", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9460791, + "range": "± 10095", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34800877, + "range": "± 66121", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138497044, + "range": "± 214086", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3117, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2467, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2445, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1374, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65646, + "range": "± 50", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 253233, + "range": "± 187", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1033350, + "range": "± 1256", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4874999, + "range": "± 8212", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27693726, + "range": "± 79993", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8257629555, + "range": "± 109883134", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "chriseth", + "username": "chriseth", + "email": "chris@ethereum.org" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "a68a20c9a4f05d997280ddb128fbfffe1ff55bb0", + "message": "Effects to rust (#2229)\n\nFormats a vector of \"effects\" coming from the witgen solver into rust\ncode, compiles and loads it.\n\nSubmachine calls and receiving arguments will be done in another PR.\n\nThis code assumes `known` to be a padded bit vector ( #2230 ).\n\n---------\n\nCo-authored-by: Georg Wiese ", + "timestamp": "2024-12-17T10:41:04Z", + "url": "https://github.com/powdr-labs/powdr/commit/a68a20c9a4f05d997280ddb128fbfffe1ff55bb0" + }, + "date": 1734433036500, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6938, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 585, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1101, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29246, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24503, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24490, + "range": "± 76", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17341, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 828195, + "range": "± 1456", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2807984, + "range": "± 8577", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9598088, + "range": "± 21103", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35097337, + "range": "± 104356", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139585034, + "range": "± 921998", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3124, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2466, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2447, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1371, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65526, + "range": "± 126", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 253196, + "range": "± 280", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1024185, + "range": "± 1122", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4896706, + "range": "± 4117", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27812174, + "range": "± 153971", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8398085507, + "range": "± 67397471", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "chris@ethereum.org", + "name": "chriseth", + "username": "chriseth" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": false, + "id": "a68a20c9a4f05d997280ddb128fbfffe1ff55bb0", + "message": "Effects to rust (#2229)\n\nFormats a vector of \"effects\" coming from the witgen solver into rust\ncode, compiles and loads it.\n\nSubmachine calls and receiving arguments will be done in another PR.\n\nThis code assumes `known` to be a padded bit vector ( #2230 ).\n\n---------\n\nCo-authored-by: Georg Wiese ", + "timestamp": "2024-12-17T10:41:04Z", + "tree_id": "7ed939b6d91ae50af226c33c9edd95769a675579", + "url": "https://github.com/powdr-labs/powdr/commit/a68a20c9a4f05d997280ddb128fbfffe1ff55bb0" + }, + "date": 1734436231986, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7024, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 638, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1097, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28815, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24354, + "range": "± 26", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24210, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17154, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 824466, + "range": "± 1220", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2849190, + "range": "± 3535", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9880039, + "range": "± 27344", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 36077083, + "range": "± 206583", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 142621886, + "range": "± 131811", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3115, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2479, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2441, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1367, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65777, + "range": "± 51", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251222, + "range": "± 217", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1030834, + "range": "± 1463", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4874278, + "range": "± 3339", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27689618, + "range": "± 36744", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8168043356, + "range": "± 30233187", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "d1e349bbb529afbce4b1c665ede096893872380f", + "message": "Support machine calls.", + "timestamp": "2024-12-17T11:14:46Z", + "url": "https://github.com/powdr-labs/powdr/pull/2241/commits/d1e349bbb529afbce4b1c665ede096893872380f" + }, + "date": 1734437444488, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6948, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 621, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1081, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 30524, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 25100, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 25313, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17903, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 808045, + "range": "± 1008", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2771497, + "range": "± 3130", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9676490, + "range": "± 17942", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35505930, + "range": "± 78875", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140432144, + "range": "± 322072", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3115, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2457, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2442, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1374, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65574, + "range": "± 40", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 250599, + "range": "± 191", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1027187, + "range": "± 763", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4843405, + "range": "± 5155", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27623290, + "range": "± 56612", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8328333790, + "range": "± 48734051", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "1c581c395d83f9cf18d1a91c3df9866580e910c5", + "message": "pilopt: optimize until fixpoint", + "timestamp": "2024-12-17T11:14:46Z", + "url": "https://github.com/powdr-labs/powdr/pull/2225/commits/1c581c395d83f9cf18d1a91c3df9866580e910c5" + }, + "date": 1734439007686, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6956, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 592, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1093, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29286, + "range": "± 41", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 25154, + "range": "± 30", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24385, + "range": "± 27", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17327, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 808485, + "range": "± 982", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2762234, + "range": "± 4193", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9666394, + "range": "± 14611", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35274516, + "range": "± 105766", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139187356, + "range": "± 109737", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3138, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2518, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2451, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1362, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65623, + "range": "± 57", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252947, + "range": "± 267", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1032520, + "range": "± 1332", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4866381, + "range": "± 6052", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27563800, + "range": "± 26548", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8197606600, + "range": "± 37508561", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "95f8b2f84f1af8fa26c14b93b07fddea4cd9cc2b", + "message": "Block machine processor", + "timestamp": "2024-12-17T11:14:46Z", + "url": "https://github.com/powdr-labs/powdr/pull/2226/commits/95f8b2f84f1af8fa26c14b93b07fddea4cd9cc2b" + }, + "date": 1734441186451, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6895, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 593, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1071, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29504, + "range": "± 48", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24801, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24710, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17531, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 795971, + "range": "± 738", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2748373, + "range": "± 3801", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9627674, + "range": "± 18909", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35120144, + "range": "± 83433", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140149708, + "range": "± 451319", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3114, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2452, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2444, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1359, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66209, + "range": "± 46", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252263, + "range": "± 298", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1029228, + "range": "± 1892", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4862931, + "range": "± 4544", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27693930, + "range": "± 24963", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8286646319, + "range": "± 29297249", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "deba7da699c0c55acd16c7e41840f643b0b1ecb4", + "message": "[WIP] Call JIT", + "timestamp": "2024-12-17T11:14:46Z", + "url": "https://github.com/powdr-labs/powdr/pull/2242/commits/deba7da699c0c55acd16c7e41840f643b0b1ecb4" + }, + "date": 1734443058312, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6956, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 588, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1073, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29257, + "range": "± 35", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24313, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24300, + "range": "± 27", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17234, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 804034, + "range": "± 1349", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2759541, + "range": "± 2889", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9625129, + "range": "± 11349", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35189916, + "range": "± 41011", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139713223, + "range": "± 134123", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3161, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2469, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2478, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1374, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 67060, + "range": "± 53", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 255968, + "range": "± 407", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1044051, + "range": "± 1065", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4909810, + "range": "± 4627", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27738447, + "range": "± 30736", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "Georg Wiese", + "username": "georgwiese", + "email": "georgwiese@gmail.com" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "e2131f501ffe3a80be40c4df938889ef5ac57263", + "message": "Block machine processor (#2226)\n\nThis PR adds a basic block machine processor. Currently, we assume a\nrectangular block shape and just iterate over all rows and identities of\nthe block until no more progress is made. This is sufficient to generate\ncode for Poseidon.", + "timestamp": "2024-12-17T13:31:03Z", + "url": "https://github.com/powdr-labs/powdr/commit/e2131f501ffe3a80be40c4df938889ef5ac57263" + }, + "date": 1734443221815, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6923, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 599, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1062, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28808, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24151, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24129, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17038, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 799148, + "range": "± 705", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2751917, + "range": "± 3129", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9631499, + "range": "± 12449", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35279261, + "range": "± 56973", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139883303, + "range": "± 364061", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3142, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2467, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2455, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1371, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65311, + "range": "± 77", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 250638, + "range": "± 170", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1024176, + "range": "± 1008", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4862372, + "range": "± 3487", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27593128, + "range": "± 15074", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8130810304, + "range": "± 30902101", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "0c2ae615a30b81f63dcb312ba319978e4cd22eb9", + "message": "prevent instr fail from being optimized away", + "timestamp": "2024-12-17T13:37:11Z", + "url": "https://github.com/powdr-labs/powdr/pull/2243/commits/0c2ae615a30b81f63dcb312ba319978e4cd22eb9" + }, + "date": 1734443716091, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6883, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 583, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1135, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28912, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24194, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24180, + "range": "± 29", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17106, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 805092, + "range": "± 1023", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2755797, + "range": "± 2629", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9652377, + "range": "± 10312", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35191274, + "range": "± 41680", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139853075, + "range": "± 235322", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3154, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2495, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2459, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1357, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65443, + "range": "± 61", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 253498, + "range": "± 340", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1029829, + "range": "± 1140", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4867225, + "range": "± 4621", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27652397, + "range": "± 18682", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8195908740, + "range": "± 19186856", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "georgwiese@gmail.com", + "name": "Georg Wiese", + "username": "georgwiese" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": true, + "id": "e2131f501ffe3a80be40c4df938889ef5ac57263", + "message": "Block machine processor (#2226)\n\nThis PR adds a basic block machine processor. Currently, we assume a\nrectangular block shape and just iterate over all rows and identities of\nthe block until no more progress is made. This is sufficient to generate\ncode for Poseidon.", + "timestamp": "2024-12-17T13:31:03Z", + "tree_id": "e22d64917cef34a0dc722a4d21e59316a8ca3bf8", + "url": "https://github.com/powdr-labs/powdr/commit/e2131f501ffe3a80be40c4df938889ef5ac57263" + }, + "date": 1734445186106, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6946, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 579, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1073, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28929, + "range": "± 54", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24183, + "range": "± 41", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24143, + "range": "± 26", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17115, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 798467, + "range": "± 1677", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2746686, + "range": "± 6275", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9682452, + "range": "± 43678", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35667379, + "range": "± 245130", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140926815, + "range": "± 901472", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3113, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2457, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2440, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1376, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66085, + "range": "± 67", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 253423, + "range": "± 1590", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1032556, + "range": "± 2042", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4937625, + "range": "± 29743", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28136219, + "range": "± 179887", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8776289344, + "range": "± 34938910", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "9ce0eea4fa53c175ed71adb26adeb7ccd61828aa", + "message": "Introduce concept of assignment.", + "timestamp": "2024-12-17T14:03:36Z", + "url": "https://github.com/powdr-labs/powdr/pull/2244/commits/9ce0eea4fa53c175ed71adb26adeb7ccd61828aa" + }, + "date": 1734445523803, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7161, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 599, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1103, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29462, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24609, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24572, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17322, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 797827, + "range": "± 1563", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2752973, + "range": "± 2782", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9707006, + "range": "± 24474", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35275171, + "range": "± 108297", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139950602, + "range": "± 713567", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3272, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2619, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2513, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1386, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65248, + "range": "± 124", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 250345, + "range": "± 270", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1022240, + "range": "± 729", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4884514, + "range": "± 20078", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27889820, + "range": "± 107677", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8655121900, + "range": "± 45517457", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "Leandro Pacheco", + "username": "pacheco", + "email": "contact@leandropacheco.com" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "38d26f4494d419f20c508fe6a8feafb31a8b3aa5", + "message": "prevent instr fail from being optimized away (#2243)", + "timestamp": "2024-12-17T14:12:04Z", + "url": "https://github.com/powdr-labs/powdr/commit/38d26f4494d419f20c508fe6a8feafb31a8b3aa5" + }, + "date": 1734445696181, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6876, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 632, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1075, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28814, + "range": "± 45", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24373, + "range": "± 27", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24189, + "range": "± 33", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17084, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 794026, + "range": "± 1129", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2722163, + "range": "± 3666", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9580810, + "range": "± 32937", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35204811, + "range": "± 276724", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140121587, + "range": "± 880306", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3118, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2457, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2443, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1370, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65459, + "range": "± 41", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252719, + "range": "± 212", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1032378, + "range": "± 971", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4883863, + "range": "± 8079", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27926757, + "range": "± 278663", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8572443847, + "range": "± 72923775", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "85689817f5457ad625d1e3c184e7b61a1cb04b07", + "message": "pilopt: optimize until fixpoint", + "timestamp": "2024-12-17T14:03:36Z", + "url": "https://github.com/powdr-labs/powdr/pull/2225/commits/85689817f5457ad625d1e3c184e7b61a1cb04b07" + }, + "date": 1734446135120, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7073, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 589, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1099, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 30318, + "range": "± 52", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 25341, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 25290, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17897, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 804206, + "range": "± 596", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2779979, + "range": "± 4773", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9704144, + "range": "± 18468", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35518788, + "range": "± 88164", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140508165, + "range": "± 251957", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3128, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2459, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2449, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1371, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66060, + "range": "± 45", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252030, + "range": "± 218", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1034048, + "range": "± 843", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4879012, + "range": "± 4417", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27669842, + "range": "± 61507", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8403911548, + "range": "± 35876351", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "contact@leandropacheco.com", + "name": "Leandro Pacheco", + "username": "pacheco" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": true, + "id": "38d26f4494d419f20c508fe6a8feafb31a8b3aa5", + "message": "prevent instr fail from being optimized away (#2243)", + "timestamp": "2024-12-17T14:12:04Z", + "tree_id": "19d11965756b9fb0ca16a6ea22bc807d906ba93b", + "url": "https://github.com/powdr-labs/powdr/commit/38d26f4494d419f20c508fe6a8feafb31a8b3aa5" + }, + "date": 1734447718866, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6976, + "range": "± 71", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 590, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1072, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29065, + "range": "± 48", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24344, + "range": "± 95", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24266, + "range": "± 144", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17172, + "range": "± 102", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 798497, + "range": "± 3436", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2755329, + "range": "± 3333", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9663896, + "range": "± 27606", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35257468, + "range": "± 88184", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141085280, + "range": "± 1011892", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3142, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2460, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2464, + "range": "± 45", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1377, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66535, + "range": "± 378", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252740, + "range": "± 546", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1037121, + "range": "± 6352", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4893276, + "range": "± 8808", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27693113, + "range": "± 91704", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8274155467, + "range": "± 30038390", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "8c1c85265a09b158ffafae1e5e9b6d444c5ca40b", + "message": "[WIP] Call JIT", + "timestamp": "2024-12-17T14:46:30Z", + "url": "https://github.com/powdr-labs/powdr/pull/2242/commits/8c1c85265a09b158ffafae1e5e9b6d444c5ca40b" + }, + "date": 1734452327313, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 8127, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 753, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1325, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 36723, + "range": "± 55", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 30009, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 30118, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 20874, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 908829, + "range": "± 1335", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 3135857, + "range": "± 9224", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 10941471, + "range": "± 32618", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 39688993, + "range": "± 59883", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 154167569, + "range": "± 1363829", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3465, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2686, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2643, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1382, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 75268, + "range": "± 535", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 283826, + "range": "± 670", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1130792, + "range": "± 2535", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 5204424, + "range": "± 5321", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28765827, + "range": "± 30129", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8435334055, + "range": "± 39987121", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "aedcc63a587cfada7636e68f16240743a2c47a39", + "message": "Support machine calls.", + "timestamp": "2024-12-17T14:46:30Z", + "url": "https://github.com/powdr-labs/powdr/pull/2241/commits/aedcc63a587cfada7636e68f16240743a2c47a39" + }, + "date": 1734452445723, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6837, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 575, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1076, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29236, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24576, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24516, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17484, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 794545, + "range": "± 1424", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2730833, + "range": "± 5217", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9553333, + "range": "± 26897", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34949370, + "range": "± 200456", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139077744, + "range": "± 802253", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3151, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2471, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2465, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1358, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65055, + "range": "± 36", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251776, + "range": "± 285", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1023531, + "range": "± 1162", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4885683, + "range": "± 39993", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27739221, + "range": "± 199701", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8396782665, + "range": "± 59138274", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "bc8439b1a04b6e9ea7fab64fe0d4fccd2c58cb74", + "message": "[WIP] Call JIT", + "timestamp": "2024-12-17T14:46:30Z", + "url": "https://github.com/powdr-labs/powdr/pull/2242/commits/bc8439b1a04b6e9ea7fab64fe0d4fccd2c58cb74" + }, + "date": 1734454619679, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6870, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 594, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1082, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29600, + "range": "± 35", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24738, + "range": "± 38", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24738, + "range": "± 27", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17442, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 796586, + "range": "± 1558", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2744983, + "range": "± 4075", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9649020, + "range": "± 44590", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35307563, + "range": "± 122307", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140042069, + "range": "± 450775", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3143, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2470, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2470, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1380, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65445, + "range": "± 43", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252538, + "range": "± 206", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1035876, + "range": "± 861", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4905630, + "range": "± 25427", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28134384, + "range": "± 91718", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8856902602, + "range": "± 52110595", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "f57a36731120e93e90b8565734eb080a60d7f6f3", + "message": "Profile jit compilation separately.", + "timestamp": "2024-12-17T14:46:30Z", + "url": "https://github.com/powdr-labs/powdr/pull/2248/commits/f57a36731120e93e90b8565734eb080a60d7f6f3" + }, + "date": 1734454807541, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6951, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 597, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1094, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29245, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24435, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24401, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17291, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 800761, + "range": "± 1045", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2762733, + "range": "± 2843", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9666711, + "range": "± 8870", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35285903, + "range": "± 35949", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140175711, + "range": "± 101084", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3146, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2481, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2461, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1372, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65728, + "range": "± 45", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252328, + "range": "± 286", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1027042, + "range": "± 1324", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4863283, + "range": "± 3734", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27654316, + "range": "± 24814", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8294160367, + "range": "± 39904086", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "5131ad616561bc7954c390fe8ee38ef7a905b15d", + "message": "Use truncate instead of pop.", + "timestamp": "2024-12-17T14:46:30Z", + "url": "https://github.com/powdr-labs/powdr/pull/2247/commits/5131ad616561bc7954c390fe8ee38ef7a905b15d" + }, + "date": 1734454808624, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6945, + "range": "± 86", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 617, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1086, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29092, + "range": "± 30", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24305, + "range": "± 29", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24411, + "range": "± 31", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17243, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 794310, + "range": "± 965", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2744828, + "range": "± 3309", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9561099, + "range": "± 23083", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35073671, + "range": "± 113112", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140759277, + "range": "± 731134", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3247, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2454, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2463, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1379, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65934, + "range": "± 51", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 253002, + "range": "± 218", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1033452, + "range": "± 1298", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4895830, + "range": "± 30724", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27888741, + "range": "± 114923", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8733733287, + "range": "± 61812624", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "b917170c7d5e49bb31ea0bce664c9b94bc893c17", + "message": "[WIP] Call JIT", + "timestamp": "2024-12-17T14:46:30Z", + "url": "https://github.com/powdr-labs/powdr/pull/2242/commits/b917170c7d5e49bb31ea0bce664c9b94bc893c17" + }, + "date": 1734456827372, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6853, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 583, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1066, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28942, + "range": "± 62", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24070, + "range": "± 608", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24011, + "range": "± 31", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17049, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 777638, + "range": "± 1670", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2691189, + "range": "± 4450", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9435261, + "range": "± 24594", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34619484, + "range": "± 170334", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 137563938, + "range": "± 589690", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3159, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2461, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2453, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1360, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65682, + "range": "± 224", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252035, + "range": "± 223", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1026365, + "range": "± 1066", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4848257, + "range": "± 237917", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27638179, + "range": "± 98695", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8514830289, + "range": "± 48358802", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "40478ecd072719100ae5449e69f08ef4729b8d10", + "message": "Fix bit operations.", + "timestamp": "2024-12-17T14:46:30Z", + "url": "https://github.com/powdr-labs/powdr/pull/2249/commits/40478ecd072719100ae5449e69f08ef4729b8d10" + }, + "date": 1734457018224, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6904, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 603, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1106, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29374, + "range": "± 65", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24576, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24617, + "range": "± 47", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17250, + "range": "± 52", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 800156, + "range": "± 1114", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2761318, + "range": "± 2729", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9764788, + "range": "± 14600", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 36041149, + "range": "± 70352", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140771946, + "range": "± 1329178", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3129, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2474, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2493, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1371, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65735, + "range": "± 42", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 253230, + "range": "± 215", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1029735, + "range": "± 2767", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4875208, + "range": "± 3645", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27638418, + "range": "± 31454", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8375709973, + "range": "± 76160927", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "31205a4b2e15a40ef843ff15a19035b63bbd5fd3", + "message": "default getenv", + "timestamp": "2024-12-17T14:46:30Z", + "url": "https://github.com/powdr-labs/powdr/pull/2250/commits/31205a4b2e15a40ef843ff15a19035b63bbd5fd3" + }, + "date": 1734457363875, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6993, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 592, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1089, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29424, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24607, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24575, + "range": "± 78", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17406, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 800585, + "range": "± 994", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2762167, + "range": "± 3185", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9675553, + "range": "± 22175", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35450711, + "range": "± 35447", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139966341, + "range": "± 236368", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3226, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2539, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2470, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1378, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65406, + "range": "± 36", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 249994, + "range": "± 235", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1024028, + "range": "± 760", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4838629, + "range": "± 2916", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27650171, + "range": "± 57391", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8475479272, + "range": "± 21893768", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "33e55fa8c7b56db1881d1e36149d85a0c64795a7", + "message": "Reserved space for prover data in memory layout", + "timestamp": "2024-12-17T14:46:30Z", + "url": "https://github.com/powdr-labs/powdr/pull/2251/commits/33e55fa8c7b56db1881d1e36149d85a0c64795a7" + }, + "date": 1734478536152, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6780, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 586, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1037, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29314, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24467, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24349, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17234, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 786015, + "range": "± 963", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2720556, + "range": "± 4719", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9495485, + "range": "± 21605", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35083856, + "range": "± 245725", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139416483, + "range": "± 681007", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3133, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2468, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2451, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1369, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66328, + "range": "± 39", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251778, + "range": "± 215", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1025425, + "range": "± 888", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4910813, + "range": "± 17443", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28153117, + "range": "± 220436", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8618192669, + "range": "± 87810171", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "34bcc61fc432fc9f7c197760d440c2fa9a6f0e63", + "message": "default getenv", + "timestamp": "2024-12-17T14:46:30Z", + "url": "https://github.com/powdr-labs/powdr/pull/2250/commits/34bcc61fc432fc9f7c197760d440c2fa9a6f0e63" + }, + "date": 1734510103488, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6933, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 585, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1059, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 31032, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 26132, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 26032, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 18575, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 832076, + "range": "± 1084", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2810246, + "range": "± 3101", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9828203, + "range": "± 10354", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35940631, + "range": "± 31966", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141993104, + "range": "± 148904", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3119, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2453, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2447, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1358, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65788, + "range": "± 52", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252885, + "range": "± 205", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1029245, + "range": "± 1390", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4887600, + "range": "± 3647", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27689263, + "range": "± 25549", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8224045124, + "range": "± 40603320", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "95007d76533036f122485b9cfe2f61fb64134399", + "message": "Implement Neg for FieldElement.", + "timestamp": "2024-12-17T14:46:30Z", + "url": "https://github.com/powdr-labs/powdr/pull/2252/commits/95007d76533036f122485b9cfe2f61fb64134399" + }, + "date": 1734513212405, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6927, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 600, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1099, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 30027, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 25078, + "range": "± 40", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 25040, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17670, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 802778, + "range": "± 1316", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2784863, + "range": "± 9316", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9765549, + "range": "± 27586", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35499865, + "range": "± 58050", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141064639, + "range": "± 621484", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3123, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2454, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2449, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1359, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65839, + "range": "± 32", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251665, + "range": "± 205", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1031089, + "range": "± 859", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4883636, + "range": "± 5596", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27660512, + "range": "± 78416", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8353712887, + "range": "± 22349615", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "1a129e4ad977523815501679a57ce6ac33106ace", + "message": "Specialized code for goldilocks.", + "timestamp": "2024-12-17T14:46:30Z", + "url": "https://github.com/powdr-labs/powdr/pull/2253/commits/1a129e4ad977523815501679a57ce6ac33106ace" + }, + "date": 1734519205625, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6781, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 578, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1067, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28794, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24059, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24013, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 16981, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 790358, + "range": "± 1028", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2726162, + "range": "± 2602", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9542976, + "range": "± 10477", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35046803, + "range": "± 47757", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138896630, + "range": "± 149607", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3134, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2459, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2444, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1362, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66421, + "range": "± 41", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 254009, + "range": "± 265", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1036477, + "range": "± 1695", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4902245, + "range": "± 2999", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27746932, + "range": "± 20253", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8327903661, + "range": "± 73285110", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "1009078b596e3009f2894bebc793132cfe956a00", + "message": "Specialized code for goldilocks.", + "timestamp": "2024-12-17T14:46:30Z", + "url": "https://github.com/powdr-labs/powdr/pull/2253/commits/1009078b596e3009f2894bebc793132cfe956a00" + }, + "date": 1734520337059, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6885, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 572, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1080, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28970, + "range": "± 27", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24200, + "range": "± 26", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24118, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17089, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 798747, + "range": "± 2248", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2756446, + "range": "± 3527", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9649371, + "range": "± 28487", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35547422, + "range": "± 247216", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140277091, + "range": "± 420404", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3181, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2500, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2466, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1360, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66658, + "range": "± 40", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 254552, + "range": "± 236", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1033091, + "range": "± 1033", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4865960, + "range": "± 7099", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28106322, + "range": "± 167175", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8436447493, + "range": "± 113498849", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "d93ef1cb9e3765ad0cbf56f409aece411b2df161", + "message": "Implement Neg for FieldElement.", + "timestamp": "2024-12-17T14:46:30Z", + "url": "https://github.com/powdr-labs/powdr/pull/2252/commits/d93ef1cb9e3765ad0cbf56f409aece411b2df161" + }, + "date": 1734524132609, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6874, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 581, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1061, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29210, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24339, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24351, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17225, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 814117, + "range": "± 1139", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2810311, + "range": "± 3439", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9809821, + "range": "± 14093", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35658022, + "range": "± 50450", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141157893, + "range": "± 110256", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3127, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2461, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2445, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1372, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65583, + "range": "± 124", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251453, + "range": "± 174", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1029738, + "range": "± 1081", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4869854, + "range": "± 4518", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27647297, + "range": "± 22921", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8318964371, + "range": "± 48167881", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "taikoon", + "username": "taikoonwang", + "email": "taikoonwang@proton.me" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "1a9c99d2320d02d72a61f1c31b72d1b55fa08a14", + "message": "chore: remove duplicate words (#2227)", + "timestamp": "2024-12-18T12:14:36Z", + "url": "https://github.com/powdr-labs/powdr/commit/1a9c99d2320d02d72a61f1c31b72d1b55fa08a14" + }, + "date": 1734525036899, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7036, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 582, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1091, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29547, + "range": "± 30", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24658, + "range": "± 53", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24618, + "range": "± 27", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17361, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 810950, + "range": "± 1249", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2791620, + "range": "± 3652", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9740345, + "range": "± 10067", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35779823, + "range": "± 105872", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141465448, + "range": "± 225770", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3128, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2458, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2455, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1361, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66115, + "range": "± 109", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252545, + "range": "± 332", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1032305, + "range": "± 1286", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4880330, + "range": "± 3168", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27619523, + "range": "± 18458", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8211468401, + "range": "± 34429900", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "chriseth", + "username": "chriseth", + "email": "chris@ethereum.org" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "a3d9f38682d428da59ce0b970c4e33499f0653bf", + "message": "Implement Neg for FieldElement. (#2252)", + "timestamp": "2024-12-18T12:44:18Z", + "url": "https://github.com/powdr-labs/powdr/commit/a3d9f38682d428da59ce0b970c4e33499f0653bf" + }, + "date": 1734526849214, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6765, + "range": "± 50", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 577, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1071, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28817, + "range": "± 42", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24134, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24045, + "range": "± 37", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17060, + "range": "± 36", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 796135, + "range": "± 3366", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2751168, + "range": "± 6599", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9653320, + "range": "± 35926", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35719832, + "range": "± 197565", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141573031, + "range": "± 719724", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3436, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2652, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2604, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1364, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66577, + "range": "± 174", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 253982, + "range": "± 296", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1035174, + "range": "± 3179", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4881534, + "range": "± 5740", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28182301, + "range": "± 154989", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8785711085, + "range": "± 47682831", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "leo@powdrlabs.com", + "name": "Leo", + "username": "leonardoalt" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": false, + "id": "c8dcd07b5977c2116489d14721beeba445f92d50", + "message": "default getenv (#2250)", + "timestamp": "2024-12-18T12:24:53Z", + "tree_id": "64e3281c5072c016ff5571d9af55bf54aea322cc", + "url": "https://github.com/powdr-labs/powdr/commit/c8dcd07b5977c2116489d14721beeba445f92d50" + }, + "date": 1734527864306, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6853, + "range": "± 45", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 602, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1063, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28942, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24232, + "range": "± 27", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24178, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17144, + "range": "± 27", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 791068, + "range": "± 1400", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2721722, + "range": "± 3339", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9526840, + "range": "± 12678", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34964874, + "range": "± 51894", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138824446, + "range": "± 415672", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3130, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2457, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2460, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1361, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 67874, + "range": "± 63", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 260544, + "range": "± 259", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1055897, + "range": "± 1474", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4938631, + "range": "± 7751", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27821411, + "range": "± 46305", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8204662260, + "range": "± 23259416", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "chriseth", + "username": "chriseth", + "email": "chris@ethereum.org" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "388979952819bccbbed4a82bc7b928e295a04222", + "message": "Profile jit compilation separately. (#2248)", + "timestamp": "2024-12-18T13:06:27Z", + "url": "https://github.com/powdr-labs/powdr/commit/388979952819bccbbed4a82bc7b928e295a04222" + }, + "date": 1734528156111, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7003, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 605, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1071, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29644, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24966, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24853, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17479, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 800477, + "range": "± 1588", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2747418, + "range": "± 3689", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9598183, + "range": "± 14212", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35174124, + "range": "± 46876", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139712219, + "range": "± 399605", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3206, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2539, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2503, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1380, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66088, + "range": "± 32", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252540, + "range": "± 178", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1033795, + "range": "± 1338", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4895852, + "range": "± 3558", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27742945, + "range": "± 33190", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8222083084, + "range": "± 49658347", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "chriseth", + "username": "chriseth", + "email": "chris@ethereum.org" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "bdfa4e1102c4d5d9a360f24646fd1f9af31b3d4b", + "message": "Use truncate instead of pop. (#2247)", + "timestamp": "2024-12-18T13:07:28Z", + "url": "https://github.com/powdr-labs/powdr/commit/bdfa4e1102c4d5d9a360f24646fd1f9af31b3d4b" + }, + "date": 1734528212627, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6916, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 577, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1065, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29129, + "range": "± 27", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24326, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24292, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17279, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 794940, + "range": "± 1099", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2750416, + "range": "± 3694", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9607910, + "range": "± 20312", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35111545, + "range": "± 111713", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139583336, + "range": "± 1372217", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3129, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2452, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2458, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1377, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65774, + "range": "± 40", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252592, + "range": "± 162", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1028901, + "range": "± 1368", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4881194, + "range": "± 6347", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27861561, + "range": "± 167324", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8408593770, + "range": "± 96607724", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "465f698b6ab10eae3b12528cb01b5647d19644dd", + "message": "Specialized code for goldilocks.", + "timestamp": "2024-12-18T13:11:12Z", + "url": "https://github.com/powdr-labs/powdr/pull/2253/commits/465f698b6ab10eae3b12528cb01b5647d19644dd" + }, + "date": 1734528585540, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6927, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 581, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1064, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29399, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24484, + "range": "± 30", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24466, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17344, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 796499, + "range": "± 1095", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2748766, + "range": "± 3359", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9598616, + "range": "± 18854", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35186541, + "range": "± 138533", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139737456, + "range": "± 784874", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3136, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2461, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2460, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1381, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66081, + "range": "± 36", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 254267, + "range": "± 252", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1032931, + "range": "± 1004", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4883034, + "range": "± 20324", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27796167, + "range": "± 112778", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8403545459, + "range": "± 99172625", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "4bed6536888c2cb396da04c36b07c0b8c1995b2b", + "message": "Fix bit operations.", + "timestamp": "2024-12-18T13:11:12Z", + "url": "https://github.com/powdr-labs/powdr/pull/2249/commits/4bed6536888c2cb396da04c36b07c0b8c1995b2b" + }, + "date": 1734529289227, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6808, + "range": "± 51", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 578, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1080, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29031, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24313, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24287, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17152, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 793053, + "range": "± 929", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2734863, + "range": "± 1918", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9585114, + "range": "± 15458", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35186568, + "range": "± 37389", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139430069, + "range": "± 208206", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3168, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2451, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2445, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1361, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66253, + "range": "± 50", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 254722, + "range": "± 514", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1044463, + "range": "± 852", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4925097, + "range": "± 4475", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27776058, + "range": "± 17805", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8241636098, + "range": "± 26012073", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "chris@ethereum.org", + "name": "chriseth", + "username": "chriseth" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": false, + "id": "a3d9f38682d428da59ce0b970c4e33499f0653bf", + "message": "Implement Neg for FieldElement. (#2252)", + "timestamp": "2024-12-18T12:44:18Z", + "tree_id": "02791f682bd32104c90f0f106d0620df3b6d331f", + "url": "https://github.com/powdr-labs/powdr/commit/a3d9f38682d428da59ce0b970c4e33499f0653bf" + }, + "date": 1734529328960, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6899, + "range": "± 41", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 579, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1082, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28830, + "range": "± 42", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24203, + "range": "± 51", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24034, + "range": "± 27", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17063, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 786552, + "range": "± 1071", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2709488, + "range": "± 6699", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9469349, + "range": "± 14421", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34726801, + "range": "± 33207", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138425651, + "range": "± 192326", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3130, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2462, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2462, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1377, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65393, + "range": "± 43", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251141, + "range": "± 264", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1027734, + "range": "± 1332", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4877359, + "range": "± 11192", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27922981, + "range": "± 789712", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8234134992, + "range": "± 129982005", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "a529b138dcdee32f5b9100b1676428b07c4919c3", + "message": "Rename `_start` to `_powdr_start`", + "timestamp": "2024-12-18T13:11:12Z", + "url": "https://github.com/powdr-labs/powdr/pull/2254/commits/a529b138dcdee32f5b9100b1676428b07c4919c3" + }, + "date": 1734529653661, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6931, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 577, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1049, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28939, + "range": "± 43", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24226, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24213, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17127, + "range": "± 36", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 800508, + "range": "± 1250", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2754309, + "range": "± 3238", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9666045, + "range": "± 32546", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35771747, + "range": "± 237325", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 142525931, + "range": "± 948970", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3131, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2458, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2448, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1375, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65147, + "range": "± 34", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 249939, + "range": "± 121", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1028186, + "range": "± 1148", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4891582, + "range": "± 11090", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28085177, + "range": "± 167356", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8893478405, + "range": "± 75043314", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "chris@ethereum.org", + "name": "chriseth", + "username": "chriseth" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": true, + "id": "bdfa4e1102c4d5d9a360f24646fd1f9af31b3d4b", + "message": "Use truncate instead of pop. (#2247)", + "timestamp": "2024-12-18T13:07:28Z", + "tree_id": "bb35741ddb232810fe3a571ef5aaa7df63ed262a", + "url": "https://github.com/powdr-labs/powdr/commit/bdfa4e1102c4d5d9a360f24646fd1f9af31b3d4b" + }, + "date": 1734530754679, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6868, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 583, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1059, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29352, + "range": "± 34", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24615, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24529, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17366, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 788618, + "range": "± 610", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2713189, + "range": "± 2174", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9486543, + "range": "± 11822", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34826738, + "range": "± 44569", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138477587, + "range": "± 150527", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3118, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2458, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2445, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1373, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65411, + "range": "± 134", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251695, + "range": "± 229", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1028802, + "range": "± 1420", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4880407, + "range": "± 4122", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27658723, + "range": "± 58995", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8159567346, + "range": "± 32515244", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "chriseth", + "username": "chriseth", + "email": "chris@ethereum.org" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "d98b7ebb58f0f2b88f3f9e68d562b63d57cda185", + "message": "Fix bit operations. (#2249)\n\nThis fixes a bug in witjitgen where the bit operations used for masking\nin bit-decomposition would use field elements as types for the masks.\nThe problem is that we sometimes mask using masks outside the field and\nthe proper type for masks is FieldElement::Integer.", + "timestamp": "2024-12-18T13:56:29Z", + "url": "https://github.com/powdr-labs/powdr/commit/d98b7ebb58f0f2b88f3f9e68d562b63d57cda185" + }, + "date": 1734531214235, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6803, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 582, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1082, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28972, + "range": "± 40", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24197, + "range": "± 77", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24257, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17000, + "range": "± 37", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 801936, + "range": "± 1343", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2769100, + "range": "± 4441", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9671697, + "range": "± 30093", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35493772, + "range": "± 129773", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140754293, + "range": "± 545415", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3142, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2535, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2455, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1363, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65916, + "range": "± 41", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252215, + "range": "± 163", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1031757, + "range": "± 1424", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4922906, + "range": "± 14476", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27741677, + "range": "± 77027", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8592284832, + "range": "± 43980460", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "Thibaut Schaeffer", + "username": "Schaeff", + "email": "schaeffer.thibaut@gmail.com" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "95c96bb6acbc2561be00b21f186c301431ac57a7", + "message": "Rename `_start` to `_powdr_start` (#2254)\n\nShould fix #2220 \ncc @gballet", + "timestamp": "2024-12-18T14:21:00Z", + "url": "https://github.com/powdr-labs/powdr/commit/95c96bb6acbc2561be00b21f186c301431ac57a7" + }, + "date": 1734532647141, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 8006, + "range": "± 117", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 587, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1145, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 32857, + "range": "± 693", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 26803, + "range": "± 413", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 26489, + "range": "± 350", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 18660, + "range": "± 297", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 852113, + "range": "± 11501", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2960161, + "range": "± 46716", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 10178943, + "range": "± 153154", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 37798830, + "range": "± 442351", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 148337247, + "range": "± 2775788", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3312, + "range": "± 54", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2690, + "range": "± 69", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2583, + "range": "± 49", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1424, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 67287, + "range": "± 1262", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 264100, + "range": "± 4574", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1089465, + "range": "± 25232", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 5043163, + "range": "± 83948", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28912243, + "range": "± 482587", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8391000701, + "range": "± 72237963", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "3e2268f339f8e7ec0b0fe4e3e20c5fac05561eed", + "message": "Reserved space for prover data in memory layout", + "timestamp": "2024-12-18T13:34:13Z", + "url": "https://github.com/powdr-labs/powdr/pull/2251/commits/3e2268f339f8e7ec0b0fe4e3e20c5fac05561eed" + }, + "date": 1734532800482, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6953, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 594, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1052, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29000, + "range": "± 187", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24139, + "range": "± 81", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24108, + "range": "± 376", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17016, + "range": "± 97", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 779459, + "range": "± 6904", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2677536, + "range": "± 18373", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9359318, + "range": "± 32287", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34387909, + "range": "± 574922", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 136416234, + "range": "± 531808", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3174, + "range": "± 48", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2467, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2455, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1362, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65269, + "range": "± 256", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 250456, + "range": "± 1164", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1030746, + "range": "± 6538", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4885279, + "range": "± 26301", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27826012, + "range": "± 612828", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8247584614, + "range": "± 54781119", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "chris@ethereum.org", + "name": "chriseth", + "username": "chriseth" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": false, + "id": "d98b7ebb58f0f2b88f3f9e68d562b63d57cda185", + "message": "Fix bit operations. (#2249)\n\nThis fixes a bug in witjitgen where the bit operations used for masking\nin bit-decomposition would use field elements as types for the masks.\nThe problem is that we sometimes mask using masks outside the field and\nthe proper type for masks is FieldElement::Integer.", + "timestamp": "2024-12-18T13:56:29Z", + "tree_id": "65110b3cb1f0e3999943c446c6cea195a43315a2", + "url": "https://github.com/powdr-labs/powdr/commit/d98b7ebb58f0f2b88f3f9e68d562b63d57cda185" + }, + "date": 1734533007757, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7035, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 653, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1142, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29495, + "range": "± 72", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24763, + "range": "± 35", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24616, + "range": "± 29", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17418, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 798293, + "range": "± 1439", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2755918, + "range": "± 3706", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9638297, + "range": "± 22508", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35510744, + "range": "± 261209", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141195594, + "range": "± 539587", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3183, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2467, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2450, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1372, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65477, + "range": "± 54", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251676, + "range": "± 186", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1026676, + "range": "± 1565", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4889638, + "range": "± 13237", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28013427, + "range": "± 121043", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8566008584, + "range": "± 90470830", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "schaeffer.thibaut@gmail.com", + "name": "Thibaut Schaeffer", + "username": "Schaeff" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": true, + "id": "95c96bb6acbc2561be00b21f186c301431ac57a7", + "message": "Rename `_start` to `_powdr_start` (#2254)\n\nShould fix #2220 \ncc @gballet", + "timestamp": "2024-12-18T14:21:00Z", + "tree_id": "d61d01e11ca03de1b8a6bbf29d9e74c99a670df8", + "url": "https://github.com/powdr-labs/powdr/commit/95c96bb6acbc2561be00b21f186c301431ac57a7" + }, + "date": 1734534859143, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6933, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 592, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1088, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29307, + "range": "± 38", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24620, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24431, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17443, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 815931, + "range": "± 860", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2821780, + "range": "± 3175", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9847489, + "range": "± 15439", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35944762, + "range": "± 97546", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 142285471, + "range": "± 288263", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3123, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2451, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2465, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1377, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66365, + "range": "± 105", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 259080, + "range": "± 209", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1040192, + "range": "± 1202", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4884776, + "range": "± 5041", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27765394, + "range": "± 20076", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8137614151, + "range": "± 30564144", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "7dfb0094855e46d2334d8fbb6f8fc3813854b518", + "message": "Specialized code for goldilocks.", + "timestamp": "2024-12-18T14:51:47Z", + "url": "https://github.com/powdr-labs/powdr/pull/2253/commits/7dfb0094855e46d2334d8fbb6f8fc3813854b518" + }, + "date": 1734536400115, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6854, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 589, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1077, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29749, + "range": "± 39", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24839, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24515, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17388, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 810550, + "range": "± 1282", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2789963, + "range": "± 4767", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9807934, + "range": "± 53833", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 36039866, + "range": "± 268622", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 144075325, + "range": "± 901053", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3310, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2451, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2447, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1372, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65393, + "range": "± 31", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252961, + "range": "± 131", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1031606, + "range": "± 1225", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4900156, + "range": "± 28406", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28451691, + "range": "± 275336", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8973617782, + "range": "± 79201613", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "b33f385c544c1b7482b60ef8e69b5eae04c504cd", + "message": "can process", + "timestamp": "2024-12-18T14:51:47Z", + "url": "https://github.com/powdr-labs/powdr/pull/2255/commits/b33f385c544c1b7482b60ef8e69b5eae04c504cd" + }, + "date": 1734536594009, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6798, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 583, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1058, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28919, + "range": "± 40", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24142, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24102, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17092, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 790181, + "range": "± 917", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2720308, + "range": "± 3075", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9560911, + "range": "± 29080", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34966279, + "range": "± 41789", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139460694, + "range": "± 173129", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3127, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2455, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2448, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1360, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65391, + "range": "± 46", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252122, + "range": "± 229", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1028606, + "range": "± 1344", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4865232, + "range": "± 3291", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27609021, + "range": "± 24705", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8323456940, + "range": "± 41189029", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "d808875338702d8562e0aa45d314ddebf38f9e6f", + "message": "can process", + "timestamp": "2024-12-18T14:51:47Z", + "url": "https://github.com/powdr-labs/powdr/pull/2255/commits/d808875338702d8562e0aa45d314ddebf38f9e6f" + }, + "date": 1734538243592, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6888, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 623, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1064, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29554, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24431, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24383, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17322, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 794552, + "range": "± 1523", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2739448, + "range": "± 5403", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9680156, + "range": "± 33161", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35294776, + "range": "± 148813", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139996567, + "range": "± 466232", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3189, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2468, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2455, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1358, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65727, + "range": "± 31", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 250651, + "range": "± 174", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1020634, + "range": "± 1018", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4858392, + "range": "± 7002", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27917301, + "range": "± 146561", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8704595226, + "range": "± 59380843", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "2a5d64c761f25b3bd22040c7caeed1f1f7131d3d", + "message": "Introduce concept of assignment (2)", + "timestamp": "2024-12-18T14:51:47Z", + "url": "https://github.com/powdr-labs/powdr/pull/2257/commits/2a5d64c761f25b3bd22040c7caeed1f1f7131d3d" + }, + "date": 1734538345614, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6869, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 575, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1068, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28929, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24174, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24139, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17068, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 802645, + "range": "± 862", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2770416, + "range": "± 3653", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9715440, + "range": "± 12290", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35691716, + "range": "± 53811", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140870138, + "range": "± 246293", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3131, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2452, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2449, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1359, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65818, + "range": "± 49", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251898, + "range": "± 183", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1029801, + "range": "± 949", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4878339, + "range": "± 5110", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27657253, + "range": "± 64896", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8238825384, + "range": "± 32893859", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "70e59d95486951d8546eb0161c47dbbdd07b81ab", + "message": "[WIP] Call JIT", + "timestamp": "2024-12-18T14:51:47Z", + "url": "https://github.com/powdr-labs/powdr/pull/2242/commits/70e59d95486951d8546eb0161c47dbbdd07b81ab" + }, + "date": 1734540252060, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6834, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 582, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1072, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29033, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24187, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24090, + "range": "± 29", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17015, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 788702, + "range": "± 2151", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2705105, + "range": "± 6405", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9463047, + "range": "± 43273", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35151226, + "range": "± 399426", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138658337, + "range": "± 1347195", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3121, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2529, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2642, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1371, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65525, + "range": "± 78", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251450, + "range": "± 208", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1027808, + "range": "± 1757", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4924327, + "range": "± 60563", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28025052, + "range": "± 346031", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8872585640, + "range": "± 177109544", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "29da03f45078d509cf08a8b1897cfe4c08afa24f", + "message": "Add latch to phantom bus interaction", + "timestamp": "2024-12-18T14:51:47Z", + "url": "https://github.com/powdr-labs/powdr/pull/2258/commits/29da03f45078d509cf08a8b1897cfe4c08afa24f" + }, + "date": 1734541178993, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6808, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 600, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1080, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28809, + "range": "± 29", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24010, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24017, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17164, + "range": "± 28", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 792901, + "range": "± 1229", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2728719, + "range": "± 5217", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9581334, + "range": "± 23012", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35014773, + "range": "± 38071", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138974231, + "range": "± 205084", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3124, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2453, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2494, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1364, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65423, + "range": "± 69", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252167, + "range": "± 395", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1028030, + "range": "± 936", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4885767, + "range": "± 3578", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27685649, + "range": "± 123989", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 9020587101, + "range": "± 206448739", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "8dd0a00c1fd15c5748a759ed08385f9557feff02", + "message": "[WIP] Call JIT", + "timestamp": "2024-12-18T14:51:47Z", + "url": "https://github.com/powdr-labs/powdr/pull/2242/commits/8dd0a00c1fd15c5748a759ed08385f9557feff02" + }, + "date": 1734543909028, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6942, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 580, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1082, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29611, + "range": "± 49", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24573, + "range": "± 52", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24541, + "range": "± 62", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17415, + "range": "± 26", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 794976, + "range": "± 1518", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2757076, + "range": "± 6412", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9606470, + "range": "± 16600", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35093514, + "range": "± 35170", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140000480, + "range": "± 534714", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3598, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2838, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2838, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1677, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 100370, + "range": "± 166", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 374711, + "range": "± 329", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1444088, + "range": "± 2030", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6152384, + "range": "± 10497", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30581747, + "range": "± 95181", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8473185537, + "range": "± 44423377", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "918e075e356a769610e6e88549f508bba46bc1a8", + "message": "Introduce concept of assignment.", + "timestamp": "2024-12-18T14:51:47Z", + "url": "https://github.com/powdr-labs/powdr/pull/2244/commits/918e075e356a769610e6e88549f508bba46bc1a8" + }, + "date": 1734548893515, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6837, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 579, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1068, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29564, + "range": "± 56", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24410, + "range": "± 38", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24408, + "range": "± 38", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17233, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 804369, + "range": "± 2405", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2763620, + "range": "± 6846", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9695919, + "range": "± 45096", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35434103, + "range": "± 149277", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141307571, + "range": "± 902967", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3121, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2455, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2449, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1360, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65471, + "range": "± 33", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252375, + "range": "± 289", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1022899, + "range": "± 1354", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4872300, + "range": "± 24402", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27622526, + "range": "± 91866", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8376865382, + "range": "± 150319188", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "07015859c1af7853443220d57c5bfd2edc361662", + "message": "\"can process fully\"", + "timestamp": "2024-12-18T14:51:47Z", + "url": "https://github.com/powdr-labs/powdr/pull/2255/commits/07015859c1af7853443220d57c5bfd2edc361662" + }, + "date": 1734549562845, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6846, + "range": "± 73", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 580, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1054, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28859, + "range": "± 232", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24144, + "range": "± 277", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24058, + "range": "± 141", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17091, + "range": "± 82", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 786421, + "range": "± 1755", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2719057, + "range": "± 6263", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9573284, + "range": "± 114031", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35372404, + "range": "± 273648", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139898448, + "range": "± 421652", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3132, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2504, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2451, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1361, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 67104, + "range": "± 409", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 257561, + "range": "± 1636", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1039516, + "range": "± 2658", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4976461, + "range": "± 45055", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28488352, + "range": "± 168763", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8838233312, + "range": "± 71948870", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "68eae4bad2d4c55e76f0d60645398184a95e0f34", + "message": "Reserved space for prover data in memory layout", + "timestamp": "2024-12-18T14:51:47Z", + "url": "https://github.com/powdr-labs/powdr/pull/2251/commits/68eae4bad2d4c55e76f0d60645398184a95e0f34" + }, + "date": 1734549695029, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7022, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 577, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1054, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29319, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24809, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24515, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17458, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 800054, + "range": "± 1256", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2756648, + "range": "± 4006", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9664354, + "range": "± 28329", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35566932, + "range": "± 199144", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141696521, + "range": "± 689822", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3140, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2466, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2453, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1371, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65554, + "range": "± 31", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 254483, + "range": "± 163", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1035413, + "range": "± 1677", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4944208, + "range": "± 36579", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28433980, + "range": "± 432642", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8838035865, + "range": "± 53960551", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "chriseth", + "username": "chriseth", + "email": "chris@ethereum.org" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "18f6da0c476cf27614679d5b6889d36fe79d2699", + "message": "Specialized code for goldilocks. (#2253)\n\nThis is mostly a reduced copy of the goldilocks implementation we\nalready have with the main difference that the division tries to perform\ninteger division first if it can be done without remainder.", + "timestamp": "2024-12-18T19:09:51Z", + "url": "https://github.com/powdr-labs/powdr/commit/18f6da0c476cf27614679d5b6889d36fe79d2699" + }, + "date": 1734549964230, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6810, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 595, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1065, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28805, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24117, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24102, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17040, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 797027, + "range": "± 1243", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2749752, + "range": "± 5463", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9590934, + "range": "± 26350", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35052167, + "range": "± 144526", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140204498, + "range": "± 904362", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3148, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2461, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2457, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1380, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65522, + "range": "± 37", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251631, + "range": "± 195", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1029739, + "range": "± 892", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4871711, + "range": "± 13271", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27895099, + "range": "± 153376", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8503204111, + "range": "± 134671824", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "47632c3b0c7e6d6736e7afe7fc686dbd3900b451", + "message": "Support machine calls.", + "timestamp": "2024-12-18T14:51:47Z", + "url": "https://github.com/powdr-labs/powdr/pull/2241/commits/47632c3b0c7e6d6736e7afe7fc686dbd3900b451" + }, + "date": 1734550191330, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7084, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 599, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1069, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29499, + "range": "± 31", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24656, + "range": "± 26", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24561, + "range": "± 40", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17360, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 791667, + "range": "± 978", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2732084, + "range": "± 2246", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9526232, + "range": "± 16465", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34830839, + "range": "± 67385", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138800032, + "range": "± 228613", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3126, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2450, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2448, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1363, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65470, + "range": "± 26", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 252763, + "range": "± 218", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1022903, + "range": "± 720", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4852724, + "range": "± 2199", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27572973, + "range": "± 19187", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8121994354, + "range": "± 30857182", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "chriseth", + "username": "chriseth", + "email": "chris@ethereum.org" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "1b58d1e18a1eaeb63e6db29494cda9e908703234", + "message": "Introduce concept of assignment. (#2244)", + "timestamp": "2024-12-18T19:21:48Z", + "url": "https://github.com/powdr-labs/powdr/commit/1b58d1e18a1eaeb63e6db29494cda9e908703234" + }, + "date": 1734550648367, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6880, + "range": "± 30", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 585, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1090, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29277, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24547, + "range": "± 32", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24549, + "range": "± 72", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17363, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 792549, + "range": "± 1215", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2723350, + "range": "± 4767", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9580767, + "range": "± 16144", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34954802, + "range": "± 118949", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138911182, + "range": "± 177029", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3208, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2531, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2489, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1362, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65213, + "range": "± 105", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251300, + "range": "± 242", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1023357, + "range": "± 1270", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4863027, + "range": "± 28304", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27511439, + "range": "± 58673", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8216514352, + "range": "± 66537099", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "chriseth", + "username": "chriseth", + "email": "chris@ethereum.org" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "89a01a4e8b1c26864a9e571217eabdede5bafe5d", + "message": "\"can process fully\" (#2255)\n\nAdd a function to the Machine trait that can be used to determine if a\nsubmachine call with certain known inputs and certain range constraints\ncan be fully processed by the called machine.\n\n---------\n\nCo-authored-by: Georg Wiese ", + "timestamp": "2024-12-18T19:33:37Z", + "url": "https://github.com/powdr-labs/powdr/commit/89a01a4e8b1c26864a9e571217eabdede5bafe5d" + }, + "date": 1734551433656, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6871, + "range": "± 26", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 596, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1197, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28892, + "range": "± 131", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24239, + "range": "± 31", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24169, + "range": "± 96", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17070, + "range": "± 35", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 800831, + "range": "± 4561", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2750205, + "range": "± 23177", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9713356, + "range": "± 95789", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35707263, + "range": "± 388189", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 142327294, + "range": "± 1288030", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3135, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2454, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2463, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1380, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 65483, + "range": "± 577", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 251855, + "range": "± 623", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1024653, + "range": "± 11604", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4870911, + "range": "± 34833", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28288761, + "range": "± 282936", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 9008191836, + "range": "± 48172709", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "2e3a64c30b3334b5b6bc2046bfcdb1041f1be2ba", + "message": "Call JIT", + "timestamp": "2024-12-18T19:51:19Z", + "url": "https://github.com/powdr-labs/powdr/pull/2242/commits/2e3a64c30b3334b5b6bc2046bfcdb1041f1be2ba" + }, + "date": 1734552678493, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7098, + "range": "± 191", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 591, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1104, + "range": "± 27", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 30279, + "range": "± 1070", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 25230, + "range": "± 495", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 25053, + "range": "± 450", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17618, + "range": "± 290", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 817441, + "range": "± 9078", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2794316, + "range": "± 30517", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9821240, + "range": "± 83083", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35687038, + "range": "± 379271", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141416078, + "range": "± 967672", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3622, + "range": "± 27", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2877, + "range": "± 26", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2866, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1682, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 100402, + "range": "± 631", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 371795, + "range": "± 2039", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1429050, + "range": "± 5833", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6133656, + "range": "± 34101", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30706083, + "range": "± 277074", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8322848144, + "range": "± 49159314", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "46ef4d7abf009f7c3eaa578a87cb15516f106f1a", + "message": "Support machine calls.", + "timestamp": "2024-12-18T19:51:19Z", + "url": "https://github.com/powdr-labs/powdr/pull/2241/commits/46ef4d7abf009f7c3eaa578a87cb15516f106f1a" + }, + "date": 1734552707254, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6792, + "range": "± 76", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 583, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1074, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29125, + "range": "± 35", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24236, + "range": "± 77", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24238, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17187, + "range": "± 152", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 789670, + "range": "± 2258", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2730292, + "range": "± 5674", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9521361, + "range": "± 32241", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34940214, + "range": "± 137902", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138482895, + "range": "± 669591", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3137, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2457, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2457, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1373, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66043, + "range": "± 45", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 254580, + "range": "± 200", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1035414, + "range": "± 872", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4872363, + "range": "± 10206", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27708444, + "range": "± 21982", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8097717750, + "range": "± 36551644", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "aebb997585d059459e6f696465f236027c298836", + "message": "Add benchmark for JITgen", + "timestamp": "2024-12-18T19:51:19Z", + "url": "https://github.com/powdr-labs/powdr/pull/2260/commits/aebb997585d059459e6f696465f236027c298836" + }, + "date": 1734553117057, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6920, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 587, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1093, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29282, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24433, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24484, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17653, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 790660, + "range": "± 746", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2725239, + "range": "± 2888", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9529718, + "range": "± 15306", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35024462, + "range": "± 80536", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138373559, + "range": "± 165155", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3142, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2459, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2485, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1372, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66807, + "range": "± 33", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 257113, + "range": "± 146", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1057840, + "range": "± 1138", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 5019144, + "range": "± 3489", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 27882794, + "range": "± 135552", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "886cb818ab5de6a3d9d0a01490ef14e8376e5c15", + "message": "Not-concrete-is-unknown eval", + "timestamp": "2024-12-18T20:05:18Z", + "url": "https://github.com/powdr-labs/powdr/pull/2261/commits/886cb818ab5de6a3d9d0a01490ef14e8376e5c15" + }, + "date": 1734553510947, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6863, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 587, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1062, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29408, + "range": "± 46", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24568, + "range": "± 29", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24532, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17209, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 790969, + "range": "± 1148", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2716792, + "range": "± 3783", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9561215, + "range": "± 20560", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35197185, + "range": "± 84733", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139442025, + "range": "± 358549", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3666, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2866, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2861, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1675, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 100649, + "range": "± 45", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 370985, + "range": "± 220", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1424297, + "range": "± 1388", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6084671, + "range": "± 7878", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30487225, + "range": "± 108464", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8660030950, + "range": "± 37204487", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "chris@ethereum.org", + "name": "chriseth", + "username": "chriseth" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": true, + "id": "89a01a4e8b1c26864a9e571217eabdede5bafe5d", + "message": "\"can process fully\" (#2255)\n\nAdd a function to the Machine trait that can be used to determine if a\nsubmachine call with certain known inputs and certain range constraints\ncan be fully processed by the called machine.\n\n---------\n\nCo-authored-by: Georg Wiese ", + "timestamp": "2024-12-18T19:33:37Z", + "tree_id": "69e8696eb6be9129adf55b36e14f54ad2b1edcc7", + "url": "https://github.com/powdr-labs/powdr/commit/89a01a4e8b1c26864a9e571217eabdede5bafe5d" + }, + "date": 1734553632923, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6895, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 576, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1061, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29038, + "range": "± 34", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24374, + "range": "± 36", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24282, + "range": "± 55", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17250, + "range": "± 41", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 791949, + "range": "± 1003", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2735063, + "range": "± 6806", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9549451, + "range": "± 25160", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35110476, + "range": "± 208279", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139211533, + "range": "± 461145", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3133, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2447, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2449, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1360, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 66128, + "range": "± 89", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 254839, + "range": "± 1103", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1032638, + "range": "± 1087", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 4873224, + "range": "± 4323", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 28077808, + "range": "± 230983", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8567786964, + "range": "± 80240524", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "Georg Wiese", + "username": "georgwiese", + "email": "georgwiese@gmail.com" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "a737ed851f42fe75bdd88b386869d41b2afd5d26", + "message": "Call JIT (#2242)\n\nThis PR puts together the pieces to run compile-time witgen for block\nmachines. There are still many cases where it doesn't work yet, in which\ncase it falls back to run-time solving. These cases should be fixed in\nfuture PRs.\n\nIt also fixes two bugs:\n- When multiplying two affine expression, the case where one of them is\nzero is now handled properly.\n- `WitgenInference` now handles intermediate columns.\n\nNote that this PR could slow down witgen by attempting to compile code\nonce per incoming connection and input / output combination, in block\nmachines. I think this should be negligible though and it gives us that\nmuch of the new pipeline is already running in the tests and elsewhere.\n\n# Benchmark results\n\nI tested the code with different opt levels on a benchmark that computes\nca. $2^{16}$ Poseidon hashes.\n\n## Baseline\n\n```\n == Witgen profile (393220 events)\n 93.0% ( 30.8s): Secondary machine 0: main_poseidon (BlockMachine)\n 4.1% ( 1.4s): witgen (outer code)\n 2.3% ( 750.8ms): Main machine (Dynamic)\n 0.6% ( 204.4ms): FixedLookup\n 0.0% ( 3.2µs): range constraint multiplicity witgen\n ---------------------------\n ==> Total: 33.109672458s\n```\n\n## JIT (opt level 1)\n\n```\n == Witgen profile (393222 events)\n 52.3% ( 7.7s): JIT-compilation\n 32.0% ( 4.7s): Secondary machine 0: main_poseidon (BlockMachine)\n 9.2% ( 1.3s): witgen (outer code)\n 5.1% ( 748.3ms): Main machine (Dynamic)\n 1.4% ( 213.5ms): FixedLookup\n 0.0% ( 417.0ns): range constraint multiplicity witgen\n ---------------------------\n ==> Total: 14.729149333s\n```\n\n## JIT (opt level 3)\n\n```\n== Witgen profile (393222 events)\n 94.6% ( 107.9s): JIT-compilation\n 3.4% ( 3.9s): Secondary machine 0: main_poseidon (BlockMachine)\n 1.1% ( 1.3s): witgen (outer code)\n 0.7% ( 746.5ms): Main machine (Dynamic)\n 0.2% ( 204.1ms): FixedLookup\n 0.0% ( 542.0ns): range constraint multiplicity witgen\n ---------------------------\n ==> Total: 114.036571291s\n```", + "timestamp": "2024-12-18T20:27:49Z", + "url": "https://github.com/powdr-labs/powdr/commit/a737ed851f42fe75bdd88b386869d41b2afd5d26" + }, + "date": 1734554688837, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6971, + "range": "± 26", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 576, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1091, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29066, + "range": "± 38", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24251, + "range": "± 61", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24171, + "range": "± 47", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17071, + "range": "± 53", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 811809, + "range": "± 2080", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2790714, + "range": "± 8755", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9835578, + "range": "± 44070", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 36117357, + "range": "± 233182", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 144627593, + "range": "± 1026509", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3705, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2871, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2867, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1670, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99770, + "range": "± 250", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 374743, + "range": "± 1505", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1443770, + "range": "± 5126", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6199065, + "range": "± 46483", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 31251191, + "range": "± 222122", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 9189673850, + "range": "± 48079525", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "georgwiese@gmail.com", + "name": "Georg Wiese", + "username": "georgwiese" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": true, + "id": "a737ed851f42fe75bdd88b386869d41b2afd5d26", + "message": "Call JIT (#2242)\n\nThis PR puts together the pieces to run compile-time witgen for block\nmachines. There are still many cases where it doesn't work yet, in which\ncase it falls back to run-time solving. These cases should be fixed in\nfuture PRs.\n\nIt also fixes two bugs:\n- When multiplying two affine expression, the case where one of them is\nzero is now handled properly.\n- `WitgenInference` now handles intermediate columns.\n\nNote that this PR could slow down witgen by attempting to compile code\nonce per incoming connection and input / output combination, in block\nmachines. I think this should be negligible though and it gives us that\nmuch of the new pipeline is already running in the tests and elsewhere.\n\n# Benchmark results\n\nI tested the code with different opt levels on a benchmark that computes\nca. $2^{16}$ Poseidon hashes.\n\n## Baseline\n\n```\n == Witgen profile (393220 events)\n 93.0% ( 30.8s): Secondary machine 0: main_poseidon (BlockMachine)\n 4.1% ( 1.4s): witgen (outer code)\n 2.3% ( 750.8ms): Main machine (Dynamic)\n 0.6% ( 204.4ms): FixedLookup\n 0.0% ( 3.2µs): range constraint multiplicity witgen\n ---------------------------\n ==> Total: 33.109672458s\n```\n\n## JIT (opt level 1)\n\n```\n == Witgen profile (393222 events)\n 52.3% ( 7.7s): JIT-compilation\n 32.0% ( 4.7s): Secondary machine 0: main_poseidon (BlockMachine)\n 9.2% ( 1.3s): witgen (outer code)\n 5.1% ( 748.3ms): Main machine (Dynamic)\n 1.4% ( 213.5ms): FixedLookup\n 0.0% ( 417.0ns): range constraint multiplicity witgen\n ---------------------------\n ==> Total: 14.729149333s\n```\n\n## JIT (opt level 3)\n\n```\n== Witgen profile (393222 events)\n 94.6% ( 107.9s): JIT-compilation\n 3.4% ( 3.9s): Secondary machine 0: main_poseidon (BlockMachine)\n 1.1% ( 1.3s): witgen (outer code)\n 0.7% ( 746.5ms): Main machine (Dynamic)\n 0.2% ( 204.1ms): FixedLookup\n 0.0% ( 542.0ns): range constraint multiplicity witgen\n ---------------------------\n ==> Total: 114.036571291s\n```", + "timestamp": "2024-12-18T20:27:49Z", + "tree_id": "d8aec592d76bd341c83f04dee5f01ba6be0d9cf1", + "url": "https://github.com/powdr-labs/powdr/commit/a737ed851f42fe75bdd88b386869d41b2afd5d26" + }, + "date": 1734556530592, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6877, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 577, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1099, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29521, + "range": "± 30", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24568, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24488, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17350, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 800376, + "range": "± 1751", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2769226, + "range": "± 6267", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9667007, + "range": "± 41046", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35369118, + "range": "± 184297", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140388147, + "range": "± 586433", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3613, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2875, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2876, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1703, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99659, + "range": "± 118", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 371799, + "range": "± 330", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1429847, + "range": "± 2103", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6100775, + "range": "± 21360", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30569526, + "range": "± 188786", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8449156872, + "range": "± 66432993", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "2b317c10fd97fea025e4bc290936ec9c399fa3af", + "message": "Add benchmark for JITgen", + "timestamp": "2024-12-18T20:59:30Z", + "url": "https://github.com/powdr-labs/powdr/pull/2260/commits/2b317c10fd97fea025e4bc290936ec9c399fa3af" + }, + "date": 1734557428981, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6881, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 576, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1081, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29196, + "range": "± 109", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24489, + "range": "± 169", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24383, + "range": "± 64", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17237, + "range": "± 47", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 807846, + "range": "± 3779", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2778261, + "range": "± 32788", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9873572, + "range": "± 52657", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 36457975, + "range": "± 255568", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 145265013, + "range": "± 1161923", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3599, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2860, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2844, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1682, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 100547, + "range": "± 265", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 370298, + "range": "± 8824", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1437737, + "range": "± 2169", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6178552, + "range": "± 47354", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 31355765, + "range": "± 271299", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 55247830787, + "range": "± 654589745", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 9148444221, + "range": "± 71373075", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "caf1b3892097ab463146321b4aa510a8fa6a9152", + "message": "[Prototype] Simple Cache for JIT compilation", + "timestamp": "2024-12-18T20:59:30Z", + "url": "https://github.com/powdr-labs/powdr/pull/2262/commits/caf1b3892097ab463146321b4aa510a8fa6a9152" + }, + "date": 1734561720294, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6963, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 577, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1072, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29821, + "range": "± 65", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 25380, + "range": "± 66", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 25056, + "range": "± 76", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17652, + "range": "± 32", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 799279, + "range": "± 694", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2756437, + "range": "± 3549", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9639180, + "range": "± 16690", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35315258, + "range": "± 41400", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140537119, + "range": "± 183713", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "07dc059646443b1d45abe10ab0ee6229e64346cb", + "message": "Sponge construction for keccak syscall", + "timestamp": "2024-12-18T20:59:30Z", + "url": "https://github.com/powdr-labs/powdr/pull/2263/commits/07dc059646443b1d45abe10ab0ee6229e64346cb" + }, + "date": 1734568163998, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7136, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 597, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1097, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29106, + "range": "± 34", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24357, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24344, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17128, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 807951, + "range": "± 2121", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2800784, + "range": "± 3708", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9814499, + "range": "± 53594", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 36735884, + "range": "± 427287", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 144952106, + "range": "± 673974", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3590, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2848, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2851, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1674, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 100140, + "range": "± 61", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 373743, + "range": "± 308", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1447040, + "range": "± 3431", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6284501, + "range": "± 67168", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 31134508, + "range": "± 488272", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "db788a67e8c362fcd8c0674831547d0e9ae1d2f1", + "message": "use can_process", + "timestamp": "2024-12-18T20:59:30Z", + "url": "https://github.com/powdr-labs/powdr/pull/2256/commits/db788a67e8c362fcd8c0674831547d0e9ae1d2f1" + }, + "date": 1734603216974, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7009, + "range": "± 26", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 600, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1113, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 30096, + "range": "± 190", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 25218, + "range": "± 238", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 25070, + "range": "± 71", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17846, + "range": "± 26", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 792813, + "range": "± 1383", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2732568, + "range": "± 6279", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9577645, + "range": "± 25712", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35076337, + "range": "± 178702", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138841534, + "range": "± 257913", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3588, + "range": "± 28", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2833, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2835, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1682, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 101136, + "range": "± 278", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 378121, + "range": "± 610", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1461021, + "range": "± 2808", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6197070, + "range": "± 20236", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30689855, + "range": "± 90696", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8909782243, + "range": "± 65757805", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "64fab4376084c56cf6777a7d4f446c0575a90696", + "message": "Sponge construction for keccak syscall", + "timestamp": "2024-12-18T20:59:30Z", + "url": "https://github.com/powdr-labs/powdr/pull/2263/commits/64fab4376084c56cf6777a7d4f446c0575a90696" + }, + "date": 1734608511992, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6946, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 626, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1066, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29197, + "range": "± 41", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24441, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24388, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17204, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 797636, + "range": "± 2025", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2753329, + "range": "± 6169", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9602623, + "range": "± 40271", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35161301, + "range": "± 184977", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140004245, + "range": "± 793110", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3569, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2837, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2829, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1679, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99821, + "range": "± 288", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 372504, + "range": "± 359", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1435571, + "range": "± 2022", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6094441, + "range": "± 29413", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30651519, + "range": "± 240536", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "83ce3f3ee622885f8bac1adf0545d1393b1c50f8", + "message": "(WIP) remove reset instr fix", + "timestamp": "2024-12-18T20:59:30Z", + "url": "https://github.com/powdr-labs/powdr/pull/2265/commits/83ce3f3ee622885f8bac1adf0545d1393b1c50f8" + }, + "date": 1734609254485, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6882, + "range": "± 39", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 587, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1140, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28757, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 23928, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 23980, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 16914, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 778710, + "range": "± 921", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2694381, + "range": "± 2029", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9392117, + "range": "± 13510", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34337243, + "range": "± 110688", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 137294769, + "range": "± 204984", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3616, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2860, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2857, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1690, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99092, + "range": "± 82", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 371032, + "range": "± 369", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1432171, + "range": "± 2383", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6119358, + "range": "± 10973", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30266097, + "range": "± 164139", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8355466157, + "range": "± 60361077", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "0bdbbd2c4ea7274abeb1f07197d8f4bbe2c702dc", + "message": "Update stwo dependency to the latest version", + "timestamp": "2024-12-18T20:59:30Z", + "url": "https://github.com/powdr-labs/powdr/pull/2264/commits/0bdbbd2c4ea7274abeb1f07197d8f4bbe2c702dc" + }, + "date": 1734614411446, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6867, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 594, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1078, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29111, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24372, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24343, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17193, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 771056, + "range": "± 965", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2666556, + "range": "± 2827", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9310530, + "range": "± 14193", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34153751, + "range": "± 111309", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 136591713, + "range": "± 638994", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 2735, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2165, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2126, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1261, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 92048, + "range": "± 63", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 344544, + "range": "± 371", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1375077, + "range": "± 1426", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6031259, + "range": "± 20281", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 31538334, + "range": "± 112702", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8629259168, + "range": "± 84553531", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "fec80a842d06ed143a8ac3146677d7a49be229b8", + "message": "Remove reset instruction", + "timestamp": "2024-12-18T20:59:30Z", + "url": "https://github.com/powdr-labs/powdr/pull/1718/commits/fec80a842d06ed143a8ac3146677d7a49be229b8" + }, + "date": 1734616116826, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6762, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 593, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1035, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28452, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 23832, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 23767, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 16896, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 789267, + "range": "± 1999", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2712525, + "range": "± 5820", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9545553, + "range": "± 41000", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34858521, + "range": "± 187860", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138957498, + "range": "± 797639", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3616, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2861, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2857, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1687, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 101608, + "range": "± 53", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 379007, + "range": "± 530", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1471783, + "range": "± 2155", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6266018, + "range": "± 33652", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 31101738, + "range": "± 222366", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8645313056, + "range": "± 52059619", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "7eeeab2dca35b9005dcbbc3aa3a5b7eda0a8f654", + "message": "Update stwo dependency to the latest version", + "timestamp": "2024-12-18T20:59:30Z", + "url": "https://github.com/powdr-labs/powdr/pull/2264/commits/7eeeab2dca35b9005dcbbc3aa3a5b7eda0a8f654" + }, + "date": 1734616476591, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6860, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 607, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1095, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29312, + "range": "± 273", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24534, + "range": "± 32", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24417, + "range": "± 36", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17344, + "range": "± 35", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 790276, + "range": "± 2373", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2728158, + "range": "± 6754", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9538212, + "range": "± 25458", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34981602, + "range": "± 114304", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139339715, + "range": "± 542144", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 2705, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2168, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2148, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1273, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 91817, + "range": "± 67", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 343898, + "range": "± 291", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1351522, + "range": "± 3583", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6005667, + "range": "± 18419", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 31780788, + "range": "± 218566", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8823148608, + "range": "± 65520536", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "1daf745b6d9edd8635607fb2552a164907248d2b", + "message": "Not-concrete-is-unknown eval", + "timestamp": "2024-12-18T20:59:30Z", + "url": "https://github.com/powdr-labs/powdr/pull/2261/commits/1daf745b6d9edd8635607fb2552a164907248d2b" + }, + "date": 1734617174883, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6945, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 600, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1107, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28826, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24207, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24172, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17112, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 802201, + "range": "± 744", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2769766, + "range": "± 2897", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9698385, + "range": "± 17893", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35571886, + "range": "± 60282", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139723836, + "range": "± 169104", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3619, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2856, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2893, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1685, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99822, + "range": "± 48", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 372331, + "range": "± 728", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1429714, + "range": "± 1496", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6096622, + "range": "± 7961", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30506353, + "range": "± 72278", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8419662973, + "range": "± 11342422", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "a74bfe91c1b96223b2661ee8ce7e6e7c4f07c62d", + "message": "Extract effect and sub-types into its own module.", + "timestamp": "2024-12-18T20:59:30Z", + "url": "https://github.com/powdr-labs/powdr/pull/2266/commits/a74bfe91c1b96223b2661ee8ce7e6e7c4f07c62d" + }, + "date": 1734617451176, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6902, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 578, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1090, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29371, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24584, + "range": "± 27", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24480, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17366, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 799247, + "range": "± 1176", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2762814, + "range": "± 7295", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9711630, + "range": "± 16075", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35313284, + "range": "± 203853", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139982413, + "range": "± 372737", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3603, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2867, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2851, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1688, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99518, + "range": "± 56", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 369312, + "range": "± 289", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1432157, + "range": "± 2540", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6096421, + "range": "± 8568", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30371304, + "range": "± 105764", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8403870630, + "range": "± 116945763", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "5f323c65ab4b715b0ad526c2cebc1d85ff9c0562", + "message": "Prepare branching", + "timestamp": "2024-12-18T20:59:30Z", + "url": "https://github.com/powdr-labs/powdr/pull/2259/commits/5f323c65ab4b715b0ad526c2cebc1d85ff9c0562" + }, + "date": 1734617456384, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6859, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 572, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1091, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 30751, + "range": "± 47", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24287, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24197, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17132, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 798761, + "range": "± 1594", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2761893, + "range": "± 6968", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9647210, + "range": "± 33833", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35444382, + "range": "± 151479", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140965780, + "range": "± 770701", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3617, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2887, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2837, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1673, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 98703, + "range": "± 149", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 367427, + "range": "± 344", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1423615, + "range": "± 2027", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6145011, + "range": "± 42681", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 31093486, + "range": "± 224293", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8979079922, + "range": "± 49990898", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "bee112ec5488a8724cb01bc59f1a92420bfe0644", + "message": "(ignore) opt 2", + "timestamp": "2024-12-18T20:59:30Z", + "url": "https://github.com/powdr-labs/powdr/pull/2267/commits/bee112ec5488a8724cb01bc59f1a92420bfe0644" + }, + "date": 1734617621964, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6948, + "range": "± 40", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 604, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1090, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29477, + "range": "± 53", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24613, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24564, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17332, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 788176, + "range": "± 1252", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2721699, + "range": "± 2277", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9498046, + "range": "± 13402", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34835563, + "range": "± 99109", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 137713246, + "range": "± 149021", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3593, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2856, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2859, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1684, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 100239, + "range": "± 55", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 375036, + "range": "± 482", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1449102, + "range": "± 2238", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6205397, + "range": "± 10565", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30571399, + "range": "± 104823", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8459279079, + "range": "± 33159880", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "047cd5c85f9d37e223b75341e31afb059c96fdac", + "message": "Sponge construction for keccak syscall", + "timestamp": "2024-12-18T20:59:30Z", + "url": "https://github.com/powdr-labs/powdr/pull/2263/commits/047cd5c85f9d37e223b75341e31afb059c96fdac" + }, + "date": 1734618164913, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7040, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 585, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1079, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 30461, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 25433, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 25830, + "range": "± 29", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17996, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 785481, + "range": "± 1082", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2701567, + "range": "± 2980", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9514851, + "range": "± 10703", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34794980, + "range": "± 51961", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 137912639, + "range": "± 129512", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3663, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2971, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2839, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1671, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99994, + "range": "± 43", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 374776, + "range": "± 261", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1437299, + "range": "± 2262", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6129366, + "range": "± 7733", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30627304, + "range": "± 74979", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "595abb691febe467a579977137a732bb8480223d", + "message": "Support machine calls.", + "timestamp": "2024-12-18T20:59:30Z", + "url": "https://github.com/powdr-labs/powdr/pull/2241/commits/595abb691febe467a579977137a732bb8480223d" + }, + "date": 1734618607890, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7064, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 578, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1078, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 30862, + "range": "± 42", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 25646, + "range": "± 40", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 25570, + "range": "± 31", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 18075, + "range": "± 27", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 805525, + "range": "± 1183", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2777867, + "range": "± 3606", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9768685, + "range": "± 36728", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 36291716, + "range": "± 230672", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 143769122, + "range": "± 927116", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3617, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2899, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2870, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1672, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99579, + "range": "± 59", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 370438, + "range": "± 494", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1428203, + "range": "± 1952", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6187575, + "range": "± 59741", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30760496, + "range": "± 230590", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8652901781, + "range": "± 62054565", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "chriseth", + "username": "chriseth", + "email": "chris@ethereum.org" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "309279ac8a0f100e0b401289641bb009f2664b67", + "message": "Extract effect and sub-types into its own module. (#2266)", + "timestamp": "2024-12-19T14:27:25Z", + "url": "https://github.com/powdr-labs/powdr/commit/309279ac8a0f100e0b401289641bb009f2664b67" + }, + "date": 1734619509091, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6973, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 608, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1089, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29066, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24367, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24245, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17211, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 790779, + "range": "± 1353", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2726282, + "range": "± 6395", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9624249, + "range": "± 68587", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35655628, + "range": "± 252281", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141361036, + "range": "± 740216", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3616, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2869, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2839, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1677, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99546, + "range": "± 47", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 372898, + "range": "± 329", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1430436, + "range": "± 2089", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6182888, + "range": "± 54711", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 31123242, + "range": "± 243558", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 9018827071, + "range": "± 48361087", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "chris@ethereum.org", + "name": "chriseth", + "username": "chriseth" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": false, + "id": "309279ac8a0f100e0b401289641bb009f2664b67", + "message": "Extract effect and sub-types into its own module. (#2266)", + "timestamp": "2024-12-19T14:27:25Z", + "tree_id": "2f12c4853a5ea5d363bb8d5510d4dae28a5640e0", + "url": "https://github.com/powdr-labs/powdr/commit/309279ac8a0f100e0b401289641bb009f2664b67" + }, + "date": 1734621366630, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6794, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 586, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1079, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28737, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24019, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 23979, + "range": "± 26", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 16922, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 791696, + "range": "± 1868", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2721847, + "range": "± 4339", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9525738, + "range": "± 40374", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34841704, + "range": "± 150450", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139426697, + "range": "± 1166536", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3592, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2856, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2865, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1689, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 100726, + "range": "± 171", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 373126, + "range": "± 268", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1437414, + "range": "± 3385", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6155487, + "range": "± 17820", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 31362601, + "range": "± 230611", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8505983672, + "range": "± 66638843", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "71beadee67989a87da1e9eaf327c8af726a83f0f", + "message": "use can_process", + "timestamp": "2024-12-19T14:59:19Z", + "url": "https://github.com/powdr-labs/powdr/pull/2256/commits/71beadee67989a87da1e9eaf327c8af726a83f0f" + }, + "date": 1734624987706, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6985, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 581, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1081, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29182, + "range": "± 31", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24502, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24333, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17225, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 795163, + "range": "± 898", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2736424, + "range": "± 3868", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9551010, + "range": "± 12450", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35040940, + "range": "± 165303", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138761474, + "range": "± 286495", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3576, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2841, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2838, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1675, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99878, + "range": "± 35", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 370334, + "range": "± 224", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1428462, + "range": "± 1798", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6093843, + "range": "± 11322", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30650611, + "range": "± 189222", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8763858339, + "range": "± 119454684", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "92ffac3883ca2dc91e0cf2b498cb86725104f102", + "message": "Support machine calls.", + "timestamp": "2024-12-19T14:59:19Z", + "url": "https://github.com/powdr-labs/powdr/pull/2241/commits/92ffac3883ca2dc91e0cf2b498cb86725104f102" + }, + "date": 1734625156008, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6875, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 603, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1074, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28932, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24460, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24210, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17121, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 784865, + "range": "± 756", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2709497, + "range": "± 3150", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9476417, + "range": "± 11018", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34831109, + "range": "± 30799", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138299180, + "range": "± 522318", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3591, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2841, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2845, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1672, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 100396, + "range": "± 106", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 375313, + "range": "± 392", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1460401, + "range": "± 2233", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6174353, + "range": "± 9011", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30606498, + "range": "± 83039", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8263449716, + "range": "± 160575149", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "dd1f13a80c9f6372a0c74ab31dab3ec214fc4366", + "message": "Not-concrete-is-unknown eval", + "timestamp": "2024-12-19T14:59:19Z", + "url": "https://github.com/powdr-labs/powdr/pull/2261/commits/dd1f13a80c9f6372a0c74ab31dab3ec214fc4366" + }, + "date": 1734625403914, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6865, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 572, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1054, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29099, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24260, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24209, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17314, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 791434, + "range": "± 1584", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2733178, + "range": "± 5089", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9576815, + "range": "± 34700", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34952492, + "range": "± 108591", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139662676, + "range": "± 382076", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3585, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2843, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2839, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1671, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99354, + "range": "± 89", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 369457, + "range": "± 530", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1427788, + "range": "± 1786", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6097693, + "range": "± 28857", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30823099, + "range": "± 200649", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8562467697, + "range": "± 114645131", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "chriseth", + "username": "chriseth", + "email": "chris@ethereum.org" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "a2a67a6264b631645bc8b0e8c90d655b3a69864f", + "message": "Support machine calls. (#2241)\n\nDepends on #2244", + "timestamp": "2024-12-19T16:35:19Z", + "url": "https://github.com/powdr-labs/powdr/commit/a2a67a6264b631645bc8b0e8c90d655b3a69864f" + }, + "date": 1734627072678, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6897, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 607, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1158, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29287, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24405, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24275, + "range": "± 34", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17227, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 791029, + "range": "± 689", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2729796, + "range": "± 2841", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9554663, + "range": "± 7865", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34972444, + "range": "± 31488", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139614021, + "range": "± 96353", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3600, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2851, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2855, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1689, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99938, + "range": "± 76", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 369453, + "range": "± 343", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1428515, + "range": "± 1681", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6087757, + "range": "± 6154", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30324679, + "range": "± 65541", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8047355219, + "range": "± 37288372", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "chriseth", + "username": "chriseth", + "email": "chris@ethereum.org" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "d5c8a1ef876b539c3b23d117408e098a1cc4fd1c", + "message": "Not-concrete-is-unknown eval (#2261)", + "timestamp": "2024-12-19T16:38:20Z", + "url": "https://github.com/powdr-labs/powdr/commit/d5c8a1ef876b539c3b23d117408e098a1cc4fd1c" + }, + "date": 1734627317034, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6896, + "range": "± 26", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 579, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1082, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29131, + "range": "± 34", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24334, + "range": "± 43", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24304, + "range": "± 91", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17275, + "range": "± 39", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 804403, + "range": "± 1752", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2765693, + "range": "± 6850", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9738451, + "range": "± 44882", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35911052, + "range": "± 260990", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 142295037, + "range": "± 828479", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3613, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2877, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2891, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1702, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99747, + "range": "± 96", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 373113, + "range": "± 467", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1427105, + "range": "± 2352", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6202769, + "range": "± 78980", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 31112514, + "range": "± 330741", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8997158132, + "range": "± 41020700", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "chris@ethereum.org", + "name": "chriseth", + "username": "chriseth" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": false, + "id": "a2a67a6264b631645bc8b0e8c90d655b3a69864f", + "message": "Support machine calls. (#2241)\n\nDepends on #2244", + "timestamp": "2024-12-19T16:35:19Z", + "tree_id": "ad8967d28ce34cbd72a187a56460efadf735938e", + "url": "https://github.com/powdr-labs/powdr/commit/a2a67a6264b631645bc8b0e8c90d655b3a69864f" + }, + "date": 1734629046566, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6905, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 581, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1067, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29413, + "range": "± 88", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24581, + "range": "± 36", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24535, + "range": "± 46", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17660, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 793870, + "range": "± 1508", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2743078, + "range": "± 9345", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9585050, + "range": "± 30434", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35111054, + "range": "± 105184", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139413473, + "range": "± 297245", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3640, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2874, + "range": "± 59", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2856, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1682, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99343, + "range": "± 179", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 370731, + "range": "± 1239", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1431920, + "range": "± 7475", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6132567, + "range": "± 30589", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30556983, + "range": "± 139410", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8421222939, + "range": "± 32321010", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "950f990024310b0c9a763d904cb3d590c9b71fdd", + "message": "improve executor handwritten witgen performance", + "timestamp": "2024-12-19T17:12:00Z", + "url": "https://github.com/powdr-labs/powdr/pull/2269/commits/950f990024310b0c9a763d904cb3d590c9b71fdd" + }, + "date": 1734629947505, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6832, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 605, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1070, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29174, + "range": "± 26", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24425, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24380, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17294, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 794961, + "range": "± 1196", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2733700, + "range": "± 4002", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9541659, + "range": "± 10321", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35011646, + "range": "± 108081", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138928346, + "range": "± 224287", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3757, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2913, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2868, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1674, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 100094, + "range": "± 81", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 371711, + "range": "± 466", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1435314, + "range": "± 2477", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6117434, + "range": "± 8187", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30622308, + "range": "± 72896", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8165587016, + "range": "± 29999428", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "chris@ethereum.org", + "name": "chriseth", + "username": "chriseth" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": true, + "id": "d5c8a1ef876b539c3b23d117408e098a1cc4fd1c", + "message": "Not-concrete-is-unknown eval (#2261)", + "timestamp": "2024-12-19T16:38:20Z", + "tree_id": "f07cb4f01ad9d915b6df027bf140c3a6420bfea0", + "url": "https://github.com/powdr-labs/powdr/commit/d5c8a1ef876b539c3b23d117408e098a1cc4fd1c" + }, + "date": 1734630925634, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7055, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 599, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1097, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 34677, + "range": "± 30", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 29024, + "range": "± 30", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 29094, + "range": "± 41", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 20504, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 828151, + "range": "± 1054", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2873870, + "range": "± 2888", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 10010341, + "range": "± 14415", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 36493304, + "range": "± 77837", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 143895832, + "range": "± 122572", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3599, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2906, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2849, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1674, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99957, + "range": "± 42", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 369485, + "range": "± 255", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1428945, + "range": "± 1671", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6118121, + "range": "± 9401", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30347365, + "range": "± 72848", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8294008248, + "range": "± 30698431", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "5ed4636fe4bc35c6f7f4854864e746ba64087f62", + "message": "improve executor handwritten witgen performance", + "timestamp": "2024-12-19T17:12:00Z", + "url": "https://github.com/powdr-labs/powdr/pull/2269/commits/5ed4636fe4bc35c6f7f4854864e746ba64087f62" + }, + "date": 1734632421243, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7242, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 585, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1086, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29547, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24712, + "range": "± 37", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24624, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17483, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 789502, + "range": "± 2031", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2745448, + "range": "± 5333", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9557286, + "range": "± 13793", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34988567, + "range": "± 57011", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139355490, + "range": "± 432881", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3590, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2843, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2940, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1684, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99743, + "range": "± 58", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 370230, + "range": "± 396", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1428577, + "range": "± 1266", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6092330, + "range": "± 6455", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30398583, + "range": "± 104352", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8177193830, + "range": "± 65302226", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "c4e5044288c301647e3cb41f492023a92ac40d9c", + "message": "(WIP) remove reset instr fix", + "timestamp": "2024-12-19T17:12:00Z", + "url": "https://github.com/powdr-labs/powdr/pull/2265/commits/c4e5044288c301647e3cb41f492023a92ac40d9c" + }, + "date": 1734634342465, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6909, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 595, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1068, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28640, + "range": "± 28", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24204, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24035, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 16944, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 787977, + "range": "± 1605", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2715031, + "range": "± 6651", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9473850, + "range": "± 31426", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34734643, + "range": "± 63980", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138070750, + "range": "± 1089478", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3576, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2833, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2832, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1675, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 101449, + "range": "± 46", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 374489, + "range": "± 406", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1439970, + "range": "± 1951", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6104440, + "range": "± 8272", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30470552, + "range": "± 166395", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8468737552, + "range": "± 40753164", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "2a72603afb678073cf725664ce5f6e43b56ed1c0", + "message": "Sponge construction for keccak syscall", + "timestamp": "2024-12-19T17:12:00Z", + "url": "https://github.com/powdr-labs/powdr/pull/2263/commits/2a72603afb678073cf725664ce5f6e43b56ed1c0" + }, + "date": 1734642176464, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6975, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 579, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1071, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29384, + "range": "± 44", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24544, + "range": "± 49", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24484, + "range": "± 30", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17367, + "range": "± 32", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 797474, + "range": "± 2381", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2748382, + "range": "± 3419", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9629339, + "range": "± 23253", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35268012, + "range": "± 39468", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139848702, + "range": "± 289550", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3604, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2878, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2871, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1676, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99391, + "range": "± 487", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 371091, + "range": "± 995", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1424459, + "range": "± 2378", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6107993, + "range": "± 9927", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30397503, + "range": "± 64395", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "9678aaaafc29ca58c074dd9a1d122742134edc34", + "message": "improve executor handwritten witgen performance", + "timestamp": "2024-12-19T17:12:00Z", + "url": "https://github.com/powdr-labs/powdr/pull/2269/commits/9678aaaafc29ca58c074dd9a1d122742134edc34" + }, + "date": 1734646744181, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6795, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 600, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1084, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29012, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24262, + "range": "± 26", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24235, + "range": "± 43", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17207, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 792280, + "range": "± 1959", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2727840, + "range": "± 3067", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9519674, + "range": "± 21213", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34902397, + "range": "± 138892", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138480670, + "range": "± 343913", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3606, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2855, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2850, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1684, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99512, + "range": "± 58", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 371112, + "range": "± 394", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1429073, + "range": "± 1570", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6075487, + "range": "± 7908", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30325271, + "range": "± 81172", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8395036370, + "range": "± 70579780", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "7781548415b0784e514fc2d6f0e1444def32c3f4", + "message": "use can_process", + "timestamp": "2024-12-19T17:12:00Z", + "url": "https://github.com/powdr-labs/powdr/pull/2256/commits/7781548415b0784e514fc2d6f0e1444def32c3f4" + }, + "date": 1734650455360, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6895, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 594, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1090, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29100, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24260, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24203, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17111, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 785027, + "range": "± 1532", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2711216, + "range": "± 1443", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9474460, + "range": "± 14231", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34738097, + "range": "± 49862", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138128857, + "range": "± 190417", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3701, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2877, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2852, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1678, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 102901, + "range": "± 48", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 383685, + "range": "± 297", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1477845, + "range": "± 1759", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6264402, + "range": "± 9031", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30846097, + "range": "± 79279", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "3710c191b641febc15a08c0cf5aa0528e6f71f4e", + "message": "Bisect range constraints.", + "timestamp": "2024-12-19T17:12:00Z", + "url": "https://github.com/powdr-labs/powdr/pull/2270/commits/3710c191b641febc15a08c0cf5aa0528e6f71f4e" + }, + "date": 1734651277685, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6858, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 614, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1063, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28930, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24173, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24125, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17061, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 797019, + "range": "± 1353", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2742861, + "range": "± 4192", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9678961, + "range": "± 26531", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35392939, + "range": "± 159504", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141494367, + "range": "± 1083114", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3665, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2923, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2876, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1676, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 100577, + "range": "± 91", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 373885, + "range": "± 466", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1440433, + "range": "± 1656", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6253656, + "range": "± 64817", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 31656598, + "range": "± 317439", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8873389583, + "range": "± 71208408", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "3df663a9ed4d688af1571a4afea30eafd71a4575", + "message": "Sponge construction for keccak syscall", + "timestamp": "2024-12-19T17:12:00Z", + "url": "https://github.com/powdr-labs/powdr/pull/2263/commits/3df663a9ed4d688af1571a4afea30eafd71a4575" + }, + "date": 1734652909909, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7025, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 592, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1070, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28968, + "range": "± 134", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24250, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24198, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17140, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 790715, + "range": "± 685", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2725119, + "range": "± 3018", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9528924, + "range": "± 13797", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34949319, + "range": "± 35456", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138483930, + "range": "± 128656", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3601, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2836, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2839, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1676, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 100601, + "range": "± 144", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 376666, + "range": "± 369", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1442602, + "range": "± 2704", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6115240, + "range": "± 7274", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30503459, + "range": "± 61877", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "682256a861fb2bfbb2c371a90b191ffac023a43b", + "message": "Sponge construction for keccak syscall", + "timestamp": "2024-12-19T17:12:00Z", + "url": "https://github.com/powdr-labs/powdr/pull/2263/commits/682256a861fb2bfbb2c371a90b191ffac023a43b" + }, + "date": 1734658205847, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6990, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 603, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1059, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29259, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24532, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24462, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17365, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 800204, + "range": "± 1972", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2759212, + "range": "± 4256", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9684454, + "range": "± 49331", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35323222, + "range": "± 73814", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140509087, + "range": "± 580414", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3612, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2837, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2829, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1671, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99226, + "range": "± 59", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 369051, + "range": "± 322", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1432041, + "range": "± 2334", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6103750, + "range": "± 52170", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30546134, + "range": "± 176370", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "415b113e335f1c927ff38b49db3ed88b0d0060ef", + "message": "Sponge construction for keccak syscall", + "timestamp": "2024-12-19T17:12:00Z", + "url": "https://github.com/powdr-labs/powdr/pull/2263/commits/415b113e335f1c927ff38b49db3ed88b0d0060ef" + }, + "date": 1734659845500, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6885, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 580, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1072, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29794, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24860, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24885, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17407, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 795166, + "range": "± 1161", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2751281, + "range": "± 5466", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9620520, + "range": "± 26173", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35137628, + "range": "± 112669", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139576521, + "range": "± 647745", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3630, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2830, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2838, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1674, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 100454, + "range": "± 61", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 375086, + "range": "± 275", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1445007, + "range": "± 2337", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6127685, + "range": "± 25758", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30499572, + "range": "± 294033", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "f310db0815d769a188cc09a2eb4d933b5c32acb2", + "message": "Sponge construction for keccak syscall & Intruction::keccakf", + "timestamp": "2024-12-19T17:12:00Z", + "url": "https://github.com/powdr-labs/powdr/pull/2263/commits/f310db0815d769a188cc09a2eb4d933b5c32acb2" + }, + "date": 1734663542617, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6848, + "range": "± 40", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 576, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1062, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 30801, + "range": "± 27", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 25976, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 25735, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 18186, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 798773, + "range": "± 1094", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2754878, + "range": "± 2370", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9625712, + "range": "± 8891", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35244823, + "range": "± 27565", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140239070, + "range": "± 154177", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3631, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2837, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2833, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1676, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 100293, + "range": "± 116", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 372007, + "range": "± 318", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1432795, + "range": "± 1908", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6123799, + "range": "± 6384", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30906831, + "range": "± 78783", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "2f76764bd00195ce0742b782b229ee2f29dc9fcd", + "message": "Update stwo dependency to the latest version", + "timestamp": "2024-12-19T17:12:00Z", + "url": "https://github.com/powdr-labs/powdr/pull/2264/commits/2f76764bd00195ce0742b782b229ee2f29dc9fcd" + }, + "date": 1734688250436, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7055, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 613, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1119, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 30862, + "range": "± 27", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 25782, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 25790, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 18189, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 802412, + "range": "± 944", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2779185, + "range": "± 3389", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9708924, + "range": "± 16222", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35463780, + "range": "± 57384", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141001077, + "range": "± 140706", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 2696, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2155, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2134, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1259, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 90345, + "range": "± 83", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 337929, + "range": "± 319", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1340342, + "range": "± 1608", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 5977986, + "range": "± 9774", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 31377120, + "range": "± 106080", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8320349631, + "range": "± 29884063", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "e903a3f93c859d1e14a3fba5eef0e3845c35edb3", + "message": "Use `test_log::test`", + "timestamp": "2024-12-19T17:12:00Z", + "url": "https://github.com/powdr-labs/powdr/pull/2271/commits/e903a3f93c859d1e14a3fba5eef0e3845c35edb3" + }, + "date": 1734690953040, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7329, + "range": "± 27", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 647, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1110, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29270, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24409, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24343, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17407, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 798783, + "range": "± 1944", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2763131, + "range": "± 5834", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9644580, + "range": "± 43399", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35456776, + "range": "± 239348", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141854695, + "range": "± 1056320", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3675, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2905, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2898, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1671, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 100554, + "range": "± 63", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 374817, + "range": "± 354", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1445665, + "range": "± 2291", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6180778, + "range": "± 27856", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 31003468, + "range": "± 218158", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8412102151, + "range": "± 81591392", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "00f53daa4e1a17e11325e85034c7ec525e22c532", + "message": "Bisect range constraints.", + "timestamp": "2024-12-19T17:12:00Z", + "url": "https://github.com/powdr-labs/powdr/pull/2270/commits/00f53daa4e1a17e11325e85034c7ec525e22c532" + }, + "date": 1734691045073, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6912, + "range": "± 28", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 616, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1094, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29063, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24379, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24246, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17172, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 802731, + "range": "± 822", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2779475, + "range": "± 3463", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9706104, + "range": "± 22545", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35666680, + "range": "± 104379", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140710716, + "range": "± 1066812", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3607, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2855, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2847, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1688, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99898, + "range": "± 55", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 371250, + "range": "± 318", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1428747, + "range": "± 1817", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6096961, + "range": "± 15827", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30616832, + "range": "± 157726", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8567362244, + "range": "± 68799883", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "4abe252ab25a4223c5fe354f22c741946fa3e7ce", + "message": "use can_process", + "timestamp": "2024-12-19T17:12:00Z", + "url": "https://github.com/powdr-labs/powdr/pull/2256/commits/4abe252ab25a4223c5fe354f22c741946fa3e7ce" + }, + "date": 1734691958385, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6806, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 583, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1072, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28844, + "range": "± 27", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24119, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24074, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17566, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 787483, + "range": "± 1458", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2717425, + "range": "± 3066", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9557614, + "range": "± 28865", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34855909, + "range": "± 86290", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139541561, + "range": "± 675011", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3580, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2838, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2848, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1670, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 98771, + "range": "± 89", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 367834, + "range": "± 379", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1420330, + "range": "± 999", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6133465, + "range": "± 38056", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30638934, + "range": "± 133859", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8862991211, + "range": "± 105716365", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "ae0efca8c335924c34f8afc366738d346a6a6b33", + "message": "improve executor handwritten witgen performance", + "timestamp": "2024-12-19T17:12:00Z", + "url": "https://github.com/powdr-labs/powdr/pull/2269/commits/ae0efca8c335924c34f8afc366738d346a6a6b33" + }, + "date": 1734692080110, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6952, + "range": "± 29", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 586, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1055, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29720, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24884, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24838, + "range": "± 27", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17563, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 809064, + "range": "± 1558", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2782975, + "range": "± 3163", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9725412, + "range": "± 13720", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35655098, + "range": "± 57323", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141087658, + "range": "± 151677", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3597, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2837, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2856, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1671, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99334, + "range": "± 78", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 369798, + "range": "± 286", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1436102, + "range": "± 2012", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6141934, + "range": "± 8031", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30430481, + "range": "± 85339", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8317519598, + "range": "± 37329467", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "3a55cb3a71c90a55a43eada464beda27c0ed65be", + "message": "free input data", + "timestamp": "2024-12-19T17:12:00Z", + "url": "https://github.com/powdr-labs/powdr/pull/2239/commits/3a55cb3a71c90a55a43eada464beda27c0ed65be" + }, + "date": 1734692134910, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7109, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 605, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1085, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 31172, + "range": "± 23", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 26021, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 25953, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 18294, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 836297, + "range": "± 876", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2890738, + "range": "± 3414", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 10073010, + "range": "± 13101", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 36817486, + "range": "± 79725", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 144881975, + "range": "± 116280", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3614, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2910, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2868, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1672, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 100534, + "range": "± 86", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 372404, + "range": "± 405", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1435130, + "range": "± 1975", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6114633, + "range": "± 8991", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30466398, + "range": "± 108939", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8094103762, + "range": "± 33405894", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "georgwiese@gmail.com", + "name": "Georg Wiese", + "username": "georgwiese" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": false, + "id": "64ce9672efd74f9f78401095dfd8aef4495950b6", + "message": "Add benchmark for JITgen (#2260)\n\nAdds the benchmark I used for measuring the witness generation JIT in\n#2242.", + "timestamp": "2024-12-20T10:28:19Z", + "tree_id": "b5fcbf9a2fb094612ee810af9b26ff7219e26ce3", + "url": "https://github.com/powdr-labs/powdr/commit/64ce9672efd74f9f78401095dfd8aef4495950b6" + }, + "date": 1734693586040, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6956, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 586, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1054, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28721, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24024, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 23987, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 16951, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 780390, + "range": "± 1079", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2692059, + "range": "± 3646", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9485980, + "range": "± 36878", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34861942, + "range": "± 187548", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138514585, + "range": "± 832138", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3584, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2835, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2939, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1676, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99766, + "range": "± 48", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 370248, + "range": "± 444", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1430928, + "range": "± 2243", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6220403, + "range": "± 37580", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 31080719, + "range": "± 184963", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 53998960140, + "range": "± 354481817", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8597730944, + "range": "± 49725301", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "chris@ethereum.org", + "name": "chriseth", + "username": "chriseth" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": false, + "id": "6549bd2f49651deb8e6d1a49232040a3f06c7e94", + "message": "Bisect range constraints. (#2270)\n\nThis adds a function to range constraints that splits a range constraint\ninto two disjoint range constraints of roughly the same size that equal\nthe initial range constraint when combined.\n\nThis function is planned to be used for branching in autowitjitgen.", + "timestamp": "2024-12-20T10:48:18Z", + "tree_id": "19fe5426a97ed26f40b21ba5a3e2c42ecbf480ea", + "url": "https://github.com/powdr-labs/powdr/commit/6549bd2f49651deb8e6d1a49232040a3f06c7e94" + }, + "date": 1734695556000, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7088, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 589, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1089, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29225, + "range": "± 26", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24445, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24375, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17161, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 781660, + "range": "± 1024", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2700402, + "range": "± 2027", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9442556, + "range": "± 14381", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34702927, + "range": "± 41770", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 137708133, + "range": "± 133111", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3637, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2918, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2863, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1708, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 100721, + "range": "± 90", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 373235, + "range": "± 344", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1433972, + "range": "± 2172", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6100196, + "range": "± 8045", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30473623, + "range": "± 76033", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 50804273944, + "range": "± 372373805", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8137220194, + "range": "± 15759967", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "c54c0dd1c25358b93ef4786927c344d01dc3e076", + "message": "Single step processor.", + "timestamp": "2024-12-20T11:22:49Z", + "url": "https://github.com/powdr-labs/powdr/pull/2272/commits/c54c0dd1c25358b93ef4786927c344d01dc3e076" + }, + "date": 1734696293618, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6765, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 598, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1054, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28896, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24054, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24069, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17027, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 802565, + "range": "± 805", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2764537, + "range": "± 2815", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9650931, + "range": "± 16282", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35375111, + "range": "± 48150", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140189900, + "range": "± 142508", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3616, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2915, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2887, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1677, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 100747, + "range": "± 82", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 373614, + "range": "± 395", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1441464, + "range": "± 1466", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6129425, + "range": "± 5982", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30354700, + "range": "± 82965", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 52580127988, + "range": "± 591084510", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8451402810, + "range": "± 77720838", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "43c22b2144f529461e731adec753c86cff8ff6a2", + "message": "Log JIT statistics", + "timestamp": "2024-12-20T11:22:49Z", + "url": "https://github.com/powdr-labs/powdr/pull/2273/commits/43c22b2144f529461e731adec753c86cff8ff6a2" + }, + "date": 1734696913426, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6804, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 597, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1097, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29958, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 25136, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 25072, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 18022, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 785566, + "range": "± 846", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2705765, + "range": "± 2755", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9432990, + "range": "± 8585", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34625869, + "range": "± 35425", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138008899, + "range": "± 126835", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3588, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2833, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2842, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1681, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 101303, + "range": "± 75", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 372587, + "range": "± 329", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1440786, + "range": "± 1189", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6146248, + "range": "± 7130", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30565304, + "range": "± 55593", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 51107098489, + "range": "± 538914236", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8140922583, + "range": "± 23472205", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "Georg Wiese", + "username": "georgwiese", + "email": "georgwiese@gmail.com" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "550a1e680a566f270d666b0fef86e7c09b85f5f1", + "message": "Log JIT statistics (#2273)\n\nCurrently, it is hard to know for which machines the WitJITGen worked.\nWith this PR, we can see it in the debug log:\n\n```\n$ POWDR_JIT_OPT_LEVEL=1 RUST_LOG=debug cargo run pil test_data/std/poseidon_gl_test.asm -o output -f\n...\n[00:00:10 (ETA: 00:00:00)] ████████████████████ 100% - Starting... Finalizing VM: Main machine (Dynamic)\nSecondary machine 0: main_poseidon (BlockMachine): 5 / 5 blocks computed via JIT.\n155 of 256 rows are used in machine 'Secondary machine 0: main_poseidon (BlockMachine)'.\n\n == Witgen profile (532 events)\n 96.9% ( 10.4s): JIT-compilation\n 2.5% ( 268.6ms): Secondary machine 0: main_poseidon (BlockMachine)\n 0.5% ( 56.3ms): witgen (outer code)\n 0.1% ( 8.7ms): Main machine (Dynamic)\n 0.0% ( 3.2ms): FixedLookup\n 0.0% ( 2.1µs): range constraint multiplicity witgen\n ---------------------------\n ==> Total: 10.75908525s\n\n$ cargo run -r --features plonky3 --bin powdr-rs compile riscv/tests/riscv_data/keccak -o output --max-degree-log 18 --field gl --coprocessors arith\n...\n$ cargo run -r --features plonky3 pil output/keccak.asm -o output -f --field gl --prove-with mock --linker-mode bus\n...\n[00:00:15 (ETA: 00:00:00)] ████████████████████ 100% - 94652 rows/s, 12304k identities/s, 100% progress Finalizing VM: Main machine (Dynamic)\nMachine Secondary machine 0: main_arith (BlockMachine) is never used at runtime, so we remove it.\nSecondary machine 1: main_binary (BlockMachine): 0 / 50462 blocks computed via JIT.\n201848 of 262144 rows are used in machine 'Secondary machine 1: main_binary (BlockMachine)'.\n40180 of 65536 rows are used in machine 'Secondary machine 2: main_memory (DoubleSortedWitnesses32)'.\nSecondary machine 3: main_poseidon_gl (BlockMachine): 0 / 1 blocks computed via JIT.\n31 of 32 rows are used in machine 'Secondary machine 3: main_poseidon_gl (BlockMachine)'.\n362234 of 524288 rows are used in machine 'Secondary machine 5: main_regs (DoubleSortedWitnesses32)'.\nSecondary machine 6: main_shift (BlockMachine): 0 / 11734 blocks computed via JIT.\n46936 of 65536 rows are used in machine 'Secondary machine 6: main_shift (BlockMachine)'.\nSecondary machine 7: main_split_gl (BlockMachine): 0 / 7 blocks computed via JIT.\n56 of 64 rows are used in machine 'Secondary machine 7: main_split_gl (BlockMachine)'.\n\n == Witgen profile (2554854 events)\n 48.7% ( 8.0s): Secondary machine 1: main_binary (BlockMachine)\n 18.4% ( 3.0s): Main machine (Dynamic)\n 12.4% ( 2.0s): Secondary machine 6: main_shift (BlockMachine)\n 10.5% ( 1.7s): FixedLookup\n 6.1% ( 999.6ms): Secondary machine 5: main_regs (DoubleSortedWitnesses32)\n 2.5% ( 404.6ms): witgen (outer code)\n 0.7% ( 114.5ms): Secondary machine 7: main_split_gl (BlockMachine)\n 0.5% ( 78.8ms): Secondary machine 3: main_poseidon_gl (BlockMachine)\n 0.3% ( 54.9ms): Secondary machine 2: main_memory (DoubleSortedWitnesses32)\n 0.0% ( 5.0ms): range constraint multiplicity witgen\n 0.0% ( 9.4µs): Secondary machine 4: main_publics (WriteOnceMemory)\n ---------------------------\n ==> Total: 16.446211875s\n```", + "timestamp": "2024-12-20T12:20:20Z", + "url": "https://github.com/powdr-labs/powdr/commit/550a1e680a566f270d666b0fef86e7c09b85f5f1" + }, + "date": 1734698747065, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6904, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 598, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1066, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29194, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24220, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24250, + "range": "± 65", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17074, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 784732, + "range": "± 975", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2710268, + "range": "± 2701", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9452028, + "range": "± 17309", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34592524, + "range": "± 69816", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 137840756, + "range": "± 174026", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3607, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2853, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2861, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1689, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 98736, + "range": "± 175", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 371924, + "range": "± 468", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1433254, + "range": "± 2032", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6132766, + "range": "± 20775", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30515584, + "range": "± 271103", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 50788622988, + "range": "± 409493600", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8084678954, + "range": "± 17411553", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "ad4a616649ae0500cccd66780a4cebf877d9a084", + "message": "use can_process", + "timestamp": "2024-12-20T11:22:49Z", + "url": "https://github.com/powdr-labs/powdr/pull/2256/commits/ad4a616649ae0500cccd66780a4cebf877d9a084" + }, + "date": 1734699726304, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6904, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 603, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1054, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28929, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24277, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24246, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17135, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 788337, + "range": "± 1125", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2715243, + "range": "± 6487", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9546000, + "range": "± 51455", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35233926, + "range": "± 245825", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140143711, + "range": "± 736815", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3587, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2840, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2839, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1672, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99238, + "range": "± 49", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 369381, + "range": "± 374", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1424218, + "range": "± 2229", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6138085, + "range": "± 66092", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 31199139, + "range": "± 210961", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 55049431931, + "range": "± 508535887", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 9273225266, + "range": "± 77078892", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "georgwiese@gmail.com", + "name": "Georg Wiese", + "username": "georgwiese" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": true, + "id": "550a1e680a566f270d666b0fef86e7c09b85f5f1", + "message": "Log JIT statistics (#2273)\n\nCurrently, it is hard to know for which machines the WitJITGen worked.\nWith this PR, we can see it in the debug log:\n\n```\n$ POWDR_JIT_OPT_LEVEL=1 RUST_LOG=debug cargo run pil test_data/std/poseidon_gl_test.asm -o output -f\n...\n[00:00:10 (ETA: 00:00:00)] ████████████████████ 100% - Starting... Finalizing VM: Main machine (Dynamic)\nSecondary machine 0: main_poseidon (BlockMachine): 5 / 5 blocks computed via JIT.\n155 of 256 rows are used in machine 'Secondary machine 0: main_poseidon (BlockMachine)'.\n\n == Witgen profile (532 events)\n 96.9% ( 10.4s): JIT-compilation\n 2.5% ( 268.6ms): Secondary machine 0: main_poseidon (BlockMachine)\n 0.5% ( 56.3ms): witgen (outer code)\n 0.1% ( 8.7ms): Main machine (Dynamic)\n 0.0% ( 3.2ms): FixedLookup\n 0.0% ( 2.1µs): range constraint multiplicity witgen\n ---------------------------\n ==> Total: 10.75908525s\n\n$ cargo run -r --features plonky3 --bin powdr-rs compile riscv/tests/riscv_data/keccak -o output --max-degree-log 18 --field gl --coprocessors arith\n...\n$ cargo run -r --features plonky3 pil output/keccak.asm -o output -f --field gl --prove-with mock --linker-mode bus\n...\n[00:00:15 (ETA: 00:00:00)] ████████████████████ 100% - 94652 rows/s, 12304k identities/s, 100% progress Finalizing VM: Main machine (Dynamic)\nMachine Secondary machine 0: main_arith (BlockMachine) is never used at runtime, so we remove it.\nSecondary machine 1: main_binary (BlockMachine): 0 / 50462 blocks computed via JIT.\n201848 of 262144 rows are used in machine 'Secondary machine 1: main_binary (BlockMachine)'.\n40180 of 65536 rows are used in machine 'Secondary machine 2: main_memory (DoubleSortedWitnesses32)'.\nSecondary machine 3: main_poseidon_gl (BlockMachine): 0 / 1 blocks computed via JIT.\n31 of 32 rows are used in machine 'Secondary machine 3: main_poseidon_gl (BlockMachine)'.\n362234 of 524288 rows are used in machine 'Secondary machine 5: main_regs (DoubleSortedWitnesses32)'.\nSecondary machine 6: main_shift (BlockMachine): 0 / 11734 blocks computed via JIT.\n46936 of 65536 rows are used in machine 'Secondary machine 6: main_shift (BlockMachine)'.\nSecondary machine 7: main_split_gl (BlockMachine): 0 / 7 blocks computed via JIT.\n56 of 64 rows are used in machine 'Secondary machine 7: main_split_gl (BlockMachine)'.\n\n == Witgen profile (2554854 events)\n 48.7% ( 8.0s): Secondary machine 1: main_binary (BlockMachine)\n 18.4% ( 3.0s): Main machine (Dynamic)\n 12.4% ( 2.0s): Secondary machine 6: main_shift (BlockMachine)\n 10.5% ( 1.7s): FixedLookup\n 6.1% ( 999.6ms): Secondary machine 5: main_regs (DoubleSortedWitnesses32)\n 2.5% ( 404.6ms): witgen (outer code)\n 0.7% ( 114.5ms): Secondary machine 7: main_split_gl (BlockMachine)\n 0.5% ( 78.8ms): Secondary machine 3: main_poseidon_gl (BlockMachine)\n 0.3% ( 54.9ms): Secondary machine 2: main_memory (DoubleSortedWitnesses32)\n 0.0% ( 5.0ms): range constraint multiplicity witgen\n 0.0% ( 9.4µs): Secondary machine 4: main_publics (WriteOnceMemory)\n ---------------------------\n ==> Total: 16.446211875s\n```", + "timestamp": "2024-12-20T12:20:20Z", + "tree_id": "b53f995fd9c92145b963c706d89543813de15d3d", + "url": "https://github.com/powdr-labs/powdr/commit/550a1e680a566f270d666b0fef86e7c09b85f5f1" + }, + "date": 1734700702027, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6867, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 596, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1079, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29085, + "range": "± 42", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24301, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24268, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17117, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 775233, + "range": "± 1782", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2671537, + "range": "± 2768", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9374895, + "range": "± 8410", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34448727, + "range": "± 38307", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 137316419, + "range": "± 189614", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3586, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2847, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2847, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1671, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99566, + "range": "± 64", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 372203, + "range": "± 268", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1434227, + "range": "± 1661", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6088672, + "range": "± 8060", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30444770, + "range": "± 95423", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 51036888084, + "range": "± 385933581", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8116167714, + "range": "± 21552285", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "96b36600da04c64223c81d87418760b2511b2624", + "message": "Single step with branching", + "timestamp": "2024-12-20T12:51:48Z", + "url": "https://github.com/powdr-labs/powdr/pull/2274/commits/96b36600da04c64223c81d87418760b2511b2624" + }, + "date": 1734701220772, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7084, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 597, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1067, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28942, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24166, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24142, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17077, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 778524, + "range": "± 597", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2688781, + "range": "± 2190", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9403135, + "range": "± 10568", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34461733, + "range": "± 67913", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 137222567, + "range": "± 182883", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3581, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2856, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2861, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1671, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 100204, + "range": "± 57", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 371252, + "range": "± 244", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1429186, + "range": "± 1828", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6092703, + "range": "± 7824", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30427668, + "range": "± 79846", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 51725605270, + "range": "± 389298426", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8231824977, + "range": "± 25014906", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "25b97c23f0bd90162ce7878ccd315368e8b6683d", + "message": "Sponge construction for keccak syscall & Intruction::keccakf", + "timestamp": "2024-12-20T12:51:48Z", + "url": "https://github.com/powdr-labs/powdr/pull/2263/commits/25b97c23f0bd90162ce7878ccd315368e8b6683d" + }, + "date": 1734701616913, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6806, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 588, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1055, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28779, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24071, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24005, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17034, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 785167, + "range": "± 851", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2712594, + "range": "± 3080", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9499825, + "range": "± 9843", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34952718, + "range": "± 148236", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138837056, + "range": "± 259278", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3580, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2829, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2832, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1674, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99101, + "range": "± 56", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 370895, + "range": "± 330", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1430559, + "range": "± 1215", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6100601, + "range": "± 9528", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30426899, + "range": "± 92702", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 51843388517, + "range": "± 313613231", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8290926692, + "range": "± 35649698", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "09457e990061d133857204c6bb730b9cfd38f933", + "message": "improve executor handwritten witgen performance", + "timestamp": "2024-12-20T12:51:48Z", + "url": "https://github.com/powdr-labs/powdr/pull/2269/commits/09457e990061d133857204c6bb730b9cfd38f933" + }, + "date": 1734701801254, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7072, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 628, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1119, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29696, + "range": "± 45", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24818, + "range": "± 26", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24700, + "range": "± 29", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17425, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 803042, + "range": "± 1207", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2783748, + "range": "± 3586", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9735228, + "range": "± 51917", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35359360, + "range": "± 66852", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140555169, + "range": "± 425789", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3603, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2860, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2845, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1675, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99656, + "range": "± 113", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 370300, + "range": "± 410", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1429499, + "range": "± 2599", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6125171, + "range": "± 28201", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30494288, + "range": "± 242167", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 51412529670, + "range": "± 646388515", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8424813645, + "range": "± 40812279", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "chriseth", + "username": "chriseth", + "email": "chris@ethereum.org" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "c1b776312ad97a311631ee52935ed73ff88527b6", + "message": "use can_process (#2256)\n\nCo-authored-by: Georg Wiese ", + "timestamp": "2024-12-20T13:31:41Z", + "url": "https://github.com/powdr-labs/powdr/commit/c1b776312ad97a311631ee52935ed73ff88527b6" + }, + "date": 1734703051346, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6909, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 596, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1070, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28737, + "range": "± 338", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24005, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 23964, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17027, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 780395, + "range": "± 1330", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2685671, + "range": "± 3463", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9426686, + "range": "± 24952", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34507784, + "range": "± 69403", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 137608009, + "range": "± 285771", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3586, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2842, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2843, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1676, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 98775, + "range": "± 97", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 372955, + "range": "± 390", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1428301, + "range": "± 1442", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6055422, + "range": "± 8161", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30346283, + "range": "± 134302", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 51515805060, + "range": "± 619615795", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8478610431, + "range": "± 67962687", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "chris@ethereum.org", + "name": "chriseth", + "username": "chriseth" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": true, + "id": "c1b776312ad97a311631ee52935ed73ff88527b6", + "message": "use can_process (#2256)\n\nCo-authored-by: Georg Wiese ", + "timestamp": "2024-12-20T13:31:41Z", + "tree_id": "588748f5f09cdfad5d1ff0dee8354900cc363a46", + "url": "https://github.com/powdr-labs/powdr/commit/c1b776312ad97a311631ee52935ed73ff88527b6" + }, + "date": 1734704908217, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7243, + "range": "± 33", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 678, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1127, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29849, + "range": "± 29", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24947, + "range": "± 28", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24919, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17716, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 868603, + "range": "± 1127", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 3008587, + "range": "± 2345", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 10486384, + "range": "± 9814", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 38170050, + "range": "± 40170", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 148987147, + "range": "± 183049", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3723, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2900, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2899, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1681, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99014, + "range": "± 116", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 369166, + "range": "± 933", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1428360, + "range": "± 1990", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6074336, + "range": "± 7494", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30427870, + "range": "± 83866", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 51559435382, + "range": "± 393116437", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8432540971, + "range": "± 47303916", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "be728959e82f53bfe1d9419912e654ad82870719", + "message": "JIT for block machines with non-rectangular shapes", + "timestamp": "2024-12-20T14:02:48Z", + "url": "https://github.com/powdr-labs/powdr/pull/2275/commits/be728959e82f53bfe1d9419912e654ad82870719" + }, + "date": 1734705793622, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6817, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 588, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1068, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28901, + "range": "± 32", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24188, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24166, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17148, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 773794, + "range": "± 866", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2676139, + "range": "± 2224", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9360734, + "range": "± 10505", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34477211, + "range": "± 47283", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 136597073, + "range": "± 196218", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3586, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2867, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2845, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1671, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99427, + "range": "± 48", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 372491, + "range": "± 460", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1430297, + "range": "± 1518", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6130336, + "range": "± 8611", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30579928, + "range": "± 65449", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 50967277885, + "range": "± 422993948", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "ff40622aabfea9ed22e6c09ba8e8d9f13baa3726", + "message": "Extract test setup functions", + "timestamp": "2024-12-20T14:02:48Z", + "url": "https://github.com/powdr-labs/powdr/pull/2276/commits/ff40622aabfea9ed22e6c09ba8e8d9f13baa3726" + }, + "date": 1734707315834, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7067, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 595, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1091, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29628, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24899, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24704, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17502, + "range": "± 27", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 798544, + "range": "± 745", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2763871, + "range": "± 2252", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9644400, + "range": "± 14024", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35388533, + "range": "± 60535", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140426480, + "range": "± 201581", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3598, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2856, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2850, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1687, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99217, + "range": "± 62", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 372069, + "range": "± 427", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1434175, + "range": "± 1525", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6129699, + "range": "± 10262", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 31247335, + "range": "± 133620", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 51843405535, + "range": "± 451275457", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8555179768, + "range": "± 44158553", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "c5253f77240670bbf671fdd7ab2f84977cc2129d", + "message": "improve executor handwritten witgen performance", + "timestamp": "2024-12-20T14:02:48Z", + "url": "https://github.com/powdr-labs/powdr/pull/2269/commits/c5253f77240670bbf671fdd7ab2f84977cc2129d" + }, + "date": 1734710427049, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6858, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 590, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1086, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29282, + "range": "± 29", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24341, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24269, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17127, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 782692, + "range": "± 1958", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2693084, + "range": "± 6375", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9413961, + "range": "± 55643", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34421060, + "range": "± 145807", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138303713, + "range": "± 1203962", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3609, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2849, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2855, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1692, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 102465, + "range": "± 46", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 380014, + "range": "± 343", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1448444, + "range": "± 1864", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6165575, + "range": "± 27374", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30832354, + "range": "± 222546", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 52610851990, + "range": "± 564121606", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8696031359, + "range": "± 75447069", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "ae675db64b55355e0ebc1ac76819a6a814a32b36", + "message": "Extract test setup functions", + "timestamp": "2024-12-20T14:02:48Z", + "url": "https://github.com/powdr-labs/powdr/pull/2276/commits/ae675db64b55355e0ebc1ac76819a6a814a32b36" + }, + "date": 1734712923145, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6879, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 592, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1085, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28705, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24005, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 23947, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17305, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 780211, + "range": "± 1003", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2700994, + "range": "± 4666", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9427264, + "range": "± 18456", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34570458, + "range": "± 57409", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 137547576, + "range": "± 439071", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3622, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2863, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2855, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1687, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99924, + "range": "± 77", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 372655, + "range": "± 388", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1438743, + "range": "± 1159", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6103103, + "range": "± 8707", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30441205, + "range": "± 70793", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 51123932127, + "range": "± 453710233", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8408805034, + "range": "± 72055433", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "06cab2f7f0b7733215e9e31476c8c06f39009f3e", + "message": "JIT for block machines with non-rectangular shapes", + "timestamp": "2024-12-20T14:02:48Z", + "url": "https://github.com/powdr-labs/powdr/pull/2275/commits/06cab2f7f0b7733215e9e31476c8c06f39009f3e" + }, + "date": 1734713107624, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7114, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 595, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1077, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29368, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24292, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24327, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17082, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 796583, + "range": "± 1319", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2746072, + "range": "± 3847", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9635783, + "range": "± 45618", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35804517, + "range": "± 263740", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 142367416, + "range": "± 744519", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3650, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2919, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2878, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1692, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99114, + "range": "± 48", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 369416, + "range": "± 275", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1431211, + "range": "± 2792", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6147196, + "range": "± 36269", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30851203, + "range": "± 197862", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 54188864121, + "range": "± 831506319", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "38e371ff647499c52d8c54a299adb01ca47e3a81", + "message": "Refactor tests of `BlockMachineProcessor`", + "timestamp": "2024-12-20T14:02:48Z", + "url": "https://github.com/powdr-labs/powdr/pull/2276/commits/38e371ff647499c52d8c54a299adb01ca47e3a81" + }, + "date": 1734714725670, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7389, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 628, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1190, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 30336, + "range": "± 35", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24294, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24285, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17170, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 841999, + "range": "± 852", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2893949, + "range": "± 3413", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 10081692, + "range": "± 16580", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 36922933, + "range": "± 36214", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 144689075, + "range": "± 140719", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3594, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2858, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2896, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1675, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 100902, + "range": "± 59", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 375425, + "range": "± 483", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1442109, + "range": "± 1516", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6134927, + "range": "± 6851", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30459505, + "range": "± 62885", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 51099634078, + "range": "± 696669438", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8807267851, + "range": "± 206023197", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "c83472f888e1b35816cbb027af4b5c3d8686a0cf", + "message": "JIT for block machines with non-rectangular shapes", + "timestamp": "2024-12-20T14:02:48Z", + "url": "https://github.com/powdr-labs/powdr/pull/2275/commits/c83472f888e1b35816cbb027af4b5c3d8686a0cf" + }, + "date": 1734715540809, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6968, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 588, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1074, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29526, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24705, + "range": "± 28", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24669, + "range": "± 28", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17331, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 790308, + "range": "± 1347", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2725645, + "range": "± 2875", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9464504, + "range": "± 28703", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34746973, + "range": "± 50711", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138482612, + "range": "± 572953", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3593, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2862, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2852, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1690, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 101295, + "range": "± 155", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 377715, + "range": "± 632", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1456567, + "range": "± 2415", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6163752, + "range": "± 10363", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30586058, + "range": "± 87546", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 52153016112, + "range": "± 447767972", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "b58afc1fab25835e7ad33e85604369ed01c41c89", + "message": "Single step with branching", + "timestamp": "2024-12-20T14:02:48Z", + "url": "https://github.com/powdr-labs/powdr/pull/2274/commits/b58afc1fab25835e7ad33e85604369ed01c41c89" + }, + "date": 1734717735069, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7328, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 748, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1095, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29827, + "range": "± 54", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24972, + "range": "± 61", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24943, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17788, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 784574, + "range": "± 966", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2736478, + "range": "± 3148", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9509194, + "range": "± 27510", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35037442, + "range": "± 43571", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138010072, + "range": "± 360378", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3665, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2962, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2928, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1714, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99021, + "range": "± 64", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 371680, + "range": "± 430", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1437908, + "range": "± 1499", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6127768, + "range": "± 8054", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30522632, + "range": "± 107763", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 51564892181, + "range": "± 434091227", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8787947601, + "range": "± 143200326", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "65952c75c6aa945f4615d8846d976afbacab000d", + "message": "JIT for block machines with non-rectangular shapes", + "timestamp": "2024-12-20T14:02:48Z", + "url": "https://github.com/powdr-labs/powdr/pull/2275/commits/65952c75c6aa945f4615d8846d976afbacab000d" + }, + "date": 1734719993234, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7051, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 593, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1057, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29342, + "range": "± 37", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24428, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24356, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17233, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 783257, + "range": "± 1040", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2704223, + "range": "± 3211", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9410808, + "range": "± 14036", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34546594, + "range": "± 159075", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 137926373, + "range": "± 182797", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3605, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2850, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2852, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1677, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99647, + "range": "± 43", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 372754, + "range": "± 345", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1429714, + "range": "± 1652", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6089970, + "range": "± 7008", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30311128, + "range": "± 74907", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 51021125710, + "range": "± 517324931", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8586233680, + "range": "± 48396382", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "7a6dae21fd1f78e457109deba974c6b3fc03f202", + "message": "JIT for block machines with non-rectangular shapes", + "timestamp": "2024-12-20T14:02:48Z", + "url": "https://github.com/powdr-labs/powdr/pull/2275/commits/7a6dae21fd1f78e457109deba974c6b3fc03f202" + }, + "date": 1734721739375, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6925, + "range": "± 36", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 593, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1083, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 30339, + "range": "± 42", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 25325, + "range": "± 134", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 25167, + "range": "± 202", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17979, + "range": "± 87", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 805779, + "range": "± 8660", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2744050, + "range": "± 4916", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9592733, + "range": "± 37529", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35336051, + "range": "± 352052", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 140558285, + "range": "± 874582", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3704, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2863, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2873, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1673, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 101434, + "range": "± 1117", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 378585, + "range": "± 3523", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1445730, + "range": "± 3442", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6138350, + "range": "± 31915", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30890322, + "range": "± 257909", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 53711371373, + "range": "± 483726570", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 9132281324, + "range": "± 43023335", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "bd5acf7221ef5d4669da422966629f7d54b0686a", + "message": "JIT for block machines with non-rectangular shapes", + "timestamp": "2024-12-20T14:02:48Z", + "url": "https://github.com/powdr-labs/powdr/pull/2275/commits/bd5acf7221ef5d4669da422966629f7d54b0686a" + }, + "date": 1734724278376, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6844, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 590, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1060, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29709, + "range": "± 25", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24832, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24728, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17555, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 788260, + "range": "± 811", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2720650, + "range": "± 2679", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9480233, + "range": "± 13338", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34830691, + "range": "± 86484", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138200243, + "range": "± 295752", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3589, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2853, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2874, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1677, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99394, + "range": "± 59", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 372146, + "range": "± 310", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1430268, + "range": "± 1042", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6169636, + "range": "± 8606", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 31656883, + "range": "± 187009", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 51490996680, + "range": "± 466827263", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "a689dd941ca352963e3a484df9d23861b0690dec", + "message": "Fixes in Goldilocks field implementation", + "timestamp": "2024-12-20T14:02:48Z", + "url": "https://github.com/powdr-labs/powdr/pull/2277/commits/a689dd941ca352963e3a484df9d23861b0690dec" + }, + "date": 1734724905502, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7007, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 591, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1063, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29235, + "range": "± 32", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24406, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24390, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17373, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 788729, + "range": "± 1686", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2718292, + "range": "± 4033", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9618986, + "range": "± 40779", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35584495, + "range": "± 229434", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141638641, + "range": "± 1392315", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3631, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2893, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2860, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1692, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 98826, + "range": "± 45", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 369072, + "range": "± 255", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1427401, + "range": "± 1748", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6109103, + "range": "± 26671", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 31541111, + "range": "± 263726", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 56129178937, + "range": "± 857098120", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 9340706660, + "range": "± 85570633", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "Georg Wiese", + "username": "georgwiese", + "email": "georgwiese@gmail.com" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "61510810630c5c195784f70ad68c83bd04674400", + "message": "Fixes in Goldilocks field implementation (#2277)\n\nPulled out of #2276. Needed to make the code generated for the Binary\nmachine compile.", + "timestamp": "2024-12-20T21:08:29Z", + "url": "https://github.com/powdr-labs/powdr/commit/61510810630c5c195784f70ad68c83bd04674400" + }, + "date": 1734730502928, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6831, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 588, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1071, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29007, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24347, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24283, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17201, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 783405, + "range": "± 824", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2713887, + "range": "± 5396", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9501632, + "range": "± 31231", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34792927, + "range": "± 83230", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138194972, + "range": "± 1171164", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3598, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2841, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2844, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1673, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 98435, + "range": "± 91", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 369087, + "range": "± 212", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1428411, + "range": "± 1536", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6075012, + "range": "± 16781", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30446187, + "range": "± 107056", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 51569768336, + "range": "± 376636953", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8616001308, + "range": "± 107922316", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "email": "georgwiese@gmail.com", + "name": "Georg Wiese", + "username": "georgwiese" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": true, + "id": "61510810630c5c195784f70ad68c83bd04674400", + "message": "Fixes in Goldilocks field implementation (#2277)\n\nPulled out of #2276. Needed to make the code generated for the Binary\nmachine compile.", + "timestamp": "2024-12-20T21:08:29Z", + "tree_id": "4baf22e5ff106c1edf841f0c565c5a36fc09244a", + "url": "https://github.com/powdr-labs/powdr/commit/61510810630c5c195784f70ad68c83bd04674400" + }, + "date": 1734732351240, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6898, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 591, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1091, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28769, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24198, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24177, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17124, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 780271, + "range": "± 1321", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2692503, + "range": "± 3611", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9441361, + "range": "± 16681", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34612979, + "range": "± 71584", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138148330, + "range": "± 1233852", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3602, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2875, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2873, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1679, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99082, + "range": "± 47", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 371550, + "range": "± 312", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1429058, + "range": "± 1538", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6114443, + "range": "± 38314", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 31366813, + "range": "± 143696", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 51701499321, + "range": "± 502057813", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8506317972, + "range": "± 85669956", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "4364cb7034b59f5b5d9b59777d80cf6c43dc833d", + "message": "Sponge construction for keccak syscall & Intruction::keccakf", + "timestamp": "2024-12-20T21:40:21Z", + "url": "https://github.com/powdr-labs/powdr/pull/2263/commits/4364cb7034b59f5b5d9b59777d80cf6c43dc833d" + }, + "date": 1734732892458, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6797, + "range": "± 47", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 594, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1061, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28930, + "range": "± 31", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24077, + "range": "± 37", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24068, + "range": "± 79", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17115, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 782394, + "range": "± 1492", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2682420, + "range": "± 9393", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9370046, + "range": "± 28164", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34426105, + "range": "± 76227", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 137627186, + "range": "± 344817", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3595, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2860, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2866, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1687, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 100020, + "range": "± 102", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 370422, + "range": "± 495", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1431142, + "range": "± 2792", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6127994, + "range": "± 12168", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30546198, + "range": "± 82172", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 52086308494, + "range": "± 540863866", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8529117507, + "range": "± 32379956", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "ea93248205ef5be18c979c9073aa5e0eff14fd3b", + "message": "Sponge construction for keccak syscall & Intruction::keccakf", + "timestamp": "2024-12-20T21:40:21Z", + "url": "https://github.com/powdr-labs/powdr/pull/2263/commits/ea93248205ef5be18c979c9073aa5e0eff14fd3b" + }, + "date": 1734736615885, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6880, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 597, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1124, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29236, + "range": "± 28", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24357, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24363, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17276, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 790791, + "range": "± 1260", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2734029, + "range": "± 5073", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9555446, + "range": "± 24271", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34904210, + "range": "± 126314", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138866146, + "range": "± 720199", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3621, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2860, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2863, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1678, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 100256, + "range": "± 73", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 372860, + "range": "± 401", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1429960, + "range": "± 1922", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6104421, + "range": "± 12175", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30775813, + "range": "± 187673", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 53382492264, + "range": "± 711515850", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8853316509, + "range": "± 119121917", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "7361bac7f00aeb681256e62e6b63f72e9f0296dc", + "message": "pilopt: optimize until fixpoint", + "timestamp": "2024-12-20T21:40:21Z", + "url": "https://github.com/powdr-labs/powdr/pull/2225/commits/7361bac7f00aeb681256e62e6b63f72e9f0296dc" + }, + "date": 1734738115330, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6990, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 591, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1103, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29874, + "range": "± 45", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 25048, + "range": "± 51", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 26748, + "range": "± 35", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17712, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 794034, + "range": "± 1356", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2719685, + "range": "± 3338", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9488431, + "range": "± 22662", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34873281, + "range": "± 103225", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138582676, + "range": "± 364294", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3653, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2879, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2847, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1686, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99710, + "range": "± 44", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 370106, + "range": "± 292", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1435902, + "range": "± 2791", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6121811, + "range": "± 9127", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30558686, + "range": "± 137591", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 51638477582, + "range": "± 293483543", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8626517021, + "range": "± 47084276", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "3ab3699e3e9205efe9453af438633888c95486bb", + "message": "JIT for block machines with non-rectangular shapes", + "timestamp": "2024-12-21T00:52:36Z", + "url": "https://github.com/powdr-labs/powdr/pull/2275/commits/3ab3699e3e9205efe9453af438633888c95486bb" + }, + "date": 1734746188199, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7080, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 597, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1068, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28800, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24032, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24020, + "range": "± 19", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 16964, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 787900, + "range": "± 877", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2721277, + "range": "± 2972", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9527896, + "range": "± 11798", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34948626, + "range": "± 46497", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138579241, + "range": "± 159318", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3621, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2858, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2858, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1706, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99698, + "range": "± 69", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 369979, + "range": "± 326", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1423928, + "range": "± 1808", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6135907, + "range": "± 7970", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30568561, + "range": "± 70917", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 51045654744, + "range": "± 472924919", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8573350505, + "range": "± 34044577", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "719b32f030bb13e109df8a77ed37cc45e3e2cb26", + "message": "Sponge construction for keccak syscall & Intruction::keccakf", + "timestamp": "2024-12-21T00:52:36Z", + "url": "https://github.com/powdr-labs/powdr/pull/2263/commits/719b32f030bb13e109df8a77ed37cc45e3e2cb26" + }, + "date": 1734789130370, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6866, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 589, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1087, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28866, + "range": "± 31", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24134, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24078, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 16994, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 788912, + "range": "± 1782", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2715233, + "range": "± 3758", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9547401, + "range": "± 35199", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35092175, + "range": "± 115403", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139085870, + "range": "± 822229", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3579, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2847, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2835, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1674, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 100044, + "range": "± 430", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 374992, + "range": "± 618", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1437092, + "range": "± 1517", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6164682, + "range": "± 43226", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30694383, + "range": "± 189567", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 53031962900, + "range": "± 425366122", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8868775877, + "range": "± 87632852", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "59f17a2a0997989fe9cb1e8e406cb4266d4bf081", + "message": "Remove `BitAnd for GoldilocksField`", + "timestamp": "2024-12-21T00:52:36Z", + "url": "https://github.com/powdr-labs/powdr/pull/2278/commits/59f17a2a0997989fe9cb1e8e406cb4266d4bf081" + }, + "date": 1734792880491, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6903, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 595, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1094, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28877, + "range": "± 31", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24269, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24207, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17175, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 797053, + "range": "± 744", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2738236, + "range": "± 4090", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9574150, + "range": "± 10389", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34904960, + "range": "± 40865", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139488121, + "range": "± 182431", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3593, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2841, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2853, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1675, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 101796, + "range": "± 75", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 382252, + "range": "± 337", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1468219, + "range": "± 2068", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6236938, + "range": "± 7170", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30857129, + "range": "± 81041", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 51239452544, + "range": "± 641536510", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8517963885, + "range": "± 35302828", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "506e6250eb8b296dd7b16a5c731a2e51dd88e5a2", + "message": "JIT for block machines with non-rectangular shapes", + "timestamp": "2024-12-21T00:52:36Z", + "url": "https://github.com/powdr-labs/powdr/pull/2275/commits/506e6250eb8b296dd7b16a5c731a2e51dd88e5a2" + }, + "date": 1734793133334, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7557, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 618, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1399, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 30077, + "range": "± 53", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 25217, + "range": "± 30", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 25166, + "range": "± 99", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17565, + "range": "± 35", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 841653, + "range": "± 2131", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2893475, + "range": "± 4332", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 10085014, + "range": "± 17006", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 36697808, + "range": "± 411759", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 144754675, + "range": "± 306979", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3689, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2910, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2867, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1672, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99402, + "range": "± 92", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 372997, + "range": "± 361", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1440865, + "range": "± 2474", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6120197, + "range": "± 48037", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30863813, + "range": "± 329170", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 51934743738, + "range": "± 392539631", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8695666879, + "range": "± 89497375", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "ee8851326e5a578c89ab79a5681b9d74dce64a13", + "message": "Improve error reporting in BlockMachineProcessor", + "timestamp": "2024-12-21T00:52:36Z", + "url": "https://github.com/powdr-labs/powdr/pull/2279/commits/ee8851326e5a578c89ab79a5681b9d74dce64a13" + }, + "date": 1734794608598, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 7043, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 645, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1096, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 28873, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24153, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24138, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17075, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 786380, + "range": "± 1271", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2701884, + "range": "± 6578", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9465622, + "range": "± 19195", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34700426, + "range": "± 71558", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138269359, + "range": "± 200002", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3584, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2832, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2836, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1675, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 100208, + "range": "± 48", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 372516, + "range": "± 401", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1437025, + "range": "± 1613", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6092626, + "range": "± 8619", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30485586, + "range": "± 94273", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 51958100760, + "range": "± 483479954", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8704781766, + "range": "± 64494309", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "9d1fd785cd2e25bfeba4f257ccb7d7d7fb613ae6", + "message": "JIT for block machines with non-rectangular shapes", + "timestamp": "2024-12-21T00:52:36Z", + "url": "https://github.com/powdr-labs/powdr/pull/2275/commits/9d1fd785cd2e25bfeba4f257ccb7d7d7fb613ae6" + }, + "date": 1734796776241, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6870, + "range": "± 27", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 603, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1063, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29150, + "range": "± 34", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24313, + "range": "± 34", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24315, + "range": "± 63", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17255, + "range": "± 81", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 787642, + "range": "± 1730", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2711792, + "range": "± 7937", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9499744, + "range": "± 15476", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34823329, + "range": "± 147869", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138763390, + "range": "± 229509", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3597, + "range": "± 9", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2872, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2868, + "range": "± 36", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1678, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 100042, + "range": "± 86", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 374312, + "range": "± 424", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1438692, + "range": "± 2371", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6125129, + "range": "± 13086", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30530829, + "range": "± 113313", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 51334632970, + "range": "± 363749147", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8608851378, + "range": "± 31936299", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "7a1b451bf74eedbb34e84d77f4e38313f853ea21", + "message": "Update stwo dependency to the latest version", + "timestamp": "2024-12-21T19:29:28Z", + "url": "https://github.com/powdr-labs/powdr/pull/2264/commits/7a1b451bf74eedbb34e84d77f4e38313f853ea21" + }, + "date": 1734825146132, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6835, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 604, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1095, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29326, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24597, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24549, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17291, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 784187, + "range": "± 1986", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2695787, + "range": "± 7978", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9498875, + "range": "± 56995", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35474667, + "range": "± 98758", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141304376, + "range": "± 1182693", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 2704, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2164, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2137, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1263, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 90909, + "range": "± 50", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 341154, + "range": "± 287", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1334959, + "range": "± 1502", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 5937105, + "range": "± 18547", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 32273258, + "range": "± 218695", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 53994483956, + "range": "± 999988671", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 9233790713, + "range": "± 228918236", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "1c957148a40aae12c39fc18969e73a5b00b6f61a", + "message": "Update stwo dependency to the latest version", + "timestamp": "2024-12-21T19:29:28Z", + "url": "https://github.com/powdr-labs/powdr/pull/2264/commits/1c957148a40aae12c39fc18969e73a5b00b6f61a" + }, + "date": 1734826895575, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6946, + "range": "± 49", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 601, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1114, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29357, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24551, + "range": "± 18", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24510, + "range": "± 17", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17324, + "range": "± 10", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 795551, + "range": "± 745", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2757648, + "range": "± 2648", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9607167, + "range": "± 10053", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35091375, + "range": "± 33810", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139444763, + "range": "± 165161", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 2777, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2170, + "range": "± 3", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2178, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1263, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 91799, + "range": "± 139", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 342567, + "range": "± 319", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1348540, + "range": "± 1639", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 5966902, + "range": "± 9089", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 31398753, + "range": "± 134731", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 51286718283, + "range": "± 457946001", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8605965713, + "range": "± 16048808", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "406bb8ed785955746d7b69813ef8da20c829dcc1", + "message": "Update stwo dependency to the latest version", + "timestamp": "2024-12-21T19:29:28Z", + "url": "https://github.com/powdr-labs/powdr/pull/2264/commits/406bb8ed785955746d7b69813ef8da20c829dcc1" + }, + "date": 1734953975435, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6882, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 589, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1085, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 30610, + "range": "± 47", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 25636, + "range": "± 101", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 25659, + "range": "± 34", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 18133, + "range": "± 20", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 803625, + "range": "± 1920", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2779803, + "range": "± 10926", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9762652, + "range": "± 41695", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35771920, + "range": "± 375131", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 141155856, + "range": "± 1379821", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 2716, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2187, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2151, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1277, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 93532, + "range": "± 294", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 351906, + "range": "± 1053", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1385146, + "range": "± 5102", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6095115, + "range": "± 17533", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 32164195, + "range": "± 293180", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 52295745532, + "range": "± 381695570", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8804828270, + "range": "± 59802664", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "9af70b57e61d1870120f07b046c76c08a56bb05d", + "message": "improve executor handwritten witgen performance", + "timestamp": "2024-12-21T19:29:28Z", + "url": "https://github.com/powdr-labs/powdr/pull/2269/commits/9af70b57e61d1870120f07b046c76c08a56bb05d" + }, + "date": 1734954116414, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6861, + "range": "± 12", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 618, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1069, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29226, + "range": "± 26", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24530, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24418, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17256, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 806152, + "range": "± 1322", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2741455, + "range": "± 3454", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9563340, + "range": "± 24050", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35166035, + "range": "± 105081", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139638134, + "range": "± 291895", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3581, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2843, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2845, + "range": "± 6", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1668, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99156, + "range": "± 65", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 369995, + "range": "± 290", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1425833, + "range": "± 1644", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6099301, + "range": "± 6567", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30411678, + "range": "± 183247", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 51128102747, + "range": "± 379361828", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8526302591, + "range": "± 61700084", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "committer": { + "name": "powdr-labs", + "username": "powdr-labs" + }, + "id": "f2827fd8e893451769381908f40e6cfc7d798599", + "message": "free input data", + "timestamp": "2024-12-21T19:29:28Z", + "url": "https://github.com/powdr-labs/powdr/pull/2239/commits/f2827fd8e893451769381908f40e6cfc7d798599" + }, + "date": 1734955220735, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6855, + "range": "± 13", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 600, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1077, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29025, + "range": "± 30", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24327, + "range": "± 36", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24261, + "range": "± 24", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17171, + "range": "± 136", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 791385, + "range": "± 4445", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2740474, + "range": "± 3883", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9554337, + "range": "± 38200", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 35049911, + "range": "± 122190", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 139663898, + "range": "± 425382", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 3636, + "range": "± 14", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2903, + "range": "± 11", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2958, + "range": "± 7", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1685, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 99747, + "range": "± 64", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 371183, + "range": "± 1420", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1435353, + "range": "± 2588", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 6169421, + "range": "± 35839", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 30707054, + "range": "± 126926", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 52739721854, + "range": "± 558771042", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8838162726, + "range": "± 73968820", + "unit": "ns/iter" + } + ] + }, + { + "commit": { + "author": { + "name": "ShuangWu121", + "username": "ShuangWu121", + "email": "47602565+ShuangWu121@users.noreply.github.com" + }, + "committer": { + "name": "GitHub", + "username": "web-flow", + "email": "noreply@github.com" + }, + "id": "2e978667b235ef221bb3ba0a9483bf31ecca3938", + "message": "Update stwo dependency to the latest version (#2264)\n\n### PR: Update Powdr's `stwo` Dependency and Align Toolchain\n\nThis PR updates Powdr's `stwo` dependency to the latest version, which\nnow uses the `nightly-2024-12-17` Rust toolchain. To ensure\ncompatibility, Powdr's toolchain has also been aligned with this new\nnightly version.\n\nAs part of this update:\n- Several modifications were made to address stricter rules and lints\nintroduced by the newer version of Clippy.\n- System dependencies, including `uuid-dev` and `libgrpc++-dev`, were\nadded to resolve build and runtime issues brought about by updated\ndependencies and toolchain requirements.", + "timestamp": "2024-12-23T11:48:52Z", + "url": "https://github.com/powdr-labs/powdr/commit/2e978667b235ef221bb3ba0a9483bf31ecca3938" + }, + "date": 1734956087114, + "tool": "cargo", + "benches": [ + { + "name": "evaluator-benchmark/std::math::ff::inverse", + "value": 6968, + "range": "± 8", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::reduce", + "value": 597, + "range": "± 0", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/std::math::ff::mul", + "value": 1086, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_879882356", + "value": 29017, + "range": "± 15", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1882356", + "value": 24276, + "range": "± 22", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_1187956", + "value": 24286, + "range": "± 16", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sqrt_56", + "value": 17212, + "range": "± 21", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_33", + "value": 780303, + "range": "± 1339", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_100", + "value": 2699264, + "range": "± 3331", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_300", + "value": 9451625, + "range": "± 16837", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_900", + "value": 34725522, + "range": "± 75532", + "unit": "ns/iter" + }, + { + "name": "evaluator-benchmark/sort_2700", + "value": 138187279, + "range": "± 154102", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_879882356", + "value": 2743, + "range": "± 2", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1882356", + "value": 2177, + "range": "± 4", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_1187956", + "value": 2150, + "range": "± 5", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sqrt_56", + "value": 1277, + "range": "± 1", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_33", + "value": 90688, + "range": "± 77", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_100", + "value": 340535, + "range": "± 343", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_300", + "value": 1351267, + "range": "± 1575", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_900", + "value": 5988157, + "range": "± 10066", + "unit": "ns/iter" + }, + { + "name": "jit-benchmark/sort_2700", + "value": 31679075, + "range": "± 95189", + "unit": "ns/iter" + }, + { + "name": "jit-witgen-benchmark/jit_witgen_benchmark", + "value": 51341589094, + "range": "± 400824452", + "unit": "ns/iter" + }, + { + "name": "executor-benchmark/keccak", + "value": 8711723253, + "range": "± 48170973", + "unit": "ns/iter" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/dev/bench/index.html b/dev/bench/index.html new file mode 100644 index 0000000000..6c887805e8 --- /dev/null +++ b/dev/bench/index.html @@ -0,0 +1,281 @@ + + + + + + + Benchmarks + + + + +
+ + + + + + + diff --git a/elasticlunr.min.js b/elasticlunr.min.js new file mode 100644 index 0000000000..94b20dd2ef --- /dev/null +++ b/elasticlunr.min.js @@ -0,0 +1,10 @@ +/** + * elasticlunr - http://weixsong.github.io + * Lightweight full-text search engine in Javascript for browser search and offline search. - 0.9.5 + * + * Copyright (C) 2017 Oliver Nightingale + * Copyright (C) 2017 Wei Song + * MIT Licensed + * @license + */ +!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},t.Pipeline.prototype.reset=function(){this._queue=[]},t.Pipeline.prototype.get=function(){return this._queue},t.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.DocumentStore,this.index={},this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},t.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;n._fields=e.fields,n._ref=e.ref,n.documentStore=t.DocumentStore.load(e.documentStore),n.pipeline=t.Pipeline.load(e.pipeline),n.index={};for(var i in e.index)n.index[i]=t.InvertedIndex.load(e.index[i]);return n},t.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new t.InvertedIndex,this},t.Index.prototype.setRef=function(e){return this._ref=e,this},t.Index.prototype.saveDocument=function(e){return this.documentStore=new t.DocumentStore(e),this},t.Index.prototype.addDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.addDoc(i,e),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",e,this)}},t.Index.prototype.removeDocByRef=function(e){if(e&&this.documentStore.isDocStored()!==!1&&this.documentStore.hasDoc(e)){var t=this.documentStore.getDoc(e);this.removeDoc(t,!1)}},t.Index.prototype.removeDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",e,this))}},t.Index.prototype.updateDoc=function(e,t){var t=void 0===t?!0:t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},t.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},t.Index.prototype.getFields=function(){return this._fields.slice()},t.Index.prototype.search=function(e,n){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var i=null;null!=n&&(i=JSON.stringify(n));for(var o=new t.Configuration(i,this.getFields()).get(),r={},s=Object.keys(e),u=0;u0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},t.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},t.Configuration=function(e,n){var e=e||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(e),this.buildUserConfig(i,n)}catch(o){t.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},t.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},t.Configuration.prototype.buildUserConfig=function(e,n){var i="OR",o=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(o=e.expand||o),"fields"in e)for(var r in e.fields)if(n.indexOf(r)>-1){var s=e.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||0===s.boost?s.boost:1,bool:s.bool||i,expand:u}}else t.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},t.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},t.Configuration.prototype.get=function(){return this.config},t.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e1;){if(r===e)return o;e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o]}return r===e?o:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;)e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return r>e?o:e>r?o+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,i=0,o=this.length,r=e.length,s=this.elements,u=e.elements;;){if(n>o-1||i>r-1)break;s[n]!==u[i]?s[n]u[i]&&i++:(t.add(s[n]),n++,i++)}return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,i;this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone();for(var o=0,r=n.toArray();o + + + + + Examples - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Examples

+

Besides the Hello World examples, you are encouraged to check out these more +complex and real-world use cases:

+ + +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/favicon.png b/favicon.png new file mode 100644 index 0000000000..4cd39d3f80 Binary files /dev/null and b/favicon.png differ diff --git a/favicon.svg b/favicon.svg new file mode 100644 index 0000000000..aa7906a2ba --- /dev/null +++ b/favicon.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/fonts/OPEN-SANS-LICENSE.txt b/fonts/OPEN-SANS-LICENSE.txt new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/fonts/OPEN-SANS-LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/fonts/SOURCE-CODE-PRO-LICENSE.txt b/fonts/SOURCE-CODE-PRO-LICENSE.txt new file mode 100644 index 0000000000..366206f549 --- /dev/null +++ b/fonts/SOURCE-CODE-PRO-LICENSE.txt @@ -0,0 +1,93 @@ +Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/fonts/fonts.css b/fonts/fonts.css new file mode 100644 index 0000000000..858efa5980 --- /dev/null +++ b/fonts/fonts.css @@ -0,0 +1,100 @@ +/* Open Sans is licensed under the Apache License, Version 2.0. See http://www.apache.org/licenses/LICENSE-2.0 */ +/* Source Code Pro is under the Open Font License. See https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL */ + +/* open-sans-300 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + src: local('Open Sans Light'), local('OpenSans-Light'), + url('open-sans-v17-all-charsets-300.woff2') format('woff2'); +} + +/* open-sans-300italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 300; + src: local('Open Sans Light Italic'), local('OpenSans-LightItalic'), + url('open-sans-v17-all-charsets-300italic.woff2') format('woff2'); +} + +/* open-sans-regular - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + src: local('Open Sans Regular'), local('OpenSans-Regular'), + url('open-sans-v17-all-charsets-regular.woff2') format('woff2'); +} + +/* open-sans-italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + src: local('Open Sans Italic'), local('OpenSans-Italic'), + url('open-sans-v17-all-charsets-italic.woff2') format('woff2'); +} + +/* open-sans-600 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + src: local('Open Sans SemiBold'), local('OpenSans-SemiBold'), + url('open-sans-v17-all-charsets-600.woff2') format('woff2'); +} + +/* open-sans-600italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 600; + src: local('Open Sans SemiBold Italic'), local('OpenSans-SemiBoldItalic'), + url('open-sans-v17-all-charsets-600italic.woff2') format('woff2'); +} + +/* open-sans-700 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + src: local('Open Sans Bold'), local('OpenSans-Bold'), + url('open-sans-v17-all-charsets-700.woff2') format('woff2'); +} + +/* open-sans-700italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), + url('open-sans-v17-all-charsets-700italic.woff2') format('woff2'); +} + +/* open-sans-800 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 800; + src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), + url('open-sans-v17-all-charsets-800.woff2') format('woff2'); +} + +/* open-sans-800italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 800; + src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'), + url('open-sans-v17-all-charsets-800italic.woff2') format('woff2'); +} + +/* source-code-pro-500 - latin_vietnamese_latin-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 500; + src: url('source-code-pro-v11-all-charsets-500.woff2') format('woff2'); +} diff --git a/fonts/open-sans-v17-all-charsets-300.woff2 b/fonts/open-sans-v17-all-charsets-300.woff2 new file mode 100644 index 0000000000..9f51be370f Binary files /dev/null and b/fonts/open-sans-v17-all-charsets-300.woff2 differ diff --git a/fonts/open-sans-v17-all-charsets-300italic.woff2 b/fonts/open-sans-v17-all-charsets-300italic.woff2 new file mode 100644 index 0000000000..2f54544841 Binary files /dev/null and b/fonts/open-sans-v17-all-charsets-300italic.woff2 differ diff --git a/fonts/open-sans-v17-all-charsets-600.woff2 b/fonts/open-sans-v17-all-charsets-600.woff2 new file mode 100644 index 0000000000..f503d558d5 Binary files /dev/null and b/fonts/open-sans-v17-all-charsets-600.woff2 differ diff --git a/fonts/open-sans-v17-all-charsets-600italic.woff2 b/fonts/open-sans-v17-all-charsets-600italic.woff2 new file mode 100644 index 0000000000..c99aabe803 Binary files /dev/null and b/fonts/open-sans-v17-all-charsets-600italic.woff2 differ diff --git a/fonts/open-sans-v17-all-charsets-700.woff2 b/fonts/open-sans-v17-all-charsets-700.woff2 new file mode 100644 index 0000000000..421a1ab25f Binary files /dev/null and b/fonts/open-sans-v17-all-charsets-700.woff2 differ diff --git a/fonts/open-sans-v17-all-charsets-700italic.woff2 b/fonts/open-sans-v17-all-charsets-700italic.woff2 new file mode 100644 index 0000000000..12ce3d20d1 Binary files /dev/null and b/fonts/open-sans-v17-all-charsets-700italic.woff2 differ diff --git a/fonts/open-sans-v17-all-charsets-800.woff2 b/fonts/open-sans-v17-all-charsets-800.woff2 new file mode 100644 index 0000000000..c94a223b03 Binary files /dev/null and b/fonts/open-sans-v17-all-charsets-800.woff2 differ diff --git a/fonts/open-sans-v17-all-charsets-800italic.woff2 b/fonts/open-sans-v17-all-charsets-800italic.woff2 new file mode 100644 index 0000000000..eed7d3c63d Binary files /dev/null and b/fonts/open-sans-v17-all-charsets-800italic.woff2 differ diff --git a/fonts/open-sans-v17-all-charsets-italic.woff2 b/fonts/open-sans-v17-all-charsets-italic.woff2 new file mode 100644 index 0000000000..398b68a085 Binary files /dev/null and b/fonts/open-sans-v17-all-charsets-italic.woff2 differ diff --git a/fonts/open-sans-v17-all-charsets-regular.woff2 b/fonts/open-sans-v17-all-charsets-regular.woff2 new file mode 100644 index 0000000000..8383e94c65 Binary files /dev/null and b/fonts/open-sans-v17-all-charsets-regular.woff2 differ diff --git a/fonts/source-code-pro-v11-all-charsets-500.woff2 b/fonts/source-code-pro-v11-all-charsets-500.woff2 new file mode 100644 index 0000000000..722245682f Binary files /dev/null and b/fonts/source-code-pro-v11-all-charsets-500.woff2 differ diff --git a/frontends/evm.html b/frontends/evm.html new file mode 100644 index 0000000000..3e7f27a433 --- /dev/null +++ b/frontends/evm.html @@ -0,0 +1,208 @@ + + + + + + EVM - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

EVM

+

An EVM frontend for powdr is under development. If you are interested, feel free to reach out!

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/frontends/index.html b/frontends/index.html new file mode 100644 index 0000000000..cc2b7dcee1 --- /dev/null +++ b/frontends/index.html @@ -0,0 +1,208 @@ + + + + + + Frontends - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Frontends

+

While any frontend VM can be implemented in powdr-asm, powdr comes with several frontends for popular instruction set architectures.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/frontends/riscv.html b/frontends/riscv.html new file mode 100644 index 0000000000..93f83eb763 --- /dev/null +++ b/frontends/riscv.html @@ -0,0 +1,244 @@ + + + + + + RISCV - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

RISCV

+

A RISCV frontend for powdr is already available.

+

How to run the Rust-RISCV example

+
# Install the riscv target for the rust compiler
+rustup target add riscv32imac-unknown-none-elf
+# Run the powdr-rs compiler. It will generate files in ./output/
+powdr-rs compile riscv/tests/riscv_data/sum -o output
+# Run powdr to compile powdr-asm to powdr-PIL and generate the witness
+# -i specifies the prover witness input (see below)
+powdr pil output/sum.asm -o output -f -i 10,2,4,6
+
+

The example Rust code verifies that a supplied list of integers sums up to a specified value.

+
#![no_main]
+#![no_std]
+
+extern crate alloc;
+use alloc::vec::Vec;
+
+use powdr_riscv_runtime::io::read_u32;
+
+#[no_mangle]
+pub fn main() {
+    // This is the sum claimed by the prover.
+    let proposed_sum = read_u32(0);
+    // The number of integers we want to sum.
+    let len = read_u32(1) as usize;
+    // Read the numbers from the prover and store them
+    // in a vector.
+    let data: Vec<_> = (2..(len + 2)).map(|idx| read_u32(idx as u32)).collect();
+    // Compute the sum.
+    let sum: u32 = data.iter().sum();
+    // Check that our sum matches the prover's.
+    assert_eq!(sum, proposed_sum);
+}
+

The function read_u32 reads a number from the list supplied with -i.

+

This is just a first mechanism to provide access to the outside world. +The plan is to be able to call arbitrary user-defined ffi functions that will translate to prover queries, +and can then ask for e.g. the value of a storage slot at a certain address or the root hash of a Merkle tree.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/frontends/valida.html b/frontends/valida.html new file mode 100644 index 0000000000..31f40a6da2 --- /dev/null +++ b/frontends/valida.html @@ -0,0 +1,208 @@ + + + + + + Valida - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Valida

+

A Valida front end for powdr is under development. If you are interested, feel free to reach out!

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/frontends/zk-continuations.html b/frontends/zk-continuations.html new file mode 100644 index 0000000000..5536c3d0e5 --- /dev/null +++ b/frontends/zk-continuations.html @@ -0,0 +1,320 @@ + + + + + + zk-Continuations - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

RISCV and ZK-Continuations

+

ZK-continuations can be used to make proofs for unbounded execution traces of +Rust programs, where the trace is split into many different chunks. A proof +is computed for each chunk, and all proofs can be combined with +recursion/aggregation until a single proof remains.

+

For the details of how memory is handled in the ZK-continuations case please +see this.

+

powdr-rs has experimental support to ZK-continuations, which can be used as follows.

+

Let's use as example test many chunks from the riscv crate:

+
#![no_main]
+#![no_std]
+
+extern crate alloc;
+extern crate powdr_riscv_runtime;
+use alloc::vec::Vec;
+
+#[no_mangle]
+pub fn main() {
+    let mut foo = Vec::new();
+    foo.push(1);
+
+    for _ in 0..100 {
+        foo.push(foo.iter().sum());
+    }
+
+    // Compute some fibonacci numbers
+    // -> Does not access memory but also does not get optimized out...
+    let mut a = 1;
+    let mut b = 1;
+    for _ in 0..150000 {
+        let tmp = a + b;
+        a = b;
+        b = tmp;
+    }
+    // Don't optimize me away :/
+    assert!(a > 0);
+}
+

First we need to compile the Rust code to powdr-asm:

+
powdr-rs compile riscv/tests/riscv_data/many_chunks
+
+

Now we can use powdr's RISCV executor to estimate how many cycles are needed:

+
powdr-rs execute many_chunks.asm
+
+
...
+Execution trace length: 750329
+
+

By default, powdr-RISCV uses chunks of length 2^18. That means we will need at +least 3 chunks.

+

For the continuations case, the compiled assembly code looks different because +of the external memory commitments, so we need to recompile using the +--continuations flag:

+
powdr-rs compile riscv/tests/riscv_data/many_chunks --continuations
+
+

We can now execute the program with continuations enabled:

+
powdr-rs -- execute many_chunks.asm --continuations
+
+

The output now is longer:

+
Running chunk 0...
+Building bootloader inputs for chunk 0...
+26 unique memory accesses over 2 accessed pages: {31, 32}
+Estimating the shutdown routine to use 1362 rows.
+Bootloader inputs length: 1285
+Simulating chunk execution...
+Initial memory root hash: 44cd91c12033ad4c6a6b19793b73f1a66d99a0e0bf63494c12ceb1f451ec9452
+Final memory root hash: e6a6fd63d864c734d6a4df4988f733738790262af9c7b014a1c036679baf1125
+Chunk trace length: 260782
+Validating chunk...
+Bootloader used 3134 rows.
+  => 257648 / 262144 (98%) of rows are used for the actual computation!
+Proved 257647 rows.
+
+Running chunk 1...
+Building bootloader inputs for chunk 1...
+0 unique memory accesses over 0 accessed pages: {}
+Estimating the shutdown routine to use 42 rows.
+Bootloader inputs length: 83
+Simulating chunk execution...
+Initial memory root hash: e6a6fd63d864c734d6a4df4988f733738790262af9c7b014a1c036679baf1125
+Final memory root hash: e6a6fd63d864c734d6a4df4988f733738790262af9c7b014a1c036679baf1125
+Chunk trace length: 262102
+Validating chunk...
+Bootloader used 62 rows.
+  => 262040 / 262144 (99%) of rows are used for the actual computation!
+Proved 262039 rows.
+
+Running chunk 2...
+Building bootloader inputs for chunk 2...
+2 unique memory accesses over 1 accessed pages: {31}
+Estimating the shutdown routine to use 702 rows.
+Bootloader inputs length: 684
+Simulating chunk execution...
+Initial memory root hash: e6a6fd63d864c734d6a4df4988f733738790262af9c7b014a1c036679baf1125
+Final memory root hash: e6a6fd63d864c734d6a4df4988f733738790262af9c7b014a1c036679baf1125
+Chunk trace length: 232057
+Validating chunk...
+Bootloader used 1610 rows.
+  => 259832 / 262144 (99%) of rows are used for the actual computation!
+Done!
+
+

The step above is informational, but for the proofs we also need the full witness:

+
powdr-rs execute many_chunks.asm --witness
+
+

The witnesses are written in ./chunk_0/commits.bin, ./chunk_1/commits.bin +and ./chunk_2/commits.bin.

+

Now that we have the witnesses for all chunks we can use powdr (instead of +powdr-rs) to compute proofs for each chunk:

+
powdr prove many_chunks.asm -d chunk_0 --backend estark-dump
+powdr prove many_chunks.asm -d chunk_1 --backend estark-dump
+powdr prove many_chunks.asm -d chunk_2 --backend estark-dump
+
+

These proofs are mock proofs for the sake of the example, but any backend +should work here.

+

After generating real proofs, each specific proof system can be used for the +recursion/aggregation parts. A follow-up tutorial on that is coming soon.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/hello_world.html b/hello_world.html new file mode 100644 index 0000000000..53947bff57 --- /dev/null +++ b/hello_world.html @@ -0,0 +1,244 @@ + + + + + + Hello World - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Hello World

+

Let's write a minimal VM and generate proofs!

+
machine HelloWorld with degree: 8 {
+    reg pc[@pc];
+    reg X[<=];
+    reg Y[<=];
+    reg A;
+
+    instr incr X -> Y {
+        Y = X + 1
+    }
+
+    instr decr X -> Y {
+        Y = X - 1
+    }
+
+    instr assert_zero X {
+        X = 0
+    }
+
+    function main {
+        // assign the first prover input to A
+        A <=X= ${ std::prelude::Query::Input(0, 1) };
+
+        // increment A
+        A <== incr(A);
+
+        // decrement A
+        A <== decr(A);
+
+        // assert that A is zero
+        assert_zero A;
+
+        return;
+    }
+}
+
+

Let's go through different possible usages of powdr, starting with using the powdr CLI.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/hello_world_cli.html b/hello_world_cli.html new file mode 100644 index 0000000000..4250b8aa21 --- /dev/null +++ b/hello_world_cli.html @@ -0,0 +1,278 @@ + + + + + + in the CLI - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Hello World using the CLI

+

Let's generate a proof of execution for the valid prover input 0 (since 0 + 1 - 1 == 0)

+
powdr pil test_data/asm/book/hello_world.asm --field bn254 --inputs 1 --prove-with halo2
+
+

We observe that several artifacts are created in the current directory:

+
    +
  • hello_world.pil: the compiled PIL file.
  • +
  • hello_world_opt.pil: the optimized PIL file.
  • +
  • hello_world_constants.bin: the computed fixed columns which only have to be computed once per PIL file.
  • +
  • hello_world_commits.bin: the computed witness which needs to be computed for each proof.
  • +
  • hello_world_proof.bin: the ZK proof!
  • +
+
+

Note that the output directory can be specified with option -o|--output, and . is used by default.

+
+

Now let's try for the invalid input 1:

+
powdr pil test_data/asm/book/hello_world.asm --field bn254 --inputs 2 --prove-with halo2
+
+

In this case witness generation fails, and no proof is created.

+

Setup & Verification

+

The example above omits some important steps in proof generation: Setup and +Verification key generation. Some proof systems such as Halo2 , require a Setup to be performed before the proof. Such Setup can be +specific to the program or universal, where its artifact is a binary usually +called parameters or params. STARKs do not require a Setup.

+

Another step required before the proof is computed is key generation. A +proving key and a verification key are generated taking into account the +constraints and potentially Setup parameters. The proving key is used by the +prover to generate the proof, and the verification key is used by the verifier +to verify such a proof. A single verification key can be used to verify any +number of different proofs for a given program.

+

Therefore, when computing a proof, it is important that the Setup parameters +and the verification key are available as artifacts.

+

Below we reproduce the same proof as in the example above, keeping the +artifacts needed for verification:

+

First we run the Setup, where the number given must match the degree of our +source file (degree 8). The command below generates file params.bin.

+
powdr setup 8 --backend halo2 --field bn254
+
+

We can now compute the verification key, output in vkey.bin:

+
powdr verification-key test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --params "params.bin"
+
+
+

The command above can read previously generated constants from the directory +specified via -d|--dir, where . is used by default. If the constants are not present +it computes them before generating the verification key.

+
+

The next command compiles and optimizes the given source, generating the file +hello_world_opt.pil. It also computes both the fixed data and the witness +needed for the proof, stored respectively in hello_world_constants.bin and +hello_world_commits.bin.

+
powdr pil test_data/asm/book/hello_world.asm --field bn254 --force --inputs 0
+
+

We can now generate the proof:

+
powdr prove test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --params "params.bin" --vkey "vkey.bin"
+
+

The proof can be verified by anyone via:

+
powdr verify test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --vkey "vkey.bin" --params "params.bin" --proof "hello_world_proof.bin"
+
+
+

Note that CLI proof verification works analogously for eSTARK, without the setup step and using the Goldilocks field instead of Bn254.

+
+

Another aspect that was omitted in this example is the fact that this proof +uses a Poseidon transcript and cannot be verified in a cheap way on Ethereum, +even though we can verify it efficiently via powdr. +There are two ways to enable verification on Ethereum:

+
    +
  1. Use a different transcript when generating this proof. See section +Hello World on Ethereum for the same example targeting EVM verification.
  2. +
  3. Use proof aggregation to compress the proof using a +circuit that can be verified on Ethereum. See section +Hello World on Ethereum via proof aggregation to learn how to do that.
  4. +
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/hello_world_ethereum.html b/hello_world_ethereum.html new file mode 100644 index 0000000000..0177df3f94 --- /dev/null +++ b/hello_world_ethereum.html @@ -0,0 +1,235 @@ + + + + + + verified on Ethereum - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Hello World on Ethereum

+

This example is a variation of the previous Hello World, +targeting verification on Ethereum. In this example we will cover how to +generate proofs directly using a Keccak transcript instead of the Poseidon +transcript of the previous example, which will enable us to verify proofs +onchain. There are almost no differences from the CLI perspective.

+

Since the following command creates a proof, a Solidity verifier, and verifies +the proof on the EVM, we need to have solc available in the system. One easy +way to install it is by using svm.

+
powdr pil test_data/asm/book/hello_world.asm --field bn254 --inputs 0 --prove-with halo2 --backend-options "snark_single" -f --params params.bin
+
+

The extra parameter --backend-options snark_single tells powdr to produce a single +SNARK that uses Keccak. The option -f forces overwriting the compiled files +that have been generated before, which is useful if you are running the examples +in the same directory.

+

When the proof is generated, it is verified on a simulated EVM transaction as well!

+
Verifying SNARK in the EVM...
+
+

We can observe again that a proof was created at hello_world_proof.bin.

+

Now we can generate a Solidity verifier, using the same setup (params) as the +previous example:

+
powdr export-verifier test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --backend-options "snark_single" --params params.bin
+
+

A Solidity file verifier.sol is generated. You can verify the same proof that +we just generated by passing it to the contract together with the public inputs +(which we have not used so far).

+
+

Note that the more complex your VM is, the larger the verifier contract will be. In some cases, it might exceed Ethereum's contract size limit. You can mitigate that by using proof recursion on proofs that use Poseidon transcripts. See the next section for details.

+
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/hello_world_ethereum_aggregation.html b/hello_world_ethereum_aggregation.html new file mode 100644 index 0000000000..0b1aa23044 --- /dev/null +++ b/hello_world_ethereum_aggregation.html @@ -0,0 +1,266 @@ + + + + + + verified on Ethereum with proof aggregation - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Hello World on Ethereum with proof aggregation

+

As noted in the previous section, complex VMs can lead to large +Solidity verifiers that exceed the contract size limit on Ethereum. One +solution to that problem is to create proofs using the Poseidon transcript, as +we did in the first example, and then use proof +recursion to create a proof that we know we will be able to verify on Ethereum.

+

A recursive SNARK works by generating a proof for a circuit that verifies +another proof. The circuit we are using here to prove our initial proof +recursively is PSE's snark-verifier. This circuit is large enough +to be able to prove complex programs that were proven initial with the Poseidon +transcript, like our first example. Because of that our aggregation setup +params and verification key are going to be larger than before and take +longer to compute. The good news are that (i) we can use a pre-computed setup +from a previous ceremony, and (ii) the verification key only has to be computed +once per program.

+

First, we need a setup of "size" 2^22. This is the maximum execution trace length of the recursion circuit.

+

You can generate it using the command line below, or download a pre-computed +one here.

+

This will take a couple minutes if you decide to compute it yourself:

+
powdr setup 4194304 --backend halo2 --field bn254
+
+

We can re-use the new large params.bin for both initial and recursive proofs. +Let's start by re-computing our Poseidon proof like in the first example, +but using our new setup file:

+
powdr pil test_data/asm/book/hello_world.asm --field bn254 --inputs 0 --prove-with halo2 --backend-options "poseidon" -f --params params.bin
+
+

This generates the initial proof hello_world_proof.bin. +We'll also need a verification key:

+
powdr verification-key test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --backend-options "poseidon" --params params.bin
+
+

Let's verify the proof with our fresh verification key to make sure we're on the right track:

+
powdr verify test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --backend-options "poseidon" --params params.bin --vkey vkey.bin --proof hello_world_proof.bin
+
+

In order to avoid confusion between the application's artifacts +that we've just generated and the recursion one we're going to generate +later, let's rename them:

+
mv vkey.bin vkey_app.bin
+mv hello_world_proof.bin hello_world_proof_app.bin
+
+

We can now generate a verification key for the Halo2 circuit that verifies our proofs recursively. This might take up to a minute.

+
powdr verification-key test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --backend-options "snark_aggr" --params params.bin --vkey-app vkey_app.bin
+
+
+

Note that this verification key can only be used to verify recursive proofs that verify other proofs using the application's key vkey_app.bin.

+
+

We can now generate the recursive proof (this typically takes a few minutes and uses around 28gb RAM):

+
powdr prove test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --backend-options "snark_aggr" --params params.bin --vkey vkey.bin --vkey-app vkey_app.bin --proof hello_world_proof_app.bin
+
+

We have a proof! Note that it contains two fields, proof and +publics. The proof object contains the binary encoding of the proof +points, and the publics object contains the public accumulator limbs that we +need in order to verify the recursive proof.

+

We can now verify the proof, using the publics object as input (your numbers will be different):

+
powdr verify test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --backend-options "snark_aggr" --params params.bin --vkey vkey.bin --proof hello_world_proof_aggr.bin --publics "269487626280642378794,9378970522278219882,62304027188881225691,811176493438944,234778270138968319485,3212529982775999134,171155758373806079356,207910400337448,188563849779606300850,155626297629081952942,194348356185923309508,433061951018270,34598221006207900280,283775241405787955338,79508596887913496910,354189825580534"
+
+

Since the goal of the recursive proof was to be able to verify it on Ethereum, let's do that!

+
powdr export-verifier test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --backend-options "snark_aggr" --params params.bin --vkey vkey.bin
+
+

A Solidity verifier is created in verifier.sol. The contract expects an array of the accumulators' limbs followed by a tightly packed proof, where each accumulator limb uses 32 bytes, and there is no function signature.

+

Note that this verifier can be used to verify any recursive proof that verifies exactly one Poseidon proof of the given circuit.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/highlight.css b/highlight.css new file mode 100644 index 0000000000..352c79b961 --- /dev/null +++ b/highlight.css @@ -0,0 +1,83 @@ +/* + * An increased contrast highlighting scheme loosely based on the + * "Base16 Atelier Dune Light" theme by Bram de Haan + * (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune) + * Original Base16 color scheme by Chris Kempson + * (https://github.com/chriskempson/base16) + */ + +/* Comment */ +.hljs-comment, +.hljs-quote { + color: #575757; +} + +/* Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-attr, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #d70025; +} + +/* Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #b21e00; +} + +/* Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #008200; +} + +/* Blue */ +.hljs-title, +.hljs-section { + color: #0030f2; +} + +/* Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #9d00ec; +} + +.hljs { + display: block; + overflow-x: auto; + background: #f6f7f6; + color: #000; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} + +.hljs-addition { + color: #22863a; + background-color: #f0fff4; +} + +.hljs-deletion { + color: #b31d28; + background-color: #ffeef0; +} diff --git a/highlight.js b/highlight.js new file mode 100644 index 0000000000..18d24345bd --- /dev/null +++ b/highlight.js @@ -0,0 +1,54 @@ +/* + Highlight.js 10.1.1 (93fd0d73) + License: BSD-3-Clause + Copyright (c) 2006-2020, Ivan Sagalaev +*/ +var hljs=function(){"use strict";function e(n){Object.freeze(n);var t="function"==typeof n;return Object.getOwnPropertyNames(n).forEach((function(r){!Object.hasOwnProperty.call(n,r)||null===n[r]||"object"!=typeof n[r]&&"function"!=typeof n[r]||t&&("caller"===r||"callee"===r||"arguments"===r)||Object.isFrozen(n[r])||e(n[r])})),n}class n{constructor(e){void 0===e.data&&(e.data={}),this.data=e.data}ignoreMatch(){this.ignore=!0}}function t(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function r(e,...n){var t={};for(const n in e)t[n]=e[n];return n.forEach((function(e){for(const n in e)t[n]=e[n]})),t}function a(e){return e.nodeName.toLowerCase()}var i=Object.freeze({__proto__:null,escapeHTML:t,inherit:r,nodeStream:function(e){var n=[];return function e(t,r){for(var i=t.firstChild;i;i=i.nextSibling)3===i.nodeType?r+=i.nodeValue.length:1===i.nodeType&&(n.push({event:"start",offset:r,node:i}),r=e(i,r),a(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:r,node:i}));return r}(e,0),n},mergeStreams:function(e,n,r){var i=0,s="",o=[];function l(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset"}function u(e){s+=""}function d(e){("start"===e.event?c:u)(e.node)}for(;e.length||n.length;){var g=l();if(s+=t(r.substring(i,g[0].offset)),i=g[0].offset,g===e){o.reverse().forEach(u);do{d(g.splice(0,1)[0]),g=l()}while(g===e&&g.length&&g[0].offset===i);o.reverse().forEach(c)}else"start"===g[0].event?o.push(g[0].node):o.pop(),d(g.splice(0,1)[0])}return s+t(r.substr(i))}});const s="",o=e=>!!e.kind;class l{constructor(e,n){this.buffer="",this.classPrefix=n.classPrefix,e.walk(this)}addText(e){this.buffer+=t(e)}openNode(e){if(!o(e))return;let n=e.kind;e.sublanguage||(n=`${this.classPrefix}${n}`),this.span(n)}closeNode(e){o(e)&&(this.buffer+=s)}value(){return this.buffer}span(e){this.buffer+=``}}class c{constructor(){this.rootNode={children:[]},this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){const n={kind:e,children:[]};this.add(n),this.stack.push(n)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,n){return"string"==typeof n?e.addText(n):n.children&&(e.openNode(n),n.children.forEach(n=>this._walk(e,n)),e.closeNode(n)),e}static _collapse(e){"string"!=typeof e&&e.children&&(e.children.every(e=>"string"==typeof e)?e.children=[e.children.join("")]:e.children.forEach(e=>{c._collapse(e)}))}}class u extends c{constructor(e){super(),this.options=e}addKeyword(e,n){""!==e&&(this.openNode(n),this.addText(e),this.closeNode())}addText(e){""!==e&&this.add(e)}addSublanguage(e,n){const t=e.root;t.kind=n,t.sublanguage=!0,this.add(t)}toHTML(){return new l(this,this.options).value()}finalize(){return!0}}function d(e){return e?"string"==typeof e?e:e.source:null}const g="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",h={begin:"\\\\[\\s\\S]",relevance:0},f={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[h]},p={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[h]},b={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},m=function(e,n,t={}){var a=r({className:"comment",begin:e,end:n,contains:[]},t);return a.contains.push(b),a.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",relevance:0}),a},v=m("//","$"),x=m("/\\*","\\*/"),E=m("#","$");var _=Object.freeze({__proto__:null,IDENT_RE:"[a-zA-Z]\\w*",UNDERSCORE_IDENT_RE:"[a-zA-Z_]\\w*",NUMBER_RE:"\\b\\d+(\\.\\d+)?",C_NUMBER_RE:g,BINARY_NUMBER_RE:"\\b(0b[01]+)",RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:(e={})=>{const n=/^#![ ]*\//;return e.binary&&(e.begin=function(...e){return e.map(e=>d(e)).join("")}(n,/.*\b/,e.binary,/\b.*/)),r({className:"meta",begin:n,end:/$/,relevance:0,"on:begin":(e,n)=>{0!==e.index&&n.ignoreMatch()}},e)},BACKSLASH_ESCAPE:h,APOS_STRING_MODE:f,QUOTE_STRING_MODE:p,PHRASAL_WORDS_MODE:b,COMMENT:m,C_LINE_COMMENT_MODE:v,C_BLOCK_COMMENT_MODE:x,HASH_COMMENT_MODE:E,NUMBER_MODE:{className:"number",begin:"\\b\\d+(\\.\\d+)?",relevance:0},C_NUMBER_MODE:{className:"number",begin:g,relevance:0},BINARY_NUMBER_MODE:{className:"number",begin:"\\b(0b[01]+)",relevance:0},CSS_NUMBER_MODE:{className:"number",begin:"\\b\\d+(\\.\\d+)?(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},REGEXP_MODE:{begin:/(?=\/[^/\n]*\/)/,contains:[{className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[h,{begin:/\[/,end:/\]/,relevance:0,contains:[h]}]}]},TITLE_MODE:{className:"title",begin:"[a-zA-Z]\\w*",relevance:0},UNDERSCORE_TITLE_MODE:{className:"title",begin:"[a-zA-Z_]\\w*",relevance:0},METHOD_GUARD:{begin:"\\.\\s*[a-zA-Z_]\\w*",relevance:0},END_SAME_AS_BEGIN:function(e){return Object.assign(e,{"on:begin":(e,n)=>{n.data._beginMatch=e[1]},"on:end":(e,n)=>{n.data._beginMatch!==e[1]&&n.ignoreMatch()}})}}),N="of and for in not or if then".split(" ");function w(e,n){return n?+n:function(e){return N.includes(e.toLowerCase())}(e)?0:1}const R=t,y=r,{nodeStream:k,mergeStreams:O}=i,M=Symbol("nomatch");return function(t){var a=[],i={},s={},o=[],l=!0,c=/(^(<[^>]+>|\t|)+|\n)/gm,g="Could not find the language '{}', did you forget to load/include a language module?";const h={disableAutodetect:!0,name:"Plain text",contains:[]};var f={noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:null,__emitter:u};function p(e){return f.noHighlightRe.test(e)}function b(e,n,t,r){var a={code:n,language:e};S("before:highlight",a);var i=a.result?a.result:m(a.language,a.code,t,r);return i.code=a.code,S("after:highlight",i),i}function m(e,t,a,s){var o=t;function c(e,n){var t=E.case_insensitive?n[0].toLowerCase():n[0];return Object.prototype.hasOwnProperty.call(e.keywords,t)&&e.keywords[t]}function u(){null!=y.subLanguage?function(){if(""!==A){var e=null;if("string"==typeof y.subLanguage){if(!i[y.subLanguage])return void O.addText(A);e=m(y.subLanguage,A,!0,k[y.subLanguage]),k[y.subLanguage]=e.top}else e=v(A,y.subLanguage.length?y.subLanguage:null);y.relevance>0&&(I+=e.relevance),O.addSublanguage(e.emitter,e.language)}}():function(){if(!y.keywords)return void O.addText(A);let e=0;y.keywordPatternRe.lastIndex=0;let n=y.keywordPatternRe.exec(A),t="";for(;n;){t+=A.substring(e,n.index);const r=c(y,n);if(r){const[e,a]=r;O.addText(t),t="",I+=a,O.addKeyword(n[0],e)}else t+=n[0];e=y.keywordPatternRe.lastIndex,n=y.keywordPatternRe.exec(A)}t+=A.substr(e),O.addText(t)}(),A=""}function h(e){return e.className&&O.openNode(e.className),y=Object.create(e,{parent:{value:y}})}function p(e){return 0===y.matcher.regexIndex?(A+=e[0],1):(L=!0,0)}var b={};function x(t,r){var i=r&&r[0];if(A+=t,null==i)return u(),0;if("begin"===b.type&&"end"===r.type&&b.index===r.index&&""===i){if(A+=o.slice(r.index,r.index+1),!l){const n=Error("0 width match regex");throw n.languageName=e,n.badRule=b.rule,n}return 1}if(b=r,"begin"===r.type)return function(e){var t=e[0],r=e.rule;const a=new n(r),i=[r.__beforeBegin,r["on:begin"]];for(const n of i)if(n&&(n(e,a),a.ignore))return p(t);return r&&r.endSameAsBegin&&(r.endRe=RegExp(t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")),r.skip?A+=t:(r.excludeBegin&&(A+=t),u(),r.returnBegin||r.excludeBegin||(A=t)),h(r),r.returnBegin?0:t.length}(r);if("illegal"===r.type&&!a){const e=Error('Illegal lexeme "'+i+'" for mode "'+(y.className||"")+'"');throw e.mode=y,e}if("end"===r.type){var s=function(e){var t=e[0],r=o.substr(e.index),a=function e(t,r,a){let i=function(e,n){var t=e&&e.exec(n);return t&&0===t.index}(t.endRe,a);if(i){if(t["on:end"]){const e=new n(t);t["on:end"](r,e),e.ignore&&(i=!1)}if(i){for(;t.endsParent&&t.parent;)t=t.parent;return t}}if(t.endsWithParent)return e(t.parent,r,a)}(y,e,r);if(!a)return M;var i=y;i.skip?A+=t:(i.returnEnd||i.excludeEnd||(A+=t),u(),i.excludeEnd&&(A=t));do{y.className&&O.closeNode(),y.skip||y.subLanguage||(I+=y.relevance),y=y.parent}while(y!==a.parent);return a.starts&&(a.endSameAsBegin&&(a.starts.endRe=a.endRe),h(a.starts)),i.returnEnd?0:t.length}(r);if(s!==M)return s}if("illegal"===r.type&&""===i)return 1;if(B>1e5&&B>3*r.index)throw Error("potential infinite loop, way more iterations than matches");return A+=i,i.length}var E=T(e);if(!E)throw console.error(g.replace("{}",e)),Error('Unknown language: "'+e+'"');var _=function(e){function n(n,t){return RegExp(d(n),"m"+(e.case_insensitive?"i":"")+(t?"g":""))}class t{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,n){n.position=this.position++,this.matchIndexes[this.matchAt]=n,this.regexes.push([n,e]),this.matchAt+=function(e){return RegExp(e.toString()+"|").exec("").length-1}(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const e=this.regexes.map(e=>e[1]);this.matcherRe=n(function(e,n="|"){for(var t=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./,r=0,a="",i=0;i0&&(a+=n),a+="(";o.length>0;){var l=t.exec(o);if(null==l){a+=o;break}a+=o.substring(0,l.index),o=o.substring(l.index+l[0].length),"\\"===l[0][0]&&l[1]?a+="\\"+(+l[1]+s):(a+=l[0],"("===l[0]&&r++)}a+=")"}return a}(e),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;const n=this.matcherRe.exec(e);if(!n)return null;const t=n.findIndex((e,n)=>n>0&&void 0!==e),r=this.matchIndexes[t];return n.splice(0,t),Object.assign(n,r)}}class a{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];const n=new t;return this.rules.slice(e).forEach(([e,t])=>n.addRule(e,t)),n.compile(),this.multiRegexes[e]=n,n}considerAll(){this.regexIndex=0}addRule(e,n){this.rules.push([e,n]),"begin"===n.type&&this.count++}exec(e){const n=this.getMatcher(this.regexIndex);n.lastIndex=this.lastIndex;const t=n.exec(e);return t&&(this.regexIndex+=t.position+1,this.regexIndex===this.count&&(this.regexIndex=0)),t}}function i(e,n){const t=e.input[e.index-1],r=e.input[e.index+e[0].length];"."!==t&&"."!==r||n.ignoreMatch()}if(e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return function t(s,o){const l=s;if(s.compiled)return l;s.compiled=!0,s.__beforeBegin=null,s.keywords=s.keywords||s.beginKeywords;let c=null;if("object"==typeof s.keywords&&(c=s.keywords.$pattern,delete s.keywords.$pattern),s.keywords&&(s.keywords=function(e,n){var t={};return"string"==typeof e?r("keyword",e):Object.keys(e).forEach((function(n){r(n,e[n])})),t;function r(e,r){n&&(r=r.toLowerCase()),r.split(" ").forEach((function(n){var r=n.split("|");t[r[0]]=[e,w(r[0],r[1])]}))}}(s.keywords,e.case_insensitive)),s.lexemes&&c)throw Error("ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) ");return l.keywordPatternRe=n(s.lexemes||c||/\w+/,!0),o&&(s.beginKeywords&&(s.begin="\\b("+s.beginKeywords.split(" ").join("|")+")(?=\\b|\\s)",s.__beforeBegin=i),s.begin||(s.begin=/\B|\b/),l.beginRe=n(s.begin),s.endSameAsBegin&&(s.end=s.begin),s.end||s.endsWithParent||(s.end=/\B|\b/),s.end&&(l.endRe=n(s.end)),l.terminator_end=d(s.end)||"",s.endsWithParent&&o.terminator_end&&(l.terminator_end+=(s.end?"|":"")+o.terminator_end)),s.illegal&&(l.illegalRe=n(s.illegal)),void 0===s.relevance&&(s.relevance=1),s.contains||(s.contains=[]),s.contains=[].concat(...s.contains.map((function(e){return function(e){return e.variants&&!e.cached_variants&&(e.cached_variants=e.variants.map((function(n){return r(e,{variants:null},n)}))),e.cached_variants?e.cached_variants:function e(n){return!!n&&(n.endsWithParent||e(n.starts))}(e)?r(e,{starts:e.starts?r(e.starts):null}):Object.isFrozen(e)?r(e):e}("self"===e?s:e)}))),s.contains.forEach((function(e){t(e,l)})),s.starts&&t(s.starts,o),l.matcher=function(e){const n=new a;return e.contains.forEach(e=>n.addRule(e.begin,{rule:e,type:"begin"})),e.terminator_end&&n.addRule(e.terminator_end,{type:"end"}),e.illegal&&n.addRule(e.illegal,{type:"illegal"}),n}(l),l}(e)}(E),N="",y=s||_,k={},O=new f.__emitter(f);!function(){for(var e=[],n=y;n!==E;n=n.parent)n.className&&e.unshift(n.className);e.forEach(e=>O.openNode(e))}();var A="",I=0,S=0,B=0,L=!1;try{for(y.matcher.considerAll();;){B++,L?L=!1:(y.matcher.lastIndex=S,y.matcher.considerAll());const e=y.matcher.exec(o);if(!e)break;const n=x(o.substring(S,e.index),e);S=e.index+n}return x(o.substr(S)),O.closeAllNodes(),O.finalize(),N=O.toHTML(),{relevance:I,value:N,language:e,illegal:!1,emitter:O,top:y}}catch(n){if(n.message&&n.message.includes("Illegal"))return{illegal:!0,illegalBy:{msg:n.message,context:o.slice(S-100,S+100),mode:n.mode},sofar:N,relevance:0,value:R(o),emitter:O};if(l)return{illegal:!1,relevance:0,value:R(o),emitter:O,language:e,top:y,errorRaised:n};throw n}}function v(e,n){n=n||f.languages||Object.keys(i);var t=function(e){const n={relevance:0,emitter:new f.__emitter(f),value:R(e),illegal:!1,top:h};return n.emitter.addText(e),n}(e),r=t;return n.filter(T).filter(I).forEach((function(n){var a=m(n,e,!1);a.language=n,a.relevance>r.relevance&&(r=a),a.relevance>t.relevance&&(r=t,t=a)})),r.language&&(t.second_best=r),t}function x(e){return f.tabReplace||f.useBR?e.replace(c,e=>"\n"===e?f.useBR?"
":e:f.tabReplace?e.replace(/\t/g,f.tabReplace):e):e}function E(e){let n=null;const t=function(e){var n=e.className+" ";n+=e.parentNode?e.parentNode.className:"";const t=f.languageDetectRe.exec(n);if(t){var r=T(t[1]);return r||(console.warn(g.replace("{}",t[1])),console.warn("Falling back to no-highlight mode for this block.",e)),r?t[1]:"no-highlight"}return n.split(/\s+/).find(e=>p(e)||T(e))}(e);if(p(t))return;S("before:highlightBlock",{block:e,language:t}),f.useBR?(n=document.createElement("div")).innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n"):n=e;const r=n.textContent,a=t?b(t,r,!0):v(r),i=k(n);if(i.length){const e=document.createElement("div");e.innerHTML=a.value,a.value=O(i,k(e),r)}a.value=x(a.value),S("after:highlightBlock",{block:e,result:a}),e.innerHTML=a.value,e.className=function(e,n,t){var r=n?s[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),e.includes(r)||a.push(r),a.join(" ").trim()}(e.className,t,a.language),e.result={language:a.language,re:a.relevance,relavance:a.relevance},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.relevance,relavance:a.second_best.relevance})}const N=()=>{if(!N.called){N.called=!0;var e=document.querySelectorAll("pre code");a.forEach.call(e,E)}};function T(e){return e=(e||"").toLowerCase(),i[e]||i[s[e]]}function A(e,{languageName:n}){"string"==typeof e&&(e=[e]),e.forEach(e=>{s[e]=n})}function I(e){var n=T(e);return n&&!n.disableAutodetect}function S(e,n){var t=e;o.forEach((function(e){e[t]&&e[t](n)}))}Object.assign(t,{highlight:b,highlightAuto:v,fixMarkup:x,highlightBlock:E,configure:function(e){f=y(f,e)},initHighlighting:N,initHighlightingOnLoad:function(){window.addEventListener("DOMContentLoaded",N,!1)},registerLanguage:function(e,n){var r=null;try{r=n(t)}catch(n){if(console.error("Language definition for '{}' could not be registered.".replace("{}",e)),!l)throw n;console.error(n),r=h}r.name||(r.name=e),i[e]=r,r.rawDefinition=n.bind(null,t),r.aliases&&A(r.aliases,{languageName:e})},listLanguages:function(){return Object.keys(i)},getLanguage:T,registerAliases:A,requireLanguage:function(e){var n=T(e);if(n)return n;throw Error("The '{}' language is required, but not loaded.".replace("{}",e))},autoDetection:I,inherit:y,addPlugin:function(e){o.push(e)}}),t.debugMode=function(){l=!1},t.safeMode=function(){l=!0},t.versionString="10.1.1";for(const n in _)"object"==typeof _[n]&&e(_[n]);return Object.assign(t,_),t}({})}();"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs); +hljs.registerLanguage("apache",function(){"use strict";return function(e){var n={className:"number",begin:"\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?"};return{name:"Apache config",aliases:["apacheconf"],case_insensitive:!0,contains:[e.HASH_COMMENT_MODE,{className:"section",begin:"",contains:[n,{className:"number",begin:":\\d{1,5}"},e.inherit(e.QUOTE_STRING_MODE,{relevance:0})]},{className:"attribute",begin:/\w+/,relevance:0,keywords:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{end:/$/,relevance:0,keywords:{literal:"on off all deny allow"},contains:[{className:"meta",begin:"\\s\\[",end:"\\]$"},{className:"variable",begin:"[\\$%]\\{",end:"\\}",contains:["self",{className:"number",begin:"[\\$%]\\d+"}]},n,{className:"number",begin:"\\d+"},e.QUOTE_STRING_MODE]}}],illegal:/\S/}}}()); +hljs.registerLanguage("bash",function(){"use strict";return function(e){const s={};Object.assign(s,{className:"variable",variants:[{begin:/\$[\w\d#@][\w\d_]*/},{begin:/\$\{/,end:/\}/,contains:[{begin:/:-/,contains:[s]}]}]});const t={className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},n={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,s,t]};t.contains.push(n);const a={begin:/\$\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,s]},i=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10}),c={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b-?[a-z\._]+\b/,keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},contains:[i,e.SHEBANG(),c,a,e.HASH_COMMENT_MODE,n,{className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},s]}}}()); +hljs.registerLanguage("c-like",function(){"use strict";return function(e){function t(e){return"(?:"+e+")?"}var n="(decltype\\(auto\\)|"+t("[a-zA-Z_]\\w*::")+"[a-zA-Z_]\\w*"+t("<.*?>")+")",r={className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},a={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},i={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},s={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(a,{className:"meta-string"}),{className:"meta-string",begin:/<.*?>/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},o={className:"title",begin:t("[a-zA-Z_]\\w*::")+e.IDENT_RE,relevance:0},c=t("[a-zA-Z_]\\w*::")+e.IDENT_RE+"\\s*\\(",l={keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_t short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary",literal:"true false nullptr NULL"},d=[r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,i,a],_={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:l,contains:d.concat([{begin:/\(/,end:/\)/,keywords:l,contains:d.concat(["self"]),relevance:0}]),relevance:0},u={className:"function",begin:"("+n+"[\\*&\\s]+)+"+c,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:l,illegal:/[^\w\s\*&:<>]/,contains:[{begin:"decltype\\(auto\\)",keywords:l,relevance:0},{begin:c,returnBegin:!0,contains:[o],relevance:0},{className:"params",begin:/\(/,end:/\)/,keywords:l,relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,i,r,{begin:/\(/,end:/\)/,keywords:l,relevance:0,contains:["self",e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,i,r]}]},r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s]};return{aliases:["c","cc","h","c++","h++","hpp","hh","hxx","cxx"],keywords:l,disableAutodetect:!0,illegal:"",keywords:l,contains:["self",r]},{begin:e.IDENT_RE+"::",keywords:l},{className:"class",beginKeywords:"class struct",end:/[{;:]/,contains:[{begin://,contains:["self"]},e.TITLE_MODE]}]),exports:{preprocessor:s,strings:a,keywords:l}}}}()); +hljs.registerLanguage("c",function(){"use strict";return function(e){var n=e.getLanguage("c-like").rawDefinition();return n.name="C",n.aliases=["c","h"],n}}()); +hljs.registerLanguage("coffeescript",function(){"use strict";const e=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);return function(r){var t={keyword:e.concat(["then","unless","until","loop","by","when","and","or","is","isnt","not"]).filter((e=>n=>!e.includes(n))(["var","const","let","function","static"])).join(" "),literal:n.concat(["yes","no","on","off"]).join(" "),built_in:a.concat(["npm","print"]).join(" ")},i="[A-Za-z$_][0-9A-Za-z$_]*",s={className:"subst",begin:/#\{/,end:/}/,keywords:t},o=[r.BINARY_NUMBER_MODE,r.inherit(r.C_NUMBER_MODE,{starts:{end:"(\\s*/)?",relevance:0}}),{className:"string",variants:[{begin:/'''/,end:/'''/,contains:[r.BACKSLASH_ESCAPE]},{begin:/'/,end:/'/,contains:[r.BACKSLASH_ESCAPE]},{begin:/"""/,end:/"""/,contains:[r.BACKSLASH_ESCAPE,s]},{begin:/"/,end:/"/,contains:[r.BACKSLASH_ESCAPE,s]}]},{className:"regexp",variants:[{begin:"///",end:"///",contains:[s,r.HASH_COMMENT_MODE]},{begin:"//[gim]{0,3}(?=\\W)",relevance:0},{begin:/\/(?![ *]).*?(?![\\]).\/[gim]{0,3}(?=\W)/}]},{begin:"@"+i},{subLanguage:"javascript",excludeBegin:!0,excludeEnd:!0,variants:[{begin:"```",end:"```"},{begin:"`",end:"`"}]}];s.contains=o;var c=r.inherit(r.TITLE_MODE,{begin:i}),l={className:"params",begin:"\\([^\\(]",returnBegin:!0,contains:[{begin:/\(/,end:/\)/,keywords:t,contains:["self"].concat(o)}]};return{name:"CoffeeScript",aliases:["coffee","cson","iced"],keywords:t,illegal:/\/\*/,contains:o.concat([r.COMMENT("###","###"),r.HASH_COMMENT_MODE,{className:"function",begin:"^\\s*"+i+"\\s*=\\s*(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[c,l]},{begin:/[:\(,=]\s*/,relevance:0,contains:[{className:"function",begin:"(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[l]}]},{className:"class",beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[c]},c]},{begin:i+":",end:":",returnBegin:!0,returnEnd:!0,relevance:0}])}}}()); +hljs.registerLanguage("cpp",function(){"use strict";return function(e){var t=e.getLanguage("c-like").rawDefinition();return t.disableAutodetect=!1,t.name="C++",t.aliases=["cc","c++","h++","hpp","hh","hxx","cxx"],t}}()); +hljs.registerLanguage("csharp",function(){"use strict";return function(e){var n={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let nameof on orderby partial remove select set value var when where yield",literal:"null false true"},i=e.inherit(e.TITLE_MODE,{begin:"[a-zA-Z](\\.?\\w)*"}),a={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},s={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},t=e.inherit(s,{illegal:/\n/}),l={className:"subst",begin:"{",end:"}",keywords:n},r=e.inherit(l,{illegal:/\n/}),c={className:"string",begin:/\$"/,end:'"',illegal:/\n/,contains:[{begin:"{{"},{begin:"}}"},e.BACKSLASH_ESCAPE,r]},o={className:"string",begin:/\$@"/,end:'"',contains:[{begin:"{{"},{begin:"}}"},{begin:'""'},l]},g=e.inherit(o,{illegal:/\n/,contains:[{begin:"{{"},{begin:"}}"},{begin:'""'},r]});l.contains=[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.C_BLOCK_COMMENT_MODE],r.contains=[g,c,t,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.inherit(e.C_BLOCK_COMMENT_MODE,{illegal:/\n/})];var d={variants:[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},E={begin:"<",end:">",contains:[{beginKeywords:"in out"},i]},_=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?",b={begin:"@"+e.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"],keywords:n,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0,contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{begin:"\x3c!--|--\x3e"},{begin:""}]}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},d,a,{beginKeywords:"class interface",end:/[{;=]/,illegal:/[^\s:,]/,contains:[{beginKeywords:"where class"},i,E,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",end:/[{;=]/,illegal:/[^\s:]/,contains:[i,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta",begin:"^\\s*\\[",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{className:"meta-string",begin:/"/,end:/"/}]},{beginKeywords:"new return throw await else",relevance:0},{className:"function",begin:"("+_+"\\s+)+"+e.IDENT_RE+"\\s*(\\<.+\\>)?\\s*\\(",returnBegin:!0,end:/\s*[{;=]/,excludeEnd:!0,keywords:n,contains:[{begin:e.IDENT_RE+"\\s*(\\<.+\\>)?\\s*\\(",returnBegin:!0,contains:[e.TITLE_MODE,E],relevance:0},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,relevance:0,contains:[d,a,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},b]}}}()); +hljs.registerLanguage("css",function(){"use strict";return function(e){var n={begin:/(?:[A-Z\_\.\-]+|--[a-zA-Z0-9_-]+)\s*:/,returnBegin:!0,end:";",endsWithParent:!0,contains:[{className:"attribute",begin:/\S/,end:":",excludeEnd:!0,starts:{endsWithParent:!0,excludeEnd:!0,contains:[{begin:/[\w-]+\(/,returnBegin:!0,contains:[{className:"built_in",begin:/[\w-]+/},{begin:/\(/,end:/\)/,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE]}]},e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE,{className:"number",begin:"#[0-9A-Fa-f]+"},{className:"meta",begin:"!important"}]}}]};return{name:"CSS",case_insensitive:!0,illegal:/[=\/|'\$]/,contains:[e.C_BLOCK_COMMENT_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/},{className:"selector-class",begin:/\.[A-Za-z0-9_-]+/},{className:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},{className:"selector-pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{begin:"@(page|font-face)",lexemes:"@[a-z-]+",keywords:"@page @font-face"},{begin:"@",end:"[{;]",illegal:/:/,returnBegin:!0,contains:[{className:"keyword",begin:/@\-?\w[\w]*(\-\w+)*/},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:"and or not only",contains:[{begin:/[a-z-]+:/,className:"attribute"},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0},{begin:"{",end:"}",illegal:/\S/,contains:[e.C_BLOCK_COMMENT_MODE,n]}]}}}()); +hljs.registerLanguage("diff",function(){"use strict";return function(e){return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,variants:[{begin:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{begin:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{begin:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{className:"comment",variants:[{begin:/Index: /,end:/$/},{begin:/={3,}/,end:/$/},{begin:/^\-{3}/,end:/$/},{begin:/^\*{3} /,end:/$/},{begin:/^\+{3}/,end:/$/},{begin:/^\*{15}$/}]},{className:"addition",begin:"^\\+",end:"$"},{className:"deletion",begin:"^\\-",end:"$"},{className:"addition",begin:"^\\!",end:"$"}]}}}()); +hljs.registerLanguage("go",function(){"use strict";return function(e){var n={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",literal:"true false iota nil",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{name:"Go",aliases:["golang"],keywords:n,illegal:"e(n)).join("")}return function(a){var s={className:"number",relevance:0,variants:[{begin:/([\+\-]+)?[\d]+_[\d_]+/},{begin:a.NUMBER_RE}]},i=a.COMMENT();i.variants=[{begin:/;/,end:/$/},{begin:/#/,end:/$/}];var t={className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)}/}]},r={className:"literal",begin:/\bon|off|true|false|yes|no\b/},l={className:"string",contains:[a.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}]},c={begin:/\[/,end:/\]/,contains:[i,r,t,l,s,"self"],relevance:0},g="("+[/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/].map(n=>e(n)).join("|")+")";return{name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/,contains:[i,{className:"section",begin:/\[+/,end:/\]+/},{begin:n(g,"(\\s*\\.\\s*",g,")*",n("(?=",/\s*=\s*[^#\s]/,")")),className:"attr",starts:{end:/$/,contains:[i,c,r,t,l,s]}}]}}}()); +hljs.registerLanguage("java",function(){"use strict";function e(e){return e?"string"==typeof e?e:e.source:null}function n(e){return a("(",e,")?")}function a(...n){return n.map(n=>e(n)).join("")}function s(...n){return"("+n.map(n=>e(n)).join("|")+")"}return function(e){var t="false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",i={className:"meta",begin:"@[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},r=e=>a("[",e,"]+([",e,"_]*[",e,"]+)?"),c={className:"number",variants:[{begin:`\\b(0[bB]${r("01")})[lL]?`},{begin:`\\b(0${r("0-7")})[dDfFlL]?`},{begin:a(/\b0[xX]/,s(a(r("a-fA-F0-9"),/\./,r("a-fA-F0-9")),a(r("a-fA-F0-9"),/\.?/),a(/\./,r("a-fA-F0-9"))),/([pP][+-]?(\d+))?/,/[fFdDlL]?/)},{begin:a(/\b/,s(a(/\d*\./,r("\\d")),r("\\d")),/[eE][+-]?[\d]+[dDfF]?/)},{begin:a(/\b/,r(/\d/),n(/\.?/),n(r(/\d/)),/[dDfFlL]?/)}],relevance:0};return{name:"Java",aliases:["jsp"],keywords:t,illegal:/<\/|#/,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"class",beginKeywords:"class interface",end:/[{;=]/,excludeEnd:!0,keywords:"class interface",illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"new throw return else",relevance:0},{className:"function",begin:"([À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(<[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(\\s*,\\s*[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*)*>)?\\s+)+"+e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:t,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,keywords:t,relevance:0,contains:[i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},c,i]}}}()); +hljs.registerLanguage("javascript",function(){"use strict";const e=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);function s(e){return r("(?=",e,")")}function r(...e){return e.map(e=>(function(e){return e?"string"==typeof e?e:e.source:null})(e)).join("")}return function(t){var i="[A-Za-z$_][0-9A-Za-z$_]*",c={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/},o={$pattern:"[A-Za-z$_][0-9A-Za-z$_]*",keyword:e.join(" "),literal:n.join(" "),built_in:a.join(" ")},l={className:"number",variants:[{begin:"\\b(0[bB][01]+)n?"},{begin:"\\b(0[oO][0-7]+)n?"},{begin:t.C_NUMBER_RE+"n?"}],relevance:0},E={className:"subst",begin:"\\$\\{",end:"\\}",keywords:o,contains:[]},d={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,E],subLanguage:"xml"}},g={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,E],subLanguage:"css"}},u={className:"string",begin:"`",end:"`",contains:[t.BACKSLASH_ESCAPE,E]};E.contains=[t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,d,g,u,l,t.REGEXP_MODE];var b=E.contains.concat([{begin:/\(/,end:/\)/,contains:["self"].concat(E.contains,[t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE])},t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE]),_={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:b};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:o,contains:[t.SHEBANG({binary:"node",relevance:5}),{className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,d,g,u,t.C_LINE_COMMENT_MODE,t.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+",contains:[{className:"type",begin:"\\{",end:"\\}",relevance:0},{className:"variable",begin:i+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),t.C_BLOCK_COMMENT_MODE,l,{begin:r(/[{,\n]\s*/,s(r(/(((\/\/.*)|(\/\*(.|\n)*\*\/))\s*)*/,i+"\\s*:"))),relevance:0,contains:[{className:"attr",begin:i+s("\\s*:"),relevance:0}]},{begin:"("+t.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE,t.REGEXP_MODE,{className:"function",begin:"(\\([^(]*(\\([^(]*(\\([^(]*\\))?\\))?\\)|"+t.UNDERSCORE_IDENT_RE+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:t.UNDERSCORE_IDENT_RE},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:o,contains:b}]}]},{begin:/,/,relevance:0},{className:"",begin:/\s/,end:/\s*/,skip:!0},{variants:[{begin:"<>",end:""},{begin:c.begin,end:c.end}],subLanguage:"xml",contains:[{begin:c.begin,end:c.end,skip:!0,contains:["self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[t.inherit(t.TITLE_MODE,{begin:i}),_],illegal:/\[|%/},{begin:/\$[(.]/},t.METHOD_GUARD,{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends"},t.UNDERSCORE_TITLE_MODE]},{beginKeywords:"constructor",end:/\{/,excludeEnd:!0},{begin:"(get|set)\\s+(?="+i+"\\()",end:/{/,keywords:"get set",contains:[t.inherit(t.TITLE_MODE,{begin:i}),{begin:/\(\)/},_]}],illegal:/#(?!!)/}}}()); +hljs.registerLanguage("json",function(){"use strict";return function(n){var e={literal:"true false null"},i=[n.C_LINE_COMMENT_MODE,n.C_BLOCK_COMMENT_MODE],t=[n.QUOTE_STRING_MODE,n.C_NUMBER_MODE],a={end:",",endsWithParent:!0,excludeEnd:!0,contains:t,keywords:e},l={begin:"{",end:"}",contains:[{className:"attr",begin:/"/,end:/"/,contains:[n.BACKSLASH_ESCAPE],illegal:"\\n"},n.inherit(a,{begin:/:/})].concat(i),illegal:"\\S"},s={begin:"\\[",end:"\\]",contains:[n.inherit(a)],illegal:"\\S"};return t.push(l,s),i.forEach((function(n){t.push(n)})),{name:"JSON",contains:t,keywords:e,illegal:"\\S"}}}()); +hljs.registerLanguage("kotlin",function(){"use strict";return function(e){var n={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual trait volatile transient native default",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},a={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@"},i={className:"subst",begin:"\\${",end:"}",contains:[e.C_NUMBER_MODE]},s={className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},t={className:"string",variants:[{begin:'"""',end:'"""(?=[^"])',contains:[s,i]},{begin:"'",end:"'",illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,s,i]}]};i.contains.push(t);var r={className:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?"},l={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[e.inherit(t,{className:"meta-string"})]}]},c=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),o={variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]},d=o;return d.variants[1].contains=[o],o.variants[1].contains=[d],{name:"Kotlin",aliases:["kt"],keywords:n,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,c,{className:"keyword",begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",begin:/@\w+/}]}},a,r,l,{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:n,illegal:/fun\s+(<.*>)?[^\s\(]+(\s+[^\s\(]+)\s*=/,relevance:5,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin://,keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:n,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[o,e.C_LINE_COMMENT_MODE,c],relevance:0},e.C_LINE_COMMENT_MODE,c,r,l,t,e.C_NUMBER_MODE]},c]},{className:"class",beginKeywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},e.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,]|$/,excludeBegin:!0,returnEnd:!0},r,l]},t,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:"\n"},{className:"number",begin:"\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",relevance:0}]}}}()); +hljs.registerLanguage("less",function(){"use strict";return function(e){var n="([\\w-]+|@{[\\w-]+})",a=[],s=[],t=function(e){return{className:"string",begin:"~?"+e+".*?"+e}},r=function(e,n,a){return{className:e,begin:n,relevance:a}},i={begin:"\\(",end:"\\)",contains:s,relevance:0};s.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,t("'"),t('"'),e.CSS_NUMBER_MODE,{begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",excludeEnd:!0}},r("number","#[0-9A-Fa-f]+\\b"),i,r("variable","@@?[\\w-]+",10),r("variable","@{[\\w-]+}"),r("built_in","~?`[^`]*?`"),{className:"attribute",begin:"[\\w-]+\\s*:",end:":",returnBegin:!0,excludeEnd:!0},{className:"meta",begin:"!important"});var c=s.concat({begin:"{",end:"}",contains:a}),l={beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not"}].concat(s)},o={begin:n+"\\s*:",returnBegin:!0,end:"[;}]",relevance:0,contains:[{className:"attribute",begin:n,end:":",excludeEnd:!0,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:s}}]},g={className:"keyword",begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{end:"[;{}]",returnEnd:!0,contains:s,relevance:0}},d={className:"variable",variants:[{begin:"@[\\w-]+\\s*:",relevance:15},{begin:"@[\\w-]+"}],starts:{end:"[;}]",returnEnd:!0,contains:c}},b={variants:[{begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:n,end:"{"}],returnBegin:!0,returnEnd:!0,illegal:"[<='$\"]",relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,l,r("keyword","all\\b"),r("variable","@{[\\w-]+}"),r("selector-tag",n+"%?",0),r("selector-id","#"+n),r("selector-class","\\."+n,0),r("selector-tag","&",0),{className:"selector-attr",begin:"\\[",end:"\\]"},{className:"selector-pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{begin:"\\(",end:"\\)",contains:c},{begin:"!important"}]};return a.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,g,d,o,b),{name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:a}}}()); +hljs.registerLanguage("lua",function(){"use strict";return function(e){var t={begin:"\\[=*\\[",end:"\\]=*\\]",contains:["self"]},a=[e.COMMENT("--(?!\\[=*\\[)","$"),e.COMMENT("--\\[=*\\[","\\]=*\\]",{contains:[t],relevance:10})];return{name:"Lua",keywords:{$pattern:e.UNDERSCORE_IDENT_RE,literal:"true false nil",keyword:"and break do else elseif end for goto if in local not or repeat return then until while",built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"},contains:a.concat([{className:"function",beginKeywords:"function",end:"\\)",contains:[e.inherit(e.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",begin:"\\(",endsWithParent:!0,contains:a}].concat(a)},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"\\[=*\\[",end:"\\]=*\\]",contains:[t],relevance:5}])}}}()); +hljs.registerLanguage("makefile",function(){"use strict";return function(e){var i={className:"variable",variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)",contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin:"",relevance:10,contains:[a,i,t,s,{begin:"\\[",end:"\\]",contains:[{className:"meta",begin:"",contains:[a,s,i,t]}]}]},e.COMMENT("\x3c!--","--\x3e",{relevance:10}),{begin:"<\\!\\[CDATA\\[",end:"\\]\\]>",relevance:10},n,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag",begin:")",end:">",keywords:{name:"style"},contains:[c],starts:{end:"",returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:")",end:">",keywords:{name:"script"},contains:[c],starts:{end:"<\/script>",returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:"",contains:[{className:"name",begin:/[^\/><\s]+/,relevance:0},c]}]}}}()); +hljs.registerLanguage("markdown",function(){"use strict";return function(n){const e={begin:"<",end:">",subLanguage:"xml",relevance:0},a={begin:"\\[.+?\\][\\(\\[].*?[\\)\\]]",returnBegin:!0,contains:[{className:"string",begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0,relevance:0},{className:"link",begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}],relevance:10},i={className:"strong",contains:[],variants:[{begin:/_{2}/,end:/_{2}/},{begin:/\*{2}/,end:/\*{2}/}]},s={className:"emphasis",contains:[],variants:[{begin:/\*(?!\*)/,end:/\*/},{begin:/_(?!_)/,end:/_/,relevance:0}]};i.contains.push(s),s.contains.push(i);var c=[e,a];return i.contains=i.contains.concat(c),s.contains=s.contains.concat(c),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:c=c.concat(i,s)},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:c}]}]},e,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},i,s,{className:"quote",begin:"^>\\s+",contains:c,end:"$"},{className:"code",variants:[{begin:"(`{3,})(.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})(.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{begin:"^[-\\*]{3,}",end:"$"},a,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}}}()); +hljs.registerLanguage("nginx",function(){"use strict";return function(e){var n={className:"variable",variants:[{begin:/\$\d+/},{begin:/\$\{/,end:/}/},{begin:"[\\$\\@]"+e.UNDERSCORE_IDENT_RE}]},a={endsWithParent:!0,keywords:{$pattern:"[a-z/_]+",literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},relevance:0,illegal:"=>",contains:[e.HASH_COMMENT_MODE,{className:"string",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/}]},{begin:"([a-z]+):/",end:"\\s",endsWithParent:!0,excludeEnd:!0,contains:[n]},{className:"regexp",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:"\\s\\^",end:"\\s|{|;",returnEnd:!0},{begin:"~\\*?\\s+",end:"\\s|{|;",returnEnd:!0},{begin:"\\*(\\.[a-z\\-]+)+"},{begin:"([a-z\\-]+\\.)+\\*"}]},{className:"number",begin:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{className:"number",begin:"\\b\\d+[kKmMgGdshdwy]*\\b",relevance:0},n]};return{name:"Nginx config",aliases:["nginxconf"],contains:[e.HASH_COMMENT_MODE,{begin:e.UNDERSCORE_IDENT_RE+"\\s+{",returnBegin:!0,end:"{",contains:[{className:"section",begin:e.UNDERSCORE_IDENT_RE}],relevance:0},{begin:e.UNDERSCORE_IDENT_RE+"\\s",end:";|{",returnBegin:!0,contains:[{className:"attribute",begin:e.UNDERSCORE_IDENT_RE,starts:a}],relevance:0}],illegal:"[^\\s\\}]"}}}()); +hljs.registerLanguage("objectivec",function(){"use strict";return function(e){var n=/[a-zA-Z@][a-zA-Z0-9_]*/,_={$pattern:n,keyword:"@interface @class @protocol @implementation"};return{name:"Objective-C",aliases:["mm","objc","obj-c"],keywords:{$pattern:n,keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},illegal:"/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class",begin:"("+_.keyword.split(" ").join("|")+")\\b",end:"({|$)",excludeEnd:!0,keywords:_,contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE,relevance:0}]}}}()); +hljs.registerLanguage("perl",function(){"use strict";return function(e){var n={$pattern:/[\w.]+/,keyword:"getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qq fileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmget sub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedir ioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when"},t={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:n},s={begin:"->{",end:"}"},r={variants:[{begin:/\$\d/},{begin:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{begin:/[\$%@][^\s\w{]/,relevance:0}]},i=[e.BACKSLASH_ESCAPE,t,r],a=[r,e.HASH_COMMENT_MODE,e.COMMENT("^\\=\\w","\\=cut",{endsWithParent:!0}),s,{className:"string",contains:i,variants:[{begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*\\<",end:"\\>",relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE]},{begin:"{\\w+}",contains:[],relevance:0},{begin:"-?\\w+\\s*\\=\\>",contains:[],relevance:0}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[e.HASH_COMMENT_MODE,{className:"regexp",begin:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",relevance:10},{className:"regexp",begin:"(m|qr)?/",end:"/[a-z]*",contains:[e.BACKSLASH_ESCAPE],relevance:0}]},{className:"function",beginKeywords:"sub",end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]}];return t.contains=a,s.contains=a,{name:"Perl",aliases:["pl","pm"],keywords:n,contains:a}}}()); +hljs.registerLanguage("php",function(){"use strict";return function(e){var r={begin:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},t={className:"meta",variants:[{begin:/<\?php/,relevance:10},{begin:/<\?[=]?/},{begin:/\?>/}]},a={className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:'b"',end:'"'},{begin:"b'",end:"'"},e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null})]},n={variants:[e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]},i={keyword:"__CLASS__ __DIR__ __FILE__ __FUNCTION__ __LINE__ __METHOD__ __NAMESPACE__ __TRAIT__ die echo exit include include_once print require require_once array abstract and as binary bool boolean break callable case catch class clone const continue declare default do double else elseif empty enddeclare endfor endforeach endif endswitch endwhile eval extends final finally float for foreach from global goto if implements instanceof insteadof int integer interface isset iterable list new object or private protected public real return string switch throw trait try unset use var void while xor yield",literal:"false null true",built_in:"Error|0 AppendIterator ArgumentCountError ArithmeticError ArrayIterator ArrayObject AssertionError BadFunctionCallException BadMethodCallException CachingIterator CallbackFilterIterator CompileError Countable DirectoryIterator DivisionByZeroError DomainException EmptyIterator ErrorException Exception FilesystemIterator FilterIterator GlobIterator InfiniteIterator InvalidArgumentException IteratorIterator LengthException LimitIterator LogicException MultipleIterator NoRewindIterator OutOfBoundsException OutOfRangeException OuterIterator OverflowException ParentIterator ParseError RangeException RecursiveArrayIterator RecursiveCachingIterator RecursiveCallbackFilterIterator RecursiveDirectoryIterator RecursiveFilterIterator RecursiveIterator RecursiveIteratorIterator RecursiveRegexIterator RecursiveTreeIterator RegexIterator RuntimeException SeekableIterator SplDoublyLinkedList SplFileInfo SplFileObject SplFixedArray SplHeap SplMaxHeap SplMinHeap SplObjectStorage SplObserver SplObserver SplPriorityQueue SplQueue SplStack SplSubject SplSubject SplTempFileObject TypeError UnderflowException UnexpectedValueException ArrayAccess Closure Generator Iterator IteratorAggregate Serializable Throwable Traversable WeakReference Directory __PHP_Incomplete_Class parent php_user_filter self static stdClass"};return{aliases:["php","php3","php4","php5","php6","php7"],case_insensitive:!0,keywords:i,contains:[e.HASH_COMMENT_MODE,e.COMMENT("//","$",{contains:[t]}),e.COMMENT("/\\*","\\*/",{contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.COMMENT("__halt_compiler.+?;",!1,{endsWithParent:!0,keywords:"__halt_compiler"}),{className:"string",begin:/<<<['"]?\w+['"]?$/,end:/^\w+;?$/,contains:[e.BACKSLASH_ESCAPE,{className:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]}]},t,{className:"keyword",begin:/\$this\b/},r,{begin:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{className:"function",beginKeywords:"fn function",end:/[;{]/,excludeEnd:!0,illegal:"[$%\\[]",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:i,contains:["self",r,e.C_BLOCK_COMMENT_MODE,a,n]}]},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,illegal:/[:\(\$"]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",end:";",illegal:/[\.']/,contains:[e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"use",end:";",contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"=>"},a,n]}}}()); +hljs.registerLanguage("php-template",function(){"use strict";return function(n){return{name:"PHP template",subLanguage:"xml",contains:[{begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},n.inherit(n.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),n.inherit(n.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]}]}}}()); +hljs.registerLanguage("plaintext",function(){"use strict";return function(t){return{name:"Plain text",aliases:["text","txt"],disableAutodetect:!0}}}()); +hljs.registerLanguage("properties",function(){"use strict";return function(e){var n="[ \\t\\f]*",t="("+n+"[:=]"+n+"|[ \\t\\f]+)",a="([^\\\\:= \\t\\f\\n]|\\\\.)+",s={end:t,relevance:0,starts:{className:"string",end:/$/,relevance:0,contains:[{begin:"\\\\\\n"}]}};return{name:".properties",case_insensitive:!0,illegal:/\S/,contains:[e.COMMENT("^\\s*[!#]","$"),{begin:"([^\\\\\\W:= \\t\\f\\n]|\\\\.)+"+t,returnBegin:!0,contains:[{className:"attr",begin:"([^\\\\\\W:= \\t\\f\\n]|\\\\.)+",endsParent:!0,relevance:0}],starts:s},{begin:a+t,returnBegin:!0,relevance:0,contains:[{className:"meta",begin:a,endsParent:!0,relevance:0}],starts:s},{className:"attr",relevance:0,begin:a+n+"$"}]}}}()); +hljs.registerLanguage("python",function(){"use strict";return function(e){var n={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10",built_in:"Ellipsis NotImplemented",literal:"False None True"},a={className:"meta",begin:/^(>>>|\.\.\.) /},i={className:"subst",begin:/\{/,end:/\}/,keywords:n,illegal:/#/},s={begin:/\{\{/,relevance:0},r={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/(u|b)?r?'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/(u|b)?r?"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/(fr|rf|f)'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a,s,i]},{begin:/(fr|rf|f)"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a,s,i]},{begin:/(u|r|ur)'/,end:/'/,relevance:10},{begin:/(u|r|ur)"/,end:/"/,relevance:10},{begin:/(b|br)'/,end:/'/},{begin:/(b|br)"/,end:/"/},{begin:/(fr|rf|f)'/,end:/'/,contains:[e.BACKSLASH_ESCAPE,s,i]},{begin:/(fr|rf|f)"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,s,i]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},l={className:"number",relevance:0,variants:[{begin:e.BINARY_NUMBER_RE+"[lLjJ]?"},{begin:"\\b(0o[0-7]+)[lLjJ]?"},{begin:e.C_NUMBER_RE+"[lLjJ]?"}]},t={className:"params",variants:[{begin:/\(\s*\)/,skip:!0,className:null},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:["self",a,l,r,e.HASH_COMMENT_MODE]}]};return i.contains=[r,l,a],{name:"Python",aliases:["py","gyp","ipython"],keywords:n,illegal:/(<\/|->|\?)|=>/,contains:[a,l,{beginKeywords:"if",relevance:0},r,e.HASH_COMMENT_MODE,{variants:[{className:"function",beginKeywords:"def"},{className:"class",beginKeywords:"class"}],end:/:/,illegal:/[${=;\n,]/,contains:[e.UNDERSCORE_TITLE_MODE,t,{begin:/->/,endsWithParent:!0,keywords:"None"}]},{className:"meta",begin:/^[\t ]*@/,end:/$/},{begin:/\b(print|exec)\(/}]}}}()); +hljs.registerLanguage("python-repl",function(){"use strict";return function(n){return{aliases:["pycon"],contains:[{className:"meta",starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}}}()); +hljs.registerLanguage("ruby",function(){"use strict";return function(e){var n="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",a={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},s={className:"doctag",begin:"@[A-Za-z]+"},i={begin:"#<",end:">"},r=[e.COMMENT("#","$",{contains:[s]}),e.COMMENT("^\\=begin","^\\=end",{contains:[s],relevance:10}),e.COMMENT("^__END__","\\n$")],c={className:"subst",begin:"#\\{",end:"}",keywords:a},t={className:"string",contains:[e.BACKSLASH_ESCAPE,c],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:"%[qQwWx]?\\(",end:"\\)"},{begin:"%[qQwWx]?\\[",end:"\\]"},{begin:"%[qQwWx]?{",end:"}"},{begin:"%[qQwWx]?<",end:">"},{begin:"%[qQwWx]?/",end:"/"},{begin:"%[qQwWx]?%",end:"%"},{begin:"%[qQwWx]?-",end:"-"},{begin:"%[qQwWx]?\\|",end:"\\|"},{begin:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{begin:/<<[-~]?'?(\w+)(?:.|\n)*?\n\s*\1\b/,returnBegin:!0,contains:[{begin:/<<[-~]?'?/},e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,contains:[e.BACKSLASH_ESCAPE,c]})]}]},b={className:"params",begin:"\\(",end:"\\)",endsParent:!0,keywords:a},d=[t,i,{className:"class",beginKeywords:"class module",end:"$|;",illegal:/=/,contains:[e.inherit(e.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{begin:"<\\s*",contains:[{begin:"("+e.IDENT_RE+"::)?"+e.IDENT_RE}]}].concat(r)},{className:"function",beginKeywords:"def",end:"$|;",contains:[e.inherit(e.TITLE_MODE,{begin:n}),b].concat(r)},{begin:e.IDENT_RE+"::"},{className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"(\\!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[t,{begin:n}],relevance:0},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{className:"params",begin:/\|/,end:/\|/,keywords:a},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[i,{className:"regexp",contains:[e.BACKSLASH_ESCAPE,c],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:"%r{",end:"}[a-z]*"},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(r),relevance:0}].concat(r);c.contains=d,b.contains=d;var g=[{begin:/^\s*=>/,starts:{end:"$",contains:d}},{className:"meta",begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+>|(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>)",starts:{end:"$",contains:d}}];return{name:"Ruby",aliases:["rb","gemspec","podspec","thor","irb"],keywords:a,illegal:/\/\*/,contains:r.concat(g).concat(d)}}}()); +hljs.registerLanguage("rust",function(){"use strict";return function(e){var n="([ui](8|16|32|64|128|size)|f(32|64))?",t="drop i8 i16 i32 i64 i128 isize u8 u16 u32 u64 u128 usize f32 f64 str char bool Box Option Result String Vec Copy Send Sized Sync Drop Fn FnMut FnOnce ToOwned Clone Debug PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator Extend IntoIterator DoubleEndedIterator ExactSizeIterator SliceConcatExt ToString assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! debug_assert! debug_assert_eq! env! panic! file! format! format_args! include_bin! include_str! line! local_data_key! module_path! option_env! print! println! select! stringify! try! unimplemented! unreachable! vec! write! writeln! macro_rules! assert_ne! debug_assert_ne!";return{name:"Rust",aliases:["rs"],keywords:{$pattern:e.IDENT_RE+"!?",keyword:"abstract as async await become box break const continue crate do dyn else enum extern false final fn for if impl in let loop macro match mod move mut override priv pub ref return self Self static struct super trait true try type typeof unsafe unsized use virtual where while yield",literal:"true false Some None Ok Err",built_in:t},illegal:""}]}}}()); +hljs.registerLanguage("scss",function(){"use strict";return function(e){var t={className:"variable",begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b"},i={className:"number",begin:"#[0-9A-Fa-f]+"};return e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE,{name:"SCSS",case_insensitive:!0,illegal:"[=/|']",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"selector-id",begin:"\\#[A-Za-z0-9_-]+",relevance:0},{className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},{className:"selector-attr",begin:"\\[",end:"\\]",illegal:"$"},{className:"selector-tag",begin:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b",relevance:0},{className:"selector-pseudo",begin:":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)"},{className:"selector-pseudo",begin:"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)"},t,{className:"attribute",begin:"\\b(src|z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b",illegal:"[^\\s]"},{begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{begin:":",end:";",contains:[t,i,e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{className:"meta",begin:"!important"}]},{begin:"@(page|font-face)",lexemes:"@[a-z-]+",keywords:"@page @font-face"},{begin:"@",end:"[{;]",returnBegin:!0,keywords:"and or not only",contains:[{begin:"@[a-z-]+",className:"keyword"},t,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,i,e.CSS_NUMBER_MODE]}]}}}()); +hljs.registerLanguage("shell",function(){"use strict";return function(s){return{name:"Shell Session",aliases:["console"],contains:[{className:"meta",begin:"^\\s{0,3}[/\\w\\d\\[\\]()@-]*[>%$#]",starts:{end:"$",subLanguage:"bash"}}]}}}()); +hljs.registerLanguage("sql",function(){"use strict";return function(e){var t=e.COMMENT("--","$");return{name:"SQL",case_insensitive:!0,illegal:/[<>{}*]/,contains:[{beginKeywords:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment values with",end:/;/,endsWithParent:!0,keywords:{$pattern:/[\w\.]+/,keyword:"as abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias all allocate allow alter always analyze ancillary and anti any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound bucket buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain explode export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force foreign form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour hours http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lateral lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minutes minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notnull notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second seconds section securefile security seed segment select self semi sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tablesample tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unnest unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace window with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null unknown",built_in:"array bigint binary bit blob bool boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text time timestamp tinyint varchar varchar2 varying void"},contains:[{className:"string",begin:"'",end:"'",contains:[{begin:"''"}]},{className:"string",begin:'"',end:'"',contains:[{begin:'""'}]},{className:"string",begin:"`",end:"`"},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,e.HASH_COMMENT_MODE]},e.C_BLOCK_COMMENT_MODE,t,e.HASH_COMMENT_MODE]}}}()); +hljs.registerLanguage("swift",function(){"use strict";return function(e){var i={keyword:"#available #colorLiteral #column #else #elseif #endif #file #fileLiteral #function #if #imageLiteral #line #selector #sourceLocation _ __COLUMN__ __FILE__ __FUNCTION__ __LINE__ Any as as! as? associatedtype associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false fileprivate final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating open operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet",literal:"true false nil",built_in:"abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c compactMap contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip"},n=e.COMMENT("/\\*","\\*/",{contains:["self"]}),t={className:"subst",begin:/\\\(/,end:"\\)",keywords:i,contains:[]},a={className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:/"""/,end:/"""/},{begin:/"/,end:/"/}]},r={className:"number",begin:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",relevance:0};return t.contains=[r],{name:"Swift",keywords:i,contains:[a,e.C_LINE_COMMENT_MODE,n,{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*[!?]"},{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*",relevance:0},r,{className:"function",beginKeywords:"func",end:"{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][0-9A-Za-z$_]*/}),{begin://},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:i,contains:["self",r,a,e.C_BLOCK_COMMENT_MODE,{begin:":"}],illegal:/["']/}],illegal:/\[|%/},{className:"class",beginKeywords:"struct protocol class extension enum",keywords:i,end:"\\{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/})]},{className:"meta",begin:"(@discardableResult|@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@objcMembers|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain|@dynamicMemberLookup|@propertyWrapper)\\b"},{beginKeywords:"import",end:/$/,contains:[e.C_LINE_COMMENT_MODE,n]}]}}}()); +hljs.registerLanguage("typescript",function(){"use strict";const e=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);return function(r){var t={$pattern:"[A-Za-z$_][0-9A-Za-z$_]*",keyword:e.concat(["type","namespace","typedef","interface","public","private","protected","implements","declare","abstract","readonly"]).join(" "),literal:n.join(" "),built_in:a.concat(["any","void","number","boolean","string","object","never","enum"]).join(" ")},s={className:"meta",begin:"@[A-Za-z$_][0-9A-Za-z$_]*"},i={className:"number",variants:[{begin:"\\b(0[bB][01]+)n?"},{begin:"\\b(0[oO][0-7]+)n?"},{begin:r.C_NUMBER_RE+"n?"}],relevance:0},o={className:"subst",begin:"\\$\\{",end:"\\}",keywords:t,contains:[]},c={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[r.BACKSLASH_ESCAPE,o],subLanguage:"xml"}},l={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[r.BACKSLASH_ESCAPE,o],subLanguage:"css"}},E={className:"string",begin:"`",end:"`",contains:[r.BACKSLASH_ESCAPE,o]};o.contains=[r.APOS_STRING_MODE,r.QUOTE_STRING_MODE,c,l,E,i,r.REGEXP_MODE];var d={begin:"\\(",end:/\)/,keywords:t,contains:["self",r.QUOTE_STRING_MODE,r.APOS_STRING_MODE,r.NUMBER_MODE]},u={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,contains:[r.C_LINE_COMMENT_MODE,r.C_BLOCK_COMMENT_MODE,s,d]};return{name:"TypeScript",aliases:["ts"],keywords:t,contains:[r.SHEBANG(),{className:"meta",begin:/^\s*['"]use strict['"]/},r.APOS_STRING_MODE,r.QUOTE_STRING_MODE,c,l,E,r.C_LINE_COMMENT_MODE,r.C_BLOCK_COMMENT_MODE,i,{begin:"("+r.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[r.C_LINE_COMMENT_MODE,r.C_BLOCK_COMMENT_MODE,r.REGEXP_MODE,{className:"function",begin:"(\\([^(]*(\\([^(]*(\\([^(]*\\))?\\))?\\)|"+r.UNDERSCORE_IDENT_RE+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:r.UNDERSCORE_IDENT_RE},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,contains:d.contains}]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/[\{;]/,excludeEnd:!0,keywords:t,contains:["self",r.inherit(r.TITLE_MODE,{begin:"[A-Za-z$_][0-9A-Za-z$_]*"}),u],illegal:/%/,relevance:0},{beginKeywords:"constructor",end:/[\{;]/,excludeEnd:!0,contains:["self",u]},{begin:/module\./,keywords:{built_in:"module"},relevance:0},{beginKeywords:"module",end:/\{/,excludeEnd:!0},{beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:"interface extends"},{begin:/\$[(.]/},{begin:"\\."+r.IDENT_RE,relevance:0},s,d]}}}()); +hljs.registerLanguage("yaml",function(){"use strict";return function(e){var n="true false yes no null",a="[\\w#;/?:@&=+$,.~*\\'()[\\]]+",s={className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{begin:"{{",end:"}}"},{begin:"%{",end:"}"}]}]},i=e.inherit(s,{variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),l={end:",",endsWithParent:!0,excludeEnd:!0,contains:[],keywords:n,relevance:0},t={begin:"{",end:"}",contains:[l],illegal:"\\n",relevance:0},g={begin:"\\[",end:"\\]",contains:[l],illegal:"\\n",relevance:0},b=[{className:"attr",variants:[{begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---s*$",relevance:10},{className:"string",begin:"[\\|>]([0-9]?[+-])?[ ]*\\n( *)[\\S ]+\\n(\\2[\\S ]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+a},{className:"type",begin:"!<"+a+">"},{className:"type",begin:"!"+a},{className:"type",begin:"!!"+a},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"\\-(?=[ ]|$)",relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},{className:"number",begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b"},{className:"number",begin:e.C_NUMBER_RE+"\\b"},t,g,s],c=[...b];return c.pop(),c.push(i),l.contains=c,{name:"YAML",case_insensitive:!0,aliases:["yml","YAML"],contains:b}}}()); +hljs.registerLanguage("armasm",function(){"use strict";return function(s){const e={variants:[s.COMMENT("^[ \\t]*(?=#)","$",{relevance:0,excludeBegin:!0}),s.COMMENT("[;@]","$",{relevance:0}),s.C_LINE_COMMENT_MODE,s.C_BLOCK_COMMENT_MODE]};return{name:"ARM Assembly",case_insensitive:!0,aliases:["arm"],keywords:{$pattern:"\\.?"+s.IDENT_RE,meta:".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND ",built_in:"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 pc lr sp ip sl sb fp a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 d16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 {PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @"},contains:[{className:"keyword",begin:"\\b(adc|(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|wfe|wfi|yield)(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?[sptrx]?(?=\\s)"},e,s.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'",relevance:0},{className:"title",begin:"\\|",end:"\\|",illegal:"\\n",relevance:0},{className:"number",variants:[{begin:"[#$=]?0x[0-9a-f]+"},{begin:"[#$=]?0b[01]+"},{begin:"[#$=]\\d+"},{begin:"\\b\\d+"}],relevance:0},{className:"symbol",variants:[{begin:"^[ \\t]*[a-z_\\.\\$][a-z0-9_\\.\\$]+:"},{begin:"^[a-z_\\.\\$][a-z0-9_\\.\\$]+"},{begin:"[=#]\\w+"}],relevance:0}]}}}()); +hljs.registerLanguage("d",function(){"use strict";return function(e){var a={$pattern:e.UNDERSCORE_IDENT_RE,keyword:"abstract alias align asm assert auto body break byte case cast catch class const continue debug default delete deprecated do else enum export extern final finally for foreach foreach_reverse|10 goto if immutable import in inout int interface invariant is lazy macro mixin module new nothrow out override package pragma private protected public pure ref return scope shared static struct super switch synchronized template this throw try typedef typeid typeof union unittest version void volatile while with __FILE__ __LINE__ __gshared|10 __thread __traits __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__ __VERSION__",built_in:"bool cdouble cent cfloat char creal dchar delegate double dstring float function idouble ifloat ireal long real short string ubyte ucent uint ulong ushort wchar wstring",literal:"false null true"},d="((0|[1-9][\\d_]*)|0[bB][01_]+|0[xX]([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))",n="\\\\(['\"\\?\\\\abfnrtv]|u[\\dA-Fa-f]{4}|[0-7]{1,3}|x[\\dA-Fa-f]{2}|U[\\dA-Fa-f]{8})|&[a-zA-Z\\d]{2,};",t={className:"number",begin:"\\b"+d+"(L|u|U|Lu|LU|uL|UL)?",relevance:0},_={className:"number",begin:"\\b(((0[xX](([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)\\.([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)|\\.?([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))[pP][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))|((0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(\\.\\d*|([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)))|\\d+\\.(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)|\\.(0|[1-9][\\d_]*)([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))?))([fF]|L|i|[fF]i|Li)?|"+d+"(i|[fF]i|Li))",relevance:0},r={className:"string",begin:"'("+n+"|.)",end:"'",illegal:"."},i={className:"string",begin:'"',contains:[{begin:n,relevance:0}],end:'"[cwd]?'},s=e.COMMENT("\\/\\+","\\+\\/",{contains:["self"],relevance:10});return{name:"D",keywords:a,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s,{className:"string",begin:'x"[\\da-fA-F\\s\\n\\r]*"[cwd]?',relevance:10},i,{className:"string",begin:'[rq]"',end:'"[cwd]?',relevance:5},{className:"string",begin:"`",end:"`[cwd]?"},{className:"string",begin:'q"\\{',end:'\\}"'},_,t,r,{className:"meta",begin:"^#!",end:"$",relevance:5},{className:"meta",begin:"#(line)",end:"$",relevance:5},{className:"keyword",begin:"@[a-zA-Z_][a-zA-Z_\\d]*"}]}}}()); +hljs.registerLanguage("handlebars",function(){"use strict";function e(...e){return e.map(e=>(function(e){return e?"string"==typeof e?e:e.source:null})(e)).join("")}return function(n){const a={"builtin-name":"action bindattr collection component concat debugger each each-in get hash if in input link-to loc log lookup mut outlet partial query-params render template textarea unbound unless view with yield"},t=/\[.*?\]/,s=/[^\s!"#%&'()*+,.\/;<=>@\[\\\]^`{|}~]+/,i=e("(",/'.*?'/,"|",/".*?"/,"|",t,"|",s,"|",/\.|\//,")+"),r=e("(",t,"|",s,")(?==)"),l={begin:i,lexemes:/[\w.\/]+/},c=n.inherit(l,{keywords:{literal:"true false undefined null"}}),o={begin:/\(/,end:/\)/},m={className:"attr",begin:r,relevance:0,starts:{begin:/=/,end:/=/,starts:{contains:[n.NUMBER_MODE,n.QUOTE_STRING_MODE,n.APOS_STRING_MODE,c,o]}}},d={contains:[n.NUMBER_MODE,n.QUOTE_STRING_MODE,n.APOS_STRING_MODE,{begin:/as\s+\|/,keywords:{keyword:"as"},end:/\|/,contains:[{begin:/\w+/}]},m,c,o],returnEnd:!0},g=n.inherit(l,{className:"name",keywords:a,starts:n.inherit(d,{end:/\)/})});o.contains=[g];const u=n.inherit(l,{keywords:a,className:"name",starts:n.inherit(d,{end:/}}/})}),b=n.inherit(l,{keywords:a,className:"name"}),h=n.inherit(l,{className:"name",keywords:a,starts:n.inherit(d,{end:/}}/})});return{name:"Handlebars",aliases:["hbs","html.hbs","html.handlebars","htmlbars"],case_insensitive:!0,subLanguage:"xml",contains:[{begin:/\\\{\{/,skip:!0},{begin:/\\\\(?=\{\{)/,skip:!0},n.COMMENT(/\{\{!--/,/--\}\}/),n.COMMENT(/\{\{!/,/\}\}/),{className:"template-tag",begin:/\{\{\{\{(?!\/)/,end:/\}\}\}\}/,contains:[u],starts:{end:/\{\{\{\{\//,returnEnd:!0,subLanguage:"xml"}},{className:"template-tag",begin:/\{\{\{\{\//,end:/\}\}\}\}/,contains:[b]},{className:"template-tag",begin:/\{\{#/,end:/\}\}/,contains:[u]},{className:"template-tag",begin:/\{\{(?=else\}\})/,end:/\}\}/,keywords:"else"},{className:"template-tag",begin:/\{\{\//,end:/\}\}/,contains:[b]},{className:"template-variable",begin:/\{\{\{/,end:/\}\}\}/,contains:[h]},{className:"template-variable",begin:/\{\{/,end:/\}\}/,contains:[h]}]}}}()); +hljs.registerLanguage("haskell",function(){"use strict";return function(e){var n={variants:[e.COMMENT("--","$"),e.COMMENT("{-","-}",{contains:["self"]})]},i={className:"meta",begin:"{-#",end:"#-}"},a={className:"meta",begin:"^#",end:"$"},s={className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},l={begin:"\\(",end:"\\)",illegal:'"',contains:[i,a,{className:"type",begin:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},e.inherit(e.TITLE_MODE,{begin:"[_a-z][\\w']*"}),n]};return{name:"Haskell",aliases:["hs"],keywords:"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec",contains:[{beginKeywords:"module",end:"where",keywords:"module where",contains:[l,n],illegal:"\\W\\.|;"},{begin:"\\bimport\\b",end:"$",keywords:"import qualified as hiding",contains:[l,n],illegal:"\\W\\.|;"},{className:"class",begin:"^(\\s*)?(class|instance)\\b",end:"where",keywords:"class family instance where",contains:[s,l,n]},{className:"class",begin:"\\b(data|(new)?type)\\b",end:"$",keywords:"data family type newtype deriving",contains:[i,s,l,{begin:"{",end:"}",contains:l.contains},n]},{beginKeywords:"default",end:"$",contains:[s,l,n]},{beginKeywords:"infix infixl infixr",end:"$",contains:[e.C_NUMBER_MODE,n]},{begin:"\\bforeign\\b",end:"$",keywords:"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe",contains:[s,e.QUOTE_STRING_MODE,n]},{className:"meta",begin:"#!\\/usr\\/bin\\/env runhaskell",end:"$"},i,a,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,s,e.inherit(e.TITLE_MODE,{begin:"^[_a-z][\\w']*"}),n,{begin:"->|<-"}]}}}()); +hljs.registerLanguage("julia",function(){"use strict";return function(e){var r="[A-Za-z_\\u00A1-\\uFFFF][A-Za-z_0-9\\u00A1-\\uFFFF]*",t={$pattern:r,keyword:"in isa where baremodule begin break catch ccall const continue do else elseif end export false finally for function global if import importall let local macro module quote return true try using while type immutable abstract bitstype typealias ",literal:"true false ARGS C_NULL DevNull ENDIAN_BOM ENV I Inf Inf16 Inf32 Inf64 InsertionSort JULIA_HOME LOAD_PATH MergeSort NaN NaN16 NaN32 NaN64 PROGRAM_FILE QuickSort RoundDown RoundFromZero RoundNearest RoundNearestTiesAway RoundNearestTiesUp RoundToZero RoundUp STDERR STDIN STDOUT VERSION catalan e|0 eu|0 eulergamma golden im nothing pi γ π φ ",built_in:"ANY AbstractArray AbstractChannel AbstractFloat AbstractMatrix AbstractRNG AbstractSerializer AbstractSet AbstractSparseArray AbstractSparseMatrix AbstractSparseVector AbstractString AbstractUnitRange AbstractVecOrMat AbstractVector Any ArgumentError Array AssertionError Associative Base64DecodePipe Base64EncodePipe Bidiagonal BigFloat BigInt BitArray BitMatrix BitVector Bool BoundsError BufferStream CachingPool CapturedException CartesianIndex CartesianRange Cchar Cdouble Cfloat Channel Char Cint Cintmax_t Clong Clonglong ClusterManager Cmd CodeInfo Colon Complex Complex128 Complex32 Complex64 CompositeException Condition ConjArray ConjMatrix ConjVector Cptrdiff_t Cshort Csize_t Cssize_t Cstring Cuchar Cuint Cuintmax_t Culong Culonglong Cushort Cwchar_t Cwstring DataType Date DateFormat DateTime DenseArray DenseMatrix DenseVecOrMat DenseVector Diagonal Dict DimensionMismatch Dims DirectIndexString Display DivideError DomainError EOFError EachLine Enum Enumerate ErrorException Exception ExponentialBackOff Expr Factorization FileMonitor Float16 Float32 Float64 Function Future GlobalRef GotoNode HTML Hermitian IO IOBuffer IOContext IOStream IPAddr IPv4 IPv6 IndexCartesian IndexLinear IndexStyle InexactError InitError Int Int128 Int16 Int32 Int64 Int8 IntSet Integer InterruptException InvalidStateException Irrational KeyError LabelNode LinSpace LineNumberNode LoadError LowerTriangular MIME Matrix MersenneTwister Method MethodError MethodTable Module NTuple NewvarNode NullException Nullable Number ObjectIdDict OrdinalRange OutOfMemoryError OverflowError Pair ParseError PartialQuickSort PermutedDimsArray Pipe PollingFileWatcher ProcessExitedException Ptr QuoteNode RandomDevice Range RangeIndex Rational RawFD ReadOnlyMemoryError Real ReentrantLock Ref Regex RegexMatch RemoteChannel RemoteException RevString RoundingMode RowVector SSAValue SegmentationFault SerializationState Set SharedArray SharedMatrix SharedVector Signed SimpleVector Slot SlotNumber SparseMatrixCSC SparseVector StackFrame StackOverflowError StackTrace StepRange StepRangeLen StridedArray StridedMatrix StridedVecOrMat StridedVector String SubArray SubString SymTridiagonal Symbol Symmetric SystemError TCPSocket Task Text TextDisplay Timer Tridiagonal Tuple Type TypeError TypeMapEntry TypeMapLevel TypeName TypeVar TypedSlot UDPSocket UInt UInt128 UInt16 UInt32 UInt64 UInt8 UndefRefError UndefVarError UnicodeError UniformScaling Union UnionAll UnitRange Unsigned UpperTriangular Val Vararg VecElement VecOrMat Vector VersionNumber Void WeakKeyDict WeakRef WorkerConfig WorkerPool "},a={keywords:t,illegal:/<\//},n={className:"subst",begin:/\$\(/,end:/\)/,keywords:t},o={className:"variable",begin:"\\$"+r},i={className:"string",contains:[e.BACKSLASH_ESCAPE,n,o],variants:[{begin:/\w*"""/,end:/"""\w*/,relevance:10},{begin:/\w*"/,end:/"\w*/}]},l={className:"string",contains:[e.BACKSLASH_ESCAPE,n,o],begin:"`",end:"`"},s={className:"meta",begin:"@"+r};return a.name="Julia",a.contains=[{className:"number",begin:/(\b0x[\d_]*(\.[\d_]*)?|0x\.\d[\d_]*)p[-+]?\d+|\b0[box][a-fA-F0-9][a-fA-F0-9_]*|(\b\d[\d_]*(\.[\d_]*)?|\.\d[\d_]*)([eEfF][-+]?\d+)?/,relevance:0},{className:"string",begin:/'(.|\\[xXuU][a-zA-Z0-9]+)'/},i,l,s,{className:"comment",variants:[{begin:"#=",end:"=#",relevance:10},{begin:"#",end:"$"}]},e.HASH_COMMENT_MODE,{className:"keyword",begin:"\\b(((abstract|primitive)\\s+)type|(mutable\\s+)?struct)\\b"},{begin:/<:/}],n.contains=a.contains,a}}()); +hljs.registerLanguage("nim",function(){"use strict";return function(e){return{name:"Nim",aliases:["nim"],keywords:{keyword:"addr and as asm bind block break case cast const continue converter discard distinct div do elif else end enum except export finally for from func generic if import in include interface is isnot iterator let macro method mixin mod nil not notin object of or out proc ptr raise ref return shl shr static template try tuple type using var when while with without xor yield",literal:"shared guarded stdin stdout stderr result true false",built_in:"int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 float float32 float64 bool char string cstring pointer expr stmt void auto any range array openarray varargs seq set clong culong cchar cschar cshort cint csize clonglong cfloat cdouble clongdouble cuchar cushort cuint culonglong cstringarray semistatic"},contains:[{className:"meta",begin:/{\./,end:/\.}/,relevance:10},{className:"string",begin:/[a-zA-Z]\w*"/,end:/"/,contains:[{begin:/""/}]},{className:"string",begin:/([a-zA-Z]\w*)?"""/,end:/"""/},e.QUOTE_STRING_MODE,{className:"type",begin:/\b[A-Z]\w+\b/,relevance:0},{className:"number",relevance:0,variants:[{begin:/\b(0[xX][0-9a-fA-F][_0-9a-fA-F]*)('?[iIuU](8|16|32|64))?/},{begin:/\b(0o[0-7][_0-7]*)('?[iIuUfF](8|16|32|64))?/},{begin:/\b(0(b|B)[01][_01]*)('?[iIuUfF](8|16|32|64))?/},{begin:/\b(\d[_\d]*)('?[iIuUfF](8|16|32|64))?/}]},e.HASH_COMMENT_MODE]}}}()); +hljs.registerLanguage("nix",function(){"use strict";return function(e){var n={keyword:"rec with let in inherit assert if else then",literal:"true false or and null",built_in:"import abort baseNameOf dirOf isNull builtins map removeAttrs throw toString derivation"},i={className:"subst",begin:/\$\{/,end:/}/,keywords:n},t={className:"string",contains:[i],variants:[{begin:"''",end:"''"},{begin:'"',end:'"'}]},s=[e.NUMBER_MODE,e.HASH_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,t,{begin:/[a-zA-Z0-9-_]+(\s*=)/,returnBegin:!0,relevance:0,contains:[{className:"attr",begin:/\S+/}]}];return i.contains=s,{name:"Nix",aliases:["nixos"],keywords:n,contains:s}}}()); +hljs.registerLanguage("r",function(){"use strict";return function(e){var n="([a-zA-Z]|\\.[a-zA-Z.])[a-zA-Z0-9._]*";return{name:"R",contains:[e.HASH_COMMENT_MODE,{begin:n,keywords:{$pattern:n,keyword:"function if in break next repeat else for return switch while try tryCatch stop warning require library attach detach source setMethod setGeneric setGroupGeneric setClass ...",literal:"NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10"},relevance:0},{className:"number",begin:"0[xX][0-9a-fA-F]+[Li]?\\b",relevance:0},{className:"number",begin:"\\d+(?:[eE][+\\-]?\\d*)?L\\b",relevance:0},{className:"number",begin:"\\d+\\.(?!\\d)(?:i\\b)?",relevance:0},{className:"number",begin:"\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{className:"number",begin:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{begin:"`",end:"`",relevance:0},{className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:'"',end:'"'},{begin:"'",end:"'"}]}]}}}()); +hljs.registerLanguage("scala",function(){"use strict";return function(e){var n={className:"subst",variants:[{begin:"\\$[A-Za-z0-9_]+"},{begin:"\\${",end:"}"}]},a={className:"string",variants:[{begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:'"""',end:'"""',relevance:10},{begin:'[a-z]+"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,n]},{className:"string",begin:'[a-z]+"""',end:'"""',contains:[n],relevance:10}]},s={className:"type",begin:"\\b[A-Z][A-Za-z0-9_]*",relevance:0},t={className:"title",begin:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,relevance:0},i={className:"class",beginKeywords:"class object trait type",end:/[:={\[\n;]/,excludeEnd:!0,contains:[{beginKeywords:"extends with",relevance:10},{begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[s]},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[s]},t]},l={className:"function",beginKeywords:"def",end:/[:={\[(\n;]/,excludeEnd:!0,contains:[t]};return{name:"Scala",keywords:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,{className:"symbol",begin:"'\\w[\\w\\d_]*(?!')"},s,l,i,e.C_NUMBER_MODE,{className:"meta",begin:"@[A-Za-z]+"}]}}}()); +hljs.registerLanguage("x86asm",function(){"use strict";return function(s){return{name:"Intel x86 Assembly",case_insensitive:!0,keywords:{$pattern:"[.%]?"+s.IDENT_RE,keyword:"lock rep repe repz repne repnz xaquire xrelease bnd nobnd aaa aad aam aas adc add and arpl bb0_reset bb1_reset bound bsf bsr bswap bt btc btr bts call cbw cdq cdqe clc cld cli clts cmc cmp cmpsb cmpsd cmpsq cmpsw cmpxchg cmpxchg486 cmpxchg8b cmpxchg16b cpuid cpu_read cpu_write cqo cwd cwde daa das dec div dmint emms enter equ f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem fprem1 fptan frndint frstor fsave fscale fsetpm fsin fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr fsubrp ftst fucom fucomi fucomip fucomp fucompp fxam fxch fxtract fyl2x fyl2xp1 hlt ibts icebp idiv imul in inc incbin insb insd insw int int01 int1 int03 int3 into invd invpcid invlpg invlpga iret iretd iretq iretw jcxz jecxz jrcxz jmp jmpe lahf lar lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw loadall loadall286 lodsb lodsd lodsq lodsw loop loope loopne loopnz loopz lsl lss ltr mfence monitor mov movd movq movsb movsd movsq movsw movsx movsxd movzx mul mwait neg nop not or out outsb outsd outsw packssdw packsswb packuswb paddb paddd paddsb paddsiw paddsw paddusb paddusw paddw pand pandn pause paveb pavgusb pcmpeqb pcmpeqd pcmpeqw pcmpgtb pcmpgtd pcmpgtw pdistib pf2id pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pmachriw pmaddwd pmagw pmulhriw pmulhrwa pmulhrwc pmulhw pmullw pmvgezb pmvlzb pmvnzb pmvzb pop popa popad popaw popf popfd popfq popfw por prefetch prefetchw pslld psllq psllw psrad psraw psrld psrlq psrlw psubb psubd psubsb psubsiw psubsw psubusb psubusw psubw punpckhbw punpckhdq punpckhwd punpcklbw punpckldq punpcklwd push pusha pushad pushaw pushf pushfd pushfq pushfw pxor rcl rcr rdshr rdmsr rdpmc rdtsc rdtscp ret retf retn rol ror rdm rsdc rsldt rsm rsts sahf sal salc sar sbb scasb scasd scasq scasw sfence sgdt shl shld shr shrd sidt sldt skinit smi smint smintold smsw stc std sti stosb stosd stosq stosw str sub svdc svldt svts swapgs syscall sysenter sysexit sysret test ud0 ud1 ud2b ud2 ud2a umov verr verw fwait wbinvd wrshr wrmsr xadd xbts xchg xlatb xlat xor cmove cmovz cmovne cmovnz cmova cmovnbe cmovae cmovnb cmovb cmovnae cmovbe cmovna cmovg cmovnle cmovge cmovnl cmovl cmovnge cmovle cmovng cmovc cmovnc cmovo cmovno cmovs cmovns cmovp cmovpe cmovnp cmovpo je jz jne jnz ja jnbe jae jnb jb jnae jbe jna jg jnle jge jnl jl jnge jle jng jc jnc jo jno js jns jpo jnp jpe jp sete setz setne setnz seta setnbe setae setnb setnc setb setnae setcset setbe setna setg setnle setge setnl setl setnge setle setng sets setns seto setno setpe setp setpo setnp addps addss andnps andps cmpeqps cmpeqss cmpleps cmpless cmpltps cmpltss cmpneqps cmpneqss cmpnleps cmpnless cmpnltps cmpnltss cmpordps cmpordss cmpunordps cmpunordss cmpps cmpss comiss cvtpi2ps cvtps2pi cvtsi2ss cvtss2si cvttps2pi cvttss2si divps divss ldmxcsr maxps maxss minps minss movaps movhps movlhps movlps movhlps movmskps movntps movss movups mulps mulss orps rcpps rcpss rsqrtps rsqrtss shufps sqrtps sqrtss stmxcsr subps subss ucomiss unpckhps unpcklps xorps fxrstor fxrstor64 fxsave fxsave64 xgetbv xsetbv xsave xsave64 xsaveopt xsaveopt64 xrstor xrstor64 prefetchnta prefetcht0 prefetcht1 prefetcht2 maskmovq movntq pavgb pavgw pextrw pinsrw pmaxsw pmaxub pminsw pminub pmovmskb pmulhuw psadbw pshufw pf2iw pfnacc pfpnacc pi2fw pswapd maskmovdqu clflush movntdq movnti movntpd movdqa movdqu movdq2q movq2dq paddq pmuludq pshufd pshufhw pshuflw pslldq psrldq psubq punpckhqdq punpcklqdq addpd addsd andnpd andpd cmpeqpd cmpeqsd cmplepd cmplesd cmpltpd cmpltsd cmpneqpd cmpneqsd cmpnlepd cmpnlesd cmpnltpd cmpnltsd cmpordpd cmpordsd cmpunordpd cmpunordsd cmppd comisd cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtps2dq cvtps2pd cvtsd2si cvtsd2ss cvtsi2sd cvtss2sd cvttpd2pi cvttpd2dq cvttps2dq cvttsd2si divpd divsd maxpd maxsd minpd minsd movapd movhpd movlpd movmskpd movupd mulpd mulsd orpd shufpd sqrtpd sqrtsd subpd subsd ucomisd unpckhpd unpcklpd xorpd addsubpd addsubps haddpd haddps hsubpd hsubps lddqu movddup movshdup movsldup clgi stgi vmcall vmclear vmfunc vmlaunch vmload vmmcall vmptrld vmptrst vmread vmresume vmrun vmsave vmwrite vmxoff vmxon invept invvpid pabsb pabsw pabsd palignr phaddw phaddd phaddsw phsubw phsubd phsubsw pmaddubsw pmulhrsw pshufb psignb psignw psignd extrq insertq movntsd movntss lzcnt blendpd blendps blendvpd blendvps dppd dpps extractps insertps movntdqa mpsadbw packusdw pblendvb pblendw pcmpeqq pextrb pextrd pextrq phminposuw pinsrb pinsrd pinsrq pmaxsb pmaxsd pmaxud pmaxuw pminsb pminsd pminud pminuw pmovsxbw pmovsxbd pmovsxbq pmovsxwd pmovsxwq pmovsxdq pmovzxbw pmovzxbd pmovzxbq pmovzxwd pmovzxwq pmovzxdq pmuldq pmulld ptest roundpd roundps roundsd roundss crc32 pcmpestri pcmpestrm pcmpistri pcmpistrm pcmpgtq popcnt getsec pfrcpv pfrsqrtv movbe aesenc aesenclast aesdec aesdeclast aesimc aeskeygenassist vaesenc vaesenclast vaesdec vaesdeclast vaesimc vaeskeygenassist vaddpd vaddps vaddsd vaddss vaddsubpd vaddsubps vandpd vandps vandnpd vandnps vblendpd vblendps vblendvpd vblendvps vbroadcastss vbroadcastsd vbroadcastf128 vcmpeq_ospd vcmpeqpd vcmplt_ospd vcmpltpd vcmple_ospd vcmplepd vcmpunord_qpd vcmpunordpd vcmpneq_uqpd vcmpneqpd vcmpnlt_uspd vcmpnltpd vcmpnle_uspd vcmpnlepd vcmpord_qpd vcmpordpd vcmpeq_uqpd vcmpnge_uspd vcmpngepd vcmpngt_uspd vcmpngtpd vcmpfalse_oqpd vcmpfalsepd vcmpneq_oqpd vcmpge_ospd vcmpgepd vcmpgt_ospd vcmpgtpd vcmptrue_uqpd vcmptruepd vcmplt_oqpd vcmple_oqpd vcmpunord_spd vcmpneq_uspd vcmpnlt_uqpd vcmpnle_uqpd vcmpord_spd vcmpeq_uspd vcmpnge_uqpd vcmpngt_uqpd vcmpfalse_ospd vcmpneq_ospd vcmpge_oqpd vcmpgt_oqpd vcmptrue_uspd vcmppd vcmpeq_osps vcmpeqps vcmplt_osps vcmpltps vcmple_osps vcmpleps vcmpunord_qps vcmpunordps vcmpneq_uqps vcmpneqps vcmpnlt_usps vcmpnltps vcmpnle_usps vcmpnleps vcmpord_qps vcmpordps vcmpeq_uqps vcmpnge_usps vcmpngeps vcmpngt_usps vcmpngtps vcmpfalse_oqps vcmpfalseps vcmpneq_oqps vcmpge_osps vcmpgeps vcmpgt_osps vcmpgtps vcmptrue_uqps vcmptrueps vcmplt_oqps vcmple_oqps vcmpunord_sps vcmpneq_usps vcmpnlt_uqps vcmpnle_uqps vcmpord_sps vcmpeq_usps vcmpnge_uqps vcmpngt_uqps vcmpfalse_osps vcmpneq_osps vcmpge_oqps vcmpgt_oqps vcmptrue_usps vcmpps vcmpeq_ossd vcmpeqsd vcmplt_ossd vcmpltsd vcmple_ossd vcmplesd vcmpunord_qsd vcmpunordsd vcmpneq_uqsd vcmpneqsd vcmpnlt_ussd vcmpnltsd vcmpnle_ussd vcmpnlesd vcmpord_qsd vcmpordsd vcmpeq_uqsd vcmpnge_ussd vcmpngesd vcmpngt_ussd vcmpngtsd vcmpfalse_oqsd vcmpfalsesd vcmpneq_oqsd vcmpge_ossd vcmpgesd vcmpgt_ossd vcmpgtsd vcmptrue_uqsd vcmptruesd vcmplt_oqsd vcmple_oqsd vcmpunord_ssd vcmpneq_ussd vcmpnlt_uqsd vcmpnle_uqsd vcmpord_ssd vcmpeq_ussd vcmpnge_uqsd vcmpngt_uqsd vcmpfalse_ossd vcmpneq_ossd vcmpge_oqsd vcmpgt_oqsd vcmptrue_ussd vcmpsd vcmpeq_osss vcmpeqss vcmplt_osss vcmpltss vcmple_osss vcmpless vcmpunord_qss vcmpunordss vcmpneq_uqss vcmpneqss vcmpnlt_usss vcmpnltss vcmpnle_usss vcmpnless vcmpord_qss vcmpordss vcmpeq_uqss vcmpnge_usss vcmpngess vcmpngt_usss vcmpngtss vcmpfalse_oqss vcmpfalsess vcmpneq_oqss vcmpge_osss vcmpgess vcmpgt_osss vcmpgtss vcmptrue_uqss vcmptruess vcmplt_oqss vcmple_oqss vcmpunord_sss vcmpneq_usss vcmpnlt_uqss vcmpnle_uqss vcmpord_sss vcmpeq_usss vcmpnge_uqss vcmpngt_uqss vcmpfalse_osss vcmpneq_osss vcmpge_oqss vcmpgt_oqss vcmptrue_usss vcmpss vcomisd vcomiss vcvtdq2pd vcvtdq2ps vcvtpd2dq vcvtpd2ps vcvtps2dq vcvtps2pd vcvtsd2si vcvtsd2ss vcvtsi2sd vcvtsi2ss vcvtss2sd vcvtss2si vcvttpd2dq vcvttps2dq vcvttsd2si vcvttss2si vdivpd vdivps vdivsd vdivss vdppd vdpps vextractf128 vextractps vhaddpd vhaddps vhsubpd vhsubps vinsertf128 vinsertps vlddqu vldqqu vldmxcsr vmaskmovdqu vmaskmovps vmaskmovpd vmaxpd vmaxps vmaxsd vmaxss vminpd vminps vminsd vminss vmovapd vmovaps vmovd vmovq vmovddup vmovdqa vmovqqa vmovdqu vmovqqu vmovhlps vmovhpd vmovhps vmovlhps vmovlpd vmovlps vmovmskpd vmovmskps vmovntdq vmovntqq vmovntdqa vmovntpd vmovntps vmovsd vmovshdup vmovsldup vmovss vmovupd vmovups vmpsadbw vmulpd vmulps vmulsd vmulss vorpd vorps vpabsb vpabsw vpabsd vpacksswb vpackssdw vpackuswb vpackusdw vpaddb vpaddw vpaddd vpaddq vpaddsb vpaddsw vpaddusb vpaddusw vpalignr vpand vpandn vpavgb vpavgw vpblendvb vpblendw vpcmpestri vpcmpestrm vpcmpistri vpcmpistrm vpcmpeqb vpcmpeqw vpcmpeqd vpcmpeqq vpcmpgtb vpcmpgtw vpcmpgtd vpcmpgtq vpermilpd vpermilps vperm2f128 vpextrb vpextrw vpextrd vpextrq vphaddw vphaddd vphaddsw vphminposuw vphsubw vphsubd vphsubsw vpinsrb vpinsrw vpinsrd vpinsrq vpmaddwd vpmaddubsw vpmaxsb vpmaxsw vpmaxsd vpmaxub vpmaxuw vpmaxud vpminsb vpminsw vpminsd vpminub vpminuw vpminud vpmovmskb vpmovsxbw vpmovsxbd vpmovsxbq vpmovsxwd vpmovsxwq vpmovsxdq vpmovzxbw vpmovzxbd vpmovzxbq vpmovzxwd vpmovzxwq vpmovzxdq vpmulhuw vpmulhrsw vpmulhw vpmullw vpmulld vpmuludq vpmuldq vpor vpsadbw vpshufb vpshufd vpshufhw vpshuflw vpsignb vpsignw vpsignd vpslldq vpsrldq vpsllw vpslld vpsllq vpsraw vpsrad vpsrlw vpsrld vpsrlq vptest vpsubb vpsubw vpsubd vpsubq vpsubsb vpsubsw vpsubusb vpsubusw vpunpckhbw vpunpckhwd vpunpckhdq vpunpckhqdq vpunpcklbw vpunpcklwd vpunpckldq vpunpcklqdq vpxor vrcpps vrcpss vrsqrtps vrsqrtss vroundpd vroundps vroundsd vroundss vshufpd vshufps vsqrtpd vsqrtps vsqrtsd vsqrtss vstmxcsr vsubpd vsubps vsubsd vsubss vtestps vtestpd vucomisd vucomiss vunpckhpd vunpckhps vunpcklpd vunpcklps vxorpd vxorps vzeroall vzeroupper pclmullqlqdq pclmulhqlqdq pclmullqhqdq pclmulhqhqdq pclmulqdq vpclmullqlqdq vpclmulhqlqdq vpclmullqhqdq vpclmulhqhqdq vpclmulqdq vfmadd132ps vfmadd132pd vfmadd312ps vfmadd312pd vfmadd213ps vfmadd213pd vfmadd123ps vfmadd123pd vfmadd231ps vfmadd231pd vfmadd321ps vfmadd321pd vfmaddsub132ps vfmaddsub132pd vfmaddsub312ps vfmaddsub312pd vfmaddsub213ps vfmaddsub213pd vfmaddsub123ps vfmaddsub123pd vfmaddsub231ps vfmaddsub231pd vfmaddsub321ps vfmaddsub321pd vfmsub132ps vfmsub132pd vfmsub312ps vfmsub312pd vfmsub213ps vfmsub213pd vfmsub123ps vfmsub123pd vfmsub231ps vfmsub231pd vfmsub321ps vfmsub321pd vfmsubadd132ps vfmsubadd132pd vfmsubadd312ps vfmsubadd312pd vfmsubadd213ps vfmsubadd213pd vfmsubadd123ps vfmsubadd123pd vfmsubadd231ps vfmsubadd231pd vfmsubadd321ps vfmsubadd321pd vfnmadd132ps vfnmadd132pd vfnmadd312ps vfnmadd312pd vfnmadd213ps vfnmadd213pd vfnmadd123ps vfnmadd123pd vfnmadd231ps vfnmadd231pd vfnmadd321ps vfnmadd321pd vfnmsub132ps vfnmsub132pd vfnmsub312ps vfnmsub312pd vfnmsub213ps vfnmsub213pd vfnmsub123ps vfnmsub123pd vfnmsub231ps vfnmsub231pd vfnmsub321ps vfnmsub321pd vfmadd132ss vfmadd132sd vfmadd312ss vfmadd312sd vfmadd213ss vfmadd213sd vfmadd123ss vfmadd123sd vfmadd231ss vfmadd231sd vfmadd321ss vfmadd321sd vfmsub132ss vfmsub132sd vfmsub312ss vfmsub312sd vfmsub213ss vfmsub213sd vfmsub123ss vfmsub123sd vfmsub231ss vfmsub231sd vfmsub321ss vfmsub321sd vfnmadd132ss vfnmadd132sd vfnmadd312ss vfnmadd312sd vfnmadd213ss vfnmadd213sd vfnmadd123ss vfnmadd123sd vfnmadd231ss vfnmadd231sd vfnmadd321ss vfnmadd321sd vfnmsub132ss vfnmsub132sd vfnmsub312ss vfnmsub312sd vfnmsub213ss vfnmsub213sd vfnmsub123ss vfnmsub123sd vfnmsub231ss vfnmsub231sd vfnmsub321ss vfnmsub321sd rdfsbase rdgsbase rdrand wrfsbase wrgsbase vcvtph2ps vcvtps2ph adcx adox rdseed clac stac xstore xcryptecb xcryptcbc xcryptctr xcryptcfb xcryptofb montmul xsha1 xsha256 llwpcb slwpcb lwpval lwpins vfmaddpd vfmaddps vfmaddsd vfmaddss vfmaddsubpd vfmaddsubps vfmsubaddpd vfmsubaddps vfmsubpd vfmsubps vfmsubsd vfmsubss vfnmaddpd vfnmaddps vfnmaddsd vfnmaddss vfnmsubpd vfnmsubps vfnmsubsd vfnmsubss vfrczpd vfrczps vfrczsd vfrczss vpcmov vpcomb vpcomd vpcomq vpcomub vpcomud vpcomuq vpcomuw vpcomw vphaddbd vphaddbq vphaddbw vphadddq vphaddubd vphaddubq vphaddubw vphaddudq vphadduwd vphadduwq vphaddwd vphaddwq vphsubbw vphsubdq vphsubwd vpmacsdd vpmacsdqh vpmacsdql vpmacssdd vpmacssdqh vpmacssdql vpmacsswd vpmacssww vpmacswd vpmacsww vpmadcsswd vpmadcswd vpperm vprotb vprotd vprotq vprotw vpshab vpshad vpshaq vpshaw vpshlb vpshld vpshlq vpshlw vbroadcasti128 vpblendd vpbroadcastb vpbroadcastw vpbroadcastd vpbroadcastq vpermd vpermpd vpermps vpermq vperm2i128 vextracti128 vinserti128 vpmaskmovd vpmaskmovq vpsllvd vpsllvq vpsravd vpsrlvd vpsrlvq vgatherdpd vgatherqpd vgatherdps vgatherqps vpgatherdd vpgatherqd vpgatherdq vpgatherqq xabort xbegin xend xtest andn bextr blci blcic blsi blsic blcfill blsfill blcmsk blsmsk blsr blcs bzhi mulx pdep pext rorx sarx shlx shrx tzcnt tzmsk t1mskc valignd valignq vblendmpd vblendmps vbroadcastf32x4 vbroadcastf64x4 vbroadcasti32x4 vbroadcasti64x4 vcompresspd vcompressps vcvtpd2udq vcvtps2udq vcvtsd2usi vcvtss2usi vcvttpd2udq vcvttps2udq vcvttsd2usi vcvttss2usi vcvtudq2pd vcvtudq2ps vcvtusi2sd vcvtusi2ss vexpandpd vexpandps vextractf32x4 vextractf64x4 vextracti32x4 vextracti64x4 vfixupimmpd vfixupimmps vfixupimmsd vfixupimmss vgetexppd vgetexpps vgetexpsd vgetexpss vgetmantpd vgetmantps vgetmantsd vgetmantss vinsertf32x4 vinsertf64x4 vinserti32x4 vinserti64x4 vmovdqa32 vmovdqa64 vmovdqu32 vmovdqu64 vpabsq vpandd vpandnd vpandnq vpandq vpblendmd vpblendmq vpcmpltd vpcmpled vpcmpneqd vpcmpnltd vpcmpnled vpcmpd vpcmpltq vpcmpleq vpcmpneqq vpcmpnltq vpcmpnleq vpcmpq vpcmpequd vpcmpltud vpcmpleud vpcmpnequd vpcmpnltud vpcmpnleud vpcmpud vpcmpequq vpcmpltuq vpcmpleuq vpcmpnequq vpcmpnltuq vpcmpnleuq vpcmpuq vpcompressd vpcompressq vpermi2d vpermi2pd vpermi2ps vpermi2q vpermt2d vpermt2pd vpermt2ps vpermt2q vpexpandd vpexpandq vpmaxsq vpmaxuq vpminsq vpminuq vpmovdb vpmovdw vpmovqb vpmovqd vpmovqw vpmovsdb vpmovsdw vpmovsqb vpmovsqd vpmovsqw vpmovusdb vpmovusdw vpmovusqb vpmovusqd vpmovusqw vpord vporq vprold vprolq vprolvd vprolvq vprord vprorq vprorvd vprorvq vpscatterdd vpscatterdq vpscatterqd vpscatterqq vpsraq vpsravq vpternlogd vpternlogq vptestmd vptestmq vptestnmd vptestnmq vpxord vpxorq vrcp14pd vrcp14ps vrcp14sd vrcp14ss vrndscalepd vrndscaleps vrndscalesd vrndscaless vrsqrt14pd vrsqrt14ps vrsqrt14sd vrsqrt14ss vscalefpd vscalefps vscalefsd vscalefss vscatterdpd vscatterdps vscatterqpd vscatterqps vshuff32x4 vshuff64x2 vshufi32x4 vshufi64x2 kandnw kandw kmovw knotw kortestw korw kshiftlw kshiftrw kunpckbw kxnorw kxorw vpbroadcastmb2q vpbroadcastmw2d vpconflictd vpconflictq vplzcntd vplzcntq vexp2pd vexp2ps vrcp28pd vrcp28ps vrcp28sd vrcp28ss vrsqrt28pd vrsqrt28ps vrsqrt28sd vrsqrt28ss vgatherpf0dpd vgatherpf0dps vgatherpf0qpd vgatherpf0qps vgatherpf1dpd vgatherpf1dps vgatherpf1qpd vgatherpf1qps vscatterpf0dpd vscatterpf0dps vscatterpf0qpd vscatterpf0qps vscatterpf1dpd vscatterpf1dps vscatterpf1qpd vscatterpf1qps prefetchwt1 bndmk bndcl bndcu bndcn bndmov bndldx bndstx sha1rnds4 sha1nexte sha1msg1 sha1msg2 sha256rnds2 sha256msg1 sha256msg2 hint_nop0 hint_nop1 hint_nop2 hint_nop3 hint_nop4 hint_nop5 hint_nop6 hint_nop7 hint_nop8 hint_nop9 hint_nop10 hint_nop11 hint_nop12 hint_nop13 hint_nop14 hint_nop15 hint_nop16 hint_nop17 hint_nop18 hint_nop19 hint_nop20 hint_nop21 hint_nop22 hint_nop23 hint_nop24 hint_nop25 hint_nop26 hint_nop27 hint_nop28 hint_nop29 hint_nop30 hint_nop31 hint_nop32 hint_nop33 hint_nop34 hint_nop35 hint_nop36 hint_nop37 hint_nop38 hint_nop39 hint_nop40 hint_nop41 hint_nop42 hint_nop43 hint_nop44 hint_nop45 hint_nop46 hint_nop47 hint_nop48 hint_nop49 hint_nop50 hint_nop51 hint_nop52 hint_nop53 hint_nop54 hint_nop55 hint_nop56 hint_nop57 hint_nop58 hint_nop59 hint_nop60 hint_nop61 hint_nop62 hint_nop63",built_in:"ip eip rip al ah bl bh cl ch dl dh sil dil bpl spl r8b r9b r10b r11b r12b r13b r14b r15b ax bx cx dx si di bp sp r8w r9w r10w r11w r12w r13w r14w r15w eax ebx ecx edx esi edi ebp esp eip r8d r9d r10d r11d r12d r13d r14d r15d rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15 cs ds es fs gs ss st st0 st1 st2 st3 st4 st5 st6 st7 mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7 xmm8 xmm9 xmm10 xmm11 xmm12 xmm13 xmm14 xmm15 xmm16 xmm17 xmm18 xmm19 xmm20 xmm21 xmm22 xmm23 xmm24 xmm25 xmm26 xmm27 xmm28 xmm29 xmm30 xmm31 ymm0 ymm1 ymm2 ymm3 ymm4 ymm5 ymm6 ymm7 ymm8 ymm9 ymm10 ymm11 ymm12 ymm13 ymm14 ymm15 ymm16 ymm17 ymm18 ymm19 ymm20 ymm21 ymm22 ymm23 ymm24 ymm25 ymm26 ymm27 ymm28 ymm29 ymm30 ymm31 zmm0 zmm1 zmm2 zmm3 zmm4 zmm5 zmm6 zmm7 zmm8 zmm9 zmm10 zmm11 zmm12 zmm13 zmm14 zmm15 zmm16 zmm17 zmm18 zmm19 zmm20 zmm21 zmm22 zmm23 zmm24 zmm25 zmm26 zmm27 zmm28 zmm29 zmm30 zmm31 k0 k1 k2 k3 k4 k5 k6 k7 bnd0 bnd1 bnd2 bnd3 cr0 cr1 cr2 cr3 cr4 cr8 dr0 dr1 dr2 dr3 dr8 tr3 tr4 tr5 tr6 tr7 r0 r1 r2 r3 r4 r5 r6 r7 r0b r1b r2b r3b r4b r5b r6b r7b r0w r1w r2w r3w r4w r5w r6w r7w r0d r1d r2d r3d r4d r5d r6d r7d r0h r1h r2h r3h r0l r1l r2l r3l r4l r5l r6l r7l r8l r9l r10l r11l r12l r13l r14l r15l db dw dd dq dt ddq do dy dz resb resw resd resq rest resdq reso resy resz incbin equ times byte word dword qword nosplit rel abs seg wrt strict near far a32 ptr",meta:"%define %xdefine %+ %undef %defstr %deftok %assign %strcat %strlen %substr %rotate %elif %else %endif %if %ifmacro %ifctx %ifidn %ifidni %ifid %ifnum %ifstr %iftoken %ifempty %ifenv %error %warning %fatal %rep %endrep %include %push %pop %repl %pathsearch %depend %use %arg %stacksize %local %line %comment %endcomment .nolist __FILE__ __LINE__ __SECT__ __BITS__ __OUTPUT_FORMAT__ __DATE__ __TIME__ __DATE_NUM__ __TIME_NUM__ __UTC_DATE__ __UTC_TIME__ __UTC_DATE_NUM__ __UTC_TIME_NUM__ __PASS__ struc endstruc istruc at iend align alignb sectalign daz nodaz up down zero default option assume public bits use16 use32 use64 default section segment absolute extern global common cpu float __utf16__ __utf16le__ __utf16be__ __utf32__ __utf32le__ __utf32be__ __float8__ __float16__ __float32__ __float64__ __float80m__ __float80e__ __float128l__ __float128h__ __Infinity__ __QNaN__ __SNaN__ Inf NaN QNaN SNaN float8 float16 float32 float64 float80m float80e float128l float128h __FLOAT_DAZ__ __FLOAT_ROUND__ __FLOAT__"},contains:[s.COMMENT(";","$",{relevance:0}),{className:"number",variants:[{begin:"\\b(?:([0-9][0-9_]*)?\\.[0-9_]*(?:[eE][+-]?[0-9_]+)?|(0[Xx])?[0-9][0-9_]*\\.?[0-9_]*(?:[pP](?:[+-]?[0-9_]+)?)?)\\b",relevance:0},{begin:"\\$[0-9][0-9A-Fa-f]*",relevance:0},{begin:"\\b(?:[0-9A-Fa-f][0-9A-Fa-f_]*[Hh]|[0-9][0-9_]*[DdTt]?|[0-7][0-7_]*[QqOo]|[0-1][0-1_]*[BbYy])\\b"},{begin:"\\b(?:0[Xx][0-9A-Fa-f_]+|0[DdTt][0-9_]+|0[QqOo][0-7_]+|0[BbYy][0-1_]+)\\b"}]},s.QUOTE_STRING_MODE,{className:"string",variants:[{begin:"'",end:"[^\\\\]'"},{begin:"`",end:"[^\\\\]`"}],relevance:0},{className:"symbol",variants:[{begin:"^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)"},{begin:"^\\s*%%[A-Za-z0-9_$#@~.?]*:"}],relevance:0},{className:"subst",begin:"%[0-9]+",relevance:0},{className:"subst",begin:"%!S+",relevance:0},{className:"meta",begin:/^\s*\.[\w_-]+/}]}}}()); \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000000..b1b97a16b0 --- /dev/null +++ b/index.html @@ -0,0 +1,211 @@ + + + + + + Introduction - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Introduction

+

powdrVM is a versatile zkVM built on the powdr stack, supporting std Rust, +multiple proof systems, and zk-continuations for unbounded execution. +Designed for flexibility, powdrVM enables efficient proof generation for complex applications with minimal setup.

+

Contributing

+

powdrVM is free and open source. +You can find the source code on GitHub. +Issues and feature requests can be posted on the GitHub issue tracker.

+

License

+ +

The powdr source and documentation are released under the MIT License.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/installation_sdk.html b/installation_sdk.html new file mode 100644 index 0000000000..a7cd366ad5 --- /dev/null +++ b/installation_sdk.html @@ -0,0 +1,260 @@ + + + + + + Installation - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Installation

+

The only way to install powdr currently is to build it from source. +There are two binaries,

+
    +
  • powdr compiles powdr-asm files to powdr-PIL and generates +witnesses and proofs.
  • +
  • powdr-rs compiles Rust crates to powdr-asm via RISCV, and executes +powdr-asm code with given inputs.
  • +
+

Prerequisites

+

You will need the Rust compiler and Cargo, the Rust package manager. +The easiest way to install both is with rustup.rs.

+

On Windows, you will also need a recent version of Visual Studio, +installed with the "Desktop Development With C++" Workloads option.

+

If you want to enable the estark-polygon feature, you also need the following +runtime dependencies:

+
    +
  • gcc
  • +
  • nlohmann-json3-dev
  • +
+

You will also need the following build time dependencies:

+
    +
  • make
  • +
  • pkg-config
  • +
  • libpqxx-dev (Ubuntu) | libpqxx (Arch Linux)
  • +
  • nasm
  • +
+

Building powdr

+

Using a single Cargo command, enabling the Halo2 and Plonky3 backends:

+
cargo install --git https://github.com/powdr-labs/powdr --features halo2,plonky3 powdr-cli
+
+

With SIMD support for the provers that support it:

+
RUSTFLAGS='-C target-cpu=native' cargo install --git https://github.com/powdr-labs/powdr --features halo2,plonky3,plonky3-simd powdr-cli
+
+

Or, by manually building from a local copy of the powdr repository:

+
# clone the repository
+git clone https://github.com/powdr-labs/powdr.git
+cd powdr
+# install powdr-cli
+cargo install --features halo2,plonky3 --path ./cli
+# install powdr-cli with SIMD support (only for the crates that support it)
+RUSTFLAGS='-C target-cpu=native' cargo install --features halo2,plonky3,plonky3-simd --path ./cli
+
+

Building powdr-rs

+

Using a single Cargo command:

+
cargo install --git https://github.com/powdr-labs/powdr powdr-rs-cli
+
+

Or, by manually building from a local copy of the powdr repository:

+
# clone the repository
+git clone https://github.com/powdr-labs/powdr.git
+cd powdr
+# install powdr-rs-cli
+cargo install --path ./cli-rs
+
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/installation_vm.html b/installation_vm.html new file mode 100644 index 0000000000..50a2351df5 --- /dev/null +++ b/installation_vm.html @@ -0,0 +1,214 @@ + + + + + + Installation - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Installation

+

The easiest way to start making ZK proofs with powdrVM is to install cargo-powdr:

+
cargo install cargo-powdr
+
+

cargo-powdr is used to create and manage powdrVM projects, similar to cargo itself.

+

Prerequisites

+

You will need the Rust compiler and Cargo, the Rust package manager. +The easiest way to install both is with rustup.rs.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/mark.min.js b/mark.min.js new file mode 100644 index 0000000000..1636231883 --- /dev/null +++ b/mark.min.js @@ -0,0 +1,7 @@ +/*!*************************************************** +* mark.js v8.11.1 +* https://markjs.io/ +* Copyright (c) 2014–2018, Julian Kühnel +* Released under the MIT license https://git.io/vwTVl +*****************************************************/ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Mark=t()}(this,function(){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},n=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5e3;t(this,e),this.ctx=n,this.iframes=r,this.exclude=i,this.iframesTimeout=o}return n(e,[{key:"getContexts",value:function(){var e=[];return(void 0!==this.ctx&&this.ctx?NodeList.prototype.isPrototypeOf(this.ctx)?Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?this.ctx:"string"==typeof this.ctx?Array.prototype.slice.call(document.querySelectorAll(this.ctx)):[this.ctx]:[]).forEach(function(t){var n=e.filter(function(e){return e.contains(t)}).length>0;-1!==e.indexOf(t)||n||e.push(t)}),e}},{key:"getIframeContents",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},r=void 0;try{var i=e.contentWindow;if(r=i.document,!i||!r)throw new Error("iframe inaccessible")}catch(e){n()}r&&t(r)}},{key:"isIframeBlank",value:function(e){var t="about:blank",n=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&n!==t&&n}},{key:"observeIframeLoad",value:function(e,t,n){var r=this,i=!1,o=null,a=function a(){if(!i){i=!0,clearTimeout(o);try{r.isIframeBlank(e)||(e.removeEventListener("load",a),r.getIframeContents(e,t,n))}catch(e){n()}}};e.addEventListener("load",a),o=setTimeout(a,this.iframesTimeout)}},{key:"onIframeReady",value:function(e,t,n){try{"complete"===e.contentWindow.document.readyState?this.isIframeBlank(e)?this.observeIframeLoad(e,t,n):this.getIframeContents(e,t,n):this.observeIframeLoad(e,t,n)}catch(e){n()}}},{key:"waitForIframes",value:function(e,t){var n=this,r=0;this.forEachIframe(e,function(){return!0},function(e){r++,n.waitForIframes(e.querySelector("html"),function(){--r||t()})},function(e){e||t()})}},{key:"forEachIframe",value:function(t,n,r){var i=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},a=t.querySelectorAll("iframe"),s=a.length,c=0;a=Array.prototype.slice.call(a);var u=function(){--s<=0&&o(c)};s||u(),a.forEach(function(t){e.matches(t,i.exclude)?u():i.onIframeReady(t,function(e){n(t)&&(c++,r(e)),u()},u)})}},{key:"createIterator",value:function(e,t,n){return document.createNodeIterator(e,t,n,!1)}},{key:"createInstanceOnIframe",value:function(t){return new e(t.querySelector("html"),this.iframes)}},{key:"compareNodeIframe",value:function(e,t,n){if(e.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_PRECEDING){if(null===t)return!0;if(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)return!0}return!1}},{key:"getIteratorNode",value:function(e){var t=e.previousNode();return{prevNode:t,node:null===t?e.nextNode():e.nextNode()&&e.nextNode()}}},{key:"checkIframeFilter",value:function(e,t,n,r){var i=!1,o=!1;return r.forEach(function(e,t){e.val===n&&(i=t,o=e.handled)}),this.compareNodeIframe(e,t,n)?(!1!==i||o?!1===i||o||(r[i].handled=!0):r.push({val:n,handled:!0}),!0):(!1===i&&r.push({val:n,handled:!1}),!1)}},{key:"handleOpenIframes",value:function(e,t,n,r){var i=this;e.forEach(function(e){e.handled||i.getIframeContents(e.val,function(e){i.createInstanceOnIframe(e).forEachNode(t,n,r)})})}},{key:"iterateThroughNodes",value:function(e,t,n,r,i){for(var o,a=this,s=this.createIterator(t,e,r),c=[],u=[],l=void 0,h=void 0;void 0,o=a.getIteratorNode(s),h=o.prevNode,l=o.node;)this.iframes&&this.forEachIframe(t,function(e){return a.checkIframeFilter(l,h,e,c)},function(t){a.createInstanceOnIframe(t).forEachNode(e,function(e){return u.push(e)},r)}),u.push(l);u.forEach(function(e){n(e)}),this.iframes&&this.handleOpenIframes(c,e,n,r),i()}},{key:"forEachNode",value:function(e,t,n){var r=this,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},o=this.getContexts(),a=o.length;a||i(),o.forEach(function(o){var s=function(){r.iterateThroughNodes(e,o,t,n,function(){--a<=0&&i()})};r.iframes?r.waitForIframes(o,s):s()})}}],[{key:"matches",value:function(e,t){var n="string"==typeof t?[t]:t,r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(r){var i=!1;return n.every(function(t){return!r.call(e,t)||(i=!0,!1)}),i}return!1}}]),e}(),o=function(){function e(n){t(this,e),this.opt=r({},{diacritics:!0,synonyms:{},accuracy:"partially",caseSensitive:!1,ignoreJoiners:!1,ignorePunctuation:[],wildcards:"disabled"},n)}return n(e,[{key:"create",value:function(e){return"disabled"!==this.opt.wildcards&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),"disabled"!==this.opt.wildcards&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e),new RegExp(e,"gm"+(this.opt.caseSensitive?"":"i"))}},{key:"escapeStr",value:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}},{key:"createSynonymsRegExp",value:function(e){var t=this.opt.synonyms,n=this.opt.caseSensitive?"":"i",r=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(var i in t)if(t.hasOwnProperty(i)){var o=t[i],a="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(i):this.escapeStr(i),s="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(o):this.escapeStr(o);""!==a&&""!==s&&(e=e.replace(new RegExp("("+this.escapeStr(a)+"|"+this.escapeStr(s)+")","gm"+n),r+"("+this.processSynonyms(a)+"|"+this.processSynonyms(s)+")"+r))}return e}},{key:"processSynonyms",value:function(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}},{key:"setupWildcardsRegExp",value:function(e){return(e=e.replace(/(?:\\)*\?/g,function(e){return"\\"===e.charAt(0)?"?":""})).replace(/(?:\\)*\*/g,function(e){return"\\"===e.charAt(0)?"*":""})}},{key:"createWildcardsRegExp",value:function(e){var t="withSpaces"===this.opt.wildcards;return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}},{key:"setupIgnoreJoinersRegExp",value:function(e){return e.replace(/[^(|)\\]/g,function(e,t,n){var r=n.charAt(t+1);return/[(|)\\]/.test(r)||""===r?e:e+"\0"})}},{key:"createJoinersRegExp",value:function(e){var t=[],n=this.opt.ignorePunctuation;return Array.isArray(n)&&n.length&&t.push(this.escapeStr(n.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join("["+t.join("")+"]*"):e}},{key:"createDiacriticsRegExp",value:function(e){var t=this.opt.caseSensitive?"":"i",n=this.opt.caseSensitive?["aàáảãạăằắẳẵặâầấẩẫậäåāą","AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćč","CÇĆČ","dđď","DĐĎ","eèéẻẽẹêềếểễệëěēę","EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïī","IÌÍỈĨỊÎÏĪ","lł","LŁ","nñňń","NÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøō","OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rř","RŘ","sšśșş","SŠŚȘŞ","tťțţ","TŤȚŢ","uùúủũụưừứửữựûüůū","UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿ","YÝỲỶỸỴŸ","zžżź","ZŽŻŹ"]:["aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćčCÇĆČ","dđďDĐĎ","eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïīIÌÍỈĨỊÎÏĪ","lłLŁ","nñňńNÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rřRŘ","sšśșşSŠŚȘŞ","tťțţTŤȚŢ","uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿYÝỲỶỸỴŸ","zžżźZŽŻŹ"],r=[];return e.split("").forEach(function(i){n.every(function(n){if(-1!==n.indexOf(i)){if(r.indexOf(n)>-1)return!1;e=e.replace(new RegExp("["+n+"]","gm"+t),"["+n+"]"),r.push(n)}return!0})}),e}},{key:"createMergedBlanksRegExp",value:function(e){return e.replace(/[\s]+/gim,"[\\s]+")}},{key:"createAccuracyRegExp",value:function(e){var t=this,n=this.opt.accuracy,r="string"==typeof n?n:n.value,i="";switch(("string"==typeof n?[]:n.limiters).forEach(function(e){i+="|"+t.escapeStr(e)}),r){case"partially":default:return"()("+e+")";case"complementary":return"()([^"+(i="\\s"+(i||this.escapeStr("!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~¡¿")))+"]*"+e+"[^"+i+"]*)";case"exactly":return"(^|\\s"+i+")("+e+")(?=$|\\s"+i+")"}}}]),e}(),a=function(){function a(e){t(this,a),this.ctx=e,this.ie=!1;var n=window.navigator.userAgent;(n.indexOf("MSIE")>-1||n.indexOf("Trident")>-1)&&(this.ie=!0)}return n(a,[{key:"log",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"debug",r=this.opt.log;this.opt.debug&&"object"===(void 0===r?"undefined":e(r))&&"function"==typeof r[n]&&r[n]("mark.js: "+t)}},{key:"getSeparatedKeywords",value:function(e){var t=this,n=[];return e.forEach(function(e){t.opt.separateWordSearch?e.split(" ").forEach(function(e){e.trim()&&-1===n.indexOf(e)&&n.push(e)}):e.trim()&&-1===n.indexOf(e)&&n.push(e)}),{keywords:n.sort(function(e,t){return t.length-e.length}),length:n.length}}},{key:"isNumeric",value:function(e){return Number(parseFloat(e))==e}},{key:"checkRanges",value:function(e){var t=this;if(!Array.isArray(e)||"[object Object]"!==Object.prototype.toString.call(e[0]))return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];var n=[],r=0;return e.sort(function(e,t){return e.start-t.start}).forEach(function(e){var i=t.callNoMatchOnInvalidRanges(e,r),o=i.start,a=i.end;i.valid&&(e.start=o,e.length=a-o,n.push(e),r=a)}),n}},{key:"callNoMatchOnInvalidRanges",value:function(e,t){var n=void 0,r=void 0,i=!1;return e&&void 0!==e.start?(r=(n=parseInt(e.start,10))+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&r-t>0&&r-n>0?i=!0:(this.log("Ignoring invalid or overlapping range: "+JSON.stringify(e)),this.opt.noMatch(e))):(this.log("Ignoring invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:n,end:r,valid:i}}},{key:"checkWhitespaceRanges",value:function(e,t,n){var r=void 0,i=!0,o=n.length,a=t-o,s=parseInt(e.start,10)-a;return(r=(s=s>o?o:s)+parseInt(e.length,10))>o&&(r=o,this.log("End range automatically set to the max value of "+o)),s<0||r-s<0||s>o||r>o?(i=!1,this.log("Invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)):""===n.substring(s,r).replace(/\s+/g,"")&&(i=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:s,end:r,valid:i}}},{key:"getTextNodes",value:function(e){var t=this,n="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,function(e){r.push({start:n.length,end:(n+=e.textContent).length,node:e})},function(e){return t.matchesExclude(e.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},function(){e({value:n,nodes:r})})}},{key:"matchesExclude",value:function(e){return i.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}},{key:"wrapRangeInTextNode",value:function(e,t,n){var r=this.opt.element?this.opt.element:"mark",i=e.splitText(t),o=i.splitText(n-t),a=document.createElement(r);return a.setAttribute("data-markjs","true"),this.opt.className&&a.setAttribute("class",this.opt.className),a.textContent=i.textContent,i.parentNode.replaceChild(a,i),o}},{key:"wrapRangeInMappedTextNode",value:function(e,t,n,r,i){var o=this;e.nodes.every(function(a,s){var c=e.nodes[s+1];if(void 0===c||c.start>t){if(!r(a.node))return!1;var u=t-a.start,l=(n>a.end?a.end:n)-a.start,h=e.value.substr(0,a.start),f=e.value.substr(l+a.start);if(a.node=o.wrapRangeInTextNode(a.node,u,l),e.value=h+f,e.nodes.forEach(function(t,n){n>=s&&(e.nodes[n].start>0&&n!==s&&(e.nodes[n].start-=l),e.nodes[n].end-=l)}),n-=l,i(a.node.previousSibling,a.start),!(n>a.end))return!1;t=a.end}return!0})}},{key:"wrapGroups",value:function(e,t,n,r){return r((e=this.wrapRangeInTextNode(e,t,t+n)).previousSibling),e}},{key:"separateGroups",value:function(e,t,n,r,i){for(var o=t.length,a=1;a-1&&r(t[a],e)&&(e=this.wrapGroups(e,s,t[a].length,i))}return e}},{key:"wrapMatches",value:function(e,t,n,r,i){var o=this,a=0===t?0:t+1;this.getTextNodes(function(t){t.nodes.forEach(function(t){t=t.node;for(var i=void 0;null!==(i=e.exec(t.textContent))&&""!==i[a];){if(o.opt.separateGroups)t=o.separateGroups(t,i,a,n,r);else{if(!n(i[a],t))continue;var s=i.index;if(0!==a)for(var c=1;c + + + + + Built-in Functions - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Built-ins

+

Functions

+

The following functions are built into the compiler. +They need to be defined to be accessible, but their assigned value is ignored and the compiler replaces it with the following.

+

Array length

+
let<T> std::array::len: T[] -> int
+

Returns the length of an array as an integer.

+

Example:

+
let x = [1, 2, 3];
+let l = std::array::len(x); // returns 3
+

Panic

+
let std::check::panic: string -> !
+

Aborts evaluation and prints its argument as error message as a +side-effect of its evaluation.

+

Since panic does not generate a constraint, it cannot be used +for correctness checks. The verifier only checks constraints / identities and +thus ignores anything that could lead to a panic. Panic should only +be used to check prover-internal consistency.

+

Example:

+
let secp256k1_inverse = |x|
+    if x == std::convert::fe(0) {
+        panic!("Tried to compute the inverse of zero.")
+    } else {
+        std::math::ff::inverse(x, secp256k1_modulus);
+    };
+

Conversions

+
let<T: FromLiteral> std::convert::fe: T -> fe
+

This function is meant to be used on int, but also works on fe for convenience.

+

It converts a non-negative integer less than the field modulus to a field element. +Causes a type error in all other cases.

+

If the argument is already a field element, it is returned without modification.

+
let<T: FromLiteral> std::convert::int: T -> int
+

This function is meant to be used on fe, but also works on int for convenience.

+

It converts a field element to an integer.

+

If the argument is already an integer, it is returned without modification.

+
let<T: FromLiteral> std::convert::expr: T -> expr
+

This function is meant to be used on int, but also works on fe and expr for convenience.

+

It converts an integer to an expr.

+

If the argument is already an expr, it is returned without modification.

+

Printing

+
let std::debug::print: string -> Constr[]
+

This function takes a string and prints it on the standard output during evaluation, as a side-effect of its evaluation.

+

This function should only be used for debugging purposes.

+

Note that the function does not append a newline at the end.

+

It returns an empty Constr array so that it can be used at statement level where +constraints are expected.

+

Modulus

+
let std::field::modulus: -> int
+

Returns the current field's modulus as an integer.

+

Example:

+
// Inside a machine
+if std::field::modulus() != 2**64 - 2**32 + 1 {
+    panic!("This machine can only be used with the Goldilocks field.")
+} else {
+    []
+};
+

Evaluate

+
let std::prover::eval: expr -> fe
+

Evaluates a column (potentially with ' applied) on the current row.

+

This function can only be used for prover queries or hints and it only +works on columns (and those with ' applied). This means you cannot use +std::prover::eval(x + 1).

+

In the following example, the column x is evaluated in a prover +hint that returns the square root of a number. +Example:

+
machine Sqrt {
+    let sqrt_hint: fe -> fe = |x| match x {
+        // Code to compute the square root of x goes here.
+    };
+
+    col witness x;
+    col witness y(i) query std::prelude::Query::Hint(sqrt_hint(std::prover::eval(x)));
+
+    y * y = x;
+
+}}
+

Challenges

+
let std::prelude::challenge: int, int -> expr
+

Constructs a challenge object, essentially asking the verifier for a random number.

+

The first argument is the proof stage and the second is the identifier of the challenge.

+

If you want two challenges to be different, you have to choose different IDs.

+

Degree

+
let std::prover::min_degree: -> int
+let std::prover::max_degree: -> int
+let std::prover::degree: -> int
+

The degree function returns the number of rows / the length of the witness columns, also +known as the degree. Outside of fixed column definitions, degree fails if min_degree and max_degree are different.

+

Hints

+
let std::prelude::set_hint: expr, (int -> std::prelude::Query) -> ()
+

This function can be used to set a "query function" for a witness column. +Query functions are used during witness generation and allow witness column cells +to receive a value even though they are not uniquely constrained by the constraints.

+

The first argument must be a witness column and the function can only be called +once per witness column.

+

Types

+

There are some types that are not proper built-in types (in the sense that they are not treated +specially in the type system), but they are defined in the +standard library and are referenced by built-in functions.

+

Constr

+

The type Constr or more specifically, std::prelude::Constr is the type of a constraint. +Expressions at statement level are required to evaluate either to Constr or Constr[].

+

It is defined as follows:

+
enum Constr {
+    /// A polynomial identity.
+    Identity(expr, expr),
+    /// A lookup constraint with selectors.
+    Lookup((Option<expr>, Option<expr>), (expr, expr)[]),
+    /// A permutation constraint with selectors.
+    Permutation((Option<expr>, Option<expr>), (expr, expr)[]),
+    /// A connection constraint (copy constraint).
+    Connection((expr, expr)[])
+}
+

The operator = can be applied on two expr values and results in a Constr::Identity.

+

The type implements no traits and allows no operators.

+

Operators

+

The following operators are supported by powdr-pil with their respective signatures.

+
let<T: Add> +: T, T -> T
+let<T: Sub> -: T, T -> T
+let<T: Neg> -: T -> T
+
+let<T: Mul> *: T, T -> T
+let /: int, int -> int
+let %: int, int -> int
+let<T: Pow> **: T, int -> T
+
+let <<: int, int -> int
+let >>: int, int -> int
+let &: int, int -> int
+let |: int, int -> int
+let ^: int, int -> int
+
+let<T: Ord> <: T, T -> bool
+let<T: Ord> <=: T, T -> bool
+let<T: Ord> >: T, T -> bool
+let<T: Ord> >=: T, T -> bool
+
+let<T: Eq> ==: T, T -> bool
+let<T: Eq> !=: T, T -> bool
+
+let =: expr, expr -> Constr
+let ': expr -> expr
+
+let ||: bool, bool -> bool
+let &&: bool, bool -> bool
+let !: bool -> bool
+
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/pil/declarations.html b/pil/declarations.html new file mode 100644 index 0000000000..0a0f83bb23 --- /dev/null +++ b/pil/declarations.html @@ -0,0 +1,252 @@ + + + + + + Declarations - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Declarations

+

Powdr-pil allows the same syntax to declare various kinds of symbols. This includes +constants, fixed columns, witness columns and even higher-order functions. It deduces the symbol kind +from the type of the symbol and the way the symbol is used.

+

Symbols can be declared using let <name>; and they can be declared and defined +using let <name> = <value>;, where <value> is an expression. The type of the symbol +can be explicitly specified using let <name>: <type>; and let <name>: <type> = <value>;. +Symbols with a generic type can be defined using let<TV1, TV1, ..> <name>: <type> = <value>;, +where the TV are newly created type variables that can be used in the type.

+

This syntax can be used for constants, fixed columns, witness columns and even (higher-order) +functions that can transform expressions. The kind of symbol is deduced by its type and whether +it is has a value:

+
    +
  • Symbols without a value are witness columns or arrays of witness columns. Their type can be omitted. If it is given, it must be col or col[k].
  • +
  • Symbols defined with a value and type col (or col[k]) are fixed columns (or arrays of fixed columns).
  • +
  • Symbols defined with a value and type inter (or inter[k]) are intermediate columns (or arrays of intermediate columns).
  • +
  • Everything else is a "generic symbol" that is not a column.
  • +
+

Examples:

+
    // This defines a integer constant. We can omit the type when it is used
+    // somewhere that constrains its type. Since it is not used below,
+    // we have to specify `: int` (another option would be `fe`, field element).
+    let rows: int = 16;
+    // This defines a fixed column that contains the row number in each row.
+    // Only symbols whose type is "col" are considered fixed columns.
+    let step: col = |i| i;
+    // Here, we have a witness column, the do not need an explicit `: col`.
+    let x;
+    // This functions defines a fixed column where each cell contains the
+    // square of its row number.
+    let square: col = |x| x*x;
+    // This is a generic function that computes the sum of an array
+    // given its length.
+    // It is not stored as a column.
+    // If it is used in a constraint, it has to be evaulated, while
+    // columns must be used symbolically.
+    let<T: Add + FromLiteral> sum: T[], int -> T = |a, len| match len {
+        0 => 0,
+        _ => sum(a, len - 1) + a[len - 1],
+    };
+    // This is a constraint that uses the `sum` function:
+    sum([x, step], 2) = 0;
+

Name lookup is performed as follows:

+

Lookup is performed starting from the current namespace, going up to the root component by component +where the first match is used. If all lookups fail, a last attempt is done +inside the std::prelude namespace.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/pil/expressions.html b/pil/expressions.html new file mode 100644 index 0000000000..32df8045c3 --- /dev/null +++ b/pil/expressions.html @@ -0,0 +1,368 @@ + + + + + + Expressions - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Expressions

+

Depending on the context, powdr allows more or less features for expressions.

+

Inside values for declarations, you can use a very flexible language which includes +many different operators, function calls, lambda functions, tuple types, statement blocks, +match statements and others.

+

In statements and expressions that are required to evaluate to constraints / polynomial identities, only a much more restrictive +language can be used. Expressions in that language are called Algebraic Expressions. While you can use +the full language everywhere, in the context of a constraint, the result after function evaluation +and constant propagation has to be an algebraic expression.

+

Generic Expressions

+

The expression language allows the following operators, in order of increased precedence:

+
    +
  • lambda functions: |params| body. Examples: |i| i (the identity), |a, b| a + b (sum)
  • +
  • || - logical or
  • +
  • && - logical and
  • +
  • <, <=, ==, !=, >=, > - comparisons and = - identity operator
  • +
  • | - bitwise or
  • +
  • ^ - bitwise xor
  • +
  • & - bitwise and
  • +
  • <<, >> - left and right shift
  • +
  • +, - - addition and subtraction (binary operator)
  • +
  • *, /, % - multiplication, division and modulo
  • +
  • ** - exponentiation
  • +
  • -, ! - numerical and logical negation (unary operators, prefix)
  • +
  • ' - "next row" operator (suffix)
  • +
  • [], () - array index access and function calls
  • +
+

Elementary expressions are

+
    +
  • number literals (integers)
  • +
  • string literals, written in double quotes, e.g. "hello"
  • +
  • array literals written in square brackets, e.g. [1, 2, 3]
  • +
  • tuples, having at least two elements, e.g. (1, "abc")
  • +
  • statement blocks (see below)
  • +
  • match expressions (see below).
  • +
  • if expressions (see below).
  • +
+

Parentheses are allowed at any point to force precedence.

+

Lambda Functions

+

The only way to declare a function in pil is by assigning a lambda function to a symbol.

+

Example:

+
let x = |i| i + 1;
+

If you want to specify the types of parameters or return values explicitly, you have to do it +on the symbol, you cannot do it on the parameters:

+
let x: int -> int = |i| i + 1;
+

It is possible to use patterns in the function parameters:

+
let y: (int, int), int -> int = |(i, j), _| i + j;
+

If you use patterns, they have to be irrefutable, which means that the pattern has to +be able to match any value of the given type.

+

Statement Blocks

+

A {-}-delimited block can be used everywhere where an expression is expected.

+

It has the form { <statement> ; <statement> ; ... ; <expression> }, +i.e. a sequence of statements followed by an expression. +The statements can either be expressions (f();, only inside constr-functions) +or let statements: let x = ...; / let x;

+

The value of the statement block is the value of the final expression.

+

Example:

+
let plus_one_squared = |x| { let y = x + 1; y * y };
+

Let statements with value can be used everywhere, they just bind an expression to a local variable +and allow to avoid repeating the expression. You can use patterns for the +left hand side of let statements to destructure values.

+

Example:

+
let f = |i| (i / 2, i % 2);
+let (quot, rem) = f(7);
+

The second let statement will create two local variables x and y. You can also ignore values using +the _ pattern element. For details, please see the patterns section.

+

Let statements without value (let x;) create a new witness column and are only allowed inside constr-functions.

+

Similarly, an expression at statement level (e.g. x * (x - 1) = 0;) can be used to create new constraints that are added to the global constraint set +and this can only be done inside a constr-functions.

+

Note that you can always create constraints and return them from a function, even in pure function.

+

Example:

+
let constrain_to_bool: expr -> Constr = |x| x * (x - 1) = 0;
+

Match Expressions

+

Match expressions take the form match <value> { <pattern 1> => <value 1>, <pattern 2> => <value 2>, _ => <default value> }, +with an arbitrary number of match arms.

+

The semantics are that the first match arm where the pattern equals the value after the match keyword is evaluated.

+

Patterns can be used to destructure more complex data types and to capture values inside new local variables. +For more details, please see the patterns section.

+

Example:

+
let fib = |i| match i {
+    0 => 1,
+    1 => 1,
+    _ => fib(i - 2) + fib(i - 1),
+};
+

If Expressions

+

If expressions take the form if <condition> { <true value> } else { <false value> }, where the "else" part is not optional.

+

If the condition evaluates to true, then <true value> is evaluated, otherwise <false value> is.

+

Example:

+
let is_seven = |i| if i == 7 { 1 } else { 0 };
+

Algebraic Expressions

+

For constraints (or functions called at a place where a constraint is expected), the expression syntax is limited: +After evaluating function calls and performing constant propagation, the resulting expression has to +be an "algebraic expression". These are restricted in the following way:

+
    +
  • You can freely use the operators +, -,*.
  • +
  • The operator ** must have a number as exponent.
  • +
  • The operator [i] must have a column name on the left-hand side and the index must be a number.
  • +
  • The operator ' must have a column or [i] on the left-hand-side.
  • +
  • No other operators are allowed.
  • +
+

Arbitrary parentheses are allowed.

+

The following example illustrates how you can still use the generic language:

+
namespace Main(16);
+    // Returns folder(...folder(folder(0, f(0)), f(1)) ..., f(length - 1))
+    // This is a generic function.
+    let<T1, T2> fold: int, (int -> T1), T2, (T2, T1 -> T2) -> T2 =
+        |length, f, initial, folder| match length {
+            0 => initial,
+            _ => folder(fold(length - 1, f, initial, folder), f(length - 1))
+        };
+    // returns f(0) + f(1) + ... + f(length - 1)
+    let sum = |length, f| fold(length, f, 0, |acc, e| acc + e);
+    // This function takes an algebraic expression (a column or expression
+    // involving columns) and returns an identity that forces this expression
+    // to equal 20. Note that `=` is not an assignment but creates an identity constraint.
+    let equals_twenty: expr -> Constr = |x| x = 20;
+    // This declares an array of 16 witness columns.
+    col witness wit[16];
+    // This expression has to evaluate to an identity, but we can still use
+    // higher order functions and all the flexibility of the language.
+    // The sub-expression `sum(16, |i| wit[i])` evaluates to the algebraic
+    // expression "wit[0] + wit[1] + ... + wit[15]", which is then
+    // turned into the identity by `equals_twenty`
+    // wit[0] + wit[1] + ... + wit[15] = 20.
+    equals_twenty(sum(16, |i| wit[i]));
+
+    // We constrained the sum to equal twenty, but there is no unique solution
+    // to that constraint. In order to fully constrain the system, we need to
+    // add something more: The first fifteen columns should all be one.
+
+    // returns [f(0), f(1), ..., f(length - 1)]
+    let make_array = |length, f| fold(length, f, [], |acc, e| acc + [e]);
+    // If an expression evaluates to an array of constraints, all the
+    // constraints in the array are added to the system.
+    make_array(15, |i| wit[i] = 1);
+

Constr and Query Functions

+

Every function in PIL is either a pure, a constr or a query function. They are denoted by

+
    +
  • |...| ...
  • +
  • constr |...| ...
  • +
  • query |...| ...
  • +
+

Inside constr functions, it is possible to create new witness columns +and add constraints to the set of constraints (see the Statement Blocks section for details).

+

Inside query functions, it is possible to evaluate the value of a column on the "current" row +using the std::prover::eval function.

+

Both actions require a certain context to be available, which is not the case for example when +the values of a fixed column are computed.

+

A query function can only be used in the query or hint part of a witness column while constr functions +can only be evaluated in the constraint part of a namespace or machine.

+

You can define and call new constr functions inside a constr function and you can call and define +new query functions inside query functions, but as soon as you enter a pure function, this is not possible any more.

+

Examples:

+
// This function creates and returns a new witness column.
+let new_wit = constr || { let x; x };
+// Queries the current value of a column and returns its square.
+let square_of = query |x| { let v = std::prover::eval(x); v * v };
+// Creates a new witness column, constrains it to be boolean and returns it.
+let new_bool = constr |x| { let x = new_wit(); x * (x - 1) = 0; x };
+// This is a pure function that only returns a constraint, but does not add it
+// to the global set of constraints.
+let bool_constraint: expr -> Constr = |x| x * (x - 1) = 0;
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/pil/fixed_columns.html b/pil/fixed_columns.html new file mode 100644 index 0000000000..d78e63ec48 --- /dev/null +++ b/pil/fixed_columns.html @@ -0,0 +1,233 @@ + + + + + + Fixed Columns - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Fixed columns

+

powdr-pil requires the definition of fixed columns at the time of declaration.

+

For example:

+
col fixed ONES = [1]*; // this is valid
+// col fixed ONES; // this is invalid
+

A number of mechanisms are supported to declare fixed columns. Let N be the total length of the column we're defining.

+

Values with repetitions

+

powdr-pil supports a basic language to define the value of constant columns using:

+
    +
  • arrays, for example [1, 2, 3]
  • +
  • repetition, for example [1, 2]*
  • +
  • concatenation, for example [1, 2] + [3, 4]
  • +
+

These mechanisms can be combined, as long as a single repetition is used per column definition.

+
// valid, as for a given total length, only one column fits this definition for a given `N`
+col fixed A = [1, 2] + [3, 4]* + [5];
+
+// invalid, as many columns fit this definition
+// col fixed A = [1, 2]* + [3, 4]*
+

Mappings

+

A column can be seen as a mapping from integers to field elements. In this context, different functions are supported:

+
col fixed B(i) { i + 1 };
+
+col fixed C(i) {match i {
+    0 => 1,
+    _ => 0
+}};
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/pil/index.html b/pil/index.html new file mode 100644 index 0000000000..bf9da34895 --- /dev/null +++ b/pil/index.html @@ -0,0 +1,208 @@ + + + + + + pil - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

PIL

+

powdr-pil is the lower level of abstraction in powdr. It is strongly inspired by Polygon zkEVM PIL. We refer to the Polygon zkEVM PIL documentation and document deviations from the original design here.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/pil/patterns.html b/pil/patterns.html new file mode 100644 index 0000000000..e9b3a165cf --- /dev/null +++ b/pil/patterns.html @@ -0,0 +1,271 @@ + + + + + + Patterns - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Patterns

+

Patterns are a way to destructure or match certain values. They are valid in match arms, +function parameters or left hand sides of let statements in blocks.

+

A pattern is built up in from the following components:

+
    +
  • _ - the "catch all" pattern that matches anything
  • +
  • x - for an identifier x, matches anything and assigns the value to the new local variable of that name
  • +
  • k - for a literal number k, matches the exact number, either as an int or a fe
  • +
  • -k - for a literal number k, matches the exact negated number, either as an int or a fe
  • +
  • "text" - for a string literal, matches the exact string literal as a string
  • +
  • (a, b, c) - for a tuple, matches a tuple-typed value if all the components match
  • +
  • [a, b, c] - for an array, matches array values of exactly the same length if all the components match
  • +
  • [a, .., b, c] - matches an array that has an initial segment of a and ends in b, c. The omitted part can be empty.
  • +
  • X::Y(a, b) - for an enum variant X::Y, matches that enum variant if all the enum fields match.
  • +
+

Patterns can be nested, which means that the components of tuple and array patterns +are themselves patterns.

+

Some examples:

+
// This pattern de-structures the first function parameter.
+let f: (int, int), int -> int = |(a, b), c| (a + c, b);
+// Matches a tuple, ignores the second component.
+let (x, _) = f((6, 7), 3);
+// The match statement typically uses patterns to check for certain values
+// but it can also destructure and create new local variables valid inside
+// the match arm.
+let t = match (x, f((1, x), 2)) {
+    (0, _) => 0,
+    (1, _) => 7,
+    (_, y) => y,
+    _ => 9
+};
+let head: int[] -> int = |x| match x {
+    // Matches the first element of a non-empty array and binds it to a local variable.
+    [a, ..] => a,
+    [] => std::check::panic("Called 'head' on empty array."),
+};
+
+

Note that PIL does not check that patterns in a match expression are exhaustive.

+
+

(Ir-)refutability

+

A pattern is refutable if there is a value of the correct type that the pattern does not match. +An example is the pattern 7 since it does not match all integers, or the patten [x, ..], because it +does not match the empty array.

+

Refutable patterns are fine in match arms, because if the pattern does not match, the evaluator will +just continue trying the next match arm, but they are disallowed in let statements and in function +parameters, because there we do not have the option of "trying the next arm".

+

Example:

+
let f: int -> int[] = |i| match i {
+    // This is a refutable pattern, but it is fine
+    // because we will try the next match arm.
+    0 => [],
+    _ => f(i - 1) + [i],
+};
+// This pattern does not match all `int[]`, because it requires a length
+// of at least one.
+let [x, ..] = f(8);
+

The following patterns are refutable:

+
    +
  • all integer literal patterns
  • +
  • all string literal patterns
  • +
  • enum variant patterns
  • +
  • tuple patterns that have refutable components
  • +
  • array patterns that are not [..].
  • +
+

Variable patterns and _ are always irrefutable.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/pil/types.html b/pil/types.html new file mode 100644 index 0000000000..eb830c2d60 --- /dev/null +++ b/pil/types.html @@ -0,0 +1,444 @@ + + + + + + Types - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Types

+

The powdr-pil language has the following types:

+
    +
  • bool
  • +
  • int (integer)
  • +
  • fe (field element)
  • +
  • string
  • +
  • tuple
  • +
  • array
  • +
  • function type
  • +
  • expr (expression)
  • +
  • ! ("bottom" or "unreachable" type)
  • +
  • enum types
  • +
+
+

In addition, there are the col and inter types, but they are special in that +they are only used for declaring columns, but cannot appear as the type of an expression. +See Declaring and Referencing Columns for details.

+
+

Powdr-pil performs Hindley-Milner type inference. This means that, similar to Rust, the type of +a symbol does not always have to be specified. The compiler will try to find a type for every +symbol depending both on the value assigned to the symbol and on the context the symbol is used in. +It is an error if the type is not uniquely determined.

+

Symbols can have a generic type, but in those cases, you have to explicitly specify the generic type. +Such declarations can require type variables to satisfy certain trait bounds. +Currently, only built-in traits are supported (see the next section).

+

Literal numbers do not have a specific type, they can be either int, fe or expr (the types that +implement the FromLiteral trait), and their type can also stay generic until evaluation.

+

Example

+

The following snippet defines a function that takes a value of a generic type and returns the value incremented by one. +The type bounds on the generic type are FromLiteral and Add. The type checker will complain if we do not specify +the type bounds. The bound Add is required because we use the + operator in the function and FromLiteral is needed +because we use the literal 1 as a value of that type.

+
let<T: FromLiteral + Add> add_one: T -> T = |i| i + 1;
+

Declaring and Referencing Columns

+

A symbol declared to have type col or inter (or col[k] / inter[k]) is a bit special:

+

These symbols represent columns in the arithmetization and the types of values that can be assigned to +such symbols and the references to the symbols are different from their declared type.

+

If you assign a value to a col symbol, that value is expected to have type int -> fe or int -> int (or an array thereof). +This allows the simple declaration of a fixed column let byte: col = |i| i & 0xff; without complicated conversions. +The integer value is converted to a field element during evaluation, but it has to be non-negative and less than +the field modulus.

+

Symbols of declared type col are fixed (those with value) or witness columns (those without value).

+

A symbol of declared type inter is an intermediate column. You can assign it a value of type expr. +The idea of an intermediate column is that it is an algebraic expression of other columns that you do +not want to compute multiple times.

+
+

Note that if you use let x: expr = a * b;, the symbol x is just a name in the PIL environment, +this will not create an intermediate column. The difference between inter and expr in this case +is that if you use let x: inter = ..., the expression might not be inlined into constraints (depending on the backend), +while if you use let x: expr = ..., it will always be inlined.

+
+

If you reference a symbol of declared type inter or col, the type of the reference is expr (or expr[]). +A byte constraint is as easy as [ X ] in [ byte ], since the expected types in plookup columns is expr. +The downside is that you cannot evaluate columns as functions. If you want to do that, you either have to assign +a copy to an int -> int symbol: let byte_f: int -> int = |i| i & 0xff; let byte: col = byte_f;. +Or you can use the built-in function std::prover::eval if you want to do that inside a prover query or hint.

+

All other symbols use their declared type both for their value and for references to these symbols.

+

Built-in Traits

+

FromLiteral: +Implemented by int, fe, expr. The type of a number literal needs to implement FromLiteral.

+

Add: Implemented by int, fe, expr, T[], string. Used by <T: Add> +: T, T -> T (binary plus).

+

Sub: +Implemented by int, fe, expr. Used by <T: Sub> -: T, T -> T (binary minus).

+

Neg: +Implemented by int, fe, expr. Used by <T: Neg> -: T -> T (unary minus).

+

Mul: +Implemented by int, fe, expr. Used by <T: Mul> *: T, T -> T (binary multiplication).

+

Pow: +Implemented by int, fe, expr, Used by <T: Pow> **: T, int -> T (exponentiation).

+

Ord: +Implemented by int. Used by <T: Ord> op: T, T, -> bool for op being one of <, >, <=, >=.

+

Eq: +Implemented by int, fe, expr. Used by <T: Eq> op: T, T -> bool for op being one of ==, !=.

+

List of Types

+

Bool

+

Type name: bool

+

Booleans are the results of comparisons. They allow the following operators:

+
    +
  • &&: logical conjunction
  • +
  • ||: logical disjunction
  • +
  • !: logical negation
  • +
+

Short-circuiting is not performed when evaluating boolean operators. +This means that (1 == 1) || std::check::panic("reason") will cause a panic abort.

+

Integer

+

Type name: int

+

Integers in powdr-pil have unlimited size. +Array index requires an integer and row indices (for example the input to a fixed +column defined through a function) are also integers.

+

Integer implements FromLiteral, which means that literal numbers can be used in contexts where int is expected.

+

Integers allow the following operators, whose result is always an integer:

+
    +
  • +: addition
  • +
  • -: subtraction (also unary negation)
  • +
  • *: multiplication
  • +
  • /: integer division rounding towards zero, division by zero results in a runtime error
  • +
  • **: exponentiation, the exponent needs to be non-negative and fit 32 bits, otherwise a runtime error is triggered
  • +
  • %: remainder after division, (for signed arguments, p % q == sgn(p) * abs(p) % abs(q)), remainder by zero results in a runtime error
  • +
  • &: bit-wise conjunction
  • +
  • |: bit-wise disjunction
  • +
  • ^: bit-wise exclusive or
  • +
  • <<: bit-wise shift left, the shift amount needs to be non-negative and fit 32 bits, otherwise a runtime error is triggered
  • +
  • >>: bit-wise shift right, the shift amount needs to be non-negative and fit 32 bits, otherwise a runtime error is triggered
  • +
+

The exponentiation operator on field elements requires a non-negative integer as exponent. +It has the signature **: fe, int -> fe.

+

In addition, the following comparison operators are allowed, the result is a boolean:

+
    +
  • <: less than
  • +
  • <=: less or equal
  • +
  • ==: equal
  • +
  • !=: not equal
  • +
  • >=: greater or equal
  • +
  • >: greater than
  • +
+

Field Element

+

Type name: fe

+

Field elements are elements of a particular but unspecified prime field. The exact field is +chosen when powdr is run. The modulus of that field can be accessed via std::field::modulus().

+

Field elements are the values stored in (fixed and witness) columns. +Arithmetic inside constraints (algebraic expressions) is also always finite field arithmetic.

+

The type fe implements FromLiteral, which means that literal numbers can be used in contexts where fe is expected. +If the literal number is not less than the field modulus, a runtime error is caused.

+

Field elements allow the following operators, where the result is always a field element:

+
    +
  • +: finite field addition
  • +
  • -: finite field subtraction (also unary negation)
  • +
  • *: finite field multiplication
  • +
+

There is also an exponentiation operator ** on field elements. It requires the exponent +to be a non-negative integer and thus has the signature **: fe, int -> fe. If the exponent is negative, a runtime error is triggered. 0**0 is defined as 1.

+

The following comparison operators exist for field elements, whose result is a boolean:

+
    +
  • ==: equality comparison
  • +
  • !=: inequality comparison
  • +
+

Since finite fields do not have an inherent order as integers do, if you want to +compare them using <, you have to first convert them to integers.

+

String

+

Type name: string

+

String literals are written as "string content". They are mainly used for debugging or +documentation purposes, since they cannot occur in constraints.

+

They allow the following operators:

+
    +
  • +: string concatenation
  • +
+

Tuple

+

Type name: (..., ..., ...)

+

Tuples are complex types that are composed from other types, either zero or two or more. There is no tuple type with a single element ((int) is the same as int). +The empty tuple type is written as ().

+

Examples include (int, int) (a pair of integers) and ((fe[], int), ()) +(a tuple consisting of a tuple that contains an array of field elements and an integer +and an empty tuple).

+

Tuples values are constructed using parentheses: (1, 2) constructs the tuple that consists of +a one and a two.

+

Tuples do not allow any operators.

+

Array

+

Type name: _[]

+

Arrays are statically or dynamically-sized collections of elements each of the same type +denoted for example as int[] (a dynamically-sized array of integers) or int[2] (an array of integers with static size two). +Array values can be constructed inline using [1, 2] (the array containing the +two elements one and two).

+

The built-in function std::array::len can be used to retrieve the length of an array (statically or dynamically sized) +and the elements of an array a can be accessed using a[0], a[1], etc.

+

The type checker currently only knows dynamically-sized arrays, which means that it does not compare the sizes of statically-sized array types.

+

Arrays allow the following operators:

+
    +
  • +: array concatenation
  • +
  • _[]: array index access, the index needs to be a non-negative integer that is less than the length of the array, otherwise a runtime error is triggered
  • +
+

Function

+

Type name: T1, T2, ..., Tn -> T0

+

Function type names are for example denoted as int, fe -> int or -> int. +Note that (int, fe) -> int is a function that takes a single tuple as parameter +while int, fe -> int takes two parameters of type integer and field element.

+

Functions can be constructed using the lambda expression notation. +For example |x, y| x + y returns a function that performs addition. +The lambda expression || 7 is a function that returns a constant (has no parameters). +Lambda functions can capture anything in their environment and thus form closures.

+

Functions allow the following operators:

+
    +
  • _(...): function evaluation
  • +
+

Powdr-pil is usually side-effect free, but there are some built-in functions that have +side-effects: +These are std::debug::print and std::check::panic and all functions that call them. +Expressions are eagerly evaluated from left to right.

+

Expression

+

Type name: expr

+

Expressions are the elements of the algebraic expressions used in constraints.

+

References to columns have type expr and expr also implements FromLiteral, +which means that literal numbers can be used in contexts where expr is expected.

+

Example:

+
let x: col;
+let y: col;
+let f: -> expr = || x + y;
+let g = || 7;
+f() = g();
+

The first two lines define the witness columns x and y. +The next two lines define the utility functions f and g. +The function f adds the two columns x and y symbolically - it essentially returns the expression x + y. +The last line is at statement level and it is expected that it evaluates to a constraint, in this case, a polynomial identity. +Because of that, g is inferred to have type -> expr, which is compatible with the literal 7.

+

Since expressions are built from abstract column references, applying operators +does not perform any operations but instead constructs an abstract expression structure / syntax tree.

+

Expressions allow the following operators, which always construct new expressions:

+
    +
  • +: additive combination of expressions
  • +
  • -: subtractive combination of expressions (also unary negation)
  • +
  • *: multiplicative combination of expressions
  • +
  • **: exponential combination of an expression with an integer constant
  • +
  • ': reference to the next row of a column, can only be applied directly to columns and only once
  • +
+

The operator = on expressions constructs a constraint (see [../builtins#Constr]).

+

Bottom Type

+

Type name: !

+

The bottom type essentially is the return type of a function that never returns, which currently only happens +if you call the panic function. The bottom type is compatible with any other type, which means +that you can call the panic function in any context.

+

Enum Types

+

Enums are user-defined types that can hold different named alternatives plus data. An enum type has a (namespaced) name +that uniquely identifies it and is also used to reference the type.

+

Enums are declared in the following way:

+
enum EnumName {
+    Variant1,
+    Variant2(),
+    Variant3(int),
+    Variant4(int, int[], EnumName),
+}
+

The variants must have unique names inside the enum and they can optionally take additional data. +Each variant declares a type constructor function that can be used to create a value of the enum:

+
let a = EnumName::Variant1;
+let b = EnumName::Variant2();
+let c = EnumName::Variant3(3);
+let d = EnumName::Variant4(1, [2, 3], EnumName::Variant1);
+

Recursive enums are allowed.

+

Enums do not allow any operators.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/powdr_crate.html b/powdr_crate.html new file mode 100644 index 0000000000..38e65298bf --- /dev/null +++ b/powdr_crate.html @@ -0,0 +1,296 @@ + + + + + + as a library - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Hello World using powdr as a library

+

Besides the CLI, powdr can also be used as a Rust library. +The powdr crate +exposes internal crates and data structures needed to compile code, +generate witnesses, and compute proofs.

+

Add powdr to your crate's dependencies:

+
[dependencies]
+powdr = { git = "https://github.com/powdr-labs/powdr", branch = "main" }
+
+

The following Rust code has the same workflow as our previous "Hello World" +example. The full project can be found +here, and as an example in +the powdr crate. To run the example in the powdr +repository, run:

+
cargo run --example powdr_crate_usage
+
+

You can also enable logs to know what is happening internally:

+
RUST_LOG=info cargo run --example powdr_crate_usage
+
+
use powdr_test::halo2_pipeline;
+
+fn main() {
+    env_logger::init();
+
+    halo2_pipeline(
+        "test_data/asm/book/hello_world.asm",
+        vec![0.into()],
+        vec![],
+        8,
+    );
+}
+
use powdr::backend::BackendType;
+use powdr::number::buffered_write_file;
+use powdr::Bn254Field;
+use powdr::Pipeline;
+
+use std::path::Path;
+
+pub fn halo2_pipeline(
+    pil: &str,
+    prover_inputs: Vec<Bn254Field>,
+    publics: Vec<Bn254Field>,
+    setup_size: u64,
+) {
+    // Straightforward case
+    let _proof = Pipeline::<Bn254Field>::default()
+        .from_file(pil.into())
+        .with_prover_inputs(prover_inputs.clone())
+        .with_backend(BackendType::Halo2, None)
+        .compute_proof()
+        .unwrap();
+
+    // Step-by-step case
+
+    // First we create the universal setup of size 8
+    buffered_write_file(Path::new("params.bin"), |writer| {
+        BackendType::Halo2
+            .factory::<Bn254Field>()
+            .generate_setup(setup_size, writer)
+            .unwrap()
+    })
+    .unwrap();
+
+    // Configure a pipeline
+    let mut pipeline = Pipeline::<Bn254Field>::default()
+        .from_file(pil.into())
+        .with_prover_inputs(prover_inputs)
+        .with_backend(BackendType::Halo2, None)
+        .with_setup_file(Some("params.bin".into()));
+
+    // Create the verification key
+    buffered_write_file(Path::new("vkey.bin"), |w| {
+        pipeline.export_verification_key(w).unwrap()
+    })
+    .unwrap();
+
+    // Add the verification key to a fresh pipeline and create a proof
+    let mut pipeline_fresh = pipeline.clone().with_vkey_file(Some("vkey.bin".into()));
+
+    let proof = pipeline_fresh.compute_proof().unwrap();
+
+    // Create yet another fresh pipeline only for proof verification
+    let mut pipeline = pipeline
+        .with_backend(BackendType::Halo2, None)
+        .with_setup_file(Some("params.bin".into()))
+        .with_vkey_file(Some("vkey.bin".into()));
+
+    // Verify a proof created by a different Pipeline
+    pipeline.verify(proof, &[publics]).unwrap();
+}
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/powdr_logo_pink.png b/powdr_logo_pink.png new file mode 100644 index 0000000000..4cd39d3f80 Binary files /dev/null and b/powdr_logo_pink.png differ diff --git a/powdr_sdk_intro.html b/powdr_sdk_intro.html new file mode 100644 index 0000000000..d2bc08b846 --- /dev/null +++ b/powdr_sdk_intro.html @@ -0,0 +1,223 @@ + + + + + + Introduction - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Introduction

+

powdr is a modular compiler stack to build zkVMs. +It is ideal for implementing existing VMs and experimenting with new designs with minimal boilerplate.

+
    +
  • Domain specific languages are used to specify the VM and its underlying constraints, not low level Rust code
  • +
  • Automated witness generation
  • +
  • Support for multiple provers as well as aggregation schemes
  • +
  • Support for hand-optimized co-processors when performance is critical
  • +
  • Built in Rust 🦀
  • +
+

Contributing

+

powdr is free and open source. You can find the source code on +GitHub. Issues and feature requests can be posted on +the GitHub issue tracker.

+

License

+ +

The powdr source and documentation are released under the MIT License.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/powdr_vm_intro.html b/powdr_vm_intro.html new file mode 100644 index 0000000000..b1b97a16b0 --- /dev/null +++ b/powdr_vm_intro.html @@ -0,0 +1,211 @@ + + + + + + Introduction - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Introduction

+

powdrVM is a versatile zkVM built on the powdr stack, supporting std Rust, +multiple proof systems, and zk-continuations for unbounded execution. +Designed for flexibility, powdrVM enables efficient proof generation for complex applications with minimal setup.

+

Contributing

+

powdrVM is free and open source. +You can find the source code on GitHub. +Issues and feature requests can be posted on the GitHub issue tracker.

+

License

+ +

The powdr source and documentation are released under the MIT License.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/powdr_wires.png b/powdr_wires.png new file mode 100644 index 0000000000..2772f906e3 Binary files /dev/null and b/powdr_wires.png differ diff --git a/print.html b/print.html new file mode 100644 index 0000000000..cadc0b6921 --- /dev/null +++ b/print.html @@ -0,0 +1,2532 @@ + + + + + + powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Introduction

+

powdrVM is a versatile zkVM built on the powdr stack, supporting std Rust, +multiple proof systems, and zk-continuations for unbounded execution. +Designed for flexibility, powdrVM enables efficient proof generation for complex applications with minimal setup.

+

Contributing

+

powdrVM is free and open source. +You can find the source code on GitHub. +Issues and feature requests can be posted on the GitHub issue tracker.

+

License

+ +

The powdr source and documentation are released under the MIT License.

+

Installation

+

The easiest way to start making ZK proofs with powdrVM is to install cargo-powdr:

+
cargo install cargo-powdr
+
+

cargo-powdr is used to create and manage powdrVM projects, similar to cargo itself.

+

Prerequisites

+

You will need the Rust compiler and Cargo, the Rust package manager. +The easiest way to install both is with rustup.rs.

+

Quick Start

+

First, create a new powdrVM project with

+
cargo-powdr new my-host
+
+
    +
  • Your new crate my-host is the host of the virtual machine's execution, +and is responsible for preparing data and running the prover.
  • +
  • The guest crate in your new project contains the Rust code whose execution will be proven.
  • +
+

Most of these details are abstracted by the powdr library.

+

Now that your project is set up, just run

+
cargo run -r
+
+

The host manages a powdr::Session which can be used to share data +with the guest, test the execution, and generate ZK proofs.

+
use powdr::Session;
+
+fn main() {
+    env_logger::init();
+
+    let some_data = vec![1, 2, 3, 4, 5];
+
+    // Create a new powdr session to make proofs for the `guest` crate.
+    // Store all temporary and final artifacts in `powdr-target`.
+    let mut session = Session::builder()
+        .guest_path("./guest")
+        .out_path("powdr-target")
+        // powdrVM splits long execution traces into chunks
+        // which are proven individually.
+        // The default size of a chunk is 2^20 = 1048576 rows.
+        // For experiments and smaller traces/proofs, it may be beneficial to reduce the chunk size.
+        // Create a new powdr session with a custom chunk size.
+        // 2^18 = 262144 rows per chunk.
+        .chunk_size_log2(18)
+        .build()
+        // Write `some_data` to channel 1 and the sum of `some_data` to channel 2.
+        // Any serde-serializable type can be written to a channel.
+        .write(1, &some_data)
+        .write(2, &some_data.iter().sum::<u32>());
+
+    // Fast dry run to test execution.
+    session.run();
+
+    // Uncomment to compute the proof.
+    //session.prove();
+}
+

The guest contains the custom logic that should be proved.

+
use powdr_riscv_runtime;
+use powdr_riscv_runtime::io::read;
+
+fn main() {
+    // Any serde-deserializable type can be read from a channel.
+    // Read some data from channel 1.
+    let data: Vec<u32> = read(1);
+    // Read the claimed sum from channel 2.
+    let sum: u32 = read(2);
+
+    // Check that the claimed sum is correct.
+    assert_eq!(data.iter().sum::<u32>(), sum);
+}
+

Introduction

+

powdr is a modular compiler stack to build zkVMs. +It is ideal for implementing existing VMs and experimenting with new designs with minimal boilerplate.

+
    +
  • Domain specific languages are used to specify the VM and its underlying constraints, not low level Rust code
  • +
  • Automated witness generation
  • +
  • Support for multiple provers as well as aggregation schemes
  • +
  • Support for hand-optimized co-processors when performance is critical
  • +
  • Built in Rust 🦀
  • +
+

Contributing

+

powdr is free and open source. You can find the source code on +GitHub. Issues and feature requests can be posted on +the GitHub issue tracker.

+

License

+ +

The powdr source and documentation are released under the MIT License.

+

Installation

+

The only way to install powdr currently is to build it from source. +There are two binaries,

+
    +
  • powdr compiles powdr-asm files to powdr-PIL and generates +witnesses and proofs.
  • +
  • powdr-rs compiles Rust crates to powdr-asm via RISCV, and executes +powdr-asm code with given inputs.
  • +
+

Prerequisites

+

You will need the Rust compiler and Cargo, the Rust package manager. +The easiest way to install both is with rustup.rs.

+

On Windows, you will also need a recent version of Visual Studio, +installed with the "Desktop Development With C++" Workloads option.

+

If you want to enable the estark-polygon feature, you also need the following +runtime dependencies:

+
    +
  • gcc
  • +
  • nlohmann-json3-dev
  • +
+

You will also need the following build time dependencies:

+
    +
  • make
  • +
  • pkg-config
  • +
  • libpqxx-dev (Ubuntu) | libpqxx (Arch Linux)
  • +
  • nasm
  • +
+

Building powdr

+

Using a single Cargo command, enabling the Halo2 and Plonky3 backends:

+
cargo install --git https://github.com/powdr-labs/powdr --features halo2,plonky3 powdr-cli
+
+

With SIMD support for the provers that support it:

+
RUSTFLAGS='-C target-cpu=native' cargo install --git https://github.com/powdr-labs/powdr --features halo2,plonky3,plonky3-simd powdr-cli
+
+

Or, by manually building from a local copy of the powdr repository:

+
# clone the repository
+git clone https://github.com/powdr-labs/powdr.git
+cd powdr
+# install powdr-cli
+cargo install --features halo2,plonky3 --path ./cli
+# install powdr-cli with SIMD support (only for the crates that support it)
+RUSTFLAGS='-C target-cpu=native' cargo install --features halo2,plonky3,plonky3-simd --path ./cli
+
+

Building powdr-rs

+

Using a single Cargo command:

+
cargo install --git https://github.com/powdr-labs/powdr powdr-rs-cli
+
+

Or, by manually building from a local copy of the powdr repository:

+
# clone the repository
+git clone https://github.com/powdr-labs/powdr.git
+cd powdr
+# install powdr-rs-cli
+cargo install --path ./cli-rs
+
+

Hello World

+

Let's write a minimal VM and generate proofs!

+
machine HelloWorld with degree: 8 {
+    reg pc[@pc];
+    reg X[<=];
+    reg Y[<=];
+    reg A;
+
+    instr incr X -> Y {
+        Y = X + 1
+    }
+
+    instr decr X -> Y {
+        Y = X - 1
+    }
+
+    instr assert_zero X {
+        X = 0
+    }
+
+    function main {
+        // assign the first prover input to A
+        A <=X= ${ std::prelude::Query::Input(0, 1) };
+
+        // increment A
+        A <== incr(A);
+
+        // decrement A
+        A <== decr(A);
+
+        // assert that A is zero
+        assert_zero A;
+
+        return;
+    }
+}
+
+

Let's go through different possible usages of powdr, starting with using the powdr CLI.

+

Hello World using the CLI

+

Let's generate a proof of execution for the valid prover input 0 (since 0 + 1 - 1 == 0)

+
powdr pil test_data/asm/book/hello_world.asm --field bn254 --inputs 1 --prove-with halo2
+
+

We observe that several artifacts are created in the current directory:

+
    +
  • hello_world.pil: the compiled PIL file.
  • +
  • hello_world_opt.pil: the optimized PIL file.
  • +
  • hello_world_constants.bin: the computed fixed columns which only have to be computed once per PIL file.
  • +
  • hello_world_commits.bin: the computed witness which needs to be computed for each proof.
  • +
  • hello_world_proof.bin: the ZK proof!
  • +
+
+

Note that the output directory can be specified with option -o|--output, and . is used by default.

+
+

Now let's try for the invalid input 1:

+
powdr pil test_data/asm/book/hello_world.asm --field bn254 --inputs 2 --prove-with halo2
+
+

In this case witness generation fails, and no proof is created.

+

Setup & Verification

+

The example above omits some important steps in proof generation: Setup and +Verification key generation. Some proof systems such as Halo2 , require a Setup to be performed before the proof. Such Setup can be +specific to the program or universal, where its artifact is a binary usually +called parameters or params. STARKs do not require a Setup.

+

Another step required before the proof is computed is key generation. A +proving key and a verification key are generated taking into account the +constraints and potentially Setup parameters. The proving key is used by the +prover to generate the proof, and the verification key is used by the verifier +to verify such a proof. A single verification key can be used to verify any +number of different proofs for a given program.

+

Therefore, when computing a proof, it is important that the Setup parameters +and the verification key are available as artifacts.

+

Below we reproduce the same proof as in the example above, keeping the +artifacts needed for verification:

+

First we run the Setup, where the number given must match the degree of our +source file (degree 8). The command below generates file params.bin.

+
powdr setup 8 --backend halo2 --field bn254
+
+

We can now compute the verification key, output in vkey.bin:

+
powdr verification-key test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --params "params.bin"
+
+
+

The command above can read previously generated constants from the directory +specified via -d|--dir, where . is used by default. If the constants are not present +it computes them before generating the verification key.

+
+

The next command compiles and optimizes the given source, generating the file +hello_world_opt.pil. It also computes both the fixed data and the witness +needed for the proof, stored respectively in hello_world_constants.bin and +hello_world_commits.bin.

+
powdr pil test_data/asm/book/hello_world.asm --field bn254 --force --inputs 0
+
+

We can now generate the proof:

+
powdr prove test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --params "params.bin" --vkey "vkey.bin"
+
+

The proof can be verified by anyone via:

+
powdr verify test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --vkey "vkey.bin" --params "params.bin" --proof "hello_world_proof.bin"
+
+
+

Note that CLI proof verification works analogously for eSTARK, without the setup step and using the Goldilocks field instead of Bn254.

+
+

Another aspect that was omitted in this example is the fact that this proof +uses a Poseidon transcript and cannot be verified in a cheap way on Ethereum, +even though we can verify it efficiently via powdr. +There are two ways to enable verification on Ethereum:

+
    +
  1. Use a different transcript when generating this proof. See section +Hello World on Ethereum for the same example targeting EVM verification.
  2. +
  3. Use proof aggregation to compress the proof using a +circuit that can be verified on Ethereum. See section +Hello World on Ethereum via proof aggregation to learn how to do that.
  4. +
+

Hello World using powdr as a library

+

Besides the CLI, powdr can also be used as a Rust library. +The powdr crate +exposes internal crates and data structures needed to compile code, +generate witnesses, and compute proofs.

+

Add powdr to your crate's dependencies:

+
[dependencies]
+powdr = { git = "https://github.com/powdr-labs/powdr", branch = "main" }
+
+

The following Rust code has the same workflow as our previous "Hello World" +example. The full project can be found +here, and as an example in +the powdr crate. To run the example in the powdr +repository, run:

+
cargo run --example powdr_crate_usage
+
+

You can also enable logs to know what is happening internally:

+
RUST_LOG=info cargo run --example powdr_crate_usage
+
+
use powdr_test::halo2_pipeline;
+
+fn main() {
+    env_logger::init();
+
+    halo2_pipeline(
+        "test_data/asm/book/hello_world.asm",
+        vec![0.into()],
+        vec![],
+        8,
+    );
+}
+
use powdr::backend::BackendType;
+use powdr::number::buffered_write_file;
+use powdr::Bn254Field;
+use powdr::Pipeline;
+
+use std::path::Path;
+
+pub fn halo2_pipeline(
+    pil: &str,
+    prover_inputs: Vec<Bn254Field>,
+    publics: Vec<Bn254Field>,
+    setup_size: u64,
+) {
+    // Straightforward case
+    let _proof = Pipeline::<Bn254Field>::default()
+        .from_file(pil.into())
+        .with_prover_inputs(prover_inputs.clone())
+        .with_backend(BackendType::Halo2, None)
+        .compute_proof()
+        .unwrap();
+
+    // Step-by-step case
+
+    // First we create the universal setup of size 8
+    buffered_write_file(Path::new("params.bin"), |writer| {
+        BackendType::Halo2
+            .factory::<Bn254Field>()
+            .generate_setup(setup_size, writer)
+            .unwrap()
+    })
+    .unwrap();
+
+    // Configure a pipeline
+    let mut pipeline = Pipeline::<Bn254Field>::default()
+        .from_file(pil.into())
+        .with_prover_inputs(prover_inputs)
+        .with_backend(BackendType::Halo2, None)
+        .with_setup_file(Some("params.bin".into()));
+
+    // Create the verification key
+    buffered_write_file(Path::new("vkey.bin"), |w| {
+        pipeline.export_verification_key(w).unwrap()
+    })
+    .unwrap();
+
+    // Add the verification key to a fresh pipeline and create a proof
+    let mut pipeline_fresh = pipeline.clone().with_vkey_file(Some("vkey.bin".into()));
+
+    let proof = pipeline_fresh.compute_proof().unwrap();
+
+    // Create yet another fresh pipeline only for proof verification
+    let mut pipeline = pipeline
+        .with_backend(BackendType::Halo2, None)
+        .with_setup_file(Some("params.bin".into()))
+        .with_vkey_file(Some("vkey.bin".into()));
+
+    // Verify a proof created by a different Pipeline
+    pipeline.verify(proof, &[publics]).unwrap();
+}
+

Hello World on Ethereum

+

This example is a variation of the previous Hello World, +targeting verification on Ethereum. In this example we will cover how to +generate proofs directly using a Keccak transcript instead of the Poseidon +transcript of the previous example, which will enable us to verify proofs +onchain. There are almost no differences from the CLI perspective.

+

Since the following command creates a proof, a Solidity verifier, and verifies +the proof on the EVM, we need to have solc available in the system. One easy +way to install it is by using svm.

+
powdr pil test_data/asm/book/hello_world.asm --field bn254 --inputs 0 --prove-with halo2 --backend-options "snark_single" -f --params params.bin
+
+

The extra parameter --backend-options snark_single tells powdr to produce a single +SNARK that uses Keccak. The option -f forces overwriting the compiled files +that have been generated before, which is useful if you are running the examples +in the same directory.

+

When the proof is generated, it is verified on a simulated EVM transaction as well!

+
Verifying SNARK in the EVM...
+
+

We can observe again that a proof was created at hello_world_proof.bin.

+

Now we can generate a Solidity verifier, using the same setup (params) as the +previous example:

+
powdr export-verifier test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --backend-options "snark_single" --params params.bin
+
+

A Solidity file verifier.sol is generated. You can verify the same proof that +we just generated by passing it to the contract together with the public inputs +(which we have not used so far).

+
+

Note that the more complex your VM is, the larger the verifier contract will be. In some cases, it might exceed Ethereum's contract size limit. You can mitigate that by using proof recursion on proofs that use Poseidon transcripts. See the next section for details.

+
+

Hello World on Ethereum with proof aggregation

+

As noted in the previous section, complex VMs can lead to large +Solidity verifiers that exceed the contract size limit on Ethereum. One +solution to that problem is to create proofs using the Poseidon transcript, as +we did in the first example, and then use proof +recursion to create a proof that we know we will be able to verify on Ethereum.

+

A recursive SNARK works by generating a proof for a circuit that verifies +another proof. The circuit we are using here to prove our initial proof +recursively is PSE's snark-verifier. This circuit is large enough +to be able to prove complex programs that were proven initial with the Poseidon +transcript, like our first example. Because of that our aggregation setup +params and verification key are going to be larger than before and take +longer to compute. The good news are that (i) we can use a pre-computed setup +from a previous ceremony, and (ii) the verification key only has to be computed +once per program.

+

First, we need a setup of "size" 2^22. This is the maximum execution trace length of the recursion circuit.

+

You can generate it using the command line below, or download a pre-computed +one here.

+

This will take a couple minutes if you decide to compute it yourself:

+
powdr setup 4194304 --backend halo2 --field bn254
+
+

We can re-use the new large params.bin for both initial and recursive proofs. +Let's start by re-computing our Poseidon proof like in the first example, +but using our new setup file:

+
powdr pil test_data/asm/book/hello_world.asm --field bn254 --inputs 0 --prove-with halo2 --backend-options "poseidon" -f --params params.bin
+
+

This generates the initial proof hello_world_proof.bin. +We'll also need a verification key:

+
powdr verification-key test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --backend-options "poseidon" --params params.bin
+
+

Let's verify the proof with our fresh verification key to make sure we're on the right track:

+
powdr verify test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --backend-options "poseidon" --params params.bin --vkey vkey.bin --proof hello_world_proof.bin
+
+

In order to avoid confusion between the application's artifacts +that we've just generated and the recursion one we're going to generate +later, let's rename them:

+
mv vkey.bin vkey_app.bin
+mv hello_world_proof.bin hello_world_proof_app.bin
+
+

We can now generate a verification key for the Halo2 circuit that verifies our proofs recursively. This might take up to a minute.

+
powdr verification-key test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --backend-options "snark_aggr" --params params.bin --vkey-app vkey_app.bin
+
+
+

Note that this verification key can only be used to verify recursive proofs that verify other proofs using the application's key vkey_app.bin.

+
+

We can now generate the recursive proof (this typically takes a few minutes and uses around 28gb RAM):

+
powdr prove test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --backend-options "snark_aggr" --params params.bin --vkey vkey.bin --vkey-app vkey_app.bin --proof hello_world_proof_app.bin
+
+

We have a proof! Note that it contains two fields, proof and +publics. The proof object contains the binary encoding of the proof +points, and the publics object contains the public accumulator limbs that we +need in order to verify the recursive proof.

+

We can now verify the proof, using the publics object as input (your numbers will be different):

+
powdr verify test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --backend-options "snark_aggr" --params params.bin --vkey vkey.bin --proof hello_world_proof_aggr.bin --publics "269487626280642378794,9378970522278219882,62304027188881225691,811176493438944,234778270138968319485,3212529982775999134,171155758373806079356,207910400337448,188563849779606300850,155626297629081952942,194348356185923309508,433061951018270,34598221006207900280,283775241405787955338,79508596887913496910,354189825580534"
+
+

Since the goal of the recursive proof was to be able to verify it on Ethereum, let's do that!

+
powdr export-verifier test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --backend-options "snark_aggr" --params params.bin --vkey vkey.bin
+
+

A Solidity verifier is created in verifier.sol. The contract expects an array of the accumulators' limbs followed by a tightly packed proof, where each accumulator limb uses 32 bytes, and there is no function signature.

+

Note that this verifier can be used to verify any recursive proof that verifies exactly one Poseidon proof of the given circuit.

+

Examples

+

Besides the Hello World examples, you are encouraged to check out these more +complex and real-world use cases:

+ +

Using publics

+

Public values are a small but important part of verifying ZK proofs. Often, the +verifier is interested in inputs and/or outputs to a public function.

+

In the toy example below, the prover can show that they know the square root of +a public value that is published with the proof.

+

You can also run this example directly in the powdr +repository:

+
cargo run --example sqrt_with_public
+
+

You can also enable logs to know what is happening internally:

+
RUST_LOG=info cargo run --example sqrt_with_public
+
+
machine Square with degree: 8 {
+    reg pc[@pc];
+    reg X[<=];
+    reg Y[<=];
+    reg A;
+
+    // Expose the register value of A in the last time step
+    public N = A(7);
+
+    instr square X -> Y {
+        Y = X * X
+    }
+	
+    function main {
+        A <=X= ${ std::prelude::Query::Input(0, 1) };
+        A <== square(A);
+    }
+}
+

This example uses a small VM with jump and a square instructions. The +program reads the private input from the prover, squares it, and enters an +infinite loop to ensure that all the remaining rows are filled with the result of A^2. +Since the length of our execution trace is fixed and equals 8, we can tag the +8-th row of A (A[7]) as the publicly exposed number.

+

Let's run all steps needed to generate and verify a proof that 32 = 9:

+
    +
  1. Setup step:
  2. +
+
powdr setup 8 --backend halo2 --field bn254
+
+
    +
  1. Witness generation:
  2. +
+
powdr pil test_data/asm/sqrt_with_public.asm --field bn254 -i 3
+
+
    +
  1. Verification Key generation:
  2. +
+
powdr verification-key test_data/asm/sqrt_with_public.asm --field bn254 --backend halo2 --params params.bin
+
+
    +
  1. Proof generation:
  2. +
+
powdr prove test_data/asm/sqrt_with_public.asm --field bn254 --backend halo2 --params params.bin --vkey vkey.bin
+
+
    +
  1. Proof verification:
  2. +
+
powdr verify test_data/asm/sqrt_with_public.asm --field bn254 --backend halo2 --params params.bin --vkey vkey.bin --proof sqrt_with_public_proof.bin --publics 9
+
+

Command-Line Help for powdr

+

This document contains the help content for the powdr command-line program.

+

Command Overview:

+ +

powdr

+

powdr CLI to compile powdr-asm and powdr-pil programs

+

Usage: powdr [OPTIONS] [COMMAND]

+
Subcommands:
+
    +
  • pil — Runs compilation and witness generation for .pil and .asm files. First converts .asm files to .pil, if needed. Then converts the .pil file to json and generates fixed and witness column data files
  • +
  • prove
  • +
  • verify
  • +
  • verification-key
  • +
  • export-verifier
  • +
  • setup
  • +
  • reformat — Parses and prints the PIL file on stdout
  • +
  • optimize-pil — Optimizes the PIL file and outputs it on stdout
  • +
  • test — Executes all functions starting with test_ in every module called test (or sub-module thereof) starting from the given module
  • +
+
Options:
+
    +
  • +

    --log-level <LOG_LEVEL> — Set log filter value [ off, error, warn, info, debug, trace ]

    +

    Default value: INFO

    +
  • +
+

powdr pil

+

Runs compilation and witness generation for .pil and .asm files. First converts .asm files to .pil, if needed. Then converts the .pil file to json and generates fixed and witness column data files

+

Usage: powdr pil [OPTIONS] <FILE>

+
Arguments:
+
    +
  • <FILE> — Input file
  • +
+
Options:
+
    +
  • +

    --field <FIELD> — The field to use

    +

    Default value: gl

    +

    Possible values: bb, kb, m31, gl, bn254

    +
  • +
  • +

    -o, --output-directory <OUTPUT_DIRECTORY> — Output directory for the PIL file, json file and fixed and witness column data

    +

    Default value: .

    +
  • +
  • +

    -w, --witness-values <WITNESS_VALUES> — Path to a CSV file containing externally computed witness values

    +
  • +
  • +

    -i, --inputs <INPUTS> — Comma-separated list of free inputs (numbers)

    +

    Default value: ``

    +
  • +
  • +

    -f, --force — Force overwriting of PIL output file

    +

    Default value: false

    +
  • +
  • +

    --pilo — Whether to output the pilo PIL object

    +

    Default value: false

    +
  • +
  • +

    -p, --prove-with <PROVE_WITH> — Generate a proof with a given backend

    +

    Possible values: mock, halo2, halo2-composite, halo2-mock, halo2-mock-composite, plonky3, plonky3-composite

    +
  • +
  • +

    --params <PARAMS> — File containing previously generated setup parameters

    +
  • +
  • +

    --backend-options <BACKEND_OPTIONS> — Backend options. Halo2: "poseidon", "snark_single" or "snark_aggr". EStark and PilStarkCLI: "stark_gl", "stark_bn" or "snark_bn"

    +
  • +
  • +

    --linker-mode <LINKER_MODE> — Linker mode, deciding how to reduce links to constraints

    +

    Possible values: native, bus

    +
  • +
  • +

    --degree-mode <DEGREE_MODE> — Degree mode, deciding whether to use a single monolithic table or a set of dynamically sized tables

    +
  • +
  • +

    --export-witness-csv — Generate a CSV file containing the witness column values

    +

    Default value: false

    +
  • +
  • +

    --export-all-columns-csv — Generate a CSV file containing all fixed and witness column values. Useful for debugging purposes

    +

    Default value: false

    +
  • +
  • +

    --csv-mode <CSV_MODE> — How to render field elements in the csv file

    +

    Default value: hex

    +

    Possible values: i, ui, hex

    +
  • +
+

powdr prove

+

Usage: powdr prove [OPTIONS] --backend <BACKEND> <FILE>

+
Arguments:
+
    +
  • <FILE> — Input PIL file
  • +
+
Options:
+
    +
  • +

    -d, --dir <DIR> — Directory to find the committed and fixed values

    +

    Default value: .

    +
  • +
  • +

    --field <FIELD> — The field to use

    +

    Default value: gl

    +

    Possible values: bb, kb, m31, gl, bn254

    +
  • +
  • +

    -b, --backend <BACKEND> — Generate a proof with a given backend

    +

    Possible values: mock, halo2, halo2-composite, halo2-mock, halo2-mock-composite, plonky3, plonky3-composite

    +
  • +
  • +

    --backend-options <BACKEND_OPTIONS> — Backend options. Halo2: "poseidon", "snark_single" or "snark_aggr". EStark and PilStarkCLI: "stark_gl", "stark_bn" or "snark_bn"

    +
  • +
  • +

    --proof <PROOF> — File containing previously generated proof for aggregation

    +
  • +
  • +

    --vkey <VKEY> — File containing previously generated verification key

    +
  • +
  • +

    --vkey-app <VKEY_APP> — File containing the verification key of a proof to be verified recursively

    +
  • +
  • +

    --params <PARAMS> — File containing previously generated setup parameters

    +
  • +
+

powdr verify

+

Usage: powdr verify [OPTIONS] --backend <BACKEND> --proof <PROOF> --vkey <VKEY> <FILE>

+
Arguments:
+
    +
  • <FILE> — Input PIL file
  • +
+
Options:
+
    +
  • +

    -d, --dir <DIR> — Directory to find the fixed values

    +

    Default value: .

    +
  • +
  • +

    --field <FIELD> — The field to use

    +

    Default value: gl

    +

    Possible values: bb, kb, m31, gl, bn254

    +
  • +
  • +

    -b, --backend <BACKEND> — Generate a proof with a given backend

    +

    Possible values: mock, halo2, halo2-composite, halo2-mock, halo2-mock-composite, plonky3, plonky3-composite

    +
  • +
  • +

    --backend-options <BACKEND_OPTIONS> — Backend options. Halo2: "poseidon", "snark_single" or "snark_aggr". EStark and PilStarkCLI: "stark_gl", "stark_bn" or "snark_bn"

    +
  • +
  • +

    --proof <PROOF> — File containing the proof

    +
  • +
  • +

    --publics <PUBLICS> — Comma-separated list of public inputs (numbers)

    +

    Default value: ``

    +
  • +
  • +

    --vkey <VKEY> — File containing the verification key

    +
  • +
  • +

    --params <PARAMS> — File containing the params

    +
  • +
+

powdr verification-key

+

Usage: powdr verification-key [OPTIONS] --backend <BACKEND> <FILE>

+
Arguments:
+
    +
  • <FILE> — Input PIL file
  • +
+
Options:
+
    +
  • +

    -d, --dir <DIR> — Directory to find the fixed values

    +

    Default value: .

    +
  • +
  • +

    --field <FIELD> — The field to use

    +

    Default value: gl

    +

    Possible values: bb, kb, m31, gl, bn254

    +
  • +
  • +

    -b, --backend <BACKEND> — Chosen backend

    +

    Possible values: mock, halo2, halo2-composite, halo2-mock, halo2-mock-composite, plonky3, plonky3-composite

    +
  • +
  • +

    --backend-options <BACKEND_OPTIONS> — Backend options. Halo2: "poseidon", "snark_single" or "snark_aggr". EStark and PilStarkCLI: "stark_gl", "stark_bn" or "snark_bn"

    +
  • +
  • +

    --params <PARAMS> — File containing previously generated setup parameters. This will be needed for SNARK verification keys but not for STARK

    +
  • +
  • +

    --vkey-app <VKEY_APP> — File containing the verification key of a proof to be verified recursively

    +
  • +
+

powdr export-verifier

+

Usage: powdr export-verifier [OPTIONS] --backend <BACKEND> <FILE>

+
Arguments:
+
    +
  • <FILE> — Input PIL file
  • +
+
Options:
+
    +
  • +

    -d, --dir <DIR> — Directory to find the fixed values

    +

    Default value: .

    +
  • +
  • +

    --field <FIELD> — The field to use

    +

    Default value: gl

    +

    Possible values: bb, kb, m31, gl, bn254

    +
  • +
  • +

    -b, --backend <BACKEND> — Chosen backend

    +

    Possible values: mock, halo2, halo2-composite, halo2-mock, halo2-mock-composite, plonky3, plonky3-composite

    +
  • +
  • +

    --backend-options <BACKEND_OPTIONS> — Backend options. Halo2: "poseidon", "snark_single" or "snark_aggr". EStark and PilStarkCLI: "stark_gl", "stark_bn" or "snark_bn"

    +
  • +
  • +

    --params <PARAMS> — File containing previously generated setup parameters. This will be needed for SNARK verification keys but not for STARK

    +
  • +
  • +

    --vkey <VKEY> — File containing previously generated verification key

    +
  • +
+

powdr setup

+

Usage: powdr setup [OPTIONS] --backend <BACKEND> <SIZE>

+
Arguments:
+
    +
  • <SIZE> — Size of the parameters
  • +
+
Options:
+
    +
  • +

    -d, --dir <DIR> — Directory to output the generated parameters

    +

    Default value: .

    +
  • +
  • +

    --field <FIELD> — The field to use

    +

    Default value: gl

    +

    Possible values: bb, kb, m31, gl, bn254

    +
  • +
  • +

    -b, --backend <BACKEND> — Generate a proof with a given backend

    +

    Possible values: mock, halo2, halo2-composite, halo2-mock, halo2-mock-composite, plonky3, plonky3-composite

    +
  • +
+

powdr reformat

+

Parses and prints the PIL file on stdout

+

Usage: powdr reformat <FILE>

+
Arguments:
+
    +
  • <FILE> — Input file
  • +
+

powdr optimize-pil

+

Optimizes the PIL file and outputs it on stdout

+

Usage: powdr optimize-pil [OPTIONS] <FILE>

+
Arguments:
+
    +
  • <FILE> — Input file
  • +
+
Options:
+
    +
  • +

    --field <FIELD> — The field to use

    +

    Default value: gl

    +

    Possible values: bb, kb, m31, gl, bn254

    +
  • +
+

powdr test

+

Executes all functions starting with test_ in every module called test (or sub-module thereof) starting from the given module

+

Usage: powdr test [OPTIONS] <FILE>

+
Arguments:
+
    +
  • <FILE> — Input file
  • +
+
Options:
+
    +
  • +

    --field <FIELD> — The field to use

    +

    Default value: gl

    +

    Possible values: bb, kb, m31, gl, bn254

    +
  • +
+
+

+This document was generated automatically by +clap-markdown. +

+

asm

+

powdr-asm is the higher level of abstraction in powdr. It allows defining Instruction Set Architectures (ISA) using virtual and constrained machines.

+

Modules

+

powdr exposes a module system to help organise and reuse code.

+
use my_module::Other as LocalOther;
+
+// we can define a module at `./submodule.asm`
+mod submodule;
+
+// we can define a module at `./submodule_in_folder/mod.asm`
+mod submodule_in_folder;
+
+use submodule::Other as SubmoduleOther;
+use submodule_in_folder::Other as FolderSubmoduleOther;
+
+let zero: int = 0;
+
+// we can also define modules inline
+mod utils {
+    // Each module has a fresh symbol list. Every external symbol needs to be imported,
+    // even from the parent module.
+    use super::zero;
+
+    let one = zero + 1;
+}
+
+machine Main with degree: 8 {
+    // use a machine from another module by relative path
+    my_module::Other a;
+
+    // use a machine from another module using a local binding
+    LocalOther b;
+
+    // use a machine from another module defined in a different file
+    SubmoduleOther c;
+
+    // use a machine from another module defined in a different directory
+    FolderSubmoduleOther d;
+
+    reg pc[@pc];
+
+    instr nothing link => a.nothing();
+    instr also_nothing link => b.nothing();
+    instr still_nothing link => c.nothing();
+    instr nothing_again link => d.nothing();
+
+    function main {
+        nothing;
+        also_nothing;
+        still_nothing;
+        nothing_again;
+        return;
+    }
+}
+
+mod my_module {
+    machine Other with
+        degree: 8,
+        latch: latch,
+        operation_id: operation_id
+    {
+        operation nothing<0>;
+
+        col fixed latch = [1]*;
+        col fixed operation_id = [0]*;
+    }
+}
+

Note that a module can't be called std, as this name is reserved for the powdr standard library.

+

Similar to Rust, any reference that cannot be resolved is looked up once more in std::prelude. +This module exposes basic types and values such as Option, true and false. +This means that you can use Option anywhere without prefix.

+

Declarations

+

Symbols can be defined via let <name> = <value>;, or via let <name>: <type> = <value>; if you want to +specify the type explicitly. The value is an arbitrary PIL-expression. +For details, see the Declarations section in the PIL part.

+

Other symbols available in the current module can be accessed by name, but it is also possible to specify +full relative paths in the form of e.g. super::super::module_name::symbol.

+

Here are some examples of how to define and use symbols:

+
mod utils {
+    // This defines a function by means of a lambda expression that
+    // computes the sum of an array of values. We fully specify its type.
+    let sum: int, int[] -> int = |len, arr| match len {
+        0 => 0,
+        _ => arr[len - 1] + sum(len - 1, arr)
+    };
+    // A simple function that returns the input incremented by one,
+    // as an expression.
+    let incremented: expr -> expr = |x| x + 1;
+    // This is a function that takes an expression as input and returns
+    // a constraint enforcing this expression increments by a certain value
+    // between rows.
+    // The type will be inferred here because `'` is only valid on `expr`.
+    let constrain_incremented_by = |x, inc| x' = x + inc;
+}
+
+machine Main with degree: 4 {
+    // Machines create local scopes in the way functions create local scopes:
+    // - all symbols in the machine's module are available without prefix,
+    // - new symbols can be defined but are only available inside the machine.
+    reg A;
+    reg pc[@pc];
+
+    // This defines a witness column,
+    let x;
+    // and now we force it to stay unchanged.
+    utils::constrain_incremented_by(x, 0);
+
+    // We define an instruction that uses a complicated way to increment a register.
+    instr incr_a { A' = utils::incremented(A) }
+
+    function main {
+        incr_a;
+        return;
+    }
+}
+

Machines

+

Machines are the first main concept in powdr-asm. They can currently be of two types: virtual or constrained.

+

Virtual machines

+

Dynamic machines are defined by:

+ +

An example of a simple dynamic machine is the following:

+
machine HelloWorld with degree: 8 {
+    reg pc[@pc];
+    reg X[<=];
+    reg Y[<=];
+    reg A;
+
+    instr incr X -> Y {
+        Y = X + 1
+    }
+
+    instr decr X -> Y {
+        Y = X - 1
+    }
+
+    instr assert_zero X {
+        X = 0
+    }
+
+    function main {
+        // assign the first prover input to A
+        A <=X= ${ std::prelude::Query::Input(0, 1) };
+
+        // increment A
+        A <== incr(A);
+
+        // decrement A
+        A <== decr(A);
+
+        // assert that A is zero
+        assert_zero A;
+
+        return;
+    }
+}
+

Constrained machines

+

Constrained machines are a lower-level type of machine. They do not have registers, and instead rely on simple committed and fixed columns. They are used to implement hand-optimized computation.

+

They are defined by:

+
    +
  • a degree range, indicating the number of execution steps
  • +
  • a set of operations
  • +
  • an operation_identifier column, used to make constraints conditional over which function is called. It can be omitted with _ if the machine has at most one operation.
  • +
  • a latch column, used to identify rows at which the machine can be accessed from the outside (where the inputs and outputs are passed). It can be omitted if the machine has no operations.
  • +
  • a set of submachines
  • +
  • a set of links
  • +
+

An example of a simple constrained machine is the following:

+
machine SimpleStatic with
+    degree: 8,
+    latch: latch,
+    operation_id: operation_id
+{
+    operation power_4<0> x -> y;
+
+    col fixed operation_id = [0]*;
+    col fixed latch = [0, 0, 0, 1]*;
+    col witness x;
+    col witness y;
+
+    // initialise y to x at the beginning of each block
+    latch * (y' - x') = 0;
+    // x is unconstrained at the beginning of the block
+
+    // x is constant within a block
+    (1 - latch) * (x' - x) = 0;
+    // y is multiplied by x at each row
+    (1 - latch) * (y' - x * y) = 0;
+}
+

For more details on the powdr-pil statements, check out the pil section of this book. Note that the parameters of the operation are columns defined in powdr-pil statements.

+

Submachines

+

Machines can have submachines which they access by defining external instructions or links. They are declared as follows:

+
machine MySubmachine {
+    ...
+}
+
+machine MyMachine {
+    MySubmachine my_submachine;
+}
+

Machines can also receive submachines as construction parameters. +A machine passed in as an argument can be accessed in the same way as locally declared submachines:

+
machine MachineWithParam(subm: MySubmachine) {
+    // `subm` can be accessed as a submachine
+    ...
+}
+
+machine MyMachine {
+    MySubmachine my_submachine;
+    // `my_submachine` is passed to `another_submachine` as a construction argument
+    MachineWithParam another_submachine(my_submachine);
+}
+

Registers

+

Registers are central to a machine. powdr supports a few types of registers:

+

Program counter

+

Each machine can have at most one program counter. In the absence of a program counter, the machine is considered static, and no other register can be declared. The program counter is defined as follows:

+
reg pc[@pc]
+

At each step execution step, the program counter points to the function line to execute. +The program counter behaves like a write register, with the exception that its value is incremented by default after each step.

+

Write registers

+

Write registers are the default type for registers. They are declared as follows:

+
reg A;
+

They hold a field element, are initialized as 0 at the beginning of a function and keep their value by default. They can be read from and written to.

+
// write to A
+A <=X= 1;
+// A is 1
+
+// read from A
+B <=X= A;
+// A is still 1
+

Assignment registers

+

Assignment registers are transient to an execution step: their value is not persisted across steps. They are required in order to pass inputs and receive outputs from instructions, as well as in assignments. +For example, if we want to assert that write register A is 0, we can use the following instruction:

+
reg pc[@pc];
+reg A;
+
+instr assert_A_is_zero {
+    A = 0
+}
+
+function main {
+    assert_A_is_zero;
+    return;
+}
+

However, if we want the instruction to accept any write register as input, we use an assignment register.

+
reg pc[@pc];
+reg X[<=];
+reg A;    
+
+instr assert_zero X {
+    X = 0
+}
+
+function main {
+    assert_zero A;
+    return;
+}
+

Read-only registers

+

Read-only registers are used for function inputs. However, powdr creates them automatically based on functions arguments, so that they do not need to be declared explicitly.

+
+

Read-only registers are only mentioned for completeness here and are currently only used inside the compiler. We advise against using them.

+
+

Functions

+

Functions are the entry points to a virtual machine. They can be called from another machine or from the outside.

+

In this section, we describe functions with this simple virtual machine:

+

+machine Machine with degree: 16 {
+    reg pc[@pc];
+    reg X[<=];
+    reg Y[<=];
+    reg Z[<=];
+    reg CNT;
+    reg A;
+    reg B;
+
+    // an instruction to assert that a number is zero
+    instr assert_zero X {
+        X = 0
+    }
+
+    // an instruction to jump to a label
+    instr jmp l: label {
+        pc' = l 
+    }
+
+    // an instruction to jump to a label iff `X` is `0`, otherwise continue
+    instr jmpz X, l: label { 
+        pc' = XIsZero * l + (1 - XIsZero) * (pc + 1) 
+    }
+    
+    // an instruction to return the square of an input as well as its double
+    instr square_and_double X -> Y, Z {
+        Y = X * X,
+        Z = 2 * X
+    }
+
+    function main {
+        // initialise `A` to 2
+        A <=X= 2;
+        // initialise `CNT` to `3`
+        CNT <=X= 3;
+        start:
+        // if `CNT` is `0`, jump to `end`
+        jmpz CNT, end;
+        // decrement `CNT`
+        CNT <=X= CNT - 1;
+        // get the square and the double of `A`
+        A, B <== square_and_double(A);
+        // jump back to `start`
+        jmp start;
+        end:
+        // check that `A == ((2**2)**2)**2`
+        assert_zero A - ((2**2)**2)**2;
+        // check that `B == ((2**2)**2)*2`
+        assert_zero B - ((2**2)**2)*2;
+        return;
+    }
+
+    // some superpowers on `X` to allow us to check if it's 0
+    col witness XInv;
+    col witness XIsZero;
+    XIsZero  = 1 - X * XInv;
+    XIsZero * X = 0;
+    XIsZero * (1 - XIsZero) = 0;
+}
+
+

Function inputs and outputs

+
+

Function inputs and outputs are not supported yet

+
+

Statements

+

Labels

+

Labels allow referring to a location in a function by name.

+
        start:
+

Assignments

+

Assignments allow setting the values of some write registers to the values of some expressions expression using assignment registers.

+
        CNT <=X= 3;
+

If the right-hand side of the assignment is an instruction, assignment registers can be inferred and are optional:

+
        A, B <== square_and_double(A);
+

This will be inferred to be the same as A, B <=Y, Z= square_and_double(A); from the definition of the instruction:

+
    instr square_and_double X -> Y, Z {
+        Y = X * X,
+        Z = 2 * X
+    }
+

Instructions

+

Instructions which do not return outputs can be used as statements.

+
        assert_zero A - ((2**2)**2)**2;
+

Expressions

+

Field element literals

+

Field element literals are signed elements of the prime field.

+
        CNT <=X= 3;
+

Registers and columns

+

Registers can be used as expressions, with the exception of assignment registers.

+
        CNT <=X= CNT - 1;
+

Instructions

+

Instructions which return outputs can be used as expressions.

+
        A, B <== square_and_double(A);
+

Instructions

+

Instructions are declared as part of a powdr virtual machine. +Once defined, they can be called by any function in this machine. +An instruction is composed of:

+
    +
  • a name
  • +
  • a set of inputs (assignment registers or labels)
  • +
  • a set of outputs (assignment registers)
  • +
  • a set of powdr-pil constraints to activate when the instruction is called
  • +
  • a set of links calling into functions/operations in submachines
  • +
+

Local instructions

+

A local instruction is the simplest type of instruction. +It is called local because its behavior is defined by a set of constraints over registers and columns of the machine it is defined in.

+
instr add X, Y -> Z {
+    X + Y = Z
+}
+

Instructions with links

+

Instructions may also delegate all or part of their implementation to functions/operations in submachines. +Each link in an instruction defines the inputs and outputs of a call to a specific function/operation in a submachine.

+

Assume we have a submachine with a single operation add:

+
machine SubMachine with
+    degree: 32,
+    latch: latch,
+    operation_id: operation_id
+{
+    col witness operation_id;
+    col fixed latch = [1]*;
+
+    operation add<0> x, y -> z;
+
+    col witness x;
+    col witness y;
+    col witness z;
+    z = y + x;
+}
+

An instruction calling into this operation can be declared as follows:

+
    SubMachine submachine;
+
+    instr add X, Y -> Z link => Z = submachine.add(X, Y); // - trivial usage: only instruction inputs/outputs used in the call
+

In the previous example, only assignment registers (instruction inputs and outputs) were used to call the submachine. +The following example shows more complex usage of link calls:

+
machine Main with degree: 32 {
+    reg pc[@pc];
+    reg X[<=];
+    reg Y[<=];
+    reg Z[<=];
+    reg A;
+    reg B;
+    reg C;
+
+    SubMachine submachine;
+
+    instr add X, Y -> Z link => Z = submachine.add(X, Y); // - trivial usage: only instruction inputs/outputs used in the call
+    instr add_to_A X, Y link => A' = submachine.add(X, Y);// - output to a regular register
+    instr addAB -> X link => X = submachine.add(A, B);    // - inputs from regular registers
+    instr addAB_to_C link => C' = submachine.add(A, B);   // - inputs and output from regular registers
+    instr addAB_to_A link => A' = submachine.add(A, B);   // - reusing an input register as output
+    instr sub X, Y -> Z link => X = submachine.add(Y, Z); // - swapping input/output
+    // expressions can also be used as call parameters
+    instr add5 X -> Z link => Z = submachine.add(X, 3+2); // - literal expression as argument
+    col fixed STEP(i) { i };
+    instr add_current_time_step X -> Z link => Z = submachine.add(X, STEP);// - machine columns can be referenced
+    let arr = [1,2,3,4,5];                          // - functions can be used
+    instr add_arr_sum X -> Z link => Z = submachine.add(X, std::array::sum(arr));
+
+    instr assert_eq X, Y { X = Y }
+
+    function main {
+        A <== add(2, 3);
+        assert_eq A, 5;
+        add_to_A 6, 7;
+        assert_eq A, 13;
+
+        A <== sub(6, 5);
+        assert_eq A, 1;
+        B <=X= 20;
+        C <== addAB();
+        assert_eq C, 21;
+
+        A <=X= 2;
+        B <=X= 3;
+        addAB_to_C;
+        assert_eq C, 5;
+
+        A <=X= 33;
+        B <=X= 44;
+        addAB_to_A;
+        assert_eq A, 77;
+
+        A <== add5(2);
+        assert_eq A, 7;
+        A <== add_arr_sum(3);
+        assert_eq A, 18;
+
+        // Note that the result of this operation depends on when it executed (STEP column)
+        A <== add_current_time_step(42);
+        B <== add_current_time_step(42);
+        assert_eq B - A, 1;
+
+        return;
+    }
+}
+

A single instruction can activate multiple links, and may also include a set of constraints. +Furthermore, each link can be activated conditionally, based on a given boolean flag:

+
machine Main with degree: 16 {
+    reg pc[@pc];
+    reg X[<=];
+    reg Y[<=];
+    reg Z[<=];
+    reg W[<=];
+    reg A;
+    col witness B;
+    col witness C;
+
+    SubMachine submachine;
+
+    // multiple links can be activated by a single instruction,
+    // witness columns can be used for temporary values,
+    // and additional constraints can be used
+    instr double_then_mul X, Y -> Z
+        link => B = submachine.add(X, X)
+        link => C = submachine.add(Y, Y)
+    {
+        Z = B * C
+    }
+
+    // links activated conditional on a boolean flag
+    instr add_or_sub W, X, Y -> Z
+        link if W => Z = submachine.add(X, Y)
+        link if (1 - W) => Z = submachine.sub(X, Y);
+
+    instr assert_eq X, Y { X = Y }
+
+    function main {
+        A <== double_then_mul(3, 2);
+        assert_eq A, 24;
+
+        A <== add_or_sub(1, 3, 2);
+        assert_eq A, 5;
+        A <== add_or_sub(0, 3, 2);
+        assert_eq A, 1;
+
+        return;
+    }
+}
+
+

Note that links cannot currently call functions from the same machine: they delegate computation to a submachine.

+
+

Operations

+

Operations enable a constrained machine to expose behavior to the outside. +If a machine has a single operation, it can simply be declared with its name and parameters:

+
machine Add with
+    degree: 32,
+    latch: latch
+{
+    // operation name, with column names as inputs and outputs
+    operation add a, b -> c;
+
+    col fixed latch = [1]*;
+
+    col witness a;
+    col witness b;
+    col witness c;
+
+    // constraint "implementing" the operation
+    c = a + b;
+}
+

The parameters of the operation (inputs and outputs) must be columns declared in the machine.

+

If a machine exposes more than one operation, the machine itself needs an operation id column (op_id in the following). +Then, each operation needs to be declared with its own unique operation id:

+
// machine declaration must include an operation id column name
+machine AddSub with
+    degree: 32,
+    latch: latch,
+    operation_id: op_id
+{
+    // each operation has its own unique operation id
+    operation add<0> a, b -> c;
+    operation sub<1> a, b -> c;
+
+    col fixed latch = [1]*;
+        // it also needs to be declared as a column
+    col witness op_id;
+
+    col witness a;
+    col witness b;
+    col witness c;
+
+    // constraint "implementing" both operations, depending on `op_id`
+    c = (1 - op_id) * (a + b) + op_id * (a - b);
+}
+

The actual behavior of an operation is defined by the machine constraints on the columns used as inputs and outputs.

+

Links

+

Links enable a constrained machine to call into another machine. +They are defined by a call to an operation, where inputs and outputs are expressions. +An optional boolean flag restricts the rows in which the link is active. +Links without a boolean flag are active in every row.

+
machine Add4 with
+    degree: 32,
+    latch: latch,
+    operation_id: operation_id
+{
+    Add adder;
+
+    operation add4<0> x, y, z, w -> r;
+
+    // Links without a flag are active on every row.
+    // - constrain the values of `x`, `y`, and `n` so that `n = adder.add(x, y)`
+    link => n = adder.add(x, y);
+    // - constrain the values of `z`, `w`, and `m` so that `m = adder.add(z, w)`
+    link => m = adder.add(z, w);
+    // - constrain the values of `m`, `n` and `r` so that `r = adder.add(m,n)`
+    link => r = adder.add(m, n);
+
+    col fixed operation_id = [0]*;
+    col fixed latch = [1]*;
+
+    col witness x;
+    col witness y;
+    col witness z;
+    col witness w;
+    col witness r;
+    col witness m;
+    col witness n;
+}
+
+machine Add with
+    degree: 32,
+    latch: latch
+{
+    // operation name, with column names as inputs and outputs
+    operation add a, b -> c;
+
+    col fixed latch = [1]*;
+
+    col witness a;
+    col witness b;
+    col witness c;
+
+    // constraint "implementing" the operation
+    c = a + b;
+}
+
+

If a boolean flag is given, the link is only active in rows where the flag evaluates to 1. +Whenever a link is active, the columns mapped as inputs and outputs are constrained by the operation implementation. +The following example demonstrates how to use links with flags.

+
col fixed odd_row = [0,1]*;
+
+link if odd_row => z = submachine.foo(x, y); // active on odd rows only
+link if (1 - odd_row) => z = submachine.bar(x, y); // active on even rows only
+
+

PIL

+

powdr-pil is the lower level of abstraction in powdr. It is strongly inspired by Polygon zkEVM PIL. We refer to the Polygon zkEVM PIL documentation and document deviations from the original design here.

+

Declarations

+

Powdr-pil allows the same syntax to declare various kinds of symbols. This includes +constants, fixed columns, witness columns and even higher-order functions. It deduces the symbol kind +from the type of the symbol and the way the symbol is used.

+

Symbols can be declared using let <name>; and they can be declared and defined +using let <name> = <value>;, where <value> is an expression. The type of the symbol +can be explicitly specified using let <name>: <type>; and let <name>: <type> = <value>;. +Symbols with a generic type can be defined using let<TV1, TV1, ..> <name>: <type> = <value>;, +where the TV are newly created type variables that can be used in the type.

+

This syntax can be used for constants, fixed columns, witness columns and even (higher-order) +functions that can transform expressions. The kind of symbol is deduced by its type and whether +it is has a value:

+
    +
  • Symbols without a value are witness columns or arrays of witness columns. Their type can be omitted. If it is given, it must be col or col[k].
  • +
  • Symbols defined with a value and type col (or col[k]) are fixed columns (or arrays of fixed columns).
  • +
  • Symbols defined with a value and type inter (or inter[k]) are intermediate columns (or arrays of intermediate columns).
  • +
  • Everything else is a "generic symbol" that is not a column.
  • +
+

Examples:

+
    // This defines a integer constant. We can omit the type when it is used
+    // somewhere that constrains its type. Since it is not used below,
+    // we have to specify `: int` (another option would be `fe`, field element).
+    let rows: int = 16;
+    // This defines a fixed column that contains the row number in each row.
+    // Only symbols whose type is "col" are considered fixed columns.
+    let step: col = |i| i;
+    // Here, we have a witness column, the do not need an explicit `: col`.
+    let x;
+    // This functions defines a fixed column where each cell contains the
+    // square of its row number.
+    let square: col = |x| x*x;
+    // This is a generic function that computes the sum of an array
+    // given its length.
+    // It is not stored as a column.
+    // If it is used in a constraint, it has to be evaulated, while
+    // columns must be used symbolically.
+    let<T: Add + FromLiteral> sum: T[], int -> T = |a, len| match len {
+        0 => 0,
+        _ => sum(a, len - 1) + a[len - 1],
+    };
+    // This is a constraint that uses the `sum` function:
+    sum([x, step], 2) = 0;
+

Name lookup is performed as follows:

+

Lookup is performed starting from the current namespace, going up to the root component by component +where the first match is used. If all lookups fail, a last attempt is done +inside the std::prelude namespace.

+

Expressions

+

Depending on the context, powdr allows more or less features for expressions.

+

Inside values for declarations, you can use a very flexible language which includes +many different operators, function calls, lambda functions, tuple types, statement blocks, +match statements and others.

+

In statements and expressions that are required to evaluate to constraints / polynomial identities, only a much more restrictive +language can be used. Expressions in that language are called Algebraic Expressions. While you can use +the full language everywhere, in the context of a constraint, the result after function evaluation +and constant propagation has to be an algebraic expression.

+

Generic Expressions

+

The expression language allows the following operators, in order of increased precedence:

+
    +
  • lambda functions: |params| body. Examples: |i| i (the identity), |a, b| a + b (sum)
  • +
  • || - logical or
  • +
  • && - logical and
  • +
  • <, <=, ==, !=, >=, > - comparisons and = - identity operator
  • +
  • | - bitwise or
  • +
  • ^ - bitwise xor
  • +
  • & - bitwise and
  • +
  • <<, >> - left and right shift
  • +
  • +, - - addition and subtraction (binary operator)
  • +
  • *, /, % - multiplication, division and modulo
  • +
  • ** - exponentiation
  • +
  • -, ! - numerical and logical negation (unary operators, prefix)
  • +
  • ' - "next row" operator (suffix)
  • +
  • [], () - array index access and function calls
  • +
+

Elementary expressions are

+
    +
  • number literals (integers)
  • +
  • string literals, written in double quotes, e.g. "hello"
  • +
  • array literals written in square brackets, e.g. [1, 2, 3]
  • +
  • tuples, having at least two elements, e.g. (1, "abc")
  • +
  • statement blocks (see below)
  • +
  • match expressions (see below).
  • +
  • if expressions (see below).
  • +
+

Parentheses are allowed at any point to force precedence.

+

Lambda Functions

+

The only way to declare a function in pil is by assigning a lambda function to a symbol.

+

Example:

+
let x = |i| i + 1;
+

If you want to specify the types of parameters or return values explicitly, you have to do it +on the symbol, you cannot do it on the parameters:

+
let x: int -> int = |i| i + 1;
+

It is possible to use patterns in the function parameters:

+
let y: (int, int), int -> int = |(i, j), _| i + j;
+

If you use patterns, they have to be irrefutable, which means that the pattern has to +be able to match any value of the given type.

+

Statement Blocks

+

A {-}-delimited block can be used everywhere where an expression is expected.

+

It has the form { <statement> ; <statement> ; ... ; <expression> }, +i.e. a sequence of statements followed by an expression. +The statements can either be expressions (f();, only inside constr-functions) +or let statements: let x = ...; / let x;

+

The value of the statement block is the value of the final expression.

+

Example:

+
let plus_one_squared = |x| { let y = x + 1; y * y };
+

Let statements with value can be used everywhere, they just bind an expression to a local variable +and allow to avoid repeating the expression. You can use patterns for the +left hand side of let statements to destructure values.

+

Example:

+
let f = |i| (i / 2, i % 2);
+let (quot, rem) = f(7);
+

The second let statement will create two local variables x and y. You can also ignore values using +the _ pattern element. For details, please see the patterns section.

+

Let statements without value (let x;) create a new witness column and are only allowed inside constr-functions.

+

Similarly, an expression at statement level (e.g. x * (x - 1) = 0;) can be used to create new constraints that are added to the global constraint set +and this can only be done inside a constr-functions.

+

Note that you can always create constraints and return them from a function, even in pure function.

+

Example:

+
let constrain_to_bool: expr -> Constr = |x| x * (x - 1) = 0;
+

Match Expressions

+

Match expressions take the form match <value> { <pattern 1> => <value 1>, <pattern 2> => <value 2>, _ => <default value> }, +with an arbitrary number of match arms.

+

The semantics are that the first match arm where the pattern equals the value after the match keyword is evaluated.

+

Patterns can be used to destructure more complex data types and to capture values inside new local variables. +For more details, please see the patterns section.

+

Example:

+
let fib = |i| match i {
+    0 => 1,
+    1 => 1,
+    _ => fib(i - 2) + fib(i - 1),
+};
+

If Expressions

+

If expressions take the form if <condition> { <true value> } else { <false value> }, where the "else" part is not optional.

+

If the condition evaluates to true, then <true value> is evaluated, otherwise <false value> is.

+

Example:

+
let is_seven = |i| if i == 7 { 1 } else { 0 };
+

Algebraic Expressions

+

For constraints (or functions called at a place where a constraint is expected), the expression syntax is limited: +After evaluating function calls and performing constant propagation, the resulting expression has to +be an "algebraic expression". These are restricted in the following way:

+
    +
  • You can freely use the operators +, -,*.
  • +
  • The operator ** must have a number as exponent.
  • +
  • The operator [i] must have a column name on the left-hand side and the index must be a number.
  • +
  • The operator ' must have a column or [i] on the left-hand-side.
  • +
  • No other operators are allowed.
  • +
+

Arbitrary parentheses are allowed.

+

The following example illustrates how you can still use the generic language:

+
namespace Main(16);
+    // Returns folder(...folder(folder(0, f(0)), f(1)) ..., f(length - 1))
+    // This is a generic function.
+    let<T1, T2> fold: int, (int -> T1), T2, (T2, T1 -> T2) -> T2 =
+        |length, f, initial, folder| match length {
+            0 => initial,
+            _ => folder(fold(length - 1, f, initial, folder), f(length - 1))
+        };
+    // returns f(0) + f(1) + ... + f(length - 1)
+    let sum = |length, f| fold(length, f, 0, |acc, e| acc + e);
+    // This function takes an algebraic expression (a column or expression
+    // involving columns) and returns an identity that forces this expression
+    // to equal 20. Note that `=` is not an assignment but creates an identity constraint.
+    let equals_twenty: expr -> Constr = |x| x = 20;
+    // This declares an array of 16 witness columns.
+    col witness wit[16];
+    // This expression has to evaluate to an identity, but we can still use
+    // higher order functions and all the flexibility of the language.
+    // The sub-expression `sum(16, |i| wit[i])` evaluates to the algebraic
+    // expression "wit[0] + wit[1] + ... + wit[15]", which is then
+    // turned into the identity by `equals_twenty`
+    // wit[0] + wit[1] + ... + wit[15] = 20.
+    equals_twenty(sum(16, |i| wit[i]));
+
+    // We constrained the sum to equal twenty, but there is no unique solution
+    // to that constraint. In order to fully constrain the system, we need to
+    // add something more: The first fifteen columns should all be one.
+
+    // returns [f(0), f(1), ..., f(length - 1)]
+    let make_array = |length, f| fold(length, f, [], |acc, e| acc + [e]);
+    // If an expression evaluates to an array of constraints, all the
+    // constraints in the array are added to the system.
+    make_array(15, |i| wit[i] = 1);
+

Constr and Query Functions

+

Every function in PIL is either a pure, a constr or a query function. They are denoted by

+
    +
  • |...| ...
  • +
  • constr |...| ...
  • +
  • query |...| ...
  • +
+

Inside constr functions, it is possible to create new witness columns +and add constraints to the set of constraints (see the Statement Blocks section for details).

+

Inside query functions, it is possible to evaluate the value of a column on the "current" row +using the std::prover::eval function.

+

Both actions require a certain context to be available, which is not the case for example when +the values of a fixed column are computed.

+

A query function can only be used in the query or hint part of a witness column while constr functions +can only be evaluated in the constraint part of a namespace or machine.

+

You can define and call new constr functions inside a constr function and you can call and define +new query functions inside query functions, but as soon as you enter a pure function, this is not possible any more.

+

Examples:

+
// This function creates and returns a new witness column.
+let new_wit = constr || { let x; x };
+// Queries the current value of a column and returns its square.
+let square_of = query |x| { let v = std::prover::eval(x); v * v };
+// Creates a new witness column, constrains it to be boolean and returns it.
+let new_bool = constr |x| { let x = new_wit(); x * (x - 1) = 0; x };
+// This is a pure function that only returns a constraint, but does not add it
+// to the global set of constraints.
+let bool_constraint: expr -> Constr = |x| x * (x - 1) = 0;
+

Patterns

+

Patterns are a way to destructure or match certain values. They are valid in match arms, +function parameters or left hand sides of let statements in blocks.

+

A pattern is built up in from the following components:

+
    +
  • _ - the "catch all" pattern that matches anything
  • +
  • x - for an identifier x, matches anything and assigns the value to the new local variable of that name
  • +
  • k - for a literal number k, matches the exact number, either as an int or a fe
  • +
  • -k - for a literal number k, matches the exact negated number, either as an int or a fe
  • +
  • "text" - for a string literal, matches the exact string literal as a string
  • +
  • (a, b, c) - for a tuple, matches a tuple-typed value if all the components match
  • +
  • [a, b, c] - for an array, matches array values of exactly the same length if all the components match
  • +
  • [a, .., b, c] - matches an array that has an initial segment of a and ends in b, c. The omitted part can be empty.
  • +
  • X::Y(a, b) - for an enum variant X::Y, matches that enum variant if all the enum fields match.
  • +
+

Patterns can be nested, which means that the components of tuple and array patterns +are themselves patterns.

+

Some examples:

+
// This pattern de-structures the first function parameter.
+let f: (int, int), int -> int = |(a, b), c| (a + c, b);
+// Matches a tuple, ignores the second component.
+let (x, _) = f((6, 7), 3);
+// The match statement typically uses patterns to check for certain values
+// but it can also destructure and create new local variables valid inside
+// the match arm.
+let t = match (x, f((1, x), 2)) {
+    (0, _) => 0,
+    (1, _) => 7,
+    (_, y) => y,
+    _ => 9
+};
+let head: int[] -> int = |x| match x {
+    // Matches the first element of a non-empty array and binds it to a local variable.
+    [a, ..] => a,
+    [] => std::check::panic("Called 'head' on empty array."),
+};
+
+

Note that PIL does not check that patterns in a match expression are exhaustive.

+
+

(Ir-)refutability

+

A pattern is refutable if there is a value of the correct type that the pattern does not match. +An example is the pattern 7 since it does not match all integers, or the patten [x, ..], because it +does not match the empty array.

+

Refutable patterns are fine in match arms, because if the pattern does not match, the evaluator will +just continue trying the next match arm, but they are disallowed in let statements and in function +parameters, because there we do not have the option of "trying the next arm".

+

Example:

+
let f: int -> int[] = |i| match i {
+    // This is a refutable pattern, but it is fine
+    // because we will try the next match arm.
+    0 => [],
+    _ => f(i - 1) + [i],
+};
+// This pattern does not match all `int[]`, because it requires a length
+// of at least one.
+let [x, ..] = f(8);
+

The following patterns are refutable:

+
    +
  • all integer literal patterns
  • +
  • all string literal patterns
  • +
  • enum variant patterns
  • +
  • tuple patterns that have refutable components
  • +
  • array patterns that are not [..].
  • +
+

Variable patterns and _ are always irrefutable.

+

Types

+

The powdr-pil language has the following types:

+
    +
  • bool
  • +
  • int (integer)
  • +
  • fe (field element)
  • +
  • string
  • +
  • tuple
  • +
  • array
  • +
  • function type
  • +
  • expr (expression)
  • +
  • ! ("bottom" or "unreachable" type)
  • +
  • enum types
  • +
+
+

In addition, there are the col and inter types, but they are special in that +they are only used for declaring columns, but cannot appear as the type of an expression. +See Declaring and Referencing Columns for details.

+
+

Powdr-pil performs Hindley-Milner type inference. This means that, similar to Rust, the type of +a symbol does not always have to be specified. The compiler will try to find a type for every +symbol depending both on the value assigned to the symbol and on the context the symbol is used in. +It is an error if the type is not uniquely determined.

+

Symbols can have a generic type, but in those cases, you have to explicitly specify the generic type. +Such declarations can require type variables to satisfy certain trait bounds. +Currently, only built-in traits are supported (see the next section).

+

Literal numbers do not have a specific type, they can be either int, fe or expr (the types that +implement the FromLiteral trait), and their type can also stay generic until evaluation.

+

Example

+

The following snippet defines a function that takes a value of a generic type and returns the value incremented by one. +The type bounds on the generic type are FromLiteral and Add. The type checker will complain if we do not specify +the type bounds. The bound Add is required because we use the + operator in the function and FromLiteral is needed +because we use the literal 1 as a value of that type.

+
let<T: FromLiteral + Add> add_one: T -> T = |i| i + 1;
+

Declaring and Referencing Columns

+

A symbol declared to have type col or inter (or col[k] / inter[k]) is a bit special:

+

These symbols represent columns in the arithmetization and the types of values that can be assigned to +such symbols and the references to the symbols are different from their declared type.

+

If you assign a value to a col symbol, that value is expected to have type int -> fe or int -> int (or an array thereof). +This allows the simple declaration of a fixed column let byte: col = |i| i & 0xff; without complicated conversions. +The integer value is converted to a field element during evaluation, but it has to be non-negative and less than +the field modulus.

+

Symbols of declared type col are fixed (those with value) or witness columns (those without value).

+

A symbol of declared type inter is an intermediate column. You can assign it a value of type expr. +The idea of an intermediate column is that it is an algebraic expression of other columns that you do +not want to compute multiple times.

+
+

Note that if you use let x: expr = a * b;, the symbol x is just a name in the PIL environment, +this will not create an intermediate column. The difference between inter and expr in this case +is that if you use let x: inter = ..., the expression might not be inlined into constraints (depending on the backend), +while if you use let x: expr = ..., it will always be inlined.

+
+

If you reference a symbol of declared type inter or col, the type of the reference is expr (or expr[]). +A byte constraint is as easy as [ X ] in [ byte ], since the expected types in plookup columns is expr. +The downside is that you cannot evaluate columns as functions. If you want to do that, you either have to assign +a copy to an int -> int symbol: let byte_f: int -> int = |i| i & 0xff; let byte: col = byte_f;. +Or you can use the built-in function std::prover::eval if you want to do that inside a prover query or hint.

+

All other symbols use their declared type both for their value and for references to these symbols.

+

Built-in Traits

+

FromLiteral: +Implemented by int, fe, expr. The type of a number literal needs to implement FromLiteral.

+

Add: Implemented by int, fe, expr, T[], string. Used by <T: Add> +: T, T -> T (binary plus).

+

Sub: +Implemented by int, fe, expr. Used by <T: Sub> -: T, T -> T (binary minus).

+

Neg: +Implemented by int, fe, expr. Used by <T: Neg> -: T -> T (unary minus).

+

Mul: +Implemented by int, fe, expr. Used by <T: Mul> *: T, T -> T (binary multiplication).

+

Pow: +Implemented by int, fe, expr, Used by <T: Pow> **: T, int -> T (exponentiation).

+

Ord: +Implemented by int. Used by <T: Ord> op: T, T, -> bool for op being one of <, >, <=, >=.

+

Eq: +Implemented by int, fe, expr. Used by <T: Eq> op: T, T -> bool for op being one of ==, !=.

+

List of Types

+

Bool

+

Type name: bool

+

Booleans are the results of comparisons. They allow the following operators:

+
    +
  • &&: logical conjunction
  • +
  • ||: logical disjunction
  • +
  • !: logical negation
  • +
+

Short-circuiting is not performed when evaluating boolean operators. +This means that (1 == 1) || std::check::panic("reason") will cause a panic abort.

+

Integer

+

Type name: int

+

Integers in powdr-pil have unlimited size. +Array index requires an integer and row indices (for example the input to a fixed +column defined through a function) are also integers.

+

Integer implements FromLiteral, which means that literal numbers can be used in contexts where int is expected.

+

Integers allow the following operators, whose result is always an integer:

+
    +
  • +: addition
  • +
  • -: subtraction (also unary negation)
  • +
  • *: multiplication
  • +
  • /: integer division rounding towards zero, division by zero results in a runtime error
  • +
  • **: exponentiation, the exponent needs to be non-negative and fit 32 bits, otherwise a runtime error is triggered
  • +
  • %: remainder after division, (for signed arguments, p % q == sgn(p) * abs(p) % abs(q)), remainder by zero results in a runtime error
  • +
  • &: bit-wise conjunction
  • +
  • |: bit-wise disjunction
  • +
  • ^: bit-wise exclusive or
  • +
  • <<: bit-wise shift left, the shift amount needs to be non-negative and fit 32 bits, otherwise a runtime error is triggered
  • +
  • >>: bit-wise shift right, the shift amount needs to be non-negative and fit 32 bits, otherwise a runtime error is triggered
  • +
+

The exponentiation operator on field elements requires a non-negative integer as exponent. +It has the signature **: fe, int -> fe.

+

In addition, the following comparison operators are allowed, the result is a boolean:

+
    +
  • <: less than
  • +
  • <=: less or equal
  • +
  • ==: equal
  • +
  • !=: not equal
  • +
  • >=: greater or equal
  • +
  • >: greater than
  • +
+

Field Element

+

Type name: fe

+

Field elements are elements of a particular but unspecified prime field. The exact field is +chosen when powdr is run. The modulus of that field can be accessed via std::field::modulus().

+

Field elements are the values stored in (fixed and witness) columns. +Arithmetic inside constraints (algebraic expressions) is also always finite field arithmetic.

+

The type fe implements FromLiteral, which means that literal numbers can be used in contexts where fe is expected. +If the literal number is not less than the field modulus, a runtime error is caused.

+

Field elements allow the following operators, where the result is always a field element:

+
    +
  • +: finite field addition
  • +
  • -: finite field subtraction (also unary negation)
  • +
  • *: finite field multiplication
  • +
+

There is also an exponentiation operator ** on field elements. It requires the exponent +to be a non-negative integer and thus has the signature **: fe, int -> fe. If the exponent is negative, a runtime error is triggered. 0**0 is defined as 1.

+

The following comparison operators exist for field elements, whose result is a boolean:

+
    +
  • ==: equality comparison
  • +
  • !=: inequality comparison
  • +
+

Since finite fields do not have an inherent order as integers do, if you want to +compare them using <, you have to first convert them to integers.

+

String

+

Type name: string

+

String literals are written as "string content". They are mainly used for debugging or +documentation purposes, since they cannot occur in constraints.

+

They allow the following operators:

+
    +
  • +: string concatenation
  • +
+

Tuple

+

Type name: (..., ..., ...)

+

Tuples are complex types that are composed from other types, either zero or two or more. There is no tuple type with a single element ((int) is the same as int). +The empty tuple type is written as ().

+

Examples include (int, int) (a pair of integers) and ((fe[], int), ()) +(a tuple consisting of a tuple that contains an array of field elements and an integer +and an empty tuple).

+

Tuples values are constructed using parentheses: (1, 2) constructs the tuple that consists of +a one and a two.

+

Tuples do not allow any operators.

+

Array

+

Type name: _[]

+

Arrays are statically or dynamically-sized collections of elements each of the same type +denoted for example as int[] (a dynamically-sized array of integers) or int[2] (an array of integers with static size two). +Array values can be constructed inline using [1, 2] (the array containing the +two elements one and two).

+

The built-in function std::array::len can be used to retrieve the length of an array (statically or dynamically sized) +and the elements of an array a can be accessed using a[0], a[1], etc.

+

The type checker currently only knows dynamically-sized arrays, which means that it does not compare the sizes of statically-sized array types.

+

Arrays allow the following operators:

+
    +
  • +: array concatenation
  • +
  • _[]: array index access, the index needs to be a non-negative integer that is less than the length of the array, otherwise a runtime error is triggered
  • +
+

Function

+

Type name: T1, T2, ..., Tn -> T0

+

Function type names are for example denoted as int, fe -> int or -> int. +Note that (int, fe) -> int is a function that takes a single tuple as parameter +while int, fe -> int takes two parameters of type integer and field element.

+

Functions can be constructed using the lambda expression notation. +For example |x, y| x + y returns a function that performs addition. +The lambda expression || 7 is a function that returns a constant (has no parameters). +Lambda functions can capture anything in their environment and thus form closures.

+

Functions allow the following operators:

+
    +
  • _(...): function evaluation
  • +
+

Powdr-pil is usually side-effect free, but there are some built-in functions that have +side-effects: +These are std::debug::print and std::check::panic and all functions that call them. +Expressions are eagerly evaluated from left to right.

+

Expression

+

Type name: expr

+

Expressions are the elements of the algebraic expressions used in constraints.

+

References to columns have type expr and expr also implements FromLiteral, +which means that literal numbers can be used in contexts where expr is expected.

+

Example:

+
let x: col;
+let y: col;
+let f: -> expr = || x + y;
+let g = || 7;
+f() = g();
+

The first two lines define the witness columns x and y. +The next two lines define the utility functions f and g. +The function f adds the two columns x and y symbolically - it essentially returns the expression x + y. +The last line is at statement level and it is expected that it evaluates to a constraint, in this case, a polynomial identity. +Because of that, g is inferred to have type -> expr, which is compatible with the literal 7.

+

Since expressions are built from abstract column references, applying operators +does not perform any operations but instead constructs an abstract expression structure / syntax tree.

+

Expressions allow the following operators, which always construct new expressions:

+
    +
  • +: additive combination of expressions
  • +
  • -: subtractive combination of expressions (also unary negation)
  • +
  • *: multiplicative combination of expressions
  • +
  • **: exponential combination of an expression with an integer constant
  • +
  • ': reference to the next row of a column, can only be applied directly to columns and only once
  • +
+

The operator = on expressions constructs a constraint (see [../builtins#Constr]).

+

Bottom Type

+

Type name: !

+

The bottom type essentially is the return type of a function that never returns, which currently only happens +if you call the panic function. The bottom type is compatible with any other type, which means +that you can call the panic function in any context.

+

Enum Types

+

Enums are user-defined types that can hold different named alternatives plus data. An enum type has a (namespaced) name +that uniquely identifies it and is also used to reference the type.

+

Enums are declared in the following way:

+
enum EnumName {
+    Variant1,
+    Variant2(),
+    Variant3(int),
+    Variant4(int, int[], EnumName),
+}
+

The variants must have unique names inside the enum and they can optionally take additional data. +Each variant declares a type constructor function that can be used to create a value of the enum:

+
let a = EnumName::Variant1;
+let b = EnumName::Variant2();
+let c = EnumName::Variant3(3);
+let d = EnumName::Variant4(1, [2, 3], EnumName::Variant1);
+

Recursive enums are allowed.

+

Enums do not allow any operators.

+

Fixed columns

+

powdr-pil requires the definition of fixed columns at the time of declaration.

+

For example:

+
col fixed ONES = [1]*; // this is valid
+// col fixed ONES; // this is invalid
+

A number of mechanisms are supported to declare fixed columns. Let N be the total length of the column we're defining.

+

Values with repetitions

+

powdr-pil supports a basic language to define the value of constant columns using:

+
    +
  • arrays, for example [1, 2, 3]
  • +
  • repetition, for example [1, 2]*
  • +
  • concatenation, for example [1, 2] + [3, 4]
  • +
+

These mechanisms can be combined, as long as a single repetition is used per column definition.

+
// valid, as for a given total length, only one column fits this definition for a given `N`
+col fixed A = [1, 2] + [3, 4]* + [5];
+
+// invalid, as many columns fit this definition
+// col fixed A = [1, 2]* + [3, 4]*
+

Mappings

+

A column can be seen as a mapping from integers to field elements. In this context, different functions are supported:

+
col fixed B(i) { i + 1 };
+
+col fixed C(i) {match i {
+    0 => 1,
+    _ => 0
+}};
+

Built-ins

+

Functions

+

The following functions are built into the compiler. +They need to be defined to be accessible, but their assigned value is ignored and the compiler replaces it with the following.

+

Array length

+
let<T> std::array::len: T[] -> int
+

Returns the length of an array as an integer.

+

Example:

+
let x = [1, 2, 3];
+let l = std::array::len(x); // returns 3
+

Panic

+
let std::check::panic: string -> !
+

Aborts evaluation and prints its argument as error message as a +side-effect of its evaluation.

+

Since panic does not generate a constraint, it cannot be used +for correctness checks. The verifier only checks constraints / identities and +thus ignores anything that could lead to a panic. Panic should only +be used to check prover-internal consistency.

+

Example:

+
let secp256k1_inverse = |x|
+    if x == std::convert::fe(0) {
+        panic!("Tried to compute the inverse of zero.")
+    } else {
+        std::math::ff::inverse(x, secp256k1_modulus);
+    };
+

Conversions

+
let<T: FromLiteral> std::convert::fe: T -> fe
+

This function is meant to be used on int, but also works on fe for convenience.

+

It converts a non-negative integer less than the field modulus to a field element. +Causes a type error in all other cases.

+

If the argument is already a field element, it is returned without modification.

+
let<T: FromLiteral> std::convert::int: T -> int
+

This function is meant to be used on fe, but also works on int for convenience.

+

It converts a field element to an integer.

+

If the argument is already an integer, it is returned without modification.

+
let<T: FromLiteral> std::convert::expr: T -> expr
+

This function is meant to be used on int, but also works on fe and expr for convenience.

+

It converts an integer to an expr.

+

If the argument is already an expr, it is returned without modification.

+

Printing

+
let std::debug::print: string -> Constr[]
+

This function takes a string and prints it on the standard output during evaluation, as a side-effect of its evaluation.

+

This function should only be used for debugging purposes.

+

Note that the function does not append a newline at the end.

+

It returns an empty Constr array so that it can be used at statement level where +constraints are expected.

+

Modulus

+
let std::field::modulus: -> int
+

Returns the current field's modulus as an integer.

+

Example:

+
// Inside a machine
+if std::field::modulus() != 2**64 - 2**32 + 1 {
+    panic!("This machine can only be used with the Goldilocks field.")
+} else {
+    []
+};
+

Evaluate

+
let std::prover::eval: expr -> fe
+

Evaluates a column (potentially with ' applied) on the current row.

+

This function can only be used for prover queries or hints and it only +works on columns (and those with ' applied). This means you cannot use +std::prover::eval(x + 1).

+

In the following example, the column x is evaluated in a prover +hint that returns the square root of a number. +Example:

+
machine Sqrt {
+    let sqrt_hint: fe -> fe = |x| match x {
+        // Code to compute the square root of x goes here.
+    };
+
+    col witness x;
+    col witness y(i) query std::prelude::Query::Hint(sqrt_hint(std::prover::eval(x)));
+
+    y * y = x;
+
+}}
+

Challenges

+
let std::prelude::challenge: int, int -> expr
+

Constructs a challenge object, essentially asking the verifier for a random number.

+

The first argument is the proof stage and the second is the identifier of the challenge.

+

If you want two challenges to be different, you have to choose different IDs.

+

Degree

+
let std::prover::min_degree: -> int
+let std::prover::max_degree: -> int
+let std::prover::degree: -> int
+

The degree function returns the number of rows / the length of the witness columns, also +known as the degree. Outside of fixed column definitions, degree fails if min_degree and max_degree are different.

+

Hints

+
let std::prelude::set_hint: expr, (int -> std::prelude::Query) -> ()
+

This function can be used to set a "query function" for a witness column. +Query functions are used during witness generation and allow witness column cells +to receive a value even though they are not uniquely constrained by the constraints.

+

The first argument must be a witness column and the function can only be called +once per witness column.

+

Types

+

There are some types that are not proper built-in types (in the sense that they are not treated +specially in the type system), but they are defined in the +standard library and are referenced by built-in functions.

+

Constr

+

The type Constr or more specifically, std::prelude::Constr is the type of a constraint. +Expressions at statement level are required to evaluate either to Constr or Constr[].

+

It is defined as follows:

+
enum Constr {
+    /// A polynomial identity.
+    Identity(expr, expr),
+    /// A lookup constraint with selectors.
+    Lookup((Option<expr>, Option<expr>), (expr, expr)[]),
+    /// A permutation constraint with selectors.
+    Permutation((Option<expr>, Option<expr>), (expr, expr)[]),
+    /// A connection constraint (copy constraint).
+    Connection((expr, expr)[])
+}
+

The operator = can be applied on two expr values and results in a Constr::Identity.

+

The type implements no traits and allows no operators.

+

Operators

+

The following operators are supported by powdr-pil with their respective signatures.

+
let<T: Add> +: T, T -> T
+let<T: Sub> -: T, T -> T
+let<T: Neg> -: T -> T
+
+let<T: Mul> *: T, T -> T
+let /: int, int -> int
+let %: int, int -> int
+let<T: Pow> **: T, int -> T
+
+let <<: int, int -> int
+let >>: int, int -> int
+let &: int, int -> int
+let |: int, int -> int
+let ^: int, int -> int
+
+let<T: Ord> <: T, T -> bool
+let<T: Ord> <=: T, T -> bool
+let<T: Ord> >: T, T -> bool
+let<T: Ord> >=: T, T -> bool
+
+let<T: Eq> ==: T, T -> bool
+let<T: Eq> !=: T, T -> bool
+
+let =: expr, expr -> Constr
+let ': expr -> expr
+
+let ||: bool, bool -> bool
+let &&: bool, bool -> bool
+let !: bool -> bool
+
+

Frontends

+

While any frontend VM can be implemented in powdr-asm, powdr comes with several frontends for popular instruction set architectures.

+

RISCV

+

A RISCV frontend for powdr is already available.

+

How to run the Rust-RISCV example

+
# Install the riscv target for the rust compiler
+rustup target add riscv32imac-unknown-none-elf
+# Run the powdr-rs compiler. It will generate files in ./output/
+powdr-rs compile riscv/tests/riscv_data/sum -o output
+# Run powdr to compile powdr-asm to powdr-PIL and generate the witness
+# -i specifies the prover witness input (see below)
+powdr pil output/sum.asm -o output -f -i 10,2,4,6
+
+

The example Rust code verifies that a supplied list of integers sums up to a specified value.

+
#![no_main]
+#![no_std]
+
+extern crate alloc;
+use alloc::vec::Vec;
+
+use powdr_riscv_runtime::io::read_u32;
+
+#[no_mangle]
+pub fn main() {
+    // This is the sum claimed by the prover.
+    let proposed_sum = read_u32(0);
+    // The number of integers we want to sum.
+    let len = read_u32(1) as usize;
+    // Read the numbers from the prover and store them
+    // in a vector.
+    let data: Vec<_> = (2..(len + 2)).map(|idx| read_u32(idx as u32)).collect();
+    // Compute the sum.
+    let sum: u32 = data.iter().sum();
+    // Check that our sum matches the prover's.
+    assert_eq!(sum, proposed_sum);
+}
+

The function read_u32 reads a number from the list supplied with -i.

+

This is just a first mechanism to provide access to the outside world. +The plan is to be able to call arbitrary user-defined ffi functions that will translate to prover queries, +and can then ask for e.g. the value of a storage slot at a certain address or the root hash of a Merkle tree.

+

RISCV and ZK-Continuations

+

ZK-continuations can be used to make proofs for unbounded execution traces of +Rust programs, where the trace is split into many different chunks. A proof +is computed for each chunk, and all proofs can be combined with +recursion/aggregation until a single proof remains.

+

For the details of how memory is handled in the ZK-continuations case please +see this.

+

powdr-rs has experimental support to ZK-continuations, which can be used as follows.

+

Let's use as example test many chunks from the riscv crate:

+
#![no_main]
+#![no_std]
+
+extern crate alloc;
+extern crate powdr_riscv_runtime;
+use alloc::vec::Vec;
+
+#[no_mangle]
+pub fn main() {
+    let mut foo = Vec::new();
+    foo.push(1);
+
+    for _ in 0..100 {
+        foo.push(foo.iter().sum());
+    }
+
+    // Compute some fibonacci numbers
+    // -> Does not access memory but also does not get optimized out...
+    let mut a = 1;
+    let mut b = 1;
+    for _ in 0..150000 {
+        let tmp = a + b;
+        a = b;
+        b = tmp;
+    }
+    // Don't optimize me away :/
+    assert!(a > 0);
+}
+

First we need to compile the Rust code to powdr-asm:

+
powdr-rs compile riscv/tests/riscv_data/many_chunks
+
+

Now we can use powdr's RISCV executor to estimate how many cycles are needed:

+
powdr-rs execute many_chunks.asm
+
+
...
+Execution trace length: 750329
+
+

By default, powdr-RISCV uses chunks of length 2^18. That means we will need at +least 3 chunks.

+

For the continuations case, the compiled assembly code looks different because +of the external memory commitments, so we need to recompile using the +--continuations flag:

+
powdr-rs compile riscv/tests/riscv_data/many_chunks --continuations
+
+

We can now execute the program with continuations enabled:

+
powdr-rs -- execute many_chunks.asm --continuations
+
+

The output now is longer:

+
Running chunk 0...
+Building bootloader inputs for chunk 0...
+26 unique memory accesses over 2 accessed pages: {31, 32}
+Estimating the shutdown routine to use 1362 rows.
+Bootloader inputs length: 1285
+Simulating chunk execution...
+Initial memory root hash: 44cd91c12033ad4c6a6b19793b73f1a66d99a0e0bf63494c12ceb1f451ec9452
+Final memory root hash: e6a6fd63d864c734d6a4df4988f733738790262af9c7b014a1c036679baf1125
+Chunk trace length: 260782
+Validating chunk...
+Bootloader used 3134 rows.
+  => 257648 / 262144 (98%) of rows are used for the actual computation!
+Proved 257647 rows.
+
+Running chunk 1...
+Building bootloader inputs for chunk 1...
+0 unique memory accesses over 0 accessed pages: {}
+Estimating the shutdown routine to use 42 rows.
+Bootloader inputs length: 83
+Simulating chunk execution...
+Initial memory root hash: e6a6fd63d864c734d6a4df4988f733738790262af9c7b014a1c036679baf1125
+Final memory root hash: e6a6fd63d864c734d6a4df4988f733738790262af9c7b014a1c036679baf1125
+Chunk trace length: 262102
+Validating chunk...
+Bootloader used 62 rows.
+  => 262040 / 262144 (99%) of rows are used for the actual computation!
+Proved 262039 rows.
+
+Running chunk 2...
+Building bootloader inputs for chunk 2...
+2 unique memory accesses over 1 accessed pages: {31}
+Estimating the shutdown routine to use 702 rows.
+Bootloader inputs length: 684
+Simulating chunk execution...
+Initial memory root hash: e6a6fd63d864c734d6a4df4988f733738790262af9c7b014a1c036679baf1125
+Final memory root hash: e6a6fd63d864c734d6a4df4988f733738790262af9c7b014a1c036679baf1125
+Chunk trace length: 232057
+Validating chunk...
+Bootloader used 1610 rows.
+  => 259832 / 262144 (99%) of rows are used for the actual computation!
+Done!
+
+

The step above is informational, but for the proofs we also need the full witness:

+
powdr-rs execute many_chunks.asm --witness
+
+

The witnesses are written in ./chunk_0/commits.bin, ./chunk_1/commits.bin +and ./chunk_2/commits.bin.

+

Now that we have the witnesses for all chunks we can use powdr (instead of +powdr-rs) to compute proofs for each chunk:

+
powdr prove many_chunks.asm -d chunk_0 --backend estark-dump
+powdr prove many_chunks.asm -d chunk_1 --backend estark-dump
+powdr prove many_chunks.asm -d chunk_2 --backend estark-dump
+
+

These proofs are mock proofs for the sake of the example, but any backend +should work here.

+

After generating real proofs, each specific proof system can be used for the +recursion/aggregation parts. A follow-up tutorial on that is coming soon.

+

Valida

+

A Valida front end for powdr is under development. If you are interested, feel free to reach out!

+

EVM

+

An EVM frontend for powdr is under development. If you are interested, feel free to reach out!

+

Backends

+

powdr aims to have full flexibility when it comes to generating proofs and comes with a few built-in backends to get started with zkVMs.

+

Plonky3

+

powdr partially supports plonky3 with the Goldilocks, BabyBear, KoalaBear, and Mersenne31 fields.

+

Halo2

+

powdr supports the PSE fork of halo2 with the bn254 field.

+

eSTARK

+

powdr supports the eSTARK proof system with the Goldilocks field, +implemented by the starky library from eigen-zkvm.

+

Architecture

+

powdr applies a number of steps in order to reduce a powdr-asm program into PIL.

+

We provide a high level overview of these steps.

+
            ┌────────────┐           ┌──────────┐
+            │            │           │          │
+ powdr-asm  │            │ AIR graph │          │  PIL
+───────────►│  compiler  ├───────────┤  linker  ├──────►
+            │            │           │          │
+            │            │           │          │
+            └────────────┘           └──────────┘
+
+

Compiler

+

In this section, we explain how the powdr compiler reduces a program made of virtual and constrained machines to a set of AIRs.

+

Virtual machine reduction

+

The first step is to reduce virtual machines to constrained machines. This step is run on all machines and does not affect constrained machines. +As a result of this step, for each machine:

+ +

Block enforcement

+

Block enforcement applies on constrained machines. It makes sure that the operation_id is constant within each machine block.

+

AIR generation

+

At this point, all machines contain only:

+
    +
  • an optional degree range
  • +
  • constraints
  • +
  • links to other machines
  • +
  • operations
  • +
+

Let's define AIR as a data structure with only these elements.

+

Starting from the main machine's type, we create a tree of AIR objects by traversing its submachines, recursively instantiating each machine as an AIR. +Let's define the AIR tree as the resulting tree.

+

Linker

+

A linker is used to turn an AIR tree into a single PIL file. +The linking process operates in the following way:

+
    +
  1. Create an empty PIL file
  2. +
  3. Start from the main AIR. Let main_degree_range be its degree.
  4. +
  5. For each AIR +
      +
    1. Create a new namespace in the PIL file +2a. If degrees-mode is vadcop, set the namespace degree to that of the AIR +2b. If degrees-mode is monolithic, set the namespace degree to main_degree_range
    2. +
    3. Add the constraints to the namespace
    4. +
    5. Turn the links into lookups and permutations and add them to the namespace
    6. +
    +
  6. +
+

The result is a monolithic AIR where:

+
    +
  • each machine instance is a namespace
  • +
  • each namespace defines its own degree range
  • +
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + diff --git a/publics.html b/publics.html new file mode 100644 index 0000000000..ac9b952190 --- /dev/null +++ b/publics.html @@ -0,0 +1,267 @@ + + + + + + Using publics - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Using publics

+

Public values are a small but important part of verifying ZK proofs. Often, the +verifier is interested in inputs and/or outputs to a public function.

+

In the toy example below, the prover can show that they know the square root of +a public value that is published with the proof.

+

You can also run this example directly in the powdr +repository:

+
cargo run --example sqrt_with_public
+
+

You can also enable logs to know what is happening internally:

+
RUST_LOG=info cargo run --example sqrt_with_public
+
+
machine Square with degree: 8 {
+    reg pc[@pc];
+    reg X[<=];
+    reg Y[<=];
+    reg A;
+
+    // Expose the register value of A in the last time step
+    public N = A(7);
+
+    instr square X -> Y {
+        Y = X * X
+    }
+	
+    function main {
+        A <=X= ${ std::prelude::Query::Input(0, 1) };
+        A <== square(A);
+    }
+}
+

This example uses a small VM with jump and a square instructions. The +program reads the private input from the prover, squares it, and enters an +infinite loop to ensure that all the remaining rows are filled with the result of A^2. +Since the length of our execution trace is fixed and equals 8, we can tag the +8-th row of A (A[7]) as the publicly exposed number.

+

Let's run all steps needed to generate and verify a proof that 32 = 9:

+
    +
  1. Setup step:
  2. +
+
powdr setup 8 --backend halo2 --field bn254
+
+
    +
  1. Witness generation:
  2. +
+
powdr pil test_data/asm/sqrt_with_public.asm --field bn254 -i 3
+
+
    +
  1. Verification Key generation:
  2. +
+
powdr verification-key test_data/asm/sqrt_with_public.asm --field bn254 --backend halo2 --params params.bin
+
+
    +
  1. Proof generation:
  2. +
+
powdr prove test_data/asm/sqrt_with_public.asm --field bn254 --backend halo2 --params params.bin --vkey vkey.bin
+
+
    +
  1. Proof verification:
  2. +
+
powdr verify test_data/asm/sqrt_with_public.asm --field bn254 --backend halo2 --params params.bin --vkey vkey.bin --proof sqrt_with_public_proof.bin --publics 9
+
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/quick_start_vm.html b/quick_start_vm.html new file mode 100644 index 0000000000..2da364148f --- /dev/null +++ b/quick_start_vm.html @@ -0,0 +1,266 @@ + + + + + + Quick Start - powdr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Quick Start

+

First, create a new powdrVM project with

+
cargo-powdr new my-host
+
+
    +
  • Your new crate my-host is the host of the virtual machine's execution, +and is responsible for preparing data and running the prover.
  • +
  • The guest crate in your new project contains the Rust code whose execution will be proven.
  • +
+

Most of these details are abstracted by the powdr library.

+

Now that your project is set up, just run

+
cargo run -r
+
+

The host manages a powdr::Session which can be used to share data +with the guest, test the execution, and generate ZK proofs.

+
use powdr::Session;
+
+fn main() {
+    env_logger::init();
+
+    let some_data = vec![1, 2, 3, 4, 5];
+
+    // Create a new powdr session to make proofs for the `guest` crate.
+    // Store all temporary and final artifacts in `powdr-target`.
+    let mut session = Session::builder()
+        .guest_path("./guest")
+        .out_path("powdr-target")
+        // powdrVM splits long execution traces into chunks
+        // which are proven individually.
+        // The default size of a chunk is 2^20 = 1048576 rows.
+        // For experiments and smaller traces/proofs, it may be beneficial to reduce the chunk size.
+        // Create a new powdr session with a custom chunk size.
+        // 2^18 = 262144 rows per chunk.
+        .chunk_size_log2(18)
+        .build()
+        // Write `some_data` to channel 1 and the sum of `some_data` to channel 2.
+        // Any serde-serializable type can be written to a channel.
+        .write(1, &some_data)
+        .write(2, &some_data.iter().sum::<u32>());
+
+    // Fast dry run to test execution.
+    session.run();
+
+    // Uncomment to compute the proof.
+    //session.prove();
+}
+

The guest contains the custom logic that should be proved.

+
use powdr_riscv_runtime;
+use powdr_riscv_runtime::io::read;
+
+fn main() {
+    // Any serde-deserializable type can be read from a channel.
+    // Read some data from channel 1.
+    let data: Vec<u32> = read(1);
+    // Read the claimed sum from channel 2.
+    let sum: u32 = read(2);
+
+    // Check that the claimed sum is correct.
+    assert_eq!(data.iter().sum::<u32>(), sum);
+}
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+ + diff --git a/searcher.js b/searcher.js new file mode 100644 index 0000000000..dc03e0a02d --- /dev/null +++ b/searcher.js @@ -0,0 +1,483 @@ +"use strict"; +window.search = window.search || {}; +(function search(search) { + // Search functionality + // + // You can use !hasFocus() to prevent keyhandling in your key + // event handlers while the user is typing their search. + + if (!Mark || !elasticlunr) { + return; + } + + //IE 11 Compatibility from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith + if (!String.prototype.startsWith) { + String.prototype.startsWith = function(search, pos) { + return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search; + }; + } + + var search_wrap = document.getElementById('search-wrapper'), + searchbar = document.getElementById('searchbar'), + searchbar_outer = document.getElementById('searchbar-outer'), + searchresults = document.getElementById('searchresults'), + searchresults_outer = document.getElementById('searchresults-outer'), + searchresults_header = document.getElementById('searchresults-header'), + searchicon = document.getElementById('search-toggle'), + content = document.getElementById('content'), + + searchindex = null, + doc_urls = [], + results_options = { + teaser_word_count: 30, + limit_results: 30, + }, + search_options = { + bool: "AND", + expand: true, + fields: { + title: {boost: 1}, + body: {boost: 1}, + breadcrumbs: {boost: 0} + } + }, + mark_exclude = [], + marker = new Mark(content), + current_searchterm = "", + URL_SEARCH_PARAM = 'search', + URL_MARK_PARAM = 'highlight', + teaser_count = 0, + + SEARCH_HOTKEY_KEYCODE = 83, + ESCAPE_KEYCODE = 27, + DOWN_KEYCODE = 40, + UP_KEYCODE = 38, + SELECT_KEYCODE = 13; + + function hasFocus() { + return searchbar === document.activeElement; + } + + function removeChildren(elem) { + while (elem.firstChild) { + elem.removeChild(elem.firstChild); + } + } + + // Helper to parse a url into its building blocks. + function parseURL(url) { + var a = document.createElement('a'); + a.href = url; + return { + source: url, + protocol: a.protocol.replace(':',''), + host: a.hostname, + port: a.port, + params: (function(){ + var ret = {}; + var seg = a.search.replace(/^\?/,'').split('&'); + var len = seg.length, i = 0, s; + for (;i': '>', + '"': '"', + "'": ''' + }; + var repl = function(c) { return MAP[c]; }; + return function(s) { + return s.replace(/[&<>'"]/g, repl); + }; + })(); + + function formatSearchMetric(count, searchterm) { + if (count == 1) { + return count + " search result for '" + searchterm + "':"; + } else if (count == 0) { + return "No search results for '" + searchterm + "'."; + } else { + return count + " search results for '" + searchterm + "':"; + } + } + + function formatSearchResult(result, searchterms) { + var teaser = makeTeaser(escapeHTML(result.doc.body), searchterms); + teaser_count++; + + // The ?URL_MARK_PARAM= parameter belongs inbetween the page and the #heading-anchor + var url = doc_urls[result.ref].split("#"); + if (url.length == 1) { // no anchor found + url.push(""); + } + + // encodeURIComponent escapes all chars that could allow an XSS except + // for '. Due to that we also manually replace ' with its url-encoded + // representation (%27). + var searchterms = encodeURIComponent(searchterms.join(" ")).replace(/\'/g, "%27"); + + return '' + result.doc.breadcrumbs + '' + + '' + + teaser + ''; + } + + function makeTeaser(body, searchterms) { + // The strategy is as follows: + // First, assign a value to each word in the document: + // Words that correspond to search terms (stemmer aware): 40 + // Normal words: 2 + // First word in a sentence: 8 + // Then use a sliding window with a constant number of words and count the + // sum of the values of the words within the window. Then use the window that got the + // maximum sum. If there are multiple maximas, then get the last one. + // Enclose the terms in . + var stemmed_searchterms = searchterms.map(function(w) { + return elasticlunr.stemmer(w.toLowerCase()); + }); + var searchterm_weight = 40; + var weighted = []; // contains elements of ["word", weight, index_in_document] + // split in sentences, then words + var sentences = body.toLowerCase().split('. '); + var index = 0; + var value = 0; + var searchterm_found = false; + for (var sentenceindex in sentences) { + var words = sentences[sentenceindex].split(' '); + value = 8; + for (var wordindex in words) { + var word = words[wordindex]; + if (word.length > 0) { + for (var searchtermindex in stemmed_searchterms) { + if (elasticlunr.stemmer(word).startsWith(stemmed_searchterms[searchtermindex])) { + value = searchterm_weight; + searchterm_found = true; + } + }; + weighted.push([word, value, index]); + value = 2; + } + index += word.length; + index += 1; // ' ' or '.' if last word in sentence + }; + index += 1; // because we split at a two-char boundary '. ' + }; + + if (weighted.length == 0) { + return body; + } + + var window_weight = []; + var window_size = Math.min(weighted.length, results_options.teaser_word_count); + + var cur_sum = 0; + for (var wordindex = 0; wordindex < window_size; wordindex++) { + cur_sum += weighted[wordindex][1]; + }; + window_weight.push(cur_sum); + for (var wordindex = 0; wordindex < weighted.length - window_size; wordindex++) { + cur_sum -= weighted[wordindex][1]; + cur_sum += weighted[wordindex + window_size][1]; + window_weight.push(cur_sum); + }; + + if (searchterm_found) { + var max_sum = 0; + var max_sum_window_index = 0; + // backwards + for (var i = window_weight.length - 1; i >= 0; i--) { + if (window_weight[i] > max_sum) { + max_sum = window_weight[i]; + max_sum_window_index = i; + } + }; + } else { + max_sum_window_index = 0; + } + + // add around searchterms + var teaser_split = []; + var index = weighted[max_sum_window_index][2]; + for (var i = max_sum_window_index; i < max_sum_window_index+window_size; i++) { + var word = weighted[i]; + if (index < word[2]) { + // missing text from index to start of `word` + teaser_split.push(body.substring(index, word[2])); + index = word[2]; + } + if (word[1] == searchterm_weight) { + teaser_split.push("") + } + index = word[2] + word[0].length; + teaser_split.push(body.substring(word[2], index)); + if (word[1] == searchterm_weight) { + teaser_split.push("") + } + }; + + return teaser_split.join(''); + } + + function init(config) { + results_options = config.results_options; + search_options = config.search_options; + searchbar_outer = config.searchbar_outer; + doc_urls = config.doc_urls; + searchindex = elasticlunr.Index.load(config.index); + + // Set up events + searchicon.addEventListener('click', function(e) { searchIconClickHandler(); }, false); + searchbar.addEventListener('keyup', function(e) { searchbarKeyUpHandler(); }, false); + document.addEventListener('keydown', function(e) { globalKeyHandler(e); }, false); + // If the user uses the browser buttons, do the same as if a reload happened + window.onpopstate = function(e) { doSearchOrMarkFromUrl(); }; + // Suppress "submit" events so the page doesn't reload when the user presses Enter + document.addEventListener('submit', function(e) { e.preventDefault(); }, false); + + // If reloaded, do the search or mark again, depending on the current url parameters + doSearchOrMarkFromUrl(); + } + + function unfocusSearchbar() { + // hacky, but just focusing a div only works once + var tmp = document.createElement('input'); + tmp.setAttribute('style', 'position: absolute; opacity: 0;'); + searchicon.appendChild(tmp); + tmp.focus(); + tmp.remove(); + } + + // On reload or browser history backwards/forwards events, parse the url and do search or mark + function doSearchOrMarkFromUrl() { + // Check current URL for search request + var url = parseURL(window.location.href); + if (url.params.hasOwnProperty(URL_SEARCH_PARAM) + && url.params[URL_SEARCH_PARAM] != "") { + showSearch(true); + searchbar.value = decodeURIComponent( + (url.params[URL_SEARCH_PARAM]+'').replace(/\+/g, '%20')); + searchbarKeyUpHandler(); // -> doSearch() + } else { + showSearch(false); + } + + if (url.params.hasOwnProperty(URL_MARK_PARAM)) { + var words = decodeURIComponent(url.params[URL_MARK_PARAM]).split(' '); + marker.mark(words, { + exclude: mark_exclude + }); + + var markers = document.querySelectorAll("mark"); + function hide() { + for (var i = 0; i < markers.length; i++) { + markers[i].classList.add("fade-out"); + window.setTimeout(function(e) { marker.unmark(); }, 300); + } + } + for (var i = 0; i < markers.length; i++) { + markers[i].addEventListener('click', hide); + } + } + } + + // Eventhandler for keyevents on `document` + function globalKeyHandler(e) { + if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey || e.target.type === 'textarea' || e.target.type === 'text' || !hasFocus() && /^(?:input|select|textarea)$/i.test(e.target.nodeName)) { return; } + + if (e.keyCode === ESCAPE_KEYCODE) { + e.preventDefault(); + searchbar.classList.remove("active"); + setSearchUrlParameters("", + (searchbar.value.trim() !== "") ? "push" : "replace"); + if (hasFocus()) { + unfocusSearchbar(); + } + showSearch(false); + marker.unmark(); + } else if (!hasFocus() && e.keyCode === SEARCH_HOTKEY_KEYCODE) { + e.preventDefault(); + showSearch(true); + window.scrollTo(0, 0); + searchbar.select(); + } else if (hasFocus() && e.keyCode === DOWN_KEYCODE) { + e.preventDefault(); + unfocusSearchbar(); + searchresults.firstElementChild.classList.add("focus"); + } else if (!hasFocus() && (e.keyCode === DOWN_KEYCODE + || e.keyCode === UP_KEYCODE + || e.keyCode === SELECT_KEYCODE)) { + // not `:focus` because browser does annoying scrolling + var focused = searchresults.querySelector("li.focus"); + if (!focused) return; + e.preventDefault(); + if (e.keyCode === DOWN_KEYCODE) { + var next = focused.nextElementSibling; + if (next) { + focused.classList.remove("focus"); + next.classList.add("focus"); + } + } else if (e.keyCode === UP_KEYCODE) { + focused.classList.remove("focus"); + var prev = focused.previousElementSibling; + if (prev) { + prev.classList.add("focus"); + } else { + searchbar.select(); + } + } else { // SELECT_KEYCODE + window.location.assign(focused.querySelector('a')); + } + } + } + + function showSearch(yes) { + if (yes) { + search_wrap.classList.remove('hidden'); + searchicon.setAttribute('aria-expanded', 'true'); + } else { + search_wrap.classList.add('hidden'); + searchicon.setAttribute('aria-expanded', 'false'); + var results = searchresults.children; + for (var i = 0; i < results.length; i++) { + results[i].classList.remove("focus"); + } + } + } + + function showResults(yes) { + if (yes) { + searchresults_outer.classList.remove('hidden'); + } else { + searchresults_outer.classList.add('hidden'); + } + } + + // Eventhandler for search icon + function searchIconClickHandler() { + if (search_wrap.classList.contains('hidden')) { + showSearch(true); + window.scrollTo(0, 0); + searchbar.select(); + } else { + showSearch(false); + } + } + + // Eventhandler for keyevents while the searchbar is focused + function searchbarKeyUpHandler() { + var searchterm = searchbar.value.trim(); + if (searchterm != "") { + searchbar.classList.add("active"); + doSearch(searchterm); + } else { + searchbar.classList.remove("active"); + showResults(false); + removeChildren(searchresults); + } + + setSearchUrlParameters(searchterm, "push_if_new_search_else_replace"); + + // Remove marks + marker.unmark(); + } + + // Update current url with ?URL_SEARCH_PARAM= parameter, remove ?URL_MARK_PARAM and #heading-anchor . + // `action` can be one of "push", "replace", "push_if_new_search_else_replace" + // and replaces or pushes a new browser history item. + // "push_if_new_search_else_replace" pushes if there is no `?URL_SEARCH_PARAM=abc` yet. + function setSearchUrlParameters(searchterm, action) { + var url = parseURL(window.location.href); + var first_search = ! url.params.hasOwnProperty(URL_SEARCH_PARAM); + if (searchterm != "" || action == "push_if_new_search_else_replace") { + url.params[URL_SEARCH_PARAM] = searchterm; + delete url.params[URL_MARK_PARAM]; + url.hash = ""; + } else { + delete url.params[URL_MARK_PARAM]; + delete url.params[URL_SEARCH_PARAM]; + } + // A new search will also add a new history item, so the user can go back + // to the page prior to searching. A updated search term will only replace + // the url. + if (action == "push" || (action == "push_if_new_search_else_replace" && first_search) ) { + history.pushState({}, document.title, renderURL(url)); + } else if (action == "replace" || (action == "push_if_new_search_else_replace" && !first_search) ) { + history.replaceState({}, document.title, renderURL(url)); + } + } + + function doSearch(searchterm) { + + // Don't search the same twice + if (current_searchterm == searchterm) { return; } + else { current_searchterm = searchterm; } + + if (searchindex == null) { return; } + + // Do the actual search + var results = searchindex.search(searchterm, search_options); + var resultcount = Math.min(results.length, results_options.limit_results); + + // Display search metrics + searchresults_header.innerText = formatSearchMetric(resultcount, searchterm); + + // Clear and insert results + var searchterms = searchterm.split(' '); + removeChildren(searchresults); + for(var i = 0; i < resultcount ; i++){ + var resultElem = document.createElement('li'); + resultElem.innerHTML = formatSearchResult(results[i], searchterms); + searchresults.appendChild(resultElem); + } + + // Display results + showResults(true); + } + + fetch(path_to_root + 'searchindex.json') + .then(response => response.json()) + .then(json => init(json)) + .catch(error => { // Try to load searchindex.js if fetch failed + var script = document.createElement('script'); + script.src = path_to_root + 'searchindex.js'; + script.onload = () => init(window.search); + document.head.appendChild(script); + }); + + // Exported functions + search.hasFocus = hasFocus; +})(window.search); diff --git a/searchindex.js b/searchindex.js new file mode 100644 index 0000000000..ce9861a603 --- /dev/null +++ b/searchindex.js @@ -0,0 +1 @@ +Object.assign(window.search, {"doc_urls":["powdr_vm_intro.html#introduction","powdr_vm_intro.html#contributing","powdr_vm_intro.html#license","installation_vm.html#installation","installation_vm.html#prerequisites","quick_start_vm.html#quick-start","powdr_sdk_intro.html#introduction","powdr_sdk_intro.html#contributing","powdr_sdk_intro.html#license","installation_sdk.html#installation","installation_sdk.html#prerequisites","installation_sdk.html#building--powdr","installation_sdk.html#building--powdr-rs","hello_world.html#hello-world","hello_world_cli.html#hello-world-using-the-cli","hello_world_cli.html#setup--verification","powdr_crate.html#hello-world-using-powdr-as-a-library","hello_world_ethereum.html#hello-world-on-ethereum","hello_world_ethereum_aggregation.html#hello-world-on-ethereum-with-proof-aggregation","examples.html#examples","publics.html#using-publics","cli/index.html#command-line-help-for-powdr","cli/index.html#powdr","cli/index.html#powdr-pil","cli/index.html#powdr-prove","cli/index.html#powdr-verify","cli/index.html#powdr-verification-key","cli/index.html#powdr-export-verifier","cli/index.html#powdr-setup","cli/index.html#powdr-reformat","cli/index.html#powdr-optimize-pil","cli/index.html#powdr-test","asm/index.html#asm","asm/modules.html#modules","asm/declarations.html#declarations","asm/machines.html#machines","asm/machines.html#virtual-machines","asm/machines.html#constrained-machines","asm/machines.html#submachines","asm/registers.html#registers","asm/registers.html#program-counter","asm/registers.html#write-registers","asm/registers.html#assignment-registers","asm/registers.html#read-only-registers","asm/functions.html#functions","asm/functions.html#function-inputs-and-outputs","asm/functions.html#statements","asm/functions.html#labels","asm/functions.html#assignments","asm/functions.html#instructions","asm/expressions.html#expressions","asm/expressions.html#field-element-literals","asm/expressions.html#registers-and-columns","asm/expressions.html#instructions","asm/instructions.html#instructions","asm/instructions.html#local-instructions","asm/instructions.html#instructions-with-links","asm/operations.html#operations","asm/links.html#links","pil/index.html#pil","pil/declarations.html#declarations","pil/expressions.html#expressions","pil/expressions.html#generic-expressions","pil/expressions.html#lambda-functions","pil/expressions.html#statement-blocks","pil/expressions.html#match-expressions","pil/expressions.html#if-expressions","pil/expressions.html#algebraic-expressions","pil/expressions.html#constr-and-query-functions","pil/patterns.html#patterns","pil/patterns.html#ir-refutability","pil/types.html#types","pil/types.html#example","pil/types.html#declaring-and-referencing-columns","pil/types.html#built-in-traits","pil/types.html#list-of-types","pil/types.html#bool","pil/types.html#integer","pil/types.html#field-element","pil/types.html#string","pil/types.html#tuple","pil/types.html#array","pil/types.html#function","pil/types.html#expression","pil/types.html#bottom-type","pil/types.html#enum-types","pil/fixed_columns.html#fixed-columns","pil/fixed_columns.html#values-with-repetitions","pil/fixed_columns.html#mappings","pil/builtins.html#built-ins","pil/builtins.html#functions","pil/builtins.html#array-length","pil/builtins.html#panic","pil/builtins.html#conversions","pil/builtins.html#printing","pil/builtins.html#modulus","pil/builtins.html#evaluate","pil/builtins.html#challenges","pil/builtins.html#degree","pil/builtins.html#hints","pil/builtins.html#types","pil/builtins.html#constr","pil/builtins.html#operators","frontends/index.html#frontends","frontends/riscv.html#riscv","frontends/riscv.html#how-to-run-the-rust-riscv-example","frontends/zk-continuations.html#riscv-and-zk-continuations","frontends/valida.html#valida","frontends/evm.html#evm","backends/index.html#backends","backends/plonky3.html#plonky3","backends/halo2.html#halo2","backends/estark.html#estark","architecture/index.html#architecture","architecture/compiler.html#compiler","architecture/compiler.html#virtual-machine-reduction","architecture/compiler.html#block-enforcement","architecture/compiler.html#air-generation","architecture/linker.html#linker"],"index":{"documentStore":{"docInfo":{"0":{"body":27,"breadcrumbs":2,"title":1},"1":{"body":15,"breadcrumbs":2,"title":1},"10":{"body":52,"breadcrumbs":2,"title":1},"100":{"body":15,"breadcrumbs":4,"title":1},"101":{"body":54,"breadcrumbs":4,"title":1},"102":{"body":95,"breadcrumbs":4,"title":1},"103":{"body":13,"breadcrumbs":2,"title":1},"104":{"body":5,"breadcrumbs":3,"title":1},"105":{"body":138,"breadcrumbs":6,"title":4},"106":{"body":421,"breadcrumbs":7,"title":3},"107":{"body":11,"breadcrumbs":3,"title":1},"108":{"body":10,"breadcrumbs":3,"title":1},"109":{"body":13,"breadcrumbs":2,"title":1},"11":{"body":76,"breadcrumbs":3,"title":2},"110":{"body":9,"breadcrumbs":3,"title":1},"111":{"body":7,"breadcrumbs":3,"title":1},"112":{"body":12,"breadcrumbs":3,"title":1},"113":{"body":22,"breadcrumbs":2,"title":1},"114":{"body":12,"breadcrumbs":3,"title":1},"115":{"body":28,"breadcrumbs":5,"title":3},"116":{"body":13,"breadcrumbs":4,"title":2},"117":{"body":37,"breadcrumbs":4,"title":2},"118":{"body":66,"breadcrumbs":3,"title":1},"12":{"body":35,"breadcrumbs":4,"title":3},"13":{"body":64,"breadcrumbs":4,"title":2},"14":{"body":84,"breadcrumbs":7,"title":4},"15":{"body":286,"breadcrumbs":5,"title":2},"16":{"body":173,"breadcrumbs":8,"title":5},"17":{"body":165,"breadcrumbs":7,"title":3},"18":{"body":407,"breadcrumbs":11,"title":5},"19":{"body":39,"breadcrumbs":2,"title":1},"2":{"body":7,"breadcrumbs":2,"title":1},"20":{"body":184,"breadcrumbs":4,"title":2},"21":{"body":32,"breadcrumbs":5,"title":4},"22":{"body":87,"breadcrumbs":2,"title":1},"23":{"body":220,"breadcrumbs":3,"title":2},"24":{"body":106,"breadcrumbs":3,"title":2},"25":{"body":101,"breadcrumbs":3,"title":2},"26":{"body":93,"breadcrumbs":4,"title":3},"27":{"body":91,"breadcrumbs":4,"title":3},"28":{"body":56,"breadcrumbs":3,"title":2},"29":{"body":13,"breadcrumbs":3,"title":2},"3":{"body":24,"breadcrumbs":2,"title":1},"30":{"body":30,"breadcrumbs":4,"title":3},"31":{"body":42,"breadcrumbs":3,"title":2},"32":{"body":16,"breadcrumbs":2,"title":1},"33":{"body":168,"breadcrumbs":3,"title":1},"34":{"body":161,"breadcrumbs":3,"title":1},"35":{"body":11,"breadcrumbs":3,"title":1},"36":{"body":76,"breadcrumbs":4,"title":2},"37":{"body":145,"breadcrumbs":4,"title":2},"38":{"body":46,"breadcrumbs":3,"title":1},"39":{"body":8,"breadcrumbs":3,"title":1},"4":{"body":12,"breadcrumbs":2,"title":1},"40":{"body":40,"breadcrumbs":4,"title":2},"41":{"body":29,"breadcrumbs":4,"title":2},"42":{"body":59,"breadcrumbs":4,"title":2},"43":{"body":26,"breadcrumbs":4,"title":2},"44":{"body":157,"breadcrumbs":3,"title":1},"45":{"body":4,"breadcrumbs":5,"title":3},"46":{"body":0,"breadcrumbs":3,"title":1},"47":{"body":7,"breadcrumbs":3,"title":1},"48":{"body":45,"breadcrumbs":3,"title":1},"49":{"body":7,"breadcrumbs":3,"title":1},"5":{"body":185,"breadcrumbs":4,"title":2},"50":{"body":0,"breadcrumbs":3,"title":1},"51":{"body":10,"breadcrumbs":5,"title":3},"52":{"body":10,"breadcrumbs":4,"title":2},"53":{"body":7,"breadcrumbs":3,"title":1},"54":{"body":35,"breadcrumbs":3,"title":1},"55":{"body":24,"breadcrumbs":4,"title":2},"56":{"body":408,"breadcrumbs":4,"title":2},"57":{"body":142,"breadcrumbs":3,"title":1},"58":{"body":191,"breadcrumbs":3,"title":1},"59":{"body":21,"breadcrumbs":2,"title":1},"6":{"body":45,"breadcrumbs":2,"title":1},"60":{"body":249,"breadcrumbs":3,"title":1},"61":{"body":60,"breadcrumbs":3,"title":1},"62":{"body":96,"breadcrumbs":4,"title":2},"63":{"body":46,"breadcrumbs":4,"title":2},"64":{"body":135,"breadcrumbs":4,"title":2},"65":{"body":62,"breadcrumbs":4,"title":2},"66":{"body":24,"breadcrumbs":3,"title":1},"67":{"body":211,"breadcrumbs":4,"title":2},"68":{"body":144,"breadcrumbs":5,"title":3},"69":{"body":202,"breadcrumbs":3,"title":1},"7":{"body":15,"breadcrumbs":2,"title":1},"70":{"body":85,"breadcrumbs":4,"title":2},"71":{"body":111,"breadcrumbs":3,"title":1},"72":{"body":44,"breadcrumbs":3,"title":1},"73":{"body":176,"breadcrumbs":5,"title":3},"74":{"body":104,"breadcrumbs":4,"title":2},"75":{"body":0,"breadcrumbs":4,"title":2},"76":{"body":28,"breadcrumbs":3,"title":1},"77":{"body":150,"breadcrumbs":3,"title":1},"78":{"body":121,"breadcrumbs":4,"title":2},"79":{"body":20,"breadcrumbs":3,"title":1},"8":{"body":7,"breadcrumbs":2,"title":1},"80":{"body":54,"breadcrumbs":3,"title":1},"81":{"body":91,"breadcrumbs":3,"title":1},"82":{"body":90,"breadcrumbs":3,"title":1},"83":{"body":136,"breadcrumbs":3,"title":1},"84":{"body":24,"breadcrumbs":4,"title":2},"85":{"body":66,"breadcrumbs":4,"title":2},"86":{"body":30,"breadcrumbs":5,"title":2},"87":{"body":62,"breadcrumbs":5,"title":2},"88":{"body":22,"breadcrumbs":4,"title":1},"89":{"body":0,"breadcrumbs":5,"title":2},"9":{"body":33,"breadcrumbs":2,"title":1},"90":{"body":13,"breadcrumbs":4,"title":1},"91":{"body":17,"breadcrumbs":5,"title":2},"92":{"body":43,"breadcrumbs":4,"title":1},"93":{"body":76,"breadcrumbs":4,"title":1},"94":{"body":32,"breadcrumbs":4,"title":1},"95":{"body":19,"breadcrumbs":4,"title":1},"96":{"body":60,"breadcrumbs":4,"title":1},"97":{"body":26,"breadcrumbs":4,"title":1},"98":{"body":25,"breadcrumbs":4,"title":1},"99":{"body":38,"breadcrumbs":4,"title":1}},"docs":{"0":{"body":"powdrVM is a versatile zkVM built on the powdr stack, supporting std Rust, multiple proof systems, and zk-continuations for unbounded execution. Designed for flexibility, powdrVM enables efficient proof generation for complex applications with minimal setup.","breadcrumbs":"Introduction » Introduction","id":"0","title":"Introduction"},"1":{"body":"powdrVM is free and open source. You can find the source code on GitHub . Issues and feature requests can be posted on the GitHub issue tracker .","breadcrumbs":"Introduction » Contributing","id":"1","title":"Contributing"},"10":{"body":"You will need the Rust compiler and Cargo, the Rust package manager. The easiest way to install both is with rustup.rs . On Windows, you will also need a recent version of Visual Studio , installed with the \"Desktop Development With C++\" Workloads option. If you want to enable the estark-polygon feature, you also need the following runtime dependencies: gcc nlohmann-json3-dev You will also need the following build time dependencies: make pkg-config libpqxx-dev (Ubuntu) | libpqxx (Arch Linux) nasm","breadcrumbs":"Installation » Prerequisites","id":"10","title":"Prerequisites"},"100":{"body":"There are some types that are not proper built-in types (in the sense that they are not treated specially in the type system), but they are defined in the standard library and are referenced by built-in functions.","breadcrumbs":"pil » Built-in Functions » Types","id":"100","title":"Types"},"101":{"body":"The type Constr or more specifically, std::prelude::Constr is the type of a constraint. Expressions at statement level are required to evaluate either to Constr or Constr[]. It is defined as follows: enum Constr { /// A polynomial identity. Identity(expr, expr), /// A lookup constraint with selectors. Lookup((Option, Option), (expr, expr)[]), /// A permutation constraint with selectors. Permutation((Option, Option), (expr, expr)[]), /// A connection constraint (copy constraint). Connection((expr, expr)[])\n} The operator = can be applied on two expr values and results in a Constr::Identity. The type implements no traits and allows no operators.","breadcrumbs":"pil » Built-in Functions » Constr","id":"101","title":"Constr"},"102":{"body":"The following operators are supported by powdr-pil with their respective signatures. let +: T, T -> T\nlet -: T, T -> T\nlet -: T -> T let *: T, T -> T\nlet /: int, int -> int\nlet %: int, int -> int\nlet **: T, int -> T let <<: int, int -> int\nlet >>: int, int -> int\nlet &: int, int -> int\nlet |: int, int -> int\nlet ^: int, int -> int let <: T, T -> bool\nlet <=: T, T -> bool\nlet >: T, T -> bool\nlet >=: T, T -> bool let ==: T, T -> bool\nlet !=: T, T -> bool let =: expr, expr -> Constr\nlet ': expr -> expr let ||: bool, bool -> bool\nlet &&: bool, bool -> bool\nlet !: bool -> bool","breadcrumbs":"pil » Built-in Functions » Operators","id":"102","title":"Operators"},"103":{"body":"While any frontend VM can be implemented in powdr-asm, powdr comes with several frontends for popular instruction set architectures.","breadcrumbs":"Frontends » Frontends","id":"103","title":"Frontends"},"104":{"body":"A RISCV frontend for powdr is already available.","breadcrumbs":"Frontends » RISCV » RISCV","id":"104","title":"RISCV"},"105":{"body":"# Install the riscv target for the rust compiler\nrustup target add riscv32imac-unknown-none-elf\n# Run the powdr-rs compiler. It will generate files in ./output/\npowdr-rs compile riscv/tests/riscv_data/sum -o output\n# Run powdr to compile powdr-asm to powdr-PIL and generate the witness\n# -i specifies the prover witness input (see below)\npowdr pil output/sum.asm -o output -f -i 10,2,4,6 The example Rust code verifies that a supplied list of integers sums up to a specified value. #![no_main]\n#![no_std] extern crate alloc;\nuse alloc::vec::Vec; use powdr_riscv_runtime::io::read_u32; #[no_mangle]\npub fn main() { // This is the sum claimed by the prover. let proposed_sum = read_u32(0); // The number of integers we want to sum. let len = read_u32(1) as usize; // Read the numbers from the prover and store them // in a vector. let data: Vec<_> = (2..(len + 2)).map(|idx| read_u32(idx as u32)).collect(); // Compute the sum. let sum: u32 = data.iter().sum(); // Check that our sum matches the prover's. assert_eq!(sum, proposed_sum);\n} The function read_u32 reads a number from the list supplied with -i. This is just a first mechanism to provide access to the outside world. The plan is to be able to call arbitrary user-defined ffi functions that will translate to prover queries, and can then ask for e.g. the value of a storage slot at a certain address or the root hash of a Merkle tree.","breadcrumbs":"Frontends » RISCV » How to run the Rust-RISCV example","id":"105","title":"How to run the Rust-RISCV example"},"106":{"body":"ZK-continuations can be used to make proofs for unbounded execution traces of Rust programs, where the trace is split into many different chunks. A proof is computed for each chunk, and all proofs can be combined with recursion/aggregation until a single proof remains. For the details of how memory is handled in the ZK-continuations case please see this . powdr-rs has experimental support to ZK-continuations, which can be used as follows. Let's use as example test many chunks from the riscv crate: #![no_main]\n#![no_std] extern crate alloc;\nextern crate powdr_riscv_runtime;\nuse alloc::vec::Vec; #[no_mangle]\npub fn main() { let mut foo = Vec::new(); foo.push(1); for _ in 0..100 { foo.push(foo.iter().sum()); } // Compute some fibonacci numbers // -> Does not access memory but also does not get optimized out... let mut a = 1; let mut b = 1; for _ in 0..150000 { let tmp = a + b; a = b; b = tmp; } // Don't optimize me away :/ assert!(a > 0);\n} First we need to compile the Rust code to powdr-asm: powdr-rs compile riscv/tests/riscv_data/many_chunks Now we can use powdr's RISCV executor to estimate how many cycles are needed: powdr-rs execute many_chunks.asm ...\nExecution trace length: 750329 By default, powdr-RISCV uses chunks of length 2^18. That means we will need at least 3 chunks. For the continuations case, the compiled assembly code looks different because of the external memory commitments, so we need to recompile using the --continuations flag: powdr-rs compile riscv/tests/riscv_data/many_chunks --continuations We can now execute the program with continuations enabled: powdr-rs -- execute many_chunks.asm --continuations The output now is longer: Running chunk 0...\nBuilding bootloader inputs for chunk 0...\n26 unique memory accesses over 2 accessed pages: {31, 32}\nEstimating the shutdown routine to use 1362 rows.\nBootloader inputs length: 1285\nSimulating chunk execution...\nInitial memory root hash: 44cd91c12033ad4c6a6b19793b73f1a66d99a0e0bf63494c12ceb1f451ec9452\nFinal memory root hash: e6a6fd63d864c734d6a4df4988f733738790262af9c7b014a1c036679baf1125\nChunk trace length: 260782\nValidating chunk...\nBootloader used 3134 rows. => 257648 / 262144 (98%) of rows are used for the actual computation!\nProved 257647 rows. Running chunk 1...\nBuilding bootloader inputs for chunk 1...\n0 unique memory accesses over 0 accessed pages: {}\nEstimating the shutdown routine to use 42 rows.\nBootloader inputs length: 83\nSimulating chunk execution...\nInitial memory root hash: e6a6fd63d864c734d6a4df4988f733738790262af9c7b014a1c036679baf1125\nFinal memory root hash: e6a6fd63d864c734d6a4df4988f733738790262af9c7b014a1c036679baf1125\nChunk trace length: 262102\nValidating chunk...\nBootloader used 62 rows. => 262040 / 262144 (99%) of rows are used for the actual computation!\nProved 262039 rows. Running chunk 2...\nBuilding bootloader inputs for chunk 2...\n2 unique memory accesses over 1 accessed pages: {31}\nEstimating the shutdown routine to use 702 rows.\nBootloader inputs length: 684\nSimulating chunk execution...\nInitial memory root hash: e6a6fd63d864c734d6a4df4988f733738790262af9c7b014a1c036679baf1125\nFinal memory root hash: e6a6fd63d864c734d6a4df4988f733738790262af9c7b014a1c036679baf1125\nChunk trace length: 232057\nValidating chunk...\nBootloader used 1610 rows. => 259832 / 262144 (99%) of rows are used for the actual computation!\nDone! The step above is informational, but for the proofs we also need the full witness: powdr-rs execute many_chunks.asm --witness The witnesses are written in ./chunk_0/commits.bin, ./chunk_1/commits.bin and ./chunk_2/commits.bin. Now that we have the witnesses for all chunks we can use powdr (instead of powdr-rs) to compute proofs for each chunk: powdr prove many_chunks.asm -d chunk_0 --backend estark-dump\npowdr prove many_chunks.asm -d chunk_1 --backend estark-dump\npowdr prove many_chunks.asm -d chunk_2 --backend estark-dump These proofs are mock proofs for the sake of the example, but any backend should work here. After generating real proofs, each specific proof system can be used for the recursion/aggregation parts. A follow-up tutorial on that is coming soon.","breadcrumbs":"Frontends » RISCV » zk-Continuations » RISCV and ZK-Continuations","id":"106","title":"RISCV and ZK-Continuations"},"107":{"body":"A Valida front end for powdr is under development. If you are interested, feel free to reach out !","breadcrumbs":"Frontends » Valida » Valida","id":"107","title":"Valida"},"108":{"body":"An EVM frontend for powdr is under development. If you are interested, feel free to reach out !","breadcrumbs":"Frontends » EVM » EVM","id":"108","title":"EVM"},"109":{"body":"powdr aims to have full flexibility when it comes to generating proofs and comes with a few built-in backends to get started with zkVMs.","breadcrumbs":"Backends » Backends","id":"109","title":"Backends"},"11":{"body":"Using a single Cargo command, enabling the Halo2 and Plonky3 backends: cargo install --git https://github.com/powdr-labs/powdr --features halo2,plonky3 powdr-cli With SIMD support for the provers that support it: RUSTFLAGS='-C target-cpu=native' cargo install --git https://github.com/powdr-labs/powdr --features halo2,plonky3,plonky3-simd powdr-cli Or, by manually building from a local copy of the powdr repository : # clone the repository\ngit clone https://github.com/powdr-labs/powdr.git\ncd powdr\n# install powdr-cli\ncargo install --features halo2,plonky3 --path ./cli\n# install powdr-cli with SIMD support (only for the crates that support it)\nRUSTFLAGS='-C target-cpu=native' cargo install --features halo2,plonky3,plonky3-simd --path ./cli","breadcrumbs":"Installation » Building powdr","id":"11","title":"Building powdr"},"110":{"body":"powdr partially supports plonky3 with the Goldilocks, BabyBear, KoalaBear, and Mersenne31 fields.","breadcrumbs":"Backends » plonky3 » Plonky3","id":"110","title":"Plonky3"},"111":{"body":"powdr supports the PSE fork of halo2 with the bn254 field.","breadcrumbs":"Backends » Halo2 » Halo2","id":"111","title":"Halo2"},"112":{"body":"powdr supports the eSTARK proof system with the Goldilocks field, implemented by the starky library from eigen-zkvm .","breadcrumbs":"Backends » eSTARK » eSTARK","id":"112","title":"eSTARK"},"113":{"body":"powdr applies a number of steps in order to reduce a powdr-asm program into PIL. We provide a high level overview of these steps. ┌────────────┐ ┌──────────┐ │ │ │ │ powdr-asm │ │ AIR graph │ │ PIL\n───────────►│ compiler ├───────────┤ linker ├──────► │ │ │ │ │ │ │ │ └────────────┘ └──────────┘","breadcrumbs":"Architecture » Architecture","id":"113","title":"Architecture"},"114":{"body":"In this section, we explain how the powdr compiler reduces a program made of virtual and constrained machines to a set of AIRs.","breadcrumbs":"Architecture » Compiler » Compiler","id":"114","title":"Compiler"},"115":{"body":"The first step is to reduce virtual machines to constrained machines. This step is run on all machines and does not affect constrained machines. As a result of this step, for each machine: Local instructions are reduced to constraints External instructions are reduced to links Functions are reduced to operations","breadcrumbs":"Architecture » Compiler » Virtual machine reduction","id":"115","title":"Virtual machine reduction"},"116":{"body":"Block enforcement applies on constrained machines. It makes sure that the operation_id is constant within each machine block.","breadcrumbs":"Architecture » Compiler » Block enforcement","id":"116","title":"Block enforcement"},"117":{"body":"At this point, all machines contain only: an optional degree range constraints links to other machines operations Let's define AIR as a data structure with only these elements. Starting from the main machine's type, we create a tree of AIR objects by traversing its submachines, recursively instantiating each machine as an AIR. Let's define the AIR tree as the resulting tree.","breadcrumbs":"Architecture » Compiler » AIR generation","id":"117","title":"AIR generation"},"118":{"body":"A linker is used to turn an AIR tree into a single PIL file. The linking process operates in the following way: Create an empty PIL file Start from the main AIR. Let main_degree_range be its degree. For each AIR Create a new namespace in the PIL file 2a. If degrees-mode is vadcop, set the namespace degree to that of the AIR 2b. If degrees-mode is monolithic, set the namespace degree to main_degree_range Add the constraints to the namespace Turn the links into lookups and permutations and add them to the namespace The result is a monolithic AIR where: each machine instance is a namespace each namespace defines its own degree range","breadcrumbs":"Architecture » Linker » Linker","id":"118","title":"Linker"},"12":{"body":"Using a single Cargo command: cargo install --git https://github.com/powdr-labs/powdr powdr-rs-cli Or, by manually building from a local copy of the powdr repository : # clone the repository\ngit clone https://github.com/powdr-labs/powdr.git\ncd powdr\n# install powdr-rs-cli\ncargo install --path ./cli-rs","breadcrumbs":"Installation » Building powdr-rs","id":"12","title":"Building powdr-rs"},"13":{"body":"Let's write a minimal VM and generate proofs! machine HelloWorld with degree: 8 { reg pc[@pc]; reg X[<=]; reg Y[<=]; reg A; instr incr X -> Y { Y = X + 1 } instr decr X -> Y { Y = X - 1 } instr assert_zero X { X = 0 } function main { // assign the first prover input to A A <=X= ${ std::prelude::Query::Input(0, 1) }; // increment A A <== incr(A); // decrement A A <== decr(A); // assert that A is zero assert_zero A; return; }\n} Let's go through different possible usages of powdr, starting with using the powdr CLI.","breadcrumbs":"Hello World » Hello World","id":"13","title":"Hello World"},"14":{"body":"Let's generate a proof of execution for the valid prover input 0 (since 0 + 1 - 1 == 0) powdr pil test_data/asm/book/hello_world.asm --field bn254 --inputs 1 --prove-with halo2 We observe that several artifacts are created in the current directory: hello_world.pil: the compiled PIL file. hello_world_opt.pil: the optimized PIL file. hello_world_constants.bin: the computed fixed columns which only have to be computed once per PIL file. hello_world_commits.bin: the computed witness which needs to be computed for each proof. hello_world_proof.bin: the ZK proof! Note that the output directory can be specified with option -o|--output, and . is used by default. Now let's try for the invalid input 1: powdr pil test_data/asm/book/hello_world.asm --field bn254 --inputs 2 --prove-with halo2 In this case witness generation fails, and no proof is created.","breadcrumbs":"Hello World » in the CLI » Hello World using the CLI","id":"14","title":"Hello World using the CLI"},"15":{"body":"The example above omits some important steps in proof generation: Setup and Verification key generation. Some proof systems such as Halo2 , require a Setup to be performed before the proof. Such Setup can be specific to the program or universal, where its artifact is a binary usually called parameters or params. STARKs do not require a Setup. Another step required before the proof is computed is key generation. A proving key and a verification key are generated taking into account the constraints and potentially Setup parameters. The proving key is used by the prover to generate the proof, and the verification key is used by the verifier to verify such a proof. A single verification key can be used to verify any number of different proofs for a given program. Therefore, when computing a proof, it is important that the Setup parameters and the verification key are available as artifacts. Below we reproduce the same proof as in the example above, keeping the artifacts needed for verification: First we run the Setup, where the number given must match the degree of our source file (degree 8). The command below generates file params.bin. powdr setup 8 --backend halo2 --field bn254 We can now compute the verification key, output in vkey.bin: powdr verification-key test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --params \"params.bin\" The command above can read previously generated constants from the directory specified via -d|--dir, where . is used by default. If the constants are not present it computes them before generating the verification key. The next command compiles and optimizes the given source, generating the file hello_world_opt.pil. It also computes both the fixed data and the witness needed for the proof, stored respectively in hello_world_constants.bin and hello_world_commits.bin. powdr pil test_data/asm/book/hello_world.asm --field bn254 --force --inputs 0 We can now generate the proof: powdr prove test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --params \"params.bin\" --vkey \"vkey.bin\" The proof can be verified by anyone via: powdr verify test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --vkey \"vkey.bin\" --params \"params.bin\" --proof \"hello_world_proof.bin\" Note that CLI proof verification works analogously for eSTARK, without the setup step and using the Goldilocks field instead of Bn254. Another aspect that was omitted in this example is the fact that this proof uses a Poseidon transcript and cannot be verified in a cheap way on Ethereum, even though we can verify it efficiently via powdr. There are two ways to enable verification on Ethereum: Use a different transcript when generating this proof. See section Hello World on Ethereum for the same example targeting EVM verification. Use proof aggregation to compress the proof using a circuit that can be verified on Ethereum. See section Hello World on Ethereum via proof aggregation to learn how to do that.","breadcrumbs":"Hello World » in the CLI » Setup & Verification","id":"15","title":"Setup & Verification"},"16":{"body":"Besides the CLI, powdr can also be used as a Rust library. The powdr crate exposes internal crates and data structures needed to compile code, generate witnesses, and compute proofs. Add powdr to your crate's dependencies: [dependencies]\npowdr = { git = \"https://github.com/powdr-labs/powdr\", branch = \"main\" } The following Rust code has the same workflow as our previous \"Hello World\" example. The full project can be found here , and as an example in the powdr crate. To run the example in the powdr repository , run: cargo run --example powdr_crate_usage You can also enable logs to know what is happening internally: RUST_LOG=info cargo run --example powdr_crate_usage use powdr_test::halo2_pipeline; fn main() { env_logger::init(); halo2_pipeline( \"test_data/asm/book/hello_world.asm\", vec![0.into()], vec![], 8, );\n} use powdr::backend::BackendType;\nuse powdr::number::buffered_write_file;\nuse powdr::Bn254Field;\nuse powdr::Pipeline; use std::path::Path; pub fn halo2_pipeline( pil: &str, prover_inputs: Vec, publics: Vec, setup_size: u64,\n) { // Straightforward case let _proof = Pipeline::::default() .from_file(pil.into()) .with_prover_inputs(prover_inputs.clone()) .with_backend(BackendType::Halo2, None) .compute_proof() .unwrap(); // Step-by-step case // First we create the universal setup of size 8 buffered_write_file(Path::new(\"params.bin\"), |writer| { BackendType::Halo2 .factory::() .generate_setup(setup_size, writer) .unwrap() }) .unwrap(); // Configure a pipeline let mut pipeline = Pipeline::::default() .from_file(pil.into()) .with_prover_inputs(prover_inputs) .with_backend(BackendType::Halo2, None) .with_setup_file(Some(\"params.bin\".into())); // Create the verification key buffered_write_file(Path::new(\"vkey.bin\"), |w| { pipeline.export_verification_key(w).unwrap() }) .unwrap(); // Add the verification key to a fresh pipeline and create a proof let mut pipeline_fresh = pipeline.clone().with_vkey_file(Some(\"vkey.bin\".into())); let proof = pipeline_fresh.compute_proof().unwrap(); // Create yet another fresh pipeline only for proof verification let mut pipeline = pipeline .with_backend(BackendType::Halo2, None) .with_setup_file(Some(\"params.bin\".into())) .with_vkey_file(Some(\"vkey.bin\".into())); // Verify a proof created by a different Pipeline pipeline.verify(proof, &[publics]).unwrap();\n}","breadcrumbs":"Hello World » as a library » Hello World using powdr as a library","id":"16","title":"Hello World using powdr as a library"},"17":{"body":"This example is a variation of the previous Hello World , targeting verification on Ethereum. In this example we will cover how to generate proofs directly using a Keccak transcript instead of the Poseidon transcript of the previous example, which will enable us to verify proofs onchain. There are almost no differences from the CLI perspective. Since the following command creates a proof, a Solidity verifier, and verifies the proof on the EVM, we need to have solc available in the system. One easy way to install it is by using svm . powdr pil test_data/asm/book/hello_world.asm --field bn254 --inputs 0 --prove-with halo2 --backend-options \"snark_single\" -f --params params.bin The extra parameter --backend-options snark_single tells powdr to produce a single SNARK that uses Keccak. The option -f forces overwriting the compiled files that have been generated before, which is useful if you are running the examples in the same directory. When the proof is generated, it is verified on a simulated EVM transaction as well! Verifying SNARK in the EVM... We can observe again that a proof was created at hello_world_proof.bin. Now we can generate a Solidity verifier, using the same setup (params) as the previous example: powdr export-verifier test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --backend-options \"snark_single\" --params params.bin A Solidity file verifier.sol is generated. You can verify the same proof that we just generated by passing it to the contract together with the public inputs (which we have not used so far). Note that the more complex your VM is, the larger the verifier contract will be. In some cases, it might exceed Ethereum's contract size limit. You can mitigate that by using proof recursion on proofs that use Poseidon transcripts. See the next section for details .","breadcrumbs":"Hello World » verified on Ethereum » Hello World on Ethereum","id":"17","title":"Hello World on Ethereum"},"18":{"body":"As noted in the previous section, complex VMs can lead to large Solidity verifiers that exceed the contract size limit on Ethereum. One solution to that problem is to create proofs using the Poseidon transcript, as we did in the first example , and then use proof recursion to create a proof that we know we will be able to verify on Ethereum. A recursive SNARK works by generating a proof for a circuit that verifies another proof. The circuit we are using here to prove our initial proof recursively is PSE's snark-verifier . This circuit is large enough to be able to prove complex programs that were proven initial with the Poseidon transcript, like our first example. Because of that our aggregation setup params and verification key are going to be larger than before and take longer to compute. The good news are that (i) we can use a pre-computed setup from a previous ceremony, and (ii) the verification key only has to be computed once per program. First, we need a setup of \"size\" 2^22. This is the maximum execution trace length of the recursion circuit. You can generate it using the command line below, or download a pre-computed one here . This will take a couple minutes if you decide to compute it yourself: powdr setup 4194304 --backend halo2 --field bn254 We can re-use the new large params.bin for both initial and recursive proofs. Let's start by re-computing our Poseidon proof like in the first example , but using our new setup file: powdr pil test_data/asm/book/hello_world.asm --field bn254 --inputs 0 --prove-with halo2 --backend-options \"poseidon\" -f --params params.bin This generates the initial proof hello_world_proof.bin. We'll also need a verification key: powdr verification-key test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --backend-options \"poseidon\" --params params.bin Let's verify the proof with our fresh verification key to make sure we're on the right track: powdr verify test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --backend-options \"poseidon\" --params params.bin --vkey vkey.bin --proof hello_world_proof.bin In order to avoid confusion between the application's artifacts that we've just generated and the recursion one we're going to generate later, let's rename them: mv vkey.bin vkey_app.bin\nmv hello_world_proof.bin hello_world_proof_app.bin We can now generate a verification key for the Halo2 circuit that verifies our proofs recursively. This might take up to a minute. powdr verification-key test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --backend-options \"snark_aggr\" --params params.bin --vkey-app vkey_app.bin Note that this verification key can only be used to verify recursive proofs that verify other proofs using the application's key vkey_app.bin. We can now generate the recursive proof (this typically takes a few minutes and uses around 28gb RAM): powdr prove test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --backend-options \"snark_aggr\" --params params.bin --vkey vkey.bin --vkey-app vkey_app.bin --proof hello_world_proof_app.bin We have a proof! Note that it contains two fields, proof and publics. The proof object contains the binary encoding of the proof points, and the publics object contains the public accumulator limbs that we need in order to verify the recursive proof. We can now verify the proof, using the publics object as input (your numbers will be different): powdr verify test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --backend-options \"snark_aggr\" --params params.bin --vkey vkey.bin --proof hello_world_proof_aggr.bin --publics \"269487626280642378794,9378970522278219882,62304027188881225691,811176493438944,234778270138968319485,3212529982775999134,171155758373806079356,207910400337448,188563849779606300850,155626297629081952942,194348356185923309508,433061951018270,34598221006207900280,283775241405787955338,79508596887913496910,354189825580534\" Since the goal of the recursive proof was to be able to verify it on Ethereum, let's do that! powdr export-verifier test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --backend-options \"snark_aggr\" --params params.bin --vkey vkey.bin A Solidity verifier is created in verifier.sol. The contract expects an array of the accumulators' limbs followed by a tightly packed proof, where each accumulator limb uses 32 bytes, and there is no function signature. Note that this verifier can be used to verify any recursive proof that verifies exactly one Poseidon proof of the given circuit.","breadcrumbs":"Hello World » verified on Ethereum with proof aggregation » Hello World on Ethereum with proof aggregation","id":"18","title":"Hello World on Ethereum with proof aggregation"},"19":{"body":"Besides the Hello World examples, you are encouraged to check out these more complex and real-world use cases: Ethereum state tests via powdr-RISCV + revm Brainfuck VM in 3 different implementations (powdr-asm interpreter, powdr-asm ISA, Rust interpreter + powdr-RISCV) Machine Learning zkVM Compiler","breadcrumbs":"Examples » Examples","id":"19","title":"Examples"},"2":{"body":"The powdr source and documentation are released under the MIT License .","breadcrumbs":"Introduction » License","id":"2","title":"License"},"20":{"body":"Public values are a small but important part of verifying ZK proofs. Often, the verifier is interested in inputs and/or outputs to a public function. In the toy example below, the prover can show that they know the square root of a public value that is published with the proof. You can also run this example directly in the powdr repository : cargo run --example sqrt_with_public You can also enable logs to know what is happening internally: RUST_LOG=info cargo run --example sqrt_with_public machine Square with degree: 8 { reg pc[@pc]; reg X[<=]; reg Y[<=]; reg A; // Expose the register value of A in the last time step public N = A(7); instr square X -> Y { Y = X * X } function main { A <=X= ${ std::prelude::Query::Input(0, 1) }; A <== square(A); }\n} This example uses a small VM with jump and a square instructions. The program reads the private input from the prover, squares it, and enters an infinite loop to ensure that all the remaining rows are filled with the result of A^2. Since the length of our execution trace is fixed and equals 8, we can tag the 8-th row of A (A[7]) as the publicly exposed number. Let's run all steps needed to generate and verify a proof that 32 = 9: Setup step: powdr setup 8 --backend halo2 --field bn254 Witness generation: powdr pil test_data/asm/sqrt_with_public.asm --field bn254 -i 3 Verification Key generation: powdr verification-key test_data/asm/sqrt_with_public.asm --field bn254 --backend halo2 --params params.bin Proof generation: powdr prove test_data/asm/sqrt_with_public.asm --field bn254 --backend halo2 --params params.bin --vkey vkey.bin Proof verification: powdr verify test_data/asm/sqrt_with_public.asm --field bn254 --backend halo2 --params params.bin --vkey vkey.bin --proof sqrt_with_public_proof.bin --publics 9","breadcrumbs":"Using publics » Using publics","id":"20","title":"Using publics"},"21":{"body":"This document contains the help content for the powdr command-line program. Command Overview: powdr↴ powdr pil↴ powdr prove↴ powdr verify↴ powdr verification-key↴ powdr export-verifier↴ powdr setup↴ powdr reformat↴ powdr optimize-pil↴ powdr test↴","breadcrumbs":"CLI » Command-Line Help for powdr","id":"21","title":"Command-Line Help for powdr"},"22":{"body":"powdr CLI to compile powdr-asm and powdr-pil programs Usage: powdr [OPTIONS] [COMMAND] Subcommands: pil — Runs compilation and witness generation for .pil and .asm files. First converts .asm files to .pil, if needed. Then converts the .pil file to json and generates fixed and witness column data files prove — verify — verification-key — export-verifier — setup — reformat — Parses and prints the PIL file on stdout optimize-pil — Optimizes the PIL file and outputs it on stdout test — Executes all functions starting with test_ in every module called test (or sub-module thereof) starting from the given module Options: --log-level — Set log filter value [ off, error, warn, info, debug, trace ] Default value: INFO","breadcrumbs":"CLI » powdr","id":"22","title":"powdr"},"23":{"body":"Runs compilation and witness generation for .pil and .asm files. First converts .asm files to .pil, if needed. Then converts the .pil file to json and generates fixed and witness column data files Usage: powdr pil [OPTIONS] Arguments: — Input file Options: --field — The field to use Default value: gl Possible values: bb, kb, m31, gl, bn254 -o, --output-directory — Output directory for the PIL file, json file and fixed and witness column data Default value: . -w, --witness-values — Path to a CSV file containing externally computed witness values -i, --inputs — Comma-separated list of free inputs (numbers) Default value: `` -f, --force — Force overwriting of PIL output file Default value: false --pilo — Whether to output the pilo PIL object Default value: false -p, --prove-with — Generate a proof with a given backend Possible values: mock, halo2, halo2-composite, halo2-mock, halo2-mock-composite, plonky3, plonky3-composite --params — File containing previously generated setup parameters --backend-options — Backend options. Halo2: \"poseidon\", \"snark_single\" or \"snark_aggr\". EStark and PilStarkCLI: \"stark_gl\", \"stark_bn\" or \"snark_bn\" --linker-mode — Linker mode, deciding how to reduce links to constraints Possible values: native, bus --degree-mode — Degree mode, deciding whether to use a single monolithic table or a set of dynamically sized tables --export-witness-csv — Generate a CSV file containing the witness column values Default value: false --export-all-columns-csv — Generate a CSV file containing all fixed and witness column values. Useful for debugging purposes Default value: false --csv-mode — How to render field elements in the csv file Default value: hex Possible values: i, ui, hex","breadcrumbs":"CLI » powdr pil","id":"23","title":"powdr pil"},"24":{"body":"Usage: powdr prove [OPTIONS] --backend Arguments: — Input PIL file Options: -d, --dir — Directory to find the committed and fixed values Default value: . --field — The field to use Default value: gl Possible values: bb, kb, m31, gl, bn254 -b, --backend — Generate a proof with a given backend Possible values: mock, halo2, halo2-composite, halo2-mock, halo2-mock-composite, plonky3, plonky3-composite --backend-options — Backend options. Halo2: \"poseidon\", \"snark_single\" or \"snark_aggr\". EStark and PilStarkCLI: \"stark_gl\", \"stark_bn\" or \"snark_bn\" --proof — File containing previously generated proof for aggregation --vkey — File containing previously generated verification key --vkey-app — File containing the verification key of a proof to be verified recursively --params — File containing previously generated setup parameters","breadcrumbs":"CLI » powdr prove","id":"24","title":"powdr prove"},"25":{"body":"Usage: powdr verify [OPTIONS] --backend --proof --vkey Arguments: — Input PIL file Options: -d, --dir — Directory to find the fixed values Default value: . --field — The field to use Default value: gl Possible values: bb, kb, m31, gl, bn254 -b, --backend — Generate a proof with a given backend Possible values: mock, halo2, halo2-composite, halo2-mock, halo2-mock-composite, plonky3, plonky3-composite --backend-options — Backend options. Halo2: \"poseidon\", \"snark_single\" or \"snark_aggr\". EStark and PilStarkCLI: \"stark_gl\", \"stark_bn\" or \"snark_bn\" --proof — File containing the proof --publics — Comma-separated list of public inputs (numbers) Default value: `` --vkey — File containing the verification key --params — File containing the params","breadcrumbs":"CLI » powdr verify","id":"25","title":"powdr verify"},"26":{"body":"Usage: powdr verification-key [OPTIONS] --backend Arguments: — Input PIL file Options: -d, --dir — Directory to find the fixed values Default value: . --field — The field to use Default value: gl Possible values: bb, kb, m31, gl, bn254 -b, --backend — Chosen backend Possible values: mock, halo2, halo2-composite, halo2-mock, halo2-mock-composite, plonky3, plonky3-composite --backend-options — Backend options. Halo2: \"poseidon\", \"snark_single\" or \"snark_aggr\". EStark and PilStarkCLI: \"stark_gl\", \"stark_bn\" or \"snark_bn\" --params — File containing previously generated setup parameters. This will be needed for SNARK verification keys but not for STARK --vkey-app — File containing the verification key of a proof to be verified recursively","breadcrumbs":"CLI » powdr verification-key","id":"26","title":"powdr verification-key"},"27":{"body":"Usage: powdr export-verifier [OPTIONS] --backend Arguments: — Input PIL file Options: -d, --dir — Directory to find the fixed values Default value: . --field — The field to use Default value: gl Possible values: bb, kb, m31, gl, bn254 -b, --backend — Chosen backend Possible values: mock, halo2, halo2-composite, halo2-mock, halo2-mock-composite, plonky3, plonky3-composite --backend-options — Backend options. Halo2: \"poseidon\", \"snark_single\" or \"snark_aggr\". EStark and PilStarkCLI: \"stark_gl\", \"stark_bn\" or \"snark_bn\" --params — File containing previously generated setup parameters. This will be needed for SNARK verification keys but not for STARK --vkey — File containing previously generated verification key","breadcrumbs":"CLI » powdr export-verifier","id":"27","title":"powdr export-verifier"},"28":{"body":"Usage: powdr setup [OPTIONS] --backend Arguments: — Size of the parameters Options: -d, --dir — Directory to output the generated parameters Default value: . --field — The field to use Default value: gl Possible values: bb, kb, m31, gl, bn254 -b, --backend — Generate a proof with a given backend Possible values: mock, halo2, halo2-composite, halo2-mock, halo2-mock-composite, plonky3, plonky3-composite","breadcrumbs":"CLI » powdr setup","id":"28","title":"powdr setup"},"29":{"body":"Parses and prints the PIL file on stdout Usage: powdr reformat Arguments: — Input file","breadcrumbs":"CLI » powdr reformat","id":"29","title":"powdr reformat"},"3":{"body":"The easiest way to start making ZK proofs with powdrVM is to install cargo-powdr: cargo install cargo-powdr cargo-powdr is used to create and manage powdrVM projects, similar to cargo itself.","breadcrumbs":"Installation » Installation","id":"3","title":"Installation"},"30":{"body":"Optimizes the PIL file and outputs it on stdout Usage: powdr optimize-pil [OPTIONS] Arguments: — Input file Options: --field — The field to use Default value: gl Possible values: bb, kb, m31, gl, bn254","breadcrumbs":"CLI » powdr optimize-pil","id":"30","title":"powdr optimize-pil"},"31":{"body":"Executes all functions starting with test_ in every module called test (or sub-module thereof) starting from the given module Usage: powdr test [OPTIONS] Arguments: — Input file Options: --field — The field to use Default value: gl Possible values: bb, kb, m31, gl, bn254 This document was generated automatically by clap-markdown.","breadcrumbs":"CLI » powdr test","id":"31","title":"powdr test"},"32":{"body":"powdr-asm is the higher level of abstraction in powdr. It allows defining Instruction Set Architectures (ISA) using virtual and constrained machines.","breadcrumbs":"asm » asm","id":"32","title":"asm"},"33":{"body":"powdr exposes a module system to help organise and reuse code. use my_module::Other as LocalOther; // we can define a module at `./submodule.asm`\nmod submodule; // we can define a module at `./submodule_in_folder/mod.asm`\nmod submodule_in_folder; use submodule::Other as SubmoduleOther;\nuse submodule_in_folder::Other as FolderSubmoduleOther; let zero: int = 0; // we can also define modules inline\nmod utils { // Each module has a fresh symbol list. Every external symbol needs to be imported, // even from the parent module. use super::zero; let one = zero + 1;\n} machine Main with degree: 8 { // use a machine from another module by relative path my_module::Other a; // use a machine from another module using a local binding LocalOther b; // use a machine from another module defined in a different file SubmoduleOther c; // use a machine from another module defined in a different directory FolderSubmoduleOther d; reg pc[@pc]; instr nothing link => a.nothing(); instr also_nothing link => b.nothing(); instr still_nothing link => c.nothing(); instr nothing_again link => d.nothing(); function main { nothing; also_nothing; still_nothing; nothing_again; return; }\n} mod my_module { machine Other with degree: 8, latch: latch, operation_id: operation_id { operation nothing<0>; col fixed latch = [1]*; col fixed operation_id = [0]*; }\n} Note that a module can't be called std, as this name is reserved for the powdr standard library. Similar to Rust, any reference that cannot be resolved is looked up once more in std::prelude. This module exposes basic types and values such as Option, true and false. This means that you can use Option anywhere without prefix.","breadcrumbs":"asm » Modules » Modules","id":"33","title":"Modules"},"34":{"body":"Symbols can be defined via let = ;, or via let : = ; if you want to specify the type explicitly. The value is an arbitrary PIL-expression . For details, see the Declarations section in the PIL part. Other symbols available in the current module can be accessed by name, but it is also possible to specify full relative paths in the form of e.g. super::super::module_name::symbol. Here are some examples of how to define and use symbols: mod utils { // This defines a function by means of a lambda expression that // computes the sum of an array of values. We fully specify its type. let sum: int, int[] -> int = |len, arr| match len { 0 => 0, _ => arr[len - 1] + sum(len - 1, arr) }; // A simple function that returns the input incremented by one, // as an expression. let incremented: expr -> expr = |x| x + 1; // This is a function that takes an expression as input and returns // a constraint enforcing this expression increments by a certain value // between rows. // The type will be inferred here because `'` is only valid on `expr`. let constrain_incremented_by = |x, inc| x' = x + inc;\n} machine Main with degree: 4 { // Machines create local scopes in the way functions create local scopes: // - all symbols in the machine's module are available without prefix, // - new symbols can be defined but are only available inside the machine. reg A; reg pc[@pc]; // This defines a witness column, let x; // and now we force it to stay unchanged. utils::constrain_incremented_by(x, 0); // We define an instruction that uses a complicated way to increment a register. instr incr_a { A' = utils::incremented(A) } function main { incr_a; return; }\n}","breadcrumbs":"asm » Declarations » Declarations","id":"34","title":"Declarations"},"35":{"body":"Machines are the first main concept in powdr-asm. They can currently be of two types: virtual or constrained.","breadcrumbs":"asm » Machines » Machines","id":"35","title":"Machines"},"36":{"body":"Dynamic machines are defined by: a degree range , indicating the number of execution steps a set of registers , including a program counter an instruction set a set of powdr-pil statements a set of functions a set of submachines An example of a simple dynamic machine is the following: machine HelloWorld with degree: 8 { reg pc[@pc]; reg X[<=]; reg Y[<=]; reg A; instr incr X -> Y { Y = X + 1 } instr decr X -> Y { Y = X - 1 } instr assert_zero X { X = 0 } function main { // assign the first prover input to A A <=X= ${ std::prelude::Query::Input(0, 1) }; // increment A A <== incr(A); // decrement A A <== decr(A); // assert that A is zero assert_zero A; return; }\n}","breadcrumbs":"asm » Machines » Virtual machines","id":"36","title":"Virtual machines"},"37":{"body":"Constrained machines are a lower-level type of machine. They do not have registers, and instead rely on simple committed and fixed columns. They are used to implement hand-optimized computation. They are defined by: a degree range , indicating the number of execution steps a set of operations an operation_identifier column, used to make constraints conditional over which function is called. It can be omitted with _ if the machine has at most one operation. a latch column, used to identify rows at which the machine can be accessed from the outside (where the inputs and outputs are passed). It can be omitted if the machine has no operations. a set of submachines a set of links An example of a simple constrained machine is the following: machine SimpleStatic with degree: 8, latch: latch, operation_id: operation_id\n{ operation power_4<0> x -> y; col fixed operation_id = [0]*; col fixed latch = [0, 0, 0, 1]*; col witness x; col witness y; // initialise y to x at the beginning of each block latch * (y' - x') = 0; // x is unconstrained at the beginning of the block // x is constant within a block (1 - latch) * (x' - x) = 0; // y is multiplied by x at each row (1 - latch) * (y' - x * y) = 0;\n} For more details on the powdr-pil statements, check out the pil section of this book. Note that the parameters of the operation are columns defined in powdr-pil statements.","breadcrumbs":"asm » Machines » Constrained machines","id":"37","title":"Constrained machines"},"38":{"body":"Machines can have submachines which they access by defining external instructions or links . They are declared as follows: machine MySubmachine { ...\n} machine MyMachine { MySubmachine my_submachine;\n} Machines can also receive submachines as construction parameters. A machine passed in as an argument can be accessed in the same way as locally declared submachines: machine MachineWithParam(subm: MySubmachine) { // `subm` can be accessed as a submachine ...\n} machine MyMachine { MySubmachine my_submachine; // `my_submachine` is passed to `another_submachine` as a construction argument MachineWithParam another_submachine(my_submachine);\n}","breadcrumbs":"asm » Machines » Submachines","id":"38","title":"Submachines"},"39":{"body":"Registers are central to a machine. powdr supports a few types of registers:","breadcrumbs":"asm » Registers » Registers","id":"39","title":"Registers"},"4":{"body":"You will need the Rust compiler and Cargo, the Rust package manager. The easiest way to install both is with rustup.rs .","breadcrumbs":"Installation » Prerequisites","id":"4","title":"Prerequisites"},"40":{"body":"Each machine can have at most one program counter. In the absence of a program counter, the machine is considered static, and no other register can be declared. The program counter is defined as follows: reg pc[@pc] At each step execution step, the program counter points to the function line to execute. The program counter behaves like a write register , with the exception that its value is incremented by default after each step.","breadcrumbs":"asm » Registers » Program counter","id":"40","title":"Program counter"},"41":{"body":"Write registers are the default type for registers. They are declared as follows: reg A; They hold a field element, are initialized as 0 at the beginning of a function and keep their value by default. They can be read from and written to. // write to A\nA <=X= 1;\n// A is 1 // read from A\nB <=X= A;\n// A is still 1","breadcrumbs":"asm » Registers » Write registers","id":"41","title":"Write registers"},"42":{"body":"Assignment registers are transient to an execution step: their value is not persisted across steps. They are required in order to pass inputs and receive outputs from instructions, as well as in assignments. For example, if we want to assert that write register A is 0, we can use the following instruction: reg pc[@pc];\nreg A; instr assert_A_is_zero { A = 0\n} function main { assert_A_is_zero; return;\n} However, if we want the instruction to accept any write register as input, we use an assignment register. reg pc[@pc];\nreg X[<=];\nreg A; instr assert_zero X { X = 0\n} function main { assert_zero A; return;\n}","breadcrumbs":"asm » Registers » Assignment registers","id":"42","title":"Assignment registers"},"43":{"body":"Read-only registers are used for function inputs. However, powdr creates them automatically based on functions arguments, so that they do not need to be declared explicitly. Read-only registers are only mentioned for completeness here and are currently only used inside the compiler. We advise against using them.","breadcrumbs":"asm » Registers » Read-only registers","id":"43","title":"Read-only registers"},"44":{"body":"Functions are the entry points to a virtual machine. They can be called from another machine or from the outside. In this section, we describe functions with this simple virtual machine: machine Machine with degree: 16 { reg pc[@pc]; reg X[<=]; reg Y[<=]; reg Z[<=]; reg CNT; reg A; reg B; // an instruction to assert that a number is zero instr assert_zero X { X = 0 } // an instruction to jump to a label instr jmp l: label { pc' = l } // an instruction to jump to a label iff `X` is `0`, otherwise continue instr jmpz X, l: label { pc' = XIsZero * l + (1 - XIsZero) * (pc + 1) } // an instruction to return the square of an input as well as its double instr square_and_double X -> Y, Z { Y = X * X, Z = 2 * X } function main { // initialise `A` to 2 A <=X= 2; // initialise `CNT` to `3` CNT <=X= 3; start: // if `CNT` is `0`, jump to `end` jmpz CNT, end; // decrement `CNT` CNT <=X= CNT - 1; // get the square and the double of `A` A, B <== square_and_double(A); // jump back to `start` jmp start; end: // check that `A == ((2**2)**2)**2` assert_zero A - ((2**2)**2)**2; // check that `B == ((2**2)**2)*2` assert_zero B - ((2**2)**2)*2; return; } // some superpowers on `X` to allow us to check if it's 0 col witness XInv; col witness XIsZero; XIsZero = 1 - X * XInv; XIsZero * X = 0; XIsZero * (1 - XIsZero) = 0;\n}","breadcrumbs":"asm » Functions » Functions","id":"44","title":"Functions"},"45":{"body":"Function inputs and outputs are not supported yet","breadcrumbs":"asm » Functions » Function inputs and outputs","id":"45","title":"Function inputs and outputs"},"46":{"body":"","breadcrumbs":"asm » Functions » Statements","id":"46","title":"Statements"},"47":{"body":"Labels allow referring to a location in a function by name. start:","breadcrumbs":"asm » Functions » Labels","id":"47","title":"Labels"},"48":{"body":"Assignments allow setting the values of some write registers to the values of some expressions expression using assignment registers. CNT <=X= 3; If the right-hand side of the assignment is an instruction, assignment registers can be inferred and are optional: A, B <== square_and_double(A); This will be inferred to be the same as A, B <=Y, Z= square_and_double(A); from the definition of the instruction: instr square_and_double X -> Y, Z { Y = X * X, Z = 2 * X }","breadcrumbs":"asm » Functions » Assignments","id":"48","title":"Assignments"},"49":{"body":"Instructions which do not return outputs can be used as statements. assert_zero A - ((2**2)**2)**2;","breadcrumbs":"asm » Functions » Instructions","id":"49","title":"Instructions"},"5":{"body":"First, create a new powdrVM project with cargo-powdr new my-host Your new crate my-host is the host of the virtual machine's execution, and is responsible for preparing data and running the prover. The guest crate in your new project contains the Rust code whose execution will be proven. Most of these details are abstracted by the powdr library. Now that your project is set up, just run cargo run -r The host manages a powdr::Session which can be used to share data with the guest, test the execution, and generate ZK proofs. use powdr::Session; fn main() { env_logger::init(); let some_data = vec![1, 2, 3, 4, 5]; // Create a new powdr session to make proofs for the `guest` crate. // Store all temporary and final artifacts in `powdr-target`. let mut session = Session::builder() .guest_path(\"./guest\") .out_path(\"powdr-target\") // powdrVM splits long execution traces into chunks // which are proven individually. // The default size of a chunk is 2^20 = 1048576 rows. // For experiments and smaller traces/proofs, it may be beneficial to reduce the chunk size. // Create a new powdr session with a custom chunk size. // 2^18 = 262144 rows per chunk. .chunk_size_log2(18) .build() // Write `some_data` to channel 1 and the sum of `some_data` to channel 2. // Any serde-serializable type can be written to a channel. .write(1, &some_data) .write(2, &some_data.iter().sum::()); // Fast dry run to test execution. session.run(); // Uncomment to compute the proof. //session.prove();\n} The guest contains the custom logic that should be proved. use powdr_riscv_runtime;\nuse powdr_riscv_runtime::io::read; fn main() { // Any serde-deserializable type can be read from a channel. // Read some data from channel 1. let data: Vec = read(1); // Read the claimed sum from channel 2. let sum: u32 = read(2); // Check that the claimed sum is correct. assert_eq!(data.iter().sum::(), sum);\n}","breadcrumbs":"Quick Start » Quick Start","id":"5","title":"Quick Start"},"50":{"body":"","breadcrumbs":"asm » Expressions » Expressions","id":"50","title":"Expressions"},"51":{"body":"Field element literals are signed elements of the prime field. CNT <=X= 3;","breadcrumbs":"asm » Expressions » Field element literals","id":"51","title":"Field element literals"},"52":{"body":"Registers can be used as expressions, with the exception of assignment registers. CNT <=X= CNT - 1;","breadcrumbs":"asm » Expressions » Registers and columns","id":"52","title":"Registers and columns"},"53":{"body":"Instructions which return outputs can be used as expressions. A, B <== square_and_double(A);","breadcrumbs":"asm » Expressions » Instructions","id":"53","title":"Instructions"},"54":{"body":"Instructions are declared as part of a powdr virtual machine. Once defined, they can be called by any function in this machine. An instruction is composed of: a name a set of inputs ( assignment registers or labels) a set of outputs (assignment registers) a set of powdr-pil constraints to activate when the instruction is called a set of links calling into functions/operations in submachines","breadcrumbs":"asm » Instructions » Instructions","id":"54","title":"Instructions"},"55":{"body":"A local instruction is the simplest type of instruction. It is called local because its behavior is defined by a set of constraints over registers and columns of the machine it is defined in. instr add X, Y -> Z { X + Y = Z\n}","breadcrumbs":"asm » Instructions » Local instructions","id":"55","title":"Local instructions"},"56":{"body":"Instructions may also delegate all or part of their implementation to functions/operations in submachines. Each link in an instruction defines the inputs and outputs of a call to a specific function/operation in a submachine. Assume we have a submachine with a single operation add: machine SubMachine with degree: 32, latch: latch, operation_id: operation_id\n{ col witness operation_id; col fixed latch = [1]*; operation add<0> x, y -> z; col witness x; col witness y; col witness z; z = y + x;\n} An instruction calling into this operation can be declared as follows: SubMachine submachine; instr add X, Y -> Z link => Z = submachine.add(X, Y); // - trivial usage: only instruction inputs/outputs used in the call In the previous example, only assignment registers (instruction inputs and outputs) were used to call the submachine. The following example shows more complex usage of link calls: machine Main with degree: 32 { reg pc[@pc]; reg X[<=]; reg Y[<=]; reg Z[<=]; reg A; reg B; reg C; SubMachine submachine; instr add X, Y -> Z link => Z = submachine.add(X, Y); // - trivial usage: only instruction inputs/outputs used in the call instr add_to_A X, Y link => A' = submachine.add(X, Y);// - output to a regular register instr addAB -> X link => X = submachine.add(A, B); // - inputs from regular registers instr addAB_to_C link => C' = submachine.add(A, B); // - inputs and output from regular registers instr addAB_to_A link => A' = submachine.add(A, B); // - reusing an input register as output instr sub X, Y -> Z link => X = submachine.add(Y, Z); // - swapping input/output // expressions can also be used as call parameters instr add5 X -> Z link => Z = submachine.add(X, 3+2); // - literal expression as argument col fixed STEP(i) { i }; instr add_current_time_step X -> Z link => Z = submachine.add(X, STEP);// - machine columns can be referenced let arr = [1,2,3,4,5]; // - functions can be used instr add_arr_sum X -> Z link => Z = submachine.add(X, std::array::sum(arr)); instr assert_eq X, Y { X = Y } function main { A <== add(2, 3); assert_eq A, 5; add_to_A 6, 7; assert_eq A, 13; A <== sub(6, 5); assert_eq A, 1; B <=X= 20; C <== addAB(); assert_eq C, 21; A <=X= 2; B <=X= 3; addAB_to_C; assert_eq C, 5; A <=X= 33; B <=X= 44; addAB_to_A; assert_eq A, 77; A <== add5(2); assert_eq A, 7; A <== add_arr_sum(3); assert_eq A, 18; // Note that the result of this operation depends on when it executed (STEP column) A <== add_current_time_step(42); B <== add_current_time_step(42); assert_eq B - A, 1; return; }\n} A single instruction can activate multiple links, and may also include a set of constraints. Furthermore, each link can be activated conditionally, based on a given boolean flag: machine Main with degree: 16 { reg pc[@pc]; reg X[<=]; reg Y[<=]; reg Z[<=]; reg W[<=]; reg A; col witness B; col witness C; SubMachine submachine; // multiple links can be activated by a single instruction, // witness columns can be used for temporary values, // and additional constraints can be used instr double_then_mul X, Y -> Z link => B = submachine.add(X, X) link => C = submachine.add(Y, Y) { Z = B * C } // links activated conditional on a boolean flag instr add_or_sub W, X, Y -> Z link if W => Z = submachine.add(X, Y) link if (1 - W) => Z = submachine.sub(X, Y); instr assert_eq X, Y { X = Y } function main { A <== double_then_mul(3, 2); assert_eq A, 24; A <== add_or_sub(1, 3, 2); assert_eq A, 5; A <== add_or_sub(0, 3, 2); assert_eq A, 1; return; }\n} Note that links cannot currently call functions from the same machine: they delegate computation to a submachine.","breadcrumbs":"asm » Instructions » Instructions with links","id":"56","title":"Instructions with links"},"57":{"body":"Operations enable a constrained machine to expose behavior to the outside. If a machine has a single operation, it can simply be declared with its name and parameters: machine Add with degree: 32, latch: latch\n{ // operation name, with column names as inputs and outputs operation add a, b -> c; col fixed latch = [1]*; col witness a; col witness b; col witness c; // constraint \"implementing\" the operation c = a + b;\n} The parameters of the operation (inputs and outputs) must be columns declared in the machine. If a machine exposes more than one operation, the machine itself needs an operation id column (op_id in the following). Then, each operation needs to be declared with its own unique operation id: // machine declaration must include an operation id column name\nmachine AddSub with degree: 32, latch: latch, operation_id: op_id\n{ // each operation has its own unique operation id operation add<0> a, b -> c; operation sub<1> a, b -> c; col fixed latch = [1]*; // it also needs to be declared as a column col witness op_id; col witness a; col witness b; col witness c; // constraint \"implementing\" both operations, depending on `op_id` c = (1 - op_id) * (a + b) + op_id * (a - b);\n} The actual behavior of an operation is defined by the machine constraints on the columns used as inputs and outputs.","breadcrumbs":"asm » Operations » Operations","id":"57","title":"Operations"},"58":{"body":"Links enable a constrained machine to call into another machine. They are defined by a call to an operation, where inputs and outputs are expressions. An optional boolean flag restricts the rows in which the link is active. Links without a boolean flag are active in every row. machine Add4 with degree: 32, latch: latch, operation_id: operation_id\n{ Add adder; operation add4<0> x, y, z, w -> r; // Links without a flag are active on every row. // - constrain the values of `x`, `y`, and `n` so that `n = adder.add(x, y)` link => n = adder.add(x, y); // - constrain the values of `z`, `w`, and `m` so that `m = adder.add(z, w)` link => m = adder.add(z, w); // - constrain the values of `m`, `n` and `r` so that `r = adder.add(m,n)` link => r = adder.add(m, n); col fixed operation_id = [0]*; col fixed latch = [1]*; col witness x; col witness y; col witness z; col witness w; col witness r; col witness m; col witness n;\n} machine Add with degree: 32, latch: latch\n{ // operation name, with column names as inputs and outputs operation add a, b -> c; col fixed latch = [1]*; col witness a; col witness b; col witness c; // constraint \"implementing\" the operation c = a + b;\n} If a boolean flag is given, the link is only active in rows where the flag evaluates to 1. Whenever a link is active, the columns mapped as inputs and outputs are constrained by the operation implementation. The following example demonstrates how to use links with flags. col fixed odd_row = [0,1]*; link if odd_row => z = submachine.foo(x, y); // active on odd rows only\nlink if (1 - odd_row) => z = submachine.bar(x, y); // active on even rows only","breadcrumbs":"asm » Links » Links","id":"58","title":"Links"},"59":{"body":"powdr-pil is the lower level of abstraction in powdr. It is strongly inspired by Polygon zkEVM PIL . We refer to the Polygon zkEVM PIL documentation and document deviations from the original design here.","breadcrumbs":"pil » PIL","id":"59","title":"PIL"},"6":{"body":"powdr is a modular compiler stack to build zkVMs. It is ideal for implementing existing VMs and experimenting with new designs with minimal boilerplate. Domain specific languages are used to specify the VM and its underlying constraints, not low level Rust code Automated witness generation Support for multiple provers as well as aggregation schemes Support for hand-optimized co-processors when performance is critical Built in Rust 🦀","breadcrumbs":"Introduction » Introduction","id":"6","title":"Introduction"},"60":{"body":"Powdr-pil allows the same syntax to declare various kinds of symbols. This includes constants, fixed columns, witness columns and even higher-order functions. It deduces the symbol kind from the type of the symbol and the way the symbol is used. Symbols can be declared using let ; and they can be declared and defined using let = ;, where is an expression. The type of the symbol can be explicitly specified using let : ; and let : = ;. Symbols with a generic type can be defined using let : = ;, where the TV are newly created type variables that can be used in the type. This syntax can be used for constants, fixed columns, witness columns and even (higher-order) functions that can transform expressions. The kind of symbol is deduced by its type and whether it is has a value: Symbols without a value are witness columns or arrays of witness columns. Their type can be omitted. If it is given, it must be col or col[k]. Symbols defined with a value and type col (or col[k]) are fixed columns (or arrays of fixed columns). Symbols defined with a value and type inter (or inter[k]) are intermediate columns (or arrays of intermediate columns). Everything else is a \"generic symbol\" that is not a column. Examples: // This defines a integer constant. We can omit the type when it is used // somewhere that constrains its type. Since it is not used below, // we have to specify `: int` (another option would be `fe`, field element). let rows: int = 16; // This defines a fixed column that contains the row number in each row. // Only symbols whose type is \"col\" are considered fixed columns. let step: col = |i| i; // Here, we have a witness column, the do not need an explicit `: col`. let x; // This functions defines a fixed column where each cell contains the // square of its row number. let square: col = |x| x*x; // This is a generic function that computes the sum of an array // given its length. // It is not stored as a column. // If it is used in a constraint, it has to be evaulated, while // columns must be used symbolically. let sum: T[], int -> T = |a, len| match len { 0 => 0, _ => sum(a, len - 1) + a[len - 1], }; // This is a constraint that uses the `sum` function: sum([x, step], 2) = 0; Name lookup is performed as follows: Lookup is performed starting from the current namespace, going up to the root component by component where the first match is used. If all lookups fail, a last attempt is done inside the std::prelude namespace.","breadcrumbs":"pil » Declarations » Declarations","id":"60","title":"Declarations"},"61":{"body":"Depending on the context, powdr allows more or less features for expressions. Inside values for declarations, you can use a very flexible language which includes many different operators, function calls, lambda functions, tuple types, statement blocks, match statements and others. In statements and expressions that are required to evaluate to constraints / polynomial identities, only a much more restrictive language can be used. Expressions in that language are called Algebraic Expressions. While you can use the full language everywhere, in the context of a constraint, the result after function evaluation and constant propagation has to be an algebraic expression.","breadcrumbs":"pil » Expressions » Expressions","id":"61","title":"Expressions"},"62":{"body":"The expression language allows the following operators, in order of increased precedence: lambda functions: |params| body. Examples: |i| i (the identity), |a, b| a + b (sum) || - logical or && - logical and <, <=, ==, !=, >=, > - comparisons and = - identity operator | - bitwise or ^ - bitwise xor & - bitwise and <<, >> - left and right shift +, - - addition and subtraction (binary operator) *, /, % - multiplication, division and modulo ** - exponentiation -, ! - numerical and logical negation (unary operators, prefix) ' - \"next row\" operator (suffix) [], () - array index access and function calls Elementary expressions are number literals (integers) string literals, written in double quotes, e.g. \"hello\" array literals written in square brackets, e.g. [1, 2, 3] tuples, having at least two elements, e.g. (1, \"abc\") statement blocks (see below) match expressions (see below). if expressions (see below). Parentheses are allowed at any point to force precedence.","breadcrumbs":"pil » Expressions » Generic Expressions","id":"62","title":"Generic Expressions"},"63":{"body":"The only way to declare a function in pil is by assigning a lambda function to a symbol. Example: let x = |i| i + 1; If you want to specify the types of parameters or return values explicitly, you have to do it on the symbol, you cannot do it on the parameters: let x: int -> int = |i| i + 1; It is possible to use patterns in the function parameters: let y: (int, int), int -> int = |(i, j), _| i + j; If you use patterns, they have to be irrefutable, which means that the pattern has to be able to match any value of the given type.","breadcrumbs":"pil » Expressions » Lambda Functions","id":"63","title":"Lambda Functions"},"64":{"body":"A {-}-delimited block can be used everywhere where an expression is expected. It has the form { ; ; ... ; }, i.e. a sequence of statements followed by an expression. The statements can either be expressions (f();, only inside constr-functions ) or let statements: let x = ...; / let x; The value of the statement block is the value of the final expression. Example: let plus_one_squared = |x| { let y = x + 1; y * y }; Let statements with value can be used everywhere, they just bind an expression to a local variable and allow to avoid repeating the expression. You can use patterns for the left hand side of let statements to destructure values. Example: let f = |i| (i / 2, i % 2);\nlet (quot, rem) = f(7); The second let statement will create two local variables x and y. You can also ignore values using the _ pattern element. For details, please see the patterns section. Let statements without value (let x;) create a new witness column and are only allowed inside constr-functions . Similarly, an expression at statement level (e.g. x * (x - 1) = 0;) can be used to create new constraints that are added to the global constraint set and this can only be done inside a constr-functions . Note that you can always create constraints and return them from a function, even in pure function . Example: let constrain_to_bool: expr -> Constr = |x| x * (x - 1) = 0;","breadcrumbs":"pil » Expressions » Statement Blocks","id":"64","title":"Statement Blocks"},"65":{"body":"Match expressions take the form match { => , => , _ => }, with an arbitrary number of match arms. The semantics are that the first match arm where the pattern equals the value after the match keyword is evaluated. Patterns can be used to destructure more complex data types and to capture values inside new local variables. For more details, please see the patterns section. Example: let fib = |i| match i { 0 => 1, 1 => 1, _ => fib(i - 2) + fib(i - 1),\n};","breadcrumbs":"pil » Expressions » Match Expressions","id":"65","title":"Match Expressions"},"66":{"body":"If expressions take the form if { } else { }, where the \"else\" part is not optional. If the condition evaluates to true, then is evaluated, otherwise is. Example: let is_seven = |i| if i == 7 { 1 } else { 0 };","breadcrumbs":"pil » Expressions » If Expressions","id":"66","title":"If Expressions"},"67":{"body":"For constraints (or functions called at a place where a constraint is expected), the expression syntax is limited: After evaluating function calls and performing constant propagation, the resulting expression has to be an \"algebraic expression\". These are restricted in the following way: You can freely use the operators +, -,*. The operator ** must have a number as exponent. The operator [i] must have a column name on the left-hand side and the index must be a number. The operator ' must have a column or [i] on the left-hand-side. No other operators are allowed. Arbitrary parentheses are allowed. The following example illustrates how you can still use the generic language: namespace Main(16); // Returns folder(...folder(folder(0, f(0)), f(1)) ..., f(length - 1)) // This is a generic function. let fold: int, (int -> T1), T2, (T2, T1 -> T2) -> T2 = |length, f, initial, folder| match length { 0 => initial, _ => folder(fold(length - 1, f, initial, folder), f(length - 1)) }; // returns f(0) + f(1) + ... + f(length - 1) let sum = |length, f| fold(length, f, 0, |acc, e| acc + e); // This function takes an algebraic expression (a column or expression // involving columns) and returns an identity that forces this expression // to equal 20. Note that `=` is not an assignment but creates an identity constraint. let equals_twenty: expr -> Constr = |x| x = 20; // This declares an array of 16 witness columns. col witness wit[16]; // This expression has to evaluate to an identity, but we can still use // higher order functions and all the flexibility of the language. // The sub-expression `sum(16, |i| wit[i])` evaluates to the algebraic // expression \"wit[0] + wit[1] + ... + wit[15]\", which is then // turned into the identity by `equals_twenty` // wit[0] + wit[1] + ... + wit[15] = 20. equals_twenty(sum(16, |i| wit[i])); // We constrained the sum to equal twenty, but there is no unique solution // to that constraint. In order to fully constrain the system, we need to // add something more: The first fifteen columns should all be one. // returns [f(0), f(1), ..., f(length - 1)] let make_array = |length, f| fold(length, f, [], |acc, e| acc + [e]); // If an expression evaluates to an array of constraints, all the // constraints in the array are added to the system. make_array(15, |i| wit[i] = 1);","breadcrumbs":"pil » Expressions » Algebraic Expressions","id":"67","title":"Algebraic Expressions"},"68":{"body":"Every function in PIL is either a pure, a constr or a query function. They are denoted by |...| ... constr |...| ... query |...| ... Inside constr functions, it is possible to create new witness columns and add constraints to the set of constraints (see the Statement Blocks section for details). Inside query functions, it is possible to evaluate the value of a column on the \"current\" row using the std::prover::eval function. Both actions require a certain context to be available, which is not the case for example when the values of a fixed column are computed. A query function can only be used in the query or hint part of a witness column while constr functions can only be evaluated in the constraint part of a namespace or machine. You can define and call new constr functions inside a constr function and you can call and define new query functions inside query functions, but as soon as you enter a pure function, this is not possible any more. Examples: // This function creates and returns a new witness column.\nlet new_wit = constr || { let x; x };\n// Queries the current value of a column and returns its square.\nlet square_of = query |x| { let v = std::prover::eval(x); v * v };\n// Creates a new witness column, constrains it to be boolean and returns it.\nlet new_bool = constr |x| { let x = new_wit(); x * (x - 1) = 0; x };\n// This is a pure function that only returns a constraint, but does not add it\n// to the global set of constraints.\nlet bool_constraint: expr -> Constr = |x| x * (x - 1) = 0;","breadcrumbs":"pil » Expressions » Constr and Query Functions","id":"68","title":"Constr and Query Functions"},"69":{"body":"Patterns are a way to destructure or match certain values. They are valid in match arms, function parameters or left hand sides of let statements in blocks. A pattern is built up in from the following components: _ - the \"catch all\" pattern that matches anything x - for an identifier x, matches anything and assigns the value to the new local variable of that name k - for a literal number k, matches the exact number, either as an int or a fe -k - for a literal number k, matches the exact negated number, either as an int or a fe \"text\" - for a string literal, matches the exact string literal as a string (a, b, c) - for a tuple, matches a tuple-typed value if all the components match [a, b, c] - for an array, matches array values of exactly the same length if all the components match [a, .., b, c] - matches an array that has an initial segment of a and ends in b, c. The omitted part can be empty. X::Y(a, b) - for an enum variant X::Y, matches that enum variant if all the enum fields match. Patterns can be nested, which means that the components of tuple and array patterns are themselves patterns. Some examples: // This pattern de-structures the first function parameter.\nlet f: (int, int), int -> int = |(a, b), c| (a + c, b);\n// Matches a tuple, ignores the second component.\nlet (x, _) = f((6, 7), 3);\n// The match statement typically uses patterns to check for certain values\n// but it can also destructure and create new local variables valid inside\n// the match arm.\nlet t = match (x, f((1, x), 2)) { (0, _) => 0, (1, _) => 7, (_, y) => y, _ => 9\n};\nlet head: int[] -> int = |x| match x { // Matches the first element of a non-empty array and binds it to a local variable. [a, ..] => a, [] => std::check::panic(\"Called 'head' on empty array.\"),\n}; Note that PIL does not check that patterns in a match expression are exhaustive.","breadcrumbs":"pil » Patterns » Patterns","id":"69","title":"Patterns"},"7":{"body":"powdr is free and open source. You can find the source code on GitHub . Issues and feature requests can be posted on the GitHub issue tracker .","breadcrumbs":"Introduction » Contributing","id":"7","title":"Contributing"},"70":{"body":"A pattern is refutable if there is a value of the correct type that the pattern does not match. An example is the pattern 7 since it does not match all integers, or the patten [x, ..], because it does not match the empty array. Refutable patterns are fine in match arms, because if the pattern does not match, the evaluator will just continue trying the next match arm, but they are disallowed in let statements and in function parameters, because there we do not have the option of \"trying the next arm\". Example: let f: int -> int[] = |i| match i { // This is a refutable pattern, but it is fine // because we will try the next match arm. 0 => [], _ => f(i - 1) + [i],\n};\n// This pattern does not match all `int[]`, because it requires a length\n// of at least one.\nlet [x, ..] = f(8); The following patterns are refutable: all integer literal patterns all string literal patterns enum variant patterns tuple patterns that have refutable components array patterns that are not [..]. Variable patterns and _ are always irrefutable.","breadcrumbs":"pil » Patterns » (Ir-)refutability","id":"70","title":"(Ir-)refutability"},"71":{"body":"The powdr-pil language has the following types: bool int (integer) fe (field element) string tuple array function type expr (expression) ! (\"bottom\" or \"unreachable\" type) enum types In addition, there are the col and inter types, but they are special in that they are only used for declaring columns, but cannot appear as the type of an expression. See Declaring and Referencing Columns for details. Powdr-pil performs Hindley-Milner type inference. This means that, similar to Rust, the type of a symbol does not always have to be specified. The compiler will try to find a type for every symbol depending both on the value assigned to the symbol and on the context the symbol is used in. It is an error if the type is not uniquely determined. Symbols can have a generic type, but in those cases, you have to explicitly specify the generic type. Such declarations can require type variables to satisfy certain trait bounds. Currently, only built-in traits are supported (see the next section). Literal numbers do not have a specific type, they can be either int, fe or expr (the types that implement the FromLiteral trait), and their type can also stay generic until evaluation.","breadcrumbs":"pil » Types » Types","id":"71","title":"Types"},"72":{"body":"The following snippet defines a function that takes a value of a generic type and returns the value incremented by one. The type bounds on the generic type are FromLiteral and Add. The type checker will complain if we do not specify the type bounds. The bound Add is required because we use the + operator in the function and FromLiteral is needed because we use the literal 1 as a value of that type. let add_one: T -> T = |i| i + 1;","breadcrumbs":"pil » Types » Example","id":"72","title":"Example"},"73":{"body":"A symbol declared to have type col or inter (or col[k] / inter[k]) is a bit special: These symbols represent columns in the arithmetization and the types of values that can be assigned to such symbols and the references to the symbols are different from their declared type. If you assign a value to a col symbol, that value is expected to have type int -> fe or int -> int (or an array thereof). This allows the simple declaration of a fixed column let byte: col = |i| i & 0xff; without complicated conversions. The integer value is converted to a field element during evaluation, but it has to be non-negative and less than the field modulus. Symbols of declared type col are fixed (those with value) or witness columns (those without value). A symbol of declared type inter is an intermediate column. You can assign it a value of type expr. The idea of an intermediate column is that it is an algebraic expression of other columns that you do not want to compute multiple times. Note that if you use let x: expr = a * b;, the symbol x is just a name in the PIL environment, this will not create an intermediate column. The difference between inter and expr in this case is that if you use let x: inter = ..., the expression might not be inlined into constraints (depending on the backend), while if you use let x: expr = ..., it will always be inlined. If you reference a symbol of declared type inter or col, the type of the reference is expr (or expr[]). A byte constraint is as easy as [ X ] in [ byte ], since the expected types in plookup columns is expr. The downside is that you cannot evaluate columns as functions. If you want to do that, you either have to assign a copy to an int -> int symbol: let byte_f: int -> int = |i| i & 0xff; let byte: col = byte_f;. Or you can use the built-in function std::prover::eval if you want to do that inside a prover query or hint. All other symbols use their declared type both for their value and for references to these symbols.","breadcrumbs":"pil » Types » Declaring and Referencing Columns","id":"73","title":"Declaring and Referencing Columns"},"74":{"body":"FromLiteral: Implemented by int, fe, expr. The type of a number literal needs to implement FromLiteral. Add: Implemented by int, fe, expr, T[], string. Used by +: T, T -> T (binary plus). Sub: Implemented by int, fe, expr. Used by -: T, T -> T (binary minus). Neg: Implemented by int, fe, expr. Used by -: T -> T (unary minus). Mul: Implemented by int, fe, expr. Used by *: T, T -> T (binary multiplication). Pow: Implemented by int, fe, expr, Used by **: T, int -> T (exponentiation). Ord: Implemented by int. Used by op: T, T, -> bool for op being one of <, >, <=, >=. Eq: Implemented by int, fe, expr. Used by op: T, T -> bool for op being one of ==, !=.","breadcrumbs":"pil » Types » Built-in Traits","id":"74","title":"Built-in Traits"},"75":{"body":"","breadcrumbs":"pil » Types » List of Types","id":"75","title":"List of Types"},"76":{"body":"Type name: bool Booleans are the results of comparisons. They allow the following operators: &&: logical conjunction ||: logical disjunction !: logical negation Short-circuiting is not performed when evaluating boolean operators. This means that (1 == 1) || std::check::panic(\"reason\") will cause a panic abort.","breadcrumbs":"pil » Types » Bool","id":"76","title":"Bool"},"77":{"body":"Type name: int Integers in powdr-pil have unlimited size. Array index requires an integer and row indices (for example the input to a fixed column defined through a function) are also integers. Integer implements FromLiteral, which means that literal numbers can be used in contexts where int is expected. Integers allow the following operators, whose result is always an integer: +: addition -: subtraction (also unary negation) *: multiplication /: integer division rounding towards zero, division by zero results in a runtime error **: exponentiation, the exponent needs to be non-negative and fit 32 bits, otherwise a runtime error is triggered %: remainder after division, (for signed arguments, p % q == sgn(p) * abs(p) % abs(q)), remainder by zero results in a runtime error &: bit-wise conjunction |: bit-wise disjunction ^: bit-wise exclusive or <<: bit-wise shift left, the shift amount needs to be non-negative and fit 32 bits, otherwise a runtime error is triggered >>: bit-wise shift right, the shift amount needs to be non-negative and fit 32 bits, otherwise a runtime error is triggered The exponentiation operator on field elements requires a non-negative integer as exponent. It has the signature **: fe, int -> fe. In addition, the following comparison operators are allowed, the result is a boolean: <: less than <=: less or equal ==: equal !=: not equal >=: greater or equal >: greater than","breadcrumbs":"pil » Types » Integer","id":"77","title":"Integer"},"78":{"body":"Type name: fe Field elements are elements of a particular but unspecified prime field. The exact field is chosen when powdr is run. The modulus of that field can be accessed via std::field::modulus(). Field elements are the values stored in (fixed and witness) columns. Arithmetic inside constraints (algebraic expressions) is also always finite field arithmetic. The type fe implements FromLiteral, which means that literal numbers can be used in contexts where fe is expected. If the literal number is not less than the field modulus, a runtime error is caused. Field elements allow the following operators, where the result is always a field element: +: finite field addition -: finite field subtraction (also unary negation) *: finite field multiplication There is also an exponentiation operator ** on field elements. It requires the exponent to be a non-negative integer and thus has the signature **: fe, int -> fe. If the exponent is negative, a runtime error is triggered. 0**0 is defined as 1. The following comparison operators exist for field elements, whose result is a boolean: ==: equality comparison !=: inequality comparison Since finite fields do not have an inherent order as integers do, if you want to compare them using <, you have to first convert them to integers.","breadcrumbs":"pil » Types » Field Element","id":"78","title":"Field Element"},"79":{"body":"Type name: string String literals are written as \"string content\". They are mainly used for debugging or documentation purposes, since they cannot occur in constraints. They allow the following operators: +: string concatenation","breadcrumbs":"pil » Types » String","id":"79","title":"String"},"8":{"body":"The powdr source and documentation are released under the MIT License .","breadcrumbs":"Introduction » License","id":"8","title":"License"},"80":{"body":"Type name: (..., ..., ...) Tuples are complex types that are composed from other types, either zero or two or more. There is no tuple type with a single element ((int) is the same as int). The empty tuple type is written as (). Examples include (int, int) (a pair of integers) and ((fe[], int), ()) (a tuple consisting of a tuple that contains an array of field elements and an integer and an empty tuple). Tuples values are constructed using parentheses: (1, 2) constructs the tuple that consists of a one and a two. Tuples do not allow any operators.","breadcrumbs":"pil » Types » Tuple","id":"80","title":"Tuple"},"81":{"body":"Type name: _[] Arrays are statically or dynamically-sized collections of elements each of the same type denoted for example as int[] (a dynamically-sized array of integers) or int[2] (an array of integers with static size two). Array values can be constructed inline using [1, 2] (the array containing the two elements one and two). The built-in function std::array::len can be used to retrieve the length of an array (statically or dynamically sized) and the elements of an array a can be accessed using a[0], a[1], etc. The type checker currently only knows dynamically-sized arrays, which means that it does not compare the sizes of statically-sized array types. Arrays allow the following operators: +: array concatenation _[]: array index access, the index needs to be a non-negative integer that is less than the length of the array, otherwise a runtime error is triggered","breadcrumbs":"pil » Types » Array","id":"81","title":"Array"},"82":{"body":"Type name: T1, T2, ..., Tn -> T0 Function type names are for example denoted as int, fe -> int or -> int. Note that (int, fe) -> int is a function that takes a single tuple as parameter while int, fe -> int takes two parameters of type integer and field element. Functions can be constructed using the lambda expression notation. For example |x, y| x + y returns a function that performs addition. The lambda expression || 7 is a function that returns a constant (has no parameters). Lambda functions can capture anything in their environment and thus form closures. Functions allow the following operators: _(...): function evaluation Powdr-pil is usually side-effect free, but there are some built-in functions that have side-effects: These are std::debug::print and std::check::panic and all functions that call them. Expressions are eagerly evaluated from left to right.","breadcrumbs":"pil » Types » Function","id":"82","title":"Function"},"83":{"body":"Type name: expr Expressions are the elements of the algebraic expressions used in constraints. References to columns have type expr and expr also implements FromLiteral, which means that literal numbers can be used in contexts where expr is expected. Example: let x: col;\nlet y: col;\nlet f: -> expr = || x + y;\nlet g = || 7;\nf() = g(); The first two lines define the witness columns x and y. The next two lines define the utility functions f and g. The function f adds the two columns x and y symbolically - it essentially returns the expression x + y. The last line is at statement level and it is expected that it evaluates to a constraint, in this case, a polynomial identity. Because of that, g is inferred to have type -> expr, which is compatible with the literal 7. Since expressions are built from abstract column references, applying operators does not perform any operations but instead constructs an abstract expression structure / syntax tree. Expressions allow the following operators, which always construct new expressions: +: additive combination of expressions -: subtractive combination of expressions (also unary negation) *: multiplicative combination of expressions **: exponential combination of an expression with an integer constant ': reference to the next row of a column, can only be applied directly to columns and only once The operator = on expressions constructs a constraint (see [../builtins#Constr]).","breadcrumbs":"pil » Types » Expression","id":"83","title":"Expression"},"84":{"body":"Type name: ! The bottom type essentially is the return type of a function that never returns, which currently only happens if you call the panic function. The bottom type is compatible with any other type, which means that you can call the panic function in any context.","breadcrumbs":"pil » Types » Bottom Type","id":"84","title":"Bottom Type"},"85":{"body":"Enums are user-defined types that can hold different named alternatives plus data. An enum type has a (namespaced) name that uniquely identifies it and is also used to reference the type. Enums are declared in the following way: enum EnumName { Variant1, Variant2(), Variant3(int), Variant4(int, int[], EnumName),\n} The variants must have unique names inside the enum and they can optionally take additional data. Each variant declares a type constructor function that can be used to create a value of the enum: let a = EnumName::Variant1;\nlet b = EnumName::Variant2();\nlet c = EnumName::Variant3(3);\nlet d = EnumName::Variant4(1, [2, 3], EnumName::Variant1); Recursive enums are allowed. Enums do not allow any operators.","breadcrumbs":"pil » Types » Enum Types","id":"85","title":"Enum Types"},"86":{"body":"powdr-pil requires the definition of fixed columns at the time of declaration. For example: col fixed ONES = [1]*; // this is valid\n// col fixed ONES; // this is invalid A number of mechanisms are supported to declare fixed columns. Let N be the total length of the column we're defining.","breadcrumbs":"pil » Fixed Columns » Fixed columns","id":"86","title":"Fixed columns"},"87":{"body":"powdr-pil supports a basic language to define the value of constant columns using: arrays, for example [1, 2, 3] repetition, for example [1, 2]* concatenation, for example [1, 2] + [3, 4] These mechanisms can be combined, as long as a single repetition is used per column definition. // valid, as for a given total length, only one column fits this definition for a given `N`\ncol fixed A = [1, 2] + [3, 4]* + [5]; // invalid, as many columns fit this definition\n// col fixed A = [1, 2]* + [3, 4]*","breadcrumbs":"pil » Fixed Columns » Values with repetitions","id":"87","title":"Values with repetitions"},"88":{"body":"A column can be seen as a mapping from integers to field elements. In this context, different functions are supported: col fixed B(i) { i + 1 }; col fixed C(i) {match i { 0 => 1, _ => 0\n}};","breadcrumbs":"pil » Fixed Columns » Mappings","id":"88","title":"Mappings"},"89":{"body":"","breadcrumbs":"pil » Built-in Functions » Built-ins","id":"89","title":"Built-ins"},"9":{"body":"The only way to install powdr currently is to build it from source. There are two binaries, powdr compiles powdr-asm files to powdr-PIL and generates witnesses and proofs. powdr-rs compiles Rust crates to powdr-asm via RISCV, and executes powdr-asm code with given inputs.","breadcrumbs":"Installation » Installation","id":"9","title":"Installation"},"90":{"body":"The following functions are built into the compiler. They need to be defined to be accessible, but their assigned value is ignored and the compiler replaces it with the following.","breadcrumbs":"pil » Built-in Functions » Functions","id":"90","title":"Functions"},"91":{"body":"let std::array::len: T[] -> int Returns the length of an array as an integer. Example: let x = [1, 2, 3];\nlet l = std::array::len(x); // returns 3","breadcrumbs":"pil » Built-in Functions » Array length","id":"91","title":"Array length"},"92":{"body":"let std::check::panic: string -> ! Aborts evaluation and prints its argument as error message as a side-effect of its evaluation. Since panic does not generate a constraint, it cannot be used for correctness checks. The verifier only checks constraints / identities and thus ignores anything that could lead to a panic. Panic should only be used to check prover-internal consistency. Example: let secp256k1_inverse = |x| if x == std::convert::fe(0) { panic!(\"Tried to compute the inverse of zero.\") } else { std::math::ff::inverse(x, secp256k1_modulus); };","breadcrumbs":"pil » Built-in Functions » Panic","id":"92","title":"Panic"},"93":{"body":"let std::convert::fe: T -> fe This function is meant to be used on int, but also works on fe for convenience. It converts a non-negative integer less than the field modulus to a field element. Causes a type error in all other cases. If the argument is already a field element, it is returned without modification. let std::convert::int: T -> int This function is meant to be used on fe, but also works on int for convenience. It converts a field element to an integer. If the argument is already an integer, it is returned without modification. let std::convert::expr: T -> expr This function is meant to be used on int, but also works on fe and expr for convenience. It converts an integer to an expr. If the argument is already an expr, it is returned without modification.","breadcrumbs":"pil » Built-in Functions » Conversions","id":"93","title":"Conversions"},"94":{"body":"let std::debug::print: string -> Constr[] This function takes a string and prints it on the standard output during evaluation, as a side-effect of its evaluation. This function should only be used for debugging purposes. Note that the function does not append a newline at the end. It returns an empty Constr array so that it can be used at statement level where constraints are expected.","breadcrumbs":"pil » Built-in Functions » Printing","id":"94","title":"Printing"},"95":{"body":"let std::field::modulus: -> int Returns the current field's modulus as an integer. Example: // Inside a machine\nif std::field::modulus() != 2**64 - 2**32 + 1 { panic!(\"This machine can only be used with the Goldilocks field.\")\n} else { []\n};","breadcrumbs":"pil » Built-in Functions » Modulus","id":"95","title":"Modulus"},"96":{"body":"let std::prover::eval: expr -> fe Evaluates a column (potentially with ' applied) on the current row. This function can only be used for prover queries or hints and it only works on columns (and those with ' applied). This means you cannot use std::prover::eval(x + 1). In the following example, the column x is evaluated in a prover hint that returns the square root of a number. Example: machine Sqrt { let sqrt_hint: fe -> fe = |x| match x { // Code to compute the square root of x goes here. }; col witness x; col witness y(i) query std::prelude::Query::Hint(sqrt_hint(std::prover::eval(x))); y * y = x; }}","breadcrumbs":"pil » Built-in Functions » Evaluate","id":"96","title":"Evaluate"},"97":{"body":"let std::prelude::challenge: int, int -> expr Constructs a challenge object, essentially asking the verifier for a random number. The first argument is the proof stage and the second is the identifier of the challenge. If you want two challenges to be different, you have to choose different IDs.","breadcrumbs":"pil » Built-in Functions » Challenges","id":"97","title":"Challenges"},"98":{"body":"let std::prover::min_degree: -> int\nlet std::prover::max_degree: -> int\nlet std::prover::degree: -> int The degree function returns the number of rows / the length of the witness columns, also known as the degree. Outside of fixed column definitions, degree fails if min_degree and max_degree are different.","breadcrumbs":"pil » Built-in Functions » Degree","id":"98","title":"Degree"},"99":{"body":"let std::prelude::set_hint: expr, (int -> std::prelude::Query) -> () This function can be used to set a \"query function\" for a witness column. Query functions are used during witness generation and allow witness column cells to receive a value even though they are not uniquely constrained by the constraints. The first argument must be a witness column and the function can only be called once per witness column.","breadcrumbs":"pil » Built-in Functions » Hints","id":"99","title":"Hints"}},"length":119,"save":true},"fields":["title","body","breadcrumbs"],"index":{"body":{"root":{"0":{"*":{"*":{"0":{"df":1,"docs":{"78":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},",":{"1":{"df":1,"docs":{"58":{"tf":1.0}}},"df":0,"docs":{}},".":{".":{"1":{"0":{"0":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"5":{"0":{"0":{"0":{"0":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":23,"docs":{"106":{"tf":2.23606797749979},"13":{"tf":1.0},"14":{"tf":1.7320508075688772},"15":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.7320508075688772},"36":{"tf":1.0},"37":{"tf":2.6457513110645907},"41":{"tf":1.0},"42":{"tf":1.7320508075688772},"44":{"tf":2.449489742783178},"58":{"tf":1.0},"60":{"tf":1.7320508075688772},"64":{"tf":1.4142135623730951},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.4142135623730951},"68":{"tf":1.4142135623730951},"69":{"tf":1.4142135623730951},"70":{"tf":1.0},"88":{"tf":1.4142135623730951}},"x":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"73":{"tf":1.4142135623730951}}}}}},"1":{",":{"2":{",":{"3":{",":{"4":{",":{"5":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{",":{"2":{",":{"4":{",":{"6":{"df":1,"docs":{"105":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"4":{"8":{"5":{"7":{"6":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"8":{"5":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"3":{"6":{"2":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":1.0}}},"6":{"1":{"0":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":4,"docs":{"44":{"tf":1.0},"56":{"tf":1.0},"60":{"tf":1.0},"67":{"tf":1.0}}},"8":{"df":1,"docs":{"56":{"tf":1.0}}},"df":36,"docs":{"106":{"tf":2.23606797749979},"13":{"tf":1.7320508075688772},"14":{"tf":2.0},"20":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.7320508075688772},"36":{"tf":1.7320508075688772},"37":{"tf":1.7320508075688772},"41":{"tf":1.7320508075688772},"44":{"tf":2.23606797749979},"5":{"tf":1.4142135623730951},"52":{"tf":1.0},"56":{"tf":2.23606797749979},"57":{"tf":1.7320508075688772},"58":{"tf":2.0},"60":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951},"63":{"tf":1.4142135623730951},"64":{"tf":1.7320508075688772},"65":{"tf":2.449489742783178},"66":{"tf":1.0},"67":{"tf":2.449489742783178},"68":{"tf":1.4142135623730951},"69":{"tf":1.0},"70":{"tf":1.0},"72":{"tf":1.4142135623730951},"76":{"tf":1.4142135623730951},"78":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":2.23606797749979},"88":{"tf":1.4142135623730951},"91":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0}}},"2":{")":{")":{".":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"(":{"df":0,"docs":{},"|":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"x":{"df":1,"docs":{"105":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"*":{"*":{"2":{")":{"*":{"*":{"2":{")":{"*":{"*":{"2":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"49":{"tf":1.0}}},"df":0,"docs":{}},"2":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"3":{"2":{"df":1,"docs":{"95":{"tf":1.0}}},"df":0,"docs":{}},"6":{"4":{"df":1,"docs":{"95":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},".":{".":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"105":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"df":2,"docs":{"56":{"tf":1.0},"67":{"tf":1.7320508075688772}}},"1":{"df":1,"docs":{"56":{"tf":1.0}}},"3":{"2":{"0":{"5":{"7":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"4":{"df":1,"docs":{"56":{"tf":1.0}}},"5":{"7":{"6":{"4":{"7":{"df":1,"docs":{"106":{"tf":1.0}}},"8":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"9":{"8":{"3":{"2":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"6":{"0":{"7":{"8":{"2":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"0":{"3":{"9":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"4":{"0":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"1":{"0":{"2":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"4":{"4":{"df":2,"docs":{"106":{"tf":1.7320508075688772},"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"106":{"tf":1.0}}},"8":{"df":0,"docs":{},"g":{"b":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{}}},"^":{"1":{"8":{"df":2,"docs":{"106":{"tf":1.0},"5":{"tf":1.0}}},"df":0,"docs":{}},"2":{"0":{"df":1,"docs":{"5":{"tf":1.0}}},"2":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":1,"docs":{"118":{"tf":1.0}}},"b":{"df":1,"docs":{"118":{"tf":1.0}}},"df":16,"docs":{"106":{"tf":2.0},"14":{"tf":1.0},"44":{"tf":1.7320508075688772},"48":{"tf":1.0},"5":{"tf":1.7320508075688772},"56":{"tf":2.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.4142135623730951},"65":{"tf":1.7320508075688772},"69":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"85":{"tf":1.0},"87":{"tf":2.23606797749979},"91":{"tf":1.0}}},"3":{"+":{"2":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"1":{"3":{"4":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"106":{"tf":1.4142135623730951}}},"2":{"df":7,"docs":{"106":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"77":{"tf":1.7320508075688772}}},"3":{"df":1,"docs":{"56":{"tf":1.0}}},"df":13,"docs":{"106":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"44":{"tf":1.4142135623730951},"48":{"tf":1.0},"5":{"tf":1.0},"51":{"tf":1.0},"56":{"tf":2.0},"62":{"tf":1.0},"69":{"tf":1.0},"85":{"tf":1.0},"87":{"tf":2.0},"91":{"tf":1.4142135623730951}}},"4":{"1":{"9":{"4":{"3":{"0":{"4":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"df":1,"docs":{"106":{"tf":1.0}}},"4":{"c":{"d":{"9":{"1":{"c":{"1":{"2":{"0":{"3":{"3":{"a":{"d":{"4":{"c":{"6":{"a":{"6":{"b":{"1":{"9":{"7":{"9":{"3":{"b":{"7":{"3":{"df":0,"docs":{},"f":{"1":{"a":{"6":{"6":{"d":{"9":{"9":{"a":{"0":{"df":0,"docs":{},"e":{"0":{"b":{"df":0,"docs":{},"f":{"6":{"3":{"4":{"9":{"4":{"c":{"1":{"2":{"c":{"df":0,"docs":{},"e":{"b":{"1":{"df":0,"docs":{},"f":{"4":{"5":{"1":{"df":0,"docs":{},"e":{"c":{"9":{"4":{"5":{"2":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":1.0}}},"df":3,"docs":{"34":{"tf":1.0},"5":{"tf":1.0},"87":{"tf":1.7320508075688772}}},"5":{"df":3,"docs":{"5":{"tf":1.0},"56":{"tf":2.0},"87":{"tf":1.0}}},"6":{"2":{"df":1,"docs":{"106":{"tf":1.0}}},"8":{"4":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":1.0}}},"7":{"0":{"2":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"5":{"0":{"3":{"2":{"9":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"7":{"df":1,"docs":{"56":{"tf":1.0}}},"df":6,"docs":{"56":{"tf":1.4142135623730951},"66":{"tf":1.0},"69":{"tf":1.4142135623730951},"70":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.4142135623730951}}},"8":{"3":{"df":1,"docs":{"106":{"tf":1.0}}},"df":7,"docs":{"13":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"20":{"tf":2.0},"33":{"tf":1.4142135623730951},"36":{"tf":1.0},"37":{"tf":1.0}}},"9":{"8":{"df":1,"docs":{"106":{"tf":1.0}}},"9":{"df":1,"docs":{"106":{"tf":1.4142135623730951}}},"df":2,"docs":{"20":{"tf":1.4142135623730951},"69":{"tf":1.0}}},"_":{"df":13,"docs":{"106":{"tf":1.4142135623730951},"34":{"tf":1.0},"37":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.4142135623730951},"67":{"tf":1.0},"69":{"tf":2.449489742783178},"70":{"tf":1.4142135623730951},"81":{"tf":1.4142135623730951},"82":{"tf":1.0},"88":{"tf":1.0}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":1,"docs":{"16":{"tf":1.0}}}}}}}},"a":{"(":{"7":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.0}}}}}}},"[":{"0":{"df":1,"docs":{"81":{"tf":1.0}}},"1":{"df":1,"docs":{"81":{"tf":1.0}}},"7":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"^":{"2":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"b":{"c":{"df":1,"docs":{"62":{"tf":1.0}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"76":{"tf":1.0},"92":{"tf":1.0}}}},"v":{"df":2,"docs":{"106":{"tf":1.0},"15":{"tf":1.7320508075688772}}}},"s":{"(":{"df":0,"docs":{},"p":{"df":1,"docs":{"77":{"tf":1.0}}},"q":{"df":1,"docs":{"77":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"40":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"32":{"tf":1.0},"5":{"tf":1.0},"59":{"tf":1.0},"83":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"c":{"df":1,"docs":{"67":{"tf":2.0}},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"42":{"tf":1.0}}}},"s":{"df":0,"docs":{},"s":{"df":9,"docs":{"105":{"tf":1.0},"106":{"tf":2.6457513110645907},"34":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.7320508075688772},"62":{"tf":1.0},"78":{"tf":1.0},"81":{"tf":1.4142135623730951},"90":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"18":{"tf":1.7320508075688772}}}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"68":{"tf":1.0}}}},"v":{"df":3,"docs":{"54":{"tf":1.0},"56":{"tf":2.0},"58":{"tf":2.6457513110645907}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"106":{"tf":1.7320508075688772},"57":{"tf":1.0}}}},"df":0,"docs":{}}}},"d":{"d":{"(":{"2":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"4":{"<":{"0":{"df":1,"docs":{"58":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"58":{"tf":1.0}}},"5":{"(":{"2":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":1.0}}},"<":{"0":{"df":2,"docs":{"56":{"tf":1.0},"57":{"tf":1.0}}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"(":{"3":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"(":{"4":{"2":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"72":{"tf":1.0}}},"r":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"b":{"(":{"0":{"df":1,"docs":{"56":{"tf":1.0}}},"1":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"_":{"a":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"a":{"b":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"a":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}},"c":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":1,"docs":{"56":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":14,"docs":{"102":{"tf":1.0},"105":{"tf":1.0},"118":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951},"58":{"tf":1.7320508075688772},"60":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.4142135623730951},"72":{"tf":1.7320508075688772},"74":{"tf":1.4142135623730951},"83":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{".":{"a":{"d":{"d":{"(":{"df":0,"docs":{},"m":{",":{"df":0,"docs":{},"n":{"df":1,"docs":{"58":{"tf":1.0}}}},"df":1,"docs":{"58":{"tf":1.0}}},"x":{"df":1,"docs":{"58":{"tf":1.4142135623730951}}},"z":{"df":1,"docs":{"58":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"58":{"tf":1.0}}}},"i":{"df":0,"docs":{},"t":{"df":8,"docs":{"56":{"tf":1.0},"62":{"tf":1.0},"71":{"tf":1.0},"77":{"tf":1.4142135623730951},"78":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"85":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"105":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"u":{"b":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}}}},"df":2,"docs":{"64":{"tf":1.0},"67":{"tf":1.0}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"43":{"tf":1.0}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"115":{"tf":1.0}}}},"df":0,"docs":{}}}},"g":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"17":{"tf":1.0}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"43":{"tf":1.0}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":4,"docs":{"15":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"24":{"tf":1.0},"6":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"109":{"tf":1.0}}},"r":{"df":4,"docs":{"113":{"tf":1.0},"114":{"tf":1.0},"117":{"tf":2.23606797749979},"118":{"tf":2.23606797749979}}}},"l":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"r":{"a":{"df":5,"docs":{"61":{"tf":1.4142135623730951},"67":{"tf":2.0},"73":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"o":{"c":{":":{":":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"c":{":":{":":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"c":{"df":2,"docs":{"105":{"tf":1.0},"106":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":2,"docs":{"105":{"tf":1.0},"106":{"tf":1.0}}},"df":0,"docs":{},"w":{"df":21,"docs":{"101":{"tf":1.0},"32":{"tf":1.0},"44":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"67":{"tf":1.4142135623730951},"73":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.4142135623730951},"78":{"tf":1.0},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"85":{"tf":1.4142135623730951},"99":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"i":{"df":2,"docs":{"104":{"tf":1.0},"93":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"85":{"tf":1.0}}}}}},"w":{"a":{"df":0,"docs":{},"y":{"df":7,"docs":{"64":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.4142135623730951},"83":{"tf":1.0}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"77":{"tf":1.4142135623730951}}}}}}},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"15":{"tf":1.0}}}}}},"d":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"20":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":7,"docs":{"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"18":{"tf":1.0},"33":{"tf":2.0},"44":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"38":{"tf":1.0}},"e":{"(":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"38":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"15":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":3,"docs":{"69":{"tf":1.4142135623730951},"82":{"tf":1.0},"92":{"tf":1.0}}}},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"33":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"p":{"df":3,"docs":{"18":{"tf":1.4142135623730951},"24":{"tf":1.0},"26":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"71":{"tf":1.0}}}},"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"94":{"tf":1.0}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"i":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"'":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}},"df":1,"docs":{"0":{"tf":1.0}}},"df":5,"docs":{"101":{"tf":1.0},"113":{"tf":1.0},"116":{"tf":1.0},"83":{"tf":1.4142135623730951},"96":{"tf":1.4142135623730951}}}}}},"r":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":4,"docs":{"105":{"tf":1.0},"34":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"10":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"103":{"tf":1.0},"113":{"tf":1.0},"32":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":17,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0},"38":{"tf":1.4142135623730951},"43":{"tf":1.0},"56":{"tf":1.0},"77":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":1.7320508075688772},"97":{"tf":1.0},"99":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"73":{"tf":1.0},"78":{"tf":1.4142135623730951}}}}}}}},"m":{"df":3,"docs":{"65":{"tf":1.4142135623730951},"69":{"tf":1.4142135623730951},"70":{"tf":2.0}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"[":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"34":{"tf":1.0}}}}}},"a":{"df":0,"docs":{},"y":{"df":15,"docs":{"18":{"tf":1.0},"34":{"tf":1.0},"60":{"tf":2.0},"62":{"tf":1.4142135623730951},"67":{"tf":1.7320508075688772},"69":{"tf":2.449489742783178},"70":{"tf":1.4142135623730951},"71":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":3.7416573867739413},"87":{"tf":1.0},"91":{"tf":1.4142135623730951},"94":{"tf":1.0}}}},"df":2,"docs":{"34":{"tf":1.4142135623730951},"56":{"tf":1.0}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"14":{"tf":1.0},"15":{"tf":1.7320508075688772},"18":{"tf":1.0},"5":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"k":{"df":2,"docs":{"105":{"tf":1.0},"97":{"tf":1.0}}},"m":{"df":10,"docs":{"103":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0},"113":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"22":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"32":{"tf":1.4142135623730951},"35":{"tf":1.0},"9":{"tf":1.7320508075688772}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"106":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"!":{"(":{"a":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"a":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"42":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"!":{"(":{"d":{"a":{"df":0,"docs":{},"t":{"a":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{":":{":":{"<":{"df":0,"docs":{},"u":{"3":{"2":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"105":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":3.7416573867739413}}}},"z":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":5,"docs":{"13":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"44":{"tf":1.7320508075688772},"49":{"tf":1.0}}}}}}},"df":4,"docs":{"13":{"tf":1.0},"36":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":13,"docs":{"13":{"tf":1.0},"36":{"tf":1.0},"42":{"tf":2.0},"48":{"tf":2.23606797749979},"52":{"tf":1.0},"54":{"tf":1.4142135623730951},"56":{"tf":1.0},"63":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":2.0},"90":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"56":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.0}}}}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"31":{"tf":1.0},"43":{"tf":1.0}}}},"df":1,"docs":{"6":{"tf":1.0}}}}}},"v":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":5,"docs":{"104":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.0},"34":{"tf":1.7320508075688772},"68":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"18":{"tf":1.0},"64":{"tf":1.0}}},"df":0,"docs":{}}}},"w":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"106":{"tf":1.0}}}},"df":0,"docs":{}}},"b":{"(":{"df":0,"docs":{},"i":{"df":1,"docs":{"88":{"tf":1.0}}}},".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.0}}}}}}},"a":{"b":{"df":0,"docs":{},"y":{"b":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"110":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"44":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"d":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":5,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}}}},"df":14,"docs":{"106":{"tf":2.0},"109":{"tf":1.4142135623730951},"11":{"tf":1.0},"15":{"tf":2.0},"17":{"tf":2.0},"18":{"tf":3.7416573867739413},"20":{"tf":2.0},"23":{"tf":1.7320508075688772},"24":{"tf":2.6457513110645907},"25":{"tf":2.6457513110645907},"26":{"tf":2.6457513110645907},"27":{"tf":2.6457513110645907},"28":{"tf":2.23606797749979},"73":{"tf":1.0}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"2":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"43":{"tf":1.0},"56":{"tf":1.0}}},"i":{"c":{"df":2,"docs":{"33":{"tf":1.0},"87":{"tf":1.0}}},"df":0,"docs":{}}}},"b":{"df":8,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0}}},"df":18,"docs":{"106":{"tf":2.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"33":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":2.0},"48":{"tf":1.4142135623730951},"53":{"tf":1.0},"56":{"tf":3.4641016151377544},"57":{"tf":2.8284271247461903},"58":{"tf":1.7320508075688772},"62":{"tf":1.4142135623730951},"69":{"tf":2.6457513110645907},"73":{"tf":1.0},"85":{"tf":1.0}},"e":{"df":1,"docs":{"74":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"15":{"tf":1.7320508075688772},"17":{"tf":1.0},"18":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"37":{"tf":1.4142135623730951},"41":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"v":{"df":1,"docs":{"40":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"55":{"tf":1.0},"57":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":6,"docs":{"105":{"tf":1.0},"15":{"tf":1.4142135623730951},"18":{"tf":1.0},"20":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.7320508075688772}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"5":{"tf":1.0}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"16":{"tf":1.0},"19":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":3,"docs":{"18":{"tf":1.0},"34":{"tf":1.0},"73":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":5,"docs":{"15":{"tf":1.0},"18":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.7320508075688772},"9":{"tf":1.0}}}}},"d":{"df":3,"docs":{"33":{"tf":1.0},"64":{"tf":1.0},"69":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":2,"docs":{"73":{"tf":1.0},"77":{"tf":2.8284271247461903}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"62":{"tf":1.7320508075688772}}}}}}},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":7,"docs":{"116":{"tf":1.7320508075688772},"37":{"tf":1.7320508075688772},"61":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.7320508075688772},"68":{"tf":1.0},"69":{"tf":1.0}}}},"df":0,"docs":{}}},"n":{"2":{"5":{"4":{"df":14,"docs":{"111":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":2.449489742783178},"17":{"tf":1.4142135623730951},"18":{"tf":2.8284271247461903},"20":{"tf":2.23606797749979},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"o":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"62":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"6":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"37":{"tf":1.0}}},"l":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"68":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":4,"docs":{"102":{"tf":3.7416573867739413},"71":{"tf":1.0},"74":{"tf":1.4142135623730951},"76":{"tf":1.4142135623730951}},"e":{"a":{"df":0,"docs":{},"n":{"df":6,"docs":{"56":{"tf":1.4142135623730951},"58":{"tf":1.7320508075688772},"68":{"tf":1.0},"76":{"tf":1.4142135623730951},"77":{"tf":1.0},"78":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"106":{"tf":3.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"t":{"df":0,"docs":{},"h":{"df":8,"docs":{"10":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.0},"4":{"tf":1.0},"57":{"tf":1.0},"68":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"71":{"tf":1.0},"84":{"tf":1.7320508075688772}}}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"71":{"tf":1.0},"72":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}},"r":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"62":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"19":{"tf":1.0}}}},"df":0,"docs":{}}}}},"n":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"16":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"u":{"df":1,"docs":{"23":{"tf":1.0}},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"\"":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"i":{"df":0,"docs":{},"l":{"d":{"df":7,"docs":{"10":{"tf":1.0},"106":{"tf":1.7320508075688772},"11":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"5":{"tf":1.0},"6":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":13,"docs":{"0":{"tf":1.0},"100":{"tf":1.4142135623730951},"109":{"tf":1.0},"6":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"#":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"f":{"df":1,"docs":{"73":{"tf":1.4142135623730951}}}},"df":2,"docs":{"18":{"tf":1.0},"73":{"tf":2.0}}}}}},"c":{"(":{"df":0,"docs":{},"i":{"df":1,"docs":{"88":{"tf":1.0}}}},".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.0}}}}}}},"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":18,"docs":{"105":{"tf":1.0},"15":{"tf":1.0},"22":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":1.0},"44":{"tf":1.0},"54":{"tf":1.7320508075688772},"55":{"tf":1.0},"56":{"tf":2.8284271247461903},"58":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951},"62":{"tf":1.0},"67":{"tf":1.4142135623730951},"68":{"tf":1.4142135623730951},"82":{"tf":1.0},"84":{"tf":1.4142135623730951},"99":{"tf":1.0}}}},"n":{"'":{"df":0,"docs":{},"t":{"df":1,"docs":{"33":{"tf":1.0}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"65":{"tf":1.0},"82":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":8,"docs":{"10":{"tf":1.0},"11":{"tf":2.23606797749979},"12":{"tf":1.7320508075688772},"16":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"3":{"tf":2.23606797749979},"4":{"tf":1.0},"5":{"tf":1.4142135623730951}}}}},"s":{"df":0,"docs":{},"e":{"df":10,"docs":{"106":{"tf":1.4142135623730951},"14":{"tf":1.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"19":{"tf":1.0},"68":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"83":{"tf":1.0},"93":{"tf":1.0}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"69":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"s":{"df":3,"docs":{"76":{"tf":1.0},"78":{"tf":1.0},"93":{"tf":1.0}}}}},"d":{"df":2,"docs":{"11":{"tf":1.0},"12":{"tf":1.0}}},"df":8,"docs":{"10":{"tf":1.0},"11":{"tf":1.4142135623730951},"33":{"tf":1.0},"56":{"tf":2.8284271247461903},"57":{"tf":2.6457513110645907},"58":{"tf":1.7320508075688772},"69":{"tf":2.449489742783178},"85":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":2,"docs":{"60":{"tf":1.0},"99":{"tf":1.0}}}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"39":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"105":{"tf":1.0},"34":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":1.4142135623730951},"71":{"tf":1.0}}}}},"df":0,"docs":{}}}},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"97":{"tf":2.0}}}}}}},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"5":{"tf":2.449489742783178}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"15":{"tf":1.0}}}},"c":{"df":0,"docs":{},"k":{"df":7,"docs":{"105":{"tf":1.0},"19":{"tf":1.0},"37":{"tf":1.0},"44":{"tf":1.7320508075688772},"5":{"tf":1.0},"69":{"tf":1.4142135623730951},"92":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"72":{"tf":1.0},"81":{"tf":1.0}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"97":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":3,"docs":{"26":{"tf":1.0},"27":{"tf":1.0},"78":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"_":{"0":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"106":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"106":{"tf":1.0}}},"1":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"106":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"106":{"tf":1.0}}},"2":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"106":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"2":{"(":{"1":{"8":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":2,"docs":{"106":{"tf":4.69041575982343},"5":{"tf":2.23606797749979}}}}}},"i":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"15":{"tf":1.0},"18":{"tf":2.449489742783178},"76":{"tf":1.0}}}}}},"df":0,"docs":{}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"105":{"tf":1.0},"5":{"tf":1.4142135623730951}}}},"p":{"df":1,"docs":{"31":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":8,"docs":{"11":{"tf":2.449489742783178},"12":{"tf":1.7320508075688772},"13":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"22":{"tf":1.0}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":2,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"82":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"44":{"tf":2.8284271247461903},"48":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.4142135623730951}}}},"o":{"d":{"df":0,"docs":{},"e":{"df":10,"docs":{"1":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"33":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0},"96":{"tf":1.0}}}},"df":1,"docs":{"6":{"tf":1.0}},"l":{"[":{"df":0,"docs":{},"k":{"df":2,"docs":{"60":{"tf":1.4142135623730951},"73":{"tf":1.0}}}},"df":15,"docs":{"33":{"tf":1.4142135623730951},"37":{"tf":2.0},"44":{"tf":1.4142135623730951},"56":{"tf":2.8284271247461903},"57":{"tf":3.0},"58":{"tf":3.7416573867739413},"60":{"tf":2.449489742783178},"67":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":2.449489742783178},"83":{"tf":1.4142135623730951},"86":{"tf":1.4142135623730951},"87":{"tf":1.4142135623730951},"88":{"tf":1.4142135623730951},"96":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"81":{"tf":1.0}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"n":{"df":25,"docs":{"14":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":2.23606797749979},"34":{"tf":1.0},"37":{"tf":2.0},"52":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.7320508075688772},"57":{"tf":2.449489742783178},"58":{"tf":1.4142135623730951},"60":{"tf":4.123105625617661},"64":{"tf":1.0},"67":{"tf":2.449489742783178},"68":{"tf":2.6457513110645907},"71":{"tf":1.4142135623730951},"73":{"tf":3.1622776601683795},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":2.449489742783178},"86":{"tf":2.0},"87":{"tf":2.0},"88":{"tf":1.0},"96":{"tf":1.7320508075688772},"98":{"tf":1.4142135623730951},"99":{"tf":2.0}}}}}},"m":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"106":{"tf":1.0},"83":{"tf":2.0},"87":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":3,"docs":{"103":{"tf":1.0},"106":{"tf":1.0},"109":{"tf":1.4142135623730951}}},"m":{"a":{"df":2,"docs":{"23":{"tf":1.0},"25":{"tf":1.0}},"n":{"d":{"df":7,"docs":{"11":{"tf":1.0},"12":{"tf":1.0},"15":{"tf":1.7320508075688772},"17":{"tf":1.0},"18":{"tf":1.0},"21":{"tf":1.7320508075688772},"22":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"106":{"tf":1.0},"24":{"tf":1.0},"37":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":2,"docs":{"78":{"tf":1.0},"81":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"62":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.7320508075688772}}}}}}},"t":{"df":2,"docs":{"83":{"tf":1.0},"84":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":18,"docs":{"10":{"tf":1.0},"105":{"tf":2.0},"106":{"tf":2.0},"113":{"tf":1.0},"114":{"tf":1.4142135623730951},"14":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.0},"4":{"tf":1.0},"43":{"tf":1.0},"6":{"tf":1.0},"71":{"tf":1.0},"9":{"tf":1.4142135623730951},"90":{"tf":1.4142135623730951}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"72":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"43":{"tf":1.0}}},"x":{"df":7,"docs":{"0":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"56":{"tf":1.0},"65":{"tf":1.0},"80":{"tf":1.0}}}},"i":{"c":{"df":2,"docs":{"34":{"tf":1.0},"73":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"60":{"tf":1.4142135623730951},"69":{"tf":2.23606797749979},"70":{"tf":1.0}}},"s":{"df":2,"docs":{"54":{"tf":1.0},"80":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":6,"docs":{"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"25":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"27":{"tf":1.7320508075688772},"28":{"tf":1.7320508075688772}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"15":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"t":{"df":16,"docs":{"105":{"tf":1.0},"106":{"tf":2.449489742783178},"14":{"tf":2.0},"15":{"tf":2.23606797749979},"16":{"tf":1.0},"18":{"tf":2.449489742783178},"23":{"tf":1.0},"34":{"tf":1.0},"37":{"tf":1.0},"5":{"tf":1.0},"56":{"tf":1.0},"60":{"tf":1.0},"68":{"tf":1.0},"73":{"tf":1.0},"92":{"tf":1.0},"96":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":1,"docs":{"16":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}},"n":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":3,"docs":{"79":{"tf":1.0},"81":{"tf":1.0},"87":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"35":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"37":{"tf":1.0},"56":{"tf":1.0},"66":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"56":{"tf":1.0}}}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"10":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"18":{"tf":1.0}}}}},"j":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"76":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}}}},"n":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"101":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"(":{"(":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"40":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"80":{"tf":1.4142135623730951},"92":{"tf":1.0}}}}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":9,"docs":{"116":{"tf":1.0},"15":{"tf":1.4142135623730951},"37":{"tf":1.0},"60":{"tf":1.7320508075688772},"61":{"tf":1.0},"67":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"87":{"tf":1.0}}}}},"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"101":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{"_":{"b":{"df":0,"docs":{},"i":{"df":1,"docs":{"34":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"_":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"64":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":12,"docs":{"114":{"tf":1.0},"115":{"tf":1.4142135623730951},"116":{"tf":1.0},"32":{"tf":1.0},"35":{"tf":1.0},"37":{"tf":1.7320508075688772},"57":{"tf":1.0},"58":{"tf":2.23606797749979},"60":{"tf":1.0},"67":{"tf":1.4142135623730951},"68":{"tf":1.0},"99":{"tf":1.0}},"t":{"df":26,"docs":{"101":{"tf":2.23606797749979},"115":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"15":{"tf":1.0},"23":{"tf":1.0},"34":{"tf":1.0},"37":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772},"58":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951},"64":{"tf":1.7320508075688772},"67":{"tf":2.449489742783178},"68":{"tf":2.23606797749979},"73":{"tf":1.4142135623730951},"78":{"tf":1.0},"79":{"tf":1.0},"83":{"tf":1.7320508075688772},"92":{"tf":1.4142135623730951},"94":{"tf":1.0},"99":{"tf":1.0}}}}}},"df":6,"docs":{"101":{"tf":2.23606797749979},"102":{"tf":1.0},"64":{"tf":2.0},"67":{"tf":1.0},"68":{"tf":3.1622776601683795},"94":{"tf":1.4142135623730951}},"u":{"c":{"df":0,"docs":{},"t":{"df":6,"docs":{"38":{"tf":1.4142135623730951},"80":{"tf":1.4142135623730951},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.7320508075688772},"97":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"85":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":12,"docs":{"117":{"tf":1.0},"18":{"tf":1.7320508075688772},"21":{"tf":1.0},"23":{"tf":2.0},"24":{"tf":2.0},"25":{"tf":1.7320508075688772},"26":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"5":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"80":{"tf":1.0},"81":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"21":{"tf":1.0},"79":{"tf":1.0}}}},"x":{"df":0,"docs":{},"t":{"df":8,"docs":{"61":{"tf":1.4142135623730951},"68":{"tf":1.0},"71":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"88":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":4,"docs":{"0":{"tf":1.0},"106":{"tf":3.0},"44":{"tf":1.0},"70":{"tf":1.0}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"17":{"tf":1.7320508075688772},"18":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"1":{"tf":1.0},"7":{"tf":1.0}}}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"93":{"tf":1.7320508075688772}}}},"r":{"df":0,"docs":{},"s":{"df":2,"docs":{"73":{"tf":1.0},"93":{"tf":1.0}}},"t":{"df":5,"docs":{"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"73":{"tf":1.0},"78":{"tf":1.0},"93":{"tf":1.7320508075688772}}}}}}},"p":{"df":0,"docs":{},"i":{"df":4,"docs":{"101":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":1.0},"73":{"tf":1.0}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"5":{"tf":1.0},"70":{"tf":1.0},"92":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"36":{"tf":1.0},"40":{"tf":2.449489742783178}}}}}},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"18":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"17":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"u":{"=":{"df":0,"docs":{},"n":{"df":1,"docs":{"11":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"'":{"df":1,"docs":{"16":{"tf":1.0}}},"df":6,"docs":{"105":{"tf":1.0},"106":{"tf":1.7320508075688772},"11":{"tf":1.0},"16":{"tf":1.7320508075688772},"5":{"tf":1.7320508075688772},"9":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":17,"docs":{"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"16":{"tf":2.23606797749979},"17":{"tf":1.4142135623730951},"18":{"tf":1.7320508075688772},"3":{"tf":1.0},"34":{"tf":1.4142135623730951},"43":{"tf":1.0},"5":{"tf":1.7320508075688772},"60":{"tf":1.0},"64":{"tf":2.0},"67":{"tf":1.0},"68":{"tf":1.7320508075688772},"69":{"tf":1.0},"73":{"tf":1.0},"85":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"v":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"23":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":1,"docs":{"23":{"tf":2.6457513110645907}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":13,"docs":{"14":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.0},"43":{"tf":1.0},"56":{"tf":1.0},"60":{"tf":1.0},"68":{"tf":1.4142135623730951},"71":{"tf":1.0},"81":{"tf":1.0},"84":{"tf":1.0},"9":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"5":{"tf":1.4142135623730951}}}}}}},"y":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"106":{"tf":1.0}}}},"df":0,"docs":{}}},"d":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.0}}}}}}},"a":{"df":0,"docs":{},"t":{"a":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"105":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":9,"docs":{"105":{"tf":1.0},"117":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"5":{"tf":2.0},"65":{"tf":1.0},"85":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":9,"docs":{"106":{"tf":1.7320508075688772},"15":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"33":{"tf":1.0},"85":{"tf":1.0}},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":4,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"79":{"tf":1.0},"94":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"18":{"tf":1.0},"23":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"l":{"a":{"df":0,"docs":{},"r":{"df":16,"docs":{"34":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"40":{"tf":1.0},"41":{"tf":1.0},"43":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":2.23606797749979},"60":{"tf":2.0},"61":{"tf":1.0},"63":{"tf":1.0},"67":{"tf":1.0},"71":{"tf":1.7320508075688772},"73":{"tf":2.8284271247461903},"85":{"tf":1.4142135623730951},"86":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"r":{"(":{"a":{"df":2,"docs":{"13":{"tf":1.0},"36":{"tf":1.0}}},"df":0,"docs":{}},"df":2,"docs":{"13":{"tf":1.0},"36":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"13":{"tf":1.0},"36":{"tf":1.0},"44":{"tf":1.0}}}}}}}}},"d":{"df":0,"docs":{},"u":{"c":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":1,"docs":{"69":{"tf":1.0}},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":16,"docs":{"106":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":2.8284271247461903},"24":{"tf":1.4142135623730951},"25":{"tf":1.7320508075688772},"26":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"30":{"tf":1.0},"31":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.4142135623730951},"5":{"tf":1.0},"65":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":27,"docs":{"100":{"tf":1.0},"101":{"tf":1.0},"105":{"tf":1.0},"117":{"tf":1.4142135623730951},"118":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":2.23606797749979},"34":{"tf":2.449489742783178},"36":{"tf":1.0},"37":{"tf":1.4142135623730951},"38":{"tf":1.0},"40":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.4142135623730951},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":2.6457513110645907},"68":{"tf":1.4142135623730951},"72":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.4142135623730951},"85":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"90":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"48":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.7320508075688772},"98":{"tf":1.0}}}}}}},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":15,"docs":{"117":{"tf":1.0},"118":{"tf":2.449489742783178},"13":{"tf":1.0},"15":{"tf":1.4142135623730951},"20":{"tf":1.0},"23":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"36":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"44":{"tf":1.0},"56":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"98":{"tf":2.0}},"e":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"23":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"64":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"58":{"tf":1.0}}}}}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":3,"docs":{"68":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":7,"docs":{"10":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"56":{"tf":1.0},"57":{"tf":1.0},"61":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0}}},"df":0,"docs":{}}}},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"5":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":3,"docs":{"0":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.0}}}}},"k":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"10":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"64":{"tf":1.0},"65":{"tf":1.0},"69":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":9,"docs":{"106":{"tf":1.0},"17":{"tf":1.0},"34":{"tf":1.0},"37":{"tf":1.0},"5":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"68":{"tf":1.0},"71":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"71":{"tf":1.0}}}}}}}},"v":{"df":1,"docs":{"10":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":3,"docs":{"10":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0}}}}}},"i":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"59":{"tf":1.0}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":14,"docs":{"106":{"tf":1.4142135623730951},"13":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"33":{"tf":1.4142135623730951},"61":{"tf":1.0},"73":{"tf":1.4142135623730951},"85":{"tf":1.0},"88":{"tf":1.0},"97":{"tf":1.4142135623730951},"98":{"tf":1.0}}}}}},"r":{"df":6,"docs":{"15":{"tf":1.0},"24":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951}},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":3,"docs":{"17":{"tf":1.0},"20":{"tf":1.0},"83":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":10,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"17":{"tf":1.0},"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"33":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"s":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"70":{"tf":1.0}}}}}}},"df":0,"docs":{},"j":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"76":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":2,"docs":{"62":{"tf":1.0},"77":{"tf":1.7320508075688772}}}}}},"o":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":6,"docs":{"2":{"tf":1.0},"21":{"tf":1.0},"31":{"tf":1.0},"59":{"tf":1.4142135623730951},"79":{"tf":1.0},"8":{"tf":1.0}}}}}}}},"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"6":{"tf":1.0}}}}},"df":0,"docs":{}},"n":{"'":{"df":0,"docs":{},"t":{"df":1,"docs":{"106":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":3,"docs":{"106":{"tf":1.0},"60":{"tf":1.0},"64":{"tf":1.0}}}},"u":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"62":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"(":{"3":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"n":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"73":{"tf":1.0}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"5":{"tf":1.0}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":1,"docs":{"106":{"tf":1.7320508075688772}}}},"r":{"df":0,"docs":{},"e":{"df":3,"docs":{"73":{"tf":1.0},"94":{"tf":1.0},"99":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":3,"docs":{"23":{"tf":1.0},"36":{"tf":1.4142135623730951},"81":{"tf":2.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"g":{"df":4,"docs":{"105":{"tf":1.0},"34":{"tf":1.0},"62":{"tf":1.7320508075688772},"64":{"tf":1.0}}}},"6":{"a":{"6":{"df":0,"docs":{},"f":{"d":{"6":{"3":{"d":{"8":{"6":{"4":{"c":{"7":{"3":{"4":{"d":{"6":{"a":{"4":{"d":{"df":0,"docs":{},"f":{"4":{"9":{"8":{"8":{"df":0,"docs":{},"f":{"7":{"3":{"3":{"7":{"3":{"8":{"7":{"9":{"0":{"2":{"6":{"2":{"a":{"df":0,"docs":{},"f":{"9":{"c":{"7":{"b":{"0":{"1":{"4":{"a":{"1":{"c":{"0":{"3":{"6":{"6":{"7":{"9":{"b":{"a":{"df":0,"docs":{},"f":{"1":{"1":{"2":{"5":{"df":1,"docs":{"106":{"tf":2.23606797749979}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"c":{"df":0,"docs":{},"h":{"df":15,"docs":{"106":{"tf":1.7320508075688772},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.7320508075688772},"14":{"tf":1.0},"18":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":1.4142135623730951},"40":{"tf":1.7320508075688772},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"81":{"tf":1.0},"85":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"82":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"i":{"df":2,"docs":{"17":{"tf":1.0},"73":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"10":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0}}}}}}}},"df":1,"docs":{"67":{"tf":2.0}},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"82":{"tf":1.4142135623730951},"92":{"tf":1.0},"94":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"i":{"df":2,"docs":{"0":{"tf":1.0},"15":{"tf":1.0}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"112":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"62":{"tf":1.0}}}}},"df":18,"docs":{"117":{"tf":1.0},"23":{"tf":1.0},"41":{"tf":1.0},"51":{"tf":1.7320508075688772},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":2.8284271247461903},"80":{"tf":1.4142135623730951},"81":{"tf":1.7320508075688772},"82":{"tf":1.0},"83":{"tf":1.0},"88":{"tf":1.0},"93":{"tf":1.7320508075688772}}}}}}},"f":{"df":1,"docs":{"105":{"tf":1.0}}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":5,"docs":{"118":{"tf":1.0},"69":{"tf":1.7320508075688772},"70":{"tf":1.0},"80":{"tf":1.4142135623730951},"94":{"tf":1.0}}}}}},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":10,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"106":{"tf":1.0},"11":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"19":{"tf":1.0}}}},"df":0,"docs":{}}}}},"d":{"df":4,"docs":{"107":{"tf":1.0},"44":{"tf":1.7320508075688772},"69":{"tf":1.0},"94":{"tf":1.0}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"c":{"df":2,"docs":{"116":{"tf":1.4142135623730951},"34":{"tf":1.0}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":1,"docs":{"18":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"20":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"20":{"tf":1.0},"68":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"m":{"df":5,"docs":{"101":{"tf":1.0},"69":{"tf":1.7320508075688772},"70":{"tf":1.0},"71":{"tf":1.0},"85":{"tf":3.0}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"85":{"tf":1.4142135623730951}},"e":{":":{":":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"1":{"df":1,"docs":{"85":{"tf":1.4142135623730951}}},"2":{"df":1,"docs":{"85":{"tf":1.0}}},"3":{"(":{"3":{"df":1,"docs":{"85":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"4":{"(":{"1":{"df":1,"docs":{"85":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"v":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"16":{"tf":1.0},"5":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"73":{"tf":1.0},"82":{"tf":1.0}}}}}}}},"q":{"df":2,"docs":{"102":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951}},"u":{"a":{"df":0,"docs":{},"l":{"df":5,"docs":{"20":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.4142135623730951},"77":{"tf":2.0},"78":{"tf":1.0}},"s":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"67":{"tf":1.4142135623730951}}},"y":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"(":{"1":{"6":{"df":1,"docs":{"67":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":7,"docs":{"22":{"tf":1.0},"71":{"tf":1.0},"77":{"tf":2.23606797749979},"78":{"tf":1.4142135623730951},"81":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":3,"docs":{"83":{"tf":1.0},"84":{"tf":1.0},"97":{"tf":1.0}}}}}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":9,"docs":{"10":{"tf":1.0},"106":{"tf":1.7320508075688772},"112":{"tf":1.4142135623730951},"15":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"106":{"tf":2.0}}}}}},"t":{"c":{"df":1,"docs":{"81":{"tf":1.0}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"'":{"df":1,"docs":{"17":{"tf":1.0}}},"df":4,"docs":{"15":{"tf":2.23606797749979},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.0}}}}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":16,"docs":{"101":{"tf":1.0},"58":{"tf":1.0},"61":{"tf":1.4142135623730951},"65":{"tf":1.0},"66":{"tf":1.4142135623730951},"67":{"tf":2.0},"68":{"tf":1.4142135623730951},"70":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.4142135623730951},"76":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"92":{"tf":1.4142135623730951},"94":{"tf":1.4142135623730951},"96":{"tf":1.7320508075688772}}}},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"60":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":6,"docs":{"15":{"tf":1.0},"33":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.4142135623730951},"64":{"tf":1.0},"99":{"tf":1.0}}},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"60":{"tf":1.0}}}},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"61":{"tf":1.0},"64":{"tf":1.4142135623730951}}}}}}}}},"m":{"df":3,"docs":{"108":{"tf":1.4142135623730951},"15":{"tf":1.0},"17":{"tf":1.7320508075688772}}}},"x":{"a":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"69":{"tf":1.7320508075688772},"78":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"18":{"tf":1.0},"69":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":36,"docs":{"105":{"tf":1.4142135623730951},"106":{"tf":1.4142135623730951},"15":{"tf":2.0},"16":{"tf":2.23606797749979},"17":{"tf":2.23606797749979},"18":{"tf":1.7320508075688772},"19":{"tf":1.4142135623730951},"20":{"tf":2.23606797749979},"34":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"42":{"tf":1.0},"56":{"tf":1.4142135623730951},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.7320508075688772},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.4142135623730951},"69":{"tf":1.0},"70":{"tf":1.4142135623730951},"72":{"tf":1.0},"77":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.7320508075688772},"91":{"tf":1.0},"92":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.4142135623730951}}}}}},"c":{"df":0,"docs":{},"e":{"df":2,"docs":{"17":{"tf":1.0},"18":{"tf":1.0}},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"40":{"tf":1.0},"52":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"77":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":14,"docs":{"0":{"tf":1.0},"106":{"tf":3.0},"14":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"31":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"40":{"tf":1.4142135623730951},"42":{"tf":1.0},"5":{"tf":2.23606797749979},"56":{"tf":1.0},"9":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"106":{"tf":1.0}}}}}}},"df":0,"docs":{}},"h":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"69":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"6":{"tf":1.0},"78":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":8,"docs":{"18":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":1.0},"73":{"tf":1.4142135623730951},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.4142135623730951},"94":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"5":{"tf":1.0},"6":{"tf":1.0}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"106":{"tf":1.0}}}}}}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"114":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":5,"docs":{"34":{"tf":1.0},"43":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.0},"71":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"67":{"tf":1.0},"77":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":5,"docs":{"62":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.4142135623730951},"78":{"tf":1.0},"83":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"t":{"df":6,"docs":{"17":{"tf":1.0},"18":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951}}}},"s":{"df":4,"docs":{"16":{"tf":1.0},"20":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951}}}},"r":{"df":14,"docs":{"101":{"tf":2.6457513110645907},"102":{"tf":2.0},"34":{"tf":1.7320508075688772},"64":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.0},"71":{"tf":1.4142135623730951},"73":{"tf":2.6457513110645907},"74":{"tf":2.6457513110645907},"83":{"tf":2.449489742783178},"93":{"tf":2.0},"96":{"tf":1.0},"97":{"tf":1.0},"99":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":21,"docs":{"101":{"tf":1.0},"34":{"tf":2.23606797749979},"48":{"tf":1.4142135623730951},"50":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"56":{"tf":1.4142135623730951},"58":{"tf":1.0},"60":{"tf":1.4142135623730951},"61":{"tf":2.449489742783178},"62":{"tf":2.23606797749979},"64":{"tf":2.8284271247461903},"65":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"67":{"tf":3.3166247903554},"69":{"tf":1.0},"71":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"78":{"tf":1.0},"82":{"tf":1.7320508075688772},"83":{"tf":3.605551275463989}}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":6,"docs":{"105":{"tf":1.0},"106":{"tf":1.7320508075688772},"115":{"tf":1.0},"23":{"tf":1.0},"33":{"tf":1.0},"38":{"tf":1.0}}}}},"r":{"a":{"df":1,"docs":{"17":{"tf":1.0}}},"df":0,"docs":{}}}}},"f":{"(":{"(":{"1":{"df":1,"docs":{"69":{"tf":1.0}}},"6":{"df":1,"docs":{"69":{"tf":1.0}}},"df":0,"docs":{}},"0":{"df":1,"docs":{"67":{"tf":1.7320508075688772}}},"1":{"df":1,"docs":{"67":{"tf":1.7320508075688772}}},"7":{"df":1,"docs":{"64":{"tf":1.0}}},"8":{"df":1,"docs":{"70":{"tf":1.0}}},"df":0,"docs":{},"i":{"df":1,"docs":{"70":{"tf":1.0}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"67":{"tf":2.0}}}}}}}}},"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{":":{":":{"<":{"b":{"df":0,"docs":{},"n":{"2":{"5":{"4":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"14":{"tf":1.0},"60":{"tf":1.0},"98":{"tf":1.0}}}},"l":{"df":0,"docs":{},"s":{"df":3,"docs":{"23":{"tf":2.0},"33":{"tf":1.0},"66":{"tf":1.4142135623730951}}}},"r":{"df":1,"docs":{"17":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"5":{"tf":1.0}}}}},"df":9,"docs":{"105":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"23":{"tf":1.0},"64":{"tf":1.4142135623730951},"67":{"tf":2.449489742783178},"69":{"tf":1.0},"70":{"tf":1.0},"83":{"tf":2.0}},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"1":{"tf":1.0},"10":{"tf":1.0},"11":{"tf":2.0},"61":{"tf":1.0},"7":{"tf":1.0}}}}}},"df":11,"docs":{"60":{"tf":1.0},"69":{"tf":1.4142135623730951},"71":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":2.6457513110645907},"77":{"tf":1.4142135623730951},"78":{"tf":2.23606797749979},"80":{"tf":1.0},"82":{"tf":1.7320508075688772},"93":{"tf":2.0},"96":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"107":{"tf":1.0},"108":{"tf":1.0}}}},"w":{"df":3,"docs":{"109":{"tf":1.0},"18":{"tf":1.0},"39":{"tf":1.0}}}},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"105":{"tf":1.0}}}},"i":{"b":{"(":{"df":0,"docs":{},"i":{"df":1,"docs":{"65":{"tf":1.4142135623730951}}}},"df":1,"docs":{"65":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"a":{"c":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"106":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"'":{"df":1,"docs":{"95":{"tf":1.0}}},"df":29,"docs":{"110":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":2.449489742783178},"17":{"tf":1.4142135623730951},"18":{"tf":3.0},"20":{"tf":2.23606797749979},"23":{"tf":2.0},"24":{"tf":1.7320508075688772},"25":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"27":{"tf":1.7320508075688772},"28":{"tf":1.7320508075688772},"30":{"tf":1.7320508075688772},"31":{"tf":1.7320508075688772},"41":{"tf":1.0},"51":{"tf":1.7320508075688772},"60":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.4142135623730951},"77":{"tf":1.0},"78":{"tf":4.0},"80":{"tf":1.0},"82":{"tf":1.0},"88":{"tf":1.0},"93":{"tf":2.0},"95":{"tf":1.0}}},"df":0,"docs":{}}},"f":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"67":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"e":{"df":17,"docs":{"105":{"tf":1.0},"118":{"tf":1.7320508075688772},"14":{"tf":1.7320508075688772},"15":{"tf":1.7320508075688772},"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"22":{"tf":2.449489742783178},"23":{"tf":3.872983346207417},"24":{"tf":2.6457513110645907},"25":{"tf":2.449489742783178},"26":{"tf":2.23606797749979},"27":{"tf":2.23606797749979},"29":{"tf":2.0},"30":{"tf":2.0},"31":{"tf":1.7320508075688772},"33":{"tf":1.0},"9":{"tf":1.0}}},"l":{"df":1,"docs":{"20":{"tf":1.0}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"22":{"tf":1.0}}}}}},"n":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"106":{"tf":1.7320508075688772},"5":{"tf":1.0},"64":{"tf":1.0}}}},"d":{"df":7,"docs":{"1":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":1,"docs":{"70":{"tf":1.4142135623730951}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"78":{"tf":2.23606797749979}}}}},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":20,"docs":{"105":{"tf":1.0},"106":{"tf":1.0},"115":{"tf":1.0},"13":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":2.0},"22":{"tf":1.0},"23":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"5":{"tf":1.0},"60":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.4142135623730951},"78":{"tf":1.0},"83":{"tf":1.0},"97":{"tf":1.0},"99":{"tf":1.0}}}}},"t":{"df":2,"docs":{"77":{"tf":1.7320508075688772},"87":{"tf":1.4142135623730951}}},"x":{"df":23,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"33":{"tf":1.4142135623730951},"37":{"tf":1.7320508075688772},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":2.0},"60":{"tf":2.6457513110645907},"68":{"tf":1.0},"73":{"tf":1.4142135623730951},"77":{"tf":1.0},"78":{"tf":1.0},"86":{"tf":2.23606797749979},"87":{"tf":1.4142135623730951},"88":{"tf":1.4142135623730951},"98":{"tf":1.0}}}},"l":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"106":{"tf":1.0},"56":{"tf":1.4142135623730951},"58":{"tf":2.449489742783178}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":4,"docs":{"0":{"tf":1.0},"109":{"tf":1.0},"61":{"tf":1.0},"67":{"tf":1.0}}}},"df":0,"docs":{}}}}},"n":{"df":4,"docs":{"105":{"tf":1.0},"106":{"tf":1.0},"16":{"tf":1.4142135623730951},"5":{"tf":1.4142135623730951}}},"o":{"df":0,"docs":{},"l":{"d":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"67":{"tf":1.4142135623730951}}}}}}}}},"df":1,"docs":{"67":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"(":{".":{".":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"0":{"df":1,"docs":{"67":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"67":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":1,"docs":{"67":{"tf":1.4142135623730951}},"s":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":35,"docs":{"10":{"tf":1.4142135623730951},"101":{"tf":1.0},"102":{"tf":1.0},"106":{"tf":1.4142135623730951},"118":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":1.4142135623730951},"69":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951},"79":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"85":{"tf":1.0},"90":{"tf":1.4142135623730951},"96":{"tf":1.0}}}}}},"o":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"(":{"1":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"106":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":1,"docs":{"106":{"tf":1.0}}},"r":{"c":{"df":6,"docs":{"15":{"tf":1.0},"17":{"tf":1.0},"23":{"tf":1.4142135623730951},"34":{"tf":1.0},"62":{"tf":1.0},"67":{"tf":1.0}}},"df":0,"docs":{},"k":{"df":1,"docs":{"111":{"tf":1.0}}},"m":{"df":5,"docs":{"34":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"82":{"tf":1.0}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":6,"docs":{"1":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"23":{"tf":1.0},"7":{"tf":1.0},"82":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"67":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"h":{"df":3,"docs":{"16":{"tf":1.4142135623730951},"18":{"tf":1.0},"33":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":1,"docs":{"16":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":8,"docs":{"60":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.7320508075688772},"74":{"tf":1.4142135623730951},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0},"93":{"tf":1.7320508075688772}}}}}}}},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"107":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"d":{"df":3,"docs":{"103":{"tf":1.7320508075688772},"104":{"tf":1.0},"108":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":5,"docs":{"106":{"tf":1.0},"109":{"tf":1.0},"16":{"tf":1.0},"34":{"tf":1.0},"61":{"tf":1.0}},"i":{"df":2,"docs":{"34":{"tf":1.0},"67":{"tf":1.0}}}}},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.0}}}}}}},"df":46,"docs":{"100":{"tf":1.0},"105":{"tf":1.4142135623730951},"115":{"tf":1.0},"13":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":2.23606797749979},"36":{"tf":1.4142135623730951},"37":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"43":{"tf":1.4142135623730951},"44":{"tf":2.0},"45":{"tf":1.4142135623730951},"47":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":2.0},"60":{"tf":2.23606797749979},"61":{"tf":1.7320508075688772},"62":{"tf":1.4142135623730951},"63":{"tf":2.0},"64":{"tf":2.23606797749979},"67":{"tf":2.23606797749979},"68":{"tf":3.872983346207417},"69":{"tf":1.4142135623730951},"70":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"77":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":3.3166247903554},"83":{"tf":1.4142135623730951},"84":{"tf":1.7320508075688772},"85":{"tf":1.0},"88":{"tf":1.0},"90":{"tf":1.4142135623730951},"93":{"tf":1.7320508075688772},"94":{"tf":1.7320508075688772},"96":{"tf":1.0},"98":{"tf":1.0},"99":{"tf":2.0}},"s":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"54":{"tf":1.0},"56":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.0}}}}}}}}}}}},"g":{"c":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"83":{"tf":2.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"s":{"df":1,"docs":{"16":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":30,"docs":{"0":{"tf":1.0},"105":{"tf":1.4142135623730951},"106":{"tf":1.0},"109":{"tf":1.0},"117":{"tf":1.0},"13":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":3.3166247903554},"16":{"tf":1.0},"17":{"tf":2.449489742783178},"18":{"tf":2.6457513110645907},"20":{"tf":2.0},"22":{"tf":1.4142135623730951},"23":{"tf":2.449489742783178},"24":{"tf":2.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"31":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.7320508075688772},"62":{"tf":1.0},"67":{"tf":1.4142135623730951},"71":{"tf":1.7320508075688772},"72":{"tf":1.4142135623730951},"9":{"tf":1.0},"92":{"tf":1.0},"99":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"11":{"tf":1.7320508075688772},"12":{"tf":1.4142135623730951},"16":{"tf":1.0}},"h":{"df":0,"docs":{},"u":{"b":{"df":2,"docs":{"1":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":14,"docs":{"15":{"tf":1.7320508075688772},"18":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"28":{"tf":1.0},"31":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.4142135623730951},"63":{"tf":1.0},"87":{"tf":1.4142135623730951},"9":{"tf":1.0}}}}}},"l":{"df":8,"docs":{"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"30":{"tf":1.4142135623730951},"31":{"tf":1.4142135623730951}},"o":{"b":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"64":{"tf":1.0},"68":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"o":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"18":{"tf":1.0}}}},"df":3,"docs":{"13":{"tf":1.0},"18":{"tf":1.4142135623730951},"60":{"tf":1.0}},"e":{"df":1,"docs":{"96":{"tf":1.0}}},"l":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":4,"docs":{"110":{"tf":1.0},"112":{"tf":1.0},"15":{"tf":1.0},"95":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"o":{"d":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":1,"docs":{"113":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"77":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"(":{"\"":{".":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"5":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":1,"docs":{"5":{"tf":2.0}}}}}}},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"2":{",":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":0,"docs":{},"y":{"3":{",":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":0,"docs":{},"y":{"3":{"df":1,"docs":{"11":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}}}},"df":1,"docs":{"11":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}}}},"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":1.4142135623730951}}}}}}}}}},"df":13,"docs":{"11":{"tf":1.0},"111":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"15":{"tf":2.23606797749979},"17":{"tf":1.4142135623730951},"18":{"tf":3.0},"20":{"tf":2.0},"23":{"tf":2.23606797749979},"24":{"tf":2.23606797749979},"25":{"tf":2.23606797749979},"26":{"tf":2.23606797749979},"27":{"tf":2.23606797749979},"28":{"tf":2.0}}},"df":0,"docs":{}}},"n":{"d":{"df":6,"docs":{"37":{"tf":1.0},"48":{"tf":1.0},"6":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":1.4142135623730951},"69":{"tf":1.0}},"l":{"df":1,"docs":{"106":{"tf":1.0}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":3,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"84":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"105":{"tf":1.0},"106":{"tf":2.449489742783178}}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"62":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"69":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"d":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"14":{"tf":1.0}}}}}},"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"14":{"tf":1.0},"15":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"14":{"tf":1.0},"15":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"14":{"tf":1.0},"15":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"18":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"p":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":8,"docs":{"13":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"19":{"tf":1.0},"62":{"tf":1.0}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"d":{"df":2,"docs":{"13":{"tf":1.0},"36":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"p":{"df":2,"docs":{"21":{"tf":1.4142135623730951},"33":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":8,"docs":{"106":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.4142135623730951},"34":{"tf":1.4142135623730951},"43":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"96":{"tf":1.0}}}},"x":{"df":1,"docs":{"23":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":1,"docs":{"113":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"32":{"tf":1.0},"60":{"tf":1.4142135623730951},"67":{"tf":1.0}}}}}},"n":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"71":{"tf":1.0}}}}}},"df":0,"docs":{},"t":{"df":4,"docs":{"68":{"tf":1.0},"73":{"tf":1.0},"96":{"tf":1.4142135623730951},"99":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"d":{"df":2,"docs":{"41":{"tf":1.0},"85":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"5":{"tf":2.0}}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{":":{"/":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"b":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"d":{"df":0,"docs":{},"r":{"df":3,"docs":{"11":{"tf":1.7320508075688772},"12":{"tf":1.4142135623730951},"16":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"i":{".":{"df":1,"docs":{"64":{"tf":1.0}}},"d":{"df":2,"docs":{"57":{"tf":2.0},"97":{"tf":1.0}},"e":{"a":{"df":1,"docs":{"73":{"tf":1.0}},"l":{"df":1,"docs":{"6":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":6,"docs":{"101":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.4142135623730951},"67":{"tf":2.0},"83":{"tf":1.0},"92":{"tf":1.0}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":4,"docs":{"37":{"tf":1.0},"69":{"tf":1.0},"85":{"tf":1.0},"97":{"tf":1.0}}}},"t":{"df":0,"docs":{},"y":{"(":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"44":{"tf":1.0}}}},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"64":{"tf":1.0},"69":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}}}}}},"i":{"df":1,"docs":{"18":{"tf":1.0}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"67":{"tf":1.0}}}}}}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":14,"docs":{"101":{"tf":1.0},"103":{"tf":1.0},"112":{"tf":1.0},"19":{"tf":1.0},"37":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"6":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":3.0},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"15":{"tf":1.4142135623730951},"20":{"tf":1.0},"33":{"tf":1.0}}}}}}},"n":{"c":{"df":1,"docs":{"34":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"u":{"d":{"df":6,"docs":{"36":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"80":{"tf":1.0}}},"df":0,"docs":{}}},"r":{"(":{"a":{"df":2,"docs":{"13":{"tf":1.0},"36":{"tf":1.0}}},"df":0,"docs":{}},"_":{"a":{"df":1,"docs":{"34":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":2,"docs":{"13":{"tf":1.0},"36":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"62":{"tf":1.0}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"13":{"tf":1.0},"34":{"tf":2.0},"36":{"tf":1.0},"40":{"tf":1.0},"72":{"tf":1.0}}}}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":4,"docs":{"62":{"tf":1.0},"67":{"tf":1.0},"77":{"tf":1.0},"81":{"tf":1.4142135623730951}}}},"i":{"c":{"df":3,"docs":{"36":{"tf":1.0},"37":{"tf":1.0},"77":{"tf":1.0}}},"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"u":{"df":1,"docs":{"5":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":1,"docs":{"89":{"tf":1.0}},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"78":{"tf":1.0}}}}},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"34":{"tf":1.0},"48":{"tf":1.4142135623730951},"71":{"tf":1.0},"83":{"tf":1.0}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"o":{"df":1,"docs":{"22":{"tf":1.4142135623730951}},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"106":{"tf":1.0}}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"78":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":2,"docs":{"37":{"tf":1.0},"44":{"tf":1.4142135623730951}}}}}},"df":5,"docs":{"106":{"tf":1.7320508075688772},"18":{"tf":2.0},"41":{"tf":1.0},"67":{"tf":1.7320508075688772},"69":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"33":{"tf":1.0},"73":{"tf":1.4142135623730951},"81":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"56":{"tf":1.0}}}}}}}}},"df":29,"docs":{"105":{"tf":1.0},"106":{"tf":2.449489742783178},"13":{"tf":1.0},"14":{"tf":2.0},"15":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"23":{"tf":2.0},"24":{"tf":1.0},"25":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0},"34":{"tf":1.4142135623730951},"36":{"tf":1.0},"37":{"tf":1.0},"42":{"tf":1.4142135623730951},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"54":{"tf":1.0},"56":{"tf":2.23606797749979},"57":{"tf":1.7320508075688772},"58":{"tf":1.7320508075688772},"77":{"tf":1.0},"9":{"tf":1.0}},"s":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}}}}}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":12,"docs":{"34":{"tf":1.0},"43":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"64":{"tf":1.7320508075688772},"65":{"tf":1.0},"68":{"tf":2.0},"69":{"tf":1.0},"73":{"tf":1.0},"78":{"tf":1.0},"85":{"tf":1.0},"95":{"tf":1.0}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"59":{"tf":1.0}}}}},"t":{"a":{"df":0,"docs":{},"l":{"df":8,"docs":{"10":{"tf":1.4142135623730951},"105":{"tf":1.0},"11":{"tf":2.449489742783178},"12":{"tf":1.7320508075688772},"17":{"tf":1.0},"3":{"tf":1.7320508075688772},"4":{"tf":1.0},"9":{"tf":1.4142135623730951}}},"n":{"c":{"df":1,"docs":{"118":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"117":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"a":{"d":{"df":5,"docs":{"106":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.0},"37":{"tf":1.0},"83":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"df":10,"docs":{"13":{"tf":1.7320508075688772},"20":{"tf":1.0},"33":{"tf":2.0},"34":{"tf":1.0},"36":{"tf":1.7320508075688772},"42":{"tf":1.4142135623730951},"44":{"tf":2.0},"48":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":3.7416573867739413}},"u":{"c":{"df":0,"docs":{},"t":{"df":15,"docs":{"103":{"tf":1.0},"115":{"tf":1.4142135623730951},"20":{"tf":1.0},"32":{"tf":1.0},"34":{"tf":1.0},"36":{"tf":1.0},"38":{"tf":1.0},"42":{"tf":1.7320508075688772},"44":{"tf":2.0},"48":{"tf":1.4142135623730951},"49":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951},"54":{"tf":2.0},"55":{"tf":1.7320508075688772},"56":{"tf":3.0}}}},"df":0,"docs":{}}}}},"t":{"[":{"2":{"df":1,"docs":{"81":{"tf":1.0}}},"df":0,"docs":{}},"df":23,"docs":{"102":{"tf":4.69041575982343},"33":{"tf":1.0},"34":{"tf":1.7320508075688772},"60":{"tf":1.7320508075688772},"63":{"tf":2.449489742783178},"67":{"tf":1.4142135623730951},"69":{"tf":2.8284271247461903},"70":{"tf":1.7320508075688772},"71":{"tf":1.4142135623730951},"73":{"tf":2.6457513110645907},"74":{"tf":3.0},"77":{"tf":1.7320508075688772},"78":{"tf":1.0},"80":{"tf":2.23606797749979},"81":{"tf":1.0},"82":{"tf":2.6457513110645907},"85":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":2.0},"95":{"tf":1.0},"97":{"tf":1.4142135623730951},"98":{"tf":1.7320508075688772},"99":{"tf":1.0}},"e":{"df":0,"docs":{},"g":{"df":16,"docs":{"105":{"tf":1.4142135623730951},"60":{"tf":1.0},"62":{"tf":1.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":3.0},"78":{"tf":1.7320508075688772},"80":{"tf":1.4142135623730951},"81":{"tf":1.7320508075688772},"82":{"tf":1.0},"83":{"tf":1.0},"88":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":2.0},"95":{"tf":1.0}}},"r":{"[":{"df":0,"docs":{},"k":{"df":2,"docs":{"60":{"tf":1.0},"73":{"tf":1.0}}}},"df":3,"docs":{"60":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":2.23606797749979}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"107":{"tf":1.0},"108":{"tf":1.0},"20":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":2,"docs":{"60":{"tf":1.4142135623730951},"73":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}},"n":{"df":3,"docs":{"16":{"tf":1.4142135623730951},"20":{"tf":1.0},"92":{"tf":1.0}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"19":{"tf":1.4142135623730951}}}}}}}},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"0":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"14":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"92":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":1,"docs":{"67":{"tf":1.0}}}}}}},"r":{"df":1,"docs":{"70":{"tf":1.0}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"63":{"tf":1.0},"70":{"tf":1.0}}}}}}}},"s":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"66":{"tf":1.0}}}}}}}},"a":{"df":2,"docs":{"19":{"tf":1.0},"32":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":2,"docs":{"1":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951}}}}},"t":{"'":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":2,"docs":{"3":{"tf":1.0},"57":{"tf":1.0}}}}}}}},"j":{"df":1,"docs":{"63":{"tf":1.4142135623730951}},"m":{"df":0,"docs":{},"p":{"df":1,"docs":{"44":{"tf":1.4142135623730951}},"z":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"3":{"df":1,"docs":{"10":{"tf":1.0}}},"df":2,"docs":{"22":{"tf":1.0},"23":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":2,"docs":{"20":{"tf":1.0},"44":{"tf":2.0}}}}}},"k":{"b":{"df":8,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0}}},"df":1,"docs":{"69":{"tf":2.0}},"e":{"c":{"c":{"a":{"df":0,"docs":{},"k":{"df":1,"docs":{"17":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":2,"docs":{"15":{"tf":1.0},"41":{"tf":1.0}}}},"y":{"df":10,"docs":{"15":{"tf":3.3166247903554},"16":{"tf":1.4142135623730951},"18":{"tf":3.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.4142135623730951},"25":{"tf":1.0},"26":{"tf":2.0},"27":{"tf":1.4142135623730951}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"65":{"tf":1.0}}},"df":0,"docs":{}}}}}},"i":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"60":{"tf":1.7320508075688772}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":4,"docs":{"16":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.4142135623730951},"81":{"tf":1.0}},"n":{"df":1,"docs":{"98":{"tf":1.0}}}}}},"o":{"a":{"df":0,"docs":{},"l":{"a":{"b":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"110":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"l":{"a":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":3,"docs":{"44":{"tf":2.0},"47":{"tf":1.4142135623730951},"54":{"tf":1.0}}}},"s":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"d":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"12":{"tf":1.0}}}}}},"df":3,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":1.0},"16":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"b":{"d":{"a":{"df":5,"docs":{"34":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.4142135623730951},"82":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"g":{"df":6,"docs":{"6":{"tf":1.0},"61":{"tf":2.0},"62":{"tf":1.0},"67":{"tf":1.4142135623730951},"71":{"tf":1.0},"87":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"18":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"17":{"tf":1.0},"18":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"20":{"tf":1.0},"60":{"tf":1.0},"83":{"tf":1.0}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":5,"docs":{"33":{"tf":1.7320508075688772},"37":{"tf":2.6457513110645907},"56":{"tf":1.7320508075688772},"57":{"tf":2.449489742783178},"58":{"tf":2.449489742783178}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"18":{"tf":1.0}}}}}},"df":2,"docs":{"44":{"tf":2.0},"91":{"tf":1.0}},"e":{"a":{"d":{"df":2,"docs":{"18":{"tf":1.0},"92":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":2,"docs":{"15":{"tf":1.0},"19":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":6,"docs":{"62":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":1.4142135623730951},"69":{"tf":1.0},"77":{"tf":1.0},"82":{"tf":1.0}}}},"n":{"df":3,"docs":{"105":{"tf":1.0},"34":{"tf":1.4142135623730951},"60":{"tf":1.7320508075688772}},"g":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":12,"docs":{"106":{"tf":2.8284271247461903},"18":{"tf":1.0},"20":{"tf":1.0},"60":{"tf":1.0},"67":{"tf":2.0},"69":{"tf":1.0},"70":{"tf":1.0},"81":{"tf":1.4142135623730951},"86":{"tf":1.0},"87":{"tf":1.0},"91":{"tf":1.4142135623730951},"98":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":6,"docs":{"61":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":1.4142135623730951},"78":{"tf":1.0},"81":{"tf":1.0},"93":{"tf":1.0}}}},"t":{"'":{"df":6,"docs":{"106":{"tf":1.0},"117":{"tf":1.4142135623730951},"13":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"18":{"tf":2.0},"20":{"tf":1.0}}},"<":{"df":0,"docs":{},"t":{"1":{"df":1,"docs":{"67":{"tf":1.0}}},"df":5,"docs":{"102":{"tf":3.3166247903554},"60":{"tf":1.0},"72":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.7320508075688772}},"v":{"1":{"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":10,"docs":{"101":{"tf":1.0},"113":{"tf":1.0},"22":{"tf":1.0},"32":{"tf":1.0},"37":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.0},"64":{"tf":1.0},"83":{"tf":1.0},"94":{"tf":1.0}}}}}},"i":{"b":{"df":0,"docs":{},"p":{"df":0,"docs":{},"q":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}}}},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":5,"docs":{"100":{"tf":1.0},"112":{"tf":1.0},"16":{"tf":1.4142135623730951},"33":{"tf":1.0},"5":{"tf":1.0}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"2":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"m":{"b":{"df":1,"docs":{"18":{"tf":1.7320508075688772}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"17":{"tf":1.0},"18":{"tf":1.0},"67":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"e":{"df":4,"docs":{"18":{"tf":1.0},"21":{"tf":1.4142135623730951},"40":{"tf":1.0},"83":{"tf":1.7320508075688772}}},"k":{"df":10,"docs":{"115":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"23":{"tf":1.0},"33":{"tf":2.0},"37":{"tf":1.0},"38":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":4.69041575982343},"58":{"tf":3.605551275463989}},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"23":{"tf":1.0}}},"df":0,"docs":{}}}},"df":3,"docs":{"113":{"tf":1.0},"118":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"10":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"df":5,"docs":{"105":{"tf":1.4142135623730951},"23":{"tf":1.0},"25":{"tf":1.0},"33":{"tf":1.0},"75":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":12,"docs":{"51":{"tf":1.4142135623730951},"56":{"tf":1.0},"62":{"tf":1.7320508075688772},"69":{"tf":2.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.4142135623730951},"79":{"tf":1.0},"83":{"tf":1.4142135623730951}}}}}},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":10,"docs":{"11":{"tf":1.0},"115":{"tf":1.0},"12":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"38":{"tf":1.0},"55":{"tf":1.7320508075688772},"64":{"tf":1.4142135623730951},"65":{"tf":1.0},"69":{"tf":1.7320508075688772}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}}}}},"t":{"df":1,"docs":{"47":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"22":{"tf":1.0}}}}}}}},"df":3,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.4142135623730951}},"i":{"c":{"df":3,"docs":{"5":{"tf":1.0},"62":{"tf":1.7320508075688772},"76":{"tf":1.7320508075688772}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"g":{"df":2,"docs":{"5":{"tf":1.0},"87":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"106":{"tf":1.0},"18":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"k":{"df":2,"docs":{"106":{"tf":1.0},"33":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"(":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"<":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":3,"docs":{"101":{"tf":1.0},"118":{"tf":1.0},"60":{"tf":1.7320508075688772}}}}},"p":{"df":1,"docs":{"20":{"tf":1.0}}}},"w":{"df":1,"docs":{"6":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"37":{"tf":1.0},"59":{"tf":1.0}}}}}}},"m":{"3":{"1":{"df":8,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0}}},"df":0,"docs":{}},"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":26,"docs":{"114":{"tf":1.0},"115":{"tf":2.449489742783178},"116":{"tf":1.4142135623730951},"117":{"tf":1.7320508075688772},"118":{"tf":1.0},"13":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":2.449489742783178},"34":{"tf":1.7320508075688772},"35":{"tf":1.4142135623730951},"36":{"tf":2.0},"37":{"tf":2.8284271247461903},"38":{"tf":2.6457513110645907},"39":{"tf":1.0},"40":{"tf":1.4142135623730951},"44":{"tf":2.23606797749979},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":2.23606797749979},"57":{"tf":3.0},"58":{"tf":2.0},"68":{"tf":1.0},"95":{"tf":1.4142135623730951},"96":{"tf":1.0}},"e":{"'":{"df":3,"docs":{"117":{"tf":1.0},"34":{"tf":1.0},"5":{"tf":1.0}}},"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"m":{"df":1,"docs":{"38":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":1,"docs":{"38":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"114":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"(":{"1":{"6":{"df":1,"docs":{"67":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"118":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":15,"docs":{"105":{"tf":1.0},"106":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"13":{"tf":1.0},"16":{"tf":1.4142135623730951},"20":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.4142135623730951},"35":{"tf":1.0},"36":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.0},"5":{"tf":1.4142135623730951},"56":{"tf":2.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"79":{"tf":1.0}}}}}},"k":{"df":0,"docs":{},"e":{"_":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"y":{"(":{"1":{"5":{"df":1,"docs":{"67":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"67":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":7,"docs":{"10":{"tf":1.0},"106":{"tf":1.0},"116":{"tf":1.0},"18":{"tf":1.0},"3":{"tf":1.0},"37":{"tf":1.0},"5":{"tf":1.0}}}},"n":{"a":{"df":0,"docs":{},"g":{"df":4,"docs":{"10":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0},"5":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":3,"docs":{"106":{"tf":1.7320508075688772},"61":{"tf":1.0},"87":{"tf":1.0}}},"u":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"11":{"tf":1.0},"12":{"tf":1.0}}}},"df":0,"docs":{}},"y":{"_":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{".":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"106":{"tf":2.449489742783178}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"p":{"df":2,"docs":{"58":{"tf":1.0},"88":{"tf":1.4142135623730951}}},"r":{"df":0,"docs":{},"k":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"31":{"tf":1.0}}}}}},"df":0,"docs":{}}},"t":{"c":{"df":0,"docs":{},"h":{"df":13,"docs":{"105":{"tf":1.0},"15":{"tf":1.0},"34":{"tf":1.0},"60":{"tf":1.4142135623730951},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":2.6457513110645907},"67":{"tf":1.0},"69":{"tf":4.58257569495584},"70":{"tf":3.0},"88":{"tf":1.0},"96":{"tf":1.0}}}},"df":0,"docs":{}},"x":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"98":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"18":{"tf":1.0}}}}}}}},"df":1,"docs":{"58":{"tf":2.23606797749979}},"e":{"a":{"df":0,"docs":{},"n":{"df":13,"docs":{"106":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"63":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"81":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"96":{"tf":1.0}},"t":{"df":1,"docs":{"93":{"tf":1.7320508075688772}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":3,"docs":{"105":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"106":{"tf":3.4641016151377544}}}}}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"43":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"l":{"df":1,"docs":{"105":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"3":{"1":{"df":1,"docs":{"110":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"92":{"tf":1.0}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"71":{"tf":1.0}}}}}},"n":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"98":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":3,"docs":{"0":{"tf":1.0},"13":{"tf":1.0},"6":{"tf":1.0}}}},"u":{"df":1,"docs":{"74":{"tf":1.4142135623730951}},"t":{"df":1,"docs":{"18":{"tf":1.7320508075688772}}}}},"t":{"df":2,"docs":{"2":{"tf":1.0},"8":{"tf":1.0}},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"17":{"tf":1.0}}}}}},"o":{"c":{"df":0,"docs":{},"k":{"df":7,"docs":{"106":{"tf":1.0},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"25":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"27":{"tf":1.7320508075688772},"28":{"tf":1.7320508075688772}}}},"d":{"df":2,"docs":{"33":{"tf":2.0},"34":{"tf":1.0}},"e":{"df":2,"docs":{"118":{"tf":1.4142135623730951},"23":{"tf":2.23606797749979}}},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"93":{"tf":1.7320508075688772}}}},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"6":{"tf":1.0}}}},"df":4,"docs":{"22":{"tf":1.7320508075688772},"31":{"tf":1.7320508075688772},"33":{"tf":3.605551275463989},"34":{"tf":1.4142135623730951}},"o":{"df":1,"docs":{"62":{"tf":1.0}}},"u":{"df":4,"docs":{"73":{"tf":1.0},"78":{"tf":1.4142135623730951},"93":{"tf":1.0},"95":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":2,"docs":{"118":{"tf":1.4142135623730951},"23":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"e":{"df":12,"docs":{"101":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"61":{"tf":1.4142135623730951},"65":{"tf":1.4142135623730951},"67":{"tf":1.0},"68":{"tf":1.0},"80":{"tf":1.0}}}}},"u":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"61":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":2,"docs":{"102":{"tf":1.0},"74":{"tf":1.4142135623730951}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":9,"docs":{"0":{"tf":1.0},"56":{"tf":1.4142135623730951},"6":{"tf":1.0},"62":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0}},"i":{"df":1,"docs":{"37":{"tf":1.0}}}}}}}},"t":{"df":3,"docs":{"106":{"tf":1.7320508075688772},"16":{"tf":1.7320508075688772},"5":{"tf":1.0}}}},"v":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}},"y":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"33":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"38":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"38":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"38":{"tf":2.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":20,"docs":{"33":{"tf":1.0},"34":{"tf":1.7320508075688772},"47":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":2.0},"58":{"tf":1.4142135623730951},"60":{"tf":2.449489742783178},"67":{"tf":1.0},"69":{"tf":1.0},"73":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.7320508075688772}},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":5,"docs":{"118":{"tf":2.6457513110645907},"60":{"tf":1.4142135623730951},"67":{"tf":1.0},"68":{"tf":1.0},"85":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"10":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"23":{"tf":1.0}}}}}},"df":4,"docs":{"20":{"tf":1.0},"58":{"tf":2.449489742783178},"86":{"tf":1.0},"87":{"tf":1.0}},"e":{"df":0,"docs":{},"e":{"d":{"df":23,"docs":{"10":{"tf":2.0},"106":{"tf":2.23606797749979},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.7320508075688772},"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"33":{"tf":1.0},"4":{"tf":1.0},"43":{"tf":1.0},"57":{"tf":1.7320508075688772},"60":{"tf":1.0},"67":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.7320508075688772},"81":{"tf":1.0},"90":{"tf":1.0}}},"df":0,"docs":{}},"g":{"a":{"df":0,"docs":{},"t":{"df":6,"docs":{"62":{"tf":1.0},"69":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0}}}},"df":7,"docs":{"102":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.4142135623730951},"77":{"tf":2.0},"78":{"tf":1.4142135623730951},"81":{"tf":1.0},"93":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"69":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"84":{"tf":1.0}}}}},"w":{"_":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"68":{"tf":1.0}}}}}},"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"68":{"tf":1.4142135623730951}}}}}},"df":10,"docs":{"118":{"tf":1.0},"18":{"tf":1.7320508075688772},"34":{"tf":1.0},"5":{"tf":2.449489742783178},"6":{"tf":1.0},"64":{"tf":1.4142135623730951},"65":{"tf":1.0},"68":{"tf":2.23606797749979},"69":{"tf":1.4142135623730951},"83":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}},"n":{"df":1,"docs":{"94":{"tf":1.0}}}}}},"x":{"df":0,"docs":{},"t":{"df":6,"docs":{"15":{"tf":1.0},"17":{"tf":1.0},"62":{"tf":1.0},"70":{"tf":1.7320508075688772},"71":{"tf":1.0},"83":{"tf":1.4142135623730951}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"o":{"_":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"105":{"tf":1.0},"106":{"tf":1.0}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":2,"docs":{"105":{"tf":1.0},"106":{"tf":1.0}}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"d":{"df":2,"docs":{"105":{"tf":1.0},"106":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"n":{"df":6,"docs":{"69":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":2.0},"78":{"tf":1.0},"81":{"tf":1.0},"93":{"tf":1.0}},"e":{"df":2,"docs":{"105":{"tf":1.0},"16":{"tf":1.7320508075688772}}}},"t":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"82":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":13,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":2.0},"33":{"tf":1.0},"37":{"tf":1.0},"56":{"tf":1.4142135623730951},"64":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"73":{"tf":1.0},"82":{"tf":1.0},"94":{"tf":1.0}}},"h":{"df":1,"docs":{"33":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"<":{"0":{"df":1,"docs":{"33":{"tf":1.0}}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"w":{"df":7,"docs":{"106":{"tf":2.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.7320508075688772},"34":{"tf":1.0},"5":{"tf":1.0}}}},"u":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":25,"docs":{"105":{"tf":1.7320508075688772},"106":{"tf":1.0},"113":{"tf":1.0},"15":{"tf":1.4142135623730951},"18":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"25":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"44":{"tf":1.0},"60":{"tf":1.4142135623730951},"62":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.4142135623730951},"69":{"tf":2.0},"71":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.4142135623730951},"83":{"tf":1.0},"86":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"62":{"tf":1.0}}}}}}},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"117":{"tf":1.0},"18":{"tf":1.7320508075688772},"23":{"tf":1.0},"97":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":2,"docs":{"14":{"tf":1.0},"17":{"tf":1.0}}}}}}},"c":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"79":{"tf":1.0}}}}},"df":0,"docs":{}},"d":{"d":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"58":{"tf":1.7320508075688772}}}}}},"df":1,"docs":{"58":{"tf":1.0}}},"df":0,"docs":{}},"df":3,"docs":{"105":{"tf":1.4142135623730951},"14":{"tf":1.0},"23":{"tf":1.0}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"15":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"69":{"tf":1.0}}}}},"n":{"c":{"df":6,"docs":{"14":{"tf":1.0},"18":{"tf":1.0},"33":{"tf":1.0},"54":{"tf":1.0},"83":{"tf":1.0},"99":{"tf":1.0}},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"17":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":15,"docs":{"17":{"tf":1.0},"18":{"tf":2.0},"33":{"tf":1.0},"34":{"tf":1.0},"37":{"tf":1.0},"40":{"tf":1.0},"57":{"tf":1.0},"67":{"tf":1.0},"70":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":1.4142135623730951},"80":{"tf":1.0},"81":{"tf":1.0},"86":{"tf":1.4142135623730951},"87":{"tf":1.0}}},"p":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"57":{"tf":2.449489742783178}}},"df":0,"docs":{}}},"df":1,"docs":{"74":{"tf":2.0}},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"1":{"tf":1.0},"7":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"i":{"d":{"df":6,"docs":{"116":{"tf":1.0},"33":{"tf":1.7320508075688772},"37":{"tf":1.7320508075688772},"56":{"tf":1.7320508075688772},"57":{"tf":1.0},"58":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"37":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":23,"docs":{"101":{"tf":1.4142135623730951},"102":{"tf":1.4142135623730951},"115":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":2.23606797749979},"56":{"tf":2.0},"57":{"tf":4.242640687119285},"58":{"tf":2.449489742783178},"61":{"tf":1.0},"62":{"tf":2.23606797749979},"67":{"tf":2.23606797749979},"72":{"tf":1.0},"76":{"tf":1.4142135623730951},"77":{"tf":1.7320508075688772},"78":{"tf":1.7320508075688772},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":2.0},"85":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":8,"docs":{"106":{"tf":1.4142135623730951},"14":{"tf":1.0},"15":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.4142135623730951},"30":{"tf":1.7320508075688772},"37":{"tf":1.0},"6":{"tf":1.0}}},"o":{"df":0,"docs":{},"n":{"<":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.4142135623730951}}}}}}},"df":21,"docs":{"10":{"tf":1.0},"117":{"tf":1.0},"14":{"tf":1.0},"17":{"tf":2.0},"18":{"tf":2.6457513110645907},"22":{"tf":1.4142135623730951},"23":{"tf":2.0},"24":{"tf":2.0},"25":{"tf":2.0},"26":{"tf":2.0},"27":{"tf":2.0},"28":{"tf":1.4142135623730951},"30":{"tf":1.4142135623730951},"31":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"48":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"66":{"tf":1.0},"70":{"tf":1.0},"85":{"tf":1.0}}}}}}},"r":{"d":{"df":2,"docs":{"102":{"tf":2.0},"74":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":7,"docs":{"113":{"tf":1.0},"18":{"tf":1.4142135623730951},"42":{"tf":1.0},"60":{"tf":1.4142135623730951},"62":{"tf":1.0},"67":{"tf":1.4142135623730951},"78":{"tf":1.0}}}}},"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"33":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"59":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"61":{"tf":1.0}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":4,"docs":{"44":{"tf":1.0},"66":{"tf":1.0},"77":{"tf":1.7320508075688772},"81":{"tf":1.0}}}}}}}}},"u":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"(":{"\"":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"5":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":5,"docs":{"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"19":{"tf":1.0},"37":{"tf":1.0}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{".":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"105":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"_":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"23":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":19,"docs":{"105":{"tf":1.7320508075688772},"106":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":2.0},"28":{"tf":1.0},"30":{"tf":1.0},"37":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.4142135623730951},"49":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":2.23606797749979},"57":{"tf":1.7320508075688772},"58":{"tf":1.7320508075688772},"94":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":5,"docs":{"105":{"tf":1.0},"37":{"tf":1.0},"44":{"tf":1.0},"57":{"tf":1.0},"98":{"tf":1.0}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"106":{"tf":1.7320508075688772},"37":{"tf":1.0},"55":{"tf":1.0}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":2,"docs":{"113":{"tf":1.0},"21":{"tf":1.0}}}}}},"w":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"17":{"tf":1.0},"23":{"tf":1.0}}}}}}}}}},"p":{"a":{"c":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"10":{"tf":1.0},"4":{"tf":1.0}}}},"df":1,"docs":{"18":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":1,"docs":{"106":{"tf":1.7320508075688772}}}},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"80":{"tf":1.0}}}},"n":{"df":0,"docs":{},"i":{"c":{"!":{"(":{"\"":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":1,"docs":{"95":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"92":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"76":{"tf":1.0},"84":{"tf":1.4142135623730951},"92":{"tf":2.0}}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"m":{"df":10,"docs":{"15":{"tf":2.0},"17":{"tf":1.7320508075688772},"18":{"tf":2.8284271247461903},"20":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"25":{"tf":1.7320508075688772},"26":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"62":{"tf":1.0}},"e":{"df":0,"docs":{},"t":{"df":15,"docs":{"15":{"tf":1.7320508075688772},"17":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.4142135623730951},"37":{"tf":1.0},"38":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.4142135623730951},"63":{"tf":1.7320508075688772},"69":{"tf":1.4142135623730951},"70":{"tf":1.0},"82":{"tf":1.7320508075688772}}}},"s":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"15":{"tf":2.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.8284271247461903},"20":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"33":{"tf":1.0}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":3,"docs":{"62":{"tf":1.0},"67":{"tf":1.0},"80":{"tf":1.0}}}}}}}},"s":{"df":2,"docs":{"22":{"tf":1.0},"29":{"tf":1.0}}},"t":{"df":8,"docs":{"106":{"tf":1.0},"20":{"tf":1.0},"34":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.4142135623730951},"69":{"tf":1.0}},"i":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"110":{"tf":1.0}}}},"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"78":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"s":{"df":4,"docs":{"17":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.4142135623730951},"42":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":5,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":1.0},"23":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"70":{"tf":1.0}}},"r":{"df":0,"docs":{},"n":{"df":5,"docs":{"63":{"tf":1.7320508075688772},"64":{"tf":1.7320508075688772},"65":{"tf":2.23606797749979},"69":{"tf":3.1622776601683795},"70":{"tf":3.7416573867739413}}}}}}}},"c":{"[":{"@":{"df":0,"docs":{},"p":{"c":{"df":9,"docs":{"13":{"tf":1.0},"20":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"36":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.0},"56":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"44":{"tf":1.7320508075688772}}},"df":2,"docs":{"23":{"tf":1.0},"77":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"14":{"tf":1.0},"18":{"tf":1.0},"5":{"tf":1.0},"87":{"tf":1.0},"99":{"tf":1.0}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":8,"docs":{"15":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.4142135623730951},"67":{"tf":1.0},"71":{"tf":1.0},"76":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"(":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"<":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":2,"docs":{"101":{"tf":1.0},"118":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"42":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"i":{"df":0,"docs":{},"l":{"df":35,"docs":{"102":{"tf":1.0},"105":{"tf":1.4142135623730951},"113":{"tf":1.4142135623730951},"118":{"tf":1.7320508075688772},"14":{"tf":2.23606797749979},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":2.8284271247461903},"23":{"tf":2.8284271247461903},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.7320508075688772},"34":{"tf":1.4142135623730951},"36":{"tf":1.0},"37":{"tf":1.7320508075688772},"54":{"tf":1.0},"59":{"tf":2.0},"60":{"tf":1.0},"63":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.4142135623730951},"73":{"tf":1.0},"77":{"tf":1.0},"82":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"9":{"tf":1.0}},"o":{"df":1,"docs":{"23":{"tf":1.4142135623730951}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":5,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":2.6457513110645907}},"e":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"(":{")":{".":{"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"v":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"\"":{"df":0,"docs":{},"v":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"\"":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":1,"docs":{"16":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"(":{"df":0,"docs":{},"w":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"16":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"y":{"(":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":1,"docs":{"16":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}}}},":":{":":{"<":{"b":{"df":0,"docs":{},"n":{"2":{"5":{"4":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{">":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"16":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"16":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}}}},"k":{"df":0,"docs":{},"g":{"df":1,"docs":{"10":{"tf":1.0}}}},"l":{"a":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"67":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":1,"docs":{"105":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":3,"docs":{"106":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":0,"docs":{},"y":{"3":{"df":8,"docs":{"11":{"tf":1.0},"110":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"73":{"tf":1.0}}}}}}},"u":{"df":2,"docs":{"74":{"tf":1.0},"85":{"tf":1.0}},"s":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"64":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"117":{"tf":1.0},"18":{"tf":1.0},"40":{"tf":1.0},"44":{"tf":1.0},"62":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"y":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"10":{"tf":1.0},"59":{"tf":1.4142135623730951}}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":3,"docs":{"101":{"tf":1.0},"61":{"tf":1.0},"83":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"103":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":8,"docs":{"15":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.6457513110645907},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":12,"docs":{"13":{"tf":1.0},"23":{"tf":2.0},"24":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"30":{"tf":1.0},"31":{"tf":1.0},"34":{"tf":1.0},"63":{"tf":1.0},"68":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}},"t":{"df":2,"docs":{"1":{"tf":1.0},"7":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"15":{"tf":1.0},"96":{"tf":1.0}}}}}}},"w":{"d":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"106":{"tf":1.0}}},":":{":":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{":":{":":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"2":{"5":{"4":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":1.0}}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"5":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}},"_":{"c":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"16":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"v":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"106":{"tf":1.0},"5":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"_":{"df":0,"docs":{},"u":{"3":{"2":{"df":1,"docs":{"105":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"2":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":59,"docs":{"0":{"tf":1.0},"102":{"tf":1.0},"103":{"tf":1.4142135623730951},"104":{"tf":1.0},"105":{"tf":2.449489742783178},"106":{"tf":3.605551275463989},"107":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.0},"11":{"tf":2.6457513110645907},"110":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"113":{"tf":1.7320508075688772},"114":{"tf":1.0},"12":{"tf":2.23606797749979},"13":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"15":{"tf":2.449489742783178},"16":{"tf":2.6457513110645907},"17":{"tf":1.7320508075688772},"18":{"tf":2.8284271247461903},"19":{"tf":2.0},"2":{"tf":1.0},"20":{"tf":2.449489742783178},"21":{"tf":3.4641016151377544},"22":{"tf":2.23606797749979},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"3":{"tf":1.7320508075688772},"30":{"tf":1.4142135623730951},"31":{"tf":1.4142135623730951},"32":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"35":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.4142135623730951},"39":{"tf":1.0},"43":{"tf":1.0},"5":{"tf":2.23606797749979},"54":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"6":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":1.4142135623730951},"77":{"tf":1.0},"78":{"tf":1.0},"8":{"tf":1.0},"82":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"9":{"tf":2.6457513110645907}},"v":{"df":0,"docs":{},"m":{"df":4,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":1.0},"3":{"tf":1.4142135623730951},"5":{"tf":1.4142135623730951}}}}}},"df":2,"docs":{"102":{"tf":1.0},"74":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"_":{"4":{"<":{"0":{"df":1,"docs":{"37":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"62":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":1,"docs":{"18":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":3,"docs":{"33":{"tf":1.0},"34":{"tf":1.0},"62":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"5":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"10":{"tf":1.0},"4":{"tf":1.0}}}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":4,"docs":{"16":{"tf":1.0},"17":{"tf":1.7320508075688772},"18":{"tf":1.4142135623730951},"56":{"tf":1.0}},"s":{"df":5,"docs":{"15":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.7320508075688772},"26":{"tf":1.0},"27":{"tf":1.4142135623730951}}}}}}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":2,"docs":{"51":{"tf":1.0},"78":{"tf":1.0}}}},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"22":{"tf":1.0},"29":{"tf":1.0},"92":{"tf":1.0},"94":{"tf":1.4142135623730951}}}},"v":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"18":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"118":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"6":{"tf":1.0}}}}}}}},"d":{"df":0,"docs":{},"u":{"c":{"df":1,"docs":{"17":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":10,"docs":{"106":{"tf":1.4142135623730951},"113":{"tf":1.0},"114":{"tf":1.0},"15":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"36":{"tf":1.0},"40":{"tf":2.449489742783178}}}},"df":0,"docs":{}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"16":{"tf":1.0},"3":{"tf":1.0},"5":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"f":{"df":20,"docs":{"0":{"tf":1.4142135623730951},"106":{"tf":3.1622776601683795},"109":{"tf":1.0},"112":{"tf":1.0},"13":{"tf":1.0},"14":{"tf":2.0},"15":{"tf":4.358898943540674},"16":{"tf":2.23606797749979},"17":{"tf":3.0},"18":{"tf":5.291502622129181},"20":{"tf":2.449489742783178},"23":{"tf":1.0},"24":{"tf":2.23606797749979},"25":{"tf":2.449489742783178},"26":{"tf":1.0},"28":{"tf":1.0},"3":{"tf":1.0},"5":{"tf":1.7320508075688772},"9":{"tf":1.0},"97":{"tf":1.0}}}},"p":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"61":{"tf":1.0},"67":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"100":{"tf":1.0}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"d":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"105":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"23":{"tf":1.0}}}}}}},"df":11,"docs":{"106":{"tf":2.23606797749979},"14":{"tf":1.4142135623730951},"15":{"tf":1.7320508075688772},"17":{"tf":1.0},"18":{"tf":2.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.4142135623730951},"5":{"tf":1.0}},"n":{"df":2,"docs":{"18":{"tf":1.0},"5":{"tf":1.4142135623730951}}},"r":{"'":{"df":1,"docs":{"105":{"tf":1.0}}},"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.0}}}}}}}},"df":12,"docs":{"105":{"tf":2.0},"11":{"tf":1.0},"13":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"20":{"tf":1.4142135623730951},"36":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"73":{"tf":1.0},"92":{"tf":1.0},"96":{"tf":1.4142135623730951}}}},"i":{"d":{"df":2,"docs":{"105":{"tf":1.0},"113":{"tf":1.0}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"e":{"'":{"df":1,"docs":{"18":{"tf":1.0}}},"df":1,"docs":{"111":{"tf":1.0}}}},"u":{"b":{"df":3,"docs":{"105":{"tf":1.0},"106":{"tf":1.0},"16":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"c":{"df":5,"docs":{"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":2.23606797749979},"20":{"tf":2.449489742783178},"25":{"tf":1.7320508075688772}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"20":{"tf":1.0}}}},"s":{"]":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"16":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"20":{"tf":1.0}}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":2,"docs":{"64":{"tf":1.0},"68":{"tf":1.7320508075688772}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":3,"docs":{"23":{"tf":1.0},"79":{"tf":1.0},"94":{"tf":1.0}}}}}}}},"q":{"df":1,"docs":{"77":{"tf":1.0}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":5,"docs":{"105":{"tf":1.0},"68":{"tf":3.1622776601683795},"73":{"tf":1.0},"96":{"tf":1.4142135623730951},"99":{"tf":1.4142135623730951}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"5":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"t":{"df":2,"docs":{"62":{"tf":1.0},"64":{"tf":1.0}}}}}},"r":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"18":{"tf":1.0}}},"n":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"97":{"tf":1.0}}}}},"df":0,"docs":{},"g":{"df":4,"docs":{"117":{"tf":1.0},"118":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0}}}}},"df":2,"docs":{"5":{"tf":1.0},"58":{"tf":2.23606797749979}},"e":{"a":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"107":{"tf":1.0},"108":{"tf":1.0}}}},"d":{"(":{"1":{"df":1,"docs":{"5":{"tf":1.0}}},"2":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"u":{"3":{"2":{"(":{"0":{"df":1,"docs":{"105":{"tf":1.0}}},"1":{"df":1,"docs":{"105":{"tf":1.0}}},"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"x":{"df":1,"docs":{"105":{"tf":1.0}}}},"df":0,"docs":{}}},"df":1,"docs":{"105":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":6,"docs":{"105":{"tf":1.4142135623730951},"15":{"tf":1.0},"20":{"tf":1.0},"41":{"tf":1.4142135623730951},"43":{"tf":1.7320508075688772},"5":{"tf":1.7320508075688772}}},"df":0,"docs":{},"l":{"df":2,"docs":{"106":{"tf":1.0},"19":{"tf":1.0}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":3,"docs":{"38":{"tf":1.0},"42":{"tf":1.0},"99":{"tf":1.0}}}},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"106":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":6,"docs":{"117":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":3.4641016151377544},"24":{"tf":1.0},"26":{"tf":1.0},"85":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":1,"docs":{"106":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"d":{"df":0,"docs":{},"u":{"c":{"df":5,"docs":{"113":{"tf":1.0},"114":{"tf":1.0},"115":{"tf":2.0},"23":{"tf":1.0},"5":{"tf":1.0}},"t":{"df":1,"docs":{"115":{"tf":1.0}}}},"df":0,"docs":{}}},"df":1,"docs":{"18":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":6,"docs":{"33":{"tf":1.0},"47":{"tf":1.0},"59":{"tf":1.0},"73":{"tf":2.0},"83":{"tf":1.7320508075688772},"85":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"c":{"df":4,"docs":{"100":{"tf":1.0},"56":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0}}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":3,"docs":{"21":{"tf":1.0},"22":{"tf":1.0},"29":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"70":{"tf":2.449489742783178}}}}},"g":{"df":10,"docs":{"13":{"tf":2.0},"20":{"tf":2.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"36":{"tf":2.0},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":2.23606797749979},"44":{"tf":2.6457513110645907},"56":{"tf":3.605551275463989}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":14,"docs":{"20":{"tf":1.0},"34":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"39":{"tf":1.7320508075688772},"40":{"tf":1.4142135623730951},"41":{"tf":1.7320508075688772},"42":{"tf":2.23606797749979},"43":{"tf":1.7320508075688772},"48":{"tf":1.7320508075688772},"52":{"tf":1.7320508075688772},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":2.23606797749979}}}}},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}},"l":{"df":2,"docs":{"33":{"tf":1.0},"34":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"s":{"df":2,"docs":{"2":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":1,"docs":{"37":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"77":{"tf":1.4142135623730951}}},"df":2,"docs":{"106":{"tf":1.0},"20":{"tf":1.0}}}}},"df":1,"docs":{"64":{"tf":1.0}}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"18":{"tf":1.0}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"23":{"tf":1.0}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"64":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"87":{"tf":1.7320508075688772}}}}}},"l":{"a":{"c":{"df":1,"docs":{"90":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":4,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"16":{"tf":1.0},"20":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":1,"docs":{"73":{"tf":1.0}}}},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":1,"docs":{"15":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"1":{"tf":1.0},"7":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"r":{"df":11,"docs":{"101":{"tf":1.0},"15":{"tf":1.7320508075688772},"42":{"tf":1.0},"61":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"77":{"tf":1.4142135623730951},"78":{"tf":1.0},"86":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":1,"docs":{"33":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":1,"docs":{"33":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"102":{"tf":1.0},"15":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"5":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"58":{"tf":1.0},"61":{"tf":1.0},"67":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":11,"docs":{"101":{"tf":1.0},"115":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"20":{"tf":1.0},"56":{"tf":1.0},"61":{"tf":1.0},"67":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":2.0},"78":{"tf":1.4142135623730951}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"81":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":23,"docs":{"13":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.7320508075688772},"36":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"49":{"tf":1.0},"53":{"tf":1.0},"56":{"tf":1.4142135623730951},"63":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":2.0},"68":{"tf":2.0},"72":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"84":{"tf":1.4142135623730951},"91":{"tf":1.4142135623730951},"93":{"tf":1.7320508075688772},"94":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"s":{"df":2,"docs":{"33":{"tf":1.0},"56":{"tf":1.0}}}},"v":{"df":0,"docs":{},"m":{"df":1,"docs":{"19":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":5,"docs":{"18":{"tf":1.0},"48":{"tf":1.0},"62":{"tf":1.0},"77":{"tf":1.0},"82":{"tf":1.0}}}}},"s":{"c":{"df":0,"docs":{},"v":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"v":{"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"/":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"y":{"_":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":1,"docs":{"106":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"105":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"3":{"2":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"a":{"c":{"df":1,"docs":{"105":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":5,"docs":{"104":{"tf":1.4142135623730951},"105":{"tf":1.4142135623730951},"106":{"tf":2.0},"19":{"tf":1.4142135623730951},"9":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":5,"docs":{"105":{"tf":1.0},"106":{"tf":2.449489742783178},"20":{"tf":1.0},"60":{"tf":1.0},"96":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"77":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"106":{"tf":1.7320508075688772}}}}}},"w":{"df":13,"docs":{"106":{"tf":3.3166247903554},"20":{"tf":1.4142135623730951},"34":{"tf":1.0},"37":{"tf":1.4142135623730951},"5":{"tf":1.4142135623730951},"58":{"tf":2.449489742783178},"60":{"tf":2.0},"62":{"tf":1.0},"68":{"tf":1.0},"77":{"tf":1.0},"83":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.0}}}},"s":{"df":4,"docs":{"105":{"tf":1.4142135623730951},"106":{"tf":2.6457513110645907},"12":{"tf":2.0},"9":{"tf":1.0}}},"u":{"df":0,"docs":{},"n":{"df":11,"docs":{"105":{"tf":1.7320508075688772},"106":{"tf":1.7320508075688772},"115":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":2.0},"17":{"tf":1.0},"20":{"tf":2.0},"22":{"tf":1.0},"23":{"tf":1.0},"5":{"tf":2.0},"78":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":4,"docs":{"10":{"tf":1.0},"77":{"tf":2.23606797749979},"78":{"tf":1.4142135623730951},"81":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"=":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":2,"docs":{"16":{"tf":1.0},"20":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":12,"docs":{"0":{"tf":1.0},"10":{"tf":1.4142135623730951},"105":{"tf":1.7320508075688772},"106":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"19":{"tf":1.0},"33":{"tf":1.0},"4":{"tf":1.4142135623730951},"5":{"tf":1.0},"6":{"tf":1.4142135623730951},"71":{"tf":1.0},"9":{"tf":1.0}},"f":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"11":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"r":{"df":2,"docs":{"10":{"tf":1.0},"4":{"tf":1.0}}}},"df":1,"docs":{"105":{"tf":1.0}}}}}}}},"s":{"a":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":1,"docs":{"106":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":10,"docs":{"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.7320508075688772},"38":{"tf":1.0},"48":{"tf":1.0},"56":{"tf":1.0},"60":{"tf":1.0},"69":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"71":{"tf":1.0}}}}}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"6":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"34":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":3,"docs":{"64":{"tf":1.0},"69":{"tf":1.0},"97":{"tf":1.0}}},"df":0,"docs":{}}},"p":{"2":{"5":{"6":{"df":0,"docs":{},"k":{"1":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"92":{"tf":1.0}}}}}}}},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"92":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":11,"docs":{"114":{"tf":1.0},"15":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.0},"34":{"tf":1.0},"37":{"tf":1.0},"44":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"68":{"tf":1.0},"71":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":11,"docs":{"105":{"tf":1.0},"106":{"tf":1.0},"15":{"tf":1.4142135623730951},"17":{"tf":1.0},"34":{"tf":1.0},"62":{"tf":1.7320508075688772},"64":{"tf":1.0},"65":{"tf":1.0},"68":{"tf":1.0},"71":{"tf":1.4142135623730951},"83":{"tf":1.0}},"n":{"df":1,"docs":{"88":{"tf":1.0}}}},"g":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"69":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"65":{"tf":1.0}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"100":{"tf":1.0}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":2,"docs":{"23":{"tf":1.0},"25":{"tf":1.0}}}},"df":0,"docs":{}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"64":{"tf":1.0}}},"df":0,"docs":{}}}}},"r":{"d":{"df":1,"docs":{"5":{"tf":1.4142135623730951}}},"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"5":{"tf":1.0}}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":1,"docs":{"5":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"5":{"tf":1.0}}}}}},":":{":":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"5":{"tf":1.7320508075688772}}}}}}},"t":{"df":16,"docs":{"103":{"tf":1.0},"114":{"tf":1.0},"118":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"32":{"tf":1.0},"36":{"tf":2.23606797749979},"37":{"tf":1.7320508075688772},"48":{"tf":1.0},"5":{"tf":1.0},"54":{"tf":2.0},"55":{"tf":1.0},"56":{"tf":1.0},"64":{"tf":1.0},"68":{"tf":1.4142135623730951},"99":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"s":{"df":1,"docs":{"16":{"tf":1.0}}}},"df":13,"docs":{"0":{"tf":1.0},"15":{"tf":3.1622776601683795},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":2.23606797749979},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.4142135623730951}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"103":{"tf":1.0},"14":{"tf":1.0}}}}}},"g":{"df":0,"docs":{},"n":{"(":{"df":0,"docs":{},"p":{"df":1,"docs":{"77":{"tf":1.0}}}},"df":0,"docs":{}}},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"5":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":2,"docs":{"62":{"tf":1.0},"77":{"tf":2.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"76":{"tf":1.0}}}},"w":{"df":2,"docs":{"20":{"tf":1.0},"56":{"tf":1.0}}}},"u":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"106":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}}}},"i":{"d":{"df":0,"docs":{},"e":{"df":7,"docs":{"48":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":1.4142135623730951},"69":{"tf":1.0},"82":{"tf":1.4142135623730951},"92":{"tf":1.0},"94":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":4,"docs":{"102":{"tf":1.0},"18":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0}}}}}},"df":2,"docs":{"51":{"tf":1.0},"77":{"tf":1.0}}}},"m":{"d":{"df":1,"docs":{"11":{"tf":2.0}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":3,"docs":{"3":{"tf":1.0},"33":{"tf":1.0},"71":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"64":{"tf":1.0}}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"l":{"df":5,"docs":{"34":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.4142135623730951},"44":{"tf":1.0},"73":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"37":{"tf":1.0}}}},"df":1,"docs":{"55":{"tf":1.0}}}}},"i":{"df":1,"docs":{"57":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"df":2,"docs":{"106":{"tf":1.7320508075688772},"17":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":12,"docs":{"106":{"tf":1.0},"11":{"tf":1.0},"118":{"tf":1.0},"12":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.0},"23":{"tf":1.0},"56":{"tf":1.7320508075688772},"57":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.0},"87":{"tf":1.0}}}}},"z":{"df":0,"docs":{},"e":{"df":8,"docs":{"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"23":{"tf":1.0},"28":{"tf":1.7320508075688772},"5":{"tf":1.7320508075688772},"77":{"tf":1.0},"81":{"tf":2.6457513110645907}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"105":{"tf":1.0}}}}},"m":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"20":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"5":{"tf":1.0}}}}}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"_":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":6,"docs":{"18":{"tf":2.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}}}},"b":{"df":0,"docs":{},"n":{"df":5,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":6,"docs":{"17":{"tf":1.7320508075688772},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}}}}}},"df":4,"docs":{"17":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"72":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"l":{"c":{"df":1,"docs":{"17":{"tf":1.0}}},"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"17":{"tf":1.7320508075688772},"18":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"18":{"tf":1.0},"67":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"e":{"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{":":{":":{"<":{"df":0,"docs":{},"u":{"3":{"2":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":1,"docs":{"5":{"tf":2.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"67":{"tf":1.0}}}},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"106":{"tf":1.0},"68":{"tf":1.0}}}},"u":{"df":0,"docs":{},"r":{"c":{"df":6,"docs":{"1":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"2":{"tf":1.0},"7":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"100":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{},"f":{"df":6,"docs":{"101":{"tf":1.0},"106":{"tf":1.0},"15":{"tf":1.0},"56":{"tf":1.0},"6":{"tf":1.0},"71":{"tf":1.0}},"i":{"df":9,"docs":{"105":{"tf":1.4142135623730951},"14":{"tf":1.0},"15":{"tf":1.0},"34":{"tf":1.7320508075688772},"6":{"tf":1.0},"60":{"tf":1.4142135623730951},"63":{"tf":1.0},"71":{"tf":1.4142135623730951},"72":{"tf":1.0}}}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"106":{"tf":1.0},"5":{"tf":1.0}}}}}},"q":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"96":{"tf":1.0}}}}}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"20":{"tf":1.4142135623730951}},"i":{"c":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"20":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":1,"docs":{"96":{"tf":1.0}}}},"u":{"a":{"df":0,"docs":{},"r":{"df":6,"docs":{"20":{"tf":2.23606797749979},"44":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"62":{"tf":1.0},"68":{"tf":1.0},"96":{"tf":1.4142135623730951}},"e":{"(":{"a":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"n":{"d":{"_":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"44":{"tf":1.0},"48":{"tf":1.0}},"e":{"(":{"a":{"df":3,"docs":{"44":{"tf":1.0},"48":{"tf":1.4142135623730951},"53":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":1,"docs":{"68":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"t":{"a":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"0":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":1,"docs":{"97":{"tf":1.0}}}},"n":{"d":{"a":{"df":0,"docs":{},"r":{"d":{"df":3,"docs":{"100":{"tf":1.0},"33":{"tf":1.0},"94":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"k":{"_":{"b":{"df":0,"docs":{},"n":{"df":5,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":5,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}}},"df":3,"docs":{"15":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}},"i":{"df":1,"docs":{"112":{"tf":1.0}}}},"t":{"df":12,"docs":{"109":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"13":{"tf":1.0},"18":{"tf":1.0},"22":{"tf":1.4142135623730951},"3":{"tf":1.0},"31":{"tf":1.4142135623730951},"44":{"tf":1.7320508075688772},"47":{"tf":1.0},"5":{"tf":1.0},"60":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"19":{"tf":1.0}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":13,"docs":{"101":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.4142135623730951},"46":{"tf":1.0},"49":{"tf":1.0},"61":{"tf":1.7320508075688772},"62":{"tf":1.0},"64":{"tf":3.4641016151377544},"68":{"tf":1.0},"69":{"tf":1.4142135623730951},"70":{"tf":1.0},"83":{"tf":1.0},"94":{"tf":1.0}}}}}}},"i":{"c":{"df":2,"docs":{"40":{"tf":1.0},"81":{"tf":2.0}}},"df":0,"docs":{}}},"y":{"df":2,"docs":{"34":{"tf":1.0},"71":{"tf":1.0}}}},"d":{":":{":":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"y":{":":{":":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"(":{"df":0,"docs":{},"x":{"df":1,"docs":{"91":{"tf":1.0}}}},"df":2,"docs":{"81":{"tf":1.0},"91":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"(":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{":":{":":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"n":{"df":2,"docs":{"82":{"tf":1.0},"92":{"tf":1.0}},"i":{"c":{"(":{"\"":{"c":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"69":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"76":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":1,"docs":{"93":{"tf":1.0}}}}}},"f":{"df":1,"docs":{"93":{"tf":1.0}},"e":{"(":{"0":{"df":1,"docs":{"92":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"93":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"82":{"tf":1.0},"94":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{":":{":":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":2,"docs":{"78":{"tf":1.0},"95":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"x":{"df":1,"docs":{"92":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{":":{":":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"16":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"d":{"df":2,"docs":{"33":{"tf":1.0},"60":{"tf":1.0}},"e":{":":{":":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"97":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.0}}}}}}}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"99":{"tf":1.0}}},"y":{":":{":":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"d":{":":{":":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"(":{"df":0,"docs":{},"x":{"df":1,"docs":{"96":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"(":{"0":{"df":3,"docs":{"13":{"tf":1.0},"20":{"tf":1.0},"36":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"99":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"98":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"(":{"df":0,"docs":{},"x":{"df":2,"docs":{"68":{"tf":1.0},"96":{"tf":1.0}}}},"df":0,"docs":{}}},"df":3,"docs":{"68":{"tf":1.0},"73":{"tf":1.0},"96":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"x":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"98":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"98":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":2,"docs":{"0":{"tf":1.0},"33":{"tf":1.0}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"22":{"tf":1.4142135623730951},"29":{"tf":1.0},"30":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"(":{"df":0,"docs":{},"i":{"df":1,"docs":{"56":{"tf":1.0}}}},"df":12,"docs":{"106":{"tf":1.0},"113":{"tf":1.4142135623730951},"115":{"tf":1.7320508075688772},"15":{"tf":1.7320508075688772},"16":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"36":{"tf":1.0},"37":{"tf":1.0},"40":{"tf":1.7320508075688772},"42":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}}}}}},"df":2,"docs":{"41":{"tf":1.0},"67":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"105":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":5,"docs":{"105":{"tf":1.0},"15":{"tf":1.0},"5":{"tf":1.0},"60":{"tf":1.0},"78":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}},"df":1,"docs":{"16":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":8,"docs":{"62":{"tf":1.0},"69":{"tf":1.7320508075688772},"70":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0},"79":{"tf":2.23606797749979},"92":{"tf":1.0},"94":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"59":{"tf":1.0}}}}}}},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":4,"docs":{"117":{"tf":1.0},"16":{"tf":1.0},"69":{"tf":1.0},"83":{"tf":1.0}}}}}},"df":0,"docs":{}}},"u":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}}},"u":{"b":{"(":{"6":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"<":{"1":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"22":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":6,"docs":{"102":{"tf":1.0},"22":{"tf":1.0},"31":{"tf":1.0},"56":{"tf":1.0},"67":{"tf":1.0},"74":{"tf":1.4142135623730951}},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":6,"docs":{"117":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":2.23606797749979},"54":{"tf":1.0},"56":{"tf":3.4641016151377544}},"e":{".":{"a":{"d":{"d":{"(":{"a":{"df":1,"docs":{"56":{"tf":1.7320508075688772}}},"df":0,"docs":{},"i":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}},"x":{"df":1,"docs":{"56":{"tf":2.8284271247461903}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"b":{"a":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"x":{"df":1,"docs":{"58":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"(":{"df":0,"docs":{},"x":{"df":1,"docs":{"58":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"u":{"b":{"(":{"df":0,"docs":{},"x":{"df":1,"docs":{"56":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":1,"docs":{"38":{"tf":1.0}},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"33":{"tf":1.0}},"e":{".":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"33":{"tf":1.0}}}}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.0}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"33":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{".":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"33":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},":":{":":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}}}}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"62":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"h":{"df":4,"docs":{"15":{"tf":1.7320508075688772},"33":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":1,"docs":{"62":{"tf":1.0}}}}}},"m":{"(":{"1":{"6":{"df":1,"docs":{"67":{"tf":1.0}}},"df":0,"docs":{}},"[":{"df":0,"docs":{},"x":{"df":1,"docs":{"60":{"tf":1.0}}}},"a":{"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"34":{"tf":1.0}}}}}},"df":6,"docs":{"105":{"tf":2.449489742783178},"34":{"tf":1.4142135623730951},"5":{"tf":2.23606797749979},"60":{"tf":1.7320508075688772},"62":{"tf":1.0},"67":{"tf":1.4142135623730951}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"34":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"z":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"33":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"44":{"tf":1.0}}}}}}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"105":{"tf":1.4142135623730951}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":14,"docs":{"0":{"tf":1.0},"102":{"tf":1.0},"106":{"tf":1.0},"11":{"tf":2.0},"110":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"39":{"tf":1.0},"45":{"tf":1.0},"6":{"tf":1.4142135623730951},"71":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"88":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":2,"docs":{"116":{"tf":1.0},"18":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"m":{"df":1,"docs":{"17":{"tf":1.0}}}},"w":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"56":{"tf":1.0}}}},"df":0,"docs":{}},"y":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":7,"docs":{"33":{"tf":1.4142135623730951},"34":{"tf":2.23606797749979},"60":{"tf":3.7416573867739413},"63":{"tf":1.4142135623730951},"71":{"tf":2.23606797749979},"73":{"tf":3.4641016151377544},"83":{"tf":1.0}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"x":{"df":3,"docs":{"60":{"tf":1.4142135623730951},"67":{"tf":1.0},"83":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":8,"docs":{"0":{"tf":1.0},"100":{"tf":1.0},"106":{"tf":1.0},"112":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.0},"33":{"tf":1.0},"67":{"tf":1.4142135623730951}}}}}}}},"t":{"0":{"df":1,"docs":{"82":{"tf":1.0}}},"1":{"df":2,"docs":{"67":{"tf":1.4142135623730951},"82":{"tf":1.0}}},"2":{"df":2,"docs":{"67":{"tf":2.23606797749979},"82":{"tf":1.0}}},"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"23":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"g":{"df":1,"docs":{"20":{"tf":1.0}}},"k":{"df":0,"docs":{},"e":{"df":10,"docs":{"15":{"tf":1.0},"18":{"tf":2.0},"34":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"72":{"tf":1.0},"82":{"tf":1.4142135623730951},"85":{"tf":1.0},"94":{"tf":1.0}}}},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":5,"docs":{"105":{"tf":1.4142135623730951},"11":{"tf":1.4142135623730951},"15":{"tf":1.0},"17":{"tf":1.0},"5":{"tf":1.4142135623730951}}}}}}},"df":7,"docs":{"102":{"tf":5.0},"60":{"tf":1.4142135623730951},"69":{"tf":1.0},"72":{"tf":1.4142135623730951},"74":{"tf":5.0},"91":{"tf":1.0},"93":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"17":{"tf":1.0}}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"5":{"tf":1.0},"56":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"t":{"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"/":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"/":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"/":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"d":{".":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":5,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":2.0},"16":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.6457513110645907}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{".":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"20":{"tf":2.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":2,"docs":{"22":{"tf":1.0},"31":{"tf":1.0}}},"df":6,"docs":{"106":{"tf":1.0},"19":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.4142135623730951},"31":{"tf":1.7320508075688772},"5":{"tf":1.4142135623730951}}}},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"69":{"tf":1.0}}}}},"h":{"df":1,"docs":{"20":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":1,"docs":{"69":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"15":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"f":{"df":3,"docs":{"22":{"tf":1.0},"31":{"tf":1.0},"73":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":3,"docs":{"71":{"tf":1.0},"73":{"tf":1.4142135623730951},"96":{"tf":1.0}}}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":2,"docs":{"15":{"tf":1.0},"99":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":2,"docs":{"13":{"tf":1.0},"77":{"tf":1.0}}}}}}},"u":{"df":3,"docs":{"78":{"tf":1.0},"82":{"tf":1.0},"92":{"tf":1.0}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"e":{"df":4,"docs":{"10":{"tf":1.0},"20":{"tf":1.0},"73":{"tf":1.0},"86":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"p":{"df":1,"docs":{"106":{"tf":1.4142135623730951}}}},"n":{"df":1,"docs":{"82":{"tf":1.0}}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"17":{"tf":1.0}}}}}},"t":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"86":{"tf":1.0},"87":{"tf":1.0}}}},"df":0,"docs":{}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"77":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"y":{"df":1,"docs":{"20":{"tf":1.0}}}},"r":{"a":{"c":{"df":0,"docs":{},"e":{"df":5,"docs":{"106":{"tf":2.449489742783178},"18":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"5":{"tf":1.0}},"s":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":1,"docs":{"5":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"k":{"df":1,"docs":{"18":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"1":{"tf":1.0},"7":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"101":{"tf":1.0},"71":{"tf":1.7320508075688772},"74":{"tf":1.0}}}},"n":{"df":0,"docs":{},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":3,"docs":{"15":{"tf":1.4142135623730951},"17":{"tf":1.7320508075688772},"18":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"42":{"tf":1.0}}}}}},"l":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"105":{"tf":1.0}}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"117":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"100":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":4,"docs":{"105":{"tf":1.0},"117":{"tf":1.7320508075688772},"118":{"tf":1.0},"83":{"tf":1.0}}}},"i":{"df":3,"docs":{"14":{"tf":1.0},"70":{"tf":1.7320508075688772},"71":{"tf":1.0}},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"77":{"tf":1.7320508075688772},"78":{"tf":1.0},"81":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"e":{"df":2,"docs":{"33":{"tf":1.0},"66":{"tf":1.7320508075688772}}}}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":7,"docs":{"61":{"tf":1.0},"62":{"tf":1.0},"69":{"tf":2.0},"70":{"tf":1.0},"71":{"tf":1.0},"80":{"tf":3.1622776601683795},"82":{"tf":1.0}}}},"r":{"df":0,"docs":{},"n":{"df":2,"docs":{"118":{"tf":1.4142135623730951},"67":{"tf":1.0}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"106":{"tf":1.0}}}}}}},"v":{"1":{"df":1,"docs":{"60":{"tf":1.0}}},"df":1,"docs":{"60":{"tf":1.0}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"67":{"tf":1.0}}}}}},"o":{"df":12,"docs":{"101":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.0},"35":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"80":{"tf":1.4142135623730951},"81":{"tf":1.7320508075688772},"82":{"tf":1.0},"83":{"tf":1.7320508075688772},"9":{"tf":1.0},"97":{"tf":1.0}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":33,"docs":{"100":{"tf":2.0},"101":{"tf":1.7320508075688772},"117":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":2.0},"35":{"tf":1.0},"37":{"tf":1.0},"39":{"tf":1.0},"41":{"tf":1.0},"5":{"tf":1.4142135623730951},"55":{"tf":1.0},"60":{"tf":3.872983346207417},"61":{"tf":1.0},"63":{"tf":1.4142135623730951},"65":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":4.123105625617661},"72":{"tf":2.449489742783178},"73":{"tf":3.3166247903554},"74":{"tf":1.0},"75":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.4142135623730951},"79":{"tf":1.0},"80":{"tf":2.23606797749979},"81":{"tf":2.0},"82":{"tf":1.7320508075688772},"83":{"tf":1.7320508075688772},"84":{"tf":2.449489742783178},"85":{"tf":2.23606797749979},"93":{"tf":1.0}}},"i":{"c":{"df":2,"docs":{"18":{"tf":1.0},"69":{"tf":1.0}}},"df":0,"docs":{}}}}},"u":{"3":{"2":{")":{")":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"105":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"105":{"tf":1.0},"5":{"tf":1.0}}},"df":0,"docs":{}},"6":{"4":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"10":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":1,"docs":{"23":{"tf":1.0}}},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":5,"docs":{"62":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0}}}}},"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"0":{"tf":1.0},"106":{"tf":1.0}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"34":{"tf":1.0}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"5":{"tf":1.0}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"37":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"107":{"tf":1.0},"108":{"tf":1.0},"2":{"tf":1.0},"8":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"6":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":6,"docs":{"106":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951},"67":{"tf":1.0},"71":{"tf":1.0},"85":{"tf":1.4142135623730951},"99":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":2,"docs":{"15":{"tf":1.0},"16":{"tf":1.0}}}}}}},"k":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"105":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"77":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"71":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"78":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"106":{"tf":1.0},"71":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"16":{"tf":2.0}}}},"df":0,"docs":{}}}},"p":{"df":7,"docs":{"105":{"tf":1.0},"106":{"tf":1.0},"18":{"tf":1.0},"33":{"tf":1.0},"5":{"tf":1.0},"60":{"tf":1.0},"69":{"tf":1.0}}},"s":{"a":{"df":0,"docs":{},"g":{"df":12,"docs":{"13":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0},"56":{"tf":1.7320508075688772}}}},"df":64,"docs":{"105":{"tf":1.4142135623730951},"106":{"tf":4.242640687119285},"11":{"tf":1.0},"118":{"tf":1.0},"12":{"tf":1.0},"13":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":3.0},"16":{"tf":2.8284271247461903},"17":{"tf":2.8284271247461903},"18":{"tf":3.605551275463989},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"3":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":3.1622776601683795},"34":{"tf":1.4142135623730951},"37":{"tf":1.7320508075688772},"42":{"tf":1.4142135623730951},"43":{"tf":1.7320508075688772},"48":{"tf":1.0},"49":{"tf":1.0},"5":{"tf":2.0},"52":{"tf":1.0},"53":{"tf":1.0},"56":{"tf":2.6457513110645907},"57":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":3.605551275463989},"61":{"tf":1.7320508075688772},"63":{"tf":1.4142135623730951},"64":{"tf":2.23606797749979},"65":{"tf":1.0},"67":{"tf":1.7320508075688772},"68":{"tf":1.4142135623730951},"69":{"tf":1.0},"71":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951},"73":{"tf":2.23606797749979},"74":{"tf":2.6457513110645907},"77":{"tf":1.0},"78":{"tf":1.4142135623730951},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.7320508075688772},"82":{"tf":1.0},"83":{"tf":1.4142135623730951},"85":{"tf":1.4142135623730951},"87":{"tf":1.4142135623730951},"92":{"tf":1.4142135623730951},"93":{"tf":1.7320508075688772},"94":{"tf":1.4142135623730951},"95":{"tf":1.0},"96":{"tf":1.4142135623730951},"99":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"105":{"tf":1.0},"85":{"tf":1.0}}}},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"105":{"tf":1.0}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"15":{"tf":1.0},"82":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"33":{"tf":1.0},"34":{"tf":1.0},"83":{"tf":1.0}},"s":{":":{":":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{"_":{"b":{"df":0,"docs":{},"y":{"(":{"df":0,"docs":{},"x":{"df":1,"docs":{"34":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{"(":{"a":{"df":1,"docs":{"34":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"v":{"a":{"d":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"118":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"a":{"df":1,"docs":{"107":{"tf":1.4142135623730951}}},"df":6,"docs":{"106":{"tf":1.7320508075688772},"14":{"tf":1.0},"34":{"tf":1.0},"69":{"tf":1.4142135623730951},"86":{"tf":1.0},"87":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":39,"docs":{"101":{"tf":1.0},"105":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"22":{"tf":1.4142135623730951},"23":{"tf":4.0},"24":{"tf":2.23606797749979},"25":{"tf":2.449489742783178},"26":{"tf":2.23606797749979},"27":{"tf":2.23606797749979},"28":{"tf":2.0},"30":{"tf":1.4142135623730951},"31":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":2.23606797749979},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"48":{"tf":1.4142135623730951},"56":{"tf":1.0},"58":{"tf":1.7320508075688772},"60":{"tf":2.8284271247461903},"61":{"tf":1.0},"63":{"tf":1.4142135623730951},"64":{"tf":2.449489742783178},"65":{"tf":2.449489742783178},"66":{"tf":2.0},"68":{"tf":1.7320508075688772},"69":{"tf":2.23606797749979},"70":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.7320508075688772},"73":{"tf":2.8284271247461903},"78":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"85":{"tf":1.0},"87":{"tf":1.4142135623730951},"90":{"tf":1.0},"99":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":6,"docs":{"60":{"tf":1.0},"64":{"tf":1.4142135623730951},"65":{"tf":1.0},"69":{"tf":1.7320508075688772},"70":{"tf":1.0},"71":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"1":{"df":1,"docs":{"85":{"tf":1.0}}},"2":{"df":1,"docs":{"85":{"tf":1.0}}},"3":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"85":{"tf":1.0}}}}}},"df":0,"docs":{}},"4":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"85":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":3,"docs":{"69":{"tf":1.4142135623730951},"70":{"tf":1.0},"85":{"tf":1.4142135623730951}}}},"t":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":1,"docs":{"60":{"tf":1.0}}}}}}},"df":1,"docs":{"68":{"tf":1.7320508075688772}},"e":{"c":{"!":{"[":{"0":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":1,"docs":{"16":{"tf":1.0}}}}}}},"df":0,"docs":{}},"1":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"106":{"tf":1.0}}}}}},"df":0,"docs":{}},"<":{"_":{"df":1,"docs":{"105":{"tf":1.0}}},"b":{"df":0,"docs":{},"n":{"2":{"5":{"4":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"16":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"u":{"3":{"2":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"16":{"tf":1.0}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"105":{"tf":1.0}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"61":{"tf":1.0}},"f":{"df":11,"docs":{"15":{"tf":3.605551275463989},"16":{"tf":1.7320508075688772},"17":{"tf":1.0},"18":{"tf":2.8284271247461903},"20":{"tf":1.7320508075688772},"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.4142135623730951},"25":{"tf":1.0},"26":{"tf":2.0},"27":{"tf":1.4142135623730951}},"i":{"df":14,"docs":{"105":{"tf":1.0},"15":{"tf":2.8284271247461903},"16":{"tf":1.0},"17":{"tf":3.0},"18":{"tf":4.242640687119285},"20":{"tf":2.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"24":{"tf":1.0},"25":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.4142135623730951},"92":{"tf":1.0},"97":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":2,"docs":{"17":{"tf":1.0},"18":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"s":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"0":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"10":{"tf":1.0}}}}}}}},"i":{"a":{"df":5,"docs":{"15":{"tf":2.0},"19":{"tf":1.0},"34":{"tf":1.4142135623730951},"78":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"df":8,"docs":{"114":{"tf":1.0},"115":{"tf":1.4142135623730951},"32":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"44":{"tf":1.4142135623730951},"5":{"tf":1.0},"54":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"15":{"tf":1.7320508075688772},"18":{"tf":2.23606797749979},"20":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"18":{"tf":2.0}}}}},"df":0,"docs":{}},"df":2,"docs":{"24":{"tf":1.0},"26":{"tf":1.0}}}}},"df":0,"docs":{}},"df":7,"docs":{"15":{"tf":1.4142135623730951},"18":{"tf":2.449489742783178},"20":{"tf":1.4142135623730951},"24":{"tf":1.7320508075688772},"25":{"tf":2.0},"26":{"tf":1.0},"27":{"tf":1.4142135623730951}}}}},"m":{"df":7,"docs":{"103":{"tf":1.0},"13":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"6":{"tf":1.4142135623730951}}}},"w":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":8,"docs":{"10":{"tf":1.0},"105":{"tf":1.0},"34":{"tf":1.0},"42":{"tf":1.4142135623730951},"63":{"tf":1.0},"73":{"tf":1.7320508075688772},"78":{"tf":1.0},"97":{"tf":1.0}}}},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"22":{"tf":1.0}}}},"y":{"df":14,"docs":{"10":{"tf":1.0},"118":{"tf":1.0},"15":{"tf":1.4142135623730951},"17":{"tf":1.0},"3":{"tf":1.0},"34":{"tf":1.4142135623730951},"38":{"tf":1.0},"4":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"85":{"tf":1.0},"9":{"tf":1.0}}}},"df":4,"docs":{"16":{"tf":1.0},"23":{"tf":1.0},"56":{"tf":2.0},"58":{"tf":2.23606797749979}},"e":{"'":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"18":{"tf":1.0}}}},"r":{"df":2,"docs":{"18":{"tf":1.4142135623730951},"86":{"tf":1.0}}},"v":{"df":1,"docs":{"18":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":4,"docs":{"17":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"6":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"58":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"23":{"tf":1.4142135623730951},"60":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":4,"docs":{"5":{"tf":1.0},"60":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":1,"docs":{"77":{"tf":2.23606797749979}}}},"t":{"[":{"0":{"df":1,"docs":{"67":{"tf":1.4142135623730951}}},"1":{"5":{"df":1,"docs":{"67":{"tf":1.4142135623730951}}},"6":{"df":1,"docs":{"67":{"tf":1.0}}},"df":1,"docs":{"67":{"tf":1.4142135623730951}}},"df":0,"docs":{},"i":{"df":1,"docs":{"67":{"tf":1.7320508075688772}}}},"df":26,"docs":{"105":{"tf":1.4142135623730951},"106":{"tf":2.0},"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":2.8284271247461903},"34":{"tf":1.0},"37":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"56":{"tf":2.6457513110645907},"57":{"tf":2.6457513110645907},"58":{"tf":3.1622776601683795},"6":{"tf":1.0},"60":{"tf":2.23606797749979},"64":{"tf":1.0},"67":{"tf":1.4142135623730951},"68":{"tf":2.0},"73":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0},"9":{"tf":1.0},"96":{"tf":1.4142135623730951},"98":{"tf":1.0},"99":{"tf":2.23606797749979}},"h":{"_":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"(":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"2":{"df":1,"docs":{"16":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.0}},"s":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"\"":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"\"":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":1,"docs":{"16":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"v":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"\"":{"df":0,"docs":{},"v":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"\"":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":1,"docs":{"16":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"116":{"tf":1.0},"37":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":8,"docs":{"15":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"58":{"tf":1.4142135623730951},"60":{"tf":1.0},"64":{"tf":1.0},"73":{"tf":1.4142135623730951},"93":{"tf":1.7320508075688772}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"23":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":5,"docs":{"106":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.0},"93":{"tf":1.7320508075688772},"96":{"tf":1.0}},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"l":{"d":{"df":8,"docs":{"105":{"tf":1.0},"13":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"19":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"1":{"df":1,"docs":{"5":{"tf":1.0}}},"2":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":6,"docs":{"13":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.7320508075688772},"42":{"tf":1.4142135623730951},"48":{"tf":1.0},"5":{"tf":1.0}},"r":{"df":1,"docs":{"16":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":6,"docs":{"106":{"tf":1.0},"41":{"tf":1.0},"5":{"tf":1.0},"62":{"tf":1.4142135623730951},"79":{"tf":1.0},"80":{"tf":1.0}}}}}}}}},"x":{"*":{"df":0,"docs":{},"x":{"df":1,"docs":{"60":{"tf":1.0}}}},":":{":":{"df":0,"docs":{},"i":{"df":1,"docs":{"69":{"tf":1.0}}},"y":{"(":{"a":{"df":1,"docs":{"69":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":27,"docs":{"13":{"tf":2.8284271247461903},"20":{"tf":2.23606797749979},"34":{"tf":2.449489742783178},"36":{"tf":2.8284271247461903},"37":{"tf":3.1622776601683795},"41":{"tf":1.4142135623730951},"42":{"tf":1.7320508075688772},"44":{"tf":3.872983346207417},"48":{"tf":2.23606797749979},"51":{"tf":1.0},"52":{"tf":1.0},"55":{"tf":1.4142135623730951},"56":{"tf":5.196152422706632},"58":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951},"63":{"tf":1.4142135623730951},"64":{"tf":3.3166247903554},"67":{"tf":1.4142135623730951},"68":{"tf":3.3166247903554},"69":{"tf":2.6457513110645907},"70":{"tf":1.4142135623730951},"73":{"tf":2.23606797749979},"82":{"tf":1.4142135623730951},"83":{"tf":2.23606797749979},"91":{"tf":1.0},"92":{"tf":1.4142135623730951},"96":{"tf":2.449489742783178}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"44":{"tf":2.6457513110645907}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"62":{"tf":1.0}}}}},"y":{"(":{"df":0,"docs":{},"i":{"df":1,"docs":{"96":{"tf":1.0}}}},"df":15,"docs":{"13":{"tf":2.23606797749979},"20":{"tf":1.7320508075688772},"36":{"tf":2.23606797749979},"37":{"tf":2.6457513110645907},"44":{"tf":1.7320508075688772},"48":{"tf":1.7320508075688772},"55":{"tf":1.4142135623730951},"56":{"tf":4.58257569495584},"58":{"tf":2.6457513110645907},"63":{"tf":1.0},"64":{"tf":2.0},"69":{"tf":1.4142135623730951},"82":{"tf":1.4142135623730951},"83":{"tf":2.23606797749979},"96":{"tf":1.4142135623730951}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"18":{"tf":1.0}}}}}}}}}},"z":{"df":5,"docs":{"44":{"tf":1.7320508075688772},"48":{"tf":1.7320508075688772},"55":{"tf":1.4142135623730951},"56":{"tf":4.69041575982343},"58":{"tf":2.23606797749979}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":7,"docs":{"13":{"tf":1.0},"33":{"tf":1.4142135623730951},"36":{"tf":1.0},"44":{"tf":1.0},"77":{"tf":1.7320508075688772},"80":{"tf":1.0},"92":{"tf":1.0}}}}},"k":{"df":6,"docs":{"0":{"tf":1.0},"106":{"tf":2.0},"14":{"tf":1.0},"20":{"tf":1.0},"3":{"tf":1.0},"5":{"tf":1.0}},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"m":{"df":1,"docs":{"59":{"tf":1.4142135623730951}}}}},"v":{"df":0,"docs":{},"m":{"df":5,"docs":{"0":{"tf":1.0},"109":{"tf":1.0},"112":{"tf":1.0},"19":{"tf":1.0},"6":{"tf":1.0}}}}}}}},"breadcrumbs":{"root":{"0":{"*":{"*":{"0":{"df":1,"docs":{"78":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},",":{"1":{"df":1,"docs":{"58":{"tf":1.0}}},"df":0,"docs":{}},".":{".":{"1":{"0":{"0":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"5":{"0":{"0":{"0":{"0":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":23,"docs":{"106":{"tf":2.23606797749979},"13":{"tf":1.0},"14":{"tf":1.7320508075688772},"15":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.7320508075688772},"36":{"tf":1.0},"37":{"tf":2.6457513110645907},"41":{"tf":1.0},"42":{"tf":1.7320508075688772},"44":{"tf":2.449489742783178},"58":{"tf":1.0},"60":{"tf":1.7320508075688772},"64":{"tf":1.4142135623730951},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.4142135623730951},"68":{"tf":1.4142135623730951},"69":{"tf":1.4142135623730951},"70":{"tf":1.0},"88":{"tf":1.4142135623730951}},"x":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"73":{"tf":1.4142135623730951}}}}}},"1":{",":{"2":{",":{"3":{",":{"4":{",":{"5":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{",":{"2":{",":{"4":{",":{"6":{"df":1,"docs":{"105":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"4":{"8":{"5":{"7":{"6":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"8":{"5":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"3":{"6":{"2":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":1.0}}},"6":{"1":{"0":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":4,"docs":{"44":{"tf":1.0},"56":{"tf":1.0},"60":{"tf":1.0},"67":{"tf":1.0}}},"8":{"df":1,"docs":{"56":{"tf":1.0}}},"df":36,"docs":{"106":{"tf":2.23606797749979},"13":{"tf":1.7320508075688772},"14":{"tf":2.0},"20":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.7320508075688772},"36":{"tf":1.7320508075688772},"37":{"tf":1.7320508075688772},"41":{"tf":1.7320508075688772},"44":{"tf":2.23606797749979},"5":{"tf":1.4142135623730951},"52":{"tf":1.0},"56":{"tf":2.23606797749979},"57":{"tf":1.7320508075688772},"58":{"tf":2.0},"60":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951},"63":{"tf":1.4142135623730951},"64":{"tf":1.7320508075688772},"65":{"tf":2.449489742783178},"66":{"tf":1.0},"67":{"tf":2.449489742783178},"68":{"tf":1.4142135623730951},"69":{"tf":1.0},"70":{"tf":1.0},"72":{"tf":1.4142135623730951},"76":{"tf":1.4142135623730951},"78":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":2.23606797749979},"88":{"tf":1.4142135623730951},"91":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0}}},"2":{")":{")":{".":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"(":{"df":0,"docs":{},"|":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"x":{"df":1,"docs":{"105":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"*":{"*":{"2":{")":{"*":{"*":{"2":{")":{"*":{"*":{"2":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"49":{"tf":1.0}}},"df":0,"docs":{}},"2":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"3":{"2":{"df":1,"docs":{"95":{"tf":1.0}}},"df":0,"docs":{}},"6":{"4":{"df":1,"docs":{"95":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},".":{".":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"105":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"df":2,"docs":{"56":{"tf":1.0},"67":{"tf":1.7320508075688772}}},"1":{"df":1,"docs":{"56":{"tf":1.0}}},"3":{"2":{"0":{"5":{"7":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"4":{"df":1,"docs":{"56":{"tf":1.0}}},"5":{"7":{"6":{"4":{"7":{"df":1,"docs":{"106":{"tf":1.0}}},"8":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"9":{"8":{"3":{"2":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"6":{"0":{"7":{"8":{"2":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"0":{"3":{"9":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"4":{"0":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"1":{"0":{"2":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"4":{"4":{"df":2,"docs":{"106":{"tf":1.7320508075688772},"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"106":{"tf":1.0}}},"8":{"df":0,"docs":{},"g":{"b":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{}}},"^":{"1":{"8":{"df":2,"docs":{"106":{"tf":1.0},"5":{"tf":1.0}}},"df":0,"docs":{}},"2":{"0":{"df":1,"docs":{"5":{"tf":1.0}}},"2":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":1,"docs":{"118":{"tf":1.0}}},"b":{"df":1,"docs":{"118":{"tf":1.0}}},"df":16,"docs":{"106":{"tf":2.0},"14":{"tf":1.0},"44":{"tf":1.7320508075688772},"48":{"tf":1.0},"5":{"tf":1.7320508075688772},"56":{"tf":2.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.4142135623730951},"65":{"tf":1.7320508075688772},"69":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"85":{"tf":1.0},"87":{"tf":2.23606797749979},"91":{"tf":1.0}}},"3":{"+":{"2":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"1":{"3":{"4":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"106":{"tf":1.4142135623730951}}},"2":{"df":7,"docs":{"106":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"77":{"tf":1.7320508075688772}}},"3":{"df":1,"docs":{"56":{"tf":1.0}}},"df":13,"docs":{"106":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"44":{"tf":1.4142135623730951},"48":{"tf":1.0},"5":{"tf":1.0},"51":{"tf":1.0},"56":{"tf":2.0},"62":{"tf":1.0},"69":{"tf":1.0},"85":{"tf":1.0},"87":{"tf":2.0},"91":{"tf":1.4142135623730951}}},"4":{"1":{"9":{"4":{"3":{"0":{"4":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"df":1,"docs":{"106":{"tf":1.0}}},"4":{"c":{"d":{"9":{"1":{"c":{"1":{"2":{"0":{"3":{"3":{"a":{"d":{"4":{"c":{"6":{"a":{"6":{"b":{"1":{"9":{"7":{"9":{"3":{"b":{"7":{"3":{"df":0,"docs":{},"f":{"1":{"a":{"6":{"6":{"d":{"9":{"9":{"a":{"0":{"df":0,"docs":{},"e":{"0":{"b":{"df":0,"docs":{},"f":{"6":{"3":{"4":{"9":{"4":{"c":{"1":{"2":{"c":{"df":0,"docs":{},"e":{"b":{"1":{"df":0,"docs":{},"f":{"4":{"5":{"1":{"df":0,"docs":{},"e":{"c":{"9":{"4":{"5":{"2":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":1.0}}},"df":3,"docs":{"34":{"tf":1.0},"5":{"tf":1.0},"87":{"tf":1.7320508075688772}}},"5":{"df":3,"docs":{"5":{"tf":1.0},"56":{"tf":2.0},"87":{"tf":1.0}}},"6":{"2":{"df":1,"docs":{"106":{"tf":1.0}}},"8":{"4":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":1.0}}},"7":{"0":{"2":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"5":{"0":{"3":{"2":{"9":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"7":{"df":1,"docs":{"56":{"tf":1.0}}},"df":6,"docs":{"56":{"tf":1.4142135623730951},"66":{"tf":1.0},"69":{"tf":1.4142135623730951},"70":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.4142135623730951}}},"8":{"3":{"df":1,"docs":{"106":{"tf":1.0}}},"df":7,"docs":{"13":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"20":{"tf":2.0},"33":{"tf":1.4142135623730951},"36":{"tf":1.0},"37":{"tf":1.0}}},"9":{"8":{"df":1,"docs":{"106":{"tf":1.0}}},"9":{"df":1,"docs":{"106":{"tf":1.4142135623730951}}},"df":2,"docs":{"20":{"tf":1.4142135623730951},"69":{"tf":1.0}}},"_":{"df":13,"docs":{"106":{"tf":1.4142135623730951},"34":{"tf":1.0},"37":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.4142135623730951},"67":{"tf":1.0},"69":{"tf":2.449489742783178},"70":{"tf":1.4142135623730951},"81":{"tf":1.4142135623730951},"82":{"tf":1.0},"88":{"tf":1.0}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":1,"docs":{"16":{"tf":1.0}}}}}}}},"a":{"(":{"7":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.0}}}}}}},"[":{"0":{"df":1,"docs":{"81":{"tf":1.0}}},"1":{"df":1,"docs":{"81":{"tf":1.0}}},"7":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"^":{"2":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"b":{"c":{"df":1,"docs":{"62":{"tf":1.0}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"76":{"tf":1.0},"92":{"tf":1.0}}}},"v":{"df":2,"docs":{"106":{"tf":1.0},"15":{"tf":1.7320508075688772}}}},"s":{"(":{"df":0,"docs":{},"p":{"df":1,"docs":{"77":{"tf":1.0}}},"q":{"df":1,"docs":{"77":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"40":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"32":{"tf":1.0},"5":{"tf":1.0},"59":{"tf":1.0},"83":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"c":{"df":1,"docs":{"67":{"tf":2.0}},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"42":{"tf":1.0}}}},"s":{"df":0,"docs":{},"s":{"df":9,"docs":{"105":{"tf":1.0},"106":{"tf":2.6457513110645907},"34":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.7320508075688772},"62":{"tf":1.0},"78":{"tf":1.0},"81":{"tf":1.4142135623730951},"90":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"18":{"tf":1.7320508075688772}}}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"68":{"tf":1.0}}}},"v":{"df":3,"docs":{"54":{"tf":1.0},"56":{"tf":2.0},"58":{"tf":2.6457513110645907}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"106":{"tf":1.7320508075688772},"57":{"tf":1.0}}}},"df":0,"docs":{}}}},"d":{"d":{"(":{"2":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"4":{"<":{"0":{"df":1,"docs":{"58":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"58":{"tf":1.0}}},"5":{"(":{"2":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":1.0}}},"<":{"0":{"df":2,"docs":{"56":{"tf":1.0},"57":{"tf":1.0}}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"(":{"3":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"(":{"4":{"2":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"72":{"tf":1.0}}},"r":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"b":{"(":{"0":{"df":1,"docs":{"56":{"tf":1.0}}},"1":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"_":{"a":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"a":{"b":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"a":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}},"c":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":1,"docs":{"56":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":14,"docs":{"102":{"tf":1.0},"105":{"tf":1.0},"118":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951},"58":{"tf":1.7320508075688772},"60":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.4142135623730951},"72":{"tf":1.7320508075688772},"74":{"tf":1.4142135623730951},"83":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{".":{"a":{"d":{"d":{"(":{"df":0,"docs":{},"m":{",":{"df":0,"docs":{},"n":{"df":1,"docs":{"58":{"tf":1.0}}}},"df":1,"docs":{"58":{"tf":1.0}}},"x":{"df":1,"docs":{"58":{"tf":1.4142135623730951}}},"z":{"df":1,"docs":{"58":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"58":{"tf":1.0}}}},"i":{"df":0,"docs":{},"t":{"df":8,"docs":{"56":{"tf":1.0},"62":{"tf":1.0},"71":{"tf":1.0},"77":{"tf":1.4142135623730951},"78":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"85":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"105":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"u":{"b":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}}}},"df":2,"docs":{"64":{"tf":1.0},"67":{"tf":1.0}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"43":{"tf":1.0}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"115":{"tf":1.0}}}},"df":0,"docs":{}}}},"g":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"17":{"tf":1.0}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"43":{"tf":1.0}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":4,"docs":{"15":{"tf":1.4142135623730951},"18":{"tf":2.0},"24":{"tf":1.0},"6":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"109":{"tf":1.0}}},"r":{"df":4,"docs":{"113":{"tf":1.0},"114":{"tf":1.0},"117":{"tf":2.449489742783178},"118":{"tf":2.23606797749979}}}},"l":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"r":{"a":{"df":5,"docs":{"61":{"tf":1.4142135623730951},"67":{"tf":2.23606797749979},"73":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"o":{"c":{":":{":":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"c":{":":{":":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"c":{"df":2,"docs":{"105":{"tf":1.0},"106":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":2,"docs":{"105":{"tf":1.0},"106":{"tf":1.0}}},"df":0,"docs":{},"w":{"df":21,"docs":{"101":{"tf":1.0},"32":{"tf":1.0},"44":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"67":{"tf":1.4142135623730951},"73":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.4142135623730951},"78":{"tf":1.0},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"85":{"tf":1.4142135623730951},"99":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"i":{"df":2,"docs":{"104":{"tf":1.0},"93":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"85":{"tf":1.0}}}}}},"w":{"a":{"df":0,"docs":{},"y":{"df":7,"docs":{"64":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.4142135623730951},"83":{"tf":1.0}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"77":{"tf":1.4142135623730951}}}}}}},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"15":{"tf":1.0}}}}}},"d":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"20":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":7,"docs":{"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"18":{"tf":1.0},"33":{"tf":2.0},"44":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"38":{"tf":1.0}},"e":{"(":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"38":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"15":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":3,"docs":{"69":{"tf":1.4142135623730951},"82":{"tf":1.0},"92":{"tf":1.0}}}},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"33":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"p":{"df":3,"docs":{"18":{"tf":1.4142135623730951},"24":{"tf":1.0},"26":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"71":{"tf":1.0}}}},"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"94":{"tf":1.0}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"i":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"'":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}},"df":1,"docs":{"0":{"tf":1.0}}},"df":5,"docs":{"101":{"tf":1.0},"113":{"tf":1.0},"116":{"tf":1.0},"83":{"tf":1.4142135623730951},"96":{"tf":1.4142135623730951}}}}}},"r":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":4,"docs":{"105":{"tf":1.0},"34":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"10":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":8,"docs":{"103":{"tf":1.0},"113":{"tf":1.7320508075688772},"114":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"32":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":17,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0},"38":{"tf":1.4142135623730951},"43":{"tf":1.0},"56":{"tf":1.0},"77":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":1.7320508075688772},"97":{"tf":1.0},"99":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"73":{"tf":1.0},"78":{"tf":1.4142135623730951}}}}}}}},"m":{"df":3,"docs":{"65":{"tf":1.4142135623730951},"69":{"tf":1.4142135623730951},"70":{"tf":2.0}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"[":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"34":{"tf":1.0}}}}}},"a":{"df":0,"docs":{},"y":{"df":15,"docs":{"18":{"tf":1.0},"34":{"tf":1.0},"60":{"tf":2.0},"62":{"tf":1.4142135623730951},"67":{"tf":1.7320508075688772},"69":{"tf":2.449489742783178},"70":{"tf":1.4142135623730951},"71":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":3.872983346207417},"87":{"tf":1.0},"91":{"tf":1.7320508075688772},"94":{"tf":1.0}}}},"df":2,"docs":{"34":{"tf":1.4142135623730951},"56":{"tf":1.0}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"14":{"tf":1.0},"15":{"tf":1.7320508075688772},"18":{"tf":1.0},"5":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"k":{"df":2,"docs":{"105":{"tf":1.0},"97":{"tf":1.0}}},"m":{"df":35,"docs":{"103":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0},"113":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"22":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"32":{"tf":2.0},"33":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.4142135623730951},"36":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"46":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"9":{"tf":1.7320508075688772}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"106":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"!":{"(":{"a":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"a":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"42":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"!":{"(":{"d":{"a":{"df":0,"docs":{},"t":{"a":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{":":{":":{"<":{"df":0,"docs":{},"u":{"3":{"2":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"105":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":3.7416573867739413}}}},"z":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":5,"docs":{"13":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"44":{"tf":1.7320508075688772},"49":{"tf":1.0}}}}}}},"df":4,"docs":{"13":{"tf":1.0},"36":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":13,"docs":{"13":{"tf":1.0},"36":{"tf":1.0},"42":{"tf":2.23606797749979},"48":{"tf":2.449489742783178},"52":{"tf":1.0},"54":{"tf":1.4142135623730951},"56":{"tf":1.0},"63":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":2.0},"90":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"56":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.0}}}}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"31":{"tf":1.0},"43":{"tf":1.0}}}},"df":1,"docs":{"6":{"tf":1.0}}}}}},"v":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":5,"docs":{"104":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.0},"34":{"tf":1.7320508075688772},"68":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"18":{"tf":1.0},"64":{"tf":1.0}}},"df":0,"docs":{}}}},"w":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"106":{"tf":1.0}}}},"df":0,"docs":{}}},"b":{"(":{"df":0,"docs":{},"i":{"df":1,"docs":{"88":{"tf":1.0}}}},".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.0}}}}}}},"a":{"b":{"df":0,"docs":{},"y":{"b":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"110":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"44":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"d":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":5,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}}}},"df":17,"docs":{"106":{"tf":2.0},"109":{"tf":2.0},"11":{"tf":1.0},"110":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"15":{"tf":2.0},"17":{"tf":2.0},"18":{"tf":3.7416573867739413},"20":{"tf":2.0},"23":{"tf":1.7320508075688772},"24":{"tf":2.6457513110645907},"25":{"tf":2.6457513110645907},"26":{"tf":2.6457513110645907},"27":{"tf":2.6457513110645907},"28":{"tf":2.23606797749979},"73":{"tf":1.0}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"2":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"43":{"tf":1.0},"56":{"tf":1.0}}},"i":{"c":{"df":2,"docs":{"33":{"tf":1.0},"87":{"tf":1.0}}},"df":0,"docs":{}}}},"b":{"df":8,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0}}},"df":18,"docs":{"106":{"tf":2.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"33":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":2.0},"48":{"tf":1.4142135623730951},"53":{"tf":1.0},"56":{"tf":3.4641016151377544},"57":{"tf":2.8284271247461903},"58":{"tf":1.7320508075688772},"62":{"tf":1.4142135623730951},"69":{"tf":2.6457513110645907},"73":{"tf":1.0},"85":{"tf":1.0}},"e":{"df":1,"docs":{"74":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"15":{"tf":1.7320508075688772},"17":{"tf":1.0},"18":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"37":{"tf":1.4142135623730951},"41":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"v":{"df":1,"docs":{"40":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"55":{"tf":1.0},"57":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":6,"docs":{"105":{"tf":1.0},"15":{"tf":1.4142135623730951},"18":{"tf":1.0},"20":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.7320508075688772}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"5":{"tf":1.0}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"16":{"tf":1.0},"19":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":3,"docs":{"18":{"tf":1.0},"34":{"tf":1.0},"73":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":5,"docs":{"15":{"tf":1.0},"18":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.7320508075688772},"9":{"tf":1.0}}}}},"d":{"df":3,"docs":{"33":{"tf":1.0},"64":{"tf":1.0},"69":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":2,"docs":{"73":{"tf":1.0},"77":{"tf":2.8284271247461903}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"62":{"tf":1.7320508075688772}}}}}}},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":7,"docs":{"116":{"tf":2.0},"37":{"tf":1.7320508075688772},"61":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":2.0},"68":{"tf":1.0},"69":{"tf":1.0}}}},"df":0,"docs":{}}},"n":{"2":{"5":{"4":{"df":14,"docs":{"111":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":2.449489742783178},"17":{"tf":1.4142135623730951},"18":{"tf":2.8284271247461903},"20":{"tf":2.23606797749979},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"o":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"62":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"6":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"37":{"tf":1.0}}},"l":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"68":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":4,"docs":{"102":{"tf":3.7416573867739413},"71":{"tf":1.0},"74":{"tf":1.4142135623730951},"76":{"tf":1.7320508075688772}},"e":{"a":{"df":0,"docs":{},"n":{"df":6,"docs":{"56":{"tf":1.4142135623730951},"58":{"tf":1.7320508075688772},"68":{"tf":1.0},"76":{"tf":1.4142135623730951},"77":{"tf":1.0},"78":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"106":{"tf":3.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"t":{"df":0,"docs":{},"h":{"df":8,"docs":{"10":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.0},"4":{"tf":1.0},"57":{"tf":1.0},"68":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"71":{"tf":1.0},"84":{"tf":2.0}}}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"71":{"tf":1.0},"72":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}},"r":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"62":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"19":{"tf":1.0}}}},"df":0,"docs":{}}}}},"n":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"16":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"u":{"df":1,"docs":{"23":{"tf":1.0}},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"\"":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"i":{"df":0,"docs":{},"l":{"d":{"df":7,"docs":{"10":{"tf":1.0},"106":{"tf":1.7320508075688772},"11":{"tf":1.7320508075688772},"12":{"tf":1.7320508075688772},"5":{"tf":1.0},"6":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":24,"docs":{"0":{"tf":1.0},"100":{"tf":1.7320508075688772},"101":{"tf":1.0},"102":{"tf":1.0},"109":{"tf":1.0},"6":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.4142135623730951},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"89":{"tf":1.7320508075688772},"90":{"tf":1.4142135623730951},"91":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0},"99":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"#":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"f":{"df":1,"docs":{"73":{"tf":1.4142135623730951}}}},"df":2,"docs":{"18":{"tf":1.0},"73":{"tf":2.0}}}}}},"c":{"(":{"df":0,"docs":{},"i":{"df":1,"docs":{"88":{"tf":1.0}}}},".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.0}}}}}}},"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":18,"docs":{"105":{"tf":1.0},"15":{"tf":1.0},"22":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":1.0},"44":{"tf":1.0},"54":{"tf":1.7320508075688772},"55":{"tf":1.0},"56":{"tf":2.8284271247461903},"58":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951},"62":{"tf":1.0},"67":{"tf":1.4142135623730951},"68":{"tf":1.4142135623730951},"82":{"tf":1.0},"84":{"tf":1.4142135623730951},"99":{"tf":1.0}}}},"n":{"'":{"df":0,"docs":{},"t":{"df":1,"docs":{"33":{"tf":1.0}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"65":{"tf":1.0},"82":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":8,"docs":{"10":{"tf":1.0},"11":{"tf":2.23606797749979},"12":{"tf":1.7320508075688772},"16":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"3":{"tf":2.23606797749979},"4":{"tf":1.0},"5":{"tf":1.4142135623730951}}}}},"s":{"df":0,"docs":{},"e":{"df":10,"docs":{"106":{"tf":1.4142135623730951},"14":{"tf":1.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"19":{"tf":1.0},"68":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"83":{"tf":1.0},"93":{"tf":1.0}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"69":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"s":{"df":3,"docs":{"76":{"tf":1.0},"78":{"tf":1.0},"93":{"tf":1.0}}}}},"d":{"df":2,"docs":{"11":{"tf":1.0},"12":{"tf":1.0}}},"df":8,"docs":{"10":{"tf":1.0},"11":{"tf":1.4142135623730951},"33":{"tf":1.0},"56":{"tf":2.8284271247461903},"57":{"tf":2.6457513110645907},"58":{"tf":1.7320508075688772},"69":{"tf":2.449489742783178},"85":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":2,"docs":{"60":{"tf":1.0},"99":{"tf":1.0}}}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"39":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"105":{"tf":1.0},"34":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":1.4142135623730951},"71":{"tf":1.0}}}}},"df":0,"docs":{}}}},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"97":{"tf":2.23606797749979}}}}}}},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"5":{"tf":2.449489742783178}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"15":{"tf":1.0}}}},"c":{"df":0,"docs":{},"k":{"df":7,"docs":{"105":{"tf":1.0},"19":{"tf":1.0},"37":{"tf":1.0},"44":{"tf":1.7320508075688772},"5":{"tf":1.0},"69":{"tf":1.4142135623730951},"92":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"72":{"tf":1.0},"81":{"tf":1.0}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"97":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":3,"docs":{"26":{"tf":1.0},"27":{"tf":1.0},"78":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"_":{"0":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"106":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"106":{"tf":1.0}}},"1":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"106":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"106":{"tf":1.0}}},"2":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"106":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"2":{"(":{"1":{"8":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":2,"docs":{"106":{"tf":4.69041575982343},"5":{"tf":2.23606797749979}}}}}},"i":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"15":{"tf":1.0},"18":{"tf":2.449489742783178},"76":{"tf":1.0}}}}}},"df":0,"docs":{}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"105":{"tf":1.0},"5":{"tf":1.4142135623730951}}}},"p":{"df":1,"docs":{"31":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":18,"docs":{"11":{"tf":2.449489742783178},"12":{"tf":1.7320508075688772},"13":{"tf":1.0},"14":{"tf":1.7320508075688772},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":2,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"82":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"44":{"tf":2.8284271247461903},"48":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.4142135623730951}}}},"o":{"d":{"df":0,"docs":{},"e":{"df":10,"docs":{"1":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"33":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0},"96":{"tf":1.0}}}},"df":1,"docs":{"6":{"tf":1.0}},"l":{"[":{"df":0,"docs":{},"k":{"df":2,"docs":{"60":{"tf":1.4142135623730951},"73":{"tf":1.0}}}},"df":15,"docs":{"33":{"tf":1.4142135623730951},"37":{"tf":2.0},"44":{"tf":1.4142135623730951},"56":{"tf":2.8284271247461903},"57":{"tf":3.0},"58":{"tf":3.7416573867739413},"60":{"tf":2.449489742783178},"67":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":2.449489742783178},"83":{"tf":1.4142135623730951},"86":{"tf":1.4142135623730951},"87":{"tf":1.4142135623730951},"88":{"tf":1.4142135623730951},"96":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"81":{"tf":1.0}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"n":{"df":25,"docs":{"14":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":2.23606797749979},"34":{"tf":1.0},"37":{"tf":2.0},"52":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":1.7320508075688772},"57":{"tf":2.449489742783178},"58":{"tf":1.4142135623730951},"60":{"tf":4.123105625617661},"64":{"tf":1.0},"67":{"tf":2.449489742783178},"68":{"tf":2.6457513110645907},"71":{"tf":1.4142135623730951},"73":{"tf":3.3166247903554},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":2.449489742783178},"86":{"tf":2.449489742783178},"87":{"tf":2.23606797749979},"88":{"tf":1.4142135623730951},"96":{"tf":1.7320508075688772},"98":{"tf":1.4142135623730951},"99":{"tf":2.0}}}}}},"m":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"106":{"tf":1.0},"83":{"tf":2.0},"87":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":3,"docs":{"103":{"tf":1.0},"106":{"tf":1.0},"109":{"tf":1.4142135623730951}}},"m":{"a":{"df":2,"docs":{"23":{"tf":1.0},"25":{"tf":1.0}},"n":{"d":{"df":7,"docs":{"11":{"tf":1.0},"12":{"tf":1.0},"15":{"tf":1.7320508075688772},"17":{"tf":1.0},"18":{"tf":1.0},"21":{"tf":2.0},"22":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"106":{"tf":1.0},"24":{"tf":1.0},"37":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":2,"docs":{"78":{"tf":1.0},"81":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"62":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.7320508075688772}}}}}}},"t":{"df":2,"docs":{"83":{"tf":1.0},"84":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":21,"docs":{"10":{"tf":1.0},"105":{"tf":2.0},"106":{"tf":2.0},"113":{"tf":1.0},"114":{"tf":2.0},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.0},"4":{"tf":1.0},"43":{"tf":1.0},"6":{"tf":1.0},"71":{"tf":1.0},"9":{"tf":1.4142135623730951},"90":{"tf":1.4142135623730951}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"72":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"43":{"tf":1.0}}},"x":{"df":7,"docs":{"0":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"56":{"tf":1.0},"65":{"tf":1.0},"80":{"tf":1.0}}}},"i":{"c":{"df":2,"docs":{"34":{"tf":1.0},"73":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"60":{"tf":1.4142135623730951},"69":{"tf":2.23606797749979},"70":{"tf":1.0}}},"s":{"df":2,"docs":{"54":{"tf":1.0},"80":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":6,"docs":{"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"25":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"27":{"tf":1.7320508075688772},"28":{"tf":1.7320508075688772}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"15":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"t":{"df":16,"docs":{"105":{"tf":1.0},"106":{"tf":2.449489742783178},"14":{"tf":2.0},"15":{"tf":2.23606797749979},"16":{"tf":1.0},"18":{"tf":2.449489742783178},"23":{"tf":1.0},"34":{"tf":1.0},"37":{"tf":1.0},"5":{"tf":1.0},"56":{"tf":1.0},"60":{"tf":1.0},"68":{"tf":1.0},"73":{"tf":1.0},"92":{"tf":1.0},"96":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":1,"docs":{"16":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}},"n":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":3,"docs":{"79":{"tf":1.0},"81":{"tf":1.0},"87":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"35":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"37":{"tf":1.0},"56":{"tf":1.0},"66":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"56":{"tf":1.0}}}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"10":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"18":{"tf":1.0}}}}},"j":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"76":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}}}},"n":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"101":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"(":{"(":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"40":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"80":{"tf":1.4142135623730951},"92":{"tf":1.0}}}}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":9,"docs":{"116":{"tf":1.0},"15":{"tf":1.4142135623730951},"37":{"tf":1.0},"60":{"tf":1.7320508075688772},"61":{"tf":1.0},"67":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"87":{"tf":1.0}}}}},"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"101":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{"_":{"b":{"df":0,"docs":{},"i":{"df":1,"docs":{"34":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"_":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"64":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":12,"docs":{"114":{"tf":1.0},"115":{"tf":1.4142135623730951},"116":{"tf":1.0},"32":{"tf":1.0},"35":{"tf":1.0},"37":{"tf":2.0},"57":{"tf":1.0},"58":{"tf":2.23606797749979},"60":{"tf":1.0},"67":{"tf":1.4142135623730951},"68":{"tf":1.0},"99":{"tf":1.0}},"t":{"df":26,"docs":{"101":{"tf":2.23606797749979},"115":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"15":{"tf":1.0},"23":{"tf":1.0},"34":{"tf":1.0},"37":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772},"58":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951},"64":{"tf":1.7320508075688772},"67":{"tf":2.449489742783178},"68":{"tf":2.23606797749979},"73":{"tf":1.4142135623730951},"78":{"tf":1.0},"79":{"tf":1.0},"83":{"tf":1.7320508075688772},"92":{"tf":1.4142135623730951},"94":{"tf":1.0},"99":{"tf":1.0}}}}}},"df":6,"docs":{"101":{"tf":2.449489742783178},"102":{"tf":1.0},"64":{"tf":2.0},"67":{"tf":1.0},"68":{"tf":3.3166247903554},"94":{"tf":1.4142135623730951}},"u":{"c":{"df":0,"docs":{},"t":{"df":6,"docs":{"38":{"tf":1.4142135623730951},"80":{"tf":1.4142135623730951},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.7320508075688772},"97":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"85":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":12,"docs":{"117":{"tf":1.0},"18":{"tf":1.7320508075688772},"21":{"tf":1.0},"23":{"tf":2.0},"24":{"tf":2.0},"25":{"tf":1.7320508075688772},"26":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"5":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"80":{"tf":1.0},"81":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"21":{"tf":1.0},"79":{"tf":1.0}}}},"x":{"df":0,"docs":{},"t":{"df":8,"docs":{"61":{"tf":1.4142135623730951},"68":{"tf":1.0},"71":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"88":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":4,"docs":{"0":{"tf":1.0},"106":{"tf":3.3166247903554},"44":{"tf":1.0},"70":{"tf":1.0}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"17":{"tf":1.7320508075688772},"18":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"1":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"93":{"tf":1.7320508075688772}}}},"r":{"df":0,"docs":{},"s":{"df":2,"docs":{"73":{"tf":1.0},"93":{"tf":1.4142135623730951}}},"t":{"df":5,"docs":{"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"73":{"tf":1.0},"78":{"tf":1.0},"93":{"tf":1.7320508075688772}}}}}}},"p":{"df":0,"docs":{},"i":{"df":4,"docs":{"101":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":1.0},"73":{"tf":1.0}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"5":{"tf":1.0},"70":{"tf":1.0},"92":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"36":{"tf":1.0},"40":{"tf":2.6457513110645907}}}}}},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"18":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"17":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"u":{"=":{"df":0,"docs":{},"n":{"df":1,"docs":{"11":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"'":{"df":1,"docs":{"16":{"tf":1.0}}},"df":6,"docs":{"105":{"tf":1.0},"106":{"tf":1.7320508075688772},"11":{"tf":1.0},"16":{"tf":1.7320508075688772},"5":{"tf":1.7320508075688772},"9":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":17,"docs":{"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"16":{"tf":2.23606797749979},"17":{"tf":1.4142135623730951},"18":{"tf":1.7320508075688772},"3":{"tf":1.0},"34":{"tf":1.4142135623730951},"43":{"tf":1.0},"5":{"tf":1.7320508075688772},"60":{"tf":1.0},"64":{"tf":2.0},"67":{"tf":1.0},"68":{"tf":1.7320508075688772},"69":{"tf":1.0},"73":{"tf":1.0},"85":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"v":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"23":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":1,"docs":{"23":{"tf":2.6457513110645907}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":13,"docs":{"14":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.0},"43":{"tf":1.0},"56":{"tf":1.0},"60":{"tf":1.0},"68":{"tf":1.4142135623730951},"71":{"tf":1.0},"81":{"tf":1.0},"84":{"tf":1.0},"9":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"5":{"tf":1.4142135623730951}}}}}}},"y":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"106":{"tf":1.0}}}},"df":0,"docs":{}}},"d":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.0}}}}}}},"a":{"df":0,"docs":{},"t":{"a":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"105":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":9,"docs":{"105":{"tf":1.0},"117":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"5":{"tf":2.0},"65":{"tf":1.0},"85":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":9,"docs":{"106":{"tf":1.7320508075688772},"15":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"33":{"tf":1.0},"85":{"tf":1.0}},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":4,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"79":{"tf":1.0},"94":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"18":{"tf":1.0},"23":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"l":{"a":{"df":0,"docs":{},"r":{"df":16,"docs":{"34":{"tf":2.0},"38":{"tf":1.4142135623730951},"40":{"tf":1.0},"41":{"tf":1.0},"43":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":2.23606797749979},"60":{"tf":2.449489742783178},"61":{"tf":1.0},"63":{"tf":1.0},"67":{"tf":1.0},"71":{"tf":1.7320508075688772},"73":{"tf":3.0},"85":{"tf":1.4142135623730951},"86":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"r":{"(":{"a":{"df":2,"docs":{"13":{"tf":1.0},"36":{"tf":1.0}}},"df":0,"docs":{}},"df":2,"docs":{"13":{"tf":1.0},"36":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"13":{"tf":1.0},"36":{"tf":1.0},"44":{"tf":1.0}}}}}}}}},"d":{"df":0,"docs":{},"u":{"c":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":1,"docs":{"69":{"tf":1.0}},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":16,"docs":{"106":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":2.8284271247461903},"24":{"tf":1.4142135623730951},"25":{"tf":1.7320508075688772},"26":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"30":{"tf":1.0},"31":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.4142135623730951},"5":{"tf":1.0},"65":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":27,"docs":{"100":{"tf":1.0},"101":{"tf":1.0},"105":{"tf":1.0},"117":{"tf":1.4142135623730951},"118":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":2.23606797749979},"34":{"tf":2.449489742783178},"36":{"tf":1.0},"37":{"tf":1.4142135623730951},"38":{"tf":1.0},"40":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.4142135623730951},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":2.6457513110645907},"68":{"tf":1.4142135623730951},"72":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.4142135623730951},"85":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"90":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"48":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.7320508075688772},"98":{"tf":1.0}}}}}}},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":15,"docs":{"117":{"tf":1.0},"118":{"tf":2.449489742783178},"13":{"tf":1.0},"15":{"tf":1.4142135623730951},"20":{"tf":1.0},"23":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"36":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"44":{"tf":1.0},"56":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"98":{"tf":2.23606797749979}},"e":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"23":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"64":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"58":{"tf":1.0}}}}}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":3,"docs":{"68":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":7,"docs":{"10":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"56":{"tf":1.0},"57":{"tf":1.0},"61":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0}}},"df":0,"docs":{}}}},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"5":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":3,"docs":{"0":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.0}}}}},"k":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"10":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"64":{"tf":1.0},"65":{"tf":1.0},"69":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":9,"docs":{"106":{"tf":1.0},"17":{"tf":1.0},"34":{"tf":1.0},"37":{"tf":1.0},"5":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"68":{"tf":1.0},"71":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"71":{"tf":1.0}}}}}}}},"v":{"df":1,"docs":{"10":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":3,"docs":{"10":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0}}}}}},"i":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"59":{"tf":1.0}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":14,"docs":{"106":{"tf":1.4142135623730951},"13":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"33":{"tf":1.4142135623730951},"61":{"tf":1.0},"73":{"tf":1.4142135623730951},"85":{"tf":1.0},"88":{"tf":1.0},"97":{"tf":1.4142135623730951},"98":{"tf":1.0}}}}}},"r":{"df":6,"docs":{"15":{"tf":1.0},"24":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951}},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":3,"docs":{"17":{"tf":1.0},"20":{"tf":1.0},"83":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":10,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"17":{"tf":1.0},"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"33":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"s":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"70":{"tf":1.0}}}}}}},"df":0,"docs":{},"j":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"76":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":2,"docs":{"62":{"tf":1.0},"77":{"tf":1.7320508075688772}}}}}},"o":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":6,"docs":{"2":{"tf":1.0},"21":{"tf":1.0},"31":{"tf":1.0},"59":{"tf":1.4142135623730951},"79":{"tf":1.0},"8":{"tf":1.0}}}}}}}},"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"6":{"tf":1.0}}}}},"df":0,"docs":{}},"n":{"'":{"df":0,"docs":{},"t":{"df":1,"docs":{"106":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":3,"docs":{"106":{"tf":1.0},"60":{"tf":1.0},"64":{"tf":1.0}}}},"u":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"62":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"(":{"3":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"n":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"73":{"tf":1.0}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"5":{"tf":1.0}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":1,"docs":{"106":{"tf":1.7320508075688772}}}},"r":{"df":0,"docs":{},"e":{"df":3,"docs":{"73":{"tf":1.0},"94":{"tf":1.0},"99":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":3,"docs":{"23":{"tf":1.0},"36":{"tf":1.4142135623730951},"81":{"tf":2.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"g":{"df":4,"docs":{"105":{"tf":1.0},"34":{"tf":1.0},"62":{"tf":1.7320508075688772},"64":{"tf":1.0}}}},"6":{"a":{"6":{"df":0,"docs":{},"f":{"d":{"6":{"3":{"d":{"8":{"6":{"4":{"c":{"7":{"3":{"4":{"d":{"6":{"a":{"4":{"d":{"df":0,"docs":{},"f":{"4":{"9":{"8":{"8":{"df":0,"docs":{},"f":{"7":{"3":{"3":{"7":{"3":{"8":{"7":{"9":{"0":{"2":{"6":{"2":{"a":{"df":0,"docs":{},"f":{"9":{"c":{"7":{"b":{"0":{"1":{"4":{"a":{"1":{"c":{"0":{"3":{"6":{"6":{"7":{"9":{"b":{"a":{"df":0,"docs":{},"f":{"1":{"1":{"2":{"5":{"df":1,"docs":{"106":{"tf":2.23606797749979}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"c":{"df":0,"docs":{},"h":{"df":15,"docs":{"106":{"tf":1.7320508075688772},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.7320508075688772},"14":{"tf":1.0},"18":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":1.4142135623730951},"40":{"tf":1.7320508075688772},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"81":{"tf":1.0},"85":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"82":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"i":{"df":2,"docs":{"17":{"tf":1.0},"73":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"10":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0}}}}}}}},"df":1,"docs":{"67":{"tf":2.0}},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"82":{"tf":1.4142135623730951},"92":{"tf":1.0},"94":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"i":{"df":2,"docs":{"0":{"tf":1.0},"15":{"tf":1.0}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"112":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"62":{"tf":1.0}}}}},"df":18,"docs":{"117":{"tf":1.0},"23":{"tf":1.0},"41":{"tf":1.0},"51":{"tf":2.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":3.0},"80":{"tf":1.4142135623730951},"81":{"tf":1.7320508075688772},"82":{"tf":1.0},"83":{"tf":1.0},"88":{"tf":1.0},"93":{"tf":1.7320508075688772}}}}}}},"f":{"df":1,"docs":{"105":{"tf":1.0}}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":5,"docs":{"118":{"tf":1.0},"69":{"tf":1.7320508075688772},"70":{"tf":1.0},"80":{"tf":1.4142135623730951},"94":{"tf":1.0}}}}}},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":10,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"106":{"tf":1.0},"11":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"19":{"tf":1.0}}}},"df":0,"docs":{}}}}},"d":{"df":4,"docs":{"107":{"tf":1.0},"44":{"tf":1.7320508075688772},"69":{"tf":1.0},"94":{"tf":1.0}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"c":{"df":2,"docs":{"116":{"tf":1.7320508075688772},"34":{"tf":1.0}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":1,"docs":{"18":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"20":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"20":{"tf":1.0},"68":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"m":{"df":5,"docs":{"101":{"tf":1.0},"69":{"tf":1.7320508075688772},"70":{"tf":1.0},"71":{"tf":1.0},"85":{"tf":3.1622776601683795}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"85":{"tf":1.4142135623730951}},"e":{":":{":":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"1":{"df":1,"docs":{"85":{"tf":1.4142135623730951}}},"2":{"df":1,"docs":{"85":{"tf":1.0}}},"3":{"(":{"3":{"df":1,"docs":{"85":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"4":{"(":{"1":{"df":1,"docs":{"85":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"v":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"16":{"tf":1.0},"5":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"73":{"tf":1.0},"82":{"tf":1.0}}}}}}}},"q":{"df":2,"docs":{"102":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951}},"u":{"a":{"df":0,"docs":{},"l":{"df":5,"docs":{"20":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.4142135623730951},"77":{"tf":2.0},"78":{"tf":1.0}},"s":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"67":{"tf":1.4142135623730951}}},"y":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"(":{"1":{"6":{"df":1,"docs":{"67":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":7,"docs":{"22":{"tf":1.0},"71":{"tf":1.0},"77":{"tf":2.23606797749979},"78":{"tf":1.4142135623730951},"81":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":3,"docs":{"83":{"tf":1.0},"84":{"tf":1.0},"97":{"tf":1.0}}}}}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":9,"docs":{"10":{"tf":1.0},"106":{"tf":1.7320508075688772},"112":{"tf":2.0},"15":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"106":{"tf":2.0}}}}}},"t":{"c":{"df":1,"docs":{"81":{"tf":1.0}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"'":{"df":1,"docs":{"17":{"tf":1.0}}},"df":4,"docs":{"15":{"tf":2.23606797749979},"17":{"tf":2.0},"18":{"tf":2.449489742783178},"19":{"tf":1.0}}}}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":16,"docs":{"101":{"tf":1.0},"58":{"tf":1.0},"61":{"tf":1.4142135623730951},"65":{"tf":1.0},"66":{"tf":1.4142135623730951},"67":{"tf":2.0},"68":{"tf":1.4142135623730951},"70":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.4142135623730951},"76":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"92":{"tf":1.4142135623730951},"94":{"tf":1.4142135623730951},"96":{"tf":2.0}}}},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"60":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":6,"docs":{"15":{"tf":1.0},"33":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.4142135623730951},"64":{"tf":1.0},"99":{"tf":1.0}}},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"60":{"tf":1.0}}}},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"61":{"tf":1.0},"64":{"tf":1.4142135623730951}}}}}}}}},"m":{"df":3,"docs":{"108":{"tf":2.0},"15":{"tf":1.0},"17":{"tf":1.7320508075688772}}}},"x":{"a":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"69":{"tf":1.7320508075688772},"78":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"18":{"tf":1.0},"69":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":36,"docs":{"105":{"tf":1.7320508075688772},"106":{"tf":1.4142135623730951},"15":{"tf":2.0},"16":{"tf":2.23606797749979},"17":{"tf":2.23606797749979},"18":{"tf":1.7320508075688772},"19":{"tf":2.0},"20":{"tf":2.23606797749979},"34":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"42":{"tf":1.0},"56":{"tf":1.4142135623730951},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.7320508075688772},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.4142135623730951},"69":{"tf":1.0},"70":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951},"77":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.7320508075688772},"91":{"tf":1.0},"92":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.4142135623730951}}}}}},"c":{"df":0,"docs":{},"e":{"df":2,"docs":{"17":{"tf":1.0},"18":{"tf":1.0}},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"40":{"tf":1.0},"52":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"77":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":14,"docs":{"0":{"tf":1.0},"106":{"tf":3.0},"14":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"31":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"40":{"tf":1.4142135623730951},"42":{"tf":1.0},"5":{"tf":2.23606797749979},"56":{"tf":1.0},"9":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"106":{"tf":1.0}}}}}}},"df":0,"docs":{}},"h":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"69":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"6":{"tf":1.0},"78":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":8,"docs":{"18":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":1.0},"73":{"tf":1.4142135623730951},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.4142135623730951},"94":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"5":{"tf":1.0},"6":{"tf":1.0}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"106":{"tf":1.0}}}}}}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"114":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":5,"docs":{"34":{"tf":1.0},"43":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.0},"71":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"67":{"tf":1.0},"77":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":5,"docs":{"62":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.4142135623730951},"78":{"tf":1.0},"83":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"t":{"df":6,"docs":{"17":{"tf":1.0},"18":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"27":{"tf":1.7320508075688772}}}},"s":{"df":4,"docs":{"16":{"tf":1.0},"20":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951}}}},"r":{"df":14,"docs":{"101":{"tf":2.6457513110645907},"102":{"tf":2.0},"34":{"tf":1.7320508075688772},"64":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.0},"71":{"tf":1.4142135623730951},"73":{"tf":2.6457513110645907},"74":{"tf":2.6457513110645907},"83":{"tf":2.449489742783178},"93":{"tf":2.0},"96":{"tf":1.0},"97":{"tf":1.0},"99":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":24,"docs":{"101":{"tf":1.0},"34":{"tf":2.23606797749979},"48":{"tf":1.4142135623730951},"50":{"tf":1.7320508075688772},"51":{"tf":1.0},"52":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"58":{"tf":1.0},"60":{"tf":1.4142135623730951},"61":{"tf":2.8284271247461903},"62":{"tf":2.6457513110645907},"63":{"tf":1.0},"64":{"tf":3.0},"65":{"tf":2.0},"66":{"tf":2.0},"67":{"tf":3.605551275463989},"68":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"78":{"tf":1.0},"82":{"tf":1.7320508075688772},"83":{"tf":3.7416573867739413}}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":6,"docs":{"105":{"tf":1.0},"106":{"tf":1.7320508075688772},"115":{"tf":1.0},"23":{"tf":1.0},"33":{"tf":1.0},"38":{"tf":1.0}}}}},"r":{"a":{"df":1,"docs":{"17":{"tf":1.0}}},"df":0,"docs":{}}}}},"f":{"(":{"(":{"1":{"df":1,"docs":{"69":{"tf":1.0}}},"6":{"df":1,"docs":{"69":{"tf":1.0}}},"df":0,"docs":{}},"0":{"df":1,"docs":{"67":{"tf":1.7320508075688772}}},"1":{"df":1,"docs":{"67":{"tf":1.7320508075688772}}},"7":{"df":1,"docs":{"64":{"tf":1.0}}},"8":{"df":1,"docs":{"70":{"tf":1.0}}},"df":0,"docs":{},"i":{"df":1,"docs":{"70":{"tf":1.0}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"67":{"tf":2.0}}}}}}}}},"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{":":{":":{"<":{"b":{"df":0,"docs":{},"n":{"2":{"5":{"4":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"14":{"tf":1.0},"60":{"tf":1.0},"98":{"tf":1.0}}}},"l":{"df":0,"docs":{},"s":{"df":3,"docs":{"23":{"tf":2.0},"33":{"tf":1.0},"66":{"tf":1.4142135623730951}}}},"r":{"df":1,"docs":{"17":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"5":{"tf":1.0}}}}},"df":9,"docs":{"105":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"23":{"tf":1.0},"64":{"tf":1.4142135623730951},"67":{"tf":2.449489742783178},"69":{"tf":1.0},"70":{"tf":1.0},"83":{"tf":2.0}},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"1":{"tf":1.0},"10":{"tf":1.0},"11":{"tf":2.0},"61":{"tf":1.0},"7":{"tf":1.0}}}}}},"df":11,"docs":{"60":{"tf":1.0},"69":{"tf":1.4142135623730951},"71":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":2.6457513110645907},"77":{"tf":1.4142135623730951},"78":{"tf":2.23606797749979},"80":{"tf":1.0},"82":{"tf":1.7320508075688772},"93":{"tf":2.0},"96":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"107":{"tf":1.0},"108":{"tf":1.0}}}},"w":{"df":3,"docs":{"109":{"tf":1.0},"18":{"tf":1.0},"39":{"tf":1.0}}}},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"105":{"tf":1.0}}}},"i":{"b":{"(":{"df":0,"docs":{},"i":{"df":1,"docs":{"65":{"tf":1.4142135623730951}}}},"df":1,"docs":{"65":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"a":{"c":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"106":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"'":{"df":1,"docs":{"95":{"tf":1.0}}},"df":29,"docs":{"110":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":2.449489742783178},"17":{"tf":1.4142135623730951},"18":{"tf":3.0},"20":{"tf":2.23606797749979},"23":{"tf":2.0},"24":{"tf":1.7320508075688772},"25":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"27":{"tf":1.7320508075688772},"28":{"tf":1.7320508075688772},"30":{"tf":1.7320508075688772},"31":{"tf":1.7320508075688772},"41":{"tf":1.0},"51":{"tf":2.0},"60":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.4142135623730951},"77":{"tf":1.0},"78":{"tf":4.123105625617661},"80":{"tf":1.0},"82":{"tf":1.0},"88":{"tf":1.0},"93":{"tf":2.0},"95":{"tf":1.0}}},"df":0,"docs":{}}},"f":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"67":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"e":{"df":17,"docs":{"105":{"tf":1.0},"118":{"tf":1.7320508075688772},"14":{"tf":1.7320508075688772},"15":{"tf":1.7320508075688772},"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"22":{"tf":2.449489742783178},"23":{"tf":3.872983346207417},"24":{"tf":2.6457513110645907},"25":{"tf":2.449489742783178},"26":{"tf":2.23606797749979},"27":{"tf":2.23606797749979},"29":{"tf":2.0},"30":{"tf":2.0},"31":{"tf":1.7320508075688772},"33":{"tf":1.0},"9":{"tf":1.0}}},"l":{"df":1,"docs":{"20":{"tf":1.0}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"22":{"tf":1.0}}}}}},"n":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"106":{"tf":1.7320508075688772},"5":{"tf":1.0},"64":{"tf":1.0}}}},"d":{"df":7,"docs":{"1":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":1,"docs":{"70":{"tf":1.4142135623730951}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"78":{"tf":2.23606797749979}}}}},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":20,"docs":{"105":{"tf":1.0},"106":{"tf":1.0},"115":{"tf":1.0},"13":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":2.0},"22":{"tf":1.0},"23":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"5":{"tf":1.0},"60":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.4142135623730951},"78":{"tf":1.0},"83":{"tf":1.0},"97":{"tf":1.0},"99":{"tf":1.0}}}}},"t":{"df":2,"docs":{"77":{"tf":1.7320508075688772},"87":{"tf":1.4142135623730951}}},"x":{"df":23,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"33":{"tf":1.4142135623730951},"37":{"tf":1.7320508075688772},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":2.0},"60":{"tf":2.6457513110645907},"68":{"tf":1.0},"73":{"tf":1.4142135623730951},"77":{"tf":1.0},"78":{"tf":1.0},"86":{"tf":2.6457513110645907},"87":{"tf":1.7320508075688772},"88":{"tf":1.7320508075688772},"98":{"tf":1.0}}}},"l":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"106":{"tf":1.0},"56":{"tf":1.4142135623730951},"58":{"tf":2.449489742783178}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":4,"docs":{"0":{"tf":1.0},"109":{"tf":1.0},"61":{"tf":1.0},"67":{"tf":1.0}}}},"df":0,"docs":{}}}}},"n":{"df":4,"docs":{"105":{"tf":1.0},"106":{"tf":1.0},"16":{"tf":1.4142135623730951},"5":{"tf":1.4142135623730951}}},"o":{"df":0,"docs":{},"l":{"d":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"67":{"tf":1.4142135623730951}}}}}}}}},"df":1,"docs":{"67":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"(":{".":{".":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"0":{"df":1,"docs":{"67":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"67":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":1,"docs":{"67":{"tf":1.4142135623730951}},"s":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":35,"docs":{"10":{"tf":1.4142135623730951},"101":{"tf":1.0},"102":{"tf":1.0},"106":{"tf":1.4142135623730951},"118":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":1.4142135623730951},"69":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951},"79":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"85":{"tf":1.0},"90":{"tf":1.4142135623730951},"96":{"tf":1.0}}}}}},"o":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"(":{"1":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"106":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":1,"docs":{"106":{"tf":1.0}}},"r":{"c":{"df":6,"docs":{"15":{"tf":1.0},"17":{"tf":1.0},"23":{"tf":1.4142135623730951},"34":{"tf":1.0},"62":{"tf":1.0},"67":{"tf":1.0}}},"df":0,"docs":{},"k":{"df":1,"docs":{"111":{"tf":1.0}}},"m":{"df":5,"docs":{"34":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"82":{"tf":1.0}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":6,"docs":{"1":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"23":{"tf":1.0},"7":{"tf":1.0},"82":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"67":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"h":{"df":3,"docs":{"16":{"tf":1.4142135623730951},"18":{"tf":1.0},"33":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":1,"docs":{"16":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":8,"docs":{"60":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.7320508075688772},"74":{"tf":1.4142135623730951},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0},"93":{"tf":1.7320508075688772}}}}}}}},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"107":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"d":{"df":6,"docs":{"103":{"tf":2.23606797749979},"104":{"tf":1.4142135623730951},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":5,"docs":{"106":{"tf":1.0},"109":{"tf":1.0},"16":{"tf":1.0},"34":{"tf":1.0},"61":{"tf":1.0}},"i":{"df":2,"docs":{"34":{"tf":1.0},"67":{"tf":1.0}}}}},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.0}}}}}}},"df":56,"docs":{"100":{"tf":1.4142135623730951},"101":{"tf":1.0},"102":{"tf":1.0},"105":{"tf":1.4142135623730951},"115":{"tf":1.0},"13":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":2.23606797749979},"36":{"tf":1.4142135623730951},"37":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"43":{"tf":1.4142135623730951},"44":{"tf":2.449489742783178},"45":{"tf":2.0},"46":{"tf":1.0},"47":{"tf":1.4142135623730951},"48":{"tf":1.0},"49":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":2.0},"60":{"tf":2.23606797749979},"61":{"tf":1.7320508075688772},"62":{"tf":1.4142135623730951},"63":{"tf":2.23606797749979},"64":{"tf":2.23606797749979},"67":{"tf":2.23606797749979},"68":{"tf":4.0},"69":{"tf":1.4142135623730951},"70":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"77":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":3.4641016151377544},"83":{"tf":1.4142135623730951},"84":{"tf":1.7320508075688772},"85":{"tf":1.0},"88":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":2.0},"91":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":2.0},"94":{"tf":2.0},"95":{"tf":1.0},"96":{"tf":1.4142135623730951},"97":{"tf":1.0},"98":{"tf":1.4142135623730951},"99":{"tf":2.23606797749979}},"s":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"54":{"tf":1.0},"56":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.0}}}}}}}}}}}},"g":{"c":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"83":{"tf":2.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"s":{"df":1,"docs":{"16":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":30,"docs":{"0":{"tf":1.0},"105":{"tf":1.4142135623730951},"106":{"tf":1.0},"109":{"tf":1.0},"117":{"tf":1.4142135623730951},"13":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":3.3166247903554},"16":{"tf":1.0},"17":{"tf":2.449489742783178},"18":{"tf":2.6457513110645907},"20":{"tf":2.0},"22":{"tf":1.4142135623730951},"23":{"tf":2.449489742783178},"24":{"tf":2.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"31":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.7320508075688772},"62":{"tf":1.4142135623730951},"67":{"tf":1.4142135623730951},"71":{"tf":1.7320508075688772},"72":{"tf":1.4142135623730951},"9":{"tf":1.0},"92":{"tf":1.0},"99":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"11":{"tf":1.7320508075688772},"12":{"tf":1.4142135623730951},"16":{"tf":1.0}},"h":{"df":0,"docs":{},"u":{"b":{"df":2,"docs":{"1":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":14,"docs":{"15":{"tf":1.7320508075688772},"18":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"28":{"tf":1.0},"31":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.4142135623730951},"63":{"tf":1.0},"87":{"tf":1.4142135623730951},"9":{"tf":1.0}}}}}},"l":{"df":8,"docs":{"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"30":{"tf":1.4142135623730951},"31":{"tf":1.4142135623730951}},"o":{"b":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"64":{"tf":1.0},"68":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"o":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"18":{"tf":1.0}}}},"df":3,"docs":{"13":{"tf":1.0},"18":{"tf":1.4142135623730951},"60":{"tf":1.0}},"e":{"df":1,"docs":{"96":{"tf":1.0}}},"l":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":4,"docs":{"110":{"tf":1.0},"112":{"tf":1.0},"15":{"tf":1.0},"95":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"o":{"d":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":1,"docs":{"113":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"77":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"(":{"\"":{".":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"5":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":1,"docs":{"5":{"tf":2.0}}}}}}},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"2":{",":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":0,"docs":{},"y":{"3":{",":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":0,"docs":{},"y":{"3":{"df":1,"docs":{"11":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}}}},"df":1,"docs":{"11":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}}}},"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":1.4142135623730951}}}}}}}}}},"df":13,"docs":{"11":{"tf":1.0},"111":{"tf":2.0},"14":{"tf":1.4142135623730951},"15":{"tf":2.23606797749979},"17":{"tf":1.4142135623730951},"18":{"tf":3.0},"20":{"tf":2.0},"23":{"tf":2.23606797749979},"24":{"tf":2.23606797749979},"25":{"tf":2.23606797749979},"26":{"tf":2.23606797749979},"27":{"tf":2.23606797749979},"28":{"tf":2.0}}},"df":0,"docs":{}}},"n":{"d":{"df":6,"docs":{"37":{"tf":1.0},"48":{"tf":1.0},"6":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":1.4142135623730951},"69":{"tf":1.0}},"l":{"df":1,"docs":{"106":{"tf":1.0}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":3,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"84":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"105":{"tf":1.0},"106":{"tf":2.449489742783178}}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"62":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"69":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"d":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"14":{"tf":1.0}}}}}},"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"14":{"tf":1.0},"15":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"14":{"tf":1.0},"15":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"14":{"tf":1.0},"15":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"18":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"p":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":8,"docs":{"13":{"tf":1.7320508075688772},"14":{"tf":1.7320508075688772},"15":{"tf":1.7320508075688772},"16":{"tf":2.0},"17":{"tf":2.0},"18":{"tf":1.7320508075688772},"19":{"tf":1.0},"62":{"tf":1.0}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"d":{"df":2,"docs":{"13":{"tf":1.0},"36":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"p":{"df":2,"docs":{"21":{"tf":1.7320508075688772},"33":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":8,"docs":{"106":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.4142135623730951},"34":{"tf":1.4142135623730951},"43":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"96":{"tf":1.0}}}},"x":{"df":1,"docs":{"23":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":1,"docs":{"113":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"32":{"tf":1.0},"60":{"tf":1.4142135623730951},"67":{"tf":1.0}}}}}},"n":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"71":{"tf":1.0}}}}}},"df":0,"docs":{},"t":{"df":4,"docs":{"68":{"tf":1.0},"73":{"tf":1.0},"96":{"tf":1.4142135623730951},"99":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"l":{"d":{"df":2,"docs":{"41":{"tf":1.0},"85":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"5":{"tf":2.0}}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{":":{"/":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"b":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"d":{"df":0,"docs":{},"r":{"df":3,"docs":{"11":{"tf":1.7320508075688772},"12":{"tf":1.4142135623730951},"16":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"i":{".":{"df":1,"docs":{"64":{"tf":1.0}}},"d":{"df":2,"docs":{"57":{"tf":2.0},"97":{"tf":1.0}},"e":{"a":{"df":1,"docs":{"73":{"tf":1.0}},"l":{"df":1,"docs":{"6":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":6,"docs":{"101":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.4142135623730951},"67":{"tf":2.0},"83":{"tf":1.0},"92":{"tf":1.0}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":4,"docs":{"37":{"tf":1.0},"69":{"tf":1.0},"85":{"tf":1.0},"97":{"tf":1.0}}}},"t":{"df":0,"docs":{},"y":{"(":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"44":{"tf":1.0}}}},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"64":{"tf":1.0},"69":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}}}}}},"i":{"df":1,"docs":{"18":{"tf":1.0}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"67":{"tf":1.0}}}}}}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":14,"docs":{"101":{"tf":1.0},"103":{"tf":1.0},"112":{"tf":1.0},"19":{"tf":1.0},"37":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"6":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":3.0},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"15":{"tf":1.4142135623730951},"20":{"tf":1.0},"33":{"tf":1.0}}}}}}},"n":{"c":{"df":1,"docs":{"34":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"u":{"d":{"df":6,"docs":{"36":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"80":{"tf":1.0}}},"df":0,"docs":{}}},"r":{"(":{"a":{"df":2,"docs":{"13":{"tf":1.0},"36":{"tf":1.0}}},"df":0,"docs":{}},"_":{"a":{"df":1,"docs":{"34":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":2,"docs":{"13":{"tf":1.0},"36":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"62":{"tf":1.0}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"13":{"tf":1.0},"34":{"tf":2.0},"36":{"tf":1.0},"40":{"tf":1.0},"72":{"tf":1.0}}}}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":4,"docs":{"62":{"tf":1.0},"67":{"tf":1.0},"77":{"tf":1.0},"81":{"tf":1.4142135623730951}}}},"i":{"c":{"df":3,"docs":{"36":{"tf":1.0},"37":{"tf":1.0},"77":{"tf":1.0}}},"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"u":{"df":1,"docs":{"5":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":1,"docs":{"89":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"78":{"tf":1.0}}}}},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"34":{"tf":1.0},"48":{"tf":1.4142135623730951},"71":{"tf":1.0},"83":{"tf":1.0}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"o":{"df":1,"docs":{"22":{"tf":1.4142135623730951}},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"106":{"tf":1.0}}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"78":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":2,"docs":{"37":{"tf":1.0},"44":{"tf":1.4142135623730951}}}}}},"df":5,"docs":{"106":{"tf":1.7320508075688772},"18":{"tf":2.0},"41":{"tf":1.0},"67":{"tf":1.7320508075688772},"69":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"33":{"tf":1.0},"73":{"tf":1.4142135623730951},"81":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"56":{"tf":1.0}}}}}}}}},"df":29,"docs":{"105":{"tf":1.0},"106":{"tf":2.449489742783178},"13":{"tf":1.0},"14":{"tf":2.0},"15":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"23":{"tf":2.0},"24":{"tf":1.0},"25":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0},"34":{"tf":1.4142135623730951},"36":{"tf":1.0},"37":{"tf":1.0},"42":{"tf":1.4142135623730951},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"54":{"tf":1.0},"56":{"tf":2.23606797749979},"57":{"tf":1.7320508075688772},"58":{"tf":1.7320508075688772},"77":{"tf":1.0},"9":{"tf":1.0}},"s":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}}}}}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":12,"docs":{"34":{"tf":1.0},"43":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"64":{"tf":1.7320508075688772},"65":{"tf":1.0},"68":{"tf":2.0},"69":{"tf":1.0},"73":{"tf":1.0},"78":{"tf":1.0},"85":{"tf":1.0},"95":{"tf":1.0}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"59":{"tf":1.0}}}}},"t":{"a":{"df":0,"docs":{},"l":{"df":8,"docs":{"10":{"tf":1.7320508075688772},"105":{"tf":1.0},"11":{"tf":2.6457513110645907},"12":{"tf":2.0},"17":{"tf":1.0},"3":{"tf":2.23606797749979},"4":{"tf":1.4142135623730951},"9":{"tf":2.0}}},"n":{"c":{"df":1,"docs":{"118":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"117":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"a":{"d":{"df":5,"docs":{"106":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.0},"37":{"tf":1.0},"83":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"df":10,"docs":{"13":{"tf":1.7320508075688772},"20":{"tf":1.0},"33":{"tf":2.0},"34":{"tf":1.0},"36":{"tf":1.7320508075688772},"42":{"tf":1.4142135623730951},"44":{"tf":2.0},"48":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":3.7416573867739413}},"u":{"c":{"df":0,"docs":{},"t":{"df":15,"docs":{"103":{"tf":1.0},"115":{"tf":1.4142135623730951},"20":{"tf":1.0},"32":{"tf":1.0},"34":{"tf":1.0},"36":{"tf":1.0},"38":{"tf":1.0},"42":{"tf":1.7320508075688772},"44":{"tf":2.0},"48":{"tf":1.4142135623730951},"49":{"tf":1.7320508075688772},"53":{"tf":1.7320508075688772},"54":{"tf":2.449489742783178},"55":{"tf":2.23606797749979},"56":{"tf":3.3166247903554}}}},"df":0,"docs":{}}}}},"t":{"[":{"2":{"df":1,"docs":{"81":{"tf":1.0}}},"df":0,"docs":{}},"df":23,"docs":{"102":{"tf":4.69041575982343},"33":{"tf":1.0},"34":{"tf":1.7320508075688772},"60":{"tf":1.7320508075688772},"63":{"tf":2.449489742783178},"67":{"tf":1.4142135623730951},"69":{"tf":2.8284271247461903},"70":{"tf":1.7320508075688772},"71":{"tf":1.4142135623730951},"73":{"tf":2.6457513110645907},"74":{"tf":3.0},"77":{"tf":1.7320508075688772},"78":{"tf":1.0},"80":{"tf":2.23606797749979},"81":{"tf":1.0},"82":{"tf":2.6457513110645907},"85":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":2.0},"95":{"tf":1.0},"97":{"tf":1.4142135623730951},"98":{"tf":1.7320508075688772},"99":{"tf":1.0}},"e":{"df":0,"docs":{},"g":{"df":16,"docs":{"105":{"tf":1.4142135623730951},"60":{"tf":1.0},"62":{"tf":1.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":3.1622776601683795},"78":{"tf":1.7320508075688772},"80":{"tf":1.4142135623730951},"81":{"tf":1.7320508075688772},"82":{"tf":1.0},"83":{"tf":1.0},"88":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":2.0},"95":{"tf":1.0}}},"r":{"[":{"df":0,"docs":{},"k":{"df":2,"docs":{"60":{"tf":1.0},"73":{"tf":1.0}}}},"df":3,"docs":{"60":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":2.23606797749979}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"107":{"tf":1.0},"108":{"tf":1.0},"20":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":2,"docs":{"60":{"tf":1.4142135623730951},"73":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}},"n":{"df":3,"docs":{"16":{"tf":1.4142135623730951},"20":{"tf":1.0},"92":{"tf":1.0}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"19":{"tf":1.4142135623730951}}}}}}}},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":6,"docs":{"0":{"tf":1.7320508075688772},"1":{"tf":1.0},"2":{"tf":1.0},"6":{"tf":1.7320508075688772},"7":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"14":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"92":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":1,"docs":{"67":{"tf":1.0}}}}}}},"r":{"df":1,"docs":{"70":{"tf":1.4142135623730951}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"63":{"tf":1.0},"70":{"tf":1.0}}}}}}}},"s":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"66":{"tf":1.0}}}}}}}},"a":{"df":2,"docs":{"19":{"tf":1.0},"32":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":2,"docs":{"1":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951}}}}},"t":{"'":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":2,"docs":{"3":{"tf":1.0},"57":{"tf":1.0}}}}}}}},"j":{"df":1,"docs":{"63":{"tf":1.4142135623730951}},"m":{"df":0,"docs":{},"p":{"df":1,"docs":{"44":{"tf":1.4142135623730951}},"z":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"3":{"df":1,"docs":{"10":{"tf":1.0}}},"df":2,"docs":{"22":{"tf":1.0},"23":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":2,"docs":{"20":{"tf":1.0},"44":{"tf":2.0}}}}}},"k":{"b":{"df":8,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0}}},"df":1,"docs":{"69":{"tf":2.0}},"e":{"c":{"c":{"a":{"df":0,"docs":{},"k":{"df":1,"docs":{"17":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":2,"docs":{"15":{"tf":1.0},"41":{"tf":1.0}}}},"y":{"df":10,"docs":{"15":{"tf":3.3166247903554},"16":{"tf":1.4142135623730951},"18":{"tf":3.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.4142135623730951},"25":{"tf":1.0},"26":{"tf":2.23606797749979},"27":{"tf":1.4142135623730951}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"65":{"tf":1.0}}},"df":0,"docs":{}}}}}},"i":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"60":{"tf":1.7320508075688772}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":4,"docs":{"16":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.4142135623730951},"81":{"tf":1.0}},"n":{"df":1,"docs":{"98":{"tf":1.0}}}}}},"o":{"a":{"df":0,"docs":{},"l":{"a":{"b":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"110":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"l":{"a":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":3,"docs":{"44":{"tf":2.0},"47":{"tf":1.7320508075688772},"54":{"tf":1.0}}}},"s":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"d":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"12":{"tf":1.0}}}}}},"df":3,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":1.0},"16":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"b":{"d":{"a":{"df":5,"docs":{"34":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.7320508075688772},"82":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"g":{"df":6,"docs":{"6":{"tf":1.0},"61":{"tf":2.0},"62":{"tf":1.0},"67":{"tf":1.4142135623730951},"71":{"tf":1.0},"87":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"18":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"17":{"tf":1.0},"18":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"20":{"tf":1.0},"60":{"tf":1.0},"83":{"tf":1.0}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":5,"docs":{"33":{"tf":1.7320508075688772},"37":{"tf":2.6457513110645907},"56":{"tf":1.7320508075688772},"57":{"tf":2.449489742783178},"58":{"tf":2.449489742783178}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"18":{"tf":1.0}}}}}},"df":2,"docs":{"44":{"tf":2.0},"91":{"tf":1.0}},"e":{"a":{"d":{"df":2,"docs":{"18":{"tf":1.0},"92":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":2,"docs":{"15":{"tf":1.0},"19":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":6,"docs":{"62":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":1.4142135623730951},"69":{"tf":1.0},"77":{"tf":1.0},"82":{"tf":1.0}}}},"n":{"df":3,"docs":{"105":{"tf":1.0},"34":{"tf":1.4142135623730951},"60":{"tf":1.7320508075688772}},"g":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":12,"docs":{"106":{"tf":2.8284271247461903},"18":{"tf":1.0},"20":{"tf":1.0},"60":{"tf":1.0},"67":{"tf":2.0},"69":{"tf":1.0},"70":{"tf":1.0},"81":{"tf":1.4142135623730951},"86":{"tf":1.0},"87":{"tf":1.0},"91":{"tf":1.7320508075688772},"98":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":6,"docs":{"61":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":1.4142135623730951},"78":{"tf":1.0},"81":{"tf":1.0},"93":{"tf":1.0}}}},"t":{"'":{"df":6,"docs":{"106":{"tf":1.0},"117":{"tf":1.4142135623730951},"13":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"18":{"tf":2.0},"20":{"tf":1.0}}},"<":{"df":0,"docs":{},"t":{"1":{"df":1,"docs":{"67":{"tf":1.0}}},"df":5,"docs":{"102":{"tf":3.3166247903554},"60":{"tf":1.0},"72":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.7320508075688772}},"v":{"1":{"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":10,"docs":{"101":{"tf":1.0},"113":{"tf":1.0},"22":{"tf":1.0},"32":{"tf":1.0},"37":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.0},"64":{"tf":1.0},"83":{"tf":1.0},"94":{"tf":1.0}}}}}},"i":{"b":{"df":0,"docs":{},"p":{"df":0,"docs":{},"q":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}}}},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":5,"docs":{"100":{"tf":1.0},"112":{"tf":1.0},"16":{"tf":2.0},"33":{"tf":1.0},"5":{"tf":1.0}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"2":{"tf":1.7320508075688772},"8":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{},"m":{"b":{"df":1,"docs":{"18":{"tf":1.7320508075688772}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"17":{"tf":1.0},"18":{"tf":1.0},"67":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"e":{"df":4,"docs":{"18":{"tf":1.0},"21":{"tf":1.7320508075688772},"40":{"tf":1.0},"83":{"tf":1.7320508075688772}}},"k":{"df":10,"docs":{"115":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"23":{"tf":1.0},"33":{"tf":2.0},"37":{"tf":1.0},"38":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":4.795831523312719},"58":{"tf":3.872983346207417}},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"23":{"tf":1.0}}},"df":0,"docs":{}}}},"df":3,"docs":{"113":{"tf":1.0},"118":{"tf":2.0},"23":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"10":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"df":5,"docs":{"105":{"tf":1.4142135623730951},"23":{"tf":1.0},"25":{"tf":1.0},"33":{"tf":1.0},"75":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":12,"docs":{"51":{"tf":1.7320508075688772},"56":{"tf":1.0},"62":{"tf":1.7320508075688772},"69":{"tf":2.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.4142135623730951},"79":{"tf":1.0},"83":{"tf":1.4142135623730951}}}}}},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":10,"docs":{"11":{"tf":1.0},"115":{"tf":1.0},"12":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"38":{"tf":1.0},"55":{"tf":2.0},"64":{"tf":1.4142135623730951},"65":{"tf":1.0},"69":{"tf":1.7320508075688772}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}}}}},"t":{"df":1,"docs":{"47":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"22":{"tf":1.0}}}}}}}},"df":3,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.4142135623730951}},"i":{"c":{"df":3,"docs":{"5":{"tf":1.0},"62":{"tf":1.7320508075688772},"76":{"tf":1.7320508075688772}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"g":{"df":2,"docs":{"5":{"tf":1.0},"87":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"106":{"tf":1.0},"18":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"k":{"df":2,"docs":{"106":{"tf":1.0},"33":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"(":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"<":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":3,"docs":{"101":{"tf":1.0},"118":{"tf":1.0},"60":{"tf":1.7320508075688772}}}}},"p":{"df":1,"docs":{"20":{"tf":1.0}}}},"w":{"df":1,"docs":{"6":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"37":{"tf":1.0},"59":{"tf":1.0}}}}}}},"m":{"3":{"1":{"df":8,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0}}},"df":0,"docs":{}},"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":26,"docs":{"114":{"tf":1.0},"115":{"tf":2.6457513110645907},"116":{"tf":1.4142135623730951},"117":{"tf":1.7320508075688772},"118":{"tf":1.0},"13":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":2.449489742783178},"34":{"tf":1.7320508075688772},"35":{"tf":2.0},"36":{"tf":2.449489742783178},"37":{"tf":3.1622776601683795},"38":{"tf":2.8284271247461903},"39":{"tf":1.0},"40":{"tf":1.4142135623730951},"44":{"tf":2.23606797749979},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":2.23606797749979},"57":{"tf":3.0},"58":{"tf":2.0},"68":{"tf":1.0},"95":{"tf":1.4142135623730951},"96":{"tf":1.0}},"e":{"'":{"df":3,"docs":{"117":{"tf":1.0},"34":{"tf":1.0},"5":{"tf":1.0}}},"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"m":{"df":1,"docs":{"38":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":1,"docs":{"38":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"114":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"(":{"1":{"6":{"df":1,"docs":{"67":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"118":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":15,"docs":{"105":{"tf":1.0},"106":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"13":{"tf":1.0},"16":{"tf":1.4142135623730951},"20":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.4142135623730951},"35":{"tf":1.0},"36":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.0},"5":{"tf":1.4142135623730951},"56":{"tf":2.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"79":{"tf":1.0}}}}}},"k":{"df":0,"docs":{},"e":{"_":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"y":{"(":{"1":{"5":{"df":1,"docs":{"67":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"67":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":7,"docs":{"10":{"tf":1.0},"106":{"tf":1.0},"116":{"tf":1.0},"18":{"tf":1.0},"3":{"tf":1.0},"37":{"tf":1.0},"5":{"tf":1.0}}}},"n":{"a":{"df":0,"docs":{},"g":{"df":4,"docs":{"10":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0},"5":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":3,"docs":{"106":{"tf":1.7320508075688772},"61":{"tf":1.0},"87":{"tf":1.0}}},"u":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"11":{"tf":1.0},"12":{"tf":1.0}}}},"df":0,"docs":{}},"y":{"_":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{".":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"106":{"tf":2.449489742783178}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"p":{"df":2,"docs":{"58":{"tf":1.0},"88":{"tf":1.7320508075688772}}},"r":{"df":0,"docs":{},"k":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"31":{"tf":1.0}}}}}},"df":0,"docs":{}}},"t":{"c":{"df":0,"docs":{},"h":{"df":13,"docs":{"105":{"tf":1.0},"15":{"tf":1.0},"34":{"tf":1.0},"60":{"tf":1.4142135623730951},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":2.8284271247461903},"67":{"tf":1.0},"69":{"tf":4.58257569495584},"70":{"tf":3.0},"88":{"tf":1.0},"96":{"tf":1.0}}}},"df":0,"docs":{}},"x":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"98":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"18":{"tf":1.0}}}}}}}},"df":1,"docs":{"58":{"tf":2.23606797749979}},"e":{"a":{"df":0,"docs":{},"n":{"df":13,"docs":{"106":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"63":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"81":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"96":{"tf":1.0}},"t":{"df":1,"docs":{"93":{"tf":1.7320508075688772}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":3,"docs":{"105":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"106":{"tf":3.4641016151377544}}}}}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"43":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"l":{"df":1,"docs":{"105":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"3":{"1":{"df":1,"docs":{"110":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"92":{"tf":1.0}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"71":{"tf":1.0}}}}}},"n":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"98":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":3,"docs":{"0":{"tf":1.0},"13":{"tf":1.0},"6":{"tf":1.0}}}},"u":{"df":1,"docs":{"74":{"tf":1.4142135623730951}},"t":{"df":1,"docs":{"18":{"tf":1.7320508075688772}}}}},"t":{"df":2,"docs":{"2":{"tf":1.0},"8":{"tf":1.0}},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"17":{"tf":1.0}}}}}},"o":{"c":{"df":0,"docs":{},"k":{"df":7,"docs":{"106":{"tf":1.0},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"25":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"27":{"tf":1.7320508075688772},"28":{"tf":1.7320508075688772}}}},"d":{"df":2,"docs":{"33":{"tf":2.0},"34":{"tf":1.0}},"e":{"df":2,"docs":{"118":{"tf":1.4142135623730951},"23":{"tf":2.23606797749979}}},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"93":{"tf":1.7320508075688772}}}},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"6":{"tf":1.0}}}},"df":4,"docs":{"22":{"tf":1.7320508075688772},"31":{"tf":1.7320508075688772},"33":{"tf":3.872983346207417},"34":{"tf":1.4142135623730951}},"o":{"df":1,"docs":{"62":{"tf":1.0}}},"u":{"df":4,"docs":{"73":{"tf":1.0},"78":{"tf":1.4142135623730951},"93":{"tf":1.0},"95":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":2,"docs":{"118":{"tf":1.4142135623730951},"23":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"e":{"df":12,"docs":{"101":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"61":{"tf":1.4142135623730951},"65":{"tf":1.4142135623730951},"67":{"tf":1.0},"68":{"tf":1.0},"80":{"tf":1.0}}}}},"u":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"61":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":2,"docs":{"102":{"tf":1.0},"74":{"tf":1.4142135623730951}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":9,"docs":{"0":{"tf":1.0},"56":{"tf":1.4142135623730951},"6":{"tf":1.0},"62":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0}},"i":{"df":1,"docs":{"37":{"tf":1.0}}}}}}}},"t":{"df":3,"docs":{"106":{"tf":1.7320508075688772},"16":{"tf":1.7320508075688772},"5":{"tf":1.0}}}},"v":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}},"y":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"33":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"38":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"38":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"38":{"tf":2.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":20,"docs":{"33":{"tf":1.0},"34":{"tf":1.7320508075688772},"47":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":2.0},"58":{"tf":1.4142135623730951},"60":{"tf":2.449489742783178},"67":{"tf":1.0},"69":{"tf":1.0},"73":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.7320508075688772}},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":5,"docs":{"118":{"tf":2.6457513110645907},"60":{"tf":1.4142135623730951},"67":{"tf":1.0},"68":{"tf":1.0},"85":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"10":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"23":{"tf":1.0}}}}}},"df":4,"docs":{"20":{"tf":1.0},"58":{"tf":2.449489742783178},"86":{"tf":1.0},"87":{"tf":1.0}},"e":{"df":0,"docs":{},"e":{"d":{"df":23,"docs":{"10":{"tf":2.0},"106":{"tf":2.23606797749979},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.7320508075688772},"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"33":{"tf":1.0},"4":{"tf":1.0},"43":{"tf":1.0},"57":{"tf":1.7320508075688772},"60":{"tf":1.0},"67":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.7320508075688772},"81":{"tf":1.0},"90":{"tf":1.0}}},"df":0,"docs":{}},"g":{"a":{"df":0,"docs":{},"t":{"df":6,"docs":{"62":{"tf":1.0},"69":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0}}}},"df":7,"docs":{"102":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.4142135623730951},"77":{"tf":2.0},"78":{"tf":1.4142135623730951},"81":{"tf":1.0},"93":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"69":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"84":{"tf":1.0}}}}},"w":{"_":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"68":{"tf":1.0}}}}}},"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"68":{"tf":1.4142135623730951}}}}}},"df":10,"docs":{"118":{"tf":1.0},"18":{"tf":1.7320508075688772},"34":{"tf":1.0},"5":{"tf":2.449489742783178},"6":{"tf":1.0},"64":{"tf":1.4142135623730951},"65":{"tf":1.0},"68":{"tf":2.23606797749979},"69":{"tf":1.4142135623730951},"83":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}},"n":{"df":1,"docs":{"94":{"tf":1.0}}}}}},"x":{"df":0,"docs":{},"t":{"df":6,"docs":{"15":{"tf":1.0},"17":{"tf":1.0},"62":{"tf":1.0},"70":{"tf":1.7320508075688772},"71":{"tf":1.0},"83":{"tf":1.4142135623730951}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"o":{"_":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"105":{"tf":1.0},"106":{"tf":1.0}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":2,"docs":{"105":{"tf":1.0},"106":{"tf":1.0}}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"d":{"df":2,"docs":{"105":{"tf":1.0},"106":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"n":{"df":6,"docs":{"69":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":2.0},"78":{"tf":1.0},"81":{"tf":1.0},"93":{"tf":1.0}},"e":{"df":2,"docs":{"105":{"tf":1.0},"16":{"tf":1.7320508075688772}}}},"t":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"82":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":13,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":2.0},"33":{"tf":1.0},"37":{"tf":1.0},"56":{"tf":1.4142135623730951},"64":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"73":{"tf":1.0},"82":{"tf":1.0},"94":{"tf":1.0}}},"h":{"df":1,"docs":{"33":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"<":{"0":{"df":1,"docs":{"33":{"tf":1.0}}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"w":{"df":7,"docs":{"106":{"tf":2.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.7320508075688772},"34":{"tf":1.0},"5":{"tf":1.0}}}},"u":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":25,"docs":{"105":{"tf":1.7320508075688772},"106":{"tf":1.0},"113":{"tf":1.0},"15":{"tf":1.4142135623730951},"18":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"25":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"44":{"tf":1.0},"60":{"tf":1.4142135623730951},"62":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.4142135623730951},"69":{"tf":2.0},"71":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.4142135623730951},"83":{"tf":1.0},"86":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"62":{"tf":1.0}}}}}}},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"117":{"tf":1.0},"18":{"tf":1.7320508075688772},"23":{"tf":1.0},"97":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":2,"docs":{"14":{"tf":1.0},"17":{"tf":1.0}}}}}}},"c":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"79":{"tf":1.0}}}}},"df":0,"docs":{}},"d":{"d":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"58":{"tf":1.7320508075688772}}}}}},"df":1,"docs":{"58":{"tf":1.0}}},"df":0,"docs":{}},"df":3,"docs":{"105":{"tf":1.4142135623730951},"14":{"tf":1.0},"23":{"tf":1.0}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"15":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"69":{"tf":1.0}}}}},"n":{"c":{"df":6,"docs":{"14":{"tf":1.0},"18":{"tf":1.0},"33":{"tf":1.0},"54":{"tf":1.0},"83":{"tf":1.0},"99":{"tf":1.0}},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"17":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":15,"docs":{"17":{"tf":1.0},"18":{"tf":2.0},"33":{"tf":1.0},"34":{"tf":1.0},"37":{"tf":1.0},"40":{"tf":1.0},"57":{"tf":1.0},"67":{"tf":1.0},"70":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":1.4142135623730951},"80":{"tf":1.0},"81":{"tf":1.0},"86":{"tf":1.4142135623730951},"87":{"tf":1.0}}},"p":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"57":{"tf":2.449489742783178}}},"df":0,"docs":{}}},"df":1,"docs":{"74":{"tf":2.0}},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"1":{"tf":1.0},"7":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"i":{"d":{"df":6,"docs":{"116":{"tf":1.0},"33":{"tf":1.7320508075688772},"37":{"tf":1.7320508075688772},"56":{"tf":1.7320508075688772},"57":{"tf":1.0},"58":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"37":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":23,"docs":{"101":{"tf":1.4142135623730951},"102":{"tf":1.7320508075688772},"115":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":2.23606797749979},"56":{"tf":2.0},"57":{"tf":4.47213595499958},"58":{"tf":2.449489742783178},"61":{"tf":1.0},"62":{"tf":2.23606797749979},"67":{"tf":2.23606797749979},"72":{"tf":1.0},"76":{"tf":1.4142135623730951},"77":{"tf":1.7320508075688772},"78":{"tf":1.7320508075688772},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":2.0},"85":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":8,"docs":{"106":{"tf":1.4142135623730951},"14":{"tf":1.0},"15":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.4142135623730951},"30":{"tf":2.0},"37":{"tf":1.0},"6":{"tf":1.0}}},"o":{"df":0,"docs":{},"n":{"<":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.4142135623730951}}}}}}},"df":21,"docs":{"10":{"tf":1.0},"117":{"tf":1.0},"14":{"tf":1.0},"17":{"tf":2.0},"18":{"tf":2.6457513110645907},"22":{"tf":1.4142135623730951},"23":{"tf":2.0},"24":{"tf":2.0},"25":{"tf":2.0},"26":{"tf":2.0},"27":{"tf":2.0},"28":{"tf":1.4142135623730951},"30":{"tf":1.4142135623730951},"31":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"48":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"66":{"tf":1.0},"70":{"tf":1.0},"85":{"tf":1.0}}}}}}},"r":{"d":{"df":2,"docs":{"102":{"tf":2.0},"74":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":7,"docs":{"113":{"tf":1.0},"18":{"tf":1.4142135623730951},"42":{"tf":1.0},"60":{"tf":1.4142135623730951},"62":{"tf":1.0},"67":{"tf":1.4142135623730951},"78":{"tf":1.0}}}}},"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"33":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"59":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"61":{"tf":1.0}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":4,"docs":{"44":{"tf":1.0},"66":{"tf":1.0},"77":{"tf":1.7320508075688772},"81":{"tf":1.0}}}}}}}}},"u":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"(":{"\"":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"5":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":5,"docs":{"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"19":{"tf":1.0},"37":{"tf":1.0}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{".":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"105":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"_":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"23":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":19,"docs":{"105":{"tf":1.7320508075688772},"106":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":2.0},"28":{"tf":1.0},"30":{"tf":1.0},"37":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.7320508075688772},"49":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":2.23606797749979},"57":{"tf":1.7320508075688772},"58":{"tf":1.7320508075688772},"94":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":5,"docs":{"105":{"tf":1.0},"37":{"tf":1.0},"44":{"tf":1.0},"57":{"tf":1.0},"98":{"tf":1.0}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"106":{"tf":1.7320508075688772},"37":{"tf":1.0},"55":{"tf":1.0}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":2,"docs":{"113":{"tf":1.0},"21":{"tf":1.0}}}}}},"w":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"17":{"tf":1.0},"23":{"tf":1.0}}}}}}}}}},"p":{"a":{"c":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"10":{"tf":1.0},"4":{"tf":1.0}}}},"df":1,"docs":{"18":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":1,"docs":{"106":{"tf":1.7320508075688772}}}},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"80":{"tf":1.0}}}},"n":{"df":0,"docs":{},"i":{"c":{"!":{"(":{"\"":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":1,"docs":{"95":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"92":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"76":{"tf":1.0},"84":{"tf":1.4142135623730951},"92":{"tf":2.23606797749979}}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"m":{"df":10,"docs":{"15":{"tf":2.0},"17":{"tf":1.7320508075688772},"18":{"tf":2.8284271247461903},"20":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"25":{"tf":1.7320508075688772},"26":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"62":{"tf":1.0}},"e":{"df":0,"docs":{},"t":{"df":15,"docs":{"15":{"tf":1.7320508075688772},"17":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.4142135623730951},"37":{"tf":1.0},"38":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.4142135623730951},"63":{"tf":1.7320508075688772},"69":{"tf":1.4142135623730951},"70":{"tf":1.0},"82":{"tf":1.7320508075688772}}}},"s":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"15":{"tf":2.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.8284271247461903},"20":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"33":{"tf":1.0}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":3,"docs":{"62":{"tf":1.0},"67":{"tf":1.0},"80":{"tf":1.0}}}}}}}},"s":{"df":2,"docs":{"22":{"tf":1.0},"29":{"tf":1.0}}},"t":{"df":8,"docs":{"106":{"tf":1.0},"20":{"tf":1.0},"34":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.4142135623730951},"69":{"tf":1.0}},"i":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"110":{"tf":1.0}}}},"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"78":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"s":{"df":4,"docs":{"17":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.4142135623730951},"42":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":5,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":1.0},"23":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"70":{"tf":1.0}}},"r":{"df":0,"docs":{},"n":{"df":5,"docs":{"63":{"tf":1.7320508075688772},"64":{"tf":1.7320508075688772},"65":{"tf":2.23606797749979},"69":{"tf":3.4641016151377544},"70":{"tf":3.872983346207417}}}}}}}},"c":{"[":{"@":{"df":0,"docs":{},"p":{"c":{"df":9,"docs":{"13":{"tf":1.0},"20":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"36":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.0},"56":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"44":{"tf":1.7320508075688772}}},"df":2,"docs":{"23":{"tf":1.0},"77":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"14":{"tf":1.0},"18":{"tf":1.0},"5":{"tf":1.0},"87":{"tf":1.0},"99":{"tf":1.0}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":8,"docs":{"15":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.4142135623730951},"67":{"tf":1.0},"71":{"tf":1.0},"76":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"(":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"<":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":2,"docs":{"101":{"tf":1.0},"118":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"42":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"i":{"df":0,"docs":{},"l":{"df":67,"docs":{"100":{"tf":1.0},"101":{"tf":1.0},"102":{"tf":1.4142135623730951},"105":{"tf":1.4142135623730951},"113":{"tf":1.4142135623730951},"118":{"tf":1.7320508075688772},"14":{"tf":2.23606797749979},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":2.8284271247461903},"23":{"tf":3.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":2.0},"34":{"tf":1.4142135623730951},"36":{"tf":1.0},"37":{"tf":1.7320508075688772},"54":{"tf":1.0},"59":{"tf":2.449489742783178},"60":{"tf":1.4142135623730951},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.4142135623730951},"64":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.4142135623730951},"69":{"tf":1.4142135623730951},"70":{"tf":1.0},"71":{"tf":1.7320508075688772},"72":{"tf":1.0},"73":{"tf":1.4142135623730951},"74":{"tf":1.0},"75":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.4142135623730951},"78":{"tf":1.0},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.4142135623730951},"87":{"tf":1.4142135623730951},"88":{"tf":1.0},"89":{"tf":1.0},"9":{"tf":1.0},"90":{"tf":1.0},"91":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0},"99":{"tf":1.0}},"o":{"df":1,"docs":{"23":{"tf":1.4142135623730951}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":5,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":2.6457513110645907}},"e":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"(":{")":{".":{"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"v":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"\"":{"df":0,"docs":{},"v":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"\"":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":1,"docs":{"16":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"(":{"df":0,"docs":{},"w":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"16":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"y":{"(":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":1,"docs":{"16":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}}}},":":{":":{"<":{"b":{"df":0,"docs":{},"n":{"2":{"5":{"4":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{">":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"16":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"16":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}}}},"k":{"df":0,"docs":{},"g":{"df":1,"docs":{"10":{"tf":1.0}}}},"l":{"a":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"67":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":1,"docs":{"105":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":3,"docs":{"106":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":0,"docs":{},"y":{"3":{"df":8,"docs":{"11":{"tf":1.0},"110":{"tf":2.0},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"73":{"tf":1.0}}}}}}},"u":{"df":2,"docs":{"74":{"tf":1.0},"85":{"tf":1.0}},"s":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"64":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"117":{"tf":1.0},"18":{"tf":1.0},"40":{"tf":1.0},"44":{"tf":1.0},"62":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"y":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"10":{"tf":1.0},"59":{"tf":1.4142135623730951}}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":3,"docs":{"101":{"tf":1.0},"61":{"tf":1.0},"83":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"103":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":8,"docs":{"15":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.6457513110645907},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":12,"docs":{"13":{"tf":1.0},"23":{"tf":2.0},"24":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"30":{"tf":1.0},"31":{"tf":1.0},"34":{"tf":1.0},"63":{"tf":1.0},"68":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}},"t":{"df":2,"docs":{"1":{"tf":1.0},"7":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"15":{"tf":1.0},"96":{"tf":1.0}}}}}}},"w":{"d":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"106":{"tf":1.0}}},":":{":":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{":":{":":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"2":{"5":{"4":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":1.0}}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"5":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}},"_":{"c":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"16":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"v":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"106":{"tf":1.0},"5":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"_":{"df":0,"docs":{},"u":{"3":{"2":{"df":1,"docs":{"105":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"2":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":59,"docs":{"0":{"tf":1.0},"102":{"tf":1.0},"103":{"tf":1.4142135623730951},"104":{"tf":1.0},"105":{"tf":2.449489742783178},"106":{"tf":3.605551275463989},"107":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.0},"11":{"tf":2.8284271247461903},"110":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"113":{"tf":1.7320508075688772},"114":{"tf":1.0},"12":{"tf":2.449489742783178},"13":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"15":{"tf":2.449489742783178},"16":{"tf":2.8284271247461903},"17":{"tf":1.7320508075688772},"18":{"tf":2.8284271247461903},"19":{"tf":2.0},"2":{"tf":1.0},"20":{"tf":2.449489742783178},"21":{"tf":3.605551275463989},"22":{"tf":2.449489742783178},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"25":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"27":{"tf":1.7320508075688772},"28":{"tf":1.7320508075688772},"29":{"tf":1.7320508075688772},"3":{"tf":1.7320508075688772},"30":{"tf":1.7320508075688772},"31":{"tf":1.7320508075688772},"32":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"35":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.4142135623730951},"39":{"tf":1.0},"43":{"tf":1.0},"5":{"tf":2.23606797749979},"54":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"6":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":1.4142135623730951},"77":{"tf":1.0},"78":{"tf":1.0},"8":{"tf":1.0},"82":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"9":{"tf":2.6457513110645907}},"v":{"df":0,"docs":{},"m":{"df":4,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":1.0},"3":{"tf":1.4142135623730951},"5":{"tf":1.4142135623730951}}}}}},"df":2,"docs":{"102":{"tf":1.0},"74":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"_":{"4":{"<":{"0":{"df":1,"docs":{"37":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"62":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":1,"docs":{"18":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":3,"docs":{"33":{"tf":1.0},"34":{"tf":1.0},"62":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"5":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"10":{"tf":1.4142135623730951},"4":{"tf":1.4142135623730951}}}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":4,"docs":{"16":{"tf":1.0},"17":{"tf":1.7320508075688772},"18":{"tf":1.4142135623730951},"56":{"tf":1.0}},"s":{"df":5,"docs":{"15":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.7320508075688772},"26":{"tf":1.0},"27":{"tf":1.4142135623730951}}}}}}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":2,"docs":{"51":{"tf":1.0},"78":{"tf":1.0}}}},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"22":{"tf":1.0},"29":{"tf":1.0},"92":{"tf":1.0},"94":{"tf":1.7320508075688772}}}},"v":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"18":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"118":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"6":{"tf":1.0}}}}}}}},"d":{"df":0,"docs":{},"u":{"c":{"df":1,"docs":{"17":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":10,"docs":{"106":{"tf":1.4142135623730951},"113":{"tf":1.0},"114":{"tf":1.0},"15":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"36":{"tf":1.0},"40":{"tf":2.6457513110645907}}}},"df":0,"docs":{}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"16":{"tf":1.0},"3":{"tf":1.0},"5":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"f":{"df":20,"docs":{"0":{"tf":1.4142135623730951},"106":{"tf":3.1622776601683795},"109":{"tf":1.0},"112":{"tf":1.0},"13":{"tf":1.0},"14":{"tf":2.0},"15":{"tf":4.358898943540674},"16":{"tf":2.23606797749979},"17":{"tf":3.0},"18":{"tf":5.477225575051661},"20":{"tf":2.449489742783178},"23":{"tf":1.0},"24":{"tf":2.23606797749979},"25":{"tf":2.449489742783178},"26":{"tf":1.0},"28":{"tf":1.0},"3":{"tf":1.0},"5":{"tf":1.7320508075688772},"9":{"tf":1.0},"97":{"tf":1.0}}}},"p":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"61":{"tf":1.0},"67":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"100":{"tf":1.0}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"d":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"105":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"23":{"tf":1.0}}}}}}},"df":11,"docs":{"106":{"tf":2.23606797749979},"14":{"tf":1.4142135623730951},"15":{"tf":1.7320508075688772},"17":{"tf":1.0},"18":{"tf":2.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.7320508075688772},"5":{"tf":1.0}},"n":{"df":2,"docs":{"18":{"tf":1.0},"5":{"tf":1.4142135623730951}}},"r":{"'":{"df":1,"docs":{"105":{"tf":1.0}}},"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.0}}}}}}}},"df":12,"docs":{"105":{"tf":2.0},"11":{"tf":1.0},"13":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"20":{"tf":1.4142135623730951},"36":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"73":{"tf":1.0},"92":{"tf":1.0},"96":{"tf":1.4142135623730951}}}},"i":{"d":{"df":2,"docs":{"105":{"tf":1.0},"113":{"tf":1.0}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"e":{"'":{"df":1,"docs":{"18":{"tf":1.0}}},"df":1,"docs":{"111":{"tf":1.0}}}},"u":{"b":{"df":3,"docs":{"105":{"tf":1.0},"106":{"tf":1.0},"16":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"c":{"df":5,"docs":{"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":2.23606797749979},"20":{"tf":2.8284271247461903},"25":{"tf":1.7320508075688772}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"20":{"tf":1.0}}}},"s":{"]":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"16":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"20":{"tf":1.0}}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":2,"docs":{"64":{"tf":1.0},"68":{"tf":1.7320508075688772}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":3,"docs":{"23":{"tf":1.0},"79":{"tf":1.0},"94":{"tf":1.0}}}}}}}},"q":{"df":1,"docs":{"77":{"tf":1.0}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":5,"docs":{"105":{"tf":1.0},"68":{"tf":3.3166247903554},"73":{"tf":1.0},"96":{"tf":1.4142135623730951},"99":{"tf":1.4142135623730951}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"5":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"t":{"df":2,"docs":{"62":{"tf":1.0},"64":{"tf":1.0}}}}}},"r":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"18":{"tf":1.0}}},"n":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"97":{"tf":1.0}}}}},"df":0,"docs":{},"g":{"df":4,"docs":{"117":{"tf":1.0},"118":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0}}}}},"df":2,"docs":{"5":{"tf":1.0},"58":{"tf":2.23606797749979}},"e":{"a":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"107":{"tf":1.0},"108":{"tf":1.0}}}},"d":{"(":{"1":{"df":1,"docs":{"5":{"tf":1.0}}},"2":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"u":{"3":{"2":{"(":{"0":{"df":1,"docs":{"105":{"tf":1.0}}},"1":{"df":1,"docs":{"105":{"tf":1.0}}},"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"x":{"df":1,"docs":{"105":{"tf":1.0}}}},"df":0,"docs":{}}},"df":1,"docs":{"105":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":6,"docs":{"105":{"tf":1.4142135623730951},"15":{"tf":1.0},"20":{"tf":1.0},"41":{"tf":1.4142135623730951},"43":{"tf":2.0},"5":{"tf":1.7320508075688772}}},"df":0,"docs":{},"l":{"df":2,"docs":{"106":{"tf":1.0},"19":{"tf":1.0}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":3,"docs":{"38":{"tf":1.0},"42":{"tf":1.0},"99":{"tf":1.0}}}},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"106":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":6,"docs":{"117":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":3.4641016151377544},"24":{"tf":1.0},"26":{"tf":1.0},"85":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":1,"docs":{"106":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"d":{"df":0,"docs":{},"u":{"c":{"df":5,"docs":{"113":{"tf":1.0},"114":{"tf":1.0},"115":{"tf":2.0},"23":{"tf":1.0},"5":{"tf":1.0}},"t":{"df":1,"docs":{"115":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":1,"docs":{"18":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":6,"docs":{"33":{"tf":1.0},"47":{"tf":1.0},"59":{"tf":1.0},"73":{"tf":2.0},"83":{"tf":1.7320508075688772},"85":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"c":{"df":4,"docs":{"100":{"tf":1.0},"56":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":3,"docs":{"21":{"tf":1.0},"22":{"tf":1.0},"29":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"70":{"tf":2.6457513110645907}}}}},"g":{"df":10,"docs":{"13":{"tf":2.0},"20":{"tf":2.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"36":{"tf":2.0},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":2.23606797749979},"44":{"tf":2.6457513110645907},"56":{"tf":3.605551275463989}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":14,"docs":{"20":{"tf":1.0},"34":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"39":{"tf":2.23606797749979},"40":{"tf":1.7320508075688772},"41":{"tf":2.23606797749979},"42":{"tf":2.6457513110645907},"43":{"tf":2.23606797749979},"48":{"tf":1.7320508075688772},"52":{"tf":2.0},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":2.23606797749979}}}}},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}},"l":{"df":2,"docs":{"33":{"tf":1.0},"34":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"s":{"df":2,"docs":{"2":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":1,"docs":{"37":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"77":{"tf":1.4142135623730951}}},"df":2,"docs":{"106":{"tf":1.0},"20":{"tf":1.0}}}}},"df":1,"docs":{"64":{"tf":1.0}}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"18":{"tf":1.0}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"23":{"tf":1.0}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"64":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"87":{"tf":2.0}}}}}},"l":{"a":{"c":{"df":1,"docs":{"90":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":4,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"16":{"tf":1.0},"20":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":1,"docs":{"73":{"tf":1.0}}}},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":1,"docs":{"15":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"1":{"tf":1.0},"7":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"r":{"df":11,"docs":{"101":{"tf":1.0},"15":{"tf":1.7320508075688772},"42":{"tf":1.0},"61":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"77":{"tf":1.4142135623730951},"78":{"tf":1.0},"86":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":1,"docs":{"33":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":1,"docs":{"33":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"102":{"tf":1.0},"15":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"5":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"58":{"tf":1.0},"61":{"tf":1.0},"67":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":11,"docs":{"101":{"tf":1.0},"115":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"20":{"tf":1.0},"56":{"tf":1.0},"61":{"tf":1.0},"67":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":2.0},"78":{"tf":1.4142135623730951}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"81":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":23,"docs":{"13":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.7320508075688772},"36":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"49":{"tf":1.0},"53":{"tf":1.0},"56":{"tf":1.4142135623730951},"63":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":2.0},"68":{"tf":2.0},"72":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"84":{"tf":1.4142135623730951},"91":{"tf":1.4142135623730951},"93":{"tf":1.7320508075688772},"94":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"s":{"df":2,"docs":{"33":{"tf":1.0},"56":{"tf":1.0}}}},"v":{"df":0,"docs":{},"m":{"df":1,"docs":{"19":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":5,"docs":{"18":{"tf":1.0},"48":{"tf":1.0},"62":{"tf":1.0},"77":{"tf":1.0},"82":{"tf":1.0}}}}},"s":{"c":{"df":0,"docs":{},"v":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"v":{"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"/":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"y":{"_":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":1,"docs":{"106":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"105":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"3":{"2":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"a":{"c":{"df":1,"docs":{"105":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":5,"docs":{"104":{"tf":2.0},"105":{"tf":2.0},"106":{"tf":2.449489742783178},"19":{"tf":1.4142135623730951},"9":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":5,"docs":{"105":{"tf":1.0},"106":{"tf":2.449489742783178},"20":{"tf":1.0},"60":{"tf":1.0},"96":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"77":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"106":{"tf":1.7320508075688772}}}}}},"w":{"df":13,"docs":{"106":{"tf":3.3166247903554},"20":{"tf":1.4142135623730951},"34":{"tf":1.0},"37":{"tf":1.4142135623730951},"5":{"tf":1.4142135623730951},"58":{"tf":2.449489742783178},"60":{"tf":2.0},"62":{"tf":1.0},"68":{"tf":1.0},"77":{"tf":1.0},"83":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.0}}}},"s":{"df":4,"docs":{"105":{"tf":1.4142135623730951},"106":{"tf":2.6457513110645907},"12":{"tf":2.23606797749979},"9":{"tf":1.0}}},"u":{"df":0,"docs":{},"n":{"df":11,"docs":{"105":{"tf":2.0},"106":{"tf":1.7320508075688772},"115":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":2.0},"17":{"tf":1.0},"20":{"tf":2.0},"22":{"tf":1.0},"23":{"tf":1.0},"5":{"tf":2.0},"78":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":4,"docs":{"10":{"tf":1.0},"77":{"tf":2.23606797749979},"78":{"tf":1.4142135623730951},"81":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"=":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":2,"docs":{"16":{"tf":1.0},"20":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":12,"docs":{"0":{"tf":1.0},"10":{"tf":1.4142135623730951},"105":{"tf":2.0},"106":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"19":{"tf":1.0},"33":{"tf":1.0},"4":{"tf":1.4142135623730951},"5":{"tf":1.0},"6":{"tf":1.4142135623730951},"71":{"tf":1.0},"9":{"tf":1.0}},"f":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"11":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"r":{"df":2,"docs":{"10":{"tf":1.0},"4":{"tf":1.0}}}},"df":1,"docs":{"105":{"tf":1.0}}}}}}}},"s":{"a":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":1,"docs":{"106":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":10,"docs":{"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.7320508075688772},"38":{"tf":1.0},"48":{"tf":1.0},"56":{"tf":1.0},"60":{"tf":1.0},"69":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"71":{"tf":1.0}}}}}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"6":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"34":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":3,"docs":{"64":{"tf":1.0},"69":{"tf":1.0},"97":{"tf":1.0}}},"df":0,"docs":{}}},"p":{"2":{"5":{"6":{"df":0,"docs":{},"k":{"1":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"92":{"tf":1.0}}}}}}}},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"92":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":11,"docs":{"114":{"tf":1.0},"15":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.0},"34":{"tf":1.0},"37":{"tf":1.0},"44":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"68":{"tf":1.0},"71":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":11,"docs":{"105":{"tf":1.0},"106":{"tf":1.0},"15":{"tf":1.4142135623730951},"17":{"tf":1.0},"34":{"tf":1.0},"62":{"tf":1.7320508075688772},"64":{"tf":1.0},"65":{"tf":1.0},"68":{"tf":1.0},"71":{"tf":1.4142135623730951},"83":{"tf":1.0}},"n":{"df":1,"docs":{"88":{"tf":1.0}}}},"g":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"69":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"65":{"tf":1.0}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"100":{"tf":1.0}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":2,"docs":{"23":{"tf":1.0},"25":{"tf":1.0}}}},"df":0,"docs":{}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"64":{"tf":1.0}}},"df":0,"docs":{}}}}},"r":{"d":{"df":1,"docs":{"5":{"tf":1.4142135623730951}}},"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"5":{"tf":1.0}}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":1,"docs":{"5":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"5":{"tf":1.0}}}}}},":":{":":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"5":{"tf":1.7320508075688772}}}}}}},"t":{"df":16,"docs":{"103":{"tf":1.0},"114":{"tf":1.0},"118":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"32":{"tf":1.0},"36":{"tf":2.23606797749979},"37":{"tf":1.7320508075688772},"48":{"tf":1.0},"5":{"tf":1.0},"54":{"tf":2.0},"55":{"tf":1.0},"56":{"tf":1.0},"64":{"tf":1.0},"68":{"tf":1.4142135623730951},"99":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"s":{"df":1,"docs":{"16":{"tf":1.0}}}},"df":13,"docs":{"0":{"tf":1.0},"15":{"tf":3.3166247903554},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":2.23606797749979},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.7320508075688772}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"103":{"tf":1.0},"14":{"tf":1.0}}}}}},"g":{"df":0,"docs":{},"n":{"(":{"df":0,"docs":{},"p":{"df":1,"docs":{"77":{"tf":1.0}}}},"df":0,"docs":{}}},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"5":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":2,"docs":{"62":{"tf":1.0},"77":{"tf":2.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"76":{"tf":1.0}}}},"w":{"df":2,"docs":{"20":{"tf":1.0},"56":{"tf":1.0}}}},"u":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"106":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}}}},"i":{"d":{"df":0,"docs":{},"e":{"df":7,"docs":{"48":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":1.4142135623730951},"69":{"tf":1.0},"82":{"tf":1.4142135623730951},"92":{"tf":1.0},"94":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":4,"docs":{"102":{"tf":1.0},"18":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0}}}}}},"df":2,"docs":{"51":{"tf":1.0},"77":{"tf":1.0}}}},"m":{"d":{"df":1,"docs":{"11":{"tf":2.0}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":3,"docs":{"3":{"tf":1.0},"33":{"tf":1.0},"71":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"64":{"tf":1.0}}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"l":{"df":5,"docs":{"34":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.4142135623730951},"44":{"tf":1.0},"73":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"37":{"tf":1.0}}}},"df":1,"docs":{"55":{"tf":1.0}}}}},"i":{"df":1,"docs":{"57":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"df":2,"docs":{"106":{"tf":1.7320508075688772},"17":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":12,"docs":{"106":{"tf":1.0},"11":{"tf":1.0},"118":{"tf":1.0},"12":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.0},"23":{"tf":1.0},"56":{"tf":1.7320508075688772},"57":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.0},"87":{"tf":1.0}}}}},"z":{"df":0,"docs":{},"e":{"df":8,"docs":{"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"23":{"tf":1.0},"28":{"tf":1.7320508075688772},"5":{"tf":1.7320508075688772},"77":{"tf":1.0},"81":{"tf":2.6457513110645907}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"105":{"tf":1.0}}}}},"m":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"20":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"5":{"tf":1.0}}}}}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"_":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":6,"docs":{"18":{"tf":2.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}}}},"b":{"df":0,"docs":{},"n":{"df":5,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":6,"docs":{"17":{"tf":1.7320508075688772},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}}}}}},"df":4,"docs":{"17":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"72":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"l":{"c":{"df":1,"docs":{"17":{"tf":1.0}}},"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"17":{"tf":1.7320508075688772},"18":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"18":{"tf":1.0},"67":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"e":{"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{":":{":":{"<":{"df":0,"docs":{},"u":{"3":{"2":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":1,"docs":{"5":{"tf":2.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"67":{"tf":1.0}}}},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"106":{"tf":1.0},"68":{"tf":1.0}}}},"u":{"df":0,"docs":{},"r":{"c":{"df":6,"docs":{"1":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"2":{"tf":1.0},"7":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"100":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{},"f":{"df":6,"docs":{"101":{"tf":1.0},"106":{"tf":1.0},"15":{"tf":1.0},"56":{"tf":1.0},"6":{"tf":1.0},"71":{"tf":1.0}},"i":{"df":9,"docs":{"105":{"tf":1.4142135623730951},"14":{"tf":1.0},"15":{"tf":1.0},"34":{"tf":1.7320508075688772},"6":{"tf":1.0},"60":{"tf":1.4142135623730951},"63":{"tf":1.0},"71":{"tf":1.4142135623730951},"72":{"tf":1.0}}}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"106":{"tf":1.0},"5":{"tf":1.0}}}}}},"q":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"96":{"tf":1.0}}}}}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"20":{"tf":1.4142135623730951}},"i":{"c":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"20":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":1,"docs":{"96":{"tf":1.0}}}},"u":{"a":{"df":0,"docs":{},"r":{"df":6,"docs":{"20":{"tf":2.23606797749979},"44":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"62":{"tf":1.0},"68":{"tf":1.0},"96":{"tf":1.4142135623730951}},"e":{"(":{"a":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"n":{"d":{"_":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"44":{"tf":1.0},"48":{"tf":1.0}},"e":{"(":{"a":{"df":3,"docs":{"44":{"tf":1.0},"48":{"tf":1.4142135623730951},"53":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":1,"docs":{"68":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"t":{"a":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"0":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":1,"docs":{"97":{"tf":1.0}}}},"n":{"d":{"a":{"df":0,"docs":{},"r":{"d":{"df":3,"docs":{"100":{"tf":1.0},"33":{"tf":1.0},"94":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"k":{"_":{"b":{"df":0,"docs":{},"n":{"df":5,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":5,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}}},"df":3,"docs":{"15":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}},"i":{"df":1,"docs":{"112":{"tf":1.0}}}},"t":{"df":12,"docs":{"109":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"13":{"tf":1.0},"18":{"tf":1.0},"22":{"tf":1.4142135623730951},"3":{"tf":1.0},"31":{"tf":1.4142135623730951},"44":{"tf":1.7320508075688772},"47":{"tf":1.0},"5":{"tf":1.7320508075688772},"60":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"19":{"tf":1.0}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":13,"docs":{"101":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.4142135623730951},"46":{"tf":1.4142135623730951},"49":{"tf":1.0},"61":{"tf":1.7320508075688772},"62":{"tf":1.0},"64":{"tf":3.605551275463989},"68":{"tf":1.0},"69":{"tf":1.4142135623730951},"70":{"tf":1.0},"83":{"tf":1.0},"94":{"tf":1.0}}}}}}},"i":{"c":{"df":2,"docs":{"40":{"tf":1.0},"81":{"tf":2.0}}},"df":0,"docs":{}}},"y":{"df":2,"docs":{"34":{"tf":1.0},"71":{"tf":1.0}}}},"d":{":":{":":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"y":{":":{":":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"(":{"df":0,"docs":{},"x":{"df":1,"docs":{"91":{"tf":1.0}}}},"df":2,"docs":{"81":{"tf":1.0},"91":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"(":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{":":{":":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"n":{"df":2,"docs":{"82":{"tf":1.0},"92":{"tf":1.0}},"i":{"c":{"(":{"\"":{"c":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"69":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"76":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":1,"docs":{"93":{"tf":1.0}}}}}},"f":{"df":1,"docs":{"93":{"tf":1.0}},"e":{"(":{"0":{"df":1,"docs":{"92":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"93":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"82":{"tf":1.0},"94":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{":":{":":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":2,"docs":{"78":{"tf":1.0},"95":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"x":{"df":1,"docs":{"92":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{":":{":":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"16":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"d":{"df":2,"docs":{"33":{"tf":1.0},"60":{"tf":1.0}},"e":{":":{":":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"97":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.0}}}}}}}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"99":{"tf":1.0}}},"y":{":":{":":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"d":{":":{":":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"(":{"df":0,"docs":{},"x":{"df":1,"docs":{"96":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"(":{"0":{"df":3,"docs":{"13":{"tf":1.0},"20":{"tf":1.0},"36":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"99":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"98":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"(":{"df":0,"docs":{},"x":{"df":2,"docs":{"68":{"tf":1.0},"96":{"tf":1.0}}}},"df":0,"docs":{}}},"df":3,"docs":{"68":{"tf":1.0},"73":{"tf":1.0},"96":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"x":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"98":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"98":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":2,"docs":{"0":{"tf":1.0},"33":{"tf":1.0}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"22":{"tf":1.4142135623730951},"29":{"tf":1.0},"30":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"(":{"df":0,"docs":{},"i":{"df":1,"docs":{"56":{"tf":1.0}}}},"df":12,"docs":{"106":{"tf":1.0},"113":{"tf":1.4142135623730951},"115":{"tf":1.7320508075688772},"15":{"tf":1.7320508075688772},"16":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"36":{"tf":1.0},"37":{"tf":1.0},"40":{"tf":1.7320508075688772},"42":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}}}}}},"df":2,"docs":{"41":{"tf":1.0},"67":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"105":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":5,"docs":{"105":{"tf":1.0},"15":{"tf":1.0},"5":{"tf":1.0},"60":{"tf":1.0},"78":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}},"df":1,"docs":{"16":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":8,"docs":{"62":{"tf":1.0},"69":{"tf":1.7320508075688772},"70":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0},"79":{"tf":2.449489742783178},"92":{"tf":1.0},"94":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"59":{"tf":1.0}}}}}}},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":4,"docs":{"117":{"tf":1.0},"16":{"tf":1.0},"69":{"tf":1.0},"83":{"tf":1.0}}}}}},"df":0,"docs":{}}},"u":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}}},"u":{"b":{"(":{"6":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"<":{"1":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"22":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":6,"docs":{"102":{"tf":1.0},"22":{"tf":1.0},"31":{"tf":1.0},"56":{"tf":1.0},"67":{"tf":1.0},"74":{"tf":1.4142135623730951}},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":6,"docs":{"117":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":2.449489742783178},"54":{"tf":1.0},"56":{"tf":3.4641016151377544}},"e":{".":{"a":{"d":{"d":{"(":{"a":{"df":1,"docs":{"56":{"tf":1.7320508075688772}}},"df":0,"docs":{},"i":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}},"x":{"df":1,"docs":{"56":{"tf":2.8284271247461903}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"b":{"a":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"x":{"df":1,"docs":{"58":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"(":{"df":0,"docs":{},"x":{"df":1,"docs":{"58":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"u":{"b":{"(":{"df":0,"docs":{},"x":{"df":1,"docs":{"56":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":1,"docs":{"38":{"tf":1.0}},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"33":{"tf":1.0}},"e":{".":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"33":{"tf":1.0}}}}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.0}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"33":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{".":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"33":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},":":{":":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}}}}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"62":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"h":{"df":4,"docs":{"15":{"tf":1.7320508075688772},"33":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":1,"docs":{"62":{"tf":1.0}}}}}},"m":{"(":{"1":{"6":{"df":1,"docs":{"67":{"tf":1.0}}},"df":0,"docs":{}},"[":{"df":0,"docs":{},"x":{"df":1,"docs":{"60":{"tf":1.0}}}},"a":{"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"34":{"tf":1.0}}}}}},"df":6,"docs":{"105":{"tf":2.449489742783178},"34":{"tf":1.4142135623730951},"5":{"tf":2.23606797749979},"60":{"tf":1.7320508075688772},"62":{"tf":1.0},"67":{"tf":1.4142135623730951}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"34":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"z":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"33":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"44":{"tf":1.0}}}}}}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"105":{"tf":1.4142135623730951}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":14,"docs":{"0":{"tf":1.0},"102":{"tf":1.0},"106":{"tf":1.0},"11":{"tf":2.0},"110":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"39":{"tf":1.0},"45":{"tf":1.0},"6":{"tf":1.4142135623730951},"71":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"88":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":2,"docs":{"116":{"tf":1.0},"18":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"m":{"df":1,"docs":{"17":{"tf":1.0}}}},"w":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"56":{"tf":1.0}}}},"df":0,"docs":{}},"y":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":7,"docs":{"33":{"tf":1.4142135623730951},"34":{"tf":2.23606797749979},"60":{"tf":3.7416573867739413},"63":{"tf":1.4142135623730951},"71":{"tf":2.23606797749979},"73":{"tf":3.4641016151377544},"83":{"tf":1.0}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"x":{"df":3,"docs":{"60":{"tf":1.4142135623730951},"67":{"tf":1.0},"83":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":8,"docs":{"0":{"tf":1.0},"100":{"tf":1.0},"106":{"tf":1.0},"112":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.0},"33":{"tf":1.0},"67":{"tf":1.4142135623730951}}}}}}}},"t":{"0":{"df":1,"docs":{"82":{"tf":1.0}}},"1":{"df":2,"docs":{"67":{"tf":1.4142135623730951},"82":{"tf":1.0}}},"2":{"df":2,"docs":{"67":{"tf":2.23606797749979},"82":{"tf":1.0}}},"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"23":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"g":{"df":1,"docs":{"20":{"tf":1.0}}},"k":{"df":0,"docs":{},"e":{"df":10,"docs":{"15":{"tf":1.0},"18":{"tf":2.0},"34":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"72":{"tf":1.0},"82":{"tf":1.4142135623730951},"85":{"tf":1.0},"94":{"tf":1.0}}}},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":5,"docs":{"105":{"tf":1.4142135623730951},"11":{"tf":1.4142135623730951},"15":{"tf":1.0},"17":{"tf":1.0},"5":{"tf":1.4142135623730951}}}}}}},"df":7,"docs":{"102":{"tf":5.0},"60":{"tf":1.4142135623730951},"69":{"tf":1.0},"72":{"tf":1.4142135623730951},"74":{"tf":5.0},"91":{"tf":1.0},"93":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"17":{"tf":1.0}}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"5":{"tf":1.0},"56":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"t":{"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"/":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"/":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"/":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"d":{".":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":5,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":2.0},"16":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.6457513110645907}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{".":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"20":{"tf":2.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":2,"docs":{"22":{"tf":1.0},"31":{"tf":1.0}}},"df":6,"docs":{"106":{"tf":1.0},"19":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.4142135623730951},"31":{"tf":2.0},"5":{"tf":1.4142135623730951}}}},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"69":{"tf":1.0}}}}},"h":{"df":1,"docs":{"20":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":1,"docs":{"69":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"15":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"f":{"df":3,"docs":{"22":{"tf":1.0},"31":{"tf":1.0},"73":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":3,"docs":{"71":{"tf":1.0},"73":{"tf":1.4142135623730951},"96":{"tf":1.0}}}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":2,"docs":{"15":{"tf":1.0},"99":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":2,"docs":{"13":{"tf":1.0},"77":{"tf":1.0}}}}}}},"u":{"df":3,"docs":{"78":{"tf":1.0},"82":{"tf":1.0},"92":{"tf":1.0}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"e":{"df":4,"docs":{"10":{"tf":1.0},"20":{"tf":1.0},"73":{"tf":1.0},"86":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"p":{"df":1,"docs":{"106":{"tf":1.4142135623730951}}}},"n":{"df":1,"docs":{"82":{"tf":1.0}}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"17":{"tf":1.0}}}}}},"t":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"86":{"tf":1.0},"87":{"tf":1.0}}}},"df":0,"docs":{}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"77":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"y":{"df":1,"docs":{"20":{"tf":1.0}}}},"r":{"a":{"c":{"df":0,"docs":{},"e":{"df":5,"docs":{"106":{"tf":2.449489742783178},"18":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"5":{"tf":1.0}},"s":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":1,"docs":{"5":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"k":{"df":1,"docs":{"18":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"1":{"tf":1.0},"7":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"101":{"tf":1.0},"71":{"tf":1.7320508075688772},"74":{"tf":1.4142135623730951}}}},"n":{"df":0,"docs":{},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":3,"docs":{"15":{"tf":1.4142135623730951},"17":{"tf":1.7320508075688772},"18":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"42":{"tf":1.0}}}}}},"l":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"105":{"tf":1.0}}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"117":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"100":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":4,"docs":{"105":{"tf":1.0},"117":{"tf":1.7320508075688772},"118":{"tf":1.0},"83":{"tf":1.0}}}},"i":{"df":3,"docs":{"14":{"tf":1.0},"70":{"tf":1.7320508075688772},"71":{"tf":1.0}},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"77":{"tf":1.7320508075688772},"78":{"tf":1.0},"81":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"e":{"df":2,"docs":{"33":{"tf":1.0},"66":{"tf":1.7320508075688772}}}}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":7,"docs":{"61":{"tf":1.0},"62":{"tf":1.0},"69":{"tf":2.0},"70":{"tf":1.0},"71":{"tf":1.0},"80":{"tf":3.3166247903554},"82":{"tf":1.0}}}},"r":{"df":0,"docs":{},"n":{"df":2,"docs":{"118":{"tf":1.4142135623730951},"67":{"tf":1.0}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"106":{"tf":1.0}}}}}}},"v":{"1":{"df":1,"docs":{"60":{"tf":1.0}}},"df":1,"docs":{"60":{"tf":1.0}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"67":{"tf":1.0}}}}}},"o":{"df":12,"docs":{"101":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.0},"35":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"80":{"tf":1.4142135623730951},"81":{"tf":1.7320508075688772},"82":{"tf":1.0},"83":{"tf":1.7320508075688772},"9":{"tf":1.0},"97":{"tf":1.0}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":33,"docs":{"100":{"tf":2.23606797749979},"101":{"tf":1.7320508075688772},"117":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":2.0},"35":{"tf":1.0},"37":{"tf":1.0},"39":{"tf":1.0},"41":{"tf":1.0},"5":{"tf":1.4142135623730951},"55":{"tf":1.0},"60":{"tf":3.872983346207417},"61":{"tf":1.0},"63":{"tf":1.4142135623730951},"65":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":4.358898943540674},"72":{"tf":2.6457513110645907},"73":{"tf":3.4641016151377544},"74":{"tf":1.4142135623730951},"75":{"tf":1.7320508075688772},"76":{"tf":1.4142135623730951},"77":{"tf":1.4142135623730951},"78":{"tf":1.7320508075688772},"79":{"tf":1.4142135623730951},"80":{"tf":2.449489742783178},"81":{"tf":2.23606797749979},"82":{"tf":2.0},"83":{"tf":2.0},"84":{"tf":2.8284271247461903},"85":{"tf":2.6457513110645907},"93":{"tf":1.0}}},"i":{"c":{"df":2,"docs":{"18":{"tf":1.0},"69":{"tf":1.0}}},"df":0,"docs":{}}}}},"u":{"3":{"2":{")":{")":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"105":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"105":{"tf":1.0},"5":{"tf":1.0}}},"df":0,"docs":{}},"6":{"4":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"10":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":1,"docs":{"23":{"tf":1.0}}},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":5,"docs":{"62":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0}}}}},"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"0":{"tf":1.0},"106":{"tf":1.0}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"34":{"tf":1.0}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"5":{"tf":1.0}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"37":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"107":{"tf":1.0},"108":{"tf":1.0},"2":{"tf":1.0},"8":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"6":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":6,"docs":{"106":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951},"67":{"tf":1.0},"71":{"tf":1.0},"85":{"tf":1.4142135623730951},"99":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":2,"docs":{"15":{"tf":1.0},"16":{"tf":1.0}}}}}}},"k":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"105":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"77":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"71":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"78":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"106":{"tf":1.0},"71":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"16":{"tf":2.0}}}},"df":0,"docs":{}}}},"p":{"df":7,"docs":{"105":{"tf":1.0},"106":{"tf":1.0},"18":{"tf":1.0},"33":{"tf":1.0},"5":{"tf":1.0},"60":{"tf":1.0},"69":{"tf":1.0}}},"s":{"a":{"df":0,"docs":{},"g":{"df":12,"docs":{"13":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0},"56":{"tf":1.7320508075688772}}}},"df":64,"docs":{"105":{"tf":1.4142135623730951},"106":{"tf":4.242640687119285},"11":{"tf":1.0},"118":{"tf":1.0},"12":{"tf":1.0},"13":{"tf":1.0},"14":{"tf":1.7320508075688772},"15":{"tf":3.0},"16":{"tf":3.0},"17":{"tf":2.8284271247461903},"18":{"tf":3.605551275463989},"19":{"tf":1.0},"20":{"tf":2.0},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"3":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":3.1622776601683795},"34":{"tf":1.4142135623730951},"37":{"tf":1.7320508075688772},"42":{"tf":1.4142135623730951},"43":{"tf":1.7320508075688772},"48":{"tf":1.0},"49":{"tf":1.0},"5":{"tf":2.0},"52":{"tf":1.0},"53":{"tf":1.0},"56":{"tf":2.6457513110645907},"57":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":3.605551275463989},"61":{"tf":1.7320508075688772},"63":{"tf":1.4142135623730951},"64":{"tf":2.23606797749979},"65":{"tf":1.0},"67":{"tf":1.7320508075688772},"68":{"tf":1.4142135623730951},"69":{"tf":1.0},"71":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951},"73":{"tf":2.23606797749979},"74":{"tf":2.6457513110645907},"77":{"tf":1.0},"78":{"tf":1.4142135623730951},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.7320508075688772},"82":{"tf":1.0},"83":{"tf":1.4142135623730951},"85":{"tf":1.4142135623730951},"87":{"tf":1.4142135623730951},"92":{"tf":1.4142135623730951},"93":{"tf":1.7320508075688772},"94":{"tf":1.4142135623730951},"95":{"tf":1.0},"96":{"tf":1.4142135623730951},"99":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"105":{"tf":1.0},"85":{"tf":1.0}}}},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"105":{"tf":1.0}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"15":{"tf":1.0},"82":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"33":{"tf":1.0},"34":{"tf":1.0},"83":{"tf":1.0}},"s":{":":{":":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{"_":{"b":{"df":0,"docs":{},"y":{"(":{"df":0,"docs":{},"x":{"df":1,"docs":{"34":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{"(":{"a":{"df":1,"docs":{"34":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"v":{"a":{"d":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"118":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"a":{"df":1,"docs":{"107":{"tf":2.0}}},"df":6,"docs":{"106":{"tf":1.7320508075688772},"14":{"tf":1.0},"34":{"tf":1.0},"69":{"tf":1.4142135623730951},"86":{"tf":1.0},"87":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":39,"docs":{"101":{"tf":1.0},"105":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"22":{"tf":1.4142135623730951},"23":{"tf":4.0},"24":{"tf":2.23606797749979},"25":{"tf":2.449489742783178},"26":{"tf":2.23606797749979},"27":{"tf":2.23606797749979},"28":{"tf":2.0},"30":{"tf":1.4142135623730951},"31":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":2.23606797749979},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"48":{"tf":1.4142135623730951},"56":{"tf":1.0},"58":{"tf":1.7320508075688772},"60":{"tf":2.8284271247461903},"61":{"tf":1.0},"63":{"tf":1.4142135623730951},"64":{"tf":2.449489742783178},"65":{"tf":2.449489742783178},"66":{"tf":2.0},"68":{"tf":1.7320508075688772},"69":{"tf":2.23606797749979},"70":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.7320508075688772},"73":{"tf":2.8284271247461903},"78":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"85":{"tf":1.0},"87":{"tf":1.7320508075688772},"90":{"tf":1.0},"99":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":6,"docs":{"60":{"tf":1.0},"64":{"tf":1.4142135623730951},"65":{"tf":1.0},"69":{"tf":1.7320508075688772},"70":{"tf":1.0},"71":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"1":{"df":1,"docs":{"85":{"tf":1.0}}},"2":{"df":1,"docs":{"85":{"tf":1.0}}},"3":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"85":{"tf":1.0}}}}}},"df":0,"docs":{}},"4":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"85":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":3,"docs":{"69":{"tf":1.4142135623730951},"70":{"tf":1.0},"85":{"tf":1.4142135623730951}}}},"t":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":1,"docs":{"60":{"tf":1.0}}}}}}},"df":1,"docs":{"68":{"tf":1.7320508075688772}},"e":{"c":{"!":{"[":{"0":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":1,"docs":{"16":{"tf":1.0}}}}}}},"df":0,"docs":{}},"1":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"106":{"tf":1.0}}}}}},"df":0,"docs":{}},"<":{"_":{"df":1,"docs":{"105":{"tf":1.0}}},"b":{"df":0,"docs":{},"n":{"2":{"5":{"4":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"16":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"u":{"3":{"2":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"16":{"tf":1.0}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"105":{"tf":1.0}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"61":{"tf":1.0}},"f":{"df":11,"docs":{"15":{"tf":3.7416573867739413},"16":{"tf":1.7320508075688772},"17":{"tf":1.0},"18":{"tf":2.8284271247461903},"20":{"tf":1.7320508075688772},"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.4142135623730951},"25":{"tf":1.0},"26":{"tf":2.23606797749979},"27":{"tf":1.4142135623730951}},"i":{"df":14,"docs":{"105":{"tf":1.0},"15":{"tf":2.8284271247461903},"16":{"tf":1.0},"17":{"tf":3.1622776601683795},"18":{"tf":4.358898943540674},"20":{"tf":2.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"24":{"tf":1.0},"25":{"tf":1.7320508075688772},"26":{"tf":1.0},"27":{"tf":1.7320508075688772},"92":{"tf":1.0},"97":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":2,"docs":{"17":{"tf":1.0},"18":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"s":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"0":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"10":{"tf":1.0}}}}}}}},"i":{"a":{"df":5,"docs":{"15":{"tf":2.0},"19":{"tf":1.0},"34":{"tf":1.4142135623730951},"78":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"df":8,"docs":{"114":{"tf":1.0},"115":{"tf":1.7320508075688772},"32":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"5":{"tf":1.0},"54":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"15":{"tf":1.7320508075688772},"18":{"tf":2.23606797749979},"20":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"18":{"tf":2.0}}}}},"df":0,"docs":{}},"df":2,"docs":{"24":{"tf":1.0},"26":{"tf":1.0}}}}},"df":0,"docs":{}},"df":7,"docs":{"15":{"tf":1.4142135623730951},"18":{"tf":2.449489742783178},"20":{"tf":1.4142135623730951},"24":{"tf":1.7320508075688772},"25":{"tf":2.0},"26":{"tf":1.0},"27":{"tf":1.4142135623730951}}}}},"m":{"df":7,"docs":{"103":{"tf":1.0},"13":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"6":{"tf":1.4142135623730951}}}},"w":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":8,"docs":{"10":{"tf":1.0},"105":{"tf":1.0},"34":{"tf":1.0},"42":{"tf":1.4142135623730951},"63":{"tf":1.0},"73":{"tf":1.7320508075688772},"78":{"tf":1.0},"97":{"tf":1.0}}}},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"22":{"tf":1.0}}}},"y":{"df":14,"docs":{"10":{"tf":1.0},"118":{"tf":1.0},"15":{"tf":1.4142135623730951},"17":{"tf":1.0},"3":{"tf":1.0},"34":{"tf":1.4142135623730951},"38":{"tf":1.0},"4":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"85":{"tf":1.0},"9":{"tf":1.0}}}},"df":4,"docs":{"16":{"tf":1.0},"23":{"tf":1.0},"56":{"tf":2.0},"58":{"tf":2.23606797749979}},"e":{"'":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"18":{"tf":1.0}}}},"r":{"df":2,"docs":{"18":{"tf":1.4142135623730951},"86":{"tf":1.0}}},"v":{"df":1,"docs":{"18":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":4,"docs":{"17":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"6":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"58":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"23":{"tf":1.4142135623730951},"60":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":4,"docs":{"5":{"tf":1.0},"60":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":1,"docs":{"77":{"tf":2.23606797749979}}}},"t":{"[":{"0":{"df":1,"docs":{"67":{"tf":1.4142135623730951}}},"1":{"5":{"df":1,"docs":{"67":{"tf":1.4142135623730951}}},"6":{"df":1,"docs":{"67":{"tf":1.0}}},"df":1,"docs":{"67":{"tf":1.4142135623730951}}},"df":0,"docs":{},"i":{"df":1,"docs":{"67":{"tf":1.7320508075688772}}}},"df":26,"docs":{"105":{"tf":1.4142135623730951},"106":{"tf":2.0},"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":2.8284271247461903},"34":{"tf":1.0},"37":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"56":{"tf":2.6457513110645907},"57":{"tf":2.6457513110645907},"58":{"tf":3.1622776601683795},"6":{"tf":1.0},"60":{"tf":2.23606797749979},"64":{"tf":1.0},"67":{"tf":1.4142135623730951},"68":{"tf":2.0},"73":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0},"9":{"tf":1.0},"96":{"tf":1.4142135623730951},"98":{"tf":1.0},"99":{"tf":2.23606797749979}},"h":{"_":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"(":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"2":{"df":1,"docs":{"16":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.0}},"s":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"\"":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"\"":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":1,"docs":{"16":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"v":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"\"":{"df":0,"docs":{},"v":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"\"":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":1,"docs":{"16":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"116":{"tf":1.0},"37":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":8,"docs":{"15":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"58":{"tf":1.4142135623730951},"60":{"tf":1.0},"64":{"tf":1.0},"73":{"tf":1.4142135623730951},"93":{"tf":1.7320508075688772}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"23":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":5,"docs":{"106":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.0},"93":{"tf":1.7320508075688772},"96":{"tf":1.0}},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"l":{"d":{"df":8,"docs":{"105":{"tf":1.0},"13":{"tf":1.7320508075688772},"14":{"tf":1.7320508075688772},"15":{"tf":1.7320508075688772},"16":{"tf":2.0},"17":{"tf":2.0},"18":{"tf":1.7320508075688772},"19":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"1":{"df":1,"docs":{"5":{"tf":1.0}}},"2":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":6,"docs":{"13":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":2.0},"42":{"tf":1.4142135623730951},"48":{"tf":1.0},"5":{"tf":1.0}},"r":{"df":1,"docs":{"16":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":6,"docs":{"106":{"tf":1.0},"41":{"tf":1.0},"5":{"tf":1.0},"62":{"tf":1.4142135623730951},"79":{"tf":1.0},"80":{"tf":1.0}}}}}}}}},"x":{"*":{"df":0,"docs":{},"x":{"df":1,"docs":{"60":{"tf":1.0}}}},":":{":":{"df":0,"docs":{},"i":{"df":1,"docs":{"69":{"tf":1.0}}},"y":{"(":{"a":{"df":1,"docs":{"69":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":27,"docs":{"13":{"tf":2.8284271247461903},"20":{"tf":2.23606797749979},"34":{"tf":2.449489742783178},"36":{"tf":2.8284271247461903},"37":{"tf":3.1622776601683795},"41":{"tf":1.4142135623730951},"42":{"tf":1.7320508075688772},"44":{"tf":3.872983346207417},"48":{"tf":2.23606797749979},"51":{"tf":1.0},"52":{"tf":1.0},"55":{"tf":1.4142135623730951},"56":{"tf":5.196152422706632},"58":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951},"63":{"tf":1.4142135623730951},"64":{"tf":3.3166247903554},"67":{"tf":1.4142135623730951},"68":{"tf":3.3166247903554},"69":{"tf":2.6457513110645907},"70":{"tf":1.4142135623730951},"73":{"tf":2.23606797749979},"82":{"tf":1.4142135623730951},"83":{"tf":2.23606797749979},"91":{"tf":1.0},"92":{"tf":1.4142135623730951},"96":{"tf":2.449489742783178}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"44":{"tf":2.6457513110645907}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"62":{"tf":1.0}}}}},"y":{"(":{"df":0,"docs":{},"i":{"df":1,"docs":{"96":{"tf":1.0}}}},"df":15,"docs":{"13":{"tf":2.23606797749979},"20":{"tf":1.7320508075688772},"36":{"tf":2.23606797749979},"37":{"tf":2.6457513110645907},"44":{"tf":1.7320508075688772},"48":{"tf":1.7320508075688772},"55":{"tf":1.4142135623730951},"56":{"tf":4.58257569495584},"58":{"tf":2.6457513110645907},"63":{"tf":1.0},"64":{"tf":2.0},"69":{"tf":1.4142135623730951},"82":{"tf":1.4142135623730951},"83":{"tf":2.23606797749979},"96":{"tf":1.4142135623730951}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"18":{"tf":1.0}}}}}}}}}},"z":{"df":5,"docs":{"44":{"tf":1.7320508075688772},"48":{"tf":1.7320508075688772},"55":{"tf":1.4142135623730951},"56":{"tf":4.69041575982343},"58":{"tf":2.23606797749979}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":7,"docs":{"13":{"tf":1.0},"33":{"tf":1.4142135623730951},"36":{"tf":1.0},"44":{"tf":1.0},"77":{"tf":1.7320508075688772},"80":{"tf":1.0},"92":{"tf":1.0}}}}},"k":{"df":6,"docs":{"0":{"tf":1.0},"106":{"tf":2.449489742783178},"14":{"tf":1.0},"20":{"tf":1.0},"3":{"tf":1.0},"5":{"tf":1.0}},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"m":{"df":1,"docs":{"59":{"tf":1.4142135623730951}}}}},"v":{"df":0,"docs":{},"m":{"df":5,"docs":{"0":{"tf":1.0},"109":{"tf":1.0},"112":{"tf":1.0},"19":{"tf":1.0},"6":{"tf":1.0}}}}}}}},"title":{"root":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"117":{"tf":1.0}}}},"l":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"67":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"113":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"y":{"df":2,"docs":{"81":{"tf":1.0},"91":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"32":{"tf":1.0}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":2,"docs":{"42":{"tf":1.0},"48":{"tf":1.0}}}}}}}},"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"109":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"116":{"tf":1.0},"64":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"76":{"tf":1.0}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"84":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":2,"docs":{"11":{"tf":1.0},"12":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":2,"docs":{"74":{"tf":1.0},"89":{"tf":1.0}}}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"97":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"14":{"tf":1.0}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"n":{"df":3,"docs":{"52":{"tf":1.0},"73":{"tf":1.0},"86":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"21":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"114":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"37":{"tf":1.0}}}}},"df":2,"docs":{"101":{"tf":1.0},"68":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":1,"docs":{"106":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"1":{"tf":1.0},"7":{"tf":1.0}}}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"93":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"40":{"tf":1.0}}}}}}}}},"d":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":3,"docs":{"34":{"tf":1.0},"60":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"98":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"51":{"tf":1.0},"78":{"tf":1.0}}}}}}}},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"116":{"tf":1.0}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"85":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"112":{"tf":1.0}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":2,"docs":{"17":{"tf":1.0},"18":{"tf":1.0}}}}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"96":{"tf":1.0}}}}},"df":0,"docs":{},"m":{"df":1,"docs":{"108":{"tf":1.0}}}},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":3,"docs":{"105":{"tf":1.0},"19":{"tf":1.0},"72":{"tf":1.0}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"27":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":7,"docs":{"50":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"83":{"tf":1.0}}}}}}}}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":2,"docs":{"51":{"tf":1.0},"78":{"tf":1.0}}},"df":0,"docs":{}}},"x":{"df":1,"docs":{"86":{"tf":1.0}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"103":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"u":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":6,"docs":{"44":{"tf":1.0},"45":{"tf":1.0},"63":{"tf":1.0},"68":{"tf":1.0},"82":{"tf":1.0},"90":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"117":{"tf":1.0},"62":{"tf":1.0}}}}}}},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"2":{"df":1,"docs":{"111":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":5,"docs":{"13":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0}}}},"p":{"df":1,"docs":{"21":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"99":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"89":{"tf":1.0}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"3":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":5,"docs":{"49":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0}}}},"df":0,"docs":{}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":1,"docs":{"77":{"tf":1.0}}}},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"0":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"r":{"df":1,"docs":{"70":{"tf":1.0}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"26":{"tf":1.0}}}}},"l":{"a":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"47":{"tf":1.0}}}}},"df":0,"docs":{},"m":{"b":{"d":{"a":{"df":1,"docs":{"63":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"91":{"tf":1.0}}}}}}},"i":{"b":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"16":{"tf":1.0}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"2":{"tf":1.0},"8":{"tf":1.0}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"21":{"tf":1.0}}},"k":{"df":2,"docs":{"56":{"tf":1.0},"58":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"118":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"75":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"51":{"tf":1.0}}}}}},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"55":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"115":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0}}}}}},"df":0,"docs":{},"p":{"df":1,"docs":{"88":{"tf":1.0}}},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"65":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"33":{"tf":1.0}},"u":{"df":1,"docs":{"95":{"tf":1.0}}}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"102":{"tf":1.0},"57":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"30":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}},"p":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"92":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"69":{"tf":1.0}}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"23":{"tf":1.0},"30":{"tf":1.0},"59":{"tf":1.0}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":0,"docs":{},"y":{"3":{"df":1,"docs":{"110":{"tf":1.0}}},"df":0,"docs":{}}}}}},"o":{"df":0,"docs":{},"w":{"d":{"df":0,"docs":{},"r":{"df":14,"docs":{"11":{"tf":1.0},"12":{"tf":1.0},"16":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"10":{"tf":1.0},"4":{"tf":1.0}}}}}}}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"94":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"40":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"f":{"df":1,"docs":{"18":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"24":{"tf":1.0}}}}}},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"68":{"tf":1.0}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"5":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"43":{"tf":1.0}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"115":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"73":{"tf":1.0}}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"70":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":5,"docs":{"39":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"52":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"87":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"v":{"df":3,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":1,"docs":{"12":{"tf":1.0}}},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"105":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"105":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":2,"docs":{"15":{"tf":1.0},"28":{"tf":1.0}}}}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"5":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"46":{"tf":1.0},"64":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"79":{"tf":1.0}}}}}}},"u":{"b":{"df":0,"docs":{},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"38":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"31":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"74":{"tf":1.0}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"80":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":5,"docs":{"100":{"tf":1.0},"71":{"tf":1.0},"75":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"s":{"df":3,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.0}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"a":{"df":1,"docs":{"107":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"u":{"df":1,"docs":{"87":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":2,"docs":{"15":{"tf":1.0},"26":{"tf":1.0}},"i":{"df":2,"docs":{"25":{"tf":1.0},"27":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"115":{"tf":1.0},"36":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"d":{"df":5,"docs":{"13":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"41":{"tf":1.0}}}}}}},"z":{"df":0,"docs":{},"k":{"df":1,"docs":{"106":{"tf":1.0}}}}}}},"lang":"English","pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5"},"results_options":{"limit_results":30,"teaser_word_count":30},"search_options":{"bool":"OR","expand":true,"fields":{"body":{"boost":1},"breadcrumbs":{"boost":1},"title":{"boost":2}}}}); \ No newline at end of file diff --git a/searchindex.json b/searchindex.json new file mode 100644 index 0000000000..54ce39ae4e --- /dev/null +++ b/searchindex.json @@ -0,0 +1 @@ +{"doc_urls":["powdr_vm_intro.html#introduction","powdr_vm_intro.html#contributing","powdr_vm_intro.html#license","installation_vm.html#installation","installation_vm.html#prerequisites","quick_start_vm.html#quick-start","powdr_sdk_intro.html#introduction","powdr_sdk_intro.html#contributing","powdr_sdk_intro.html#license","installation_sdk.html#installation","installation_sdk.html#prerequisites","installation_sdk.html#building--powdr","installation_sdk.html#building--powdr-rs","hello_world.html#hello-world","hello_world_cli.html#hello-world-using-the-cli","hello_world_cli.html#setup--verification","powdr_crate.html#hello-world-using-powdr-as-a-library","hello_world_ethereum.html#hello-world-on-ethereum","hello_world_ethereum_aggregation.html#hello-world-on-ethereum-with-proof-aggregation","examples.html#examples","publics.html#using-publics","cli/index.html#command-line-help-for-powdr","cli/index.html#powdr","cli/index.html#powdr-pil","cli/index.html#powdr-prove","cli/index.html#powdr-verify","cli/index.html#powdr-verification-key","cli/index.html#powdr-export-verifier","cli/index.html#powdr-setup","cli/index.html#powdr-reformat","cli/index.html#powdr-optimize-pil","cli/index.html#powdr-test","asm/index.html#asm","asm/modules.html#modules","asm/declarations.html#declarations","asm/machines.html#machines","asm/machines.html#virtual-machines","asm/machines.html#constrained-machines","asm/machines.html#submachines","asm/registers.html#registers","asm/registers.html#program-counter","asm/registers.html#write-registers","asm/registers.html#assignment-registers","asm/registers.html#read-only-registers","asm/functions.html#functions","asm/functions.html#function-inputs-and-outputs","asm/functions.html#statements","asm/functions.html#labels","asm/functions.html#assignments","asm/functions.html#instructions","asm/expressions.html#expressions","asm/expressions.html#field-element-literals","asm/expressions.html#registers-and-columns","asm/expressions.html#instructions","asm/instructions.html#instructions","asm/instructions.html#local-instructions","asm/instructions.html#instructions-with-links","asm/operations.html#operations","asm/links.html#links","pil/index.html#pil","pil/declarations.html#declarations","pil/expressions.html#expressions","pil/expressions.html#generic-expressions","pil/expressions.html#lambda-functions","pil/expressions.html#statement-blocks","pil/expressions.html#match-expressions","pil/expressions.html#if-expressions","pil/expressions.html#algebraic-expressions","pil/expressions.html#constr-and-query-functions","pil/patterns.html#patterns","pil/patterns.html#ir-refutability","pil/types.html#types","pil/types.html#example","pil/types.html#declaring-and-referencing-columns","pil/types.html#built-in-traits","pil/types.html#list-of-types","pil/types.html#bool","pil/types.html#integer","pil/types.html#field-element","pil/types.html#string","pil/types.html#tuple","pil/types.html#array","pil/types.html#function","pil/types.html#expression","pil/types.html#bottom-type","pil/types.html#enum-types","pil/fixed_columns.html#fixed-columns","pil/fixed_columns.html#values-with-repetitions","pil/fixed_columns.html#mappings","pil/builtins.html#built-ins","pil/builtins.html#functions","pil/builtins.html#array-length","pil/builtins.html#panic","pil/builtins.html#conversions","pil/builtins.html#printing","pil/builtins.html#modulus","pil/builtins.html#evaluate","pil/builtins.html#challenges","pil/builtins.html#degree","pil/builtins.html#hints","pil/builtins.html#types","pil/builtins.html#constr","pil/builtins.html#operators","frontends/index.html#frontends","frontends/riscv.html#riscv","frontends/riscv.html#how-to-run-the-rust-riscv-example","frontends/zk-continuations.html#riscv-and-zk-continuations","frontends/valida.html#valida","frontends/evm.html#evm","backends/index.html#backends","backends/plonky3.html#plonky3","backends/halo2.html#halo2","backends/estark.html#estark","architecture/index.html#architecture","architecture/compiler.html#compiler","architecture/compiler.html#virtual-machine-reduction","architecture/compiler.html#block-enforcement","architecture/compiler.html#air-generation","architecture/linker.html#linker"],"index":{"documentStore":{"docInfo":{"0":{"body":27,"breadcrumbs":2,"title":1},"1":{"body":15,"breadcrumbs":2,"title":1},"10":{"body":52,"breadcrumbs":2,"title":1},"100":{"body":15,"breadcrumbs":4,"title":1},"101":{"body":54,"breadcrumbs":4,"title":1},"102":{"body":95,"breadcrumbs":4,"title":1},"103":{"body":13,"breadcrumbs":2,"title":1},"104":{"body":5,"breadcrumbs":3,"title":1},"105":{"body":138,"breadcrumbs":6,"title":4},"106":{"body":421,"breadcrumbs":7,"title":3},"107":{"body":11,"breadcrumbs":3,"title":1},"108":{"body":10,"breadcrumbs":3,"title":1},"109":{"body":13,"breadcrumbs":2,"title":1},"11":{"body":76,"breadcrumbs":3,"title":2},"110":{"body":9,"breadcrumbs":3,"title":1},"111":{"body":7,"breadcrumbs":3,"title":1},"112":{"body":12,"breadcrumbs":3,"title":1},"113":{"body":22,"breadcrumbs":2,"title":1},"114":{"body":12,"breadcrumbs":3,"title":1},"115":{"body":28,"breadcrumbs":5,"title":3},"116":{"body":13,"breadcrumbs":4,"title":2},"117":{"body":37,"breadcrumbs":4,"title":2},"118":{"body":66,"breadcrumbs":3,"title":1},"12":{"body":35,"breadcrumbs":4,"title":3},"13":{"body":64,"breadcrumbs":4,"title":2},"14":{"body":84,"breadcrumbs":7,"title":4},"15":{"body":286,"breadcrumbs":5,"title":2},"16":{"body":173,"breadcrumbs":8,"title":5},"17":{"body":165,"breadcrumbs":7,"title":3},"18":{"body":407,"breadcrumbs":11,"title":5},"19":{"body":39,"breadcrumbs":2,"title":1},"2":{"body":7,"breadcrumbs":2,"title":1},"20":{"body":184,"breadcrumbs":4,"title":2},"21":{"body":32,"breadcrumbs":5,"title":4},"22":{"body":87,"breadcrumbs":2,"title":1},"23":{"body":220,"breadcrumbs":3,"title":2},"24":{"body":106,"breadcrumbs":3,"title":2},"25":{"body":101,"breadcrumbs":3,"title":2},"26":{"body":93,"breadcrumbs":4,"title":3},"27":{"body":91,"breadcrumbs":4,"title":3},"28":{"body":56,"breadcrumbs":3,"title":2},"29":{"body":13,"breadcrumbs":3,"title":2},"3":{"body":24,"breadcrumbs":2,"title":1},"30":{"body":30,"breadcrumbs":4,"title":3},"31":{"body":42,"breadcrumbs":3,"title":2},"32":{"body":16,"breadcrumbs":2,"title":1},"33":{"body":168,"breadcrumbs":3,"title":1},"34":{"body":161,"breadcrumbs":3,"title":1},"35":{"body":11,"breadcrumbs":3,"title":1},"36":{"body":76,"breadcrumbs":4,"title":2},"37":{"body":145,"breadcrumbs":4,"title":2},"38":{"body":46,"breadcrumbs":3,"title":1},"39":{"body":8,"breadcrumbs":3,"title":1},"4":{"body":12,"breadcrumbs":2,"title":1},"40":{"body":40,"breadcrumbs":4,"title":2},"41":{"body":29,"breadcrumbs":4,"title":2},"42":{"body":59,"breadcrumbs":4,"title":2},"43":{"body":26,"breadcrumbs":4,"title":2},"44":{"body":157,"breadcrumbs":3,"title":1},"45":{"body":4,"breadcrumbs":5,"title":3},"46":{"body":0,"breadcrumbs":3,"title":1},"47":{"body":7,"breadcrumbs":3,"title":1},"48":{"body":45,"breadcrumbs":3,"title":1},"49":{"body":7,"breadcrumbs":3,"title":1},"5":{"body":185,"breadcrumbs":4,"title":2},"50":{"body":0,"breadcrumbs":3,"title":1},"51":{"body":10,"breadcrumbs":5,"title":3},"52":{"body":10,"breadcrumbs":4,"title":2},"53":{"body":7,"breadcrumbs":3,"title":1},"54":{"body":35,"breadcrumbs":3,"title":1},"55":{"body":24,"breadcrumbs":4,"title":2},"56":{"body":408,"breadcrumbs":4,"title":2},"57":{"body":142,"breadcrumbs":3,"title":1},"58":{"body":191,"breadcrumbs":3,"title":1},"59":{"body":21,"breadcrumbs":2,"title":1},"6":{"body":45,"breadcrumbs":2,"title":1},"60":{"body":249,"breadcrumbs":3,"title":1},"61":{"body":60,"breadcrumbs":3,"title":1},"62":{"body":96,"breadcrumbs":4,"title":2},"63":{"body":46,"breadcrumbs":4,"title":2},"64":{"body":135,"breadcrumbs":4,"title":2},"65":{"body":62,"breadcrumbs":4,"title":2},"66":{"body":24,"breadcrumbs":3,"title":1},"67":{"body":211,"breadcrumbs":4,"title":2},"68":{"body":144,"breadcrumbs":5,"title":3},"69":{"body":202,"breadcrumbs":3,"title":1},"7":{"body":15,"breadcrumbs":2,"title":1},"70":{"body":85,"breadcrumbs":4,"title":2},"71":{"body":111,"breadcrumbs":3,"title":1},"72":{"body":44,"breadcrumbs":3,"title":1},"73":{"body":176,"breadcrumbs":5,"title":3},"74":{"body":104,"breadcrumbs":4,"title":2},"75":{"body":0,"breadcrumbs":4,"title":2},"76":{"body":28,"breadcrumbs":3,"title":1},"77":{"body":150,"breadcrumbs":3,"title":1},"78":{"body":121,"breadcrumbs":4,"title":2},"79":{"body":20,"breadcrumbs":3,"title":1},"8":{"body":7,"breadcrumbs":2,"title":1},"80":{"body":54,"breadcrumbs":3,"title":1},"81":{"body":91,"breadcrumbs":3,"title":1},"82":{"body":90,"breadcrumbs":3,"title":1},"83":{"body":136,"breadcrumbs":3,"title":1},"84":{"body":24,"breadcrumbs":4,"title":2},"85":{"body":66,"breadcrumbs":4,"title":2},"86":{"body":30,"breadcrumbs":5,"title":2},"87":{"body":62,"breadcrumbs":5,"title":2},"88":{"body":22,"breadcrumbs":4,"title":1},"89":{"body":0,"breadcrumbs":5,"title":2},"9":{"body":33,"breadcrumbs":2,"title":1},"90":{"body":13,"breadcrumbs":4,"title":1},"91":{"body":17,"breadcrumbs":5,"title":2},"92":{"body":43,"breadcrumbs":4,"title":1},"93":{"body":76,"breadcrumbs":4,"title":1},"94":{"body":32,"breadcrumbs":4,"title":1},"95":{"body":19,"breadcrumbs":4,"title":1},"96":{"body":60,"breadcrumbs":4,"title":1},"97":{"body":26,"breadcrumbs":4,"title":1},"98":{"body":25,"breadcrumbs":4,"title":1},"99":{"body":38,"breadcrumbs":4,"title":1}},"docs":{"0":{"body":"powdrVM is a versatile zkVM built on the powdr stack, supporting std Rust, multiple proof systems, and zk-continuations for unbounded execution. Designed for flexibility, powdrVM enables efficient proof generation for complex applications with minimal setup.","breadcrumbs":"Introduction » Introduction","id":"0","title":"Introduction"},"1":{"body":"powdrVM is free and open source. You can find the source code on GitHub . Issues and feature requests can be posted on the GitHub issue tracker .","breadcrumbs":"Introduction » Contributing","id":"1","title":"Contributing"},"10":{"body":"You will need the Rust compiler and Cargo, the Rust package manager. The easiest way to install both is with rustup.rs . On Windows, you will also need a recent version of Visual Studio , installed with the \"Desktop Development With C++\" Workloads option. If you want to enable the estark-polygon feature, you also need the following runtime dependencies: gcc nlohmann-json3-dev You will also need the following build time dependencies: make pkg-config libpqxx-dev (Ubuntu) | libpqxx (Arch Linux) nasm","breadcrumbs":"Installation » Prerequisites","id":"10","title":"Prerequisites"},"100":{"body":"There are some types that are not proper built-in types (in the sense that they are not treated specially in the type system), but they are defined in the standard library and are referenced by built-in functions.","breadcrumbs":"pil » Built-in Functions » Types","id":"100","title":"Types"},"101":{"body":"The type Constr or more specifically, std::prelude::Constr is the type of a constraint. Expressions at statement level are required to evaluate either to Constr or Constr[]. It is defined as follows: enum Constr { /// A polynomial identity. Identity(expr, expr), /// A lookup constraint with selectors. Lookup((Option, Option), (expr, expr)[]), /// A permutation constraint with selectors. Permutation((Option, Option), (expr, expr)[]), /// A connection constraint (copy constraint). Connection((expr, expr)[])\n} The operator = can be applied on two expr values and results in a Constr::Identity. The type implements no traits and allows no operators.","breadcrumbs":"pil » Built-in Functions » Constr","id":"101","title":"Constr"},"102":{"body":"The following operators are supported by powdr-pil with their respective signatures. let +: T, T -> T\nlet -: T, T -> T\nlet -: T -> T let *: T, T -> T\nlet /: int, int -> int\nlet %: int, int -> int\nlet **: T, int -> T let <<: int, int -> int\nlet >>: int, int -> int\nlet &: int, int -> int\nlet |: int, int -> int\nlet ^: int, int -> int let <: T, T -> bool\nlet <=: T, T -> bool\nlet >: T, T -> bool\nlet >=: T, T -> bool let ==: T, T -> bool\nlet !=: T, T -> bool let =: expr, expr -> Constr\nlet ': expr -> expr let ||: bool, bool -> bool\nlet &&: bool, bool -> bool\nlet !: bool -> bool","breadcrumbs":"pil » Built-in Functions » Operators","id":"102","title":"Operators"},"103":{"body":"While any frontend VM can be implemented in powdr-asm, powdr comes with several frontends for popular instruction set architectures.","breadcrumbs":"Frontends » Frontends","id":"103","title":"Frontends"},"104":{"body":"A RISCV frontend for powdr is already available.","breadcrumbs":"Frontends » RISCV » RISCV","id":"104","title":"RISCV"},"105":{"body":"# Install the riscv target for the rust compiler\nrustup target add riscv32imac-unknown-none-elf\n# Run the powdr-rs compiler. It will generate files in ./output/\npowdr-rs compile riscv/tests/riscv_data/sum -o output\n# Run powdr to compile powdr-asm to powdr-PIL and generate the witness\n# -i specifies the prover witness input (see below)\npowdr pil output/sum.asm -o output -f -i 10,2,4,6 The example Rust code verifies that a supplied list of integers sums up to a specified value. #![no_main]\n#![no_std] extern crate alloc;\nuse alloc::vec::Vec; use powdr_riscv_runtime::io::read_u32; #[no_mangle]\npub fn main() { // This is the sum claimed by the prover. let proposed_sum = read_u32(0); // The number of integers we want to sum. let len = read_u32(1) as usize; // Read the numbers from the prover and store them // in a vector. let data: Vec<_> = (2..(len + 2)).map(|idx| read_u32(idx as u32)).collect(); // Compute the sum. let sum: u32 = data.iter().sum(); // Check that our sum matches the prover's. assert_eq!(sum, proposed_sum);\n} The function read_u32 reads a number from the list supplied with -i. This is just a first mechanism to provide access to the outside world. The plan is to be able to call arbitrary user-defined ffi functions that will translate to prover queries, and can then ask for e.g. the value of a storage slot at a certain address or the root hash of a Merkle tree.","breadcrumbs":"Frontends » RISCV » How to run the Rust-RISCV example","id":"105","title":"How to run the Rust-RISCV example"},"106":{"body":"ZK-continuations can be used to make proofs for unbounded execution traces of Rust programs, where the trace is split into many different chunks. A proof is computed for each chunk, and all proofs can be combined with recursion/aggregation until a single proof remains. For the details of how memory is handled in the ZK-continuations case please see this . powdr-rs has experimental support to ZK-continuations, which can be used as follows. Let's use as example test many chunks from the riscv crate: #![no_main]\n#![no_std] extern crate alloc;\nextern crate powdr_riscv_runtime;\nuse alloc::vec::Vec; #[no_mangle]\npub fn main() { let mut foo = Vec::new(); foo.push(1); for _ in 0..100 { foo.push(foo.iter().sum()); } // Compute some fibonacci numbers // -> Does not access memory but also does not get optimized out... let mut a = 1; let mut b = 1; for _ in 0..150000 { let tmp = a + b; a = b; b = tmp; } // Don't optimize me away :/ assert!(a > 0);\n} First we need to compile the Rust code to powdr-asm: powdr-rs compile riscv/tests/riscv_data/many_chunks Now we can use powdr's RISCV executor to estimate how many cycles are needed: powdr-rs execute many_chunks.asm ...\nExecution trace length: 750329 By default, powdr-RISCV uses chunks of length 2^18. That means we will need at least 3 chunks. For the continuations case, the compiled assembly code looks different because of the external memory commitments, so we need to recompile using the --continuations flag: powdr-rs compile riscv/tests/riscv_data/many_chunks --continuations We can now execute the program with continuations enabled: powdr-rs -- execute many_chunks.asm --continuations The output now is longer: Running chunk 0...\nBuilding bootloader inputs for chunk 0...\n26 unique memory accesses over 2 accessed pages: {31, 32}\nEstimating the shutdown routine to use 1362 rows.\nBootloader inputs length: 1285\nSimulating chunk execution...\nInitial memory root hash: 44cd91c12033ad4c6a6b19793b73f1a66d99a0e0bf63494c12ceb1f451ec9452\nFinal memory root hash: e6a6fd63d864c734d6a4df4988f733738790262af9c7b014a1c036679baf1125\nChunk trace length: 260782\nValidating chunk...\nBootloader used 3134 rows. => 257648 / 262144 (98%) of rows are used for the actual computation!\nProved 257647 rows. Running chunk 1...\nBuilding bootloader inputs for chunk 1...\n0 unique memory accesses over 0 accessed pages: {}\nEstimating the shutdown routine to use 42 rows.\nBootloader inputs length: 83\nSimulating chunk execution...\nInitial memory root hash: e6a6fd63d864c734d6a4df4988f733738790262af9c7b014a1c036679baf1125\nFinal memory root hash: e6a6fd63d864c734d6a4df4988f733738790262af9c7b014a1c036679baf1125\nChunk trace length: 262102\nValidating chunk...\nBootloader used 62 rows. => 262040 / 262144 (99%) of rows are used for the actual computation!\nProved 262039 rows. Running chunk 2...\nBuilding bootloader inputs for chunk 2...\n2 unique memory accesses over 1 accessed pages: {31}\nEstimating the shutdown routine to use 702 rows.\nBootloader inputs length: 684\nSimulating chunk execution...\nInitial memory root hash: e6a6fd63d864c734d6a4df4988f733738790262af9c7b014a1c036679baf1125\nFinal memory root hash: e6a6fd63d864c734d6a4df4988f733738790262af9c7b014a1c036679baf1125\nChunk trace length: 232057\nValidating chunk...\nBootloader used 1610 rows. => 259832 / 262144 (99%) of rows are used for the actual computation!\nDone! The step above is informational, but for the proofs we also need the full witness: powdr-rs execute many_chunks.asm --witness The witnesses are written in ./chunk_0/commits.bin, ./chunk_1/commits.bin and ./chunk_2/commits.bin. Now that we have the witnesses for all chunks we can use powdr (instead of powdr-rs) to compute proofs for each chunk: powdr prove many_chunks.asm -d chunk_0 --backend estark-dump\npowdr prove many_chunks.asm -d chunk_1 --backend estark-dump\npowdr prove many_chunks.asm -d chunk_2 --backend estark-dump These proofs are mock proofs for the sake of the example, but any backend should work here. After generating real proofs, each specific proof system can be used for the recursion/aggregation parts. A follow-up tutorial on that is coming soon.","breadcrumbs":"Frontends » RISCV » zk-Continuations » RISCV and ZK-Continuations","id":"106","title":"RISCV and ZK-Continuations"},"107":{"body":"A Valida front end for powdr is under development. If you are interested, feel free to reach out !","breadcrumbs":"Frontends » Valida » Valida","id":"107","title":"Valida"},"108":{"body":"An EVM frontend for powdr is under development. If you are interested, feel free to reach out !","breadcrumbs":"Frontends » EVM » EVM","id":"108","title":"EVM"},"109":{"body":"powdr aims to have full flexibility when it comes to generating proofs and comes with a few built-in backends to get started with zkVMs.","breadcrumbs":"Backends » Backends","id":"109","title":"Backends"},"11":{"body":"Using a single Cargo command, enabling the Halo2 and Plonky3 backends: cargo install --git https://github.com/powdr-labs/powdr --features halo2,plonky3 powdr-cli With SIMD support for the provers that support it: RUSTFLAGS='-C target-cpu=native' cargo install --git https://github.com/powdr-labs/powdr --features halo2,plonky3,plonky3-simd powdr-cli Or, by manually building from a local copy of the powdr repository : # clone the repository\ngit clone https://github.com/powdr-labs/powdr.git\ncd powdr\n# install powdr-cli\ncargo install --features halo2,plonky3 --path ./cli\n# install powdr-cli with SIMD support (only for the crates that support it)\nRUSTFLAGS='-C target-cpu=native' cargo install --features halo2,plonky3,plonky3-simd --path ./cli","breadcrumbs":"Installation » Building powdr","id":"11","title":"Building powdr"},"110":{"body":"powdr partially supports plonky3 with the Goldilocks, BabyBear, KoalaBear, and Mersenne31 fields.","breadcrumbs":"Backends » plonky3 » Plonky3","id":"110","title":"Plonky3"},"111":{"body":"powdr supports the PSE fork of halo2 with the bn254 field.","breadcrumbs":"Backends » Halo2 » Halo2","id":"111","title":"Halo2"},"112":{"body":"powdr supports the eSTARK proof system with the Goldilocks field, implemented by the starky library from eigen-zkvm .","breadcrumbs":"Backends » eSTARK » eSTARK","id":"112","title":"eSTARK"},"113":{"body":"powdr applies a number of steps in order to reduce a powdr-asm program into PIL. We provide a high level overview of these steps. ┌────────────┐ ┌──────────┐ │ │ │ │ powdr-asm │ │ AIR graph │ │ PIL\n───────────►│ compiler ├───────────┤ linker ├──────► │ │ │ │ │ │ │ │ └────────────┘ └──────────┘","breadcrumbs":"Architecture » Architecture","id":"113","title":"Architecture"},"114":{"body":"In this section, we explain how the powdr compiler reduces a program made of virtual and constrained machines to a set of AIRs.","breadcrumbs":"Architecture » Compiler » Compiler","id":"114","title":"Compiler"},"115":{"body":"The first step is to reduce virtual machines to constrained machines. This step is run on all machines and does not affect constrained machines. As a result of this step, for each machine: Local instructions are reduced to constraints External instructions are reduced to links Functions are reduced to operations","breadcrumbs":"Architecture » Compiler » Virtual machine reduction","id":"115","title":"Virtual machine reduction"},"116":{"body":"Block enforcement applies on constrained machines. It makes sure that the operation_id is constant within each machine block.","breadcrumbs":"Architecture » Compiler » Block enforcement","id":"116","title":"Block enforcement"},"117":{"body":"At this point, all machines contain only: an optional degree range constraints links to other machines operations Let's define AIR as a data structure with only these elements. Starting from the main machine's type, we create a tree of AIR objects by traversing its submachines, recursively instantiating each machine as an AIR. Let's define the AIR tree as the resulting tree.","breadcrumbs":"Architecture » Compiler » AIR generation","id":"117","title":"AIR generation"},"118":{"body":"A linker is used to turn an AIR tree into a single PIL file. The linking process operates in the following way: Create an empty PIL file Start from the main AIR. Let main_degree_range be its degree. For each AIR Create a new namespace in the PIL file 2a. If degrees-mode is vadcop, set the namespace degree to that of the AIR 2b. If degrees-mode is monolithic, set the namespace degree to main_degree_range Add the constraints to the namespace Turn the links into lookups and permutations and add them to the namespace The result is a monolithic AIR where: each machine instance is a namespace each namespace defines its own degree range","breadcrumbs":"Architecture » Linker » Linker","id":"118","title":"Linker"},"12":{"body":"Using a single Cargo command: cargo install --git https://github.com/powdr-labs/powdr powdr-rs-cli Or, by manually building from a local copy of the powdr repository : # clone the repository\ngit clone https://github.com/powdr-labs/powdr.git\ncd powdr\n# install powdr-rs-cli\ncargo install --path ./cli-rs","breadcrumbs":"Installation » Building powdr-rs","id":"12","title":"Building powdr-rs"},"13":{"body":"Let's write a minimal VM and generate proofs! machine HelloWorld with degree: 8 { reg pc[@pc]; reg X[<=]; reg Y[<=]; reg A; instr incr X -> Y { Y = X + 1 } instr decr X -> Y { Y = X - 1 } instr assert_zero X { X = 0 } function main { // assign the first prover input to A A <=X= ${ std::prelude::Query::Input(0, 1) }; // increment A A <== incr(A); // decrement A A <== decr(A); // assert that A is zero assert_zero A; return; }\n} Let's go through different possible usages of powdr, starting with using the powdr CLI.","breadcrumbs":"Hello World » Hello World","id":"13","title":"Hello World"},"14":{"body":"Let's generate a proof of execution for the valid prover input 0 (since 0 + 1 - 1 == 0) powdr pil test_data/asm/book/hello_world.asm --field bn254 --inputs 1 --prove-with halo2 We observe that several artifacts are created in the current directory: hello_world.pil: the compiled PIL file. hello_world_opt.pil: the optimized PIL file. hello_world_constants.bin: the computed fixed columns which only have to be computed once per PIL file. hello_world_commits.bin: the computed witness which needs to be computed for each proof. hello_world_proof.bin: the ZK proof! Note that the output directory can be specified with option -o|--output, and . is used by default. Now let's try for the invalid input 1: powdr pil test_data/asm/book/hello_world.asm --field bn254 --inputs 2 --prove-with halo2 In this case witness generation fails, and no proof is created.","breadcrumbs":"Hello World » in the CLI » Hello World using the CLI","id":"14","title":"Hello World using the CLI"},"15":{"body":"The example above omits some important steps in proof generation: Setup and Verification key generation. Some proof systems such as Halo2 , require a Setup to be performed before the proof. Such Setup can be specific to the program or universal, where its artifact is a binary usually called parameters or params. STARKs do not require a Setup. Another step required before the proof is computed is key generation. A proving key and a verification key are generated taking into account the constraints and potentially Setup parameters. The proving key is used by the prover to generate the proof, and the verification key is used by the verifier to verify such a proof. A single verification key can be used to verify any number of different proofs for a given program. Therefore, when computing a proof, it is important that the Setup parameters and the verification key are available as artifacts. Below we reproduce the same proof as in the example above, keeping the artifacts needed for verification: First we run the Setup, where the number given must match the degree of our source file (degree 8). The command below generates file params.bin. powdr setup 8 --backend halo2 --field bn254 We can now compute the verification key, output in vkey.bin: powdr verification-key test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --params \"params.bin\" The command above can read previously generated constants from the directory specified via -d|--dir, where . is used by default. If the constants are not present it computes them before generating the verification key. The next command compiles and optimizes the given source, generating the file hello_world_opt.pil. It also computes both the fixed data and the witness needed for the proof, stored respectively in hello_world_constants.bin and hello_world_commits.bin. powdr pil test_data/asm/book/hello_world.asm --field bn254 --force --inputs 0 We can now generate the proof: powdr prove test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --params \"params.bin\" --vkey \"vkey.bin\" The proof can be verified by anyone via: powdr verify test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --vkey \"vkey.bin\" --params \"params.bin\" --proof \"hello_world_proof.bin\" Note that CLI proof verification works analogously for eSTARK, without the setup step and using the Goldilocks field instead of Bn254. Another aspect that was omitted in this example is the fact that this proof uses a Poseidon transcript and cannot be verified in a cheap way on Ethereum, even though we can verify it efficiently via powdr. There are two ways to enable verification on Ethereum: Use a different transcript when generating this proof. See section Hello World on Ethereum for the same example targeting EVM verification. Use proof aggregation to compress the proof using a circuit that can be verified on Ethereum. See section Hello World on Ethereum via proof aggregation to learn how to do that.","breadcrumbs":"Hello World » in the CLI » Setup & Verification","id":"15","title":"Setup & Verification"},"16":{"body":"Besides the CLI, powdr can also be used as a Rust library. The powdr crate exposes internal crates and data structures needed to compile code, generate witnesses, and compute proofs. Add powdr to your crate's dependencies: [dependencies]\npowdr = { git = \"https://github.com/powdr-labs/powdr\", branch = \"main\" } The following Rust code has the same workflow as our previous \"Hello World\" example. The full project can be found here , and as an example in the powdr crate. To run the example in the powdr repository , run: cargo run --example powdr_crate_usage You can also enable logs to know what is happening internally: RUST_LOG=info cargo run --example powdr_crate_usage use powdr_test::halo2_pipeline; fn main() { env_logger::init(); halo2_pipeline( \"test_data/asm/book/hello_world.asm\", vec![0.into()], vec![], 8, );\n} use powdr::backend::BackendType;\nuse powdr::number::buffered_write_file;\nuse powdr::Bn254Field;\nuse powdr::Pipeline; use std::path::Path; pub fn halo2_pipeline( pil: &str, prover_inputs: Vec, publics: Vec, setup_size: u64,\n) { // Straightforward case let _proof = Pipeline::::default() .from_file(pil.into()) .with_prover_inputs(prover_inputs.clone()) .with_backend(BackendType::Halo2, None) .compute_proof() .unwrap(); // Step-by-step case // First we create the universal setup of size 8 buffered_write_file(Path::new(\"params.bin\"), |writer| { BackendType::Halo2 .factory::() .generate_setup(setup_size, writer) .unwrap() }) .unwrap(); // Configure a pipeline let mut pipeline = Pipeline::::default() .from_file(pil.into()) .with_prover_inputs(prover_inputs) .with_backend(BackendType::Halo2, None) .with_setup_file(Some(\"params.bin\".into())); // Create the verification key buffered_write_file(Path::new(\"vkey.bin\"), |w| { pipeline.export_verification_key(w).unwrap() }) .unwrap(); // Add the verification key to a fresh pipeline and create a proof let mut pipeline_fresh = pipeline.clone().with_vkey_file(Some(\"vkey.bin\".into())); let proof = pipeline_fresh.compute_proof().unwrap(); // Create yet another fresh pipeline only for proof verification let mut pipeline = pipeline .with_backend(BackendType::Halo2, None) .with_setup_file(Some(\"params.bin\".into())) .with_vkey_file(Some(\"vkey.bin\".into())); // Verify a proof created by a different Pipeline pipeline.verify(proof, &[publics]).unwrap();\n}","breadcrumbs":"Hello World » as a library » Hello World using powdr as a library","id":"16","title":"Hello World using powdr as a library"},"17":{"body":"This example is a variation of the previous Hello World , targeting verification on Ethereum. In this example we will cover how to generate proofs directly using a Keccak transcript instead of the Poseidon transcript of the previous example, which will enable us to verify proofs onchain. There are almost no differences from the CLI perspective. Since the following command creates a proof, a Solidity verifier, and verifies the proof on the EVM, we need to have solc available in the system. One easy way to install it is by using svm . powdr pil test_data/asm/book/hello_world.asm --field bn254 --inputs 0 --prove-with halo2 --backend-options \"snark_single\" -f --params params.bin The extra parameter --backend-options snark_single tells powdr to produce a single SNARK that uses Keccak. The option -f forces overwriting the compiled files that have been generated before, which is useful if you are running the examples in the same directory. When the proof is generated, it is verified on a simulated EVM transaction as well! Verifying SNARK in the EVM... We can observe again that a proof was created at hello_world_proof.bin. Now we can generate a Solidity verifier, using the same setup (params) as the previous example: powdr export-verifier test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --backend-options \"snark_single\" --params params.bin A Solidity file verifier.sol is generated. You can verify the same proof that we just generated by passing it to the contract together with the public inputs (which we have not used so far). Note that the more complex your VM is, the larger the verifier contract will be. In some cases, it might exceed Ethereum's contract size limit. You can mitigate that by using proof recursion on proofs that use Poseidon transcripts. See the next section for details .","breadcrumbs":"Hello World » verified on Ethereum » Hello World on Ethereum","id":"17","title":"Hello World on Ethereum"},"18":{"body":"As noted in the previous section, complex VMs can lead to large Solidity verifiers that exceed the contract size limit on Ethereum. One solution to that problem is to create proofs using the Poseidon transcript, as we did in the first example , and then use proof recursion to create a proof that we know we will be able to verify on Ethereum. A recursive SNARK works by generating a proof for a circuit that verifies another proof. The circuit we are using here to prove our initial proof recursively is PSE's snark-verifier . This circuit is large enough to be able to prove complex programs that were proven initial with the Poseidon transcript, like our first example. Because of that our aggregation setup params and verification key are going to be larger than before and take longer to compute. The good news are that (i) we can use a pre-computed setup from a previous ceremony, and (ii) the verification key only has to be computed once per program. First, we need a setup of \"size\" 2^22. This is the maximum execution trace length of the recursion circuit. You can generate it using the command line below, or download a pre-computed one here . This will take a couple minutes if you decide to compute it yourself: powdr setup 4194304 --backend halo2 --field bn254 We can re-use the new large params.bin for both initial and recursive proofs. Let's start by re-computing our Poseidon proof like in the first example , but using our new setup file: powdr pil test_data/asm/book/hello_world.asm --field bn254 --inputs 0 --prove-with halo2 --backend-options \"poseidon\" -f --params params.bin This generates the initial proof hello_world_proof.bin. We'll also need a verification key: powdr verification-key test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --backend-options \"poseidon\" --params params.bin Let's verify the proof with our fresh verification key to make sure we're on the right track: powdr verify test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --backend-options \"poseidon\" --params params.bin --vkey vkey.bin --proof hello_world_proof.bin In order to avoid confusion between the application's artifacts that we've just generated and the recursion one we're going to generate later, let's rename them: mv vkey.bin vkey_app.bin\nmv hello_world_proof.bin hello_world_proof_app.bin We can now generate a verification key for the Halo2 circuit that verifies our proofs recursively. This might take up to a minute. powdr verification-key test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --backend-options \"snark_aggr\" --params params.bin --vkey-app vkey_app.bin Note that this verification key can only be used to verify recursive proofs that verify other proofs using the application's key vkey_app.bin. We can now generate the recursive proof (this typically takes a few minutes and uses around 28gb RAM): powdr prove test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --backend-options \"snark_aggr\" --params params.bin --vkey vkey.bin --vkey-app vkey_app.bin --proof hello_world_proof_app.bin We have a proof! Note that it contains two fields, proof and publics. The proof object contains the binary encoding of the proof points, and the publics object contains the public accumulator limbs that we need in order to verify the recursive proof. We can now verify the proof, using the publics object as input (your numbers will be different): powdr verify test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --backend-options \"snark_aggr\" --params params.bin --vkey vkey.bin --proof hello_world_proof_aggr.bin --publics \"269487626280642378794,9378970522278219882,62304027188881225691,811176493438944,234778270138968319485,3212529982775999134,171155758373806079356,207910400337448,188563849779606300850,155626297629081952942,194348356185923309508,433061951018270,34598221006207900280,283775241405787955338,79508596887913496910,354189825580534\" Since the goal of the recursive proof was to be able to verify it on Ethereum, let's do that! powdr export-verifier test_data/asm/book/hello_world.asm --field bn254 --backend halo2 --backend-options \"snark_aggr\" --params params.bin --vkey vkey.bin A Solidity verifier is created in verifier.sol. The contract expects an array of the accumulators' limbs followed by a tightly packed proof, where each accumulator limb uses 32 bytes, and there is no function signature. Note that this verifier can be used to verify any recursive proof that verifies exactly one Poseidon proof of the given circuit.","breadcrumbs":"Hello World » verified on Ethereum with proof aggregation » Hello World on Ethereum with proof aggregation","id":"18","title":"Hello World on Ethereum with proof aggregation"},"19":{"body":"Besides the Hello World examples, you are encouraged to check out these more complex and real-world use cases: Ethereum state tests via powdr-RISCV + revm Brainfuck VM in 3 different implementations (powdr-asm interpreter, powdr-asm ISA, Rust interpreter + powdr-RISCV) Machine Learning zkVM Compiler","breadcrumbs":"Examples » Examples","id":"19","title":"Examples"},"2":{"body":"The powdr source and documentation are released under the MIT License .","breadcrumbs":"Introduction » License","id":"2","title":"License"},"20":{"body":"Public values are a small but important part of verifying ZK proofs. Often, the verifier is interested in inputs and/or outputs to a public function. In the toy example below, the prover can show that they know the square root of a public value that is published with the proof. You can also run this example directly in the powdr repository : cargo run --example sqrt_with_public You can also enable logs to know what is happening internally: RUST_LOG=info cargo run --example sqrt_with_public machine Square with degree: 8 { reg pc[@pc]; reg X[<=]; reg Y[<=]; reg A; // Expose the register value of A in the last time step public N = A(7); instr square X -> Y { Y = X * X } function main { A <=X= ${ std::prelude::Query::Input(0, 1) }; A <== square(A); }\n} This example uses a small VM with jump and a square instructions. The program reads the private input from the prover, squares it, and enters an infinite loop to ensure that all the remaining rows are filled with the result of A^2. Since the length of our execution trace is fixed and equals 8, we can tag the 8-th row of A (A[7]) as the publicly exposed number. Let's run all steps needed to generate and verify a proof that 32 = 9: Setup step: powdr setup 8 --backend halo2 --field bn254 Witness generation: powdr pil test_data/asm/sqrt_with_public.asm --field bn254 -i 3 Verification Key generation: powdr verification-key test_data/asm/sqrt_with_public.asm --field bn254 --backend halo2 --params params.bin Proof generation: powdr prove test_data/asm/sqrt_with_public.asm --field bn254 --backend halo2 --params params.bin --vkey vkey.bin Proof verification: powdr verify test_data/asm/sqrt_with_public.asm --field bn254 --backend halo2 --params params.bin --vkey vkey.bin --proof sqrt_with_public_proof.bin --publics 9","breadcrumbs":"Using publics » Using publics","id":"20","title":"Using publics"},"21":{"body":"This document contains the help content for the powdr command-line program. Command Overview: powdr↴ powdr pil↴ powdr prove↴ powdr verify↴ powdr verification-key↴ powdr export-verifier↴ powdr setup↴ powdr reformat↴ powdr optimize-pil↴ powdr test↴","breadcrumbs":"CLI » Command-Line Help for powdr","id":"21","title":"Command-Line Help for powdr"},"22":{"body":"powdr CLI to compile powdr-asm and powdr-pil programs Usage: powdr [OPTIONS] [COMMAND] Subcommands: pil — Runs compilation and witness generation for .pil and .asm files. First converts .asm files to .pil, if needed. Then converts the .pil file to json and generates fixed and witness column data files prove — verify — verification-key — export-verifier — setup — reformat — Parses and prints the PIL file on stdout optimize-pil — Optimizes the PIL file and outputs it on stdout test — Executes all functions starting with test_ in every module called test (or sub-module thereof) starting from the given module Options: --log-level — Set log filter value [ off, error, warn, info, debug, trace ] Default value: INFO","breadcrumbs":"CLI » powdr","id":"22","title":"powdr"},"23":{"body":"Runs compilation and witness generation for .pil and .asm files. First converts .asm files to .pil, if needed. Then converts the .pil file to json and generates fixed and witness column data files Usage: powdr pil [OPTIONS] Arguments: — Input file Options: --field — The field to use Default value: gl Possible values: bb, kb, m31, gl, bn254 -o, --output-directory — Output directory for the PIL file, json file and fixed and witness column data Default value: . -w, --witness-values — Path to a CSV file containing externally computed witness values -i, --inputs — Comma-separated list of free inputs (numbers) Default value: `` -f, --force — Force overwriting of PIL output file Default value: false --pilo — Whether to output the pilo PIL object Default value: false -p, --prove-with — Generate a proof with a given backend Possible values: mock, halo2, halo2-composite, halo2-mock, halo2-mock-composite, plonky3, plonky3-composite --params — File containing previously generated setup parameters --backend-options — Backend options. Halo2: \"poseidon\", \"snark_single\" or \"snark_aggr\". EStark and PilStarkCLI: \"stark_gl\", \"stark_bn\" or \"snark_bn\" --linker-mode — Linker mode, deciding how to reduce links to constraints Possible values: native, bus --degree-mode — Degree mode, deciding whether to use a single monolithic table or a set of dynamically sized tables --export-witness-csv — Generate a CSV file containing the witness column values Default value: false --export-all-columns-csv — Generate a CSV file containing all fixed and witness column values. Useful for debugging purposes Default value: false --csv-mode — How to render field elements in the csv file Default value: hex Possible values: i, ui, hex","breadcrumbs":"CLI » powdr pil","id":"23","title":"powdr pil"},"24":{"body":"Usage: powdr prove [OPTIONS] --backend Arguments: — Input PIL file Options: -d, --dir — Directory to find the committed and fixed values Default value: . --field — The field to use Default value: gl Possible values: bb, kb, m31, gl, bn254 -b, --backend — Generate a proof with a given backend Possible values: mock, halo2, halo2-composite, halo2-mock, halo2-mock-composite, plonky3, plonky3-composite --backend-options — Backend options. Halo2: \"poseidon\", \"snark_single\" or \"snark_aggr\". EStark and PilStarkCLI: \"stark_gl\", \"stark_bn\" or \"snark_bn\" --proof — File containing previously generated proof for aggregation --vkey — File containing previously generated verification key --vkey-app — File containing the verification key of a proof to be verified recursively --params — File containing previously generated setup parameters","breadcrumbs":"CLI » powdr prove","id":"24","title":"powdr prove"},"25":{"body":"Usage: powdr verify [OPTIONS] --backend --proof --vkey Arguments: — Input PIL file Options: -d, --dir — Directory to find the fixed values Default value: . --field — The field to use Default value: gl Possible values: bb, kb, m31, gl, bn254 -b, --backend — Generate a proof with a given backend Possible values: mock, halo2, halo2-composite, halo2-mock, halo2-mock-composite, plonky3, plonky3-composite --backend-options — Backend options. Halo2: \"poseidon\", \"snark_single\" or \"snark_aggr\". EStark and PilStarkCLI: \"stark_gl\", \"stark_bn\" or \"snark_bn\" --proof — File containing the proof --publics — Comma-separated list of public inputs (numbers) Default value: `` --vkey — File containing the verification key --params — File containing the params","breadcrumbs":"CLI » powdr verify","id":"25","title":"powdr verify"},"26":{"body":"Usage: powdr verification-key [OPTIONS] --backend Arguments: — Input PIL file Options: -d, --dir — Directory to find the fixed values Default value: . --field — The field to use Default value: gl Possible values: bb, kb, m31, gl, bn254 -b, --backend — Chosen backend Possible values: mock, halo2, halo2-composite, halo2-mock, halo2-mock-composite, plonky3, plonky3-composite --backend-options — Backend options. Halo2: \"poseidon\", \"snark_single\" or \"snark_aggr\". EStark and PilStarkCLI: \"stark_gl\", \"stark_bn\" or \"snark_bn\" --params — File containing previously generated setup parameters. This will be needed for SNARK verification keys but not for STARK --vkey-app — File containing the verification key of a proof to be verified recursively","breadcrumbs":"CLI » powdr verification-key","id":"26","title":"powdr verification-key"},"27":{"body":"Usage: powdr export-verifier [OPTIONS] --backend Arguments: — Input PIL file Options: -d, --dir — Directory to find the fixed values Default value: . --field — The field to use Default value: gl Possible values: bb, kb, m31, gl, bn254 -b, --backend — Chosen backend Possible values: mock, halo2, halo2-composite, halo2-mock, halo2-mock-composite, plonky3, plonky3-composite --backend-options — Backend options. Halo2: \"poseidon\", \"snark_single\" or \"snark_aggr\". EStark and PilStarkCLI: \"stark_gl\", \"stark_bn\" or \"snark_bn\" --params — File containing previously generated setup parameters. This will be needed for SNARK verification keys but not for STARK --vkey — File containing previously generated verification key","breadcrumbs":"CLI » powdr export-verifier","id":"27","title":"powdr export-verifier"},"28":{"body":"Usage: powdr setup [OPTIONS] --backend Arguments: — Size of the parameters Options: -d, --dir — Directory to output the generated parameters Default value: . --field — The field to use Default value: gl Possible values: bb, kb, m31, gl, bn254 -b, --backend — Generate a proof with a given backend Possible values: mock, halo2, halo2-composite, halo2-mock, halo2-mock-composite, plonky3, plonky3-composite","breadcrumbs":"CLI » powdr setup","id":"28","title":"powdr setup"},"29":{"body":"Parses and prints the PIL file on stdout Usage: powdr reformat Arguments: — Input file","breadcrumbs":"CLI » powdr reformat","id":"29","title":"powdr reformat"},"3":{"body":"The easiest way to start making ZK proofs with powdrVM is to install cargo-powdr: cargo install cargo-powdr cargo-powdr is used to create and manage powdrVM projects, similar to cargo itself.","breadcrumbs":"Installation » Installation","id":"3","title":"Installation"},"30":{"body":"Optimizes the PIL file and outputs it on stdout Usage: powdr optimize-pil [OPTIONS] Arguments: — Input file Options: --field — The field to use Default value: gl Possible values: bb, kb, m31, gl, bn254","breadcrumbs":"CLI » powdr optimize-pil","id":"30","title":"powdr optimize-pil"},"31":{"body":"Executes all functions starting with test_ in every module called test (or sub-module thereof) starting from the given module Usage: powdr test [OPTIONS] Arguments: — Input file Options: --field — The field to use Default value: gl Possible values: bb, kb, m31, gl, bn254 This document was generated automatically by clap-markdown.","breadcrumbs":"CLI » powdr test","id":"31","title":"powdr test"},"32":{"body":"powdr-asm is the higher level of abstraction in powdr. It allows defining Instruction Set Architectures (ISA) using virtual and constrained machines.","breadcrumbs":"asm » asm","id":"32","title":"asm"},"33":{"body":"powdr exposes a module system to help organise and reuse code. use my_module::Other as LocalOther; // we can define a module at `./submodule.asm`\nmod submodule; // we can define a module at `./submodule_in_folder/mod.asm`\nmod submodule_in_folder; use submodule::Other as SubmoduleOther;\nuse submodule_in_folder::Other as FolderSubmoduleOther; let zero: int = 0; // we can also define modules inline\nmod utils { // Each module has a fresh symbol list. Every external symbol needs to be imported, // even from the parent module. use super::zero; let one = zero + 1;\n} machine Main with degree: 8 { // use a machine from another module by relative path my_module::Other a; // use a machine from another module using a local binding LocalOther b; // use a machine from another module defined in a different file SubmoduleOther c; // use a machine from another module defined in a different directory FolderSubmoduleOther d; reg pc[@pc]; instr nothing link => a.nothing(); instr also_nothing link => b.nothing(); instr still_nothing link => c.nothing(); instr nothing_again link => d.nothing(); function main { nothing; also_nothing; still_nothing; nothing_again; return; }\n} mod my_module { machine Other with degree: 8, latch: latch, operation_id: operation_id { operation nothing<0>; col fixed latch = [1]*; col fixed operation_id = [0]*; }\n} Note that a module can't be called std, as this name is reserved for the powdr standard library. Similar to Rust, any reference that cannot be resolved is looked up once more in std::prelude. This module exposes basic types and values such as Option, true and false. This means that you can use Option anywhere without prefix.","breadcrumbs":"asm » Modules » Modules","id":"33","title":"Modules"},"34":{"body":"Symbols can be defined via let = ;, or via let : = ; if you want to specify the type explicitly. The value is an arbitrary PIL-expression . For details, see the Declarations section in the PIL part. Other symbols available in the current module can be accessed by name, but it is also possible to specify full relative paths in the form of e.g. super::super::module_name::symbol. Here are some examples of how to define and use symbols: mod utils { // This defines a function by means of a lambda expression that // computes the sum of an array of values. We fully specify its type. let sum: int, int[] -> int = |len, arr| match len { 0 => 0, _ => arr[len - 1] + sum(len - 1, arr) }; // A simple function that returns the input incremented by one, // as an expression. let incremented: expr -> expr = |x| x + 1; // This is a function that takes an expression as input and returns // a constraint enforcing this expression increments by a certain value // between rows. // The type will be inferred here because `'` is only valid on `expr`. let constrain_incremented_by = |x, inc| x' = x + inc;\n} machine Main with degree: 4 { // Machines create local scopes in the way functions create local scopes: // - all symbols in the machine's module are available without prefix, // - new symbols can be defined but are only available inside the machine. reg A; reg pc[@pc]; // This defines a witness column, let x; // and now we force it to stay unchanged. utils::constrain_incremented_by(x, 0); // We define an instruction that uses a complicated way to increment a register. instr incr_a { A' = utils::incremented(A) } function main { incr_a; return; }\n}","breadcrumbs":"asm » Declarations » Declarations","id":"34","title":"Declarations"},"35":{"body":"Machines are the first main concept in powdr-asm. They can currently be of two types: virtual or constrained.","breadcrumbs":"asm » Machines » Machines","id":"35","title":"Machines"},"36":{"body":"Dynamic machines are defined by: a degree range , indicating the number of execution steps a set of registers , including a program counter an instruction set a set of powdr-pil statements a set of functions a set of submachines An example of a simple dynamic machine is the following: machine HelloWorld with degree: 8 { reg pc[@pc]; reg X[<=]; reg Y[<=]; reg A; instr incr X -> Y { Y = X + 1 } instr decr X -> Y { Y = X - 1 } instr assert_zero X { X = 0 } function main { // assign the first prover input to A A <=X= ${ std::prelude::Query::Input(0, 1) }; // increment A A <== incr(A); // decrement A A <== decr(A); // assert that A is zero assert_zero A; return; }\n}","breadcrumbs":"asm » Machines » Virtual machines","id":"36","title":"Virtual machines"},"37":{"body":"Constrained machines are a lower-level type of machine. They do not have registers, and instead rely on simple committed and fixed columns. They are used to implement hand-optimized computation. They are defined by: a degree range , indicating the number of execution steps a set of operations an operation_identifier column, used to make constraints conditional over which function is called. It can be omitted with _ if the machine has at most one operation. a latch column, used to identify rows at which the machine can be accessed from the outside (where the inputs and outputs are passed). It can be omitted if the machine has no operations. a set of submachines a set of links An example of a simple constrained machine is the following: machine SimpleStatic with degree: 8, latch: latch, operation_id: operation_id\n{ operation power_4<0> x -> y; col fixed operation_id = [0]*; col fixed latch = [0, 0, 0, 1]*; col witness x; col witness y; // initialise y to x at the beginning of each block latch * (y' - x') = 0; // x is unconstrained at the beginning of the block // x is constant within a block (1 - latch) * (x' - x) = 0; // y is multiplied by x at each row (1 - latch) * (y' - x * y) = 0;\n} For more details on the powdr-pil statements, check out the pil section of this book. Note that the parameters of the operation are columns defined in powdr-pil statements.","breadcrumbs":"asm » Machines » Constrained machines","id":"37","title":"Constrained machines"},"38":{"body":"Machines can have submachines which they access by defining external instructions or links . They are declared as follows: machine MySubmachine { ...\n} machine MyMachine { MySubmachine my_submachine;\n} Machines can also receive submachines as construction parameters. A machine passed in as an argument can be accessed in the same way as locally declared submachines: machine MachineWithParam(subm: MySubmachine) { // `subm` can be accessed as a submachine ...\n} machine MyMachine { MySubmachine my_submachine; // `my_submachine` is passed to `another_submachine` as a construction argument MachineWithParam another_submachine(my_submachine);\n}","breadcrumbs":"asm » Machines » Submachines","id":"38","title":"Submachines"},"39":{"body":"Registers are central to a machine. powdr supports a few types of registers:","breadcrumbs":"asm » Registers » Registers","id":"39","title":"Registers"},"4":{"body":"You will need the Rust compiler and Cargo, the Rust package manager. The easiest way to install both is with rustup.rs .","breadcrumbs":"Installation » Prerequisites","id":"4","title":"Prerequisites"},"40":{"body":"Each machine can have at most one program counter. In the absence of a program counter, the machine is considered static, and no other register can be declared. The program counter is defined as follows: reg pc[@pc] At each step execution step, the program counter points to the function line to execute. The program counter behaves like a write register , with the exception that its value is incremented by default after each step.","breadcrumbs":"asm » Registers » Program counter","id":"40","title":"Program counter"},"41":{"body":"Write registers are the default type for registers. They are declared as follows: reg A; They hold a field element, are initialized as 0 at the beginning of a function and keep their value by default. They can be read from and written to. // write to A\nA <=X= 1;\n// A is 1 // read from A\nB <=X= A;\n// A is still 1","breadcrumbs":"asm » Registers » Write registers","id":"41","title":"Write registers"},"42":{"body":"Assignment registers are transient to an execution step: their value is not persisted across steps. They are required in order to pass inputs and receive outputs from instructions, as well as in assignments. For example, if we want to assert that write register A is 0, we can use the following instruction: reg pc[@pc];\nreg A; instr assert_A_is_zero { A = 0\n} function main { assert_A_is_zero; return;\n} However, if we want the instruction to accept any write register as input, we use an assignment register. reg pc[@pc];\nreg X[<=];\nreg A; instr assert_zero X { X = 0\n} function main { assert_zero A; return;\n}","breadcrumbs":"asm » Registers » Assignment registers","id":"42","title":"Assignment registers"},"43":{"body":"Read-only registers are used for function inputs. However, powdr creates them automatically based on functions arguments, so that they do not need to be declared explicitly. Read-only registers are only mentioned for completeness here and are currently only used inside the compiler. We advise against using them.","breadcrumbs":"asm » Registers » Read-only registers","id":"43","title":"Read-only registers"},"44":{"body":"Functions are the entry points to a virtual machine. They can be called from another machine or from the outside. In this section, we describe functions with this simple virtual machine: machine Machine with degree: 16 { reg pc[@pc]; reg X[<=]; reg Y[<=]; reg Z[<=]; reg CNT; reg A; reg B; // an instruction to assert that a number is zero instr assert_zero X { X = 0 } // an instruction to jump to a label instr jmp l: label { pc' = l } // an instruction to jump to a label iff `X` is `0`, otherwise continue instr jmpz X, l: label { pc' = XIsZero * l + (1 - XIsZero) * (pc + 1) } // an instruction to return the square of an input as well as its double instr square_and_double X -> Y, Z { Y = X * X, Z = 2 * X } function main { // initialise `A` to 2 A <=X= 2; // initialise `CNT` to `3` CNT <=X= 3; start: // if `CNT` is `0`, jump to `end` jmpz CNT, end; // decrement `CNT` CNT <=X= CNT - 1; // get the square and the double of `A` A, B <== square_and_double(A); // jump back to `start` jmp start; end: // check that `A == ((2**2)**2)**2` assert_zero A - ((2**2)**2)**2; // check that `B == ((2**2)**2)*2` assert_zero B - ((2**2)**2)*2; return; } // some superpowers on `X` to allow us to check if it's 0 col witness XInv; col witness XIsZero; XIsZero = 1 - X * XInv; XIsZero * X = 0; XIsZero * (1 - XIsZero) = 0;\n}","breadcrumbs":"asm » Functions » Functions","id":"44","title":"Functions"},"45":{"body":"Function inputs and outputs are not supported yet","breadcrumbs":"asm » Functions » Function inputs and outputs","id":"45","title":"Function inputs and outputs"},"46":{"body":"","breadcrumbs":"asm » Functions » Statements","id":"46","title":"Statements"},"47":{"body":"Labels allow referring to a location in a function by name. start:","breadcrumbs":"asm » Functions » Labels","id":"47","title":"Labels"},"48":{"body":"Assignments allow setting the values of some write registers to the values of some expressions expression using assignment registers. CNT <=X= 3; If the right-hand side of the assignment is an instruction, assignment registers can be inferred and are optional: A, B <== square_and_double(A); This will be inferred to be the same as A, B <=Y, Z= square_and_double(A); from the definition of the instruction: instr square_and_double X -> Y, Z { Y = X * X, Z = 2 * X }","breadcrumbs":"asm » Functions » Assignments","id":"48","title":"Assignments"},"49":{"body":"Instructions which do not return outputs can be used as statements. assert_zero A - ((2**2)**2)**2;","breadcrumbs":"asm » Functions » Instructions","id":"49","title":"Instructions"},"5":{"body":"First, create a new powdrVM project with cargo-powdr new my-host Your new crate my-host is the host of the virtual machine's execution, and is responsible for preparing data and running the prover. The guest crate in your new project contains the Rust code whose execution will be proven. Most of these details are abstracted by the powdr library. Now that your project is set up, just run cargo run -r The host manages a powdr::Session which can be used to share data with the guest, test the execution, and generate ZK proofs. use powdr::Session; fn main() { env_logger::init(); let some_data = vec![1, 2, 3, 4, 5]; // Create a new powdr session to make proofs for the `guest` crate. // Store all temporary and final artifacts in `powdr-target`. let mut session = Session::builder() .guest_path(\"./guest\") .out_path(\"powdr-target\") // powdrVM splits long execution traces into chunks // which are proven individually. // The default size of a chunk is 2^20 = 1048576 rows. // For experiments and smaller traces/proofs, it may be beneficial to reduce the chunk size. // Create a new powdr session with a custom chunk size. // 2^18 = 262144 rows per chunk. .chunk_size_log2(18) .build() // Write `some_data` to channel 1 and the sum of `some_data` to channel 2. // Any serde-serializable type can be written to a channel. .write(1, &some_data) .write(2, &some_data.iter().sum::()); // Fast dry run to test execution. session.run(); // Uncomment to compute the proof. //session.prove();\n} The guest contains the custom logic that should be proved. use powdr_riscv_runtime;\nuse powdr_riscv_runtime::io::read; fn main() { // Any serde-deserializable type can be read from a channel. // Read some data from channel 1. let data: Vec = read(1); // Read the claimed sum from channel 2. let sum: u32 = read(2); // Check that the claimed sum is correct. assert_eq!(data.iter().sum::(), sum);\n}","breadcrumbs":"Quick Start » Quick Start","id":"5","title":"Quick Start"},"50":{"body":"","breadcrumbs":"asm » Expressions » Expressions","id":"50","title":"Expressions"},"51":{"body":"Field element literals are signed elements of the prime field. CNT <=X= 3;","breadcrumbs":"asm » Expressions » Field element literals","id":"51","title":"Field element literals"},"52":{"body":"Registers can be used as expressions, with the exception of assignment registers. CNT <=X= CNT - 1;","breadcrumbs":"asm » Expressions » Registers and columns","id":"52","title":"Registers and columns"},"53":{"body":"Instructions which return outputs can be used as expressions. A, B <== square_and_double(A);","breadcrumbs":"asm » Expressions » Instructions","id":"53","title":"Instructions"},"54":{"body":"Instructions are declared as part of a powdr virtual machine. Once defined, they can be called by any function in this machine. An instruction is composed of: a name a set of inputs ( assignment registers or labels) a set of outputs (assignment registers) a set of powdr-pil constraints to activate when the instruction is called a set of links calling into functions/operations in submachines","breadcrumbs":"asm » Instructions » Instructions","id":"54","title":"Instructions"},"55":{"body":"A local instruction is the simplest type of instruction. It is called local because its behavior is defined by a set of constraints over registers and columns of the machine it is defined in. instr add X, Y -> Z { X + Y = Z\n}","breadcrumbs":"asm » Instructions » Local instructions","id":"55","title":"Local instructions"},"56":{"body":"Instructions may also delegate all or part of their implementation to functions/operations in submachines. Each link in an instruction defines the inputs and outputs of a call to a specific function/operation in a submachine. Assume we have a submachine with a single operation add: machine SubMachine with degree: 32, latch: latch, operation_id: operation_id\n{ col witness operation_id; col fixed latch = [1]*; operation add<0> x, y -> z; col witness x; col witness y; col witness z; z = y + x;\n} An instruction calling into this operation can be declared as follows: SubMachine submachine; instr add X, Y -> Z link => Z = submachine.add(X, Y); // - trivial usage: only instruction inputs/outputs used in the call In the previous example, only assignment registers (instruction inputs and outputs) were used to call the submachine. The following example shows more complex usage of link calls: machine Main with degree: 32 { reg pc[@pc]; reg X[<=]; reg Y[<=]; reg Z[<=]; reg A; reg B; reg C; SubMachine submachine; instr add X, Y -> Z link => Z = submachine.add(X, Y); // - trivial usage: only instruction inputs/outputs used in the call instr add_to_A X, Y link => A' = submachine.add(X, Y);// - output to a regular register instr addAB -> X link => X = submachine.add(A, B); // - inputs from regular registers instr addAB_to_C link => C' = submachine.add(A, B); // - inputs and output from regular registers instr addAB_to_A link => A' = submachine.add(A, B); // - reusing an input register as output instr sub X, Y -> Z link => X = submachine.add(Y, Z); // - swapping input/output // expressions can also be used as call parameters instr add5 X -> Z link => Z = submachine.add(X, 3+2); // - literal expression as argument col fixed STEP(i) { i }; instr add_current_time_step X -> Z link => Z = submachine.add(X, STEP);// - machine columns can be referenced let arr = [1,2,3,4,5]; // - functions can be used instr add_arr_sum X -> Z link => Z = submachine.add(X, std::array::sum(arr)); instr assert_eq X, Y { X = Y } function main { A <== add(2, 3); assert_eq A, 5; add_to_A 6, 7; assert_eq A, 13; A <== sub(6, 5); assert_eq A, 1; B <=X= 20; C <== addAB(); assert_eq C, 21; A <=X= 2; B <=X= 3; addAB_to_C; assert_eq C, 5; A <=X= 33; B <=X= 44; addAB_to_A; assert_eq A, 77; A <== add5(2); assert_eq A, 7; A <== add_arr_sum(3); assert_eq A, 18; // Note that the result of this operation depends on when it executed (STEP column) A <== add_current_time_step(42); B <== add_current_time_step(42); assert_eq B - A, 1; return; }\n} A single instruction can activate multiple links, and may also include a set of constraints. Furthermore, each link can be activated conditionally, based on a given boolean flag: machine Main with degree: 16 { reg pc[@pc]; reg X[<=]; reg Y[<=]; reg Z[<=]; reg W[<=]; reg A; col witness B; col witness C; SubMachine submachine; // multiple links can be activated by a single instruction, // witness columns can be used for temporary values, // and additional constraints can be used instr double_then_mul X, Y -> Z link => B = submachine.add(X, X) link => C = submachine.add(Y, Y) { Z = B * C } // links activated conditional on a boolean flag instr add_or_sub W, X, Y -> Z link if W => Z = submachine.add(X, Y) link if (1 - W) => Z = submachine.sub(X, Y); instr assert_eq X, Y { X = Y } function main { A <== double_then_mul(3, 2); assert_eq A, 24; A <== add_or_sub(1, 3, 2); assert_eq A, 5; A <== add_or_sub(0, 3, 2); assert_eq A, 1; return; }\n} Note that links cannot currently call functions from the same machine: they delegate computation to a submachine.","breadcrumbs":"asm » Instructions » Instructions with links","id":"56","title":"Instructions with links"},"57":{"body":"Operations enable a constrained machine to expose behavior to the outside. If a machine has a single operation, it can simply be declared with its name and parameters: machine Add with degree: 32, latch: latch\n{ // operation name, with column names as inputs and outputs operation add a, b -> c; col fixed latch = [1]*; col witness a; col witness b; col witness c; // constraint \"implementing\" the operation c = a + b;\n} The parameters of the operation (inputs and outputs) must be columns declared in the machine. If a machine exposes more than one operation, the machine itself needs an operation id column (op_id in the following). Then, each operation needs to be declared with its own unique operation id: // machine declaration must include an operation id column name\nmachine AddSub with degree: 32, latch: latch, operation_id: op_id\n{ // each operation has its own unique operation id operation add<0> a, b -> c; operation sub<1> a, b -> c; col fixed latch = [1]*; // it also needs to be declared as a column col witness op_id; col witness a; col witness b; col witness c; // constraint \"implementing\" both operations, depending on `op_id` c = (1 - op_id) * (a + b) + op_id * (a - b);\n} The actual behavior of an operation is defined by the machine constraints on the columns used as inputs and outputs.","breadcrumbs":"asm » Operations » Operations","id":"57","title":"Operations"},"58":{"body":"Links enable a constrained machine to call into another machine. They are defined by a call to an operation, where inputs and outputs are expressions. An optional boolean flag restricts the rows in which the link is active. Links without a boolean flag are active in every row. machine Add4 with degree: 32, latch: latch, operation_id: operation_id\n{ Add adder; operation add4<0> x, y, z, w -> r; // Links without a flag are active on every row. // - constrain the values of `x`, `y`, and `n` so that `n = adder.add(x, y)` link => n = adder.add(x, y); // - constrain the values of `z`, `w`, and `m` so that `m = adder.add(z, w)` link => m = adder.add(z, w); // - constrain the values of `m`, `n` and `r` so that `r = adder.add(m,n)` link => r = adder.add(m, n); col fixed operation_id = [0]*; col fixed latch = [1]*; col witness x; col witness y; col witness z; col witness w; col witness r; col witness m; col witness n;\n} machine Add with degree: 32, latch: latch\n{ // operation name, with column names as inputs and outputs operation add a, b -> c; col fixed latch = [1]*; col witness a; col witness b; col witness c; // constraint \"implementing\" the operation c = a + b;\n} If a boolean flag is given, the link is only active in rows where the flag evaluates to 1. Whenever a link is active, the columns mapped as inputs and outputs are constrained by the operation implementation. The following example demonstrates how to use links with flags. col fixed odd_row = [0,1]*; link if odd_row => z = submachine.foo(x, y); // active on odd rows only\nlink if (1 - odd_row) => z = submachine.bar(x, y); // active on even rows only","breadcrumbs":"asm » Links » Links","id":"58","title":"Links"},"59":{"body":"powdr-pil is the lower level of abstraction in powdr. It is strongly inspired by Polygon zkEVM PIL . We refer to the Polygon zkEVM PIL documentation and document deviations from the original design here.","breadcrumbs":"pil » PIL","id":"59","title":"PIL"},"6":{"body":"powdr is a modular compiler stack to build zkVMs. It is ideal for implementing existing VMs and experimenting with new designs with minimal boilerplate. Domain specific languages are used to specify the VM and its underlying constraints, not low level Rust code Automated witness generation Support for multiple provers as well as aggregation schemes Support for hand-optimized co-processors when performance is critical Built in Rust 🦀","breadcrumbs":"Introduction » Introduction","id":"6","title":"Introduction"},"60":{"body":"Powdr-pil allows the same syntax to declare various kinds of symbols. This includes constants, fixed columns, witness columns and even higher-order functions. It deduces the symbol kind from the type of the symbol and the way the symbol is used. Symbols can be declared using let ; and they can be declared and defined using let = ;, where is an expression. The type of the symbol can be explicitly specified using let : ; and let : = ;. Symbols with a generic type can be defined using let : = ;, where the TV are newly created type variables that can be used in the type. This syntax can be used for constants, fixed columns, witness columns and even (higher-order) functions that can transform expressions. The kind of symbol is deduced by its type and whether it is has a value: Symbols without a value are witness columns or arrays of witness columns. Their type can be omitted. If it is given, it must be col or col[k]. Symbols defined with a value and type col (or col[k]) are fixed columns (or arrays of fixed columns). Symbols defined with a value and type inter (or inter[k]) are intermediate columns (or arrays of intermediate columns). Everything else is a \"generic symbol\" that is not a column. Examples: // This defines a integer constant. We can omit the type when it is used // somewhere that constrains its type. Since it is not used below, // we have to specify `: int` (another option would be `fe`, field element). let rows: int = 16; // This defines a fixed column that contains the row number in each row. // Only symbols whose type is \"col\" are considered fixed columns. let step: col = |i| i; // Here, we have a witness column, the do not need an explicit `: col`. let x; // This functions defines a fixed column where each cell contains the // square of its row number. let square: col = |x| x*x; // This is a generic function that computes the sum of an array // given its length. // It is not stored as a column. // If it is used in a constraint, it has to be evaulated, while // columns must be used symbolically. let sum: T[], int -> T = |a, len| match len { 0 => 0, _ => sum(a, len - 1) + a[len - 1], }; // This is a constraint that uses the `sum` function: sum([x, step], 2) = 0; Name lookup is performed as follows: Lookup is performed starting from the current namespace, going up to the root component by component where the first match is used. If all lookups fail, a last attempt is done inside the std::prelude namespace.","breadcrumbs":"pil » Declarations » Declarations","id":"60","title":"Declarations"},"61":{"body":"Depending on the context, powdr allows more or less features for expressions. Inside values for declarations, you can use a very flexible language which includes many different operators, function calls, lambda functions, tuple types, statement blocks, match statements and others. In statements and expressions that are required to evaluate to constraints / polynomial identities, only a much more restrictive language can be used. Expressions in that language are called Algebraic Expressions. While you can use the full language everywhere, in the context of a constraint, the result after function evaluation and constant propagation has to be an algebraic expression.","breadcrumbs":"pil » Expressions » Expressions","id":"61","title":"Expressions"},"62":{"body":"The expression language allows the following operators, in order of increased precedence: lambda functions: |params| body. Examples: |i| i (the identity), |a, b| a + b (sum) || - logical or && - logical and <, <=, ==, !=, >=, > - comparisons and = - identity operator | - bitwise or ^ - bitwise xor & - bitwise and <<, >> - left and right shift +, - - addition and subtraction (binary operator) *, /, % - multiplication, division and modulo ** - exponentiation -, ! - numerical and logical negation (unary operators, prefix) ' - \"next row\" operator (suffix) [], () - array index access and function calls Elementary expressions are number literals (integers) string literals, written in double quotes, e.g. \"hello\" array literals written in square brackets, e.g. [1, 2, 3] tuples, having at least two elements, e.g. (1, \"abc\") statement blocks (see below) match expressions (see below). if expressions (see below). Parentheses are allowed at any point to force precedence.","breadcrumbs":"pil » Expressions » Generic Expressions","id":"62","title":"Generic Expressions"},"63":{"body":"The only way to declare a function in pil is by assigning a lambda function to a symbol. Example: let x = |i| i + 1; If you want to specify the types of parameters or return values explicitly, you have to do it on the symbol, you cannot do it on the parameters: let x: int -> int = |i| i + 1; It is possible to use patterns in the function parameters: let y: (int, int), int -> int = |(i, j), _| i + j; If you use patterns, they have to be irrefutable, which means that the pattern has to be able to match any value of the given type.","breadcrumbs":"pil » Expressions » Lambda Functions","id":"63","title":"Lambda Functions"},"64":{"body":"A {-}-delimited block can be used everywhere where an expression is expected. It has the form { ; ; ... ; }, i.e. a sequence of statements followed by an expression. The statements can either be expressions (f();, only inside constr-functions ) or let statements: let x = ...; / let x; The value of the statement block is the value of the final expression. Example: let plus_one_squared = |x| { let y = x + 1; y * y }; Let statements with value can be used everywhere, they just bind an expression to a local variable and allow to avoid repeating the expression. You can use patterns for the left hand side of let statements to destructure values. Example: let f = |i| (i / 2, i % 2);\nlet (quot, rem) = f(7); The second let statement will create two local variables x and y. You can also ignore values using the _ pattern element. For details, please see the patterns section. Let statements without value (let x;) create a new witness column and are only allowed inside constr-functions . Similarly, an expression at statement level (e.g. x * (x - 1) = 0;) can be used to create new constraints that are added to the global constraint set and this can only be done inside a constr-functions . Note that you can always create constraints and return them from a function, even in pure function . Example: let constrain_to_bool: expr -> Constr = |x| x * (x - 1) = 0;","breadcrumbs":"pil » Expressions » Statement Blocks","id":"64","title":"Statement Blocks"},"65":{"body":"Match expressions take the form match { => , => , _ => }, with an arbitrary number of match arms. The semantics are that the first match arm where the pattern equals the value after the match keyword is evaluated. Patterns can be used to destructure more complex data types and to capture values inside new local variables. For more details, please see the patterns section. Example: let fib = |i| match i { 0 => 1, 1 => 1, _ => fib(i - 2) + fib(i - 1),\n};","breadcrumbs":"pil » Expressions » Match Expressions","id":"65","title":"Match Expressions"},"66":{"body":"If expressions take the form if { } else { }, where the \"else\" part is not optional. If the condition evaluates to true, then is evaluated, otherwise is. Example: let is_seven = |i| if i == 7 { 1 } else { 0 };","breadcrumbs":"pil » Expressions » If Expressions","id":"66","title":"If Expressions"},"67":{"body":"For constraints (or functions called at a place where a constraint is expected), the expression syntax is limited: After evaluating function calls and performing constant propagation, the resulting expression has to be an \"algebraic expression\". These are restricted in the following way: You can freely use the operators +, -,*. The operator ** must have a number as exponent. The operator [i] must have a column name on the left-hand side and the index must be a number. The operator ' must have a column or [i] on the left-hand-side. No other operators are allowed. Arbitrary parentheses are allowed. The following example illustrates how you can still use the generic language: namespace Main(16); // Returns folder(...folder(folder(0, f(0)), f(1)) ..., f(length - 1)) // This is a generic function. let fold: int, (int -> T1), T2, (T2, T1 -> T2) -> T2 = |length, f, initial, folder| match length { 0 => initial, _ => folder(fold(length - 1, f, initial, folder), f(length - 1)) }; // returns f(0) + f(1) + ... + f(length - 1) let sum = |length, f| fold(length, f, 0, |acc, e| acc + e); // This function takes an algebraic expression (a column or expression // involving columns) and returns an identity that forces this expression // to equal 20. Note that `=` is not an assignment but creates an identity constraint. let equals_twenty: expr -> Constr = |x| x = 20; // This declares an array of 16 witness columns. col witness wit[16]; // This expression has to evaluate to an identity, but we can still use // higher order functions and all the flexibility of the language. // The sub-expression `sum(16, |i| wit[i])` evaluates to the algebraic // expression \"wit[0] + wit[1] + ... + wit[15]\", which is then // turned into the identity by `equals_twenty` // wit[0] + wit[1] + ... + wit[15] = 20. equals_twenty(sum(16, |i| wit[i])); // We constrained the sum to equal twenty, but there is no unique solution // to that constraint. In order to fully constrain the system, we need to // add something more: The first fifteen columns should all be one. // returns [f(0), f(1), ..., f(length - 1)] let make_array = |length, f| fold(length, f, [], |acc, e| acc + [e]); // If an expression evaluates to an array of constraints, all the // constraints in the array are added to the system. make_array(15, |i| wit[i] = 1);","breadcrumbs":"pil » Expressions » Algebraic Expressions","id":"67","title":"Algebraic Expressions"},"68":{"body":"Every function in PIL is either a pure, a constr or a query function. They are denoted by |...| ... constr |...| ... query |...| ... Inside constr functions, it is possible to create new witness columns and add constraints to the set of constraints (see the Statement Blocks section for details). Inside query functions, it is possible to evaluate the value of a column on the \"current\" row using the std::prover::eval function. Both actions require a certain context to be available, which is not the case for example when the values of a fixed column are computed. A query function can only be used in the query or hint part of a witness column while constr functions can only be evaluated in the constraint part of a namespace or machine. You can define and call new constr functions inside a constr function and you can call and define new query functions inside query functions, but as soon as you enter a pure function, this is not possible any more. Examples: // This function creates and returns a new witness column.\nlet new_wit = constr || { let x; x };\n// Queries the current value of a column and returns its square.\nlet square_of = query |x| { let v = std::prover::eval(x); v * v };\n// Creates a new witness column, constrains it to be boolean and returns it.\nlet new_bool = constr |x| { let x = new_wit(); x * (x - 1) = 0; x };\n// This is a pure function that only returns a constraint, but does not add it\n// to the global set of constraints.\nlet bool_constraint: expr -> Constr = |x| x * (x - 1) = 0;","breadcrumbs":"pil » Expressions » Constr and Query Functions","id":"68","title":"Constr and Query Functions"},"69":{"body":"Patterns are a way to destructure or match certain values. They are valid in match arms, function parameters or left hand sides of let statements in blocks. A pattern is built up in from the following components: _ - the \"catch all\" pattern that matches anything x - for an identifier x, matches anything and assigns the value to the new local variable of that name k - for a literal number k, matches the exact number, either as an int or a fe -k - for a literal number k, matches the exact negated number, either as an int or a fe \"text\" - for a string literal, matches the exact string literal as a string (a, b, c) - for a tuple, matches a tuple-typed value if all the components match [a, b, c] - for an array, matches array values of exactly the same length if all the components match [a, .., b, c] - matches an array that has an initial segment of a and ends in b, c. The omitted part can be empty. X::Y(a, b) - for an enum variant X::Y, matches that enum variant if all the enum fields match. Patterns can be nested, which means that the components of tuple and array patterns are themselves patterns. Some examples: // This pattern de-structures the first function parameter.\nlet f: (int, int), int -> int = |(a, b), c| (a + c, b);\n// Matches a tuple, ignores the second component.\nlet (x, _) = f((6, 7), 3);\n// The match statement typically uses patterns to check for certain values\n// but it can also destructure and create new local variables valid inside\n// the match arm.\nlet t = match (x, f((1, x), 2)) { (0, _) => 0, (1, _) => 7, (_, y) => y, _ => 9\n};\nlet head: int[] -> int = |x| match x { // Matches the first element of a non-empty array and binds it to a local variable. [a, ..] => a, [] => std::check::panic(\"Called 'head' on empty array.\"),\n}; Note that PIL does not check that patterns in a match expression are exhaustive.","breadcrumbs":"pil » Patterns » Patterns","id":"69","title":"Patterns"},"7":{"body":"powdr is free and open source. You can find the source code on GitHub . Issues and feature requests can be posted on the GitHub issue tracker .","breadcrumbs":"Introduction » Contributing","id":"7","title":"Contributing"},"70":{"body":"A pattern is refutable if there is a value of the correct type that the pattern does not match. An example is the pattern 7 since it does not match all integers, or the patten [x, ..], because it does not match the empty array. Refutable patterns are fine in match arms, because if the pattern does not match, the evaluator will just continue trying the next match arm, but they are disallowed in let statements and in function parameters, because there we do not have the option of \"trying the next arm\". Example: let f: int -> int[] = |i| match i { // This is a refutable pattern, but it is fine // because we will try the next match arm. 0 => [], _ => f(i - 1) + [i],\n};\n// This pattern does not match all `int[]`, because it requires a length\n// of at least one.\nlet [x, ..] = f(8); The following patterns are refutable: all integer literal patterns all string literal patterns enum variant patterns tuple patterns that have refutable components array patterns that are not [..]. Variable patterns and _ are always irrefutable.","breadcrumbs":"pil » Patterns » (Ir-)refutability","id":"70","title":"(Ir-)refutability"},"71":{"body":"The powdr-pil language has the following types: bool int (integer) fe (field element) string tuple array function type expr (expression) ! (\"bottom\" or \"unreachable\" type) enum types In addition, there are the col and inter types, but they are special in that they are only used for declaring columns, but cannot appear as the type of an expression. See Declaring and Referencing Columns for details. Powdr-pil performs Hindley-Milner type inference. This means that, similar to Rust, the type of a symbol does not always have to be specified. The compiler will try to find a type for every symbol depending both on the value assigned to the symbol and on the context the symbol is used in. It is an error if the type is not uniquely determined. Symbols can have a generic type, but in those cases, you have to explicitly specify the generic type. Such declarations can require type variables to satisfy certain trait bounds. Currently, only built-in traits are supported (see the next section). Literal numbers do not have a specific type, they can be either int, fe or expr (the types that implement the FromLiteral trait), and their type can also stay generic until evaluation.","breadcrumbs":"pil » Types » Types","id":"71","title":"Types"},"72":{"body":"The following snippet defines a function that takes a value of a generic type and returns the value incremented by one. The type bounds on the generic type are FromLiteral and Add. The type checker will complain if we do not specify the type bounds. The bound Add is required because we use the + operator in the function and FromLiteral is needed because we use the literal 1 as a value of that type. let add_one: T -> T = |i| i + 1;","breadcrumbs":"pil » Types » Example","id":"72","title":"Example"},"73":{"body":"A symbol declared to have type col or inter (or col[k] / inter[k]) is a bit special: These symbols represent columns in the arithmetization and the types of values that can be assigned to such symbols and the references to the symbols are different from their declared type. If you assign a value to a col symbol, that value is expected to have type int -> fe or int -> int (or an array thereof). This allows the simple declaration of a fixed column let byte: col = |i| i & 0xff; without complicated conversions. The integer value is converted to a field element during evaluation, but it has to be non-negative and less than the field modulus. Symbols of declared type col are fixed (those with value) or witness columns (those without value). A symbol of declared type inter is an intermediate column. You can assign it a value of type expr. The idea of an intermediate column is that it is an algebraic expression of other columns that you do not want to compute multiple times. Note that if you use let x: expr = a * b;, the symbol x is just a name in the PIL environment, this will not create an intermediate column. The difference between inter and expr in this case is that if you use let x: inter = ..., the expression might not be inlined into constraints (depending on the backend), while if you use let x: expr = ..., it will always be inlined. If you reference a symbol of declared type inter or col, the type of the reference is expr (or expr[]). A byte constraint is as easy as [ X ] in [ byte ], since the expected types in plookup columns is expr. The downside is that you cannot evaluate columns as functions. If you want to do that, you either have to assign a copy to an int -> int symbol: let byte_f: int -> int = |i| i & 0xff; let byte: col = byte_f;. Or you can use the built-in function std::prover::eval if you want to do that inside a prover query or hint. All other symbols use their declared type both for their value and for references to these symbols.","breadcrumbs":"pil » Types » Declaring and Referencing Columns","id":"73","title":"Declaring and Referencing Columns"},"74":{"body":"FromLiteral: Implemented by int, fe, expr. The type of a number literal needs to implement FromLiteral. Add: Implemented by int, fe, expr, T[], string. Used by +: T, T -> T (binary plus). Sub: Implemented by int, fe, expr. Used by -: T, T -> T (binary minus). Neg: Implemented by int, fe, expr. Used by -: T -> T (unary minus). Mul: Implemented by int, fe, expr. Used by *: T, T -> T (binary multiplication). Pow: Implemented by int, fe, expr, Used by **: T, int -> T (exponentiation). Ord: Implemented by int. Used by op: T, T, -> bool for op being one of <, >, <=, >=. Eq: Implemented by int, fe, expr. Used by op: T, T -> bool for op being one of ==, !=.","breadcrumbs":"pil » Types » Built-in Traits","id":"74","title":"Built-in Traits"},"75":{"body":"","breadcrumbs":"pil » Types » List of Types","id":"75","title":"List of Types"},"76":{"body":"Type name: bool Booleans are the results of comparisons. They allow the following operators: &&: logical conjunction ||: logical disjunction !: logical negation Short-circuiting is not performed when evaluating boolean operators. This means that (1 == 1) || std::check::panic(\"reason\") will cause a panic abort.","breadcrumbs":"pil » Types » Bool","id":"76","title":"Bool"},"77":{"body":"Type name: int Integers in powdr-pil have unlimited size. Array index requires an integer and row indices (for example the input to a fixed column defined through a function) are also integers. Integer implements FromLiteral, which means that literal numbers can be used in contexts where int is expected. Integers allow the following operators, whose result is always an integer: +: addition -: subtraction (also unary negation) *: multiplication /: integer division rounding towards zero, division by zero results in a runtime error **: exponentiation, the exponent needs to be non-negative and fit 32 bits, otherwise a runtime error is triggered %: remainder after division, (for signed arguments, p % q == sgn(p) * abs(p) % abs(q)), remainder by zero results in a runtime error &: bit-wise conjunction |: bit-wise disjunction ^: bit-wise exclusive or <<: bit-wise shift left, the shift amount needs to be non-negative and fit 32 bits, otherwise a runtime error is triggered >>: bit-wise shift right, the shift amount needs to be non-negative and fit 32 bits, otherwise a runtime error is triggered The exponentiation operator on field elements requires a non-negative integer as exponent. It has the signature **: fe, int -> fe. In addition, the following comparison operators are allowed, the result is a boolean: <: less than <=: less or equal ==: equal !=: not equal >=: greater or equal >: greater than","breadcrumbs":"pil » Types » Integer","id":"77","title":"Integer"},"78":{"body":"Type name: fe Field elements are elements of a particular but unspecified prime field. The exact field is chosen when powdr is run. The modulus of that field can be accessed via std::field::modulus(). Field elements are the values stored in (fixed and witness) columns. Arithmetic inside constraints (algebraic expressions) is also always finite field arithmetic. The type fe implements FromLiteral, which means that literal numbers can be used in contexts where fe is expected. If the literal number is not less than the field modulus, a runtime error is caused. Field elements allow the following operators, where the result is always a field element: +: finite field addition -: finite field subtraction (also unary negation) *: finite field multiplication There is also an exponentiation operator ** on field elements. It requires the exponent to be a non-negative integer and thus has the signature **: fe, int -> fe. If the exponent is negative, a runtime error is triggered. 0**0 is defined as 1. The following comparison operators exist for field elements, whose result is a boolean: ==: equality comparison !=: inequality comparison Since finite fields do not have an inherent order as integers do, if you want to compare them using <, you have to first convert them to integers.","breadcrumbs":"pil » Types » Field Element","id":"78","title":"Field Element"},"79":{"body":"Type name: string String literals are written as \"string content\". They are mainly used for debugging or documentation purposes, since they cannot occur in constraints. They allow the following operators: +: string concatenation","breadcrumbs":"pil » Types » String","id":"79","title":"String"},"8":{"body":"The powdr source and documentation are released under the MIT License .","breadcrumbs":"Introduction » License","id":"8","title":"License"},"80":{"body":"Type name: (..., ..., ...) Tuples are complex types that are composed from other types, either zero or two or more. There is no tuple type with a single element ((int) is the same as int). The empty tuple type is written as (). Examples include (int, int) (a pair of integers) and ((fe[], int), ()) (a tuple consisting of a tuple that contains an array of field elements and an integer and an empty tuple). Tuples values are constructed using parentheses: (1, 2) constructs the tuple that consists of a one and a two. Tuples do not allow any operators.","breadcrumbs":"pil » Types » Tuple","id":"80","title":"Tuple"},"81":{"body":"Type name: _[] Arrays are statically or dynamically-sized collections of elements each of the same type denoted for example as int[] (a dynamically-sized array of integers) or int[2] (an array of integers with static size two). Array values can be constructed inline using [1, 2] (the array containing the two elements one and two). The built-in function std::array::len can be used to retrieve the length of an array (statically or dynamically sized) and the elements of an array a can be accessed using a[0], a[1], etc. The type checker currently only knows dynamically-sized arrays, which means that it does not compare the sizes of statically-sized array types. Arrays allow the following operators: +: array concatenation _[]: array index access, the index needs to be a non-negative integer that is less than the length of the array, otherwise a runtime error is triggered","breadcrumbs":"pil » Types » Array","id":"81","title":"Array"},"82":{"body":"Type name: T1, T2, ..., Tn -> T0 Function type names are for example denoted as int, fe -> int or -> int. Note that (int, fe) -> int is a function that takes a single tuple as parameter while int, fe -> int takes two parameters of type integer and field element. Functions can be constructed using the lambda expression notation. For example |x, y| x + y returns a function that performs addition. The lambda expression || 7 is a function that returns a constant (has no parameters). Lambda functions can capture anything in their environment and thus form closures. Functions allow the following operators: _(...): function evaluation Powdr-pil is usually side-effect free, but there are some built-in functions that have side-effects: These are std::debug::print and std::check::panic and all functions that call them. Expressions are eagerly evaluated from left to right.","breadcrumbs":"pil » Types » Function","id":"82","title":"Function"},"83":{"body":"Type name: expr Expressions are the elements of the algebraic expressions used in constraints. References to columns have type expr and expr also implements FromLiteral, which means that literal numbers can be used in contexts where expr is expected. Example: let x: col;\nlet y: col;\nlet f: -> expr = || x + y;\nlet g = || 7;\nf() = g(); The first two lines define the witness columns x and y. The next two lines define the utility functions f and g. The function f adds the two columns x and y symbolically - it essentially returns the expression x + y. The last line is at statement level and it is expected that it evaluates to a constraint, in this case, a polynomial identity. Because of that, g is inferred to have type -> expr, which is compatible with the literal 7. Since expressions are built from abstract column references, applying operators does not perform any operations but instead constructs an abstract expression structure / syntax tree. Expressions allow the following operators, which always construct new expressions: +: additive combination of expressions -: subtractive combination of expressions (also unary negation) *: multiplicative combination of expressions **: exponential combination of an expression with an integer constant ': reference to the next row of a column, can only be applied directly to columns and only once The operator = on expressions constructs a constraint (see [../builtins#Constr]).","breadcrumbs":"pil » Types » Expression","id":"83","title":"Expression"},"84":{"body":"Type name: ! The bottom type essentially is the return type of a function that never returns, which currently only happens if you call the panic function. The bottom type is compatible with any other type, which means that you can call the panic function in any context.","breadcrumbs":"pil » Types » Bottom Type","id":"84","title":"Bottom Type"},"85":{"body":"Enums are user-defined types that can hold different named alternatives plus data. An enum type has a (namespaced) name that uniquely identifies it and is also used to reference the type. Enums are declared in the following way: enum EnumName { Variant1, Variant2(), Variant3(int), Variant4(int, int[], EnumName),\n} The variants must have unique names inside the enum and they can optionally take additional data. Each variant declares a type constructor function that can be used to create a value of the enum: let a = EnumName::Variant1;\nlet b = EnumName::Variant2();\nlet c = EnumName::Variant3(3);\nlet d = EnumName::Variant4(1, [2, 3], EnumName::Variant1); Recursive enums are allowed. Enums do not allow any operators.","breadcrumbs":"pil » Types » Enum Types","id":"85","title":"Enum Types"},"86":{"body":"powdr-pil requires the definition of fixed columns at the time of declaration. For example: col fixed ONES = [1]*; // this is valid\n// col fixed ONES; // this is invalid A number of mechanisms are supported to declare fixed columns. Let N be the total length of the column we're defining.","breadcrumbs":"pil » Fixed Columns » Fixed columns","id":"86","title":"Fixed columns"},"87":{"body":"powdr-pil supports a basic language to define the value of constant columns using: arrays, for example [1, 2, 3] repetition, for example [1, 2]* concatenation, for example [1, 2] + [3, 4] These mechanisms can be combined, as long as a single repetition is used per column definition. // valid, as for a given total length, only one column fits this definition for a given `N`\ncol fixed A = [1, 2] + [3, 4]* + [5]; // invalid, as many columns fit this definition\n// col fixed A = [1, 2]* + [3, 4]*","breadcrumbs":"pil » Fixed Columns » Values with repetitions","id":"87","title":"Values with repetitions"},"88":{"body":"A column can be seen as a mapping from integers to field elements. In this context, different functions are supported: col fixed B(i) { i + 1 }; col fixed C(i) {match i { 0 => 1, _ => 0\n}};","breadcrumbs":"pil » Fixed Columns » Mappings","id":"88","title":"Mappings"},"89":{"body":"","breadcrumbs":"pil » Built-in Functions » Built-ins","id":"89","title":"Built-ins"},"9":{"body":"The only way to install powdr currently is to build it from source. There are two binaries, powdr compiles powdr-asm files to powdr-PIL and generates witnesses and proofs. powdr-rs compiles Rust crates to powdr-asm via RISCV, and executes powdr-asm code with given inputs.","breadcrumbs":"Installation » Installation","id":"9","title":"Installation"},"90":{"body":"The following functions are built into the compiler. They need to be defined to be accessible, but their assigned value is ignored and the compiler replaces it with the following.","breadcrumbs":"pil » Built-in Functions » Functions","id":"90","title":"Functions"},"91":{"body":"let std::array::len: T[] -> int Returns the length of an array as an integer. Example: let x = [1, 2, 3];\nlet l = std::array::len(x); // returns 3","breadcrumbs":"pil » Built-in Functions » Array length","id":"91","title":"Array length"},"92":{"body":"let std::check::panic: string -> ! Aborts evaluation and prints its argument as error message as a side-effect of its evaluation. Since panic does not generate a constraint, it cannot be used for correctness checks. The verifier only checks constraints / identities and thus ignores anything that could lead to a panic. Panic should only be used to check prover-internal consistency. Example: let secp256k1_inverse = |x| if x == std::convert::fe(0) { panic!(\"Tried to compute the inverse of zero.\") } else { std::math::ff::inverse(x, secp256k1_modulus); };","breadcrumbs":"pil » Built-in Functions » Panic","id":"92","title":"Panic"},"93":{"body":"let std::convert::fe: T -> fe This function is meant to be used on int, but also works on fe for convenience. It converts a non-negative integer less than the field modulus to a field element. Causes a type error in all other cases. If the argument is already a field element, it is returned without modification. let std::convert::int: T -> int This function is meant to be used on fe, but also works on int for convenience. It converts a field element to an integer. If the argument is already an integer, it is returned without modification. let std::convert::expr: T -> expr This function is meant to be used on int, but also works on fe and expr for convenience. It converts an integer to an expr. If the argument is already an expr, it is returned without modification.","breadcrumbs":"pil » Built-in Functions » Conversions","id":"93","title":"Conversions"},"94":{"body":"let std::debug::print: string -> Constr[] This function takes a string and prints it on the standard output during evaluation, as a side-effect of its evaluation. This function should only be used for debugging purposes. Note that the function does not append a newline at the end. It returns an empty Constr array so that it can be used at statement level where constraints are expected.","breadcrumbs":"pil » Built-in Functions » Printing","id":"94","title":"Printing"},"95":{"body":"let std::field::modulus: -> int Returns the current field's modulus as an integer. Example: // Inside a machine\nif std::field::modulus() != 2**64 - 2**32 + 1 { panic!(\"This machine can only be used with the Goldilocks field.\")\n} else { []\n};","breadcrumbs":"pil » Built-in Functions » Modulus","id":"95","title":"Modulus"},"96":{"body":"let std::prover::eval: expr -> fe Evaluates a column (potentially with ' applied) on the current row. This function can only be used for prover queries or hints and it only works on columns (and those with ' applied). This means you cannot use std::prover::eval(x + 1). In the following example, the column x is evaluated in a prover hint that returns the square root of a number. Example: machine Sqrt { let sqrt_hint: fe -> fe = |x| match x { // Code to compute the square root of x goes here. }; col witness x; col witness y(i) query std::prelude::Query::Hint(sqrt_hint(std::prover::eval(x))); y * y = x; }}","breadcrumbs":"pil » Built-in Functions » Evaluate","id":"96","title":"Evaluate"},"97":{"body":"let std::prelude::challenge: int, int -> expr Constructs a challenge object, essentially asking the verifier for a random number. The first argument is the proof stage and the second is the identifier of the challenge. If you want two challenges to be different, you have to choose different IDs.","breadcrumbs":"pil » Built-in Functions » Challenges","id":"97","title":"Challenges"},"98":{"body":"let std::prover::min_degree: -> int\nlet std::prover::max_degree: -> int\nlet std::prover::degree: -> int The degree function returns the number of rows / the length of the witness columns, also known as the degree. Outside of fixed column definitions, degree fails if min_degree and max_degree are different.","breadcrumbs":"pil » Built-in Functions » Degree","id":"98","title":"Degree"},"99":{"body":"let std::prelude::set_hint: expr, (int -> std::prelude::Query) -> () This function can be used to set a \"query function\" for a witness column. Query functions are used during witness generation and allow witness column cells to receive a value even though they are not uniquely constrained by the constraints. The first argument must be a witness column and the function can only be called once per witness column.","breadcrumbs":"pil » Built-in Functions » Hints","id":"99","title":"Hints"}},"length":119,"save":true},"fields":["title","body","breadcrumbs"],"index":{"body":{"root":{"0":{"*":{"*":{"0":{"df":1,"docs":{"78":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},",":{"1":{"df":1,"docs":{"58":{"tf":1.0}}},"df":0,"docs":{}},".":{".":{"1":{"0":{"0":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"5":{"0":{"0":{"0":{"0":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":23,"docs":{"106":{"tf":2.23606797749979},"13":{"tf":1.0},"14":{"tf":1.7320508075688772},"15":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.7320508075688772},"36":{"tf":1.0},"37":{"tf":2.6457513110645907},"41":{"tf":1.0},"42":{"tf":1.7320508075688772},"44":{"tf":2.449489742783178},"58":{"tf":1.0},"60":{"tf":1.7320508075688772},"64":{"tf":1.4142135623730951},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.4142135623730951},"68":{"tf":1.4142135623730951},"69":{"tf":1.4142135623730951},"70":{"tf":1.0},"88":{"tf":1.4142135623730951}},"x":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"73":{"tf":1.4142135623730951}}}}}},"1":{",":{"2":{",":{"3":{",":{"4":{",":{"5":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{",":{"2":{",":{"4":{",":{"6":{"df":1,"docs":{"105":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"4":{"8":{"5":{"7":{"6":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"8":{"5":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"3":{"6":{"2":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":1.0}}},"6":{"1":{"0":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":4,"docs":{"44":{"tf":1.0},"56":{"tf":1.0},"60":{"tf":1.0},"67":{"tf":1.0}}},"8":{"df":1,"docs":{"56":{"tf":1.0}}},"df":36,"docs":{"106":{"tf":2.23606797749979},"13":{"tf":1.7320508075688772},"14":{"tf":2.0},"20":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.7320508075688772},"36":{"tf":1.7320508075688772},"37":{"tf":1.7320508075688772},"41":{"tf":1.7320508075688772},"44":{"tf":2.23606797749979},"5":{"tf":1.4142135623730951},"52":{"tf":1.0},"56":{"tf":2.23606797749979},"57":{"tf":1.7320508075688772},"58":{"tf":2.0},"60":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951},"63":{"tf":1.4142135623730951},"64":{"tf":1.7320508075688772},"65":{"tf":2.449489742783178},"66":{"tf":1.0},"67":{"tf":2.449489742783178},"68":{"tf":1.4142135623730951},"69":{"tf":1.0},"70":{"tf":1.0},"72":{"tf":1.4142135623730951},"76":{"tf":1.4142135623730951},"78":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":2.23606797749979},"88":{"tf":1.4142135623730951},"91":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0}}},"2":{")":{")":{".":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"(":{"df":0,"docs":{},"|":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"x":{"df":1,"docs":{"105":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"*":{"*":{"2":{")":{"*":{"*":{"2":{")":{"*":{"*":{"2":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"49":{"tf":1.0}}},"df":0,"docs":{}},"2":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"3":{"2":{"df":1,"docs":{"95":{"tf":1.0}}},"df":0,"docs":{}},"6":{"4":{"df":1,"docs":{"95":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},".":{".":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"105":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"df":2,"docs":{"56":{"tf":1.0},"67":{"tf":1.7320508075688772}}},"1":{"df":1,"docs":{"56":{"tf":1.0}}},"3":{"2":{"0":{"5":{"7":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"4":{"df":1,"docs":{"56":{"tf":1.0}}},"5":{"7":{"6":{"4":{"7":{"df":1,"docs":{"106":{"tf":1.0}}},"8":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"9":{"8":{"3":{"2":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"6":{"0":{"7":{"8":{"2":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"0":{"3":{"9":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"4":{"0":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"1":{"0":{"2":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"4":{"4":{"df":2,"docs":{"106":{"tf":1.7320508075688772},"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"106":{"tf":1.0}}},"8":{"df":0,"docs":{},"g":{"b":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{}}},"^":{"1":{"8":{"df":2,"docs":{"106":{"tf":1.0},"5":{"tf":1.0}}},"df":0,"docs":{}},"2":{"0":{"df":1,"docs":{"5":{"tf":1.0}}},"2":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":1,"docs":{"118":{"tf":1.0}}},"b":{"df":1,"docs":{"118":{"tf":1.0}}},"df":16,"docs":{"106":{"tf":2.0},"14":{"tf":1.0},"44":{"tf":1.7320508075688772},"48":{"tf":1.0},"5":{"tf":1.7320508075688772},"56":{"tf":2.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.4142135623730951},"65":{"tf":1.7320508075688772},"69":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"85":{"tf":1.0},"87":{"tf":2.23606797749979},"91":{"tf":1.0}}},"3":{"+":{"2":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"1":{"3":{"4":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"106":{"tf":1.4142135623730951}}},"2":{"df":7,"docs":{"106":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"77":{"tf":1.7320508075688772}}},"3":{"df":1,"docs":{"56":{"tf":1.0}}},"df":13,"docs":{"106":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"44":{"tf":1.4142135623730951},"48":{"tf":1.0},"5":{"tf":1.0},"51":{"tf":1.0},"56":{"tf":2.0},"62":{"tf":1.0},"69":{"tf":1.0},"85":{"tf":1.0},"87":{"tf":2.0},"91":{"tf":1.4142135623730951}}},"4":{"1":{"9":{"4":{"3":{"0":{"4":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"df":1,"docs":{"106":{"tf":1.0}}},"4":{"c":{"d":{"9":{"1":{"c":{"1":{"2":{"0":{"3":{"3":{"a":{"d":{"4":{"c":{"6":{"a":{"6":{"b":{"1":{"9":{"7":{"9":{"3":{"b":{"7":{"3":{"df":0,"docs":{},"f":{"1":{"a":{"6":{"6":{"d":{"9":{"9":{"a":{"0":{"df":0,"docs":{},"e":{"0":{"b":{"df":0,"docs":{},"f":{"6":{"3":{"4":{"9":{"4":{"c":{"1":{"2":{"c":{"df":0,"docs":{},"e":{"b":{"1":{"df":0,"docs":{},"f":{"4":{"5":{"1":{"df":0,"docs":{},"e":{"c":{"9":{"4":{"5":{"2":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":1.0}}},"df":3,"docs":{"34":{"tf":1.0},"5":{"tf":1.0},"87":{"tf":1.7320508075688772}}},"5":{"df":3,"docs":{"5":{"tf":1.0},"56":{"tf":2.0},"87":{"tf":1.0}}},"6":{"2":{"df":1,"docs":{"106":{"tf":1.0}}},"8":{"4":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":1.0}}},"7":{"0":{"2":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"5":{"0":{"3":{"2":{"9":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"7":{"df":1,"docs":{"56":{"tf":1.0}}},"df":6,"docs":{"56":{"tf":1.4142135623730951},"66":{"tf":1.0},"69":{"tf":1.4142135623730951},"70":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.4142135623730951}}},"8":{"3":{"df":1,"docs":{"106":{"tf":1.0}}},"df":7,"docs":{"13":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"20":{"tf":2.0},"33":{"tf":1.4142135623730951},"36":{"tf":1.0},"37":{"tf":1.0}}},"9":{"8":{"df":1,"docs":{"106":{"tf":1.0}}},"9":{"df":1,"docs":{"106":{"tf":1.4142135623730951}}},"df":2,"docs":{"20":{"tf":1.4142135623730951},"69":{"tf":1.0}}},"_":{"df":13,"docs":{"106":{"tf":1.4142135623730951},"34":{"tf":1.0},"37":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.4142135623730951},"67":{"tf":1.0},"69":{"tf":2.449489742783178},"70":{"tf":1.4142135623730951},"81":{"tf":1.4142135623730951},"82":{"tf":1.0},"88":{"tf":1.0}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":1,"docs":{"16":{"tf":1.0}}}}}}}},"a":{"(":{"7":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.0}}}}}}},"[":{"0":{"df":1,"docs":{"81":{"tf":1.0}}},"1":{"df":1,"docs":{"81":{"tf":1.0}}},"7":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"^":{"2":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"b":{"c":{"df":1,"docs":{"62":{"tf":1.0}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"76":{"tf":1.0},"92":{"tf":1.0}}}},"v":{"df":2,"docs":{"106":{"tf":1.0},"15":{"tf":1.7320508075688772}}}},"s":{"(":{"df":0,"docs":{},"p":{"df":1,"docs":{"77":{"tf":1.0}}},"q":{"df":1,"docs":{"77":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"40":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"32":{"tf":1.0},"5":{"tf":1.0},"59":{"tf":1.0},"83":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"c":{"df":1,"docs":{"67":{"tf":2.0}},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"42":{"tf":1.0}}}},"s":{"df":0,"docs":{},"s":{"df":9,"docs":{"105":{"tf":1.0},"106":{"tf":2.6457513110645907},"34":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.7320508075688772},"62":{"tf":1.0},"78":{"tf":1.0},"81":{"tf":1.4142135623730951},"90":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"18":{"tf":1.7320508075688772}}}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"68":{"tf":1.0}}}},"v":{"df":3,"docs":{"54":{"tf":1.0},"56":{"tf":2.0},"58":{"tf":2.6457513110645907}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"106":{"tf":1.7320508075688772},"57":{"tf":1.0}}}},"df":0,"docs":{}}}},"d":{"d":{"(":{"2":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"4":{"<":{"0":{"df":1,"docs":{"58":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"58":{"tf":1.0}}},"5":{"(":{"2":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":1.0}}},"<":{"0":{"df":2,"docs":{"56":{"tf":1.0},"57":{"tf":1.0}}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"(":{"3":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"(":{"4":{"2":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"72":{"tf":1.0}}},"r":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"b":{"(":{"0":{"df":1,"docs":{"56":{"tf":1.0}}},"1":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"_":{"a":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"a":{"b":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"a":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}},"c":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":1,"docs":{"56":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":14,"docs":{"102":{"tf":1.0},"105":{"tf":1.0},"118":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951},"58":{"tf":1.7320508075688772},"60":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.4142135623730951},"72":{"tf":1.7320508075688772},"74":{"tf":1.4142135623730951},"83":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{".":{"a":{"d":{"d":{"(":{"df":0,"docs":{},"m":{",":{"df":0,"docs":{},"n":{"df":1,"docs":{"58":{"tf":1.0}}}},"df":1,"docs":{"58":{"tf":1.0}}},"x":{"df":1,"docs":{"58":{"tf":1.4142135623730951}}},"z":{"df":1,"docs":{"58":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"58":{"tf":1.0}}}},"i":{"df":0,"docs":{},"t":{"df":8,"docs":{"56":{"tf":1.0},"62":{"tf":1.0},"71":{"tf":1.0},"77":{"tf":1.4142135623730951},"78":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"85":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"105":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"u":{"b":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}}}},"df":2,"docs":{"64":{"tf":1.0},"67":{"tf":1.0}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"43":{"tf":1.0}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"115":{"tf":1.0}}}},"df":0,"docs":{}}}},"g":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"17":{"tf":1.0}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"43":{"tf":1.0}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":4,"docs":{"15":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"24":{"tf":1.0},"6":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"109":{"tf":1.0}}},"r":{"df":4,"docs":{"113":{"tf":1.0},"114":{"tf":1.0},"117":{"tf":2.23606797749979},"118":{"tf":2.23606797749979}}}},"l":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"r":{"a":{"df":5,"docs":{"61":{"tf":1.4142135623730951},"67":{"tf":2.0},"73":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"o":{"c":{":":{":":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"c":{":":{":":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"c":{"df":2,"docs":{"105":{"tf":1.0},"106":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":2,"docs":{"105":{"tf":1.0},"106":{"tf":1.0}}},"df":0,"docs":{},"w":{"df":21,"docs":{"101":{"tf":1.0},"32":{"tf":1.0},"44":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"67":{"tf":1.4142135623730951},"73":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.4142135623730951},"78":{"tf":1.0},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"85":{"tf":1.4142135623730951},"99":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"i":{"df":2,"docs":{"104":{"tf":1.0},"93":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"85":{"tf":1.0}}}}}},"w":{"a":{"df":0,"docs":{},"y":{"df":7,"docs":{"64":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.4142135623730951},"83":{"tf":1.0}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"77":{"tf":1.4142135623730951}}}}}}},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"15":{"tf":1.0}}}}}},"d":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"20":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":7,"docs":{"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"18":{"tf":1.0},"33":{"tf":2.0},"44":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"38":{"tf":1.0}},"e":{"(":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"38":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"15":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":3,"docs":{"69":{"tf":1.4142135623730951},"82":{"tf":1.0},"92":{"tf":1.0}}}},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"33":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"p":{"df":3,"docs":{"18":{"tf":1.4142135623730951},"24":{"tf":1.0},"26":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"71":{"tf":1.0}}}},"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"94":{"tf":1.0}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"i":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"'":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}},"df":1,"docs":{"0":{"tf":1.0}}},"df":5,"docs":{"101":{"tf":1.0},"113":{"tf":1.0},"116":{"tf":1.0},"83":{"tf":1.4142135623730951},"96":{"tf":1.4142135623730951}}}}}},"r":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":4,"docs":{"105":{"tf":1.0},"34":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"10":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"103":{"tf":1.0},"113":{"tf":1.0},"32":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":17,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0},"38":{"tf":1.4142135623730951},"43":{"tf":1.0},"56":{"tf":1.0},"77":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":1.7320508075688772},"97":{"tf":1.0},"99":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"73":{"tf":1.0},"78":{"tf":1.4142135623730951}}}}}}}},"m":{"df":3,"docs":{"65":{"tf":1.4142135623730951},"69":{"tf":1.4142135623730951},"70":{"tf":2.0}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"[":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"34":{"tf":1.0}}}}}},"a":{"df":0,"docs":{},"y":{"df":15,"docs":{"18":{"tf":1.0},"34":{"tf":1.0},"60":{"tf":2.0},"62":{"tf":1.4142135623730951},"67":{"tf":1.7320508075688772},"69":{"tf":2.449489742783178},"70":{"tf":1.4142135623730951},"71":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":3.7416573867739413},"87":{"tf":1.0},"91":{"tf":1.4142135623730951},"94":{"tf":1.0}}}},"df":2,"docs":{"34":{"tf":1.4142135623730951},"56":{"tf":1.0}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"14":{"tf":1.0},"15":{"tf":1.7320508075688772},"18":{"tf":1.0},"5":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"k":{"df":2,"docs":{"105":{"tf":1.0},"97":{"tf":1.0}}},"m":{"df":10,"docs":{"103":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0},"113":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"22":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"32":{"tf":1.4142135623730951},"35":{"tf":1.0},"9":{"tf":1.7320508075688772}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"106":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"!":{"(":{"a":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"a":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"42":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"!":{"(":{"d":{"a":{"df":0,"docs":{},"t":{"a":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{":":{":":{"<":{"df":0,"docs":{},"u":{"3":{"2":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"105":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":3.7416573867739413}}}},"z":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":5,"docs":{"13":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"44":{"tf":1.7320508075688772},"49":{"tf":1.0}}}}}}},"df":4,"docs":{"13":{"tf":1.0},"36":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":13,"docs":{"13":{"tf":1.0},"36":{"tf":1.0},"42":{"tf":2.0},"48":{"tf":2.23606797749979},"52":{"tf":1.0},"54":{"tf":1.4142135623730951},"56":{"tf":1.0},"63":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":2.0},"90":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"56":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.0}}}}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"31":{"tf":1.0},"43":{"tf":1.0}}}},"df":1,"docs":{"6":{"tf":1.0}}}}}},"v":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":5,"docs":{"104":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.0},"34":{"tf":1.7320508075688772},"68":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"18":{"tf":1.0},"64":{"tf":1.0}}},"df":0,"docs":{}}}},"w":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"106":{"tf":1.0}}}},"df":0,"docs":{}}},"b":{"(":{"df":0,"docs":{},"i":{"df":1,"docs":{"88":{"tf":1.0}}}},".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.0}}}}}}},"a":{"b":{"df":0,"docs":{},"y":{"b":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"110":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"44":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"d":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":5,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}}}},"df":14,"docs":{"106":{"tf":2.0},"109":{"tf":1.4142135623730951},"11":{"tf":1.0},"15":{"tf":2.0},"17":{"tf":2.0},"18":{"tf":3.7416573867739413},"20":{"tf":2.0},"23":{"tf":1.7320508075688772},"24":{"tf":2.6457513110645907},"25":{"tf":2.6457513110645907},"26":{"tf":2.6457513110645907},"27":{"tf":2.6457513110645907},"28":{"tf":2.23606797749979},"73":{"tf":1.0}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"2":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"43":{"tf":1.0},"56":{"tf":1.0}}},"i":{"c":{"df":2,"docs":{"33":{"tf":1.0},"87":{"tf":1.0}}},"df":0,"docs":{}}}},"b":{"df":8,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0}}},"df":18,"docs":{"106":{"tf":2.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"33":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":2.0},"48":{"tf":1.4142135623730951},"53":{"tf":1.0},"56":{"tf":3.4641016151377544},"57":{"tf":2.8284271247461903},"58":{"tf":1.7320508075688772},"62":{"tf":1.4142135623730951},"69":{"tf":2.6457513110645907},"73":{"tf":1.0},"85":{"tf":1.0}},"e":{"df":1,"docs":{"74":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"15":{"tf":1.7320508075688772},"17":{"tf":1.0},"18":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"37":{"tf":1.4142135623730951},"41":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"v":{"df":1,"docs":{"40":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"55":{"tf":1.0},"57":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":6,"docs":{"105":{"tf":1.0},"15":{"tf":1.4142135623730951},"18":{"tf":1.0},"20":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.7320508075688772}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"5":{"tf":1.0}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"16":{"tf":1.0},"19":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":3,"docs":{"18":{"tf":1.0},"34":{"tf":1.0},"73":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":5,"docs":{"15":{"tf":1.0},"18":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.7320508075688772},"9":{"tf":1.0}}}}},"d":{"df":3,"docs":{"33":{"tf":1.0},"64":{"tf":1.0},"69":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":2,"docs":{"73":{"tf":1.0},"77":{"tf":2.8284271247461903}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"62":{"tf":1.7320508075688772}}}}}}},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":7,"docs":{"116":{"tf":1.7320508075688772},"37":{"tf":1.7320508075688772},"61":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.7320508075688772},"68":{"tf":1.0},"69":{"tf":1.0}}}},"df":0,"docs":{}}},"n":{"2":{"5":{"4":{"df":14,"docs":{"111":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":2.449489742783178},"17":{"tf":1.4142135623730951},"18":{"tf":2.8284271247461903},"20":{"tf":2.23606797749979},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"o":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"62":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"6":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"37":{"tf":1.0}}},"l":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"68":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":4,"docs":{"102":{"tf":3.7416573867739413},"71":{"tf":1.0},"74":{"tf":1.4142135623730951},"76":{"tf":1.4142135623730951}},"e":{"a":{"df":0,"docs":{},"n":{"df":6,"docs":{"56":{"tf":1.4142135623730951},"58":{"tf":1.7320508075688772},"68":{"tf":1.0},"76":{"tf":1.4142135623730951},"77":{"tf":1.0},"78":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"106":{"tf":3.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"t":{"df":0,"docs":{},"h":{"df":8,"docs":{"10":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.0},"4":{"tf":1.0},"57":{"tf":1.0},"68":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"71":{"tf":1.0},"84":{"tf":1.7320508075688772}}}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"71":{"tf":1.0},"72":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}},"r":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"62":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"19":{"tf":1.0}}}},"df":0,"docs":{}}}}},"n":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"16":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"u":{"df":1,"docs":{"23":{"tf":1.0}},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"\"":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"i":{"df":0,"docs":{},"l":{"d":{"df":7,"docs":{"10":{"tf":1.0},"106":{"tf":1.7320508075688772},"11":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"5":{"tf":1.0},"6":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":13,"docs":{"0":{"tf":1.0},"100":{"tf":1.4142135623730951},"109":{"tf":1.0},"6":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"#":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"f":{"df":1,"docs":{"73":{"tf":1.4142135623730951}}}},"df":2,"docs":{"18":{"tf":1.0},"73":{"tf":2.0}}}}}},"c":{"(":{"df":0,"docs":{},"i":{"df":1,"docs":{"88":{"tf":1.0}}}},".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.0}}}}}}},"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":18,"docs":{"105":{"tf":1.0},"15":{"tf":1.0},"22":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":1.0},"44":{"tf":1.0},"54":{"tf":1.7320508075688772},"55":{"tf":1.0},"56":{"tf":2.8284271247461903},"58":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951},"62":{"tf":1.0},"67":{"tf":1.4142135623730951},"68":{"tf":1.4142135623730951},"82":{"tf":1.0},"84":{"tf":1.4142135623730951},"99":{"tf":1.0}}}},"n":{"'":{"df":0,"docs":{},"t":{"df":1,"docs":{"33":{"tf":1.0}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"65":{"tf":1.0},"82":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":8,"docs":{"10":{"tf":1.0},"11":{"tf":2.23606797749979},"12":{"tf":1.7320508075688772},"16":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"3":{"tf":2.23606797749979},"4":{"tf":1.0},"5":{"tf":1.4142135623730951}}}}},"s":{"df":0,"docs":{},"e":{"df":10,"docs":{"106":{"tf":1.4142135623730951},"14":{"tf":1.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"19":{"tf":1.0},"68":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"83":{"tf":1.0},"93":{"tf":1.0}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"69":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"s":{"df":3,"docs":{"76":{"tf":1.0},"78":{"tf":1.0},"93":{"tf":1.0}}}}},"d":{"df":2,"docs":{"11":{"tf":1.0},"12":{"tf":1.0}}},"df":8,"docs":{"10":{"tf":1.0},"11":{"tf":1.4142135623730951},"33":{"tf":1.0},"56":{"tf":2.8284271247461903},"57":{"tf":2.6457513110645907},"58":{"tf":1.7320508075688772},"69":{"tf":2.449489742783178},"85":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":2,"docs":{"60":{"tf":1.0},"99":{"tf":1.0}}}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"39":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"105":{"tf":1.0},"34":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":1.4142135623730951},"71":{"tf":1.0}}}}},"df":0,"docs":{}}}},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"97":{"tf":2.0}}}}}}},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"5":{"tf":2.449489742783178}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"15":{"tf":1.0}}}},"c":{"df":0,"docs":{},"k":{"df":7,"docs":{"105":{"tf":1.0},"19":{"tf":1.0},"37":{"tf":1.0},"44":{"tf":1.7320508075688772},"5":{"tf":1.0},"69":{"tf":1.4142135623730951},"92":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"72":{"tf":1.0},"81":{"tf":1.0}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"97":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":3,"docs":{"26":{"tf":1.0},"27":{"tf":1.0},"78":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"_":{"0":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"106":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"106":{"tf":1.0}}},"1":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"106":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"106":{"tf":1.0}}},"2":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"106":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"2":{"(":{"1":{"8":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":2,"docs":{"106":{"tf":4.69041575982343},"5":{"tf":2.23606797749979}}}}}},"i":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"15":{"tf":1.0},"18":{"tf":2.449489742783178},"76":{"tf":1.0}}}}}},"df":0,"docs":{}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"105":{"tf":1.0},"5":{"tf":1.4142135623730951}}}},"p":{"df":1,"docs":{"31":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":8,"docs":{"11":{"tf":2.449489742783178},"12":{"tf":1.7320508075688772},"13":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"22":{"tf":1.0}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":2,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"82":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"44":{"tf":2.8284271247461903},"48":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.4142135623730951}}}},"o":{"d":{"df":0,"docs":{},"e":{"df":10,"docs":{"1":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"33":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0},"96":{"tf":1.0}}}},"df":1,"docs":{"6":{"tf":1.0}},"l":{"[":{"df":0,"docs":{},"k":{"df":2,"docs":{"60":{"tf":1.4142135623730951},"73":{"tf":1.0}}}},"df":15,"docs":{"33":{"tf":1.4142135623730951},"37":{"tf":2.0},"44":{"tf":1.4142135623730951},"56":{"tf":2.8284271247461903},"57":{"tf":3.0},"58":{"tf":3.7416573867739413},"60":{"tf":2.449489742783178},"67":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":2.449489742783178},"83":{"tf":1.4142135623730951},"86":{"tf":1.4142135623730951},"87":{"tf":1.4142135623730951},"88":{"tf":1.4142135623730951},"96":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"81":{"tf":1.0}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"n":{"df":25,"docs":{"14":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":2.23606797749979},"34":{"tf":1.0},"37":{"tf":2.0},"52":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.7320508075688772},"57":{"tf":2.449489742783178},"58":{"tf":1.4142135623730951},"60":{"tf":4.123105625617661},"64":{"tf":1.0},"67":{"tf":2.449489742783178},"68":{"tf":2.6457513110645907},"71":{"tf":1.4142135623730951},"73":{"tf":3.1622776601683795},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":2.449489742783178},"86":{"tf":2.0},"87":{"tf":2.0},"88":{"tf":1.0},"96":{"tf":1.7320508075688772},"98":{"tf":1.4142135623730951},"99":{"tf":2.0}}}}}},"m":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"106":{"tf":1.0},"83":{"tf":2.0},"87":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":3,"docs":{"103":{"tf":1.0},"106":{"tf":1.0},"109":{"tf":1.4142135623730951}}},"m":{"a":{"df":2,"docs":{"23":{"tf":1.0},"25":{"tf":1.0}},"n":{"d":{"df":7,"docs":{"11":{"tf":1.0},"12":{"tf":1.0},"15":{"tf":1.7320508075688772},"17":{"tf":1.0},"18":{"tf":1.0},"21":{"tf":1.7320508075688772},"22":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"106":{"tf":1.0},"24":{"tf":1.0},"37":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":2,"docs":{"78":{"tf":1.0},"81":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"62":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.7320508075688772}}}}}}},"t":{"df":2,"docs":{"83":{"tf":1.0},"84":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":18,"docs":{"10":{"tf":1.0},"105":{"tf":2.0},"106":{"tf":2.0},"113":{"tf":1.0},"114":{"tf":1.4142135623730951},"14":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.0},"4":{"tf":1.0},"43":{"tf":1.0},"6":{"tf":1.0},"71":{"tf":1.0},"9":{"tf":1.4142135623730951},"90":{"tf":1.4142135623730951}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"72":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"43":{"tf":1.0}}},"x":{"df":7,"docs":{"0":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"56":{"tf":1.0},"65":{"tf":1.0},"80":{"tf":1.0}}}},"i":{"c":{"df":2,"docs":{"34":{"tf":1.0},"73":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"60":{"tf":1.4142135623730951},"69":{"tf":2.23606797749979},"70":{"tf":1.0}}},"s":{"df":2,"docs":{"54":{"tf":1.0},"80":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":6,"docs":{"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"25":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"27":{"tf":1.7320508075688772},"28":{"tf":1.7320508075688772}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"15":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"t":{"df":16,"docs":{"105":{"tf":1.0},"106":{"tf":2.449489742783178},"14":{"tf":2.0},"15":{"tf":2.23606797749979},"16":{"tf":1.0},"18":{"tf":2.449489742783178},"23":{"tf":1.0},"34":{"tf":1.0},"37":{"tf":1.0},"5":{"tf":1.0},"56":{"tf":1.0},"60":{"tf":1.0},"68":{"tf":1.0},"73":{"tf":1.0},"92":{"tf":1.0},"96":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":1,"docs":{"16":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}},"n":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":3,"docs":{"79":{"tf":1.0},"81":{"tf":1.0},"87":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"35":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"37":{"tf":1.0},"56":{"tf":1.0},"66":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"56":{"tf":1.0}}}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"10":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"18":{"tf":1.0}}}}},"j":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"76":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}}}},"n":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"101":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"(":{"(":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"40":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"80":{"tf":1.4142135623730951},"92":{"tf":1.0}}}}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":9,"docs":{"116":{"tf":1.0},"15":{"tf":1.4142135623730951},"37":{"tf":1.0},"60":{"tf":1.7320508075688772},"61":{"tf":1.0},"67":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"87":{"tf":1.0}}}}},"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"101":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{"_":{"b":{"df":0,"docs":{},"i":{"df":1,"docs":{"34":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"_":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"64":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":12,"docs":{"114":{"tf":1.0},"115":{"tf":1.4142135623730951},"116":{"tf":1.0},"32":{"tf":1.0},"35":{"tf":1.0},"37":{"tf":1.7320508075688772},"57":{"tf":1.0},"58":{"tf":2.23606797749979},"60":{"tf":1.0},"67":{"tf":1.4142135623730951},"68":{"tf":1.0},"99":{"tf":1.0}},"t":{"df":26,"docs":{"101":{"tf":2.23606797749979},"115":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"15":{"tf":1.0},"23":{"tf":1.0},"34":{"tf":1.0},"37":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772},"58":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951},"64":{"tf":1.7320508075688772},"67":{"tf":2.449489742783178},"68":{"tf":2.23606797749979},"73":{"tf":1.4142135623730951},"78":{"tf":1.0},"79":{"tf":1.0},"83":{"tf":1.7320508075688772},"92":{"tf":1.4142135623730951},"94":{"tf":1.0},"99":{"tf":1.0}}}}}},"df":6,"docs":{"101":{"tf":2.23606797749979},"102":{"tf":1.0},"64":{"tf":2.0},"67":{"tf":1.0},"68":{"tf":3.1622776601683795},"94":{"tf":1.4142135623730951}},"u":{"c":{"df":0,"docs":{},"t":{"df":6,"docs":{"38":{"tf":1.4142135623730951},"80":{"tf":1.4142135623730951},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.7320508075688772},"97":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"85":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":12,"docs":{"117":{"tf":1.0},"18":{"tf":1.7320508075688772},"21":{"tf":1.0},"23":{"tf":2.0},"24":{"tf":2.0},"25":{"tf":1.7320508075688772},"26":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"5":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"80":{"tf":1.0},"81":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"21":{"tf":1.0},"79":{"tf":1.0}}}},"x":{"df":0,"docs":{},"t":{"df":8,"docs":{"61":{"tf":1.4142135623730951},"68":{"tf":1.0},"71":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"88":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":4,"docs":{"0":{"tf":1.0},"106":{"tf":3.0},"44":{"tf":1.0},"70":{"tf":1.0}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"17":{"tf":1.7320508075688772},"18":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"1":{"tf":1.0},"7":{"tf":1.0}}}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"93":{"tf":1.7320508075688772}}}},"r":{"df":0,"docs":{},"s":{"df":2,"docs":{"73":{"tf":1.0},"93":{"tf":1.0}}},"t":{"df":5,"docs":{"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"73":{"tf":1.0},"78":{"tf":1.0},"93":{"tf":1.7320508075688772}}}}}}},"p":{"df":0,"docs":{},"i":{"df":4,"docs":{"101":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":1.0},"73":{"tf":1.0}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"5":{"tf":1.0},"70":{"tf":1.0},"92":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"36":{"tf":1.0},"40":{"tf":2.449489742783178}}}}}},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"18":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"17":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"u":{"=":{"df":0,"docs":{},"n":{"df":1,"docs":{"11":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"'":{"df":1,"docs":{"16":{"tf":1.0}}},"df":6,"docs":{"105":{"tf":1.0},"106":{"tf":1.7320508075688772},"11":{"tf":1.0},"16":{"tf":1.7320508075688772},"5":{"tf":1.7320508075688772},"9":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":17,"docs":{"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"16":{"tf":2.23606797749979},"17":{"tf":1.4142135623730951},"18":{"tf":1.7320508075688772},"3":{"tf":1.0},"34":{"tf":1.4142135623730951},"43":{"tf":1.0},"5":{"tf":1.7320508075688772},"60":{"tf":1.0},"64":{"tf":2.0},"67":{"tf":1.0},"68":{"tf":1.7320508075688772},"69":{"tf":1.0},"73":{"tf":1.0},"85":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"v":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"23":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":1,"docs":{"23":{"tf":2.6457513110645907}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":13,"docs":{"14":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.0},"43":{"tf":1.0},"56":{"tf":1.0},"60":{"tf":1.0},"68":{"tf":1.4142135623730951},"71":{"tf":1.0},"81":{"tf":1.0},"84":{"tf":1.0},"9":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"5":{"tf":1.4142135623730951}}}}}}},"y":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"106":{"tf":1.0}}}},"df":0,"docs":{}}},"d":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.0}}}}}}},"a":{"df":0,"docs":{},"t":{"a":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"105":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":9,"docs":{"105":{"tf":1.0},"117":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"5":{"tf":2.0},"65":{"tf":1.0},"85":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":9,"docs":{"106":{"tf":1.7320508075688772},"15":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"33":{"tf":1.0},"85":{"tf":1.0}},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":4,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"79":{"tf":1.0},"94":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"18":{"tf":1.0},"23":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"l":{"a":{"df":0,"docs":{},"r":{"df":16,"docs":{"34":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"40":{"tf":1.0},"41":{"tf":1.0},"43":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":2.23606797749979},"60":{"tf":2.0},"61":{"tf":1.0},"63":{"tf":1.0},"67":{"tf":1.0},"71":{"tf":1.7320508075688772},"73":{"tf":2.8284271247461903},"85":{"tf":1.4142135623730951},"86":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"r":{"(":{"a":{"df":2,"docs":{"13":{"tf":1.0},"36":{"tf":1.0}}},"df":0,"docs":{}},"df":2,"docs":{"13":{"tf":1.0},"36":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"13":{"tf":1.0},"36":{"tf":1.0},"44":{"tf":1.0}}}}}}}}},"d":{"df":0,"docs":{},"u":{"c":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":1,"docs":{"69":{"tf":1.0}},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":16,"docs":{"106":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":2.8284271247461903},"24":{"tf":1.4142135623730951},"25":{"tf":1.7320508075688772},"26":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"30":{"tf":1.0},"31":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.4142135623730951},"5":{"tf":1.0},"65":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":27,"docs":{"100":{"tf":1.0},"101":{"tf":1.0},"105":{"tf":1.0},"117":{"tf":1.4142135623730951},"118":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":2.23606797749979},"34":{"tf":2.449489742783178},"36":{"tf":1.0},"37":{"tf":1.4142135623730951},"38":{"tf":1.0},"40":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.4142135623730951},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":2.6457513110645907},"68":{"tf":1.4142135623730951},"72":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.4142135623730951},"85":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"90":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"48":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.7320508075688772},"98":{"tf":1.0}}}}}}},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":15,"docs":{"117":{"tf":1.0},"118":{"tf":2.449489742783178},"13":{"tf":1.0},"15":{"tf":1.4142135623730951},"20":{"tf":1.0},"23":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"36":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"44":{"tf":1.0},"56":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"98":{"tf":2.0}},"e":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"23":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"64":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"58":{"tf":1.0}}}}}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":3,"docs":{"68":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":7,"docs":{"10":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"56":{"tf":1.0},"57":{"tf":1.0},"61":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0}}},"df":0,"docs":{}}}},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"5":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":3,"docs":{"0":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.0}}}}},"k":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"10":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"64":{"tf":1.0},"65":{"tf":1.0},"69":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":9,"docs":{"106":{"tf":1.0},"17":{"tf":1.0},"34":{"tf":1.0},"37":{"tf":1.0},"5":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"68":{"tf":1.0},"71":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"71":{"tf":1.0}}}}}}}},"v":{"df":1,"docs":{"10":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":3,"docs":{"10":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0}}}}}},"i":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"59":{"tf":1.0}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":14,"docs":{"106":{"tf":1.4142135623730951},"13":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"33":{"tf":1.4142135623730951},"61":{"tf":1.0},"73":{"tf":1.4142135623730951},"85":{"tf":1.0},"88":{"tf":1.0},"97":{"tf":1.4142135623730951},"98":{"tf":1.0}}}}}},"r":{"df":6,"docs":{"15":{"tf":1.0},"24":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951}},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":3,"docs":{"17":{"tf":1.0},"20":{"tf":1.0},"83":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":10,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"17":{"tf":1.0},"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"33":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"s":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"70":{"tf":1.0}}}}}}},"df":0,"docs":{},"j":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"76":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":2,"docs":{"62":{"tf":1.0},"77":{"tf":1.7320508075688772}}}}}},"o":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":6,"docs":{"2":{"tf":1.0},"21":{"tf":1.0},"31":{"tf":1.0},"59":{"tf":1.4142135623730951},"79":{"tf":1.0},"8":{"tf":1.0}}}}}}}},"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"6":{"tf":1.0}}}}},"df":0,"docs":{}},"n":{"'":{"df":0,"docs":{},"t":{"df":1,"docs":{"106":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":3,"docs":{"106":{"tf":1.0},"60":{"tf":1.0},"64":{"tf":1.0}}}},"u":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"62":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"(":{"3":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"n":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"73":{"tf":1.0}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"5":{"tf":1.0}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":1,"docs":{"106":{"tf":1.7320508075688772}}}},"r":{"df":0,"docs":{},"e":{"df":3,"docs":{"73":{"tf":1.0},"94":{"tf":1.0},"99":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":3,"docs":{"23":{"tf":1.0},"36":{"tf":1.4142135623730951},"81":{"tf":2.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"g":{"df":4,"docs":{"105":{"tf":1.0},"34":{"tf":1.0},"62":{"tf":1.7320508075688772},"64":{"tf":1.0}}}},"6":{"a":{"6":{"df":0,"docs":{},"f":{"d":{"6":{"3":{"d":{"8":{"6":{"4":{"c":{"7":{"3":{"4":{"d":{"6":{"a":{"4":{"d":{"df":0,"docs":{},"f":{"4":{"9":{"8":{"8":{"df":0,"docs":{},"f":{"7":{"3":{"3":{"7":{"3":{"8":{"7":{"9":{"0":{"2":{"6":{"2":{"a":{"df":0,"docs":{},"f":{"9":{"c":{"7":{"b":{"0":{"1":{"4":{"a":{"1":{"c":{"0":{"3":{"6":{"6":{"7":{"9":{"b":{"a":{"df":0,"docs":{},"f":{"1":{"1":{"2":{"5":{"df":1,"docs":{"106":{"tf":2.23606797749979}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"c":{"df":0,"docs":{},"h":{"df":15,"docs":{"106":{"tf":1.7320508075688772},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.7320508075688772},"14":{"tf":1.0},"18":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":1.4142135623730951},"40":{"tf":1.7320508075688772},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"81":{"tf":1.0},"85":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"82":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"i":{"df":2,"docs":{"17":{"tf":1.0},"73":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"10":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0}}}}}}}},"df":1,"docs":{"67":{"tf":2.0}},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"82":{"tf":1.4142135623730951},"92":{"tf":1.0},"94":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"i":{"df":2,"docs":{"0":{"tf":1.0},"15":{"tf":1.0}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"112":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"62":{"tf":1.0}}}}},"df":18,"docs":{"117":{"tf":1.0},"23":{"tf":1.0},"41":{"tf":1.0},"51":{"tf":1.7320508075688772},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":2.8284271247461903},"80":{"tf":1.4142135623730951},"81":{"tf":1.7320508075688772},"82":{"tf":1.0},"83":{"tf":1.0},"88":{"tf":1.0},"93":{"tf":1.7320508075688772}}}}}}},"f":{"df":1,"docs":{"105":{"tf":1.0}}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":5,"docs":{"118":{"tf":1.0},"69":{"tf":1.7320508075688772},"70":{"tf":1.0},"80":{"tf":1.4142135623730951},"94":{"tf":1.0}}}}}},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":10,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"106":{"tf":1.0},"11":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"19":{"tf":1.0}}}},"df":0,"docs":{}}}}},"d":{"df":4,"docs":{"107":{"tf":1.0},"44":{"tf":1.7320508075688772},"69":{"tf":1.0},"94":{"tf":1.0}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"c":{"df":2,"docs":{"116":{"tf":1.4142135623730951},"34":{"tf":1.0}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":1,"docs":{"18":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"20":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"20":{"tf":1.0},"68":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"m":{"df":5,"docs":{"101":{"tf":1.0},"69":{"tf":1.7320508075688772},"70":{"tf":1.0},"71":{"tf":1.0},"85":{"tf":3.0}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"85":{"tf":1.4142135623730951}},"e":{":":{":":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"1":{"df":1,"docs":{"85":{"tf":1.4142135623730951}}},"2":{"df":1,"docs":{"85":{"tf":1.0}}},"3":{"(":{"3":{"df":1,"docs":{"85":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"4":{"(":{"1":{"df":1,"docs":{"85":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"v":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"16":{"tf":1.0},"5":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"73":{"tf":1.0},"82":{"tf":1.0}}}}}}}},"q":{"df":2,"docs":{"102":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951}},"u":{"a":{"df":0,"docs":{},"l":{"df":5,"docs":{"20":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.4142135623730951},"77":{"tf":2.0},"78":{"tf":1.0}},"s":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"67":{"tf":1.4142135623730951}}},"y":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"(":{"1":{"6":{"df":1,"docs":{"67":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":7,"docs":{"22":{"tf":1.0},"71":{"tf":1.0},"77":{"tf":2.23606797749979},"78":{"tf":1.4142135623730951},"81":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":3,"docs":{"83":{"tf":1.0},"84":{"tf":1.0},"97":{"tf":1.0}}}}}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":9,"docs":{"10":{"tf":1.0},"106":{"tf":1.7320508075688772},"112":{"tf":1.4142135623730951},"15":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"106":{"tf":2.0}}}}}},"t":{"c":{"df":1,"docs":{"81":{"tf":1.0}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"'":{"df":1,"docs":{"17":{"tf":1.0}}},"df":4,"docs":{"15":{"tf":2.23606797749979},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.0}}}}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":16,"docs":{"101":{"tf":1.0},"58":{"tf":1.0},"61":{"tf":1.4142135623730951},"65":{"tf":1.0},"66":{"tf":1.4142135623730951},"67":{"tf":2.0},"68":{"tf":1.4142135623730951},"70":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.4142135623730951},"76":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"92":{"tf":1.4142135623730951},"94":{"tf":1.4142135623730951},"96":{"tf":1.7320508075688772}}}},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"60":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":6,"docs":{"15":{"tf":1.0},"33":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.4142135623730951},"64":{"tf":1.0},"99":{"tf":1.0}}},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"60":{"tf":1.0}}}},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"61":{"tf":1.0},"64":{"tf":1.4142135623730951}}}}}}}}},"m":{"df":3,"docs":{"108":{"tf":1.4142135623730951},"15":{"tf":1.0},"17":{"tf":1.7320508075688772}}}},"x":{"a":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"69":{"tf":1.7320508075688772},"78":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"18":{"tf":1.0},"69":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":36,"docs":{"105":{"tf":1.4142135623730951},"106":{"tf":1.4142135623730951},"15":{"tf":2.0},"16":{"tf":2.23606797749979},"17":{"tf":2.23606797749979},"18":{"tf":1.7320508075688772},"19":{"tf":1.4142135623730951},"20":{"tf":2.23606797749979},"34":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"42":{"tf":1.0},"56":{"tf":1.4142135623730951},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.7320508075688772},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.4142135623730951},"69":{"tf":1.0},"70":{"tf":1.4142135623730951},"72":{"tf":1.0},"77":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.7320508075688772},"91":{"tf":1.0},"92":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.4142135623730951}}}}}},"c":{"df":0,"docs":{},"e":{"df":2,"docs":{"17":{"tf":1.0},"18":{"tf":1.0}},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"40":{"tf":1.0},"52":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"77":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":14,"docs":{"0":{"tf":1.0},"106":{"tf":3.0},"14":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"31":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"40":{"tf":1.4142135623730951},"42":{"tf":1.0},"5":{"tf":2.23606797749979},"56":{"tf":1.0},"9":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"106":{"tf":1.0}}}}}}},"df":0,"docs":{}},"h":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"69":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"6":{"tf":1.0},"78":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":8,"docs":{"18":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":1.0},"73":{"tf":1.4142135623730951},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.4142135623730951},"94":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"5":{"tf":1.0},"6":{"tf":1.0}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"106":{"tf":1.0}}}}}}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"114":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":5,"docs":{"34":{"tf":1.0},"43":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.0},"71":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"67":{"tf":1.0},"77":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":5,"docs":{"62":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.4142135623730951},"78":{"tf":1.0},"83":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"t":{"df":6,"docs":{"17":{"tf":1.0},"18":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951}}}},"s":{"df":4,"docs":{"16":{"tf":1.0},"20":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951}}}},"r":{"df":14,"docs":{"101":{"tf":2.6457513110645907},"102":{"tf":2.0},"34":{"tf":1.7320508075688772},"64":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.0},"71":{"tf":1.4142135623730951},"73":{"tf":2.6457513110645907},"74":{"tf":2.6457513110645907},"83":{"tf":2.449489742783178},"93":{"tf":2.0},"96":{"tf":1.0},"97":{"tf":1.0},"99":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":21,"docs":{"101":{"tf":1.0},"34":{"tf":2.23606797749979},"48":{"tf":1.4142135623730951},"50":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"56":{"tf":1.4142135623730951},"58":{"tf":1.0},"60":{"tf":1.4142135623730951},"61":{"tf":2.449489742783178},"62":{"tf":2.23606797749979},"64":{"tf":2.8284271247461903},"65":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"67":{"tf":3.3166247903554},"69":{"tf":1.0},"71":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"78":{"tf":1.0},"82":{"tf":1.7320508075688772},"83":{"tf":3.605551275463989}}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":6,"docs":{"105":{"tf":1.0},"106":{"tf":1.7320508075688772},"115":{"tf":1.0},"23":{"tf":1.0},"33":{"tf":1.0},"38":{"tf":1.0}}}}},"r":{"a":{"df":1,"docs":{"17":{"tf":1.0}}},"df":0,"docs":{}}}}},"f":{"(":{"(":{"1":{"df":1,"docs":{"69":{"tf":1.0}}},"6":{"df":1,"docs":{"69":{"tf":1.0}}},"df":0,"docs":{}},"0":{"df":1,"docs":{"67":{"tf":1.7320508075688772}}},"1":{"df":1,"docs":{"67":{"tf":1.7320508075688772}}},"7":{"df":1,"docs":{"64":{"tf":1.0}}},"8":{"df":1,"docs":{"70":{"tf":1.0}}},"df":0,"docs":{},"i":{"df":1,"docs":{"70":{"tf":1.0}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"67":{"tf":2.0}}}}}}}}},"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{":":{":":{"<":{"b":{"df":0,"docs":{},"n":{"2":{"5":{"4":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"14":{"tf":1.0},"60":{"tf":1.0},"98":{"tf":1.0}}}},"l":{"df":0,"docs":{},"s":{"df":3,"docs":{"23":{"tf":2.0},"33":{"tf":1.0},"66":{"tf":1.4142135623730951}}}},"r":{"df":1,"docs":{"17":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"5":{"tf":1.0}}}}},"df":9,"docs":{"105":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"23":{"tf":1.0},"64":{"tf":1.4142135623730951},"67":{"tf":2.449489742783178},"69":{"tf":1.0},"70":{"tf":1.0},"83":{"tf":2.0}},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"1":{"tf":1.0},"10":{"tf":1.0},"11":{"tf":2.0},"61":{"tf":1.0},"7":{"tf":1.0}}}}}},"df":11,"docs":{"60":{"tf":1.0},"69":{"tf":1.4142135623730951},"71":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":2.6457513110645907},"77":{"tf":1.4142135623730951},"78":{"tf":2.23606797749979},"80":{"tf":1.0},"82":{"tf":1.7320508075688772},"93":{"tf":2.0},"96":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"107":{"tf":1.0},"108":{"tf":1.0}}}},"w":{"df":3,"docs":{"109":{"tf":1.0},"18":{"tf":1.0},"39":{"tf":1.0}}}},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"105":{"tf":1.0}}}},"i":{"b":{"(":{"df":0,"docs":{},"i":{"df":1,"docs":{"65":{"tf":1.4142135623730951}}}},"df":1,"docs":{"65":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"a":{"c":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"106":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"'":{"df":1,"docs":{"95":{"tf":1.0}}},"df":29,"docs":{"110":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":2.449489742783178},"17":{"tf":1.4142135623730951},"18":{"tf":3.0},"20":{"tf":2.23606797749979},"23":{"tf":2.0},"24":{"tf":1.7320508075688772},"25":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"27":{"tf":1.7320508075688772},"28":{"tf":1.7320508075688772},"30":{"tf":1.7320508075688772},"31":{"tf":1.7320508075688772},"41":{"tf":1.0},"51":{"tf":1.7320508075688772},"60":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.4142135623730951},"77":{"tf":1.0},"78":{"tf":4.0},"80":{"tf":1.0},"82":{"tf":1.0},"88":{"tf":1.0},"93":{"tf":2.0},"95":{"tf":1.0}}},"df":0,"docs":{}}},"f":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"67":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"e":{"df":17,"docs":{"105":{"tf":1.0},"118":{"tf":1.7320508075688772},"14":{"tf":1.7320508075688772},"15":{"tf":1.7320508075688772},"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"22":{"tf":2.449489742783178},"23":{"tf":3.872983346207417},"24":{"tf":2.6457513110645907},"25":{"tf":2.449489742783178},"26":{"tf":2.23606797749979},"27":{"tf":2.23606797749979},"29":{"tf":2.0},"30":{"tf":2.0},"31":{"tf":1.7320508075688772},"33":{"tf":1.0},"9":{"tf":1.0}}},"l":{"df":1,"docs":{"20":{"tf":1.0}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"22":{"tf":1.0}}}}}},"n":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"106":{"tf":1.7320508075688772},"5":{"tf":1.0},"64":{"tf":1.0}}}},"d":{"df":7,"docs":{"1":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":1,"docs":{"70":{"tf":1.4142135623730951}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"78":{"tf":2.23606797749979}}}}},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":20,"docs":{"105":{"tf":1.0},"106":{"tf":1.0},"115":{"tf":1.0},"13":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":2.0},"22":{"tf":1.0},"23":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"5":{"tf":1.0},"60":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.4142135623730951},"78":{"tf":1.0},"83":{"tf":1.0},"97":{"tf":1.0},"99":{"tf":1.0}}}}},"t":{"df":2,"docs":{"77":{"tf":1.7320508075688772},"87":{"tf":1.4142135623730951}}},"x":{"df":23,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"33":{"tf":1.4142135623730951},"37":{"tf":1.7320508075688772},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":2.0},"60":{"tf":2.6457513110645907},"68":{"tf":1.0},"73":{"tf":1.4142135623730951},"77":{"tf":1.0},"78":{"tf":1.0},"86":{"tf":2.23606797749979},"87":{"tf":1.4142135623730951},"88":{"tf":1.4142135623730951},"98":{"tf":1.0}}}},"l":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"106":{"tf":1.0},"56":{"tf":1.4142135623730951},"58":{"tf":2.449489742783178}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":4,"docs":{"0":{"tf":1.0},"109":{"tf":1.0},"61":{"tf":1.0},"67":{"tf":1.0}}}},"df":0,"docs":{}}}}},"n":{"df":4,"docs":{"105":{"tf":1.0},"106":{"tf":1.0},"16":{"tf":1.4142135623730951},"5":{"tf":1.4142135623730951}}},"o":{"df":0,"docs":{},"l":{"d":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"67":{"tf":1.4142135623730951}}}}}}}}},"df":1,"docs":{"67":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"(":{".":{".":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"0":{"df":1,"docs":{"67":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"67":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":1,"docs":{"67":{"tf":1.4142135623730951}},"s":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":35,"docs":{"10":{"tf":1.4142135623730951},"101":{"tf":1.0},"102":{"tf":1.0},"106":{"tf":1.4142135623730951},"118":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":1.4142135623730951},"69":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951},"79":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"85":{"tf":1.0},"90":{"tf":1.4142135623730951},"96":{"tf":1.0}}}}}},"o":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"(":{"1":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"106":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":1,"docs":{"106":{"tf":1.0}}},"r":{"c":{"df":6,"docs":{"15":{"tf":1.0},"17":{"tf":1.0},"23":{"tf":1.4142135623730951},"34":{"tf":1.0},"62":{"tf":1.0},"67":{"tf":1.0}}},"df":0,"docs":{},"k":{"df":1,"docs":{"111":{"tf":1.0}}},"m":{"df":5,"docs":{"34":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"82":{"tf":1.0}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":6,"docs":{"1":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"23":{"tf":1.0},"7":{"tf":1.0},"82":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"67":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"h":{"df":3,"docs":{"16":{"tf":1.4142135623730951},"18":{"tf":1.0},"33":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":1,"docs":{"16":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":8,"docs":{"60":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.7320508075688772},"74":{"tf":1.4142135623730951},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0},"93":{"tf":1.7320508075688772}}}}}}}},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"107":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"d":{"df":3,"docs":{"103":{"tf":1.7320508075688772},"104":{"tf":1.0},"108":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":5,"docs":{"106":{"tf":1.0},"109":{"tf":1.0},"16":{"tf":1.0},"34":{"tf":1.0},"61":{"tf":1.0}},"i":{"df":2,"docs":{"34":{"tf":1.0},"67":{"tf":1.0}}}}},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.0}}}}}}},"df":46,"docs":{"100":{"tf":1.0},"105":{"tf":1.4142135623730951},"115":{"tf":1.0},"13":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":2.23606797749979},"36":{"tf":1.4142135623730951},"37":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"43":{"tf":1.4142135623730951},"44":{"tf":2.0},"45":{"tf":1.4142135623730951},"47":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":2.0},"60":{"tf":2.23606797749979},"61":{"tf":1.7320508075688772},"62":{"tf":1.4142135623730951},"63":{"tf":2.0},"64":{"tf":2.23606797749979},"67":{"tf":2.23606797749979},"68":{"tf":3.872983346207417},"69":{"tf":1.4142135623730951},"70":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"77":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":3.3166247903554},"83":{"tf":1.4142135623730951},"84":{"tf":1.7320508075688772},"85":{"tf":1.0},"88":{"tf":1.0},"90":{"tf":1.4142135623730951},"93":{"tf":1.7320508075688772},"94":{"tf":1.7320508075688772},"96":{"tf":1.0},"98":{"tf":1.0},"99":{"tf":2.0}},"s":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"54":{"tf":1.0},"56":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.0}}}}}}}}}}}},"g":{"c":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"83":{"tf":2.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"s":{"df":1,"docs":{"16":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":30,"docs":{"0":{"tf":1.0},"105":{"tf":1.4142135623730951},"106":{"tf":1.0},"109":{"tf":1.0},"117":{"tf":1.0},"13":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":3.3166247903554},"16":{"tf":1.0},"17":{"tf":2.449489742783178},"18":{"tf":2.6457513110645907},"20":{"tf":2.0},"22":{"tf":1.4142135623730951},"23":{"tf":2.449489742783178},"24":{"tf":2.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"31":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.7320508075688772},"62":{"tf":1.0},"67":{"tf":1.4142135623730951},"71":{"tf":1.7320508075688772},"72":{"tf":1.4142135623730951},"9":{"tf":1.0},"92":{"tf":1.0},"99":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"11":{"tf":1.7320508075688772},"12":{"tf":1.4142135623730951},"16":{"tf":1.0}},"h":{"df":0,"docs":{},"u":{"b":{"df":2,"docs":{"1":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":14,"docs":{"15":{"tf":1.7320508075688772},"18":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"28":{"tf":1.0},"31":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.4142135623730951},"63":{"tf":1.0},"87":{"tf":1.4142135623730951},"9":{"tf":1.0}}}}}},"l":{"df":8,"docs":{"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"30":{"tf":1.4142135623730951},"31":{"tf":1.4142135623730951}},"o":{"b":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"64":{"tf":1.0},"68":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"o":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"18":{"tf":1.0}}}},"df":3,"docs":{"13":{"tf":1.0},"18":{"tf":1.4142135623730951},"60":{"tf":1.0}},"e":{"df":1,"docs":{"96":{"tf":1.0}}},"l":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":4,"docs":{"110":{"tf":1.0},"112":{"tf":1.0},"15":{"tf":1.0},"95":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"o":{"d":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":1,"docs":{"113":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"77":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"(":{"\"":{".":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"5":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":1,"docs":{"5":{"tf":2.0}}}}}}},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"2":{",":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":0,"docs":{},"y":{"3":{",":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":0,"docs":{},"y":{"3":{"df":1,"docs":{"11":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}}}},"df":1,"docs":{"11":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}}}},"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":1.4142135623730951}}}}}}}}}},"df":13,"docs":{"11":{"tf":1.0},"111":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"15":{"tf":2.23606797749979},"17":{"tf":1.4142135623730951},"18":{"tf":3.0},"20":{"tf":2.0},"23":{"tf":2.23606797749979},"24":{"tf":2.23606797749979},"25":{"tf":2.23606797749979},"26":{"tf":2.23606797749979},"27":{"tf":2.23606797749979},"28":{"tf":2.0}}},"df":0,"docs":{}}},"n":{"d":{"df":6,"docs":{"37":{"tf":1.0},"48":{"tf":1.0},"6":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":1.4142135623730951},"69":{"tf":1.0}},"l":{"df":1,"docs":{"106":{"tf":1.0}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":3,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"84":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"105":{"tf":1.0},"106":{"tf":2.449489742783178}}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"62":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"69":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"d":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"14":{"tf":1.0}}}}}},"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"14":{"tf":1.0},"15":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"14":{"tf":1.0},"15":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"14":{"tf":1.0},"15":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"18":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"p":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":8,"docs":{"13":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"19":{"tf":1.0},"62":{"tf":1.0}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"d":{"df":2,"docs":{"13":{"tf":1.0},"36":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"p":{"df":2,"docs":{"21":{"tf":1.4142135623730951},"33":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":8,"docs":{"106":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.4142135623730951},"34":{"tf":1.4142135623730951},"43":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"96":{"tf":1.0}}}},"x":{"df":1,"docs":{"23":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":1,"docs":{"113":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"32":{"tf":1.0},"60":{"tf":1.4142135623730951},"67":{"tf":1.0}}}}}},"n":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"71":{"tf":1.0}}}}}},"df":0,"docs":{},"t":{"df":4,"docs":{"68":{"tf":1.0},"73":{"tf":1.0},"96":{"tf":1.4142135623730951},"99":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"d":{"df":2,"docs":{"41":{"tf":1.0},"85":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"5":{"tf":2.0}}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{":":{"/":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"b":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"d":{"df":0,"docs":{},"r":{"df":3,"docs":{"11":{"tf":1.7320508075688772},"12":{"tf":1.4142135623730951},"16":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"i":{".":{"df":1,"docs":{"64":{"tf":1.0}}},"d":{"df":2,"docs":{"57":{"tf":2.0},"97":{"tf":1.0}},"e":{"a":{"df":1,"docs":{"73":{"tf":1.0}},"l":{"df":1,"docs":{"6":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":6,"docs":{"101":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.4142135623730951},"67":{"tf":2.0},"83":{"tf":1.0},"92":{"tf":1.0}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":4,"docs":{"37":{"tf":1.0},"69":{"tf":1.0},"85":{"tf":1.0},"97":{"tf":1.0}}}},"t":{"df":0,"docs":{},"y":{"(":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"44":{"tf":1.0}}}},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"64":{"tf":1.0},"69":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}}}}}},"i":{"df":1,"docs":{"18":{"tf":1.0}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"67":{"tf":1.0}}}}}}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":14,"docs":{"101":{"tf":1.0},"103":{"tf":1.0},"112":{"tf":1.0},"19":{"tf":1.0},"37":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"6":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":3.0},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"15":{"tf":1.4142135623730951},"20":{"tf":1.0},"33":{"tf":1.0}}}}}}},"n":{"c":{"df":1,"docs":{"34":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"u":{"d":{"df":6,"docs":{"36":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"80":{"tf":1.0}}},"df":0,"docs":{}}},"r":{"(":{"a":{"df":2,"docs":{"13":{"tf":1.0},"36":{"tf":1.0}}},"df":0,"docs":{}},"_":{"a":{"df":1,"docs":{"34":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":2,"docs":{"13":{"tf":1.0},"36":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"62":{"tf":1.0}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"13":{"tf":1.0},"34":{"tf":2.0},"36":{"tf":1.0},"40":{"tf":1.0},"72":{"tf":1.0}}}}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":4,"docs":{"62":{"tf":1.0},"67":{"tf":1.0},"77":{"tf":1.0},"81":{"tf":1.4142135623730951}}}},"i":{"c":{"df":3,"docs":{"36":{"tf":1.0},"37":{"tf":1.0},"77":{"tf":1.0}}},"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"u":{"df":1,"docs":{"5":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":1,"docs":{"89":{"tf":1.0}},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"78":{"tf":1.0}}}}},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"34":{"tf":1.0},"48":{"tf":1.4142135623730951},"71":{"tf":1.0},"83":{"tf":1.0}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"o":{"df":1,"docs":{"22":{"tf":1.4142135623730951}},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"106":{"tf":1.0}}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"78":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":2,"docs":{"37":{"tf":1.0},"44":{"tf":1.4142135623730951}}}}}},"df":5,"docs":{"106":{"tf":1.7320508075688772},"18":{"tf":2.0},"41":{"tf":1.0},"67":{"tf":1.7320508075688772},"69":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"33":{"tf":1.0},"73":{"tf":1.4142135623730951},"81":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"56":{"tf":1.0}}}}}}}}},"df":29,"docs":{"105":{"tf":1.0},"106":{"tf":2.449489742783178},"13":{"tf":1.0},"14":{"tf":2.0},"15":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"23":{"tf":2.0},"24":{"tf":1.0},"25":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0},"34":{"tf":1.4142135623730951},"36":{"tf":1.0},"37":{"tf":1.0},"42":{"tf":1.4142135623730951},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"54":{"tf":1.0},"56":{"tf":2.23606797749979},"57":{"tf":1.7320508075688772},"58":{"tf":1.7320508075688772},"77":{"tf":1.0},"9":{"tf":1.0}},"s":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}}}}}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":12,"docs":{"34":{"tf":1.0},"43":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"64":{"tf":1.7320508075688772},"65":{"tf":1.0},"68":{"tf":2.0},"69":{"tf":1.0},"73":{"tf":1.0},"78":{"tf":1.0},"85":{"tf":1.0},"95":{"tf":1.0}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"59":{"tf":1.0}}}}},"t":{"a":{"df":0,"docs":{},"l":{"df":8,"docs":{"10":{"tf":1.4142135623730951},"105":{"tf":1.0},"11":{"tf":2.449489742783178},"12":{"tf":1.7320508075688772},"17":{"tf":1.0},"3":{"tf":1.7320508075688772},"4":{"tf":1.0},"9":{"tf":1.4142135623730951}}},"n":{"c":{"df":1,"docs":{"118":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"117":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"a":{"d":{"df":5,"docs":{"106":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.0},"37":{"tf":1.0},"83":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"df":10,"docs":{"13":{"tf":1.7320508075688772},"20":{"tf":1.0},"33":{"tf":2.0},"34":{"tf":1.0},"36":{"tf":1.7320508075688772},"42":{"tf":1.4142135623730951},"44":{"tf":2.0},"48":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":3.7416573867739413}},"u":{"c":{"df":0,"docs":{},"t":{"df":15,"docs":{"103":{"tf":1.0},"115":{"tf":1.4142135623730951},"20":{"tf":1.0},"32":{"tf":1.0},"34":{"tf":1.0},"36":{"tf":1.0},"38":{"tf":1.0},"42":{"tf":1.7320508075688772},"44":{"tf":2.0},"48":{"tf":1.4142135623730951},"49":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951},"54":{"tf":2.0},"55":{"tf":1.7320508075688772},"56":{"tf":3.0}}}},"df":0,"docs":{}}}}},"t":{"[":{"2":{"df":1,"docs":{"81":{"tf":1.0}}},"df":0,"docs":{}},"df":23,"docs":{"102":{"tf":4.69041575982343},"33":{"tf":1.0},"34":{"tf":1.7320508075688772},"60":{"tf":1.7320508075688772},"63":{"tf":2.449489742783178},"67":{"tf":1.4142135623730951},"69":{"tf":2.8284271247461903},"70":{"tf":1.7320508075688772},"71":{"tf":1.4142135623730951},"73":{"tf":2.6457513110645907},"74":{"tf":3.0},"77":{"tf":1.7320508075688772},"78":{"tf":1.0},"80":{"tf":2.23606797749979},"81":{"tf":1.0},"82":{"tf":2.6457513110645907},"85":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":2.0},"95":{"tf":1.0},"97":{"tf":1.4142135623730951},"98":{"tf":1.7320508075688772},"99":{"tf":1.0}},"e":{"df":0,"docs":{},"g":{"df":16,"docs":{"105":{"tf":1.4142135623730951},"60":{"tf":1.0},"62":{"tf":1.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":3.0},"78":{"tf":1.7320508075688772},"80":{"tf":1.4142135623730951},"81":{"tf":1.7320508075688772},"82":{"tf":1.0},"83":{"tf":1.0},"88":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":2.0},"95":{"tf":1.0}}},"r":{"[":{"df":0,"docs":{},"k":{"df":2,"docs":{"60":{"tf":1.0},"73":{"tf":1.0}}}},"df":3,"docs":{"60":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":2.23606797749979}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"107":{"tf":1.0},"108":{"tf":1.0},"20":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":2,"docs":{"60":{"tf":1.4142135623730951},"73":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}},"n":{"df":3,"docs":{"16":{"tf":1.4142135623730951},"20":{"tf":1.0},"92":{"tf":1.0}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"19":{"tf":1.4142135623730951}}}}}}}},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"0":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"14":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"92":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":1,"docs":{"67":{"tf":1.0}}}}}}},"r":{"df":1,"docs":{"70":{"tf":1.0}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"63":{"tf":1.0},"70":{"tf":1.0}}}}}}}},"s":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"66":{"tf":1.0}}}}}}}},"a":{"df":2,"docs":{"19":{"tf":1.0},"32":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":2,"docs":{"1":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951}}}}},"t":{"'":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":2,"docs":{"3":{"tf":1.0},"57":{"tf":1.0}}}}}}}},"j":{"df":1,"docs":{"63":{"tf":1.4142135623730951}},"m":{"df":0,"docs":{},"p":{"df":1,"docs":{"44":{"tf":1.4142135623730951}},"z":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"3":{"df":1,"docs":{"10":{"tf":1.0}}},"df":2,"docs":{"22":{"tf":1.0},"23":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":2,"docs":{"20":{"tf":1.0},"44":{"tf":2.0}}}}}},"k":{"b":{"df":8,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0}}},"df":1,"docs":{"69":{"tf":2.0}},"e":{"c":{"c":{"a":{"df":0,"docs":{},"k":{"df":1,"docs":{"17":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":2,"docs":{"15":{"tf":1.0},"41":{"tf":1.0}}}},"y":{"df":10,"docs":{"15":{"tf":3.3166247903554},"16":{"tf":1.4142135623730951},"18":{"tf":3.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.4142135623730951},"25":{"tf":1.0},"26":{"tf":2.0},"27":{"tf":1.4142135623730951}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"65":{"tf":1.0}}},"df":0,"docs":{}}}}}},"i":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"60":{"tf":1.7320508075688772}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":4,"docs":{"16":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.4142135623730951},"81":{"tf":1.0}},"n":{"df":1,"docs":{"98":{"tf":1.0}}}}}},"o":{"a":{"df":0,"docs":{},"l":{"a":{"b":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"110":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"l":{"a":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":3,"docs":{"44":{"tf":2.0},"47":{"tf":1.4142135623730951},"54":{"tf":1.0}}}},"s":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"d":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"12":{"tf":1.0}}}}}},"df":3,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":1.0},"16":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"b":{"d":{"a":{"df":5,"docs":{"34":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.4142135623730951},"82":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"g":{"df":6,"docs":{"6":{"tf":1.0},"61":{"tf":2.0},"62":{"tf":1.0},"67":{"tf":1.4142135623730951},"71":{"tf":1.0},"87":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"18":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"17":{"tf":1.0},"18":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"20":{"tf":1.0},"60":{"tf":1.0},"83":{"tf":1.0}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":5,"docs":{"33":{"tf":1.7320508075688772},"37":{"tf":2.6457513110645907},"56":{"tf":1.7320508075688772},"57":{"tf":2.449489742783178},"58":{"tf":2.449489742783178}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"18":{"tf":1.0}}}}}},"df":2,"docs":{"44":{"tf":2.0},"91":{"tf":1.0}},"e":{"a":{"d":{"df":2,"docs":{"18":{"tf":1.0},"92":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":2,"docs":{"15":{"tf":1.0},"19":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":6,"docs":{"62":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":1.4142135623730951},"69":{"tf":1.0},"77":{"tf":1.0},"82":{"tf":1.0}}}},"n":{"df":3,"docs":{"105":{"tf":1.0},"34":{"tf":1.4142135623730951},"60":{"tf":1.7320508075688772}},"g":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":12,"docs":{"106":{"tf":2.8284271247461903},"18":{"tf":1.0},"20":{"tf":1.0},"60":{"tf":1.0},"67":{"tf":2.0},"69":{"tf":1.0},"70":{"tf":1.0},"81":{"tf":1.4142135623730951},"86":{"tf":1.0},"87":{"tf":1.0},"91":{"tf":1.4142135623730951},"98":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":6,"docs":{"61":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":1.4142135623730951},"78":{"tf":1.0},"81":{"tf":1.0},"93":{"tf":1.0}}}},"t":{"'":{"df":6,"docs":{"106":{"tf":1.0},"117":{"tf":1.4142135623730951},"13":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"18":{"tf":2.0},"20":{"tf":1.0}}},"<":{"df":0,"docs":{},"t":{"1":{"df":1,"docs":{"67":{"tf":1.0}}},"df":5,"docs":{"102":{"tf":3.3166247903554},"60":{"tf":1.0},"72":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.7320508075688772}},"v":{"1":{"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":10,"docs":{"101":{"tf":1.0},"113":{"tf":1.0},"22":{"tf":1.0},"32":{"tf":1.0},"37":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.0},"64":{"tf":1.0},"83":{"tf":1.0},"94":{"tf":1.0}}}}}},"i":{"b":{"df":0,"docs":{},"p":{"df":0,"docs":{},"q":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}}}},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":5,"docs":{"100":{"tf":1.0},"112":{"tf":1.0},"16":{"tf":1.4142135623730951},"33":{"tf":1.0},"5":{"tf":1.0}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"2":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"m":{"b":{"df":1,"docs":{"18":{"tf":1.7320508075688772}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"17":{"tf":1.0},"18":{"tf":1.0},"67":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"e":{"df":4,"docs":{"18":{"tf":1.0},"21":{"tf":1.4142135623730951},"40":{"tf":1.0},"83":{"tf":1.7320508075688772}}},"k":{"df":10,"docs":{"115":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"23":{"tf":1.0},"33":{"tf":2.0},"37":{"tf":1.0},"38":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":4.69041575982343},"58":{"tf":3.605551275463989}},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"23":{"tf":1.0}}},"df":0,"docs":{}}}},"df":3,"docs":{"113":{"tf":1.0},"118":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"10":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"df":5,"docs":{"105":{"tf":1.4142135623730951},"23":{"tf":1.0},"25":{"tf":1.0},"33":{"tf":1.0},"75":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":12,"docs":{"51":{"tf":1.4142135623730951},"56":{"tf":1.0},"62":{"tf":1.7320508075688772},"69":{"tf":2.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.4142135623730951},"79":{"tf":1.0},"83":{"tf":1.4142135623730951}}}}}},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":10,"docs":{"11":{"tf":1.0},"115":{"tf":1.0},"12":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"38":{"tf":1.0},"55":{"tf":1.7320508075688772},"64":{"tf":1.4142135623730951},"65":{"tf":1.0},"69":{"tf":1.7320508075688772}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}}}}},"t":{"df":1,"docs":{"47":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"22":{"tf":1.0}}}}}}}},"df":3,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.4142135623730951}},"i":{"c":{"df":3,"docs":{"5":{"tf":1.0},"62":{"tf":1.7320508075688772},"76":{"tf":1.7320508075688772}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"g":{"df":2,"docs":{"5":{"tf":1.0},"87":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"106":{"tf":1.0},"18":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"k":{"df":2,"docs":{"106":{"tf":1.0},"33":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"(":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"<":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":3,"docs":{"101":{"tf":1.0},"118":{"tf":1.0},"60":{"tf":1.7320508075688772}}}}},"p":{"df":1,"docs":{"20":{"tf":1.0}}}},"w":{"df":1,"docs":{"6":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"37":{"tf":1.0},"59":{"tf":1.0}}}}}}},"m":{"3":{"1":{"df":8,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0}}},"df":0,"docs":{}},"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":26,"docs":{"114":{"tf":1.0},"115":{"tf":2.449489742783178},"116":{"tf":1.4142135623730951},"117":{"tf":1.7320508075688772},"118":{"tf":1.0},"13":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":2.449489742783178},"34":{"tf":1.7320508075688772},"35":{"tf":1.4142135623730951},"36":{"tf":2.0},"37":{"tf":2.8284271247461903},"38":{"tf":2.6457513110645907},"39":{"tf":1.0},"40":{"tf":1.4142135623730951},"44":{"tf":2.23606797749979},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":2.23606797749979},"57":{"tf":3.0},"58":{"tf":2.0},"68":{"tf":1.0},"95":{"tf":1.4142135623730951},"96":{"tf":1.0}},"e":{"'":{"df":3,"docs":{"117":{"tf":1.0},"34":{"tf":1.0},"5":{"tf":1.0}}},"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"m":{"df":1,"docs":{"38":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":1,"docs":{"38":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"114":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"(":{"1":{"6":{"df":1,"docs":{"67":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"118":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":15,"docs":{"105":{"tf":1.0},"106":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"13":{"tf":1.0},"16":{"tf":1.4142135623730951},"20":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.4142135623730951},"35":{"tf":1.0},"36":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.0},"5":{"tf":1.4142135623730951},"56":{"tf":2.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"79":{"tf":1.0}}}}}},"k":{"df":0,"docs":{},"e":{"_":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"y":{"(":{"1":{"5":{"df":1,"docs":{"67":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"67":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":7,"docs":{"10":{"tf":1.0},"106":{"tf":1.0},"116":{"tf":1.0},"18":{"tf":1.0},"3":{"tf":1.0},"37":{"tf":1.0},"5":{"tf":1.0}}}},"n":{"a":{"df":0,"docs":{},"g":{"df":4,"docs":{"10":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0},"5":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":3,"docs":{"106":{"tf":1.7320508075688772},"61":{"tf":1.0},"87":{"tf":1.0}}},"u":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"11":{"tf":1.0},"12":{"tf":1.0}}}},"df":0,"docs":{}},"y":{"_":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{".":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"106":{"tf":2.449489742783178}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"p":{"df":2,"docs":{"58":{"tf":1.0},"88":{"tf":1.4142135623730951}}},"r":{"df":0,"docs":{},"k":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"31":{"tf":1.0}}}}}},"df":0,"docs":{}}},"t":{"c":{"df":0,"docs":{},"h":{"df":13,"docs":{"105":{"tf":1.0},"15":{"tf":1.0},"34":{"tf":1.0},"60":{"tf":1.4142135623730951},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":2.6457513110645907},"67":{"tf":1.0},"69":{"tf":4.58257569495584},"70":{"tf":3.0},"88":{"tf":1.0},"96":{"tf":1.0}}}},"df":0,"docs":{}},"x":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"98":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"18":{"tf":1.0}}}}}}}},"df":1,"docs":{"58":{"tf":2.23606797749979}},"e":{"a":{"df":0,"docs":{},"n":{"df":13,"docs":{"106":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"63":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"81":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"96":{"tf":1.0}},"t":{"df":1,"docs":{"93":{"tf":1.7320508075688772}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":3,"docs":{"105":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"106":{"tf":3.4641016151377544}}}}}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"43":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"l":{"df":1,"docs":{"105":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"3":{"1":{"df":1,"docs":{"110":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"92":{"tf":1.0}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"71":{"tf":1.0}}}}}},"n":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"98":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":3,"docs":{"0":{"tf":1.0},"13":{"tf":1.0},"6":{"tf":1.0}}}},"u":{"df":1,"docs":{"74":{"tf":1.4142135623730951}},"t":{"df":1,"docs":{"18":{"tf":1.7320508075688772}}}}},"t":{"df":2,"docs":{"2":{"tf":1.0},"8":{"tf":1.0}},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"17":{"tf":1.0}}}}}},"o":{"c":{"df":0,"docs":{},"k":{"df":7,"docs":{"106":{"tf":1.0},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"25":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"27":{"tf":1.7320508075688772},"28":{"tf":1.7320508075688772}}}},"d":{"df":2,"docs":{"33":{"tf":2.0},"34":{"tf":1.0}},"e":{"df":2,"docs":{"118":{"tf":1.4142135623730951},"23":{"tf":2.23606797749979}}},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"93":{"tf":1.7320508075688772}}}},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"6":{"tf":1.0}}}},"df":4,"docs":{"22":{"tf":1.7320508075688772},"31":{"tf":1.7320508075688772},"33":{"tf":3.605551275463989},"34":{"tf":1.4142135623730951}},"o":{"df":1,"docs":{"62":{"tf":1.0}}},"u":{"df":4,"docs":{"73":{"tf":1.0},"78":{"tf":1.4142135623730951},"93":{"tf":1.0},"95":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":2,"docs":{"118":{"tf":1.4142135623730951},"23":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"e":{"df":12,"docs":{"101":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"61":{"tf":1.4142135623730951},"65":{"tf":1.4142135623730951},"67":{"tf":1.0},"68":{"tf":1.0},"80":{"tf":1.0}}}}},"u":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"61":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":2,"docs":{"102":{"tf":1.0},"74":{"tf":1.4142135623730951}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":9,"docs":{"0":{"tf":1.0},"56":{"tf":1.4142135623730951},"6":{"tf":1.0},"62":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0}},"i":{"df":1,"docs":{"37":{"tf":1.0}}}}}}}},"t":{"df":3,"docs":{"106":{"tf":1.7320508075688772},"16":{"tf":1.7320508075688772},"5":{"tf":1.0}}}},"v":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}},"y":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"33":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"38":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"38":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"38":{"tf":2.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":20,"docs":{"33":{"tf":1.0},"34":{"tf":1.7320508075688772},"47":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":2.0},"58":{"tf":1.4142135623730951},"60":{"tf":2.449489742783178},"67":{"tf":1.0},"69":{"tf":1.0},"73":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.7320508075688772}},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":5,"docs":{"118":{"tf":2.6457513110645907},"60":{"tf":1.4142135623730951},"67":{"tf":1.0},"68":{"tf":1.0},"85":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"10":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"23":{"tf":1.0}}}}}},"df":4,"docs":{"20":{"tf":1.0},"58":{"tf":2.449489742783178},"86":{"tf":1.0},"87":{"tf":1.0}},"e":{"df":0,"docs":{},"e":{"d":{"df":23,"docs":{"10":{"tf":2.0},"106":{"tf":2.23606797749979},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.7320508075688772},"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"33":{"tf":1.0},"4":{"tf":1.0},"43":{"tf":1.0},"57":{"tf":1.7320508075688772},"60":{"tf":1.0},"67":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.7320508075688772},"81":{"tf":1.0},"90":{"tf":1.0}}},"df":0,"docs":{}},"g":{"a":{"df":0,"docs":{},"t":{"df":6,"docs":{"62":{"tf":1.0},"69":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0}}}},"df":7,"docs":{"102":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.4142135623730951},"77":{"tf":2.0},"78":{"tf":1.4142135623730951},"81":{"tf":1.0},"93":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"69":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"84":{"tf":1.0}}}}},"w":{"_":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"68":{"tf":1.0}}}}}},"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"68":{"tf":1.4142135623730951}}}}}},"df":10,"docs":{"118":{"tf":1.0},"18":{"tf":1.7320508075688772},"34":{"tf":1.0},"5":{"tf":2.449489742783178},"6":{"tf":1.0},"64":{"tf":1.4142135623730951},"65":{"tf":1.0},"68":{"tf":2.23606797749979},"69":{"tf":1.4142135623730951},"83":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}},"n":{"df":1,"docs":{"94":{"tf":1.0}}}}}},"x":{"df":0,"docs":{},"t":{"df":6,"docs":{"15":{"tf":1.0},"17":{"tf":1.0},"62":{"tf":1.0},"70":{"tf":1.7320508075688772},"71":{"tf":1.0},"83":{"tf":1.4142135623730951}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"o":{"_":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"105":{"tf":1.0},"106":{"tf":1.0}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":2,"docs":{"105":{"tf":1.0},"106":{"tf":1.0}}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"d":{"df":2,"docs":{"105":{"tf":1.0},"106":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"n":{"df":6,"docs":{"69":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":2.0},"78":{"tf":1.0},"81":{"tf":1.0},"93":{"tf":1.0}},"e":{"df":2,"docs":{"105":{"tf":1.0},"16":{"tf":1.7320508075688772}}}},"t":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"82":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":13,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":2.0},"33":{"tf":1.0},"37":{"tf":1.0},"56":{"tf":1.4142135623730951},"64":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"73":{"tf":1.0},"82":{"tf":1.0},"94":{"tf":1.0}}},"h":{"df":1,"docs":{"33":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"<":{"0":{"df":1,"docs":{"33":{"tf":1.0}}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"w":{"df":7,"docs":{"106":{"tf":2.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.7320508075688772},"34":{"tf":1.0},"5":{"tf":1.0}}}},"u":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":25,"docs":{"105":{"tf":1.7320508075688772},"106":{"tf":1.0},"113":{"tf":1.0},"15":{"tf":1.4142135623730951},"18":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"25":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"44":{"tf":1.0},"60":{"tf":1.4142135623730951},"62":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.4142135623730951},"69":{"tf":2.0},"71":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.4142135623730951},"83":{"tf":1.0},"86":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"62":{"tf":1.0}}}}}}},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"117":{"tf":1.0},"18":{"tf":1.7320508075688772},"23":{"tf":1.0},"97":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":2,"docs":{"14":{"tf":1.0},"17":{"tf":1.0}}}}}}},"c":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"79":{"tf":1.0}}}}},"df":0,"docs":{}},"d":{"d":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"58":{"tf":1.7320508075688772}}}}}},"df":1,"docs":{"58":{"tf":1.0}}},"df":0,"docs":{}},"df":3,"docs":{"105":{"tf":1.4142135623730951},"14":{"tf":1.0},"23":{"tf":1.0}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"15":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"69":{"tf":1.0}}}}},"n":{"c":{"df":6,"docs":{"14":{"tf":1.0},"18":{"tf":1.0},"33":{"tf":1.0},"54":{"tf":1.0},"83":{"tf":1.0},"99":{"tf":1.0}},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"17":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":15,"docs":{"17":{"tf":1.0},"18":{"tf":2.0},"33":{"tf":1.0},"34":{"tf":1.0},"37":{"tf":1.0},"40":{"tf":1.0},"57":{"tf":1.0},"67":{"tf":1.0},"70":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":1.4142135623730951},"80":{"tf":1.0},"81":{"tf":1.0},"86":{"tf":1.4142135623730951},"87":{"tf":1.0}}},"p":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"57":{"tf":2.449489742783178}}},"df":0,"docs":{}}},"df":1,"docs":{"74":{"tf":2.0}},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"1":{"tf":1.0},"7":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"i":{"d":{"df":6,"docs":{"116":{"tf":1.0},"33":{"tf":1.7320508075688772},"37":{"tf":1.7320508075688772},"56":{"tf":1.7320508075688772},"57":{"tf":1.0},"58":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"37":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":23,"docs":{"101":{"tf":1.4142135623730951},"102":{"tf":1.4142135623730951},"115":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":2.23606797749979},"56":{"tf":2.0},"57":{"tf":4.242640687119285},"58":{"tf":2.449489742783178},"61":{"tf":1.0},"62":{"tf":2.23606797749979},"67":{"tf":2.23606797749979},"72":{"tf":1.0},"76":{"tf":1.4142135623730951},"77":{"tf":1.7320508075688772},"78":{"tf":1.7320508075688772},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":2.0},"85":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":8,"docs":{"106":{"tf":1.4142135623730951},"14":{"tf":1.0},"15":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.4142135623730951},"30":{"tf":1.7320508075688772},"37":{"tf":1.0},"6":{"tf":1.0}}},"o":{"df":0,"docs":{},"n":{"<":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.4142135623730951}}}}}}},"df":21,"docs":{"10":{"tf":1.0},"117":{"tf":1.0},"14":{"tf":1.0},"17":{"tf":2.0},"18":{"tf":2.6457513110645907},"22":{"tf":1.4142135623730951},"23":{"tf":2.0},"24":{"tf":2.0},"25":{"tf":2.0},"26":{"tf":2.0},"27":{"tf":2.0},"28":{"tf":1.4142135623730951},"30":{"tf":1.4142135623730951},"31":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"48":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"66":{"tf":1.0},"70":{"tf":1.0},"85":{"tf":1.0}}}}}}},"r":{"d":{"df":2,"docs":{"102":{"tf":2.0},"74":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":7,"docs":{"113":{"tf":1.0},"18":{"tf":1.4142135623730951},"42":{"tf":1.0},"60":{"tf":1.4142135623730951},"62":{"tf":1.0},"67":{"tf":1.4142135623730951},"78":{"tf":1.0}}}}},"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"33":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"59":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"61":{"tf":1.0}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":4,"docs":{"44":{"tf":1.0},"66":{"tf":1.0},"77":{"tf":1.7320508075688772},"81":{"tf":1.0}}}}}}}}},"u":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"(":{"\"":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"5":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":5,"docs":{"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"19":{"tf":1.0},"37":{"tf":1.0}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{".":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"105":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"_":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"23":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":19,"docs":{"105":{"tf":1.7320508075688772},"106":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":2.0},"28":{"tf":1.0},"30":{"tf":1.0},"37":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.4142135623730951},"49":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":2.23606797749979},"57":{"tf":1.7320508075688772},"58":{"tf":1.7320508075688772},"94":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":5,"docs":{"105":{"tf":1.0},"37":{"tf":1.0},"44":{"tf":1.0},"57":{"tf":1.0},"98":{"tf":1.0}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"106":{"tf":1.7320508075688772},"37":{"tf":1.0},"55":{"tf":1.0}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":2,"docs":{"113":{"tf":1.0},"21":{"tf":1.0}}}}}},"w":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"17":{"tf":1.0},"23":{"tf":1.0}}}}}}}}}},"p":{"a":{"c":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"10":{"tf":1.0},"4":{"tf":1.0}}}},"df":1,"docs":{"18":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":1,"docs":{"106":{"tf":1.7320508075688772}}}},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"80":{"tf":1.0}}}},"n":{"df":0,"docs":{},"i":{"c":{"!":{"(":{"\"":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":1,"docs":{"95":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"92":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"76":{"tf":1.0},"84":{"tf":1.4142135623730951},"92":{"tf":2.0}}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"m":{"df":10,"docs":{"15":{"tf":2.0},"17":{"tf":1.7320508075688772},"18":{"tf":2.8284271247461903},"20":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"25":{"tf":1.7320508075688772},"26":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"62":{"tf":1.0}},"e":{"df":0,"docs":{},"t":{"df":15,"docs":{"15":{"tf":1.7320508075688772},"17":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.4142135623730951},"37":{"tf":1.0},"38":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.4142135623730951},"63":{"tf":1.7320508075688772},"69":{"tf":1.4142135623730951},"70":{"tf":1.0},"82":{"tf":1.7320508075688772}}}},"s":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"15":{"tf":2.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.8284271247461903},"20":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"33":{"tf":1.0}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":3,"docs":{"62":{"tf":1.0},"67":{"tf":1.0},"80":{"tf":1.0}}}}}}}},"s":{"df":2,"docs":{"22":{"tf":1.0},"29":{"tf":1.0}}},"t":{"df":8,"docs":{"106":{"tf":1.0},"20":{"tf":1.0},"34":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.4142135623730951},"69":{"tf":1.0}},"i":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"110":{"tf":1.0}}}},"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"78":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"s":{"df":4,"docs":{"17":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.4142135623730951},"42":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":5,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":1.0},"23":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"70":{"tf":1.0}}},"r":{"df":0,"docs":{},"n":{"df":5,"docs":{"63":{"tf":1.7320508075688772},"64":{"tf":1.7320508075688772},"65":{"tf":2.23606797749979},"69":{"tf":3.1622776601683795},"70":{"tf":3.7416573867739413}}}}}}}},"c":{"[":{"@":{"df":0,"docs":{},"p":{"c":{"df":9,"docs":{"13":{"tf":1.0},"20":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"36":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.0},"56":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"44":{"tf":1.7320508075688772}}},"df":2,"docs":{"23":{"tf":1.0},"77":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"14":{"tf":1.0},"18":{"tf":1.0},"5":{"tf":1.0},"87":{"tf":1.0},"99":{"tf":1.0}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":8,"docs":{"15":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.4142135623730951},"67":{"tf":1.0},"71":{"tf":1.0},"76":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"(":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"<":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":2,"docs":{"101":{"tf":1.0},"118":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"42":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"i":{"df":0,"docs":{},"l":{"df":35,"docs":{"102":{"tf":1.0},"105":{"tf":1.4142135623730951},"113":{"tf":1.4142135623730951},"118":{"tf":1.7320508075688772},"14":{"tf":2.23606797749979},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":2.8284271247461903},"23":{"tf":2.8284271247461903},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.7320508075688772},"34":{"tf":1.4142135623730951},"36":{"tf":1.0},"37":{"tf":1.7320508075688772},"54":{"tf":1.0},"59":{"tf":2.0},"60":{"tf":1.0},"63":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.4142135623730951},"73":{"tf":1.0},"77":{"tf":1.0},"82":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"9":{"tf":1.0}},"o":{"df":1,"docs":{"23":{"tf":1.4142135623730951}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":5,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":2.6457513110645907}},"e":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"(":{")":{".":{"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"v":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"\"":{"df":0,"docs":{},"v":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"\"":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":1,"docs":{"16":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"(":{"df":0,"docs":{},"w":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"16":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"y":{"(":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":1,"docs":{"16":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}}}},":":{":":{"<":{"b":{"df":0,"docs":{},"n":{"2":{"5":{"4":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{">":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"16":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"16":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}}}},"k":{"df":0,"docs":{},"g":{"df":1,"docs":{"10":{"tf":1.0}}}},"l":{"a":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"67":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":1,"docs":{"105":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":3,"docs":{"106":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":0,"docs":{},"y":{"3":{"df":8,"docs":{"11":{"tf":1.0},"110":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"73":{"tf":1.0}}}}}}},"u":{"df":2,"docs":{"74":{"tf":1.0},"85":{"tf":1.0}},"s":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"64":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"117":{"tf":1.0},"18":{"tf":1.0},"40":{"tf":1.0},"44":{"tf":1.0},"62":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"y":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"10":{"tf":1.0},"59":{"tf":1.4142135623730951}}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":3,"docs":{"101":{"tf":1.0},"61":{"tf":1.0},"83":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"103":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":8,"docs":{"15":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.6457513110645907},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":12,"docs":{"13":{"tf":1.0},"23":{"tf":2.0},"24":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"30":{"tf":1.0},"31":{"tf":1.0},"34":{"tf":1.0},"63":{"tf":1.0},"68":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}},"t":{"df":2,"docs":{"1":{"tf":1.0},"7":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"15":{"tf":1.0},"96":{"tf":1.0}}}}}}},"w":{"d":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"106":{"tf":1.0}}},":":{":":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{":":{":":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"2":{"5":{"4":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":1.0}}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"5":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}},"_":{"c":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"16":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"v":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"106":{"tf":1.0},"5":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"_":{"df":0,"docs":{},"u":{"3":{"2":{"df":1,"docs":{"105":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"2":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":59,"docs":{"0":{"tf":1.0},"102":{"tf":1.0},"103":{"tf":1.4142135623730951},"104":{"tf":1.0},"105":{"tf":2.449489742783178},"106":{"tf":3.605551275463989},"107":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.0},"11":{"tf":2.6457513110645907},"110":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"113":{"tf":1.7320508075688772},"114":{"tf":1.0},"12":{"tf":2.23606797749979},"13":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"15":{"tf":2.449489742783178},"16":{"tf":2.6457513110645907},"17":{"tf":1.7320508075688772},"18":{"tf":2.8284271247461903},"19":{"tf":2.0},"2":{"tf":1.0},"20":{"tf":2.449489742783178},"21":{"tf":3.4641016151377544},"22":{"tf":2.23606797749979},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"3":{"tf":1.7320508075688772},"30":{"tf":1.4142135623730951},"31":{"tf":1.4142135623730951},"32":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"35":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.4142135623730951},"39":{"tf":1.0},"43":{"tf":1.0},"5":{"tf":2.23606797749979},"54":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"6":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":1.4142135623730951},"77":{"tf":1.0},"78":{"tf":1.0},"8":{"tf":1.0},"82":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"9":{"tf":2.6457513110645907}},"v":{"df":0,"docs":{},"m":{"df":4,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":1.0},"3":{"tf":1.4142135623730951},"5":{"tf":1.4142135623730951}}}}}},"df":2,"docs":{"102":{"tf":1.0},"74":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"_":{"4":{"<":{"0":{"df":1,"docs":{"37":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"62":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":1,"docs":{"18":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":3,"docs":{"33":{"tf":1.0},"34":{"tf":1.0},"62":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"5":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"10":{"tf":1.0},"4":{"tf":1.0}}}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":4,"docs":{"16":{"tf":1.0},"17":{"tf":1.7320508075688772},"18":{"tf":1.4142135623730951},"56":{"tf":1.0}},"s":{"df":5,"docs":{"15":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.7320508075688772},"26":{"tf":1.0},"27":{"tf":1.4142135623730951}}}}}}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":2,"docs":{"51":{"tf":1.0},"78":{"tf":1.0}}}},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"22":{"tf":1.0},"29":{"tf":1.0},"92":{"tf":1.0},"94":{"tf":1.4142135623730951}}}},"v":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"18":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"118":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"6":{"tf":1.0}}}}}}}},"d":{"df":0,"docs":{},"u":{"c":{"df":1,"docs":{"17":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":10,"docs":{"106":{"tf":1.4142135623730951},"113":{"tf":1.0},"114":{"tf":1.0},"15":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"36":{"tf":1.0},"40":{"tf":2.449489742783178}}}},"df":0,"docs":{}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"16":{"tf":1.0},"3":{"tf":1.0},"5":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"f":{"df":20,"docs":{"0":{"tf":1.4142135623730951},"106":{"tf":3.1622776601683795},"109":{"tf":1.0},"112":{"tf":1.0},"13":{"tf":1.0},"14":{"tf":2.0},"15":{"tf":4.358898943540674},"16":{"tf":2.23606797749979},"17":{"tf":3.0},"18":{"tf":5.291502622129181},"20":{"tf":2.449489742783178},"23":{"tf":1.0},"24":{"tf":2.23606797749979},"25":{"tf":2.449489742783178},"26":{"tf":1.0},"28":{"tf":1.0},"3":{"tf":1.0},"5":{"tf":1.7320508075688772},"9":{"tf":1.0},"97":{"tf":1.0}}}},"p":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"61":{"tf":1.0},"67":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"100":{"tf":1.0}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"d":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"105":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"23":{"tf":1.0}}}}}}},"df":11,"docs":{"106":{"tf":2.23606797749979},"14":{"tf":1.4142135623730951},"15":{"tf":1.7320508075688772},"17":{"tf":1.0},"18":{"tf":2.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.4142135623730951},"5":{"tf":1.0}},"n":{"df":2,"docs":{"18":{"tf":1.0},"5":{"tf":1.4142135623730951}}},"r":{"'":{"df":1,"docs":{"105":{"tf":1.0}}},"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.0}}}}}}}},"df":12,"docs":{"105":{"tf":2.0},"11":{"tf":1.0},"13":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"20":{"tf":1.4142135623730951},"36":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"73":{"tf":1.0},"92":{"tf":1.0},"96":{"tf":1.4142135623730951}}}},"i":{"d":{"df":2,"docs":{"105":{"tf":1.0},"113":{"tf":1.0}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"e":{"'":{"df":1,"docs":{"18":{"tf":1.0}}},"df":1,"docs":{"111":{"tf":1.0}}}},"u":{"b":{"df":3,"docs":{"105":{"tf":1.0},"106":{"tf":1.0},"16":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"c":{"df":5,"docs":{"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":2.23606797749979},"20":{"tf":2.449489742783178},"25":{"tf":1.7320508075688772}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"20":{"tf":1.0}}}},"s":{"]":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"16":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"20":{"tf":1.0}}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":2,"docs":{"64":{"tf":1.0},"68":{"tf":1.7320508075688772}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":3,"docs":{"23":{"tf":1.0},"79":{"tf":1.0},"94":{"tf":1.0}}}}}}}},"q":{"df":1,"docs":{"77":{"tf":1.0}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":5,"docs":{"105":{"tf":1.0},"68":{"tf":3.1622776601683795},"73":{"tf":1.0},"96":{"tf":1.4142135623730951},"99":{"tf":1.4142135623730951}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"5":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"t":{"df":2,"docs":{"62":{"tf":1.0},"64":{"tf":1.0}}}}}},"r":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"18":{"tf":1.0}}},"n":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"97":{"tf":1.0}}}}},"df":0,"docs":{},"g":{"df":4,"docs":{"117":{"tf":1.0},"118":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0}}}}},"df":2,"docs":{"5":{"tf":1.0},"58":{"tf":2.23606797749979}},"e":{"a":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"107":{"tf":1.0},"108":{"tf":1.0}}}},"d":{"(":{"1":{"df":1,"docs":{"5":{"tf":1.0}}},"2":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"u":{"3":{"2":{"(":{"0":{"df":1,"docs":{"105":{"tf":1.0}}},"1":{"df":1,"docs":{"105":{"tf":1.0}}},"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"x":{"df":1,"docs":{"105":{"tf":1.0}}}},"df":0,"docs":{}}},"df":1,"docs":{"105":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":6,"docs":{"105":{"tf":1.4142135623730951},"15":{"tf":1.0},"20":{"tf":1.0},"41":{"tf":1.4142135623730951},"43":{"tf":1.7320508075688772},"5":{"tf":1.7320508075688772}}},"df":0,"docs":{},"l":{"df":2,"docs":{"106":{"tf":1.0},"19":{"tf":1.0}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":3,"docs":{"38":{"tf":1.0},"42":{"tf":1.0},"99":{"tf":1.0}}}},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"106":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":6,"docs":{"117":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":3.4641016151377544},"24":{"tf":1.0},"26":{"tf":1.0},"85":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":1,"docs":{"106":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"d":{"df":0,"docs":{},"u":{"c":{"df":5,"docs":{"113":{"tf":1.0},"114":{"tf":1.0},"115":{"tf":2.0},"23":{"tf":1.0},"5":{"tf":1.0}},"t":{"df":1,"docs":{"115":{"tf":1.0}}}},"df":0,"docs":{}}},"df":1,"docs":{"18":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":6,"docs":{"33":{"tf":1.0},"47":{"tf":1.0},"59":{"tf":1.0},"73":{"tf":2.0},"83":{"tf":1.7320508075688772},"85":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"c":{"df":4,"docs":{"100":{"tf":1.0},"56":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0}}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":3,"docs":{"21":{"tf":1.0},"22":{"tf":1.0},"29":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"70":{"tf":2.449489742783178}}}}},"g":{"df":10,"docs":{"13":{"tf":2.0},"20":{"tf":2.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"36":{"tf":2.0},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":2.23606797749979},"44":{"tf":2.6457513110645907},"56":{"tf":3.605551275463989}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":14,"docs":{"20":{"tf":1.0},"34":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"39":{"tf":1.7320508075688772},"40":{"tf":1.4142135623730951},"41":{"tf":1.7320508075688772},"42":{"tf":2.23606797749979},"43":{"tf":1.7320508075688772},"48":{"tf":1.7320508075688772},"52":{"tf":1.7320508075688772},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":2.23606797749979}}}}},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}},"l":{"df":2,"docs":{"33":{"tf":1.0},"34":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"s":{"df":2,"docs":{"2":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":1,"docs":{"37":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"77":{"tf":1.4142135623730951}}},"df":2,"docs":{"106":{"tf":1.0},"20":{"tf":1.0}}}}},"df":1,"docs":{"64":{"tf":1.0}}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"18":{"tf":1.0}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"23":{"tf":1.0}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"64":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"87":{"tf":1.7320508075688772}}}}}},"l":{"a":{"c":{"df":1,"docs":{"90":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":4,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"16":{"tf":1.0},"20":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":1,"docs":{"73":{"tf":1.0}}}},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":1,"docs":{"15":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"1":{"tf":1.0},"7":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"r":{"df":11,"docs":{"101":{"tf":1.0},"15":{"tf":1.7320508075688772},"42":{"tf":1.0},"61":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"77":{"tf":1.4142135623730951},"78":{"tf":1.0},"86":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":1,"docs":{"33":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":1,"docs":{"33":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"102":{"tf":1.0},"15":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"5":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"58":{"tf":1.0},"61":{"tf":1.0},"67":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":11,"docs":{"101":{"tf":1.0},"115":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"20":{"tf":1.0},"56":{"tf":1.0},"61":{"tf":1.0},"67":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":2.0},"78":{"tf":1.4142135623730951}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"81":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":23,"docs":{"13":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.7320508075688772},"36":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"49":{"tf":1.0},"53":{"tf":1.0},"56":{"tf":1.4142135623730951},"63":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":2.0},"68":{"tf":2.0},"72":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"84":{"tf":1.4142135623730951},"91":{"tf":1.4142135623730951},"93":{"tf":1.7320508075688772},"94":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"s":{"df":2,"docs":{"33":{"tf":1.0},"56":{"tf":1.0}}}},"v":{"df":0,"docs":{},"m":{"df":1,"docs":{"19":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":5,"docs":{"18":{"tf":1.0},"48":{"tf":1.0},"62":{"tf":1.0},"77":{"tf":1.0},"82":{"tf":1.0}}}}},"s":{"c":{"df":0,"docs":{},"v":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"v":{"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"/":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"y":{"_":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":1,"docs":{"106":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"105":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"3":{"2":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"a":{"c":{"df":1,"docs":{"105":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":5,"docs":{"104":{"tf":1.4142135623730951},"105":{"tf":1.4142135623730951},"106":{"tf":2.0},"19":{"tf":1.4142135623730951},"9":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":5,"docs":{"105":{"tf":1.0},"106":{"tf":2.449489742783178},"20":{"tf":1.0},"60":{"tf":1.0},"96":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"77":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"106":{"tf":1.7320508075688772}}}}}},"w":{"df":13,"docs":{"106":{"tf":3.3166247903554},"20":{"tf":1.4142135623730951},"34":{"tf":1.0},"37":{"tf":1.4142135623730951},"5":{"tf":1.4142135623730951},"58":{"tf":2.449489742783178},"60":{"tf":2.0},"62":{"tf":1.0},"68":{"tf":1.0},"77":{"tf":1.0},"83":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.0}}}},"s":{"df":4,"docs":{"105":{"tf":1.4142135623730951},"106":{"tf":2.6457513110645907},"12":{"tf":2.0},"9":{"tf":1.0}}},"u":{"df":0,"docs":{},"n":{"df":11,"docs":{"105":{"tf":1.7320508075688772},"106":{"tf":1.7320508075688772},"115":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":2.0},"17":{"tf":1.0},"20":{"tf":2.0},"22":{"tf":1.0},"23":{"tf":1.0},"5":{"tf":2.0},"78":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":4,"docs":{"10":{"tf":1.0},"77":{"tf":2.23606797749979},"78":{"tf":1.4142135623730951},"81":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"=":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":2,"docs":{"16":{"tf":1.0},"20":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":12,"docs":{"0":{"tf":1.0},"10":{"tf":1.4142135623730951},"105":{"tf":1.7320508075688772},"106":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"19":{"tf":1.0},"33":{"tf":1.0},"4":{"tf":1.4142135623730951},"5":{"tf":1.0},"6":{"tf":1.4142135623730951},"71":{"tf":1.0},"9":{"tf":1.0}},"f":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"11":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"r":{"df":2,"docs":{"10":{"tf":1.0},"4":{"tf":1.0}}}},"df":1,"docs":{"105":{"tf":1.0}}}}}}}},"s":{"a":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":1,"docs":{"106":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":10,"docs":{"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.7320508075688772},"38":{"tf":1.0},"48":{"tf":1.0},"56":{"tf":1.0},"60":{"tf":1.0},"69":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"71":{"tf":1.0}}}}}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"6":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"34":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":3,"docs":{"64":{"tf":1.0},"69":{"tf":1.0},"97":{"tf":1.0}}},"df":0,"docs":{}}},"p":{"2":{"5":{"6":{"df":0,"docs":{},"k":{"1":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"92":{"tf":1.0}}}}}}}},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"92":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":11,"docs":{"114":{"tf":1.0},"15":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.0},"34":{"tf":1.0},"37":{"tf":1.0},"44":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"68":{"tf":1.0},"71":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":11,"docs":{"105":{"tf":1.0},"106":{"tf":1.0},"15":{"tf":1.4142135623730951},"17":{"tf":1.0},"34":{"tf":1.0},"62":{"tf":1.7320508075688772},"64":{"tf":1.0},"65":{"tf":1.0},"68":{"tf":1.0},"71":{"tf":1.4142135623730951},"83":{"tf":1.0}},"n":{"df":1,"docs":{"88":{"tf":1.0}}}},"g":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"69":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"65":{"tf":1.0}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"100":{"tf":1.0}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":2,"docs":{"23":{"tf":1.0},"25":{"tf":1.0}}}},"df":0,"docs":{}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"64":{"tf":1.0}}},"df":0,"docs":{}}}}},"r":{"d":{"df":1,"docs":{"5":{"tf":1.4142135623730951}}},"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"5":{"tf":1.0}}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":1,"docs":{"5":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"5":{"tf":1.0}}}}}},":":{":":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"5":{"tf":1.7320508075688772}}}}}}},"t":{"df":16,"docs":{"103":{"tf":1.0},"114":{"tf":1.0},"118":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"32":{"tf":1.0},"36":{"tf":2.23606797749979},"37":{"tf":1.7320508075688772},"48":{"tf":1.0},"5":{"tf":1.0},"54":{"tf":2.0},"55":{"tf":1.0},"56":{"tf":1.0},"64":{"tf":1.0},"68":{"tf":1.4142135623730951},"99":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"s":{"df":1,"docs":{"16":{"tf":1.0}}}},"df":13,"docs":{"0":{"tf":1.0},"15":{"tf":3.1622776601683795},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":2.23606797749979},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.4142135623730951}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"103":{"tf":1.0},"14":{"tf":1.0}}}}}},"g":{"df":0,"docs":{},"n":{"(":{"df":0,"docs":{},"p":{"df":1,"docs":{"77":{"tf":1.0}}}},"df":0,"docs":{}}},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"5":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":2,"docs":{"62":{"tf":1.0},"77":{"tf":2.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"76":{"tf":1.0}}}},"w":{"df":2,"docs":{"20":{"tf":1.0},"56":{"tf":1.0}}}},"u":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"106":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}}}},"i":{"d":{"df":0,"docs":{},"e":{"df":7,"docs":{"48":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":1.4142135623730951},"69":{"tf":1.0},"82":{"tf":1.4142135623730951},"92":{"tf":1.0},"94":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":4,"docs":{"102":{"tf":1.0},"18":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0}}}}}},"df":2,"docs":{"51":{"tf":1.0},"77":{"tf":1.0}}}},"m":{"d":{"df":1,"docs":{"11":{"tf":2.0}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":3,"docs":{"3":{"tf":1.0},"33":{"tf":1.0},"71":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"64":{"tf":1.0}}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"l":{"df":5,"docs":{"34":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.4142135623730951},"44":{"tf":1.0},"73":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"37":{"tf":1.0}}}},"df":1,"docs":{"55":{"tf":1.0}}}}},"i":{"df":1,"docs":{"57":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"df":2,"docs":{"106":{"tf":1.7320508075688772},"17":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":12,"docs":{"106":{"tf":1.0},"11":{"tf":1.0},"118":{"tf":1.0},"12":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.0},"23":{"tf":1.0},"56":{"tf":1.7320508075688772},"57":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.0},"87":{"tf":1.0}}}}},"z":{"df":0,"docs":{},"e":{"df":8,"docs":{"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"23":{"tf":1.0},"28":{"tf":1.7320508075688772},"5":{"tf":1.7320508075688772},"77":{"tf":1.0},"81":{"tf":2.6457513110645907}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"105":{"tf":1.0}}}}},"m":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"20":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"5":{"tf":1.0}}}}}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"_":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":6,"docs":{"18":{"tf":2.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}}}},"b":{"df":0,"docs":{},"n":{"df":5,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":6,"docs":{"17":{"tf":1.7320508075688772},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}}}}}},"df":4,"docs":{"17":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"72":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"l":{"c":{"df":1,"docs":{"17":{"tf":1.0}}},"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"17":{"tf":1.7320508075688772},"18":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"18":{"tf":1.0},"67":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"e":{"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{":":{":":{"<":{"df":0,"docs":{},"u":{"3":{"2":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":1,"docs":{"5":{"tf":2.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"67":{"tf":1.0}}}},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"106":{"tf":1.0},"68":{"tf":1.0}}}},"u":{"df":0,"docs":{},"r":{"c":{"df":6,"docs":{"1":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"2":{"tf":1.0},"7":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"100":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{},"f":{"df":6,"docs":{"101":{"tf":1.0},"106":{"tf":1.0},"15":{"tf":1.0},"56":{"tf":1.0},"6":{"tf":1.0},"71":{"tf":1.0}},"i":{"df":9,"docs":{"105":{"tf":1.4142135623730951},"14":{"tf":1.0},"15":{"tf":1.0},"34":{"tf":1.7320508075688772},"6":{"tf":1.0},"60":{"tf":1.4142135623730951},"63":{"tf":1.0},"71":{"tf":1.4142135623730951},"72":{"tf":1.0}}}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"106":{"tf":1.0},"5":{"tf":1.0}}}}}},"q":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"96":{"tf":1.0}}}}}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"20":{"tf":1.4142135623730951}},"i":{"c":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"20":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":1,"docs":{"96":{"tf":1.0}}}},"u":{"a":{"df":0,"docs":{},"r":{"df":6,"docs":{"20":{"tf":2.23606797749979},"44":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"62":{"tf":1.0},"68":{"tf":1.0},"96":{"tf":1.4142135623730951}},"e":{"(":{"a":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"n":{"d":{"_":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"44":{"tf":1.0},"48":{"tf":1.0}},"e":{"(":{"a":{"df":3,"docs":{"44":{"tf":1.0},"48":{"tf":1.4142135623730951},"53":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":1,"docs":{"68":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"t":{"a":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"0":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":1,"docs":{"97":{"tf":1.0}}}},"n":{"d":{"a":{"df":0,"docs":{},"r":{"d":{"df":3,"docs":{"100":{"tf":1.0},"33":{"tf":1.0},"94":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"k":{"_":{"b":{"df":0,"docs":{},"n":{"df":5,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":5,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}}},"df":3,"docs":{"15":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}},"i":{"df":1,"docs":{"112":{"tf":1.0}}}},"t":{"df":12,"docs":{"109":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"13":{"tf":1.0},"18":{"tf":1.0},"22":{"tf":1.4142135623730951},"3":{"tf":1.0},"31":{"tf":1.4142135623730951},"44":{"tf":1.7320508075688772},"47":{"tf":1.0},"5":{"tf":1.0},"60":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"19":{"tf":1.0}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":13,"docs":{"101":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.4142135623730951},"46":{"tf":1.0},"49":{"tf":1.0},"61":{"tf":1.7320508075688772},"62":{"tf":1.0},"64":{"tf":3.4641016151377544},"68":{"tf":1.0},"69":{"tf":1.4142135623730951},"70":{"tf":1.0},"83":{"tf":1.0},"94":{"tf":1.0}}}}}}},"i":{"c":{"df":2,"docs":{"40":{"tf":1.0},"81":{"tf":2.0}}},"df":0,"docs":{}}},"y":{"df":2,"docs":{"34":{"tf":1.0},"71":{"tf":1.0}}}},"d":{":":{":":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"y":{":":{":":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"(":{"df":0,"docs":{},"x":{"df":1,"docs":{"91":{"tf":1.0}}}},"df":2,"docs":{"81":{"tf":1.0},"91":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"(":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{":":{":":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"n":{"df":2,"docs":{"82":{"tf":1.0},"92":{"tf":1.0}},"i":{"c":{"(":{"\"":{"c":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"69":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"76":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":1,"docs":{"93":{"tf":1.0}}}}}},"f":{"df":1,"docs":{"93":{"tf":1.0}},"e":{"(":{"0":{"df":1,"docs":{"92":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"93":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"82":{"tf":1.0},"94":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{":":{":":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":2,"docs":{"78":{"tf":1.0},"95":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"x":{"df":1,"docs":{"92":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{":":{":":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"16":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"d":{"df":2,"docs":{"33":{"tf":1.0},"60":{"tf":1.0}},"e":{":":{":":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"97":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.0}}}}}}}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"99":{"tf":1.0}}},"y":{":":{":":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"d":{":":{":":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"(":{"df":0,"docs":{},"x":{"df":1,"docs":{"96":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"(":{"0":{"df":3,"docs":{"13":{"tf":1.0},"20":{"tf":1.0},"36":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"99":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"98":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"(":{"df":0,"docs":{},"x":{"df":2,"docs":{"68":{"tf":1.0},"96":{"tf":1.0}}}},"df":0,"docs":{}}},"df":3,"docs":{"68":{"tf":1.0},"73":{"tf":1.0},"96":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"x":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"98":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"98":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":2,"docs":{"0":{"tf":1.0},"33":{"tf":1.0}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"22":{"tf":1.4142135623730951},"29":{"tf":1.0},"30":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"(":{"df":0,"docs":{},"i":{"df":1,"docs":{"56":{"tf":1.0}}}},"df":12,"docs":{"106":{"tf":1.0},"113":{"tf":1.4142135623730951},"115":{"tf":1.7320508075688772},"15":{"tf":1.7320508075688772},"16":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"36":{"tf":1.0},"37":{"tf":1.0},"40":{"tf":1.7320508075688772},"42":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}}}}}},"df":2,"docs":{"41":{"tf":1.0},"67":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"105":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":5,"docs":{"105":{"tf":1.0},"15":{"tf":1.0},"5":{"tf":1.0},"60":{"tf":1.0},"78":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}},"df":1,"docs":{"16":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":8,"docs":{"62":{"tf":1.0},"69":{"tf":1.7320508075688772},"70":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0},"79":{"tf":2.23606797749979},"92":{"tf":1.0},"94":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"59":{"tf":1.0}}}}}}},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":4,"docs":{"117":{"tf":1.0},"16":{"tf":1.0},"69":{"tf":1.0},"83":{"tf":1.0}}}}}},"df":0,"docs":{}}},"u":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}}},"u":{"b":{"(":{"6":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"<":{"1":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"22":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":6,"docs":{"102":{"tf":1.0},"22":{"tf":1.0},"31":{"tf":1.0},"56":{"tf":1.0},"67":{"tf":1.0},"74":{"tf":1.4142135623730951}},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":6,"docs":{"117":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":2.23606797749979},"54":{"tf":1.0},"56":{"tf":3.4641016151377544}},"e":{".":{"a":{"d":{"d":{"(":{"a":{"df":1,"docs":{"56":{"tf":1.7320508075688772}}},"df":0,"docs":{},"i":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}},"x":{"df":1,"docs":{"56":{"tf":2.8284271247461903}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"b":{"a":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"x":{"df":1,"docs":{"58":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"(":{"df":0,"docs":{},"x":{"df":1,"docs":{"58":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"u":{"b":{"(":{"df":0,"docs":{},"x":{"df":1,"docs":{"56":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":1,"docs":{"38":{"tf":1.0}},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"33":{"tf":1.0}},"e":{".":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"33":{"tf":1.0}}}}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.0}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"33":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{".":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"33":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},":":{":":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}}}}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"62":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"h":{"df":4,"docs":{"15":{"tf":1.7320508075688772},"33":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":1,"docs":{"62":{"tf":1.0}}}}}},"m":{"(":{"1":{"6":{"df":1,"docs":{"67":{"tf":1.0}}},"df":0,"docs":{}},"[":{"df":0,"docs":{},"x":{"df":1,"docs":{"60":{"tf":1.0}}}},"a":{"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"34":{"tf":1.0}}}}}},"df":6,"docs":{"105":{"tf":2.449489742783178},"34":{"tf":1.4142135623730951},"5":{"tf":2.23606797749979},"60":{"tf":1.7320508075688772},"62":{"tf":1.0},"67":{"tf":1.4142135623730951}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"34":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"z":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"33":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"44":{"tf":1.0}}}}}}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"105":{"tf":1.4142135623730951}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":14,"docs":{"0":{"tf":1.0},"102":{"tf":1.0},"106":{"tf":1.0},"11":{"tf":2.0},"110":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"39":{"tf":1.0},"45":{"tf":1.0},"6":{"tf":1.4142135623730951},"71":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"88":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":2,"docs":{"116":{"tf":1.0},"18":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"m":{"df":1,"docs":{"17":{"tf":1.0}}}},"w":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"56":{"tf":1.0}}}},"df":0,"docs":{}},"y":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":7,"docs":{"33":{"tf":1.4142135623730951},"34":{"tf":2.23606797749979},"60":{"tf":3.7416573867739413},"63":{"tf":1.4142135623730951},"71":{"tf":2.23606797749979},"73":{"tf":3.4641016151377544},"83":{"tf":1.0}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"x":{"df":3,"docs":{"60":{"tf":1.4142135623730951},"67":{"tf":1.0},"83":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":8,"docs":{"0":{"tf":1.0},"100":{"tf":1.0},"106":{"tf":1.0},"112":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.0},"33":{"tf":1.0},"67":{"tf":1.4142135623730951}}}}}}}},"t":{"0":{"df":1,"docs":{"82":{"tf":1.0}}},"1":{"df":2,"docs":{"67":{"tf":1.4142135623730951},"82":{"tf":1.0}}},"2":{"df":2,"docs":{"67":{"tf":2.23606797749979},"82":{"tf":1.0}}},"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"23":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"g":{"df":1,"docs":{"20":{"tf":1.0}}},"k":{"df":0,"docs":{},"e":{"df":10,"docs":{"15":{"tf":1.0},"18":{"tf":2.0},"34":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"72":{"tf":1.0},"82":{"tf":1.4142135623730951},"85":{"tf":1.0},"94":{"tf":1.0}}}},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":5,"docs":{"105":{"tf":1.4142135623730951},"11":{"tf":1.4142135623730951},"15":{"tf":1.0},"17":{"tf":1.0},"5":{"tf":1.4142135623730951}}}}}}},"df":7,"docs":{"102":{"tf":5.0},"60":{"tf":1.4142135623730951},"69":{"tf":1.0},"72":{"tf":1.4142135623730951},"74":{"tf":5.0},"91":{"tf":1.0},"93":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"17":{"tf":1.0}}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"5":{"tf":1.0},"56":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"t":{"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"/":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"/":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"/":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"d":{".":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":5,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":2.0},"16":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.6457513110645907}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{".":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"20":{"tf":2.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":2,"docs":{"22":{"tf":1.0},"31":{"tf":1.0}}},"df":6,"docs":{"106":{"tf":1.0},"19":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.4142135623730951},"31":{"tf":1.7320508075688772},"5":{"tf":1.4142135623730951}}}},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"69":{"tf":1.0}}}}},"h":{"df":1,"docs":{"20":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":1,"docs":{"69":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"15":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"f":{"df":3,"docs":{"22":{"tf":1.0},"31":{"tf":1.0},"73":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":3,"docs":{"71":{"tf":1.0},"73":{"tf":1.4142135623730951},"96":{"tf":1.0}}}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":2,"docs":{"15":{"tf":1.0},"99":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":2,"docs":{"13":{"tf":1.0},"77":{"tf":1.0}}}}}}},"u":{"df":3,"docs":{"78":{"tf":1.0},"82":{"tf":1.0},"92":{"tf":1.0}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"e":{"df":4,"docs":{"10":{"tf":1.0},"20":{"tf":1.0},"73":{"tf":1.0},"86":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"p":{"df":1,"docs":{"106":{"tf":1.4142135623730951}}}},"n":{"df":1,"docs":{"82":{"tf":1.0}}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"17":{"tf":1.0}}}}}},"t":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"86":{"tf":1.0},"87":{"tf":1.0}}}},"df":0,"docs":{}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"77":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"y":{"df":1,"docs":{"20":{"tf":1.0}}}},"r":{"a":{"c":{"df":0,"docs":{},"e":{"df":5,"docs":{"106":{"tf":2.449489742783178},"18":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"5":{"tf":1.0}},"s":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":1,"docs":{"5":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"k":{"df":1,"docs":{"18":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"1":{"tf":1.0},"7":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"101":{"tf":1.0},"71":{"tf":1.7320508075688772},"74":{"tf":1.0}}}},"n":{"df":0,"docs":{},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":3,"docs":{"15":{"tf":1.4142135623730951},"17":{"tf":1.7320508075688772},"18":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"42":{"tf":1.0}}}}}},"l":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"105":{"tf":1.0}}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"117":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"100":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":4,"docs":{"105":{"tf":1.0},"117":{"tf":1.7320508075688772},"118":{"tf":1.0},"83":{"tf":1.0}}}},"i":{"df":3,"docs":{"14":{"tf":1.0},"70":{"tf":1.7320508075688772},"71":{"tf":1.0}},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"77":{"tf":1.7320508075688772},"78":{"tf":1.0},"81":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"e":{"df":2,"docs":{"33":{"tf":1.0},"66":{"tf":1.7320508075688772}}}}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":7,"docs":{"61":{"tf":1.0},"62":{"tf":1.0},"69":{"tf":2.0},"70":{"tf":1.0},"71":{"tf":1.0},"80":{"tf":3.1622776601683795},"82":{"tf":1.0}}}},"r":{"df":0,"docs":{},"n":{"df":2,"docs":{"118":{"tf":1.4142135623730951},"67":{"tf":1.0}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"106":{"tf":1.0}}}}}}},"v":{"1":{"df":1,"docs":{"60":{"tf":1.0}}},"df":1,"docs":{"60":{"tf":1.0}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"67":{"tf":1.0}}}}}},"o":{"df":12,"docs":{"101":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.0},"35":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"80":{"tf":1.4142135623730951},"81":{"tf":1.7320508075688772},"82":{"tf":1.0},"83":{"tf":1.7320508075688772},"9":{"tf":1.0},"97":{"tf":1.0}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":33,"docs":{"100":{"tf":2.0},"101":{"tf":1.7320508075688772},"117":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":2.0},"35":{"tf":1.0},"37":{"tf":1.0},"39":{"tf":1.0},"41":{"tf":1.0},"5":{"tf":1.4142135623730951},"55":{"tf":1.0},"60":{"tf":3.872983346207417},"61":{"tf":1.0},"63":{"tf":1.4142135623730951},"65":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":4.123105625617661},"72":{"tf":2.449489742783178},"73":{"tf":3.3166247903554},"74":{"tf":1.0},"75":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.4142135623730951},"79":{"tf":1.0},"80":{"tf":2.23606797749979},"81":{"tf":2.0},"82":{"tf":1.7320508075688772},"83":{"tf":1.7320508075688772},"84":{"tf":2.449489742783178},"85":{"tf":2.23606797749979},"93":{"tf":1.0}}},"i":{"c":{"df":2,"docs":{"18":{"tf":1.0},"69":{"tf":1.0}}},"df":0,"docs":{}}}}},"u":{"3":{"2":{")":{")":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"105":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"105":{"tf":1.0},"5":{"tf":1.0}}},"df":0,"docs":{}},"6":{"4":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"10":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":1,"docs":{"23":{"tf":1.0}}},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":5,"docs":{"62":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0}}}}},"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"0":{"tf":1.0},"106":{"tf":1.0}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"34":{"tf":1.0}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"5":{"tf":1.0}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"37":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"107":{"tf":1.0},"108":{"tf":1.0},"2":{"tf":1.0},"8":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"6":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":6,"docs":{"106":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951},"67":{"tf":1.0},"71":{"tf":1.0},"85":{"tf":1.4142135623730951},"99":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":2,"docs":{"15":{"tf":1.0},"16":{"tf":1.0}}}}}}},"k":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"105":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"77":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"71":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"78":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"106":{"tf":1.0},"71":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"16":{"tf":2.0}}}},"df":0,"docs":{}}}},"p":{"df":7,"docs":{"105":{"tf":1.0},"106":{"tf":1.0},"18":{"tf":1.0},"33":{"tf":1.0},"5":{"tf":1.0},"60":{"tf":1.0},"69":{"tf":1.0}}},"s":{"a":{"df":0,"docs":{},"g":{"df":12,"docs":{"13":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0},"56":{"tf":1.7320508075688772}}}},"df":64,"docs":{"105":{"tf":1.4142135623730951},"106":{"tf":4.242640687119285},"11":{"tf":1.0},"118":{"tf":1.0},"12":{"tf":1.0},"13":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":3.0},"16":{"tf":2.8284271247461903},"17":{"tf":2.8284271247461903},"18":{"tf":3.605551275463989},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"3":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":3.1622776601683795},"34":{"tf":1.4142135623730951},"37":{"tf":1.7320508075688772},"42":{"tf":1.4142135623730951},"43":{"tf":1.7320508075688772},"48":{"tf":1.0},"49":{"tf":1.0},"5":{"tf":2.0},"52":{"tf":1.0},"53":{"tf":1.0},"56":{"tf":2.6457513110645907},"57":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":3.605551275463989},"61":{"tf":1.7320508075688772},"63":{"tf":1.4142135623730951},"64":{"tf":2.23606797749979},"65":{"tf":1.0},"67":{"tf":1.7320508075688772},"68":{"tf":1.4142135623730951},"69":{"tf":1.0},"71":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951},"73":{"tf":2.23606797749979},"74":{"tf":2.6457513110645907},"77":{"tf":1.0},"78":{"tf":1.4142135623730951},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.7320508075688772},"82":{"tf":1.0},"83":{"tf":1.4142135623730951},"85":{"tf":1.4142135623730951},"87":{"tf":1.4142135623730951},"92":{"tf":1.4142135623730951},"93":{"tf":1.7320508075688772},"94":{"tf":1.4142135623730951},"95":{"tf":1.0},"96":{"tf":1.4142135623730951},"99":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"105":{"tf":1.0},"85":{"tf":1.0}}}},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"105":{"tf":1.0}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"15":{"tf":1.0},"82":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"33":{"tf":1.0},"34":{"tf":1.0},"83":{"tf":1.0}},"s":{":":{":":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{"_":{"b":{"df":0,"docs":{},"y":{"(":{"df":0,"docs":{},"x":{"df":1,"docs":{"34":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{"(":{"a":{"df":1,"docs":{"34":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"v":{"a":{"d":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"118":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"a":{"df":1,"docs":{"107":{"tf":1.4142135623730951}}},"df":6,"docs":{"106":{"tf":1.7320508075688772},"14":{"tf":1.0},"34":{"tf":1.0},"69":{"tf":1.4142135623730951},"86":{"tf":1.0},"87":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":39,"docs":{"101":{"tf":1.0},"105":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"22":{"tf":1.4142135623730951},"23":{"tf":4.0},"24":{"tf":2.23606797749979},"25":{"tf":2.449489742783178},"26":{"tf":2.23606797749979},"27":{"tf":2.23606797749979},"28":{"tf":2.0},"30":{"tf":1.4142135623730951},"31":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":2.23606797749979},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"48":{"tf":1.4142135623730951},"56":{"tf":1.0},"58":{"tf":1.7320508075688772},"60":{"tf":2.8284271247461903},"61":{"tf":1.0},"63":{"tf":1.4142135623730951},"64":{"tf":2.449489742783178},"65":{"tf":2.449489742783178},"66":{"tf":2.0},"68":{"tf":1.7320508075688772},"69":{"tf":2.23606797749979},"70":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.7320508075688772},"73":{"tf":2.8284271247461903},"78":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"85":{"tf":1.0},"87":{"tf":1.4142135623730951},"90":{"tf":1.0},"99":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":6,"docs":{"60":{"tf":1.0},"64":{"tf":1.4142135623730951},"65":{"tf":1.0},"69":{"tf":1.7320508075688772},"70":{"tf":1.0},"71":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"1":{"df":1,"docs":{"85":{"tf":1.0}}},"2":{"df":1,"docs":{"85":{"tf":1.0}}},"3":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"85":{"tf":1.0}}}}}},"df":0,"docs":{}},"4":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"85":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":3,"docs":{"69":{"tf":1.4142135623730951},"70":{"tf":1.0},"85":{"tf":1.4142135623730951}}}},"t":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":1,"docs":{"60":{"tf":1.0}}}}}}},"df":1,"docs":{"68":{"tf":1.7320508075688772}},"e":{"c":{"!":{"[":{"0":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":1,"docs":{"16":{"tf":1.0}}}}}}},"df":0,"docs":{}},"1":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"106":{"tf":1.0}}}}}},"df":0,"docs":{}},"<":{"_":{"df":1,"docs":{"105":{"tf":1.0}}},"b":{"df":0,"docs":{},"n":{"2":{"5":{"4":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"16":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"u":{"3":{"2":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"16":{"tf":1.0}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"105":{"tf":1.0}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"61":{"tf":1.0}},"f":{"df":11,"docs":{"15":{"tf":3.605551275463989},"16":{"tf":1.7320508075688772},"17":{"tf":1.0},"18":{"tf":2.8284271247461903},"20":{"tf":1.7320508075688772},"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.4142135623730951},"25":{"tf":1.0},"26":{"tf":2.0},"27":{"tf":1.4142135623730951}},"i":{"df":14,"docs":{"105":{"tf":1.0},"15":{"tf":2.8284271247461903},"16":{"tf":1.0},"17":{"tf":3.0},"18":{"tf":4.242640687119285},"20":{"tf":2.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"24":{"tf":1.0},"25":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.4142135623730951},"92":{"tf":1.0},"97":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":2,"docs":{"17":{"tf":1.0},"18":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"s":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"0":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"10":{"tf":1.0}}}}}}}},"i":{"a":{"df":5,"docs":{"15":{"tf":2.0},"19":{"tf":1.0},"34":{"tf":1.4142135623730951},"78":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"df":8,"docs":{"114":{"tf":1.0},"115":{"tf":1.4142135623730951},"32":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"44":{"tf":1.4142135623730951},"5":{"tf":1.0},"54":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"15":{"tf":1.7320508075688772},"18":{"tf":2.23606797749979},"20":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"18":{"tf":2.0}}}}},"df":0,"docs":{}},"df":2,"docs":{"24":{"tf":1.0},"26":{"tf":1.0}}}}},"df":0,"docs":{}},"df":7,"docs":{"15":{"tf":1.4142135623730951},"18":{"tf":2.449489742783178},"20":{"tf":1.4142135623730951},"24":{"tf":1.7320508075688772},"25":{"tf":2.0},"26":{"tf":1.0},"27":{"tf":1.4142135623730951}}}}},"m":{"df":7,"docs":{"103":{"tf":1.0},"13":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"6":{"tf":1.4142135623730951}}}},"w":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":8,"docs":{"10":{"tf":1.0},"105":{"tf":1.0},"34":{"tf":1.0},"42":{"tf":1.4142135623730951},"63":{"tf":1.0},"73":{"tf":1.7320508075688772},"78":{"tf":1.0},"97":{"tf":1.0}}}},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"22":{"tf":1.0}}}},"y":{"df":14,"docs":{"10":{"tf":1.0},"118":{"tf":1.0},"15":{"tf":1.4142135623730951},"17":{"tf":1.0},"3":{"tf":1.0},"34":{"tf":1.4142135623730951},"38":{"tf":1.0},"4":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"85":{"tf":1.0},"9":{"tf":1.0}}}},"df":4,"docs":{"16":{"tf":1.0},"23":{"tf":1.0},"56":{"tf":2.0},"58":{"tf":2.23606797749979}},"e":{"'":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"18":{"tf":1.0}}}},"r":{"df":2,"docs":{"18":{"tf":1.4142135623730951},"86":{"tf":1.0}}},"v":{"df":1,"docs":{"18":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":4,"docs":{"17":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"6":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"58":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"23":{"tf":1.4142135623730951},"60":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":4,"docs":{"5":{"tf":1.0},"60":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":1,"docs":{"77":{"tf":2.23606797749979}}}},"t":{"[":{"0":{"df":1,"docs":{"67":{"tf":1.4142135623730951}}},"1":{"5":{"df":1,"docs":{"67":{"tf":1.4142135623730951}}},"6":{"df":1,"docs":{"67":{"tf":1.0}}},"df":1,"docs":{"67":{"tf":1.4142135623730951}}},"df":0,"docs":{},"i":{"df":1,"docs":{"67":{"tf":1.7320508075688772}}}},"df":26,"docs":{"105":{"tf":1.4142135623730951},"106":{"tf":2.0},"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":2.8284271247461903},"34":{"tf":1.0},"37":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"56":{"tf":2.6457513110645907},"57":{"tf":2.6457513110645907},"58":{"tf":3.1622776601683795},"6":{"tf":1.0},"60":{"tf":2.23606797749979},"64":{"tf":1.0},"67":{"tf":1.4142135623730951},"68":{"tf":2.0},"73":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0},"9":{"tf":1.0},"96":{"tf":1.4142135623730951},"98":{"tf":1.0},"99":{"tf":2.23606797749979}},"h":{"_":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"(":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"2":{"df":1,"docs":{"16":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.0}},"s":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"\"":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"\"":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":1,"docs":{"16":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"v":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"\"":{"df":0,"docs":{},"v":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"\"":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":1,"docs":{"16":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"116":{"tf":1.0},"37":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":8,"docs":{"15":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"58":{"tf":1.4142135623730951},"60":{"tf":1.0},"64":{"tf":1.0},"73":{"tf":1.4142135623730951},"93":{"tf":1.7320508075688772}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"23":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":5,"docs":{"106":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.0},"93":{"tf":1.7320508075688772},"96":{"tf":1.0}},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"l":{"d":{"df":8,"docs":{"105":{"tf":1.0},"13":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"19":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"1":{"df":1,"docs":{"5":{"tf":1.0}}},"2":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":6,"docs":{"13":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.7320508075688772},"42":{"tf":1.4142135623730951},"48":{"tf":1.0},"5":{"tf":1.0}},"r":{"df":1,"docs":{"16":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":6,"docs":{"106":{"tf":1.0},"41":{"tf":1.0},"5":{"tf":1.0},"62":{"tf":1.4142135623730951},"79":{"tf":1.0},"80":{"tf":1.0}}}}}}}}},"x":{"*":{"df":0,"docs":{},"x":{"df":1,"docs":{"60":{"tf":1.0}}}},":":{":":{"df":0,"docs":{},"i":{"df":1,"docs":{"69":{"tf":1.0}}},"y":{"(":{"a":{"df":1,"docs":{"69":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":27,"docs":{"13":{"tf":2.8284271247461903},"20":{"tf":2.23606797749979},"34":{"tf":2.449489742783178},"36":{"tf":2.8284271247461903},"37":{"tf":3.1622776601683795},"41":{"tf":1.4142135623730951},"42":{"tf":1.7320508075688772},"44":{"tf":3.872983346207417},"48":{"tf":2.23606797749979},"51":{"tf":1.0},"52":{"tf":1.0},"55":{"tf":1.4142135623730951},"56":{"tf":5.196152422706632},"58":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951},"63":{"tf":1.4142135623730951},"64":{"tf":3.3166247903554},"67":{"tf":1.4142135623730951},"68":{"tf":3.3166247903554},"69":{"tf":2.6457513110645907},"70":{"tf":1.4142135623730951},"73":{"tf":2.23606797749979},"82":{"tf":1.4142135623730951},"83":{"tf":2.23606797749979},"91":{"tf":1.0},"92":{"tf":1.4142135623730951},"96":{"tf":2.449489742783178}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"44":{"tf":2.6457513110645907}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"62":{"tf":1.0}}}}},"y":{"(":{"df":0,"docs":{},"i":{"df":1,"docs":{"96":{"tf":1.0}}}},"df":15,"docs":{"13":{"tf":2.23606797749979},"20":{"tf":1.7320508075688772},"36":{"tf":2.23606797749979},"37":{"tf":2.6457513110645907},"44":{"tf":1.7320508075688772},"48":{"tf":1.7320508075688772},"55":{"tf":1.4142135623730951},"56":{"tf":4.58257569495584},"58":{"tf":2.6457513110645907},"63":{"tf":1.0},"64":{"tf":2.0},"69":{"tf":1.4142135623730951},"82":{"tf":1.4142135623730951},"83":{"tf":2.23606797749979},"96":{"tf":1.4142135623730951}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"18":{"tf":1.0}}}}}}}}}},"z":{"df":5,"docs":{"44":{"tf":1.7320508075688772},"48":{"tf":1.7320508075688772},"55":{"tf":1.4142135623730951},"56":{"tf":4.69041575982343},"58":{"tf":2.23606797749979}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":7,"docs":{"13":{"tf":1.0},"33":{"tf":1.4142135623730951},"36":{"tf":1.0},"44":{"tf":1.0},"77":{"tf":1.7320508075688772},"80":{"tf":1.0},"92":{"tf":1.0}}}}},"k":{"df":6,"docs":{"0":{"tf":1.0},"106":{"tf":2.0},"14":{"tf":1.0},"20":{"tf":1.0},"3":{"tf":1.0},"5":{"tf":1.0}},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"m":{"df":1,"docs":{"59":{"tf":1.4142135623730951}}}}},"v":{"df":0,"docs":{},"m":{"df":5,"docs":{"0":{"tf":1.0},"109":{"tf":1.0},"112":{"tf":1.0},"19":{"tf":1.0},"6":{"tf":1.0}}}}}}}},"breadcrumbs":{"root":{"0":{"*":{"*":{"0":{"df":1,"docs":{"78":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},",":{"1":{"df":1,"docs":{"58":{"tf":1.0}}},"df":0,"docs":{}},".":{".":{"1":{"0":{"0":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"5":{"0":{"0":{"0":{"0":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":23,"docs":{"106":{"tf":2.23606797749979},"13":{"tf":1.0},"14":{"tf":1.7320508075688772},"15":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.7320508075688772},"36":{"tf":1.0},"37":{"tf":2.6457513110645907},"41":{"tf":1.0},"42":{"tf":1.7320508075688772},"44":{"tf":2.449489742783178},"58":{"tf":1.0},"60":{"tf":1.7320508075688772},"64":{"tf":1.4142135623730951},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.4142135623730951},"68":{"tf":1.4142135623730951},"69":{"tf":1.4142135623730951},"70":{"tf":1.0},"88":{"tf":1.4142135623730951}},"x":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"73":{"tf":1.4142135623730951}}}}}},"1":{",":{"2":{",":{"3":{",":{"4":{",":{"5":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{",":{"2":{",":{"4":{",":{"6":{"df":1,"docs":{"105":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"4":{"8":{"5":{"7":{"6":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"8":{"5":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"3":{"6":{"2":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":1.0}}},"6":{"1":{"0":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":4,"docs":{"44":{"tf":1.0},"56":{"tf":1.0},"60":{"tf":1.0},"67":{"tf":1.0}}},"8":{"df":1,"docs":{"56":{"tf":1.0}}},"df":36,"docs":{"106":{"tf":2.23606797749979},"13":{"tf":1.7320508075688772},"14":{"tf":2.0},"20":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.7320508075688772},"36":{"tf":1.7320508075688772},"37":{"tf":1.7320508075688772},"41":{"tf":1.7320508075688772},"44":{"tf":2.23606797749979},"5":{"tf":1.4142135623730951},"52":{"tf":1.0},"56":{"tf":2.23606797749979},"57":{"tf":1.7320508075688772},"58":{"tf":2.0},"60":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951},"63":{"tf":1.4142135623730951},"64":{"tf":1.7320508075688772},"65":{"tf":2.449489742783178},"66":{"tf":1.0},"67":{"tf":2.449489742783178},"68":{"tf":1.4142135623730951},"69":{"tf":1.0},"70":{"tf":1.0},"72":{"tf":1.4142135623730951},"76":{"tf":1.4142135623730951},"78":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":2.23606797749979},"88":{"tf":1.4142135623730951},"91":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0}}},"2":{")":{")":{".":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"(":{"df":0,"docs":{},"|":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"x":{"df":1,"docs":{"105":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"*":{"*":{"2":{")":{"*":{"*":{"2":{")":{"*":{"*":{"2":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"49":{"tf":1.0}}},"df":0,"docs":{}},"2":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"3":{"2":{"df":1,"docs":{"95":{"tf":1.0}}},"df":0,"docs":{}},"6":{"4":{"df":1,"docs":{"95":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},".":{".":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"105":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"df":2,"docs":{"56":{"tf":1.0},"67":{"tf":1.7320508075688772}}},"1":{"df":1,"docs":{"56":{"tf":1.0}}},"3":{"2":{"0":{"5":{"7":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"4":{"df":1,"docs":{"56":{"tf":1.0}}},"5":{"7":{"6":{"4":{"7":{"df":1,"docs":{"106":{"tf":1.0}}},"8":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"9":{"8":{"3":{"2":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"6":{"0":{"7":{"8":{"2":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"0":{"3":{"9":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"4":{"0":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"1":{"0":{"2":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"4":{"4":{"df":2,"docs":{"106":{"tf":1.7320508075688772},"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"106":{"tf":1.0}}},"8":{"df":0,"docs":{},"g":{"b":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{}}},"^":{"1":{"8":{"df":2,"docs":{"106":{"tf":1.0},"5":{"tf":1.0}}},"df":0,"docs":{}},"2":{"0":{"df":1,"docs":{"5":{"tf":1.0}}},"2":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":1,"docs":{"118":{"tf":1.0}}},"b":{"df":1,"docs":{"118":{"tf":1.0}}},"df":16,"docs":{"106":{"tf":2.0},"14":{"tf":1.0},"44":{"tf":1.7320508075688772},"48":{"tf":1.0},"5":{"tf":1.7320508075688772},"56":{"tf":2.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.4142135623730951},"65":{"tf":1.7320508075688772},"69":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"85":{"tf":1.0},"87":{"tf":2.23606797749979},"91":{"tf":1.0}}},"3":{"+":{"2":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"1":{"3":{"4":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"106":{"tf":1.4142135623730951}}},"2":{"df":7,"docs":{"106":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"77":{"tf":1.7320508075688772}}},"3":{"df":1,"docs":{"56":{"tf":1.0}}},"df":13,"docs":{"106":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"44":{"tf":1.4142135623730951},"48":{"tf":1.0},"5":{"tf":1.0},"51":{"tf":1.0},"56":{"tf":2.0},"62":{"tf":1.0},"69":{"tf":1.0},"85":{"tf":1.0},"87":{"tf":2.0},"91":{"tf":1.4142135623730951}}},"4":{"1":{"9":{"4":{"3":{"0":{"4":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"df":1,"docs":{"106":{"tf":1.0}}},"4":{"c":{"d":{"9":{"1":{"c":{"1":{"2":{"0":{"3":{"3":{"a":{"d":{"4":{"c":{"6":{"a":{"6":{"b":{"1":{"9":{"7":{"9":{"3":{"b":{"7":{"3":{"df":0,"docs":{},"f":{"1":{"a":{"6":{"6":{"d":{"9":{"9":{"a":{"0":{"df":0,"docs":{},"e":{"0":{"b":{"df":0,"docs":{},"f":{"6":{"3":{"4":{"9":{"4":{"c":{"1":{"2":{"c":{"df":0,"docs":{},"e":{"b":{"1":{"df":0,"docs":{},"f":{"4":{"5":{"1":{"df":0,"docs":{},"e":{"c":{"9":{"4":{"5":{"2":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":1.0}}},"df":3,"docs":{"34":{"tf":1.0},"5":{"tf":1.0},"87":{"tf":1.7320508075688772}}},"5":{"df":3,"docs":{"5":{"tf":1.0},"56":{"tf":2.0},"87":{"tf":1.0}}},"6":{"2":{"df":1,"docs":{"106":{"tf":1.0}}},"8":{"4":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":1.0}}},"7":{"0":{"2":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"5":{"0":{"3":{"2":{"9":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"7":{"df":1,"docs":{"56":{"tf":1.0}}},"df":6,"docs":{"56":{"tf":1.4142135623730951},"66":{"tf":1.0},"69":{"tf":1.4142135623730951},"70":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.4142135623730951}}},"8":{"3":{"df":1,"docs":{"106":{"tf":1.0}}},"df":7,"docs":{"13":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"20":{"tf":2.0},"33":{"tf":1.4142135623730951},"36":{"tf":1.0},"37":{"tf":1.0}}},"9":{"8":{"df":1,"docs":{"106":{"tf":1.0}}},"9":{"df":1,"docs":{"106":{"tf":1.4142135623730951}}},"df":2,"docs":{"20":{"tf":1.4142135623730951},"69":{"tf":1.0}}},"_":{"df":13,"docs":{"106":{"tf":1.4142135623730951},"34":{"tf":1.0},"37":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.4142135623730951},"67":{"tf":1.0},"69":{"tf":2.449489742783178},"70":{"tf":1.4142135623730951},"81":{"tf":1.4142135623730951},"82":{"tf":1.0},"88":{"tf":1.0}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":1,"docs":{"16":{"tf":1.0}}}}}}}},"a":{"(":{"7":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.0}}}}}}},"[":{"0":{"df":1,"docs":{"81":{"tf":1.0}}},"1":{"df":1,"docs":{"81":{"tf":1.0}}},"7":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"^":{"2":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"b":{"c":{"df":1,"docs":{"62":{"tf":1.0}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"76":{"tf":1.0},"92":{"tf":1.0}}}},"v":{"df":2,"docs":{"106":{"tf":1.0},"15":{"tf":1.7320508075688772}}}},"s":{"(":{"df":0,"docs":{},"p":{"df":1,"docs":{"77":{"tf":1.0}}},"q":{"df":1,"docs":{"77":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"40":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"32":{"tf":1.0},"5":{"tf":1.0},"59":{"tf":1.0},"83":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"c":{"df":1,"docs":{"67":{"tf":2.0}},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"42":{"tf":1.0}}}},"s":{"df":0,"docs":{},"s":{"df":9,"docs":{"105":{"tf":1.0},"106":{"tf":2.6457513110645907},"34":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.7320508075688772},"62":{"tf":1.0},"78":{"tf":1.0},"81":{"tf":1.4142135623730951},"90":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"18":{"tf":1.7320508075688772}}}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"68":{"tf":1.0}}}},"v":{"df":3,"docs":{"54":{"tf":1.0},"56":{"tf":2.0},"58":{"tf":2.6457513110645907}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"106":{"tf":1.7320508075688772},"57":{"tf":1.0}}}},"df":0,"docs":{}}}},"d":{"d":{"(":{"2":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"4":{"<":{"0":{"df":1,"docs":{"58":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"58":{"tf":1.0}}},"5":{"(":{"2":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":1.0}}},"<":{"0":{"df":2,"docs":{"56":{"tf":1.0},"57":{"tf":1.0}}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"(":{"3":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"(":{"4":{"2":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"72":{"tf":1.0}}},"r":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"b":{"(":{"0":{"df":1,"docs":{"56":{"tf":1.0}}},"1":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"_":{"a":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"a":{"b":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"a":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}},"c":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":1,"docs":{"56":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":14,"docs":{"102":{"tf":1.0},"105":{"tf":1.0},"118":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951},"58":{"tf":1.7320508075688772},"60":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.4142135623730951},"72":{"tf":1.7320508075688772},"74":{"tf":1.4142135623730951},"83":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{".":{"a":{"d":{"d":{"(":{"df":0,"docs":{},"m":{",":{"df":0,"docs":{},"n":{"df":1,"docs":{"58":{"tf":1.0}}}},"df":1,"docs":{"58":{"tf":1.0}}},"x":{"df":1,"docs":{"58":{"tf":1.4142135623730951}}},"z":{"df":1,"docs":{"58":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"58":{"tf":1.0}}}},"i":{"df":0,"docs":{},"t":{"df":8,"docs":{"56":{"tf":1.0},"62":{"tf":1.0},"71":{"tf":1.0},"77":{"tf":1.4142135623730951},"78":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"85":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"105":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"u":{"b":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}}}},"df":2,"docs":{"64":{"tf":1.0},"67":{"tf":1.0}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"43":{"tf":1.0}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"115":{"tf":1.0}}}},"df":0,"docs":{}}}},"g":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"17":{"tf":1.0}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"43":{"tf":1.0}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":4,"docs":{"15":{"tf":1.4142135623730951},"18":{"tf":2.0},"24":{"tf":1.0},"6":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"109":{"tf":1.0}}},"r":{"df":4,"docs":{"113":{"tf":1.0},"114":{"tf":1.0},"117":{"tf":2.449489742783178},"118":{"tf":2.23606797749979}}}},"l":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"r":{"a":{"df":5,"docs":{"61":{"tf":1.4142135623730951},"67":{"tf":2.23606797749979},"73":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"o":{"c":{":":{":":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"c":{":":{":":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"c":{"df":2,"docs":{"105":{"tf":1.0},"106":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":2,"docs":{"105":{"tf":1.0},"106":{"tf":1.0}}},"df":0,"docs":{},"w":{"df":21,"docs":{"101":{"tf":1.0},"32":{"tf":1.0},"44":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"67":{"tf":1.4142135623730951},"73":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.4142135623730951},"78":{"tf":1.0},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"85":{"tf":1.4142135623730951},"99":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"i":{"df":2,"docs":{"104":{"tf":1.0},"93":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"85":{"tf":1.0}}}}}},"w":{"a":{"df":0,"docs":{},"y":{"df":7,"docs":{"64":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.4142135623730951},"83":{"tf":1.0}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"77":{"tf":1.4142135623730951}}}}}}},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"15":{"tf":1.0}}}}}},"d":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"20":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":7,"docs":{"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"18":{"tf":1.0},"33":{"tf":2.0},"44":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"38":{"tf":1.0}},"e":{"(":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"38":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"15":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":3,"docs":{"69":{"tf":1.4142135623730951},"82":{"tf":1.0},"92":{"tf":1.0}}}},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"33":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"p":{"df":3,"docs":{"18":{"tf":1.4142135623730951},"24":{"tf":1.0},"26":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"71":{"tf":1.0}}}},"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"94":{"tf":1.0}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"i":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"'":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}},"df":1,"docs":{"0":{"tf":1.0}}},"df":5,"docs":{"101":{"tf":1.0},"113":{"tf":1.0},"116":{"tf":1.0},"83":{"tf":1.4142135623730951},"96":{"tf":1.4142135623730951}}}}}},"r":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":4,"docs":{"105":{"tf":1.0},"34":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"10":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":8,"docs":{"103":{"tf":1.0},"113":{"tf":1.7320508075688772},"114":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"32":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":17,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0},"38":{"tf":1.4142135623730951},"43":{"tf":1.0},"56":{"tf":1.0},"77":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":1.7320508075688772},"97":{"tf":1.0},"99":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"73":{"tf":1.0},"78":{"tf":1.4142135623730951}}}}}}}},"m":{"df":3,"docs":{"65":{"tf":1.4142135623730951},"69":{"tf":1.4142135623730951},"70":{"tf":2.0}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"[":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"34":{"tf":1.0}}}}}},"a":{"df":0,"docs":{},"y":{"df":15,"docs":{"18":{"tf":1.0},"34":{"tf":1.0},"60":{"tf":2.0},"62":{"tf":1.4142135623730951},"67":{"tf":1.7320508075688772},"69":{"tf":2.449489742783178},"70":{"tf":1.4142135623730951},"71":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":3.872983346207417},"87":{"tf":1.0},"91":{"tf":1.7320508075688772},"94":{"tf":1.0}}}},"df":2,"docs":{"34":{"tf":1.4142135623730951},"56":{"tf":1.0}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"14":{"tf":1.0},"15":{"tf":1.7320508075688772},"18":{"tf":1.0},"5":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"k":{"df":2,"docs":{"105":{"tf":1.0},"97":{"tf":1.0}}},"m":{"df":35,"docs":{"103":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0},"113":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"22":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"32":{"tf":2.0},"33":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.4142135623730951},"36":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"46":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"9":{"tf":1.7320508075688772}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"106":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"!":{"(":{"a":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"a":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"42":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"!":{"(":{"d":{"a":{"df":0,"docs":{},"t":{"a":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{":":{":":{"<":{"df":0,"docs":{},"u":{"3":{"2":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"105":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":3.7416573867739413}}}},"z":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":5,"docs":{"13":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"44":{"tf":1.7320508075688772},"49":{"tf":1.0}}}}}}},"df":4,"docs":{"13":{"tf":1.0},"36":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":13,"docs":{"13":{"tf":1.0},"36":{"tf":1.0},"42":{"tf":2.23606797749979},"48":{"tf":2.449489742783178},"52":{"tf":1.0},"54":{"tf":1.4142135623730951},"56":{"tf":1.0},"63":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":2.0},"90":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"56":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.0}}}}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"31":{"tf":1.0},"43":{"tf":1.0}}}},"df":1,"docs":{"6":{"tf":1.0}}}}}},"v":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":5,"docs":{"104":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.0},"34":{"tf":1.7320508075688772},"68":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"18":{"tf":1.0},"64":{"tf":1.0}}},"df":0,"docs":{}}}},"w":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"106":{"tf":1.0}}}},"df":0,"docs":{}}},"b":{"(":{"df":0,"docs":{},"i":{"df":1,"docs":{"88":{"tf":1.0}}}},".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.0}}}}}}},"a":{"b":{"df":0,"docs":{},"y":{"b":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"110":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"44":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"d":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":5,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}}}},"df":17,"docs":{"106":{"tf":2.0},"109":{"tf":2.0},"11":{"tf":1.0},"110":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"15":{"tf":2.0},"17":{"tf":2.0},"18":{"tf":3.7416573867739413},"20":{"tf":2.0},"23":{"tf":1.7320508075688772},"24":{"tf":2.6457513110645907},"25":{"tf":2.6457513110645907},"26":{"tf":2.6457513110645907},"27":{"tf":2.6457513110645907},"28":{"tf":2.23606797749979},"73":{"tf":1.0}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"2":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"43":{"tf":1.0},"56":{"tf":1.0}}},"i":{"c":{"df":2,"docs":{"33":{"tf":1.0},"87":{"tf":1.0}}},"df":0,"docs":{}}}},"b":{"df":8,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0}}},"df":18,"docs":{"106":{"tf":2.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"33":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":2.0},"48":{"tf":1.4142135623730951},"53":{"tf":1.0},"56":{"tf":3.4641016151377544},"57":{"tf":2.8284271247461903},"58":{"tf":1.7320508075688772},"62":{"tf":1.4142135623730951},"69":{"tf":2.6457513110645907},"73":{"tf":1.0},"85":{"tf":1.0}},"e":{"df":1,"docs":{"74":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"15":{"tf":1.7320508075688772},"17":{"tf":1.0},"18":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"37":{"tf":1.4142135623730951},"41":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"v":{"df":1,"docs":{"40":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"55":{"tf":1.0},"57":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":6,"docs":{"105":{"tf":1.0},"15":{"tf":1.4142135623730951},"18":{"tf":1.0},"20":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.7320508075688772}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"5":{"tf":1.0}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"16":{"tf":1.0},"19":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":3,"docs":{"18":{"tf":1.0},"34":{"tf":1.0},"73":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":5,"docs":{"15":{"tf":1.0},"18":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.7320508075688772},"9":{"tf":1.0}}}}},"d":{"df":3,"docs":{"33":{"tf":1.0},"64":{"tf":1.0},"69":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":2,"docs":{"73":{"tf":1.0},"77":{"tf":2.8284271247461903}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"62":{"tf":1.7320508075688772}}}}}}},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":7,"docs":{"116":{"tf":2.0},"37":{"tf":1.7320508075688772},"61":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":2.0},"68":{"tf":1.0},"69":{"tf":1.0}}}},"df":0,"docs":{}}},"n":{"2":{"5":{"4":{"df":14,"docs":{"111":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":2.449489742783178},"17":{"tf":1.4142135623730951},"18":{"tf":2.8284271247461903},"20":{"tf":2.23606797749979},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"o":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"62":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"6":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"37":{"tf":1.0}}},"l":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"68":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":4,"docs":{"102":{"tf":3.7416573867739413},"71":{"tf":1.0},"74":{"tf":1.4142135623730951},"76":{"tf":1.7320508075688772}},"e":{"a":{"df":0,"docs":{},"n":{"df":6,"docs":{"56":{"tf":1.4142135623730951},"58":{"tf":1.7320508075688772},"68":{"tf":1.0},"76":{"tf":1.4142135623730951},"77":{"tf":1.0},"78":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"106":{"tf":3.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"t":{"df":0,"docs":{},"h":{"df":8,"docs":{"10":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.0},"4":{"tf":1.0},"57":{"tf":1.0},"68":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"71":{"tf":1.0},"84":{"tf":2.0}}}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"71":{"tf":1.0},"72":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}},"r":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"62":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"19":{"tf":1.0}}}},"df":0,"docs":{}}}}},"n":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"16":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"u":{"df":1,"docs":{"23":{"tf":1.0}},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"\"":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"i":{"df":0,"docs":{},"l":{"d":{"df":7,"docs":{"10":{"tf":1.0},"106":{"tf":1.7320508075688772},"11":{"tf":1.7320508075688772},"12":{"tf":1.7320508075688772},"5":{"tf":1.0},"6":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":24,"docs":{"0":{"tf":1.0},"100":{"tf":1.7320508075688772},"101":{"tf":1.0},"102":{"tf":1.0},"109":{"tf":1.0},"6":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.4142135623730951},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"89":{"tf":1.7320508075688772},"90":{"tf":1.4142135623730951},"91":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0},"99":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"#":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"f":{"df":1,"docs":{"73":{"tf":1.4142135623730951}}}},"df":2,"docs":{"18":{"tf":1.0},"73":{"tf":2.0}}}}}},"c":{"(":{"df":0,"docs":{},"i":{"df":1,"docs":{"88":{"tf":1.0}}}},".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.0}}}}}}},"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":18,"docs":{"105":{"tf":1.0},"15":{"tf":1.0},"22":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":1.0},"44":{"tf":1.0},"54":{"tf":1.7320508075688772},"55":{"tf":1.0},"56":{"tf":2.8284271247461903},"58":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951},"62":{"tf":1.0},"67":{"tf":1.4142135623730951},"68":{"tf":1.4142135623730951},"82":{"tf":1.0},"84":{"tf":1.4142135623730951},"99":{"tf":1.0}}}},"n":{"'":{"df":0,"docs":{},"t":{"df":1,"docs":{"33":{"tf":1.0}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"65":{"tf":1.0},"82":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":8,"docs":{"10":{"tf":1.0},"11":{"tf":2.23606797749979},"12":{"tf":1.7320508075688772},"16":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"3":{"tf":2.23606797749979},"4":{"tf":1.0},"5":{"tf":1.4142135623730951}}}}},"s":{"df":0,"docs":{},"e":{"df":10,"docs":{"106":{"tf":1.4142135623730951},"14":{"tf":1.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"19":{"tf":1.0},"68":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"83":{"tf":1.0},"93":{"tf":1.0}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"69":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"s":{"df":3,"docs":{"76":{"tf":1.0},"78":{"tf":1.0},"93":{"tf":1.0}}}}},"d":{"df":2,"docs":{"11":{"tf":1.0},"12":{"tf":1.0}}},"df":8,"docs":{"10":{"tf":1.0},"11":{"tf":1.4142135623730951},"33":{"tf":1.0},"56":{"tf":2.8284271247461903},"57":{"tf":2.6457513110645907},"58":{"tf":1.7320508075688772},"69":{"tf":2.449489742783178},"85":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":2,"docs":{"60":{"tf":1.0},"99":{"tf":1.0}}}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"39":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"105":{"tf":1.0},"34":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":1.4142135623730951},"71":{"tf":1.0}}}}},"df":0,"docs":{}}}},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"97":{"tf":2.23606797749979}}}}}}},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"5":{"tf":2.449489742783178}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"15":{"tf":1.0}}}},"c":{"df":0,"docs":{},"k":{"df":7,"docs":{"105":{"tf":1.0},"19":{"tf":1.0},"37":{"tf":1.0},"44":{"tf":1.7320508075688772},"5":{"tf":1.0},"69":{"tf":1.4142135623730951},"92":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"72":{"tf":1.0},"81":{"tf":1.0}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"97":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":3,"docs":{"26":{"tf":1.0},"27":{"tf":1.0},"78":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"_":{"0":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"106":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"106":{"tf":1.0}}},"1":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"106":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"106":{"tf":1.0}}},"2":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"106":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"2":{"(":{"1":{"8":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":2,"docs":{"106":{"tf":4.69041575982343},"5":{"tf":2.23606797749979}}}}}},"i":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"15":{"tf":1.0},"18":{"tf":2.449489742783178},"76":{"tf":1.0}}}}}},"df":0,"docs":{}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"105":{"tf":1.0},"5":{"tf":1.4142135623730951}}}},"p":{"df":1,"docs":{"31":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":18,"docs":{"11":{"tf":2.449489742783178},"12":{"tf":1.7320508075688772},"13":{"tf":1.0},"14":{"tf":1.7320508075688772},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":2,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"82":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"44":{"tf":2.8284271247461903},"48":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.4142135623730951}}}},"o":{"d":{"df":0,"docs":{},"e":{"df":10,"docs":{"1":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"33":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0},"96":{"tf":1.0}}}},"df":1,"docs":{"6":{"tf":1.0}},"l":{"[":{"df":0,"docs":{},"k":{"df":2,"docs":{"60":{"tf":1.4142135623730951},"73":{"tf":1.0}}}},"df":15,"docs":{"33":{"tf":1.4142135623730951},"37":{"tf":2.0},"44":{"tf":1.4142135623730951},"56":{"tf":2.8284271247461903},"57":{"tf":3.0},"58":{"tf":3.7416573867739413},"60":{"tf":2.449489742783178},"67":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":2.449489742783178},"83":{"tf":1.4142135623730951},"86":{"tf":1.4142135623730951},"87":{"tf":1.4142135623730951},"88":{"tf":1.4142135623730951},"96":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"81":{"tf":1.0}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"n":{"df":25,"docs":{"14":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":2.23606797749979},"34":{"tf":1.0},"37":{"tf":2.0},"52":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":1.7320508075688772},"57":{"tf":2.449489742783178},"58":{"tf":1.4142135623730951},"60":{"tf":4.123105625617661},"64":{"tf":1.0},"67":{"tf":2.449489742783178},"68":{"tf":2.6457513110645907},"71":{"tf":1.4142135623730951},"73":{"tf":3.3166247903554},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":2.449489742783178},"86":{"tf":2.449489742783178},"87":{"tf":2.23606797749979},"88":{"tf":1.4142135623730951},"96":{"tf":1.7320508075688772},"98":{"tf":1.4142135623730951},"99":{"tf":2.0}}}}}},"m":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"106":{"tf":1.0},"83":{"tf":2.0},"87":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":3,"docs":{"103":{"tf":1.0},"106":{"tf":1.0},"109":{"tf":1.4142135623730951}}},"m":{"a":{"df":2,"docs":{"23":{"tf":1.0},"25":{"tf":1.0}},"n":{"d":{"df":7,"docs":{"11":{"tf":1.0},"12":{"tf":1.0},"15":{"tf":1.7320508075688772},"17":{"tf":1.0},"18":{"tf":1.0},"21":{"tf":2.0},"22":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"106":{"tf":1.0},"24":{"tf":1.0},"37":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":2,"docs":{"78":{"tf":1.0},"81":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"62":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.7320508075688772}}}}}}},"t":{"df":2,"docs":{"83":{"tf":1.0},"84":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":21,"docs":{"10":{"tf":1.0},"105":{"tf":2.0},"106":{"tf":2.0},"113":{"tf":1.0},"114":{"tf":2.0},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.0},"4":{"tf":1.0},"43":{"tf":1.0},"6":{"tf":1.0},"71":{"tf":1.0},"9":{"tf":1.4142135623730951},"90":{"tf":1.4142135623730951}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"72":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"43":{"tf":1.0}}},"x":{"df":7,"docs":{"0":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"56":{"tf":1.0},"65":{"tf":1.0},"80":{"tf":1.0}}}},"i":{"c":{"df":2,"docs":{"34":{"tf":1.0},"73":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"60":{"tf":1.4142135623730951},"69":{"tf":2.23606797749979},"70":{"tf":1.0}}},"s":{"df":2,"docs":{"54":{"tf":1.0},"80":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":6,"docs":{"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"25":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"27":{"tf":1.7320508075688772},"28":{"tf":1.7320508075688772}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"15":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"t":{"df":16,"docs":{"105":{"tf":1.0},"106":{"tf":2.449489742783178},"14":{"tf":2.0},"15":{"tf":2.23606797749979},"16":{"tf":1.0},"18":{"tf":2.449489742783178},"23":{"tf":1.0},"34":{"tf":1.0},"37":{"tf":1.0},"5":{"tf":1.0},"56":{"tf":1.0},"60":{"tf":1.0},"68":{"tf":1.0},"73":{"tf":1.0},"92":{"tf":1.0},"96":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":1,"docs":{"16":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}},"n":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":3,"docs":{"79":{"tf":1.0},"81":{"tf":1.0},"87":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"35":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"37":{"tf":1.0},"56":{"tf":1.0},"66":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"56":{"tf":1.0}}}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"10":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"18":{"tf":1.0}}}}},"j":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"76":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}}}},"n":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"101":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"(":{"(":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"40":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"80":{"tf":1.4142135623730951},"92":{"tf":1.0}}}}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":9,"docs":{"116":{"tf":1.0},"15":{"tf":1.4142135623730951},"37":{"tf":1.0},"60":{"tf":1.7320508075688772},"61":{"tf":1.0},"67":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"87":{"tf":1.0}}}}},"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"101":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{"_":{"b":{"df":0,"docs":{},"i":{"df":1,"docs":{"34":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"_":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"64":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":12,"docs":{"114":{"tf":1.0},"115":{"tf":1.4142135623730951},"116":{"tf":1.0},"32":{"tf":1.0},"35":{"tf":1.0},"37":{"tf":2.0},"57":{"tf":1.0},"58":{"tf":2.23606797749979},"60":{"tf":1.0},"67":{"tf":1.4142135623730951},"68":{"tf":1.0},"99":{"tf":1.0}},"t":{"df":26,"docs":{"101":{"tf":2.23606797749979},"115":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"15":{"tf":1.0},"23":{"tf":1.0},"34":{"tf":1.0},"37":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772},"58":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951},"64":{"tf":1.7320508075688772},"67":{"tf":2.449489742783178},"68":{"tf":2.23606797749979},"73":{"tf":1.4142135623730951},"78":{"tf":1.0},"79":{"tf":1.0},"83":{"tf":1.7320508075688772},"92":{"tf":1.4142135623730951},"94":{"tf":1.0},"99":{"tf":1.0}}}}}},"df":6,"docs":{"101":{"tf":2.449489742783178},"102":{"tf":1.0},"64":{"tf":2.0},"67":{"tf":1.0},"68":{"tf":3.3166247903554},"94":{"tf":1.4142135623730951}},"u":{"c":{"df":0,"docs":{},"t":{"df":6,"docs":{"38":{"tf":1.4142135623730951},"80":{"tf":1.4142135623730951},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.7320508075688772},"97":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"85":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":12,"docs":{"117":{"tf":1.0},"18":{"tf":1.7320508075688772},"21":{"tf":1.0},"23":{"tf":2.0},"24":{"tf":2.0},"25":{"tf":1.7320508075688772},"26":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"5":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"80":{"tf":1.0},"81":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"21":{"tf":1.0},"79":{"tf":1.0}}}},"x":{"df":0,"docs":{},"t":{"df":8,"docs":{"61":{"tf":1.4142135623730951},"68":{"tf":1.0},"71":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"88":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":4,"docs":{"0":{"tf":1.0},"106":{"tf":3.3166247903554},"44":{"tf":1.0},"70":{"tf":1.0}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"17":{"tf":1.7320508075688772},"18":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"1":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"93":{"tf":1.7320508075688772}}}},"r":{"df":0,"docs":{},"s":{"df":2,"docs":{"73":{"tf":1.0},"93":{"tf":1.4142135623730951}}},"t":{"df":5,"docs":{"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"73":{"tf":1.0},"78":{"tf":1.0},"93":{"tf":1.7320508075688772}}}}}}},"p":{"df":0,"docs":{},"i":{"df":4,"docs":{"101":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":1.0},"73":{"tf":1.0}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"5":{"tf":1.0},"70":{"tf":1.0},"92":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"36":{"tf":1.0},"40":{"tf":2.6457513110645907}}}}}},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"18":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"17":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"u":{"=":{"df":0,"docs":{},"n":{"df":1,"docs":{"11":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"'":{"df":1,"docs":{"16":{"tf":1.0}}},"df":6,"docs":{"105":{"tf":1.0},"106":{"tf":1.7320508075688772},"11":{"tf":1.0},"16":{"tf":1.7320508075688772},"5":{"tf":1.7320508075688772},"9":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":17,"docs":{"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"16":{"tf":2.23606797749979},"17":{"tf":1.4142135623730951},"18":{"tf":1.7320508075688772},"3":{"tf":1.0},"34":{"tf":1.4142135623730951},"43":{"tf":1.0},"5":{"tf":1.7320508075688772},"60":{"tf":1.0},"64":{"tf":2.0},"67":{"tf":1.0},"68":{"tf":1.7320508075688772},"69":{"tf":1.0},"73":{"tf":1.0},"85":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"v":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"23":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":1,"docs":{"23":{"tf":2.6457513110645907}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":13,"docs":{"14":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.0},"43":{"tf":1.0},"56":{"tf":1.0},"60":{"tf":1.0},"68":{"tf":1.4142135623730951},"71":{"tf":1.0},"81":{"tf":1.0},"84":{"tf":1.0},"9":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"5":{"tf":1.4142135623730951}}}}}}},"y":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"106":{"tf":1.0}}}},"df":0,"docs":{}}},"d":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.0}}}}}}},"a":{"df":0,"docs":{},"t":{"a":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"105":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":9,"docs":{"105":{"tf":1.0},"117":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"5":{"tf":2.0},"65":{"tf":1.0},"85":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":9,"docs":{"106":{"tf":1.7320508075688772},"15":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"33":{"tf":1.0},"85":{"tf":1.0}},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":4,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"79":{"tf":1.0},"94":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"18":{"tf":1.0},"23":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"l":{"a":{"df":0,"docs":{},"r":{"df":16,"docs":{"34":{"tf":2.0},"38":{"tf":1.4142135623730951},"40":{"tf":1.0},"41":{"tf":1.0},"43":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":2.23606797749979},"60":{"tf":2.449489742783178},"61":{"tf":1.0},"63":{"tf":1.0},"67":{"tf":1.0},"71":{"tf":1.7320508075688772},"73":{"tf":3.0},"85":{"tf":1.4142135623730951},"86":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"r":{"(":{"a":{"df":2,"docs":{"13":{"tf":1.0},"36":{"tf":1.0}}},"df":0,"docs":{}},"df":2,"docs":{"13":{"tf":1.0},"36":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"13":{"tf":1.0},"36":{"tf":1.0},"44":{"tf":1.0}}}}}}}}},"d":{"df":0,"docs":{},"u":{"c":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":1,"docs":{"69":{"tf":1.0}},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":16,"docs":{"106":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":2.8284271247461903},"24":{"tf":1.4142135623730951},"25":{"tf":1.7320508075688772},"26":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"30":{"tf":1.0},"31":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.4142135623730951},"5":{"tf":1.0},"65":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":27,"docs":{"100":{"tf":1.0},"101":{"tf":1.0},"105":{"tf":1.0},"117":{"tf":1.4142135623730951},"118":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":2.23606797749979},"34":{"tf":2.449489742783178},"36":{"tf":1.0},"37":{"tf":1.4142135623730951},"38":{"tf":1.0},"40":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.4142135623730951},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":2.6457513110645907},"68":{"tf":1.4142135623730951},"72":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.4142135623730951},"85":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"90":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"48":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.7320508075688772},"98":{"tf":1.0}}}}}}},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":15,"docs":{"117":{"tf":1.0},"118":{"tf":2.449489742783178},"13":{"tf":1.0},"15":{"tf":1.4142135623730951},"20":{"tf":1.0},"23":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"36":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"44":{"tf":1.0},"56":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"98":{"tf":2.23606797749979}},"e":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"23":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"64":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"58":{"tf":1.0}}}}}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":3,"docs":{"68":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":7,"docs":{"10":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"56":{"tf":1.0},"57":{"tf":1.0},"61":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0}}},"df":0,"docs":{}}}},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"5":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":3,"docs":{"0":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.0}}}}},"k":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"10":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"64":{"tf":1.0},"65":{"tf":1.0},"69":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":9,"docs":{"106":{"tf":1.0},"17":{"tf":1.0},"34":{"tf":1.0},"37":{"tf":1.0},"5":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"68":{"tf":1.0},"71":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"71":{"tf":1.0}}}}}}}},"v":{"df":1,"docs":{"10":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":3,"docs":{"10":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0}}}}}},"i":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"59":{"tf":1.0}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":14,"docs":{"106":{"tf":1.4142135623730951},"13":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"33":{"tf":1.4142135623730951},"61":{"tf":1.0},"73":{"tf":1.4142135623730951},"85":{"tf":1.0},"88":{"tf":1.0},"97":{"tf":1.4142135623730951},"98":{"tf":1.0}}}}}},"r":{"df":6,"docs":{"15":{"tf":1.0},"24":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951}},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":3,"docs":{"17":{"tf":1.0},"20":{"tf":1.0},"83":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":10,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"17":{"tf":1.0},"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"33":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"s":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"70":{"tf":1.0}}}}}}},"df":0,"docs":{},"j":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"76":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":2,"docs":{"62":{"tf":1.0},"77":{"tf":1.7320508075688772}}}}}},"o":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":6,"docs":{"2":{"tf":1.0},"21":{"tf":1.0},"31":{"tf":1.0},"59":{"tf":1.4142135623730951},"79":{"tf":1.0},"8":{"tf":1.0}}}}}}}},"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"6":{"tf":1.0}}}}},"df":0,"docs":{}},"n":{"'":{"df":0,"docs":{},"t":{"df":1,"docs":{"106":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":3,"docs":{"106":{"tf":1.0},"60":{"tf":1.0},"64":{"tf":1.0}}}},"u":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"62":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"(":{"3":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"56":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"n":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"73":{"tf":1.0}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"5":{"tf":1.0}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":1,"docs":{"106":{"tf":1.7320508075688772}}}},"r":{"df":0,"docs":{},"e":{"df":3,"docs":{"73":{"tf":1.0},"94":{"tf":1.0},"99":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":3,"docs":{"23":{"tf":1.0},"36":{"tf":1.4142135623730951},"81":{"tf":2.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"g":{"df":4,"docs":{"105":{"tf":1.0},"34":{"tf":1.0},"62":{"tf":1.7320508075688772},"64":{"tf":1.0}}}},"6":{"a":{"6":{"df":0,"docs":{},"f":{"d":{"6":{"3":{"d":{"8":{"6":{"4":{"c":{"7":{"3":{"4":{"d":{"6":{"a":{"4":{"d":{"df":0,"docs":{},"f":{"4":{"9":{"8":{"8":{"df":0,"docs":{},"f":{"7":{"3":{"3":{"7":{"3":{"8":{"7":{"9":{"0":{"2":{"6":{"2":{"a":{"df":0,"docs":{},"f":{"9":{"c":{"7":{"b":{"0":{"1":{"4":{"a":{"1":{"c":{"0":{"3":{"6":{"6":{"7":{"9":{"b":{"a":{"df":0,"docs":{},"f":{"1":{"1":{"2":{"5":{"df":1,"docs":{"106":{"tf":2.23606797749979}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"c":{"df":0,"docs":{},"h":{"df":15,"docs":{"106":{"tf":1.7320508075688772},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.7320508075688772},"14":{"tf":1.0},"18":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":1.4142135623730951},"40":{"tf":1.7320508075688772},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"81":{"tf":1.0},"85":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"82":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"i":{"df":2,"docs":{"17":{"tf":1.0},"73":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"10":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0}}}}}}}},"df":1,"docs":{"67":{"tf":2.0}},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"82":{"tf":1.4142135623730951},"92":{"tf":1.0},"94":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"i":{"df":2,"docs":{"0":{"tf":1.0},"15":{"tf":1.0}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"112":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"62":{"tf":1.0}}}}},"df":18,"docs":{"117":{"tf":1.0},"23":{"tf":1.0},"41":{"tf":1.0},"51":{"tf":2.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":3.0},"80":{"tf":1.4142135623730951},"81":{"tf":1.7320508075688772},"82":{"tf":1.0},"83":{"tf":1.0},"88":{"tf":1.0},"93":{"tf":1.7320508075688772}}}}}}},"f":{"df":1,"docs":{"105":{"tf":1.0}}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":5,"docs":{"118":{"tf":1.0},"69":{"tf":1.7320508075688772},"70":{"tf":1.0},"80":{"tf":1.4142135623730951},"94":{"tf":1.0}}}}}},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":10,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"106":{"tf":1.0},"11":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"19":{"tf":1.0}}}},"df":0,"docs":{}}}}},"d":{"df":4,"docs":{"107":{"tf":1.0},"44":{"tf":1.7320508075688772},"69":{"tf":1.0},"94":{"tf":1.0}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"c":{"df":2,"docs":{"116":{"tf":1.7320508075688772},"34":{"tf":1.0}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":1,"docs":{"18":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"20":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"20":{"tf":1.0},"68":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"m":{"df":5,"docs":{"101":{"tf":1.0},"69":{"tf":1.7320508075688772},"70":{"tf":1.0},"71":{"tf":1.0},"85":{"tf":3.1622776601683795}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"85":{"tf":1.4142135623730951}},"e":{":":{":":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"1":{"df":1,"docs":{"85":{"tf":1.4142135623730951}}},"2":{"df":1,"docs":{"85":{"tf":1.0}}},"3":{"(":{"3":{"df":1,"docs":{"85":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"4":{"(":{"1":{"df":1,"docs":{"85":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"v":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"16":{"tf":1.0},"5":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"73":{"tf":1.0},"82":{"tf":1.0}}}}}}}},"q":{"df":2,"docs":{"102":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951}},"u":{"a":{"df":0,"docs":{},"l":{"df":5,"docs":{"20":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.4142135623730951},"77":{"tf":2.0},"78":{"tf":1.0}},"s":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"67":{"tf":1.4142135623730951}}},"y":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"(":{"1":{"6":{"df":1,"docs":{"67":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":7,"docs":{"22":{"tf":1.0},"71":{"tf":1.0},"77":{"tf":2.23606797749979},"78":{"tf":1.4142135623730951},"81":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":3,"docs":{"83":{"tf":1.0},"84":{"tf":1.0},"97":{"tf":1.0}}}}}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":9,"docs":{"10":{"tf":1.0},"106":{"tf":1.7320508075688772},"112":{"tf":2.0},"15":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"106":{"tf":2.0}}}}}},"t":{"c":{"df":1,"docs":{"81":{"tf":1.0}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"'":{"df":1,"docs":{"17":{"tf":1.0}}},"df":4,"docs":{"15":{"tf":2.23606797749979},"17":{"tf":2.0},"18":{"tf":2.449489742783178},"19":{"tf":1.0}}}}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":16,"docs":{"101":{"tf":1.0},"58":{"tf":1.0},"61":{"tf":1.4142135623730951},"65":{"tf":1.0},"66":{"tf":1.4142135623730951},"67":{"tf":2.0},"68":{"tf":1.4142135623730951},"70":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.4142135623730951},"76":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"92":{"tf":1.4142135623730951},"94":{"tf":1.4142135623730951},"96":{"tf":2.0}}}},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"60":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":6,"docs":{"15":{"tf":1.0},"33":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.4142135623730951},"64":{"tf":1.0},"99":{"tf":1.0}}},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"60":{"tf":1.0}}}},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"61":{"tf":1.0},"64":{"tf":1.4142135623730951}}}}}}}}},"m":{"df":3,"docs":{"108":{"tf":2.0},"15":{"tf":1.0},"17":{"tf":1.7320508075688772}}}},"x":{"a":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"69":{"tf":1.7320508075688772},"78":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"18":{"tf":1.0},"69":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":36,"docs":{"105":{"tf":1.7320508075688772},"106":{"tf":1.4142135623730951},"15":{"tf":2.0},"16":{"tf":2.23606797749979},"17":{"tf":2.23606797749979},"18":{"tf":1.7320508075688772},"19":{"tf":2.0},"20":{"tf":2.23606797749979},"34":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"42":{"tf":1.0},"56":{"tf":1.4142135623730951},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.7320508075688772},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.4142135623730951},"69":{"tf":1.0},"70":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951},"77":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.7320508075688772},"91":{"tf":1.0},"92":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.4142135623730951}}}}}},"c":{"df":0,"docs":{},"e":{"df":2,"docs":{"17":{"tf":1.0},"18":{"tf":1.0}},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"40":{"tf":1.0},"52":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"77":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":14,"docs":{"0":{"tf":1.0},"106":{"tf":3.0},"14":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"31":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"40":{"tf":1.4142135623730951},"42":{"tf":1.0},"5":{"tf":2.23606797749979},"56":{"tf":1.0},"9":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"106":{"tf":1.0}}}}}}},"df":0,"docs":{}},"h":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"69":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"6":{"tf":1.0},"78":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":8,"docs":{"18":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":1.0},"73":{"tf":1.4142135623730951},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.4142135623730951},"94":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"5":{"tf":1.0},"6":{"tf":1.0}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"106":{"tf":1.0}}}}}}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"114":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":5,"docs":{"34":{"tf":1.0},"43":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.0},"71":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"67":{"tf":1.0},"77":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":5,"docs":{"62":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.4142135623730951},"78":{"tf":1.0},"83":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"t":{"df":6,"docs":{"17":{"tf":1.0},"18":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"27":{"tf":1.7320508075688772}}}},"s":{"df":4,"docs":{"16":{"tf":1.0},"20":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951}}}},"r":{"df":14,"docs":{"101":{"tf":2.6457513110645907},"102":{"tf":2.0},"34":{"tf":1.7320508075688772},"64":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.0},"71":{"tf":1.4142135623730951},"73":{"tf":2.6457513110645907},"74":{"tf":2.6457513110645907},"83":{"tf":2.449489742783178},"93":{"tf":2.0},"96":{"tf":1.0},"97":{"tf":1.0},"99":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":24,"docs":{"101":{"tf":1.0},"34":{"tf":2.23606797749979},"48":{"tf":1.4142135623730951},"50":{"tf":1.7320508075688772},"51":{"tf":1.0},"52":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"58":{"tf":1.0},"60":{"tf":1.4142135623730951},"61":{"tf":2.8284271247461903},"62":{"tf":2.6457513110645907},"63":{"tf":1.0},"64":{"tf":3.0},"65":{"tf":2.0},"66":{"tf":2.0},"67":{"tf":3.605551275463989},"68":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"78":{"tf":1.0},"82":{"tf":1.7320508075688772},"83":{"tf":3.7416573867739413}}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":6,"docs":{"105":{"tf":1.0},"106":{"tf":1.7320508075688772},"115":{"tf":1.0},"23":{"tf":1.0},"33":{"tf":1.0},"38":{"tf":1.0}}}}},"r":{"a":{"df":1,"docs":{"17":{"tf":1.0}}},"df":0,"docs":{}}}}},"f":{"(":{"(":{"1":{"df":1,"docs":{"69":{"tf":1.0}}},"6":{"df":1,"docs":{"69":{"tf":1.0}}},"df":0,"docs":{}},"0":{"df":1,"docs":{"67":{"tf":1.7320508075688772}}},"1":{"df":1,"docs":{"67":{"tf":1.7320508075688772}}},"7":{"df":1,"docs":{"64":{"tf":1.0}}},"8":{"df":1,"docs":{"70":{"tf":1.0}}},"df":0,"docs":{},"i":{"df":1,"docs":{"70":{"tf":1.0}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"67":{"tf":2.0}}}}}}}}},"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{":":{":":{"<":{"b":{"df":0,"docs":{},"n":{"2":{"5":{"4":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"14":{"tf":1.0},"60":{"tf":1.0},"98":{"tf":1.0}}}},"l":{"df":0,"docs":{},"s":{"df":3,"docs":{"23":{"tf":2.0},"33":{"tf":1.0},"66":{"tf":1.4142135623730951}}}},"r":{"df":1,"docs":{"17":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"5":{"tf":1.0}}}}},"df":9,"docs":{"105":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"23":{"tf":1.0},"64":{"tf":1.4142135623730951},"67":{"tf":2.449489742783178},"69":{"tf":1.0},"70":{"tf":1.0},"83":{"tf":2.0}},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"1":{"tf":1.0},"10":{"tf":1.0},"11":{"tf":2.0},"61":{"tf":1.0},"7":{"tf":1.0}}}}}},"df":11,"docs":{"60":{"tf":1.0},"69":{"tf":1.4142135623730951},"71":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":2.6457513110645907},"77":{"tf":1.4142135623730951},"78":{"tf":2.23606797749979},"80":{"tf":1.0},"82":{"tf":1.7320508075688772},"93":{"tf":2.0},"96":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"107":{"tf":1.0},"108":{"tf":1.0}}}},"w":{"df":3,"docs":{"109":{"tf":1.0},"18":{"tf":1.0},"39":{"tf":1.0}}}},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"105":{"tf":1.0}}}},"i":{"b":{"(":{"df":0,"docs":{},"i":{"df":1,"docs":{"65":{"tf":1.4142135623730951}}}},"df":1,"docs":{"65":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"a":{"c":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"106":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"'":{"df":1,"docs":{"95":{"tf":1.0}}},"df":29,"docs":{"110":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":2.449489742783178},"17":{"tf":1.4142135623730951},"18":{"tf":3.0},"20":{"tf":2.23606797749979},"23":{"tf":2.0},"24":{"tf":1.7320508075688772},"25":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"27":{"tf":1.7320508075688772},"28":{"tf":1.7320508075688772},"30":{"tf":1.7320508075688772},"31":{"tf":1.7320508075688772},"41":{"tf":1.0},"51":{"tf":2.0},"60":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.4142135623730951},"77":{"tf":1.0},"78":{"tf":4.123105625617661},"80":{"tf":1.0},"82":{"tf":1.0},"88":{"tf":1.0},"93":{"tf":2.0},"95":{"tf":1.0}}},"df":0,"docs":{}}},"f":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"67":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"e":{"df":17,"docs":{"105":{"tf":1.0},"118":{"tf":1.7320508075688772},"14":{"tf":1.7320508075688772},"15":{"tf":1.7320508075688772},"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"22":{"tf":2.449489742783178},"23":{"tf":3.872983346207417},"24":{"tf":2.6457513110645907},"25":{"tf":2.449489742783178},"26":{"tf":2.23606797749979},"27":{"tf":2.23606797749979},"29":{"tf":2.0},"30":{"tf":2.0},"31":{"tf":1.7320508075688772},"33":{"tf":1.0},"9":{"tf":1.0}}},"l":{"df":1,"docs":{"20":{"tf":1.0}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"22":{"tf":1.0}}}}}},"n":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"106":{"tf":1.7320508075688772},"5":{"tf":1.0},"64":{"tf":1.0}}}},"d":{"df":7,"docs":{"1":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":1,"docs":{"70":{"tf":1.4142135623730951}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"78":{"tf":2.23606797749979}}}}},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":20,"docs":{"105":{"tf":1.0},"106":{"tf":1.0},"115":{"tf":1.0},"13":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":2.0},"22":{"tf":1.0},"23":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"5":{"tf":1.0},"60":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.4142135623730951},"78":{"tf":1.0},"83":{"tf":1.0},"97":{"tf":1.0},"99":{"tf":1.0}}}}},"t":{"df":2,"docs":{"77":{"tf":1.7320508075688772},"87":{"tf":1.4142135623730951}}},"x":{"df":23,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"33":{"tf":1.4142135623730951},"37":{"tf":1.7320508075688772},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":2.0},"60":{"tf":2.6457513110645907},"68":{"tf":1.0},"73":{"tf":1.4142135623730951},"77":{"tf":1.0},"78":{"tf":1.0},"86":{"tf":2.6457513110645907},"87":{"tf":1.7320508075688772},"88":{"tf":1.7320508075688772},"98":{"tf":1.0}}}},"l":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"106":{"tf":1.0},"56":{"tf":1.4142135623730951},"58":{"tf":2.449489742783178}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":4,"docs":{"0":{"tf":1.0},"109":{"tf":1.0},"61":{"tf":1.0},"67":{"tf":1.0}}}},"df":0,"docs":{}}}}},"n":{"df":4,"docs":{"105":{"tf":1.0},"106":{"tf":1.0},"16":{"tf":1.4142135623730951},"5":{"tf":1.4142135623730951}}},"o":{"df":0,"docs":{},"l":{"d":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"67":{"tf":1.4142135623730951}}}}}}}}},"df":1,"docs":{"67":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"(":{".":{".":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"0":{"df":1,"docs":{"67":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"(":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"67":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":1,"docs":{"67":{"tf":1.4142135623730951}},"s":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":35,"docs":{"10":{"tf":1.4142135623730951},"101":{"tf":1.0},"102":{"tf":1.0},"106":{"tf":1.4142135623730951},"118":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":1.4142135623730951},"69":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951},"79":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"85":{"tf":1.0},"90":{"tf":1.4142135623730951},"96":{"tf":1.0}}}}}},"o":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"(":{"1":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"106":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":1,"docs":{"106":{"tf":1.0}}},"r":{"c":{"df":6,"docs":{"15":{"tf":1.0},"17":{"tf":1.0},"23":{"tf":1.4142135623730951},"34":{"tf":1.0},"62":{"tf":1.0},"67":{"tf":1.0}}},"df":0,"docs":{},"k":{"df":1,"docs":{"111":{"tf":1.0}}},"m":{"df":5,"docs":{"34":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"82":{"tf":1.0}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":6,"docs":{"1":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"23":{"tf":1.0},"7":{"tf":1.0},"82":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"67":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"h":{"df":3,"docs":{"16":{"tf":1.4142135623730951},"18":{"tf":1.0},"33":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":1,"docs":{"16":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":8,"docs":{"60":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.7320508075688772},"74":{"tf":1.4142135623730951},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0},"93":{"tf":1.7320508075688772}}}}}}}},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"107":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"d":{"df":6,"docs":{"103":{"tf":2.23606797749979},"104":{"tf":1.4142135623730951},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":5,"docs":{"106":{"tf":1.0},"109":{"tf":1.0},"16":{"tf":1.0},"34":{"tf":1.0},"61":{"tf":1.0}},"i":{"df":2,"docs":{"34":{"tf":1.0},"67":{"tf":1.0}}}}},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.0}}}}}}},"df":56,"docs":{"100":{"tf":1.4142135623730951},"101":{"tf":1.0},"102":{"tf":1.0},"105":{"tf":1.4142135623730951},"115":{"tf":1.0},"13":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":2.23606797749979},"36":{"tf":1.4142135623730951},"37":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"43":{"tf":1.4142135623730951},"44":{"tf":2.449489742783178},"45":{"tf":2.0},"46":{"tf":1.0},"47":{"tf":1.4142135623730951},"48":{"tf":1.0},"49":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":2.0},"60":{"tf":2.23606797749979},"61":{"tf":1.7320508075688772},"62":{"tf":1.4142135623730951},"63":{"tf":2.23606797749979},"64":{"tf":2.23606797749979},"67":{"tf":2.23606797749979},"68":{"tf":4.0},"69":{"tf":1.4142135623730951},"70":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"77":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":3.4641016151377544},"83":{"tf":1.4142135623730951},"84":{"tf":1.7320508075688772},"85":{"tf":1.0},"88":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":2.0},"91":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":2.0},"94":{"tf":2.0},"95":{"tf":1.0},"96":{"tf":1.4142135623730951},"97":{"tf":1.0},"98":{"tf":1.4142135623730951},"99":{"tf":2.23606797749979}},"s":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"54":{"tf":1.0},"56":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.0}}}}}}}}}}}},"g":{"c":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"83":{"tf":2.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"s":{"df":1,"docs":{"16":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":30,"docs":{"0":{"tf":1.0},"105":{"tf":1.4142135623730951},"106":{"tf":1.0},"109":{"tf":1.0},"117":{"tf":1.4142135623730951},"13":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":3.3166247903554},"16":{"tf":1.0},"17":{"tf":2.449489742783178},"18":{"tf":2.6457513110645907},"20":{"tf":2.0},"22":{"tf":1.4142135623730951},"23":{"tf":2.449489742783178},"24":{"tf":2.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"31":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.7320508075688772},"62":{"tf":1.4142135623730951},"67":{"tf":1.4142135623730951},"71":{"tf":1.7320508075688772},"72":{"tf":1.4142135623730951},"9":{"tf":1.0},"92":{"tf":1.0},"99":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"11":{"tf":1.7320508075688772},"12":{"tf":1.4142135623730951},"16":{"tf":1.0}},"h":{"df":0,"docs":{},"u":{"b":{"df":2,"docs":{"1":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":14,"docs":{"15":{"tf":1.7320508075688772},"18":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"28":{"tf":1.0},"31":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.4142135623730951},"63":{"tf":1.0},"87":{"tf":1.4142135623730951},"9":{"tf":1.0}}}}}},"l":{"df":8,"docs":{"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"30":{"tf":1.4142135623730951},"31":{"tf":1.4142135623730951}},"o":{"b":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"64":{"tf":1.0},"68":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"o":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"18":{"tf":1.0}}}},"df":3,"docs":{"13":{"tf":1.0},"18":{"tf":1.4142135623730951},"60":{"tf":1.0}},"e":{"df":1,"docs":{"96":{"tf":1.0}}},"l":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":4,"docs":{"110":{"tf":1.0},"112":{"tf":1.0},"15":{"tf":1.0},"95":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"o":{"d":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":1,"docs":{"113":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"77":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"(":{"\"":{".":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"5":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":1,"docs":{"5":{"tf":2.0}}}}}}},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"2":{",":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":0,"docs":{},"y":{"3":{",":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":0,"docs":{},"y":{"3":{"df":1,"docs":{"11":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}}}},"df":1,"docs":{"11":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}}}},"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":1.4142135623730951}}}}}}}}}},"df":13,"docs":{"11":{"tf":1.0},"111":{"tf":2.0},"14":{"tf":1.4142135623730951},"15":{"tf":2.23606797749979},"17":{"tf":1.4142135623730951},"18":{"tf":3.0},"20":{"tf":2.0},"23":{"tf":2.23606797749979},"24":{"tf":2.23606797749979},"25":{"tf":2.23606797749979},"26":{"tf":2.23606797749979},"27":{"tf":2.23606797749979},"28":{"tf":2.0}}},"df":0,"docs":{}}},"n":{"d":{"df":6,"docs":{"37":{"tf":1.0},"48":{"tf":1.0},"6":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":1.4142135623730951},"69":{"tf":1.0}},"l":{"df":1,"docs":{"106":{"tf":1.0}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":3,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"84":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"105":{"tf":1.0},"106":{"tf":2.449489742783178}}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"62":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"69":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"d":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"14":{"tf":1.0}}}}}},"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"14":{"tf":1.0},"15":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"14":{"tf":1.0},"15":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"14":{"tf":1.0},"15":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"18":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"p":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":8,"docs":{"13":{"tf":1.7320508075688772},"14":{"tf":1.7320508075688772},"15":{"tf":1.7320508075688772},"16":{"tf":2.0},"17":{"tf":2.0},"18":{"tf":1.7320508075688772},"19":{"tf":1.0},"62":{"tf":1.0}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"d":{"df":2,"docs":{"13":{"tf":1.0},"36":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"p":{"df":2,"docs":{"21":{"tf":1.7320508075688772},"33":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":8,"docs":{"106":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.4142135623730951},"34":{"tf":1.4142135623730951},"43":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"96":{"tf":1.0}}}},"x":{"df":1,"docs":{"23":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":1,"docs":{"113":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"32":{"tf":1.0},"60":{"tf":1.4142135623730951},"67":{"tf":1.0}}}}}},"n":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"71":{"tf":1.0}}}}}},"df":0,"docs":{},"t":{"df":4,"docs":{"68":{"tf":1.0},"73":{"tf":1.0},"96":{"tf":1.4142135623730951},"99":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"l":{"d":{"df":2,"docs":{"41":{"tf":1.0},"85":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"5":{"tf":2.0}}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{":":{"/":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"b":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"d":{"df":0,"docs":{},"r":{"df":3,"docs":{"11":{"tf":1.7320508075688772},"12":{"tf":1.4142135623730951},"16":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"i":{".":{"df":1,"docs":{"64":{"tf":1.0}}},"d":{"df":2,"docs":{"57":{"tf":2.0},"97":{"tf":1.0}},"e":{"a":{"df":1,"docs":{"73":{"tf":1.0}},"l":{"df":1,"docs":{"6":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":6,"docs":{"101":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.4142135623730951},"67":{"tf":2.0},"83":{"tf":1.0},"92":{"tf":1.0}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":4,"docs":{"37":{"tf":1.0},"69":{"tf":1.0},"85":{"tf":1.0},"97":{"tf":1.0}}}},"t":{"df":0,"docs":{},"y":{"(":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"44":{"tf":1.0}}}},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"64":{"tf":1.0},"69":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}}}}}},"i":{"df":1,"docs":{"18":{"tf":1.0}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"67":{"tf":1.0}}}}}}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":14,"docs":{"101":{"tf":1.0},"103":{"tf":1.0},"112":{"tf":1.0},"19":{"tf":1.0},"37":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"6":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":3.0},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"15":{"tf":1.4142135623730951},"20":{"tf":1.0},"33":{"tf":1.0}}}}}}},"n":{"c":{"df":1,"docs":{"34":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"u":{"d":{"df":6,"docs":{"36":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"80":{"tf":1.0}}},"df":0,"docs":{}}},"r":{"(":{"a":{"df":2,"docs":{"13":{"tf":1.0},"36":{"tf":1.0}}},"df":0,"docs":{}},"_":{"a":{"df":1,"docs":{"34":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":2,"docs":{"13":{"tf":1.0},"36":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"62":{"tf":1.0}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"13":{"tf":1.0},"34":{"tf":2.0},"36":{"tf":1.0},"40":{"tf":1.0},"72":{"tf":1.0}}}}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":4,"docs":{"62":{"tf":1.0},"67":{"tf":1.0},"77":{"tf":1.0},"81":{"tf":1.4142135623730951}}}},"i":{"c":{"df":3,"docs":{"36":{"tf":1.0},"37":{"tf":1.0},"77":{"tf":1.0}}},"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"u":{"df":1,"docs":{"5":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":1,"docs":{"89":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"78":{"tf":1.0}}}}},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"34":{"tf":1.0},"48":{"tf":1.4142135623730951},"71":{"tf":1.0},"83":{"tf":1.0}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"o":{"df":1,"docs":{"22":{"tf":1.4142135623730951}},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"106":{"tf":1.0}}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"78":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":2,"docs":{"37":{"tf":1.0},"44":{"tf":1.4142135623730951}}}}}},"df":5,"docs":{"106":{"tf":1.7320508075688772},"18":{"tf":2.0},"41":{"tf":1.0},"67":{"tf":1.7320508075688772},"69":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"33":{"tf":1.0},"73":{"tf":1.4142135623730951},"81":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"56":{"tf":1.0}}}}}}}}},"df":29,"docs":{"105":{"tf":1.0},"106":{"tf":2.449489742783178},"13":{"tf":1.0},"14":{"tf":2.0},"15":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"23":{"tf":2.0},"24":{"tf":1.0},"25":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0},"34":{"tf":1.4142135623730951},"36":{"tf":1.0},"37":{"tf":1.0},"42":{"tf":1.4142135623730951},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"54":{"tf":1.0},"56":{"tf":2.23606797749979},"57":{"tf":1.7320508075688772},"58":{"tf":1.7320508075688772},"77":{"tf":1.0},"9":{"tf":1.0}},"s":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}}}}}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":12,"docs":{"34":{"tf":1.0},"43":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"64":{"tf":1.7320508075688772},"65":{"tf":1.0},"68":{"tf":2.0},"69":{"tf":1.0},"73":{"tf":1.0},"78":{"tf":1.0},"85":{"tf":1.0},"95":{"tf":1.0}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"59":{"tf":1.0}}}}},"t":{"a":{"df":0,"docs":{},"l":{"df":8,"docs":{"10":{"tf":1.7320508075688772},"105":{"tf":1.0},"11":{"tf":2.6457513110645907},"12":{"tf":2.0},"17":{"tf":1.0},"3":{"tf":2.23606797749979},"4":{"tf":1.4142135623730951},"9":{"tf":2.0}}},"n":{"c":{"df":1,"docs":{"118":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"117":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"a":{"d":{"df":5,"docs":{"106":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.0},"37":{"tf":1.0},"83":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"df":10,"docs":{"13":{"tf":1.7320508075688772},"20":{"tf":1.0},"33":{"tf":2.0},"34":{"tf":1.0},"36":{"tf":1.7320508075688772},"42":{"tf":1.4142135623730951},"44":{"tf":2.0},"48":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":3.7416573867739413}},"u":{"c":{"df":0,"docs":{},"t":{"df":15,"docs":{"103":{"tf":1.0},"115":{"tf":1.4142135623730951},"20":{"tf":1.0},"32":{"tf":1.0},"34":{"tf":1.0},"36":{"tf":1.0},"38":{"tf":1.0},"42":{"tf":1.7320508075688772},"44":{"tf":2.0},"48":{"tf":1.4142135623730951},"49":{"tf":1.7320508075688772},"53":{"tf":1.7320508075688772},"54":{"tf":2.449489742783178},"55":{"tf":2.23606797749979},"56":{"tf":3.3166247903554}}}},"df":0,"docs":{}}}}},"t":{"[":{"2":{"df":1,"docs":{"81":{"tf":1.0}}},"df":0,"docs":{}},"df":23,"docs":{"102":{"tf":4.69041575982343},"33":{"tf":1.0},"34":{"tf":1.7320508075688772},"60":{"tf":1.7320508075688772},"63":{"tf":2.449489742783178},"67":{"tf":1.4142135623730951},"69":{"tf":2.8284271247461903},"70":{"tf":1.7320508075688772},"71":{"tf":1.4142135623730951},"73":{"tf":2.6457513110645907},"74":{"tf":3.0},"77":{"tf":1.7320508075688772},"78":{"tf":1.0},"80":{"tf":2.23606797749979},"81":{"tf":1.0},"82":{"tf":2.6457513110645907},"85":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":2.0},"95":{"tf":1.0},"97":{"tf":1.4142135623730951},"98":{"tf":1.7320508075688772},"99":{"tf":1.0}},"e":{"df":0,"docs":{},"g":{"df":16,"docs":{"105":{"tf":1.4142135623730951},"60":{"tf":1.0},"62":{"tf":1.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":3.1622776601683795},"78":{"tf":1.7320508075688772},"80":{"tf":1.4142135623730951},"81":{"tf":1.7320508075688772},"82":{"tf":1.0},"83":{"tf":1.0},"88":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":2.0},"95":{"tf":1.0}}},"r":{"[":{"df":0,"docs":{},"k":{"df":2,"docs":{"60":{"tf":1.0},"73":{"tf":1.0}}}},"df":3,"docs":{"60":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":2.23606797749979}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"107":{"tf":1.0},"108":{"tf":1.0},"20":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":2,"docs":{"60":{"tf":1.4142135623730951},"73":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}},"n":{"df":3,"docs":{"16":{"tf":1.4142135623730951},"20":{"tf":1.0},"92":{"tf":1.0}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"19":{"tf":1.4142135623730951}}}}}}}},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":6,"docs":{"0":{"tf":1.7320508075688772},"1":{"tf":1.0},"2":{"tf":1.0},"6":{"tf":1.7320508075688772},"7":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"14":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"92":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":1,"docs":{"67":{"tf":1.0}}}}}}},"r":{"df":1,"docs":{"70":{"tf":1.4142135623730951}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"63":{"tf":1.0},"70":{"tf":1.0}}}}}}}},"s":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"66":{"tf":1.0}}}}}}}},"a":{"df":2,"docs":{"19":{"tf":1.0},"32":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":2,"docs":{"1":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951}}}}},"t":{"'":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":2,"docs":{"3":{"tf":1.0},"57":{"tf":1.0}}}}}}}},"j":{"df":1,"docs":{"63":{"tf":1.4142135623730951}},"m":{"df":0,"docs":{},"p":{"df":1,"docs":{"44":{"tf":1.4142135623730951}},"z":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"3":{"df":1,"docs":{"10":{"tf":1.0}}},"df":2,"docs":{"22":{"tf":1.0},"23":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":2,"docs":{"20":{"tf":1.0},"44":{"tf":2.0}}}}}},"k":{"b":{"df":8,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0}}},"df":1,"docs":{"69":{"tf":2.0}},"e":{"c":{"c":{"a":{"df":0,"docs":{},"k":{"df":1,"docs":{"17":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":2,"docs":{"15":{"tf":1.0},"41":{"tf":1.0}}}},"y":{"df":10,"docs":{"15":{"tf":3.3166247903554},"16":{"tf":1.4142135623730951},"18":{"tf":3.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.4142135623730951},"25":{"tf":1.0},"26":{"tf":2.23606797749979},"27":{"tf":1.4142135623730951}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"65":{"tf":1.0}}},"df":0,"docs":{}}}}}},"i":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"60":{"tf":1.7320508075688772}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":4,"docs":{"16":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.4142135623730951},"81":{"tf":1.0}},"n":{"df":1,"docs":{"98":{"tf":1.0}}}}}},"o":{"a":{"df":0,"docs":{},"l":{"a":{"b":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"110":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"l":{"a":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":3,"docs":{"44":{"tf":2.0},"47":{"tf":1.7320508075688772},"54":{"tf":1.0}}}},"s":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"d":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"12":{"tf":1.0}}}}}},"df":3,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":1.0},"16":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"b":{"d":{"a":{"df":5,"docs":{"34":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.7320508075688772},"82":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"g":{"df":6,"docs":{"6":{"tf":1.0},"61":{"tf":2.0},"62":{"tf":1.0},"67":{"tf":1.4142135623730951},"71":{"tf":1.0},"87":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"18":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"17":{"tf":1.0},"18":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"20":{"tf":1.0},"60":{"tf":1.0},"83":{"tf":1.0}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":5,"docs":{"33":{"tf":1.7320508075688772},"37":{"tf":2.6457513110645907},"56":{"tf":1.7320508075688772},"57":{"tf":2.449489742783178},"58":{"tf":2.449489742783178}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"18":{"tf":1.0}}}}}},"df":2,"docs":{"44":{"tf":2.0},"91":{"tf":1.0}},"e":{"a":{"d":{"df":2,"docs":{"18":{"tf":1.0},"92":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":2,"docs":{"15":{"tf":1.0},"19":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":6,"docs":{"62":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":1.4142135623730951},"69":{"tf":1.0},"77":{"tf":1.0},"82":{"tf":1.0}}}},"n":{"df":3,"docs":{"105":{"tf":1.0},"34":{"tf":1.4142135623730951},"60":{"tf":1.7320508075688772}},"g":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":12,"docs":{"106":{"tf":2.8284271247461903},"18":{"tf":1.0},"20":{"tf":1.0},"60":{"tf":1.0},"67":{"tf":2.0},"69":{"tf":1.0},"70":{"tf":1.0},"81":{"tf":1.4142135623730951},"86":{"tf":1.0},"87":{"tf":1.0},"91":{"tf":1.7320508075688772},"98":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":6,"docs":{"61":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":1.4142135623730951},"78":{"tf":1.0},"81":{"tf":1.0},"93":{"tf":1.0}}}},"t":{"'":{"df":6,"docs":{"106":{"tf":1.0},"117":{"tf":1.4142135623730951},"13":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"18":{"tf":2.0},"20":{"tf":1.0}}},"<":{"df":0,"docs":{},"t":{"1":{"df":1,"docs":{"67":{"tf":1.0}}},"df":5,"docs":{"102":{"tf":3.3166247903554},"60":{"tf":1.0},"72":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.7320508075688772}},"v":{"1":{"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":10,"docs":{"101":{"tf":1.0},"113":{"tf":1.0},"22":{"tf":1.0},"32":{"tf":1.0},"37":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.0},"64":{"tf":1.0},"83":{"tf":1.0},"94":{"tf":1.0}}}}}},"i":{"b":{"df":0,"docs":{},"p":{"df":0,"docs":{},"q":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}}}},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":5,"docs":{"100":{"tf":1.0},"112":{"tf":1.0},"16":{"tf":2.0},"33":{"tf":1.0},"5":{"tf":1.0}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"2":{"tf":1.7320508075688772},"8":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{},"m":{"b":{"df":1,"docs":{"18":{"tf":1.7320508075688772}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"17":{"tf":1.0},"18":{"tf":1.0},"67":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"e":{"df":4,"docs":{"18":{"tf":1.0},"21":{"tf":1.7320508075688772},"40":{"tf":1.0},"83":{"tf":1.7320508075688772}}},"k":{"df":10,"docs":{"115":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"23":{"tf":1.0},"33":{"tf":2.0},"37":{"tf":1.0},"38":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":4.795831523312719},"58":{"tf":3.872983346207417}},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"23":{"tf":1.0}}},"df":0,"docs":{}}}},"df":3,"docs":{"113":{"tf":1.0},"118":{"tf":2.0},"23":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"10":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"df":5,"docs":{"105":{"tf":1.4142135623730951},"23":{"tf":1.0},"25":{"tf":1.0},"33":{"tf":1.0},"75":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":12,"docs":{"51":{"tf":1.7320508075688772},"56":{"tf":1.0},"62":{"tf":1.7320508075688772},"69":{"tf":2.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.4142135623730951},"79":{"tf":1.0},"83":{"tf":1.4142135623730951}}}}}},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":10,"docs":{"11":{"tf":1.0},"115":{"tf":1.0},"12":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"38":{"tf":1.0},"55":{"tf":2.0},"64":{"tf":1.4142135623730951},"65":{"tf":1.0},"69":{"tf":1.7320508075688772}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}}}}},"t":{"df":1,"docs":{"47":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"22":{"tf":1.0}}}}}}}},"df":3,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.4142135623730951}},"i":{"c":{"df":3,"docs":{"5":{"tf":1.0},"62":{"tf":1.7320508075688772},"76":{"tf":1.7320508075688772}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"g":{"df":2,"docs":{"5":{"tf":1.0},"87":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"106":{"tf":1.0},"18":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"k":{"df":2,"docs":{"106":{"tf":1.0},"33":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"(":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"<":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":3,"docs":{"101":{"tf":1.0},"118":{"tf":1.0},"60":{"tf":1.7320508075688772}}}}},"p":{"df":1,"docs":{"20":{"tf":1.0}}}},"w":{"df":1,"docs":{"6":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"37":{"tf":1.0},"59":{"tf":1.0}}}}}}},"m":{"3":{"1":{"df":8,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0}}},"df":0,"docs":{}},"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":26,"docs":{"114":{"tf":1.0},"115":{"tf":2.6457513110645907},"116":{"tf":1.4142135623730951},"117":{"tf":1.7320508075688772},"118":{"tf":1.0},"13":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":2.449489742783178},"34":{"tf":1.7320508075688772},"35":{"tf":2.0},"36":{"tf":2.449489742783178},"37":{"tf":3.1622776601683795},"38":{"tf":2.8284271247461903},"39":{"tf":1.0},"40":{"tf":1.4142135623730951},"44":{"tf":2.23606797749979},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":2.23606797749979},"57":{"tf":3.0},"58":{"tf":2.0},"68":{"tf":1.0},"95":{"tf":1.4142135623730951},"96":{"tf":1.0}},"e":{"'":{"df":3,"docs":{"117":{"tf":1.0},"34":{"tf":1.0},"5":{"tf":1.0}}},"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"m":{"df":1,"docs":{"38":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":1,"docs":{"38":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"114":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"(":{"1":{"6":{"df":1,"docs":{"67":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"118":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":15,"docs":{"105":{"tf":1.0},"106":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"13":{"tf":1.0},"16":{"tf":1.4142135623730951},"20":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.4142135623730951},"35":{"tf":1.0},"36":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.0},"5":{"tf":1.4142135623730951},"56":{"tf":2.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"79":{"tf":1.0}}}}}},"k":{"df":0,"docs":{},"e":{"_":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"y":{"(":{"1":{"5":{"df":1,"docs":{"67":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"67":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":7,"docs":{"10":{"tf":1.0},"106":{"tf":1.0},"116":{"tf":1.0},"18":{"tf":1.0},"3":{"tf":1.0},"37":{"tf":1.0},"5":{"tf":1.0}}}},"n":{"a":{"df":0,"docs":{},"g":{"df":4,"docs":{"10":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0},"5":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":3,"docs":{"106":{"tf":1.7320508075688772},"61":{"tf":1.0},"87":{"tf":1.0}}},"u":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"11":{"tf":1.0},"12":{"tf":1.0}}}},"df":0,"docs":{}},"y":{"_":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{".":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"106":{"tf":2.449489742783178}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"p":{"df":2,"docs":{"58":{"tf":1.0},"88":{"tf":1.7320508075688772}}},"r":{"df":0,"docs":{},"k":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"31":{"tf":1.0}}}}}},"df":0,"docs":{}}},"t":{"c":{"df":0,"docs":{},"h":{"df":13,"docs":{"105":{"tf":1.0},"15":{"tf":1.0},"34":{"tf":1.0},"60":{"tf":1.4142135623730951},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":2.8284271247461903},"67":{"tf":1.0},"69":{"tf":4.58257569495584},"70":{"tf":3.0},"88":{"tf":1.0},"96":{"tf":1.0}}}},"df":0,"docs":{}},"x":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"98":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"18":{"tf":1.0}}}}}}}},"df":1,"docs":{"58":{"tf":2.23606797749979}},"e":{"a":{"df":0,"docs":{},"n":{"df":13,"docs":{"106":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"63":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"81":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"96":{"tf":1.0}},"t":{"df":1,"docs":{"93":{"tf":1.7320508075688772}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":3,"docs":{"105":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"106":{"tf":3.4641016151377544}}}}}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"43":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"l":{"df":1,"docs":{"105":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"3":{"1":{"df":1,"docs":{"110":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"92":{"tf":1.0}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"71":{"tf":1.0}}}}}},"n":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"98":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":3,"docs":{"0":{"tf":1.0},"13":{"tf":1.0},"6":{"tf":1.0}}}},"u":{"df":1,"docs":{"74":{"tf":1.4142135623730951}},"t":{"df":1,"docs":{"18":{"tf":1.7320508075688772}}}}},"t":{"df":2,"docs":{"2":{"tf":1.0},"8":{"tf":1.0}},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"17":{"tf":1.0}}}}}},"o":{"c":{"df":0,"docs":{},"k":{"df":7,"docs":{"106":{"tf":1.0},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"25":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"27":{"tf":1.7320508075688772},"28":{"tf":1.7320508075688772}}}},"d":{"df":2,"docs":{"33":{"tf":2.0},"34":{"tf":1.0}},"e":{"df":2,"docs":{"118":{"tf":1.4142135623730951},"23":{"tf":2.23606797749979}}},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"93":{"tf":1.7320508075688772}}}},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"6":{"tf":1.0}}}},"df":4,"docs":{"22":{"tf":1.7320508075688772},"31":{"tf":1.7320508075688772},"33":{"tf":3.872983346207417},"34":{"tf":1.4142135623730951}},"o":{"df":1,"docs":{"62":{"tf":1.0}}},"u":{"df":4,"docs":{"73":{"tf":1.0},"78":{"tf":1.4142135623730951},"93":{"tf":1.0},"95":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":2,"docs":{"118":{"tf":1.4142135623730951},"23":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"e":{"df":12,"docs":{"101":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"61":{"tf":1.4142135623730951},"65":{"tf":1.4142135623730951},"67":{"tf":1.0},"68":{"tf":1.0},"80":{"tf":1.0}}}}},"u":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"61":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":2,"docs":{"102":{"tf":1.0},"74":{"tf":1.4142135623730951}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":9,"docs":{"0":{"tf":1.0},"56":{"tf":1.4142135623730951},"6":{"tf":1.0},"62":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0}},"i":{"df":1,"docs":{"37":{"tf":1.0}}}}}}}},"t":{"df":3,"docs":{"106":{"tf":1.7320508075688772},"16":{"tf":1.7320508075688772},"5":{"tf":1.0}}}},"v":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}},"y":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"33":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"38":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"38":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"38":{"tf":2.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":20,"docs":{"33":{"tf":1.0},"34":{"tf":1.7320508075688772},"47":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":2.0},"58":{"tf":1.4142135623730951},"60":{"tf":2.449489742783178},"67":{"tf":1.0},"69":{"tf":1.0},"73":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.7320508075688772}},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":5,"docs":{"118":{"tf":2.6457513110645907},"60":{"tf":1.4142135623730951},"67":{"tf":1.0},"68":{"tf":1.0},"85":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"10":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"23":{"tf":1.0}}}}}},"df":4,"docs":{"20":{"tf":1.0},"58":{"tf":2.449489742783178},"86":{"tf":1.0},"87":{"tf":1.0}},"e":{"df":0,"docs":{},"e":{"d":{"df":23,"docs":{"10":{"tf":2.0},"106":{"tf":2.23606797749979},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.7320508075688772},"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"33":{"tf":1.0},"4":{"tf":1.0},"43":{"tf":1.0},"57":{"tf":1.7320508075688772},"60":{"tf":1.0},"67":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.7320508075688772},"81":{"tf":1.0},"90":{"tf":1.0}}},"df":0,"docs":{}},"g":{"a":{"df":0,"docs":{},"t":{"df":6,"docs":{"62":{"tf":1.0},"69":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0}}}},"df":7,"docs":{"102":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.4142135623730951},"77":{"tf":2.0},"78":{"tf":1.4142135623730951},"81":{"tf":1.0},"93":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"69":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"84":{"tf":1.0}}}}},"w":{"_":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"68":{"tf":1.0}}}}}},"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"68":{"tf":1.4142135623730951}}}}}},"df":10,"docs":{"118":{"tf":1.0},"18":{"tf":1.7320508075688772},"34":{"tf":1.0},"5":{"tf":2.449489742783178},"6":{"tf":1.0},"64":{"tf":1.4142135623730951},"65":{"tf":1.0},"68":{"tf":2.23606797749979},"69":{"tf":1.4142135623730951},"83":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}},"n":{"df":1,"docs":{"94":{"tf":1.0}}}}}},"x":{"df":0,"docs":{},"t":{"df":6,"docs":{"15":{"tf":1.0},"17":{"tf":1.0},"62":{"tf":1.0},"70":{"tf":1.7320508075688772},"71":{"tf":1.0},"83":{"tf":1.4142135623730951}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"o":{"_":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"105":{"tf":1.0},"106":{"tf":1.0}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":2,"docs":{"105":{"tf":1.0},"106":{"tf":1.0}}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"d":{"df":2,"docs":{"105":{"tf":1.0},"106":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"n":{"df":6,"docs":{"69":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":2.0},"78":{"tf":1.0},"81":{"tf":1.0},"93":{"tf":1.0}},"e":{"df":2,"docs":{"105":{"tf":1.0},"16":{"tf":1.7320508075688772}}}},"t":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"82":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":13,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":2.0},"33":{"tf":1.0},"37":{"tf":1.0},"56":{"tf":1.4142135623730951},"64":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"73":{"tf":1.0},"82":{"tf":1.0},"94":{"tf":1.0}}},"h":{"df":1,"docs":{"33":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"<":{"0":{"df":1,"docs":{"33":{"tf":1.0}}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"w":{"df":7,"docs":{"106":{"tf":2.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.7320508075688772},"34":{"tf":1.0},"5":{"tf":1.0}}}},"u":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":25,"docs":{"105":{"tf":1.7320508075688772},"106":{"tf":1.0},"113":{"tf":1.0},"15":{"tf":1.4142135623730951},"18":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"25":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"44":{"tf":1.0},"60":{"tf":1.4142135623730951},"62":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.4142135623730951},"69":{"tf":2.0},"71":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.4142135623730951},"83":{"tf":1.0},"86":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"62":{"tf":1.0}}}}}}},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"117":{"tf":1.0},"18":{"tf":1.7320508075688772},"23":{"tf":1.0},"97":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":2,"docs":{"14":{"tf":1.0},"17":{"tf":1.0}}}}}}},"c":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"79":{"tf":1.0}}}}},"df":0,"docs":{}},"d":{"d":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"58":{"tf":1.7320508075688772}}}}}},"df":1,"docs":{"58":{"tf":1.0}}},"df":0,"docs":{}},"df":3,"docs":{"105":{"tf":1.4142135623730951},"14":{"tf":1.0},"23":{"tf":1.0}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"15":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"69":{"tf":1.0}}}}},"n":{"c":{"df":6,"docs":{"14":{"tf":1.0},"18":{"tf":1.0},"33":{"tf":1.0},"54":{"tf":1.0},"83":{"tf":1.0},"99":{"tf":1.0}},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"17":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":15,"docs":{"17":{"tf":1.0},"18":{"tf":2.0},"33":{"tf":1.0},"34":{"tf":1.0},"37":{"tf":1.0},"40":{"tf":1.0},"57":{"tf":1.0},"67":{"tf":1.0},"70":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":1.4142135623730951},"80":{"tf":1.0},"81":{"tf":1.0},"86":{"tf":1.4142135623730951},"87":{"tf":1.0}}},"p":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"57":{"tf":2.449489742783178}}},"df":0,"docs":{}}},"df":1,"docs":{"74":{"tf":2.0}},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"1":{"tf":1.0},"7":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"i":{"d":{"df":6,"docs":{"116":{"tf":1.0},"33":{"tf":1.7320508075688772},"37":{"tf":1.7320508075688772},"56":{"tf":1.7320508075688772},"57":{"tf":1.0},"58":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"37":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":23,"docs":{"101":{"tf":1.4142135623730951},"102":{"tf":1.7320508075688772},"115":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":2.23606797749979},"56":{"tf":2.0},"57":{"tf":4.47213595499958},"58":{"tf":2.449489742783178},"61":{"tf":1.0},"62":{"tf":2.23606797749979},"67":{"tf":2.23606797749979},"72":{"tf":1.0},"76":{"tf":1.4142135623730951},"77":{"tf":1.7320508075688772},"78":{"tf":1.7320508075688772},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":2.0},"85":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":8,"docs":{"106":{"tf":1.4142135623730951},"14":{"tf":1.0},"15":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.4142135623730951},"30":{"tf":2.0},"37":{"tf":1.0},"6":{"tf":1.0}}},"o":{"df":0,"docs":{},"n":{"<":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.4142135623730951}}}}}}},"df":21,"docs":{"10":{"tf":1.0},"117":{"tf":1.0},"14":{"tf":1.0},"17":{"tf":2.0},"18":{"tf":2.6457513110645907},"22":{"tf":1.4142135623730951},"23":{"tf":2.0},"24":{"tf":2.0},"25":{"tf":2.0},"26":{"tf":2.0},"27":{"tf":2.0},"28":{"tf":1.4142135623730951},"30":{"tf":1.4142135623730951},"31":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"48":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"66":{"tf":1.0},"70":{"tf":1.0},"85":{"tf":1.0}}}}}}},"r":{"d":{"df":2,"docs":{"102":{"tf":2.0},"74":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":7,"docs":{"113":{"tf":1.0},"18":{"tf":1.4142135623730951},"42":{"tf":1.0},"60":{"tf":1.4142135623730951},"62":{"tf":1.0},"67":{"tf":1.4142135623730951},"78":{"tf":1.0}}}}},"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"33":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"59":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"61":{"tf":1.0}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":4,"docs":{"44":{"tf":1.0},"66":{"tf":1.0},"77":{"tf":1.7320508075688772},"81":{"tf":1.0}}}}}}}}},"u":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"(":{"\"":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"5":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":5,"docs":{"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"19":{"tf":1.0},"37":{"tf":1.0}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{".":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"105":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"_":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"23":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":19,"docs":{"105":{"tf":1.7320508075688772},"106":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":2.0},"28":{"tf":1.0},"30":{"tf":1.0},"37":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.7320508075688772},"49":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":2.23606797749979},"57":{"tf":1.7320508075688772},"58":{"tf":1.7320508075688772},"94":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":5,"docs":{"105":{"tf":1.0},"37":{"tf":1.0},"44":{"tf":1.0},"57":{"tf":1.0},"98":{"tf":1.0}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"106":{"tf":1.7320508075688772},"37":{"tf":1.0},"55":{"tf":1.0}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":2,"docs":{"113":{"tf":1.0},"21":{"tf":1.0}}}}}},"w":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"17":{"tf":1.0},"23":{"tf":1.0}}}}}}}}}},"p":{"a":{"c":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"10":{"tf":1.0},"4":{"tf":1.0}}}},"df":1,"docs":{"18":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":1,"docs":{"106":{"tf":1.7320508075688772}}}},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"80":{"tf":1.0}}}},"n":{"df":0,"docs":{},"i":{"c":{"!":{"(":{"\"":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":1,"docs":{"95":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"92":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"76":{"tf":1.0},"84":{"tf":1.4142135623730951},"92":{"tf":2.23606797749979}}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"m":{"df":10,"docs":{"15":{"tf":2.0},"17":{"tf":1.7320508075688772},"18":{"tf":2.8284271247461903},"20":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"25":{"tf":1.7320508075688772},"26":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"62":{"tf":1.0}},"e":{"df":0,"docs":{},"t":{"df":15,"docs":{"15":{"tf":1.7320508075688772},"17":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.4142135623730951},"37":{"tf":1.0},"38":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.4142135623730951},"63":{"tf":1.7320508075688772},"69":{"tf":1.4142135623730951},"70":{"tf":1.0},"82":{"tf":1.7320508075688772}}}},"s":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"15":{"tf":2.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.8284271247461903},"20":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"33":{"tf":1.0}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":3,"docs":{"62":{"tf":1.0},"67":{"tf":1.0},"80":{"tf":1.0}}}}}}}},"s":{"df":2,"docs":{"22":{"tf":1.0},"29":{"tf":1.0}}},"t":{"df":8,"docs":{"106":{"tf":1.0},"20":{"tf":1.0},"34":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.4142135623730951},"69":{"tf":1.0}},"i":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"110":{"tf":1.0}}}},"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"78":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"s":{"df":4,"docs":{"17":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.4142135623730951},"42":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":5,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":1.0},"23":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"70":{"tf":1.0}}},"r":{"df":0,"docs":{},"n":{"df":5,"docs":{"63":{"tf":1.7320508075688772},"64":{"tf":1.7320508075688772},"65":{"tf":2.23606797749979},"69":{"tf":3.4641016151377544},"70":{"tf":3.872983346207417}}}}}}}},"c":{"[":{"@":{"df":0,"docs":{},"p":{"c":{"df":9,"docs":{"13":{"tf":1.0},"20":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"36":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.0},"56":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"44":{"tf":1.7320508075688772}}},"df":2,"docs":{"23":{"tf":1.0},"77":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"14":{"tf":1.0},"18":{"tf":1.0},"5":{"tf":1.0},"87":{"tf":1.0},"99":{"tf":1.0}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":8,"docs":{"15":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.4142135623730951},"67":{"tf":1.0},"71":{"tf":1.0},"76":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"(":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"<":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":2,"docs":{"101":{"tf":1.0},"118":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"42":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"i":{"df":0,"docs":{},"l":{"df":67,"docs":{"100":{"tf":1.0},"101":{"tf":1.0},"102":{"tf":1.4142135623730951},"105":{"tf":1.4142135623730951},"113":{"tf":1.4142135623730951},"118":{"tf":1.7320508075688772},"14":{"tf":2.23606797749979},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":2.8284271247461903},"23":{"tf":3.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":2.0},"34":{"tf":1.4142135623730951},"36":{"tf":1.0},"37":{"tf":1.7320508075688772},"54":{"tf":1.0},"59":{"tf":2.449489742783178},"60":{"tf":1.4142135623730951},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.4142135623730951},"64":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.4142135623730951},"69":{"tf":1.4142135623730951},"70":{"tf":1.0},"71":{"tf":1.7320508075688772},"72":{"tf":1.0},"73":{"tf":1.4142135623730951},"74":{"tf":1.0},"75":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.4142135623730951},"78":{"tf":1.0},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.4142135623730951},"87":{"tf":1.4142135623730951},"88":{"tf":1.0},"89":{"tf":1.0},"9":{"tf":1.0},"90":{"tf":1.0},"91":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0},"99":{"tf":1.0}},"o":{"df":1,"docs":{"23":{"tf":1.4142135623730951}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":5,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":2.6457513110645907}},"e":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"(":{")":{".":{"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"v":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"\"":{"df":0,"docs":{},"v":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"\"":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":1,"docs":{"16":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"(":{"df":0,"docs":{},"w":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"16":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"y":{"(":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":1,"docs":{"16":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}}}},":":{":":{"<":{"b":{"df":0,"docs":{},"n":{"2":{"5":{"4":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{">":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"16":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"16":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}}}},"k":{"df":0,"docs":{},"g":{"df":1,"docs":{"10":{"tf":1.0}}}},"l":{"a":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"67":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":1,"docs":{"105":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":3,"docs":{"106":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":0,"docs":{},"y":{"3":{"df":8,"docs":{"11":{"tf":1.0},"110":{"tf":2.0},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"73":{"tf":1.0}}}}}}},"u":{"df":2,"docs":{"74":{"tf":1.0},"85":{"tf":1.0}},"s":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"64":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"117":{"tf":1.0},"18":{"tf":1.0},"40":{"tf":1.0},"44":{"tf":1.0},"62":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"y":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"10":{"tf":1.0},"59":{"tf":1.4142135623730951}}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":3,"docs":{"101":{"tf":1.0},"61":{"tf":1.0},"83":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"103":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":8,"docs":{"15":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.6457513110645907},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":12,"docs":{"13":{"tf":1.0},"23":{"tf":2.0},"24":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"30":{"tf":1.0},"31":{"tf":1.0},"34":{"tf":1.0},"63":{"tf":1.0},"68":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}},"t":{"df":2,"docs":{"1":{"tf":1.0},"7":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"15":{"tf":1.0},"96":{"tf":1.0}}}}}}},"w":{"d":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"106":{"tf":1.0}}},":":{":":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{":":{":":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"2":{"5":{"4":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":1.0}}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"5":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}},"_":{"c":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"16":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"v":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"106":{"tf":1.0},"5":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"_":{"df":0,"docs":{},"u":{"3":{"2":{"df":1,"docs":{"105":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"2":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":59,"docs":{"0":{"tf":1.0},"102":{"tf":1.0},"103":{"tf":1.4142135623730951},"104":{"tf":1.0},"105":{"tf":2.449489742783178},"106":{"tf":3.605551275463989},"107":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.0},"11":{"tf":2.8284271247461903},"110":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"113":{"tf":1.7320508075688772},"114":{"tf":1.0},"12":{"tf":2.449489742783178},"13":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"15":{"tf":2.449489742783178},"16":{"tf":2.8284271247461903},"17":{"tf":1.7320508075688772},"18":{"tf":2.8284271247461903},"19":{"tf":2.0},"2":{"tf":1.0},"20":{"tf":2.449489742783178},"21":{"tf":3.605551275463989},"22":{"tf":2.449489742783178},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"25":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"27":{"tf":1.7320508075688772},"28":{"tf":1.7320508075688772},"29":{"tf":1.7320508075688772},"3":{"tf":1.7320508075688772},"30":{"tf":1.7320508075688772},"31":{"tf":1.7320508075688772},"32":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"35":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.4142135623730951},"39":{"tf":1.0},"43":{"tf":1.0},"5":{"tf":2.23606797749979},"54":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"6":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":1.4142135623730951},"77":{"tf":1.0},"78":{"tf":1.0},"8":{"tf":1.0},"82":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"9":{"tf":2.6457513110645907}},"v":{"df":0,"docs":{},"m":{"df":4,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":1.0},"3":{"tf":1.4142135623730951},"5":{"tf":1.4142135623730951}}}}}},"df":2,"docs":{"102":{"tf":1.0},"74":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"_":{"4":{"<":{"0":{"df":1,"docs":{"37":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"62":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":1,"docs":{"18":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":3,"docs":{"33":{"tf":1.0},"34":{"tf":1.0},"62":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"5":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"10":{"tf":1.4142135623730951},"4":{"tf":1.4142135623730951}}}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":4,"docs":{"16":{"tf":1.0},"17":{"tf":1.7320508075688772},"18":{"tf":1.4142135623730951},"56":{"tf":1.0}},"s":{"df":5,"docs":{"15":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.7320508075688772},"26":{"tf":1.0},"27":{"tf":1.4142135623730951}}}}}}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":2,"docs":{"51":{"tf":1.0},"78":{"tf":1.0}}}},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"22":{"tf":1.0},"29":{"tf":1.0},"92":{"tf":1.0},"94":{"tf":1.7320508075688772}}}},"v":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"18":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"118":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"6":{"tf":1.0}}}}}}}},"d":{"df":0,"docs":{},"u":{"c":{"df":1,"docs":{"17":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":10,"docs":{"106":{"tf":1.4142135623730951},"113":{"tf":1.0},"114":{"tf":1.0},"15":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"36":{"tf":1.0},"40":{"tf":2.6457513110645907}}}},"df":0,"docs":{}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"16":{"tf":1.0},"3":{"tf":1.0},"5":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"f":{"df":20,"docs":{"0":{"tf":1.4142135623730951},"106":{"tf":3.1622776601683795},"109":{"tf":1.0},"112":{"tf":1.0},"13":{"tf":1.0},"14":{"tf":2.0},"15":{"tf":4.358898943540674},"16":{"tf":2.23606797749979},"17":{"tf":3.0},"18":{"tf":5.477225575051661},"20":{"tf":2.449489742783178},"23":{"tf":1.0},"24":{"tf":2.23606797749979},"25":{"tf":2.449489742783178},"26":{"tf":1.0},"28":{"tf":1.0},"3":{"tf":1.0},"5":{"tf":1.7320508075688772},"9":{"tf":1.0},"97":{"tf":1.0}}}},"p":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"61":{"tf":1.0},"67":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"100":{"tf":1.0}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"d":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"105":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"23":{"tf":1.0}}}}}}},"df":11,"docs":{"106":{"tf":2.23606797749979},"14":{"tf":1.4142135623730951},"15":{"tf":1.7320508075688772},"17":{"tf":1.0},"18":{"tf":2.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.7320508075688772},"5":{"tf":1.0}},"n":{"df":2,"docs":{"18":{"tf":1.0},"5":{"tf":1.4142135623730951}}},"r":{"'":{"df":1,"docs":{"105":{"tf":1.0}}},"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.0}}}}}}}},"df":12,"docs":{"105":{"tf":2.0},"11":{"tf":1.0},"13":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"20":{"tf":1.4142135623730951},"36":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"73":{"tf":1.0},"92":{"tf":1.0},"96":{"tf":1.4142135623730951}}}},"i":{"d":{"df":2,"docs":{"105":{"tf":1.0},"113":{"tf":1.0}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"e":{"'":{"df":1,"docs":{"18":{"tf":1.0}}},"df":1,"docs":{"111":{"tf":1.0}}}},"u":{"b":{"df":3,"docs":{"105":{"tf":1.0},"106":{"tf":1.0},"16":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"c":{"df":5,"docs":{"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":2.23606797749979},"20":{"tf":2.8284271247461903},"25":{"tf":1.7320508075688772}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"20":{"tf":1.0}}}},"s":{"]":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"16":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"20":{"tf":1.0}}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":2,"docs":{"64":{"tf":1.0},"68":{"tf":1.7320508075688772}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":3,"docs":{"23":{"tf":1.0},"79":{"tf":1.0},"94":{"tf":1.0}}}}}}}},"q":{"df":1,"docs":{"77":{"tf":1.0}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":5,"docs":{"105":{"tf":1.0},"68":{"tf":3.3166247903554},"73":{"tf":1.0},"96":{"tf":1.4142135623730951},"99":{"tf":1.4142135623730951}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"5":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"t":{"df":2,"docs":{"62":{"tf":1.0},"64":{"tf":1.0}}}}}},"r":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"18":{"tf":1.0}}},"n":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"97":{"tf":1.0}}}}},"df":0,"docs":{},"g":{"df":4,"docs":{"117":{"tf":1.0},"118":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0}}}}},"df":2,"docs":{"5":{"tf":1.0},"58":{"tf":2.23606797749979}},"e":{"a":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"107":{"tf":1.0},"108":{"tf":1.0}}}},"d":{"(":{"1":{"df":1,"docs":{"5":{"tf":1.0}}},"2":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"u":{"3":{"2":{"(":{"0":{"df":1,"docs":{"105":{"tf":1.0}}},"1":{"df":1,"docs":{"105":{"tf":1.0}}},"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"x":{"df":1,"docs":{"105":{"tf":1.0}}}},"df":0,"docs":{}}},"df":1,"docs":{"105":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":6,"docs":{"105":{"tf":1.4142135623730951},"15":{"tf":1.0},"20":{"tf":1.0},"41":{"tf":1.4142135623730951},"43":{"tf":2.0},"5":{"tf":1.7320508075688772}}},"df":0,"docs":{},"l":{"df":2,"docs":{"106":{"tf":1.0},"19":{"tf":1.0}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":3,"docs":{"38":{"tf":1.0},"42":{"tf":1.0},"99":{"tf":1.0}}}},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"106":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":6,"docs":{"117":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":3.4641016151377544},"24":{"tf":1.0},"26":{"tf":1.0},"85":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":1,"docs":{"106":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"d":{"df":0,"docs":{},"u":{"c":{"df":5,"docs":{"113":{"tf":1.0},"114":{"tf":1.0},"115":{"tf":2.0},"23":{"tf":1.0},"5":{"tf":1.0}},"t":{"df":1,"docs":{"115":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":1,"docs":{"18":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":6,"docs":{"33":{"tf":1.0},"47":{"tf":1.0},"59":{"tf":1.0},"73":{"tf":2.0},"83":{"tf":1.7320508075688772},"85":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"c":{"df":4,"docs":{"100":{"tf":1.0},"56":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":3,"docs":{"21":{"tf":1.0},"22":{"tf":1.0},"29":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"70":{"tf":2.6457513110645907}}}}},"g":{"df":10,"docs":{"13":{"tf":2.0},"20":{"tf":2.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"36":{"tf":2.0},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":2.23606797749979},"44":{"tf":2.6457513110645907},"56":{"tf":3.605551275463989}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":14,"docs":{"20":{"tf":1.0},"34":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"39":{"tf":2.23606797749979},"40":{"tf":1.7320508075688772},"41":{"tf":2.23606797749979},"42":{"tf":2.6457513110645907},"43":{"tf":2.23606797749979},"48":{"tf":1.7320508075688772},"52":{"tf":2.0},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":2.23606797749979}}}}},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}},"l":{"df":2,"docs":{"33":{"tf":1.0},"34":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"s":{"df":2,"docs":{"2":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":1,"docs":{"37":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"77":{"tf":1.4142135623730951}}},"df":2,"docs":{"106":{"tf":1.0},"20":{"tf":1.0}}}}},"df":1,"docs":{"64":{"tf":1.0}}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"18":{"tf":1.0}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"23":{"tf":1.0}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"64":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"87":{"tf":2.0}}}}}},"l":{"a":{"c":{"df":1,"docs":{"90":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":4,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"16":{"tf":1.0},"20":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":1,"docs":{"73":{"tf":1.0}}}},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":1,"docs":{"15":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"1":{"tf":1.0},"7":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"r":{"df":11,"docs":{"101":{"tf":1.0},"15":{"tf":1.7320508075688772},"42":{"tf":1.0},"61":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"77":{"tf":1.4142135623730951},"78":{"tf":1.0},"86":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":1,"docs":{"33":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":1,"docs":{"33":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"102":{"tf":1.0},"15":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"5":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"58":{"tf":1.0},"61":{"tf":1.0},"67":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":11,"docs":{"101":{"tf":1.0},"115":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"20":{"tf":1.0},"56":{"tf":1.0},"61":{"tf":1.0},"67":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":2.0},"78":{"tf":1.4142135623730951}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"81":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":23,"docs":{"13":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.7320508075688772},"36":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"49":{"tf":1.0},"53":{"tf":1.0},"56":{"tf":1.4142135623730951},"63":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":2.0},"68":{"tf":2.0},"72":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"84":{"tf":1.4142135623730951},"91":{"tf":1.4142135623730951},"93":{"tf":1.7320508075688772},"94":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"s":{"df":2,"docs":{"33":{"tf":1.0},"56":{"tf":1.0}}}},"v":{"df":0,"docs":{},"m":{"df":1,"docs":{"19":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":5,"docs":{"18":{"tf":1.0},"48":{"tf":1.0},"62":{"tf":1.0},"77":{"tf":1.0},"82":{"tf":1.0}}}}},"s":{"c":{"df":0,"docs":{},"v":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"v":{"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"/":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"y":{"_":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":1,"docs":{"106":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"105":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"3":{"2":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"a":{"c":{"df":1,"docs":{"105":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":5,"docs":{"104":{"tf":2.0},"105":{"tf":2.0},"106":{"tf":2.449489742783178},"19":{"tf":1.4142135623730951},"9":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":5,"docs":{"105":{"tf":1.0},"106":{"tf":2.449489742783178},"20":{"tf":1.0},"60":{"tf":1.0},"96":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"77":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"106":{"tf":1.7320508075688772}}}}}},"w":{"df":13,"docs":{"106":{"tf":3.3166247903554},"20":{"tf":1.4142135623730951},"34":{"tf":1.0},"37":{"tf":1.4142135623730951},"5":{"tf":1.4142135623730951},"58":{"tf":2.449489742783178},"60":{"tf":2.0},"62":{"tf":1.0},"68":{"tf":1.0},"77":{"tf":1.0},"83":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.0}}}},"s":{"df":4,"docs":{"105":{"tf":1.4142135623730951},"106":{"tf":2.6457513110645907},"12":{"tf":2.23606797749979},"9":{"tf":1.0}}},"u":{"df":0,"docs":{},"n":{"df":11,"docs":{"105":{"tf":2.0},"106":{"tf":1.7320508075688772},"115":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":2.0},"17":{"tf":1.0},"20":{"tf":2.0},"22":{"tf":1.0},"23":{"tf":1.0},"5":{"tf":2.0},"78":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":4,"docs":{"10":{"tf":1.0},"77":{"tf":2.23606797749979},"78":{"tf":1.4142135623730951},"81":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"=":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":2,"docs":{"16":{"tf":1.0},"20":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":12,"docs":{"0":{"tf":1.0},"10":{"tf":1.4142135623730951},"105":{"tf":2.0},"106":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"19":{"tf":1.0},"33":{"tf":1.0},"4":{"tf":1.4142135623730951},"5":{"tf":1.0},"6":{"tf":1.4142135623730951},"71":{"tf":1.0},"9":{"tf":1.0}},"f":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"11":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"r":{"df":2,"docs":{"10":{"tf":1.0},"4":{"tf":1.0}}}},"df":1,"docs":{"105":{"tf":1.0}}}}}}}},"s":{"a":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":1,"docs":{"106":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":10,"docs":{"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.7320508075688772},"38":{"tf":1.0},"48":{"tf":1.0},"56":{"tf":1.0},"60":{"tf":1.0},"69":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"71":{"tf":1.0}}}}}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"6":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"34":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":3,"docs":{"64":{"tf":1.0},"69":{"tf":1.0},"97":{"tf":1.0}}},"df":0,"docs":{}}},"p":{"2":{"5":{"6":{"df":0,"docs":{},"k":{"1":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"92":{"tf":1.0}}}}}}}},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"92":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":11,"docs":{"114":{"tf":1.0},"15":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.0},"34":{"tf":1.0},"37":{"tf":1.0},"44":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"68":{"tf":1.0},"71":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":11,"docs":{"105":{"tf":1.0},"106":{"tf":1.0},"15":{"tf":1.4142135623730951},"17":{"tf":1.0},"34":{"tf":1.0},"62":{"tf":1.7320508075688772},"64":{"tf":1.0},"65":{"tf":1.0},"68":{"tf":1.0},"71":{"tf":1.4142135623730951},"83":{"tf":1.0}},"n":{"df":1,"docs":{"88":{"tf":1.0}}}},"g":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"69":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"65":{"tf":1.0}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"100":{"tf":1.0}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":2,"docs":{"23":{"tf":1.0},"25":{"tf":1.0}}}},"df":0,"docs":{}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"64":{"tf":1.0}}},"df":0,"docs":{}}}}},"r":{"d":{"df":1,"docs":{"5":{"tf":1.4142135623730951}}},"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"5":{"tf":1.0}}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":1,"docs":{"5":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"5":{"tf":1.0}}}}}},":":{":":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"5":{"tf":1.7320508075688772}}}}}}},"t":{"df":16,"docs":{"103":{"tf":1.0},"114":{"tf":1.0},"118":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"32":{"tf":1.0},"36":{"tf":2.23606797749979},"37":{"tf":1.7320508075688772},"48":{"tf":1.0},"5":{"tf":1.0},"54":{"tf":2.0},"55":{"tf":1.0},"56":{"tf":1.0},"64":{"tf":1.0},"68":{"tf":1.4142135623730951},"99":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"s":{"df":1,"docs":{"16":{"tf":1.0}}}},"df":13,"docs":{"0":{"tf":1.0},"15":{"tf":3.3166247903554},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":2.23606797749979},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.7320508075688772}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"103":{"tf":1.0},"14":{"tf":1.0}}}}}},"g":{"df":0,"docs":{},"n":{"(":{"df":0,"docs":{},"p":{"df":1,"docs":{"77":{"tf":1.0}}}},"df":0,"docs":{}}},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"5":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":2,"docs":{"62":{"tf":1.0},"77":{"tf":2.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"76":{"tf":1.0}}}},"w":{"df":2,"docs":{"20":{"tf":1.0},"56":{"tf":1.0}}}},"u":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"106":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}}}},"i":{"d":{"df":0,"docs":{},"e":{"df":7,"docs":{"48":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":1.4142135623730951},"69":{"tf":1.0},"82":{"tf":1.4142135623730951},"92":{"tf":1.0},"94":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":4,"docs":{"102":{"tf":1.0},"18":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0}}}}}},"df":2,"docs":{"51":{"tf":1.0},"77":{"tf":1.0}}}},"m":{"d":{"df":1,"docs":{"11":{"tf":2.0}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":3,"docs":{"3":{"tf":1.0},"33":{"tf":1.0},"71":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"64":{"tf":1.0}}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"l":{"df":5,"docs":{"34":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.4142135623730951},"44":{"tf":1.0},"73":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"37":{"tf":1.0}}}},"df":1,"docs":{"55":{"tf":1.0}}}}},"i":{"df":1,"docs":{"57":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"df":2,"docs":{"106":{"tf":1.7320508075688772},"17":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":12,"docs":{"106":{"tf":1.0},"11":{"tf":1.0},"118":{"tf":1.0},"12":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.0},"23":{"tf":1.0},"56":{"tf":1.7320508075688772},"57":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.0},"87":{"tf":1.0}}}}},"z":{"df":0,"docs":{},"e":{"df":8,"docs":{"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"23":{"tf":1.0},"28":{"tf":1.7320508075688772},"5":{"tf":1.7320508075688772},"77":{"tf":1.0},"81":{"tf":2.6457513110645907}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"105":{"tf":1.0}}}}},"m":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"20":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"5":{"tf":1.0}}}}}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"_":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":6,"docs":{"18":{"tf":2.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}}}},"b":{"df":0,"docs":{},"n":{"df":5,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":6,"docs":{"17":{"tf":1.7320508075688772},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}}}}}},"df":4,"docs":{"17":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"72":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"l":{"c":{"df":1,"docs":{"17":{"tf":1.0}}},"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"17":{"tf":1.7320508075688772},"18":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"18":{"tf":1.0},"67":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"e":{"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{":":{":":{"<":{"df":0,"docs":{},"u":{"3":{"2":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":1,"docs":{"5":{"tf":2.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"67":{"tf":1.0}}}},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"106":{"tf":1.0},"68":{"tf":1.0}}}},"u":{"df":0,"docs":{},"r":{"c":{"df":6,"docs":{"1":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"2":{"tf":1.0},"7":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"100":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{},"f":{"df":6,"docs":{"101":{"tf":1.0},"106":{"tf":1.0},"15":{"tf":1.0},"56":{"tf":1.0},"6":{"tf":1.0},"71":{"tf":1.0}},"i":{"df":9,"docs":{"105":{"tf":1.4142135623730951},"14":{"tf":1.0},"15":{"tf":1.0},"34":{"tf":1.7320508075688772},"6":{"tf":1.0},"60":{"tf":1.4142135623730951},"63":{"tf":1.0},"71":{"tf":1.4142135623730951},"72":{"tf":1.0}}}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"106":{"tf":1.0},"5":{"tf":1.0}}}}}},"q":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"96":{"tf":1.0}}}}}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"20":{"tf":1.4142135623730951}},"i":{"c":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"20":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":1,"docs":{"96":{"tf":1.0}}}},"u":{"a":{"df":0,"docs":{},"r":{"df":6,"docs":{"20":{"tf":2.23606797749979},"44":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"62":{"tf":1.0},"68":{"tf":1.0},"96":{"tf":1.4142135623730951}},"e":{"(":{"a":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"n":{"d":{"_":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"44":{"tf":1.0},"48":{"tf":1.0}},"e":{"(":{"a":{"df":3,"docs":{"44":{"tf":1.0},"48":{"tf":1.4142135623730951},"53":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":1,"docs":{"68":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"t":{"a":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"0":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":1,"docs":{"97":{"tf":1.0}}}},"n":{"d":{"a":{"df":0,"docs":{},"r":{"d":{"df":3,"docs":{"100":{"tf":1.0},"33":{"tf":1.0},"94":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"k":{"_":{"b":{"df":0,"docs":{},"n":{"df":5,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":5,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}}}}},"df":3,"docs":{"15":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0}},"i":{"df":1,"docs":{"112":{"tf":1.0}}}},"t":{"df":12,"docs":{"109":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"13":{"tf":1.0},"18":{"tf":1.0},"22":{"tf":1.4142135623730951},"3":{"tf":1.0},"31":{"tf":1.4142135623730951},"44":{"tf":1.7320508075688772},"47":{"tf":1.0},"5":{"tf":1.7320508075688772},"60":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"19":{"tf":1.0}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":13,"docs":{"101":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.4142135623730951},"46":{"tf":1.4142135623730951},"49":{"tf":1.0},"61":{"tf":1.7320508075688772},"62":{"tf":1.0},"64":{"tf":3.605551275463989},"68":{"tf":1.0},"69":{"tf":1.4142135623730951},"70":{"tf":1.0},"83":{"tf":1.0},"94":{"tf":1.0}}}}}}},"i":{"c":{"df":2,"docs":{"40":{"tf":1.0},"81":{"tf":2.0}}},"df":0,"docs":{}}},"y":{"df":2,"docs":{"34":{"tf":1.0},"71":{"tf":1.0}}}},"d":{":":{":":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"y":{":":{":":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"(":{"df":0,"docs":{},"x":{"df":1,"docs":{"91":{"tf":1.0}}}},"df":2,"docs":{"81":{"tf":1.0},"91":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"(":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{":":{":":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"n":{"df":2,"docs":{"82":{"tf":1.0},"92":{"tf":1.0}},"i":{"c":{"(":{"\"":{"c":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"69":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"76":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":1,"docs":{"93":{"tf":1.0}}}}}},"f":{"df":1,"docs":{"93":{"tf":1.0}},"e":{"(":{"0":{"df":1,"docs":{"92":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"93":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"82":{"tf":1.0},"94":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{":":{":":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":2,"docs":{"78":{"tf":1.0},"95":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"x":{"df":1,"docs":{"92":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{":":{":":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"16":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"d":{"df":2,"docs":{"33":{"tf":1.0},"60":{"tf":1.0}},"e":{":":{":":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"97":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.0}}}}}}}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"99":{"tf":1.0}}},"y":{":":{":":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"d":{":":{":":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"(":{"df":0,"docs":{},"x":{"df":1,"docs":{"96":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"(":{"0":{"df":3,"docs":{"13":{"tf":1.0},"20":{"tf":1.0},"36":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"99":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"98":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"(":{"df":0,"docs":{},"x":{"df":2,"docs":{"68":{"tf":1.0},"96":{"tf":1.0}}}},"df":0,"docs":{}}},"df":3,"docs":{"68":{"tf":1.0},"73":{"tf":1.0},"96":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"x":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"98":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"98":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":2,"docs":{"0":{"tf":1.0},"33":{"tf":1.0}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"22":{"tf":1.4142135623730951},"29":{"tf":1.0},"30":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"(":{"df":0,"docs":{},"i":{"df":1,"docs":{"56":{"tf":1.0}}}},"df":12,"docs":{"106":{"tf":1.0},"113":{"tf":1.4142135623730951},"115":{"tf":1.7320508075688772},"15":{"tf":1.7320508075688772},"16":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"36":{"tf":1.0},"37":{"tf":1.0},"40":{"tf":1.7320508075688772},"42":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}}}}}},"df":2,"docs":{"41":{"tf":1.0},"67":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"105":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":5,"docs":{"105":{"tf":1.0},"15":{"tf":1.0},"5":{"tf":1.0},"60":{"tf":1.0},"78":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}},"df":1,"docs":{"16":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":8,"docs":{"62":{"tf":1.0},"69":{"tf":1.7320508075688772},"70":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0},"79":{"tf":2.449489742783178},"92":{"tf":1.0},"94":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"59":{"tf":1.0}}}}}}},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":4,"docs":{"117":{"tf":1.0},"16":{"tf":1.0},"69":{"tf":1.0},"83":{"tf":1.0}}}}}},"df":0,"docs":{}}},"u":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}}},"u":{"b":{"(":{"6":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"<":{"1":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"22":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":6,"docs":{"102":{"tf":1.0},"22":{"tf":1.0},"31":{"tf":1.0},"56":{"tf":1.0},"67":{"tf":1.0},"74":{"tf":1.4142135623730951}},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":6,"docs":{"117":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":2.449489742783178},"54":{"tf":1.0},"56":{"tf":3.4641016151377544}},"e":{".":{"a":{"d":{"d":{"(":{"a":{"df":1,"docs":{"56":{"tf":1.7320508075688772}}},"df":0,"docs":{},"i":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}},"x":{"df":1,"docs":{"56":{"tf":2.8284271247461903}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"b":{"a":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"x":{"df":1,"docs":{"58":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"(":{"df":0,"docs":{},"x":{"df":1,"docs":{"58":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"u":{"b":{"(":{"df":0,"docs":{},"x":{"df":1,"docs":{"56":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":1,"docs":{"38":{"tf":1.0}},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"33":{"tf":1.0}},"e":{".":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"33":{"tf":1.0}}}}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.0}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"33":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{".":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"33":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},":":{":":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}}}}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"62":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"h":{"df":4,"docs":{"15":{"tf":1.7320508075688772},"33":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":1,"docs":{"62":{"tf":1.0}}}}}},"m":{"(":{"1":{"6":{"df":1,"docs":{"67":{"tf":1.0}}},"df":0,"docs":{}},"[":{"df":0,"docs":{},"x":{"df":1,"docs":{"60":{"tf":1.0}}}},"a":{"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"34":{"tf":1.0}}}}}},"df":6,"docs":{"105":{"tf":2.449489742783178},"34":{"tf":1.4142135623730951},"5":{"tf":2.23606797749979},"60":{"tf":1.7320508075688772},"62":{"tf":1.0},"67":{"tf":1.4142135623730951}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"34":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"z":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"33":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"44":{"tf":1.0}}}}}}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"105":{"tf":1.4142135623730951}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":14,"docs":{"0":{"tf":1.0},"102":{"tf":1.0},"106":{"tf":1.0},"11":{"tf":2.0},"110":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"39":{"tf":1.0},"45":{"tf":1.0},"6":{"tf":1.4142135623730951},"71":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"88":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":2,"docs":{"116":{"tf":1.0},"18":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"m":{"df":1,"docs":{"17":{"tf":1.0}}}},"w":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"56":{"tf":1.0}}}},"df":0,"docs":{}},"y":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":7,"docs":{"33":{"tf":1.4142135623730951},"34":{"tf":2.23606797749979},"60":{"tf":3.7416573867739413},"63":{"tf":1.4142135623730951},"71":{"tf":2.23606797749979},"73":{"tf":3.4641016151377544},"83":{"tf":1.0}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"x":{"df":3,"docs":{"60":{"tf":1.4142135623730951},"67":{"tf":1.0},"83":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":8,"docs":{"0":{"tf":1.0},"100":{"tf":1.0},"106":{"tf":1.0},"112":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.0},"33":{"tf":1.0},"67":{"tf":1.4142135623730951}}}}}}}},"t":{"0":{"df":1,"docs":{"82":{"tf":1.0}}},"1":{"df":2,"docs":{"67":{"tf":1.4142135623730951},"82":{"tf":1.0}}},"2":{"df":2,"docs":{"67":{"tf":2.23606797749979},"82":{"tf":1.0}}},"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"23":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"g":{"df":1,"docs":{"20":{"tf":1.0}}},"k":{"df":0,"docs":{},"e":{"df":10,"docs":{"15":{"tf":1.0},"18":{"tf":2.0},"34":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"72":{"tf":1.0},"82":{"tf":1.4142135623730951},"85":{"tf":1.0},"94":{"tf":1.0}}}},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":5,"docs":{"105":{"tf":1.4142135623730951},"11":{"tf":1.4142135623730951},"15":{"tf":1.0},"17":{"tf":1.0},"5":{"tf":1.4142135623730951}}}}}}},"df":7,"docs":{"102":{"tf":5.0},"60":{"tf":1.4142135623730951},"69":{"tf":1.0},"72":{"tf":1.4142135623730951},"74":{"tf":5.0},"91":{"tf":1.0},"93":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"17":{"tf":1.0}}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"5":{"tf":1.0},"56":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"t":{"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"/":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"/":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"/":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"d":{".":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":5,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":2.0},"16":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.6457513110645907}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{".":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"20":{"tf":2.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":2,"docs":{"22":{"tf":1.0},"31":{"tf":1.0}}},"df":6,"docs":{"106":{"tf":1.0},"19":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.4142135623730951},"31":{"tf":2.0},"5":{"tf":1.4142135623730951}}}},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"69":{"tf":1.0}}}}},"h":{"df":1,"docs":{"20":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":1,"docs":{"69":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"15":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"f":{"df":3,"docs":{"22":{"tf":1.0},"31":{"tf":1.0},"73":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":3,"docs":{"71":{"tf":1.0},"73":{"tf":1.4142135623730951},"96":{"tf":1.0}}}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":2,"docs":{"15":{"tf":1.0},"99":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":2,"docs":{"13":{"tf":1.0},"77":{"tf":1.0}}}}}}},"u":{"df":3,"docs":{"78":{"tf":1.0},"82":{"tf":1.0},"92":{"tf":1.0}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"e":{"df":4,"docs":{"10":{"tf":1.0},"20":{"tf":1.0},"73":{"tf":1.0},"86":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"p":{"df":1,"docs":{"106":{"tf":1.4142135623730951}}}},"n":{"df":1,"docs":{"82":{"tf":1.0}}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"17":{"tf":1.0}}}}}},"t":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"86":{"tf":1.0},"87":{"tf":1.0}}}},"df":0,"docs":{}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"77":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"y":{"df":1,"docs":{"20":{"tf":1.0}}}},"r":{"a":{"c":{"df":0,"docs":{},"e":{"df":5,"docs":{"106":{"tf":2.449489742783178},"18":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"5":{"tf":1.0}},"s":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":1,"docs":{"5":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"k":{"df":1,"docs":{"18":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"1":{"tf":1.0},"7":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"101":{"tf":1.0},"71":{"tf":1.7320508075688772},"74":{"tf":1.4142135623730951}}}},"n":{"df":0,"docs":{},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":3,"docs":{"15":{"tf":1.4142135623730951},"17":{"tf":1.7320508075688772},"18":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"42":{"tf":1.0}}}}}},"l":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"105":{"tf":1.0}}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"117":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"100":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":4,"docs":{"105":{"tf":1.0},"117":{"tf":1.7320508075688772},"118":{"tf":1.0},"83":{"tf":1.0}}}},"i":{"df":3,"docs":{"14":{"tf":1.0},"70":{"tf":1.7320508075688772},"71":{"tf":1.0}},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"77":{"tf":1.7320508075688772},"78":{"tf":1.0},"81":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"e":{"df":2,"docs":{"33":{"tf":1.0},"66":{"tf":1.7320508075688772}}}}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":7,"docs":{"61":{"tf":1.0},"62":{"tf":1.0},"69":{"tf":2.0},"70":{"tf":1.0},"71":{"tf":1.0},"80":{"tf":3.3166247903554},"82":{"tf":1.0}}}},"r":{"df":0,"docs":{},"n":{"df":2,"docs":{"118":{"tf":1.4142135623730951},"67":{"tf":1.0}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"106":{"tf":1.0}}}}}}},"v":{"1":{"df":1,"docs":{"60":{"tf":1.0}}},"df":1,"docs":{"60":{"tf":1.0}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"67":{"tf":1.0}}}}}},"o":{"df":12,"docs":{"101":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.0},"35":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"80":{"tf":1.4142135623730951},"81":{"tf":1.7320508075688772},"82":{"tf":1.0},"83":{"tf":1.7320508075688772},"9":{"tf":1.0},"97":{"tf":1.0}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":33,"docs":{"100":{"tf":2.23606797749979},"101":{"tf":1.7320508075688772},"117":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":2.0},"35":{"tf":1.0},"37":{"tf":1.0},"39":{"tf":1.0},"41":{"tf":1.0},"5":{"tf":1.4142135623730951},"55":{"tf":1.0},"60":{"tf":3.872983346207417},"61":{"tf":1.0},"63":{"tf":1.4142135623730951},"65":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":4.358898943540674},"72":{"tf":2.6457513110645907},"73":{"tf":3.4641016151377544},"74":{"tf":1.4142135623730951},"75":{"tf":1.7320508075688772},"76":{"tf":1.4142135623730951},"77":{"tf":1.4142135623730951},"78":{"tf":1.7320508075688772},"79":{"tf":1.4142135623730951},"80":{"tf":2.449489742783178},"81":{"tf":2.23606797749979},"82":{"tf":2.0},"83":{"tf":2.0},"84":{"tf":2.8284271247461903},"85":{"tf":2.6457513110645907},"93":{"tf":1.0}}},"i":{"c":{"df":2,"docs":{"18":{"tf":1.0},"69":{"tf":1.0}}},"df":0,"docs":{}}}}},"u":{"3":{"2":{")":{")":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"105":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"105":{"tf":1.0},"5":{"tf":1.0}}},"df":0,"docs":{}},"6":{"4":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"10":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":1,"docs":{"23":{"tf":1.0}}},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":5,"docs":{"62":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0}}}}},"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"0":{"tf":1.0},"106":{"tf":1.0}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"34":{"tf":1.0}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"5":{"tf":1.0}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"37":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"107":{"tf":1.0},"108":{"tf":1.0},"2":{"tf":1.0},"8":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"6":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":6,"docs":{"106":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951},"67":{"tf":1.0},"71":{"tf":1.0},"85":{"tf":1.4142135623730951},"99":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":2,"docs":{"15":{"tf":1.0},"16":{"tf":1.0}}}}}}},"k":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"105":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"77":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"71":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"78":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"106":{"tf":1.0},"71":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"16":{"tf":2.0}}}},"df":0,"docs":{}}}},"p":{"df":7,"docs":{"105":{"tf":1.0},"106":{"tf":1.0},"18":{"tf":1.0},"33":{"tf":1.0},"5":{"tf":1.0},"60":{"tf":1.0},"69":{"tf":1.0}}},"s":{"a":{"df":0,"docs":{},"g":{"df":12,"docs":{"13":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0},"56":{"tf":1.7320508075688772}}}},"df":64,"docs":{"105":{"tf":1.4142135623730951},"106":{"tf":4.242640687119285},"11":{"tf":1.0},"118":{"tf":1.0},"12":{"tf":1.0},"13":{"tf":1.0},"14":{"tf":1.7320508075688772},"15":{"tf":3.0},"16":{"tf":3.0},"17":{"tf":2.8284271247461903},"18":{"tf":3.605551275463989},"19":{"tf":1.0},"20":{"tf":2.0},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"3":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":3.1622776601683795},"34":{"tf":1.4142135623730951},"37":{"tf":1.7320508075688772},"42":{"tf":1.4142135623730951},"43":{"tf":1.7320508075688772},"48":{"tf":1.0},"49":{"tf":1.0},"5":{"tf":2.0},"52":{"tf":1.0},"53":{"tf":1.0},"56":{"tf":2.6457513110645907},"57":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":3.605551275463989},"61":{"tf":1.7320508075688772},"63":{"tf":1.4142135623730951},"64":{"tf":2.23606797749979},"65":{"tf":1.0},"67":{"tf":1.7320508075688772},"68":{"tf":1.4142135623730951},"69":{"tf":1.0},"71":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951},"73":{"tf":2.23606797749979},"74":{"tf":2.6457513110645907},"77":{"tf":1.0},"78":{"tf":1.4142135623730951},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.7320508075688772},"82":{"tf":1.0},"83":{"tf":1.4142135623730951},"85":{"tf":1.4142135623730951},"87":{"tf":1.4142135623730951},"92":{"tf":1.4142135623730951},"93":{"tf":1.7320508075688772},"94":{"tf":1.4142135623730951},"95":{"tf":1.0},"96":{"tf":1.4142135623730951},"99":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"105":{"tf":1.0},"85":{"tf":1.0}}}},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"105":{"tf":1.0}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"15":{"tf":1.0},"82":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"33":{"tf":1.0},"34":{"tf":1.0},"83":{"tf":1.0}},"s":{":":{":":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{"_":{"b":{"df":0,"docs":{},"y":{"(":{"df":0,"docs":{},"x":{"df":1,"docs":{"34":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{"(":{"a":{"df":1,"docs":{"34":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"v":{"a":{"d":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"118":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"a":{"df":1,"docs":{"107":{"tf":2.0}}},"df":6,"docs":{"106":{"tf":1.7320508075688772},"14":{"tf":1.0},"34":{"tf":1.0},"69":{"tf":1.4142135623730951},"86":{"tf":1.0},"87":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":39,"docs":{"101":{"tf":1.0},"105":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"22":{"tf":1.4142135623730951},"23":{"tf":4.0},"24":{"tf":2.23606797749979},"25":{"tf":2.449489742783178},"26":{"tf":2.23606797749979},"27":{"tf":2.23606797749979},"28":{"tf":2.0},"30":{"tf":1.4142135623730951},"31":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":2.23606797749979},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"48":{"tf":1.4142135623730951},"56":{"tf":1.0},"58":{"tf":1.7320508075688772},"60":{"tf":2.8284271247461903},"61":{"tf":1.0},"63":{"tf":1.4142135623730951},"64":{"tf":2.449489742783178},"65":{"tf":2.449489742783178},"66":{"tf":2.0},"68":{"tf":1.7320508075688772},"69":{"tf":2.23606797749979},"70":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.7320508075688772},"73":{"tf":2.8284271247461903},"78":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"85":{"tf":1.0},"87":{"tf":1.7320508075688772},"90":{"tf":1.0},"99":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":6,"docs":{"60":{"tf":1.0},"64":{"tf":1.4142135623730951},"65":{"tf":1.0},"69":{"tf":1.7320508075688772},"70":{"tf":1.0},"71":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"1":{"df":1,"docs":{"85":{"tf":1.0}}},"2":{"df":1,"docs":{"85":{"tf":1.0}}},"3":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"85":{"tf":1.0}}}}}},"df":0,"docs":{}},"4":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"85":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":3,"docs":{"69":{"tf":1.4142135623730951},"70":{"tf":1.0},"85":{"tf":1.4142135623730951}}}},"t":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":1,"docs":{"60":{"tf":1.0}}}}}}},"df":1,"docs":{"68":{"tf":1.7320508075688772}},"e":{"c":{"!":{"[":{"0":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":1,"docs":{"16":{"tf":1.0}}}}}}},"df":0,"docs":{}},"1":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"106":{"tf":1.0}}}}}},"df":0,"docs":{}},"<":{"_":{"df":1,"docs":{"105":{"tf":1.0}}},"b":{"df":0,"docs":{},"n":{"2":{"5":{"4":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"16":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"u":{"3":{"2":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"16":{"tf":1.0}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"105":{"tf":1.0}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"61":{"tf":1.0}},"f":{"df":11,"docs":{"15":{"tf":3.7416573867739413},"16":{"tf":1.7320508075688772},"17":{"tf":1.0},"18":{"tf":2.8284271247461903},"20":{"tf":1.7320508075688772},"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.4142135623730951},"25":{"tf":1.0},"26":{"tf":2.23606797749979},"27":{"tf":1.4142135623730951}},"i":{"df":14,"docs":{"105":{"tf":1.0},"15":{"tf":2.8284271247461903},"16":{"tf":1.0},"17":{"tf":3.1622776601683795},"18":{"tf":4.358898943540674},"20":{"tf":2.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"24":{"tf":1.0},"25":{"tf":1.7320508075688772},"26":{"tf":1.0},"27":{"tf":1.7320508075688772},"92":{"tf":1.0},"97":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":2,"docs":{"17":{"tf":1.0},"18":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"s":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"0":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"10":{"tf":1.0}}}}}}}},"i":{"a":{"df":5,"docs":{"15":{"tf":2.0},"19":{"tf":1.0},"34":{"tf":1.4142135623730951},"78":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"df":8,"docs":{"114":{"tf":1.0},"115":{"tf":1.7320508075688772},"32":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"5":{"tf":1.0},"54":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"15":{"tf":1.7320508075688772},"18":{"tf":2.23606797749979},"20":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"18":{"tf":2.0}}}}},"df":0,"docs":{}},"df":2,"docs":{"24":{"tf":1.0},"26":{"tf":1.0}}}}},"df":0,"docs":{}},"df":7,"docs":{"15":{"tf":1.4142135623730951},"18":{"tf":2.449489742783178},"20":{"tf":1.4142135623730951},"24":{"tf":1.7320508075688772},"25":{"tf":2.0},"26":{"tf":1.0},"27":{"tf":1.4142135623730951}}}}},"m":{"df":7,"docs":{"103":{"tf":1.0},"13":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"6":{"tf":1.4142135623730951}}}},"w":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":8,"docs":{"10":{"tf":1.0},"105":{"tf":1.0},"34":{"tf":1.0},"42":{"tf":1.4142135623730951},"63":{"tf":1.0},"73":{"tf":1.7320508075688772},"78":{"tf":1.0},"97":{"tf":1.0}}}},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"22":{"tf":1.0}}}},"y":{"df":14,"docs":{"10":{"tf":1.0},"118":{"tf":1.0},"15":{"tf":1.4142135623730951},"17":{"tf":1.0},"3":{"tf":1.0},"34":{"tf":1.4142135623730951},"38":{"tf":1.0},"4":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"85":{"tf":1.0},"9":{"tf":1.0}}}},"df":4,"docs":{"16":{"tf":1.0},"23":{"tf":1.0},"56":{"tf":2.0},"58":{"tf":2.23606797749979}},"e":{"'":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"18":{"tf":1.0}}}},"r":{"df":2,"docs":{"18":{"tf":1.4142135623730951},"86":{"tf":1.0}}},"v":{"df":1,"docs":{"18":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":4,"docs":{"17":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"6":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"58":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"23":{"tf":1.4142135623730951},"60":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":4,"docs":{"5":{"tf":1.0},"60":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":1,"docs":{"77":{"tf":2.23606797749979}}}},"t":{"[":{"0":{"df":1,"docs":{"67":{"tf":1.4142135623730951}}},"1":{"5":{"df":1,"docs":{"67":{"tf":1.4142135623730951}}},"6":{"df":1,"docs":{"67":{"tf":1.0}}},"df":1,"docs":{"67":{"tf":1.4142135623730951}}},"df":0,"docs":{},"i":{"df":1,"docs":{"67":{"tf":1.7320508075688772}}}},"df":26,"docs":{"105":{"tf":1.4142135623730951},"106":{"tf":2.0},"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":2.8284271247461903},"34":{"tf":1.0},"37":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"56":{"tf":2.6457513110645907},"57":{"tf":2.6457513110645907},"58":{"tf":3.1622776601683795},"6":{"tf":1.0},"60":{"tf":2.23606797749979},"64":{"tf":1.0},"67":{"tf":1.4142135623730951},"68":{"tf":2.0},"73":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0},"9":{"tf":1.0},"96":{"tf":1.4142135623730951},"98":{"tf":1.0},"99":{"tf":2.23606797749979}},"h":{"_":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"(":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"2":{"df":1,"docs":{"16":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.0}},"s":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"\"":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"\"":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":1,"docs":{"16":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"v":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"\"":{"df":0,"docs":{},"v":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"\"":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":1,"docs":{"16":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"116":{"tf":1.0},"37":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":8,"docs":{"15":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"58":{"tf":1.4142135623730951},"60":{"tf":1.0},"64":{"tf":1.0},"73":{"tf":1.4142135623730951},"93":{"tf":1.7320508075688772}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"23":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":5,"docs":{"106":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.0},"93":{"tf":1.7320508075688772},"96":{"tf":1.0}},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"l":{"d":{"df":8,"docs":{"105":{"tf":1.0},"13":{"tf":1.7320508075688772},"14":{"tf":1.7320508075688772},"15":{"tf":1.7320508075688772},"16":{"tf":2.0},"17":{"tf":2.0},"18":{"tf":1.7320508075688772},"19":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"1":{"df":1,"docs":{"5":{"tf":1.0}}},"2":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":6,"docs":{"13":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":2.0},"42":{"tf":1.4142135623730951},"48":{"tf":1.0},"5":{"tf":1.0}},"r":{"df":1,"docs":{"16":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":6,"docs":{"106":{"tf":1.0},"41":{"tf":1.0},"5":{"tf":1.0},"62":{"tf":1.4142135623730951},"79":{"tf":1.0},"80":{"tf":1.0}}}}}}}}},"x":{"*":{"df":0,"docs":{},"x":{"df":1,"docs":{"60":{"tf":1.0}}}},":":{":":{"df":0,"docs":{},"i":{"df":1,"docs":{"69":{"tf":1.0}}},"y":{"(":{"a":{"df":1,"docs":{"69":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":27,"docs":{"13":{"tf":2.8284271247461903},"20":{"tf":2.23606797749979},"34":{"tf":2.449489742783178},"36":{"tf":2.8284271247461903},"37":{"tf":3.1622776601683795},"41":{"tf":1.4142135623730951},"42":{"tf":1.7320508075688772},"44":{"tf":3.872983346207417},"48":{"tf":2.23606797749979},"51":{"tf":1.0},"52":{"tf":1.0},"55":{"tf":1.4142135623730951},"56":{"tf":5.196152422706632},"58":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951},"63":{"tf":1.4142135623730951},"64":{"tf":3.3166247903554},"67":{"tf":1.4142135623730951},"68":{"tf":3.3166247903554},"69":{"tf":2.6457513110645907},"70":{"tf":1.4142135623730951},"73":{"tf":2.23606797749979},"82":{"tf":1.4142135623730951},"83":{"tf":2.23606797749979},"91":{"tf":1.0},"92":{"tf":1.4142135623730951},"96":{"tf":2.449489742783178}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"44":{"tf":2.6457513110645907}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"62":{"tf":1.0}}}}},"y":{"(":{"df":0,"docs":{},"i":{"df":1,"docs":{"96":{"tf":1.0}}}},"df":15,"docs":{"13":{"tf":2.23606797749979},"20":{"tf":1.7320508075688772},"36":{"tf":2.23606797749979},"37":{"tf":2.6457513110645907},"44":{"tf":1.7320508075688772},"48":{"tf":1.7320508075688772},"55":{"tf":1.4142135623730951},"56":{"tf":4.58257569495584},"58":{"tf":2.6457513110645907},"63":{"tf":1.0},"64":{"tf":2.0},"69":{"tf":1.4142135623730951},"82":{"tf":1.4142135623730951},"83":{"tf":2.23606797749979},"96":{"tf":1.4142135623730951}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"18":{"tf":1.0}}}}}}}}}},"z":{"df":5,"docs":{"44":{"tf":1.7320508075688772},"48":{"tf":1.7320508075688772},"55":{"tf":1.4142135623730951},"56":{"tf":4.69041575982343},"58":{"tf":2.23606797749979}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":7,"docs":{"13":{"tf":1.0},"33":{"tf":1.4142135623730951},"36":{"tf":1.0},"44":{"tf":1.0},"77":{"tf":1.7320508075688772},"80":{"tf":1.0},"92":{"tf":1.0}}}}},"k":{"df":6,"docs":{"0":{"tf":1.0},"106":{"tf":2.449489742783178},"14":{"tf":1.0},"20":{"tf":1.0},"3":{"tf":1.0},"5":{"tf":1.0}},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"m":{"df":1,"docs":{"59":{"tf":1.4142135623730951}}}}},"v":{"df":0,"docs":{},"m":{"df":5,"docs":{"0":{"tf":1.0},"109":{"tf":1.0},"112":{"tf":1.0},"19":{"tf":1.0},"6":{"tf":1.0}}}}}}}},"title":{"root":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"117":{"tf":1.0}}}},"l":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"67":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"113":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"y":{"df":2,"docs":{"81":{"tf":1.0},"91":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"32":{"tf":1.0}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":2,"docs":{"42":{"tf":1.0},"48":{"tf":1.0}}}}}}}},"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"109":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"116":{"tf":1.0},"64":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"76":{"tf":1.0}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"84":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":2,"docs":{"11":{"tf":1.0},"12":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":2,"docs":{"74":{"tf":1.0},"89":{"tf":1.0}}}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"97":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"14":{"tf":1.0}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"n":{"df":3,"docs":{"52":{"tf":1.0},"73":{"tf":1.0},"86":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"21":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"114":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"37":{"tf":1.0}}}}},"df":2,"docs":{"101":{"tf":1.0},"68":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":1,"docs":{"106":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"1":{"tf":1.0},"7":{"tf":1.0}}}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"93":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"40":{"tf":1.0}}}}}}}}},"d":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":3,"docs":{"34":{"tf":1.0},"60":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"98":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"51":{"tf":1.0},"78":{"tf":1.0}}}}}}}},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"116":{"tf":1.0}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"85":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"112":{"tf":1.0}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":2,"docs":{"17":{"tf":1.0},"18":{"tf":1.0}}}}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"96":{"tf":1.0}}}}},"df":0,"docs":{},"m":{"df":1,"docs":{"108":{"tf":1.0}}}},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":3,"docs":{"105":{"tf":1.0},"19":{"tf":1.0},"72":{"tf":1.0}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"27":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":7,"docs":{"50":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"83":{"tf":1.0}}}}}}}}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":2,"docs":{"51":{"tf":1.0},"78":{"tf":1.0}}},"df":0,"docs":{}}},"x":{"df":1,"docs":{"86":{"tf":1.0}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"103":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"u":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":6,"docs":{"44":{"tf":1.0},"45":{"tf":1.0},"63":{"tf":1.0},"68":{"tf":1.0},"82":{"tf":1.0},"90":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"117":{"tf":1.0},"62":{"tf":1.0}}}}}}},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"2":{"df":1,"docs":{"111":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":5,"docs":{"13":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0}}}},"p":{"df":1,"docs":{"21":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"99":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"89":{"tf":1.0}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"3":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":5,"docs":{"49":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0}}}},"df":0,"docs":{}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":1,"docs":{"77":{"tf":1.0}}}},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"0":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"r":{"df":1,"docs":{"70":{"tf":1.0}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"26":{"tf":1.0}}}}},"l":{"a":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"47":{"tf":1.0}}}}},"df":0,"docs":{},"m":{"b":{"d":{"a":{"df":1,"docs":{"63":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"91":{"tf":1.0}}}}}}},"i":{"b":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"16":{"tf":1.0}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"2":{"tf":1.0},"8":{"tf":1.0}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"21":{"tf":1.0}}},"k":{"df":2,"docs":{"56":{"tf":1.0},"58":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"118":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"75":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"51":{"tf":1.0}}}}}},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"55":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"115":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0}}}}}},"df":0,"docs":{},"p":{"df":1,"docs":{"88":{"tf":1.0}}},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"65":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"33":{"tf":1.0}},"u":{"df":1,"docs":{"95":{"tf":1.0}}}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"102":{"tf":1.0},"57":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"30":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}},"p":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"92":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"69":{"tf":1.0}}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"23":{"tf":1.0},"30":{"tf":1.0},"59":{"tf":1.0}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":0,"docs":{},"y":{"3":{"df":1,"docs":{"110":{"tf":1.0}}},"df":0,"docs":{}}}}}},"o":{"df":0,"docs":{},"w":{"d":{"df":0,"docs":{},"r":{"df":14,"docs":{"11":{"tf":1.0},"12":{"tf":1.0},"16":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"10":{"tf":1.0},"4":{"tf":1.0}}}}}}}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"94":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"40":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"f":{"df":1,"docs":{"18":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"24":{"tf":1.0}}}}}},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"68":{"tf":1.0}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"5":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"43":{"tf":1.0}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"115":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"73":{"tf":1.0}}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"70":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":5,"docs":{"39":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"52":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"87":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"v":{"df":3,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":1,"docs":{"12":{"tf":1.0}}},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"105":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"105":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":2,"docs":{"15":{"tf":1.0},"28":{"tf":1.0}}}}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"5":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"46":{"tf":1.0},"64":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"79":{"tf":1.0}}}}}}},"u":{"b":{"df":0,"docs":{},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"38":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"31":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"74":{"tf":1.0}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"80":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":5,"docs":{"100":{"tf":1.0},"71":{"tf":1.0},"75":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"s":{"df":3,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.0}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"a":{"df":1,"docs":{"107":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"u":{"df":1,"docs":{"87":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":2,"docs":{"15":{"tf":1.0},"26":{"tf":1.0}},"i":{"df":2,"docs":{"25":{"tf":1.0},"27":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"115":{"tf":1.0},"36":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"d":{"df":5,"docs":{"13":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"41":{"tf":1.0}}}}}}},"z":{"df":0,"docs":{},"k":{"df":1,"docs":{"106":{"tf":1.0}}}}}}},"lang":"English","pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5"},"results_options":{"limit_results":30,"teaser_word_count":30},"search_options":{"bool":"OR","expand":true,"fields":{"body":{"boost":1},"breadcrumbs":{"boost":1},"title":{"boost":2}}}} \ No newline at end of file diff --git a/toc.html b/toc.html new file mode 100644 index 0000000000..c93fe54642 --- /dev/null +++ b/toc.html @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + +
  1. powdrVM
  2. Introduction
  3. Getting Started with powdrVM
  4. Installation
  5. Quick Start
  6. powdr SDK
  7. Introduction
  8. Getting Started with powdr SDK
  9. Installation
  10. Hello World
    1. in the CLI
    2. as a library
    3. verified on Ethereum
    4. verified on Ethereum with proof aggregation
  11. Examples
  12. Using publics
  13. powdr SDK Reference Guide
  14. CLI
  15. asm
    1. Modules
    2. Declarations
    3. Machines
    4. Registers
    5. Functions
    6. Expressions
    7. Instructions
    8. Operations
    9. Links
  16. pil
    1. Declarations
    2. Expressions
    3. Patterns
    4. Types
    5. Fixed Columns
    6. Built-in Functions
  17. Frontends
    1. RISCV
      1. zk-Continuations
    2. Valida
    3. EVM
  18. Backends
    1. plonky3
    2. Halo2
    3. eSTARK
  19. Architecture
    1. Compiler
    2. Linker
+ + diff --git a/toc.js b/toc.js new file mode 100644 index 0000000000..ddd24ddff5 --- /dev/null +++ b/toc.js @@ -0,0 +1,70 @@ +// Populate the sidebar +// +// This is a script, and not included directly in the page, to control the total size of the book. +// The TOC contains an entry for each page, so if each page includes a copy of the TOC, +// the total size of the page becomes O(n**2). +class MDBookSidebarScrollbox extends HTMLElement { + constructor() { + super(); + } + connectedCallback() { + this.innerHTML = '
  1. powdrVM
  2. Introduction
  3. Getting Started with powdrVM
  4. Installation
  5. Quick Start
  6. powdr SDK
  7. Introduction
  8. Getting Started with powdr SDK
  9. Installation
  10. Hello World
    1. in the CLI
    2. as a library
    3. verified on Ethereum
    4. verified on Ethereum with proof aggregation
  11. Examples
  12. Using publics
  13. powdr SDK Reference Guide
  14. CLI
  15. asm
    1. Modules
    2. Declarations
    3. Machines
    4. Registers
    5. Functions
    6. Expressions
    7. Instructions
    8. Operations
    9. Links
  16. pil
    1. Declarations
    2. Expressions
    3. Patterns
    4. Types
    5. Fixed Columns
    6. Built-in Functions
  17. Frontends
    1. RISCV
      1. zk-Continuations
    2. Valida
    3. EVM
  18. Backends
    1. plonky3
    2. Halo2
    3. eSTARK
  19. Architecture
    1. Compiler
    2. Linker
'; + // Set the current, active page, and reveal it if it's hidden + let current_page = document.location.href.toString(); + if (current_page.endsWith("/")) { + current_page += "index.html"; + } + var links = Array.prototype.slice.call(this.querySelectorAll("a")); + var l = links.length; + for (var i = 0; i < l; ++i) { + var link = links[i]; + var href = link.getAttribute("href"); + if (href && !href.startsWith("#") && !/^(?:[a-z+]+:)?\/\//.test(href)) { + link.href = path_to_root + href; + } + // The "index" page is supposed to alias the first chapter in the book. + if (link.href === current_page || (i === 0 && path_to_root === "" && current_page.endsWith("/index.html"))) { + link.classList.add("active"); + var parent = link.parentElement; + if (parent && parent.classList.contains("chapter-item")) { + parent.classList.add("expanded"); + } + while (parent) { + if (parent.tagName === "LI" && parent.previousElementSibling) { + if (parent.previousElementSibling.classList.contains("chapter-item")) { + parent.previousElementSibling.classList.add("expanded"); + } + } + parent = parent.parentElement; + } + } + } + // Track and set sidebar scroll position + this.addEventListener('click', function(e) { + if (e.target.tagName === 'A') { + sessionStorage.setItem('sidebar-scroll', this.scrollTop); + } + }, { passive: true }); + var sidebarScrollTop = sessionStorage.getItem('sidebar-scroll'); + sessionStorage.removeItem('sidebar-scroll'); + if (sidebarScrollTop) { + // preserve sidebar scroll position when navigating via links within sidebar + this.scrollTop = sidebarScrollTop; + } else { + // scroll sidebar to current active section when navigating via "next/previous chapter" buttons + var activeSection = document.querySelector('#sidebar .active'); + if (activeSection) { + activeSection.scrollIntoView({ block: 'center' }); + } + } + // Toggle buttons + var sidebarAnchorToggles = document.querySelectorAll('#sidebar a.toggle'); + function toggleSection(ev) { + ev.currentTarget.parentElement.classList.toggle('expanded'); + } + Array.from(sidebarAnchorToggles).forEach(function (el) { + el.addEventListener('click', toggleSection); + }); + } +} +window.customElements.define("mdbook-sidebar-scrollbox", MDBookSidebarScrollbox); diff --git a/tomorrow-night.css b/tomorrow-night.css new file mode 100644 index 0000000000..11752b8a8c --- /dev/null +++ b/tomorrow-night.css @@ -0,0 +1,104 @@ +/* Tomorrow Night Theme */ +/* https://github.com/jmblog/color-themes-for-highlightjs */ +/* Original theme - https://github.com/chriskempson/tomorrow-theme */ +/* https://github.com/jmblog/color-themes-for-highlightjs */ + +/* Tomorrow Comment */ +.hljs-comment { + color: #969896; +} + +/* Tomorrow Red */ +.hljs-variable, +.hljs-attribute, +.hljs-attr, +.hljs-tag, +.hljs-regexp, +.ruby .hljs-constant, +.xml .hljs-tag .hljs-title, +.xml .hljs-pi, +.xml .hljs-doctype, +.html .hljs-doctype, +.css .hljs-id, +.css .hljs-class, +.css .hljs-pseudo { + color: #cc6666; +} + +/* Tomorrow Orange */ +.hljs-number, +.hljs-preprocessor, +.hljs-pragma, +.hljs-built_in, +.hljs-literal, +.hljs-params, +.hljs-constant { + color: #de935f; +} + +/* Tomorrow Yellow */ +.ruby .hljs-class .hljs-title, +.css .hljs-rule .hljs-attribute { + color: #f0c674; +} + +/* Tomorrow Green */ +.hljs-string, +.hljs-value, +.hljs-inheritance, +.hljs-header, +.hljs-name, +.ruby .hljs-symbol, +.xml .hljs-cdata { + color: #b5bd68; +} + +/* Tomorrow Aqua */ +.hljs-title, +.hljs-section, +.css .hljs-hexcolor { + color: #8abeb7; +} + +/* Tomorrow Blue */ +.hljs-function, +.python .hljs-decorator, +.python .hljs-title, +.ruby .hljs-function .hljs-title, +.ruby .hljs-title .hljs-keyword, +.perl .hljs-sub, +.javascript .hljs-title, +.coffeescript .hljs-title { + color: #81a2be; +} + +/* Tomorrow Purple */ +.hljs-keyword, +.javascript .hljs-function { + color: #b294bb; +} + +.hljs { + display: block; + overflow-x: auto; + background: #1d1f21; + color: #c5c8c6; +} + +.coffeescript .javascript, +.javascript .xml, +.tex .hljs-formula, +.xml .javascript, +.xml .vbscript, +.xml .css, +.xml .hljs-cdata { + opacity: 0.5; +} + +.hljs-addition { + color: #718c00; +} + +.hljs-deletion { + color: #c82829; +}