diff --git a/.changeset/README.md b/.changeset/README.md new file mode 100644 index 0000000000..e5b6d8d6a6 --- /dev/null +++ b/.changeset/README.md @@ -0,0 +1,8 @@ +# Changesets + +Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works +with multi-package repos, or single-package repos to help you version and publish your code. You can +find the full documentation for it [in our repository](https://github.com/changesets/changesets) + +We have a quick list of common questions to get you started engaging with this project in +[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) diff --git a/.changeset/config.json b/.changeset/config.json new file mode 100644 index 0000000000..d88011f613 --- /dev/null +++ b/.changeset/config.json @@ -0,0 +1,11 @@ +{ + "$schema": "https://unpkg.com/@changesets/config@3.1.1/schema.json", + "changelog": "@changesets/cli/changelog", + "commit": false, + "fixed": [], + "linked": [], + "access": "restricted", + "baseBranch": "main", + "updateInternalDependencies": "patch", + "ignore": [] +} diff --git a/.github/workflows/binary-releases.yml b/.github/workflows/binary-releases.yml new file mode 100644 index 0000000000..c66efc734e --- /dev/null +++ b/.github/workflows/binary-releases.yml @@ -0,0 +1,153 @@ +name: Binary Releases + +on: + push: + tags: + - 'v*' + workflow_dispatch: + inputs: + tag: + description: 'Tag to release' + required: true + default: 'v0.1.0' + prerelease: + description: 'Mark as pre-release' + required: false + default: false + type: boolean + repository_dispatch: + types: [binary-release] + +permissions: + contents: write + +jobs: + build: + name: Build binaries + runs-on: ${{ matrix.os }} + strategy: + matrix: + include: + - os: ubuntu-latest + target: x86_64-unknown-linux-gnu + os_name: linux + arch: x86_64 + - os: macos-latest + target: aarch64-apple-darwin + os_name: macos + arch: aarch64 + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + + - name: Add Rust targets + run: | + rustup target add ${{ matrix.target }} + + + + - name: Build enclave + run: cargo build --release --target ${{ matrix.target }} --bin enclave + + - name: Build enclaveup + run: cargo build --release --target ${{ matrix.target }} --bin enclaveup + + - name: Create release archives + run: | + mkdir -p dist + + # Get the correct binary extension + if [[ "${{ matrix.target }}" == *"windows"* ]]; then + EXT=".exe" + else + EXT="" + fi + + # Create enclave archive + cp "target/${{ matrix.target }}/release/enclave${EXT}" "./enclave${EXT}" + tar -czf "dist/enclave-${{ matrix.os_name }}-${{ matrix.arch }}.tar.gz" "enclave${EXT}" + rm "enclave${EXT}" + + # Create enclaveup archive + cp "target/${{ matrix.target }}/release/enclaveup${EXT}" "./enclaveup${EXT}" + tar -czf "dist/enclaveup-${{ matrix.os_name }}-${{ matrix.arch }}.tar.gz" "enclaveup${EXT}" + rm "enclaveup${EXT}" + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: enclave-binaries-${{ matrix.os_name }}-${{ matrix.arch }}-${{ github.run_number }} + path: dist/ + + release: + name: Create Release + runs-on: ubuntu-latest + needs: build + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Download all artifacts + uses: actions/download-artifact@v4 + with: + path: dist/ + + - name: Flatten artifacts + run: | + mkdir -p release-assets + find dist/ -name "*.tar.gz" -exec cp {} release-assets/ \; + ls -la release-assets/ + + - name: Get tag name and prerelease status + id: get_tag + run: | + if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then + echo "tag=${{ github.event.inputs.tag }}" >> $GITHUB_OUTPUT + echo "prerelease=${{ github.event.inputs.prerelease }}" >> $GITHUB_OUTPUT + elif [ "${{ github.event_name }}" = "repository_dispatch" ]; then + VERSION="${{ github.event.client_payload.version }}" + echo "tag=v${VERSION}" >> $GITHUB_OUTPUT + echo "prerelease=false" >> $GITHUB_OUTPUT + else + TAG="${GITHUB_REF#refs/tags/}" + echo "tag=${TAG}" >> $GITHUB_OUTPUT + # Auto-detect prerelease based on tag name + if [[ "${TAG}" =~ (test|alpha|beta|rc|dev) ]]; then + echo "prerelease=true" >> $GITHUB_OUTPUT + else + echo "prerelease=false" >> $GITHUB_OUTPUT + fi + fi + + - name: Create Release + uses: softprops/action-gh-release@v1 + with: + tag_name: ${{ steps.get_tag.outputs.tag }} + name: Release ${{ steps.get_tag.outputs.tag }} + draft: false + prerelease: ${{ steps.get_tag.outputs.prerelease }} + files: release-assets/* + body: | + ## Installation + + ### Install enclaveup (the installer) + ```bash + curl -fsSL https://raw.githubusercontent.com/gnosisguild/enclave/main/install | bash + ``` + + ### Use enclaveup to install enclave + ```bash + enclaveup install + ``` + + ## Assets + - `enclave-*`: The main Enclave CLI binary + - `enclaveup-*`: The installer binary + + Supported platforms: + - Linux (x86_64) + - macOS (x86_64, aarch64 Apple Silicon) \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8d0a816318..c2cbf797cb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,37 +1,136 @@ -name: "EVM" -env: - HARDHAT_VAR_MNEMONIC: "test test test test test test test test test test test junk" - HARDHAT_VAR_INFURA_API_KEY: "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz" - # Uncomment the following lines to set your configuration variables using - # GitHub secrets (https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions) - # - # HARDHAT_VAR_MNEMONIC: ${{ secrets.Mnemonic }} - # HARDHAT_VAR_INFURA_API_KEY: ${{ secrets.InfuraApiKey }} - # HARDHAT_VAR_ARBISCAN_API_KEY: ${{ secrets.ArbiscanApiKey }} - # HARDHAT_VAR_BSCSCAN_API_KEY: ${{ secrets.BscscanApiKey }} - # HARDHAT_VAR_ETHERSCAN_API_KEY: ${{ secrets.EtherscanApiKey }} - # HARDHAT_VAR_OPTIMISM_API_KEY: ${{ secrets.OptimismApiKey }} - # HARDHAT_VAR_POLYGONSCAN_API_KEY: ${{ secrets.PolygonscanApiKey }} - # HARDHAT_VAR_SNOWTRACE_API_KEY: ${{ secrets.SnowtraceApiKey }} - +name: ci on: workflow_dispatch: pull_request: + branches: + - main push: branches: - main +env: + DOCKERFILE_PATH: crates/support/Dockerfile + IMAGE_NAME: ghcr.io/${{ github.repository_owner }}/e3-support + HARDHAT_VAR_MNEMONIC: "test test test test test test test test test test test junk" + HARDHAT_VAR_INFURA_API_KEY: "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz" + PRIVATE_KEY: "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" + +permissions: + contents: read + packages: write jobs: - ci: + rust_unit: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Install Rust 1.85.1 + uses: actions-rs/toolchain@v1 + with: + toolchain: 1.85.1 + + # We must install foundry in order to be able to test anvil + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + + - name: Install solc + run: | + sudo add-apt-repository ppa:ethereum/ethereum \ + && sudo apt-get update -y \ + && sudo apt-get install -y solc + + # We need to setup node in order to compile the hardhat contracts to get the artifacts + - name: "Setup node" + uses: actions/setup-node@v3 + with: + node-version: 22 + + - name: pnpm-setup + uses: pnpm/action-setup@v4 + + - name: Cache node modules + uses: actions/cache@v4 + with: + path: "**/node_modules" + key: ${{ runner.os }}-modules-${{ hashFiles('**/pnpm-lock.yaml') }} + - name: "Install the dependencies" + run: "pnpm install" + + - name: "Compile the contracts and generate the TypeChain bindings" + run: "pnpm typechain" + + - name: Checking code format ciphernode + run: pnpm ciphernode:lint + + - name: Run tests + run: "pnpm ciphernode:test" + + build_e3_support_risc0: + runs-on: ubuntu-latest + outputs: + image_tag: ${{ steps.version.outputs.version }} + steps: + - uses: actions/checkout@v4 + - name: Generate version tag + id: version + run: | + echo "version=$(git rev-parse --short=9 HEAD)" >> $GITHUB_OUTPUT + - name: Generate tags + id: tags + run: | + VERSION=$(git rev-parse --short=9 HEAD) + TAGS="${{ env.IMAGE_NAME }}:$VERSION" + if [ "${{ github.ref }}" = "refs/heads/main" ]; then + TAGS="$TAGS,${{ env.IMAGE_NAME }}:latest" + fi + echo "tags=$TAGS" >> $GITHUB_OUTPUT + - name: Set up BuildKit + uses: docker/setup-buildx-action@v3 + - name: Log in to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Build image + uses: docker/build-push-action@v5 + with: + context: ./crates/support + file: ${{ env.DOCKERFILE_PATH }} + push: true + tags: ${{ steps.tags.outputs.tags }} + cache-from: | + type=gha,scope=cargo-registry + type=gha,scope=cargo-git + type=gha,scope=cargo-target + type=gha,scope=buildcache + cache-to: | + type=gha,mode=max,scope=cargo-registry + type=gha,mode=max,scope=cargo-git + type=gha,mode=max,scope=cargo-target + type=gha,mode=max,scope=buildcache + + test_contracts: runs-on: "ubuntu-latest" steps: - name: "Check out the repo" uses: "actions/checkout@v4" + - name: Install Rust 1.85.1 + uses: actions-rs/toolchain@v1 + with: + toolchain: 1.85.1 + target: wasm32-unknown-unknown + + # required so that we can compile wasm within the sdk + - uses: jetli/wasm-pack-action@v0.4.0 + with: + version: "latest" + - name: "Setup node" uses: actions/setup-node@v3 with: - node-version: 20 + node-version: 22 - name: pnpm-setup uses: pnpm/action-setup@v4 @@ -46,7 +145,7 @@ jobs: run: "pnpm install" - name: "Lint the code" - run: "pnpm lint" + run: "pnpm evm:lint" - name: "Add lint summary" run: | @@ -63,3 +162,343 @@ jobs: run: | echo "## Test results" >> $GITHUB_STEP_SUMMARY echo "✅ Passed" >> $GITHUB_STEP_SUMMARY + + test_net: + runs-on: "ubuntu-latest" + steps: + - name: "Check out the repo" + uses: "actions/checkout@v4" + - name: "Setup node" + uses: actions/setup-node@v4 + with: + node-version: 22 + - name: pnpm-setup + uses: pnpm/action-setup@v4 + - name: "Run network tests" + run: "pnpm test:integration net --no-prebuild" + - name: "Add test summary" + run: | + echo "## Network test results" >> $GITHUB_STEP_SUMMARY + echo "✅ Passed" >> $GITHUB_STEP_SUMMARY + + integration_prebuild: + runs-on: "ubuntu-latest" + steps: + - name: "Check out the repo" + uses: "actions/checkout@v4" + - name: "Setup node" + uses: actions/setup-node@v4 + with: + node-version: 22 + - name: pnpm-setup + uses: pnpm/action-setup@v4 + - name: Install Rust 1.85.1 + uses: dtolnay/rust-toolchain@stable + with: + toolchain: 1.85.1 + - name: Cache node modules + uses: actions/cache@v4 + with: + path: "**/node_modules" + key: ${{ runner.os }}-modules-${{ hashFiles('**/pnpm-lock.yaml') }} + - name: "Install the dependencies" + run: "pnpm install" + - name: "Lint the code" + run: "pnpm lint" + - name: "Add lint summary" + run: | + echo "## Lint results" >> $GITHUB_STEP_SUMMARY + echo "✅ Passed" >> $GITHUB_STEP_SUMMARY + - name: "Compile the contracts and generate the TypeChain bindings" + run: "pnpm typechain" + - name: "Run prebuild" + run: "pnpm test:integration prebuild" + - name: "Verify build artifacts exist" + run: | + echo "Checking for build artifacts:" + ls -la target/debug/fake_encrypt || echo "fake_encrypt not found" + ls -la target/debug/pack_e3_params || echo "pack_e3_params not found" + - name: "Upload build artifacts" + uses: actions/upload-artifact@v4 + with: + name: build-artifacts + path: | + target/debug/fake_encrypt + target/debug/pack_e3_params + if-no-files-found: error + + ciphernode_integration_test: + needs: [integration_prebuild, build_enclave_cli] + runs-on: "ubuntu-latest" + strategy: + matrix: + test-suite: [base, persist] + fail-fast: false + steps: + - name: "Check out the repo" + uses: "actions/checkout@v4" + - name: "Setup node" + uses: actions/setup-node@v4 + with: + node-version: 22 + - name: pnpm-setup + uses: pnpm/action-setup@v4 + - name: Install Rust 1.85.1 + uses: dtolnay/rust-toolchain@stable + with: + toolchain: 1.85.1 + - name: Cache node modules + uses: actions/cache@v4 + with: + path: "**/node_modules" + key: ${{ runner.os }}-modules-${{ hashFiles('**/pnpm-lock.yaml') }} + - name: "Install the dependencies" + run: "pnpm install" + - name: "Download build artifacts" + uses: actions/download-artifact@v4 + with: + name: build-artifacts + path: target/debug/ + - name: "Download enclave binary" + uses: actions/download-artifact@v4 + with: + name: enclave-binary + path: ~/.cargo/bin/ + - name: "Download SDK artifacts" + uses: actions/download-artifact@v4 + with: + name: sdk-artifacts + path: ./ + - name: "Verify downloaded artifacts" + run: | + echo "Checking for required artifacts:" + ls -la target/debug/fake_encrypt || echo "fake_encrypt not found" + ls -la target/debug/pack_e3_params || echo "pack_e3_params not found" + ls -la ~/.cargo/bin/enclave || echo "enclave binary not found" + ls -la packages/evm/dist || echo "SDK dist not found" + ls -la crates/wasm/dist || echo "WASM dist not found" + - name: "Set executable permissions" + run: | + chmod +x target/debug/fake_encrypt + chmod +x target/debug/pack_e3_params + chmod +x ~/.cargo/bin/enclave + - name: "Run ${{ matrix.test-suite }} tests" + run: "pnpm test:integration ${{ matrix.test-suite }} --no-prebuild" + - name: "Add test summary" + run: | + echo "## Test results for ${{ matrix.test-suite }}" >> $GITHUB_STEP_SUMMARY + echo "✅ Passed" >> $GITHUB_STEP_SUMMARY + + build_enclave_cli: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: Cache Rust dependencies + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + templates/default/target/ + key: rust-deps-${{ hashFiles('**/Cargo.lock') }} + restore-keys: rust-deps- + - name: Setup Rust + uses: dtolnay/rust-toolchain@stable + with: + toolchain: 1.85.1 + - name: Cache Rust dependencies + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target/ + key: rust-deps-${{ hashFiles('**/Cargo.lock') }} + restore-keys: rust-deps- + - name: Build enclave CLI + run: cargo install --path crates/cli --bin enclave + - name: Upload enclave binary + uses: actions/upload-artifact@v4 + with: + name: enclave-binary + path: ~/.cargo/bin/enclave + retention-days: 1 + + build_e3_support_dev: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: Cache Rust dependencies + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + templates/default/target/ + key: rust-deps-${{ hashFiles('**/Cargo.lock') }} + restore-keys: rust-deps- + - name: Setup Rust + uses: dtolnay/rust-toolchain@stable + with: + toolchain: 1.85.1 + - name: Build support scripts + run: cd templates/default && cargo build --bin e3-support-scripts-dev + - name: Verify build artifacts + run: | + echo "Checking for support scripts binary:" + find templates/default/target/ -name "e3-support-scripts-dev" -type f -ls || echo "Binary not found" + - name: Upload support scripts artifacts + uses: actions/upload-artifact@v4 + with: + name: support-scripts-artifacts + path: templates/default/target/ + retention-days: 1 + if-no-files-found: error + + build_sdk: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: Cache Node dependencies + uses: actions/cache@v4 + with: + path: | + ~/.pnpm-store + node_modules + key: node-deps-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: node-deps- + - name: Cache Rust dependencies + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target/ + key: rust-deps-${{ hashFiles('**/Cargo.lock') }} + restore-keys: rust-deps- + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "22" + - name: Install pnpm + uses: pnpm/action-setup@v4 + - name: Setup Rust + uses: dtolnay/rust-toolchain@stable + with: + toolchain: 1.85.1 + targets: wasm32-unknown-unknown + - name: Install wasm-pack + run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh + - name: Install node dependencies + run: pnpm install + - name: Build the sdk + run: pnpm sdk:build + - name: Upload SDK artifacts + uses: actions/upload-artifact@v4 + with: + name: sdk-artifacts + path: | + packages/enclave-sdk/dist + packages/evm/dist + packages/evm/artifacts + packages/evm/cache + packages/evm/typechain-types + crates/wasm/dist + retention-days: 1 + if-no-files-found: warn + + template_integration: + runs-on: ubuntu-latest + needs: [build_enclave_cli, build_e3_support_dev, build_sdk] + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "22" + - name: Install pnpm + uses: pnpm/action-setup@v4 + - name: Setup Rust + uses: dtolnay/rust-toolchain@stable + with: + toolchain: 1.85.1 + - name: Install node dependencies + run: pnpm install + - name: Download enclave binary + uses: actions/download-artifact@v4 + with: + name: enclave-binary + path: ~/.cargo/bin/ + - name: Download support scripts artifacts + uses: actions/download-artifact@v4 + with: + name: support-scripts-artifacts + path: templates/default/target/ + - name: Download SDK artifacts + uses: actions/download-artifact@v4 + with: + name: sdk-artifacts + path: ./ + - name: Make binaries executable + run: | + chmod +x ~/.cargo/bin/enclave + chmod +x templates/default/target/debug/e3-support-scripts-dev + - name: Verify downloaded artifacts + run: | + echo "Checking downloaded artifacts:" + ls -la ~/.cargo/bin/enclave || echo "enclave binary not found" + ls -la templates/default/target/debug/e3-support-scripts-dev || echo "support scripts not found" + ls -la packages/evm/dist || echo "SDK dist not found" + ls -la crates/wasm/dist || echo "WASM dist not found" + echo "Support scripts permissions:" + ls -la templates/default/target/debug/e3-support-scripts-dev + - name: Test Template + run: | + cd templates/default + chmod 755 contracts tests + chmod 644 contracts/ImageID.sol + pnpm test:integration + + test_enclave_init: + runs-on: ubuntu-latest + needs: [build_enclave_cli, build_e3_support_dev] + steps: + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "22" + - name: Install pnpm + uses: pnpm/action-setup@v4 + with: + version: 10.7.1 + - name: Setup Rust + uses: dtolnay/rust-toolchain@stable + with: + toolchain: 1.85.1 + - name: Download enclave binary + uses: actions/download-artifact@v4 + with: + name: enclave-binary + path: ~/.cargo/bin/ + - name: Make binaries executable + run: | + chmod +x ~/.cargo/bin/enclave + - name: Verify downloaded artifacts + run: | + ls -la ~/.cargo/bin/enclave || echo "enclave binary not found" + - name: Enclave init + run: | + if [ "${{ github.event_name }}" = "pull_request" ]; then + BRANCH="${{ github.head_ref }}" + else + BRANCH="${{ github.ref_name }}" + fi + enclave init mycitest --template=${{ github.server_url }}/${{ github.repository }}.git#${BRANCH}:templates/default diff --git a/.github/workflows/crisp-docker.yml b/.github/workflows/crisp-docker.yml new file mode 100644 index 0000000000..bdcf940873 --- /dev/null +++ b/.github/workflows/crisp-docker.yml @@ -0,0 +1,73 @@ +name: Build Crisp Server + +on: + workflow_dispatch: + push: + branches: + - release + - main + paths: + - "examples/CRISP/apps/server/**" + pull_request: + branches: + - release + - main + paths: + - "examples/CRISP/apps/server/**" + +env: + DOCKERFILE_PATH: examples/CRISP/apps/server/Dockerfile + IMAGE_NAME: ghcr.io/${{ github.repository_owner }}/crisp-server + +permissions: + contents: read + packages: write + +jobs: + build: + name: Build & Push Image + runs-on: ubuntu-latest + outputs: + image_tag: ${{ steps.version.outputs.version }} + steps: + - uses: actions/checkout@v4 + + - name: Generate version tag + id: version + run: | + echo "version=$(date +'%Y%m%d')-${GITHUB_SHA::8}" >> $GITHUB_OUTPUT + + - name: Set up BuildKit + uses: docker/setup-buildx-action@v3 + + - name: Log in to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Prepare .dockerignore + run: cp examples/CRISP/apps/server/.dockerignore .dockerignore + + - name: Build image + uses: docker/build-push-action@v5 + with: + context: . + file: ${{ env.DOCKERFILE_PATH }} + push: true + tags: | + ${{ env.IMAGE_NAME }}:${{ steps.version.outputs.version }} + ${{ github.ref == 'refs/heads/release' && format('{0}:latest', env.IMAGE_NAME) || '' }} + build-args: | + SKIP_SOLIDITY=1 + cache-from: | + type=gha,scope=cargo-registry + type=gha,scope=cargo-git + type=gha,scope=cargo-target + type=gha,scope=buildcache + cache-to: | + type=gha,mode=max,scope=cargo-registry + type=gha,mode=max,scope=cargo-git + type=gha,mode=max,scope=cargo-target + type=gha,mode=max,scope=buildcache diff --git a/.github/workflows/crisp-e2e.yaml b/.github/workflows/crisp-e2e.yaml index 056c9fdd53..865f951829 100644 --- a/.github/workflows/crisp-e2e.yaml +++ b/.github/workflows/crisp-e2e.yaml @@ -1,15 +1,11 @@ name: CRISP on: - push: - branches: [main] - paths: - - "examples/CRISP/**" + workflow_dispatch: pull_request: - branches: [main] - paths: - - "examples/CRISP/**" - workflow_dispatch: # Allow manual triggering + push: + branches: + - main jobs: test: @@ -21,6 +17,7 @@ jobs: - name: Remove unnecessary files run: | sudo rm -rf /usr/share/dotnet + sudo rm -rf /usr/local/lib/android sudo rm -rf "$AGENT_TOOLSDIRECTORY" - name: Set environment variables for Docker Compose @@ -33,7 +30,14 @@ jobs: submodules: recursive - name: Prepare test environment - run: mkdir -p $GITHUB_WORKSPACE/examples/CRISP/test-results && sudo chmod 777 $GITHUB_WORKSPACE/examples/CRISP/test-results && mkdir -p $GITHUB_WORKSPACE/examples/CRISP/playwright-report && chmod 777 $GITHUB_WORKSPACE/examples/CRISP/playwright-report + run: | + mkdir -p $GITHUB_WORKSPACE/examples/CRISP/test-results + sudo chmod -R 777 $GITHUB_WORKSPACE/examples/CRISP/test-results + mkdir -p $GITHUB_WORKSPACE/examples/CRISP/playwright-report + sudo chmod -R 777 $GITHUB_WORKSPACE/examples/CRISP/playwright-report + mkdir -p $GITHUB_WORKSPACE/examples/CRISP/.cache-synpress + sudo chown -R $USER_UID:$USER_GID $GITHUB_WORKSPACE/examples/CRISP/.cache-synpress + sudo chmod -R 777 $GITHUB_WORKSPACE/examples/CRISP/.cache-synpress - name: Setup Node.js uses: actions/setup-node@v4 @@ -70,6 +74,9 @@ jobs: - name: Run Playwright tests working-directory: ./examples/CRISP + env: + PLAYWRIGHT_WORKERS: 4 + METAMASK_VERSION: 11.8.2 run: pnpm test:e2e - name: Upload test results diff --git a/.github/workflows/ec2-deployment.yml b/.github/workflows/ec2-deployment.yml index 72aa34a9d1..aa389f5c6a 100644 --- a/.github/workflows/ec2-deployment.yml +++ b/.github/workflows/ec2-deployment.yml @@ -5,18 +5,20 @@ on: - release - main paths: - - "packages/ciphernode/**" + - "Cargo.*" + - "crates/**" - "packages/evm/contracts/**" pull_request: branches: - release - main paths: - - "packages/ciphernode/**" + - "Cargo.*" + - "crates/**" - "packages/evm/contracts/**" env: - DOCKERFILE_PATH: packages/ciphernode/Dockerfile + DOCKERFILE_PATH: crates/Dockerfile IMAGE_NAME: ghcr.io/gnosisguild/ciphernode permissions: @@ -25,7 +27,7 @@ permissions: jobs: build: - name: Build Image + name: Build & Push Image runs-on: ubuntu-latest outputs: image_tag: ${{ steps.version.outputs.version }} diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml deleted file mode 100644 index 8870c53b3a..0000000000 --- a/.github/workflows/integration.yml +++ /dev/null @@ -1,142 +0,0 @@ -name: "INTEGRATION" -env: - HARDHAT_VAR_MNEMONIC: "test test test test test test test test test test test junk" - HARDHAT_VAR_INFURA_API_KEY: "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz" - PRIVATE_KEY: "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" - -on: - workflow_dispatch: - pull_request: - push: - branches: - - main - -jobs: - test-net: - runs-on: "ubuntu-latest" - steps: - - name: "Check out the repo" - uses: "actions/checkout@v4" - - - name: "Setup node" - uses: actions/setup-node@v3 - with: - node-version: 20 - - - name: pnpm-setup - uses: pnpm/action-setup@v4 - - - name: "Run network tests" - run: "pnpm test:integration net --no-prebuild" - - - name: "Add test summary" - run: | - echo "## Network test results" >> $GITHUB_STEP_SUMMARY - echo "✅ Passed" >> $GITHUB_STEP_SUMMARY - - prebuild: - runs-on: "ubuntu-latest" - steps: - - name: "Check out the repo" - uses: "actions/checkout@v4" - - - name: "Setup node" - uses: actions/setup-node@v3 - with: - node-version: 20 - - - name: pnpm-setup - uses: pnpm/action-setup@v4 - - - name: Install Rust 1.81.0 - uses: actions-rs/toolchain@v1 - with: - toolchain: 1.81.0 - override: true - - - name: Cache node modules - uses: actions/cache@v4 - with: - path: "**/node_modules" - key: ${{ runner.os }}-modules-${{ hashFiles('**/pnpm.lock') }} - - - name: "Install the dependencies" - run: "pnpm install" - - - name: "Lint the code" - run: "pnpm lint" - - - name: "Add lint summary" - run: | - echo "## Lint results" >> $GITHUB_STEP_SUMMARY - echo "✅ Passed" >> $GITHUB_STEP_SUMMARY - - - name: "Compile the contracts and generate the TypeChain bindings" - run: "pnpm typechain" - - - name: "Run prebuild" - run: "pnpm test:integration prebuild" - - - name: "Upload build artifacts" - uses: actions/upload-artifact@v4 - with: - name: build-artifacts - path: | - packages/ciphernode/target/debug/enclave - packages/ciphernode/target/debug/fake_encrypt - packages/ciphernode/target/debug/pack_e3_params - - test: - needs: prebuild - runs-on: "ubuntu-latest" - strategy: - matrix: - test-suite: [base, persist] - fail-fast: false - - steps: - - name: "Check out the repo" - uses: "actions/checkout@v4" - - - name: "Setup node" - uses: actions/setup-node@v3 - with: - node-version: 20 - - - name: pnpm-setup - uses: pnpm/action-setup@v4 - - - name: Install Rust 1.81.0 - uses: actions-rs/toolchain@v1 - with: - toolchain: 1.81.0 - override: true - - - name: Cache node modules - uses: actions/cache@v4 - with: - path: "**/node_modules" - key: ${{ runner.os }}-modules-${{ hashFiles('**/pnpm-lock.yaml') }} - - - name: "Install the dependencies" - run: "pnpm install" - - - name: "Download build artifacts" - uses: actions/download-artifact@v4 - with: - name: build-artifacts - path: packages/ciphernode/target/debug/ - - - name: "Set executable permissions" - run: | - chmod +x packages/ciphernode/target/debug/enclave - chmod +x packages/ciphernode/target/debug/fake_encrypt - chmod +x packages/ciphernode/target/debug/pack_e3_params - - - name: "Run ${{ matrix.test-suite }} tests" - run: "pnpm test:integration ${{ matrix.test-suite }} --no-prebuild" - - - name: "Add test summary" - run: | - echo "## Test results for ${{ matrix.test-suite }}" >> $GITHUB_STEP_SUMMARY - echo "✅ Passed" >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/publish-evm.yml b/.github/workflows/publish-evm.yml index 0c14b78188..06f0c8aebd 100644 --- a/.github/workflows/publish-evm.yml +++ b/.github/workflows/publish-evm.yml @@ -2,12 +2,10 @@ name: EVM Version release on: release: types: [created] - env: MNEMONIC: "test test test test test test test test test test test junk" INFURA_API_KEY: "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz" ETHERSCAN_API_KEY: "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz" - jobs: publish-npm: runs-on: ubuntu-latest @@ -15,11 +13,23 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-node@v3 with: - node-version: 20 + node-version: 22 + registry-url: "https://registry.npmjs.org/" - name: pnpm-setup uses: pnpm/action-setup@v4 - run: pnpm install + - run: pnpm config:release + env: + NODE_AUTH_TOKEN: ${{secrets.PUBLISH_NPM_TOKEN}} - run: pnpm evm:release env: - NPM_AUTH_TOKEN: ${{secrets.PUBLISH_NPM_TOKEN}} - YARN_REGISTRY: https://registry.npmjs.org/ + NODE_AUTH_TOKEN: ${{secrets.PUBLISH_NPM_TOKEN}} + - run: pnpm wasm:release + env: + NODE_AUTH_TOKEN: ${{secrets.PUBLISH_NPM_TOKEN}} + - run: pnpm sdk:release + env: + NODE_AUTH_TOKEN: ${{secrets.PUBLISH_NPM_TOKEN}} + - run: pnpm react:release + env: + NODE_AUTH_TOKEN: ${{secrets.PUBLISH_NPM_TOKEN}} diff --git a/.github/workflows/releases.yml b/.github/workflows/releases.yml new file mode 100644 index 0000000000..9d873df0d7 --- /dev/null +++ b/.github/workflows/releases.yml @@ -0,0 +1,108 @@ +name: Releases Workflow + +permissions: + pull-requests: write + contents: write + +on: + push: + branches: [main] + paths: + - "Cargo.toml" + - "package.json" + - "crates/**" + - "packages/**" + - ".github/workflows/releases.yml" + +jobs: + release-rust: + name: Release Rust Crates + runs-on: ubuntu-latest + outputs: + releases_created: ${{ steps.release-plz.outputs.releases_created }} + version: ${{ steps.release-plz.outputs.version }} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable + + - name: Run release-plz + id: release-plz + uses: MarcoIeni/release-plz-action@v0.5.64 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} + with: + version: "0.3.83" + + - uses: fregante/setup-git-user@v2.0.1 + if: steps.release-plz.outputs.prs_created == 'true' + + - name: Install dprint + if: steps.release-plz.outputs.prs_created == 'true' + run: curl -fsSL https://dprint.dev/install.sh | sh -s 0.47.2 > /dev/null 2>&1 + + - name: Format Rust code + if: steps.release-plz.outputs.prs_created == 'true' + run: | + pr_branch="${{ fromJSON(steps.release-plz.outputs.pr).head_branch }}" + git pull + git checkout "$pr_branch" + $HOME/.dprint/bin/dprint fmt + git commit -am 'chore: format files' + git push origin "$pr_branch" + + release-npm: + name: Release NPM Packages + runs-on: ubuntu-latest + needs: release-rust + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "20" + registry-url: "https://registry.npmjs.org" + + - name: Setup pnpm + uses: pnpm/action-setup@v2 + with: + version: 10.7.1 + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Build packages + run: pnpm build + + - name: Create Release PR or Publish + uses: changesets/action@v1 + with: + publish: pnpm release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + + trigger-binary-release: + name: Trigger Binary Release + runs-on: ubuntu-latest + needs: [release-rust, release-npm] + if: needs.release-rust.outputs.releases_created == 'true' + steps: + - uses: actions/checkout@v4 + + - name: Trigger binary release workflow + uses: peter-evans/repository-dispatch@v3 + with: + token: ${{ secrets.GITHUB_TOKEN }} + event-type: binary-release + client-payload: | + { + "version": "${{ needs.release-rust.outputs.version }}" + } diff --git a/.github/workflows/rust-ci.yml b/.github/workflows/rust-ci.yml deleted file mode 100644 index 241aea27d7..0000000000 --- a/.github/workflows/rust-ci.yml +++ /dev/null @@ -1,56 +0,0 @@ -name: Rust -on: - workflow_dispatch: - pull_request: - push: - branches: - - main - -jobs: - ci: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: Install Rust 1.81.0 - uses: actions-rs/toolchain@v1 - with: - toolchain: 1.81.0 - override: true - - # We must install foundry in order to be able to test anvil - - name: Install Foundry - uses: foundry-rs/foundry-toolchain@v1 - - - name: Install solc - run: | - sudo add-apt-repository ppa:ethereum/ethereum \ - && sudo apt-get update -y \ - && sudo apt-get install -y solc - - # We need to setup node in order to compile the hardhat contracts to get the artifacts - - name: "Setup node" - uses: actions/setup-node@v3 - with: - node-version: 20 - - - name: pnpm-setup - uses: pnpm/action-setup@v4 - - - name: Cache node modules - uses: actions/cache@v4 - with: - path: "**/node_modules" - key: ${{ runner.os }}-modules-${{ hashFiles('**/pnpm-lock.yaml') }} - - name: "Install the dependencies" - run: "pnpm install" - - - name: "Compile the contracts and generate the TypeChain bindings" - run: "pnpm typechain" - - # Now we can check rust formatting and run tests - - name: Checking code format - run: cd ./packages/ciphernode && cargo fmt -- --check - - - name: Run tests - run: "pnpm ciphernode:test" diff --git a/.gitmodules b/.gitmodules index 648ceda5b9..b663ca7ab4 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "examples/CRISP/lib/risc0-ethereum"] path = examples/CRISP/lib/risc0-ethereum url = https://github.com/risc0/risc0-ethereum +[submodule "templates/default/lib/risc0-ethereum"] + path = templates/default/lib/risc0-ethereum + url = https://github.com/gnosisguild/risc0-ethereum diff --git a/.vscode/settings.json b/.vscode/settings.json index e731e67341..5f9142ac88 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,18 +1,22 @@ { "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.formatOnSave": true, - "prettier.documentSelectors": ["**/*.sol"], + "prettier.documentSelectors": [ + "**/*.sol" + ], "solidity.formatter": "prettier", "typescript.tsdk": "node_modules/typescript/lib", "rust-analyzer.linkedProjects": [ - "packages/ciphernode/Cargo.toml", - "packages/compute_provider/Cargo.toml", - "packages/commons/Cargo.toml", + "crates/evm/Cargo.toml", + "crates/evm-helpers/Cargo.toml", "examples/CRISP/apps/program/Cargo.toml", "examples/CRISP/apps/server/Cargo.toml", "examples/CRISP/apps/wasm-crypto/Cargo.toml" ], "[solidity]": { "editor.defaultFormatter": "NomicFoundation.hardhat-solidity" + }, + "[rust]": { + "editor.defaultFormatter": "rust-lang.rust-analyzer" } -} +} \ No newline at end of file diff --git a/packages/ciphernode/Cargo.lock b/Cargo.lock similarity index 88% rename from packages/ciphernode/Cargo.lock rename to Cargo.lock index 606746be3c..9bed39b1ea 100644 --- a/packages/ciphernode/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "actix" @@ -59,7 +59,7 @@ dependencies = [ "brotli", "bytes", "bytestring", - "derive_more 2.0.1", + "derive_more", "encoding_rs", "flate2", "foldhash", @@ -174,7 +174,7 @@ dependencies = [ "bytestring", "cfg-if", "cookie", - "derive_more 2.0.1", + "derive_more", "encoding_rs", "foldhash", "futures-core", @@ -271,35 +271,16 @@ dependencies = [ "subtle", ] -[[package]] -name = "aggregator" -version = "0.1.0" -dependencies = [ - "actix", - "anyhow", - "async-trait", - "bincode", - "config", - "data", - "e3_request", - "events", - "fhe 0.1.0", - "serde", - "sortition", - "tracing", -] - [[package]] name = "ahash" -version = "0.8.11" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", - "getrandom 0.2.16", "once_cell", "version_check", - "zerocopy 0.7.35", + "zerocopy", ] [[package]] @@ -334,9 +315,9 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "alloy" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59febb24956a41c29bb5f450978fbe825bd6456b3f80586c8bd558dc882e7b6a" +checksum = "18e746cb4cea9ab4cda8cb117717b16c21116004f51efd78968ee0f1ffcf2602" dependencies = [ "alloy-consensus", "alloy-contract", @@ -360,38 +341,45 @@ dependencies = [ [[package]] name = "alloy-chains" -version = "0.1.69" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28e2652684758b0d9b389d248b209ed9fd9989ef489a550265fe4bb8454fe7eb" +checksum = "19a9cc9d81ace3da457883b0bdf76776e55f1b84219a9e9d55c27ad308548d3f" dependencies = [ "alloy-primitives", "num_enum", - "strum 0.27.1", + "strum", ] [[package]] name = "alloy-consensus" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e88e1edea70787c33e11197d3f32ae380f3db19e6e061e539a5bcf8184a6b326" +checksum = "659c33e85c4a9f8bb1b9a2400f4f3d0dd52fbc4bd3650e08d22df1e17d5d92ee" dependencies = [ "alloy-eips", "alloy-primitives", "alloy-rlp", "alloy-serde", "alloy-trie", + "alloy-tx-macros", "auto_impl", "c-kzg", - "derive_more 1.0.0", + "derive_more", + "either", "k256", + "once_cell", + "rand 0.8.5", + "secp256k1", "serde", + "serde_with", + "thiserror 2.0.12", ] [[package]] name = "alloy-consensus-any" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57b1bb53f40c0273cd1975573cd457b39213e68584e36d1401d25fd0398a1d65" +checksum = "d48fdc146414932cec2114f749f5f65a8960ee7547b1638a97bb0d04160d09e4" dependencies = [ "alloy-consensus", "alloy-eips", @@ -403,10 +391,11 @@ dependencies = [ [[package]] name = "alloy-contract" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b668c78c4b1f12f474ede5a85e8ce550d0aa1ef7d49fd1d22855a43b960e725" +checksum = "c711bfed1579611565ab831166c7bbaf123baea785ea945f02ed3620950f6fe1" dependencies = [ + "alloy-consensus", "alloy-dyn-abi", "alloy-json-abi", "alloy-network", @@ -419,14 +408,15 @@ dependencies = [ "alloy-transport", "futures", "futures-util", + "serde_json", "thiserror 2.0.12", ] [[package]] name = "alloy-core" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d8bcce99ad10fe02640cfaec1c6bc809b837c783c1d52906aa5af66e2a196f6" +checksum = "5968f48d7a62587cd874bd84034831da4f7f577ce5de984828e376766efc0f32" dependencies = [ "alloy-dyn-abi", "alloy-json-abi", @@ -437,26 +427,38 @@ dependencies = [ [[package]] name = "alloy-dyn-abi" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb8e762aefd39a397ff485bc86df673465c4ad3ec8819cc60833a8a3ba5cdc87" +checksum = "f9135eb501feccf7f4cb8a183afd406a65483fdad7bbd7332d0470e5d725c92f" dependencies = [ "alloy-json-abi", "alloy-primitives", "alloy-sol-type-parser", "alloy-sol-types", - "const-hex", "itoa", "serde", "serde_json", "winnow", ] +[[package]] +name = "alloy-eip2124" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "741bdd7499908b3aa0b159bba11e71c8cddd009a2c2eb7a06e825f1ec87900a5" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "crc", + "serde", + "thiserror 2.0.12", +] + [[package]] name = "alloy-eip2930" -version = "0.1.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0069cf0642457f87a01a014f6dc29d5d893cd4fd8fddf0c3cdfad1bb3ebafc41" +checksum = "7b82752a889170df67bbb36d42ca63c531eb16274f0d7299ae2a680facba17bd" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -465,52 +467,68 @@ dependencies = [ [[package]] name = "alloy-eip7702" -version = "0.4.2" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c986539255fb839d1533c128e190e557e52ff652c9ef62939e233a81dd93f7e" +checksum = "9d4769c6ffddca380b0070d71c8b7f30bed375543fe76bb2f74ec0acf4b7cd16" dependencies = [ "alloy-primitives", "alloy-rlp", - "derive_more 1.0.0", "k256", "serde", + "thiserror 2.0.12", ] [[package]] name = "alloy-eips" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f9fadfe089e9ccc0650473f2d4ef0a28bc015bbca5631d9f0f09e49b557fdb3" +checksum = "8390cb5c872d53560635dabc02d616c1bb626dd0f7d6893f8725edb822573fed" dependencies = [ + "alloy-eip2124", "alloy-eip2930", "alloy-eip7702", "alloy-primitives", "alloy-rlp", "alloy-serde", + "auto_impl", "c-kzg", - "derive_more 1.0.0", - "once_cell", + "derive_more", + "either", "serde", "sha2", ] [[package]] name = "alloy-genesis" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b2a4cf7b70f3495788e74ce1c765260ffe38820a2a774ff4aacb62e31ea73f9" +checksum = "a18ce1538291d8409d4a7d826176d461a6f9eb28632d7185f801bda43a138260" dependencies = [ + "alloy-eips", "alloy-primitives", "alloy-serde", "alloy-trie", "serde", ] +[[package]] +name = "alloy-hardforks" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "977d2492ce210e34baf7b36afaacea272c96fbe6774c47e23f97d14033c0e94f" +dependencies = [ + "alloy-chains", + "alloy-eip2124", + "alloy-primitives", + "auto_impl", + "dyn-clone", +] + [[package]] name = "alloy-json-abi" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe6beff64ad0aa6ad1019a3db26fef565aefeb011736150ab73ed3366c3cfd1b" +checksum = "8b26fdd571915bafe857fccba4ee1a4f352965800e46a53e4a5f50187b7776fa" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -520,12 +538,13 @@ dependencies = [ [[package]] name = "alloy-json-rpc" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e29040b9d5fe2fb70415531882685b64f8efd08dfbd6cc907120650504821105" +checksum = "0b91481d12dcd964f4a838271d6abffac2d4082695fc3f73a15429166ea1692d" dependencies = [ "alloy-primitives", "alloy-sol-types", + "http 1.3.1", "serde", "serde_json", "thiserror 2.0.12", @@ -534,9 +553,9 @@ dependencies = [ [[package]] name = "alloy-network" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "510cc00b318db0dfccfdd2d032411cfae64fc144aef9679409e014145d3dacc4" +checksum = "c8b245fa9d76cc9fc58cf78844f2d4e481333449ba679b2044f09b983fc96f85" dependencies = [ "alloy-consensus", "alloy-consensus-any", @@ -551,6 +570,7 @@ dependencies = [ "alloy-sol-types", "async-trait", "auto_impl", + "derive_more", "futures-utils-wasm", "serde", "serde_json", @@ -559,9 +579,9 @@ dependencies = [ [[package]] name = "alloy-network-primitives" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9081c099e798b8a2bba2145eb82a9a146f01fc7a35e9ab6e7b43305051f97550" +checksum = "7cecb975fc2f2e1eb09c513428c34e0d8c13e28b5ff1dbdf68e0f64a1a92c5f3" dependencies = [ "alloy-consensus", "alloy-eips", @@ -572,12 +592,16 @@ dependencies = [ [[package]] name = "alloy-node-bindings" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aef9849fb8bbb28f69f2cbdb4b0dac2f0e35c04f6078a00dfb8486469aed02de" +checksum = "f4131fe12c27e13a99d79bc8e02f9ce4f23f98a6f2e90458fe09992e99e46a9a" dependencies = [ "alloy-genesis", + "alloy-hardforks", + "alloy-network", "alloy-primitives", + "alloy-signer", + "alloy-signer-local", "k256", "rand 0.8.5", "serde_json", @@ -589,15 +613,15 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c77490fe91a0ce933a1f219029521f20fc28c2c0ca95d53fa4da9c00b8d9d4e" +checksum = "a326d47106039f38b811057215a92139f46eef7983a4b77b10930a0ea5685b1e" dependencies = [ "alloy-rlp", "bytes", "cfg-if", "const-hex", - "derive_more 2.0.1", + "derive_more", "foldhash", "hashbrown 0.15.3", "indexmap 2.9.0", @@ -606,7 +630,7 @@ dependencies = [ "keccak-asm", "paste", "proptest", - "rand 0.8.5", + "rand 0.9.1", "ruint", "rustc-hash", "serde", @@ -616,9 +640,9 @@ dependencies = [ [[package]] name = "alloy-provider" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc2dfaddd9a30aa870a78a4e1316e3e115ec1e12e552cbc881310456b85c1f24" +checksum = "ecac2cbea1cb3da53b4e68a078e57f9da8d12d86e2017db1240df222e2498397" dependencies = [ "alloy-chains", "alloy-consensus", @@ -631,9 +655,12 @@ dependencies = [ "alloy-pubsub", "alloy-rpc-client", "alloy-rpc-types-anvil", + "alloy-rpc-types-debug", "alloy-rpc-types-eth", + "alloy-rpc-types-trace", + "alloy-rpc-types-txpool", "alloy-signer", - "alloy-signer-local", + "alloy-sol-types", "alloy-transport", "alloy-transport-http", "alloy-transport-ipc", @@ -642,13 +669,14 @@ dependencies = [ "async-trait", "auto_impl", "dashmap", + "either", "futures", "futures-utils-wasm", - "lru", + "http 1.3.1", + "lru 0.13.0", "parking_lot 0.12.3", "pin-project", "reqwest", - "schnellru", "serde", "serde_json", "thiserror 2.0.12", @@ -660,21 +688,23 @@ dependencies = [ [[package]] name = "alloy-pubsub" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "695809e743628d54510c294ad17a4645bd9f465aeb0d20ee9ce9877c9712dc9c" +checksum = "db1d3c2316590910ba697485aa75cdafef89735010d338d197f8af5baa79df92" dependencies = [ "alloy-json-rpc", "alloy-primitives", "alloy-transport", "bimap", "futures", + "parking_lot 0.12.3", "serde", "serde_json", "tokio", "tokio-stream", "tower 0.5.2", "tracing", + "wasmtimer", ] [[package]] @@ -701,9 +731,9 @@ dependencies = [ [[package]] name = "alloy-rpc-client" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "531137b283547d5b9a5cafc96b006c64ef76810c681d606f28be9781955293b6" +checksum = "e0bed8157038003c702dd1861a6b72d4b1a8f46aeffad35e81580223642170fa" dependencies = [ "alloy-json-rpc", "alloy-primitives", @@ -712,6 +742,7 @@ dependencies = [ "alloy-transport-http", "alloy-transport-ipc", "alloy-transport-ws", + "async-stream", "futures", "pin-project", "reqwest", @@ -721,28 +752,32 @@ dependencies = [ "tokio-stream", "tower 0.5.2", "tracing", + "tracing-futures", "url", "wasmtimer", ] [[package]] name = "alloy-rpc-types" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3410a472ce26c457e9780f708ee6bd540b30f88f1f31fdab7a11d00bd6aa1aee" +checksum = "82fed036edc62cd79476fe0340277a1c47b07c173f6ac0244f24193e1183b8e4" dependencies = [ "alloy-primitives", + "alloy-rpc-types-anvil", "alloy-rpc-types-engine", "alloy-rpc-types-eth", + "alloy-rpc-types-trace", + "alloy-rpc-types-txpool", "alloy-serde", "serde", ] [[package]] name = "alloy-rpc-types-anvil" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed06bd8a5fc57b352a6cbac24eec52a4760f08ae2c1eb56ac49c8ed4b02c351" +checksum = "9f2e3dc925ec6722524f8d7412b9a6845a3350c7037f8a37892ada00c9018125" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", @@ -752,36 +787,47 @@ dependencies = [ [[package]] name = "alloy-rpc-types-any" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed98e1af55a7d856bfa385f30f63d8d56be2513593655c904a8f4a7ec963aa3e" +checksum = "caf6702dd7eb929068ab075869679e745d68c4eb611c5a0cf72617688b85b5f4" dependencies = [ "alloy-consensus-any", "alloy-rpc-types-eth", "alloy-serde", ] +[[package]] +name = "alloy-rpc-types-debug" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e982f72ff47c0f754cb6aa579e456220d768e1ec07675e66cfce970dad70292" +dependencies = [ + "alloy-primitives", + "serde", +] + [[package]] name = "alloy-rpc-types-engine" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03bd16fa4959255ebf4a7702df08f325e5631df5cdca07c8a8e58bdc10fe02e3" +checksum = "505224e162e239980c6df7632c99f0bc5abbcf630017502810979e9e01f3c86e" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-primitives", "alloy-rlp", "alloy-serde", - "derive_more 1.0.0", + "derive_more", + "rand 0.8.5", "serde", - "strum 0.26.3", + "strum", ] [[package]] name = "alloy-rpc-types-eth" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8737d7a6e37ca7bba9c23e9495c6534caec6760eb24abc9d5ffbaaba147818e1" +checksum = "20ff509ca40537042b7cc9bede6b415ef807c9c5c48024e9fe10b8c8ad0757ef" dependencies = [ "alloy-consensus", "alloy-consensus-any", @@ -791,17 +837,43 @@ dependencies = [ "alloy-rlp", "alloy-serde", "alloy-sol-types", - "derive_more 1.0.0", - "itertools 0.13.0", + "itertools 0.14.0", + "serde", + "serde_json", + "thiserror 2.0.12", +] + +[[package]] +name = "alloy-rpc-types-trace" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51dc49d5865f2227c810a416c8d14141db7716a0174bfa6cff1c1a984b678b5e" +dependencies = [ + "alloy-primitives", + "alloy-rpc-types-eth", + "alloy-serde", "serde", "serde_json", + "thiserror 2.0.12", +] + +[[package]] +name = "alloy-rpc-types-txpool" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c962ec5193084873353ad7a65568056b4e704203302e6ba81374e95a22deba4d" +dependencies = [ + "alloy-primitives", + "alloy-rpc-types-eth", + "alloy-serde", + "serde", ] [[package]] name = "alloy-serde" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5851bf8d5ad33014bd0c45153c603303e730acc8a209450a7ae6b4a12c2789e2" +checksum = "f9873512b1e99505f4a65e1d3a3105cb689f112f8e3cab3c632b20a97a46adae" dependencies = [ "alloy-primitives", "serde", @@ -810,13 +882,14 @@ dependencies = [ [[package]] name = "alloy-signer" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e10ca565da6500cca015ba35ee424d59798f2e1b85bc0dd8f81dafd401f029a" +checksum = "c2d4d95d8431a11e0daee724c3b7635dc8e9d3d60d0b803023a8125c74a77899" dependencies = [ "alloy-primitives", "async-trait", "auto_impl", + "either", "elliptic-curve", "k256", "thiserror 2.0.12", @@ -824,9 +897,9 @@ dependencies = [ [[package]] name = "alloy-signer-local" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47fababf5a745133490cde927d48e50267f97d3d1209b9fc9f1d1d666964d172" +checksum = "cb03eca937485b258d8e791d143e95b50dbfae0e18f92e1b1271c38959cd00fb" dependencies = [ "alloy-consensus", "alloy-network", @@ -840,9 +913,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10ae8e9a91d328ae954c22542415303919aabe976fe7a92eb06db1b68fd59f2" +checksum = "d4be1ce1274ddd7fdfac86e5ece1b225e9bba1f2327e20fbb30ee6b9cc1423fe" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", @@ -854,9 +927,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro-expander" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83ad5da86c127751bc607c174d6c9fe9b85ef0889a9ca0c641735d77d4f98f26" +checksum = "01e92f3708ea4e0d9139001c86c051c538af0146944a2a9c7181753bd944bf57" dependencies = [ "alloy-json-abi", "alloy-sol-macro-input", @@ -873,9 +946,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro-input" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3d30f0d3f9ba3b7686f3ff1de9ee312647aac705604417a2f40c604f409a9e" +checksum = "9afe1bd348a41f8c9b4b54dfb314886786d6201235b0b3f47198b9d910c86bb2" dependencies = [ "alloy-json-abi", "const-hex", @@ -891,9 +964,9 @@ dependencies = [ [[package]] name = "alloy-sol-type-parser" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d162f8524adfdfb0e4bd0505c734c985f3e2474eb022af32eef0d52a4f3935c" +checksum = "d6195df2acd42df92a380a8db6205a5c7b41282d0ce3f4c665ecf7911ac292f1" dependencies = [ "serde", "winnow", @@ -901,27 +974,29 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d43d5e60466a440230c07761aa67671d4719d46f43be8ea6e7ed334d8db4a9ab" +checksum = "6185e98a79cf19010722f48a74b5a65d153631d2f038cabd250f4b9e9813b8ad" dependencies = [ "alloy-json-abi", "alloy-primitives", "alloy-sol-macro", - "const-hex", "serde", ] [[package]] name = "alloy-transport" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "538a04a37221469cac0ce231b737fd174de2fdfcdd843bdd068cb39ed3e066ad" +checksum = "468a871d7ea52e31ef3abf5ccde612cb3723794f484d26dca6a04a3a776db739" dependencies = [ "alloy-json-rpc", + "alloy-primitives", "base64", - "futures-util", + "derive_more", + "futures", "futures-utils-wasm", + "parking_lot 0.12.3", "serde", "serde_json", "thiserror 2.0.12", @@ -934,9 +1009,9 @@ dependencies = [ [[package]] name = "alloy-transport-http" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ed40eb1e1265b2911512f6aa1dcece9702d078f5a646730c45e39e2be00ac1c" +checksum = "6e969c254b189f7da95f07bab53673dd418f8595abfe3397b2cf8d7ba7955487" dependencies = [ "alloy-json-rpc", "alloy-transport", @@ -949,9 +1024,9 @@ dependencies = [ [[package]] name = "alloy-transport-ipc" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a172a59d24706b26a79a837f86d51745cb26ca6f8524712acd0208a14cff95" +checksum = "cb134aaa80c2e1e03eebc101e7c513f08a529726738506d8c306ec9f3c9a7f3b" dependencies = [ "alloy-json-rpc", "alloy-pubsub", @@ -960,6 +1035,7 @@ dependencies = [ "futures", "interprocess", "pin-project", + "serde", "serde_json", "tokio", "tokio-util", @@ -968,9 +1044,9 @@ dependencies = [ [[package]] name = "alloy-transport-ws" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fba0e39d181d13c266dbb8ca54ed584a2c66d6e9279afca89c7a6b1825e98abb" +checksum = "e57f13346af9441cafa99d5b80d95c2480870dd18bd274464f7131df01ad692a" dependencies = [ "alloy-pubsub", "alloy-transport", @@ -986,20 +1062,48 @@ dependencies = [ [[package]] name = "alloy-trie" -version = "0.7.9" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95a94854e420f07e962f7807485856cde359ab99ab6413883e15235ad996e8b" +checksum = "983d99aa81f586cef9dae38443245e585840fcf0fc58b09aee0b1f27aed1d500" dependencies = [ "alloy-primitives", "alloy-rlp", "arrayvec", - "derive_more 1.0.0", + "derive_more", "nybbles", "serde", "smallvec", "tracing", ] +[[package]] +name = "alloy-tx-macros" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d642ba58c32547ad9742c613f9849a2aedc47914b02948224326e4cb62b91040" +dependencies = [ + "alloy-primitives", + "darling", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "anstream" version = "0.6.18" @@ -1068,6 +1172,34 @@ dependencies = [ "password-hash", ] +[[package]] +name = "ark-bn254" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" +dependencies = [ + "ark-ec", + "ark-ff 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff 0.4.2", + "ark-poly", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "hashbrown 0.13.2", + "itertools 0.10.5", + "num-traits", + "zeroize", +] + [[package]] name = "ark-ff" version = "0.3.0" @@ -1151,6 +1283,19 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "hashbrown 0.13.2", +] + [[package]] name = "ark-serialize" version = "0.3.0" @@ -1167,11 +1312,23 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" dependencies = [ + "ark-serialize-derive", "ark-std 0.4.0", "digest 0.10.7", "num-bigint", ] +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "ark-std" version = "0.3.0" @@ -1338,6 +1495,17 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "async-recursion" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "async-std" version = "1.13.1" @@ -1546,6 +1714,22 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" +[[package]] +name = "bitcoin-io" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b47c4ab7a93edb0c7198c5535ed9b52b63095f4e9b45279c6736cec4b856baf" + +[[package]] +name = "bitcoin_hashes" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb18c03d0db0247e147a21a6faafd5a7eb851c743db062de72018b6b7e8e4d16" +dependencies = [ + "bitcoin-io", + "hex-conservative", +] + [[package]] name = "bitflags" version = "1.3.2" @@ -1696,9 +1880,9 @@ dependencies = [ [[package]] name = "c-kzg" -version = "1.0.3" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0307f72feab3300336fb803a57134159f6e20139af1357f36c54cb90d8e8928" +checksum = "7318cfa722931cb5fe0838b98d3ce5621e75f6a6408abc21721d80de9223f2e4" dependencies = [ "blst", "cc", @@ -1738,7 +1922,11 @@ version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" dependencies = [ + "android-tzdata", + "iana-time-zone", "num-traits", + "serde", + "windows-link", ] [[package]] @@ -1797,15 +1985,6 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" -[[package]] -name = "commons" -version = "0.1.0" -dependencies = [ - "anyhow", - "fhe 0.1.0-beta.7", - "fhe-traits", -] - [[package]] name = "compile-time" version = "0.2.0" @@ -1829,26 +2008,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "config" -version = "0.1.0" -dependencies = [ - "alloy", - "anyhow", - "dirs 5.0.1", - "events", - "figment", - "path-clean", - "petname", - "rand 0.8.5", - "serde", - "serde_yaml", - "shellexpand", - "tempfile", - "tracing", - "url", -] - [[package]] name = "console" version = "0.15.11" @@ -1946,6 +2105,21 @@ dependencies = [ "libc", ] +[[package]] +name = "crc" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + [[package]] name = "crc32fast" version = "1.4.2" @@ -1995,20 +2169,6 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" -[[package]] -name = "crypto" -version = "0.1.0" -dependencies = [ - "aes-gcm", - "anyhow", - "argon2", - "async-trait", - "config", - "rand 0.8.5", - "tokio", - "zeroize", -] - [[package]] name = "crypto-bigint" version = "0.5.5" @@ -2069,33 +2229,52 @@ dependencies = [ ] [[package]] -name = "dashmap" -version = "6.1.0" +name = "darling" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" dependencies = [ - "cfg-if", - "crossbeam-utils", - "hashbrown 0.14.5", - "lock_api", - "once_cell", - "parking_lot_core 0.9.10", + "darling_core", + "darling_macro", ] [[package]] -name = "data" -version = "0.1.0" +name = "darling_core" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" dependencies = [ - "actix", - "anyhow", - "async-trait", - "bincode", - "events", + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.101", +] + +[[package]] +name = "darling_macro" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "dashmap" +version = "6.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +dependencies = [ + "cfg-if", + "crossbeam-utils", + "hashbrown 0.14.5", + "lock_api", "once_cell", - "serde", - "sled", - "tempfile", - "tracing", + "parking_lot_core 0.9.10", ] [[package]] @@ -2155,6 +2334,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" dependencies = [ "powerfmt", + "serde", ] [[package]] @@ -2168,34 +2348,13 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "derive_more" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" -dependencies = [ - "derive_more-impl 1.0.0", -] - [[package]] name = "derive_more" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" dependencies = [ - "derive_more-impl 2.0.1", -] - -[[package]] -name = "derive_more-impl" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", - "unicode-xid", + "derive_more-impl", ] [[package]] @@ -2244,6 +2403,15 @@ dependencies = [ "subtle", ] +[[package]] +name = "directories" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16f5094c54661b38d03bd7e50df373292118db60b585c08a411c6d840017fe7d" +dependencies = [ + "dirs-sys 0.5.0", +] + [[package]] name = "dirs" version = "5.0.1" @@ -2315,6 +2483,18 @@ version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04" +[[package]] +name = "duct" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6ce170a0e8454fa0f9b0e5ca38a6ba17ed76a50916839d217eb5357e05cdfde" +dependencies = [ + "libc", + "os_pipe", + "shared_child", + "shared_thread", +] + [[package]] name = "dunce" version = "1.0.5" @@ -2322,20 +2502,472 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] -name = "e3_request" +name = "dyn-clone" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" + +[[package]] +name = "e3-aggregator" +version = "0.1.0" +dependencies = [ + "actix", + "anyhow", + "async-trait", + "bincode", + "e3-config", + "e3-data", + "e3-events", + "e3-fhe", + "e3-request", + "e3-sortition", + "serde", + "tracing", +] + +[[package]] +name = "e3-bfv-helpers" +version = "0.1.0" +dependencies = [ + "alloy-dyn-abi", + "alloy-primitives", + "anyhow", + "fhe", + "fhe-traits", + "hex", + "rand 0.8.5", +] + +[[package]] +name = "e3-cli" +version = "0.1.0" +dependencies = [ + "actix", + "anyhow", + "clap", + "compile-time", + "dialoguer", + "e3-config", + "e3-crypto", + "e3-entrypoint", + "e3-events", + "e3-init", + "e3-support-scripts", + "hex", + "opentelemetry", + "opentelemetry-otlp", + "opentelemetry-stdout", + "opentelemetry_sdk", + "petname", + "rand 0.8.5", + "tokio", + "tracing", + "tracing-opentelemetry", + "tracing-subscriber", + "url", + "zeroize", +] + +[[package]] +name = "e3-compute-provider" +version = "0.1.0" +dependencies = [ + "ark-bn254", + "ark-ff 0.4.2", + "hex", + "lean-imt", + "light-poseidon", + "num-bigint", + "num-traits", + "rayon", + "serde", + "sha3", +] + +[[package]] +name = "e3-config" +version = "0.1.0" +dependencies = [ + "alloy-primitives", + "anyhow", + "dirs 5.0.1", + "e3-events", + "figment", + "path-clean", + "petname", + "rand 0.8.5", + "serde", + "serde_yaml", + "shellexpand", + "tempfile", + "tracing", + "url", +] + +[[package]] +name = "e3-crypto" +version = "0.1.0" +dependencies = [ + "aes-gcm", + "anyhow", + "argon2", + "async-trait", + "e3-config", + "rand 0.8.5", + "tokio", + "zeroize", +] + +[[package]] +name = "e3-data" +version = "0.1.0" +dependencies = [ + "actix", + "anyhow", + "async-trait", + "bincode", + "e3-events", + "once_cell", + "serde", + "sled", + "tempfile", + "tracing", +] + +[[package]] +name = "e3-entrypoint" +version = "0.1.0" +dependencies = [ + "actix", + "actix-web", + "alloy", + "alloy-primitives", + "anyhow", + "bincode", + "clap", + "dirs 5.0.1", + "e3-aggregator", + "e3-config", + "e3-crypto", + "e3-data", + "e3-events", + "e3-evm", + "e3-fhe", + "e3-keyshare", + "e3-logger", + "e3-net", + "e3-request", + "e3-sortition", + "e3-test-helpers", + "hex", + "libp2p", + "phf", + "rand 0.8.5", + "rand_chacha 0.3.1", + "reqwest", + "serde", + "serde_json", + "tokio", + "tracing", + "zeroize", +] + +[[package]] +name = "e3-events" +version = "0.1.0" +dependencies = [ + "actix", + "alloy", + "alloy-primitives", + "alloy-sol-types", + "anyhow", + "bincode", + "bloom", + "bs58", + "futures-util", + "once_cell", + "serde", + "sha2", + "tracing", +] + +[[package]] +name = "e3-evm" +version = "0.1.0" +dependencies = [ + "actix", + "alloy", + "alloy-primitives", + "anyhow", + "async-trait", + "base64", + "e3-config", + "e3-crypto", + "e3-data", + "e3-entrypoint", + "e3-events", + "e3-sortition", + "futures-util", + "serde", + "tokio", + "tracing", + "url", + "zeroize", +] + +[[package]] +name = "e3-evm-helpers" +version = "0.1.0" +dependencies = [ + "alloy", + "async-trait", + "eyre", + "futures", + "futures-util", + "once_cell", + "tokio", +] + +[[package]] +name = "e3-fhe" +version = "0.1.0" +dependencies = [ + "actix", + "anyhow", + "async-trait", + "bincode", + "e3-bfv-helpers", + "e3-config", + "e3-data", + "e3-events", + "e3-request", + "fhe", + "fhe-traits", + "fhe-util", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", +] + +[[package]] +name = "e3-fs" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "futures", + "glob", + "regex", + "tokio", + "vfs", +] + +[[package]] +name = "e3-indexer" +version = "0.1.0" +dependencies = [ + "alloy", + "async-trait", + "bincode", + "e3-evm-helpers", + "eyre", + "serde", + "thiserror 1.0.69", + "tokio", +] + +[[package]] +name = "e3-init" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-recursion", + "async-trait", + "e3-fs", + "git2", + "regex", + "serde", + "serde_json", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "e3-keyshare" +version = "0.1.0" +dependencies = [ + "actix", + "anyhow", + "async-trait", + "e3-config", + "e3-crypto", + "e3-data", + "e3-events", + "e3-fhe", + "e3-request", + "serde", + "tracing", +] + +[[package]] +name = "e3-logger" +version = "0.1.0" +dependencies = [ + "actix", + "base64", + "e3-events", + "tracing", +] + +[[package]] +name = "e3-net" +version = "0.1.0" +dependencies = [ + "actix", + "anyhow", + "async-std", + "async-trait", + "e3-config", + "e3-crypto", + "e3-data", + "e3-events", + "futures", + "libp2p", + "tokio", + "tracing", + "tracing-subscriber", + "zeroize", +] + +[[package]] +name = "e3-program-server" +version = "0.1.0" +dependencies = [ + "actix-web", + "anyhow", + "e3-compute-provider", + "hex", + "reqwest", + "serde", + "serde_json", + "tokio", +] + +[[package]] +name = "e3-request" version = "0.1.0" dependencies = [ "actix", "anyhow", "async-trait", "bincode", - "config", - "data", - "events", + "e3-config", + "e3-data", + "e3-events", + "serde", + "tracing", +] + +[[package]] +name = "e3-sdk" +version = "0.1.0" +dependencies = [ + "e3-bfv-helpers", + "e3-evm-helpers", + "e3-indexer", +] + +[[package]] +name = "e3-sortition" +version = "0.1.0" +dependencies = [ + "actix", + "alloy", + "anyhow", + "async-trait", + "e3-config", + "e3-data", + "e3-events", + "num", + "rand 0.8.5", "serde", "tracing", ] +[[package]] +name = "e3-support-scripts" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "duct", + "e3-config", + "tokio", +] + +[[package]] +name = "e3-test-helpers" +version = "0.1.0" +dependencies = [ + "actix", + "bincode", + "clap", + "e3-events", + "e3-fhe", + "e3-sdk", + "fhe", + "fhe-traits", + "rand 0.8.5", + "rand_chacha 0.3.1", + "tracing", +] + +[[package]] +name = "e3-tests" +version = "0.1.0" +dependencies = [ + "actix", + "alloy", + "alloy-primitives", + "anyhow", + "async-std", + "base64", + "bincode", + "clap", + "e3-aggregator", + "e3-crypto", + "e3-data", + "e3-events", + "e3-evm", + "e3-fhe", + "e3-keyshare", + "e3-logger", + "e3-net", + "e3-request", + "e3-sdk", + "e3-sortition", + "e3-test-helpers", + "fhe", + "fhe-traits", + "fhe-util", + "rand 0.8.5", + "rand_chacha 0.3.1", + "tokio", +] + +[[package]] +name = "e3-wasm" +version = "0.1.0" +dependencies = [ + "e3-bfv-helpers", + "fhe", + "fhe-traits", + "getrandom 0.2.16", + "rand 0.8.5", + "wasm-bindgen", +] + [[package]] name = "ecdsa" version = "0.16.9" @@ -2346,6 +2978,7 @@ dependencies = [ "digest 0.10.7", "elliptic-curve", "rfc6979", + "serdect", "signature", "spki", ] @@ -2380,6 +3013,9 @@ name = "either" version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +dependencies = [ + "serde", +] [[package]] name = "elliptic-curve" @@ -2396,74 +3032,26 @@ dependencies = [ "pkcs8", "rand_core 0.6.4", "sec1", + "serdect", "subtle", "zeroize", ] [[package]] -name = "enclave" -version = "0.1.0" -dependencies = [ - "actix", - "anyhow", - "clap", - "compile-time", - "config", - "crypto", - "dialoguer", - "enclave_core", - "events", - "hex", - "opentelemetry", - "opentelemetry-otlp", - "opentelemetry-stdout", - "opentelemetry_sdk", - "petname", - "rand 0.8.5", - "tokio", - "tracing", - "tracing-opentelemetry", - "tracing-subscriber", - "url", - "zeroize", -] - -[[package]] -name = "enclave_core" +name = "enclaveup" version = "0.1.0" dependencies = [ - "actix", - "actix-web", - "aggregator", - "alloy", - "alloy-primitives", "anyhow", - "bincode", "clap", - "config", - "crypto", - "data", - "dirs 5.0.1", - "e3_request", - "events", - "evm", - "fhe 0.1.0", - "hex", - "keyshare", - "libp2p", - "logger", - "net", - "phf", - "rand 0.8.5", - "rand_chacha 0.3.1", + "directories", + "flate2", + "futures-util", + "indicatif", "reqwest", "serde", "serde_json", - "sortition", - "test-helpers", + "tar", "tokio", - "tracing", - "zeroize", ] [[package]] @@ -2543,46 +3131,13 @@ dependencies = [ ] [[package]] -name = "events" -version = "0.1.0" +name = "eyre" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" dependencies = [ - "actix", - "alloy", - "alloy-primitives", - "alloy-sol-types", - "anyhow", - "bincode", - "bloom", - "bs58", - "futures-util", + "indenter", "once_cell", - "serde", - "sha2", - "tracing", -] - -[[package]] -name = "evm" -version = "0.1.0" -dependencies = [ - "actix", - "alloy", - "alloy-primitives", - "anyhow", - "async-trait", - "base64", - "config", - "crypto", - "data", - "enclave_core", - "events", - "futures-util", - "serde", - "sortition", - "tokio", - "tracing", - "url", - "zeroize", ] [[package]] @@ -2626,7 +3181,7 @@ dependencies = [ [[package]] name = "fhe" version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs?branch=feature/greco-integration#b529be34a8b6cfa589b3ce451dbba0ce0126b92a" +source = "git+https://github.com/gnosisguild/fhe.rs#11cdd749a8e01c486160d5f62572c4520af5358f" dependencies = [ "doc-comment", "fhe-math", @@ -2646,31 +3201,10 @@ dependencies = [ "zeroize_derive", ] -[[package]] -name = "fhe" -version = "0.1.0" -dependencies = [ - "actix", - "anyhow", - "async-trait", - "bincode", - "commons", - "config", - "data", - "e3_request", - "events", - "fhe 0.1.0-beta.7", - "fhe-traits", - "fhe-util", - "rand 0.8.5", - "rand_chacha 0.3.1", - "serde", -] - [[package]] name = "fhe-math" version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs?branch=feature/greco-integration#b529be34a8b6cfa589b3ce451dbba0ce0126b92a" +source = "git+https://github.com/gnosisguild/fhe.rs#11cdd749a8e01c486160d5f62572c4520af5358f" dependencies = [ "ethnum", "fhe-traits", @@ -2692,7 +3226,7 @@ dependencies = [ [[package]] name = "fhe-traits" version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs?branch=feature/greco-integration#b529be34a8b6cfa589b3ce451dbba0ce0126b92a" +source = "git+https://github.com/gnosisguild/fhe.rs#11cdd749a8e01c486160d5f62572c4520af5358f" dependencies = [ "rand 0.8.5", ] @@ -2700,7 +3234,7 @@ dependencies = [ [[package]] name = "fhe-util" version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs?branch=feature/greco-integration#b529be34a8b6cfa589b3ce451dbba0ce0126b92a" +source = "git+https://github.com/gnosisguild/fhe.rs#11cdd749a8e01c486160d5f62572c4520af5358f" dependencies = [ "itertools 0.12.1", "num-bigint-dig", @@ -2731,6 +3265,18 @@ dependencies = [ "version_check", ] +[[package]] +name = "filetime" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" +dependencies = [ + "cfg-if", + "libc", + "libredox", + "windows-sys 0.59.0", +] + [[package]] name = "fixed-hash" version = "0.8.0" @@ -3021,6 +3567,21 @@ version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +[[package]] +name = "git2" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2deb07a133b1520dc1a5690e9bd08950108873d7ed5de38dcc74d3b5ebffa110" +dependencies = [ + "bitflags 2.9.0", + "libc", + "libgit2-sys", + "log", + "openssl-probe", + "openssl-sys", + "url", +] + [[package]] name = "glob" version = "0.3.2" @@ -3099,6 +3660,9 @@ name = "hashbrown" version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] [[package]] name = "hashbrown" @@ -3145,6 +3709,15 @@ dependencies = [ "serde", ] +[[package]] +name = "hex-conservative" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5313b072ce3c597065a808dbf612c4c8e8590bdbf8b579508bf7a762c5eae6cd" +dependencies = [ + "arrayvec", +] + [[package]] name = "hex_fmt" version = "0.3.0" @@ -3393,6 +3966,30 @@ dependencies = [ "tracing", ] +[[package]] +name = "iana-time-zone" +version = "0.1.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core 0.61.0", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + [[package]] name = "icu_collections" version = "1.5.0" @@ -3511,6 +4108,12 @@ dependencies = [ "syn 2.0.101", ] +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + [[package]] name = "idna" version = "1.0.3" @@ -3610,6 +4213,12 @@ dependencies = [ "syn 2.0.101", ] +[[package]] +name = "indenter" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" + [[package]] name = "indexmap" version = "1.9.3" @@ -3618,6 +4227,7 @@ checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown 0.12.3", + "serde", ] [[package]] @@ -3631,6 +4241,19 @@ dependencies = [ "serde", ] +[[package]] +name = "indicatif" +version = "0.17.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235" +dependencies = [ + "console", + "number_prefix", + "portable-atomic", + "unicode-width", + "web-time", +] + [[package]] name = "inout" version = "0.1.4" @@ -3706,15 +4329,6 @@ dependencies = [ "either", ] -[[package]] -name = "itertools" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" -dependencies = [ - "either", -] - [[package]] name = "itertools" version = "0.14.0" @@ -3760,6 +4374,7 @@ dependencies = [ "ecdsa", "elliptic-curve", "once_cell", + "serdect", "sha2", ] @@ -3782,23 +4397,6 @@ dependencies = [ "sha3-asm", ] -[[package]] -name = "keyshare" -version = "0.1.0" -dependencies = [ - "actix", - "anyhow", - "async-trait", - "config", - "crypto", - "data", - "e3_request", - "events", - "fhe 0.1.0", - "serde", - "tracing", -] - [[package]] name = "kv-log-macro" version = "1.0.7" @@ -3823,12 +4421,35 @@ dependencies = [ "spin 0.9.8", ] +[[package]] +name = "lean-imt" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa2acc6dee32b12409446a76b9c1877e5ba9afb36dfcbe96d0ddaf15ca08f18d" +dependencies = [ + "hashbrown 0.15.3", +] + [[package]] name = "libc" version = "0.2.172" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" +[[package]] +name = "libgit2-sys" +version = "0.18.1+1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1dcb20f84ffcdd825c7a311ae347cce604a6f084a767dec4a4929829645290e" +dependencies = [ + "cc", + "libc", + "libssh2-sys", + "libz-sys", + "openssl-sys", + "pkg-config", +] + [[package]] name = "libm" version = "0.2.14" @@ -3980,7 +4601,7 @@ dependencies = [ "libp2p-core", "libp2p-identity", "libp2p-swarm", - "lru", + "lru 0.12.5", "quick-protobuf", "quick-protobuf-codec", "smallvec", @@ -4131,7 +4752,7 @@ dependencies = [ "libp2p-core", "libp2p-identity", "libp2p-swarm-derive", - "lru", + "lru 0.12.5", "multistream-select", "once_cell", "rand 0.8.5", @@ -4214,6 +4835,45 @@ checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ "bitflags 2.9.0", "libc", + "redox_syscall 0.5.12", +] + +[[package]] +name = "libssh2-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "220e4f05ad4a218192533b300327f5150e809b54c4ec83b5a1d91833601811b9" +dependencies = [ + "cc", + "libc", + "libz-sys", + "openssl-sys", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "libz-sys" +version = "1.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "light-poseidon" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c9a85a9752c549ceb7578064b4ed891179d20acd85f27318573b64d2d7ee7ee" +dependencies = [ + "ark-bn254", + "ark-ff 0.4.2", + "num-bigint", + "thiserror 1.0.69", ] [[package]] @@ -4277,20 +4937,19 @@ dependencies = [ ] [[package]] -name = "logger" -version = "0.1.0" +name = "lru" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "actix", - "base64", - "events", - "tracing", + "hashbrown 0.15.3", ] [[package]] name = "lru" -version = "0.12.5" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" +checksum = "227748d55f2f0ab4735d87fd623798cb6b664512fe979705f829c9f81c934465" dependencies = [ "hashbrown 0.15.3", ] @@ -4449,38 +5108,18 @@ dependencies = [ "security-framework-sys", "tempfile", ] - -[[package]] -name = "ndarray" -version = "0.15.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb12d4e967ec485a5f71c6311fe28158e9d6f4bc4a447b474184d0f91a8fa32" -dependencies = [ - "matrixmultiply", - "num-complex", - "num-integer", - "num-traits", - "rawpointer", -] - -[[package]] -name = "net" -version = "0.1.0" -dependencies = [ - "actix", - "anyhow", - "async-std", - "async-trait", - "config", - "crypto", - "data", - "events", - "futures", - "libp2p", - "tokio", - "tracing", - "tracing-subscriber", - "zeroize", + +[[package]] +name = "ndarray" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb12d4e967ec485a5f71c6311fe28158e9d6f4bc4a447b474184d0f91a8fa32" +dependencies = [ + "matrixmultiply", + "num-complex", + "num-integer", + "num-traits", + "rawpointer", ] [[package]] @@ -4705,6 +5344,12 @@ dependencies = [ "syn 2.0.101", ] +[[package]] +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + [[package]] name = "nybbles" version = "0.3.4" @@ -4888,6 +5533,16 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" +[[package]] +name = "os_pipe" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db335f4760b14ead6290116f2427bf33a14d4f0617d49f78a246de10c1831224" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + [[package]] name = "overload" version = "0.1.1" @@ -5188,6 +5843,12 @@ dependencies = [ "universal-hash", ] +[[package]] +name = "portable-atomic" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" + [[package]] name = "powerfmt" version = "0.2.0" @@ -5200,7 +5861,7 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "zerocopy 0.8.25", + "zerocopy", ] [[package]] @@ -5518,6 +6179,7 @@ checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.3", + "serde", ] [[package]] @@ -5556,6 +6218,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ "getrandom 0.3.2", + "serde", ] [[package]] @@ -5651,6 +6314,26 @@ dependencies = [ "thiserror 2.0.12", ] +[[package]] +name = "ref-cast" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "regex" version = "1.11.1" @@ -6021,14 +6704,15 @@ dependencies = [ ] [[package]] -name = "schnellru" -version = "0.2.4" +name = "schemars" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "356285bbf17bea63d9e52e96bd18f039672ac92b55b8cb997d6162a2a37d1649" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" dependencies = [ - "ahash", - "cfg-if", - "hashbrown 0.13.2", + "dyn-clone", + "ref-cast", + "serde", + "serde_json", ] [[package]] @@ -6047,10 +6731,32 @@ dependencies = [ "der", "generic-array", "pkcs8", + "serdect", "subtle", "zeroize", ] +[[package]] +name = "secp256k1" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b50c5943d326858130af85e049f2661ba3c78b26589b8ab98e65e80ae44a1252" +dependencies = [ + "bitcoin_hashes", + "rand 0.8.5", + "secp256k1-sys", + "serde", +] + +[[package]] +name = "secp256k1-sys" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4387882333d3aa8cb20530a17c69a3752e97837832f34f6dccc760e715001d9" +dependencies = [ + "cc", +] + [[package]] name = "security-framework" version = "2.11.1" @@ -6148,6 +6854,37 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "3.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf65a400f8f66fb7b0552869ad70157166676db75ed8181f8104ea91cf9d0b42" +dependencies = [ + "base64", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.9.0", + "schemars", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81679d9ed988d5e9a5e6531dc3f2c28efbd639cbd1dfb628df08edea6004da77" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "serde_yaml" version = "0.9.34+deprecated" @@ -6161,6 +6898,16 @@ dependencies = [ "unsafe-libyaml", ] +[[package]] +name = "serdect" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" +dependencies = [ + "base16ct", + "serde", +] + [[package]] name = "sha1" version = "0.10.6" @@ -6212,6 +6959,22 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shared_child" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e297bd52991bbe0686c086957bee142f13df85d1e79b0b21630a99d374ae9dc" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + +[[package]] +name = "shared_thread" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7a6f98357c6bb0ebace19b22220e5543801d9de90ffe77f8abb27c056bac064" + [[package]] name = "shell-words" version = "1.1.0" @@ -6302,23 +7065,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "sortition" -version = "0.1.0" -dependencies = [ - "actix", - "alloy", - "anyhow", - "async-trait", - "config", - "data", - "events", - "num", - "rand 0.8.5", - "serde", - "tracing", -] - [[package]] name = "spin" version = "0.5.2" @@ -6359,35 +7105,13 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" -[[package]] -name = "strum" -version = "0.26.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" -dependencies = [ - "strum_macros 0.26.4", -] - [[package]] name = "strum" version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f64def088c51c9510a8579e3c5d67c65349dcf755e5479ad3d010aa6454e2c32" dependencies = [ - "strum_macros 0.27.1", -] - -[[package]] -name = "strum_macros" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.101", + "strum_macros", ] [[package]] @@ -6433,9 +7157,9 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4560533fbd6914b94a8fb5cc803ed6801c3455668db3b810702c57612bac9412" +checksum = "14c8c8f496c33dc6343dac05b4be8d9e0bca180a4caa81d7b8416b10cc2273cd" dependencies = [ "paste", "proc-macro2", @@ -6490,11 +7214,22 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" +[[package]] +name = "tar" +version = "0.4.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a" +dependencies = [ + "filetime", + "libc", + "xattr", +] + [[package]] name = "tempfile" -version = "3.19.1" +version = "3.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" +checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" dependencies = [ "fastrand", "getrandom 0.3.2", @@ -6503,56 +7238,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "test-helpers" -version = "0.1.0" -dependencies = [ - "actix", - "bincode", - "clap", - "commons", - "events", - "fhe 0.1.0", - "fhe 0.1.0-beta.7", - "fhe-traits", - "rand 0.8.5", - "rand_chacha 0.3.1", - "tracing", -] - -[[package]] -name = "tests" -version = "0.1.0" -dependencies = [ - "actix", - "aggregator", - "alloy", - "alloy-primitives", - "anyhow", - "async-std", - "base64", - "bincode", - "clap", - "commons", - "crypto", - "data", - "e3_request", - "events", - "evm", - "fhe 0.1.0", - "fhe 0.1.0-beta.7", - "fhe-traits", - "fhe-util", - "keyshare", - "logger", - "net", - "rand 0.8.5", - "rand_chacha 0.3.1", - "sortition", - "test-helpers", - "tokio", -] - [[package]] name = "thiserror" version = "1.0.69" @@ -6740,9 +7425,9 @@ dependencies = [ [[package]] name = "tokio-tungstenite" -version = "0.24.0" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9" +checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084" dependencies = [ "futures-util", "log", @@ -6769,15 +7454,15 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.9" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" [[package]] name = "toml_edit" -version = "0.22.26" +version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ "indexmap 2.9.0", "toml_datetime", @@ -6890,6 +7575,18 @@ dependencies = [ "valuable", ] +[[package]] +name = "tracing-futures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" +dependencies = [ + "futures", + "futures-task", + "pin-project", + "tracing", +] + [[package]] name = "tracing-log" version = "0.2.0" @@ -6946,21 +7643,20 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "tungstenite" -version = "0.24.0" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18e5b8366ee7a95b16d32197d0b2604b43a0be89dc5fac9f8e96ccafbaedda8a" +checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13" dependencies = [ - "byteorder", "bytes", "data-encoding", "http 1.3.1", "httparse", "log", - "rand 0.8.5", + "rand 0.9.1", "rustls", "rustls-pki-types", "sha1", - "thiserror 1.0.69", + "thiserror 2.0.12", "utf-8", ] @@ -7120,6 +7816,19 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "vfs" +version = "0.12.1" +source = "git+https://github.com/ryardley/rust-vfs.git#c9a3cccc7e7f75ed598cfe2201e27ae5e2693e74" +dependencies = [ + "async-recursion", + "async-std", + "async-trait", + "filetime", + "futures", + "tokio", +] + [[package]] name = "void" version = "1.0.2" @@ -7316,7 +8025,7 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efc5cf48f83140dcaab716eeaea345f9e93d0018fb81162753a3f76c3397b538" dependencies = [ - "windows-core", + "windows-core 0.53.0", "windows-targets 0.52.6", ] @@ -7330,6 +8039,41 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-core" +version = "0.61.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result 0.3.2", + "windows-strings 0.4.2", +] + +[[package]] +name = "windows-implement" +version = "0.60.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "windows-interface" +version = "0.59.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "windows-link" version = "0.1.1" @@ -7343,7 +8087,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3" dependencies = [ "windows-result 0.3.2", - "windows-strings", + "windows-strings 0.3.1", "windows-targets 0.53.0", ] @@ -7374,6 +8118,15 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -7588,9 +8341,9 @@ checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" [[package]] name = "winnow" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9fb597c990f03753e08d3c29efbfcf2019a003b4bf4ba19225c158e1549f0f3" +checksum = "c06928c8748d81b05c9be96aad92e1b6ff01833332f281e8cfca3be4b35fc9ec" dependencies = [ "memchr", ] @@ -7671,6 +8424,16 @@ dependencies = [ "time", ] +[[package]] +name = "xattr" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d65cbf2f12c15564212d48f4e3dfb87923d25d611f2aed18f4cb23f0413d89e" +dependencies = [ + "libc", + "rustix 1.0.7", +] + [[package]] name = "xml-rs" version = "0.8.26" @@ -7719,33 +8482,13 @@ dependencies = [ "synstructure", ] -[[package]] -name = "zerocopy" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" -dependencies = [ - "zerocopy-derive 0.7.35", -] - [[package]] name = "zerocopy" version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" dependencies = [ - "zerocopy-derive 0.8.25", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", + "zerocopy-derive", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000000..9d9c09c222 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,164 @@ +[workspace] +members = [ + "crates/aggregator", + "crates/bfv-helpers", + "crates/cli", + "crates/compute-provider", + "crates/config", + "crates/crypto", + "crates/data", + "crates/enclaveup", + "crates/entrypoint", + "crates/events", + "crates/evm", + "crates/evm-helpers", + "crates/fhe", + "crates/fs", + "crates/indexer", + "crates/init", + "crates/keyshare", + "crates/logger", + "crates/net", + "crates/program-server", + "crates/request", + "crates/sdk", + "crates/sortition", + "crates/support-scripts", + "crates/test-helpers", + "crates/tests", + "crates/wasm", +] +exclude = [ + "examples/CRISP/apps/server", + "examples/CRISP/apps/program", + "examples/CRISP/apps/wasm-crypto", + "examples/default/client/wasm", + "examples/default", + # client needs to be able to build crates/support independently + "crates/support", + "crates/support-scripts/dev" +] +resolver = "2" +shared-version = true +pre-release-commit-message = "chore: Release {{crate_name}} v{{version}}" +pre-release-replacements = [ + {file="CHANGELOG.md", search="## \\[Unreleased\\]", replace="## [Unreleased]\n\n## [{{version}}] - {{date}}", min=1}, +] +post-release-commit-message = "chore: Bump {{crate_name}} to {{next_version}}" +sign-commit = true +sign-tag = true +push-remote = "origin" +publish = true + +[workspace.package] +version = "0.1.0" +edition = "2021" +license = "LGPL-3.0-only" +description = "E3 — Encrypted Execution Environments" +repository = "https://github.com/gnosisguild/enclave" + +[workspace.dependencies] +e3-aggregator = { version = "0.1.0", path = "./crates/aggregator" } +e3-bfv-helpers = { version = "0.1.0", path = "./crates/bfv-helpers" } +e3-config = { version = "0.1.0", path = "./crates/config" } +e3-crypto = { version = "0.1.0", path = "./crates/crypto" } +e3-data = { version = "0.1.0", path = "./crates/data" } +e3-request = { version = "0.1.0", path = "./crates/request" } +e3-sdk = { version = "0.1.0", path = "./crates/sdk" } +e3-cli = { version = "0.1.0", path = "./crates/cli" } +e3-entrypoint = { version = "0.1.0", path = "./crates/entrypoint" } +e3-init = { version = "0.1.0", path = "./crates/init" } +e3-events = { version = "0.1.0", path = "./crates/events" } +e3-evm = { version = "0.1.0", path = "./crates/evm" } +e3-evm-helpers = { version = "0.1.0", path = "./crates/evm-helpers" } +e3-fhe = { version = "0.1.0", path = "./crates/fhe" } +e3-fs = { version = "0.1.0", path = "./crates/fs" } +e3-indexer = { version = "0.1.0", path = "./crates/indexer" } +e3-keyshare = { version = "0.1.0", path = "./crates/keyshare" } +e3-logger = { version = "0.1.0", path = "./crates/logger" } +e3-net = { version = "0.1.0", path = "./crates/net" } +e3-compute-provider = { version = "0.1.0", path = "./crates/compute-provider" } +e3-sortition = { version = "0.1.0", path = "./crates/sortition" } +e3-program-server = { version = "0.1.0", path = "./crates/program-server" } +e3-support-scripts = { version = "0.1.0", path = "./crates/support-scripts" } +e3-test-helpers = { version = "0.1.0", path = "./crates/test-helpers" } +e3-tests = { version = "0.1.0", path = "./crates/tests" } + +actix = "0.13.5" +actix-web = "4.10.2" +aes-gcm = "0.10.3" +alloy = { version = "1.0.11", features = ["node-bindings", "full"] } +alloy-primitives = { version = "1.0", default-features = false, features = [ + "rlp", + "serde", + "std", +] } +alloy-sol-types = "1.0" +alloy-dyn-abi = "1.1.0" +argon2 = "0.5.2" +anyhow = "1.0.86" +async-std = { version = "1.12", features = ["attributes"] } +async-trait = "0.1" +async-recursion = "1.1.1" +bincode = "1.3.3" +bloom = "0.3.2" +bs58 = "0.5.1" +base64 = "0.22.1" +clap = { version = "4.5.17", features = ["derive"] } +compile-time = "0.2.0" +dirs = "5.0.1" +dialoguer = "0.11.0" +duct = "1.0.0" +eyre = { version = "0.6.12" } +fhe_rs = { package = "fhe", git = "https://github.com/gnosisguild/fhe.rs" } +fhe-traits = { git = "https://github.com/gnosisguild/fhe.rs" } +fhe-math = { git = "https://github.com/gnosisguild/fhe.rs.git" } +fhe-util = { git = "https://github.com/gnosisguild/fhe.rs" } +figment = { version = "0.10.19", features = ["yaml", "test"] } +futures = "0.3.30" +futures-util = "0.3" +glob = "0.3.2" +git2 = "0.20.2" +hex = "0.4.3" +jsonrpsee = { version = "0.25.1", features = ["http-client"] } +lazy_static = "1.5.0" +num = "0.4.3" +num-bigint = "0.4.6" +num-traits = "0.2" +once_cell = "1.19.0" +opentelemetry = "0.29.0" +opentelemetry-otlp = { version = "0.29.0", features = ["grpc-tonic"] } +opentelemetry_sdk = "0.29.0" +opentelemetry-stdout = "0.29.0" +path-clean = "1.0.1" +petname = "2.0.2" +phf = { version = "0.11", features = ["macros"] } +rand_chacha = "0.3.1" +rand = "0.8.5" +regex = "1.11.1" +reqwest = { version = "0.12.15", features = ["json"] } +serde = { version = "1.0.208", features = ["derive"] } +serde_json = "1.0.133" +sled = "0.34.7" +serde_yaml = "0.9.34" +sha2 = "0.10.8" +shellexpand = "3.1.0" +tempfile = "3.20.0" +thiserror = { version = "1.0.58" } +tokio = { version = "1.38", features = ["full"] } +tracing = "0.1.37" +tracing-opentelemetry = "0.30.0" +tracing-subscriber = { version = "0.3", features = ["env-filter", "time"] } +url = "2.5.4" +vfs = { git = "https://github.com/ryardley/rust-vfs.git", features = ["async-vfs"] } +libp2p = { version = "0.54.1", features = [ + "gossipsub", + "identify", + "kad", + "macros", + "mdns", + "ping", + "quic", + "tokio", +]} +zeroize = "1.6.0" diff --git a/packages/ciphernode/.dockerignore b/crates/.dockerignore similarity index 100% rename from packages/ciphernode/.dockerignore rename to crates/.dockerignore diff --git a/crates/Dockerfile b/crates/Dockerfile new file mode 100644 index 0000000000..95bdd4b4e7 --- /dev/null +++ b/crates/Dockerfile @@ -0,0 +1,117 @@ +FROM node:22 AS evm-builder + +WORKDIR /build +COPY crates/wasm/package.json ./crates/wasm/package.json +COPY packages/enclave-react ./packages/enclave-react +COPY packages/enclave-sdk ./packages/enclave-sdk +COPY packages/enclave-config ./packages/enclave-config +COPY packages/evm ./packages/evm +COPY pnpm-workspace.yaml . +COPY pnpm-lock.yaml . + +RUN npm install -g corepack +RUN corepack enable + +# We just need the contracts to be compiled here +RUN cd packages/evm && pnpm install && pnpm compile:contracts + +# Build stage +FROM rust:1.85 AS ciphernode-builder + +# Force incremental +ENV CARGO_INCREMENTAL=1 +ENV RUSTC_FORCE_INCREMENTAL=1 +ENV CARGO_BUILD_JOBS=8 + +# Create build directory + +WORKDIR /build +COPY Cargo.lock ./Cargo.lock +COPY Cargo.toml ./Cargo.toml +COPY ./rust-toolchain.toml . + +WORKDIR /build/crates +COPY --from=evm-builder /build/packages/evm/artifacts ../packages/evm/artifacts +COPY --from=evm-builder /build/packages/evm/deployments ../packages/evm/deployments + + +# find crates/* -name "Cargo.toml" -not -path "*/support/*" -printf "COPY %p %p\n" | sed 's|COPY \(.*\) crates/|COPY \1 ./|' +COPY crates/aggregator/Cargo.toml ./aggregator/Cargo.toml +COPY crates/bfv-helpers/Cargo.toml ./bfv-helpers/Cargo.toml +COPY crates/cli/Cargo.toml ./cli/Cargo.toml +COPY crates/compute-provider/Cargo.toml ./compute-provider/Cargo.toml +COPY crates/config/Cargo.toml ./config/Cargo.toml +COPY crates/crypto/Cargo.toml ./crypto/Cargo.toml +COPY crates/data/Cargo.toml ./data/Cargo.toml +COPY crates/enclaveup/Cargo.toml ./enclaveup/Cargo.toml +COPY crates/entrypoint/Cargo.toml ./entrypoint/Cargo.toml +COPY crates/events/Cargo.toml ./events/Cargo.toml +COPY crates/evm-helpers/Cargo.toml ./evm-helpers/Cargo.toml +COPY crates/evm/Cargo.toml ./evm/Cargo.toml +COPY crates/fhe/Cargo.toml ./fhe/Cargo.toml +COPY crates/fs/Cargo.toml ./fs/Cargo.toml +COPY crates/indexer/Cargo.toml ./indexer/Cargo.toml +COPY crates/init/Cargo.toml ./init/Cargo.toml +COPY crates/keyshare/Cargo.toml ./keyshare/Cargo.toml +COPY crates/logger/Cargo.toml ./logger/Cargo.toml +COPY crates/net/Cargo.toml ./net/Cargo.toml +COPY crates/program-server/Cargo.toml ./program-server/Cargo.toml +COPY crates/request/Cargo.toml ./request/Cargo.toml +COPY crates/sdk/Cargo.toml ./sdk/Cargo.toml +COPY crates/sortition/Cargo.toml ./sortition/Cargo.toml +COPY crates/support-scripts/Cargo.toml ./support-scripts/Cargo.toml +COPY crates/test-helpers/Cargo.toml ./test-helpers/Cargo.toml +COPY crates/tests/Cargo.toml ./tests/Cargo.toml +COPY crates/wasm/Cargo.toml ./wasm/Cargo.toml + +RUN echo 'fn main() { println!("cargo:warning=dependency cache build"); }' > ./entrypoint/build.rs +RUN echo 'fn main() { println!("cargo:warning=dependency cache build"); }' > ./cli/build.rs +RUN for d in ./*/ ; do \ + if [ -f "$d/Cargo.toml" ]; then \ + if [ "$d" = "./cli/" ] || [ "$d" = "./enclaveup/" ]; then \ + mkdir -p "$d/src" && \ + echo "fn main() {}" > "$d/src/main.rs"; \ + else \ + mkdir -p "$d/src" && \ + echo "pub fn main() {}" > "$d/src/lib.rs"; \ + fi \ + fi \ + done + +RUN cargo build --release + +COPY ./crates . + +RUN find . -name "*.rs" -exec touch {} + +RUN cargo build --release -p e3-cli + +# Runtime stage +FROM debian:stable-slim + +# Install runtime dependencies +RUN apt-get update && apt-get install -y --no-install-recommends iptables dnsutils iputils-ping ca-certificates jq && \ + apt-get clean && rm -rf /var/lib/apt/lists/* + +# Create non-root user +RUN useradd -m -u 1000 -s /bin/bash ciphernode + +# Create necessary directories with proper permissions +RUN mkdir -p /home/ciphernode/.config/enclave \ + /home/ciphernode/.local/share/enclave \ + /run/secrets && \ + chown -R ciphernode:ciphernode /home/ciphernode /run/secrets + +# Switch to non-root user +USER ciphernode +WORKDIR /home/ciphernode + +# Copy binary from builder +COPY --from=ciphernode-builder --chown=ciphernode:ciphernode /build/target/release/enclave /usr/local/bin/ +COPY --from=ciphernode-builder --chmod=755 --chown=ciphernode:ciphernode /build/crates/ciphernode-entrypoint.sh /usr/local/bin/ + +# Environment variables for configuration +ENV CONFIG_DIR=/home/ciphernode/.config/enclave +ENV DATA_DIR=/home/ciphernode/.local/share/enclave + +# Add entrypoint script +ENTRYPOINT ["ciphernode-entrypoint.sh"] diff --git a/packages/ciphernode/README.md b/crates/README.md similarity index 100% rename from packages/ciphernode/README.md rename to crates/README.md diff --git a/crates/aggregator/Cargo.toml b/crates/aggregator/Cargo.toml new file mode 100644 index 0000000000..7c1707e58d --- /dev/null +++ b/crates/aggregator/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "e3-aggregator" +version = "0.1.0" +edition.workspace = true +license.workspace = true +description = "E3 - Enclave Ciphernode Aggregators" +repository = "https://github.com/gnosisguild/enclave/crates/aggregator" + +[dependencies] +actix = { workspace = true } +anyhow = { workspace = true } +serde = { workspace = true } +bincode = { workspace = true } +e3-config = { workspace = true } +async-trait = { workspace = true } +e3-events = { workspace = true } +e3-fhe = { workspace = true } +e3-sortition = { workspace = true } +e3-request = { workspace = true } +e3-data = { workspace = true } +tracing = { workspace = true } diff --git a/packages/ciphernode/aggregator/src/ext.rs b/crates/aggregator/src/ext.rs similarity index 89% rename from packages/ciphernode/aggregator/src/ext.rs rename to crates/aggregator/src/ext.rs index 0114ff8cba..550f297c84 100644 --- a/packages/ciphernode/aggregator/src/ext.rs +++ b/crates/aggregator/src/ext.rs @@ -6,11 +6,11 @@ use crate::{ use actix::{Actor, Addr}; use anyhow::{anyhow, Result}; use async_trait::async_trait; -use data::{AutoPersist, RepositoriesFactory}; +use e3_data::{AutoPersist, RepositoriesFactory}; +use e3_events::{BusError, EnclaveErrorType, EnclaveEvent, EventBus}; +use e3_fhe::ext::FHE_KEY; use e3_request::{E3Context, E3ContextSnapshot, E3Extension, META_KEY}; -use events::{BusError, EnclaveErrorType, EnclaveEvent, EventBus}; -use fhe::ext::FHE_KEY; -use sortition::Sortition; +use e3_sortition::Sortition; pub struct PlaintextAggregatorExtension { bus: Addr>, @@ -69,7 +69,6 @@ impl E3Extension for PlaintextAggregatorExtension { bus: self.bus.clone(), sortition: self.sortition.clone(), e3_id: e3_id.clone(), - src_chain_id: meta.src_chain_id, }, sync_state, ) @@ -102,21 +101,12 @@ impl E3Extension for PlaintextAggregatorExtension { return Ok(()); }; - let Some(ref meta) = ctx.get_dependency(META_KEY) else { - self.bus.err( - EnclaveErrorType::PlaintextAggregation, - anyhow!(ERROR_PLAINTEXT_META_MISSING), - ); - return Ok(()); - }; - let value = PlaintextAggregator::new( PlaintextAggregatorParams { fhe: fhe.clone(), bus: self.bus.clone(), sortition: self.sortition.clone(), e3_id: ctx.e3_id.clone(), - src_chain_id: meta.src_chain_id, }, sync_state, ) @@ -185,7 +175,6 @@ impl E3Extension for PublicKeyAggregatorExtension { bus: self.bus.clone(), sortition: self.sortition.clone(), e3_id, - src_chain_id: meta.src_chain_id, }, sync_state, ) @@ -219,22 +208,12 @@ impl E3Extension for PublicKeyAggregatorExtension { return Ok(()); }; - let Some(meta) = ctx.get_dependency(META_KEY) else { - self.bus.err( - EnclaveErrorType::PublickeyAggregation, - anyhow!(ERROR_PUBKEY_META_MISSING), - ); - - return Ok(()); - }; - let value = PublicKeyAggregator::new( PublicKeyAggregatorParams { fhe: fhe.clone(), bus: self.bus.clone(), sortition: self.sortition.clone(), e3_id: ctx.e3_id.clone(), - src_chain_id: meta.src_chain_id, }, sync_state, ) diff --git a/packages/ciphernode/aggregator/src/lib.rs b/crates/aggregator/src/lib.rs similarity index 100% rename from packages/ciphernode/aggregator/src/lib.rs rename to crates/aggregator/src/lib.rs diff --git a/packages/ciphernode/aggregator/src/plaintext_aggregator.rs b/crates/aggregator/src/plaintext_aggregator.rs similarity index 96% rename from packages/ciphernode/aggregator/src/plaintext_aggregator.rs rename to crates/aggregator/src/plaintext_aggregator.rs index 98721379e7..f91beadf36 100644 --- a/packages/ciphernode/aggregator/src/plaintext_aggregator.rs +++ b/crates/aggregator/src/plaintext_aggregator.rs @@ -1,12 +1,12 @@ use actix::prelude::*; use anyhow::Result; -use data::Persistable; -use events::{ +use e3_data::Persistable; +use e3_events::{ DecryptionshareCreated, Die, E3id, EnclaveEvent, EventBus, OrderedSet, PlaintextAggregated, Seed, }; -use fhe::{Fhe, GetAggregatePlaintext}; -use sortition::{GetHasNode, Sortition}; +use e3_fhe::{Fhe, GetAggregatePlaintext}; +use e3_sortition::{GetHasNode, Sortition}; use std::sync::Arc; use tracing::error; @@ -52,7 +52,6 @@ pub struct PlaintextAggregator { sortition: Addr, e3_id: E3id, state: Persistable, - src_chain_id: u64, } pub struct PlaintextAggregatorParams { @@ -60,7 +59,6 @@ pub struct PlaintextAggregatorParams { pub bus: Addr>, pub sortition: Addr, pub e3_id: E3id, - pub src_chain_id: u64, } impl PlaintextAggregator { @@ -73,7 +71,6 @@ impl PlaintextAggregator { bus: params.bus, sortition: params.sortition, e3_id: params.e3_id, - src_chain_id: params.src_chain_id, state, } } @@ -144,12 +141,14 @@ impl Handler for PlaintextAggregator { let size = threshold_m; let address = event.node; + let chain_id = event.e3_id.chain_id(); let e3_id = event.e3_id.clone(); let decryption_share = event.decryption_share.clone(); Box::pin( self.sortition .send(GetHasNode { + chain_id, address, size, seed, @@ -203,7 +202,6 @@ impl Handler for PlaintextAggregator { let event = EnclaveEvent::from(PlaintextAggregated { decrypted_output, e3_id: self.e3_id.clone(), - src_chain_id: self.src_chain_id, }); self.bus.do_send(event); diff --git a/packages/ciphernode/aggregator/src/publickey_aggregator.rs b/crates/aggregator/src/publickey_aggregator.rs similarity index 95% rename from packages/ciphernode/aggregator/src/publickey_aggregator.rs rename to crates/aggregator/src/publickey_aggregator.rs index a0126f5c9c..894acdc441 100644 --- a/packages/ciphernode/aggregator/src/publickey_aggregator.rs +++ b/crates/aggregator/src/publickey_aggregator.rs @@ -1,11 +1,11 @@ use actix::prelude::*; use anyhow::Result; -use data::Persistable; -use events::{ +use e3_data::Persistable; +use e3_events::{ Die, E3id, EnclaveEvent, EventBus, KeyshareCreated, OrderedSet, PublicKeyAggregated, Seed, }; -use fhe::{Fhe, GetAggregatePublicKey}; -use sortition::{GetHasNode, GetNodes, Sortition}; +use e3_fhe::{Fhe, GetAggregatePublicKey}; +use e3_sortition::{GetHasNode, GetNodes, Sortition}; use std::sync::Arc; use tracing::error; @@ -55,7 +55,6 @@ pub struct PublicKeyAggregator { sortition: Addr, e3_id: E3id, state: Persistable, - src_chain_id: u64, } pub struct PublicKeyAggregatorParams { @@ -63,7 +62,6 @@ pub struct PublicKeyAggregatorParams { pub bus: Addr>, pub sortition: Addr, pub e3_id: E3id, - pub src_chain_id: u64, } /// Aggregate PublicKey for a committee of nodes. This actor listens for KeyshareCreated events @@ -82,7 +80,6 @@ impl PublicKeyAggregator { bus: params.bus, sortition: params.sortition, e3_id: params.e3_id, - src_chain_id: params.src_chain_id, state, } } @@ -153,12 +150,14 @@ impl Handler for PublicKeyAggregator { let size = threshold_m; let address = event.node; + let chain_id = event.e3_id.chain_id(); let e3_id = event.e3_id.clone(); let pubkey = event.pubkey.clone(); Box::pin( self.sortition .send(GetHasNode { + chain_id, address, size, seed, @@ -221,7 +220,9 @@ impl Handler for PublicKeyAggregator { fn handle(&mut self, msg: NotifyNetwork, _: &mut Self::Context) -> Self::Result { Box::pin( self.sortition - .send(GetNodes) + .send(GetNodes { + chain_id: msg.e3_id.chain_id(), + }) .into_actor(self) .map(move |res, act, _| { let nodes = res?; @@ -230,7 +231,6 @@ impl Handler for PublicKeyAggregator { pubkey: msg.pubkey.clone(), e3_id: msg.e3_id.clone(), nodes: OrderedSet::from(nodes), - src_chain_id: act.src_chain_id, }); act.bus.do_send(event); Ok(()) diff --git a/packages/ciphernode/aggregator/src/repo.rs b/crates/aggregator/src/repo.rs similarity index 89% rename from packages/ciphernode/aggregator/src/repo.rs rename to crates/aggregator/src/repo.rs index e12ad6e881..c4f9c6b53d 100644 --- a/packages/ciphernode/aggregator/src/repo.rs +++ b/crates/aggregator/src/repo.rs @@ -1,6 +1,6 @@ -use config::StoreKeys; -use data::{Repositories, Repository}; -use events::E3id; +use e3_config::StoreKeys; +use e3_data::{Repositories, Repository}; +use e3_events::E3id; use crate::{PlaintextAggregatorState, PublicKeyAggregatorState}; diff --git a/crates/bfv-helpers/Cargo.toml b/crates/bfv-helpers/Cargo.toml new file mode 100644 index 0000000000..1e1bf9ded3 --- /dev/null +++ b/crates/bfv-helpers/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "e3-bfv-helpers" +version = "0.1.0" +edition.workspace = true +license.workspace = true +description = "E3 - Enclave BFV Helpers" +repository = "https://github.com/gnosisguild/enclave/crates/bfv-helpers" + +[dependencies] +alloy-dyn-abi = { workspace = true } +alloy-primitives = { workspace = true } +fhe-traits.workspace = true +fhe_rs.workspace = true +rand.workspace = true +anyhow.workspace = true + +[dev-dependencies] +hex.workspace = true diff --git a/crates/bfv-helpers/src/client.rs b/crates/bfv-helpers/src/client.rs new file mode 100644 index 0000000000..cc51c99d0d --- /dev/null +++ b/crates/bfv-helpers/src/client.rs @@ -0,0 +1,31 @@ +use crate::{build_bfv_params_arc, params::SET_2048_1032193_1}; +use anyhow::anyhow; +use anyhow::Result; +use fhe_rs::bfv::Encoding; +use fhe_rs::bfv::Plaintext; +use fhe_rs::bfv::PublicKey; +use fhe_traits::{DeserializeParametrized, FheEncoder, FheEncrypter, Serialize}; +use rand::CryptoRng; +use rand::RngCore; + +pub fn bfv_encrypt_u64(data: u64, public_key: Vec, mut rng: R) -> Result> +where + R: RngCore + CryptoRng, +{ + let (degree, plaintext_modulus, moduli) = SET_2048_1032193_1; + let params = build_bfv_params_arc(degree, plaintext_modulus, &moduli); + + let pk = PublicKey::from_bytes(&public_key, ¶ms) + .map_err(|e| anyhow!("Error deserializing public key:{e}"))?; + + let input = vec![data]; + let pt = Plaintext::try_encode(&input, Encoding::poly(), ¶ms) + .map_err(|e| anyhow!("Error encoding plaintext: {e}"))?; + + let ct = pk + .try_encrypt(&pt, &mut rng) + .map_err(|e| anyhow!("Error encrypting data: {e}"))?; + + let encrypted_data = ct.to_bytes(); + Ok(encrypted_data) +} diff --git a/crates/bfv-helpers/src/lib.rs b/crates/bfv-helpers/src/lib.rs new file mode 100644 index 0000000000..3b57a8d4a5 --- /dev/null +++ b/crates/bfv-helpers/src/lib.rs @@ -0,0 +1,372 @@ +pub mod client; + +use alloy_dyn_abi::{DynSolType, DynSolValue}; +use alloy_primitives::U256; +use fhe_rs::bfv::{BfvParameters, BfvParametersBuilder}; +use std::sync::Arc; + +/// Predefined BFV parameters for common use cases +pub mod params { + /// Standard BFV parameters sets + /// Each set is a tuple of (degree, plaintext_modulus, moduli). + /// Naming convention: SET___ + + /// - Degree: 2048 (polynomial ring size) + /// - Plaintext modulus: 1032193 + /// - Moduli: [0x3FFFFFFF000001] (provides good security level) + pub const SET_2048_1032193_1: (usize, u64, [u64; 1]) = ( + 2048, // degree + 1032193, // plaintext_modulus + [0x3FFFFFFF000001], // moduli + ); +} + +/// Builds BFV (Brakerski-Fan-Vercauteren) encryption parameters. +/// +/// # Arguments +/// +/// * `degree` - The degree of the polynomial ring, must be a power of 2 +/// * `plaintext_modulus` - The modulus for the plaintext space +/// * `moduli` - The moduli for the ciphertext space +/// +/// # Returns +/// +/// Returns a `BfvParameters` instance configured with the specified parameters. +/// +/// # Panics +/// +/// Panics if the parameters cannot be built (e.g., invalid degree or moduli). +pub fn build_bfv_params(degree: usize, plaintext_modulus: u64, moduli: &[u64]) -> BfvParameters { + match BfvParametersBuilder::new() + .set_degree(degree) + .set_plaintext_modulus(plaintext_modulus) + .set_moduli(moduli) + .build() + { + Ok(params) => params, + Err(e) => panic!("Failed to build BFV Parameters: {}", e), + } +} + +/// Builds BFV encryption parameters wrapped in an `Arc` for shared ownership. +/// +/// This function is similar to `build_bfv_params` but returns the parameters +/// wrapped in an `Arc` for thread-safe shared ownership. +/// +/// # Arguments +/// +/// * `degree` - The degree of the polynomial ring, must be a power of 2 +/// * `plaintext_modulus` - The modulus for the plaintext space +/// * `moduli` - The moduli for the ciphertext space +/// +/// # Returns +/// +/// Returns an `Arc` instance configured with the specified parameters. +/// +/// # Panics +/// +/// Panics if the parameters cannot be built (e.g., invalid degree or moduli). +pub fn build_bfv_params_arc( + degree: usize, + plaintext_modulus: u64, + moduli: &[u64], +) -> Arc { + match BfvParametersBuilder::new() + .set_degree(degree) + .set_plaintext_modulus(plaintext_modulus) + .set_moduli(moduli) + .build_arc() + { + Ok(params) => params, + Err(e) => panic!("Failed to build BFV Parameters wrapped in Arc: {}", e), + } +} + +/// Encodes BFV parameters into ABI-encoded bytes. +/// +/// This function converts BFV parameters into a tuple structure of (degree, plaintext_modulus, moduli[]) +/// and then ABI-encodes the tuple using Solidity ABI format. The resulting bytes can be used +/// in smart contracts or for cross-platform serialization. +/// +/// # Arguments +/// +/// * `params` - The BFV parameters to encode +/// +/// # Returns +/// +/// Returns a `Vec` containing the ABI-encoded parameters as a tuple (uint256, uint256, uint256[]). +pub fn encode_bfv_params(params: &BfvParameters) -> Vec { + let value = DynSolValue::Tuple(vec![ + DynSolValue::Uint(U256::from(params.degree()), 256), + DynSolValue::Uint(U256::from(params.plaintext()), 256), + DynSolValue::Array( + params + .moduli() + .iter() + .map(|val| DynSolValue::Uint(U256::from(*val), 256)) + .collect(), + ), + ]); + value.abi_encode() +} + +/// Decodes BFV parameters from ABI-encoded bytes. +/// +/// This function converts ABI-encoded bytes back into BFV parameters. +/// The bytes should represent a tuple (uint256, uint256, uint256[]) containing +/// (degree, plaintext_modulus, moduli[]) as produced by `encode_bfv_params`. +/// +/// # Arguments +/// +/// * `bytes` - The ABI-encoded bytes containing the encoded parameters +/// +/// # Returns +/// +/// Returns a `BfvParameters` instance decoded from the bytes. +/// +/// # Panics +/// +/// Panics if the decoding fails due to invalid format or parameter values. +pub fn decode_bfv_params(bytes: &[u8]) -> BfvParameters { + // Define the expected tuple type: (uint256, uint256, uint256[]) + let tuple_type = DynSolType::Tuple(vec![ + DynSolType::Uint(256), // degree + DynSolType::Uint(256), // plaintext_modulus + DynSolType::Array(Box::new(DynSolType::Uint(256))), // moduli array + ]); + + let decoded = tuple_type + .abi_decode(bytes) + .expect("Failed to ABI decode bytes"); + + match decoded { + DynSolValue::Tuple(inner_values) => { + // Extract degree (first element) + let degree: u64 = match &inner_values[0] { + DynSolValue::Uint(val, _) => { + (*val).try_into().expect("Failed to convert degree to u64") + } + _ => panic!("Expected uint256 for degree"), + }; + + // Extract plaintext modulus (second element) + let plaintext: u64 = match &inner_values[1] { + DynSolValue::Uint(val, _) => (*val) + .try_into() + .expect("Failed to convert plaintext to u64"), + _ => panic!("Expected uint256 for plaintext modulus"), + }; + + // Extract moduli array (third element) + let moduli: Vec = match &inner_values[2] { + DynSolValue::Array(moduli_array) => moduli_array + .iter() + .map(|val| match val { + DynSolValue::Uint(modulus, _) => (*modulus) + .try_into() + .expect("Failed to convert modulus to u64"), + _ => panic!("Expected uint256 for modulus value"), + }) + .collect::>(), + _ => panic!("Expected array for moduli"), + }; + + let params = BfvParametersBuilder::new() + .set_degree(degree as usize) + .set_plaintext_modulus(plaintext) + .set_moduli(&moduli) + .build() + .expect("Failed to build BFV Parameters"); + + params + } + _ => panic!("Expected tuple value in ABI encoding"), + } +} + +/// Decodes BFV parameters from ABI-encoded bytes and wraps them in an `Arc`. +/// +/// This is a convenience function that combines `decode_bfv_params` with `Arc::new` +/// to provide thread-safe shared ownership of the decoded parameters. +/// The input bytes should represent a tuple (uint256, uint256, uint256[]) containing +/// (degree, plaintext_modulus, moduli[]) in ABI-encoded format. +/// +/// # Arguments +/// +/// * `bytes` - The ABI-encoded bytes containing the encoded parameters +/// +/// # Returns +/// +/// Returns an `Arc` instance decoded from the bytes. +/// +/// # Panics +/// +/// Panics if the decoding fails (see `decode_bfv_params`). +pub fn decode_bfv_params_arc(bytes: &[u8]) -> Arc { + Arc::new(decode_bfv_params(bytes)) +} + +#[cfg(test)] +mod tests { + use super::*; + use anyhow::Result; + + #[test] + fn test_build_bfv_params() { + let degree = 2048; + let plaintext_modulus = 1032193; + let moduli = [0x3FFFFFFF000001]; + + let params = build_bfv_params(degree, plaintext_modulus, &moduli); + assert_eq!(params.degree(), degree); + assert_eq!(params.plaintext(), plaintext_modulus); + assert_eq!(params.moduli(), moduli); + } + + #[test] + fn test_build_bfv_params_arc() { + let degree = 2048; + let plaintext_modulus = 1032193; + let moduli = [0x3FFFFFFF000001]; + + let params = build_bfv_params_arc(degree, plaintext_modulus, &moduli); + assert_eq!(params.degree(), degree); + assert_eq!(params.plaintext(), plaintext_modulus); + assert_eq!(params.moduli(), moduli); + } + + #[test] + fn test_encoding_roundtrip() { + let degree = 2048; + let plaintext_modulus = 1032193; + let moduli = vec![0x3FFFFFFF000001]; + + let params = build_bfv_params(degree, plaintext_modulus, &moduli); + let encoded = encode_bfv_params(¶ms); + let decoded = decode_bfv_params(&encoded); + + assert_eq!(decoded.degree(), degree); + assert_eq!(decoded.plaintext(), plaintext_modulus); + assert_eq!(decoded.moduli(), moduli.as_slice()); + } + + #[test] + fn test_encoding_deterministic() { + let degree = 2048; + let plaintext_modulus = 1032193; + let moduli = vec![0x3FFFFFFF000001]; + + let params = build_bfv_params(degree, plaintext_modulus, &moduli); + + // Verify the encoding result is deterministic + let encoded1 = encode_bfv_params(¶ms); + let encoded2 = encode_bfv_params(¶ms); + assert_eq!(encoded1, encoded2, "ABI encoding should be deterministic"); + } + + #[test] + fn test_encoding_roundtrip_arc() { + let degree = 2048; + let plaintext_modulus = 1032193; + let moduli = vec![0x3FFFFFFF000001]; + + let params = build_bfv_params(degree, plaintext_modulus, &moduli); + let encoded = encode_bfv_params(¶ms); + + // Verify we can decode back to the original parameters with Arc + let decoded = decode_bfv_params_arc(&encoded); + assert_eq!(decoded.degree(), degree); + assert_eq!(decoded.plaintext(), plaintext_modulus); + assert_eq!(decoded.moduli(), moduli.as_slice()); + } + + #[test] + #[should_panic(expected = "Failed to ABI decode bytes")] + fn test_decode_bfv_params_error() { + let invalid_bytes = vec![0u8; 10]; + let _ = decode_bfv_params(&invalid_bytes); + } + + #[cfg(test)] + mod params_tests { + use super::*; + + #[test] + fn test_params_constant() { + let (degree, plaintext_modulus, moduli) = params::SET_2048_1032193_1; + assert_eq!(degree, 2048); + assert_eq!(plaintext_modulus, 1032193); + assert_eq!(moduli, [0x3FFFFFFF000001]); + } + + #[test] + fn test_params_function() { + let (degree, plaintext_modulus, moduli) = params::SET_2048_1032193_1; + let params = build_bfv_params(degree, plaintext_modulus, &moduli); + + assert_eq!(params.degree(), degree); + assert_eq!(params.plaintext(), plaintext_modulus); + assert_eq!(params.moduli(), moduli); + } + + #[test] + fn test_params_arc_function() { + let (degree, plaintext_modulus, moduli) = params::SET_2048_1032193_1; + let params = build_bfv_params_arc(degree, plaintext_modulus, &moduli); + + assert_eq!(params.degree(), degree); + assert_eq!(params.plaintext(), plaintext_modulus); + assert_eq!(params.moduli(), moduli); + } + + #[test] + fn test_params_encoding_roundtrip() { + let (degree, plaintext_modulus, moduli) = params::SET_2048_1032193_1; + let params = build_bfv_params(degree, plaintext_modulus, &moduli); + let encoded = encode_bfv_params(¶ms); + let decoded = decode_bfv_params(&encoded); + + let (degree, plaintext_modulus, moduli) = params::SET_2048_1032193_1; + assert_eq!(decoded.degree(), degree); + assert_eq!(decoded.plaintext(), plaintext_modulus); + assert_eq!(decoded.moduli(), moduli); + } + + #[test] + fn test_params_arc_encoding_roundtrip() { + let (degree, plaintext_modulus, moduli) = params::SET_2048_1032193_1; + let params = build_bfv_params_arc(degree, plaintext_modulus, &moduli); + let encoded = encode_bfv_params(¶ms); + let decoded = decode_bfv_params_arc(&encoded); + + let (degree, plaintext_modulus, moduli) = params::SET_2048_1032193_1; + assert_eq!(decoded.degree(), degree); + assert_eq!(decoded.plaintext(), plaintext_modulus); + assert_eq!(decoded.moduli(), moduli); + } + + #[test] + fn test_real_bfv_params() -> Result<()> { + let decoded = decode_bfv_params_arc(&hex::decode("0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000fc00100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000003fffffff000001")?); + Ok(()) + } + + #[test] + fn test_real_bfv_params_2() -> Result<()> { + let bytes = [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 192, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 255, 255, 255, 0, + 0, 1, + ]; + + let params = decode_bfv_params_arc(&bytes); + assert_eq!(params.plaintext(), 1032193); + Ok(()) + } + } +} diff --git a/packages/ciphernode/ciphernode-entrypoint.sh b/crates/ciphernode-entrypoint.sh similarity index 100% rename from packages/ciphernode/ciphernode-entrypoint.sh rename to crates/ciphernode-entrypoint.sh diff --git a/packages/ciphernode/enclave/Cargo.toml b/crates/cli/Cargo.toml similarity index 62% rename from packages/ciphernode/enclave/Cargo.toml rename to crates/cli/Cargo.toml index 1e47e8d4a6..fc7bd4fb67 100644 --- a/packages/ciphernode/enclave/Cargo.toml +++ b/crates/cli/Cargo.toml @@ -1,20 +1,28 @@ [package] -name = "enclave" -version.workspace = true +name = "e3-cli" +version = "0.1.0" edition.workspace = true -description = ": coordinates the encryption and decryption of enclave computations" -repository = "https://github.com/gnosisguild/enclave/packages/ciphernode" +license.workspace = true +description = "E3 - Enclave CLI" +repository = "https://github.com/gnosisguild/enclave/crates/cli" +build = "build.rs" + +[[bin]] +name = "enclave" +path = "src/main.rs" [dependencies] actix = { workspace = true } anyhow = { workspace = true } clap = { workspace = true } compile-time = { workspace = true } -config = { workspace = true } -crypto = { workspace = true } dialoguer = { workspace = true } -enclave_core = { workspace = true } -events = { workspace = true } +e3-config = { workspace = true } +e3-crypto = { workspace = true } +e3-entrypoint = { workspace = true } +e3-events = { workspace = true } +e3-init = { workspace = true } +e3-support-scripts = { workspace = true } hex = { workspace = true } opentelemetry = { workspace = true } opentelemetry-otlp = { workspace = true } diff --git a/crates/cli/README.md b/crates/cli/README.md new file mode 100644 index 0000000000..a9e279a561 --- /dev/null +++ b/crates/cli/README.md @@ -0,0 +1 @@ +# Enclave diff --git a/crates/cli/build.rs b/crates/cli/build.rs new file mode 100644 index 0000000000..3401609c32 --- /dev/null +++ b/crates/cli/build.rs @@ -0,0 +1,53 @@ +use std::process::Command; + +fn main() { + // Try to get local git SHA first + let output = Command::new("git") + .args(&["rev-parse", "--short=9", "HEAD"]) + .output(); + + let git_sha = match output { + Ok(output) if output.status.success() => String::from_utf8(output.stdout) + .unwrap_or_else(|_| "unknown".to_string()) + .trim() + .to_string(), + _ => { + // Fallback to remote commit hash + get_remote_commit_hash().unwrap_or_else(|| "unknown".to_string()) + } + }; + + // Set environment variable for compilation + println!("cargo:rustc-env=GIT_SHA={}", git_sha); + // Rebuild if git HEAD changes + println!("cargo:rerun-if-changed=.git/HEAD"); +} + +fn get_remote_commit_hash() -> Option { + let output = Command::new("git") + .args(&[ + "ls-remote", + "https://github.com/gnosisguild/enclave", + "refs/heads/main", + ]) + .output() + .ok()?; + + if !output.status.success() { + return None; + } + + let stdout = String::from_utf8(output.stdout).ok()?; + let commit_hash = stdout + .split_whitespace() + .next()? + .chars() + .take(9) + .collect::(); + + if commit_hash.is_empty() { + None + } else { + Some(commit_hash) + } +} diff --git a/packages/ciphernode/enclave/src/cli.rs b/crates/cli/src/cli.rs similarity index 56% rename from packages/ciphernode/enclave/src/cli.rs rename to crates/cli/src/cli.rs index afc70f6730..ccc629b4fb 100644 --- a/packages/ciphernode/enclave/src/cli.rs +++ b/crates/cli/src/cli.rs @@ -1,16 +1,18 @@ -use crate::helpers::telemetry::setup_tracing; -use crate::net; +use std::path::PathBuf; + +use crate::helpers::telemetry::{setup_simple_tracing, setup_tracing}; use crate::net::NetCommands; use crate::nodes::{self, NodeCommands}; use crate::password::PasswordCommands; -use crate::start; +use crate::program::{self, ProgramCommands}; use crate::wallet::WalletCommands; -use crate::{init, password, wallet}; +use crate::{config_set, init, net, password, purge_all, rev, wallet}; +use crate::{print_env, start}; use anyhow::{bail, Result}; use clap::{command, ArgAction, Parser, Subcommand}; -use config::validation::ValidUrl; -use config::{load_config, AppConfig}; -use enclave_core::helpers::datastore::close_all_connections; +use e3_config::validation::ValidUrl; +use e3_config::{load_config, AppConfig}; +use e3_entrypoint::helpers::datastore::close_all_connections; use tracing::{info, instrument, Level}; #[derive(Parser, Debug)] @@ -69,11 +71,12 @@ impl Cli { #[instrument(skip_all)] pub async fn execute(self) -> Result<()> { - // Attempt to load the config, but only treat “not found” as + let log_level = self.log_level(); + // Attempt to load the config, but only treat "not found" as // the trigger for the init flow. All other errors bubble up. let config = match self.load_config() { Ok(cfg) => cfg, - // If the file truly doesn’t exist, fall back to init + // If the file truly doesn't exist, fall back to init Err(e) if matches!( e.downcast_ref::(), @@ -82,7 +85,12 @@ impl Cli { { // Existing init branch match self.command { - Commands::Init { + Commands::Rev => rev::execute().await?, + Commands::Init {path, template, skip_cleanup} => { + setup_simple_tracing(log_level); + init::execute(path, template, skip_cleanup).await? + }, + Commands::ConfigSet { rpc_url, eth_address, password, @@ -90,7 +98,7 @@ impl Cli { net_keypair, generate_net_keypair, } => { - init::execute( + config_set::execute( rpc_url, eth_address, password, @@ -98,10 +106,23 @@ impl Cli { net_keypair, generate_net_keypair, ) - .await? + .await?; + println!("You can start your node using `enclave start`"); } + Commands::Start { .. } => { + println!("No configuration found. Setting up enclave configuration..."); + config_set::execute( + None, + None, + None, + false, + None, + false, + ) + .await?; + }, _ => bail!( - "Configuration file not found. Have you created `enclave.config.yaml` in your project?" + "Configuration file not found. Run `enclave config-set` to create a configuration." ), }; return Ok(()); @@ -110,19 +131,19 @@ impl Cli { Err(e) => return Err(e), }; - setup_tracing(&config, self.log_level())?; + setup_tracing(&config, log_level)?; info!("Config loaded from: {:?}", config.config_file()); if config.autopassword() { - enclave_core::password::set::autopassword(&config).await?; + e3_entrypoint::password::set::autopassword(&config).await?; } if config.autonetkey() { - enclave_core::net::keypair::generate::autonetkey(&config).await?; + e3_entrypoint::net::keypair::generate::autonetkey(&config).await?; } if config.autowallet() { - enclave_core::wallet::set::autowallet(&config).await?; + e3_entrypoint::wallet::set::autowallet(&config).await?; } match self.command { @@ -130,12 +151,31 @@ impl Cli { Commands::Init { .. } => { bail!("Cannot run `enclave init` when a configuration exists."); } + Commands::Compile { dev } => { + e3_support_scripts::program_compile(config.program().clone(), dev).await? + } + Commands::PrintEnv { vite, chain } => print_env::execute(&config, &chain, vite).await?, + Commands::Program { command } => program::execute(command, &config).await?, + Commands::PurgeAll => { + purge_all::execute().await?; + } + Commands::ConfigSet { .. } => { + bail!("Cannot run `enclave config-set` when a configuration already exists."); + } Commands::Nodes { command } => { - nodes::execute(command, &config, self.verbose, self.config).await? + nodes::execute( + command, + &config, + self.verbose, + self.config, + self.otel.clone().map(Into::into), + ) + .await? } Commands::Password { command } => password::execute(command, &config).await?, Commands::Wallet { command } => wallet::execute(command, config).await?, Commands::Net { command } => net::execute(command, &config).await?, + Commands::Rev => rev::execute().await?, } close_all_connections(); @@ -171,6 +211,51 @@ pub enum Commands { peers: Vec, }, + /// Print the config env + PrintEnv { + /// Display vite addresses + #[arg(long)] + vite: bool, + + /// Chain name + #[arg(long)] + chain: String, + }, + + /// Initialize an enclave project + Init { + /// Path to the location where the project should be initialized + path: Option, + + /// Template repository to use. Expecting the form `git+https://github.com/gnosisguild/enclave.git#main:template/default` + #[arg(long)] + template: Option, + + /// Do not clean up on errors leaving the working folder intact. This option is mainly used + /// for testing the installer. + #[arg(long)] + skip_cleanup: bool, + }, + + /// Compile an Enclave project + Compile { + /// Compile the program in Dev Mode. + #[arg(long)] + dev: Option, + }, + + /// Return the git_sha rev that the cli was compiled against + Rev, + + /// Program management commands + Program { + #[command(subcommand)] + command: ProgramCommands, + }, + + /// Purge both the local program cache and all ciphernode databases + PurgeAll, + /// Password management commands Password { #[command(subcommand)] @@ -189,14 +274,14 @@ pub enum Commands { command: NetCommands, }, - /// Initialize your ciphernode by setting up a configuration - Init { + /// Set configuration values (similar to solana config set) + ConfigSet { /// An rpc url for enclave to connect to - #[arg(long = "rpc-url")] + #[arg(long = "rpc-url", short = 'r')] rpc_url: Option, /// An Ethereum address that enclave should use to identify the node - #[arg(long = "eth-address")] + #[arg(long = "eth-address", short = 'e')] eth_address: Option, /// The password @@ -204,15 +289,15 @@ pub enum Commands { password: Option, /// Skip asking for eth - #[arg(long = "skip-eth")] + #[arg(long = "skip-eth", short = 's')] skip_eth: bool, /// The network private key (ed25519) - #[arg(long = "net-keypair")] + #[arg(long = "net-keypair", short = 'n')] net_keypair: Option, /// Generate a new network keypair - #[arg(long = "generate-net-keypair")] + #[arg(long = "generate-net-keypair", short = 'g')] generate_net_keypair: bool, }, diff --git a/packages/ciphernode/enclave/src/init.rs b/crates/cli/src/config_set.rs similarity index 84% rename from packages/ciphernode/enclave/src/init.rs rename to crates/cli/src/config_set.rs index cbdb6ae69c..bcb5ff84b0 100644 --- a/packages/ciphernode/enclave/src/init.rs +++ b/crates/cli/src/config_set.rs @@ -1,6 +1,6 @@ use anyhow::Result; use dialoguer::{theme::ColorfulTheme, Input}; -use enclave_core::init; +use e3_entrypoint::config_set; use tracing::instrument; use crate::net; @@ -19,19 +19,19 @@ pub async fn execute( ) -> Result<()> { let rpc_url = match rpc_url { Some(url) => { - init::validate_rpc_url(&url)?; + config_set::validate_rpc_url(&url)?; url } None => Input::::new() .with_prompt("Enter WebSocket devnet RPC URL") .default("wss://ethereum-sepolia-rpc.publicnode.com".to_string()) - .validate_with(init::validate_rpc_url) + .validate_with(config_set::validate_rpc_url) .interact_text()?, }; let eth_address: Option = match eth_address { Some(address) => { - init::validate_eth_address(&address)?; + config_set::validate_eth_address(&address)?; Some(address) } None => { @@ -41,7 +41,7 @@ pub async fn execute( Input::with_theme(&ColorfulTheme::default()) .with_prompt("Enter your Ethereum address (press Enter to skip)") .allow_empty(true) - .validate_with(init::validate_eth_address) + .validate_with(config_set::validate_eth_address) .interact() .ok() .map(|s| if s.is_empty() { None } else { Some(s) }) @@ -50,7 +50,7 @@ pub async fn execute( } }; - let config = init::execute(rpc_url, eth_address).await?; + let config = config_set::execute(rpc_url, eth_address).await?; password::execute(PasswordCommands::Set { password }, &config).await?; @@ -73,7 +73,6 @@ pub async fn execute( } println!("Enclave configuration successfully created!"); - println!("You can start your node using `enclave start`"); Ok(()) } diff --git a/packages/ciphernode/enclave/src/helpers/compile_id.rs b/crates/cli/src/helpers/compile_id.rs similarity index 100% rename from packages/ciphernode/enclave/src/helpers/compile_id.rs rename to crates/cli/src/helpers/compile_id.rs diff --git a/packages/ciphernode/enclave/src/helpers/mod.rs b/crates/cli/src/helpers/mod.rs similarity index 100% rename from packages/ciphernode/enclave/src/helpers/mod.rs rename to crates/cli/src/helpers/mod.rs diff --git a/packages/ciphernode/enclave/src/helpers/prompt_password.rs b/crates/cli/src/helpers/prompt_password.rs similarity index 100% rename from packages/ciphernode/enclave/src/helpers/prompt_password.rs rename to crates/cli/src/helpers/prompt_password.rs diff --git a/packages/ciphernode/enclave/src/helpers/telemetry.rs b/crates/cli/src/helpers/telemetry.rs similarity index 87% rename from packages/ciphernode/enclave/src/helpers/telemetry.rs rename to crates/cli/src/helpers/telemetry.rs index 05b619e8da..8fa5747748 100644 --- a/packages/ciphernode/enclave/src/helpers/telemetry.rs +++ b/crates/cli/src/helpers/telemetry.rs @@ -1,5 +1,5 @@ use anyhow::Result; -use config::AppConfig; +use e3_config::AppConfig; use opentelemetry::trace::TracerProvider; use opentelemetry_otlp::{Protocol, WithExportConfig}; use opentelemetry_sdk::trace::SdkTracerProvider; @@ -8,6 +8,15 @@ use tracing::Level; use tracing_subscriber::layer::SubscriberExt; use tracing_subscriber::util::SubscriberInitExt; +pub fn setup_simple_tracing(log_level: Level) { + tracing_subscriber::registry() + .with(tracing_subscriber::fmt::layer()) + .with(tracing_subscriber::filter::LevelFilter::from_level( + log_level, + )) + .init(); +} + pub fn setup_tracing(config: &AppConfig, log_level: Level) -> Result<()> { let name = config.name(); let maybe_otel_endpoint = config.otel(); diff --git a/crates/cli/src/init.rs b/crates/cli/src/init.rs new file mode 100644 index 0000000000..1eab6a21b9 --- /dev/null +++ b/crates/cli/src/init.rs @@ -0,0 +1,11 @@ +use std::path::PathBuf; + +use anyhow::Result; + +pub async fn execute( + location: Option, + template: Option, + skip_cleanup: bool, +) -> Result<()> { + e3_init::execute(location, template, skip_cleanup).await +} diff --git a/packages/ciphernode/enclave/src/main.rs b/crates/cli/src/main.rs similarity index 95% rename from packages/ciphernode/enclave/src/main.rs rename to crates/cli/src/main.rs index 4ea408655b..f85337b3cf 100644 --- a/packages/ciphernode/enclave/src/main.rs +++ b/crates/cli/src/main.rs @@ -3,6 +3,7 @@ use cli::Cli; use tracing::info; mod cli; +mod config_set; pub mod helpers; mod init; pub mod net; @@ -13,6 +14,7 @@ mod nodes; mod nodes_daemon; mod nodes_down; mod nodes_ps; +mod nodes_purge; mod nodes_restart; mod nodes_start; mod nodes_status; @@ -21,6 +23,10 @@ mod nodes_up; mod password; mod password_delete; mod password_set; +mod print_env; +mod program; +mod purge_all; +mod rev; mod start; mod wallet; mod wallet_set; diff --git a/packages/ciphernode/enclave/src/net.rs b/crates/cli/src/net.rs similarity index 98% rename from packages/ciphernode/enclave/src/net.rs rename to crates/cli/src/net.rs index 7b5a26113d..1dc340776f 100644 --- a/packages/ciphernode/enclave/src/net.rs +++ b/crates/cli/src/net.rs @@ -1,6 +1,6 @@ use anyhow::*; use clap::Subcommand; -use config::AppConfig; +use e3_config::AppConfig; use crate::{net_generate, net_purge, net_set}; diff --git a/packages/ciphernode/enclave/src/net_generate.rs b/crates/cli/src/net_generate.rs similarity index 85% rename from packages/ciphernode/enclave/src/net_generate.rs rename to crates/cli/src/net_generate.rs index 2702b20699..33791ab48d 100644 --- a/packages/ciphernode/enclave/src/net_generate.rs +++ b/crates/cli/src/net_generate.rs @@ -1,6 +1,6 @@ use anyhow::Result; -use config::AppConfig; -use enclave_core::net; +use e3_config::AppConfig; +use e3_entrypoint::net; pub async fn execute(config: &AppConfig) -> Result<()> { let peer_id = net::keypair::generate::execute(config).await?; diff --git a/packages/ciphernode/enclave/src/net_purge.rs b/crates/cli/src/net_purge.rs similarity index 81% rename from packages/ciphernode/enclave/src/net_purge.rs rename to crates/cli/src/net_purge.rs index 359530065d..867e884dc0 100644 --- a/packages/ciphernode/enclave/src/net_purge.rs +++ b/crates/cli/src/net_purge.rs @@ -1,6 +1,6 @@ use anyhow::*; -use config::AppConfig; -use enclave_core::net; +use e3_config::AppConfig; +use e3_entrypoint::net; pub async fn execute(config: &AppConfig) -> Result<()> { net::peer_id::purge::execute(config).await?; diff --git a/packages/ciphernode/enclave/src/net_set.rs b/crates/cli/src/net_set.rs similarity index 86% rename from packages/ciphernode/enclave/src/net_set.rs rename to crates/cli/src/net_set.rs index e92b6540e5..7a80f1eeb5 100644 --- a/packages/ciphernode/enclave/src/net_set.rs +++ b/crates/cli/src/net_set.rs @@ -1,7 +1,7 @@ use anyhow::Result; -use config::AppConfig; use dialoguer::{theme::ColorfulTheme, Password}; -use enclave_core::net::{self, keypair::set::validate_keypair_input}; +use e3_config::AppConfig; +use e3_entrypoint::net::{self, keypair::set::validate_keypair_input}; pub async fn execute(config: &AppConfig, net_keypair: Option) -> Result<()> { let input = if let Some(nkp) = net_keypair { diff --git a/packages/ciphernode/enclave/src/nodes.rs b/crates/cli/src/nodes.rs similarity index 83% rename from packages/ciphernode/enclave/src/nodes.rs rename to crates/cli/src/nodes.rs index 0806a94451..1f4e588604 100644 --- a/packages/ciphernode/enclave/src/nodes.rs +++ b/crates/cli/src/nodes.rs @@ -1,10 +1,10 @@ use anyhow::*; use clap::Subcommand; -use config::AppConfig; +use e3_config::AppConfig; use crate::{ - nodes_daemon, nodes_down, nodes_ps, nodes_restart, nodes_start, nodes_status, nodes_stop, - nodes_up, + nodes_daemon, nodes_down, nodes_ps, nodes_purge, nodes_restart, nodes_start, nodes_status, + nodes_stop, nodes_up, }; #[derive(Subcommand, Debug)] @@ -32,6 +32,10 @@ pub enum NodeCommands { /// List all process statuses Ps, + /// Purge all local ciphernode data. This will delete all passwords and prior ciphernode + /// events. + Purge, + /// Start an individual node in the nodes set Start { /// The id of the node @@ -66,20 +70,22 @@ pub async fn execute( config: &AppConfig, verbose: u8, config_string: Option, + otel: Option, ) -> Result<()> { match command { NodeCommands::Up { detach, exclude } => { - nodes_up::execute(config, detach, exclude, verbose, config_string).await? + nodes_up::execute(config, detach, exclude, verbose, config_string, otel).await? } NodeCommands::Down => nodes_down::execute().await?, NodeCommands::Ps => nodes_ps::execute().await?, NodeCommands::Daemon { exclude } => { - nodes_daemon::execute(config, exclude, verbose, config_string).await? + nodes_daemon::execute(config, exclude, verbose, config_string, otel).await? } NodeCommands::Start { id } => nodes_start::execute(&id).await?, NodeCommands::Status { id } => nodes_status::execute(&id).await?, NodeCommands::Stop { id } => nodes_stop::execute(&id).await?, NodeCommands::Restart { id } => nodes_restart::execute(&id).await?, + NodeCommands::Purge => nodes_purge::execute().await?, }; Ok(()) diff --git a/packages/ciphernode/enclave/src/nodes_daemon.rs b/crates/cli/src/nodes_daemon.rs similarity index 50% rename from packages/ciphernode/enclave/src/nodes_daemon.rs rename to crates/cli/src/nodes_daemon.rs index bc7412fb4e..b39d718b01 100644 --- a/packages/ciphernode/enclave/src/nodes_daemon.rs +++ b/crates/cli/src/nodes_daemon.rs @@ -1,12 +1,13 @@ use anyhow::*; -use config::AppConfig; -use enclave_core::nodes::daemon; +use e3_config::AppConfig; +use e3_entrypoint::nodes::daemon; pub async fn execute( config: &AppConfig, exclude: Vec, verbose: u8, config_string: Option, + otel: Option, ) -> Result<()> { - daemon::execute(config, exclude, verbose, config_string).await + daemon::execute(config, exclude, verbose, config_string, otel).await } diff --git a/packages/ciphernode/enclave/src/nodes_down.rs b/crates/cli/src/nodes_down.rs similarity index 75% rename from packages/ciphernode/enclave/src/nodes_down.rs rename to crates/cli/src/nodes_down.rs index bdc8a8d61b..a320283538 100644 --- a/packages/ciphernode/enclave/src/nodes_down.rs +++ b/crates/cli/src/nodes_down.rs @@ -1,5 +1,5 @@ use anyhow::*; -use enclave_core::nodes::down; +use e3_entrypoint::nodes::down; pub async fn execute() -> Result<()> { down::execute().await?; diff --git a/packages/ciphernode/enclave/src/nodes_ps.rs b/crates/cli/src/nodes_ps.rs similarity index 75% rename from packages/ciphernode/enclave/src/nodes_ps.rs rename to crates/cli/src/nodes_ps.rs index c75faeee64..58c09c3ae2 100644 --- a/packages/ciphernode/enclave/src/nodes_ps.rs +++ b/crates/cli/src/nodes_ps.rs @@ -1,5 +1,5 @@ use anyhow::*; -use enclave_core::nodes::ps; +use e3_entrypoint::nodes::ps; pub async fn execute() -> Result<()> { ps::execute().await?; diff --git a/crates/cli/src/nodes_purge.rs b/crates/cli/src/nodes_purge.rs new file mode 100644 index 0000000000..538b3c3661 --- /dev/null +++ b/crates/cli/src/nodes_purge.rs @@ -0,0 +1,7 @@ +use anyhow::*; + +/// Purge all ciphernode data +pub async fn execute() -> Result<()> { + e3_entrypoint::nodes::purge::execute().await?; + Ok(()) +} diff --git a/packages/ciphernode/enclave/src/nodes_restart.rs b/crates/cli/src/nodes_restart.rs similarity index 75% rename from packages/ciphernode/enclave/src/nodes_restart.rs rename to crates/cli/src/nodes_restart.rs index 15f15b59ad..39dd991705 100644 --- a/packages/ciphernode/enclave/src/nodes_restart.rs +++ b/crates/cli/src/nodes_restart.rs @@ -1,5 +1,5 @@ use anyhow::*; -use enclave_core::nodes::restart; +use e3_entrypoint::nodes::restart; pub async fn execute(id: &str) -> Result<()> { restart::execute(id).await?; diff --git a/packages/ciphernode/enclave/src/nodes_start.rs b/crates/cli/src/nodes_start.rs similarity index 76% rename from packages/ciphernode/enclave/src/nodes_start.rs rename to crates/cli/src/nodes_start.rs index 9ab408d66f..b4c4799d48 100644 --- a/packages/ciphernode/enclave/src/nodes_start.rs +++ b/crates/cli/src/nodes_start.rs @@ -1,5 +1,5 @@ use anyhow::*; -use enclave_core::nodes::start; +use e3_entrypoint::nodes::start; pub async fn execute(id: &str) -> Result<()> { start::execute(id).await?; diff --git a/packages/ciphernode/enclave/src/nodes_status.rs b/crates/cli/src/nodes_status.rs similarity index 76% rename from packages/ciphernode/enclave/src/nodes_status.rs rename to crates/cli/src/nodes_status.rs index 391c80b406..ea764be6f8 100644 --- a/packages/ciphernode/enclave/src/nodes_status.rs +++ b/crates/cli/src/nodes_status.rs @@ -1,5 +1,5 @@ use anyhow::*; -use enclave_core::nodes::status; +use e3_entrypoint::nodes::status; pub async fn execute(id: &str) -> Result<()> { status::execute(id).await?; diff --git a/packages/ciphernode/enclave/src/nodes_stop.rs b/crates/cli/src/nodes_stop.rs similarity index 76% rename from packages/ciphernode/enclave/src/nodes_stop.rs rename to crates/cli/src/nodes_stop.rs index ff44785ca8..e82dc97176 100644 --- a/packages/ciphernode/enclave/src/nodes_stop.rs +++ b/crates/cli/src/nodes_stop.rs @@ -1,5 +1,5 @@ use anyhow::*; -use enclave_core::nodes::stop; +use e3_entrypoint::nodes::stop; pub async fn execute(id: &str) -> Result<()> { stop::execute(id).await?; diff --git a/packages/ciphernode/enclave/src/nodes_up.rs b/crates/cli/src/nodes_up.rs similarity index 52% rename from packages/ciphernode/enclave/src/nodes_up.rs rename to crates/cli/src/nodes_up.rs index 62a4ec0552..1de56bc5d8 100644 --- a/packages/ciphernode/enclave/src/nodes_up.rs +++ b/crates/cli/src/nodes_up.rs @@ -1,6 +1,6 @@ use anyhow::*; -use config::AppConfig; -use enclave_core::nodes::up; +use e3_config::AppConfig; +use e3_entrypoint::nodes::up; pub async fn execute( config: &AppConfig, @@ -8,6 +8,7 @@ pub async fn execute( exclude: Vec, verbose: u8, config_string: Option, + otel: Option, ) -> Result<()> { - up::execute(config, detach, exclude, verbose, config_string).await + up::execute(config, detach, exclude, verbose, config_string, otel).await } diff --git a/packages/ciphernode/enclave/src/password.rs b/crates/cli/src/password.rs similarity index 96% rename from packages/ciphernode/enclave/src/password.rs rename to crates/cli/src/password.rs index f97991b751..b8da6d0a16 100644 --- a/packages/ciphernode/enclave/src/password.rs +++ b/crates/cli/src/password.rs @@ -1,6 +1,6 @@ use anyhow::*; use clap::Subcommand; -use config::AppConfig; +use e3_config::AppConfig; use crate::{password_delete, password_set}; diff --git a/packages/ciphernode/enclave/src/password_delete.rs b/crates/cli/src/password_delete.rs similarity index 84% rename from packages/ciphernode/enclave/src/password_delete.rs rename to crates/cli/src/password_delete.rs index fee6124439..86fac12ab4 100644 --- a/packages/ciphernode/enclave/src/password_delete.rs +++ b/crates/cli/src/password_delete.rs @@ -1,7 +1,7 @@ use crate::helpers::prompt_password::prompt_password; use anyhow::Result; -use config::AppConfig; use dialoguer::{theme::ColorfulTheme, Confirm}; +use e3_config::AppConfig; use zeroize::Zeroize; pub async fn prompt_delete(config: &AppConfig) -> Result { @@ -13,7 +13,7 @@ pub async fn prompt_delete(config: &AppConfig) -> Result { return Ok(false); } - let Ok(mut cur_pw) = enclave_core::password::delete::get_current_password(config).await else { + let Ok(mut cur_pw) = e3_entrypoint::password::delete::get_current_password(config).await else { println!("Password is not set. Nothing to do."); return Ok(false); }; @@ -31,7 +31,7 @@ pub async fn prompt_delete(config: &AppConfig) -> Result { pub async fn execute(config: &AppConfig) -> Result<()> { if prompt_delete(config).await? { - enclave_core::password::delete::execute(config).await?; + e3_entrypoint::password::delete::execute(config).await?; println!("Password successfully deleted."); } else { println!("Operation cancelled."); diff --git a/packages/ciphernode/enclave/src/password_set.rs b/crates/cli/src/password_set.rs similarity index 90% rename from packages/ciphernode/enclave/src/password_set.rs rename to crates/cli/src/password_set.rs index f0185b9f80..e6e8216e81 100644 --- a/packages/ciphernode/enclave/src/password_set.rs +++ b/crates/cli/src/password_set.rs @@ -1,5 +1,5 @@ use anyhow::{bail, Result}; -use config::AppConfig; +use e3_config::AppConfig; use zeroize::{Zeroize, Zeroizing}; use crate::helpers::prompt_password::prompt_password; @@ -42,11 +42,11 @@ fn get_zeroizing_pw_vec(input: Option) -> Result>> { pub async fn execute(config: &AppConfig, input: Option) -> Result<()> { println!("Setting password..."); - enclave_core::password::set::preflight(config).await?; + e3_entrypoint::password::set::preflight(config).await?; let pw = get_zeroizing_pw_vec(input)?; - enclave_core::password::set::execute(config, pw).await?; + e3_entrypoint::password::set::execute(config, pw).await?; println!("Password successfully set."); diff --git a/crates/cli/src/print_env.rs b/crates/cli/src/print_env.rs new file mode 100644 index 0000000000..432f15bbf3 --- /dev/null +++ b/crates/cli/src/print_env.rs @@ -0,0 +1,53 @@ +use anyhow::Result; +use e3_config::AppConfig; + +pub fn extract_env_vars_vite(config: &AppConfig, chain: &str) -> String { + let mut env_vars = Vec::new(); + + // Extract from first enabled chain (or first chain if none specified) + if let Some(chain) = config.chains().iter().find(|c| c.name == chain.to_string()) { + let enclave_addr = &chain.contracts.enclave; + let registry_addr = &chain.contracts.ciphernode_registry; + let filter_addr = &chain.contracts.filter_registry; + env_vars.push(format!("VITE_ENCLAVE_ADDRESS={}", enclave_addr.address())); + env_vars.push(format!("VITE_REGISTRY_ADDRESS={}", registry_addr.address())); + env_vars.push(format!("VITE_RPC_URL={}", chain.rpc_url)); + env_vars.push(format!( + "VITE_FILTER_REGISTRY_ADDRESS={}", + filter_addr.address() + )); + if let Some(e3_program) = &chain.contracts.e3_program { + env_vars.push(format!("VITE_E3_PROGRAM_ADDRESS={}", e3_program.address())); + } + } + + env_vars.join(" ") +} + +pub fn extract_env_vars(config: &AppConfig, chain: &str) -> String { + let mut env_vars = Vec::new(); + + // Extract from first enabled chain (or first chain if none specified) + if let Some(chain) = config.chains().iter().find(|c| c.name == chain.to_string()) { + let enclave_addr = &chain.contracts.enclave; + let registry_addr = &chain.contracts.ciphernode_registry; + let filter_addr = &chain.contracts.filter_registry; + env_vars.push(format!("ENCLAVE_ADDRESS={}", enclave_addr.address())); + env_vars.push(format!("RPC_URL={}", chain.rpc_url)); + env_vars.push(format!("REGISTRY_ADDRESS={}", registry_addr.address())); + env_vars.push(format!("FILTER_REGISTRY_ADDRESS={}", filter_addr.address())); + if let Some(e3_program) = &chain.contracts.e3_program { + env_vars.push(format!("E3_PROGRAM_ADDRESS={}", e3_program.address())); + } + } + + env_vars.join(" ") +} +pub async fn execute(config: &AppConfig, chain: &str, as_vite: bool) -> Result<()> { + if as_vite { + println!("{}", extract_env_vars_vite(config, chain)); + } else { + println!("{}", extract_env_vars(config, chain)); + } + Ok(()) +} diff --git a/crates/cli/src/program.rs b/crates/cli/src/program.rs new file mode 100644 index 0000000000..1c0f4d1611 --- /dev/null +++ b/crates/cli/src/program.rs @@ -0,0 +1,53 @@ +use anyhow::Result; +use clap::Subcommand; +use e3_config::AppConfig; + +#[derive(Subcommand, Debug)] +pub enum ProgramCommands { + /// Start the program + Start { + /// Run the program in Dev Mode. Dev Mode is when the program will run without any proving + /// backend at all. Your program will simply execute without being verified. + #[arg(long)] + dev: Option, + }, + + /// Compile the program code + Compile { + /// Compile the program in Dev Mode. + #[arg(long)] + dev: Option, + }, + + /// Get a shell into the docker environment that the program runs in + Shell, + + /// Commands to manage the program compilation cache + Cache { + #[command(subcommand)] + command: ProgramCacheCommands, + }, +} + +#[derive(Subcommand, Debug)] +pub enum ProgramCacheCommands { + /// Purge program compilation caches. Will make program compilation take longer. + Purge, +} + +pub async fn execute(command: ProgramCommands, config: &AppConfig) -> Result<()> { + match command { + ProgramCommands::Start { dev } => { + e3_support_scripts::program_start(config.program().clone(), dev).await? + } + ProgramCommands::Compile { dev } => { + e3_support_scripts::program_compile(config.program().clone(), dev).await? + } + ProgramCommands::Shell => e3_support_scripts::program_shell().await?, + ProgramCommands::Cache { command } => match command { + ProgramCacheCommands::Purge => e3_support_scripts::program_cache_purge().await?, + }, + }; + + Ok(()) +} diff --git a/crates/cli/src/purge_all.rs b/crates/cli/src/purge_all.rs new file mode 100644 index 0000000000..12b131a359 --- /dev/null +++ b/crates/cli/src/purge_all.rs @@ -0,0 +1,8 @@ +use anyhow::Result; + +/// Purge all local data anc cache +pub async fn execute() -> Result<()> { + e3_entrypoint::nodes::purge::execute().await?; + e3_support_scripts::program_cache_purge().await?; + Ok(()) +} diff --git a/crates/cli/src/rev.rs b/crates/cli/src/rev.rs new file mode 100644 index 0000000000..55a88900d3 --- /dev/null +++ b/crates/cli/src/rev.rs @@ -0,0 +1,6 @@ +pub const GIT_SHA: &str = env!("GIT_SHA"); + +pub async fn execute() -> anyhow::Result<()> { + println!("{}", GIT_SHA); + Ok(()) +} diff --git a/packages/ciphernode/enclave/src/start.rs b/crates/cli/src/start.rs similarity index 80% rename from packages/ciphernode/enclave/src/start.rs rename to crates/cli/src/start.rs index f0847529c2..192ec80249 100644 --- a/packages/ciphernode/enclave/src/start.rs +++ b/crates/cli/src/start.rs @@ -1,7 +1,7 @@ use crate::owo; use anyhow::{anyhow, Result}; -use config::{AppConfig, NodeRole}; -use enclave_core::helpers::listen_for_shutdown; +use e3_config::{AppConfig, NodeRole}; +use e3_entrypoint::helpers::listen_for_shutdown; use tracing::{info, instrument}; #[instrument(skip_all)] @@ -21,7 +21,7 @@ pub async fn execute(mut config: AppConfig, peers: Vec) -> Result<()> { pubkey_write_path, plaintext_write_path, } => { - enclave_core::start::aggregator_start::execute( + e3_entrypoint::start::aggregator_start::execute( &config, pubkey_write_path, plaintext_write_path, @@ -30,7 +30,7 @@ pub async fn execute(mut config: AppConfig, peers: Vec) -> Result<()> { } // Launch in ciphernode configuration - NodeRole::Ciphernode => enclave_core::start::start::execute(&config, address).await?, + NodeRole::Ciphernode => e3_entrypoint::start::start::execute(&config, address).await?, }; info!( diff --git a/packages/ciphernode/enclave/src/wallet.rs b/crates/cli/src/wallet.rs similarity index 96% rename from packages/ciphernode/enclave/src/wallet.rs rename to crates/cli/src/wallet.rs index 3ad3ac226d..af703a5597 100644 --- a/packages/ciphernode/enclave/src/wallet.rs +++ b/crates/cli/src/wallet.rs @@ -1,6 +1,6 @@ use anyhow::*; use clap::Subcommand; -use config::AppConfig; +use e3_config::AppConfig; use crate::wallet_set; diff --git a/packages/ciphernode/enclave/src/wallet_set.rs b/crates/cli/src/wallet_set.rs similarity index 81% rename from packages/ciphernode/enclave/src/wallet_set.rs rename to crates/cli/src/wallet_set.rs index f51d012288..aa4e96c2e8 100644 --- a/packages/ciphernode/enclave/src/wallet_set.rs +++ b/crates/cli/src/wallet_set.rs @@ -1,7 +1,7 @@ use anyhow::Result; -use config::AppConfig; use dialoguer::{theme::ColorfulTheme, Password}; -use enclave_core::wallet::set::validate_private_key; +use e3_config::AppConfig; +use e3_entrypoint::wallet::set::validate_private_key; pub async fn execute(config: &AppConfig, private_key: Option) -> Result<()> { let input = if let Some(private_key) = private_key { @@ -16,7 +16,7 @@ pub async fn execute(config: &AppConfig, private_key: Option) -> Result< .to_string() }; - enclave_core::wallet::set::execute(config, input).await?; + e3_entrypoint::wallet::set::execute(config, input).await?; println!("WalletKey key has been successfully stored and encrypted."); diff --git a/packages/compute_provider/.gitignore b/crates/compute-provider/.gitignore similarity index 100% rename from packages/compute_provider/.gitignore rename to crates/compute-provider/.gitignore diff --git a/crates/compute-provider/Cargo.toml b/crates/compute-provider/Cargo.toml new file mode 100644 index 0000000000..63365f6791 --- /dev/null +++ b/crates/compute-provider/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "e3-compute-provider" +version = "0.1.0" +edition.workspace = true +license.workspace = true +description = "E3 - Enclave Copmute Provider" +repository = "https://github.com/gnosisguild/enclave/crates/compute-provider" + +[dependencies] +serde = { workspace = true, features = ["derive", "std"] } +lean-imt = "0.1.2" +sha3 = "0.10.8" +num-bigint = "0.4.6" +num-traits = "0.2" +hex = "0.4.3" +light-poseidon = "0.2.0" +ark-ff = "0.4.2" +ark-bn254 = "0.4.0" +rayon = "1.10.0" diff --git a/packages/compute_provider/Readme.md b/crates/compute-provider/Readme.md similarity index 89% rename from packages/compute_provider/Readme.md rename to crates/compute-provider/Readme.md index c8c6050810..3cd615cd62 100644 --- a/packages/compute_provider/Readme.md +++ b/crates/compute-provider/Readme.md @@ -15,7 +15,7 @@ To use this library, add it to your `Cargo.toml`: ```toml [dependencies] -compute-provider = { git = "https://github.com/gnosisguild/enclave.git", path = "packages/compute_provider"} +e3-compute-provider = { git = "https://github.com/gnosisguild/enclave.git", path = "crates/compute-provider"} ``` ## Usage @@ -28,7 +28,7 @@ To use the library, follow these steps: ```rust use anyhow::Result; -use compute_provider::{ComputeInput, ComputeManager, ComputeProvider, ComputeResult, FHEInputs}; +use e3_compute_provider::{ComputeInput, ComputeManager, ComputeProvider, ComputeResult, FHEInputs}; use voting_core::fhe_processor; // Define your Risc0Provider struct and implement the ComputeProvider trait @@ -40,13 +40,12 @@ pub fn run_compute(params: FHEInputs) -> Result<(Risc0Output, Vec)> { } ``` - ## Risc0 Example Here's a more detailed example of how to use the Compute Manager with Risc0: ```rust -use compute_provider::{ComputeInput, ComputeManager, ComputeProvider, ComputeResult, FHEInputs}; +use e3_compute_provider::{ComputeInput, ComputeManager, ComputeProvider, ComputeResult, FHEInputs}; use methods::VOTING_ELF; use risc0_ethereum_contracts::groth16; use risc0_zkvm::{default_prover, ExecutorEnv, ProverOpts, VerifierContext}; @@ -73,7 +72,6 @@ pub fn run_compute(params: FHEInputs) -> Result<(Risc0Output, Vec)> { } ``` - This example demonstrates how to create a Risc0Provider, use it with the ComputeManager, and measure the execution time of the computation. ## Configuration @@ -84,4 +82,4 @@ The `ComputeManager::new()` function takes several parameters: - `fhe_inputs`: The FHE inputs for the computation - `fhe_processor`: A function to process the FHE inputs - `use_parallel`: A boolean indicating whether to use parallel processing -- `batch_size`: An optional batch size for parallel processing, must be a power of 2 \ No newline at end of file +- `batch_size`: An optional batch size for parallel processing, must be a power of 2 diff --git a/packages/compute_provider/src/ciphertext_output.rs b/crates/compute-provider/src/ciphertext_output.rs similarity index 100% rename from packages/compute_provider/src/ciphertext_output.rs rename to crates/compute-provider/src/ciphertext_output.rs diff --git a/packages/compute_provider/src/compute_input.rs b/crates/compute-provider/src/compute_input.rs similarity index 100% rename from packages/compute_provider/src/compute_input.rs rename to crates/compute-provider/src/compute_input.rs diff --git a/packages/compute_provider/src/compute_manager.rs b/crates/compute-provider/src/compute_manager.rs similarity index 100% rename from packages/compute_provider/src/compute_manager.rs rename to crates/compute-provider/src/compute_manager.rs diff --git a/packages/compute_provider/src/lib.rs b/crates/compute-provider/src/lib.rs similarity index 100% rename from packages/compute_provider/src/lib.rs rename to crates/compute-provider/src/lib.rs diff --git a/packages/compute_provider/src/merkle_tree.rs b/crates/compute-provider/src/merkle_tree.rs similarity index 100% rename from packages/compute_provider/src/merkle_tree.rs rename to crates/compute-provider/src/merkle_tree.rs diff --git a/packages/ciphernode/config/Cargo.toml b/crates/config/Cargo.toml similarity index 63% rename from packages/ciphernode/config/Cargo.toml rename to crates/config/Cargo.toml index 417275eed9..ba704bfc64 100644 --- a/packages/ciphernode/config/Cargo.toml +++ b/crates/config/Cargo.toml @@ -1,13 +1,16 @@ [package] -name = "config" -version.workspace = true +name = "e3-config" +version = "0.1.0" edition.workspace = true +license.workspace = true +description = "E3 - Enclave Ciphernode Configuration" +repository = "https://github.com/gnosisguild/enclave/crates/config" [dependencies] -alloy = { workspace = true } +alloy-primitives = { workspace = true } anyhow = { workspace = true } dirs = { workspace = true } -events = { workspace = true } +e3-events = { workspace = true } figment = { workspace = true } path-clean = { workspace = true } petname = { workspace = true } diff --git a/packages/ciphernode/config/src/app_config.rs b/crates/config/src/app_config.rs similarity index 93% rename from packages/ciphernode/config/src/app_config.rs rename to crates/config/src/app_config.rs index 60c5e93c80..3b84811b29 100644 --- a/packages/ciphernode/config/src/app_config.rs +++ b/crates/config/src/app_config.rs @@ -4,7 +4,7 @@ use crate::load_config::resolve_config_path; use crate::paths_engine::PathsEngine; use crate::paths_engine::DEFAULT_CONFIG_NAME; use crate::yaml::load_yaml_with_env; -use alloy::primitives::Address; +use alloy_primitives::Address; use anyhow::bail; use anyhow::Context; use anyhow::Result; @@ -84,6 +84,46 @@ impl Default for NodeDefinition { } } +#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)] +pub struct Risc0Config { + #[serde(default)] + pub bonsai_api_key: Option, + #[serde(default)] + pub bonsai_api_url: Option, + #[serde(default)] + pub risc0_dev_mode: u8, +} + +impl Default for Risc0Config { + fn default() -> Self { + Risc0Config { + bonsai_api_key: None, + bonsai_api_url: None, + risc0_dev_mode: 0, + } + } +} + +/// Configuration for the program runner +#[derive(Clone, Debug, Default, Deserialize, Serialize)] +pub struct ProgramConfig { + risc0: Option, + dev: Option, +} + +impl ProgramConfig { + pub fn risc0(&self) -> Option<&Risc0Config> { + self.risc0.as_ref() + } + + pub fn dev(&self) -> bool { + if let Some(dev) = self.dev { + return dev; + } + false + } +} + /// The config actually used throughout the app #[derive(Debug, Deserialize, Serialize)] pub struct AppConfig { @@ -105,6 +145,8 @@ pub struct AppConfig { autopassword: bool, /// If a wallet has not been set autogenerate one on start autowallet: bool, + /// Program config + program: ProgramConfig, } impl AppConfig { @@ -160,6 +202,7 @@ impl AppConfig { autopassword: node.autopassword, autowallet: node.autowallet, autonetkey: node.autonetkey, + program: config.program.unwrap_or_default(), }) } @@ -206,12 +249,6 @@ impl AppConfig { self.node_def().quic_port } - /// Depricated - #[deprecated] - pub fn enable_mdns(&self) -> bool { - false - } - /// Get the config file path pub fn config_file(&self) -> PathBuf { self.paths.config_file() @@ -275,6 +312,10 @@ impl AppConfig { pub fn autopassword(&self) -> bool { self.autopassword } + + pub fn program(&self) -> &ProgramConfig { + &self.program + } } #[derive(Debug, Deserialize, Serialize)] @@ -296,6 +337,8 @@ pub struct UnscopedAppConfig { nodes: HashMap, /// Set the Open Telemetry collector grpc endpoint. Eg. 127.0.0.1:4317 otel: Option, + /// Program config + program: Option, } impl Default for UnscopedAppConfig { @@ -308,6 +351,7 @@ impl Default for UnscopedAppConfig { found_config_file: None, otel: None, nodes: HashMap::new(), + program: None, } } } @@ -410,8 +454,6 @@ pub fn combine_unique(a: &[T], b: &[T]) - #[cfg(test)] mod tests { - use std::io; - use super::*; use crate::rpc::RpcAuth; use figment::Jail; @@ -441,6 +483,12 @@ node: db_file: "./foo" quic_port: 1234 +program: + risc0: + bonsai_api_key: "12345678" + bonsai_api_url: "http://my.api.com" + risc0_dev_mode: 0 + nodes: ag: quic_port: 1235 @@ -473,6 +521,14 @@ nodes: PathBuf::from("/myconfig/override/_default/key") ); assert_eq!(config.quic_port(), 1234); + assert_eq!( + config.program().risc0(), + Some(&Risc0Config { + bonsai_api_key: Some("12345678".to_string()), + bonsai_api_url: Some("http://my.api.com".to_string()), + risc0_dev_mode: 0, + }) + ); assert!(config.peers().is_empty()); }; { diff --git a/packages/ciphernode/config/src/chain_config.rs b/crates/config/src/chain_config.rs similarity index 100% rename from packages/ciphernode/config/src/chain_config.rs rename to crates/config/src/chain_config.rs diff --git a/packages/ciphernode/config/src/contract.rs b/crates/config/src/contract.rs similarity index 95% rename from packages/ciphernode/config/src/contract.rs rename to crates/config/src/contract.rs index b2f83529f6..a7bf2a25ce 100644 --- a/packages/ciphernode/config/src/contract.rs +++ b/crates/config/src/contract.rs @@ -33,4 +33,5 @@ pub struct ContractAddresses { pub enclave: Contract, pub ciphernode_registry: Contract, pub filter_registry: Contract, + pub e3_program: Option, } diff --git a/packages/ciphernode/config/src/lib.rs b/crates/config/src/lib.rs similarity index 100% rename from packages/ciphernode/config/src/lib.rs rename to crates/config/src/lib.rs diff --git a/packages/ciphernode/config/src/load_config.rs b/crates/config/src/load_config.rs similarity index 98% rename from packages/ciphernode/config/src/load_config.rs rename to crates/config/src/load_config.rs index 0ae45b7ec7..b4450d1ed6 100644 --- a/packages/ciphernode/config/src/load_config.rs +++ b/crates/config/src/load_config.rs @@ -1,4 +1,4 @@ -use std::path::{Path, PathBuf}; +use std::path::PathBuf; use path_clean::clean; diff --git a/packages/ciphernode/config/src/paths_engine.rs b/crates/config/src/paths_engine.rs similarity index 99% rename from packages/ciphernode/config/src/paths_engine.rs rename to crates/config/src/paths_engine.rs index 98857ee669..4d37a4b344 100644 --- a/packages/ciphernode/config/src/paths_engine.rs +++ b/crates/config/src/paths_engine.rs @@ -1,6 +1,6 @@ use path_clean::clean; use serde::{Deserialize, Serialize}; -use std::path::{Path, PathBuf}; +use std::path::PathBuf; #[derive(Debug, Deserialize, Serialize)] pub struct PathsEngine { diff --git a/packages/ciphernode/config/src/rpc.rs b/crates/config/src/rpc.rs similarity index 100% rename from packages/ciphernode/config/src/rpc.rs rename to crates/config/src/rpc.rs diff --git a/packages/ciphernode/config/src/store_keys.rs b/crates/config/src/store_keys.rs similarity index 98% rename from packages/ciphernode/config/src/store_keys.rs rename to crates/config/src/store_keys.rs index 812d0bdcfb..0df9942199 100644 --- a/packages/ciphernode/config/src/store_keys.rs +++ b/crates/config/src/store_keys.rs @@ -1,4 +1,4 @@ -use events::E3id; +use e3_events::E3id; pub struct StoreKeys; diff --git a/packages/ciphernode/config/src/validation.rs b/crates/config/src/validation.rs similarity index 100% rename from packages/ciphernode/config/src/validation.rs rename to crates/config/src/validation.rs diff --git a/packages/ciphernode/config/src/yaml.rs b/crates/config/src/yaml.rs similarity index 100% rename from packages/ciphernode/config/src/yaml.rs rename to crates/config/src/yaml.rs diff --git a/crates/crypto/Cargo.toml b/crates/crypto/Cargo.toml new file mode 100644 index 0000000000..d663b13195 --- /dev/null +++ b/crates/crypto/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "e3-crypto" +version = "0.1.0" +edition.workspace = true +license.workspace = true +description = "E3 - Enclave Ciphernode Cryptography Library" +repository = "https://github.com/gnosisguild/enclave/crates/cryptography" + +[dependencies] +aes-gcm = { workspace = true } +argon2 = { workspace = true } +rand = { workspace = true } +zeroize = { workspace = true } +anyhow = { workspace = true } +tokio = { workspace = true } +e3-config = { workspace = true } +async-trait = { workspace = true } diff --git a/packages/ciphernode/crypto/src/cipher.rs b/crates/crypto/src/cipher.rs similarity index 99% rename from packages/ciphernode/crypto/src/cipher.rs rename to crates/crypto/src/cipher.rs index ded90491e4..fad92c8fa7 100644 --- a/packages/ciphernode/crypto/src/cipher.rs +++ b/crates/crypto/src/cipher.rs @@ -6,7 +6,7 @@ use aes_gcm::{ }; use anyhow::{anyhow, Result}; use argon2::{Algorithm, Argon2, Params, Version}; -use config::AppConfig; +use e3_config::AppConfig; use rand::{rngs::OsRng, RngCore}; use zeroize::{Zeroize, Zeroizing}; diff --git a/packages/ciphernode/crypto/src/lib.rs b/crates/crypto/src/lib.rs similarity index 100% rename from packages/ciphernode/crypto/src/lib.rs rename to crates/crypto/src/lib.rs diff --git a/packages/ciphernode/crypto/src/password_manager.rs b/crates/crypto/src/password_manager.rs similarity index 100% rename from packages/ciphernode/crypto/src/password_manager.rs rename to crates/crypto/src/password_manager.rs diff --git a/packages/ciphernode/data/Cargo.toml b/crates/data/Cargo.toml similarity index 61% rename from packages/ciphernode/data/Cargo.toml rename to crates/data/Cargo.toml index 6e4197517c..766fd7eda6 100644 --- a/packages/ciphernode/data/Cargo.toml +++ b/crates/data/Cargo.toml @@ -1,13 +1,14 @@ [package] -name = "data" -version.workspace = true +name = "e3-data" +version = "0.1.0" edition.workspace = true -description = "Data persistence for enclave" -repository = "https://github.com/gnosisguild/enclave/packages/ciphernode" +license.workspace = true +description = "E3 - Ciphernode Data persistence" +repository = "https://github.com/gnosisguild/enclave/crates/data" [dependencies] actix = { workspace = true } -events = { workspace = true } +e3-events = { workspace = true } anyhow = { workspace = true } serde = { workspace = true } sled = { workspace = true } diff --git a/packages/ciphernode/data/README.md b/crates/data/README.md similarity index 89% rename from packages/ciphernode/data/README.md rename to crates/data/README.md index 490de7fa05..5894700a37 100644 --- a/packages/ciphernode/data/README.md +++ b/crates/data/README.md @@ -68,7 +68,6 @@ graph LR SledStore --> DB ``` - | Layer | Functionality | | ------------------- | ------------------------------------------------------------------------------------------------------------------------------- | | `Repository` | Strongly typed Data persistence for a single item. Configured to know how to save its data. | @@ -79,9 +78,9 @@ graph LR We had a way to save bytes data with the `DataStore` and had a way to specify where that could be saved but actors need to be restartable and be able to be hydrated and we needed a standard way to accomplish this. To do this in typical Rust fashion we created a set of traits: -- [`Snapshot`](https://github.com/gnosisguild/enclave/blob/main/packages/ciphernode/data/src/snapshot.rs) for defining how an object can create a snapshot of it's state -- [`Checkpoint`](https://github.com/gnosisguild/enclave/blob/main/packages/ciphernode/data/src/snapshot.rs) for defining how to save that snapshot to a repository -- [`FromSnapshot`](https://github.com/gnosisguild/enclave/blob/main/packages/ciphernode/data/src/snapshot.rs) and [`FromSnapshotWithParams`](https://github.com/gnosisguild/enclave/blob/main/packages/ciphernode/data/src/snapshot.rs) for defining how an object could be reconstituted from a snapshot +- [`Snapshot`](https://github.com/gnosisguild/enclave/blob/main/crates/data/src/snapshot.rs) for defining how an object can create a snapshot of it's state +- [`Checkpoint`](https://github.com/gnosisguild/enclave/blob/main/crates/data/src/snapshot.rs) for defining how to save that snapshot to a repository +- [`FromSnapshot`](https://github.com/gnosisguild/enclave/blob/main/crates/data/src/snapshot.rs) and [`FromSnapshotWithParams`](https://github.com/gnosisguild/enclave/blob/main/crates/data/src/snapshot.rs) for defining how an object could be reconstituted from a snapshot This worked well especially for objects who's persistable state needs to be derived from a subset of the saved state however there are a couple of problems: @@ -137,4 +136,4 @@ struct MyActor { } ``` -We have also extracted the key calculation mechanism to a [`StoreKeys`](https://github.com/gnosisguild/enclave/blob/main/packages/ciphernode/config/src/store_keys.rs) struct. This is used in various places when creating repsitory factories for example [here](https://github.com/gnosisguild/enclave/blob/main/packages/ciphernode/aggregator/src/repositories.rs) +We have also extracted the key calculation mechanism to a [`StoreKeys`](https://github.com/gnosisguild/enclave/blob/main/crates/config/src/store_keys.rs) struct. This is used in various places when creating repsitory factories for example [here](https://github.com/gnosisguild/enclave/blob/main/crates/aggregator/src/repositories.rs) diff --git a/packages/ciphernode/data/src/data_store.rs b/crates/data/src/data_store.rs similarity index 98% rename from packages/ciphernode/data/src/data_store.rs rename to crates/data/src/data_store.rs index 07a13c9102..5fb25c2fa9 100644 --- a/packages/ciphernode/data/src/data_store.rs +++ b/crates/data/src/data_store.rs @@ -140,8 +140,8 @@ impl DataStore { /// Changes the scope for the data store. /// Note that if the scope does not start with a slash one is appended. /// ``` - /// use data::DataStore; - /// use data::InMemStore; + /// use e3_data::DataStore; + /// use e3_data::InMemStore; /// use actix::Actor; /// use anyhow::Result; /// diff --git a/packages/ciphernode/data/src/in_mem.rs b/crates/data/src/in_mem.rs similarity index 100% rename from packages/ciphernode/data/src/in_mem.rs rename to crates/data/src/in_mem.rs diff --git a/packages/ciphernode/data/src/into_key.rs b/crates/data/src/into_key.rs similarity index 100% rename from packages/ciphernode/data/src/into_key.rs rename to crates/data/src/into_key.rs diff --git a/packages/ciphernode/data/src/lib.rs b/crates/data/src/lib.rs similarity index 100% rename from packages/ciphernode/data/src/lib.rs rename to crates/data/src/lib.rs diff --git a/packages/ciphernode/data/src/persistable.rs b/crates/data/src/persistable.rs similarity index 100% rename from packages/ciphernode/data/src/persistable.rs rename to crates/data/src/persistable.rs diff --git a/packages/ciphernode/data/src/repositories.rs b/crates/data/src/repositories.rs similarity index 100% rename from packages/ciphernode/data/src/repositories.rs rename to crates/data/src/repositories.rs diff --git a/packages/ciphernode/data/src/repository.rs b/crates/data/src/repository.rs similarity index 96% rename from packages/ciphernode/data/src/repository.rs rename to crates/data/src/repository.rs index 8910c73c16..9980b4a270 100644 --- a/packages/ciphernode/data/src/repository.rs +++ b/crates/data/src/repository.rs @@ -1,4 +1,4 @@ -use std::{marker::PhantomData, ops::Deref}; +use std::marker::PhantomData; use anyhow::Result; diff --git a/packages/ciphernode/data/src/sled_store.rs b/crates/data/src/sled_store.rs similarity index 99% rename from packages/ciphernode/data/src/sled_store.rs rename to crates/data/src/sled_store.rs index 4bf854efc5..0563656c1a 100644 --- a/packages/ciphernode/data/src/sled_store.rs +++ b/crates/data/src/sled_store.rs @@ -1,7 +1,7 @@ use crate::{Get, Insert, InsertSync, Remove}; use actix::{Actor, ActorContext, Addr, Handler}; use anyhow::{Context, Result}; -use events::{ +use e3_events::{ get_enclave_event_bus, BusError, EnclaveErrorType, EnclaveEvent, EventBus, Subscribe, }; use once_cell::sync::Lazy; diff --git a/packages/ciphernode/data/src/snapshot.rs b/crates/data/src/snapshot.rs similarity index 98% rename from packages/ciphernode/data/src/snapshot.rs rename to crates/data/src/snapshot.rs index 7608949169..6b0f24cca8 100644 --- a/packages/ciphernode/data/src/snapshot.rs +++ b/crates/data/src/snapshot.rs @@ -2,7 +2,7 @@ use crate::Repository; use anyhow::Result; use async_trait::async_trait; use serde::{de::DeserializeOwned, Serialize}; -use tracing::{error, info, trace}; +use tracing::trace; /// This trait enables the self type to report their state snapshot pub trait Snapshot diff --git a/packages/ciphernode/docs/user_guide.md b/crates/docs/user_guide.md similarity index 100% rename from packages/ciphernode/docs/user_guide.md rename to crates/docs/user_guide.md diff --git a/crates/enclaveup/Cargo.toml b/crates/enclaveup/Cargo.toml new file mode 100644 index 0000000000..a6c2aa675d --- /dev/null +++ b/crates/enclaveup/Cargo.toml @@ -0,0 +1,24 @@ +[package] +name = "enclaveup" +version = "0.1.0" +edition.workspace = true +license.workspace = true +description = "Installer for the Enclave CLI tool" +repository = "https://github.com/gnosisguild/enclave" + +[[bin]] +name = "enclaveup" +path = "src/main.rs" + +[dependencies] +clap = { workspace = true } +tokio = { workspace = true } +reqwest = { workspace = true } +serde = { workspace = true } +serde_json = { workspace = true } +anyhow = { workspace = true } +futures-util = { workspace = true } +indicatif = "0.17.11" +flate2 = "1.0" +tar = "0.4" +directories = "6.0.0" \ No newline at end of file diff --git a/crates/enclaveup/README.md b/crates/enclaveup/README.md new file mode 100644 index 0000000000..d0039411a4 --- /dev/null +++ b/crates/enclaveup/README.md @@ -0,0 +1,105 @@ +# enclaveup + +A standalone installer for the Enclave CLI tool. + +## Installation + +### Quick Install + +Use the provided install script to download and install `enclaveup`: + +```bash +curl -fsSL https://raw.githubusercontent.com/gnosisguild/enclave/main/install | bash +``` + +Or with wget: + +```bash +wget -qO- https://raw.githubusercontent.com/gnosisguild/enclave/main/install | bash +``` + +### Manual Installation + +1. Download the appropriate binary for your platform from the [releases page](https://github.com/gnosisguild/enclave/releases) +2. Extract the binary and place it in your PATH (e.g., `~/.local/bin` or `/usr/local/bin`) +3. Make sure the binary is executable: `chmod +x enclaveup` + +## Usage + +### Install the Enclave CLI + +```bash +# Install to ~/.local/bin (default) +enclaveup install + +# Install to /usr/local/bin (requires sudo) +enclaveup install --system +``` + +### Update the Enclave CLI + +```bash +# Update from ~/.local/bin +enclaveup update + +# Update from /usr/local/bin +enclaveup update --system +``` + +### Uninstall the Enclave CLI + +```bash +# Remove from ~/.local/bin +enclaveup uninstall + +# Remove from /usr/local/bin +enclaveup uninstall --system +``` + +### Get Help + +```bash +enclaveup --help +enclaveup install --help +``` + +## Building from Source + +To build `enclaveup` from source: + +```bash +cd enclaveup +cargo build --release +``` + +The binary will be available at `target/release/enclaveup`. + +## Platform Support + +| Platform | Architecture | Status | +|----------|-------------|---------| +| Linux | x86_64 | ✅ Native binary | +| macOS | Apple Silicon (M1/M2/M3) | ✅ Native binary | +| macOS | Intel | ✅ Via Rosetta 2* | + +\* Intel Macs automatically run Apple Silicon binaries through Rosetta 2 translation + +## Binary Naming Convention + +The installer expects GitHub releases to contain assets with this naming pattern: + +**For Enclave CLI:** +- `enclave-linux-x86_64.tar.gz` +- `enclave-macos-aarch64.tar.gz` + +**For enclaveup itself:** +- `enclaveup-linux-x86_64.tar.gz` +- `enclaveup-macos-aarch64.tar.gz` + +Each tarball contains the binary at the root level. + +## Dependencies + +- `curl` or `wget` (for the install script) +- `tar` (for extracting archives) +- Internet connection (for downloading releases) \ No newline at end of file diff --git a/crates/enclaveup/src/main.rs b/crates/enclaveup/src/main.rs new file mode 100644 index 0000000000..96392c03f7 --- /dev/null +++ b/crates/enclaveup/src/main.rs @@ -0,0 +1,371 @@ +use anyhow::{anyhow, Context, Result}; +use clap::{Parser, Subcommand}; +use directories::BaseDirs; +use flate2::read::GzDecoder; +use indicatif::{ProgressBar, ProgressStyle}; +use reqwest::Client; +use serde::Deserialize; +use std::fs; +use std::io; +use std::path::{Path, PathBuf}; +use std::process::Command; +use tar::Archive; + +const GITHUB_REPO: &str = "gnosisguild/enclave"; +const BINARY_NAME: &str = "enclave"; + +#[derive(Parser)] +#[command( + name = "enclaveup", + about = "Installer for the Enclave CLI tool", + version = "0.1.0" +)] +struct Cli { + #[command(subcommand)] + command: Commands, +} + +#[derive(Subcommand)] +enum Commands { + /// Install the latest version of enclave + Install { + /// Install to /usr/local/bin instead of ~/.local/bin + #[arg(long)] + system: bool, + }, + /// Update enclave to the latest version + Update { + /// Install to /usr/local/bin instead of ~/.local/bin + #[arg(long)] + system: bool, + }, + /// Remove the installed enclave binary + Uninstall { + /// Remove from /usr/local/bin instead of ~/.local/bin + #[arg(long)] + system: bool, + }, +} + +#[derive(Debug, Deserialize)] +struct GitHubRelease { + tag_name: String, + assets: Vec, +} + +#[derive(Debug, Deserialize)] +struct GitHubAsset { + name: String, + browser_download_url: String, +} + +#[derive(Debug)] +struct Platform { + os: String, + arch: String, +} + +impl Platform { + fn detect() -> Result { + let os = match std::env::consts::OS { + "linux" => "linux", + "macos" => "macos", + _ => { + return Err(anyhow!( + "Unsupported operating system: {}", + std::env::consts::OS + )) + } + }; + + let arch = match std::env::consts::ARCH { + "x86_64" => "x86_64", + "aarch64" => "aarch64", + _ => { + return Err(anyhow!( + "Unsupported architecture: {}", + std::env::consts::ARCH + )) + } + }; + + Ok(Platform { + os: os.to_string(), + arch: arch.to_string(), + }) + } + + fn asset_pattern(&self) -> String { + format!("{}-{}-{}", BINARY_NAME, self.os, self.arch) + } +} + +struct Installer { + client: Client, + platform: Platform, +} + +impl Installer { + fn new() -> Result { + let client = Client::builder() + .user_agent("enclaveup/0.1.0") + .build() + .context("Failed to create HTTP client")?; + + let platform = Platform::detect()?; + + Ok(Installer { client, platform }) + } + + async fn get_latest_release(&self) -> Result { + let url = format!( + "https://api.github.com/repos/{}/releases/latest", + GITHUB_REPO + ); + + let response = self + .client + .get(&url) + .send() + .await + .context("Failed to fetch latest release")?; + + if !response.status().is_success() { + return Err(anyhow!( + "GitHub API request failed with status: {}", + response.status() + )); + } + + let release: GitHubRelease = response + .json() + .await + .context("Failed to parse GitHub release response")?; + + Ok(release) + } + + async fn download_with_progress(&self, url: &str) -> Result> { + let response = self + .client + .get(url) + .send() + .await + .context("Failed to start download")?; + + if !response.status().is_success() { + return Err(anyhow!( + "Download failed with status: {}", + response.status() + )); + } + + let total_size = response.content_length().unwrap_or(0); + + let pb = ProgressBar::new(total_size); + pb.set_style( + ProgressStyle::default_bar() + .template("{spinner:.green} [{elapsed_precise}] [{wide_bar:.cyan/blue}] {bytes}/{total_bytes} ({eta})") + .unwrap() + .progress_chars("#>-") + ); + + let mut downloaded = 0u64; + let mut buffer = Vec::new(); + + let mut stream = response; + while let Some(chunk) = stream.chunk().await.context("Failed to read chunk")? { + buffer.extend_from_slice(&chunk); + downloaded += chunk.len() as u64; + pb.set_position(downloaded); + } + + pb.finish_with_message("Download complete"); + Ok(buffer) + } + + async fn download_and_install(&self, system: bool) -> Result<()> { + println!( + "Detecting platform: {}-{}", + self.platform.os, self.platform.arch + ); + + let release = self.get_latest_release().await?; + println!("Latest release: {}", release.tag_name); + + let asset_pattern = self.platform.asset_pattern(); + let asset = release + .assets + .iter() + .find(|asset| asset.name.contains(&asset_pattern)) + .ok_or_else(|| { + anyhow!( + "No compatible asset found for {}-{}. Available assets: {}", + self.platform.os, + self.platform.arch, + release + .assets + .iter() + .map(|a| a.name.as_str()) + .collect::>() + .join(", ") + ) + })?; + + println!("Downloading {} ...", asset.name); + let bytes = self + .download_with_progress(&asset.browser_download_url) + .await?; + + let target_dir = self.get_install_dir(system)?; + fs::create_dir_all(&target_dir).context("Failed to create target directory")?; + + let target_path = target_dir.join(BINARY_NAME); + + println!("Extracting to {} ...", target_path.display()); + let tar = GzDecoder::new(&bytes[..]); + let mut archive = Archive::new(tar); + + for entry in archive + .entries() + .context("Failed to read archive entries")? + { + let mut entry = entry.context("Failed to read archive entry")?; + let path = entry.path().context("Failed to get entry path")?; + + if path.file_name() == Some(std::ffi::OsStr::new(BINARY_NAME)) { + let mut file = + fs::File::create(&target_path).context("Failed to create target file")?; + io::copy(&mut entry, &mut file).context("Failed to extract binary")?; + break; + } + } + + #[cfg(unix)] + { + use std::os::unix::fs::PermissionsExt; + let mut perms = fs::metadata(&target_path)?.permissions(); + perms.set_mode(0o755); + fs::set_permissions(&target_path, perms) + .context("Failed to set executable permissions")?; + } + + println!( + "Successfully installed {} to {}", + BINARY_NAME, + target_path.display() + ); + + self.check_path(&target_dir); + + Ok(()) + } + + fn get_install_dir(&self, system: bool) -> Result { + if system { + Ok(PathBuf::from("/usr/local/bin")) + } else { + let base_dirs = + BaseDirs::new().ok_or_else(|| anyhow!("Failed to get base directories"))?; + let local_bin = base_dirs.home_dir().join(".local/bin"); + Ok(local_bin) + } + } + + fn check_path(&self, install_dir: &Path) { + if let Ok(path_var) = std::env::var("PATH") { + let paths: Vec<&str> = path_var.split(':').collect(); + if !paths.iter().any(|&p| Path::new(p) == install_dir) { + println!("Warning: {} is not in your PATH", install_dir.display()); + println!("Add it to your PATH with:"); + println!("export PATH=\"{}:$PATH\"", install_dir.display()); + } + } + } + + async fn uninstall(&self, system: bool) -> Result<()> { + let target_dir = self.get_install_dir(system)?; + let target_path = target_dir.join(BINARY_NAME); + + if target_path.exists() { + fs::remove_file(&target_path).context("Failed to remove binary")?; + println!( + "Successfully removed {} from {}", + BINARY_NAME, + target_path.display() + ); + } else { + println!( + "{} is not installed at {}", + BINARY_NAME, + target_path.display() + ); + } + + Ok(()) + } + + async fn update(&self, system: bool) -> Result<()> { + let target_dir = self.get_install_dir(system)?; + let target_path = target_dir.join(BINARY_NAME); + + if !target_path.exists() { + println!( + "{} is not installed. Running install instead...", + BINARY_NAME + ); + return self.download_and_install(system).await; + } + let current_version = self.get_current_version(&target_path); + let latest_release = self.get_latest_release().await?; + + if let Some(current) = current_version { + if current == latest_release.tag_name { + println!("{} is already up to date ({})", BINARY_NAME, current); + return Ok(()); + } + println!( + "Updating {} from {} to {}", + BINARY_NAME, current, latest_release.tag_name + ); + } else { + println!("Updating {} to {}", BINARY_NAME, latest_release.tag_name); + } + + self.download_and_install(system).await + } + + fn get_current_version(&self, binary_path: &Path) -> Option { + Command::new(binary_path) + .arg("--version") + .output() + .ok() + .and_then(|output| { + let version_output = String::from_utf8(output.stdout).ok()?; + version_output + .split_whitespace() + .last() + .map(|v| v.to_string()) + }) + } +} + +#[tokio::main] +async fn main() -> Result<()> { + let cli = Cli::parse(); + let installer = Installer::new()?; + + match cli.command { + Commands::Install { system } => { + installer.download_and_install(system).await?; + } + Commands::Update { system } => { + installer.update(system).await?; + } + Commands::Uninstall { system } => { + installer.uninstall(system).await?; + } + } + + Ok(()) +} diff --git a/packages/ciphernode/enclave_core/Cargo.toml b/crates/entrypoint/Cargo.toml similarity index 53% rename from packages/ciphernode/enclave_core/Cargo.toml rename to crates/entrypoint/Cargo.toml index 91c28fae51..05516495c0 100644 --- a/packages/ciphernode/enclave_core/Cargo.toml +++ b/crates/entrypoint/Cargo.toml @@ -1,39 +1,40 @@ [package] -name = "enclave_core" -version.workspace = true +name = "e3-entrypoint" +version = "0.1.0" edition.workspace = true -description = ": coordinates the encryption and decryption of enclave computations" -repository = "https://github.com/gnosisguild/enclave/packages/ciphernode" +license.workspace = true +description = "E3 - CLI Entrypoints" +repository = "https://github.com/gnosisguild/enclave/crates/entrypoint" build = "build.rs" [dependencies] actix = { workspace = true } -aggregator = { workspace = true } +e3-aggregator = { workspace = true } alloy = { workspace = true } alloy-primitives = { workspace = true } anyhow = { workspace = true } bincode = { workspace = true } -config = { workspace = true } +e3-config = { workspace = true } clap = { workspace = true } -crypto = { workspace = true } -data = { workspace = true } +e3-crypto = { workspace = true } +e3-data = { workspace = true } dirs = { workspace = true } -events = { workspace = true } -evm = { workspace = true } -fhe = { workspace = true } +e3-events = { workspace = true } +e3-evm = { workspace = true } +e3-fhe = { workspace = true } hex = { workspace = true } -keyshare = { workspace = true } -logger = { workspace = true } +e3-keyshare = { workspace = true } +e3-logger = { workspace = true } libp2p = { workspace = true } -net = { workspace = true } +e3-net = { workspace = true } phf = { workspace = true } rand = { workspace = true } rand_chacha = { workspace = true } -e3_request = { workspace = true } +e3-request = { workspace = true } serde = { workspace = true } serde_json = { workspace = true } -sortition = { workspace = true } -test_helpers = { workspace = true } +e3-sortition = { workspace = true } +e3-test-helpers = { workspace = true } tokio = { workspace = true } tracing = { workspace = true } zeroize = { workspace = true } diff --git a/crates/entrypoint/README.md b/crates/entrypoint/README.md new file mode 100644 index 0000000000..d92b1f50ac --- /dev/null +++ b/crates/entrypoint/README.md @@ -0,0 +1,3 @@ +Enclave entry point create. + +This needs further refactoring and decomposition to separate crates per functionality. diff --git a/packages/ciphernode/enclave_core/build.rs b/crates/entrypoint/build.rs similarity index 93% rename from packages/ciphernode/enclave_core/build.rs rename to crates/entrypoint/build.rs index 01a47dd1eb..9044f74f1e 100644 --- a/packages/ciphernode/enclave_core/build.rs +++ b/crates/entrypoint/build.rs @@ -12,8 +12,9 @@ fn main() -> std::io::Result<()> { // Path to deployment artifacts let deployments_path = Path::new(&manifest_dir) - .join("..") // Adjust based on your actual path structure .join("..") + .join("..") + .join("packages") .join("evm") .join("deployments") .join("sepolia"); @@ -56,8 +57,7 @@ fn main() -> std::io::Result<()> { let out_dir = env::var("OUT_DIR").unwrap(); let dest_path = Path::new(&out_dir).join("contract_deployments.rs"); fs::write(dest_path, contract_info)?; - - println!("cargo:rerun-if-changed=../packages/evm/deployments/sepolia"); + println!("cargo:rerun-if-changed=../../packages/evm/deployments/sepolia"); Ok(()) } diff --git a/packages/ciphernode/enclave_core/src/init/mod.rs b/crates/entrypoint/src/config_set/mod.rs similarity index 97% rename from packages/ciphernode/enclave_core/src/init/mod.rs rename to crates/entrypoint/src/config_set/mod.rs index 81dc5e79c8..cb3d3bc253 100644 --- a/packages/ciphernode/enclave_core/src/init/mod.rs +++ b/crates/entrypoint/src/config_set/mod.rs @@ -1,8 +1,8 @@ use alloy::primitives::Address; use anyhow::{anyhow, bail, Result}; -use config::load_config; -use config::AppConfig; -use config::RPC; +use e3_config::load_config; +use e3_config::AppConfig; +use e3_config::RPC; use std::fs; use tracing::instrument; diff --git a/packages/ciphernode/enclave_core/src/helpers/datastore.rs b/crates/entrypoint/src/helpers/datastore.rs similarity index 81% rename from packages/ciphernode/enclave_core/src/helpers/datastore.rs rename to crates/entrypoint/src/helpers/datastore.rs index cc4d0eb8ab..95f7d938ed 100644 --- a/packages/ciphernode/enclave_core/src/helpers/datastore.rs +++ b/crates/entrypoint/src/helpers/datastore.rs @@ -2,10 +2,10 @@ use std::path::PathBuf; use actix::{Actor, Addr}; use anyhow::Result; -use config::AppConfig; -use data::{DataStore, InMemStore, SledDb, SledStore}; -use data::{Repositories, RepositoriesFactory}; -use events::{get_enclave_event_bus, EnclaveEvent, EventBus}; +use e3_config::AppConfig; +use e3_data::{DataStore, InMemStore, SledDb, SledStore}; +use e3_data::{Repositories, RepositoriesFactory}; +use e3_events::{get_enclave_event_bus, EnclaveEvent, EventBus}; pub fn get_sled_store(bus: &Addr>, db_file: &PathBuf) -> Result { Ok((&SledStore::new(bus, db_file)?).into()) diff --git a/packages/ciphernode/enclave_core/src/helpers/mod.rs b/crates/entrypoint/src/helpers/mod.rs similarity index 100% rename from packages/ciphernode/enclave_core/src/helpers/mod.rs rename to crates/entrypoint/src/helpers/mod.rs diff --git a/packages/ciphernode/enclave_core/src/helpers/rand.rs b/crates/entrypoint/src/helpers/rand.rs similarity index 100% rename from packages/ciphernode/enclave_core/src/helpers/rand.rs rename to crates/entrypoint/src/helpers/rand.rs diff --git a/crates/entrypoint/src/helpers/shutdown.rs b/crates/entrypoint/src/helpers/shutdown.rs new file mode 100644 index 0000000000..a2a688a587 --- /dev/null +++ b/crates/entrypoint/src/helpers/shutdown.rs @@ -0,0 +1,48 @@ +use actix::Recipient; +use anyhow::Result; +use e3_events::{EnclaveEvent, Shutdown}; +use std::time::Duration; +use tokio::{ + select, + signal::unix::{signal, SignalKind}, + task::JoinHandle, +}; +use tracing::{error, info}; + +pub async fn listen_for_shutdown(bus: Recipient, mut handle: JoinHandle>) { + let mut sigterm = + signal(SignalKind::terminate()).expect("Failed to create SIGTERM signal stream"); + select! { + _ = sigterm.recv() => { + info!("SIGTERM received, initiating graceful shutdown..."); + + // Stop the actor system + let _ = bus.send(EnclaveEvent::from(Shutdown)).await; + + // Abort the spawned task + handle.abort(); + + // Wait for all actor processes to disconnect + tokio::time::sleep(Duration::from_secs(2)).await; + + // Wait for the task to finish + let _ = handle.await; + + info!("Graceful shutdown complete"); + + } + result = &mut handle => { + match result { + Ok(Ok(_)) => { + info!("Completed"); + } + Ok(Err(e)) => { + error!("Failed: {}", e); + } + Err(e) => { + error!("Panicked: {}", e); + } + } + } + } +} diff --git a/packages/ciphernode/enclave_core/src/helpers/termtable.rs b/crates/entrypoint/src/helpers/termtable.rs similarity index 100% rename from packages/ciphernode/enclave_core/src/helpers/termtable.rs rename to crates/entrypoint/src/helpers/termtable.rs diff --git a/packages/ciphernode/enclave_core/src/lib.rs b/crates/entrypoint/src/lib.rs similarity index 82% rename from packages/ciphernode/enclave_core/src/lib.rs rename to crates/entrypoint/src/lib.rs index f596700e63..6a7f1a322e 100644 --- a/packages/ciphernode/enclave_core/src/lib.rs +++ b/crates/entrypoint/src/lib.rs @@ -1,5 +1,5 @@ +pub mod config_set; pub mod helpers; -pub mod init; pub mod net; pub mod nodes; pub mod password; diff --git a/packages/ciphernode/enclave_core/src/net/keypair/generate.rs b/crates/entrypoint/src/net/keypair/generate.rs similarity index 90% rename from packages/ciphernode/enclave_core/src/net/keypair/generate.rs rename to crates/entrypoint/src/net/keypair/generate.rs index 2277c7a9cf..1e0029c58a 100644 --- a/packages/ciphernode/enclave_core/src/net/keypair/generate.rs +++ b/crates/entrypoint/src/net/keypair/generate.rs @@ -1,8 +1,8 @@ use anyhow::Result; -use config::AppConfig; -use crypto::Cipher; +use e3_config::AppConfig; +use e3_crypto::Cipher; +use e3_net::NetRepositoryFactory; use libp2p::{identity::Keypair, PeerId}; -use net::NetRepositoryFactory; use zeroize::Zeroize; use crate::helpers::datastore::get_repositories; diff --git a/packages/ciphernode/enclave_core/src/net/keypair/mod.rs b/crates/entrypoint/src/net/keypair/mod.rs similarity index 100% rename from packages/ciphernode/enclave_core/src/net/keypair/mod.rs rename to crates/entrypoint/src/net/keypair/mod.rs diff --git a/packages/ciphernode/enclave_core/src/net/keypair/set.rs b/crates/entrypoint/src/net/keypair/set.rs similarity index 90% rename from packages/ciphernode/enclave_core/src/net/keypair/set.rs rename to crates/entrypoint/src/net/keypair/set.rs index cb4ab08f5b..cc8853b754 100644 --- a/packages/ciphernode/enclave_core/src/net/keypair/set.rs +++ b/crates/entrypoint/src/net/keypair/set.rs @@ -1,9 +1,9 @@ use alloy::primitives::hex; use anyhow::Result; -use config::AppConfig; -use crypto::Cipher; +use e3_config::AppConfig; +use e3_crypto::Cipher; +use e3_net::NetRepositoryFactory; use libp2p::identity::Keypair; -use net::NetRepositoryFactory; use crate::helpers::datastore::get_repositories; diff --git a/packages/ciphernode/enclave_core/src/net/mod.rs b/crates/entrypoint/src/net/mod.rs similarity index 100% rename from packages/ciphernode/enclave_core/src/net/mod.rs rename to crates/entrypoint/src/net/mod.rs diff --git a/packages/ciphernode/enclave_core/src/net/peer_id/mod.rs b/crates/entrypoint/src/net/peer_id/mod.rs similarity index 100% rename from packages/ciphernode/enclave_core/src/net/peer_id/mod.rs rename to crates/entrypoint/src/net/peer_id/mod.rs diff --git a/packages/ciphernode/enclave_core/src/net/peer_id/purge.rs b/crates/entrypoint/src/net/peer_id/purge.rs similarity index 79% rename from packages/ciphernode/enclave_core/src/net/peer_id/purge.rs rename to crates/entrypoint/src/net/peer_id/purge.rs index 7d55387b96..5b31a4cd43 100644 --- a/packages/ciphernode/enclave_core/src/net/peer_id/purge.rs +++ b/crates/entrypoint/src/net/peer_id/purge.rs @@ -1,7 +1,7 @@ use crate::helpers::datastore::get_repositories; use anyhow::*; -use config::AppConfig; -use net::NetRepositoryFactory; +use e3_config::AppConfig; +use e3_net::NetRepositoryFactory; pub async fn execute(config: &AppConfig) -> Result<()> { let repositories = get_repositories(config)?; diff --git a/packages/ciphernode/enclave_core/src/nodes/client.rs b/crates/entrypoint/src/nodes/client.rs similarity index 100% rename from packages/ciphernode/enclave_core/src/nodes/client.rs rename to crates/entrypoint/src/nodes/client.rs diff --git a/packages/ciphernode/enclave_core/src/nodes/daemon.rs b/crates/entrypoint/src/nodes/daemon.rs similarity index 91% rename from packages/ciphernode/enclave_core/src/nodes/daemon.rs rename to crates/entrypoint/src/nodes/daemon.rs index 50065fc8cd..7742460493 100644 --- a/packages/ciphernode/enclave_core/src/nodes/daemon.rs +++ b/crates/entrypoint/src/nodes/daemon.rs @@ -1,5 +1,5 @@ use anyhow::*; -use config::{combine_unique, AppConfig, NodeDefinition}; +use e3_config::{combine_unique, AppConfig, NodeDefinition}; use std::sync::Arc; use std::{collections::HashMap, env}; use tokio::sync::Mutex; @@ -46,6 +46,7 @@ impl LaunchCommand { &self, verbose: u8, maybe_config_string: &Option, + maybe_otel: &Option, ) -> Result { let enclave_bin = env::current_exe()?.display().to_string(); let mut args = vec![]; @@ -63,6 +64,11 @@ impl LaunchCommand { args.push(format!("-{}", "v".repeat(verbose as usize))); // -vvv } + if let Some(otel) = maybe_otel { + args.push("--otel".to_string()); + args.push(otel.to_string()); + } + for peer in self.peers.iter() { args.push("--peer".to_string()); args.push(peer.to_string()); @@ -78,6 +84,7 @@ fn extract_commands( exclude: Vec, verbose: u8, maybe_config_string: Option, + maybe_otel: Option, ) -> Result { let mut exclude_list = exclude.clone(); @@ -98,7 +105,7 @@ fn extract_commands( let mut cmds = HashMap::new(); for item in filtered.iter() { - let params = item.to_params(verbose, &maybe_config_string)?; + let params = item.to_params(verbose, &maybe_config_string, &maybe_otel)?; cmds.insert(item.name.clone(), params); } @@ -111,6 +118,7 @@ pub async fn execute( exclude: Vec, verbose: u8, maybe_config_string: Option, + maybe_otel: Option, ) -> Result<()> { let command_map = extract_commands( config.nodes(), @@ -118,6 +126,7 @@ pub async fn execute( exclude, verbose, maybe_config_string, + maybe_otel, )?; let process_manager = Arc::new(Mutex::new(ProcessManager::from(command_map))); diff --git a/packages/ciphernode/enclave_core/src/nodes/down.rs b/crates/entrypoint/src/nodes/down.rs similarity index 100% rename from packages/ciphernode/enclave_core/src/nodes/down.rs rename to crates/entrypoint/src/nodes/down.rs diff --git a/packages/ciphernode/enclave_core/src/nodes/mod.rs b/crates/entrypoint/src/nodes/mod.rs similarity index 92% rename from packages/ciphernode/enclave_core/src/nodes/mod.rs rename to crates/entrypoint/src/nodes/mod.rs index 39303c0b1b..a5ee053e86 100644 --- a/packages/ciphernode/enclave_core/src/nodes/mod.rs +++ b/crates/entrypoint/src/nodes/mod.rs @@ -4,6 +4,7 @@ pub mod down; pub mod nodes; pub mod process_manager; pub mod ps; +pub mod purge; pub mod restart; pub mod server; pub mod start; diff --git a/packages/ciphernode/enclave_core/src/nodes/nodes.rs b/crates/entrypoint/src/nodes/nodes.rs similarity index 94% rename from packages/ciphernode/enclave_core/src/nodes/nodes.rs rename to crates/entrypoint/src/nodes/nodes.rs index 77ad7e52d9..54ff8c4bb5 100644 --- a/packages/ciphernode/enclave_core/src/nodes/nodes.rs +++ b/crates/entrypoint/src/nodes/nodes.rs @@ -1,7 +1,6 @@ use anyhow::*; -use reqwest::Client; use serde::{Deserialize, Serialize}; -use std::{collections::HashMap, env, process::Stdio, sync::Arc}; +use std::{collections::HashMap, process::Stdio, sync::Arc}; use tokio::{ process::{Child, Command}, sync::Mutex, diff --git a/packages/ciphernode/enclave_core/src/nodes/process_manager.rs b/crates/entrypoint/src/nodes/process_manager.rs similarity index 100% rename from packages/ciphernode/enclave_core/src/nodes/process_manager.rs rename to crates/entrypoint/src/nodes/process_manager.rs diff --git a/packages/ciphernode/enclave_core/src/nodes/ps.rs b/crates/entrypoint/src/nodes/ps.rs similarity index 100% rename from packages/ciphernode/enclave_core/src/nodes/ps.rs rename to crates/entrypoint/src/nodes/ps.rs diff --git a/crates/entrypoint/src/nodes/purge.rs b/crates/entrypoint/src/nodes/purge.rs new file mode 100644 index 0000000000..95283a098b --- /dev/null +++ b/crates/entrypoint/src/nodes/purge.rs @@ -0,0 +1,17 @@ +use anyhow::Result; +use std::env; +use tokio::fs; + +/// Purge all ciphernode data +pub async fn execute() -> Result<()> { + let cwd = env::current_dir()?; + let data_folder = cwd.join(".enclave/data"); + if fs::try_exists(&data_folder).await? { + fs::remove_dir_all(data_folder).await?; + } + let config_folder = cwd.join(".enclave/config"); + if fs::try_exists(&config_folder).await? { + fs::remove_dir_all(config_folder).await?; + } + Ok(()) +} diff --git a/packages/ciphernode/enclave_core/src/nodes/restart.rs b/crates/entrypoint/src/nodes/restart.rs similarity index 100% rename from packages/ciphernode/enclave_core/src/nodes/restart.rs rename to crates/entrypoint/src/nodes/restart.rs diff --git a/packages/ciphernode/enclave_core/src/nodes/server.rs b/crates/entrypoint/src/nodes/server.rs similarity index 100% rename from packages/ciphernode/enclave_core/src/nodes/server.rs rename to crates/entrypoint/src/nodes/server.rs diff --git a/packages/ciphernode/enclave_core/src/nodes/start.rs b/crates/entrypoint/src/nodes/start.rs similarity index 89% rename from packages/ciphernode/enclave_core/src/nodes/start.rs rename to crates/entrypoint/src/nodes/start.rs index 52f5591789..794fe69feb 100644 --- a/packages/ciphernode/enclave_core/src/nodes/start.rs +++ b/crates/entrypoint/src/nodes/start.rs @@ -1,5 +1,5 @@ use anyhow::*; -use tracing::{error, instrument}; +use tracing::instrument; use super::client; diff --git a/packages/ciphernode/enclave_core/src/nodes/status.rs b/crates/entrypoint/src/nodes/status.rs similarity index 100% rename from packages/ciphernode/enclave_core/src/nodes/status.rs rename to crates/entrypoint/src/nodes/status.rs diff --git a/packages/ciphernode/enclave_core/src/nodes/stop.rs b/crates/entrypoint/src/nodes/stop.rs similarity index 100% rename from packages/ciphernode/enclave_core/src/nodes/stop.rs rename to crates/entrypoint/src/nodes/stop.rs diff --git a/packages/ciphernode/enclave_core/src/nodes/up.rs b/crates/entrypoint/src/nodes/up.rs similarity index 88% rename from packages/ciphernode/enclave_core/src/nodes/up.rs rename to crates/entrypoint/src/nodes/up.rs index 7a970f04cd..8f2d3456e2 100644 --- a/packages/ciphernode/enclave_core/src/nodes/up.rs +++ b/crates/entrypoint/src/nodes/up.rs @@ -1,6 +1,6 @@ use crate::nodes::daemon; use anyhow::*; -use config::AppConfig; +use e3_config::AppConfig; use tracing::instrument; use super::client; @@ -12,6 +12,7 @@ pub async fn execute( exclude: Vec, verbose: u8, maybe_config_string: Option, + maybe_otel: Option, ) -> Result<()> { if client::is_ready().await? { bail!("Swarm is already running!"); @@ -23,7 +24,7 @@ pub async fn execute( } // run the swarm_daemon process locally forwarding args - daemon::execute(config, exclude, verbose, maybe_config_string).await?; + daemon::execute(config, exclude, verbose, maybe_config_string, maybe_otel).await?; Ok(()) } diff --git a/packages/ciphernode/enclave_core/src/password/delete.rs b/crates/entrypoint/src/password/delete.rs similarity index 87% rename from packages/ciphernode/enclave_core/src/password/delete.rs rename to crates/entrypoint/src/password/delete.rs index 15e47d6a7b..ce4585836d 100644 --- a/packages/ciphernode/enclave_core/src/password/delete.rs +++ b/crates/entrypoint/src/password/delete.rs @@ -1,6 +1,6 @@ use anyhow::*; -use config::AppConfig; -use crypto::{FilePasswordManager, PasswordManager}; +use e3_config::AppConfig; +use e3_crypto::{FilePasswordManager, PasswordManager}; use zeroize::Zeroizing; pub async fn get_current_password(config: &AppConfig) -> Result> { diff --git a/packages/ciphernode/enclave_core/src/password/mod.rs b/crates/entrypoint/src/password/mod.rs similarity index 100% rename from packages/ciphernode/enclave_core/src/password/mod.rs rename to crates/entrypoint/src/password/mod.rs diff --git a/packages/ciphernode/enclave_core/src/password/set.rs b/crates/entrypoint/src/password/set.rs similarity index 92% rename from packages/ciphernode/enclave_core/src/password/set.rs rename to crates/entrypoint/src/password/set.rs index 29af3cebee..c5fa5a0d27 100644 --- a/packages/ciphernode/enclave_core/src/password/set.rs +++ b/crates/entrypoint/src/password/set.rs @@ -1,6 +1,6 @@ use anyhow::{bail, Result}; -use config::AppConfig; -use crypto::{FilePasswordManager, PasswordManager}; +use e3_config::AppConfig; +use e3_crypto::{FilePasswordManager, PasswordManager}; use zeroize::Zeroizing; use crate::helpers::rand::generate_random_bytes; diff --git a/packages/ciphernode/enclave_core/src/start/aggregator_start.rs b/crates/entrypoint/src/start/aggregator_start.rs similarity index 71% rename from packages/ciphernode/enclave_core/src/start/aggregator_start.rs rename to crates/entrypoint/src/start/aggregator_start.rs index f69f21a2a3..89ef6707c7 100644 --- a/packages/ciphernode/enclave_core/src/start/aggregator_start.rs +++ b/crates/entrypoint/src/start/aggregator_start.rs @@ -1,27 +1,27 @@ -use actix::{Actor, Addr}; -use aggregator::ext::{PlaintextAggregatorExtension, PublicKeyAggregatorExtension}; +use actix::Addr; use anyhow::Result; -use config::AppConfig; -use crypto::Cipher; -use data::RepositoriesFactory; -use e3_request::E3Router; -use events::{get_enclave_event_bus, EnclaveEvent, EventBus}; -use evm::{ - helpers::{get_signer_from_repository, ProviderConfig}, +use e3_aggregator::ext::{PlaintextAggregatorExtension, PublicKeyAggregatorExtension}; +use e3_config::AppConfig; +use e3_crypto::Cipher; +use e3_data::RepositoriesFactory; +use e3_events::{get_enclave_event_bus, EnclaveEvent, EventBus}; +use e3_evm::{ + helpers::{load_signer_from_repository, ProviderConfig}, CiphernodeRegistryReaderRepositoryFactory, CiphernodeRegistrySol, EnclaveSol, EnclaveSolReaderRepositoryFactory, EthPrivateKeyRepositoryFactory, RegistryFilterSol, }; -use fhe::ext::FheExtension; -use net::{NetRepositoryFactory, NetworkManager}; +use e3_fhe::ext::FheExtension; +use e3_net::{NetRepositoryFactory, NetworkManager}; +use e3_request::E3Router; +use e3_sortition::Sortition; +use e3_sortition::SortitionRepositoryFactory; +use e3_test_helpers::{PlaintextWriter, PublicKeyWriter}; use rand::SeedableRng; use rand_chacha::{rand_core::OsRng, ChaCha20Rng}; -use sortition::Sortition; -use sortition::SortitionRepositoryFactory; use std::{ path::PathBuf, sync::{Arc, Mutex}, }; -use test_helpers::{PlaintextWriter, PublicKeyWriter}; use tokio::task::JoinHandle; use crate::helpers::datastore::setup_datastore; @@ -37,7 +37,7 @@ pub async fn execute( let repositories = store.repositories(); let sortition = Sortition::attach(&bus, repositories.sortition()).await?; let cipher = Arc::new(Cipher::from_config(config).await?); - let signer = get_signer_from_repository(repositories.eth_private_key(), &cipher).await?; + let signer = load_signer_from_repository(repositories.eth_private_key(), &cipher).await?; for chain in config .chains() @@ -47,29 +47,31 @@ pub async fn execute( let rpc_url = chain.rpc_url()?; let provider_config = ProviderConfig::new(rpc_url, chain.rpc_auth.clone()); let read_provider = provider_config.create_readonly_provider().await?; - let write_provider = provider_config.create_ws_signer_provider(&signer).await?; + let write_provider = provider_config.create_signer_provider(&signer).await?; EnclaveSol::attach( &bus, - &read_provider, - &write_provider, + read_provider.clone(), + write_provider.clone(), &chain.contracts.enclave.address(), - &repositories.enclave_sol_reader(read_provider.get_chain_id()), + &repositories.enclave_sol_reader(read_provider.chain_id()), chain.contracts.enclave.deploy_block(), + chain.rpc_url.clone(), ) .await?; RegistryFilterSol::attach( &bus, - &write_provider, + write_provider.clone(), &chain.contracts.filter_registry.address(), ) .await?; CiphernodeRegistrySol::attach( &bus, - &read_provider, + read_provider.clone(), &chain.contracts.ciphernode_registry.address(), - &repositories.ciphernode_registry_reader(read_provider.get_chain_id()), + &repositories.ciphernode_registry_reader(read_provider.chain_id()), chain.contracts.ciphernode_registry.deploy_block(), + chain.rpc_url.clone(), ) .await?; } @@ -86,7 +88,6 @@ pub async fn execute( config.peers(), &cipher, config.quic_port(), - config.enable_mdns(), repositories.libp2p_keypair(), ) .await?; diff --git a/packages/ciphernode/enclave_core/src/start/mod.rs b/crates/entrypoint/src/start/mod.rs similarity index 100% rename from packages/ciphernode/enclave_core/src/start/mod.rs rename to crates/entrypoint/src/start/mod.rs diff --git a/packages/ciphernode/enclave_core/src/start/start.rs b/crates/entrypoint/src/start/start.rs similarity index 79% rename from packages/ciphernode/enclave_core/src/start/start.rs rename to crates/entrypoint/src/start/start.rs index 796c162221..ca8ac82545 100644 --- a/packages/ciphernode/enclave_core/src/start/start.rs +++ b/crates/entrypoint/src/start/start.rs @@ -1,24 +1,24 @@ -use actix::{Actor, Addr}; +use actix::Addr; use alloy::primitives::Address; use anyhow::Result; -use config::AppConfig; -use crypto::Cipher; -use data::RepositoriesFactory; -use e3_request::E3Router; -use events::get_enclave_event_bus; -use events::{EnclaveEvent, EventBus}; -use evm::{ +use e3_config::AppConfig; +use e3_crypto::Cipher; +use e3_data::RepositoriesFactory; +use e3_events::get_enclave_event_bus; +use e3_events::{EnclaveEvent, EventBus}; +use e3_evm::{ helpers::ProviderConfig, CiphernodeRegistryReaderRepositoryFactory, CiphernodeRegistrySol, EnclaveSolReader, EnclaveSolReaderRepositoryFactory, }; -use fhe::ext::FheExtension; -use keyshare::ext::KeyshareExtension; -use net::{NetRepositoryFactory, NetworkManager}; +use e3_fhe::ext::FheExtension; +use e3_keyshare::ext::KeyshareExtension; +use e3_net::{NetRepositoryFactory, NetworkManager}; +use e3_request::E3Router; +use e3_sortition::CiphernodeSelector; +use e3_sortition::Sortition; +use e3_sortition::SortitionRepositoryFactory; use rand::SeedableRng; use rand_chacha::rand_core::OsRng; -use sortition::CiphernodeSelector; -use sortition::Sortition; -use sortition::SortitionRepositoryFactory; use std::sync::{Arc, Mutex}; use tokio::task::JoinHandle; use tracing::instrument; @@ -53,18 +53,20 @@ pub async fn execute( let read_provider = provider_config.create_readonly_provider().await?; EnclaveSolReader::attach( &bus, - &read_provider, + read_provider.clone(), &chain.contracts.enclave.address(), - &repositories.enclave_sol_reader(read_provider.get_chain_id()), + &repositories.enclave_sol_reader(read_provider.chain_id()), chain.contracts.enclave.deploy_block(), + chain.rpc_url.clone(), ) .await?; CiphernodeRegistrySol::attach( &bus, - &read_provider, + read_provider.clone(), &chain.contracts.ciphernode_registry.address(), - &repositories.ciphernode_registry_reader(read_provider.get_chain_id()), + &repositories.ciphernode_registry_reader(read_provider.chain_id()), chain.contracts.ciphernode_registry.deploy_block(), + chain.rpc_url.clone(), ) .await?; } @@ -84,7 +86,6 @@ pub async fn execute( config.peers(), &cipher, config.quic_port(), - config.enable_mdns(), repositories.libp2p_keypair(), ) .await?; diff --git a/packages/ciphernode/enclave_core/src/wallet/mod.rs b/crates/entrypoint/src/wallet/mod.rs similarity index 100% rename from packages/ciphernode/enclave_core/src/wallet/mod.rs rename to crates/entrypoint/src/wallet/mod.rs diff --git a/packages/ciphernode/enclave_core/src/wallet/set.rs b/crates/entrypoint/src/wallet/set.rs similarity index 91% rename from packages/ciphernode/enclave_core/src/wallet/set.rs rename to crates/entrypoint/src/wallet/set.rs index 9ad8595d92..6227e25c59 100644 --- a/packages/ciphernode/enclave_core/src/wallet/set.rs +++ b/crates/entrypoint/src/wallet/set.rs @@ -1,8 +1,8 @@ use alloy::{hex::FromHex, primitives::FixedBytes, signers::local::PrivateKeySigner}; use anyhow::{anyhow, Result}; -use config::AppConfig; -use crypto::Cipher; -use evm::EthPrivateKeyRepositoryFactory; +use e3_config::AppConfig; +use e3_crypto::Cipher; +use e3_evm::EthPrivateKeyRepositoryFactory; use crate::helpers::{datastore::get_repositories, rand::generate_random_bytes}; diff --git a/packages/ciphernode/events/Cargo.toml b/crates/events/Cargo.toml similarity index 56% rename from packages/ciphernode/events/Cargo.toml rename to crates/events/Cargo.toml index 71af507d46..464501c419 100644 --- a/packages/ciphernode/events/Cargo.toml +++ b/crates/events/Cargo.toml @@ -1,12 +1,10 @@ [package] -# we have to name this other than core for disambiguation -name = "events" -version.workspace = true +name = "e3-events" +version = "0.1.0" edition.workspace = true -description = ": coordinates the encryption and decryption of enclave computations" -repository = "https://github.com/gnosisguild/enclave/packages/ciphernode" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +license.workspace = true +description = "Event management for E3 Ciphernodes" +repository = "https://github.com/gnosisguild/enclave/crates/events" [dependencies] actix = { workspace = true } diff --git a/packages/ciphernode/events/src/e3id.rs b/crates/events/src/e3id.rs similarity index 50% rename from packages/ciphernode/events/src/e3id.rs rename to crates/events/src/e3id.rs index 20c6362be5..6f5907912a 100644 --- a/packages/ciphernode/events/src/e3id.rs +++ b/crates/events/src/e3id.rs @@ -4,40 +4,37 @@ use core::fmt; use serde::{Deserialize, Serialize}; #[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -pub struct E3id(pub String); +pub struct E3id { + id: String, + chain_id: u64, +} + impl fmt::Display for E3id { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - f.write_str(&self.0) + write!(f, "{}:{}", self.chain_id, self.id) } } impl E3id { - pub fn new(id: impl Into) -> Self { - Self(id.into()) + pub fn new(id: impl Into, chain_id: u64) -> Self { + Self { + id: id.into(), + chain_id, + } } -} -impl From for E3id { - fn from(value: u32) -> Self { - E3id::new(value.to_string()) + pub fn e3_id(&self) -> &str { + &self.id } -} - -impl From for E3id { - fn from(value: String) -> Self { - E3id::new(value) - } -} -impl From<&str> for E3id { - fn from(value: &str) -> Self { - E3id::new(value) + pub fn chain_id(&self) -> u64 { + self.chain_id } } impl TryFrom for U256 { type Error = ParseError; fn try_from(value: E3id) -> Result { - U256::from_str_radix(&value.0, 10) + U256::from_str_radix(&value.id, 10) } } diff --git a/packages/ciphernode/events/src/enclave_event/ciphernode_added.rs b/crates/events/src/enclave_event/ciphernode_added.rs similarity index 95% rename from packages/ciphernode/events/src/enclave_event/ciphernode_added.rs rename to crates/events/src/enclave_event/ciphernode_added.rs index 33c8af41af..b59ce40b1f 100644 --- a/packages/ciphernode/events/src/enclave_event/ciphernode_added.rs +++ b/crates/events/src/enclave_event/ciphernode_added.rs @@ -8,6 +8,7 @@ pub struct CiphernodeAdded { pub address: String, pub index: usize, pub num_nodes: usize, + pub chain_id: u64, } impl Display for CiphernodeAdded { diff --git a/packages/ciphernode/events/src/enclave_event/ciphernode_removed.rs b/crates/events/src/enclave_event/ciphernode_removed.rs similarity index 96% rename from packages/ciphernode/events/src/enclave_event/ciphernode_removed.rs rename to crates/events/src/enclave_event/ciphernode_removed.rs index e43e38289d..9b1da86799 100644 --- a/packages/ciphernode/events/src/enclave_event/ciphernode_removed.rs +++ b/crates/events/src/enclave_event/ciphernode_removed.rs @@ -8,6 +8,7 @@ pub struct CiphernodeRemoved { pub address: String, pub index: usize, pub num_nodes: usize, + pub chain_id: u64, } impl Display for CiphernodeRemoved { diff --git a/packages/ciphernode/events/src/enclave_event/ciphernode_selected.rs b/crates/events/src/enclave_event/ciphernode_selected.rs similarity index 100% rename from packages/ciphernode/events/src/enclave_event/ciphernode_selected.rs rename to crates/events/src/enclave_event/ciphernode_selected.rs diff --git a/packages/ciphernode/events/src/enclave_event/ciphertext_output_published.rs b/crates/events/src/enclave_event/ciphertext_output_published.rs similarity index 100% rename from packages/ciphernode/events/src/enclave_event/ciphertext_output_published.rs rename to crates/events/src/enclave_event/ciphertext_output_published.rs diff --git a/packages/ciphernode/events/src/enclave_event/decryptionshare_created.rs b/crates/events/src/enclave_event/decryptionshare_created.rs similarity index 100% rename from packages/ciphernode/events/src/enclave_event/decryptionshare_created.rs rename to crates/events/src/enclave_event/decryptionshare_created.rs diff --git a/packages/ciphernode/events/src/enclave_event/die.rs b/crates/events/src/enclave_event/die.rs similarity index 100% rename from packages/ciphernode/events/src/enclave_event/die.rs rename to crates/events/src/enclave_event/die.rs diff --git a/packages/ciphernode/events/src/enclave_event/e3_request_complete.rs b/crates/events/src/enclave_event/e3_request_complete.rs similarity index 100% rename from packages/ciphernode/events/src/enclave_event/e3_request_complete.rs rename to crates/events/src/enclave_event/e3_request_complete.rs diff --git a/packages/ciphernode/events/src/enclave_event/e3_requested.rs b/crates/events/src/enclave_event/e3_requested.rs similarity index 72% rename from packages/ciphernode/events/src/enclave_event/e3_requested.rs rename to crates/events/src/enclave_event/e3_requested.rs index 4526a2a02c..eaba0dd7a2 100644 --- a/packages/ciphernode/events/src/enclave_event/e3_requested.rs +++ b/crates/events/src/enclave_event/e3_requested.rs @@ -10,15 +10,14 @@ pub struct E3Requested { pub threshold_m: usize, pub seed: Seed, pub params: Vec, - pub src_chain_id: u64, } impl Display for E3Requested { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!( f, - "e3_id: {}, threshold_m: {}, src_chain_id: {}, seed: {}, params: ", - self.e3_id, self.threshold_m, self.src_chain_id, self.seed + "e3_id: {}, threshold_m: {}, seed: {}, params: ", + self.e3_id, self.threshold_m, self.seed ) } } diff --git a/packages/ciphernode/events/src/enclave_event/enclave_error.rs b/crates/events/src/enclave_event/enclave_error.rs similarity index 100% rename from packages/ciphernode/events/src/enclave_event/enclave_error.rs rename to crates/events/src/enclave_event/enclave_error.rs diff --git a/packages/ciphernode/events/src/enclave_event/keyshare_created.rs b/crates/events/src/enclave_event/keyshare_created.rs similarity index 100% rename from packages/ciphernode/events/src/enclave_event/keyshare_created.rs rename to crates/events/src/enclave_event/keyshare_created.rs diff --git a/packages/ciphernode/events/src/enclave_event/mod.rs b/crates/events/src/enclave_event/mod.rs similarity index 100% rename from packages/ciphernode/events/src/enclave_event/mod.rs rename to crates/events/src/enclave_event/mod.rs diff --git a/packages/ciphernode/events/src/enclave_event/plaintext_aggregated.rs b/crates/events/src/enclave_event/plaintext_aggregated.rs similarity index 72% rename from packages/ciphernode/events/src/enclave_event/plaintext_aggregated.rs rename to crates/events/src/enclave_event/plaintext_aggregated.rs index 7e24d5a769..dc3c3019aa 100644 --- a/packages/ciphernode/events/src/enclave_event/plaintext_aggregated.rs +++ b/crates/events/src/enclave_event/plaintext_aggregated.rs @@ -8,15 +8,10 @@ use std::fmt::{self, Display}; pub struct PlaintextAggregated { pub e3_id: E3id, pub decrypted_output: Vec, - pub src_chain_id: u64, } impl Display for PlaintextAggregated { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!( - f, - "e3_id: {}, src_chain_id: {}", - self.e3_id, self.src_chain_id - ) + write!(f, "e3_id: {}", self.e3_id) } } diff --git a/packages/ciphernode/events/src/enclave_event/publickey_aggregated.rs b/crates/events/src/enclave_event/publickey_aggregated.rs similarity index 76% rename from packages/ciphernode/events/src/enclave_event/publickey_aggregated.rs rename to crates/events/src/enclave_event/publickey_aggregated.rs index 0a71cbc34e..a7c9e6f8ba 100644 --- a/packages/ciphernode/events/src/enclave_event/publickey_aggregated.rs +++ b/crates/events/src/enclave_event/publickey_aggregated.rs @@ -9,15 +9,14 @@ pub struct PublicKeyAggregated { pub pubkey: Vec, pub e3_id: E3id, pub nodes: OrderedSet, - pub src_chain_id: u64, } impl Display for PublicKeyAggregated { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!( f, - "e3_id: {}, src_chain_id: {}, nodes: , pubkey: ", - self.e3_id, self.src_chain_id, + "e3_id: {}, nodes: , pubkey: ", + self.e3_id, ) } } diff --git a/packages/ciphernode/events/src/enclave_event/shutdown.rs b/crates/events/src/enclave_event/shutdown.rs similarity index 100% rename from packages/ciphernode/events/src/enclave_event/shutdown.rs rename to crates/events/src/enclave_event/shutdown.rs diff --git a/packages/ciphernode/events/src/enclave_event/test_event.rs b/crates/events/src/enclave_event/test_event.rs similarity index 96% rename from packages/ciphernode/events/src/enclave_event/test_event.rs rename to crates/events/src/enclave_event/test_event.rs index 2f5f3b2519..233a7bd110 100644 --- a/packages/ciphernode/events/src/enclave_event/test_event.rs +++ b/crates/events/src/enclave_event/test_event.rs @@ -1,6 +1,5 @@ use actix::Message; use serde::{Deserialize, Serialize}; -use std::fmt::{self, Display}; #[derive(Message, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] #[rtype(result = "()")] @@ -9,6 +8,9 @@ pub struct TestEvent { pub entropy: u64, } +#[cfg(test)] +use std::fmt::{self, Display}; + #[cfg(test)] impl Display for TestEvent { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { diff --git a/packages/ciphernode/events/src/event_id.rs b/crates/events/src/event_id.rs similarity index 100% rename from packages/ciphernode/events/src/event_id.rs rename to crates/events/src/event_id.rs diff --git a/packages/ciphernode/events/src/eventbus.rs b/crates/events/src/eventbus.rs similarity index 90% rename from packages/ciphernode/events/src/eventbus.rs rename to crates/events/src/eventbus.rs index f9ac315ffb..62b0d0826f 100644 --- a/packages/ciphernode/events/src/eventbus.rs +++ b/crates/events/src/eventbus.rs @@ -1,9 +1,7 @@ use actix::prelude::*; -use anyhow::anyhow; -use anyhow::Result; use bloom::{BloomFilter, ASMS}; -use std::collections::{HashMap, HashSet}; -use std::fmt::{Debug, Display}; +use std::collections::HashMap; +use std::fmt::Display; use std::hash::Hash; use std::marker::PhantomData; @@ -27,6 +25,21 @@ pub trait ErrorEvent: Event { fn from_error(err_type: Self::ErrorType, error: anyhow::Error) -> Self; } +////////////////////////////////////////////////////////////////////////////// +// Configuration +////////////////////////////////////////////////////////////////////////////// + +/// Configuration for EventBus behavior +pub struct EventBusConfig { + pub deduplicate: bool, +} + +impl Default for EventBusConfig { + fn default() -> Self { + Self { deduplicate: true } + } +} + fn default_bloomfilter() -> BloomFilter { let num_items = 10000000; let fp_rate = 0.001; @@ -42,6 +55,7 @@ fn default_bloomfilter() -> BloomFilter { /// actually get published as well as ensure that local events are not rebroadcast locally after /// being published. pub struct EventBus { + config: EventBusConfig, ids: BloomFilter, listeners: HashMap>>, } @@ -51,13 +65,18 @@ impl Actor for EventBus { } impl EventBus { - pub fn new() -> Self { + pub fn new(config: EventBusConfig) -> Self { EventBus { + config, listeners: HashMap::new(), ids: default_bloomfilter(), } } + pub fn set_config(&mut self, config: EventBusConfig) { + self.config = config; + } + fn track(&mut self, event: E) { self.ids.insert(&event.event_id()); } @@ -70,6 +89,7 @@ impl EventBus { impl Default for EventBus { fn default() -> Self { Self { + config: EventBusConfig::default(), listeners: HashMap::new(), ids: default_bloomfilter(), } @@ -208,7 +228,7 @@ pub struct HistoryCollector { history: Vec, } -impl HistoryCollector { +impl HistoryCollector { pub fn new() -> Self { Self { history: Vec::new(), @@ -222,7 +242,7 @@ impl Actor for HistoryCollector { impl Handler for HistoryCollector { type Result = E::Result; - fn handle(&mut self, msg: E, ctx: &mut Self::Context) -> Self::Result { + fn handle(&mut self, msg: E, _ctx: &mut Self::Context) -> Self::Result { self.history.push(msg); } } diff --git a/packages/ciphernode/events/src/eventbus_factory.rs b/crates/events/src/eventbus_factory.rs similarity index 62% rename from packages/ciphernode/events/src/eventbus_factory.rs rename to crates/events/src/eventbus_factory.rs index d96edfa19a..8a0fb65965 100644 --- a/packages/ciphernode/events/src/eventbus_factory.rs +++ b/crates/events/src/eventbus_factory.rs @@ -4,7 +4,7 @@ use once_cell::sync::Lazy; use std::any::Any; use std::any::TypeId; use std::collections::HashMap; -use std::sync::{Arc, Mutex}; +use std::sync::Mutex; use crate::EnclaveEvent; use crate::ErrorCollector; @@ -33,49 +33,47 @@ impl EventBusFactory { // Get or create a singleton EventBus for the specific event type pub fn get_event_bus(&self) -> Addr> { let type_id = TypeId::of::(); + let mut event_bus_cache = self + .event_bus_cache + .lock() + .expect("event_bus_cache mutex failed to lock"); - // Cache hit in new scope for mutex - { - let event_bus_cache = self.event_bus_cache.lock().unwrap(); - if let Some(instance) = event_bus_cache.get(&type_id) { - return instance - .downcast_ref::>>() - .expect("Type mismatch in EventBusFactory") - .clone(); - } + // If we already have this type of EventBus, return it + if let Some(instance) = event_bus_cache.get(&type_id) { + return instance + .downcast_ref::>>() + .expect("Type mismatch in EventBusFactory") + .clone(); } - // Cache miss + // Create a new EventBus for this event type let event_bus = EventBus::::default().start(); - let mut event_bus_cache = self.event_bus_cache.lock().unwrap(); + + // Store it in our HashMap event_bus_cache.insert(type_id, Box::new(event_bus.clone())); + event_bus } - - // Get or create a singleton ErrorCollector for the specific event type pub fn get_error_collector(&self) -> Addr> { let type_id = TypeId::of::(); + let mut error_collector_cache = self.error_collector_cache.lock().unwrap(); - // Cache hit in new scope for mutex - { - let error_collector_cache = self.error_collector_cache.lock().unwrap(); - if let Some(instance) = error_collector_cache.get(&type_id) { - return instance - .downcast_ref::>>() - .expect("Type mismatch in EventBusFactory") - .clone(); - } + // If we already have this type of ErrorCollector, return it + if let Some(instance) = error_collector_cache.get(&type_id) { + return instance + .downcast_ref::>>() + .expect("Type mismatch in EventBusFactory") + .clone(); } - // Cache miss + // Create a new EventBus for this event type let error_collector = ErrorCollector::::new().start(); + // Importantly subscribe to events let bus = self.get_event_bus::(); - bus.do_send(Subscribe::new( - "EnclaveError", - error_collector.clone().recipient(), - )); - let mut error_collector_cache = self.error_collector_cache.lock().unwrap(); + bus.do_send(Subscribe::new("*", error_collector.clone().recipient())); + // Store it in our HashMap error_collector_cache.insert(type_id, Box::new(error_collector.clone())); + error_collector } } diff --git a/packages/ciphernode/events/src/lib.rs b/crates/events/src/lib.rs similarity index 100% rename from packages/ciphernode/events/src/lib.rs rename to crates/events/src/lib.rs diff --git a/packages/ciphernode/events/src/ordered_set.rs b/crates/events/src/ordered_set.rs similarity index 100% rename from packages/ciphernode/events/src/ordered_set.rs rename to crates/events/src/ordered_set.rs diff --git a/packages/ciphernode/events/src/seed.rs b/crates/events/src/seed.rs similarity index 100% rename from packages/ciphernode/events/src/seed.rs rename to crates/events/src/seed.rs diff --git a/crates/evm-helpers/Cargo.toml b/crates/evm-helpers/Cargo.toml new file mode 100644 index 0000000000..38ab647994 --- /dev/null +++ b/crates/evm-helpers/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "e3-evm-helpers" +version = "0.1.0" +edition.workspace = true +license.workspace = true +description = "E3 - Enclave EVM Helpers" +repository = "https://github.com/gnosisguild/enclave/crates/evm-helpers" + +[dependencies] +alloy.workspace = true +async-trait.workspace = true +eyre.workspace = true +futures.workspace = true +futures-util.workspace = true +once_cell.workspace = true +tokio.workspace = true diff --git a/crates/evm-helpers/scripts/build_fixtures.sh b/crates/evm-helpers/scripts/build_fixtures.sh new file mode 100755 index 0000000000..2e037393dd --- /dev/null +++ b/crates/evm-helpers/scripts/build_fixtures.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash +set -e + +echo "Building fixtures for all Solidity files..." + +# Folder containing the .sol files +SOLIDITY_DIR="tests/fixtures" + +# For each .sol file in the directory +for solidity_file in "$SOLIDITY_DIR"/*.sol; do + # Extract just the filename without path or extension + filename=$(basename "$solidity_file" .sol) + + echo "Processing $filename.sol..." + + # Create the JSON file with ABI and bytecode + echo "{\"abi\": $(solc --abi "$solidity_file" | tail -n 1), \"bin\": \"$(solc --bin "$solidity_file" | tail -n 1)\"}" | jq '.' > "$SOLIDITY_DIR/$filename.json" + + echo "Created $filename.json" +done + +echo "All fixtures built successfully." diff --git a/crates/evm-helpers/src/contracts.rs b/crates/evm-helpers/src/contracts.rs new file mode 100644 index 0000000000..6d40b76d71 --- /dev/null +++ b/crates/evm-helpers/src/contracts.rs @@ -0,0 +1,417 @@ +use alloy::providers::fillers::BlobGasFiller; +use alloy::{ + network::{Ethereum, EthereumWallet}, + primitives::{Address, Bytes, U256}, + providers::fillers::{ + ChainIdFiller, FillProvider, GasFiller, JoinFill, NonceFiller, WalletFiller, + }, + providers::{Identity, Provider, ProviderBuilder, RootProvider}, + rpc::types::TransactionReceipt, + signers::local::PrivateKeySigner, + sol, +}; +use async_trait::async_trait; +use eyre::Result; +use once_cell::sync::Lazy; +use std::marker::PhantomData; +use std::sync::Arc; +use tokio::sync::Mutex; + +static NONCE_LOCK: Lazy> = Lazy::new(|| Mutex::new(())); + +pub async fn next_pending_nonce

(provider: &P) -> eyre::Result +where + P: Provider + Send + Sync, +{ + let from = provider.get_accounts().await?[0]; + provider + .get_transaction_count(from) + .pending() + .await + .map_err(Into::into) +} + +sol! { + #[derive(Debug)] + struct E3 { + uint256 seed; + uint32[2] threshold; + uint256 requestBlock; + uint256[2] startWindow; + uint256 duration; + uint256 expiration; + bytes32 encryptionSchemeId; + address e3Program; + bytes e3ProgramParams; + address inputValidator; + address decryptionVerifier; + bytes32 committeePublicKey; + bytes32 ciphertextOutput; + bytes plaintextOutput; + } + + #[derive(Debug)] + #[sol(rpc)] + contract Enclave { + uint256 public nexte3Id = 0; + mapping(uint256 e3Id => uint256 inputCount) public inputCounts; + mapping(uint256 e3Id => bytes params) public e3Params; + mapping(address e3Program => bool allowed) public e3Programs; + function request(address filter, uint32[2] calldata threshold, uint256[2] calldata startWindow, uint256 duration, address e3Program, bytes memory e3ProgramParams, bytes memory computeProviderParams) external payable returns (uint256 e3Id, E3 memory e3); + function activate(uint256 e3Id,bytes memory publicKey) external returns (bool success); + function enableE3Program(address e3Program) public onlyOwner returns (bool success); + function publishInput(uint256 e3Id, bytes memory data) external returns (bool success); + function publishCiphertextOutput(uint256 e3Id, bytes memory ciphertextOutput, bytes memory proof) external returns (bool success); + function publishPlaintextOutput(uint256 e3Id, bytes memory data) external returns (bool success); + function getE3(uint256 e3Id) external view returns (E3 memory e3); + function getRoot(uint256 id) public view returns (uint256); + } +} + +/// Trait for read-only operations on the Enclave contract +#[async_trait] +pub trait EnclaveRead { + /// Get the next E3 ID + async fn get_e3_id(&self) -> Result; + + /// Get the details of an E3 by ID + async fn get_e3(&self, e3_id: U256) -> Result; + + /// Get the input count for a specific E3 ID + async fn get_input_count(&self, e3_id: U256) -> Result; + + /// Get the latest block number + async fn get_latest_block(&self) -> Result; + + /// Get the root for a specific ID + async fn get_root(&self, id: U256) -> Result; + + /// Get E3 parameters for a specific E3 ID + async fn get_e3_params(&self, e3_id: U256) -> Result; + + /// Check if an E3 program is enabled + async fn is_e3_program_enabled(&self, e3_program: Address) -> Result; +} + +/// Trait for write operations on the Enclave contract +#[async_trait] +pub trait EnclaveWrite { + /// Request a new E3 + async fn request_e3( + &self, + filter: Address, + threshold: [u32; 2], + start_window: [U256; 2], + duration: U256, + e3_program: Address, + e3_params: Bytes, + compute_provider_params: Bytes, + ) -> Result; + + /// Activate an E3 with a public key + async fn activate(&self, e3_id: U256, pub_key: Bytes) -> Result; + + /// Enable an E3 program + async fn enable_e3_program(&self, e3_program: Address) -> Result; + + /// Publish input data for an E3 + async fn publish_input(&self, e3_id: U256, data: Bytes) -> Result; + + /// Publish ciphertext output with proof + async fn publish_ciphertext_output( + &self, + e3_id: U256, + data: Bytes, + proof: Bytes, + ) -> Result; + + /// Publish plaintext output + async fn publish_plaintext_output( + &self, + e3_id: U256, + data: Bytes, + ) -> Result; +} + +/// Generic type to represent different provider types +pub trait ProviderType: Send { + type Provider: Provider + Send + Sync + 'static; +} + +/// Marker type for read-only provider +#[derive(Clone)] +pub struct ReadOnly; +impl ProviderType for ReadOnly { + type Provider = EnclaveReadOnlyProvider; +} +/// Marker type for read-write provider +#[derive(Clone)] +pub struct ReadWrite; +impl ProviderType for ReadWrite { + type Provider = EnclaveWriteProvider; +} + +/// Generic Enclave contract +#[derive(Clone)] +pub struct EnclaveContract { + pub provider: Arc, + pub contract_address: Address, + _marker: PhantomData, +} + +impl EnclaveContract { + pub async fn new( + http_rpc_url: &str, + private_key: &str, + contract_address: &str, + ) -> Result> { + EnclaveContractFactory::create_write(http_rpc_url, contract_address, private_key).await + } + + pub fn get_provider(&self) -> Arc { + self.provider.clone() + } + + pub fn address(&self) -> &Address { + &self.contract_address + } +} + +impl EnclaveContract { + pub async fn read_only( + http_rpc_url: &str, + contract_address: &str, + ) -> Result> { + EnclaveContractFactory::create_read(http_rpc_url, contract_address).await + } + + pub fn get_provider(&self) -> Arc { + self.provider.clone() + } + + pub fn address(&self) -> &Address { + &self.contract_address + } +} + +/// Type alias for read-only provider +pub type EnclaveReadOnlyProvider = FillProvider< + JoinFill< + Identity, + JoinFill>>, + >, + RootProvider, +>; + +/// Type alias for read-write provider +pub type EnclaveWriteProvider = FillProvider< + JoinFill< + JoinFill< + JoinFill< + Identity, + JoinFill>>, + >, + WalletFiller, + >, + NonceFiller, + >, + RootProvider, + Ethereum, +>; + +/// Type aliases for the two contract variants +pub type EnclaveReadContract = EnclaveContract; +pub type EnclaveWriteContract = EnclaveContract; + +// Factory for creating contract instances +pub struct EnclaveContractFactory; + +impl EnclaveContractFactory { + /// Create a write-capable contract + pub async fn create_write( + http_rpc_url: &str, + contract_address: &str, + private_key: &str, + ) -> Result> { + let contract_address = contract_address.parse()?; + + let signer: PrivateKeySigner = private_key.parse()?; + let wallet = EthereumWallet::from(signer); + let provider = ProviderBuilder::new() + .wallet(wallet) + .with_cached_nonce_management() + .connect(http_rpc_url) + .await?; + + Ok(EnclaveContract:: { + provider: Arc::new(provider), + contract_address, + _marker: PhantomData, + }) + } + + /// Create a read-only contract + pub async fn create_read( + http_rpc_url: &str, + contract_address: &str, + ) -> Result> { + let contract_address = contract_address.parse()?; + + let provider = ProviderBuilder::new().connect(http_rpc_url).await?; + + Ok(EnclaveContract:: { + provider: Arc::new(provider), + contract_address, + _marker: PhantomData, + }) + } +} + +// Implement EnclaveRead for any EnclaveContract regardless of provider type +#[async_trait] +impl EnclaveRead for EnclaveContract +where + T: ProviderType, +{ + async fn get_e3_id(&self) -> Result { + let contract = Enclave::new(self.contract_address, &self.provider); + let e3_id = contract.nexte3Id().call().await?; + Ok(e3_id) + } + + async fn get_e3(&self, e3_id: U256) -> Result { + let contract = Enclave::new(self.contract_address, &self.provider); + let e3_return = contract.getE3(e3_id).call().await?; + Ok(e3_return) + } + + async fn get_input_count(&self, e3_id: U256) -> Result { + let contract = Enclave::new(self.contract_address, &self.provider); + let input_count = contract.inputCounts(e3_id).call().await?; + Ok(input_count) + } + + async fn get_latest_block(&self) -> Result { + let block = self.provider.get_block_number().await?; + Ok(block) + } + + async fn get_root(&self, id: U256) -> Result { + let contract = Enclave::new(self.contract_address, &self.provider); + let root = contract.getRoot(id).call().await?; + Ok(root) + } + + async fn get_e3_params(&self, e3_id: U256) -> Result { + let contract = Enclave::new(self.contract_address, &self.provider); + let params = contract.e3Params(e3_id).call().await?; + Ok(params) + } + + async fn is_e3_program_enabled(&self, e3_program: Address) -> Result { + let contract = Enclave::new(self.contract_address, &self.provider); + let enabled = contract.e3Programs(e3_program).call().await?; + Ok(enabled) + } +} + +// Implement EnclaveWrite only for contracts with ReadWrite marker +#[async_trait] +impl EnclaveWrite for EnclaveContract { + async fn request_e3( + &self, + filter: Address, + threshold: [u32; 2], + start_window: [U256; 2], + duration: U256, + e3_program: Address, + e3_params: Bytes, + compute_provider_params: Bytes, + ) -> Result { + let _guard = NONCE_LOCK.lock().await; + let nonce = next_pending_nonce(&*self.provider).await?; + + let contract = Enclave::new(self.contract_address, &self.provider); + let builder = contract + .request( + filter, + threshold, + start_window, + duration, + e3_program, + e3_params, + compute_provider_params, + ) + .value(U256::from(1)) + .nonce(nonce); + let receipt = builder.send().await?.get_receipt().await?; + + Ok(receipt) + } + + async fn activate(&self, e3_id: U256, pub_key: Bytes) -> Result { + let _guard = NONCE_LOCK.lock().await; + let nonce = next_pending_nonce(&*self.provider).await?; + + let contract = Enclave::new(self.contract_address, &self.provider); + let builder = contract.activate(e3_id, pub_key).nonce(nonce); + let receipt = builder.send().await?.get_receipt().await?; + + Ok(receipt) + } + + async fn enable_e3_program(&self, e3_program: Address) -> Result { + let _guard = NONCE_LOCK.lock().await; + let nonce = next_pending_nonce(&*self.provider).await?; + + let contract = Enclave::new(self.contract_address, &self.provider); + let builder = contract.enableE3Program(e3_program).nonce(nonce); + let receipt = builder.send().await?.get_receipt().await?; + + Ok(receipt) + } + + async fn publish_input(&self, e3_id: U256, data: Bytes) -> Result { + let _guard = NONCE_LOCK.lock().await; + let nonce = next_pending_nonce(&*self.provider).await?; + + let contract = Enclave::new(self.contract_address, &self.provider); + let builder = contract.publishInput(e3_id, data).nonce(nonce); + let receipt = builder.send().await?.get_receipt().await?; + + Ok(receipt) + } + + async fn publish_ciphertext_output( + &self, + e3_id: U256, + data: Bytes, + proof: Bytes, + ) -> Result { + let _guard = NONCE_LOCK.lock().await; + let nonce = next_pending_nonce(&*self.provider).await?; + + let contract = Enclave::new(self.contract_address, &self.provider); + let builder = contract + .publishCiphertextOutput(e3_id, data, proof) + .nonce(nonce); + let receipt = builder.send().await?.get_receipt().await?; + + Ok(receipt) + } + + async fn publish_plaintext_output( + &self, + e3_id: U256, + data: Bytes, + ) -> Result { + let _guard = NONCE_LOCK.lock().await; + let nonce = next_pending_nonce(&*self.provider).await?; + + let contract = Enclave::new(self.contract_address, &self.provider); + let builder = contract.publishPlaintextOutput(e3_id, data).nonce(nonce); + let receipt = builder.send().await?.get_receipt().await?; + + Ok(receipt) + } +} diff --git a/crates/evm-helpers/src/events.rs b/crates/evm-helpers/src/events.rs new file mode 100644 index 0000000000..f758d184b3 --- /dev/null +++ b/crates/evm-helpers/src/events.rs @@ -0,0 +1,20 @@ +use alloy::sol; + +// TODO: extract these from that actual contract + +sol! { + #[derive(Debug)] + event E3Activated(uint256 e3Id, uint256 expiration, bytes committeePublicKey); + + #[derive(Debug)] + event InputPublished(uint256 indexed e3Id, bytes data, uint256 inputHash, uint256 index); + + #[derive(Debug)] + event CiphertextOutputPublished(uint256 indexed e3Id, bytes ciphertextOutput); + + #[derive(Debug)] + event PlaintextOutputPublished(uint256 indexed e3Id, bytes plaintextOutput); + + #[derive(Debug)] + event CommitteePublished(uint256 indexed e3Id, bytes publicKey); +} diff --git a/crates/evm-helpers/src/lib.rs b/crates/evm-helpers/src/lib.rs new file mode 100644 index 0000000000..c6d9047212 --- /dev/null +++ b/crates/evm-helpers/src/lib.rs @@ -0,0 +1,3 @@ +pub mod contracts; +pub mod events; +pub mod listener; diff --git a/crates/evm-helpers/src/listener.rs b/crates/evm-helpers/src/listener.rs new file mode 100644 index 0000000000..eb47ae8a59 --- /dev/null +++ b/crates/evm-helpers/src/listener.rs @@ -0,0 +1,99 @@ +use alloy::{ + network::Ethereum, + primitives::{Address, B256}, + providers::{Provider, ProviderBuilder}, + rpc::types::{BlockNumberOrTag, Filter, Log}, + sol_types::SolEvent, +}; +use eyre::Result; +use futures::stream::StreamExt; +use futures_util::future::FutureExt; +use std::{collections::HashMap, future::Future, pin::Pin, sync::Arc}; +use tokio::{sync::RwLock, task::JoinHandle}; + +type EventHandler = + Box Pin> + Send>> + Send + Sync>; + +#[derive(Clone)] +pub struct EventListener { + provider: Arc>, + filter: Filter, + handlers: Arc>>>, +} + +impl EventListener { + pub fn new(provider: Arc>, filter: Filter) -> Self { + Self { + provider, + filter, + handlers: Arc::new(RwLock::new(HashMap::new())), + } + } + + pub async fn add_event_handler(&mut self, handler: F) + where + E: SolEvent + Send + Clone + 'static, + F: Fn(E) -> Fut + Send + Sync + 'static, + Fut: Future> + Send + 'static, + { + let signature = E::SIGNATURE_HASH; + let handler = Arc::new(handler); + let wrapped_handler = Box::new(move |log: &Log| { + let handler = Arc::clone(&handler); + let log = log.clone(); + async move { + let decoded = log.log_decode::()?; + let event = decoded.inner.data; + handler(event.clone()).await + } + .boxed() + }); + + self.handlers + .write() + .await + .entry(signature) + .or_insert_with(Vec::new) + .push(wrapped_handler); + } + + async fn listen(&self) -> Result<()> { + let mut stream = self + .provider + .subscribe_logs(&self.filter) + .await? + .into_stream(); + while let Some(log) = stream.next().await { + if let Some(topic0) = log.topic0() { + let topic_val = *topic0; + if let Some(handlers) = self.handlers.read().await.get(topic0) { + for handler in handlers { + let log_clone = log.clone(); + let fut = handler(&log_clone); + tokio::spawn(async move { + // Spawn the future so that the handlers are processed concurrently + if let Err(e) = fut.await { + eprintln!("Error processing event 0x{:x}: {:?}", topic_val, e); + } + }); + } + } + } + } + Ok(()) + } + + pub fn start(&self) -> JoinHandle> { + let this = self.clone(); + tokio::spawn(async move { this.listen().await }) + } + + pub async fn create_contract_listener(ws_url: &str, contract_address: &str) -> Result { + let provider = Arc::new(ProviderBuilder::new().connect(ws_url).await?); + let address = contract_address.parse::

()?; + let filter = Filter::new() + .address(address) + .from_block(BlockNumberOrTag::Latest); + Ok(EventListener::new(provider, filter)) + } +} diff --git a/packages/ciphernode/evm/tests/fixtures/.gitignore b/crates/evm-helpers/tests/fixtures/.gitignore similarity index 100% rename from packages/ciphernode/evm/tests/fixtures/.gitignore rename to crates/evm-helpers/tests/fixtures/.gitignore diff --git a/crates/evm-helpers/tests/fixtures/emit_logs.sol b/crates/evm-helpers/tests/fixtures/emit_logs.sol new file mode 100644 index 0000000000..cc393012b0 --- /dev/null +++ b/crates/evm-helpers/tests/fixtures/emit_logs.sol @@ -0,0 +1,28 @@ +pragma solidity >=0.4.24; + +contract EmitLogs { + event ValueChanged(address indexed author, uint256 count, string value); + event PublishMessage(string value); + + string _value; + + uint256 count = 0; + + constructor() { + _value = ""; + } + + function getValue() public view returns (string memory) { + return _value; + } + + function setValue(string memory value) public { + count++; + emit ValueChanged(msg.sender, count, value); + _value = value; + } + + function emitPublishMessage(string memory value) public { + emit PublishMessage(value); + } +} diff --git a/crates/evm-helpers/tests/fixtures/fake_enclave.sol b/crates/evm-helpers/tests/fixtures/fake_enclave.sol new file mode 100644 index 0000000000..469547e291 --- /dev/null +++ b/crates/evm-helpers/tests/fixtures/fake_enclave.sol @@ -0,0 +1,100 @@ +pragma solidity >=0.4.24; + +contract FakeEnclave { + event E3Activated( + uint256 e3Id, + uint256 expiration, + bytes committeePublicKey + ); + event InputPublished( + uint256 indexed e3Id, + bytes data, + uint256 inputHash, + uint256 index + ); + event CiphertextOutputPublished( + uint256 indexed e3Id, + bytes ciphertextOutput + ); + event PlaintextOutputPublished(uint256 indexed e3Id, bytes plaintextOutput); + event CommitteePublished(uint256 indexed e3Id, bytes publicKey); + + // Emit E3Activated event with passed test data + function emitE3Activated( + uint256 e3Id, + uint256 expiration, + bytes memory committeePublicKey + ) public { + emit E3Activated(e3Id, expiration, committeePublicKey); + } + + // Emit InputPublished event with passed test data + function emitInputPublished( + uint256 e3Id, + bytes memory data, + uint256 inputHash, + uint256 index + ) public { + emit InputPublished(e3Id, data, inputHash, index); + } + + // Emit CiphertextOutputPublished event with passed test data + function emitCiphertextOutputPublished( + uint256 e3Id, + bytes memory ciphertextOutput + ) public { + emit CiphertextOutputPublished(e3Id, ciphertextOutput); + } + + // Emit PlaintextOutputPublished event with passed test data + function emitPlaintextOutputPublished( + uint256 e3Id, + bytes memory plaintextOutput + ) public { + emit PlaintextOutputPublished(e3Id, plaintextOutput); + } + + // Emit CommitteePublished event with passed test data + function emitCommitteePublished( + uint256 e3Id, + bytes memory publicKey + ) public { + emit CommitteePublished(e3Id, publicKey); + } + + function getE3(uint256 _e3Id) external view returns (E3 memory e3) { + e3 = E3({ + seed: 123456789012, + threshold: [uint32(2), uint32(3)], + requestBlock: 18750000, + startWindow: [uint256(18750100), uint256(18750200)], + duration: 100, + expiration: block.timestamp + 1 days, + encryptionSchemeId: bytes32(keccak256("AES-256-GCM")), + e3Program: 0x7F3E4df648B8Cb96C1D343be976b91B97CaD5c21, + inputValidator: 0xA51D5E87c0C82dDEBfa4E7E515B2D8Eea8f3e4f2, + decryptionVerifier: 0x4B0D8c2E5f7a6c832f8b16d3aB0e7F5d9E9B24b1, + e3ProgramParams: abi.encode(42, "testParams"), + committeePublicKey: bytes32(keccak256("committee_public_key")), + ciphertextOutput: bytes32(keccak256("encrypted_data")), + plaintextOutput: abi.encode("decrypted_result") + }); + } +} + +struct E3 { + uint256 seed; + uint32[2] threshold; + uint256 requestBlock; + uint256[2] startWindow; + uint256 duration; + uint256 expiration; + bytes32 encryptionSchemeId; + address e3Program; + bytes e3ProgramParams; + address inputValidator; + address decryptionVerifier; + bytes32 committeePublicKey; + bytes32 ciphertextOutput; + bytes plaintextOutput; +} diff --git a/crates/evm-helpers/tests/helpers.rs b/crates/evm-helpers/tests/helpers.rs new file mode 100644 index 0000000000..007c8f1105 --- /dev/null +++ b/crates/evm-helpers/tests/helpers.rs @@ -0,0 +1,49 @@ +// helpers.rs +use alloy::{ + network::Ethereum, + node_bindings::{Anvil, AnvilInstance}, + providers::{Provider, ProviderBuilder, WsConnect}, + signers::local::PrivateKeySigner, + sol, +}; +use eyre::Result; +use EmitLogs::EmitLogsInstance; +use Enclave::EnclaveInstance; + +sol!( + #[sol(rpc)] + Enclave, + "tests/fixtures/fake_enclave.json" +); + +sol!( + #[sol(rpc)] + EmitLogs, + "tests/fixtures/emit_logs.json" +); + +// Much cleaner return type using impl Provider +pub async fn setup_logs_contract() -> Result<( + EmitLogsInstance, + String, + String, + AnvilInstance, +)> { + let (provider, endpoint, anvil) = setup_provider().await?; + let contract = EmitLogs::deploy(provider).await?; + let address = contract.address().to_string(); + Ok((contract, address, endpoint, anvil)) +} + +pub async fn setup_provider() -> Result<(impl Provider, String, AnvilInstance)> { + // Set anvil with fast blocktimes for testing + let anvil = Anvil::new().block_time_f64(0.01).try_spawn()?; + + let provider = ProviderBuilder::new() + .wallet(PrivateKeySigner::from_slice(&anvil.keys()[0].to_bytes())?) + .connect_ws(WsConnect::new(anvil.ws_endpoint())) + .await?; + + let endpoint = anvil.ws_endpoint(); + Ok((provider, endpoint, anvil)) +} diff --git a/crates/evm-helpers/tests/listener.rs b/crates/evm-helpers/tests/listener.rs new file mode 100644 index 0000000000..a5c815ff2a --- /dev/null +++ b/crates/evm-helpers/tests/listener.rs @@ -0,0 +1,189 @@ +mod helpers; +use alloy::sol; +use e3_evm_helpers::listener::EventListener; +use eyre::Result; +use helpers::setup_logs_contract; +use std::time::{Duration, SystemTime, UNIX_EPOCH}; +use tokio::time::sleep; + +sol!( + #[sol(rpc)] + EmitLogs, + "tests/fixtures/emit_logs.json" +); + +#[tokio::test] +async fn test_event_listener() -> Result<()> { + let (contract, _, _, anvil) = setup_logs_contract().await?; + + let (tx, mut rx) = tokio::sync::mpsc::channel::(10); + let (tx_addr, mut rx_addr) = tokio::sync::mpsc::channel::(10); + + let mut event_listener = EventListener::create_contract_listener( + &anvil.ws_endpoint(), + &contract.address().to_string(), + ) + .await?; + + event_listener + .add_event_handler(move |event: EmitLogs::ValueChanged| { + let tx = tx.clone(); + async move { + let _ = tx.try_send(event.value.clone()); + Ok(()) + } + }) + .await; + + event_listener + .add_event_handler(move |event: EmitLogs::ValueChanged| { + let tx_addr = tx_addr.clone(); + async move { + let _ = tx_addr.try_send(event.author.to_string()); + Ok(()) + } + }) + .await; + + event_listener.start(); + + contract + .setValue("hello".to_string()) + .send() + .await? + .watch() + .await?; + + contract + .setValue("world!".to_string()) + .send() + .await? + .watch() + .await?; + + assert_eq!(rx.recv().await.unwrap(), "hello"); + assert_eq!(rx.recv().await.unwrap(), "world!"); + + assert_eq!( + rx_addr.recv().await.unwrap(), + "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" + ); + assert_eq!( + rx_addr.recv().await.unwrap(), + "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" + ); + Ok(()) +} + +fn time_diff(past_timestamp: u128) -> Result { + let current_time = SystemTime::now().duration_since(UNIX_EPOCH)?.as_millis(); + let time_diff = current_time.saturating_sub(past_timestamp); + Ok(format!("{}ms", time_diff)) +} + +fn process_message_with_timestamp(input: &str) -> Result<(String, String)> { + let parts: Vec<&str> = input.splitn(2, ':').collect(); + let message = parts[0].to_string(); + let timestamp_str = parts[1].trim(); + let past_timestamp: u128 = timestamp_str.parse()?; + let time_diff_string = time_diff(past_timestamp)?; + Ok((message, time_diff_string)) +} + +#[tokio::test] +async fn test_overlapping_listener_handlers() -> Result<()> { + // Test that listeners can have overlapping async handlers. + // Long running handlers should run async while other handlers respond to + // events without disruption. + let (contract, _, _, anvil) = setup_logs_contract().await?; + let (tx, mut rx) = tokio::sync::mpsc::channel::(10); + + let mut event_listener = EventListener::create_contract_listener( + &anvil.ws_endpoint(), + &contract.address().to_string(), + ) + .await?; + + let tx1 = tx.clone(); + event_listener + .add_event_handler(move |event: EmitLogs::PublishMessage| { + let tx = tx1.clone(); + async move { + let (msg, time_diff) = process_message_with_timestamp(&event.value)?; + println!("PublishMessage '{}' ({} since sent)", msg, time_diff); + + let _ = tx.try_send("waiting".to_string()); + // Wait 200ms before publishing to simulate long running handlers + sleep(Duration::from_millis(200)).await; + println!("Sending message: '{msg}'"); + let _ = tx.try_send(msg); + Ok(()) + } + }) + .await; + + event_listener + .add_event_handler(move |event: EmitLogs::ValueChanged| { + let tx = tx.clone(); + async move { + let (msg, time_diff) = process_message_with_timestamp(&event.value)?; + println!("ValueChanged '{}' ({} since sent)", msg, time_diff); + let _ = tx.try_send(msg); + Ok(()) + } + }) + .await; + + event_listener.start(); + + // Events should be returned roughly in this order: + // 0ms : one + // 0ms : waiting + // 100ms : two + // 200ms : three + // 300ms : four + + let now = SystemTime::now().duration_since(UNIX_EPOCH)?.as_millis(); + contract + .setValue(format!("one:{now}")) + .send() + .await? + .watch() + .await?; + + // Will delay 200ms + contract + .emitPublishMessage(format!("three:{now}")) + .send() + .await? + .watch() + .await?; + + sleep(Duration::from_millis(100)).await; + + let now = SystemTime::now().duration_since(UNIX_EPOCH)?.as_millis(); + contract + .setValue(format!("two:{now}")) + .send() + .await? + .watch() + .await?; + + sleep(Duration::from_millis(300)).await; + + let now = SystemTime::now().duration_since(UNIX_EPOCH)?.as_millis(); + contract + .setValue(format!("four:{now}")) + .send() + .await? + .watch() + .await?; + + assert_eq!(rx.recv().await.unwrap(), "one"); + assert_eq!(rx.recv().await.unwrap(), "waiting"); + assert_eq!(rx.recv().await.unwrap(), "two"); + assert_eq!(rx.recv().await.unwrap(), "three"); + assert_eq!(rx.recv().await.unwrap(), "four"); + + Ok(()) +} diff --git a/packages/ciphernode/evm/Cargo.toml b/crates/evm/Cargo.toml similarity index 53% rename from packages/ciphernode/evm/Cargo.toml rename to crates/evm/Cargo.toml index 7600c33b37..29eb0ecaa5 100644 --- a/packages/ciphernode/evm/Cargo.toml +++ b/crates/evm/Cargo.toml @@ -1,7 +1,10 @@ [package] -name = "evm" -version.workspace = true +name = "e3-evm" +version = "0.1.0" edition.workspace = true +license.workspace = true +description = "E3 - Enclave Ciphernode EVM Connectors" +repository = "https://github.com/gnosisguild/enclave/crates/evm" [dependencies] actix = { workspace = true } @@ -10,12 +13,12 @@ alloy-primitives = { workspace = true } anyhow = { workspace = true } async-trait = { workspace = true } base64 = { workspace = true } -crypto = { workspace = true } -config = { workspace = true } -data = { workspace = true } -events = { workspace = true } +e3-crypto = { workspace = true } +e3-config = { workspace = true } +e3-data = { workspace = true } +e3-events = { workspace = true } futures-util = { workspace = true } -sortition = { workspace = true } +e3-sortition = { workspace = true } serde = { workspace = true } tokio = { workspace = true } tracing = { workspace = true } @@ -23,5 +26,5 @@ url = { workspace = true } zeroize = { workspace = true } [dev-dependencies] -enclave_core = { workspace = true } +e3-entrypoint = { workspace = true } diff --git a/packages/ciphernode/evm/scripts/build_fixtures.sh b/crates/evm/scripts/build_fixtures.sh similarity index 100% rename from packages/ciphernode/evm/scripts/build_fixtures.sh rename to crates/evm/scripts/build_fixtures.sh diff --git a/packages/ciphernode/evm/src/ciphernode_registry_sol.rs b/crates/evm/src/ciphernode_registry_sol.rs similarity index 53% rename from packages/ciphernode/evm/src/ciphernode_registry_sol.rs rename to crates/evm/src/ciphernode_registry_sol.rs index ea7d8dfe1b..ee439d186e 100644 --- a/packages/ciphernode/evm/src/ciphernode_registry_sol.rs +++ b/crates/evm/src/ciphernode_registry_sol.rs @@ -1,113 +1,125 @@ -use crate::{ - event_reader::EvmEventReaderState, - helpers::{ReadonlyProvider, WithChainId}, - EvmEventReader, -}; +use crate::{event_reader::EvmEventReaderState, helpers::EthProvider, EvmEventReader}; use actix::Addr; use alloy::{ primitives::{LogData, B256}, + providers::Provider, sol, sol_types::SolEvent, - transports::BoxTransport, }; use anyhow::Result; -use data::Repository; -use events::{EnclaveEvent, EventBus}; +use e3_data::Repository; +use e3_events::{EnclaveEvent, EventBus}; use tracing::{error, info, trace}; sol!( #[sol(rpc)] #[derive(Debug)] ICiphernodeRegistry, - "../../evm/artifacts/contracts/interfaces/ICiphernodeRegistry.sol/ICiphernodeRegistry.json" + "../../packages/evm/artifacts/contracts/interfaces/ICiphernodeRegistry.sol/ICiphernodeRegistry.json" ); -impl From for events::CiphernodeAdded { - fn from(value: ICiphernodeRegistry::CiphernodeAdded) -> Self { - events::CiphernodeAdded { - address: value.node.to_string(), +struct CiphernodeAddedWithChainId(pub ICiphernodeRegistry::CiphernodeAdded, pub u64); + +impl From for e3_events::CiphernodeAdded { + fn from(value: CiphernodeAddedWithChainId) -> Self { + e3_events::CiphernodeAdded { + address: value.0.node.to_string(), // TODO: limit index and numNodes to uint32 at the solidity level index: value + .0 .index .try_into() .expect("Index exceeds usize capacity"), num_nodes: value + .0 .numNodes .try_into() .expect("NumNodes exceeds usize capacity"), + chain_id: value.1, } } } -impl From for EnclaveEvent { - fn from(value: ICiphernodeRegistry::CiphernodeAdded) -> Self { - let payload: events::CiphernodeAdded = value.into(); +impl From for EnclaveEvent { + fn from(value: CiphernodeAddedWithChainId) -> Self { + let payload: e3_events::CiphernodeAdded = value.into(); EnclaveEvent::from(payload) } } -impl From for events::CiphernodeRemoved { - fn from(value: ICiphernodeRegistry::CiphernodeRemoved) -> Self { - events::CiphernodeRemoved { - address: value.node.to_string(), +struct CiphernodeRemovedWithChainId(pub ICiphernodeRegistry::CiphernodeRemoved, pub u64); + +impl From for e3_events::CiphernodeRemoved { + fn from(value: CiphernodeRemovedWithChainId) -> Self { + e3_events::CiphernodeRemoved { + address: value.0.node.to_string(), index: value + .0 .index .try_into() .expect("Index exceeds usize capacity"), num_nodes: value + .0 .numNodes .try_into() .expect("NumNodes exceeds usize capacity"), + chain_id: value.1, } } } -impl From for EnclaveEvent { - fn from(value: ICiphernodeRegistry::CiphernodeRemoved) -> Self { - let payload: events::CiphernodeRemoved = value.into(); +impl From for EnclaveEvent { + fn from(value: CiphernodeRemovedWithChainId) -> Self { + let payload: e3_events::CiphernodeRemoved = value.into(); EnclaveEvent::from(payload) } } -pub fn extractor(data: &LogData, topic: Option<&B256>, _: u64) -> Option { +pub fn extractor(data: &LogData, topic: Option<&B256>, chain_id: u64) -> Option { match topic { Some(&ICiphernodeRegistry::CiphernodeAdded::SIGNATURE_HASH) => { - let Ok(event) = ICiphernodeRegistry::CiphernodeAdded::decode_log_data(data, true) - else { + let Ok(event) = ICiphernodeRegistry::CiphernodeAdded::decode_log_data(data) else { error!("Error parsing event CiphernodeAdded after topic was matched!"); return None; }; - Some(EnclaveEvent::from(event)) + Some(EnclaveEvent::from(CiphernodeAddedWithChainId( + event, chain_id, + ))) } Some(&ICiphernodeRegistry::CiphernodeRemoved::SIGNATURE_HASH) => { - let Ok(event) = ICiphernodeRegistry::CiphernodeRemoved::decode_log_data(data, true) - else { + let Ok(event) = ICiphernodeRegistry::CiphernodeRemoved::decode_log_data(data) else { error!("Error parsing event CiphernodeRemoved after topic was matched!"); return None; }; - Some(EnclaveEvent::from(event)) + Some(EnclaveEvent::from(CiphernodeRemovedWithChainId( + event, chain_id, + ))) } - _topic => { trace!( topic=?_topic, - "Unknown event was received by Enclave.sol parser buut was ignored" + "Unknown event was received by CiphernodeRegistry.sol parser but was ignored" ); - return None; + None } } } /// Connects to CiphernodeRegistry.sol converting EVM events to EnclaveEvents pub struct CiphernodeRegistrySolReader; + impl CiphernodeRegistrySolReader { - pub async fn attach( + pub async fn attach

( bus: &Addr>, - provider: &WithChainId, + provider: EthProvider

, contract_address: &str, repository: &Repository, start_block: Option, - ) -> Result>> { + rpc_url: String, + ) -> Result>> + where + P: Provider + Clone + 'static, + { let addr = EvmEventReader::attach( provider, extractor, @@ -115,10 +127,11 @@ impl CiphernodeRegistrySolReader { start_block, &bus.clone().into(), repository, + rpc_url, ) .await?; - info!(address=%contract_address, "EnclaveSolReader is listening to address"); + info!(address=%contract_address, "CiphernodeRegistrySolReader is listening to address"); Ok(addr) } @@ -126,20 +139,26 @@ impl CiphernodeRegistrySolReader { /// Wrapper for a reader and a future writer pub struct CiphernodeRegistrySol; + impl CiphernodeRegistrySol { - pub async fn attach( + pub async fn attach

( bus: &Addr>, - provider: &WithChainId, + provider: EthProvider

, contract_address: &str, repository: &Repository, start_block: Option, - ) -> Result<()> { + rpc_url: String, + ) -> Result<()> + where + P: Provider + Clone + 'static, + { CiphernodeRegistrySolReader::attach( bus, provider, contract_address, repository, start_block, + rpc_url, ) .await?; // TODO: Writer if needed diff --git a/crates/evm/src/enclave_sol.rs b/crates/evm/src/enclave_sol.rs new file mode 100644 index 0000000000..6f32a0def9 --- /dev/null +++ b/crates/evm/src/enclave_sol.rs @@ -0,0 +1,41 @@ +use crate::{ + enclave_sol_reader::EnclaveSolReader, enclave_sol_writer::EnclaveSolWriter, + event_reader::EvmEventReaderState, helpers::EthProvider, +}; +use actix::Addr; +use alloy::providers::{Provider, WalletProvider}; +use anyhow::Result; +use e3_data::Repository; +use e3_events::{EnclaveEvent, EventBus}; + +pub struct EnclaveSol; + +impl EnclaveSol { + pub async fn attach( + bus: &Addr>, + read_provider: EthProvider, + write_provider: EthProvider, + contract_address: &str, + repository: &Repository, + start_block: Option, + rpc_url: String, + ) -> Result<()> + where + R: Provider + Clone + 'static, + W: Provider + WalletProvider + Clone + 'static, + { + EnclaveSolReader::attach( + bus, + read_provider, + contract_address, + repository, + start_block, + rpc_url, + ) + .await?; + + EnclaveSolWriter::attach(bus, write_provider, contract_address).await?; + + Ok(()) + } +} diff --git a/packages/ciphernode/evm/src/enclave_sol_reader.rs b/crates/evm/src/enclave_sol_reader.rs similarity index 58% rename from packages/ciphernode/evm/src/enclave_sol_reader.rs rename to crates/evm/src/enclave_sol_reader.rs index 2754a77750..f9f870f5ad 100644 --- a/packages/ciphernode/evm/src/enclave_sol_reader.rs +++ b/crates/evm/src/enclave_sol_reader.rs @@ -1,54 +1,55 @@ use crate::event_reader::EvmEventReaderState; -use crate::helpers::{ReadonlyProvider, WithChainId}; +use crate::helpers::EthProvider; use crate::EvmEventReader; use actix::Addr; use alloy::primitives::{LogData, B256}; -use alloy::transports::BoxTransport; +use alloy::providers::Provider; use alloy::{sol, sol_types::SolEvent}; use anyhow::Result; -use data::Repository; -use events::{EnclaveEvent, EventBus}; +use e3_data::Repository; +use e3_events::{E3id, EnclaveEvent, EventBus}; use tracing::{error, info, trace}; sol!( #[sol(rpc)] IEnclave, - "../../evm/artifacts/contracts/interfaces/IEnclave.sol/IEnclave.json" + "../../packages/evm/artifacts/contracts/interfaces/IEnclave.sol/IEnclave.json" ); struct E3RequestedWithChainId(pub IEnclave::E3Requested, pub u64); -impl From for events::E3Requested { +impl From for e3_events::E3Requested { fn from(value: E3RequestedWithChainId) -> Self { - events::E3Requested { + e3_events::E3Requested { params: value.0.e3.e3ProgramParams.to_vec(), threshold_m: value.0.e3.threshold[0] as usize, seed: value.0.e3.seed.into(), - e3_id: value.0.e3Id.to_string().into(), - src_chain_id: value.1, + e3_id: E3id::new(value.0.e3Id.to_string(), value.1), } } } impl From for EnclaveEvent { fn from(value: E3RequestedWithChainId) -> Self { - let payload: events::E3Requested = value.into(); + let payload: e3_events::E3Requested = value.into(); EnclaveEvent::from(payload) } } -impl From for events::CiphertextOutputPublished { - fn from(value: IEnclave::CiphertextOutputPublished) -> Self { - events::CiphertextOutputPublished { - e3_id: value.e3Id.to_string().into(), - ciphertext_output: value.ciphertextOutput.to_vec(), +struct CiphertextOutputPublishedWithChainId(pub IEnclave::CiphertextOutputPublished, pub u64); + +impl From for e3_events::CiphertextOutputPublished { + fn from(value: CiphertextOutputPublishedWithChainId) -> Self { + e3_events::CiphertextOutputPublished { + e3_id: E3id::new(value.0.e3Id.to_string(), value.1), + ciphertext_output: value.0.ciphertextOutput.to_vec(), } } } -impl From for EnclaveEvent { - fn from(value: IEnclave::CiphertextOutputPublished) -> Self { - let payload: events::CiphertextOutputPublished = value.into(); +impl From for EnclaveEvent { + fn from(value: CiphertextOutputPublishedWithChainId) -> Self { + let payload: e3_events::CiphertextOutputPublished = value.into(); EnclaveEvent::from(payload) } } @@ -56,26 +57,27 @@ impl From for EnclaveEvent { pub fn extractor(data: &LogData, topic: Option<&B256>, chain_id: u64) -> Option { match topic { Some(&IEnclave::E3Requested::SIGNATURE_HASH) => { - let Ok(event) = IEnclave::E3Requested::decode_log_data(data, true) else { + let Ok(event) = IEnclave::E3Requested::decode_log_data(data) else { error!("Error parsing event E3Requested after topic matched!"); return None; }; Some(EnclaveEvent::from(E3RequestedWithChainId(event, chain_id))) } Some(&IEnclave::CiphertextOutputPublished::SIGNATURE_HASH) => { - let Ok(event) = IEnclave::CiphertextOutputPublished::decode_log_data(data, true) else { - error!("Error parsing event CiphertextOutputPublished after topic matched!"); // TODO: provide more info + let Ok(event) = IEnclave::CiphertextOutputPublished::decode_log_data(data) else { + error!("Error parsing event CiphertextOutputPublished after topic matched!"); return None; }; - Some(EnclaveEvent::from(event)) + Some(EnclaveEvent::from(CiphertextOutputPublishedWithChainId( + event, chain_id, + ))) } - _topic => { trace!( topic=?_topic, - "Unknown event was received by Enclave.sol parser buut was ignored" + "Unknown event received by Enclave.sol parser but was ignored" ); - return None; + None } } } @@ -84,13 +86,17 @@ pub fn extractor(data: &LogData, topic: Option<&B256>, chain_id: u64) -> Option< pub struct EnclaveSolReader; impl EnclaveSolReader { - pub async fn attach( + pub async fn attach

( bus: &Addr>, - provider: &WithChainId, + provider: EthProvider

, contract_address: &str, repository: &Repository, start_block: Option, - ) -> Result>> { + rpc_url: String, + ) -> Result>> + where + P: Provider + Clone + 'static, + { let addr = EvmEventReader::attach( provider, extractor, @@ -98,6 +104,7 @@ impl EnclaveSolReader { start_block, &bus.clone(), repository, + rpc_url, ) .await?; diff --git a/packages/ciphernode/evm/src/enclave_sol_writer.rs b/crates/evm/src/enclave_sol_writer.rs similarity index 60% rename from packages/ciphernode/evm/src/enclave_sol_writer.rs rename to crates/evm/src/enclave_sol_writer.rs index 202f0d9477..65af922f1a 100644 --- a/packages/ciphernode/evm/src/enclave_sol_writer.rs +++ b/crates/evm/src/enclave_sol_writer.rs @@ -1,38 +1,42 @@ -use crate::helpers::{RpcWSClient, SignerProvider, WithChainId}; +use crate::helpers::EthProvider; use actix::prelude::*; use actix::Addr; -use alloy::{primitives::Address, sol}; +use alloy::{ + primitives::Address, + providers::{Provider, WalletProvider}, + sol, +}; use alloy::{ primitives::{Bytes, U256}, rpc::types::TransactionReceipt, }; use anyhow::Result; -use events::Shutdown; -use events::{BusError, E3id, EnclaveErrorType, PlaintextAggregated, Subscribe}; -use events::{EnclaveEvent, EventBus}; +use e3_events::Shutdown; +use e3_events::{BusError, E3id, EnclaveErrorType, PlaintextAggregated, Subscribe}; +use e3_events::{EnclaveEvent, EventBus}; use tracing::info; sol!( #[sol(rpc)] IEnclave, - "../../evm/artifacts/contracts/interfaces/IEnclave.sol/IEnclave.json" + "../../packages/evm/artifacts/contracts/interfaces/IEnclave.sol/IEnclave.json" ); /// Consumes events from the event bus and calls EVM methods on the Enclave.sol contract -pub struct EnclaveSolWriter { - provider: WithChainId, RpcWSClient>, +pub struct EnclaveSolWriter

{ + provider: EthProvider

, contract_address: Address, bus: Addr>, } -impl EnclaveSolWriter { +impl EnclaveSolWriter

{ pub fn new( bus: &Addr>, - provider: &WithChainId, RpcWSClient>, + provider: EthProvider

, contract_address: Address, ) -> Result { Ok(Self { - provider: provider.clone(), + provider, contract_address, bus: bus.clone(), }) @@ -40,10 +44,11 @@ impl EnclaveSolWriter { pub async fn attach( bus: &Addr>, - provider: &WithChainId, RpcWSClient>, + provider: EthProvider

, contract_address: &str, - ) -> Result> { + ) -> Result>> { let addr = EnclaveSolWriter::new(bus, provider, contract_address.parse()?)?.start(); + bus.send(Subscribe::new("PlaintextAggregated", addr.clone().into())) .await?; @@ -54,17 +59,18 @@ impl EnclaveSolWriter { } } -impl Actor for EnclaveSolWriter { +impl Actor for EnclaveSolWriter

{ type Context = actix::Context; } -impl Handler for EnclaveSolWriter { +impl Handler for EnclaveSolWriter

{ type Result = (); + fn handle(&mut self, msg: EnclaveEvent, ctx: &mut Self::Context) -> Self::Result { match msg { EnclaveEvent::PlaintextAggregated { data, .. } => { // Only publish if the src and destination chains match - if self.provider.get_chain_id() == data.src_chain_id { + if self.provider.chain_id() == data.e3_id.chain_id() { ctx.notify(data); } } @@ -74,13 +80,16 @@ impl Handler for EnclaveSolWriter { } } -impl Handler for EnclaveSolWriter { +impl Handler + for EnclaveSolWriter

+{ type Result = ResponseFuture<()>; + fn handle(&mut self, msg: PlaintextAggregated, _: &mut Self::Context) -> Self::Result { Box::pin({ let e3_id = msg.e3_id.clone(); let decrypted_output = msg.decrypted_output.clone(); - let contract_address = self.contract_address.clone(); + let contract_address = self.contract_address; let provider = self.provider.clone(); let bus = self.bus.clone(); @@ -90,7 +99,7 @@ impl Handler for EnclaveSolWriter { .await; match result { Ok(receipt) => { - info!(tx=%receipt.transaction_hash, "tx") + info!(tx=%receipt.transaction_hash, "Published plaintext output"); } Err(err) => bus.err(EnclaveErrorType::Evm, err), } @@ -99,15 +108,16 @@ impl Handler for EnclaveSolWriter { } } -impl Handler for EnclaveSolWriter { +impl Handler for EnclaveSolWriter

{ type Result = (); + fn handle(&mut self, _: Shutdown, ctx: &mut Self::Context) -> Self::Result { ctx.stop(); } } -async fn publish_plaintext_output( - provider: WithChainId, RpcWSClient>, +async fn publish_plaintext_output( + provider: EthProvider

, contract_address: Address, e3_id: E3id, decrypted_output: Vec, @@ -115,8 +125,17 @@ async fn publish_plaintext_output( let e3_id: U256 = e3_id.try_into()?; let decrypted_output = Bytes::from(decrypted_output); let proof = Bytes::from(vec![1]); - let contract = IEnclave::new(contract_address, provider.get_provider()); - let builder = contract.publishPlaintextOutput(e3_id, decrypted_output, proof); + let from_address = provider.provider().default_signer_address(); + let current_nonce = provider + .provider() + .get_transaction_count(from_address) + .pending() + .await?; + + let contract = IEnclave::new(contract_address, provider.provider()); + let builder = contract + .publishPlaintextOutput(e3_id, decrypted_output, proof) + .nonce(current_nonce); let receipt = builder.send().await?.get_receipt().await?; Ok(receipt) } diff --git a/packages/ciphernode/evm/src/event_reader.rs b/crates/evm/src/event_reader.rs similarity index 75% rename from packages/ciphernode/evm/src/event_reader.rs rename to crates/evm/src/event_reader.rs index 86526fa29e..45ceb39a5c 100644 --- a/packages/ciphernode/evm/src/event_reader.rs +++ b/crates/evm/src/event_reader.rs @@ -1,4 +1,4 @@ -use crate::helpers::WithChainId; +use crate::helpers::EthProvider; use actix::prelude::*; use actix::{Addr, Recipient}; use alloy::eips::BlockNumberOrTag; @@ -6,10 +6,9 @@ use alloy::primitives::Address; use alloy::primitives::{LogData, B256}; use alloy::providers::Provider; use alloy::rpc::types::Filter; -use alloy::transports::{BoxTransport, Transport}; use anyhow::{anyhow, Result}; -use data::{AutoPersist, Persistable, Repository}; -use events::{BusError, EnclaveErrorType, EnclaveEvent, EventBus, EventId, Subscribe}; +use e3_data::{AutoPersist, Persistable, Repository}; +use e3_events::{BusError, EnclaveErrorType, EnclaveEvent, EventBus, EventId, Subscribe}; use futures_util::stream::StreamExt; use std::collections::HashSet; use tokio::select; @@ -35,17 +34,14 @@ impl EnclaveEvmEvent { pub type ExtractorFn = fn(&LogData, Option<&B256>, u64) -> Option; -pub struct EvmEventReaderParams -where - P: Provider + Clone + 'static, - T: Transport + Clone + Unpin, -{ - provider: WithChainId, +pub struct EvmEventReaderParams

{ + provider: EthProvider

, extractor: ExtractorFn, contract_address: Address, start_block: Option, bus: Addr>, state: Persistable, + rpc_url: String, } #[derive(Default, serde::Serialize, serde::Deserialize, Clone)] @@ -55,13 +51,9 @@ pub struct EvmEventReaderState { } /// Connects to Enclave.sol converting EVM events to EnclaveEvents -pub struct EvmEventReader -where - P: Provider + Clone + 'static, - T: Transport + Clone + Unpin, -{ +pub struct EvmEventReader

{ /// The alloy provider - provider: Option>, + provider: Option>, /// The contract address contract_address: Address, /// The Extractor function to determine which events to extract and convert to EnclaveEvents @@ -77,14 +69,12 @@ where bus: Addr>, /// The auto persistable state of the event reader state: Persistable, + /// The RPC URL for the provider + rpc_url: String, } -impl EvmEventReader -where - P: Provider + Clone + 'static, - T: Transport + Clone + Unpin, -{ - pub fn new(params: EvmEventReaderParams) -> Self { +impl EvmEventReader

{ + pub fn new(params: EvmEventReaderParams

) -> Self { let (shutdown_tx, shutdown_rx) = oneshot::channel(); Self { contract_address: params.contract_address, @@ -95,16 +85,18 @@ where start_block: params.start_block, bus: params.bus, state: params.state, + rpc_url: params.rpc_url, } } pub async fn attach( - provider: &WithChainId, + provider: EthProvider

, extractor: ExtractorFn, contract_address: &str, start_block: Option, bus: &Addr>, repository: &Repository, + rpc_url: String, ) -> Result> { let sync_state = repository .clone() @@ -112,32 +104,30 @@ where .await?; let params = EvmEventReaderParams { - provider: provider.clone(), + provider, extractor, contract_address: contract_address.parse()?, start_block, bus: bus.clone(), state: sync_state, + rpc_url, }; - let addr = EvmEventReader::new(params).start(); + let addr = EvmEventReader::new(params).start(); bus.do_send(Subscribe::new("Shutdown", addr.clone().into())); - Ok(addr) } } -impl Actor for EvmEventReader -where - P: Provider + Clone + 'static, - T: Transport + Clone + Unpin, -{ +impl Actor for EvmEventReader

{ type Context = actix::Context; + fn started(&mut self, ctx: &mut Self::Context) { let processor = ctx.address().recipient(); let bus = self.bus.clone(); + let Some(provider) = self.provider.take() else { - tracing::error!("Could not start event reader as provider has already been used."); + error!("Could not start event reader as provider has already been used."); return; }; @@ -149,6 +139,8 @@ where let contract_address = self.contract_address; let start_block = self.start_block; + let rpc_url = self.rpc_url.clone(); + ctx.spawn( async move { stream_from_evm( @@ -159,6 +151,7 @@ where shutdown, start_block, &bus, + rpc_url, ) .await } @@ -168,27 +161,43 @@ where } #[instrument(name = "evm_event_reader", skip_all)] -async fn stream_from_evm, T: Transport + Clone>( - provider: WithChainId, +async fn stream_from_evm( + provider: EthProvider

, contract_address: &Address, processor: &Recipient, extractor: fn(&LogData, Option<&B256>, u64) -> Option, mut shutdown: oneshot::Receiver<()>, start_block: Option, bus: &Addr>, + rpc_url: String, ) { - let chain_id = provider.get_chain_id(); - let provider = provider.get_provider(); + let chain_id = provider.chain_id(); + let provider_ref = provider.provider(); + + if start_block.unwrap_or(0) == 0 && !is_local_node(&rpc_url) { + error!( + "Querying from block 0 on a non-local node ({}) without a specific start_block is not allowed.", + rpc_url + ); + bus.err( + EnclaveErrorType::Evm, + anyhow!( + "Misconfiguration: Attempted to query historical events from genesis on a non-local node. \ + Please specify a `start_block` for contract address {contract_address} on chain {chain_id} using rpc {rpc_url}" + ) + ); + return; + } let historical_filter = Filter::new() - .address(contract_address.clone()) + .address(*contract_address) .from_block(start_block.unwrap_or(0)); let current_filter = Filter::new() .address(*contract_address) .from_block(BlockNumberOrTag::Latest); // Historical events - match provider.clone().get_logs(&historical_filter).await { + match provider_ref.get_logs(&historical_filter).await { Ok(historical_logs) => { info!("Fetched {} historical events", historical_logs.len()); for log in historical_logs { @@ -206,11 +215,12 @@ async fn stream_from_evm, T: Transport + Clone>( } } - info!("subscribing to live events"); - match provider.subscribe_logs(¤t_filter).await { + info!("Subscribing to live events"); + match provider_ref.subscribe_logs(¤t_filter).await { Ok(subscription) => { let id: B256 = subscription.local_id().clone(); let mut stream = subscription.into_stream(); + loop { select! { maybe_log = stream.next() => { @@ -218,27 +228,23 @@ async fn stream_from_evm, T: Transport + Clone>( Some(log) => { let block_number = log.block_number; trace!("Received log from EVM"); - let Some(event) = extractor(log.data(), log.topic0(), chain_id) - else { + + let Some(event) = extractor(log.data(), log.topic0(), chain_id) else { trace!("Unknown log from EVM. This will happen from time to time."); continue; }; - trace!("Extracted Evm Event: {}", event); - processor.do_send(EnclaveEvmEvent::new(event, block_number)); + trace!("Extracted EVM Event: {}", event); + processor.do_send(EnclaveEvmEvent::new(event, block_number)); } None => break, // Stream ended } } _ = &mut shutdown => { info!("Received shutdown signal, stopping EVM stream"); - match provider.unsubscribe(id).await { - Ok(_) => { - info!("Unsubscribed successfully from EVM event stream"); - }, - Err(err) => { - error!("Cannot unsubscribe from EVM event stream: {}", err); - } + match provider_ref.unsubscribe(id).await { + Ok(_) => info!("Unsubscribed successfully from EVM event stream"), + Err(err) => error!("Cannot unsubscribe from EVM event stream: {}", err), }; break; } @@ -248,16 +254,18 @@ async fn stream_from_evm, T: Transport + Clone>( Err(e) => { bus.err(EnclaveErrorType::Evm, anyhow!("{}", e)); } - }; + } + info!("Exiting stream loop"); } -impl Handler for EvmEventReader -where - P: Provider + Clone + 'static, - T: Transport + Clone + Unpin, -{ +fn is_local_node(rpc_url: &str) -> bool { + rpc_url.contains("localhost") || rpc_url.contains("127.0.0.1") +} + +impl Handler for EvmEventReader

{ type Result = (); + fn handle(&mut self, msg: EnclaveEvent, _: &mut Self::Context) -> Self::Result { if let EnclaveEvent::Shutdown { .. } = msg { if let Some(shutdown) = self.shutdown_tx.take() { @@ -267,11 +275,7 @@ where } } -impl Handler for EvmEventReader -where - P: Provider + Clone + 'static, - T: Transport + Clone + Unpin, -{ +impl Handler for EvmEventReader

{ type Result = (); #[instrument(name = "evm_event_reader", skip_all)] @@ -279,7 +283,8 @@ where match self.state.try_mutate(|mut state| { let event_id = wrapped.get_id(); trace!("Processing event: {}", event_id); - trace!("cache length: {}", state.ids.len()); + trace!("Cache length: {}", state.ids.len()); + if state.ids.contains(&event_id) { warn!( "Event id {} has already been seen and was not forwarded to the bus", @@ -290,12 +295,11 @@ where let event_type = wrapped.event.event_type(); - // Forward everything else to the event bus + // Forward to the event bus self.bus.do_send(wrapped.event); - // Save processed ids + // Save processed IDs trace!("Storing event(EVM) in cache {}({})", event_type, event_id); - state.ids.insert(event_id); state.last_block = wrapped.block; diff --git a/crates/evm/src/helpers.rs b/crates/evm/src/helpers.rs new file mode 100644 index 0000000000..32bbaa4f30 --- /dev/null +++ b/crates/evm/src/helpers.rs @@ -0,0 +1,203 @@ +use alloy::{ + network::EthereumWallet, + providers::{Provider, ProviderBuilder, WalletProvider}, + signers::local::PrivateKeySigner, + transports::{ + http::{ + reqwest::{ + header::{HeaderMap, HeaderValue, AUTHORIZATION}, + Client, + }, + Http, + }, + ws::{WebSocketConfig, WsConnect}, + Authorization, + }, +}; +use anyhow::{Context, Result}; +use base64::{engine::general_purpose::STANDARD, Engine}; +use e3_config::{RpcAuth, RPC}; +use e3_crypto::Cipher; +use e3_data::Repository; +use std::{env, sync::Arc}; + +pub trait AuthConversions { + fn to_header_value(&self) -> Option; + fn to_ws_auth(&self) -> Option; +} + +impl AuthConversions for RpcAuth { + fn to_header_value(&self) -> Option { + match self { + RpcAuth::None => None, + RpcAuth::Basic { username, password } => { + let credentials = STANDARD.encode(format!("{}:{}", username, password)); + HeaderValue::from_str(&format!("Basic {}", credentials)).ok() + } + RpcAuth::Bearer(token) => HeaderValue::from_str(&format!("Bearer {}", token)).ok(), + } + } + + fn to_ws_auth(&self) -> Option { + match self { + RpcAuth::None => None, + RpcAuth::Basic { username, password } => Some(Authorization::basic(username, password)), + RpcAuth::Bearer(token) => Some(Authorization::bearer(token)), + } + } +} + +#[derive(Clone)] +pub struct EthProvider

{ + provider: Arc

, + chain_id: u64, +} + +impl EthProvider

{ + pub async fn new(provider: P) -> Result { + let chain_id = provider.get_chain_id().await?; + Ok(Self { + provider: Arc::new(provider), + chain_id, + }) + } + + pub fn provider(&self) -> &P { + &self.provider + } + + pub fn chain_id(&self) -> u64 { + self.chain_id + } +} + +pub struct ProviderConfig { + rpc: RPC, + auth: RpcAuth, +} + +impl ProviderConfig { + pub fn new(rpc: RPC, auth: RpcAuth) -> Self { + Self { rpc, auth } + } + + pub async fn create_readonly_provider(&self) -> Result> { + let provider = if self.rpc.is_websocket() { + ProviderBuilder::new() + .connect_ws(self.create_ws_connect()?) + .await + .context("Failed to connect to WebSocket RPC. Check if the node is running and URL is correct.")? + } else { + ProviderBuilder::new().connect_client(self.create_http_client()?) + }; + + EthProvider::new(provider).await + } + + pub async fn create_signer_provider( + &self, + signer: &PrivateKeySigner, + ) -> Result> { + let wallet = EthereumWallet::from(signer.clone()); + + let provider = if self.rpc.is_websocket() { + ProviderBuilder::new() + .wallet(wallet) + .connect_ws(self.create_ws_connect()?) + .await + .context("Failed to connect to WebSocket RPC. Check if the node is running and URL is correct.")? + } else { + ProviderBuilder::new() + .wallet(wallet) + .connect_client(self.create_http_client()?) + }; + + EthProvider::new(provider).await + } + + fn create_ws_connect(&self) -> Result { + let config = WebSocketConfig::default() + .max_frame_size(Some(32 * 1024 * 1024)) + .max_message_size(Some(32 * 1024 * 1024)); + + let mut ws_connect = WsConnect::new(self.rpc.as_ws_url()?).with_config(config); + + if let Some(auth) = self.auth.to_ws_auth() { + ws_connect = ws_connect.with_auth(auth); + } + + Ok(ws_connect) + } + + fn create_http_client(&self) -> Result { + let mut headers = HeaderMap::new(); + if let Some(auth_header) = self.auth.to_header_value() { + headers.insert(AUTHORIZATION, auth_header); + } + + let client = Client::builder() + .default_headers(headers) + .build() + .context("Failed to create HTTP client")?; + + let http = Http::with_client(client, self.rpc.as_http_url()?.parse()?); + Ok(alloy::rpc::client::RpcClient::new(http, false)) + } +} + +pub fn load_signer_from_env(var: &str) -> Result { + let private_key = env::var(var)?; + env::remove_var(var); + private_key.parse().map_err(Into::into) +} + +pub async fn load_signer_from_repository( + repository: Repository>, + cipher: &Cipher, +) -> Result { + let encrypted_key = repository + .read() + .await? + .ok_or_else(|| anyhow::anyhow!("No private key found in repository"))?; + + let decrypted = cipher.decrypt_data(&encrypted_key)?; + let private_key = String::from_utf8(decrypted)?; + + private_key.parse().map_err(Into::into) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_rpc_conversions() -> Result<()> { + // HTTP/HTTPS + let http = RPC::from_url("http://localhost:8545/")?; + assert_eq!(http.as_http_url()?, "http://localhost:8545/"); + assert_eq!(http.as_ws_url()?, "ws://localhost:8545/"); + assert!(!http.is_secure()); + assert!(!http.is_websocket()); + + let https = RPC::from_url("https://example.com/")?; + assert_eq!(https.as_http_url()?, "https://example.com/"); + assert_eq!(https.as_ws_url()?, "wss://example.com/"); + assert!(https.is_secure()); + assert!(!https.is_websocket()); + + // WS/WSS + let ws = RPC::from_url("ws://localhost:8545/")?; + assert_eq!(ws.as_http_url()?, "http://localhost:8545/"); + assert_eq!(ws.as_ws_url()?, "ws://localhost:8545/"); + assert!(!ws.is_secure()); + assert!(ws.is_websocket()); + + let wss = RPC::from_url("wss://example.com/")?; + assert_eq!(wss.as_http_url()?, "https://example.com/"); + assert_eq!(wss.as_ws_url()?, "wss://example.com/"); + assert!(wss.is_secure()); + assert!(wss.is_websocket()); + + Ok(()) + } +} diff --git a/packages/ciphernode/evm/src/lib.rs b/crates/evm/src/lib.rs similarity index 100% rename from packages/ciphernode/evm/src/lib.rs rename to crates/evm/src/lib.rs diff --git a/packages/ciphernode/evm/src/registry_filter_sol.rs b/crates/evm/src/registry_filter_sol.rs similarity index 64% rename from packages/ciphernode/evm/src/registry_filter_sol.rs rename to crates/evm/src/registry_filter_sol.rs index f9066d2fba..6e9c358871 100644 --- a/packages/ciphernode/evm/src/registry_filter_sol.rs +++ b/crates/evm/src/registry_filter_sol.rs @@ -1,12 +1,13 @@ -use crate::helpers::{RpcWSClient, SignerProvider, WithChainId}; +use crate::helpers::EthProvider; use actix::prelude::*; use alloy::{ primitives::{Address, Bytes, U256}, + providers::{Provider, WalletProvider}, rpc::types::TransactionReceipt, sol, }; use anyhow::Result; -use events::{ +use e3_events::{ BusError, E3id, EnclaveErrorType, EnclaveEvent, EventBus, OrderedSet, PublicKeyAggregated, Shutdown, Subscribe, }; @@ -15,23 +16,23 @@ use tracing::info; sol!( #[sol(rpc)] NaiveRegistryFilter, - "../../evm/artifacts/contracts/registry/NaiveRegistryFilter.sol/NaiveRegistryFilter.json" + "../../packages/evm/artifacts/contracts/registry/NaiveRegistryFilter.sol/NaiveRegistryFilter.json" ); -pub struct RegistryFilterSolWriter { - provider: WithChainId, RpcWSClient>, +pub struct RegistryFilterSolWriter

{ + provider: EthProvider

, contract_address: Address, bus: Addr>, } -impl RegistryFilterSolWriter { +impl RegistryFilterSolWriter

{ pub async fn new( bus: &Addr>, - provider: &WithChainId, RpcWSClient>, + provider: EthProvider

, contract_address: Address, ) -> Result { Ok(Self { - provider: provider.clone(), + provider, contract_address, bus: bus.clone(), }) @@ -39,12 +40,13 @@ impl RegistryFilterSolWriter { pub async fn attach( bus: &Addr>, - provider: &WithChainId, RpcWSClient>, + provider: EthProvider

, contract_address: &str, - ) -> Result> { + ) -> Result>> { let addr = RegistryFilterSolWriter::new(bus, provider, contract_address.parse()?) .await? .start(); + let _ = bus .send(Subscribe::new("PublicKeyAggregated", addr.clone().into())) .await; @@ -53,17 +55,20 @@ impl RegistryFilterSolWriter { } } -impl Actor for RegistryFilterSolWriter { +impl Actor for RegistryFilterSolWriter

{ type Context = actix::Context; } -impl Handler for RegistryFilterSolWriter { +impl Handler + for RegistryFilterSolWriter

+{ type Result = (); + fn handle(&mut self, msg: EnclaveEvent, ctx: &mut Self::Context) -> Self::Result { match msg { EnclaveEvent::PublicKeyAggregated { data, .. } => { // Only publish if the src and destination chains match - if self.provider.get_chain_id() == data.src_chain_id { + if self.provider.chain_id() == data.e3_id.chain_id() { ctx.notify(data); } } @@ -73,13 +78,16 @@ impl Handler for RegistryFilterSolWriter { } } -impl Handler for RegistryFilterSolWriter { +impl Handler + for RegistryFilterSolWriter

+{ type Result = ResponseFuture<()>; + fn handle(&mut self, msg: PublicKeyAggregated, _: &mut Self::Context) -> Self::Result { Box::pin({ let e3_id = msg.e3_id.clone(); let pubkey = msg.pubkey.clone(); - let contract_address = self.contract_address.clone(); + let contract_address = self.contract_address; let provider = self.provider.clone(); let bus = self.bus.clone(); let nodes = msg.nodes.clone(); @@ -89,7 +97,7 @@ impl Handler for RegistryFilterSolWriter { publish_committee(provider, contract_address, e3_id, nodes, pubkey).await; match result { Ok(receipt) => { - info!(tx=%receipt.transaction_hash,"tx"); + info!(tx=%receipt.transaction_hash, "Transaction published"); } Err(err) => bus.err(EnclaveErrorType::Evm, err), } @@ -98,15 +106,18 @@ impl Handler for RegistryFilterSolWriter { } } -impl Handler for RegistryFilterSolWriter { +impl Handler + for RegistryFilterSolWriter

+{ type Result = (); + fn handle(&mut self, _: Shutdown, ctx: &mut Self::Context) -> Self::Result { ctx.stop(); } } -pub async fn publish_committee( - provider: WithChainId, RpcWSClient>, +pub async fn publish_committee( + provider: EthProvider

, contract_address: Address, e3_id: E3id, nodes: OrderedSet, @@ -118,17 +129,26 @@ pub async fn publish_committee( .into_iter() .filter_map(|node| node.parse().ok()) .collect(); - let contract = NaiveRegistryFilter::new(contract_address, provider.get_provider()); - let builder = contract.publishCommittee(e3_id, nodes, public_key); + let from_address = provider.provider().default_signer_address(); + let current_nonce = provider + .provider() + .get_transaction_count(from_address) + .pending() + .await?; + let contract = NaiveRegistryFilter::new(contract_address, provider.provider()); + let builder = contract + .publishCommittee(e3_id, nodes, public_key) + .nonce(current_nonce); let receipt = builder.send().await?.get_receipt().await?; Ok(receipt) } pub struct RegistryFilterSol; + impl RegistryFilterSol { - pub async fn attach( + pub async fn attach( bus: &Addr>, - provider: &WithChainId, RpcWSClient>, + provider: EthProvider

, contract_address: &str, ) -> Result<()> { RegistryFilterSolWriter::attach(bus, provider, contract_address).await?; diff --git a/packages/ciphernode/evm/src/repo.rs b/crates/evm/src/repo.rs similarity index 94% rename from packages/ciphernode/evm/src/repo.rs rename to crates/evm/src/repo.rs index f20b5d1e83..f458178f03 100644 --- a/packages/ciphernode/evm/src/repo.rs +++ b/crates/evm/src/repo.rs @@ -1,5 +1,5 @@ -use config::StoreKeys; -use data::{Repositories, Repository}; +use e3_config::StoreKeys; +use e3_data::{Repositories, Repository}; use crate::EvmEventReaderState; diff --git a/packages/ciphernode/evm/tests/evm_reader.rs b/crates/evm/tests/evm_reader.rs similarity index 82% rename from packages/ciphernode/evm/tests/evm_reader.rs rename to crates/evm/tests/evm_reader.rs index f976e79d13..962065617b 100644 --- a/packages/ciphernode/evm/tests/evm_reader.rs +++ b/crates/evm/tests/evm_reader.rs @@ -1,18 +1,19 @@ -use actix::{Actor, Addr}; +use actix::Addr; use alloy::{ node_bindings::Anvil, primitives::{FixedBytes, LogData}, providers::{ProviderBuilder, WsConnect}, + signers::local::PrivateKeySigner, sol, sol_types::SolEvent, }; use anyhow::Result; -use data::Repository; -use enclave_core::helpers::datastore::get_in_mem_store; -use events::{ +use e3_data::Repository; +use e3_entrypoint::helpers::datastore::get_in_mem_store; +use e3_events::{ new_event_bus_with_history, EnclaveEvent, GetHistory, HistoryCollector, Shutdown, TestEvent, }; -use evm::{helpers::WithChainId, EvmEventReader}; +use e3_evm::{helpers::EthProvider, EvmEventReader}; use std::time::Duration; use tokio::time::sleep; @@ -29,7 +30,7 @@ fn test_event_extractor( ) -> Option { match topic { Some(&EmitLogs::ValueChanged::SIGNATURE_HASH) => { - let Ok(event) = EmitLogs::ValueChanged::decode_log_data(data, true) else { + let Ok(event) = EmitLogs::ValueChanged::decode_log_data(data) else { return None; }; Some(EnclaveEvent::from(TestEvent { @@ -46,23 +47,26 @@ async fn evm_reader() -> Result<()> { // Create a WS provider // NOTE: Anvil must be available on $PATH let anvil = Anvil::new().block_time(1).try_spawn()?; - let provider = WithChainId::new( + let rpc_url = anvil.ws_endpoint(); // Get RPC URL + let provider = EthProvider::new( ProviderBuilder::new() - .on_ws(WsConnect::new(anvil.ws_endpoint())) + .wallet(PrivateKeySigner::from_slice(&anvil.keys()[0].to_bytes())?) + .connect_ws(WsConnect::new(rpc_url.clone())) // Use RPC URL .await?, ) .await?; - let contract = EmitLogs::deploy(provider.get_provider()).await?; + let contract = EmitLogs::deploy(provider.provider()).await?; let (bus, history_collector) = new_event_bus_with_history(); let repository = Repository::new(get_in_mem_store()); EvmEventReader::attach( - &provider, + provider.clone(), test_event_extractor, &contract.address().to_string(), None, &bus, &repository, + rpc_url.clone(), // Pass RPC URL ) .await?; @@ -106,13 +110,15 @@ async fn ensure_historical_events() -> Result<()> { // Create a WS provider // NOTE: Anvil must be available on $PATH let anvil = Anvil::new().block_time(1).try_spawn()?; - let provider = WithChainId::new( + let rpc_url = anvil.ws_endpoint(); // Get RPC URL + let provider = EthProvider::new( ProviderBuilder::new() - .on_ws(WsConnect::new(anvil.ws_endpoint())) + .wallet(PrivateKeySigner::from_slice(&anvil.keys()[0].to_bytes())?) + .connect_ws(WsConnect::new(rpc_url.clone())) // Use RPC URL .await?, ) .await?; - let contract = EmitLogs::deploy(provider.get_provider()).await?; + let contract = EmitLogs::deploy(provider.provider()).await?; let (bus, history_collector) = new_event_bus_with_history(); let historical_msgs = vec!["these", "are", "historical", "events"]; @@ -129,12 +135,13 @@ async fn ensure_historical_events() -> Result<()> { } EvmEventReader::attach( - &provider, + provider.clone(), test_event_extractor, &contract.address().to_string(), None, &bus, &repository, + rpc_url.clone(), // Pass RPC URL ) .await?; @@ -175,13 +182,15 @@ async fn ensure_resume_after_shutdown() -> Result<()> { // Create a WS provider // NOTE: Anvil must be available on $PATH let anvil = Anvil::new().block_time(1).try_spawn()?; - let provider = WithChainId::new( + let rpc_url = anvil.ws_endpoint(); // Get RPC URL + let provider = EthProvider::new( ProviderBuilder::new() - .on_ws(WsConnect::new(anvil.ws_endpoint())) + .wallet(PrivateKeySigner::from_slice(&anvil.keys()[0].to_bytes())?) + .connect_ws(WsConnect::new(rpc_url.clone())) // Use RPC URL .await?, ) .await?; - let contract = EmitLogs::deploy(provider.get_provider()).await?; + let contract = EmitLogs::deploy(provider.provider()).await?; let (bus, history_collector) = new_event_bus_with_history(); async fn get_msgs( @@ -213,12 +222,13 @@ async fn ensure_resume_after_shutdown() -> Result<()> { } let addr1 = EvmEventReader::attach( - &provider, + provider.clone(), test_event_extractor, &contract.address().to_string(), None, &bus, &repository, + rpc_url.clone(), // Pass RPC URL ) .await?; @@ -249,12 +259,13 @@ async fn ensure_resume_after_shutdown() -> Result<()> { assert_eq!(msgs, ["before", "online", "live", "events"]); let _ = EvmEventReader::attach( - &provider, + provider.clone(), test_event_extractor, &contract.address().to_string(), None, &bus, &repository, + rpc_url.clone(), // Pass RPC URL ) .await?; diff --git a/crates/evm/tests/fixtures/.gitignore b/crates/evm/tests/fixtures/.gitignore new file mode 100644 index 0000000000..8dd919b529 --- /dev/null +++ b/crates/evm/tests/fixtures/.gitignore @@ -0,0 +1,2 @@ +# ignore .json +*.json diff --git a/packages/ciphernode/evm/tests/fixtures/emit_logs.sol b/crates/evm/tests/fixtures/emit_logs.sol similarity index 100% rename from packages/ciphernode/evm/tests/fixtures/emit_logs.sol rename to crates/evm/tests/fixtures/emit_logs.sol diff --git a/packages/ciphernode/fhe/Cargo.toml b/crates/fhe/Cargo.toml similarity index 51% rename from packages/ciphernode/fhe/Cargo.toml rename to crates/fhe/Cargo.toml index 6afdaf8545..10b24a6957 100644 --- a/packages/ciphernode/fhe/Cargo.toml +++ b/crates/fhe/Cargo.toml @@ -1,21 +1,24 @@ [package] -name = "fhe" -version.workspace = true +name = "e3-fhe" +version = "0.1.0" edition.workspace = true +license.workspace = true +description = "E3 - Enclave Ciphernode FHE Actors" +repository = "https://github.com/gnosisguild/enclave/crates/fhe" [dependencies] actix = { workspace = true } anyhow = { workspace = true } async-trait = { workspace = true } bincode = { workspace = true } -config = { workspace = true } -data = { workspace = true } -events = { workspace = true } +e3-config = { workspace = true } +e3-data = { workspace = true } +e3-events = { workspace = true } fhe-traits = { workspace = true } fhe-util = { workspace = true } fhe_rs = { workspace = true } rand = { workspace = true } rand_chacha = { workspace = true } -e3_request = { workspace = true } +e3-request = { workspace = true } serde = { workspace = true } -commons = { path = "../../commons" } +e3-bfv-helpers = { workspace = true } diff --git a/packages/ciphernode/fhe/src/ext.rs b/crates/fhe/src/ext.rs similarity index 94% rename from packages/ciphernode/fhe/src/ext.rs rename to crates/fhe/src/ext.rs index 17f60c3664..ad05fa7bbd 100644 --- a/packages/ciphernode/fhe/src/ext.rs +++ b/crates/fhe/src/ext.rs @@ -2,9 +2,9 @@ use crate::{Fhe, FheRepositoryFactory, SharedRng}; use actix::Addr; use anyhow::{anyhow, Result}; use async_trait::async_trait; -use data::{FromSnapshotWithParams, RepositoriesFactory, Snapshot}; +use e3_data::{FromSnapshotWithParams, RepositoriesFactory, Snapshot}; +use e3_events::{BusError, E3Requested, EnclaveErrorType, EnclaveEvent, EventBus}; use e3_request::{E3Context, E3ContextSnapshot, E3Extension, TypedKey}; -use events::{BusError, E3Requested, EnclaveErrorType, EnclaveEvent, EventBus}; use std::sync::Arc; pub const FHE_KEY: TypedKey> = TypedKey::new("fhe"); diff --git a/packages/ciphernode/fhe/src/fhe.rs b/crates/fhe/src/fhe.rs similarity index 90% rename from packages/ciphernode/fhe/src/fhe.rs rename to crates/fhe/src/fhe.rs index 8d72575b1e..12cb074e6d 100644 --- a/packages/ciphernode/fhe/src/fhe.rs +++ b/crates/fhe/src/fhe.rs @@ -1,12 +1,11 @@ use super::set_up_crp; use anyhow::*; use async_trait::async_trait; -use data::{FromSnapshotWithParams, Snapshot}; -use events::{OrderedSet, Seed}; +use e3_bfv_helpers::{build_bfv_params_arc, decode_bfv_params_arc}; +use e3_data::{FromSnapshotWithParams, Snapshot}; +use e3_events::{OrderedSet, Seed}; use fhe_rs::{ - bfv::{ - BfvParameters, BfvParametersBuilder, Ciphertext, Encoding, Plaintext, PublicKey, SecretKey, - }, + bfv::{BfvParameters, Ciphertext, Encoding, Plaintext, PublicKey, SecretKey}, mbfv::{AggregateIter, CommonRandomPoly, DecryptionShare, PublicKeyShare}, }; use fhe_traits::{Deserialize, DeserializeParametrized, FheDecoder, Serialize}; @@ -44,7 +43,7 @@ impl Fhe { } pub fn from_encoded(bytes: &[u8], seed: Seed, rng: SharedRng) -> Result { - let params = Arc::new(BfvParameters::try_deserialize(bytes)?); + let params = decode_bfv_params_arc(bytes); let crp = set_up_crp( params.clone(), Arc::new(Mutex::new(ChaCha20Rng::from_seed(seed.into()))), @@ -59,11 +58,7 @@ impl Fhe { crp: &[u8], rng: Arc>, ) -> Result { - let params = BfvParametersBuilder::new() - .set_degree(degree) - .set_plaintext_modulus(plaintext_modulus) - .set_moduli(moduli) - .build_arc()?; + let params = build_bfv_params_arc(degree, plaintext_modulus, moduli); Ok(Fhe::new( params.clone(), @@ -119,9 +114,13 @@ impl Fhe { .iter() .map(|k| DecryptionShare::deserialize(k, &self.params, arc_ct.clone())) .aggregate()?; - let decoded = Vec::::try_decode(&plaintext, Encoding::poly())?; - Ok(bincode::serialize(&decoded)?) + let mut bytes = Vec::with_capacity(decoded.len() * 8); + for value in decoded { + bytes.extend_from_slice(&value.to_le_bytes()); + } + + Ok(bytes) } } diff --git a/packages/ciphernode/fhe/src/lib.rs b/crates/fhe/src/lib.rs similarity index 100% rename from packages/ciphernode/fhe/src/lib.rs rename to crates/fhe/src/lib.rs diff --git a/packages/ciphernode/fhe/src/repo.rs b/crates/fhe/src/repo.rs similarity index 77% rename from packages/ciphernode/fhe/src/repo.rs rename to crates/fhe/src/repo.rs index b7ef37e43a..09a5052923 100644 --- a/packages/ciphernode/fhe/src/repo.rs +++ b/crates/fhe/src/repo.rs @@ -1,6 +1,6 @@ -use config::StoreKeys; -use data::{Repositories, Repository}; -use events::E3id; +use e3_config::StoreKeys; +use e3_data::{Repositories, Repository}; +use e3_events::E3id; use crate::FheSnapshot; diff --git a/packages/ciphernode/fhe/src/utils.rs b/crates/fhe/src/utils.rs similarity index 95% rename from packages/ciphernode/fhe/src/utils.rs rename to crates/fhe/src/utils.rs index c98b0e501d..84b10ceab6 100644 --- a/packages/ciphernode/fhe/src/utils.rs +++ b/crates/fhe/src/utils.rs @@ -1,5 +1,5 @@ use super::SharedRng; -use commons::bfv::build_bfv_params_arc; +use e3_bfv_helpers::build_bfv_params_arc; use fhe_rs::bfv::BfvParameters; use fhe_rs::mbfv::CommonRandomPoly; use fhe_traits::Serialize; diff --git a/crates/fs/Cargo.toml b/crates/fs/Cargo.toml new file mode 100644 index 0000000000..96707d6b78 --- /dev/null +++ b/crates/fs/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "e3-fs" +version.workspace = true +edition.workspace = true +license.workspace = true +description.workspace = true +repository.workspace = true + +[dependencies] +vfs.workspace = true +async-trait.workspace = true +anyhow.workspace = true +futures.workspace = true +tokio.workspace = true +glob.workspace = true +regex.workspace = true diff --git a/crates/fs/src/fs.rs b/crates/fs/src/fs.rs new file mode 100644 index 0000000000..3eeb6b605d --- /dev/null +++ b/crates/fs/src/fs.rs @@ -0,0 +1,332 @@ +use crate::traits::{DirectoryManager, FileCopier, FileFinder, FileReader, FileWriter, Replacer}; +use anyhow::Result; +use futures::io::AsyncWriteExt; +use futures::stream::StreamExt; +use glob::Pattern; +use regex::Regex; +use std::path::Path; +use vfs::async_vfs::{AsyncMemoryFS, AsyncPhysicalFS, AsyncVfsPath}; + +pub struct Fs { + root: AsyncVfsPath, +} + +impl Fs { + pub fn new(root: AsyncVfsPath) -> Self { + Self { root } + } + + pub fn mem() -> Self { + let fs = AsyncMemoryFS::new(); + Self::new(fs.into()) + } + + pub fn physical_path>(root_path: P) -> Result { + let fs = AsyncPhysicalFS::new(root_path.as_ref()); + Ok(Self::new(fs.into())) + } + + pub fn physical() -> Result { + Ok(Self::physical_path("/")?) + } +} + +#[async_trait::async_trait] +impl FileReader for Fs { + async fn read_to_string + Send>(&self, path: P) -> Result { + let file_path = self.root.join(path.as_ref().to_string_lossy().as_ref())?; + let contents = file_path.read_to_string().await?; + Ok(contents) + } +} + +#[async_trait::async_trait] +impl FileWriter for Fs { + async fn write_to_file + Send>(&self, path: P, content: &str) -> Result<()> { + let file_path = self.root.join(path.as_ref().to_string_lossy().as_ref())?; + let mut file = file_path.create_file().await?; + file.write_all(content.as_bytes()).await?; + Ok(()) + } +} + +#[async_trait::async_trait] +impl DirectoryManager for Fs { + async fn mkdirp + Send>(&self, dest_path: P) -> Result<()> { + let dir_path = self + .root + .join(dest_path.as_ref().to_string_lossy().as_ref())?; + dir_path.create_dir_all().await?; + Ok(()) + } +} + +#[async_trait::async_trait] +impl FileCopier for Fs { + async fn cp + Send, P2: AsRef + Send>( + &self, + src_path: P1, + dest_path: P2, + ) -> Result<()> { + let src_str = src_path.as_ref().to_string_lossy(); + let copy_contents_only = src_str.ends_with("/."); + + let actual_src = if copy_contents_only { + let trimmed: &str = src_str.trim_end_matches("/.").as_ref(); + self.root.join(trimmed)? + } else { + self.root.join(src_str.as_ref())? + }; + + let dest = self + .root + .join(dest_path.as_ref().to_string_lossy().as_ref())?; + + if actual_src.is_file().await? { + actual_src.copy_file(&dest).await?; + } else if actual_src.is_dir().await? { + if copy_contents_only { + copy_dir_contents(&actual_src, &dest).await?; + } else { + actual_src.copy_dir(&dest).await?; + } + } + + Ok(()) + } +} + +async fn copy_dir_contents( + src_dir: &vfs::async_vfs::AsyncVfsPath, + dest_dir: &vfs::async_vfs::AsyncVfsPath, +) -> Result<()> { + if !dest_dir.exists().await? { + dest_dir.create_dir_all().await?; + } + + let entries = src_dir.read_dir().await?; + let all_entries: Vec<_> = entries.collect().await; + + for entry in all_entries { + let entry_name = entry.filename(); + let src_entry = src_dir.join(&entry_name)?; + let dest_entry = dest_dir.join(&entry_name)?; + + if src_entry.is_file().await? { + src_entry.copy_file(&dest_entry).await?; + } else if src_entry.is_dir().await? { + src_entry.copy_dir(&dest_entry).await?; + } + } + + Ok(()) +} + +#[async_trait::async_trait] +impl FileFinder for Fs { + async fn find_files + Send>( + &self, + in_folder: P, + glob_pattern: &str, + ) -> Result> { + let folder_path = self + .root + .join(in_folder.as_ref().to_string_lossy().as_ref())?; + + let pattern = Pattern::new(glob_pattern)?; + let mut matching_files = Vec::new(); + + println!("Folder Path: {}", folder_path.as_str()); + println!("Pattern: {pattern}"); + + let all_entries: Vec<_> = folder_path + .walk_dir() + .await? + .map(|res| res.unwrap()) + .collect::>() + .await; + println!("ALL ENTRIES: {:?}", all_entries); + for entry in all_entries { + if entry.is_file().await? { + let filename = entry.as_str(); + println!("entry is file for {filename}"); + if pattern.matches(filename) { + matching_files.push(entry.as_str().to_string()); + } + } + } + Ok(matching_files) + } +} + +#[async_trait::async_trait] +impl Replacer for Fs { + async fn replace_in_place + Send + Sync>( + &self, + pattern: &Regex, + replacement: &str, + file_path: P, + ) -> Result<()> { + println!( + "replace_in_place({:?},{:?},{:?})", + &pattern, + &replacement, + file_path.as_ref() + ); + let content = self.read_to_string(&file_path).await?; + let new_content = pattern.replace_all(&content, replacement); + if content != new_content { + self.write_to_file(file_path, &new_content).await?; + } else { + println!("No change made to {:?}", file_path.as_ref()); + } + Ok(()) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use anyhow::Result; + + #[tokio::test] + async fn test_write_and_read_file() -> Result<()> { + // Create an in-memory filesystem + // let memory_fs = AsyncMemoryFS::new(); + let fs = Fs::mem(); + + // Test data + let test_path = "test_file.txt"; + let test_content = "Hello, World!\nThis is a test file."; + + // Write the file + fs.write_to_file(test_path, test_content).await?; + + // Read the file back + let read_content = fs.read_to_string(test_path).await?; + + // Verify the content matches + assert_eq!(read_content, test_content); + + Ok(()) + } + + #[tokio::test] + async fn test_mkdirp_creates_directory() -> Result<()> { + // Create an in-memory filesystem + let fs = Fs::mem(); + + let test_dir = "some/deep/nested/directory"; + + // Create the directory structure + fs.mkdirp(test_dir).await?; + + // Verify the directory was created by checking if it exists + let dir_path = fs.root.join(test_dir)?; + assert!(dir_path.exists().await?); + + Ok(()) + } + + #[tokio::test] + async fn test_cp_recursive_copy() -> Result<()> { + // Create an in-memory filesystem + let fs = Fs::mem(); + + // Set up source directory structure with files + fs.mkdirp("src/subdir").await?; + fs.write_to_file("src/file1.txt", "content of file1") + .await?; + fs.write_to_file("src/subdir/file2.txt", "content of file2") + .await?; + + // Copy the entire directory structure + fs.cp("src", "dest").await?; + + // Verify the destination structure was created + let dest_path = fs.root.join("dest")?; + assert!(dest_path.exists().await?); + assert!(dest_path.is_dir().await?); + + // Verify files were copied + let file1_content = fs.read_to_string("dest/file1.txt").await?; + assert_eq!(file1_content, "content of file1"); + + let file2_content = fs.read_to_string("dest/subdir/file2.txt").await?; + assert_eq!(file2_content, "content of file2"); + + Ok(()) + } + + #[tokio::test] + async fn test_find_files_with_glob_pattern() -> Result<()> { + // Create an in-memory filesystem + let fs = Fs::mem(); + + // Create a deeply nested folder structure with various files + fs.mkdirp("project/src/utils").await?; + fs.mkdirp("project/src/components").await?; + fs.mkdirp("project/tests").await?; + + // Create files with different extensions + fs.write_to_file("project/src/main.rs", "fn main() {}") + .await?; + fs.write_to_file("project/src/lib.rs", "pub mod utils;") + .await?; + fs.write_to_file("project/src/utils/helper.rs", "pub fn help() {}") + .await?; + fs.write_to_file("project/src/components/button.rs", "struct Button {}") + .await?; + fs.write_to_file("project/tests/integration.rs", "#[test] fn test() {}") + .await?; + fs.write_to_file("project/Cargo.toml", "[package]").await?; + fs.write_to_file("project/README.md", "# Project").await?; + + // Find all .rs files + let rust_files = fs.find_files("project", "*.rs").await?; + + // Verify we found all Rust files + assert_eq!(rust_files.len(), 5); + assert!(rust_files.contains(&"/project/src/main.rs".to_string())); + assert!(rust_files.contains(&"/project/src/lib.rs".to_string())); + assert!(rust_files.contains(&"/project/src/utils/helper.rs".to_string())); + assert!(rust_files.contains(&"/project/src/components/button.rs".to_string())); + assert!(rust_files.contains(&"/project/tests/integration.rs".to_string())); + + // Find files with specific pattern + let toml_files = fs.find_files("project", "*.toml").await?; + assert_eq!(toml_files.len(), 1); + assert!(toml_files.contains(&"/project/Cargo.toml".to_string())); + + Ok(()) + } + + #[tokio::test] + async fn test_replace_in_place() -> Result<()> { + // Create an in-memory filesystem + let fs = Fs::mem(); + + // Create a test file with content to replace + let test_path = "config.txt"; + let original_content = + "server_url=localhost:8080\napi_version=v1\nserver_url=example.com:9090"; + fs.write_to_file(test_path, original_content).await?; + + // Create a regex pattern to replace all server_url values + let pattern = Regex::new(r"server_url=([^\n]+)")?; + let replacement = "server_url=production.example.com:443"; + + // Apply the replacement + fs.replace_in_place(&pattern, replacement, test_path) + .await?; + + // Read the modified content + let modified_content = fs.read_to_string(test_path).await?; + + // Verify the replacements were made + let expected_content = "server_url=production.example.com:443\napi_version=v1\nserver_url=production.example.com:443"; + assert_eq!(modified_content, expected_content); + + Ok(()) + } +} diff --git a/crates/fs/src/lib.rs b/crates/fs/src/lib.rs new file mode 100644 index 0000000000..c7c0969f99 --- /dev/null +++ b/crates/fs/src/lib.rs @@ -0,0 +1,5 @@ +mod fs; +pub mod prelude; +mod traits; + +pub use fs::*; diff --git a/crates/fs/src/prelude.rs b/crates/fs/src/prelude.rs new file mode 100644 index 0000000000..b3f8e57333 --- /dev/null +++ b/crates/fs/src/prelude.rs @@ -0,0 +1,3 @@ +pub use crate::traits::{ + DirectoryManager, FileCopier, FileFinder, FileReader, FileWriter, Replacer, +}; diff --git a/crates/fs/src/traits.rs b/crates/fs/src/traits.rs new file mode 100644 index 0000000000..b062209656 --- /dev/null +++ b/crates/fs/src/traits.rs @@ -0,0 +1,46 @@ +use anyhow::Result; +use regex::Regex; +use std::path::Path; + +#[async_trait::async_trait] +pub trait FileReader { + async fn read_to_string + Send + Sync>(&self, path: P) -> Result; +} + +#[async_trait::async_trait] +pub trait FileWriter { + async fn write_to_file + Send>(&self, path: P, content: &str) -> Result<()>; +} + +#[async_trait::async_trait] +pub trait DirectoryManager { + async fn mkdirp + Send>(&self, dest_path: P) -> Result<()>; +} + +#[async_trait::async_trait] +pub trait FileCopier { + async fn cp + Send, P2: AsRef + Send>( + &self, + src_path: P1, + dest_path: P2, + ) -> Result<()>; +} + +#[async_trait::async_trait] +pub trait FileFinder { + async fn find_files + Send>( + &self, + in_folder: P, + glob_pattern: &str, + ) -> Result>; +} + +#[async_trait::async_trait] +pub trait Replacer { + async fn replace_in_place + Send + Sync>( + &self, + pattern: &Regex, + replacement: &str, + file_path: P, + ) -> Result<()>; +} diff --git a/crates/indexer/Cargo.toml b/crates/indexer/Cargo.toml new file mode 100644 index 0000000000..392c3cb075 --- /dev/null +++ b/crates/indexer/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "e3-indexer" +version = "0.1.0" +edition.workspace = true +license.workspace = true +description = "E3 - A indexer for Enclave" +repository = "https://github.com/gnosisguild/enclave/crates/indexer" + +[dependencies] +alloy.workspace = true +async-trait.workspace = true +bincode.workspace = true +e3-evm-helpers.workspace = true +eyre.workspace = true +serde.workspace = true +thiserror.workspace = true +tokio.workspace = true diff --git a/crates/indexer/scripts/build_fixtures.sh b/crates/indexer/scripts/build_fixtures.sh new file mode 100755 index 0000000000..2e037393dd --- /dev/null +++ b/crates/indexer/scripts/build_fixtures.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash +set -e + +echo "Building fixtures for all Solidity files..." + +# Folder containing the .sol files +SOLIDITY_DIR="tests/fixtures" + +# For each .sol file in the directory +for solidity_file in "$SOLIDITY_DIR"/*.sol; do + # Extract just the filename without path or extension + filename=$(basename "$solidity_file" .sol) + + echo "Processing $filename.sol..." + + # Create the JSON file with ABI and bytecode + echo "{\"abi\": $(solc --abi "$solidity_file" | tail -n 1), \"bin\": \"$(solc --bin "$solidity_file" | tail -n 1)\"}" | jq '.' > "$SOLIDITY_DIR/$filename.json" + + echo "Created $filename.json" +done + +echo "All fixtures built successfully." diff --git a/crates/indexer/src/indexer.rs b/crates/indexer/src/indexer.rs new file mode 100644 index 0000000000..00da9dbb77 --- /dev/null +++ b/crates/indexer/src/indexer.rs @@ -0,0 +1,388 @@ +use crate::E3Repository; + +use super::{models::E3, DataStore}; +use alloy::hex; +use alloy::primitives::Uint; +use alloy::providers::Provider; +use alloy::sol_types::SolEvent; +use async_trait::async_trait; +use e3_evm_helpers::{ + contracts::{EnclaveContract, EnclaveContractFactory, EnclaveRead, ReadOnly}, + events::{CiphertextOutputPublished, E3Activated, InputPublished, PlaintextOutputPublished}, + listener::EventListener, +}; +use eyre::eyre; +use eyre::Result; +use serde::{de::DeserializeOwned, Serialize}; +use std::future::Future; +use std::{collections::HashMap, sync::Arc}; +use thiserror::Error; +use tokio::sync::RwLock; +use tokio::task::JoinHandle; + +type E3Id = u64; + +#[derive(Error, Debug)] +pub enum IndexerError { + #[error("E3 not found: {0}")] + E3NotFound(E3Id), + #[error("Object not serializable: {0}")] + Serialization(E3Id), +} + +pub struct InMemoryStore { + data: HashMap>, +} + +impl InMemoryStore { + pub fn new() -> Self { + Self { + data: HashMap::new(), + } + } +} + +#[async_trait] +impl DataStore for InMemoryStore { + type Error = eyre::Error; + + async fn insert( + &mut self, + key: &str, + value: &T, + ) -> Result<(), Self::Error> { + self.data + .insert(key.to_string(), bincode::serialize(value)?); + Ok(()) + } + + async fn get( + &self, + key: &str, + ) -> Result, Self::Error> { + Ok(self + .data + .get(key) + .map(|bytes| bincode::deserialize(bytes)) + .transpose()?) + } + + async fn modify(&mut self, key: &str, mut f: F) -> Result, Self::Error> + where + T: Serialize + DeserializeOwned + Send + Sync, + F: FnMut(Option) -> Option + Send, + { + let current = self + .data + .get(key) + .and_then(|bytes| bincode::deserialize(bytes).ok()); + + match f(current) { + Some(new_value) => { + self.data + .insert(key.to_string(), bincode::serialize(&new_value)?); + Ok(Some(new_value)) + } + None => { + self.data.remove(key); + Ok(None) + } + } + } +} + +pub struct SharedStore { + inner: Arc>, +} + +impl Clone for SharedStore { + fn clone(&self) -> Self { + SharedStore { + inner: Arc::clone(&self.inner), + } + } +} + +impl SharedStore { + pub fn new(inner: Arc>) -> SharedStore { + Self { inner } + } +} + +#[async_trait] +impl DataStore for SharedStore { + type Error = S::Error; + async fn insert( + &mut self, + key: &str, + value: &T, + ) -> Result<(), Self::Error> { + self.inner.write().await.insert(key, value).await + } + + async fn get( + &self, + key: &str, + ) -> Result, Self::Error> { + self.inner.read().await.get(key).await + } + + async fn modify(&mut self, key: &str, f: F) -> Result, Self::Error> + where + T: Serialize + DeserializeOwned + Send + Sync, + F: FnMut(Option) -> Option + Send, + { + self.inner.write().await.modify(key, f).await + } +} + +#[derive(Clone)] +pub struct EnclaveIndexer { + listener: EventListener, + contract: EnclaveContract, + store: Arc>, + contract_address: String, + chain_id: u64, +} + +impl EnclaveIndexer { + pub async fn new_with_in_mem_store( + listener: EventListener, + contract: EnclaveContract, + ) -> Result> { + let store = InMemoryStore::new(); + + EnclaveIndexer::new(listener, contract, store).await + } + + pub async fn from_endpoint_address_in_mem( + ws_url: &str, + contract_address: &str, + ) -> Result> { + let listener = EventListener::create_contract_listener(ws_url, contract_address).await?; + let contract = EnclaveContractFactory::create_read(ws_url, contract_address).await?; + EnclaveIndexer::::new_with_in_mem_store(listener, contract).await + } +} + +impl EnclaveIndexer { + pub async fn new( + listener: EventListener, + contract: EnclaveContract, + store: S, + ) -> Result { + let chain_id = contract.provider.get_chain_id().await?; + let contract_address = contract.address().to_string(); + let mut instance = Self { + store: Arc::new(RwLock::new(store)), + contract, + listener, + contract_address, + chain_id, + }; + instance.setup_listeners().await?; + Ok(instance) + } + + pub async fn from_endpoint_address( + ws_url: &str, + contract_address: &str, + store: S, + ) -> Result { + let listener = EventListener::create_contract_listener(ws_url, contract_address).await?; + let contract = EnclaveContractFactory::create_read(ws_url, contract_address).await?; + EnclaveIndexer::new(listener, contract, store).await + } + + pub async fn add_event_handler(&mut self, handler: F) + where + E: SolEvent + Send + Clone + 'static, + F: Fn(E, SharedStore) -> Fut + Send + Sync + 'static, + Fut: Future> + Send + 'static, + { + let store = SharedStore::new(self.store.clone()); + let handler = Arc::new(handler); + self.listener + .add_event_handler(move |e: E| { + let handler = Arc::clone(&handler); + let store = store.clone(); + async move { handler(e, store).await } + }) + .await; + } + + async fn register_e3_activated(&mut self) -> Result<()> { + let db = self.store.clone(); + let contract = self.contract.clone(); + let chain_id = self.chain_id; + let enclave_address = self.contract_address.clone(); + self.listener + .add_event_handler(move |e: E3Activated| { + let db = SharedStore::new(db.clone()); + let enclave_address = enclave_address.clone(); + let contract = contract.clone(); + + async move { + println!( + "E3Activated: id={}, expiration={}, pubkey=0x{}...", + e.e3Id, + e.expiration, + hex::encode(&e.committeePublicKey[..8.min(e.committeePublicKey.len())]) + ); + let e3_id = u64_try_from(e.e3Id)?; + let e3 = contract.get_e3(e.e3Id).await?; + let duration = u64_try_from(e3.duration)?; + let expiration = u64_try_from(e.expiration)?; + let seed = e3.seed.to_be_bytes(); + let request_block = u64_try_from(e3.requestBlock)?; + let start_window = [ + u64_try_from(e3.startWindow[0])?, + u64_try_from(e3.startWindow[1])?, + ]; + // NOTE: we are only saving protocol specific info + // here and not CRISP specific info so E3 corresponds to the solidity E3 + let e3_obj = E3 { + chain_id, + ciphertext_inputs: vec![], + ciphertext_output: vec![], + committee_public_key: e.committeePublicKey.to_vec(), + duration, + e3_params: e3.e3ProgramParams.to_vec(), + enclave_address, + encryption_scheme_id: e3.encryptionSchemeId.to_vec(), + expiration, + id: e3_id, + plaintext_output: vec![], + request_block, + seed, + start_window, + threshold: e3.threshold, + }; + + let mut repo = E3Repository::new(db, e3_id); + + repo.set_e3(e3_obj).await?; + Ok(()) + } + }) + .await; + Ok(()) + } + + async fn register_input_published(&mut self) -> Result<()> { + let store = self.store.clone(); + self.listener + .add_event_handler(move |e: InputPublished| { + let store = SharedStore::new(store.clone()); + async move { + println!( + "InputPublished: e3_id={}, index={}, data=0x{}...", + e.e3Id, + e.index, + hex::encode(&e.data[..8.min(e.data.len())]) + ); + let e3_id = u64_try_from(e.e3Id)?; + + let mut repo = E3Repository::new(store, e3_id); + repo.insert_ciphertext_input(e.data.to_vec(), e.index.to::()) + .await?; + Ok(()) + } + }) + .await; + Ok(()) + } + + async fn register_ciphertext_output_published(&mut self) -> Result<()> { + let store = self.store.clone(); + self.listener + .add_event_handler(move |e: CiphertextOutputPublished| { + let store = SharedStore::new(store.clone()); + async move { + println!( + "CiphertextOutputPublished: e3_id={}, output=0x{}...", + e.e3Id, + hex::encode(&e.ciphertextOutput[..8.min(e.ciphertextOutput.len())]) + ); + let e3_id = u64_try_from(e.e3Id)?; + + let mut repo = E3Repository::new(store, e3_id); + repo.set_ciphertext_output(e.ciphertextOutput.to_vec()) + .await?; + + Ok(()) + } + }) + .await; + Ok(()) + } + + async fn register_plaintext_output_published(&mut self) -> Result<()> { + let store = self.store.clone(); + self.listener + .add_event_handler(move |e: PlaintextOutputPublished| { + let store = SharedStore::new(store.clone()); + async move { + println!( + "PlaintextOutputPublished: e3_id={}, output=0x{}...", + e.e3Id, + hex::encode(&e.plaintextOutput[..8.min(e.plaintextOutput.len())]) + ); + let e3_id = u64_try_from(e.e3Id)?; + let mut repo = E3Repository::new(store, e3_id); + repo.set_plaintext_output(e.plaintextOutput.to_vec()) + .await?; + + Ok(()) + } + }) + .await; + Ok(()) + } + + async fn setup_listeners(&mut self) -> Result<()> { + self.register_e3_activated().await?; + self.register_input_published().await?; + self.register_ciphertext_output_published().await?; + self.register_plaintext_output_published().await?; + Ok(()) + } + + pub fn start(&self) -> JoinHandle> { + self.listener.start() + } + + pub async fn get_e3(&self, e3_id: u64) -> Result { + let (e3, _) = get_e3(self.store.clone(), e3_id).await?; + Ok(e3) + } + + pub fn get_listener(&self) -> EventListener { + self.listener.clone() + } + + pub fn get_store(&self) -> SharedStore { + SharedStore::new(self.store.clone()) + } +} + +pub async fn get_e3( + store: Arc>, + e3_id: u64, +) -> Result<(E3, String), IndexerError> { + let key = format!("_e3:{}", e3_id); + match store + .read() + .await + .get::(&key) + .await + .map_err(|_| IndexerError::Serialization(e3_id))? + { + Some(e3) => Ok((e3, key)), + None => Err(IndexerError::E3NotFound(e3_id)), + } +} + +fn u64_try_from(input: Uint<256, 4>) -> Result { + u64::try_from(input).map_err(|_| eyre!("larger than 64-bit")) +} diff --git a/crates/indexer/src/lib.rs b/crates/indexer/src/lib.rs new file mode 100644 index 0000000000..ff86f2540e --- /dev/null +++ b/crates/indexer/src/lib.rs @@ -0,0 +1,7 @@ +mod indexer; +pub mod models; +mod repo; +mod traits; +pub use indexer::*; +pub use repo::*; +pub use traits::*; diff --git a/crates/indexer/src/models.rs b/crates/indexer/src/models.rs new file mode 100644 index 0000000000..16303a06de --- /dev/null +++ b/crates/indexer/src/models.rs @@ -0,0 +1,22 @@ +use serde::{Deserialize, Serialize}; + +// This correlates with the information from the contract +// with an addition of a chain_id +#[derive(Debug, Deserialize, Serialize)] +pub struct E3 { + pub chain_id: u64, + pub ciphertext_inputs: Vec<(Vec, u64)>, + pub ciphertext_output: Vec, + pub committee_public_key: Vec, + pub duration: u64, + pub e3_params: Vec, + pub enclave_address: String, + pub encryption_scheme_id: Vec, + pub expiration: u64, + pub id: u64, + pub plaintext_output: Vec, + pub request_block: u64, + pub seed: [u8; 32], + pub start_window: [u64; 2], + pub threshold: [u32; 2], +} diff --git a/crates/indexer/src/repo.rs b/crates/indexer/src/repo.rs new file mode 100644 index 0000000000..5115dbbe0f --- /dev/null +++ b/crates/indexer/src/repo.rs @@ -0,0 +1,79 @@ +use super::{models::E3, DataStore, SharedStore}; +use eyre::Result; + +pub struct E3Repository { + store: SharedStore, + e3_id: u64, +} + +impl E3Repository { + pub fn new(store: SharedStore, e3_id: u64) -> Self { + Self { store, e3_id } + } + + pub async fn set_e3(&mut self, value: E3) -> Result<()> { + let key = self.e3_key(); + self.store + .insert(&key, &value) + .await + .map_err(|e| eyre::eyre!("Could not store E3 at '{key}' due to error: {e}"))?; + Ok(()) + } + + pub async fn get_e3(&self) -> Result { + let key = self.e3_key(); + let e3_crisp = self + .store + .get::(&key) + .await + .map_err(|e| eyre::eyre!("Could get crisp at '{key}' due to error: {e}"))? + .ok_or(eyre::eyre!("No data found at {key}"))?; + Ok(e3_crisp) + } + pub async fn insert_ciphertext_input(&mut self, data: Vec, index: u64) -> Result<()> { + let key = self.e3_key(); + self.store + .modify(&key, |e3_obj: Option| { + e3_obj.map(|mut e| { + e.ciphertext_inputs.push((data.clone(), index)); + e + }) + }) + .await + .map_err(|_| eyre::eyre!("Could not append ciphertext_input for '{key}'"))?; + + Ok(()) + } + pub async fn set_plaintext_output(&mut self, data: Vec) -> Result<()> { + let key = self.e3_key(); + self.store + .modify(&key, |e3_obj: Option| { + e3_obj.map(|mut e| { + e.plaintext_output = data.clone(); + e + }) + }) + .await + .map_err(|_| eyre::eyre!("Could not append ciphertext_input for '{key}'"))?; + Ok(()) + } + + pub async fn set_ciphertext_output(&mut self, data: Vec) -> Result<()> { + let key = self.e3_key(); + self.store + .modify(&key, |e3_obj: Option| { + e3_obj.map(|mut e| { + e.ciphertext_output = data.clone(); + e + }) + }) + .await + .map_err(|_| eyre::eyre!("Could not append ciphertext_input for '{key}'"))?; + Ok(()) + } + + fn e3_key(&self) -> String { + let e3_id = self.e3_id; + format!("_e3:{e3_id}") + } +} diff --git a/crates/indexer/src/traits.rs b/crates/indexer/src/traits.rs new file mode 100644 index 0000000000..5d107d21f1 --- /dev/null +++ b/crates/indexer/src/traits.rs @@ -0,0 +1,22 @@ +use async_trait::async_trait; +use serde::{de::DeserializeOwned, Serialize}; +use std::fmt::Display; + +/// Trait for injectable DataStore. Note the implementor must manage interior mutability +#[async_trait] +pub trait DataStore: Send + Sync + 'static { + type Error: Display; + async fn insert( + &mut self, + key: &str, + value: &T, + ) -> Result<(), Self::Error>; + async fn get( + &self, + key: &str, + ) -> Result, Self::Error>; + async fn modify(&mut self, key: &str, f: F) -> Result, Self::Error> + where + T: Serialize + DeserializeOwned + Send + Sync, + F: FnMut(Option) -> Option + Send; +} diff --git a/crates/indexer/tests/fixtures/.gitignore b/crates/indexer/tests/fixtures/.gitignore new file mode 100644 index 0000000000..8dd919b529 --- /dev/null +++ b/crates/indexer/tests/fixtures/.gitignore @@ -0,0 +1,2 @@ +# ignore .json +*.json diff --git a/crates/indexer/tests/fixtures/emit_logs.sol b/crates/indexer/tests/fixtures/emit_logs.sol new file mode 100644 index 0000000000..cc393012b0 --- /dev/null +++ b/crates/indexer/tests/fixtures/emit_logs.sol @@ -0,0 +1,28 @@ +pragma solidity >=0.4.24; + +contract EmitLogs { + event ValueChanged(address indexed author, uint256 count, string value); + event PublishMessage(string value); + + string _value; + + uint256 count = 0; + + constructor() { + _value = ""; + } + + function getValue() public view returns (string memory) { + return _value; + } + + function setValue(string memory value) public { + count++; + emit ValueChanged(msg.sender, count, value); + _value = value; + } + + function emitPublishMessage(string memory value) public { + emit PublishMessage(value); + } +} diff --git a/crates/indexer/tests/fixtures/fake_enclave.sol b/crates/indexer/tests/fixtures/fake_enclave.sol new file mode 100644 index 0000000000..469547e291 --- /dev/null +++ b/crates/indexer/tests/fixtures/fake_enclave.sol @@ -0,0 +1,100 @@ +pragma solidity >=0.4.24; + +contract FakeEnclave { + event E3Activated( + uint256 e3Id, + uint256 expiration, + bytes committeePublicKey + ); + event InputPublished( + uint256 indexed e3Id, + bytes data, + uint256 inputHash, + uint256 index + ); + event CiphertextOutputPublished( + uint256 indexed e3Id, + bytes ciphertextOutput + ); + event PlaintextOutputPublished(uint256 indexed e3Id, bytes plaintextOutput); + event CommitteePublished(uint256 indexed e3Id, bytes publicKey); + + // Emit E3Activated event with passed test data + function emitE3Activated( + uint256 e3Id, + uint256 expiration, + bytes memory committeePublicKey + ) public { + emit E3Activated(e3Id, expiration, committeePublicKey); + } + + // Emit InputPublished event with passed test data + function emitInputPublished( + uint256 e3Id, + bytes memory data, + uint256 inputHash, + uint256 index + ) public { + emit InputPublished(e3Id, data, inputHash, index); + } + + // Emit CiphertextOutputPublished event with passed test data + function emitCiphertextOutputPublished( + uint256 e3Id, + bytes memory ciphertextOutput + ) public { + emit CiphertextOutputPublished(e3Id, ciphertextOutput); + } + + // Emit PlaintextOutputPublished event with passed test data + function emitPlaintextOutputPublished( + uint256 e3Id, + bytes memory plaintextOutput + ) public { + emit PlaintextOutputPublished(e3Id, plaintextOutput); + } + + // Emit CommitteePublished event with passed test data + function emitCommitteePublished( + uint256 e3Id, + bytes memory publicKey + ) public { + emit CommitteePublished(e3Id, publicKey); + } + + function getE3(uint256 _e3Id) external view returns (E3 memory e3) { + e3 = E3({ + seed: 123456789012, + threshold: [uint32(2), uint32(3)], + requestBlock: 18750000, + startWindow: [uint256(18750100), uint256(18750200)], + duration: 100, + expiration: block.timestamp + 1 days, + encryptionSchemeId: bytes32(keccak256("AES-256-GCM")), + e3Program: 0x7F3E4df648B8Cb96C1D343be976b91B97CaD5c21, + inputValidator: 0xA51D5E87c0C82dDEBfa4E7E515B2D8Eea8f3e4f2, + decryptionVerifier: 0x4B0D8c2E5f7a6c832f8b16d3aB0e7F5d9E9B24b1, + e3ProgramParams: abi.encode(42, "testParams"), + committeePublicKey: bytes32(keccak256("committee_public_key")), + ciphertextOutput: bytes32(keccak256("encrypted_data")), + plaintextOutput: abi.encode("decrypted_result") + }); + } +} + +struct E3 { + uint256 seed; + uint32[2] threshold; + uint256 requestBlock; + uint256[2] startWindow; + uint256 duration; + uint256 expiration; + bytes32 encryptionSchemeId; + address e3Program; + bytes e3ProgramParams; + address inputValidator; + address decryptionVerifier; + bytes32 committeePublicKey; + bytes32 ciphertextOutput; + bytes plaintextOutput; +} diff --git a/crates/indexer/tests/helpers.rs b/crates/indexer/tests/helpers.rs new file mode 100644 index 0000000000..bb796ffd54 --- /dev/null +++ b/crates/indexer/tests/helpers.rs @@ -0,0 +1,48 @@ +// helpers.rs +use alloy::{ + network::Ethereum, + node_bindings::{Anvil, AnvilInstance}, + providers::{Provider, ProviderBuilder, WsConnect}, + signers::local::PrivateKeySigner, + sol, +}; +use eyre::Result; +use EmitLogs::EmitLogsInstance; +use Enclave::EnclaveInstance; + +sol!( + #[sol(rpc)] + Enclave, + "tests/fixtures/fake_enclave.json" +); + +sol!( + #[sol(rpc)] + EmitLogs, + "tests/fixtures/emit_logs.json" +); + +pub async fn setup_fake_enclave() -> Result<( + EnclaveInstance, + String, + String, + AnvilInstance, +)> { + let (provider, endpoint, anvil) = setup_provider().await?; + let contract = Enclave::deploy(provider).await?; + let address = contract.address().to_string(); + Ok((contract, address, endpoint, anvil)) +} + +pub async fn setup_provider() -> Result<(impl Provider, String, AnvilInstance)> { + // Set anvil with fast blocktimes for testing + let anvil = Anvil::new().block_time_f64(0.01).try_spawn()?; + + let provider = ProviderBuilder::new() + .wallet(PrivateKeySigner::from_slice(&anvil.keys()[0].to_bytes())?) + .connect_ws(WsConnect::new(anvil.ws_endpoint())) + .await?; + + let endpoint = anvil.ws_endpoint(); + Ok((provider, endpoint, anvil)) +} diff --git a/crates/indexer/tests/indexer.rs b/crates/indexer/tests/indexer.rs new file mode 100644 index 0000000000..7f5689c8b4 --- /dev/null +++ b/crates/indexer/tests/indexer.rs @@ -0,0 +1,126 @@ +mod helpers; +use alloy::{ + primitives::{Bytes, Uint}, + sol, +}; +use e3_indexer::{DataStore, EnclaveIndexer, InMemoryStore}; +use eyre::Result; +use helpers::setup_fake_enclave; +use std::time::Duration; +use tokio::time::sleep; +use Enclave::InputPublished; + +sol!( + #[sol(rpc)] + Enclave, + "tests/fixtures/fake_enclave.json" +); + +#[tokio::test] +async fn test_indexer() -> Result<()> { + let (contract, address, endpoint, _anvil) = setup_fake_enclave().await?; + let address = address.to_string(); + let endpoint = endpoint.to_string(); + + let mut indexer = + EnclaveIndexer::::from_endpoint_address_in_mem(&endpoint, &address).await?; + + indexer + .add_event_handler(move |_: InputPublished, mut store| async move { + store + .modify("input_count", |counter: Option| { + Some(counter.map_or(1, |c| c + 1)) + }) + .await?; + + Ok(()) + }) + .await; + + // Start tracking state + let _ = indexer.start(); + + // E3Activated + let e3_id = 10; + + let pubkey = vec![1, 2, 3, 4, 5, 6, 7, 8, 9]; + contract + .emitE3Activated( + Uint::from(e3_id), + Uint::from(10), + Bytes::from(pubkey.clone()), + ) + .send() + .await? + .watch() + .await?; + + // InputPublished + let data = "Random data that wont actually be a string".to_string(); + contract + .emitInputPublished( + Uint::from(e3_id), + Bytes::from(data.clone().into_bytes()), + Uint::from(1111), + Uint::from(1), + ) + .send() + .await? + .watch() + .await?; + + contract + .emitInputPublished( + Uint::from(e3_id), + Bytes::from(data.clone().into_bytes()), + Uint::from(2222), + Uint::from(2), + ) + .send() + .await? + .watch() + .await?; + + contract + .emitInputPublished( + Uint::from(e3_id), + Bytes::from(data.clone().into_bytes()), + Uint::from(3333), + Uint::from(3), + ) + .send() + .await? + .watch() + .await?; + + sleep(Duration::from_millis(10)).await; + + assert_eq!(indexer.get_e3(e3_id).await?.ciphertext_inputs.len(), 3); + assert_eq!( + indexer.get_e3(e3_id).await?.ciphertext_inputs, + vec![ + (Bytes::from(data.clone().into_bytes()).to_vec(), 1), + (Bytes::from(data.clone().into_bytes()).to_vec(), 2), + (Bytes::from(data.clone().into_bytes()).to_vec(), 3), + ] + ); + + let ciphertext_output = vec![9, 8, 7, 6, 5, 4, 3, 2, 1]; + contract + .emitCiphertextOutputPublished(Uint::from(e3_id), Bytes::from(ciphertext_output.clone())) + .send() + .await? + .watch() + .await?; + + sleep(Duration::from_millis(10)).await; + + let e3 = indexer.get_e3(e3_id).await?; + + assert_eq!(e3.ciphertext_output, ciphertext_output); + + let store = indexer.get_store(); + let val = store.get::("input_count").await?.unwrap(); + assert_eq!(val, 3); + Ok(()) +} diff --git a/crates/init/Cargo.toml b/crates/init/Cargo.toml new file mode 100644 index 0000000000..6c35ebb15b --- /dev/null +++ b/crates/init/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "e3-init" +version = "0.1.0" +edition.workspace = true +license.workspace = true +description = "E3 - Enclave Init Function" +repository = "https://github.com/gnosisguild/enclave/crates/init" + +[dependencies] +anyhow.workspace = true +tokio.workspace = true +git2.workspace = true +async-recursion.workspace = true +serde_json.workspace = true +serde.workspace = true +async-trait.workspace = true +url.workspace = true +e3-fs.workspace = true +regex.workspace = true +tracing.workspace = true diff --git a/crates/init/src/copy.rs b/crates/init/src/copy.rs new file mode 100644 index 0000000000..fc05ac9b97 --- /dev/null +++ b/crates/init/src/copy.rs @@ -0,0 +1,229 @@ +use anyhow::Result; +use e3_fs::prelude::*; +use e3_fs::Fs; +use regex::Regex; +use std::path::Path; +use tracing::info; + +#[derive(Debug, Clone)] +pub struct Filter { + pub glob_pattern: String, + pub search_pattern: String, + pub replacement: String, +} +impl Filter { + pub fn new(glob_pattern: &str, search_pattern: &str, replacement: &str) -> Self { + Filter { + glob_pattern: glob_pattern.to_string(), + search_pattern: search_pattern.to_string(), + replacement: replacement.to_string(), + } + } +} + +pub async fn copy_with_filters_impl( + fs: &Fs, + src_path: P1, + dest_path: P2, + filters: &[Filter], +) -> Result<()> +where + P1: AsRef + Send + Sync, + P2: AsRef + Send + Sync, +{ + info!("mkdirp {:?}", dest_path.as_ref()); + fs.mkdirp(&dest_path).await?; + info!("cp -r {:?} {:?}", src_path.as_ref(), dest_path.as_ref()); + fs.cp(&src_path, &dest_path).await?; + + for filter in filters { + // We need to prefix the glob pattern or it will be from the root of the filesystem + let prefixed_glob_pattern = format!( + "{}/{}", + dest_path.as_ref().to_string_lossy(), + &filter.glob_pattern + ); + info!("Running filter: {:?}", filter); + let file_paths = fs.find_files(&dest_path, &prefixed_glob_pattern).await?; + info!("pattern:{} found {:?}", filter.glob_pattern, file_paths); + + for file_path in file_paths { + fs.replace_in_place( + &Regex::new(&filter.search_pattern)?, + &filter.replacement, + file_path, + ) + .await?; + } + } + Ok(()) +} + +pub async fn copy_with_filters( + src_path: P1, + dest_path: P2, + filters: &[Filter], +) -> Result<()> +where + P1: AsRef + Send + Sync, + P2: AsRef + Send + Sync, +{ + info!( + "src: {:?} dest: {:?}", + src_path.as_ref(), + dest_path.as_ref() + ); + + copy_with_filters_impl( + &Fs::physical()?, + src_path.as_ref().join("."), + dest_path, + filters, + ) + .await?; + Ok(()) +} + +#[cfg(test)] +mod tests { + use super::*; + use anyhow::Result; + use e3_fs::Fs; + #[tokio::test] + async fn test_copy_with_filters_impl() -> Result<()> { + // Create an in-memory filesystem + let fs = Fs::mem(); + // Define source and destination paths + let src_path = "/tmp/mysource/."; + let dest_path = "/home/user/myproj"; + fs.mkdirp(&dest_path).await?; + // Create some test files in the source directory + fs.mkdirp(&src_path).await?; + fs.write_to_file(format!("{}/file1.txt", src_path), "Content of file 1") + .await?; + fs.write_to_file(format!("{}/file2.txt", src_path), "Content of file 2") + .await?; + fs.mkdirp(format!("{}/subdir", src_path)).await?; + fs.write_to_file( + format!("{}/subdir/file3.txt", src_path), + "Content of file 3", + ) + .await?; + // Create a nested directory structure with a package.json file + fs.mkdirp(format!( + "{}/tools/build/scripts/utils/helper-tool", + src_path + )) + .await?; + fs.write_to_file( + format!( + "{}/tools/build/scripts/utils/helper-tool/package.json", + src_path + ), + r#"{ + "name": "helper-tool", + "version": "1.0.0", + "description": "A simple utility tool", + "main": "index.js", + "dependencies": { + "lodash": "^4.17.21" + } +}"#, + ) + .await?; + + // Execute the copy operation + copy_with_filters_impl( + &fs, + &src_path, + &dest_path, + &vec![ + Filter::new( + "**/*/package.json", + r#""lodash":\s*"[^"]*""#, + r#""lodash": "1.0.0""#, + ), + // Filter::new("package.json", "lodash", "nodash"), + Filter::new("**/*/file3.txt", "file", "chicken"), + ], + ) + .await?; + + // Verify that files were copied to the destination + // Check that the original files exist in source + assert!(fs + .read_to_string(format!("{}/file1.txt", src_path)) + .await + .is_ok()); + assert!(fs + .read_to_string(format!("{}/file2.txt", src_path)) + .await + .is_ok()); + assert!(fs + .read_to_string(format!("{}/subdir/file3.txt", src_path)) + .await + .is_ok()); + + // Check that files were copied to destination + let copied_file1 = fs + .read_to_string(format!("{}/file1.txt", dest_path)) + .await?; + let copied_file2 = fs + .read_to_string(format!("{}/file2.txt", dest_path)) + .await?; + let copied_file3 = fs + .read_to_string(format!("{}/subdir/file3.txt", dest_path)) + .await?; + let copied_package_json = fs + .read_to_string(format!( + "{}/tools/build/scripts/utils/helper-tool/package.json", + dest_path + )) + .await?; + let new_package_json = fs + .read_to_string(format!( + "{}/tools/build/scripts/utils/helper-tool/package.json", + dest_path + )) + .await?; + + assert_eq!( + new_package_json, + r#"{ + "name": "helper-tool", + "version": "1.0.0", + "description": "A simple utility tool", + "main": "index.js", + "dependencies": { + "lodash": "1.0.0" + } +}"#, + ); + + // Verify content matches + assert_eq!(copied_file1, "Content of file 1"); + assert_eq!(copied_file2, "Content of file 2"); + assert_eq!(copied_file3, "Content of chicken 3"); // substitution + assert!(copied_package_json.contains("helper-tool")); + assert!(copied_package_json.contains("lodash")); + + // Additional verification: check that the source files still exist (copy, not move) + let original_file1 = fs.read_to_string(format!("{}/file1.txt", src_path)).await?; + let original_file2 = fs.read_to_string(format!("{}/file2.txt", src_path)).await?; + let original_file3 = fs + .read_to_string(format!("{}/subdir/file3.txt", src_path)) + .await?; + let original_package_json = fs + .read_to_string(format!( + "{}/tools/build/scripts/utils/helper-tool/package.json", + src_path + )) + .await?; + assert_eq!(original_file1, "Content of file 1"); + assert_eq!(original_file2, "Content of file 2"); + assert_eq!(original_file3, "Content of file 3"); + assert!(original_package_json.contains("helper-tool")); + assert!(original_package_json.contains("lodash")); + Ok(()) + } +} diff --git a/crates/init/src/file_utils.rs b/crates/init/src/file_utils.rs new file mode 100644 index 0000000000..5c89545282 --- /dev/null +++ b/crates/init/src/file_utils.rs @@ -0,0 +1,72 @@ +use std::path::Path; + +use anyhow::{bail, Result}; +use async_recursion::async_recursion; +use tokio::{fs, process::Command}; + +pub async fn ensure_empty_folder>(path: P) -> Result<()> { + let path = path.as_ref(); + + if !path.exists() { + fs::create_dir(path).await?; + } + + if !path.is_dir() { + bail!("Path '{}' is not a directory", path.display()); + } + + let mut entries = std::fs::read_dir(path) + .map_err(|e| anyhow::anyhow!("Failed to read directory '{}': {}", path.display(), e))?; + + if entries.next().is_some() { + bail!("Directory '{}' is not empty", path.display()); + } + + Ok(()) +} + +pub async fn delete_path>(path: P) -> Result<()> { + let path = path.as_ref(); + if path.exists() { + if path.is_dir() { + fs::remove_dir_all(path).await?; + } else { + fs::remove_file(path).await?; + } + } + + Ok(()) +} + +pub async fn chmod_recursive>(path: P, mode: &str) -> Result<()> { + Command::new("chmod") + .arg("-R") + .arg(mode) + .arg(path.as_ref()) + .status() + .await?; + Ok(()) +} + +pub async fn move_file, Q: AsRef>(src: P, dst: Q) -> Result<()> { + Command::new("mv") + .arg(src.as_ref()) + .arg(dst.as_ref()) + .status() + .await?; + Ok(()) +} + +#[async_recursion] +pub async fn remove_all_files_in_dir + Send>(dir_path: P) -> Result<()> { + let mut entries = fs::read_dir(dir_path).await?; + while let Some(entry) = entries.next_entry().await? { + let path = entry.path(); + if path.is_file() { + fs::remove_file(path).await?; + } else if path.is_dir() { + fs::remove_dir_all(path).await?; + } + } + Ok(()) +} diff --git a/crates/init/src/git.rs b/crates/init/src/git.rs new file mode 100644 index 0000000000..c1ef26894e --- /dev/null +++ b/crates/init/src/git.rs @@ -0,0 +1,160 @@ +use std::path::Path; + +use anyhow::{Context, Result}; +use tokio::process::Command; +use url::Url; + +pub async fn shallow_clone(git_repo: &str, branch: &str, target_folder: &str) -> Result<()> { + let status = Command::new("git") + .args([ + "clone", + "--depth", + "1", + "--branch", + branch, + git_repo, + target_folder, + ]) + .status() + .await?; + + if !status.success() { + return Err(anyhow::anyhow!( + "Git clone failed with exit code: {}", + status.code().unwrap_or(-1) + ) + .into()); + } + + Ok(()) +} + +pub async fn init(path: impl AsRef) -> Result<()> { + let path = path.as_ref(); + Command::new("git") + .arg("init") + .arg("-b") + .arg("main") + .current_dir(path) + .output() + .await + .with_context(|| { + format!( + "Failed to execute git init in directory: {}", + path.display() + ) + })?; + Ok(()) +} + +pub async fn add_all(path: impl AsRef) -> Result<()> { + let path = path.as_ref(); + Command::new("git") + .arg("add") + .arg(".") + .current_dir(path) + .output() + .await + .with_context(|| format!("Failed to execute git add in directory: {}", path.display()))?; + Ok(()) +} + +pub async fn commit(path: impl AsRef, message: &str) -> Result<()> { + let path = path.as_ref(); + Command::new("git") + .arg("commit") + .arg("-m") + .arg(message) + .current_dir(path) + .output() + .await + .with_context(|| { + format!( + "Failed to execute git commit in directory: {}", + path.display() + ) + })?; + Ok(()) +} + +pub async fn add_submodule( + repo_path: impl AsRef, + submodule_url: &str, + submodule_path: &str, +) -> Result<()> { + let repo_path = repo_path.as_ref(); + Command::new("git") + .arg("submodule") + .arg("add") + .arg(submodule_url) + .arg(submodule_path) + .current_dir(repo_path) + .output() + .await + .with_context(|| { + format!( + "Failed to add git submodule '{}' at '{}' in directory: {}", + submodule_url, + submodule_path, + repo_path.display() + ) + })?; + Ok(()) +} + +#[derive(Debug)] +pub struct GitReference { + pub base_url: String, + pub branch: Option, + pub path: Option, +} + +pub fn parse_git_url(input: String) -> Result { + let url = Url::parse(&input)?; + + // Remove git+ prefix and fragment to get base URL + let base_url = { + let mut u = url.clone(); + u.set_fragment(None); + u.to_string().trim_start_matches("git+").to_string() + }; + + // Parse fragment for branch:path + let (branch, path) = if let Some(fragment) = url.fragment() { + let parts: Vec<&str> = fragment.splitn(2, ':').collect(); + ( + Some(parts[0].to_string()), + parts.get(1).map(|s| s.to_string()), + ) + } else { + (None, None) + }; + + Ok(GitReference { + base_url, + branch, + path, + }) +} + +#[cfg(test)] +mod tests { + use super::parse_git_url; + use anyhow::*; + #[test] + fn test_git_url() -> Result<()> { + let g = parse_git_url( + "git+https://github.com/gnosisguild/enclave.git#main:template/default".to_string(), + )?; + + assert_eq!(g.branch, Some("main".to_string())); + assert_eq!( + g.base_url, + "https://github.com/gnosisguild/enclave.git".to_string() + ); + + assert_eq!(g.path, Some("template/default".to_string())); + + Ok(()) + } +} diff --git a/crates/init/src/lib.rs b/crates/init/src/lib.rs new file mode 100644 index 0000000000..6f99357351 --- /dev/null +++ b/crates/init/src/lib.rs @@ -0,0 +1,199 @@ +mod copy; +mod file_utils; +mod git; +mod package_json; +mod pkgman; + +use anyhow::Result; +use copy::Filter; +use file_utils::{chmod_recursive, delete_path, move_file, remove_all_files_in_dir}; +use git::parse_git_url; +use package_json::DependencyType; +use pkgman::PkgMan; +use std::env; +use std::path::PathBuf; +use std::process::exit; +use tokio::fs; + +// const GIT_URL: &str = "https://github.com/gnosisguild/enclave.git#ry/support-alterations-2"; +const DEFAULT_TEMPLATE_URL: &str = + "https://github.com/gnosisguild/enclave.git#main:templates/default"; +const TEMP_DIR: &str = "/tmp/__enclave-tmp-folder.1"; +const DEFAULT_TEMPLATE_PATH: &str = "."; +const DEFAULT_BRANCH: &str = "main"; + +async fn install_enclave(cwd: &PathBuf, template: Option) -> Result<()> { + let repo = parse_git_url(template.unwrap_or(DEFAULT_TEMPLATE_URL.to_string()))?; + let base_url = repo.base_url; + let branch = repo.branch.unwrap_or(DEFAULT_BRANCH.to_string()); + let template_path = repo.path.unwrap_or(DEFAULT_TEMPLATE_PATH.to_string()); + + println!("Start git clone..."); + git::shallow_clone(&base_url, &branch, TEMP_DIR).await?; + + println!("Getting workspace version for enclave..."); + let evm_version = package_json::get_version_from_package_json( + &PathBuf::from(TEMP_DIR).join("packages/evm/package.json"), + ) + .await?; + + println!("Getting workspace version for enclave_react..."); + let react_version = package_json::get_version_from_package_json( + &PathBuf::from(TEMP_DIR).join("packages/enclave-react/package.json"), + ) + .await?; + + println!("Getting workspace version for enclave-sdk..."); + let sdk_version = package_json::get_version_from_package_json( + &PathBuf::from(TEMP_DIR).join("packages/enclave-sdk/package.json"), + ) + .await?; + let src = PathBuf::from(TEMP_DIR).join(template_path); + + println!("Copy with filters..."); + copy::copy_with_filters( + &src, + &cwd, + &vec![ + Filter::new( + "**/package.json", + r#""@gnosis-guild/enclave":\s*"[^"]*""#, + &format!(r#""@gnosis-guild/enclave": "{}""#, evm_version), + ), + Filter::new( + "**/package.json", + r#""@gnosis-guild/enclave-react":\s*"[^"]*""#, + &format!(r#""@gnosis-guild/enclave-react": "{}""#, react_version), + ), + Filter::new( + "**/package.json", + r#""@gnosis-guild/enclave-sdk":\s*"[^"]*""#, + &format!(r#""@gnosis-guild/enclave-sdk": "{}""#, sdk_version), + ), + ], + ) + .await?; + + println!("Resetting support folder..."); + delete_path(&cwd.join(".enclave")).await?; + + println!("Setting up support folders..."); + copy::copy_with_filters( + &PathBuf::from(TEMP_DIR).join("crates/support-scripts/ctl"), + &cwd.join(".enclave/support/ctl"), + &vec![], + ) + .await?; + + copy::copy_with_filters( + &PathBuf::from(TEMP_DIR).join("crates/support-scripts/dev"), + &cwd.join(".enclave/support/dev"), + &vec![], + ) + .await?; + + println!("Removing template ignore files..."); + delete_path(&cwd.join(".gitignore")).await?; + + println!("Using bak files for ignores..."); + move_file(&cwd.join(".gitignore.bak"), &cwd.join(".gitignore")).await?; + + println!("Move bak files for workspace..."); + move_file( + &cwd.join("pnpm-workspace.yaml.bak"), + &cwd.join("pnpm-workspace.yaml"), + ) + .await?; + + println!("Remove lib folder..."); + delete_path(&cwd.join("lib")).await?; + + // We need to make these chmod 777 because the dockerfile needs to be able to successfully + // write to them. There are better ways to do this but right now this is the most efficient. + // PRs/Ideas welcome. + // + println!("Fixing permissions..."); + chmod_recursive(&cwd.join("contracts"), "777").await?; + chmod_recursive(&cwd.join("tests"), "777").await?; + + println!("Initializing repository..."); + git::init(&cwd).await?; + + println!("Setting up submodule..."); + git::add_submodule( + &cwd, + "https://github.com/gnosisguild/risc0-ethereum", + "lib/risc0-ethereum", + ) + .await?; + + println!("Ensuring package is in json..."); + package_json::add_package_to_json( + &cwd.join("package.json"), + "@risc0/ethereum", + "file:lib/risc0-ethereum", + DependencyType::DevDependencies, + ) + .await?; + + println!("Running pnpm install..."); + let npm = PkgMan::new(pkgman::PkgManKind::PNPM)?.with_cwd(&cwd); + npm.run(&["install"]).await?; + + println!("Adding everything to git..."); + git::add_all(&cwd).await?; + + println!("Committing..."); + git::commit(&cwd, "Initial Commit").await?; + + Ok(()) +} + +// Updated execute function to include workspace dependency substitution +pub async fn execute( + location: Option, + template: Option, + skip_cleanup: bool, +) -> Result<()> { + let mut install_in_current_dir = false; + let env_current_dir = env::current_dir()?; + let cwd = match location { + Some(loc) => { + if loc.is_absolute() { + loc + } else { + env_current_dir.join(loc) + } + } + None => { + install_in_current_dir = true; + env_current_dir + } + }; + + println!("Ensuring tmp folder does not exist..."); + if fs::try_exists(TEMP_DIR).await? { + fs::remove_dir_all(TEMP_DIR).await?; + } + + println!("Ensuring cwd is empty..."); + file_utils::ensure_empty_folder(&cwd).await?; + + match install_enclave(&cwd, template).await { + Ok(_) => Ok(()), + Err(e) => { + println!("Cleaning up due to error..."); + if !skip_cleanup { + if install_in_current_dir { + remove_all_files_in_dir(&cwd).await?; + } else { + fs::remove_dir_all(&cwd).await?; + } + } + eprintln!("\nSorry about this but there was an error running the installer. "); + eprintln!("\n Error: {}\n", e); + eprintln!("Enclave is currently under active development please share this with our team:\n\n https://github.com/gnosisguild/enclave/issues/new\n"); + exit(1); + } + } +} diff --git a/crates/init/src/package_json.rs b/crates/init/src/package_json.rs new file mode 100644 index 0000000000..350354cd46 --- /dev/null +++ b/crates/init/src/package_json.rs @@ -0,0 +1,74 @@ +use std::path::PathBuf; + +use anyhow::Result; +use serde_json::{Map, Value}; +use tokio::fs; + +#[allow(dead_code)] +#[derive(Debug, Clone)] +pub enum DependencyType { + Dependencies, + DevDependencies, + PeerDependencies, +} + +impl DependencyType { + fn as_key(&self) -> &'static str { + match self { + DependencyType::Dependencies => "dependencies", + DependencyType::DevDependencies => "devDependencies", + DependencyType::PeerDependencies => "peerDependencies", + } + } +} + +pub async fn get_version_from_package_json(file_path: &PathBuf) -> Result { + println!("json path: {:?}", file_path); + let content = fs::read_to_string(file_path).await?; + let json: Value = serde_json::from_str(&content)?; + + json["version"] + .as_str() + .map(|s| s.to_string()) + .ok_or_else(|| anyhow::anyhow!("version field not found or not a string")) +} + +#[allow(dead_code)] +fn validate_dependency_type(dep_type: &str) -> Result<()> { + match dep_type { + "dependencies" | "devDependencies" | "peerDependencies" => Ok(()), + _ => Err(anyhow::anyhow!( + "Invalid dependency type '{}'. Must be one of: dependencies, devDependencies, peerDependencies", + dep_type + )), + } +} + +pub async fn add_package_to_json( + file_path: &PathBuf, + package_name: &str, + version: &str, + dep_type: DependencyType, +) -> Result<()> { + let dep_key = dep_type.as_key(); + let content = fs::read_to_string(file_path).await?; + + let mut json: Value = serde_json::from_str(&content)?; + + let obj = json + .as_object_mut() + .ok_or_else(|| anyhow::anyhow!("package.json root is not an object"))?; + + let deps = obj + .entry(dep_key) + .or_insert_with(|| Value::Object(Map::new())) + .as_object_mut() + .ok_or_else(|| anyhow::anyhow!("{} is not an object", dep_key))?; + + deps.insert(package_name.to_string(), Value::String(version.to_string())); + + let formatted_json = serde_json::to_string_pretty(&json)?; + fs::write(file_path, formatted_json).await?; + + Ok(()) +} diff --git a/crates/init/src/pkgman.rs b/crates/init/src/pkgman.rs new file mode 100644 index 0000000000..3d106afe9f --- /dev/null +++ b/crates/init/src/pkgman.rs @@ -0,0 +1,99 @@ +use anyhow::{bail, Result}; +use std::{env, path::PathBuf}; +use tokio::process::Command as TokioCommand; + +#[async_trait::async_trait] +pub trait PkgStrategy { + fn cmd(&self) -> &'static str; + + async fn available(&self) -> bool { + TokioCommand::new(self.cmd()) + .arg("--version") + .output() + .await + .map(|output| output.status.success()) + .unwrap_or(false) + } + + async fn run(&self, cwd: &PathBuf, args: &[&str]) -> Result<()> { + if !self.available().await { + bail!("{} is not installed or not available in PATH", self.cmd()); + } + + let status = TokioCommand::new(self.cmd()) + .args(args) + .current_dir(cwd) + .status() + .await?; + + if status.success() { + Ok(()) + } else { + bail!( + "{} command failed with exit code: {:?}", + self.cmd(), + status.code() + ); + } + } +} + +struct Npm; + +#[async_trait::async_trait] +impl PkgStrategy for Npm { + fn cmd(&self) -> &'static str { + "npm" + } +} + +struct Pnpm; + +#[async_trait::async_trait] +impl PkgStrategy for Pnpm { + fn cmd(&self) -> &'static str { + "pnpm" + } +} + +type PkgType = dyn PkgStrategy + Send + Sync; + +pub struct PkgMan { + strategy: Box, + cwd: PathBuf, +} + +#[allow(dead_code)] +pub enum PkgManKind { + NPM, + PNPM, +} + +impl PkgMan { + pub fn new(kind: PkgManKind) -> Result { + let strategy: Box = match kind { + PkgManKind::NPM => Box::new(Npm), + PkgManKind::PNPM => Box::new(Pnpm), + // TODO: yarn + }; + + Ok(Self { + strategy, + cwd: env::current_dir()?, + }) + } + + pub fn with_cwd(mut self, cwd: impl Into) -> Self { + self.cwd = cwd.into(); + self + } + + #[allow(dead_code)] + pub async fn available(&self) -> bool { + self.strategy.available().await + } + + pub async fn run(&self, args: &[&str]) -> Result<()> { + self.strategy.run(&self.cwd, args).await + } +} diff --git a/crates/keyshare/Cargo.toml b/crates/keyshare/Cargo.toml new file mode 100644 index 0000000000..b283a085b6 --- /dev/null +++ b/crates/keyshare/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "e3-keyshare" +version = "0.1.0" +edition.workspace = true +license.workspace = true +description = "E3 - Enclave Ciphernode Keyshare Actors" +repository = "https://github.com/gnosisguild/enclave/crates/keyshare" + +[dependencies] +actix = { workspace = true } +anyhow = { workspace = true } +async-trait = { workspace = true } +e3-config = { workspace = true } +e3-data = { workspace = true } +e3-crypto = { workspace = true } +e3-events = { workspace = true } +e3-fhe = { workspace = true } +e3-request = { workspace = true } +serde = { workspace = true } +tracing = { workspace = true } diff --git a/packages/ciphernode/keyshare/src/ext.rs b/crates/keyshare/src/ext.rs similarity index 95% rename from packages/ciphernode/keyshare/src/ext.rs rename to crates/keyshare/src/ext.rs index a50a3ec80c..1c5d069ab0 100644 --- a/packages/ciphernode/keyshare/src/ext.rs +++ b/crates/keyshare/src/ext.rs @@ -2,11 +2,11 @@ use crate::{Keyshare, KeyshareParams, KeyshareRepositoryFactory}; use actix::{Actor, Addr}; use anyhow::{anyhow, Result}; use async_trait::async_trait; -use crypto::Cipher; -use data::{AutoPersist, RepositoriesFactory}; +use e3_crypto::Cipher; +use e3_data::{AutoPersist, RepositoriesFactory}; +use e3_events::{BusError, EnclaveErrorType, EnclaveEvent, EventBus}; +use e3_fhe::ext::FHE_KEY; use e3_request::{E3Context, E3ContextSnapshot, E3Extension}; -use events::{BusError, EnclaveErrorType, EnclaveEvent, EventBus}; -use fhe::ext::FHE_KEY; use std::sync::Arc; pub struct KeyshareExtension { diff --git a/packages/ciphernode/keyshare/src/keyshare.rs b/crates/keyshare/src/keyshare.rs similarity index 97% rename from packages/ciphernode/keyshare/src/keyshare.rs rename to crates/keyshare/src/keyshare.rs index 7688a23f1e..718b3c00b6 100644 --- a/packages/ciphernode/keyshare/src/keyshare.rs +++ b/crates/keyshare/src/keyshare.rs @@ -1,12 +1,12 @@ use actix::prelude::*; use anyhow::{anyhow, Result}; -use crypto::Cipher; -use data::Persistable; -use events::{ +use e3_crypto::Cipher; +use e3_data::Persistable; +use e3_events::{ BusError, CiphernodeSelected, CiphertextOutputPublished, DecryptionshareCreated, Die, E3RequestComplete, EnclaveErrorType, EnclaveEvent, EventBus, FromError, KeyshareCreated, }; -use fhe::{DecryptCiphertext, Fhe}; +use e3_fhe::{DecryptCiphertext, Fhe}; use std::sync::Arc; use tracing::warn; diff --git a/packages/ciphernode/keyshare/src/lib.rs b/crates/keyshare/src/lib.rs similarity index 100% rename from packages/ciphernode/keyshare/src/lib.rs rename to crates/keyshare/src/lib.rs diff --git a/packages/ciphernode/keyshare/src/repo.rs b/crates/keyshare/src/repo.rs similarity index 76% rename from packages/ciphernode/keyshare/src/repo.rs rename to crates/keyshare/src/repo.rs index 504c2fa7dc..9ade764c55 100644 --- a/packages/ciphernode/keyshare/src/repo.rs +++ b/crates/keyshare/src/repo.rs @@ -1,6 +1,6 @@ -use config::StoreKeys; -use data::{Repositories, Repository}; -use events::E3id; +use e3_config::StoreKeys; +use e3_data::{Repositories, Repository}; +use e3_events::E3id; pub trait KeyshareRepositoryFactory { fn keyshare(&self, e3_id: &E3id) -> Repository>; diff --git a/crates/logger/Cargo.toml b/crates/logger/Cargo.toml new file mode 100644 index 0000000000..aea3f52604 --- /dev/null +++ b/crates/logger/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "e3-logger" +version = "0.1.0" +edition.workspace = true +license.workspace = true +description = "E3 - Enclave Ciphernode Logger" +repository = "https://github.com/gnosisguild/enclave/crates/logger" + +[dependencies] +e3-events = { workspace = true } +actix = { workspace = true } +base64 = { workspace = true } +tracing = { workspace = true } diff --git a/packages/ciphernode/logger/src/lib.rs b/crates/logger/src/lib.rs similarity index 100% rename from packages/ciphernode/logger/src/lib.rs rename to crates/logger/src/lib.rs diff --git a/packages/ciphernode/logger/src/logger.rs b/crates/logger/src/logger.rs similarity index 95% rename from packages/ciphernode/logger/src/logger.rs rename to crates/logger/src/logger.rs index 09fe4bba88..4b558dd9c8 100644 --- a/packages/ciphernode/logger/src/logger.rs +++ b/crates/logger/src/logger.rs @@ -1,5 +1,5 @@ use actix::{Actor, Addr, Context, Handler}; -use events::{EnclaveEvent, Event, EventBus, Subscribe}; +use e3_events::{EnclaveEvent, Event, EventBus, Subscribe}; use std::marker::PhantomData; use tracing::{error, info}; diff --git a/packages/ciphernode/net/Cargo.toml b/crates/net/Cargo.toml similarity index 59% rename from packages/ciphernode/net/Cargo.toml rename to crates/net/Cargo.toml index 36647655f2..d319f64c4c 100644 --- a/packages/ciphernode/net/Cargo.toml +++ b/crates/net/Cargo.toml @@ -1,9 +1,10 @@ [package] -name = "net" -version.workspace = true +name = "e3-net" +version = "0.1.0" edition.workspace = true -description = ": coordinates the encryption and decryption of enclave computations" -repository = "https://github.com/gnosisguild/enclave/packages/ciphernode" +license.workspace = true +description = "E3 - Enclave Ciphernode Networking Components" +repository = "https://github.com/gnosisguild/enclave/crates/net" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html @@ -11,14 +12,14 @@ repository = "https://github.com/gnosisguild/enclave/packages/ciphernode" async-std = { workspace = true } async-trait = { workspace = true } futures = { workspace = true } -crypto = { workspace = true } -config = { workspace = true } -data = { workspace = true } +e3-crypto = { workspace = true } +e3-config = { workspace = true } +e3-data = { workspace = true } libp2p = { workspace = true } tokio = { workspace = true } tracing = { workspace = true } tracing-subscriber = { workspace = true } -events = { workspace = true } +e3-events = { workspace = true } anyhow = { workspace = true } actix = { workspace = true } zeroize = { workspace = true } diff --git a/packages/ciphernode/net/src/bin/p2p_test.rs b/crates/net/src/bin/p2p_test.rs similarity index 93% rename from packages/ciphernode/net/src/bin/p2p_test.rs rename to crates/net/src/bin/p2p_test.rs index b34b6ce99e..252f9e2393 100644 --- a/packages/ciphernode/net/src/bin/p2p_test.rs +++ b/crates/net/src/bin/p2p_test.rs @@ -1,7 +1,7 @@ use anyhow::Result; -use net::correlation_id::CorrelationId; -use net::events::{NetworkPeerCommand, NetworkPeerEvent}; -use net::NetworkPeer; +use e3_net::correlation_id::CorrelationId; +use e3_net::events::{NetworkPeerCommand, NetworkPeerEvent}; +use e3_net::NetworkPeer; use std::time::Duration; use std::{collections::HashSet, env, process}; use tokio::time::{sleep, timeout}; @@ -32,15 +32,10 @@ async fn main() -> Result<()> { .ok() .and_then(|p| p.parse::().ok()); - let enable_mdns = env::var("ENABLE_MDNS") - .unwrap_or("false".to_string()) - .parse::() - .unwrap(); - let peers: Vec = dial_to.iter().cloned().collect(); let id = libp2p::identity::Keypair::generate_ed25519(); - let mut peer = NetworkPeer::new(&id, peers, udp_port, "test-topic", enable_mdns)?; + let mut peer = NetworkPeer::new(&id, peers, udp_port, "test-topic")?; // Extract input and outputs let tx = peer.tx(); diff --git a/packages/ciphernode/net/src/correlation_id.rs b/crates/net/src/correlation_id.rs similarity index 100% rename from packages/ciphernode/net/src/correlation_id.rs rename to crates/net/src/correlation_id.rs diff --git a/packages/ciphernode/net/src/dialer.rs b/crates/net/src/dialer.rs similarity index 98% rename from packages/ciphernode/net/src/dialer.rs rename to crates/net/src/dialer.rs index bd5274132d..e0539688c9 100644 --- a/packages/ciphernode/net/src/dialer.rs +++ b/crates/net/src/dialer.rs @@ -203,7 +203,8 @@ fn resolve_ipv4(domain: &str) -> Result { Ok(addr.ip().to_string()) } -fn resolve_ipv6(domain: &str) -> Result { +// For if we wish to resolve ipv6 as well (currently disabled) +fn _resolve_ipv6(domain: &str) -> Result { let addr = format!("{}:0", domain) .to_socket_addrs()? .find(|addr| addr.ip().is_ipv6()) diff --git a/packages/ciphernode/net/src/events.rs b/crates/net/src/events.rs similarity index 100% rename from packages/ciphernode/net/src/events.rs rename to crates/net/src/events.rs diff --git a/packages/ciphernode/net/src/lib.rs b/crates/net/src/lib.rs similarity index 79% rename from packages/ciphernode/net/src/lib.rs rename to crates/net/src/lib.rs index b695df3224..872933ad00 100644 --- a/packages/ciphernode/net/src/lib.rs +++ b/crates/net/src/lib.rs @@ -1,6 +1,3 @@ -#![crate_name = "net"] -#![crate_type = "lib"] - pub mod correlation_id; mod dialer; pub mod events; diff --git a/packages/ciphernode/net/src/network_manager.rs b/crates/net/src/network_manager.rs similarity index 97% rename from packages/ciphernode/net/src/network_manager.rs rename to crates/net/src/network_manager.rs index 326599775a..5f13c1cbda 100644 --- a/packages/ciphernode/net/src/network_manager.rs +++ b/crates/net/src/network_manager.rs @@ -6,9 +6,9 @@ use crate::NetworkPeer; /// This Actor should be responsible for use actix::prelude::*; use anyhow::{bail, Result}; -use crypto::Cipher; -use data::Repository; -use events::{EnclaveEvent, EventBus, EventId, Subscribe}; +use e3_crypto::Cipher; +use e3_data::Repository; +use e3_events::{EnclaveEvent, EventBus, EventId, Subscribe}; use libp2p::identity::ed25519; use std::collections::HashSet; use std::sync::Arc; @@ -85,7 +85,6 @@ impl NetworkManager { peers: Vec, cipher: &Arc, quic_port: u16, - enable_mdns: bool, repository: Repository>, ) -> Result<(Addr, tokio::task::JoinHandle>, String)> { let topic = "tmp-enclave-gossip-topic"; @@ -101,7 +100,7 @@ impl NetworkManager { // Create peer from keypair let keypair: libp2p::identity::Keypair = ed25519::Keypair::try_from_bytes(&mut bytes)?.try_into()?; - let mut peer = NetworkPeer::new(&keypair, peers, Some(quic_port), topic, enable_mdns)?; + let mut peer = NetworkPeer::new(&keypair, peers, Some(quic_port), topic)?; // Setup and start network manager let rx = peer.rx(); @@ -159,7 +158,7 @@ impl Handler for NetworkManager { }) .await { - error!(error=?e, "Error sending bytes to libp2p"); + error!(error=?e, "Error sending bytes to libp2p: {e}"); }; } Err(error) => { diff --git a/packages/ciphernode/net/src/network_peer.rs b/crates/net/src/network_peer.rs similarity index 88% rename from packages/ciphernode/net/src/network_peer.rs rename to crates/net/src/network_peer.rs index d801182bca..b8bbf2f88d 100644 --- a/packages/ciphernode/net/src/network_peer.rs +++ b/crates/net/src/network_peer.rs @@ -6,8 +6,7 @@ use libp2p::{ identify::{self, Behaviour as IdentifyBehaviour}, identity::Keypair, kad::{store::MemoryStore, Behaviour as KademliaBehaviour}, - mdns, - swarm::{behaviour::toggle::Toggle, NetworkBehaviour, SwarmEvent}, + swarm::{NetworkBehaviour, SwarmEvent}, Swarm, }; use std::hash::{Hash, Hasher}; @@ -25,7 +24,6 @@ pub struct NodeBehaviour { gossipsub: gossipsub::Behaviour, kademlia: KademliaBehaviour, connection_limits: connection_limits::Behaviour, - mdns: Toggle, identify: IdentifyBehaviour, } @@ -54,7 +52,6 @@ impl NetworkPeer { peers: Vec, udp_port: Option, topic: &str, - enable_mdns: bool, ) -> Result { let (event_tx, _) = broadcast::channel(100); // TODO : tune this param let (cmd_tx, cmd_rx) = mpsc::channel(100); // TODO : tune this param @@ -62,7 +59,7 @@ impl NetworkPeer { let swarm = libp2p::SwarmBuilder::with_existing_identity(id.clone()) .with_tokio() .with_quic() - .with_behaviour(|key| create_mdns_kad_behaviour(enable_mdns, key))? + .with_behaviour(|key| create_kad_behaviour(key))? .build(); // TODO: Use topics to manage network traffic instead of just using a single topic @@ -158,8 +155,7 @@ impl NetworkPeer { } /// Create the libp2p behaviour -fn create_mdns_kad_behaviour( - enable_mdns: bool, +fn create_kad_behaviour( key: &Keypair, ) -> std::result::Result> { let connection_limits = connection_limits::Behaviour::new(ConnectionLimits::default()); @@ -186,22 +182,12 @@ fn create_mdns_kad_behaviour( gossipsub_config, )?; - let mdns = if enable_mdns { - Toggle::from(Some(mdns::tokio::Behaviour::new( - mdns::Config::default(), - key.public().to_peer_id(), - )?)) - } else { - Toggle::from(None) - }; - Ok(NodeBehaviour { gossipsub, kademlia: KademliaBehaviour::new( key.public().to_peer_id(), MemoryStore::new(key.public().to_peer_id()), ), - mdns, connection_limits, identify: identify_config, }) @@ -253,23 +239,6 @@ async fn process_swarm_event( debug!("Kademlia event: {:?}", e); } - SwarmEvent::Behaviour(NodeBehaviourEvent::Mdns(mdns::Event::Discovered(list))) => { - for (peer_id, _multiaddr) in list { - trace!("mDNS discovered a new peer: {peer_id}"); - swarm.behaviour_mut().gossipsub.add_explicit_peer(&peer_id); - } - } - - SwarmEvent::Behaviour(NodeBehaviourEvent::Mdns(mdns::Event::Expired(list))) => { - for (peer_id, _multiaddr) in list { - trace!("mDNS discover peer has expired: {peer_id}"); - swarm - .behaviour_mut() - .gossipsub - .remove_explicit_peer(&peer_id); - } - } - SwarmEvent::Behaviour(NodeBehaviourEvent::Gossipsub(gossipsub::Event::Message { propagation_source: peer_id, message_id: id, diff --git a/packages/ciphernode/net/src/repo.rs b/crates/net/src/repo.rs similarity index 80% rename from packages/ciphernode/net/src/repo.rs rename to crates/net/src/repo.rs index 93b0abc217..14090dfaab 100644 --- a/packages/ciphernode/net/src/repo.rs +++ b/crates/net/src/repo.rs @@ -1,5 +1,5 @@ -use config::StoreKeys; -use data::{Repositories, Repository}; +use e3_config::StoreKeys; +use e3_data::{Repositories, Repository}; pub trait NetRepositoryFactory { fn libp2p_keypair(&self) -> Repository>; diff --git a/packages/ciphernode/net/src/retry.rs b/crates/net/src/retry.rs similarity index 100% rename from packages/ciphernode/net/src/retry.rs rename to crates/net/src/retry.rs diff --git a/packages/ciphernode/net/tests/Dockerfile b/crates/net/tests/Dockerfile similarity index 79% rename from packages/ciphernode/net/tests/Dockerfile rename to crates/net/tests/Dockerfile index 67db945187..0c14a1125d 100644 --- a/packages/ciphernode/net/tests/Dockerfile +++ b/crates/net/tests/Dockerfile @@ -4,7 +4,6 @@ FROM rust:1.81 AS builder WORKDIR /app COPY . . -WORKDIR /app/ciphernode RUN cargo build --release --bin p2p_test FROM debian:bookworm-slim @@ -14,6 +13,6 @@ WORKDIR /app RUN apt-get update && apt-get install -y --no-install-recommends iptables ca-certificates && \ apt-get clean && rm -rf /var/lib/apt/lists/* -COPY --from=builder /app/ciphernode/target/release/p2p_test . +COPY --from=builder /app/target/release/p2p_test . ENTRYPOINT ["/app/p2p_test"] diff --git a/packages/ciphernode/net/tests/docker-compose.yaml b/crates/net/tests/docker-compose.yaml similarity index 83% rename from packages/ciphernode/net/tests/docker-compose.yaml rename to crates/net/tests/docker-compose.yaml index 7ebd0e0cd8..9ed9fe3e02 100644 --- a/packages/ciphernode/net/tests/docker-compose.yaml +++ b/crates/net/tests/docker-compose.yaml @@ -1,7 +1,7 @@ services: alice: build: - dockerfile: ciphernode/net/tests/Dockerfile + dockerfile: crates/net/tests/Dockerfile context: ../../.. command: ["/app/p2p_test", "alice"] environment: @@ -13,7 +13,7 @@ services: bob: build: - dockerfile: ciphernode/net/tests/Dockerfile + dockerfile: crates/net/tests/Dockerfile context: ../../.. command: ["/app/p2p_test", "bob"] environment: @@ -25,7 +25,7 @@ services: charlie: build: - dockerfile: ciphernode/net/tests/Dockerfile + dockerfile: crates/net/tests/Dockerfile context: ../../.. command: ["/app/p2p_test", "charlie"] environment: diff --git a/packages/ciphernode/net/tests/run.sh b/crates/net/tests/run.sh similarity index 100% rename from packages/ciphernode/net/tests/run.sh rename to crates/net/tests/run.sh diff --git a/crates/program-server/Cargo.toml b/crates/program-server/Cargo.toml new file mode 100644 index 0000000000..acbaab552c --- /dev/null +++ b/crates/program-server/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "e3-program-server" +version = "0.1.0" +edition.workspace = true +license.workspace = true +description = "E3 - Enclave Program Server" +repository = "https://github.com/gnosisguild/enclave/crates/program-server" + +[dependencies] +actix-web.workspace = true +serde.workspace = true +serde_json.workspace = true +tokio.workspace = true +e3-compute-provider.workspace = true +reqwest.workspace = true +anyhow.workspace = true +hex.workspace = true diff --git a/crates/program-server/src/lib.rs b/crates/program-server/src/lib.rs new file mode 100644 index 0000000000..46b0079506 --- /dev/null +++ b/crates/program-server/src/lib.rs @@ -0,0 +1,232 @@ +mod types; + +use actix_web::{middleware::Logger, web, App, HttpResponse, HttpServer, Result as ActixResult}; +use anyhow::Result; +use e3_compute_provider::FHEInputs; +use serde::Serialize; +use std::{future::Future, pin::Pin, sync::Arc}; +use types::{ComputeRequest, WebhookPayload}; + +#[derive(Serialize, Debug)] +struct ProcessingResponse { + status: String, + e3_id: u64, +} + +type RunnerResult = Result<(Vec, Vec)>; +type Runner = dyn Fn(FHEInputs) -> Pin + Send>> + Send + Sync; + +#[derive(Clone)] +pub struct E3ProgramServerBuilder { + runner: Arc, + port: Option, + host: Option, + localhost_rewrite: Option, +} + +impl E3ProgramServerBuilder { + /// Create a new builder with a computation callback + pub fn new(callback: F) -> Self + where + F: Fn(FHEInputs) -> Fut + Send + Sync + 'static, + Fut: Future + Send + 'static, + { + Self { + runner: Arc::new(move |inputs| Box::pin(callback(inputs))), + port: None, + host: None, + localhost_rewrite: None, + } + } + + /// Set the port number (default: 13151) + pub fn with_port(mut self, port: u16) -> Self { + self.port = Some(port); + self + } + + /// Set the host address (default: "0.0.0.0") + pub fn with_host>(mut self, host: S) -> Self { + self.host = Some(host.into()); + self + } + + /// Server will rewrite localhost callbacks to whatever is provided as an argument eg. "host.local". This is usefull when running in a Docker container which does not have direct access to the host + pub fn with_localhost_rewrite(mut self, rewrite: &str) -> Self { + self.localhost_rewrite = Some(rewrite.to_string()); + self + } + + /// Build the E3ProgramServer + pub fn build(self) -> E3ProgramServer { + E3ProgramServer { + runner: self.runner, + port: self.port.unwrap_or(13151), + host: self.host.unwrap_or_else(|| "0.0.0.0".to_string()), + localhost_rewrite: self.localhost_rewrite, + } + } +} + +#[derive(Clone)] +pub struct E3ProgramServer { + runner: Arc, + port: u16, + host: String, + localhost_rewrite: Option, +} + +impl E3ProgramServer { + /// Create a new builder for E3ProgramServer with a computation callback + pub fn builder(callback: F) -> E3ProgramServerBuilder + where + F: Fn(FHEInputs) -> Fut + Send + Sync + 'static, + Fut: Future + Send + 'static, + { + E3ProgramServerBuilder::new(callback) + } + + /// Get the configured port + pub fn port(&self) -> u16 { + self.port + } + + /// Get the configured host + pub fn host(&self) -> &str { + &self.host + } + + /// Get the bind address as a string + pub fn bind_address(&self) -> String { + format!("{}:{}", self.host, self.port) + } + + /// Run the HTTP server + pub async fn run(&self) -> Result<()> { + let bind_addr = self.bind_address(); + let config = AppConfig { + runner: Arc::clone(&self.runner), + localhost_rewrite: self.localhost_rewrite.clone(), + }; + let server = HttpServer::new(move || { + App::new() + .app_data(web::Data::new(config.clone())) + .wrap(Logger::default()) + .route("/run_compute", web::post().to(handle_compute)) + .route("/health", web::get().to(handle_health_check)) + .route("/health", web::head().to(handle_health_check)) + }) + .bind(&bind_addr)?; + + println!("🚀 E3 Program Server listening on http://{}", bind_addr); + server.run().await.map_err(Into::into) + } +} + +#[derive(Clone)] +pub struct AppConfig { + pub runner: Arc, + pub localhost_rewrite: Option, +} + +async fn call_webhook( + callback_url: &str, + e3_id: u64, + proof: Vec, + ciphertext: Vec, +) -> Result<()> { + println!("call_webhook()"); + let payload = WebhookPayload { + e3_id, + ciphertext, + proof, + }; + println!("callback_url: {}", callback_url); + println!("payload: {:?}", payload); + + reqwest::Client::new() + .post(callback_url) + .json(&payload) + .send() + .await? + .error_for_status()?; + + println!("✓ Webhook called successfully for E3 {}", e3_id); + Ok(()) +} + +async fn handle_webhook_delivery( + e3_id: u64, + callback_url: &str, + proof: Vec, + ciphertext: Vec, +) -> Result<()> { + println!("handle_webhook_delivery()"); + call_webhook(callback_url, e3_id, proof, ciphertext).await?; + println!("✓ Webhook sent successfully for E3 {}", e3_id); + Ok(()) +} + +async fn process_computation_background( + runner: Arc, + e3_id: u64, + callback_url: &str, + fhe_inputs: FHEInputs, +) -> Result<()> { + let (proof, ciphertext) = runner(fhe_inputs).await?; + println!("computation finished!"); + println!("handling webhook delivery..."); + handle_webhook_delivery(e3_id, callback_url, proof, ciphertext).await?; + println!("✓ Computation completed for E3 {}", e3_id); + Ok(()) +} + +async fn handle_compute( + config: web::Data, + req: web::Json, +) -> ActixResult { + println!("Processing computation..."); + let e3_id = req + .e3_id + .ok_or_else(|| actix_web::error::ErrorBadRequest("e3_id is required"))?; + + let callback_url = req + .callback_url + .clone() + .ok_or_else(|| actix_web::error::ErrorBadRequest("callback_url is required"))?; + + let fhe_inputs = FHEInputs { + params: req.params.clone(), + ciphertexts: req.ciphertext_inputs.clone(), + }; + + println!("fhe_inputs.params = {:?}", fhe_inputs.params); + let callback_url = if let Some(new_host) = config.localhost_rewrite.clone() { + callback_url + .replace("localhost", &new_host) + .replace("127.0.0.1", &new_host) + } else { + callback_url + }; + println!("callback_url:{}", callback_url); + let runner = config.runner.clone(); + tokio::spawn(async move { + if let Err(e) = + process_computation_background(runner, e3_id, &callback_url, fhe_inputs).await + { + eprintln!("✗ Background computation failed for E3 {}: {:?}", e3_id, e); + } + }); + + Ok(HttpResponse::Ok().json(ProcessingResponse { + status: "processing".to_string(), + e3_id, + })) +} + +async fn handle_health_check() -> ActixResult { + Ok(HttpResponse::Ok().json(ProcessingResponse { + status: "healthy".to_string(), + e3_id: 0, + })) +} diff --git a/crates/program-server/src/types.rs b/crates/program-server/src/types.rs new file mode 100644 index 0000000000..1d83ba9b9c --- /dev/null +++ b/crates/program-server/src/types.rs @@ -0,0 +1,154 @@ +use anyhow::Result; +use serde::{Deserialize, Deserializer, Serialize, Serializer}; + +#[derive(Serialize, Deserialize, Debug)] +pub struct ComputeResponse { + pub ciphertext: Vec, + pub proof: Vec, +} + +#[derive(Debug, Deserialize)] +pub struct ComputeRequest { + pub e3_id: Option, + #[serde(deserialize_with = "deserialize_hex_string")] + pub params: Vec, + #[serde(deserialize_with = "deserialize_hex_tuple")] + pub ciphertext_inputs: Vec<(Vec, u64)>, + pub callback_url: Option, +} + +#[derive(Serialize, Debug)] +pub struct WebhookPayload { + pub e3_id: u64, + #[serde(serialize_with = "serialize_as_hex")] + pub ciphertext: Vec, + #[serde(serialize_with = "serialize_as_hex")] + pub proof: Vec, +} + +fn serialize_as_hex(bytes: &Vec, serializer: S) -> Result +where + S: Serializer, +{ + let hex_string = format!("0x{}", hex::encode(bytes)); + serializer.serialize_str(&hex_string) +} + +pub fn deserialize_hex_string<'de, D>(deserializer: D) -> Result, D::Error> +where + D: Deserializer<'de>, +{ + let s: String = Deserialize::deserialize(deserializer)?; + let hex_str = s.strip_prefix("0x").unwrap_or(&s); + hex::decode(hex_str).map_err(serde::de::Error::custom) +} + +pub fn deserialize_hex_tuple<'de, D>(deserializer: D) -> Result, u64)>, D::Error> +where + D: Deserializer<'de>, +{ + let tuples: Vec<(String, u64)> = Deserialize::deserialize(deserializer)?; + tuples + .into_iter() + .map(|(hex_str, num)| { + let stripped = hex_str.strip_prefix("0x").unwrap_or(&hex_str); + hex::decode(stripped) + .map(|bytes| (bytes, num)) + .map_err(serde::de::Error::custom) + }) + .collect() +} + +#[cfg(test)] +mod tests { + use crate::{ComputeRequest, WebhookPayload}; + + #[test] + fn test_deserialize_compute_request() { + let json = r#" + { + "e3_id": 12345, + "params": "0x12345ffa", + "ciphertext_inputs": [ + ["0xffabc123", 100], + ["0xaa6de432", 200] + ], + "callback_url": "https://example.com/callback" + } + "#; + + let payload: ComputeRequest = serde_json::from_str(json).unwrap(); + + assert_eq!(payload.e3_id, Some(12345)); + assert_eq!(payload.params, hex::decode("12345ffa").unwrap()); + assert_eq!(payload.ciphertext_inputs.len(), 2); + assert_eq!( + payload.ciphertext_inputs[0], + (hex::decode("ffabc123").unwrap(), 100) + ); + assert_eq!( + payload.ciphertext_inputs[1], + (hex::decode("aa6de432").unwrap(), 200) + ); + assert_eq!( + payload.callback_url, + Some("https://example.com/callback".to_string()) + ); + } + + #[test] + fn test_deserialize_compute_request_no_prefix() { + let json = r#" + { + "e3_id": 12345, + "params": "12345ffa", + "ciphertext_inputs": [ + ["ffabc123", 100], + ["aa6de432", 200] + ], + "callback_url": "https://example.com/callback" + } + "#; + + let payload: ComputeRequest = serde_json::from_str(json).unwrap(); + + assert_eq!(payload.e3_id, Some(12345)); + assert_eq!(payload.params, hex::decode("12345ffa").unwrap()); + assert_eq!(payload.ciphertext_inputs.len(), 2); + assert_eq!( + payload.ciphertext_inputs[0], + (hex::decode("ffabc123").unwrap(), 100) + ); + assert_eq!( + payload.ciphertext_inputs[1], + (hex::decode("aa6de432").unwrap(), 200) + ); + assert_eq!( + payload.callback_url, + Some("https://example.com/callback".to_string()) + ); + } + + #[test] + fn test_webhook_payload_serialization() { + let payload = WebhookPayload { + e3_id: 12345, + ciphertext: vec![0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef], + proof: vec![0xde, 0xad, 0xbe, 0xef], + }; + + let json = serde_json::to_string(&payload).expect("Failed to serialize"); + let expected = r#"{"e3_id":12345,"ciphertext":"0x0123456789abcdef","proof":"0xdeadbeef"}"#; + + assert_eq!(json, expected); + } + + #[test] + fn test_deserialize_compute_large_payload() { + let json = r#"{"e3_id":0,"params":"0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000fc00100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000003fffffff000001","ciphertext_inputs":[["0x0a8a6c08021080101a806ca049c3e165dd0d724db8e7ff91bd3cbdcaa21b19e3f5d254b350b328207a2d854f4b244107b674477d101f50daafd23feca3771c0923bfc2a19a419e095aa967a0d7ed0c7b59665acbe2fe8ea7a99874546e2092f93f37be13879d8dd6364d06b18f3fdf4a678d31b7456222e772f9c6c49ba9e4d7541fd859905f357acc380e3bc259eb987a800d20feb5fc4ec89a5d6ba519ffcd7d75e6ceb448852592db96bf1ba3e29054b4aad860a6f433eda762cce5960a23f19ca5f6dff895bf5bb78a15e3808a608b9ed38603481edaa9208f0887841ac4af289cf6b6486042dbf5e2ac1b53199beeef6129a45df4c6521664f304b955108539dd14596065a14d3f339936b421dd47bb66b2a49b367e40c8f9dd09697bc04aef671d1db930b0855326a8eb31975415d500b0040e6e56f40b6574e5ff2cb154d6168015522e504de9b25ecdcf3837d854017be5c80bb847f368958cc1ae157e82475ee52c9dc7b5e5ef334201c370af95a3af1c790ea9e27a538e44e3d82a6b0181b7ad883e4f7def4d2706c208b3e7441d9afcca4dce9247fab7762a6ce2d1624b3e18672610f219bc9755c8314265185fdcaa3dc203bd79ec6e6ed4a7b0b3ad5db383cbf290acb4ae9eaa8904d3216df99b68acd1efaa78207b89aa7814d05835b501680dfbf8d8079dc01312ca147f54234f010370df9ffbcfedc737c87bded7a901cea5a3077ee7fc4af96f8e6386245abf707a6b68f1fabc4b6b0d1704c45852aba599db14fb1cb62d6a1740d5813d6bacda9107fb6b0a1e26c2d5388fbafd9d53b6c0e26298742d3c20ec17cde0720805295ccc8d5fc930bf683b83ab644c8c59b55d4a0418938f44f597cdec69c97c8a1baef1f674cc18afaab16a3138ec1ac664c200659b55f18fabb7db1b17251e63b05a556f129659504f6a2a0207cbf2ffe353aa816ef078ad4f6ec2a6a2e5a7bac9b3104b1b6c234811e1bbd415594151b73a334b4c3f28dd865348568b3a4fa406e56dd7b1b0562859c8cc1d0dbd2b72d34c5e4c9a7625024b6e3918e1346aa9c82280787c4de8842620ff78483eebe5349de09703afe32eb938e68c2030e9c0a8e4ec730279a1eb63291801d391cc89b6d13febfaf85c82c832af74681c0483efb6ca8a384b33775720246832bbcaec495efd92f72602e682a75c9d9f6d0ad35e73d1a4017a3868adb52ebe5a080ff6c1b8c7355eb39730b59c3c6e9a24c483bc997eabbdfa778eebe9d3f44e2e195b8740ed960bb27dc1fe08edd8bac12b264cecbe548dfd8264ed7669d7534a24f098aee146d46fc5efb6ada42af40899b0de9ffe27fdfbdbc6f914d6be23d9bc15691876a7d64c7aaa0fd58132f514fd3e772ae6b8dfc76e939576efec7bec78214a7aa2675402cbfd1c44f39af967004ac409b6743ca4f3a7acd50ad4af945c4d2abe0397079eb39735cc7ee1418026bc6822b8e42d0dc46b1e2c7db2862fa057c312c3c76e82d2e0987d27b7225e4b40eb67edcc2b35e671884937f2992c25c00fd8cd24e987ffb0674627dd613b2393040a70d5f7caa12010651d0d7ebddf17acff6b156562e61086e68971955c03fe0a7355038ea108302df3f47a91dbcd4fdc24a5e37920923f61c3a8cb665dc41687c3f6108f4dfd4536e305fa394a92e554f5fe3cbcb7f6c1a2b6799ef2690315ba07964fdafc64944d6c54a600362cdc6e4e00d1747cfcf9c433422607d51ce54dff2d7c09dcbf9fc282d4621c8d881e6643eabb28ed20188d6cf67ab7ba7f45fab1aca01d26b4a0076a6b6f029427ad2cc7babda3fb75cc044d70cf4aa9b6da079d318b5b4d8379a1913e80c5268ca4151db34da60343ecfd5fbc4fa5749cbdc8d432180dff3a480c8acfa6197c400c42e3f8eacebbd769e4ddd2374de9c750f84063a827715457272559035fdcb6e39fdaac699d7285be86d3aa64486085d3ad9c43344c9b3736c2469b9c7eb00cf98f0466f07f738cd3c96e12ef0728f20116ad462fa9cba27b7b7b0f6b18e94050c19fd674e43a2127bff51045ba975540790ef36fe3bfc2db738475b36f6abf5e9140bcddc95b1ef31992c38e9c96553d662f5f9b352b33237cc46efdf5f2e35980f07342678ade5ac5258463973f4d05f63edd0479723ae6a701989433c7d0dd4534d82e73acf22e4486d1c61e890e0246020b4b21563a4290ec4361b91517cf8c63847d48b36d8fb36c0dddc454f80671bf2d9d71f35307bc789948e27d9f23b079fe2ee1ba9e0504de1ca324c24bd915e049394bbf7c28fd327ab906a18abb6f33b40cf01a1217961948e8417adb55d54b7ad18e04c8da27f881bd554cfa46636e11d0a60ae5dd7f2e7ad27800ce53e0ac3dcb2e8556485b874b16f49486f9d26acd1d6afbcb06e1da93717fb6e94f8f0cd80840ad3f1ead39dd3faa2fc7818228963b1db2400984f94513ddb427176a63e4af53da9c31f9d279439a53b07e19ab68085f5ebd9091b2cdf4fd85d19ea757cdaf462b13871ed5a918b48aace7c5ac1287bcca734c65c5e330de3c96ea6eda9ab1450afb830e5afc88b2b925955097c4ad1609465368fda745843da614a97f7411d79268b4f2361e9bd83c83528dbf1a87fc6f89a7e2abd6bfa27c1be2270d28b6963142a07e6ee8608806f34247e2848e7a5befc8bc87b221fca7bce629d1c72e242f40e44edf71f062501947d68b2fcc6e038ce8a43dac30e7eff4e74f3c9d8f642ae90b57a6ab886bfb60d3ba42840270b15830a75538cc33fcc2bb149217530754ff370719d125f2b41096cfa4c745de9089e69dbd086a06a704abf108331a20a5ca1a72b723ffa157c6c1cc7b8a97bbbf3928f014748c9fa89542eaa6016c664eebd6cb01db4839c2083d5a4cc38a871cffeb3a52667c593ef5bf65c11b4ea4732bd3a6fbeb8ac389de161c565a6653499ffab5a71b09ace40dd79b6d7ee919db59541ed7ab694d817e37e467dc8429bd58b8ebdaa6c1380b0269a87e6fbea6edcaac0b42f5798cf0cde4a3d5cf5ddb724858b63fae88826b115d00c00bf0a909c1d364ba5766c890eb4fb865b2edb3d6726c61d449406a438c7f1c853329a62cc791f928ff449c4f289aef8a72da06b772aedb21113c27e79fdff81550f7f5269ead35348116eaf8401459efd3da0ee6918429ba16335d535f0af3d33d8a4c146bbe390b0ae6228aa41b37ba9177f5fdec944ff8156cb4ba786145caa47e4c3513be0fb8e9cbb220aa647f9c87cec202b8d625c639c8324e6233a10d0d74dcbe6d391cb7f5bd3e9ce30299cb4e01e569bfdc0324d503737e9c28c58e3269deb1688bc70c0db4c6e4c088c5d1aaf31c598c010a5590fc03d9262601741dbf0662aa71f14fc4cb3643fd6559b3407f2f3469ca208187e22f6bcca28df708aa93e8dc85a64489565cd69966cbad6a0ed805bff40c1c9ab84ccc6c4fc5ba8aa71720274301702df3c874813977ce2f2026213924a66557b88fb526e12b943bf9bdbc496c2e35c4193457650797b599b6362bb6869939c0fbb51486112a8ec38ce49d3b3a3990895f0aefba7bfb928357551589346830eb3882cc840965eb55b8860a2594e613cde2613663327c062feaa3bfbe192c5c53a29166add212d7ace1bc858fc65725163dd5fcce9e12f1102e320ecc623904339e370514e0ebc4a3ec8ab11bd099ff8805695436548433fad5a69d7e08b3b8e1569a0eb79a77e2252442434393008bc2bdb003b2175b79f47593d99146d041c6df7abf8bbed6a957e7deca154d53d597625849050c453ac2b8bccbf3b49989d8d0276223dcb97e9d3f209640fa2d455538fffff1502987953d5a34e27088515bd08cabce3d9ff2e35ed40f3b464a1797896eb05f79714a855b013d864714e16a553ecf79f71ee935871bccaa30c408e188a48f4538413ae13fd2091fa1a36acc981753e937ddb90a20af6f9eb2679ba5ba50a77d69b5ee62f11d1bad3d3efe31bdf108f1620417933170bc9062c739b3848ac61f68cc02b01987b74d33a6ef2025dc512e412153ef6a69fbd767516582dd090ad42b4e74c726cf49fa79f7ee18fa003420f5559f345c5b7deaaafdf33dd1664926ec339da5e08cec6a207f264323d70f90109a3621fb5bf2ce0672aa9c4bb52f66a0b661866c9792328bcf9b39c0073bab28757a006c9c3d862d6e208a16f35714f4e562fc10881f503277e035b9bdb9b2851204f5fe78347c6cb34fe3094fc5b41433fd509bbddb549840ded7aea3e13e3226893852e037c12f1ddff92ae671db83e64f24245e2148194b006448bfc6a3ca1b961c49f6850f8115f3c17c7452cef01aa260a2f648bcc4551ed00ae3b124f0bb37a2b50a206483cdd72673bc366c88396b76ecd789bc32c52a59cfb322a1758d7be23599e2f41a9d50aa3ca12739f0ea9fa82840dbb113fffd6e9e1fed7af23938c81d1801b1551216180f6a891b50a4336f67d4bcec74d8748ca2289da14cdb975c22a00f746183fb2407c38f006a246e9b1f562ad6a0ddc95f820c9768975310558044df1c44c6abc099753272ec06650a4a1117cdc10662bd19f66d9c2d8596ca2eab7137fc731f53a93154f37dc24b254d1c03d1d85244dfda7fb8ffe8711f6bdab0da62f7bc77f172c4d485f878aeb1ba4fc9ef1883bac943982341a39753ec2ef9b5c305d706a8b48c69a119986e4a35ba87036ccf1a2f3306f07b5776a25659b7256581a9bc471dd86c4f07b348dda7bd4f9f902e41b0155b0307209d5d61c400c1347b4de54caf3161ccb3d7f0b28661d57e737dc625ae60c587d3c55fe039dfc5afde9d4c159e1945f42586617501ad8b1aa0d8cd2449ab7f6df7aed7cb73b90c06753456b929039012451957670d1ac9370f28e5b6581965f8b143ddf2e2e5fbb6d8e43f7de75ee7358749047e97169899285e85b6fcfd4e4bf3238e8ac109e6b399c9209469b7804390970b9d0bfdae2ddb5a9e3bec72bbf458e1a23faca596cd1a432ba9e294503a97870e42ecabd3b5e372b9021d96951e98b85e4899f18d818189e64497f89d9e3ea93fafdb6ab31d88322e6f82341535ca39520827b8af3966c16ef6bcebabe58546f206b63745214c8d2b2d31ab1a54638402ac48ce253e8de8226f3640f989ff5968a1809dc010feb1a8693782aba839563c8c18d2d23a7969878f1585019a0c4475f3413479eee743f29d26a1bdde1922bf9fc61bbdd0ab390fe7cf74cc7ced8242c2c024e097fd17a96dc1e6cf5974d8b9469aade07334da346f589890a1d98fdbeb3a268c165ed4caf2655a2133095aa1e4574f260d79355123feff27cad8b5c51cc1e8bfba3af0834e90875e34129253e9d4659ef75ff71cfc49fe82b1c57b3f1deb3e9a37daf35e37f52cfe98a56ed9d3633ab21d39376a4c6e55771983ee57693b2dc28e6a935f84071d2729d308b8ad192568800ada82ae9ee44269189951f120939fc73f2318f75ed4d89cc135ddf2a5d648dfc530d55c63ca4283ffb7153fe86a37a549878995e4fd48dbc816e3a7eb705f8373ca1d1c3cc07de5cbb5dd5b0ff68a8e6f64f76c60e3362a10851321383a7f98aac1e0006c0fbe193c2a7827a298fd7d5e30cbc661b93172e4e6144f6bf2d23abcb7b8740b6f8459f3bce6177f6d0a92a26e9683c76f0e6b615cb09d251896d30c23e0ec1ce88433b8f8ba00014382bc87e0769588b5b5b970046dc9274e56d466ee4ef59d4287185aa4e6b9dc241145421443ab0c631b579462513a87468a7ea08c4f76d2d4d788017a4892a4efe60207f7c884bcd6a72ed45ceb6e99246f18b0b94d854a27a1084224299ea2669029ed01957952ce10075804bdff3d4ae0e58115319fc146481902fad05923e1bdf3a1511bdbeda1ae9d587edaa02acf0ac613889c4ab7e8b5bdd28e85427921e15c0b4f1c8404bc76d40d138e5deb02d632d7aa4d2fe8460ab8136928b456ddd4f642dc24ac0e0c21946392b8ec5f74f4ee9ff0f66d1042333396d4cf14f0cd6c8d76746af2440d70b22810e34f5d34d679a82118320fdb397e65fe2279337a226161197e72a3146d006f24fa88647293d959d8956a480cee9c298d734ace59297f0e51506da0ae462fa966d869bcb7923278b4e74926384ff9ef102a71d74dac0290e670d1123440484aeec7c77ea1388214422c27994239017c1b2473540b662bc30222affca45b054fc1903991bcff310321fa37af7af15f2051d11d8b12a44f20ed4dabc8f4be5c2ed91c35e9ba597db04fa8c1169c1765fca0e7884446c4787cae17ea7970d566ce218de3c76a7e65cdce6eade69e8aab807093057f4489606ba4ef49e70fc78974ac2d7305cabf142f3d0277dd995b13eef79b0fc397b60bce1827bb75e7cecaec8ee33ef0e0fc01600c8d6e4961801639aeb287159f7e7ca0aa151772a66952ba9c91a803c59d15c81e2431faa3274aac8bb2feafb490f46acc508d4d018b39a140f69ae252f798abf2d3671fd6ab08995b4a4ed85be958b7f44b837453b6596b610b7abe2d06842fb4e95142367e80d2dabe6b8c17c27316747328bc93d665dca6280654557bd14caa9ed1c808bf12bc2cc47ef2f4773f7fe596dd6ebde449ca20bd3946e67074229a69ac1f08dee5d9ace9c3d9ab7dfdfd9771fc6c7c2366116ebd7417dec676d1ee48de0a4a498c2eb031c89a82ba8f6916989ccf32c3c029af45a08d0d30199897d05b29a120c299812e7c8f992383992324861d57f27a553cb6b50a39003b567a293f496969bf5a6f4a3a197fd41b3fcabad659b426398942cd8b79fda00d644ec1429e60c3f16d3000c7b751818a548722026deeae5bc9dd295debbf52296adfce9e8715d6649942cc23bf80b38c2dc82f8ed1cfa30a0d9bb1d8c4a4eece32fb7d8e3e792ca8879785151a0e5443b63f81c9e52f842c2dd5633ca97a1d550bdcf7b165cb04cb381984483f0a49e79dbc578ca731d0bdc7e48921ec371f40b28ca92b99f2c6a022c23f23f9ac8eaf9e9cbd7a35fe8546dde4cbe7024ef9cc1b161e56fe8d8394372ea871efbcde6ab292797853a8feb11fb95ec02ec9ffddef8eb58e94b949a33c08fcdc5190ce14b60e82ca9012bd9869f376b6bed0d8582ff1f782e2821fd410a5249ec3bb5ea0efbc01df1c5859c179a7d64d2645f6fa02ca93d88c998f644dcd892d25a6a9a449bcebbc87f4b0861b5af3165bd30638e61236ff2f857160a8ae9cf9309efbc8fe94ff8e6fc7454f1c81ddce47dcc0bb80192352b4e25554250151c21a21104abdbe8507348763beff441739eed1aca278a244e812e5efaca70127a16a3c9c64779b2de4eaf936e5f159f8f38d5197575fc83ecae499b6a0e427dadc7717e166009a4026ba04938a55f00dab1587a4fdf75d89ae6d0c9c21debd128445fc922804097bfe260311fb19aa1d1835c1f0db069982e7a9e2ce09ff8913bf9e3fcc9988de2ffc237acac8f54f95b6e1794513c89e2dad62b5775f588f5fc6d2a48a43b9174332040bc89a27e1512facefba82d77f9a3216a36f28271502bb784cfd5f5715c806f04b46273bab8fc0a8b12f39d4d4da79bdb865598a774e710e44327ca33bc39d70e93d36cd05bbc3d56b997d9f2ec01c46e64af25b6005091d0c04de503d46a046c9a146aa35f0b06a7bd877e84d2cf52d6bf8c353d807c4d962eee67f2d5aafc6071fd62a10120abe17fac0281a0478d53b37eba1cd17e31ef4af12f42f52694982300f2a046fb3af606a9ff257cfe9ab0171f4ddc6e45d2613c16fd3336394c13764b98a2fe8f22f85bdca4967bb7c0cd0711fdaea11f56be8dc79ca079bed6d73957d3fa816ae883613bcb98699b833d55e22167a4c5303e5a5a0e8c3f5f385b269b9297eaca3aa023b91ac1cfe193042fa92a26ccdd96f522d729335b5abdc6aab80eefdf02e85a97b4a0a21d5173ad451294cbeb99288a1d6acccb087a4d9b3218dc3ad84868b3b21d01acd4cfc3a97a3579f2f23db1d955307008d9251999d362bec24d50ce11038fff143d70b5b8523c60fb2f56ea4b5101046e46b219c09f181ab3d0c6edb7cf2c7f901427314f0f0ef6636f7d670c8b241d8ce9d3161e1a7d736e47135c6167e26422d684515dc6d90dde11f2a38423ef2cf9b25c8ce0c97d1f8fbd3f4b7d5a3cf97d6424bd532345c4e4024bd3ed6ceac4c922632d42bb4f187509d63f32fb0181cd061e8ccdc45f2a30702389c798490e9b82a0b4c23dae3bf95e246312eaecdda39d9d4b601fca0b2bda3d26250fd35655d2517f068927965273a9a6d14cfe908f0466befdee963b766bd18a85b9af93dae09688d10cfeabdd3405737bd9ce484b16184772c3a40c9695fb54dba677bd1db8aa64b69ef2069e14493e7e18b9e86cfdbbb85198d73a932a6e972d830a0de56fda439507dc95e27db1c1512774aa91a4042ad17e2c356e94cf3bcdd247b39e5825440f65552b006db2923cca9e22f200fb21e6b7a7534e67d5a79670cd03659cc3501d752613341c413558de1ce4b52d2d3d5243b0e1f1c3a3d14bc6ae6947cd11157040804d2412d27b20d567e0ba88c03c1b60196fccb44a43a75ea0d0b70e465bdbcafaf74df63f5d1f5d958a59da490bd166dd18c60a726d0b56a1c67b04241a7f169fad65144ba0f0150abcec159c1693089ee93dcc37c2d099dc7f68181971aeef873a7e20d7772413d5cd245f3d9a5e56e0807139872bc332ae7df88ff36f4ced695582e986706d686359bf23903f994e5fa239c30fcb3dc85d3f8e28197a50b31c58dd19a8d33286fb03f923323072fe91a337a8d63aeb8b33e35011db017acd3287ac3e222f4534fd097e102eec9f22031b0ff0eae8ebdda1f1eb36cb540160fe985cfa28b36490fd350b5fe78a76758eb8bd26234832075e2435fcae22f60d6206cfe7bad8e5858e17800d3f55cfed826b920ec582674cf1ffa0c2517540b3742b09f0117cfb63cd68b13bf61f10742ab301a859122d862cd2c9bb9a70e58cad3c896686f937b21f653b35275c7b292b044d0e82868467f5d293f6e6ec7370c9ee7721b44dc6f19470726fe79dbe51f2a03bcf462f2194b0caaecc00550ef59edc6aa9acce9c2128263b782c5aba11e01ddba83c94e394d805c635b5ba01d55742554b3f2c80a05ca7257bfda43583e9e5cec06d9d0d55fd36ba42bda87662243a2978ee3427ade52075573018cd0b429fe7276f9fcff19f5df1596d76e253f8d6228821a5da697abcfe70ecc243934b0f75361f607ab8a2ee00dc5a2db003089039fd19d63c569aed4795debd782b262e8b968c5bcdeba373be6a41dfa08ad64da32ef7cb42c13a0f757c13e2d40bd8e9eb209b345bbb422ac8627f20b2d3db75f7f497f338f96ec013c81044e5761f0a562aebe1471cf5c47cacfabaaa93f9d659a90c3919f7fc4a9a9c1fd0435cdcc64815378aefeb182c95883cc6e18032e67067c59b2ccc094fb9d52f571873fbb59960050e2a04bece86a4d23640a0e251ba502ec4e2b3e0851ca98f88bd707a0aa4f2b507c15e4b6d38f2aebaab994ff884cb4ec0b3e7742b9f912bc63db025722787b5bbd7318fa362e83687e33233fc419ec2b65336cc88b10c73944f20ee4b57cc6d01e00505b0197be281a316006deb57ca466fd8e1c67122a8d95289f1bc4ebea5f30c3bfb7bdd322a4a993560e075951375fd901ae2a6b531b35ffb0c0797b3aca5e13d0063ea60e2ad9af26e2ff31b6dab7d7705e5475daa187aed78b2814c460742140e4375f9feeff8f0e67750bce584f0c2aa1627ea49f7cec1fda009dc47479359982a75c0a0e9e62e30e8ed113053cb4995e04997b2d1610fa58915ea4c87af5ef7e86d839a98a42686648e6210220fbc3392815c72d67a2e7d9d84590a4a733c4fe5e539ce418be57eebe16b2d8059d61f61a6f4c9a314d99973557fb2a57f54e3ff24398954d71fb9403ee44cee0e83dc8a90af13a57ba60b9040b575ee7045246e1279439f88a875d9dcfde6d9b132e46cafb43f5353a623b11b0d357e19470f764a53c43922feb3a9995bc8535ae4e577166837090775fdb4d94ee07bc13e780110207ca424fef4cbeb95bfe4da4fb151a8b3f2e864071a964c4746867f4fbc091b62a30860b9d61658f14615736eb244cc923a16fb5462290769d4e9cef84918aa806baf16cfb383397165ddd39ce9e9ea1524133eabe820447c1bd50878a1569db9fcbceca624e9e7695b7cfaafcd2e9ff876f05f6da03848caede660b8bba9dbe898ca05c0a076ee95ff213cad1b3854b51349aebe065a2b1d1f5c9ab080c27a15a9120ef9193eabe60f38505f62d3d473d9236f81d0a359c506eb4530185b8071178b8545df1f831e93d3992282df185d698471522868bee153dfa1678571fa9a800b035ec08d37f62b19849410db87915464260c7678b485e053a90bbac8b364aefc448aeb176231eb7800b17648023a9acaa69c193b9fff902f6f1c09dc10141b931f38a53860f20c57f3b2f2ab8e0c0d858a13ee3d0f73395929528854d9a2a8fac97fdc4384516ed54c114c96dc88f0dcdb2f921be29778a1b61b2c4b6339d6844227a7bf3b8c344f0b1f2eef8a27048ea785c7181a018721400b1c4b604497de4546d954c76186dc12986cbf08aa90bee611ac28c426c2040dd29e8437a2d11c29a1dac00476012338911e0fa245df97a6cdb8ef23d13506a838f19c43fd33b11476782d58135ed7189da165e41fa04890f15409062f391e381adaf33619571ccfcbcd60742e2d430dcab8425ce7dfbd46ef3a72e027a376f1a2fd1e92e78b86d5d82d45a66f9e55a32fa4b0096f5abe089187c8b032b4b9f224042bd0a45a5b6fd3e29c167b5e715cc89549fb40e2e4e96fbced9de4b4ea8e4018c665d17d6076208141a94bc5362583b2bbffc9fc8d79306be6a310c95a9b6be38ce429237b74c332e1ee1bea197917a1a2e4b7abf7abe3eacee0a945b138df1fd6b8942788cad7f116ed1dc5a419b1ce1fc3965ee17a3766ebd58c5ab61058cf6ee1f321c518614646cea26911914851c312f372583f385e79a1dd2ece6455dd30245dc046742a8b25763e6cb7e940432f46d10c5be70d81954067ff3f9db070df81cfc4da0db1d2a733e2770febf22858a766e984ca8b7b607cd749bd3a8ea0147d840bd24ab0022688bf942b651bc0a5651a479392eb507da1a3d9de2015e57b72ac1abcabe2c407ce6894087e565e27bd3ee9eb156d384839c01c5357df067e95fdb896b956906a734d5f6cf767882f2a45ab63e46f984030ad9a51b82e38ef8ccbdba7a0617f5ff499433d168a7d60194c076c3a66c1b52bf9cd0efcdc4cfc92b7f3c7a4dd0f7a12c1cd58a477a072033c156a7fc81ae128b9b3d50cc41acdb56b129ec2edb6d1b81ecd60737217382157ac1ea63e56c28f82c6d3facde849d4bb5cff9e749a88f7afeb464225d6f334c03f70b3da3bc743e7f7c5eaa46937c4e412a498ea1063ce4115d74565faf6f6f81cddac4595a32ab8f9867494e4793d1b5965558e264f7b65085441007adde5634feaebaca9cb0c4fbd33942fcdd7ece91664c54524f00d6dfb9563421527dcd219ff54b2578dede9ab9e2e01b5e5012385de900747caa4eeb772943fefffcf862be39080c2614c4d2d02ade05f30129d01007643e2e5105de0775f8f9bd63a83be110ac8b47d5c1986fad0fb3f7cfef8230b9e6eeceec85df2758631b1fc5bcbb91a3f8de6f7251a31e22ddf822cadd66adaadccd0a8853cda0ea06e2825aa6a8530412d88cf37845bc0443d3de39f7338c5898f82c268f60278d366235768c692946009a93d9f6f21ccd38b52301dab871016fe534b0528cde20e8d30bb8b3143875d84aefd0e2264b39098578871d0ede2cbcb274251ee0ce92ded6edd794089b7f9ad131a1ed69f349ab91b8d82f2cc76d9e3ad216404964d2a8d2e9226c3121730770cf43be4ec216cabd1c637b652c15964bbbd8bb22ef6080eecfac4b99bf87e16f4973299cfcf0d666317b178ab8c56b3ca8d7b0da257ae7f875db68ec2da25722ac7fcc1a1fbcfb3b8b771db8f6b4f9d079265cec3a343fa4a90c8281a3e2068d915fd4ccb1bc8a679e11595bd84f9024404e986316b450c87352f7e818a48083573af94b41571ac81aeef6c9c97436e622143bd2fdd82a54ecf0d3a254528c0218bc322cc72d5ba4e6e737cd1321b55145727772337b5667ac8a60b783c30130dd7961b2e63159cc9ef866219d2e316f5bb54cd399a4a5c3f465b924337f1f9d522087ef76bbe4a605dbf72ca09ef27274c77e765df97eb974f84b39a228f65d5558439cc7259dc4ea0b308c2afb7346236496dfe89a4b4986558d6822fb409ab59dd2d9552cb595a40b83aa7bd1cf0562bc97cf704f25d710799dbea51cd0cab61d3891a1fdbbe46343c593fca944acfff6887eef099f895a13772aca46265b3a87d4792beabcb97827205da5b93aa61275f2f619743caec9327fa981bcc549393c0b58ac2f076f10506378bf963cbe55b0f06c9a71c251d22990aee58e31587857028c107f5e610c1c780b378e78bb2b761aedb9e764cd7bc26b5425197ab833892b8454ab02e91215340f032ce6f35249517289ff62266a30d636c532f065b5540c1c55e746ce4c605f53f3844dfc12c24c4ab941613cb2acf8571219a1ad04ec2f5568f454c089b82186afa26a0b8d5ad36a79d73f1ab9a9ae3980e41ac827ecb5bab47a86841f14134aae92f2debb3813f315d909bf3dcc16707ba9fed3f471ad442108468661fcec68424f7cdaa62cf35a2b355437d42269a551f87866cec04d0e421aff55f7c80ab439ded71b50dd03365fa71167537fc450b83fa442e1c91de25c09d07d51bb1775e95d75e74420fa51c71770ae1c0830a56d648fef688ef9779406ed4b5e965a9a667947f28f241d0a22e8f01df4c18ef4e3cb5304ade9fe45747050250e64f9585d5de7f783b37ba9368f482bd5a4d2d9d1ecf819ebb0be6442a531d7a1c458078e399f37b4f251adb56b7c972355c6a0de6b7cbc740fec8065035d7166acd87390f13d5baf7d6edf176275181f288cb1b24242291d133d8838b69e6c9351f090abf52da73ee16b8a98c808a2afb0c486dd186e245075b1f28d70068aba8b907215901ac0dabcc3417f08aa1fa485941860865dc0d904d39bf2f18fce14030ae958879ce9deaf78b83cb4de9a57efbe56a7aabd834cfcce75123ca9f036f3cef1d56937a84d3bb92744a515252b0f3bdc9d82a03ad639f7e13fc8d6fee9aa8a561c787c391d237f4ad892f1d50e37284ccdf7539afa53c53bf97326d72d71a9b70133029aa169b998c3ea757dd2555180a4beb95825c6f39bfae8c15bcdb4be0a6cca7eea462f562ab23f53ca0a800d440746bdb3b4aeac234eac7acf05288181a72ac40fe2a8e0cdc0ff5282bc0aed6ed99b7f060cf92cfd8beea2ee30b2463bdb8ff236ac3068ca5d7c295ec61417fc6b802f1bcf425bdecd2342a962d2ee7ea00e1850830e5f45667fc150b30f0fa2effe1adac431da05b4eae913636ac6c69fb9666d889ce21a21725e444355b200efb4d9296738840e88ead1798cfe9dd4918ddf02c78dff8bdfc382287fdf8980d88b513224cf2afb3d73f248b99e3e97eb414ee266b3cee0d08a9880b0acb157fca424420319bdfe587734d568cde589bb80bfbd79924e3393ac550271e6fa13d70f8491a276157f5fd11ab6b09e94288304486bcc2b636c79af0d64496b7513f6bb34ae9a656e5d0e44605852076fa4c606e5d9131b9ac6f1fdc4e415d663cca6e76fa6a43483d97f17e4de38104db7974643cc068862c1c56b903cef19fcb16150c0b7c7c1172c58e388c33a1b55c728ab95954c515afba56bff5147acf7f3005942714c1cd3b24ed9f3b4b8418c5d6d3a3442d7cb0870f0a5bca6fb4ce31c87e59f320c34d57aff72e2c7de0eeb3998f4a5841f949909d786932b41b05f2dd4e190ba7284045fadc4c0b057c79d00d30e30aa31dbb02c5867fe2d81612eb64316979adc69f9e7668d12aa8b1cc28e7606aaf8a03f11caa67ebb821cf69bfbeff78c544759ab760ca211defd33f0018adf69eab503634dc2958a0231418fad840600b915ccb318193d0716f1206fec5846ccfbd43f985bf9474846b710b5456b9cc2275bc9bc83375e83c87b31668927523d50bff35ca11d8f5c2d23e5423b3a9a496eaec7145e419425e0b5644046c1a60b363a6e06ebbd668138ad4521b1cf09f591a80ed36ae37671b90330a180fc97be3d579940fbf9368de2178a087ecf9eeebdb81fe6e8e2f0549f7ca790d78914c4cc74731e092033f57d918e74fbb664d7e47760a6e1adfc6e67706465ddffa05dff9435eaef6b218668819274764123b4f1a1f1c16f01df4c102efa17752d0357de1184d5ac0b72150e56394c09a8007178f014905b420c81b1a457ef7cfa268cfb4b16216a8238b95466cb11e02824feaf841e7594a65eaaef75f6de5043db3a8dbba764e98add0dbeab420a93f874c5de458fe73e3b175df6c97052c10641d7a8ad310f4416ed84e837c6088e9685394d9a41d8b7e35fd49de1544c90c6113bb16d8cf6e7b365762122260a6c7ce36ac0e0c914e558423791d7c22cf505eb6debdc82c15eeab882e6214e018be2174ba8a3e1f0fdd87c9883d5e3c65cc8c649dcd268cb41f3488adaddde719ed5fd9ca571126cdd6ec76e9f1e831cddf9bb932d26586f934382e15038286ca068160636beb3e1af45c45b42976385adbc2c216875b1d4c6e743c21c241ab4c592e9b95565d0dcbef265446fa1aab340017c87a70a9aec75a8456e52affccbe4011c71287d69c6252acaa8ef47131f1403ff927ac985c40d724e5685c3f482acda6216710d83351c8671dc4a2e693398af92ecb0c9888b9a664c9d70054287738467f9ce13902ff41f4b8f1270eadd50f3a6f3e255275795531eaf8caf034925caffe36343540848f6e6f03033cbbf9c517e06cba124401b2c5985ea60eb52ad88ed9af17b251ba2ba3c59b0b2dcdaaed59bc3a34527f2df832a0d0d6b08cc2e801d332e445e921bd8de2b285d0e4e3d87b1d638aadaf75e0a265b5e1b1170d80bd73b8ad3342a7a981d43835835a62e1c73f3ec7293eff4e91607bb9a365876981a3c93d9aff0831380c6858c6c45c54249843ac6693d530f445dad5afd0f1b7316efc5262225b79cc44942a88bd00a1d98122b730cbae148b7abbc1a6a8dc454d53ef6ead421709ef84b5e7ddaa33c047b3902d4c78c09f8b91f4244068c3dcad9da3f3411a75380ff86d46b50c15e37da32d5869b9de60b907154ccbd6e667c4ab8ddcd730b23d96d0c841932742ec4351e58e6f878eb3d66c268ea3bc2745dee1e8e905293c647cfba938cfda9636868be0a645249fa1165965e02d8eba91860f28cedfffdf435eb5b9c5eab18956af4ea5c449435d6d2927b8206d9192bc0bc1a75f98ececea21d8087551e8b709279372cdcea4f5ecd29efbb7261040180448e293a7d2e71fa407a1962e5c970c603ac44fb4636b37582957b2b7eaf93408118a40ecf8175c8c3d4497df790407182a45f4ceaefb4df68294eec6f8308f5ad7808de8af5eda19d1ca224b3dda516412d2eb76d14bceaaff94ecc976b7f0a761d712825373a5a634245d2df02eec2950c2bd5c125022e6af75f9ff4448cc8c84c2e3081f7e4c1c3c4fd8439db822ac30ac24e8747269bc72b6c71e2d6c6a3720cc54a1d95636054a8e437227c09fea15a46b214ff445dd91a1c8f6fcf5878b6ed8e624aea8777549a80106e5e9b9428e64c3d5630878c033a0e14b5bc306102f380c1d7eaded4ad20b92660fcdb1fd8547d7fd7663bc1b298941b1b4bc15a6964feee961612cc398ca14a74c30982811db9cafdaac5bb5e22d3fc055738f42853f6007fbd198d0414621540386075ebef65a953cf072321d8c2cb8fd3b9f114ff88bca9d0717179b2733f83fbd6ef6b6f645605e3e20675e4b7eb519eb9bd0a50e1e73b8b93418a1677e4c42c371e720fad30134ee2ec4130fc7157f40817cca05ba1e6e585bd8aacf73c0b0ca4fb0de263199277e772594901418a7bc92ca3b787cdf103910bf7a25a48693501f0c1d3d81652fc7af935ec8aa70772d64249e1d68c1c5ad5705e67e9af387a7ba1faae7a69474dd10ca50c1691bf1dd7ba3cf0335ae341701db62bdf231219296c30a991dc370994a08c9204c00c043ff685dd26dbf4298a005cb2352fbd453abf8303739e2731c1ea0406cfa434550a3b93c486a8563de78e8f02bb2ed5ddb358efd6ed39a7610ab2cd00a4c5f29323a0a6a7783a5f5d1e43f88bc428841b0b46bceee1f60e52c16f2e833b15c48736a62050db111808952fa12572f9a52c7f5c31f77fa8159fa95e1d0a10f9e2aa831d98c8d8d2d97d1aa768694de823e78db257ac05fba35708acea795adff54fdbbd9caa9329601abecd27a679b75c53fde5386ca188d83c02097b82064337e402f58df7c1ba86466fbf23392b3c055fae44d72e5c21acf8e281e087b1952be9500d93c6d0d415c4b1fbea5f31dad8064ab7cda41b8eb8052285e64fbfa6fa12db84230c47aa582905926135766e87b4722d8d78ac1affd2318b5b52d37faeb2ac6cc36095f8de3be2cb7a8dda78e6642efaa0bd3d8866509d622adec0d6c1b628f7ca3ac62cd898a5cf870557847c6ea326b4cf4081e2bff183b45cf2689d174562538e34325b07524fcc8cce4cec5fdd8d74c9605d62f93e8ebdb4be0944583dc1d6e2aeb74b6ae978643ae71342e9e1072d717881d2c1e488e87d8b31a38e3e77c37c5402851573ba66482f175f1327174469b7850428a026d8545e9e150e8c739309bb6867f5a26d637eab865a3d97ed91520aa9f8ea9eb1e80ab7c4d7f5a095dcc3eed11427b4a02b9bbb9d7a708290793421ebb69d827d3cf69bbc755d9b7d90320cdabe81a19479639af5d8926d99e9ecd999333e110f4622ca0cd1d003394dcf4547cddc0fbc157709590ea56f1a39e642d0232cd667535b2ee233025ec1846f80850747034bc1491e5fd7b09c3133c0b3a04393f788a5f63d67bd70f45cf446b07e91da3797b2e485fda1f60344558a7a24c5858bd753b422fd568ef37992782ed90b811e3250e1f61ff01b7ef8020e55d76544c5277befc6662c5605d3a02944d6e81cbec2133a9ef3b9a686ee4e3ab58e8ddb1a082af6d91a2686c59b041ad900ba1a1ba9e867b078c3086a5fe8938bc34bf2719610e9319b2692a9f3e6ada18b014ef59ffe8503ce28775d59ec62347bc9ef646f35c099350391354d454852dcbadf2da9f74ff890847c6ccc0f304061d18d3e9d5d1bcb7bcff2ff297c48cd3c2a9930b3d55aa49856c2696c98559990909d2d966407e2dae527a39074863b15186fba55d0c33fbb46ac4a1e596bc647552447e9fbf93e70fc89a88373d8a19d3c29ce4d980b8580e5bc199b8d1f166f60e88e766c1cdb658b93a82704be97e12532141a409ce9a1767118b77379c57b00b085dc643f84a849cf4dbb0b00442a8be01b1496ea5b6f21c43d2f85ef6265fc58ac2a29247cc8ffb3b333daeb386f42b816ba68fa3373691ded54143ccc8473d279a00574a3732f7ca0217d431907e7ada6237ef2e556b04ef999b41fb5d4acd9145a54152367fc86ee509fbf088dddf2c486fbbce8293f3e248046739346f891cb428328e5a161a3ce49fce92410044922346c480ae00523cbd86c2ebc962ee95c6dc4d36447ad88668e6fba64c41da002e371bcc83d7c9f3df5685cae0581272b923ca29878e19fe6f16cfa72ae1dd24dd88aa3704ddc26e2164214e4b9fdc6a494ca7986df01c2196bb6062d34e4c6b29988c2b68bdfd96840aa8d6998ce2058294614e0331ccd2e8e86e5205a55a69db78afa706de10a4c1766255f9a71effc0a29f7c49fad73067d6486fbcde0c88d15e54f3153ce8eccc76a1cac24ba2f710aa16e1f93a1a235e628940c05b6a4ebc53073b767de18b5aecf118afef486fa033b451f145d2c03ebdf47fd8a6a1a42d05d4c2e28c6edd9c0733fe8bbf0f7d1fd1710cdcfd34eb82f80f0b42e05b5d40ae7fe7823deaf5af004d8cb50d8ebbe9b465882c2fd0267c82edf7255df91653080e94d0da44f1919241ff187219d33e385ea43cb36da7e652b3b5b9a229c4c74eb7f1a3011e2cc2edb93fdb00bf7fafbb28d3b5e4d626b29cbac94ec19a772eb7e27dcc38d6309b5feff03bcce8907f6b9720b02f08a8456954cf7718c04461c44ead0c36679dd414eb34f03f29d10db68507ed1f5d08b3754b4974feddc85dd22968f283fc83ad2b4a7feae9e1522415c7f0f818df363b01c1dc9405c5bbab8257ede9dbf02e10736c14e88b293481620719a27378c3ae015357ece9e706a8b1dc8fbb5a2dfb373f63e84bc5393d42d21eee4b5be99e6fe6fef77746049ea781930ae07f924b745b83862b6da37133aca7b6745c46fb035129352a45a7566ef3a53d5ad265421521fdcde90d29849ba7ca321206aa343902ad0efda87ec812d39f512be76121dcce4cce858ee66c743d37de0007e8a63f3ab0fab3e87a90a03377a8d1f38ee93c2b7ec561594e62b43da5862d51e14106bb162a5b54c119e03cd16b46d90b1567f4d5f22e9f8505bfe26d5affad99ba842cc72254a57465819b3484cefb02ff4324d7418f6d5d50727da163e032f275183a4b2f4950843a35cf916a4810aad2580b0de2328d41f4ff8f224cc15626a226da66ccb21869166bfb00c144bcd5d2113aaea3a6652644648b4299440a4015babfb199cb8b89eb599a956eade5e79e86cf87e4c05dc753c749407ca82189741db092ab2cbea875cf4a60335f3b61809b630e5754513b4eafe32da1e9e02bf6dd322f64155c1c17819fa76cbd196d192a7a81ec50df7ba0bd91681aa065cd0511cd05be43bd1c790a508fb131f91d6b71545170cba29c6c69665e01d6866c24635cfb50c6d24f83368342ef09936e31309ba3ddc3542b40aa63cf3ac272ea028a9bcf50b89f8c9f4fd8fab27ecc296d5c313b8c925ede2ca17576e428323b4476252e4a13752d09bfa48b6c15e3df8a3beb91f9c5237fd9df890e5af4a30bb9322d09f193a0ecf40eac9c3654f5fe88e7fd702bfa8c2bf5afe1ecf212d1fa20e1bd6236d709e286f55bb244f3521ecedc94e4039523f55f49c428442ae8a72cb8a104ee227c161b6e48d38ff676d8b262f5476040e0b025d0853bbc9a88192b927fb1d0d770f74b06b1b76c46dcc9eaa6cbce637aba6a980d1313ea76183061f793fe3df6a2c7e5badffbef0cc2d4a7272a3d781000874000c6dedb13d8e65574b3a766b6553b72b93e3fe81c85220da7cb4627ae062f90db660cdbae98f22c173fdcfeab0214fb35383f197113e96a0d2342fefa2f75e297a92e8c65b971e2338862af1a34b2d1eda3b44559edf38ad0985c68d032c45a50ab146d73e106905515b086a56a2efdd0a59bf7f20010a8a6c08021080101a806cc40a5a5e343aee2824b13e7ed4fb4de0cf1398b32fc5a5fdb22e7730f36fabf13b2fb370c2f839f5d0fb6fd3682a98d458a311083ebe20f8476b3abe63c6f9782b1e3e21e6cfbf16dad7bc61747f79a13313874ceab8b619f97b9110d2d07eefe65d7dfd3c347980634fe855caf2796d865a3258abb0d109eab7029d8453cdba2d0b99585cd8757816da59704f028b688535d5a7105a49b6c4bcb38912965e064b485f8599c31808f6b13a16ac2546a24668a3f1a9fb26b14e0b1a3dcd0250192fbc1dfb33c48631ce125084c4fdc2770dc8ec6208997a1bbc99f14eb2bc3050c5177d3678f37011484d7cb8f8d81f8f14f1b9b5a559c210e858480f9ae76408ac7431e01e31317858d4676f2550ea4a5e59a4da03cb11f68fd7091a1489a2a391616171a6ca733254f8d731ca91c11819e3135b2010f54948a3853b966d55d8c8c993e8ec1ded1efcbcbdadcb0468ce3cb1dac35561ed369d3f6b655a92960c4cf4520d0b7fd5505248d7cf9825c5ea35d991db943bb42a867255341fa9a9381389353c6004df18f1c629bf2de786a0291830c7f1f6bce65e2654f7cdbb3c4dbbdc4e62f7417e53d9e8fb1b8ff0ec4a9804bc2ea029561324292767c2c92ee5d31a3d1273dae232ceefc3168036e35723f0cbacf7ebd0a879f9f7bc0e24c90def80706379272b9384682a8d58b6cf28bd17fdc0a04d9e14b3330275eb50a5a9f1ace136a98358f985d549853045e5c0bdd61cb9b01bff8226a46b98734d51dac928c3806b1ab4bafa245f658c33be6e0ff4103cbe7806dea0f7071ef60a877757fc64bdcf2ab4bde05e9fd9d2145ff576cf0b3dbb4b0c674588216bf5e381f506895967ce837263f94095a537b5972dfc5fb6de8d99ea8b8be00fb04fd83dcb2bda36e420f9d87e43e0c559b95605a6effac66372464ae2680c45c67ccd68996e21f080416ae45bd621de88893d537b4c70223a47f8419ed20cbb6a19a095f2122b5df8306b2e1e665a5300269f399ac20a10dfa85252a3c8b70a47e6c11391cfed49f06425f6f140524cf2f23450d975b62303b4f2b478848c83e879222654fcc5f7cb0a34499e3ced1800722da54aef809a9d7654ee0837c41423145a54d1d40d22719a9f659156e184f406493ff7e48a0e37f31dd968d990a1edccebda1f6b55e6f9e46646b5cdad66de43718de1eba0fe11d43cf38a6bf428ce5e79eb2332d6e50583c7baa349301190d3e53f4495f07a0966c47d800dba1e53c7da241287cc77f5f6cd38aef7f91e751ed918af8802a768c536d19fdb15654c380171303378b6fed33cdf61c1f526f61b0c3e9e0cac4bb88de5fb55108f35d3ae47d9f8914c3d883b7a80afd4c2875a38d166a98d78169c448330b8a07956ba52845c1145a82f19fbad4ac171d17940d5c449e7526bb9f7190928123cd98d8a78a8eefde90be4ff4597ac102432faa1752b334b05b7d52049aecc0acc9934bb486300a23f5aea60a754ec895f1ecbc1710a32e559b79d2754acb000ee648ae5c782425ce3dc26a22d85575a8b02016853c471e05f189507f4ab700a5177ca1d501bbd54eb93e5c9ee92f79f79fc5377edd7694bca346cc67a4c0baaee03354f57b8d57b065a1b8df0131cb7583b1b6aaf6f8ab37839006f328aa6b2e5f8bc8488e7f90307a4917b9a0f78cc8b2b2e68d41363dd29d0f890a84f3bdea1cdc0f47fd620059c90524dffbfe9d1d9c48fedd4aed0c5e0dfb4c81b91fe9f4d0b611d4793dab526423dfab0d530dee889fedda823ec9a7213a7323503da49125cb9d93b0dd4ce641bd815a9009c9cd769f32de500358b1fb01e023b54e09783820bbb25e2009f9bd9f8fa8bddc64cdc90180edbdad11ba15674c9c8097428fc49b59643b68a11c6c0ba00d2a8a3001a9b1e4352b31c639a57698a18a049302bc95f78024dc9b9e8457723735d60fca2f0b5934360236fcf1b17c044efb507a6c3d69b05659f538eb4a97eb34636f6053f6619ecde2aabefe6409051c7567b17cfafff93111130a7f84270d91a2c758085cf88ea878e70ed4ced7f3641c67eb2545f2c76024735a274d3521642f6582ef7003840e7f012350fd514b72fa66f59bf865084857c215644edb9e0e75143b1afe221b345982588049715eb0042126ad8ddc70428928f47ed79579855383c75ab7df7a11e9216e995b1171fc55031110852e893950457e423f3bc861686908a2af5c65edb2e5c5716d27f0dc175e89099c8f3289042e2a0c7b8dad546a5097bbb0ec5a4487a97106e3b1f2cc81f966cdadf47e9fdec40623634911a9ef493476c39b3b15a29312668574853ad0202c24cead2e186e39477695cbce98dbeff3d1086144404927296824b84b6b28886f9e7924bb64b550c174dac2f806f916e78619d0b9bed92928fc9319361dafed6f682a839ea049626a74dd3accb61b028968d5fd162684a6357d5b221360cd8adde9f6ec52b803aa2c9d2f9f2cdd1223ecfeb212bbae78329f07a586fcd016f75490fc943a755ef7aec1fd5dfacdabfd71e92ffb00e823afd7c7c33e9c32f7fe0253978f7b654063bc766a23b5848a6b91d151cb8c7af5d49d2142ea518e2ae2424ca8a90684d97cc6c13ebad034a043fbecfcfe529b5cf75b6139cc4e1f3fe90575c4b8d06c07f4cc465d02f074b610be717b1123fb24245fe30c411018e4838b2eebc7c65663494790e08424abdd84e9752b0e689dc6539b802bd2daaf9bb9a24a6f322add96b80f24e79d499340823cdf69f67faf66ddc92055941b9991377ba0118ea86257132e7f99325715bffa7242ecddfe8051b05bf16f8b21df98c78f25eeb125537534032ab0b0de1b9e4c94064172e37880f05893e818904435d045369fa78cd80c2ca56779b461348d44615ab44dab10bbf7fcbb8da1f3757901a39dc4dba0de65b4a3362ecb07e81623a2d7b05685e197169311433dbee448ba93e80b0d0580e5ed231a4fa78251fa02830a437df8e76c668e7cf8394c3fa838552e82c97be755536da9372165d7afbb2997931d736d5388a732edb5aa54774adb45aad60829ea0b56d897c9060af9e5763fab6f5f231c115fe5ede8a6fefb9669b8a9d6f92235528afe5be1c19592e317cde339bc2fe9f5b6b40f00495002320fadac0855ffdb593c1d459ffdca721f624ef1d47d3f4e3329269480274d1f7aec1c86c9bb65adf4a36b06e6cad4774e7a5c5636cc6e9b1fe5ebad9cb30f5afc8b31ec16dbda5e3808ec9f5a9ad1de5fe8cd9ba29b295ca25a341833b33e1c8745eb44e9fb910c438545777ec875fc7ccd2f79d62f947c82e3f2daac82bbab2ecfa4ed3f39129e1c4a0f91eab6bc8a7303ecf55eb666c0039a9b733fb1e6d7d6cb0a852a26bc160529223f78dcfb388d6a0ef4929321bb8b561c5cfa2cbdb04a23d500056f847f393040495b7270588f2f7477cc90ed91093910b093ea510c4b96891380d539e1c971de0d352475838f22f5e4d10c089edf27838a0ca092c700f88401b62a8e62a9578cab647d1dfd53b031a7602751983f7a852f444b6a50651753072fdebfb67a86e420034492eeb94531e86652e08063233c84ab3121def3794d54189b08c3d55705f0af6d4e664188fc6115e985240238afea4eb1e26b91a0f451427b401dc1cdc816fc7f769ad463900d85563fd950fbe0a51713873fa97673e702084b00bdcb4028ac0a5974259de8657ab5b5e0df66c28c2307896103b142e4024c6416df4e4cb1ad934a348ab4a94932e75d063b71e8557e3bfea407e774c434afbda9a418a5bf39ee37e82e9780a67f94cad916ba6ae63735873528318180a8e7a9d60b366f2a8a05a2b368fd36685d1546d88218e7ca99b585e0aa228eea2aa8a896c77ec2569c9a6678e441f6fc44c4da7b3c8eb805e711adcd0d0ab0bc64cba3134a046752d2911748f5e07ec796837ab7787fb533308826a397686a53411d731d341127bd62d7a469ade421859f4fac7d3a7dc3f79ae824b8280489aaf45b7f1b73aaf82900f6bdf0340b9443f242c389449efd6ffed88eb38de8547afd55f7fd59e8c064126d094fba943369f5477d963c36fcad0eead625393ad7b2f903e7e0d9e1bf43618bfae9d5ee9743c7aa7480120cd134ab8ded4125373a76a9348748e2b9ee43ffa54548ddd175aceaae045fd32b5e94c68a131c41fbaba16667d2fd7b7feff6aa5596fe79dc5ce615f045060e625b1c285173dc9a73b99f185d4f2d279723b8ca243b95be151197da9b8597377ad361bfb0a0d410919a6dd4a3286a25a8eefa296a93fe629d8eb688bae4794f99136a78d698a8df0933dfcb5d0324b6431d377597cf0d1e24d44be50da7b00153201b21d885449cdcef7e26995d4a94227a69e1eb7e1405d79d18c4e94b2c9ac9e2b23c7a94d58f3e81a6e4b314ceffd6f162e50d1e23b846049a3a0d3bafaea480a85ce017355cba563cdd96c99183affdfae9dfde777b66bf583c41a6d3a7ab41380ebfbd63ea9181f0c65f0cfa68dae9395a7bc11cfbd5f94f1799a501554c5a8a3226712753f9f5825a50620fd1c5f5723bb34c2191bccd6eacdb2c3a0368d6f8d0c5743d25f948b9a80c915dd3edcdff42ed57d2bf4f8aa477aa7327260ba52be9d409abb573f56be311b55d684f637590e52433bd3280664215d502120e5fbc3f5763f1bd5459233776a44ec8e0348510330d8f20a69fd03962fc18422034507b0e4c3d272985b72aa94f561c4841526c15e268b1c6b8d4be47ed3ed765da7b6843605b25b1ff3741a6146f6958698a46c0f61c10c205145ce2cf79480199c94d92feeadce8a9b8c34b8c87c6f807e81d3bd002fa4945d012c1b1c2e5dc9d45f52f64b139bb436339ae7a1c4e314142e0771c28e27bd6867a53cc222848e0d292c2e70d9bd5cb1d3f9624844fbe49fe02da09161a4bff2ab56d8f1c6c3e71f8d73e706a7636b9a0b88826fa8ca7b121c5e7fdca80e3fb7c1bf48dcc872655cc5c6f4176d3559e687b1244836a2d44eb70aeb1b54adbd771984ee7ff0b415b98d5d8957032751bae77226196c48068c4287703c0beb0c20adfb11462c82f9d400bcb9317564292ea9afddc9d177b9f8386dc2d2f9c69b02f3f1fa2e7531c6c60b03447f5b98447d049902ee5b53ce9a9f54830a216ddf576fd2e17b5db6132c64f30880468fca4877015f0a28ff55753b1c535c8170335445a27cf6d07cb3c939d3c0c3d679245dad437ffcfe59853eeed91fb83ee49a4f5649563ded657a3664d269e902951e38e9c417c40fd6720c7afa30007e00710d9f3a982ca771cf6fecd32d7596b86158c363becca480d3b80a8c0b7c24537bb607a2ce0fd4c1883f4da984b8d125fc814fd6561080a5b202ca652c4e2540e8a8d48cba462d61c5039c6865d5233e36de07f4c615b3483be1542df8ff8ff65f86d61a20215b138c2b2b140568b66f216cdbd5a9a0e3592e94faba56e4f168740aecc849ebf695bfb49f234bd649ddd63afdac719649d09dce8a0f647e39906217fae1dec1acc9585f76ef418a4da92509e1aa3cc7a0d9dcf8415f0f12ea3b248132168dd3128eee5692b7d2223d6f45cb809fda742309c1a19595340e46e4b677d561018260edff6ffef213acfe571496f5a3c6e67a350878e0a453a9b90feddc9cb50eb919028100fcf9d7776edabfbaf25accccb4bdfd10955bc9dfe43e1076a980aa40af6cca67b53a85e2c343e2e1992415b73e62ce5f216cb6d4cf77200d6cc4ff87e99236dcd4c7a0ec95c92431e005e6ab49304298176cf475524f34a6eb5df593cf841b844739ec60e7c3ffc2b6f581c473b06251131d82cf1e6e26b88e2df00cb4e5e0eaf2f17700b58c674cac2ab08f7342bda833b219a781c072dbda63369206ae069bd281f1d886807ed18fe386a9fde17b18774025f3c6cc9f97b7906c2a8620581e94b79957cabaab202f045905c60f8a1c78dbb74ea34ed95ae7a1f35f67f30c2caba2134f4bd32cb4bf81e2efb72e9fdb8e57a940be50df13d04f39eeab82a8f43461918f71c8d175b2a7fe098f39ad15b26b4a04aa863ce508e5796843465b81477cc56184a9905bb325b412b359510ba169ccc0e46dc4567734de9dbaa1deda791b90bd5adea2c7c7d4ff42024430778adc3eec32115992595793c6cca2774e42e714418a6d84cc868489db3d3c1d1c934cf9c2bcc43e0b1a7e85452bac1041531e5d9206f514609b98ac3c7d410cdf717128bd39d0ece6f4d377d6eace3f892d6f973659efd1183a3a9ecbdea46a6af922a53f1220d4347c8268a784a00f1933af4f9a0dc251b3dbb3758e77d3914a51ccebfd593b07f4140bb1e08c32ad367c193f5322699b121557c2b732e84a9caf5c77bdffb3c6366238c5d5dfe6f060ca8a3699086e1f6494b74b02f49caaeaa880029005a0552542b667320a05d90f37e3cd4d1d221cf2067b045b7255fa50ba776df1b0fffeaa0a046d09a8f13520ea7e1884c5fcc1d1c82817501649a30a6df415bf403f528d7cf5b127db1805fc2549947a3e8cca9890b0fdf25378d7d136eb44f0e2aa046cd56ffc7026f08d9c630f90b750c7e56b22b971e06911946620e613d4140249e6a2fb2c0dcfdfa0c96ee8955af10f1d19a06130103cb24871a5ea018373992df2b1246e544dcb5202fb9c580fd626f79781fd7e0b4d7492aefdd5508287a0b109fb376ded9dd58ffa47a18b066069d4084024e0b0995cb6b9177ab2467af0ce72ed0f9f1f591536a17f9a93e2e4a25751605b2b76be006d6e1cf48f0e39bca6d361f7f98d52776737a02cc7ca572683c953196585168037ad5458b62e41d8540c2987cecfbd2154afcefb36afee3dbc495bb451a9b0efb15ec2f172eca85463161d9fd4ac57098d2f3830a5f2ebb0daa012a443463fa44f5905b30b26fa9149f8d860fdbd80203c856845338e72a7c1ca48ce784e83bfc3474b20d42416ddf9be1c89c76bdf1f9cc39966795ed882a8f3a274a3426b0ec6a15b3d63a8cbb4aa27ba80548a56b0a3e924d9a54974f7a4fb7d00746d03fb458829569029f39e4946b8c627edf9e41fa4cffe11969212b4a0f35990a19be5c07356ed8afd41080de013502700a238124f0570b0d371f861f6af8d093f562734b68db1b2997f0b3e0c2ce1aec980b2a03523a73f8a065dffb8dd17515f0e8ac4d271a627f6cc649415650b309d89757dd63448d97424b0af68be878b6846efcad7779f10a6ea484ecd9ec3002895f0d96d65a68c81b7699af28b66cbaa528a102dd7bf423a3a4174dce46af6fa5e98aef0105e244dffea6d8f2f1e10bcd69cab32ff7b455479dac07dd402ad69f934c549722c48980aca5582322ae36befe26440926290affef1748b5eaef807e847ed68623a4407e8380efc4c706d0fe0d103803efd7a0ef719774d650e9fdf7dd9b71beb45427d2d6f150aff61d935bddc60b38d9af1530f7a0472ee220336e96da68b29687427f09a94fc47f9d7e078eb92a3df59870e0e02f32f53776a5d29c74bfabf82fd46e713fa7b4c3544668265a4db942102b2f127eaadb57af5981ed04f2c28e7d922f3b3998dc7867199d6e4cb32f4a22b5824f9c9c01067afb3277dbd0da0c7a4f43b1eec362d6ed77ac014cde31f06708ee9bd21b709e874705e345955a125aa86e2f74d5311cba9a78219ce7aae5e392975e5519971baecd602024bcaabf4ef37973d488486e0fe5ebc30c333636c5ca131faacd7bbeb465c49094e485c672608eaf903138b8736a4f4bff230ede9176c349bbeb932f27cd3e0a0d9f0a8d5157912db833b0312d4a1257c4bbd9b31c3cb80ad355cd2a4f62834aa552e5e047fdc23c878309c9c80f626789e998095931e9e6512047a45ab4d730b75a68c22053ed0d9a2a5edd4a9caa012b03f1e992b42dbf8964036401b56ebbe680b35997231548a8632d6f4702fffb3dedb575ff0aff2ecde771a8c529b67a9decf40ee476a90a3a2f3cee61f827344ae02f3547b1e696f1128e58a8c1fd7e077e433c0a35aa7216bee91a9277677c8c2bebb3cf42bed2fc45e0ce406437d209c01c3f1fc27b61acde25cfd7b40f1b2722e1a428d05913f5c4ae9bab05de704d060715a5e8bb298a68a2231d1b08702cd7a52420205dbab9daffb0505584a6a9f449d306475bf68368ab4cee06597c703a89f4ff4dafd8317403e7d781d586a5916eb6f814ddb0375ced7d51ef4650ab2c48108ddca1f01b01800de41a5297426a54bfe2415b0a9896ccc4f3b973b45e0b1a4fa59f430e8e67b17d03368690397a457dd06be64d0279ef4751923332827abf32e7582697d655bcd3944403541d78bd5e5487623004327b3a8d984b6b89e18f2ddbac928e87c55bbea7c797a9cbc681ae257b4e58658935fb1ff87deebc755884b420fc77949c523c59f505740290e17501d871b4331e5a28e8c00d875302a306e819e3c8b915cfac72d5ff52ef5162f5953355792959dd5d4be46e54f9c38cfe9fdcb71fad9b0a02eef0ddb5329134d313a087a4aa49e36ebfdedf2eec6a723d565ba092b87d4528a6f2ccb2cea6b0f3f7fafede9183b24ddfc42467e7cdd094a2b1299c81a6fe8b7f13a5574fa1b2090c559724ad90916e0a079716f0c720ae2a22184db917945a4192a2f9765ad12132c8822fb4173120bdf6d91baf67864c8b3805fb87b92832251b45f0452139a367b7bcd5f2cc071836d2fe2c2f982d71632e4bed7682611f7e91c58ba111ba9e36dbcc296580b8ced40a7670b0759492e765edbe1f33ddc004a413440fb301096e55983fbc58ab1b420e5023303d7aab8e6fab1206044626f38b60493fa0068eba6cb974621d3152416a07637eecef4ca3e1895e2e5f79b66fd353db4babeddba2320f9eeb529148b15b6849c24313b17beff15bbc7cdebfb9dd980edd6a246df52bbb9749065f4d81e7af3daaa209914bbabc5bd40dbdb753680140ee05175230b74cb8b6c30ef4862686d18a332b41255a29eb37e9eea2e5cecc8f29cf0605c55b0b0b9553e231089400c0adf629052c9856ced87b96cf06b7aab580554e5c156dd81d564d661e1a803ca185f8b8ee7364653f827e86c2734ce9e65912b7239be93363980ad87190a4c989584f3df6940a9d1b6f9bdc4f75cfbc21566714b2e4d51e61aafaaa2f9a4494db78d347b6e93ac0e03e9a92796b3bb25b0ee85eec95784b175eed0bc6d5b502f11d3b7cfdd78a7dcd3959804a8953ce623842988c1b7abe04df5bc4d6ee90ba24ef4d85e321770f1abb8f39729d881b875bbf2731e899349b7796878c7d727855261121e33293a5e5fdbcc57134b8efb2fe0eb31ec34702913eeaa377cc1fb135a9495a0a1667a88de6086fee22fe573fb4a1e11d66be6168709333cc516326512e2a515b6ca9b0ef7d31096eb490096b32e57ddbd73fa334eb539b8f1a5f45fffe2d7c85c124588b8e645058364df45013c6cad1e729434f90f1b37507ce459f33ef77fe4644279f2cb398945c286fb4fa2bc1b5e44d5cd69faa98f6f9b9f7ed7e8f6982922b1b332a2e26d6ea9c14b8a4c403e449ca832dea4406f21399e5d1d4c45feae6ed318a7f40667b3d96822e7a6efdeb88c04e80347e73aa3cc3c361b455f1b5b334c32a3d32528ef6ca28b5ac68338627065c0aca53af1ee66880252b822d59f8d099c122906e390d7821caf20d0375082e83d548bad0f6b4e424c576941bb50234ac06bd2afc2f4fb9354ca501e273002582293af82559821a65257604ac10a2d2cce3e39e9028a29cb2452cfcc1baf2868c3d32ca3919232caedfd4a3c13309751a6b4189cfabf442cc938064b6beb754dc11198ed29e5c5ad6625e0e0b8c37b37a2781dd45c936698d51f36029f93fc3fb88d8792f998c0cac930043db8d262e6347a15d94dd128fc2b2e50c79e7fd039f8cec35dcf3397ee44c9e21dff66b4daeedfb4e6b4a79b723b2e2c2cd721587b99a7d41274691be7c8b9f8144eeccb453954ca11f7cd70628e52f9cc7eb2ac6cbf51a338b4f3c868091df803c81ff81a9447c9ab0f7d4317ea1f9138dcf0852efe907cbd28516dfb6546f25324053c83b0d0ab9b1b4ee181c4a7882775fc708c8171f3854c4ff0c76e72b0b818bd232f3aeb8825946d793552b3a79029b471cbdbfdc7fbd764cbc59cccaf67ee5cbde869e6f44701bd62c4c604019b9c4a28426137eb55c857ef92304d3d24134ada35ebdda7512067f6bd16d7c1d1ea6e0ed8e27cc395c5131c06bbe8d5a94169eb7e80b7779beaeb1d552e545954107e2decf315840c30e97fe3ad177f487c8a04a355e5c1f9efd0e5974572c222a437b23e62339d2a38b58c7fd0c0892ca2c5bb198e798fce395ffb5911cfaffe8a55f23f7fc906596089081850c362e64bb6f69ce3296801bd32db9cd1edc6f0bdc03796f28e9e6ae92afc4cd390f0b2c94c34e3f76b28c97c1cbab9b16bb1c4d680a840ad05c3f40a2957ad8fa1d49c1940074ea55eeda292cadaf05edfd22317c9d48ea26b708ef6db48c9d8ed968ac138e9ef7373056b7f98505f27de10c360a084c63c82ac0f3bbc7a047f8ddd16dd063953158369f8ed48dc878cd1069fc2f7d001fc17f956db2000718769d7eac07328a2e24793fbb8dbda5f8b515928885ca65e72c544f54d07b3a6489f22202332396e37a02e15796e6e6aa7c9e9df6b8cc2a34194b6cd734e59cb608498e9b41bf5d23d63b9d6d15a412ccaccee1cc74d9a0e7e164757dfca4a642b75f44a1d88758db6a1b28afbdbbe28bc3a89f21c08e2a0c941b5cce308421f0bc6a62455120c4c0af0238ac5998c02fea7f42bfa239d01e39007f2d53e1ae7e48789f883098c5a0f5db3b39a51e109312f35780f526f532ecd428412127d2f7f5c7a9ca0df0635e557da30e9d86f1678781bb95d089c847393fe51bf3fbdb4121786cf46ed1d2f976a446ae230842aed51786812e6a4e43d90057abe8843f8c30f811065c6e49ef26e840c463b560b3b892204fa2cad1f9fd3c6c7a25dd4db956c2f5bed0d5a2b3d08225174a108af9415e70c61862f3b51596439a98087a66e4352cd7d70b4a8b9f98985de6fabf8cdeef8ec5a2e790ba3007bc716b72bd21b8962ca9d445abf4ab1272f3194aa397e0e57e790e44cd6b16cdeb987b948532924727fd1eb25a3cec752a175c599c1e60af1aba977c25118bcf67d242b682a646d03e50fd2ebe5ea61a627603432833cafe52d6f07e1a6f45e48216bd057c25d57661af31e3dc27a018f156a273b45aca344c665ca3660b46a281a37f29dd34cf09ade186e3bcee512393adec99e1a6eb27fd4eef5a561b3a6bb2b7d6b96fd48c35aae4301f65a03548fc33d92a5ff035c618028852604a91fd31c3bf5953942cdf511c05649c84b7aca3aac5e1bf74768f926834b415eff60d5c12307b81e4ad49c22b4a9c6f0c6164504121074a1dd20a202fb877762c313f1484bb39ef5c134e705477198a5d2a42548836c9f6585fe629b287a4125b668c91d3571aa689ac66c40c20b5a5518192a0b1a458baab89c5ae738f9592b22770b647042549b23080aec0ff3f08ccb2cd85eabb18c305f06ed0fd29bdb0c7933bbe0947e709e056076126f9980ca51d6e172102d66b8fad996cbac4b70bcae218abbcbe9336e48c5c0154a6e0dcf3452e28c5018ad24ba6110614b851d24ff609673b176a62647e168be9db8c688672c2e3494e4e0553cf7d9c4ede27181a5e670264855a459b20d0f62e4be811ca87cb8681e58a21f892174f1e3b8d3fc51377cac1a6995ee6c86f5286bdf28e8266181261b13680c82a24b6c7b5047d9306ef4606dda5a1b2b8d016b585aaff23985c5d18cd9a9e03bef061c4906b0a044ac990f090bd037e86559307bf0d3b5be515b6f0b8aa4f4e582a9de1fe040f35d542c8afc5823b1ef4ecc612fa3c25e1226064fd4e2b9f88475dc3fa7058ac737ca85dc17808b649a2aefcc60c0b00bb7fe6f0794fd285f8afd029d8f0e23ea5fb9b34afc4bf5957d2b36c0b5d6ddfe2f17188e9c2bdb3d183c38002e1d18e3bd4723fa6c70be85bd26e3eb7131da6b1ec2ff3954b019f1dde9cca69d50d1d9b7469f210b1f0f9740756f426a194cdb0f7a3339470e539eda0443c490f6071615dde096f6b3ff573e3ca7861408b5dea735a75d13ca8bd5852249668960cfaff101c575071615a1f27942c93e261f0eec5ad3fa7c4e925999292be2222b1da928afda55cf34aeee8b641f8a1144a5ccc5da6c8aa23c7c937530965fdff1da838d11f7d484384b544ad53ec54ba544be0eeb27bd5987dbbde0137e10b907f7aa987f331f736638770cb509055f5bc60dc618e66bc15771d88efff8c9c6037c26e4216aeff0d2b341f48c6ec00c820ff0c8e69b83b81d59648f2f043f0b48a70e70535a1446e3c7c9f5caaccd3f98fe95ea65ec8ece3d9e7b8e836fbb1e7a44bc8d3133a1550287515f97bcaec4538056066d8a1533e00db804357404bd926fe7f193c7b41b8fd0a944c1683383aec9dd0476cc62a2c7010965da2cc016a8c44df0ab4741a3c1a52f8dd45b30795a531f02be86b851e9cfff65ee5495fde3aeae4d82a24a375eacd7a71cbac5299b552179cf89cc48d325a5418a7f8964014ffe2aaa2234f12c3e10614fc5fa4b9da994c05ca75c78ef29b3147a32fa4da90b7225702c793ccd4d68daf326b85e60bc28557109b400718933bdd62081418db176c5bd759040b7096682f592bb94b889b70d15a051a80c41800329bfb8b41c59d3c4f02494b60cf77584f2899871d6dccdfcd60fe0839d6a5d604b41358b6ec2f6a71501937d3eb250e70e8c19483a64abfc2a2624dbb63e2c81586417cd0487452c2ff059238a6eaa451ec44cdc2180c7a03f07ec146c19dbccc5e1e68f2ff5402f54630a3c5be17a2c75bc2039b301b3defc3efc291abfe98d6db6cb1227583a0f7abaa903543d4c9de3fb040b6f064a71f81cdbca5e389b4da240c135065138887007fea831b91ee6299cebfc03645181c726c72153a6bbc9ba9a6f8c7c5850475b6aa0a9f1eea1288a64977ae17646cf8c109851116d98e3f4f7e9ed2f3f5d8ef319eb333ccef576c09dcbd0f89c648166f17bca0aca799feae2a9689da6f5a956637d5036b8522a9b9923a7ad360539b00aa79ce1f1d237325b348bbede44258bb2f8b1b7119c174133c9620645e89c8fdc8e5d5a6a88fb4f5c3a8b5f050929071ba99de3634b97fc535732b655badd7f5f0ba5ed1adee9665145256f20d3a92f31a87f9bfe96c0a09307c438f7f52c7a10445022bf1068082ba37f6636beca13e57731851b118a9fd662c5e0a5a41633a68464a95ba241b97cef5d6aabeacba3d5e4e18d1fda18ef1b1bc23dc4226a3b86d32c84ca56a883012b6ac8196180bbccd3a347a55b9fc6bded44686ef8ac416bbd03b1b9b154f70212e5977f60d804f527497928abd372d220beccddb0108a7ae7ff7813eee21e4fef72c15171e6d73d13b4541d7a6838ab9394c5ac8412c35e7db7e81663b7a3384153ddb2ec4a67558180faf5691a02cbc15c03968f85fc4fff191537c6d5f77e8ce36e013d75322685e845fba008dfb2dd8771175bf0f9964106c9b7c04288a820c134a68a7796924e6aba6e6751864cc2a1943cc1f0925b79bcfd2c2cf76760e0072cfb2107e7d3ea41c349de9381c3c263665674674188c4d5bb7d4efdb8892d986564ce342edd93f18c28837e893a1f80c5bd0ee0a9e42d2005bf018b3448eadcc5364d94c6b7ae4e1f609029b5e191e9003186103f2df0603f6ba4da24702fef16080d24cd1a59ac5fda327b93f5c7e8cead87770e562da363adcba4feb630c51a839ff8d2539481e7f4f076afa835c69fc90d01886ecf70c70a46b4f1301c75feb4f6e5e2f126acf82c9f12e806af04e25290962db5c43899a77d0b8d6a7193bd3021297c47c067bf744bf6a1bd9e807e86f5b871499149ce57a72683cb710067fcdd75889d46bad7ec5463ccd75e45ae85fe6d4217da3289d0d9331ce1c9926f7f7ba335609c11d5b559105e79d9cf461b3cd2583440e37ae934561a8c2a7ee40bd630a064120a6c4648a11edea0d0054a8521363f51979bed301492bf4f458e81729bbd53102c3cafb6cb13837c8ccc0006c1c297f1cdcf38a535cc84f767cd99870db4535eda39df6c9c92352aa70c3da0355c6db5215250884cf1bc144058e699eeeb95eaeae2775cfefe23fe35e2716774e5af0011b31ed56b2aaff1e6ccdce673f124445bc8dfb04439e157097e1f3f97bc26aff6bb015418cd9476ace0c832d4a18e3dc35e293cdef1bfde508be814db448836a0950b23b77bd9413e0c5114813436668a133cad7086f93593612a81ab62adbe7d4f07ff78b4cd7f88f71edb685e25d33c800012f68fae51bad93a5cb412949a6283b969dad2647ec8c729a6ffae5b14034a28936b09c6e8c8180455c465adb4535a3e1165e9a3429cfa7b406dd86016801b5a0b1027562d242cde2fc14bfb440d20d99d573fed25c00b86fdf767d5d7753b4e05b4a05acec2be60f97c998b3a6aea27e6be940eae22da331a82243c1538f7d264d6dd1962b0c499c9bf9d2c4a2aec9b4dd7cccee9dc91c9044e0ffbc5c12bf699ed2d28f80b0cfef6d82bcb0fe543b61ac72bad344dbc023a86243219114f25d72cad332ac3500c32e33a64655b78d5173a4afb8bbe06b01f420f3fee36ed0095457d9de9de0d671650c04966232ec44a734782262c0a196d90c56e9b61961a0c37de2f7300773ebc701706c069efddb84b3ae8937e0a78ca3360b35646415fe38fa64308c0b8ae17e9bb5c03b12d72527efd2f2ca3602793c3901115aa38ee7947df0d3bfe474f893ee830322134be25b7d85c763c504f75849d13689e34781256836f60a2f5eb63da12f558b65dac6539610549743460c354b90ac2f2efec8b4c6ef0a07caa9e1240b402d46cbcfcc5e5394aee696de938c33fdb4b84370460abf921eacb3ee7f2d05cce6f360a19ff80b6681b4c583c7b8d13c99c8c191214607323f6ec9af489bcbcc196d5be57c4ca58071c54e4e6f6ad906cd3deec8e789e0e1af588c3170c5bde50c21565c538c093c0d98c6f5084790fe65f82539cb8ec898a819e14f986c0ad5dc6c7ec1087dcc6e939d4b9cff8407f656f59e7fc72e159f29ef09209b9de142fbd359c7f6882bb6b105fc24909defd74ea2102881b237ad6ea29d885cdba8a20a769869ac985aa7598b4bd1e98b62ba1f18115c091b9ddefac8259d295f9faf5350f7d3f5276f80e43ef803d2b35c167f10fe37e4e4ae254e3bb23985a96fb74953353849100b8eb7f230eadbc98dc9f8132de4da07c7d5eb835edc06b3c2c315246e79f486bcc02a5b06af8332755c244fb8f005f64743c4d56f43f291808c6620592d5929b83f92650f103646d76428a5214f5f9c635be70e881951ce3dce230ebfb755038a920cf13615cb5e53e165f82a0d28bf366b42d7012986de1793feef26eb1fdb60702a32766aae9696cba13e025caa3e740e11c4572c3f7b0a90c3c82894e31c0430ed26faf752320b993c40e92c567acb44e62318031bd1f242d96614680af9f88e3a7c64512afa9b4d2df1c17c519892a80f3d321d2d1f8882f5f53841583af3e07d4a970e2b2b42d2c6d353c0721d7dcbebf98e865319bdf173de289aff3054a68fc4be5865e8cba9568a7e009dd3d80071086476ed8bfd1badfe4c24382c32bfebb1a301aeddb70954de1d4c9dbd1bdab8228250fc30840d600809af90686cae00ee76e7d6647321c970aa877eb85d14b26224d945e355188460704c85e2c992272ddc1098d3f12132419dc0a6f9fc17917233a2eafb073a730f1dcd4242bed3564af01d88ca17aa08f49fcc0ce4cfc86ba337c90e731307710b0325abddc7bb1cc7e670d83bb15e0f7baff02a36a5b40b69b2f8cd9c7b32b5647f15b5dc683aa29b14b83d12d1568ba39d2497ff19b15ac464ca977dce2945b9eb416f41749ef1dea511d003f479a3f88d080ea09f29d4291ab387e9018e8d7ab953719853edc8c2b4daed6083d769f6f07c7d46e82c7f53bfacc8b1cc0137b6fe9939f2f7e84a4775ab7ac39258e0a0daf9170d74e6c3f3c9c90e56a4d8033ce2c4f7335f88993ca0a24c8d42feecb35c7b5b1b4687761d7171a3deda275c00b32f9e6fb3eba5acd553afb313a9da58e4de220034321b3cc1f518352c305c11c2ebf1f96f986c462eb5e027952d6a832de4f357653bfe535f032a59d0bbfcea2969909c99ad35525624d3fcc28e152a8ce391bf2c6c6818ea36adf43b35b165e5683c5bf50013429ae5a2e7c5456e5f10c4413332b008a2cd8e677f813681d754cd5e3ec13dbb03aa3088b61041e41764ba3e7600b1f8b5ce9ed9166686de05f5c7928fdf849bd0a9b72aa0f46302249a5ab939416db0af414e47f523f6f7613b63547ef132ba67c456685cf6a98c90dca0cdc9e68dc328c4aa8ec3e2ba7104290e06b2a92ef53e30cb24afc5f22ebac8273fd0f192bc13f6b50a980e7abe55e5f935ca43d4863944189866714e9c1a82c8bd586360383df92d672efb7cf402df9d72d10fdadcebbbbe4ea0f6ec8b72743adcb5fb14c31369f3210dfc8d6b4c5e19e63e56b37a5a8b5750a0f7f16c2818ff0cbbbf9e92581bf655b0f3df8276a4a7903596f1ae8826307fb7978f9aec6bb298bab4f8ede3cac45349f70544c7aee8ee49f928b7a7f597776aaf68b254247e410b429e7d936bd35ec65089ccc2aa86c56ad2273ebbfcecbd752d913dd65f62a5b947d7bf63db3bcf608053569fe392dcecdcaaa10031e09ed45e5769d6f8c3b92e128e570238d8a3c641621c0b331156bc7e85ee4dfe4ca05da896c5e557375130d814f647c421dd6b794963c0e49309cd13ab6ea0abf7d2baaeec32f733bd39988a6a5298dc31c31bfa0e78af17a87cda158dd2b78e7bb9ff12b91c2c9d67c555098c1b71c79651116bc2d1312704d885402f94b78453a1d97e82f1ad413b940be527c51bcb81d108bf94c3a9ee5c04b19a38e933a4f6fbad24a4e0690ff184ef095f18e0c3ecf87fa34097b37493fb8794bb07036406159be797350dd8373fdcca70f39be4d8bec3aaa1b9b58be42f80e0fb8a82fbf1ee8193bdb15e21e243b0de385fb22048a916a15d04554eb214b81f54bc04ac6e290899718687d6af490756bd3bb55cc6d0e530068d54fdde6243a6170026c33daa82bc736a7c77259ef557656da3a865c5de70b0c65639801719ff63c18547f64c93ce4c58243186f52dfff9556088e8f3299f048f0ed69bee21fda64aca7d92b344c1a7f921a4e90a31747bc110165bdfdc0d9eb0266470cd3614b5d003d9f45a1409327629548bf7dbc556696857112a445709731d17797932d337dd9cad8ec42525dee7b35001c80184d3d03949a99816571a809877627bc3dbc341d86d0ac9c659ac676b5428ed5850ecdaebe140fa8cc4760bf15d886aad4676ee336acd467289a26909c14826a4c0cd07886e8bba864c10b8e551038bd22d62547377320790a55bcddfc15eec7756d1faf95edeff7d651c152e9eda95c7a4bf3a511e8c97556f26556977ac193cb3a072591b94a06757905c2a6ae0d9cc817312b01e27c275eb309a99cf45dc748678ad52b872b05a465e82d98a913cec8506781ad3c74235219500a9a3b8bc5f4ee3a1e4070d0a833186dcba224116011573d956451f63eaccf12e3c6a4651c21fba6dfecd830aeb25ef97649ea884b0f8a8ccbcca14473e6717c659967544b1aa2108c16ef9c7f0d90517bfdd36432c8fcaccb806393ce1eeb5e5bb558911da71be13cfb83df90b949f6a64d57656816f9047407759dba413d0ca941e20aeb3e131f59a81b835a32cd8233f4c66e5fc4fc8a79ad8ce8d378ad52e342e91297ad599b80b29901d996aad6efef50c9854871a2d160193f4849efaffc8e8750395f7b12ddc613a6697b74e8d72f53d8101da5cd4a54f36d4d924c05704a9da68745745772018e9ed8bd476b930d0f9f92c7dc3abfce9e802a47b9ddafef0684611bc7e1557ad82b34ea3f627f4b8941c4b457616add2d40368f1be7bf28d03a18b583b6f07fef42891776b11712b99d6c89429152e57fb96f17ed56ac10ef48c6fca8922eb191db4c23f44e1ca63906a4d2786a5b4957007ba4c75ce00dd72d1f798e654bb936ea0ec54d2b5acdc95d8a3f8c55f516ecb1496faa99158f025ccd5a3f65e976b5799f3dd22d84a1b46829b0882d154ed55931b8e48a82715503c1a9f97b4f3482ac9959372ae55b1e09739b7c9336ef5fbfcb68bf31c90fb4fce181fa2ede8cd3e83357923a702086dc2a1352eb88d3935b1269f21f045cb3c9f9c6fc6e746ea9989869eb9fdd5067bf72af4ba291ca235c28b645c1dfd22a709bc4499f047d9c46b54ce020aa3a9ecb0b54ad95dba6e2dabcc653b63fe19c77fa368f9e9207588b33b85f9d3285697fd218c3e89295f685ccb6120d600de157504424b108c5c1f799d57194040f08fe83ce748b3d9d0b646b8b1fb9a353ab9548b2cd34bca40309ae93be2a051d3dff8ee4e6673fba5646eb5f63e6b32556d3e9d8036bb55c5996de9c0852e93dfe79181c91717f44291b99387ed41569b23e8e09789fe3e4b36df18a5e9518a42d9c5a77d0973299abeceba15f281e70cd5061c162345ed134b68340c37a60d719115d2d0197eb90fe09170f1b4fdb36e53581b1ddeca62c47aed61f90c547ac152854fe2c76f746d48e5be18148038c8952026d1dd6469f135bc54ff323624696106f3235480ee68088d82ba41df978c5f47bf2f497b72d77de5a8c531c6c7a023b6d5f3392f1c962ef5de45d17ae5521f062105b55dbdae4a4679a2c29fc0825f8696f79ea9d8ef454ff10c83200696bc7a3bc235b29e0c97db473518469109d3cbcd0dd188775dce184168d911fceb6fb436f44da25673fe8f8a510760ba8af0750200cd34f33190c8e9a7f46b83814a826d5dd4cfdb21b1e3404598734ad958bc5604de993055cda5f2d36dd10d8c7457347bc8ca022c6dba73cf3233dcb99ea21e992c80d7f9316a09ac8e3dc02835b3928ea3716ec3f71ece138114b1a8d549d77e20d5777afcddb5c7a8c0c5d903a02d5707fd1afd9d8b962c4f9e1cd22d852843eb6fb7aef12b30dbeef7e30d192e1b8f7c7dcb0a4ff10e6b90b5afa700ef6e4e1fc9b7cff254711c9dd04597bb31507bed87f516311f38df4ba87cf2c57ca3c619a0edf3d7f1e04efc5750fdf04fe9cec670832bb16e249ac8788f41d67a917069fbaba659759581fa2b0a10f78b926b857befb2eb2570ebb9a2295a4c002648733d0fb9aa89f35541c74bbc36944160fdf15f38f4e1f4dae35150f1f97c71d313d087a31693af164272bf145f4fc54a9d80fdb9a98a4f3325655deba242f25d70ff47702714de1979eddfd83bc2ecc0d42a052c480f704127fd0651a85793ef16bf5b6feae9951c32bf36ee52bec8dc22001",0],["0x0a8a6c08021080101a806cc3319b5df1c8ca5bd9148831a54a296ee8692e8e2bcfb697aa49d031f4e1e74b3f4893e30eda0d44ce2fe9d902cab4e837782e18d4c7807c52fedfe4bc02605c6b0dff0af05efadd364c794527fd8ce044a42650a13242b3f80e96ac2861167c7264ca220185834ef71bbba7bf2850aa2ed72b2345672d7f29a39634b1f3e4eb9f055b7992d84e0feb2afed0b9dbdbae3bcf433bc4ee39df235600bbfab6d6803a67f434b7dda4947c4e174144e03e74714ecb64745c03d21a0a5aebdfa0fe2e2a07ffadf5344d1eb15e7001e57463e4dcd38ac2d6c3427301602980a17e1717f48f6b915033011afad2b8e1abab98d3245eb218b3eb6d3afa072a767c8f51795ca2506496cf9c058d121e88ad720e57d8af7449b4a66ad3e89f2f05f592fd9c1dcbfa85b336e51324f5ecddd0c78b486528616485db1f1f3849dc768b1cf7c219c7d6123ff5c48c3e0a96d94f34ca32e11a2d05be1542b3ac9d2cf59718108676e97ed353846bcc81ab7af14289ce7f11029113919468f000455440743cd16504aeb0d87c4a8dae61a179230ff30145bf414dac12e81604796158b2fc0bab52583a5ad52c47270977f156b37f175b6b91de7441b594dc174c41c6d47403f4f94baea74a9f7782aa92eecdbe3231cf3a98b995466d0fc327e53356dd13b7cd4ac2f7811c468951b82bf2c1b50e6c6a6d050a1c374235b9d5584d2530c06203196b0b8c2954755b02466b1c8fe71f2fb9af57f3b514c9ef2c5d96031eaad2d1314da681fba9f7eb3e545f0d6e28efa084219277783941305fecaa6d9b7d3f3d93c6e02d53d955ec1f07b7af95b139734515c88eff9529b9dd9a9c82694cdd0885b4007ee0992cf8fd100d148721cdc9af10fc6347dac93c5cb1de5b7abf20ae513eec43e03d8ed218a38e088914b58bb69267bb5b7e494623a84f0da7ff2810b3efbe8367d5235e0471ac32287b6803709fc686a1ca118a79b9e6b65586c328e33fb0d52de785c8a6f1dc56f11a90b01cb678078fdb7c0890179ac44670ab80a3a6cc6ce0415c2647099d6034fa22effb5e73fa66ba0982b849de898ba4f5cd5c19f508457f8b28b382a60dfbab22746896d71072a9e70462d29930290c38900175323c285232527b84e6793fa98ad2dcea9daf9021f09ffb6f824a16d9e96333a257a3aa666d98aa2cb589e9b18acd62839f736fb123f82a5d6b388f6044e8781166013cd47b2ba4fe8a301bf3e3a831f6f0a07c88f6c309ad90e5012c0bac243455954db06f9f698093281b04d930477ff3d50001c0bf677beee1be64a807379b3f91f5977a6a7de504c9cfea5dbc8d5188b98ec7bf50f38d8e2fc1ba6de9ab7ddbd18b419df3e1834505e564838cd761947366a20120b2bc993cc6ef457b3b1d78b2fcdcb29b1f8569fb714fa18e1f59761838b94a6a6829db2336990aaf241bd2aaec0c1081eb36161f4d644ea64b6f6d7905fc9b4783348183696e178dabc74fad0166669675645b41dc2a9927415d29b81c19eea3cf021c183e398750f76aab4bc07c97ece5130ecd53100308bf35e7688b5563153a8002feefe82a63eb540b23903c4817fad40826116f5277dde3c855e10fde07a9a54d45c9f854f94b9234efa1b020167d52542fed897960078d55942273134be864c5c97bc1035e1abd4d138bb3e12664fb0ec014185e2f4f8c4b6c2e1ab33cd935340340db53bb03562f8c9b10c8640fc0e3e8ea08f7954d529ba61907c20ecb3befdbccd522c1cdd75b15f2c9fa560f44f90a57566ae86a9c5513366d59e7ffe0aa1de399b4148c12734b2317038a25b6e8a72f21f782fec51f24d16894f308d5367e595131bb5f73cf501b3345bad54a42e06e078a1693c063e48139d3939d1839e7560c3f55e5d8ac78760df9f0bb1bfecf8c51e611a6ba833815e38760225161a6309c5359e8f1b7ed9d707007b17d1a870ba7ac25e0cbc12923883214829fac999bd56077bc48e20e20cf23b759ddc125e58a67cac34b3c01ab2ce905195d166e5429f69eb4402d809d05cf596ecb9d0d4f20bcb133bba0fbb704311cdb68317eebbdcde8cd80ec6ba20774e1b6d0e8d2b0ed6c9964d9f1e65dac2bd74a89f4a4dccc9e91920549f1b87fcfd33c24c4e2d8ff7ae59287160372b14f2e8bcc8ae410cf3be2c18149df686333217025f62b53a2df0dc6c573e1c07c5030726cbe7c78405afcf91567efffc066d4f2d76b81e8e824e69bb58192f402c1ba0bdfc632f5907daef4e7340627e26cf371918596897e1ec51f4568dfe9ed6406cbcd812847b4edcb8a1ff69015735bf4bcac011f8e5a62c85ac6be97b5b91a1314f1d37eab0e8e61dc24a155b41306272eebc4da8df6e2856a74edb692984b94af223e57dbd8eb7f23ada0498d9aed26ed0770c7be86a7320d7a534477b3b5c7e64e2229e79fbfb4072f68706fc47ca0ff4e138a7982349d0bba1232f98f39f28469470c4e0e95883178e595dcd06414006e200714baab0e5925af9d1c3313514d375280a4b0fc402220dda8621e4ff4e173142b113e40547a3598edd7ed60b72bdd22d62fdbcf5e4113016687c9d1af01e2fbb6aa0daf2cfd13abf7d36075caa2056c83d39e7c34d2f89a433a326ab01ff27953f865919be6866361991335b9f68e597d2b5bf1b732a38afcb33cc6933b32433f9cc72c7d0a9319fe55a531e744213037b3453e0444a50c36b89b699abd3d5951568d2432671310ac2960f06aca48497880546a6e3f0b4f3dd3a78cbc5c6465eb5b12a791de1b8a27e4c49f2c1c923e0eeaab94de3210ac4dfb67697a365740da550aab8704fe638a9a00c1f0427c80309c3d80956616fd36d8df1b5f98987d23cb79296247795a46b6c259adcf8fe6013f76dfa48137282e45cd102de060597c6ba5cdd64ed78c4eb5935197193ab2831504b64642ffabf1718950ab124282a4cc06bc9a2e84d52c5eb6895d5987d0b4ade4c31797591411eeb2c4e30b74ddd851ba2ef8345893efd5a146e40ecd7619e4292349a8814d0438b662fde8c3130c121928620ac5c5babc74014bda986aac4474fc5c983af422596fd88763ee485992a33708eb48ca57253ce1620447a88497d7d570eff72d1d4cb46005202cf5f6c0d477ff9ad8f8eb8e1537ce1f5a6e8d080b3b28183f8cc82f5c7a9069d578a99095da6e79080a81ed27526ee8c3614273d9050c28ebe27f31623003dfef51776e3078a2d2f7f353585a367c50cc931114ff87797c65d35c943ddb9f04643b5b079ec0767c06eb43846f4cab0095291b847fe18c4615d21d7267d0b2a8ddba6bab7515fc6aeadac8e930abc6820f5e1fa3182f725182c5b59bed3c47eac7e27db39790fee88fece2327dea6dc1887e415706b4f1ce5420bc062c0314dfc66ce3a3234a90dca4c71bfc06189edba318e23b189d4499518e7d9f8aface33cb6a9e0c45505bc3da9700740bbac0158a55caf35b93310aefbe2ca2b1d0416a4d55592ed068e65d364cf80674d6c6ffb79d6247c4914b0ae34400ec3def61b3f7d5416600fc985b6f318a1f183f5a5f14c09ccc6791661fcf477a75fc0ad9c80aef45dea6f5068f09d23ea72db5934cfca4c7ce5a230aabba563805bba4d4c27d4ea117d51d4df8d28804b1a837306ac84a460f4b8c2bb5648751f474db64b1326dc5e1c0631aed12a48249f3092cc1f88595088fa9218165eabf6e7b31c0eaac37cc005d7eef284c9957d17b14a4e41719eee641147308b2dc032b0c0ced5d67a9326d5d039ecf3a62dbda07b4ab0d6cc201e17debf69b642bf06729b25138c2745bb200854ced5758d883fe127e918bd2af2da5e899bbf83bb3a42b350befc9b1b1b25daa05c7382046e23e4a658b7fac99b0729614c60396e3ce848ce06eb4f77f0a7e6cb4124a451eaf2848b5e7f2616c3504d1c5c714802375340c910b902dbd7757f80a5825ccf8466fb15c8d85897d4d048aba1cc48ecce90ce9ac9c87ce7daed5bed8f6c79975f347a638c83a67784be7cd0fd64b95574f1189d608ab3f5728e0ea3eb70c29293f51d4b1d4498827b7fb6f968780b03a590335435dd11cac8fad110ad11dabb4afa40bd9632b279a233d3363ce05f09abf86b64f99e8eaded1e4c131dee8c05689749874766768891cc86aa3f8bb9ed5fceb4bc3701c7cc439a8a3ca92204f4f7534b87ba1197da6c7f009e2a1bd0af09c12cf91024fb2c798ce2e4a2b4fa6c60735245155f5496eec6ee836f94a5102e5a74e1c059287c7ae34a0b3a917224ce7b2e596c43475f6f7ae2302239c3bfad1802fec29300df28132e38222ea0609ab3526515fadfafeb8019e6fcd798143a37cdf1bdb434c4b8e5cee91e01d2080d5d12f8ac6ad2a3a421732fde139cbbab219cac320d63d02a011af806e68362fea72bff4fb11be197b022862a4e48bcf6e8d7a745afae69b96b8643fdb3b3db821697f77ea350c08043631a4c65a81b5352669216e5a44fd3a0d0ee1e427d41a99b7d1e0cc5c5919f92c7a9d6966f6f158a40076b8290b22c783b0b245b961d2dfe7d176522680b35092d7d2c8779e452c00f6bffe788033087a1730b7a47910dcdd60fcc57ce750cf925cc5d9c7056786b1361b35aa60ec081b4730fa9746babdfbb2640cc4bc98a157a4ae8d6b20d74bf68f17d08b6deaea4d715dc1a74a2cc4ca8031ca6922f1e434e09c52bfb97e9a66e53103180fe4bbf51a4126e180c3ac0a82c16c5cf02356f39db877035edd05d4afe759ab267c2e8869aae4c11530bfcbfc6b0974a14232e73d920a0c11bf3bd452835193d1b4084566e03bbd13da2c01db06d79b7407b10b2a91435671bd59f4a59b9baa4b7213310ab6343020c91dd0cb9f70b0919bf35a4a2caedf95248e73f2dc1ac6765d825f2d53a827c0165316ab4ab1d124ef785118b5527ddfb12b806669dc34d78547868674c4f6d8f744ceae5ec28c19be281acc842b8d26b2fadfaec839e8d9d92b034d0193e4ccf373868c5d16a7bebdaebe8c31929c8ad936d74ec5a0425bdfa507cdccf57514515ed5503fc4b707cfbc0336a5f70745640f70a39c1e98a29959a873bc90afcf6e172a6e2bcbea716293f66933b9640b864871b370d5121624c4991545d801b045904cc61022ed99c70619984fe8cb370912e302df6c01f935f13c2202ee4c3422830746f1387d9e898929d5097a53ca0ddd804120ba0195993343d70ac5db85ad93844f8a9a3e6968a27d48808a4948e74909ad4b47ec17be53364532b213a741529be98b2e861709ac8e425885de58e189331da7277d2958b1d6b76e7255bd69f8ec9dadbb8a167a31d393d9bcf5517aa90eab46b1716df454981bd95e958058747c6099078da94d7914ed6e82ce90e96a9e01bdc0110ed13cea1b58e095145289096698838d776187b754930ced4d08aef8af96829696a02b40b7c5689da27b64831024c80821a5ffe42d78ae2103ca76ce5438a264e5ca5a94f8a7308c2c3df7949b6af653f93b9ce2bce99c1f43b1a9237a680dc971f6590b2c4d4821616638bb35acaa18ad0d1534110a8eeb9fcc91e77b5dd65118384297916312f75447e5e1549057bbca2a485d12235f2e3c477e0ad23d6603c617a003f363be94cd8d99e0d00b3bbb519728383f0def22f1f77cf62c42a4dd582b7fb254bb8f342c1129f546f02bb3e614d21a121e626c285e5e995010c6bd51d252627d2fefb0b2c7399f0bdd2ab1543bed32d558fb570b133885bd1712cdef582035b2f97f7a5f6e985af60e4a5b430f0cbbaf51c66bb0ec901c7ca04f87501895a065dd43ac2352c2dabf8711a76abf5de7da151021879244b6e41638de6a3522ee3f14e74ab755758407eb516b4aebd6eeec127317119f9ddf9edc21daa0ccbe898ecb9737da00cd2bf73f395bce8852e7caed3c2bb9d67ed1a811640b8e2b36eb9d151218d0ba61b52f7a686aa694c2a76e12df8b3ce97df2a7fe4cd75e290bda3e756e79a53f755e51aa6200c502850e97bb5c1f2bd97a872a299ab4b0fd691ebb160b1327eee3d1a1c0f4cf0decb77faa7d7601cb52e54c3b49c4e56ce730c05b1c34a9660210e67599dd63fabc58b422f9c78a487cf3af3fe6f9106d4bfc1ccbc7c7054aceb4b44c971949409f3e28ad9d12c6119f146f0d00cd7a1a90333a2627a565f43d13633cfe2e970b087fdd898ccc36d6677696f6a2ca618d8969c83e11e7d53aee1e5729273712eb52b927a356a3321e8a54e8e1dcb4774410d82b21d800429e7a34cf49b8561ef6b7f48db426a6bbda606ec282768fb36f5f508d5b1a1995e7b03c5da7e348552a4d0b02a508472dc791a9aa201ecd2ffbea41de41632f4d11a8b9bf51eb47aadbb4aabb83472044d546557500ae2eb487282261728c4249cc1b5fc22f75bdd069c99732334c471a50c2c944d2563c67b93901e0304333b407a4ab2289db5a9cb0b3efad1d357e329199a3b9693595f0e1b5f2a0355a110761655f9bf94eaef537e648f23bbd57bdc53b5790c5b23b50e0003e0ac603bf9f4ce0632004b0407b87da898c0ce89ce4718f382daf347e69f873ecdc82d4151b86694782569fb114979e8f499c3e48377f7eb4e84b63ff841c972dc195c14cec134c7ed425222dbb704bb09beb8a6fd7067e3c9dd6c26a8aee5c59922052d6d1367956edf672b62245f044af38b78e67b780523b610c0b40879faf4fe71224659aba7852a9d95d87eab777dec8787576cd33b827b8d33aedfca5c21a4317c0d554fb78321992f8da9e11c286b50aa9f42dbe474c611f7f6e41647e2effe5b61282a7d0a7adae4c4a22b54596075eaa729668e731c6d040cc1429725bffbadd620757e38c57ac5ed36ff6861a75db7c32b41459f5209e709e0708a8f825cf50eff912049332f159ba6e5a2a05ceb243e9972ca4b1a2984ddbd19f3b5159474c0a6d00befc794c23b3b9160b6e57d804b506e17161dd1614e2be8b4d30cfda057aeaa5d75182cf870d66aab9b3ad927dcdfb212fa83be8089f935fa5bc21269a60a59c0d59e6914e1b8556211ce2e57d06b387dce4cd3e9aa6b6430859f823e6f94c1cbb4ec599028ccced912726679cf9ca9c40cde1fea539a5130e5756fc5750a125110f57b158778b0c25a61ced4f7ba63ed6f67ac77cb9a23c3d1e9355f1f04182a0ef0a9a9758283f1100830aeb9a66bc4da38c5047a149165620718641b943dc0bf3fe991f3aa0e3aecb8e019651c262d5378c2fb3f86c50e49f62d6d47bb90f7f10e5120aeab73c9384b8ccd23801037c5af5aba4d507ebdcb3bfde67ac7c1bc7e7d3bf632189f47cea9ac61318818fdc1fdfcae63a4c421b43e0ed36a461eccf485ca86bf5347b0c2a2bb0af6257b9044355a45ba1d486cba67456c0c606e0b654fc45462d56371a625447617409b0f1891782addbf8e3877f38e49b634a8bc2e17b47e49e482b4157cc15680e4542a5fe270fe7001d663fe374f8e5cf64c01458c639c8785227200315283ea01465d001dd031f56b846ea02dfadd6ddecd7482cc31614400d557d0ddc816577adc77347e29297a19ee21c1dfe7aad972f0a3dddce5c1d42474f205097091a4f6edefc218d219dc5304d5dbf27985c29a0ce7eced298d1970353037b4eacf69a4808f1e3ef9cb726336c970699dd83385278ff63ac472c4923927cd12eb9376de17d0640006e1e0ee90e10836462552a02c220179d7f1f9058a12be5835ff350db5c94cd2e92c5cd25950bb4760fb920c210a14d1905552f43366c98724fb2459bf0fffe5c202af3d293cc97c6c0ae1cf5486fb78e0cc0d26aed4819fc050b1b2c8f1175d10c94e6942a56b028f7f3f25a59c6cc8735cf823cc7c21859093d5accd8dec34a6dcbeb790f12e82f59b3b62ff8b9ff0a9d12c688f72e51ef7b8967bcf459487f4ba361559fa2da7eea647608410057174cb7afd86353abe59c521975a7e0ebed3a9b05b696a83063ad693ec4738f6cbc816ca03f97e4fedb59674be736e8cce508628a93511d20cd3f417fed7e10bdb5ead332183eb20c59acfb0c77adbb7c2dd3f16394fed64c62bae9f97b94303597e9cffeb7dcef628d63549ee484432ae2c5b6987d40cfff6e11b6037a1bc3e0f48bf87d8e1e30bcfbc739a2307dfe12e5e23aec7ec4802ab4e5afd4fa7bcdb3b81d8341cab08645f10947f1b772cb2391bdff0573d335f148457624116c72b20a5e53ec983f6e601dfe152e35e4b28de209f6aa4055c271cd85ea04746bd4efaa4816e8a71a8d61ed88d3791f9606b965d8aaad7741a9f6bf06d55e3d1bba1b88f2bdb6ae9e48db89f40e3d65eab834167837130a4e80d3a9838d5ba0d09c011f80aeaf5a3e8a291672408898b4933849a468b786464bbb3fb7d944e8bb9ef85d1fd671b2792d5faf68c5e307bda8df5daf543f6ecf3919a63b3d6800257bab48afe18274b8a1a08f823670a33fe58aebd2123cc46b754bee7318eae4637c2a6885d8d1d5f6539b152681b986c297f17116e17cdde777ba39aa54402774eebaf093ffebc8db90d071812c02849665f03171eeff40f527be475d8f49d87ac77454ec24c214b9e2eeaf973176654c5238cd272b57166145bfd917b8213041d605eae8e33eeb31d83069d046cb482eb6bff7c885bbb029f4dc120cb3853fe18a345ccc9281a867642a0823e5e02ef01635470b44c92b917481d93090a95a75b8cf7ffae94922a928c26846dd8df14a07e737495990e22d82fe19a2f3e06252a8b1a299a4a1d483a4e9abbb0e261b1100c03b87b126fd074037b9a84f8a891462f5aaff53ad5b09fae1459f217543ff00485eba91800de8a58afe5951b06af1e2cb6a25e679da1ced0d4e0b3421b00e712e1208e1dbd10118e81457c6fcfdaf5e8c6570096b7bab3b08d4fd56200bee44b89f3a03bf6e245a50cbfcd4287cdbf41a8820b57102ce49ceb482a9b2362e223e5a99d4efa31f27244265493066b74695a960ac0976097ca62a9c740706907fffcaf11e4501bc05aed9b3d34ed7922b740aba00d2c4e3424125ac3dcb2c3cd743bd159a1443ea5cb27d6d3d09c927d84598f37511efb4e77343dddba507507d73719d7b53a43d7710ceb196795677d73962fc2f9e3d7c0602240bf5ff0556098077be4d75230266e936b2f7eeceb7a35baf9a91a2c8faa1b1f96d9d5b8b551caf0e94420e3edd126ef1dddd4d0e0961592b1cb3b2b67290663c086a0d96929fadd74b0da3dd64d3885b2f9e2e275f54b0ae3f1edac0fe568a28108f93bd9e9d2f4cc8c6265e3ee79c9e416d4d124145270cee7b41a4f32716c9742ab6cbfe3cd6e9298df8becd717fac63c5a7880169691d12a31b0763310d7e558e2c1afa6ed8e9ac776a50fe7cae2c3100e8f484fae1565b5cdd2ddb2aac7d9062e8cb25e75311d0b447c8149245c92a76cfac862173b37074aba19153ae7baa1f780ea899d99397fcc25fafb780bdf0b43978e325a7d355721ed2b4361eb08ece897670744beef4d31e52703e0736f8846f4c1a4678824bcc4eee0ac0a64106e586fbfedbd246fa7ffb090b1e4e807b1766d0820ea328654aaba569ad0290a2195349d25485e35668ef113054c39cba9153d212485ec2d3fe6d3c1b888fd6f47b479703598582b048552f9a3981ccb544c1a4836da60f776c5f3e485a8b5907903472ca2ab9f5ce92fe2434f444970e1a757fe19843ed55c1c6489b963664980b030c034ca92d5ff3a00197db40239f937bfdaafe4b1b4ba85bf6d041b96f5a422e754ffc5705248226bffe006e8efe943f5ee74df69ce5734cee1faa4e9be43edaf5e763a5cabd2048a89936143e8489489915d6ab1a51a2d85379045c99ee6267daf8ca67991ce9189d314d61b07b93241b4fc4c7dee8c9b7eecc2b4b9e74ec89706f47dd17eab6d08bf77195f1659733e7e2384246f3024df6faa50f76a6b556de4ac9b16926fda83a686ce2cbb98aba9e050bd5fb44a66d16617b4695be24bbb1337bd0aab29f504d6d6eb89d0a949786ac64954494cceeb6f3c4c87c39bc9c3f06e321dd8c172fc355c9faa8740809e1d325955d1dd4258d88bc20e931c572fbec36f5a4e045179356486f8ee53e1401c61127b8c5a17cb81614951e5e889366ab04243f08fb481ffdae619973ffed5bcc98cad271bd882b65719f5bd3e2a35896dc4e219dfa1a377d27879d0e97cbe046ed40b629773cc279076a300bb51d0ede08e148364300ec9b2ccf809e628daaa622160cf705b7186884ec5cf45b3a297b76b8add4067539b375544dc17dab27df841036bb2d2526705d184f9727d87aadc2d352c61174449b4417a93cf44d8103f09a0c03d2bc02e345bdb2ab8923b8a074ff48ed7cedad936cb633d39e273d152eaeba3b9e381f9067a6f4b1756a1346c966b77a550cad884699a3ec5aa31dc2adc12693915f21951faeb4c91d19577a0c7209e5d3bbca8d84c605a8918cd9761ed1240f258881f3608afad4415fd74bdda742a83da4a399a436aed7133ff24414ebbef1e2764d4c34d17b8d06bee52c338b59264f080ff06e728c5c8cc9a62d41316e796aeb17783031bda05aafd8e9656ca0f004884c33f87f4b1886c24e23fc7b59fc83077642245f4a584128111721c9aeb19fc6cdeab204a817367f04453ee8b58c4ebb16c7fbb62116f0e10f9dc288c3daf1631cb3e66ac5e7a0ebdc60a35ea7b486ee62c97e10e59a93837fd7e8e0e9d53c79d666a6432d1c78127ef6cac5a4fce8e85407d651b6e6fdac8283ba50512b8267a326e856dedc91489b2036d8cfdf3c571cde2ef5a4a6228abf440b43b29bcddd5a0237c002bb1b2a85378834ed97ccdcaff962da3583b1e63d2ef6b391b887d67eecb82cee4128e2f71086bd5762a1860a45c59d94fb7e845cd2f5416ac1f80bf12315190ef0526d532a1e9d9a8157fbb44a7cfee66de0a8b0480ea16dff23b4c9dce31131039aa6f6af41a772ea19ff3c5df7416686154e06c6e20424daddeafe3e6e6ae2cafcff58fec7ec45b288ef73e9916405204f2adaaffefe6a5ecd93ba602ca79223f994ba487f99ddd8bd0c35600e11048789b279ef585d37e62ce1d1c437239a58511df68bd316063787177f8a91925176f69a7450cb03828698ca31905a27f98318cab30186d0f34e2ff45cb365776a0f94f5e44e0410cc051e5b96266e26682fcea87604d0d73361fdb9fb957d31db5b07f4b5d97b52ebaae31b067359afb0c8d68dee37bc442cf5ff86b05538dc8d31fb7768cbd3756490a30d194065d849c57e791287260435b3acceca1363b96eaf52bed43cc6ba3b554403a47beb7ce32bcbcb18c56e6d918e36f6b420640f867e4982342b57ae1e2126f5bd1398913935af5b57852b8fda4a277cdba6ccd850ae578ca2622af0896d7872227f029c5a9529488f9ad5625ae5a7a6567d87e8a3a84329d1b9f0c2b3711c7ff37f14ab6f81780aaa7c7bc3434eee2284f02dba4110396697d43a2a3b64cf25dec64a2c59943839ac1b45a059f366236ba2c0d8d7a42da04684c0b212de066ae4cb8de50ab1472caf2d53a718dec4d64e31b2aee32616119d8a3558317237212d18d2ffc5e0a5616a7906b91c888ac6a76f70a15236beffee275964268ac5f91e955842d91c2bbd04c19b1a8a9d5e6df05bf224aca4517d8db9f0b9086b3a053cd7f7a15082ed0413f6eec98088203c78e8ded7192623329b4a533fabff89b89cf100ca1574ab15255e84c2033481dbd5ac0464b1f5e79731308df18d9164b2aa51818ea9dcc058fd8e983d38d7e84f89483c6c03ecf65fbdd4f3eed1f654eeadc7225faed914478ed94409689d216f03a306a3c52e2c153b1de98d7773266bd5a5e930868620c9d20544b2b0e157abc0c664302bd0a7bede6cf157a542407aaa30895b57515cc265e8d571918712c774abf68c42dfb6e5b67167d1a0b03d49d99812ccdcb4907cd6ca52afb9a82b17254250cbf56c2886b71cd2570168310ba7ae6ef46520632686d28c0ed495629a59b361004819ac13c8b1b27735ada548b91af4695d1247034ad9af3b2ba6659101b49ab3fe3276756e7ddca48d0d26cd4f5867b8ecaedc9644a9209b00fd076bda19e15c3fea4e02fc6159c5b96b0d31649c99928352eeaefc3179f82511b37f7a25739e279cbf7c3eabae2488bd0389496f3e4112536a473bc1233f27b472468ca847eee082a6afa4ca365a87362603ccb61935101c997b7ee946e89d47abc3d0abd883914c194c17cc17b510a19585881f224e89ed237a90ebe2fe7bc47e7274222b7d16ac9d56cd007c570a8f4f9052babb73f899d677fa2edf7babff38e5f718ed09b8148d4dc5aa24df54e2ad34067b91bafabf89dfd19a4c835e9dc528565949bb78bf1f886e0e1981d86e3ee9103240ac14981b074af45cc61c40f581a4ba630a920ff9e14b5a8ac8cbc1ac2863a6a64f144add63683e1713f5eb2edf832229b45912ece8d971ee3c3773d2653144847f6e6ea89449cf9cf1a7c6f0f676dc4ad67af5a880979fba322dbee26725cbf57971281d6b87a7cf02515dec94c7618054e58dd5937498f28f752e46157f7a232437c3a0cdb4a6781a09f91485392c11519f4618588a03aa1c6bff54ef2225c1080731cfe30dc237a4cae3421a98243d1a0b42366ac9256dac8dfe7694ee3869fdc28967caff931f5a7400f50d42b9453eda8b9e29bb9eccbc99592b87f26f42904fdb24837503d47e1e123a5cf278accd82f95ae3a0fcd20fcb73f4d8e4cb9eda50863a84fe21a34da368889f814015122fa33b859dd7de701b3160383223813451cdb5534f966a956efe2218fc9cba9952b5f6a9020bcabb23e1c0028e0b3f26a003d169bdac4f54beffa27e2f5f9cad71db9d3a097035acba205a9c60898338da3f32fafa4cf5dadc2e70336f4268518048b98f8637640f0ea45ad29646fd4fbc270b661b5a5bc596e0d1b2207666fa6283504ff88c21563c4b03e0817d3e3f4a9fdaf1ddc668574b2341c6afc67ae3377322ac9626c85e088cac7387234b7d5743ef93cc7df7076bcdd36de3e1deb00c6a2e2a34abe0dbe8fc75ee0198ce8b14ec8bc5d6fb211fde84d9629babcae5001ad4e6ec8afffa9cd02f355b466dcd8a81115f98ad896cbbed33c8dc2d3247a598e4ae78e2277748ead8a5071633b4512204098c4d9a0b717125ce53993759fb12abc550cf1415fce5001c397d9629c237a7a3e609317db5b3b483d4e99331100cb7f417a899fb92be3f6546aa3849314c863ad1d78c74bf97a0b79a3cc8bafc3ad58aa6a5da5ad8d5fd09a9d679d96d12d4311da3591556592e381e9239cb77bd66d9065d8dd2616d2807b55376d8e907ede7f34383cc0a53c300c6e6b6a498fc060f871305a2d560f926e2c7ba668452d73d44af62d15afceaf2e939cceeb50bc98d079c4482da75636061a334c400892f2b1ee1da8e32c7004e5285737c1b311a432f2b4408fb69a15d36234489a7f1f50c451d8275f4083a9124f7fd070eac8be98f16a0c5f467f93b2cb5f283ed0dc022a45946e5c46b39e0be9bc844164ce032b430587e2419752dec1b67c5aff5ff72758965de79b5122b80ab292b4704a0ae5ec9b3176e6d647627c53f52d4e363af7db58ed976ac4f63adaf19775f297e599c01bc85425e822d0c3963889be7afe7aa9584c912ef23fec578f6efb4b46dff66bd5fce6446f8a1f880947c33fd81298539b63f2b88881a2d4f064bd945cf598ffdad4dac5e70a1c386f2fa9a92d3fbd4029e27018c8dab866cd313fa045ad914cb1ce7f9fd727effb3d9d34b12fef06c1c0db513a2715d9a247b52de1005d87ba20e3bfc3b06986021c4f834cab4c86098d7549fa4d26fff7c779aa1106090a4be096ec7bf9b975af6f4c174282f4893501dc462b5f0d3e9c56aec1f65c489a77bd8429c180b3094da23b098e620ad94f86a3bdd87225ad40cdf07f291a06c909dd9202ead4266db2d39cc52ab7dacb868f967bc01b8e79e125e8f43f323cb86712a0b94e12d9c9ab524db75bbf49c0f75b1cf83e3752a2de2621d5e3f9e469f6a25585ff444936a12f2d704bd6365a555a4e182410d9a85d84cf4dc40d57088d06452cad2457eeb0792fda119b21625b0c048816dd5356462085ac82c81a6982fdda285d5fb14e87d11edbdc21e4958db8c8083617b3195a3e74457aa6be4ac12c288b6d999109e6f7bafcef8b669cbbe352437b3bb4803628e8e2fa2282b677ed41afd2a48550f80b8ca281e8f10e39769df87c51de50dc550a9e9bee3ea7eec1b2d35fabf2c3fb129a02a895799707a36cc192a1821dbeddd61323d711ab03022df2a438971821329ebfc27ae89b468a9ae30a0a8dfd4192f996e5afbee98e0fcf82d0885daf4f614a03597d9d873b2a0c4d88d02cee84e4037c3ba5895bb88f2a6979789c9a32d68612cc31ee8f9c39092d645913feda93b53b44db136b3576a3c877df9006651ef36f9712d306ac6ecedd2f3597c93cd8285592a85eac0223bd3d5a041a66bfa6864901f9217f36b13f6c8a47772de206e27cc6802702e3011549d6af9bf6b14bce532ee7ba1a1a1fbe15f3732b8ed806af1108e56d43f20d2724f9621f307615eb4060412af5ec7d9029fd3a339e5d9585268005268abf1755f9be78ceecb0bcbfcb96f09c1627dc1b22b28597388a97f43b1dbf0203dd6654a005a2b6442c4893b62a28534c49f1a234abc94bcaeab075825e599fb27224e4254099d297e2a659a79745368fb1f9e38d042008fb3e035c68ef0b799a3c14ad38893b63c7e189754128be43c9130502f2931fcf910729edb2d3ee71aec9df98d269730df66aa1a0f5b7043774b2a3bb4d57761b5ef702fd35c35e34f9b0f476a83d32295b48ec62e42ec0cc4fe0b9e7f1d3b205a6fbf848ed347dbe3d339a296d0b467783119f6cdea07be058c64e9c96c781f39a214d64acbaae211ce76dd6bc4aebb365bc3917ea27cdb53e5849b0dff068ddaef33a9a3a92000fe284528c9f591592bfb98fde74246e08dc6a001a91118cc9ca9c05186d3aff33d53d0577c5061ddd3ca7ca5bbc3dbe2ff63d54d23dd3cb8d12a4b2ae65e111b6b335e6bfbcf07cbf6663a179b6c21d8e5ad6b678223203c54083e5772671474b713185378def76392c934dd896755613b3dfa3c816b013922db4e77919ec4e4be1dcd0ae98d1738e53902d4ce86afc184b21f7da1371458bf68dda0ddb25c486bf88d754c1e10524d067f9d77af7d0220652357de578766af2676fa2a22c9dee118e54a75268a0f15e6bc825b0f7d34cbe65c510eae604d3b987038f45df0b4bbff97629e623ee14f48b893e66186c6edc961ab6292082d3f368ed74f663272ea5400852f09d5c6be4530b99b87d22b05aed8a646ca8bb6ea29c66f9786cec8566b1f1ced4bc7b933338d7076cabe2e2d7706cb30cf63d82026894fd8929766e8f5b622ece3b29a52971de73cb9c50bcf76b259302fe71175ccaa16359556d2162be8cb9e6fd7e3d4ad5d722fe8276c3bb3b19e15ec4bddf4b675e22d26ab99abbd23b818eb75d41d8c3d250ef239434f7961176de77971a87eb245aa2fc652796e9dcb2f0d021315c8f23b5ca5338f6d6b16625285b4f5f4f1aaa46bab1e434fd885c0e0532127d415047423c6dbc753e3385514a0acdfb6d5ba988ceea40db458d2b4001c02858b62654d736208d0a954a18174ea63a48c0795f0c27020715656d0b049fbf9cf3630ebb4240cf69824e10da3c6744866ea20bc07171fa33598b4e5ee5eaa5d59973886524f278f831e8b71787dac358b9a05c271289496c842ec49865f43e1e1d888afb3d85b3a8b74c17321897e3c5fa8abc51844aca9374ff066db410e2a4b45ddb2fabf1b202c2391fc3266accbde91a95318f35afb69883ee5ec3721bba12213c7181de23e6651655d2b9619d4aac08de66989afcffa2e5c1ee67b04958fa58bb4bdab3fa299a97b59e499721817e83998478156bad449558b11200234352f3d33c745ab26ab111a073509a90c6514175d295fa71695d8e485290ba63f136778eb864ad000673d4daf53e782a5e52684892aab6a4fd0430e404ce4195d880a0067018247ddd2cd07f4b19a8d65369e2aa6e74e42d5a6b32ec3ec32f4a7480f81358ef84ee201e10cba1379897ac62df5b359a357e344efb72763271157da8aca1bc9f4a2d39ffd4173e89dcdf6bae37c43d2c665ed38dc6d17e38a0f691cde3fa04d3d9c1df7325131c7734f582ccf15578fa8e0c6f3bf164bf2896671e624dfbea87bf08204041e6ea5c57cd14ac676ccc0727c8d55b14c4a1a6f3f227912686bad380d0bbabf3ea10b44efdf8ed6f2fd359773fcf4abec3f7f3ac6feef96a33e0436fd632969e4e127b4fb7579cda127af98e56160be2ddf7e6d8b868a8491a0e25152a6912ad6bdc561f63169315cefef202575fcd0b9c7de473cf3a447049292b95e08c0a3bbf5a969a7e563c3cb016da033b7e5e68ce78c2a877cb2ba806b21aa5a37ea175d11c3b548e1c47c6460d91419214603862f6728861f8f36d2682b1f177716857c3eb345f0641e569e31cb992b6c2046fbf083adc38044bbdf17bb115f707a7f72da8503fb6aa7a082b2b1905cf35d416ffa996723a23123f5567a5c9cad55cfeb470c394123e2874c27cf9ec3cb830e6edc2b66f43b4342f45fe260022f175e94279e2a202a18a052888aef459ff82e1505fb343869c793d56fd0e58555dd28c87242147d81787c57e1f8a964a1e8839986d308f0ad3f9acb65109eb19d821bd58c19cf30e071d8132a4cbe782d4054b870ab71c8e88a47c934644cb3b164feecd2d54272b0e4d54ed9e7483d1309d3ed79b46ae1feb65abe11ae879496c10a0479569e533d78b321b30242681f3a6f6460f608d853b748710602460771c578eb6c4d7c0ca0b8d46557947048d5d8c05c80bc2f12ec3a2de865047ce8e8c8edcbcd26ddbe5f25ffea6f7a76d4b693bed20f69da7ef5c892f4e78e53b6e68ea86e83f0da67b7474244ee0f4c71d4e10654ce6663bc746bdd984c91fc47c9e740b70635f9365de39652f1c0ba24e6d5db5da3c0203691add207aa9ef38dcc261d97497613a3663187d01ccba51793ee43837729b070168ff01c2e33c57f91c962c621942795223d4700025175287359a25a9954b81591e390ad580e88dd0416593d1022312294785d97e1854a797150c19d4e9467dba068a8112434ce4f49a7125aaad95050b68c40ddbabe531399870ea39386732f30ca67d1d6b59bbed9c55592ef67556d054c05741c5a1afc3a4b0a34f4e89bbb7d2493966cb0c473a0a6fc40cec1f71429c7a826a286c7d84f1f00bb66275cf6f0271136e7b599a06f95f7158e6f432dc35686aaf6c3ed3e3de856abb88e80552c4f3d2a3bacc981b1a49d83434c707fbf7fcb6bdb36ee4159d7a59854ede3b8dc21759f047a481041f25fceb00cdf403efbcc90f82b39e2ee050a105043e7e22c6eb6c1d12ca8b5695e109a3f4fd2fbd56373a4e0f34229d666abe0d1ad62e2a66946972af508e888797ba4b913e7c659b3f5715362e953fcc3494c904ebf9e86352845985b23e4e6cb642d402b2382327e8a25f2ec616ba5f7b42ac1192f862468d711c66662fe965f8743b8ddee4588a00916a8d3ac82b07f2ad78cc4fff6897a0a4b14881f5c746b8304a7413ae2fa5856cc75beb14d27b7d966b5137f658520acf11ddb4ba8f9b2041d906179c03c749c90a2a53d4a2bedcac3ad680e17b585e2348005d7f7fd1b2c72bac3e9512195578b0721215819429e59f189e5b681e63b9bb0528565c6c413e8fb06b93385b446e3427e1189ee0f91c97605d25a244d4ed63d9c551c1851af75b38648114e0592b9cac74cabbf28b93166fc46e336c065d1f09a0f26cc6d0a7b480fa52a79ac6d006bd4f95eed6e6d47b5eee066da00cf27c4c2a5cd136f36f48c20d81e1ab1c3aab6d6cc7f8dd8bed31a60951818fbef26eabde0d93ef1b1d4b206192ee0e3b484e5c6fe603891ff507b01e146bb674b457420031cfdc0809384daf0901afd58e429f32c25d8286e1c70a7b7a126c8e3801ff4d91c71f33ad2daab27b30397da7d104314f84391744de33a67aec1f47e3e933f142e42845b040fa2682232462752d453f84eb8e5aa2e82852dbcc64490c61c98cf2bb0051d230a3d726426fb8857404962951f9f1970c8f708ed93fe4ce9e8bfc7262f5c120a133f329b0f005f4e5f59839d3e007c027c118bda957d8a6eb697a832656a6b17750f809314477e5032729bddd47c9b7c6ebc2baa0982d6ea1275f5f16d9a3c987628bd3c1e9fe558816f044440d1ba2367af1044afec53ccdbe042e8c0fdf8fd772fd9cc813125b7b5e9f0124fe15cc920cc0abdb6c8cdfc67d5019167fd2cf5d060cc0b64a6aaf03423a816aafe3b250ea048b52835991fe9444c5c0ff4e94859d7c881c73708876bf3478e9817394eb784b324b2918044e51246b9b4a108a89b3453a852d3d40c9851f573510f58519f4beaf06b4b578e7d9bf346a621e188a4ba4f3137d3e9dcd83ed317ff1971eb42182f0b8c70b24ecab4132e01d6ae65b149e18cdcdf50c05038188b8408e87fd5df998fa6365406d820a7abb2062db37593c31ca523db22827f761c8d9ec4a8d2c1112dcde7a8f114102a10cce708be77755352ab9f1c2b980ad6da6a0c046ea024ee92b98296b293264200daa4398b3731764fc6d68a3add782567186b3ea8673f84e54abb859cd81170377ff3cee91e5cbdb3e37072ef262f698eb43c35cd526b3525c4dc6468cf760bb81784911fb513846274946b05608f687c4dc970e5d2a97b0532fdb6b3bdc176fd4937fbbf1b18803762f2bab1abb0a46003613bad8c7a596d691d86b909f6bdff11ed62fdeb2d71b0ca8f1b96519ae532d8e6c4854b3615f2ce1a9b53f3f1f41cd733f647a04076370b524fe2111d3f66e9c85a936391ac4b0adc0df553a11240d4af6ebda207608c473db8111949b756b46dc26fa70c9e80988fccd0ec6e2ffddbd3e12d8bc77fdb5d87963d32dc3a9f174510f530d3157e9abdeeb0b72113abeb945faa39f7a0f507f8096a7a6da674c49ea752d46936a8a812d1a4d475ae349942f59def4c38147037d89956127c321ae16722cfef8107fa7248110861605a5961a37586673f756b431d169133de7340da04ae9ff00f0e09385ccabb3f49a89c8663eebf6e721f992b994f77bdd81db84c6fbd21b2bc609877aee6d438da6b20f63b5cd4b5f96f7949312bd9d827d4f0db56bf0c2959c600986c70a884262e3b1d889c25c5ec936f4af59040009b7853603ec5b88ff07c3f96c6e5ea62409b22ce6898f792c222499a11bfcc101990ca9082eb6808f85acff3002adb6b99c344b13b489967fad0689f30e975baa23dce933b136471dbcb07a38d04e0f72cfd13f8bc89e111b42cf1e453871462b93ac96b7e570a6db3db83f9dbbea7b353b6e7f2b36e55d6a88ee220d2a2796d448e305820010a8a6c08021080101a806cca51809f6fb028bac197a1ad2b2aa3a9ca7e1f29e640d91fb2e89476bb2d14e4b14aa2af28ed8f66e884a4dddaca97dd84f1ae5cac96986f514152806ecf71c7b2abb22312e4dfd3aa6b2acf96885bce250bac75b45bfd5bb4ca1b140e8be097220474c23fdef63d7b951105a0745354f3773a4c04848432e10dbde3033aeede189c1d1c7e08f4557bdfb708a44b0754eb183dcb47f6affb554c7d4b851162ee4e5e57e66361311fdb7d5f1efd942199107fb61e477ce239e1badc0180b3eeadad1fb7774d6b2454c1e596044063767c21022066f563d4d49f203e21748961109a1cc3263856897d41d7fd7822c6f0c71f63c6f40e3b9d291005f94ee1bfe29405c89f19d28f26a2370ec9cf9167a2447bcafd8627b8d091756ed5037412795a19486386e1f2250c80f42b758d6b284ec3146b369387af07e98ef39c1fb536579ac9f39a3f1c809c5ee3d9b6666ecc7edadc3c45e4b9cd611b33fcdad85356c8d5943027ba91d3db8fd606503bc47aae6f430b62a15cb762921b53bb1e72a22062579865409eb70407bb1984b84e167f799a80e66db69adb195d58a5005968c55197cca467679ece0c80ed94976202fd0eb34635fdfda421bac7064769ea85cef8e8f9a1c89d59146ead0e7ed5ebb2d74c2b75fece75a5ac721892ae2bce38b12d858a61ea386a5e811fe5f477e2dda001e6bec1adaf5f77efd7a97bd1def6742fba28818a975d06cb74c92b062578c65fe6299a85f28a7bf44318dc3c81d6c3daa6f01693beeb5b00159583ec2de1e8e350a4339a014001ff2837714cb6dd226582cf4b9c5e3e83d5ddb23eaa2ad0e9777fb73fd7ad34e7890ec4614984a399ee135e6ea168c270313574ab37537d421244832c8cce09c5c1d74d3823014167f2e01f5a33bba2b7bc9cb7f101507ebc27cce5dd19288c8ee68828e1f191dcba7187c8ab25aabb33feb843e6c0c7325df43627271b3017fe27c62a6dd719c9c385fbf57c5b9a5f983f44534c8371e181eb29c168cdefd6befe8de3b7c938e6d61496cb92f3b141da2707d4570fc4e559acf912a8be0c2eb8d8958f8cb73497da499944377f5be83d8f0d54fbb6e5d76f0ec714c0177dcf7e9455473d99e8e1bb74b8273e14dab62890ed45726a1424c8d360c600c7cdd49c3b0559131e2759ff11dad5448b56a1191819b7ba7d70916d5b6b75a4abeecf14253e6ff71dd36b001ab8d10479653a64a3074775be9251aa18bff3dc236c9c2a12aa597085fb9900763733d305ccc10c21ffd1d8f3a128979f3664de4d7eaa87e22ad62072ca7c729d2acd682e66b058e6bca192de134e16803090537f797302b277c1d256d72b71406d30150e8ccc2b555f81a65bc7f63ab80cf19a84b1b35da933a5ad46d35ecaee9e22a68891c11157dfcef7773b37ed10b65a56dd8931e7e1aea10a43c0d42b0ea6aa017fe9bd0c5d9c5c1c7c51c51ead05ef77bddc327a59bdc0875d0b7ef8824fae892f46855e342af4cf8424b4bbc1da56fbfa735d56a8b5d94a4690632a56629d2a4b2b0a634f83bfc92cb77847fab265dbb4aabce07f5ccfa1c397cba9b627e7f9327b142d0d9aaf10110573a9789d2edd6a04f6506dfbe1a26182948feff185363ed4b8ae595e120a7098e6accc69df8fef256f2b0fa05d212670f4d55830843ad59b3829074e55b7117c2ea91c22092f6ae0585e7eb1d569d27ad2c16355d5a83df7805c5645ca2ccc6a20215c48ee0f0ab77b3203f61e5916542cb99fedb1e3e18f6d4e370cc2ca73f2fe059688047a4a067d626aa1aaa03616ef8447e3fe311a583f4cbda175f8b9ddb3062afa626d582f21753deee94df19b0eadf9ffd72a9af623b902d106f7322d94e8e6c8201d053497cea11a8b9a97d1e76b8d1c4f749d34c268f784e1d35ff8504aed4431140087dea1c043bc01fea4c5000519d7959720d9e5e45bf9a6c74890e04d44dad266df3bce699dd25e462d089d272d65cc3446c8b33bbbb16ab921b20e14b159b2beaace745653d801bcef30af5bc2a76816c02dde348a8bd4663350742f682d22b27e2b4712341f23811e151cc339dde6fa637137475ccfd1f02cd38f212eaff8d52bf4229647eab61690542f7364dee53fc41ce629a22fec802f41f52f19c3047ad3e85d6175486676cfbae47546401c86a7f5dac96cb65b194fbd3a1895d4b5cc54cb30594d81674a1212205214d624e10e0d300ee36ad5c2211191401d28c56bc7126d3961dda7532ebfb05a4ff206374007fe49968bb2fb8e4cb2d95dfebbd7f207fa8ae6fc535564e6cfa76af8596e56138af4b685b52f7744ca12396ca78e918271ab1444e65f5a79c3327bacfb8280bf5bc54b4cf3d1c03b998d7d9b2487d9d42b1405fb25f9530dc3f1fad04863d9bf5cf4bed1102be34883c7f1dbde224a3ca31430438e1abc23490f65f8d39bd3b0e79adf91b824191a16dde672754392b857a245e40979d2fb6226dea5f17e0d9c5b4c519f1b08bf9e32e314cf4275fce2031cb3977f946e18c2655ef6fb0f571826af2a1cf9a1dfbee4c07bc13659b609751e227a30555a43862020d4347fab9812efa82f235e775c6f1e29d9371db0592a9a4bfcee6d7bc779ce5fe11fd558dbb1463db8889e7658b9f0d2d71f4c2bdb3caba1a73f785741d3b47af729f390760dd8b67587b06fea1ad78fe61a2cf6978fefb282b0df576182fa3077d8c8bf722b8f6a26f889de3326c5230c6293b6e18c12c73ac42799bf91acac3484696b724c0f60f060a5cfd8a52187af85f4becdb7aff67bb0c5ef57b67ca455a0cdafaff7d96b267d265ffc0105f57de09922ef72561c82e16fac5cc9f1b3f968e45990a5fedb3403a13d8b577a6c2dfbeb911ca924012763d198b902378a94701b9edcf5a48f57d1c526598f9d678e503769fcc2d7246f955ae257efc44cedcadb44921f109631cd8987eadea41bf35c54e44e23accdb5c514d6622b0d51f4705594d272c6962481c037bf15b0e50ec42e370ecb1c3202c8ec4ddc36beceaa2f505baa3a89c1c4bacd872b7b89b99e9accdc802131c347540acf30b20ca42dece9f6549b9b33416426b4d67aa7b1d2304b0d3d3e606e1dd225b69a865e8916c28b1f8c7a8ec0213fd421186838a69bb38a2d442168e29cca916aa8c9cb133ba34e739ea93d54fe2f58ca8d24210a59193b9aecc9ae7c4176ebc07858c323788848611e4821f2b57213ac290314a45f7f31f2f68f0023beb3f473844c19ad281672b3aeda7005ef11baeefc492f04eca6cb6f0925c62898343958a5f10ee828bc51c7e2bdd07efac5eb9ff41d1fb46f240ac837635e964ecbc431abf57a9eb681f720ef661edfee907d66e550327f0fc61af0e2489b2232a543fa5b4d8bc75cafae7db71ffd3c555fcb5416fe3d7506c5e03f1850785605df8c6fcd1e41fc485f12d421980632bf85a408c42ce430c0688a2f2062be7ecbae4c319317285c2d5b8bc66087e6c892f1f85451a02711aa81da20e8d3c6b8d0fa8779f8ca2bdd4af1cb83dddeb1de43d6d9e2c1c26f91e216c26517b1ea54d36a4c2bbd7f999b1ad2c3f6f9ebbde6f2fd236519fa12feaecf9796cc8cebb843edc166fbd2ec3b91c1ccdefdbe42b22a938118b86b74c821d974cd65e14d5c7b384182d1ecfa22670d6e818f25da7eace1aa80c0f5ef7a208da22faa029393cbf52687b80c02de2ead3010d86e2728dbc031c88253a3977f9b6228ca760b29a47d1a71a1473058ca7c2c8adf38965b748a523ee9c6d44a4f288da885258bea149a2f3c25f77bdded0355cde33b32f55f1c9104fddbd13a17fed4ac27a1f798b98f7f9058b3d8ec630c6d1887c2c2d9ea89dc79d6e5d1b0fa202b6e3160c0ce1a0b6aa2456cb9a708f9a8480d94df87f6030dafc80e5f51bd7181065309b20bc156d58dd1ede6a73fe5b970e7bbba58e615841de209b560a6464cf381624793e2cb3012eaefb371fed189e1cde846781341f965d43f59f1e234b77e62cab81dc3a1a79d9de9cd64f7677d5a14fd7b1c50e91db4d8208dbe3e1ad67399e2bb9715b059097f47134d9bc8dcc91ff16e60cf084881db05059b747e275a880fbef8b7271dbfc354009f832420736f0ea70c015f2dfbb46adb69c20595baa9d66366876e843a74ac92c0647ab29e16cad1b1d76615741a547963d172e56fad058d4f0cb9281ba78be66d9d09cfb1ba5971fdd077e1a2bb77942461f04da4f7fbee5e8247c3fae0e7fe664f2f564399496682dec224a9bf502c974c5ab6318bccc127354d870f3c94659988be135dcde6e804b1cb76ae44a54f38712689b0cd86fb2cd2a4bf257c91b6cd474b629d5616d4b47ef282d1b74d633749342963c424b8cc3bd3c8a944e48ef888755d09571e3e8b86439bd7777cd6dc922f0dd1a236442514ef8131c628a0b73e6841518ec88f693f1e16d8f39a52706c631e44d20e71894b00c1f14b75a3e58fdc27dce0581cd46bd9ae66f54520842ed060d9eae67230c58df9b8694fc443d4530b51e7ff5ba44a3aeed4ac6b7bbbb125075e1933d7a0fe997296b12f0136a6cf5c78f1c24560f4a0c99e1038529c4f8f3244ce2ec56132cf45ca12989a6ac41a897f34d83c0168ca71c83060097cef3cf7f97b4d78f1c1d0fd01c18b4ef5835632bf20080c579d1e82e7d032f3c1e7e9bb295c8319e88dd001c69106d74e4ec0c3dd5d24bd1cff2c287ca61ae5b45e4d2d659233be3ce6a7c232d1c535a28086f4b1fc1ae25bc8196520ec1429413deb2d777b35069304a928c12526d2b4755ab052011a0fd6b5501f3193ac49b37ffa85d0be031c972d47e6a390149a08d8a84314dc3fb086cf5cfb2ce66087ea5ed9ffc80b10cab0d05fa179dd20fcea5cb922e750c60b74a2844afc5872aa6f43f4659562e3841d5d2d5335dff24ae360a697effbcaee3c3b511213446e53eb924243ab9c04c9f90123377a038a09b9932a0bf78fdc40d3b4c6706630649e797089df761f25baa62a2eeff55049d2b3fc566802498b3ce10ae69de25cf9c881ed786907c199c3bba7c835debe55419e87445a402ff6cc169cc152695c2005039eb1a55275f958f933223cb0145cf67581b64c0740dc3df73a465c9fe74a064b9e855edb72ccc80dd0090143e28450e5ebb1c1a13eb4cd3d5f93aa1354a3f18386ae358ae061406393cce531959725aa945652a14a3ce40100368699dec490c7d0b494145d48a35396046faca1cf9b3cb39d8392e3728c22adfaa327ad54bcca94df2d949a3bf9b84f1faca6c6ae612e99949a11f03f7ec045efd0207d21c75bd64537c9f6465cb2e917985d7ef0ba320c5dd713fc5c8718eeb1e50f37eeb176dd37ad7a50f6d0c666b7bbc05e4e168b07ff2a87c025c8b51eb60a2c8e04c745be1aeae87711a1f1c030b8623a82064ceeacae6f9f04dd67466330756b425f776e9919d1cf56a6dd4bccf0c5465120212ead57b65478f189fd3803b3c6963c67bf30fee8f6a80dffeaa427cde1b34012f1a2d2d4775d395d4c5537071c29aa6cad2d09f66800bc787ab700c90c028c2b7246d64d0840f0cdfdc89db41617f6e72e65516c1e8cc944e76899663f29746eaf5bd7e22b81428abd2193370a545f47e3a1e025c697da235ce500f2535cb4d416bdfc433b91b2f8852369c313c88d483ec9f9f59e70ab8cb504c13c6fe465067ad02361db2546aa6182f0538ad0d6e2a40a81fcac68c97af900ac6813cc174cd69e4df2699b42e915745d0b0ad601abe784d39823dcf3878f373f9e2350cf0eb0ee7ce6fb155649e06297174dd000d9af83c8c4320f0425617879dbc8b6733b9e42646efa95206bf84336dee38841f3813ada30976b9af372e48684eddeb7076df5afcdbae6989f8ed56845d34ec557bf749d3bc629aff0395464dc4666dece07dc31795d73edc284785e8052ec57d8138b3347ba547981c591c873468087ab5eca1398dec718b8347e879ccef782093e5eaf82412d1308b2e794387448cb04a750e8295c684e6b9d2a7d4e97f06b631cb5ed148e8ea7210e8020f41b4317006077096e64ad73b3c9e0bd2ea3863ee9142d00690bd61e1d1499006fc4bfa9ad54b993261f779490d0971f18148bf3678d70601b9a1938cc8ae66ac52499d0ef692e23bb769c3fbb60df42214c552469591188bcd0768c65ea3c90c002bc9b50bded4527fecec42921c6f349b8cbce3ee07704e4c9896ba524e006e3c8509c6a82574b5e4547de5022b287896e943344f32b7c2f144dd49934f301930ce74f46fd8e000c6b56e1c5cc531a5996315028828159e0c6b8ad7874f4d478182ddb4b8d864313a116711ead8ef45b1bc131645655f387ab13247406a7bde67f9a01cc4b25a7f8a46b2deb4b53dd1b61401b6ca4a0ca1f8206f460c4d0afbdbb364ac0f56ea56f1b9ff44f51f55423c371a375c6197c000b37ab4575f9f2c1a4ac06d2d37ca4028fb566f0b0a7a3a8120ea9edf8913f03e2a5ba56797525220dca17f28b740c004b12651c914ed37d7da669f7c7290f144c8f656ae4cfcbded82752ee2d2c9e622d5d083b1249d2dad020acb1398112a96b4ea7925e691158486bb609666170179576a8529a2df4ca1aacdd72596811a27f43ab46115943a2e931a230a8347a1688240b0a8c58f5bacf3f721a96fb6124ad6a92dc596ff1dc96012fbdedd095749a4b1334041c01cc82450999ef7987fa08cf6a681d323e5f4030be248570dea2ec5a33dadcabb98a0869a9e308f7a54c660cf6b8fa92fc79ffc2c218234203e45fa4e253255aea9ac6e03c715d9908829b3e9f36ad5a068298aa5c5e47b05e2fdb4517749c6149c8c8e9c9ee27bc64bab5f02deafa4bd663783251a5840d733554f17e325c234d78c3ee68ec4ff0547d5ed09e93c67a4d5f355a53e12cb330e4f044250c90a58f41541e87afa7ec2c2268ec95bc7644828d0b105191c4c6a6641c9344810b5bca1864e578a9f765d8827c5782012320e83399ecdee4606650aff3dca5d680de18cd2b1e4159a63034514442d7786e323216fede840f792fb8ac9feda1c38ae8f0d3837825b1a5c1e81fd1e06ed97724137304c6ba67df69e6c3085175e100c3eea911b1b85aec953755b9c3b76d29e2f69f2f3f8ff859f6a3a3edeccae8f266140c281b95a9da0733a57627ed7f23b52ed705fd27f7544867f9c13bc81e4252d8121d8fd471ade562a961344b35bd63b78dae83ea4c61282440ddb519cb0ae5c2e48bffe7171cc2b645d1ff1428878250d969d7a204ed95ee78f119c9d7b8990a9178a351e48d49433f5d5e1f79a01ee759168a721ca9dc36865092b6e7fc5af1ba338a75377b5eaddcb7196f57dea9be9b082e6d149fe2f34da8cb16e62735e80b2a8c959b041578f37cb6125ab7a1ea6fed9d68285f0db10c21ca87b6eb45a8f04d55436d22883f788ccb60d78d0ea34e989f020d5aaf123186d41487980df028c7f8b325755ff0a09b24910033ad6b7cbd03efed54dca1a59b42e8f11bdd8319d3a2e0cb9f614ed315e68a65bb681278fb97ab62b5351aec2766ce5d67522f2cceeb20e077fa6d0f1faf611f1d11cc00506f7124e46ed3711a8dc3f9d475b1a92c32a7a00f2a16e02727a4b467f99063501715fe9c888000dc03dffd0f963613deed7106920c8d003cdd144c184117d373c050aa664ab1aa0d874b8ec3d0e075ee29f965212ed06c361a18690c987cc7fa44b19d01e7dd7bab2119d55cd4bf112f79f375b54f8a1b6f1e8c51a0b3abe2708fe1c00b927c467d33f6a65a7572fb39a85578fd375f67fec14f8893f1c3652863177f38d1cefecc41d38706d5f03d5ecb160ead5805336e78ae1af1ef24ca86d507368723f71056794a2b999cddc975712245c213e221328a2ba8c5ae14e8639f4aec34df7116045d1e0a17ae5386c242d502c2f3242eace9f9aa33ac862f77bca6494ad7c531aa32c1aca70c702fe52c2a2c1a5ad43c8614dfb323edfe00de127b741e5c5f8000d892d982ec6782cbe4d183257e8715a52fbcd845b684999eba74c769661db3049de41dd47e523b79685d79f41286ff5d165b462f1d33b8f9ed5b6660605ce65b63172412061cd0a055be6414019ded66443d52ad6fef801f4830e33526399b4ca356cfd67e4bbf9ce7641e70df73a0141975fb8b7c0a2d71140904d7dcda3f8851bf8a207189b29c25617543a07a7ab3788c2bd6a7ddf531d444a1b43d5330d2887bc1271386051dcca5607caad836b0b8d9472e133594f2506c8edd3052a79085827e32d682fe13941563f0f8d888caf374909265ad5ee869094258212f75a1fddd931d511992dbce5bb4ec52ea7bf0b9bae5be67117eb45d7d7d523e3190b4f814eb77ee410c40e1fd5820747546b69849ee6514cb29eff5554c3d22e1fe0ce7114f540953f1b5d780b0486449950df22ba93221ad7008424308d6358a3704a1b449845669072ef58a5b68f40147af8231ccba2ab4e2751df1bbb00085ed112a7148954e5c5e8cecdc4b5f0b1e33de3351ae93b1241e04fe55dbaf1c8df079e0731bddfdea75cd41573c703ae3d10eaec247d6e4c217db27543ca630f12d6618b2437508aca230cef127971938db02aa57b782ab448888faeb19048c18a2d3b7b4c179581b3cdc1953a7f6f96b719b0f2e75fbf6359f1fe1890f4cb4f8f1f064a4a891ed65958b4bc1cef84a3f36825a15b326939229f1b7c4897f99bcf206b3b65f29ea7274fef2704dfc2605d9438b556cd2cc1eb0986bc356219c70df8d22da60b3e45baa768292cac53480f738a5ebc6b1a64950bf3809f9c37ff97f4a4c3a14fcc1ae39b775bd0efd01428d41d82c8b2ccceecf4333cc4cbd9f03c42b781be8f0a495c2997a9edcc73b9e900b02173718c0feccb52a28ddb8cb439c5c7254978ac06ea601c08f3f7a824a951a6590e1bed0257e0384f1b20a10252d53713472190ed15dc09ed005f4e808060435330603b9d3b856a8d9979c0eb747ebf946a9b73b4d39a239f7f0eccc36021d1b3348b9681f9de1115342a1aaa7019a2e9d4f4d29863fe0f343977caaf03d4990cdde431c279749bda1c247fe76bc07c5a14a6414e64a607a4f48ba3f20432642ad88213f1ece7ce8cbf1a95cee334d60aa366223d35ff207ecc6683976f3d3193fd25a257cc420513554ee30598764efc07d11ee3980794e775bb71c8d7b8ccd7f3533df68e7d2f17228b6f76172ac7c8ddae5baf844ea02ff5c17b363b4564389d449551e785193353676f81ad72a7e15e23f2bf11a2d1a399c6f3b22c082c49fa57166b0434f21fa8e659b3f8eae83289aba1136c48e11967c62c9f94334f5354e83da6fa3f4dde915cbb829914351a17fb4eda0811410ac4181ad41c8c4c7f04edd028f0e77217d7d606961f8eb07fc23064d8b9c73b12b1a634543bbc52601283a7ea1995dc459191ce002aa216df7f35615a0598598aa18ac5319992c2a73d77ef98575192ba9a8322834faa9a38f3d4863339c55f4f3972ce8e2b79dd112eae87fcb5c95ba8bbcb867da56e7b42a6ad919f56293600a40697f82fc2551c6aa2cbd20610acefa003b1a4e1c08248803c940844730cd22df38677ea2ccb6e6fd5e30036d92d3668f3c0464881367517f04c15ff77cd508c1f42bc5a4ad243c116b78184ba34a3bdbd4edd8062a8982926e36d916a8ef52db205e65a71568c17a50a742d1cee993ca1479a90120524c0ee0ce6266c4bae96e81aa6537a04ad820b683b1c8a01397be4c69cc96131f1a9bcb611b03546c082e63b6a1cd324661a30a91841294654123e6346513a4c69d98d9074706387897476145cbbdee48d5e587e6160b1f506200c46b8a4be24a345b8cadc2ddf4e1e777873b4adeceed2b6fd739f63c0fc73b29c24685c57989acf539e876f5ee13d3c9c4934e523b1cd3610a8e8585d963d4c13fd5d9fc935a9d0c1a8179aae1501f4743d7278ef08b92ee6a9d574b627435d836a5f3d7cbc64fc6d3c7751ea00090a2258aa9a877ec198ede3f84af892fa3ecf113f036667c743ee2d2c111f006eaa848de2628bbbac82e1adb7b91f2165d9e26eb3efdc9ac3a3ed1c90120bb8cd4eaa7a4b779477a4db47508e621c6e7279f8c7fead38aa6a7190291a902b6c6d190001f511a4c146e080e9fc4422fd281bb03529ab7432a798227a769167e610ec58d79c9fce50ec66501276e96aaa20f0c2840e8d8be2913cf9e6d617b9e8c4292ec3de4d0d0d2378ebf64bf0abdc4f05e9a9be664a526d3ccac50dd689631f8a259cc98e5ded2f0bec288cc7d2f3dd39ad84a8d3ced964a483ea1dbbc8de54295f69b02de86b06b4044fbc79cfd3a71b3a584f4777d7bd9904fccdea3842069f3e37bd750295500b53000ff6b03aa1647ce3199cdb1e52937adf58bdfef7299e211989e972183261265766e1dcb01b7779c4ec16df03a639e461b917f668f338c5ddbe98e6a2d12aeb994fb33665c7faced75f888cad5f1a58605038bbf715ca5c4d07ee3a0af9c29da545ba66c279e0afa580ed95a62d86871d741f805e2aaaf9ebf55f1835751fe0c667deb6cc970c728e5cbea49934fc7636a03453e9cc84a03f46d1d45cfd25c948edcb4ea277942d2d2ed4422eb89dc7f374e3101d730767739f642faa3e585e7efcdbefa35223b8e2f740ab7441f60385eaee0337aedb758a3693a72b2cf92e6d119469451677d2cc3cf81c2df76eee59cfab7748213a0435f2d1f28c5ccaeedd45aae23c70e48f0cffe2fe059d42f4a8bd2204b425d9ea970f7788260d89cec29fb0f5234aab238af7e9aa89c33992b86f84be73aaf959ee44e58b6b7ce8e5cb1e1ed9a2e49971cdadc97c1c7c0b2212dd3743e779ca3685063fab308c907f7d8ed662c69abb378ea5ece02b1cf5b2a23d98e3259f1a71092676eab7ddcd0267e61054e3049d39996fbc6fbcce2113a774cc2b1ed611f4571e7a2afe45bfa362b450715006619ddde58c6805c4b5d8278838c3ff9a33ba4f534b870a3a2d77e6de26b3ff3b74251f3271190aedc8a2e9ae9c80db393bad6ae9379b5d01d6fc161eeae1bc945d86cda537c2966ae6536010d43894955f03295da361757f9dc21c3ddd52ff1d68a9d60dd01a361c0b97f29f942d5da8c48d9c3c403332089433b72c66a69b0aab8f45737d91ea3027dcdc083c79b1b42c09c5fdd09dc403d44f3e19e6af7c324acc82d265ddd04b4c333f91464a2adf04cd17e22fb2cd7a72404d31e66e1d48e8b92ab7ca3bb4d4f4e301342bdce04ef1fd9c06240a403c1387edcfac9d862412c5638b58475ea4e831302a4938358e54647c6a1a764bb79a801451f6a3e7bb4f27efa72737447db72d77ef42a9fdfa2dc52bc06c8ab6fefaff92edfd3cd95ac57d7ac3a8ae6bdfefa1542a0cae653f7b78626fce19736a373896be22a245357671ff4fc3172066e70f30b9dac186943b92cd63796ee555c64ae34df577f0a81d648f1a55997c58df296a18c89f0a48c3c214108fa009f6d59f44242a877494f1b4eb9e92447b17fd63fa2d32a7bd88dc050fa85dc585a83c346ed82817b22593f444554a77ac6855b50640a1cc0e4b6e112e1bdd4ba1fce9e3788c50287cb96c50bde9563b11cd41cbe2338901bd1da4b9523995d4924fd66b5d070951757ca28361f2d322677705bc8c9fbe8043551cca46ad1c1c5d4d5b73a787321102fca6a50a215648cec49045b5c95dfa5233e60df80799d2fa746ac5785b5163a1e632c9e8dceeb0a857056e60597f0a31d113810a5e5b1254892521cae4a10f321aa478444cfd831d7cf3a14333bc890166d70043a4c7256177df981a8eb72dd4e7dd34a71d5c4a33f48168186aa51f1b03ea92a4c8214b0ca9f76c255f068602b54b15b1394b762d3f212951bea56a7d6cb5d0d124714f03c6a3300bb1bdb8faa730f18facaeafec1de34c78c00702fa2188658dff7e8270603110299ee314c404340f936073316593957dcbb798b057b01e743438caec716ca0fd5cd22f04454bb64bfae9360ced000491645a505c7b98a2d088d9167c6b3e3bf20abee4b04a05c0e47325936b4a5fed06d4d955f84254ab394975314d2df19f495d854a86ba06984421ec194a0d278c3f9cff99fbe3c3b8d29e3c73dff4d6a69173b3c48b967b47ad4a7ae5a2db3f7477e9b92f99468936685d1f566341f82186f53cfe098bd75b6e75e6c5196588578fa19e31131ab330a3531091d48e0f69152b077eac82f3287353756165062746356927c2e9fa2ec028d3a6580c8f1d84bb0fe897924a074f575f6eb756f5d89a6cc47232276dd83171f54f505cb28ae34c7f3bac3ab649933f4dcd6bccf7430d37b0e53abef0eb599f79be237cad6b19c748e0e503b9a7146f16c716bda7c4e2d5ee84a595f6abae029a2dc1cd5992439d603c92c18446b6ae34fa4e101c6af92054a5bab740f509b8915bd84ef86b86ccaeffc46d358db737e065cc7cd28db50c720a406fcb53c91fd7ea37d8304af1e036256397b5241a540dd1658e00873bd7b54b5d62158aad92185de760a974c4d0de3556823f2d269ecf7af9e209bc798b1ab53aea094b02df91a373b297b7565973ef52fdb0cf868439db8e9b88c6ced779c809fb7bc4d2946d1318ebe3679154ff510a5df173a47e9b9296dc96f3f43d219e4dacb90cdca8ff4cf75ecc60b43a79afdc6294bdb534b24da6533e8e54ebb1a34a0e7bdbf6dd4c79ffe9eadc3a002e2a53f0582953da8861b8cba715f4a3042d4e863d88a178b003b9a05b60b6b5feff3f0b42aaa814e79890b3f664e045e52c8bf873942e14543bb39e49f1007053da237f26b7bdc4b0ae7530913b0a629bc9838150276a3f40edaf75b481d3d1becddf14c39bffaf7fff2c1f8e828d32eeb43bf65242c7ad64b1d8a3e81112eec2f36bf5fe34a8bd43726c976ffaa0f41361a32cdcf5feb35706ebf6effa281d93d5dfb7f925c7c24e96a5b79036ba3e8db7f52cbf35aaf0f50d4c2308d03a6bdd58445f95fd4a347069cf26913c6f5379933a47a3211776fbaec01f6b2e212de4379cd7d367fac28897a821e856c578a2c65517fe7d867dc8df702edf3519a79107c885612342961300b32f68768f5cd616c862ae242b4e513ff711f2052809b4faddb982312ab95654bc6669623f6cb9136dd9d6555ad877fc065c405fbb1f58a5c393a4438f8a74534ccf6184f50b37207e7521ddb5e145570836d16f3ab27e318804d47bd4b33c140a3029516ce5162966723f903069446b8a8f544cb42d86528d2538d7eb32c435040337306919d7b9028e9d8de4d03a091bb7f915dedc0dc8ce8e6da8aeb0be210aeaae459b28d28f282f1a481b821f0d6a3fbd7f1c518b022b48992ac155aa4516021e942c8395241ab6719e64b7783ac2bb5e3e9d3eac0ef794281c42a64db73585e6dfe5902878232595b489f8d17c3dce3e26cd61288f003f110f9525dd6fc65a8c1bfdee3d7cfef891bd546e90e0c24698c50aafe8ede905257bc8b8f7cacffa90ee2b9b618afdae3de3bbd74a5c8a572df9c7ac8090a4efcf3d0a06b648669bc1d4bf17fdc7d1bf3425881c5059c87a30f5b79c92940f499005ef60d31f41143d919048fadbb7b7bda08d98031cd04fda6567cb8f671d76538d9da8345c04ba130652c4d6e9c95bb52e72d8059a7d99497f08c9fcaf03e7776523dd491bcfed0d6ff69d083e7f09d8469a4be78d8bc508dfc02f1e45f4e3ed9f5a25d41dd290c1c32a3a2847ebffa3ac300576aae59f24a954a6e57d3f4f84d8151b4076ac82665a0ea0c86a7f9115dc28a3ce34d6775b465611d07af445be5fa05a897850edef3bbc81cef43ac80df37c378aab2f8e28d8120694ca66289c50d963106beb146e95490734d749bbb2c49525945efbf670aba9ff7487ffe7972d5c422738ffd0c22aa722dcfa728a5866b30c368420e7a01ad326c7119d2fbbfa77dd80adca8f2360b387c386faa62f12524f322d5ee15cbf1d9ae1238eec586b28293d353c35bf0a914b19b22fd600837945b46ef80f20b04de7716e5d62cb85e48cc33c6396951bc7149a35d5e040982ea2675273cdbacf1822d6f01a8462a4b3f1a1cb44a7059d49fb732e9593b872563d9deefefb327a748d8098c3d82e2fe4ac46f213919d3dc2ad12ec87164c2eb1b78f133bba3e513d8f911181621a7cfd138423b17556d9263f625b618c74ee90afe891b73098460fb427683c9172d137caa977ad6ebab93f14b28613f60be6871b9bab80fe12e8a75b231b68bb37d925b942f3551a4f308cf5c8008c72e9ea3f3e21e187da1ad73cbd7a14c538c46b5621add6246f1d7980c9ff363da112d39469ab8bf67ecc087ab650d9be309aadf139584ba5f0ce082cae5bf51c77c21eaf8973c3218878f9c134a9910ce2dedfc65b833f587d03c065c024942f5e2b8f48ae80b6c11638ee45d25c91099d07121126000759ab5c4cfb72eb4b8decab6abbec1f4fa5ac32300cb3f6c64c82c9b037c4f188bf9da701fe84c1ab53092eced7c9aee69ca82caa6247a4e43c3c6542f20eb77568f8055b196850aac10eb7553c75e340675957a36ce9088c7791973ad33edb88dec96f8acbdeb949eddace60acadd9d3e3c1e65b65d42e22d0ca4cecac1ef63604ffe7a6bda658ad6baf8d09321ea117560a836fd44370793653fa0a8e6d084b33c1e01d4b9bf96c6e28d841f48c8d9590d8a99d06af7639a86c3609cc35b32e9e98454dc73ad034690214f75da4d63aa47e5c3168fa9e73e4d3d474efeabb5675b77a194a076becd0c5795776839697562f7fa54977075cf0764377eecda40f4c7f0c82124ac479244264418c11792d33294cb4fffdf9dd25a5b101a7e67eef825ff80754d1419df5df648222f8de777ccc37e835435fe0c378f8bd5e34c2e76977f60ed17ff7497803850d469d59469dca2253366a28c60c769ee5e07e5e450696577305859cb65edcf9cb69c949ae49e41e8ac16adc95080e97582a09a963d6b2749b0b41737f041cf529187aaeceea4e566add29d1c4a6a771c7254c7934abade89317a1b32aaa628356c72f643fc5379cf1eedbd0060309e65d8f30b1305d7cfb1bae60ea264260c48f3fd14e595b504ab4454e63462bb3430b2b6fe751ced4646570ef0c0dc8dcc6077b2ebf738e96cee8fe194455939c8802698dea9e983bc251eb5015dfe1cc802a2e525f0d990185b4c64954a94f0d6a4fe2abeecee27c4eba28a63be77e83a217b89883f4e5cab1cf4b04a5c07857fceb6276a3b32bff1f4f2850caea84f468ccd1b13946c011ebefb88d17a70d16591d7d990973475f322ffe86c70cdb66082a8f8d91e21dcd126c1dde4ccacc0a9e25e7cd7350d0823668c646f56029eec5a64cc66591b4494ad631201c64dd1cdb32d9ee74c4cb1a6ef5a13074203c4341a5d3107a29752eb3ce772a3c995938362f224264786189796e43a08d4f19ee309114392ab5deb6bb2cd0b28540d06c4e31ad73867e804484f7ed3538f0d5017206b0bd78755edf80f3421c74ff08564d39c702a6ae3671706cef5359580002ccb9ad48bf5ce5a07f44315b88a002420e084709b89ca25bc6f71b61f445f52de0503678e06f60e82d7896b8aa9131151df5d81c56572c10fd3d19cf16a319205a9014058a006ff6f64593f40e71b3d08f076845b98404128286b3731882fb1ff36ed24424b4cc18766986e8fd411bb389e9af81b49177d96a9b613f579da5a2e42d30ea0239b405e58d0deaf7634171d0499f4bf8aabb42c50a089b7484c4adfd3eb036c816b9c876601241f910c841d17b29d6f28862e155a0052f9c3640f3e85bd383ef54d997fd7c067126f40188a9c453a17dc2d35050738788c014bf9aeb45bdb0fc040a3dae9087843b7a7d61f736710c7246843faf1b159429555db921d3b6afbab29b487f99e22ad23a223ed953ef0558d3eaf690c2feeb587b53e85cd4f7460cc94dceef788abef63fc43585fae5c1ba451989b98b955b923ef28772d5de73791519800929ae90c966d2108f77be48d537f7f976bf526d422a3825f79099425dbdcc692bac4312a1816c573e6585d1c7848983d0f778a4cef8fa42351eb600d2abcfabbcf4fe884c524182755343a65ed4649e016fe55b38c5c4ad656a0fef36c5ff6d7cd2364a866a15f87e6d8efa4ee4ae17704f22280e3dd7021c13b0790cd53175a165355fc7fc818fc8fb947d281a81dfa6950a5e0946e667ff1c8408fc9b145900d8e71a91f9da8d2621627bc39e0cce4a714ed35affa7b0d602ff5f74b2e4aa4c165e1179b0413493bba42354bb21f021237f4fa51086f6f1a4b8926c68f2686efde9f3189a6eb7b0628ee7136c45bfe19113c5ecf8793b2baf64073cc4001c04ed6224adcd6dbe6739f80ad25150602f845d82fddb2b4a70477eaf63681b656fd07a86ce20c1d5077d3702ac7d8db563bee75d5b1b4fc18445232d29f4c477b0aaa668d8f36699b31331e8d7c485b8d6f2cc753d24cda807660b9305def828e7f88d8052c16d69b1a183e5592d7233224cabe76f357177124550ccdd8caad9e3a494a6db74f6ffa6acefbd37e8faafdd31d69716b3ee5922fd82a20343c8fd8f52cc1a0a7bbaf68f160bf007298c0a6724271cab4d800a7d9d074b12260a7bcd7fe613308b2559ec10def2753129826c019ad891456a599f97dd0a8bc629410912ca781ed51c5e74de646f73e6feca16dc5c1dbf20834edd2bc2f50c19d613a8cb4c6406781f4e533b0aff13084f8df3555d0834cb3e24db0ff2f41d1d3f21e7bc81202f56ef7e6607d169c39c6df1d9538745e9fff829e09a0f910e9a5d315501efa46c12d4af8587fe660c95154cf1c23b56635217d77577c7f9be1ff52c514df03229ceede0233f5048e82025f8a63bc3fe857dd01ba2c5844137b3a410257f2f318fa766a3b8c03c1186b927b724fdee1150e662a832ca1d91fd44de3c5da86e0172b6eccbffa626e487033d445b1d301432ebe23b03d832312482878f6706a73ab41b1c0c0607c78d44ab949292fc5be0ff9594dada1fe7340a78502bf712290a24c4d39abe18e57f72d6f268823e8917c07462602b43a0b31c34f0fe7a3182465b849b07b8379d2b8c8cd5c2cff07f283e4502f8b3f75329e7a8748ff0560c28a3defd9e19d7d75b309343e1b34a0363b783064e1297c0f341bf588a9753df9d7d664b8cea83cf99cd1f7d157801188b792f96d480152ffda80398b36c1891f77dfbb39455e323846e4bc043785d86ba579b028858e153a808a8423dae771712cbddeec0e1a37a0c11bfe5f9d60028c0d54eaac1491ee9eb6adf9483b8386cdc02c9b3d92e4c5d87bc5ce1c8c88182077139432fc35f8bf5c382b7d33d833c50209cd004c49be28680932e6b79c745ad6d5247fd84e03fb78a6a2f8952c3d350b565a0edf93889065ca671984aeb44323dc9dc4ee64902bb1e00e12157c4db2f6cab8ce09acb961afa48a58446a678b19f6d9edd8e6f3880cd713dec1c5003fece8c9214518e2afb7fb2b59529c71c5a50c99352bff9432ef3a34da9d4cbc13105c45c100538fcf17a891668c889b91200e0934d5b7eb2f8c6fd60712742953c36ea6b1a4fc7e1403f71077c8cb0a58fd7fc94c9eb7b26ee44b4d123918e03e064263ee7651bca931f447eccd4d8ace1662ad79bdd80f25446c2a8f3e19b3fdf94620952f79511b0eaf5d3872f4b7e5038e0628ddb50440c12e5e4eb6d57c37ce56cfab5eafa6e7c65053783b618962d07d549146e595ae4761a3912d9d7cc97f76bacf0ace92aadeee7664d50c63241dd99d8ce02cfc7aacfdca5441671be9f28a8aa7c34bde965f7878db559201c6d78e9d0f11aeff961fc4f6cbf89124e0e792e8cc7af62b130b8aa6b28ef1b7242dc651413d8b622cce56bf39c5b483074add091d6a45bd8a63576e065d8a01b9762344f1dae45dac3bfbb0ecb39ce206e75151d819dbbfb7bd95dfa8e81e2d1c0959abfb74e59683a9739ee78f2332085f52b342e1c2649db0202b9a721d52dc0ce3bfc6028e78de5182b60f5cc9a80ee7f01076f4816c3d5ffeb1874d58136d07b260f069c5e0b064df19884e50f9d55f5af31b65d57d26ae78d816408c51ad4c5cd16a83cd333594f3955799bb2e9ae6fe1faa1c927a9a7d68c544d285d177aecd253c67290b5b5c1858af9c9305b21fc1ce5d8b49b61f0bc22f746cd6a537a39970dce09c2ffaed8ce20d4b8105fd1c3bec1746e26057aec542b6e0f9aec5511fec1331aac9af4e9a70940b36963103e2e68bbf8bab41cf93434600c2b4749904c6109217e9167df1225c9e153e15e1b3f8a03b4c07b29b4e856c3258d73cd9978bef0a2fc48dc8c621ae6eca8ae14a42df29bd5b9f8b3aecf907bf2dd119f24b52a69486ea4a78286c219fa8706c488a3be95fc01fca255f76f266871f1c59d05290ccd6df0c72cce285549573cfaf0e94e58aef790c22f7d45ba34e570cf3177c396b190a9b3471b0acad51f7e9c97e6b51f44cb936b5121bce8d2689ab7a15aa1b7d06e22038f27963deaf110c31b5fb2bffdbd0f4d17441142862412cc09344142a8c5a04ec6c14edc9b22db758d23187d18518edd0a131bcb7c8f9008728912dc31ca149b2a01363dc9d9b9d842e8afc8158dff47a6f0be510bc6e84391de527e514a847aed0f6e96dabb954074a7693039c1bff2284d427538315c2df1397a69cb119463e9f1635a7c83599226e0527f20dcfadb087cfdb8da5d0f1d9114cd7d834ad5d210324ff6776dafe44853a9745436a24d2914a8b5afc9291aeebfa0ff7b918f71c2cbe58e1b4e14474bf21c2fc1439cc6bab3f95eafe7ef0b5872478ba1e7e59ccc4b13577844d288043c2914dbb368c8d9eb6c0583995736c7620fe39d65d72432578a8bab90839206a1ce2565d23e67c352527476f0f619fecb253c663bc273948c262b74b628855090a58c78f41d5452c49a57e133b8f87f3b04e1f4b0544efaf2a215b7fbb44e0bdc7bcfceff343c9ea2dcccbcf92708fb3a633d20e55c57b8fb2c58d63810d7fb3c148b4b79ba6e7cd167465e1dbd6473337cd890c01cb4d9f5d66ee7c99d38183f6df06fa0b6d0f8a413ffe189d06af350192e30fc8aa211641f0e0f9d2a76aec9906a19af17f27071194c75100e0f5edce561bafc3a55bcbb3452ad0b0c862d8e62c984879ce026817673d1dbc08bd82df6a691cc2cfb09f3c8ab8111322cbc366db71c3189ec557b4a978e1776442d10ed8433aa3e748858cc43901904f0f51a70d960b9a570406070df94a97b79721b9517f97ac09d9c5c57e27445e8fad05e96504d2695604955f8c65bc8fa8408cdb3e1014da7928cc9ba01649668c47f7c9b8889ba1402d384c659eea3e146f8c05c0887682a55b64ca3022c9cbeb208b4428578c84e181cb502650e5676f08b3d7f40704825c22c83cc4ecf660d437db95b2b6d9841cf5e182c0b5373aeaa47870379b2c1176e45710c4c074b7116d0ff12922fe2001",1]],"callback_url":"http://127.0.0.1:8080"} +"#; + + // Just dont crash + let payload: ComputeRequest = serde_json::from_str(json).unwrap(); + } +} diff --git a/crates/request/Cargo.toml b/crates/request/Cargo.toml new file mode 100644 index 0000000000..1a82c49bb5 --- /dev/null +++ b/crates/request/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "e3-request" +version = "0.1.0" +edition.workspace = true +license.workspace = true +description = "E3 - Enclave Ciphernode E3Request Handling Components" +repository = "https://github.com/gnosisguild/enclave/crates/request" + +[dependencies] +actix = { workspace = true } +e3-events = { workspace = true } +e3-data = { workspace = true} +anyhow = { workspace = true } +serde = { workspace = true } +e3-config = { workspace = true } +bincode = { workspace = true } +async-trait = { workspace = true } +tracing = { workspace = true } diff --git a/packages/ciphernode/e3_request/src/context.rs b/crates/request/src/context.rs similarity index 98% rename from packages/ciphernode/e3_request/src/context.rs rename to crates/request/src/context.rs index cfd5832c45..df8eb0792c 100644 --- a/packages/ciphernode/e3_request/src/context.rs +++ b/crates/request/src/context.rs @@ -2,10 +2,10 @@ use crate::{E3Extension, EventBuffer, HetrogenousMap, TypedKey}; use actix::Recipient; use anyhow::Result; use async_trait::async_trait; -use data::{ +use e3_data::{ Checkpoint, FromSnapshotWithParams, Repositories, RepositoriesFactory, Repository, Snapshot, }; -use events::{E3id, EnclaveEvent}; +use e3_events::{E3id, EnclaveEvent}; use serde::{Deserialize, Serialize}; use std::{collections::HashMap, sync::Arc}; diff --git a/packages/ciphernode/e3_request/src/hetrogenous_map.rs b/crates/request/src/hetrogenous_map.rs similarity index 100% rename from packages/ciphernode/e3_request/src/hetrogenous_map.rs rename to crates/request/src/hetrogenous_map.rs diff --git a/packages/ciphernode/e3_request/src/lib.rs b/crates/request/src/lib.rs similarity index 100% rename from packages/ciphernode/e3_request/src/lib.rs rename to crates/request/src/lib.rs diff --git a/packages/ciphernode/e3_request/src/meta.rs b/crates/request/src/meta.rs similarity index 86% rename from packages/ciphernode/e3_request/src/meta.rs rename to crates/request/src/meta.rs index 48d53c5ced..a6ac3d19c3 100644 --- a/packages/ciphernode/e3_request/src/meta.rs +++ b/crates/request/src/meta.rs @@ -1,8 +1,8 @@ use crate::{E3Context, E3ContextSnapshot, E3Extension, MetaRepositoryFactory, TypedKey}; use anyhow::*; use async_trait::async_trait; -use data::RepositoriesFactory; -use events::{E3Requested, EnclaveEvent, Seed}; +use e3_data::RepositoriesFactory; +use e3_events::{E3Requested, EnclaveEvent, Seed}; pub const META_KEY: TypedKey = TypedKey::new("meta"); @@ -10,7 +10,6 @@ pub const META_KEY: TypedKey = TypedKey::new("meta"); pub struct E3Meta { pub threshold_m: usize, pub seed: Seed, - pub src_chain_id: u64, } pub struct E3MetaExtension; @@ -30,17 +29,12 @@ impl E3Extension for E3MetaExtension { let E3Requested { threshold_m, seed, - src_chain_id, e3_id, .. } = data.clone(); // Meta doesn't implement Checkpoint so we are going to store it manually - let meta = E3Meta { - threshold_m, - seed, - src_chain_id, - }; + let meta = E3Meta { threshold_m, seed }; ctx.repositories().meta(&e3_id).write(&meta); let _ = ctx.set_dependency(META_KEY, meta); } diff --git a/packages/ciphernode/e3_request/src/repo.rs b/crates/request/src/repo.rs similarity index 91% rename from packages/ciphernode/e3_request/src/repo.rs rename to crates/request/src/repo.rs index 21f781f4de..f3a8c8c3ad 100644 --- a/packages/ciphernode/e3_request/src/repo.rs +++ b/crates/request/src/repo.rs @@ -1,6 +1,6 @@ -use config::StoreKeys; -use data::{Repositories, Repository}; -use events::E3id; +use e3_config::StoreKeys; +use e3_data::{Repositories, Repository}; +use e3_events::E3id; use crate::{E3ContextSnapshot, E3Meta, E3RouterSnapshot}; diff --git a/packages/ciphernode/e3_request/src/router.rs b/crates/request/src/router.rs similarity index 97% rename from packages/ciphernode/e3_request/src/router.rs rename to crates/request/src/router.rs index 7074461fce..8f3c7cf200 100644 --- a/packages/ciphernode/e3_request/src/router.rs +++ b/crates/request/src/router.rs @@ -8,15 +8,15 @@ use actix::AsyncContext; use actix::{Actor, Addr, Context, Handler}; use anyhow::*; use async_trait::async_trait; -use data::Checkpoint; -use data::DataStore; -use data::FromSnapshotWithParams; -use data::RepositoriesFactory; -use data::Repository; -use data::Snapshot; -use events::E3RequestComplete; -use events::Shutdown; -use events::{E3id, EnclaveEvent, EventBus, Subscribe}; +use e3_data::Checkpoint; +use e3_data::DataStore; +use e3_data::FromSnapshotWithParams; +use e3_data::RepositoriesFactory; +use e3_data::Repository; +use e3_data::Snapshot; +use e3_events::E3RequestComplete; +use e3_events::Shutdown; +use e3_events::{E3id, EnclaveEvent, EventBus, Subscribe}; use serde::Deserialize; use serde::Serialize; use std::collections::HashSet; diff --git a/crates/scripts/build_fixtures.sh b/crates/scripts/build_fixtures.sh new file mode 100755 index 0000000000..4f1bb9c3e8 --- /dev/null +++ b/crates/scripts/build_fixtures.sh @@ -0,0 +1,4 @@ + +pushd ./evm && ./scripts/build_fixtures.sh && popd +pushd ./evm-helpers && ./scripts/build_fixtures.sh && popd +pushd ./indexer && ./scripts/build_fixtures.sh && popd diff --git a/packages/ciphernode/scripts/launch.sh b/crates/scripts/launch.sh similarity index 100% rename from packages/ciphernode/scripts/launch.sh rename to crates/scripts/launch.sh diff --git a/crates/scripts/lint.sh b/crates/scripts/lint.sh new file mode 100755 index 0000000000..5636e5a946 --- /dev/null +++ b/crates/scripts/lint.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +set -e + +cargo fmt -- --check diff --git a/crates/scripts/test.sh b/crates/scripts/test.sh new file mode 100755 index 0000000000..46b830cdd3 --- /dev/null +++ b/crates/scripts/test.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +set -e + +./scripts/build_fixtures.sh + +cargo test -- $@ diff --git a/packages/ciphernode/scripts/test_encryptor.sh b/crates/scripts/test_encryptor.sh similarity index 100% rename from packages/ciphernode/scripts/test_encryptor.sh rename to crates/scripts/test_encryptor.sh diff --git a/crates/scripts/update_revs.sh b/crates/scripts/update_revs.sh new file mode 100755 index 0000000000..2b081cc264 --- /dev/null +++ b/crates/scripts/update_revs.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash + +# This script updates all cargo imports from our git monorepo. +# Some of the time we create user facing (mainly) cargo projects that need to depend on a specific branch or git revision to stay in sync. +# This script will go through the monorepo and update the rev key of any imports extracted as a cargo dependency. +GITHUB_REPO_URL="https://github.com/gnosisguild/enclave" +EXCLUDE_PATHS=( + "*/.enclave/caches/*" + "*/target/*" + "*/node_modules/*" + "*/risc0-ethereum/*" +) + +# Build exclude arguments +EXCLUDE_ARGS=() +for path in "${EXCLUDE_PATHS[@]}"; do + EXCLUDE_ARGS+=(-not -path "$path") +done +CURRENT_HASH=$(git rev-parse HEAD) +echo "Current git hash: $CURRENT_HASH" +echo "Target repository: $GITHUB_REPO_URL" +echo +# Find and display all matches +echo "Found the following dependencies to update:" +find . -name "Cargo.toml" "${EXCLUDE_ARGS[@]}" -exec grep -l "git = \"$GITHUB_REPO_URL" {} \; | while read -r file; do + echo "File: $file" + grep -n "git = \"$GITHUB_REPO_URL\|rev = \"" "$file" | grep -E "(git = \"$GITHUB_REPO_URL|rev = \")" | while read -r line; do + echo " $line" + done + echo +done +echo "Press any key to continue with the update, or Ctrl+C to cancel..." +read -n 1 -s +echo "Updating dependencies..." +# Perform the substitution +find . -name "Cargo.toml" "${EXCLUDE_ARGS[@]}" -exec sed -i "s|rev = \"[^\"]*\"|rev = \"$CURRENT_HASH\"|g" {} \; +echo "Done!" diff --git a/crates/sdk/Cargo.toml b/crates/sdk/Cargo.toml new file mode 100644 index 0000000000..6d4b0ec04e --- /dev/null +++ b/crates/sdk/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "e3-sdk" +version = "0.1.0" +edition.workspace = true +license.workspace = true +description = "E3 - Enclave SDK" +repository = "https://github.com/gnosisguild/enclave/crates/sdk" + +[dependencies] +e3-evm-helpers.workspace = true +e3-bfv-helpers.workspace = true +e3-indexer.workspace = true diff --git a/crates/sdk/src/lib.rs b/crates/sdk/src/lib.rs new file mode 100644 index 0000000000..345448cd2e --- /dev/null +++ b/crates/sdk/src/lib.rs @@ -0,0 +1,3 @@ +pub use e3_bfv_helpers as bfv_helpers; +pub use e3_evm_helpers as evm_helpers; +pub use e3_indexer as indexer; diff --git a/packages/ciphernode/sortition/Cargo.toml b/crates/sortition/Cargo.toml similarity index 55% rename from packages/ciphernode/sortition/Cargo.toml rename to crates/sortition/Cargo.toml index 2fbbde8261..8283582123 100644 --- a/packages/ciphernode/sortition/Cargo.toml +++ b/crates/sortition/Cargo.toml @@ -1,10 +1,10 @@ [package] -name = "sortition" -version.workspace = true +name = "e3-sortition" +version = "0.1.0" edition.workspace = true -description = ": coordinates the encryption and decryption of enclave computations" -repository = "https://github.com/gnosisguild/enclave/packages/ciphernode" -path = "src/lib.rs" +license.workspace = true +description = "E3 - Enclave Ciphernode Sortition Components" +repository = "https://github.com/gnosisguild/enclave/crates/sortition" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html @@ -13,9 +13,9 @@ actix = { workspace = true } alloy = { workspace = true } anyhow = { workspace = true } async-trait = { workspace = true } -config = { workspace = true } -data = { workspace = true } -events = { workspace = true } +e3-config = { workspace = true } +e3-data = { workspace = true } +e3-events = { workspace = true } num = { workspace = true } rand = { workspace = true } serde = { workspace = true } diff --git a/packages/ciphernode/sortition/src/ciphernode_selector.rs b/crates/sortition/src/ciphernode_selector.rs similarity index 94% rename from packages/ciphernode/sortition/src/ciphernode_selector.rs rename to crates/sortition/src/ciphernode_selector.rs index b0f2a53700..d4c94a26f1 100644 --- a/packages/ciphernode/sortition/src/ciphernode_selector.rs +++ b/crates/sortition/src/ciphernode_selector.rs @@ -2,7 +2,7 @@ use crate::{GetHasNode, Sortition}; /// CiphernodeSelector is an actor that determines if a ciphernode is part of a committee and if so /// forwards a CiphernodeSelected event to the event bus use actix::prelude::*; -use events::{CiphernodeSelected, E3Requested, EnclaveEvent, EventBus, Shutdown, Subscribe}; +use e3_events::{CiphernodeSelected, E3Requested, EnclaveEvent, EventBus, Shutdown, Subscribe}; use tracing::info; pub struct CiphernodeSelector { @@ -60,6 +60,7 @@ impl Handler for CiphernodeSelector { let address = self.address.clone(); let sortition = self.sortition.clone(); let bus = self.bus.clone(); + let chain_id = data.e3_id.chain_id(); Box::pin(async move { let seed = data.seed; @@ -67,6 +68,7 @@ impl Handler for CiphernodeSelector { if let Ok(is_selected) = sortition .send(GetHasNode { + chain_id, seed, address: address.clone(), size, diff --git a/packages/ciphernode/sortition/src/distance.rs b/crates/sortition/src/distance.rs similarity index 100% rename from packages/ciphernode/sortition/src/distance.rs rename to crates/sortition/src/distance.rs diff --git a/packages/ciphernode/sortition/src/index.rs b/crates/sortition/src/index.rs similarity index 96% rename from packages/ciphernode/sortition/src/index.rs rename to crates/sortition/src/index.rs index 3c2bcf0e20..b2fd3657dc 100644 --- a/packages/ciphernode/sortition/src/index.rs +++ b/crates/sortition/src/index.rs @@ -15,7 +15,7 @@ impl IndexSortition { } } - fn get_committee(&mut self) -> Vec { + fn _get_committee(&mut self) -> Vec { // Initialize a vector with indices of nodes as elements let mut leaf_indices: Vec = (0..self.num_nodes).collect(); // Initialize an empty vector to store the committee diff --git a/packages/ciphernode/sortition/src/lib.rs b/crates/sortition/src/lib.rs similarity index 66% rename from packages/ciphernode/sortition/src/lib.rs rename to crates/sortition/src/lib.rs index 7021bb9fbb..52e6cb4e4e 100644 --- a/packages/ciphernode/sortition/src/lib.rs +++ b/crates/sortition/src/lib.rs @@ -1,7 +1,3 @@ -#![crate_name = "sortition"] -#![crate_type = "lib"] -// #![warn(missing_docs, unused_imports)] - mod ciphernode_selector; mod distance; mod index; diff --git a/crates/sortition/src/repo.rs b/crates/sortition/src/repo.rs new file mode 100644 index 0000000000..a9629356ea --- /dev/null +++ b/crates/sortition/src/repo.rs @@ -0,0 +1,16 @@ +use std::collections::HashMap; + +use e3_config::StoreKeys; +use e3_data::{Repositories, Repository}; + +use crate::SortitionModule; + +pub trait SortitionRepositoryFactory { + fn sortition(&self) -> Repository>; +} + +impl SortitionRepositoryFactory for Repositories { + fn sortition(&self) -> Repository> { + Repository::new(self.store.scope(StoreKeys::sortition())) + } +} diff --git a/packages/ciphernode/sortition/src/sortition.rs b/crates/sortition/src/sortition.rs similarity index 70% rename from packages/ciphernode/sortition/src/sortition.rs rename to crates/sortition/src/sortition.rs index afe1ff908f..6e5e85cabf 100644 --- a/packages/ciphernode/sortition/src/sortition.rs +++ b/crates/sortition/src/sortition.rs @@ -2,12 +2,12 @@ use crate::DistanceSortition; use actix::prelude::*; use alloy::primitives::Address; use anyhow::{anyhow, Result}; -use data::{AutoPersist, Persistable, Repository}; -use events::{ +use e3_data::{AutoPersist, Persistable, Repository}; +use e3_events::{ BusError, CiphernodeAdded, CiphernodeRemoved, EnclaveErrorType, EnclaveEvent, EventBus, Seed, Subscribe, }; -use std::collections::HashSet; +use std::collections::{HashMap, HashSet}; use tracing::{info, instrument, trace}; #[derive(Message, Clone, Debug, PartialEq, Eq)] @@ -16,6 +16,7 @@ pub struct GetHasNode { pub seed: Seed, pub address: String, pub size: usize, + pub chain_id: u64, } pub trait SortitionList { @@ -83,17 +84,19 @@ impl SortitionList for SortitionModule { #[derive(Message)] #[rtype(result = "Vec")] -pub struct GetNodes; +pub struct GetNodes { + pub chain_id: u64, +} pub struct Sortition { - list: Persistable, + list: Persistable>, bus: Addr>, } #[derive(Debug)] pub struct SortitionParams { bus: Addr>, - list: Persistable, + list: Persistable>, } impl Sortition { @@ -107,9 +110,9 @@ impl Sortition { #[instrument(name = "sortition", skip_all)] pub async fn attach( bus: &Addr>, - store: Repository, + store: Repository>, ) -> Result> { - let list = store.load_or_default(SortitionModule::default()).await?; + let list = store.load_or_default(HashMap::new()).await?; let addr = Sortition::new(SortitionParams { bus: bus.clone(), list, @@ -119,8 +122,14 @@ impl Sortition { Ok(addr) } - pub fn get_nodes(&self) -> Vec { - self.list.get().unwrap().nodes.clone().into_iter().collect() + pub fn get_nodes(&self, chain_id: u64) -> Result> { + let list_by_chain_id = self.list.get().ok_or(anyhow!( + "Could not get sortition's list cache. This should not happen." + ))?; + let list = list_by_chain_id + .get(&chain_id) + .ok_or(anyhow!("No list found for chain_id {}", chain_id))?; + Ok(list.nodes.clone().into_iter().collect()) } } @@ -145,9 +154,13 @@ impl Handler for Sortition { #[instrument(name = "sortition", skip_all)] fn handle(&mut self, msg: CiphernodeAdded, _ctx: &mut Self::Context) -> Self::Result { trace!("Adding node: {}", msg.address); - match self.list.try_mutate(|mut list| { - list.add(msg.address); - Ok(list) + match self.list.try_mutate(|mut list_map| { + list_map + .entry(msg.chain_id) + .or_insert_with(|| SortitionModule::default()) + .add(msg.address); + + Ok(list_map) }) { Err(err) => self.bus.err(EnclaveErrorType::Sortition, err), _ => (), @@ -161,9 +174,14 @@ impl Handler for Sortition { #[instrument(name = "sortition", skip_all)] fn handle(&mut self, msg: CiphernodeRemoved, _ctx: &mut Self::Context) -> Self::Result { info!("Removing node: {}", msg.address); - match self.list.try_mutate(|mut list| { - list.remove(msg.address); - Ok(list) + match self.list.try_mutate(|mut list_map| { + list_map + .get_mut(&msg.chain_id) + .ok_or(anyhow!( + "Cannot remove a node from list that does not exist. It appears that the list for chain_id '{}' has not yet been created.", &msg.chain_id + ))? + .remove(msg.address); + Ok(list_map) }) { Err(err) => self.bus.err(EnclaveErrorType::Sortition, err), _ => (), @@ -177,7 +195,13 @@ impl Handler for Sortition { #[instrument(name = "sortition", skip_all)] fn handle(&mut self, msg: GetHasNode, _ctx: &mut Self::Context) -> Self::Result { self.list - .try_with(|list| list.contains(msg.seed, msg.size, msg.address)) + .try_with(|list_map| { + if let Some(entry) = list_map.get(&msg.chain_id) { + return entry.contains(msg.seed, msg.size, msg.address); + } + + Ok(false) + }) .unwrap_or_else(|err| { self.bus.err(EnclaveErrorType::Sortition, err); false @@ -188,7 +212,7 @@ impl Handler for Sortition { impl Handler for Sortition { type Result = Vec; - fn handle(&mut self, _msg: GetNodes, _ctx: &mut Self::Context) -> Self::Result { - self.get_nodes() + fn handle(&mut self, msg: GetNodes, _ctx: &mut Self::Context) -> Self::Result { + self.get_nodes(msg.chain_id).unwrap_or(vec![]) } } diff --git a/crates/support-scripts/Cargo.toml b/crates/support-scripts/Cargo.toml new file mode 100644 index 0000000000..0871d64d72 --- /dev/null +++ b/crates/support-scripts/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "e3-support-scripts" +version.workspace = true +edition.workspace = true +license.workspace = true +description.workspace = true +repository.workspace = true + +[dependencies] +anyhow.workspace = true +tokio.workspace = true +duct.workspace = true +async-trait.workspace = true +e3-config.workspace = true diff --git a/crates/support-scripts/README.md b/crates/support-scripts/README.md new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/crates/support-scripts/README.md @@ -0,0 +1 @@ + diff --git a/crates/support-scripts/ctl/compile b/crates/support-scripts/ctl/compile new file mode 100755 index 0000000000..748542f656 --- /dev/null +++ b/crates/support-scripts/ctl/compile @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +"$SCRIPT_DIR/container" ./scripts/container/build.sh diff --git a/crates/support-scripts/ctl/container b/crates/support-scripts/ctl/container new file mode 100755 index 0000000000..39afba04e7 --- /dev/null +++ b/crates/support-scripts/ctl/container @@ -0,0 +1,66 @@ +#!/usr/bin/env bash + +GIT_SHA=$(enclave rev) +CONTAINER_NAME="e3-support.1" +IMAGE="ghcr.io/gnosisguild/e3-support:$GIT_SHA" +CACHE_PREFIX="e3-support" + +# Check if the image exists locally or remotely if not bail +# Every time we push we build support so every build of enclave should have support built too. +# This solves the problem where a person will be using the cli with a specific `enclave rev` but our latest +# support scripts have changed which will break the support behaviour for the user. +# The user can then upgrade their cli once they are ready and then the support image will match their version +if ! docker image inspect "$IMAGE" >/dev/null 2>&1 && ! docker manifest inspect "$IMAGE" >/dev/null 2>&1; then + echo "Support scripts not found for git sha \"$GIT_SHA\" Please recompile the support scripts for this version of the enclave cli within the source repository" + exit 1 +fi + +# Function to cleanup +cleanup() { + echo "Stopping container and processes..." + # Try to gracefully stop the container first + docker exec "$CONTAINER_NAME" pkill -SIGTERM e3-support-app 2>/dev/null || true + sleep 2 + # Force stop if still running + docker exec "$CONTAINER_NAME" pkill -SIGKILL e3-support-app 2>/dev/null || true + docker stop "$CONTAINER_NAME" 2>/dev/null || true +} + +# Set trap for signals +trap cleanup EXIT INT TERM + +mkdir -p "$(pwd)/.enclave/caches"/{target,registry,git,risc0-cache,risc0-circuits} +chmod -R 777 "$(pwd)/.enclave/caches" + +if [ -t 0 ]; then + TTY_FLAGS="-it" +else + TTY_FLAGS="" +fi + +if docker ps -q -f name="$CONTAINER_NAME" | grep -q .; then + echo "Running exec $IMAGE..." + docker exec $TTY_FLAGS "$CONTAINER_NAME" bash -c "$*" +else + echo "Running start $IMAGE..." + # --network=host does not work on macos for allowing the container to access + # the local machine. `--add-host...` is adding host.local to the hosts file + # in the docker container we can then replace localhost and 127.0.0.1 + # from the input callback url so calls redirect to gateway. + # This should in theory be crossplatform + # However on linux the user must allow incoming connections from Docker's bridge network 172.17.0.0/16 through their firewall. + docker run $TTY_FLAGS --rm \ + --name "$CONTAINER_NAME" \ + --platform linux/amd64 \ + --add-host=host.local:host-gateway \ + -p 13151:13151 \ + -v "$(pwd)/contracts:/app/contracts" \ + -v "$(pwd)/tests:/app/tests" \ + -v "$(pwd)/.enclave/caches/target:/app/target" \ + -v "$(pwd)/.enclave/caches/registry:/home/devuser/.cargo/registry" \ + -v "$(pwd)/.enclave/caches/git:/home/devuser/.cargo/git" \ + -v "$(pwd)/.enclave/caches/risc0-cache:/home/devuser/.risc0/cache" \ + -v "$(pwd)/.enclave/caches/risc0-circuits:/home/devuser/.risc0/circuits" \ + -v "${CACHE_PREFIX}-cargo-cache:/usr/local/cargo" \ + "$IMAGE" bash -c "$*" +fi diff --git a/crates/support-scripts/ctl/shell b/crates/support-scripts/ctl/shell new file mode 100755 index 0000000000..42a16f0922 --- /dev/null +++ b/crates/support-scripts/ctl/shell @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +"$SCRIPT_DIR/container" bash diff --git a/crates/support-scripts/ctl/start b/crates/support-scripts/ctl/start new file mode 100755 index 0000000000..1e037ceba9 --- /dev/null +++ b/crates/support-scripts/ctl/start @@ -0,0 +1,42 @@ +#!/usr/bin/env bash + +# Clear any existing environment variables +unset API_KEY API_URL RISC0_DEV_MODE + +# Parse command line arguments +while [[ $# -gt 0 ]]; do + case $1 in + --api-key) + API_KEY="$2" + shift 2 + ;; + --api-url) + API_URL="$2" + shift 2 + ;; + --risc0-dev-mode) + RISC0_DEV_MODE="$2" + shift 2 + ;; + *) + echo "Unknown argument: $1" + exit 1 + ;; + esac +done + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +CONTAINER_ARGS=("./scripts/container/start.sh") + +if [[ -n "$RISC0_DEV_MODE" ]]; then + CONTAINER_ARGS+=("--risc0-dev-mode" "$RISC0_DEV_MODE") +fi + +if [[ -n "$API_KEY" && -n "$API_URL" ]]; then + CONTAINER_ARGS+=("--api-key" "$API_KEY" "--api-url" "$API_URL") +elif [[ -n "$API_KEY" || -n "$API_URL" ]]; then + echo "Error: Both --api-key and --api-url must be provided together, or neither" + exit 1 +fi + +exec "$SCRIPT_DIR/container" "${CONTAINER_ARGS[@]}" diff --git a/crates/support-scripts/dev/Cargo.lock b/crates/support-scripts/dev/Cargo.lock new file mode 100644 index 0000000000..eb401bfa9e --- /dev/null +++ b/crates/support-scripts/dev/Cargo.lock @@ -0,0 +1,2729 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "actix-codec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f7b0a21988c1bf877cf4759ef5ddaac04c1c9fe808c9142ecb78ba97d97a28a" +dependencies = [ + "bitflags", + "bytes", + "futures-core", + "futures-sink", + "memchr", + "pin-project-lite", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "actix-http" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44dfe5c9e0004c623edc65391dfd51daa201e7e30ebd9c9bedf873048ec32bc2" +dependencies = [ + "actix-codec", + "actix-rt", + "actix-service", + "actix-utils", + "base64", + "bitflags", + "brotli", + "bytes", + "bytestring", + "derive_more", + "encoding_rs", + "flate2", + "foldhash", + "futures-core", + "h2 0.3.26", + "http 0.2.12", + "httparse", + "httpdate", + "itoa", + "language-tags", + "local-channel", + "mime", + "percent-encoding", + "pin-project-lite", + "rand 0.9.1", + "sha1", + "smallvec", + "tokio", + "tokio-util", + "tracing", + "zstd", +] + +[[package]] +name = "actix-macros" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" +dependencies = [ + "quote", + "syn 2.0.104", +] + +[[package]] +name = "actix-router" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13d324164c51f63867b57e73ba5936ea151b8a41a1d23d1031eeb9f70d0236f8" +dependencies = [ + "bytestring", + "cfg-if", + "http 0.2.12", + "regex", + "regex-lite", + "serde", + "tracing", +] + +[[package]] +name = "actix-rt" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24eda4e2a6e042aa4e55ac438a2ae052d3b5da0ecf83d7411e1a368946925208" +dependencies = [ + "futures-core", + "tokio", +] + +[[package]] +name = "actix-server" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a65064ea4a457eaf07f2fba30b4c695bf43b721790e9530d26cb6f9019ff7502" +dependencies = [ + "actix-rt", + "actix-service", + "actix-utils", + "futures-core", + "futures-util", + "mio", + "socket2", + "tokio", + "tracing", +] + +[[package]] +name = "actix-service" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e46f36bf0e5af44bdc4bdb36fbbd421aa98c79a9bce724e1edeb3894e10dc7f" +dependencies = [ + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "actix-utils" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a1dcdff1466e3c2488e1cb5c36a71822750ad43839937f85d2f4d9f8b705d8" +dependencies = [ + "local-waker", + "pin-project-lite", +] + +[[package]] +name = "actix-web" +version = "4.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a597b77b5c6d6a1e1097fddde329a83665e25c5437c696a3a9a4aa514a614dea" +dependencies = [ + "actix-codec", + "actix-http", + "actix-macros", + "actix-router", + "actix-rt", + "actix-server", + "actix-service", + "actix-utils", + "actix-web-codegen", + "bytes", + "bytestring", + "cfg-if", + "cookie", + "derive_more", + "encoding_rs", + "foldhash", + "futures-core", + "futures-util", + "impl-more", + "itoa", + "language-tags", + "log", + "mime", + "once_cell", + "pin-project-lite", + "regex", + "regex-lite", + "serde", + "serde_json", + "serde_urlencoded", + "smallvec", + "socket2", + "time", + "tracing", + "url", +] + +[[package]] +name = "actix-web-codegen" +version = "4.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f591380e2e68490b5dfaf1dd1aa0ebe78d84ba7067078512b4ea6e4492d622b8" +dependencies = [ + "actix-router", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + +[[package]] +name = "ahash" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "anyhow" +version = "1.0.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" + +[[package]] +name = "ark-bn254" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", + "itertools", + "num-traits", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "digest", + "itertools", + "num-bigint", + "num-traits", + "paste", + "rustc_version", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive", + "ark-std", + "digest", + "num-bigint", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "backtrace" +version = "0.3.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets 0.52.6", +] + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bitflags" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "brotli" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9991eea70ea4f293524138648e41ee89b0b2b12ddef3b255effa43c8056e0e0d" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bumpalo" +version = "3.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" + +[[package]] +name = "bytes" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" + +[[package]] +name = "bytestring" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e465647ae23b2823b0753f50decb2d5a86d2bb2cac04788fafd1f80e45378e5f" +dependencies = [ + "bytes", +] + +[[package]] +name = "cc" +version = "1.2.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c1599538de2394445747c8cf7935946e3cc27e9625f889d979bfb2aaf569362" +dependencies = [ + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" + +[[package]] +name = "cookie" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" +dependencies = [ + "percent-encoding", + "time", + "version_check", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "deranged" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +dependencies = [ + "powerfmt", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_more" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", + "unicode-xid", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "e3-compute-provider" +version = "0.1.0" +source = "git+https://github.com/gnosisguild/enclave?rev=9e30ebad27cd31d58cdc0d4ff8609c2b2aa1557a#9e30ebad27cd31d58cdc0d4ff8609c2b2aa1557a" +dependencies = [ + "ark-bn254", + "ark-ff", + "hex", + "lean-imt", + "light-poseidon", + "num-bigint", + "num-traits", + "rayon", + "serde", + "sha3", +] + +[[package]] +name = "e3-program-server" +version = "0.1.0" +source = "git+https://github.com/gnosisguild/enclave?rev=9e30ebad27cd31d58cdc0d4ff8609c2b2aa1557a#9e30ebad27cd31d58cdc0d4ff8609c2b2aa1557a" +dependencies = [ + "actix-web", + "anyhow", + "e3-compute-provider", + "hex", + "reqwest", + "serde", + "serde_json", + "tokio", +] + +[[package]] +name = "e3-support-scripts-dev" +version = "0.1.0" +dependencies = [ + "anyhow", + "e3-program-server", + "tokio", +] + +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" +dependencies = [ + "libc", + "windows-sys 0.60.2", +] + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "flate2" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "pin-utils", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "h2" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "h2" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17da50a276f1e01e0ba6c029e47b7100754904ee8a278f886546e98575380785" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.3.1", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http 1.3.1", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http 1.3.1", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2 0.4.11", + "http 1.3.1", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" +dependencies = [ + "http 1.3.1", + "hyper", + "hyper-util", + "rustls", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f66d5bd4c6f02bf0542fad85d626775bab9258cf795a4256dcaf3161114d1df" +dependencies = [ + "base64", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http 1.3.1", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "system-configuration", + "tokio", + "tower-service", + "tracing", + "windows-registry", +] + +[[package]] +name = "icu_collections" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" + +[[package]] +name = "icu_properties" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "potential_utf", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" + +[[package]] +name = "icu_provider" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +dependencies = [ + "displaydoc", + "icu_locale_core", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "impl-more" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a5a9a0ff0086c7a148acb942baaabeadf9504d10400b5a05645853729b9cd2" + +[[package]] +name = "indexmap" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" +dependencies = [ + "equivalent", + "hashbrown 0.15.4", +] + +[[package]] +name = "io-uring" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b86e202f00093dcba4275d4636b93ef9dd75d025ae560d2521b45ea28ab49013" +dependencies = [ + "bitflags", + "cfg-if", + "libc", +] + +[[package]] +name = "ipnet" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + +[[package]] +name = "iri-string" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "jobserver" +version = "0.1.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" +dependencies = [ + "getrandom 0.3.3", + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "language-tags" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" + +[[package]] +name = "lean-imt" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa2acc6dee32b12409446a76b9c1877e5ba9afb36dfcbe96d0ddaf15ca08f18d" +dependencies = [ + "hashbrown 0.15.4", +] + +[[package]] +name = "libc" +version = "0.2.174" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" + +[[package]] +name = "light-poseidon" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c9a85a9752c549ceb7578064b4ed891179d20acd85f27318573b64d2d7ee7ee" +dependencies = [ + "ark-bn254", + "ark-ff", + "num-bigint", + "thiserror", +] + +[[package]] +name = "linux-raw-sys" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" + +[[package]] +name = "litemap" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" + +[[package]] +name = "local-channel" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6cbc85e69b8df4b8bb8b89ec634e7189099cea8927a276b7384ce5488e53ec8" +dependencies = [ + "futures-core", + "futures-sink", + "local-waker", +] + +[[package]] +name = "local-waker" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d873d7c67ce09b42110d801813efbc9364414e356be9935700d368351657487" + +[[package]] +name = "lock_api" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" + +[[package]] +name = "memchr" +version = "2.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", +] + +[[package]] +name = "mio" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" +dependencies = [ + "libc", + "log", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.59.0", +] + +[[package]] +name = "native-tls" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "object" +version = "0.36.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "openssl" +version = "0.10.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" +dependencies = [ + "bitflags", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "openssl-probe" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + +[[package]] +name = "openssl-sys" +version = "0.9.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "parking_lot" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.52.6", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" + +[[package]] +name = "potential_utf" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "proc-macro2" +version = "1.0.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" + +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.3", +] + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" +dependencies = [ + "bitflags", +] + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-lite" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53a49587ad06b26609c52e423de037e7f57f20d53535d66e08c695f347df952a" + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "reqwest" +version = "0.12.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "h2 0.4.11", + "http 1.3.1", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-tls", + "hyper-util", + "js-sys", + "log", + "mime", + "native-tls", + "percent-encoding", + "pin-project-lite", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-native-tls", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.16", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustls" +version = "0.23.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7160e3e10bf4535308537f3c4e1641468cd0e485175d6163087c0393c7d46643" +dependencies = [ + "once_cell", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pki-types" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +dependencies = [ + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4a72fe2bcf7a6ac6fd7d0b9e5cb68aeb7d4c0a0271730218b3e92d43b4eb435" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" + +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + +[[package]] +name = "schannel" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" + +[[package]] +name = "serde" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "serde_json" +version = "1.0.140" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest", + "keccak", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook-registry" +version = "1.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" +dependencies = [ + "libc", +] + +[[package]] +name = "slab" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "socket2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tempfile" +version = "3.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" +dependencies = [ + "fastrand", + "getrandom 0.3.3", + "once_cell", + "rustix", + "windows-sys 0.59.0", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "time" +version = "0.3.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" + +[[package]] +name = "time-macros" +version = "0.2.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinystr" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tokio" +version = "1.46.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc3a2344dafbe23a245241fe8b09735b521110d30fcefbbd5feb1797ca35d17" +dependencies = [ + "backtrace", + "bytes", + "io-uring", + "libc", + "mio", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "slab", + "socket2", + "tokio-macros", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-macros" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-http" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +dependencies = [ + "bitflags", + "bytes", + "futures-util", + "http 1.3.1", + "http-body", + "iri-string", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "tracing-core" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +dependencies = [ + "once_cell", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "typenum" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" + +[[package]] +name = "unicode-ident" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasi" +version = "0.14.2+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn 2.0.104", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +dependencies = [ + "cfg-if", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "web-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[package]] +name = "windows-registry" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" +dependencies = [ + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.2", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef" +dependencies = [ + "windows_aarch64_gnullvm 0.53.0", + "windows_aarch64_msvc 0.53.0", + "windows_i686_gnu 0.53.0", + "windows_i686_gnullvm 0.53.0", + "windows_i686_msvc 0.53.0", + "windows_x86_64_gnu 0.53.0", + "windows_x86_64_gnullvm 0.53.0", + "windows_x86_64_msvc 0.53.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" + +[[package]] +name = "wit-bindgen-rt" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags", +] + +[[package]] +name = "writeable" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" + +[[package]] +name = "yoke" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "zerotrie" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "zstd" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "7.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.15+zstd.1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/crates/support-scripts/dev/Cargo.toml b/crates/support-scripts/dev/Cargo.toml new file mode 100644 index 0000000000..835f632e02 --- /dev/null +++ b/crates/support-scripts/dev/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "e3-support-scripts-dev" +version = "0.1.0" +edition = "2024" + +[[bin]] +name = "e3-support-scripts-dev" +path = "src/main.rs" + +[dependencies] +e3-program-server = { git = "https://github.com/gnosisguild/enclave", rev = "2ca0aa5f47dd962add5d1d0f74900d9bceb957e5" } +tokio = { version = "1.38", features = ["full"] } +anyhow = "1.0.86" +e3-user-program = { path = "../../../program" } + diff --git a/crates/support-scripts/dev/compile b/crates/support-scripts/dev/compile new file mode 100755 index 0000000000..2d1790b485 --- /dev/null +++ b/crates/support-scripts/dev/compile @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +cargo build --bin e3-support-scripts-dev diff --git a/crates/support-scripts/dev/src/main.rs b/crates/support-scripts/dev/src/main.rs new file mode 100644 index 0000000000..c721ab0e56 --- /dev/null +++ b/crates/support-scripts/dev/src/main.rs @@ -0,0 +1,17 @@ +use anyhow::Result; +use e3_program_server::E3ProgramServer; +use e3_user_program::fhe_processor; + +#[tokio::main] +async fn main() -> Result<()> { + let server = E3ProgramServer::builder(|inputs| async move { + Ok(( + vec![3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5], + fhe_processor(&inputs), + )) + }) + .build(); + + server.run().await?; + Ok(()) +} diff --git a/crates/support-scripts/dev/start b/crates/support-scripts/dev/start new file mode 100755 index 0000000000..babd5eea76 --- /dev/null +++ b/crates/support-scripts/dev/start @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +cargo run --bin e3-support-scripts-dev diff --git a/crates/support-scripts/src/lib.rs b/crates/support-scripts/src/lib.rs new file mode 100644 index 0000000000..595f2599ca --- /dev/null +++ b/crates/support-scripts/src/lib.rs @@ -0,0 +1,38 @@ +mod program; +mod program_dev; +mod program_risc0; +mod traits; +mod utils; + +use anyhow::Result; +use e3_config::ProgramConfig; +use program::ProgramSupport; +use std::env; +use tokio::fs; +use traits::ProgramSupportApi; +use utils::{ensure_script_exists, run_bash_script}; + +pub async fn program_compile(program_config: ProgramConfig, is_dev: Option) -> Result<()> { + ProgramSupport::new(program_config, is_dev).compile().await +} + +pub async fn program_start(program_config: ProgramConfig, is_dev: Option) -> Result<()> { + ProgramSupport::new(program_config, is_dev).start().await +} + +/// Open up a shell in the docker container +pub async fn program_shell() -> Result<()> { + let cwd = env::current_dir()?; + let script = cwd.join(".enclave/support/ctl/shell"); + ensure_script_exists(&script).await?; + run_bash_script(&cwd, &script, &[]).await?; + Ok(()) +} + +/// Purge all build caches from support +pub async fn program_cache_purge() -> Result<()> { + let cwd = env::current_dir()?; + let caches = cwd.join(".enclave/caches"); + fs::remove_dir_all(caches).await?; + Ok(()) +} diff --git a/crates/support-scripts/src/program.rs b/crates/support-scripts/src/program.rs new file mode 100644 index 0000000000..cedd6ddf6a --- /dev/null +++ b/crates/support-scripts/src/program.rs @@ -0,0 +1,45 @@ +use anyhow::Result; +use async_trait::async_trait; +use e3_config::ProgramConfig; + +use crate::{ + program_dev::ProgramSupportDev, program_risc0::ProgramSupportRisc0, traits::ProgramSupportApi, +}; + +fn get_mode(config: ProgramConfig, mode: Option) -> bool { + if let Some(m) = mode { + return m; + }; + config.dev() +} + +pub enum ProgramSupport { + Dev(ProgramSupportDev), + Risc0(ProgramSupportRisc0), +} + +impl ProgramSupport { + pub fn new(config: ProgramConfig, mode: Option) -> ProgramSupport { + if get_mode(config.clone(), mode) { + ProgramSupport::Dev(ProgramSupportDev(config)) + } else { + ProgramSupport::Risc0(ProgramSupportRisc0(config)) + } + } +} + +#[async_trait] +impl ProgramSupportApi for ProgramSupport { + async fn compile(&self) -> Result<()> { + match self { + ProgramSupport::Dev(s) => s.compile().await, + ProgramSupport::Risc0(s) => s.compile().await, + } + } + async fn start(&self) -> Result<()> { + match self { + ProgramSupport::Dev(s) => s.start().await, + ProgramSupport::Risc0(s) => s.start().await, + } + } +} diff --git a/crates/support-scripts/src/program_dev.rs b/crates/support-scripts/src/program_dev.rs new file mode 100644 index 0000000000..fc7b03e4c9 --- /dev/null +++ b/crates/support-scripts/src/program_dev.rs @@ -0,0 +1,29 @@ +use std::env; + +use crate::{ + traits::ProgramSupportApi, + utils::{ensure_script_exists, run_bash_script}, +}; +use anyhow::Result; +use async_trait::async_trait; +use e3_config::ProgramConfig; + +pub struct ProgramSupportDev(pub ProgramConfig); + +#[async_trait] +impl ProgramSupportApi for ProgramSupportDev { + async fn compile(&self) -> Result<()> { + let cwd = env::current_dir()?; + let script = cwd.join(".enclave/support/dev/compile"); + ensure_script_exists(&script).await?; + run_bash_script(&cwd, &script, &[]).await?; + Ok(()) + } + async fn start(&self) -> Result<()> { + let cwd = env::current_dir()?; + let script = cwd.join(".enclave/support/dev/start"); + ensure_script_exists(&script).await?; + run_bash_script(&cwd, &script, &[]).await?; + Ok(()) + } +} diff --git a/crates/support-scripts/src/program_risc0.rs b/crates/support-scripts/src/program_risc0.rs new file mode 100644 index 0000000000..e06d44c234 --- /dev/null +++ b/crates/support-scripts/src/program_risc0.rs @@ -0,0 +1,43 @@ +use std::env; + +use crate::{ensure_script_exists, run_bash_script, traits::ProgramSupportApi}; +use anyhow::{bail, Result}; +use async_trait::async_trait; +use e3_config::ProgramConfig; + +pub struct ProgramSupportRisc0(pub ProgramConfig); + +#[async_trait] +impl ProgramSupportApi for ProgramSupportRisc0 { + /// Run the docker container compile script + async fn compile(&self) -> Result<()> { + let cwd = env::current_dir()?; + let script = cwd.join(".enclave/support/ctl/compile"); + ensure_script_exists(&script).await?; + run_bash_script(&cwd, &script, &[]).await?; + Ok(()) + } + + /// Run the docker container start script + async fn start(&self) -> Result<()> { + let cwd = env::current_dir()?; + let script = cwd.join(".enclave/support/ctl/start"); + ensure_script_exists(&script).await?; + + let Some(risc0_config) = self.0.risc0() else { + bail!("start must be run with risc0 config available"); + }; + let risc0_dev_mode_str = risc0_config.risc0_dev_mode.to_string(); + + let mut args = vec!["--risc0-dev-mode", risc0_dev_mode_str.as_str()]; + + if let (Some(api_key), Some(api_url)) = + (&risc0_config.bonsai_api_key, &risc0_config.bonsai_api_url) + { + args.extend(["--api-key", api_key.as_str(), "--api-url", api_url.as_str()]); + } + + run_bash_script(&cwd, &script, &args).await?; + Ok(()) + } +} diff --git a/crates/support-scripts/src/traits.rs b/crates/support-scripts/src/traits.rs new file mode 100644 index 0000000000..9d260e3678 --- /dev/null +++ b/crates/support-scripts/src/traits.rs @@ -0,0 +1,8 @@ +use anyhow::Result; +use async_trait::async_trait; + +#[async_trait] +pub trait ProgramSupportApi { + async fn compile(&self) -> Result<()>; + async fn start(&self) -> Result<()>; +} diff --git a/crates/support-scripts/src/utils.rs b/crates/support-scripts/src/utils.rs new file mode 100644 index 0000000000..09fedb275c --- /dev/null +++ b/crates/support-scripts/src/utils.rs @@ -0,0 +1,41 @@ +use anyhow::{bail, Result}; +use duct::cmd; +use std::path::PathBuf; +use tokio::fs; +use tokio::signal; + +pub async fn run_bash_script(cwd: &PathBuf, script: &PathBuf, args: &[&str]) -> Result<()> { + let mut cmd_args = vec!["bash".to_string(), script.to_string_lossy().to_string()]; + cmd_args.extend(args.iter().map(|s| s.to_string())); + + // Note this will not end up on shell history + let expression = cmd("bash", &cmd_args[1..]).dir(cwd); + + let handle = expression.start()?; + + tokio::select! { + result = async { handle.wait() } => { + match result { + Ok(output) => { + if output.status.success() { + Ok(()) + } else { + bail!("{} failed with exit code: {:?}", script.display(), output.status.code()); + } + } + Err(e) => Err(e.into()), + } + } + _ = signal::ctrl_c() => { + let _ = handle.kill(); + bail!("Script interrupted by user"); + } + } +} + +pub async fn ensure_script_exists(script_path: &PathBuf) -> Result<()> { + if !fs::try_exists(script_path).await? { + bail!("Invalid or corrupted project. This command can only be run from within a valid Enclave project."); + } + Ok(()) +} diff --git a/crates/support/.dockerignore b/crates/support/.dockerignore new file mode 100644 index 0000000000..381cbeb22e --- /dev/null +++ b/crates/support/.dockerignore @@ -0,0 +1,3 @@ +/target +/contracts +Elf.sol diff --git a/examples/CRISP/apps/program/host/Cargo.lock b/crates/support/Cargo.lock similarity index 71% rename from examples/CRISP/apps/program/host/Cargo.lock rename to crates/support/Cargo.lock index ac7331a462..da9bebcc53 100644 --- a/examples/CRISP/apps/program/host/Cargo.lock +++ b/crates/support/Cargo.lock @@ -3,51 +3,213 @@ version = 4 [[package]] -name = "Inflector" -version = "0.11.4" +name = "actix-codec" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" +checksum = "5f7b0a21988c1bf877cf4759ef5ddaac04c1c9fe808c9142ecb78ba97d97a28a" dependencies = [ - "lazy_static", + "bitflags 2.9.1", + "bytes", + "futures-core", + "futures-sink", + "memchr", + "pin-project-lite", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "actix-http" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44dfe5c9e0004c623edc65391dfd51daa201e7e30ebd9c9bedf873048ec32bc2" +dependencies = [ + "actix-codec", + "actix-rt", + "actix-service", + "actix-utils", + "base64", + "bitflags 2.9.1", + "brotli", + "bytes", + "bytestring", + "derive_more", + "encoding_rs", + "flate2", + "foldhash", + "futures-core", + "h2 0.3.26", + "http 0.2.12", + "httparse", + "httpdate", + "itoa", + "language-tags", + "local-channel", + "mime", + "percent-encoding", + "pin-project-lite", + "rand 0.9.1", + "sha1", + "smallvec", + "tokio", + "tokio-util", + "tracing", + "zstd", +] + +[[package]] +name = "actix-macros" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" +dependencies = [ + "quote", + "syn 2.0.103", +] + +[[package]] +name = "actix-router" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13d324164c51f63867b57e73ba5936ea151b8a41a1d23d1031eeb9f70d0236f8" +dependencies = [ + "bytestring", + "cfg-if", + "http 0.2.12", "regex", + "regex-lite", + "serde", + "tracing", ] [[package]] -name = "addr2line" -version = "0.24.2" +name = "actix-rt" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +checksum = "24eda4e2a6e042aa4e55ac438a2ae052d3b5da0ecf83d7411e1a368946925208" dependencies = [ - "gimli", + "futures-core", + "tokio", ] [[package]] -name = "adler2" -version = "2.0.0" +name = "actix-server" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a65064ea4a457eaf07f2fba30b4c695bf43b721790e9530d26cb6f9019ff7502" +dependencies = [ + "actix-rt", + "actix-service", + "actix-utils", + "futures-core", + "futures-util", + "mio", + "socket2", + "tokio", + "tracing", +] + +[[package]] +name = "actix-service" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +checksum = "9e46f36bf0e5af44bdc4bdb36fbbd421aa98c79a9bce724e1edeb3894e10dc7f" +dependencies = [ + "futures-core", + "pin-project-lite", +] [[package]] -name = "aes" -version = "0.8.4" +name = "actix-utils" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a1dcdff1466e3c2488e1cb5c36a71822750ad43839937f85d2f4d9f8b705d8" +dependencies = [ + "local-waker", + "pin-project-lite", +] + +[[package]] +name = "actix-web" +version = "4.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +checksum = "a597b77b5c6d6a1e1097fddde329a83665e25c5437c696a3a9a4aa514a614dea" dependencies = [ + "actix-codec", + "actix-http", + "actix-macros", + "actix-router", + "actix-rt", + "actix-server", + "actix-service", + "actix-utils", + "actix-web-codegen", + "bytes", + "bytestring", "cfg-if", - "cipher", - "cpufeatures", + "cookie", + "derive_more", + "encoding_rs", + "foldhash", + "futures-core", + "futures-util", + "impl-more", + "itoa", + "language-tags", + "log", + "mime", + "once_cell", + "pin-project-lite", + "regex", + "regex-lite", + "serde", + "serde_json", + "serde_urlencoded", + "smallvec", + "socket2", + "time", + "tracing", + "url", +] + +[[package]] +name = "actix-web-codegen" +version = "4.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f591380e2e68490b5dfaf1dd1aa0ebe78d84ba7067078512b4ea6e4492d622b8" +dependencies = [ + "actix-router", + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", ] +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + [[package]] name = "ahash" -version = "0.8.11" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", "once_cell", "version_check", - "zerocopy 0.7.35", + "zerocopy", ] [[package]] @@ -59,6 +221,21 @@ dependencies = [ "memchr", ] +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + [[package]] name = "allocator-api2" version = "0.2.21" @@ -67,9 +244,9 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "alloy" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b4ae82946772d69f868b9ef81fc66acb1b149ef9b4601849bec4bcf5da6552e" +checksum = "8a66e45d962abb2e1e8a505d97af34d92137b82f6cabbfb373406a9220dc7dca" dependencies = [ "alloy-consensus", "alloy-contract", @@ -89,33 +266,35 @@ dependencies = [ [[package]] name = "alloy-chains" -version = "0.1.69" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28e2652684758b0d9b389d248b209ed9fd9989ef489a550265fe4bb8454fe7eb" +checksum = "19a9cc9d81ace3da457883b0bdf76776e55f1b84219a9e9d55c27ad308548d3f" dependencies = [ - "alloy-primitives 0.8.25", + "alloy-primitives", "num_enum", "strum 0.27.1", ] [[package]] name = "alloy-consensus" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fbf458101ed6c389e9bb70a34ebc56039868ad10472540614816cdedc8f5265" +checksum = "2bcb57295c4b632b6b3941a089ee82d00ff31ff9eb3eac801bf605ffddc81041" dependencies = [ "alloy-eips", - "alloy-primitives 0.8.25", + "alloy-primitives", "alloy-rlp", "alloy-serde", "alloy-trie", + "alloy-tx-macros", "auto_impl", "c-kzg", - "derive_more 2.0.1", + "derive_more", "either", "k256", "once_cell", "rand 0.8.5", + "secp256k1", "serde", "serde_with", "thiserror 2.0.12", @@ -123,13 +302,13 @@ dependencies = [ [[package]] name = "alloy-consensus-any" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc982af629e511292310fe85b433427fd38cb3105147632b574abc997db44c91" +checksum = "3ab669be40024565acb719daf1b2a050e6dc065fc0bec6050d97a81cdb860bd7" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 0.8.25", + "alloy-primitives", "alloy-rlp", "alloy-serde", "serde", @@ -137,49 +316,49 @@ dependencies = [ [[package]] name = "alloy-contract" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0a0c1ddee20ecc14308aae21c2438c994df7b39010c26d70f86e1d8fdb8db0" +checksum = "8ba5d28e15c14226f243d6e329611840135e1b0fa31feaea57c461e0b03b4c7b" dependencies = [ "alloy-consensus", "alloy-dyn-abi", "alloy-json-abi", "alloy-network", "alloy-network-primitives", - "alloy-primitives 0.8.25", + "alloy-primitives", "alloy-provider", "alloy-rpc-types-eth", - "alloy-sol-types 0.8.25", + "alloy-sol-types", "alloy-transport", "futures", "futures-util", + "serde_json", "thiserror 2.0.12", ] [[package]] name = "alloy-core" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d8bcce99ad10fe02640cfaec1c6bc809b837c783c1d52906aa5af66e2a196f6" +checksum = "5968f48d7a62587cd874bd84034831da4f7f577ce5de984828e376766efc0f32" dependencies = [ "alloy-dyn-abi", "alloy-json-abi", - "alloy-primitives 0.8.25", + "alloy-primitives", "alloy-rlp", - "alloy-sol-types 0.8.25", + "alloy-sol-types", ] [[package]] name = "alloy-dyn-abi" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb8e762aefd39a397ff485bc86df673465c4ad3ec8819cc60833a8a3ba5cdc87" +checksum = "f9135eb501feccf7f4cb8a183afd406a65483fdad7bbd7332d0470e5d725c92f" dependencies = [ "alloy-json-abi", - "alloy-primitives 0.8.25", + "alloy-primitives", "alloy-sol-type-parser", - "alloy-sol-types 0.8.25", - "const-hex", + "alloy-sol-types", "itoa", "serde", "serde_json", @@ -188,11 +367,11 @@ dependencies = [ [[package]] name = "alloy-eip2124" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "675264c957689f0fd75f5993a73123c2cc3b5c235a38f5b9037fe6c826bfb2c0" +checksum = "741bdd7499908b3aa0b159bba11e71c8cddd009a2c2eb7a06e825f1ec87900a5" dependencies = [ - "alloy-primitives 0.8.25", + "alloy-primitives", "alloy-rlp", "crc", "serde", @@ -201,22 +380,22 @@ dependencies = [ [[package]] name = "alloy-eip2930" -version = "0.1.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0069cf0642457f87a01a014f6dc29d5d893cd4fd8fddf0c3cdfad1bb3ebafc41" +checksum = "7b82752a889170df67bbb36d42ca63c531eb16274f0d7299ae2a680facba17bd" dependencies = [ - "alloy-primitives 0.8.25", + "alloy-primitives", "alloy-rlp", "serde", ] [[package]] name = "alloy-eip7702" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b15b13d38b366d01e818fe8e710d4d702ef7499eacd44926a06171dd9585d0c" +checksum = "9d4769c6ffddca380b0070d71c8b7f30bed375543fe76bb2f74ec0acf4b7cd16" dependencies = [ - "alloy-primitives 0.8.25", + "alloy-primitives", "alloy-rlp", "serde", "thiserror 2.0.12", @@ -224,33 +403,32 @@ dependencies = [ [[package]] name = "alloy-eips" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e86967eb559920e4b9102e4cb825fe30f2e9467988353ce4809f0d3f2c90cd4" +checksum = "4f853de9ca1819f54de80de5d03bfc1bb7c9fafcf092b480a654447141bc354d" dependencies = [ "alloy-eip2124", "alloy-eip2930", "alloy-eip7702", - "alloy-primitives 0.8.25", + "alloy-primitives", "alloy-rlp", "alloy-serde", "auto_impl", "c-kzg", - "derive_more 2.0.1", + "derive_more", "either", - "once_cell", "serde", "sha2", ] [[package]] name = "alloy-genesis" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a40de6f5b53ecf5fd7756072942f41335426d9a3704cd961f77d854739933bcf" +checksum = "8500bcc1037901953771c25cb77e0d4ec0bffd938d93a04715390230d21a612d" dependencies = [ "alloy-eips", - "alloy-primitives 0.8.25", + "alloy-primitives", "alloy-serde", "alloy-trie", "serde", @@ -258,11 +436,11 @@ dependencies = [ [[package]] name = "alloy-json-abi" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe6beff64ad0aa6ad1019a3db26fef565aefeb011736150ab73ed3366c3cfd1b" +checksum = "8b26fdd571915bafe857fccba4ee1a4f352965800e46a53e4a5f50187b7776fa" dependencies = [ - "alloy-primitives 0.8.25", + "alloy-primitives", "alloy-sol-type-parser", "serde", "serde_json", @@ -270,12 +448,13 @@ dependencies = [ [[package]] name = "alloy-json-rpc" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27434beae2514d4a2aa90f53832cbdf6f23e4b5e2656d95eaf15f9276e2418b6" +checksum = "f4997a9873c8639d079490f218e50e5fa07e70f957e9fc187c0a0535977f482f" dependencies = [ - "alloy-primitives 0.8.25", - "alloy-sol-types 0.8.25", + "alloy-primitives", + "alloy-sol-types", + "http 1.3.1", "serde", "serde_json", "thiserror 2.0.12", @@ -284,24 +463,24 @@ dependencies = [ [[package]] name = "alloy-network" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26a33a38c7486b1945f8d093ff027add2f3a8f83c7300dbad6165cc49150085e" +checksum = "a0306e8d148b7b94d988615d367443c1b9d6d2e9fecd2e1f187ac5153dce56f5" dependencies = [ "alloy-consensus", "alloy-consensus-any", "alloy-eips", "alloy-json-rpc", "alloy-network-primitives", - "alloy-primitives 0.8.25", + "alloy-primitives", "alloy-rpc-types-any", "alloy-rpc-types-eth", "alloy-serde", "alloy-signer", - "alloy-sol-types 0.8.25", + "alloy-sol-types", "async-trait", "auto_impl", - "derive_more 2.0.1", + "derive_more", "futures-utils-wasm", "serde", "serde_json", @@ -310,59 +489,37 @@ dependencies = [ [[package]] name = "alloy-network-primitives" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db973a7a23cbe96f2958e5687c51ce2d304b5c6d0dc5ccb3de8667ad8476f50b" +checksum = "3eef189583f4c53d231dd1297b28a675ff842b551fb34715f562868a1937431a" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 0.8.25", + "alloy-primitives", "alloy-serde", "serde", ] [[package]] name = "alloy-primitives" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "600d34d8de81e23b6d909c094e23b3d357e01ca36b78a8c5424c501eedbe86f0" -dependencies = [ - "alloy-rlp", - "bytes", - "cfg-if", - "const-hex", - "derive_more 0.99.20", - "hex-literal", - "itoa", - "k256", - "keccak-asm", - "proptest", - "rand 0.8.5", - "ruint", - "serde", - "tiny-keccak", -] - -[[package]] -name = "alloy-primitives" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c77490fe91a0ce933a1f219029521f20fc28c2c0ca95d53fa4da9c00b8d9d4e" +checksum = "a326d47106039f38b811057215a92139f46eef7983a4b77b10930a0ea5685b1e" dependencies = [ "alloy-rlp", "bytes", "cfg-if", "const-hex", - "derive_more 2.0.1", + "derive_more", "foldhash", - "hashbrown 0.15.3", + "hashbrown 0.15.4", "indexmap 2.9.0", "itoa", "k256", "keccak-asm", "paste", "proptest", - "rand 0.8.5", + "rand 0.9.1", "ruint", "rustc-hash", "serde", @@ -372,9 +529,9 @@ dependencies = [ [[package]] name = "alloy-provider" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b03bde77ad73feae14aa593bcabb932c8098c0f0750ead973331cfc0003a4e1" +checksum = "ea624ddcdad357c33652b86aa7df9bd21afd2080973389d3facf1a221c573948" dependencies = [ "alloy-chains", "alloy-consensus", @@ -382,22 +539,25 @@ dependencies = [ "alloy-json-rpc", "alloy-network", "alloy-network-primitives", - "alloy-primitives 0.8.25", + "alloy-primitives", "alloy-rpc-client", "alloy-rpc-types-eth", - "alloy-sol-types 0.8.25", + "alloy-signer", + "alloy-sol-types", "alloy-transport", "alloy-transport-http", "async-stream", "async-trait", "auto_impl", "dashmap", + "either", "futures", "futures-utils-wasm", + "http 1.3.1", "lru", "parking_lot", "pin-project", - "reqwest 0.12.15", + "reqwest", "serde", "serde_json", "thiserror 2.0.12", @@ -409,9 +569,9 @@ dependencies = [ [[package]] name = "alloy-rlp" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6c1d995bff8d011f7cd6c81820d51825e6e06d6db73914c1630ecf544d83d6" +checksum = "5f70d83b765fdc080dbcd4f4db70d8d23fe4761f2f02ebfa9146b833900634b4" dependencies = [ "alloy-rlp-derive", "arrayvec", @@ -420,29 +580,29 @@ dependencies = [ [[package]] name = "alloy-rlp-derive" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a40e1ef334153322fd878d07e86af7a529bcb86b2439525920a88eba87bcf943" +checksum = "64b728d511962dda67c1bc7ea7c03736ec275ed2cf4c35d9585298ac9ccf3b73" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] name = "alloy-rpc-client" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445a3298c14fae7afb5b9f2f735dead989f3dd83020c2ab8e48ed95d7b6d1acb" +checksum = "e43d00b4de38432304c4e4b01ae6a3601490fd9824c852329d158763ec18663c" dependencies = [ "alloy-json-rpc", - "alloy-primitives 0.8.25", + "alloy-primitives", "alloy-transport", "alloy-transport-http", "async-stream", "futures", "pin-project", - "reqwest 0.12.15", + "reqwest", "serde", "serde_json", "tokio", @@ -456,11 +616,11 @@ dependencies = [ [[package]] name = "alloy-rpc-types" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9157deaec6ba2ad7854f16146e4cd60280e76593eed79fdcb06e0fa8b6c60f77" +checksum = "3bf22ddb69a436f28bbdda7daf34fe011ee9926fa13bfce89fa023aca9ce2b2f" dependencies = [ - "alloy-primitives 0.8.25", + "alloy-primitives", "alloy-rpc-types-eth", "alloy-serde", "serde", @@ -468,9 +628,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-any" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604dea1f00fd646debe8033abe8e767c732868bf8a5ae9df6321909ccbc99c56" +checksum = "5958f2310d69f4806e6f6b90ceb4f2b781cc5a843517a7afe2e7cfec6de3cfb9" dependencies = [ "alloy-consensus-any", "alloy-rpc-types-eth", @@ -479,19 +639,19 @@ dependencies = [ [[package]] name = "alloy-rpc-types-eth" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e13d71eac04513a71af4b3df580f52f2b4dcbff9d971cc9a52519acf55514cb" +checksum = "1826285e4ffc2372a8c061d5cc145858e67a0be3309b768c5b77ddb6b9e6cbc7" dependencies = [ "alloy-consensus", "alloy-consensus-any", "alloy-eips", "alloy-network-primitives", - "alloy-primitives 0.8.25", + "alloy-primitives", "alloy-rlp", "alloy-serde", - "alloy-sol-types 0.8.25", - "itertools 0.14.0", + "alloy-sol-types", + "itertools 0.13.0", "serde", "serde_json", "thiserror 2.0.12", @@ -499,22 +659,22 @@ dependencies = [ [[package]] name = "alloy-serde" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a1cd73fc054de6353c7f22ff9b846b0f0f145cd0112da07d4119e41e9959207" +checksum = "906ce0190afeded19cb2e963cb8507c975a7862216b9e74f39bf91ddee6ae74b" dependencies = [ - "alloy-primitives 0.8.25", + "alloy-primitives", "serde", "serde_json", ] [[package]] name = "alloy-signer" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c96fbde54bee943cd94ebacc8a62c50b38c7dfd2552dcd79ff61aea778b1bfcc" +checksum = "c89baab06195c4be9c5d66f15c55e948013d1aff3ec1cfb0ed469e1423313fce" dependencies = [ - "alloy-primitives 0.8.25", + "alloy-primitives", "async-trait", "auto_impl", "either", @@ -525,13 +685,13 @@ dependencies = [ [[package]] name = "alloy-signer-local" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc6e72002cc1801d8b41e9892165e3a6551b7bd382bd9d0414b21e90c0c62551" +checksum = "8a249a923e302ac6db932567c43945392f0b6832518aab3c4274858f58756774" dependencies = [ "alloy-consensus", "alloy-network", - "alloy-primitives 0.8.25", + "alloy-primitives", "alloy-signer", "async-trait", "k256", @@ -541,41 +701,23 @@ dependencies = [ [[package]] name = "alloy-sol-macro" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86ec0a47740b20bc5613b8712d0d321d031c4efc58e9645af96085d5cccfc27" -dependencies = [ - "const-hex", - "dunce", - "heck 0.4.1", - "indexmap 2.9.0", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 2.0.101", - "syn-solidity 0.6.4", - "tiny-keccak", -] - -[[package]] -name = "alloy-sol-macro" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10ae8e9a91d328ae954c22542415303919aabe976fe7a92eb06db1b68fd59f2" +checksum = "d4be1ce1274ddd7fdfac86e5ece1b225e9bba1f2327e20fbb30ee6b9cc1423fe" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] name = "alloy-sol-macro-expander" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83ad5da86c127751bc607c174d6c9fe9b85ef0889a9ca0c641735d77d4f98f26" +checksum = "01e92f3708ea4e0d9139001c86c051c538af0146944a2a9c7181753bd944bf57" dependencies = [ "alloy-json-abi", "alloy-sol-macro-input", @@ -585,16 +727,16 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.101", - "syn-solidity 0.8.25", + "syn 2.0.103", + "syn-solidity", "tiny-keccak", ] [[package]] name = "alloy-sol-macro-input" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3d30f0d3f9ba3b7686f3ff1de9ee312647aac705604417a2f40c604f409a9e" +checksum = "9afe1bd348a41f8c9b4b54dfb314886786d6201235b0b3f47198b9d910c86bb2" dependencies = [ "alloy-json-abi", "const-hex", @@ -604,15 +746,15 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.101", - "syn-solidity 0.8.25", + "syn 2.0.103", + "syn-solidity", ] [[package]] name = "alloy-sol-type-parser" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d162f8524adfdfb0e4bd0505c734c985f3e2474eb022af32eef0d52a4f3935c" +checksum = "d6195df2acd42df92a380a8db6205a5c7b41282d0ce3f4c665ecf7911ac292f1" dependencies = [ "serde", "winnow", @@ -620,38 +762,26 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad09ec5853fa700d12d778ad224dcdec636af424d29fad84fb9a2f16a5b0ef09" -dependencies = [ - "alloy-primitives 0.6.4", - "alloy-sol-macro 0.6.4", - "const-hex", - "serde", -] - -[[package]] -name = "alloy-sol-types" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d43d5e60466a440230c07761aa67671d4719d46f43be8ea6e7ed334d8db4a9ab" +checksum = "6185e98a79cf19010722f48a74b5a65d153631d2f038cabd250f4b9e9813b8ad" dependencies = [ "alloy-json-abi", - "alloy-primitives 0.8.25", - "alloy-sol-macro 0.8.25", - "const-hex", + "alloy-primitives", + "alloy-sol-macro", "serde", ] [[package]] name = "alloy-transport" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec325c2af8562ef355c02aeb527c755a07e9d8cf6a1e65dda8d0bf23e29b2c" +checksum = "6d1ae10b1bc77fde38161e242749e41e65e34000d05da0a3d3f631e03bfcb19e" dependencies = [ "alloy-json-rpc", - "base64 0.22.1", - "derive_more 2.0.1", + "alloy-primitives", + "base64", + "derive_more", "futures", "futures-utils-wasm", "parking_lot", @@ -667,13 +797,13 @@ dependencies = [ [[package]] name = "alloy-transport-http" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a082c9473c6642cce8b02405a979496126a03b096997888e86229afad05db06c" +checksum = "b234272ee449e32c9f1afbbe4ee08ea7c4b52f14479518f95c844ab66163c545" dependencies = [ "alloy-json-rpc", "alloy-transport", - "reqwest 0.12.15", + "reqwest", "serde_json", "tower", "tracing", @@ -682,20 +812,33 @@ dependencies = [ [[package]] name = "alloy-trie" -version = "0.7.9" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95a94854e420f07e962f7807485856cde359ab99ab6413883e15235ad996e8b" +checksum = "983d99aa81f586cef9dae38443245e585840fcf0fc58b09aee0b1f27aed1d500" dependencies = [ - "alloy-primitives 0.8.25", + "alloy-primitives", "alloy-rlp", "arrayvec", - "derive_more 1.0.0", + "derive_more", "nybbles", "serde", "smallvec", "tracing", ] +[[package]] +name = "alloy-tx-macros" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b75ef8609ea2b31c799b0a56c724dca4c73105c5ccc205d9dfeb1d038df6a1da" +dependencies = [ + "alloy-primitives", + "darling", + "proc-macro2", + "quote", + "syn 2.0.103", +] + [[package]] name = "android-tzdata" version = "0.1.1" @@ -713,9 +856,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.18" +version = "0.6.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" dependencies = [ "anstyle", "anstyle-parse", @@ -728,36 +871,36 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" +checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" [[package]] name = "anstyle-parse" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" dependencies = [ "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.7" +version = "3.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" +checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" dependencies = [ "anstyle", - "once_cell", + "once_cell_polyfill", "windows-sys 0.59.0", ] @@ -820,7 +963,7 @@ checksum = "e7e89fe77d1f0f4fe5b96dfc940923d88d17b6a773808124f21e764dfb063c6a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] @@ -853,7 +996,7 @@ dependencies = [ "ark-std 0.5.0", "educe", "fnv", - "hashbrown 0.15.3", + "hashbrown 0.15.4", "itertools 0.13.0", "num-bigint", "num-integer", @@ -946,7 +1089,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" dependencies = [ "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] @@ -984,7 +1127,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] @@ -1027,7 +1170,7 @@ dependencies = [ "ark-std 0.5.0", "educe", "fnv", - "hashbrown 0.15.3", + "hashbrown 0.15.4", ] [[package]] @@ -1113,7 +1256,7 @@ checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] @@ -1173,15 +1316,6 @@ dependencies = [ "serde", ] -[[package]] -name = "ascii-canvas" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6" -dependencies = [ - "term", -] - [[package]] name = "async-stream" version = "0.3.6" @@ -1201,7 +1335,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] @@ -1212,19 +1346,14 @@ checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] -name = "async_io_stream" -version = "0.3.3" +name = "atomic-waker" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" -dependencies = [ - "futures", - "pharos", - "rustc_version 0.4.1", -] +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "auto_impl" @@ -1234,20 +1363,20 @@ checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] name = "autocfg" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "backtrace" -version = "0.3.74" +version = "0.3.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" dependencies = [ "addr2line", "cfg-if", @@ -1266,33 +1395,15 @@ checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" [[package]] name = "base64" -version = "0.13.1" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] -name = "base64" -version = "0.21.7" +name = "base64ct" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - -[[package]] -name = "base64" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" - -[[package]] -name = "base64ct" -version = "1.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89e25b6adfb930f02d1981565a6e5d9c547ac15a96606256d3b59040e5cd4ca3" - -[[package]] -name = "bech32" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" +checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" [[package]] name = "bincode" @@ -1305,33 +1416,34 @@ dependencies = [ [[package]] name = "bit-set" -version = "0.5.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" dependencies = [ - "bit-vec 0.6.3", + "bit-vec", ] [[package]] -name = "bit-set" +name = "bit-vec" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" -dependencies = [ - "bit-vec 0.8.0", -] +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" [[package]] -name = "bit-vec" -version = "0.6.3" +name = "bitcoin-io" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +checksum = "0b47c4ab7a93edb0c7198c5535ed9b52b63095f4e9b45279c6736cec4b856baf" [[package]] -name = "bit-vec" -version = "0.8.0" +name = "bitcoin_hashes" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" +checksum = "bb18c03d0db0247e147a21a6faafd5a7eb851c743db062de72018b6b7e8e4d16" +dependencies = [ + "bitcoin-io", + "hex-conservative", +] [[package]] name = "bitflags" @@ -1341,9 +1453,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" +checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" [[package]] name = "bitvec" @@ -1383,9 +1495,9 @@ dependencies = [ [[package]] name = "blst" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47c79a94619fade3c0b887670333513a67ac28a6a7e653eb260bf0d4103db38d" +checksum = "4fd49896f12ac9b6dcd7a5998466b9b58263a695a3dd1ecc1aaca2e12a90b080" dependencies = [ "cc", "glob", @@ -1401,7 +1513,7 @@ checksum = "0bce8d6acc5286a16e94c29e9c885d1869358885e08a6feeb6bc54e36fe20055" dependencies = [ "duplicate", "maybe-async", - "reqwest 0.12.15", + "reqwest", "serde", "thiserror 1.0.69", ] @@ -1426,24 +1538,35 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] -name = "bs58" -version = "0.5.1" +name = "brotli" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +checksum = "9991eea70ea4f293524138648e41ee89b0b2b12ddef3b255effa43c8056e0e0d" dependencies = [ - "sha2", - "tinyvec", + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", ] [[package]] name = "bumpalo" -version = "3.17.0" +version = "3.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" +checksum = "793db76d6187cd04dff33004d8e6c9cc4e05cd330500379d2394209271b4aeee" [[package]] name = "byte-slice-cast" @@ -1453,9 +1576,9 @@ checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" [[package]] name = "bytemuck" -version = "1.23.0" +version = "1.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9134a6ef01ce4b366b50689c94f82c14bc72bc5d0386829828a2e2752ef7958c" +checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422" dependencies = [ "bytemuck_derive", ] @@ -1468,7 +1591,7 @@ checksum = "3fa76293b4f7bb636ab88fd78228235b5248b4d05cc589aed610f954af5d7c7a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] @@ -1487,30 +1610,19 @@ dependencies = [ ] [[package]] -name = "bzip2" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" -dependencies = [ - "bzip2-sys", - "libc", -] - -[[package]] -name = "bzip2-sys" -version = "0.1.13+1.0.8" +name = "bytestring" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225bff33b2141874fe80d71e07d6eec4f85c5c216453dd96388240f96e1acc14" +checksum = "e465647ae23b2823b0753f50decb2d5a86d2bb2cac04788fafd1f80e45378e5f" dependencies = [ - "cc", - "pkg-config", + "bytes", ] [[package]] name = "c-kzg" -version = "1.0.3" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0307f72feab3300336fb803a57134159f6e20139af1357f36c54cb90d8e8928" +checksum = "7318cfa722931cb5fe0838b98d3ce5621e75f6a6408abc21721d80de9223f2e4" dependencies = [ "blst", "cc", @@ -1523,9 +1635,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.9" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" +checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab" dependencies = [ "serde", ] @@ -1539,20 +1651,6 @@ dependencies = [ "serde", ] -[[package]] -name = "cargo_metadata" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" -dependencies = [ - "camino", - "cargo-platform", - "semver 1.0.26", - "serde", - "serde_json", - "thiserror 1.0.69", -] - [[package]] name = "cargo_metadata" version = "0.19.2" @@ -1569,9 +1667,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.21" +version = "1.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8691782945451c1c383942c4874dbe63814f61cb57ef773cda2972682b7bb3c0" +checksum = "d487aa071b5f64da6f19a3e848e3578944b726ee5a4854b82172f02aa876bfdc" dependencies = [ "jobserver", "libc", @@ -1580,9 +1678,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" [[package]] name = "cfg_aliases" @@ -1603,150 +1701,23 @@ dependencies = [ "windows-link", ] -[[package]] -name = "cipher" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" -dependencies = [ - "crypto-common", - "inout", -] - -[[package]] -name = "clap" -version = "4.5.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eccb054f56cbd38340b380d4a8e69ef1f02f1af43db2f0cc817a4774d80ae071" -dependencies = [ - "clap_builder", - "clap_derive", -] - -[[package]] -name = "clap_builder" -version = "4.5.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efd9466fac8543255d3b1fcad4762c5e116ffe808c8a3043d4263cd4fd4862a2" -dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", -] - -[[package]] -name = "clap_derive" -version = "4.5.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn 2.0.101", -] - -[[package]] -name = "clap_lex" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" - [[package]] name = "cobs" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15" -[[package]] -name = "coins-bip32" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b6be4a5df2098cd811f3194f64ddb96c267606bffd9689ac7b0160097b01ad3" -dependencies = [ - "bs58", - "coins-core", - "digest 0.10.7", - "hmac", - "k256", - "serde", - "sha2", - "thiserror 1.0.69", -] - -[[package]] -name = "coins-bip39" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3db8fba409ce3dc04f7d804074039eb68b960b0829161f8e06c95fea3f122528" -dependencies = [ - "bitvec", - "coins-bip32", - "hmac", - "once_cell", - "pbkdf2 0.12.2", - "rand 0.8.5", - "sha2", - "thiserror 1.0.69", -] - -[[package]] -name = "coins-core" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5286a0843c21f8367f7be734f89df9b822e0321d8bcce8d6e735aadff7d74979" -dependencies = [ - "base64 0.21.7", - "bech32", - "bs58", - "digest 0.10.7", - "generic-array", - "hex", - "ripemd", - "serde", - "serde_derive", - "sha2", - "sha3", - "thiserror 1.0.69", -] - [[package]] name = "colorchoice" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" - -[[package]] -name = "commons" -version = "0.1.0" -dependencies = [ - "anyhow", - "fhe", - "fhe-traits", -] - -[[package]] -name = "compute-provider" -version = "0.1.0" -dependencies = [ - "ark-bn254 0.4.0", - "ark-ff 0.4.2", - "hex", - "lean-imt", - "light-poseidon", - "num-bigint", - "num-traits", - "rayon", - "serde", - "sha3", -] +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" [[package]] name = "const-hex" -version = "1.14.0" +version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b0485bab839b018a8f1723fc5391819fea5f8f0f32288ef8a735fd096b6160c" +checksum = "83e22e0ed40b96a48d3db274f72fd365bd78f67af39b6bbd47e8a15e1c6207ff" dependencies = [ "cfg-if", "cpufeatures", @@ -1782,16 +1753,15 @@ dependencies = [ ] [[package]] -name = "constant_time_eq" -version = "0.1.5" +name = "cookie" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" - -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" +checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" +dependencies = [ + "percent-encoding", + "time", + "version_check", +] [[package]] name = "core-foundation" @@ -1831,9 +1801,9 @@ dependencies = [ [[package]] name = "crc" -version = "3.2.1" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" +checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" dependencies = [ "crc-catalog", ] @@ -1906,15 +1876,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "ctr" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" -dependencies = [ - "cipher", -] - [[package]] name = "darling" version = "0.20.11" @@ -1936,7 +1897,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] @@ -1947,7 +1908,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] @@ -1964,12 +1925,6 @@ dependencies = [ "parking_lot_core", ] -[[package]] -name = "data-encoding" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" - [[package]] name = "der" version = "0.7.10" @@ -2019,7 +1974,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] @@ -2029,29 +1984,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.101", -] - -[[package]] -name = "derive_more" -version = "0.99.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f" -dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "rustc_version 0.4.1", - "syn 2.0.101", -] - -[[package]] -name = "derive_more" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" -dependencies = [ - "derive_more-impl 1.0.0", + "syn 2.0.103", ] [[package]] @@ -2060,18 +1993,7 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" dependencies = [ - "derive_more-impl 2.0.1", -] - -[[package]] -name = "derive_more-impl" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", + "derive_more-impl", ] [[package]] @@ -2082,7 +2004,7 @@ checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", "unicode-xid", ] @@ -2116,16 +2038,6 @@ dependencies = [ "dirs-sys", ] -[[package]] -name = "dirs-next" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" -dependencies = [ - "cfg-if", - "dirs-sys-next", -] - [[package]] name = "dirs-sys" version = "0.4.1" @@ -2138,17 +2050,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "dirs-sys-next" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - [[package]] name = "displaydoc" version = "0.2.5" @@ -2157,7 +2058,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] @@ -2194,6 +2095,101 @@ dependencies = [ "proc-macro-error", ] +[[package]] +name = "dyn-clone" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" + +[[package]] +name = "e3-bfv-helpers" +version = "0.1.0" +source = "git+https://github.com/gnosisguild/enclave?rev=1bf6340#1bf6340124ac2ef8ce6d409307d5455ef68ed8ab" +dependencies = [ + "alloy-dyn-abi", + "alloy-primitives", + "fhe", + "fhe-traits", +] + +[[package]] +name = "e3-compute-provider" +version = "0.1.0" +source = "git+https://github.com/gnosisguild/enclave?rev=1bf6340#1bf6340124ac2ef8ce6d409307d5455ef68ed8ab" +dependencies = [ + "ark-bn254 0.4.0", + "ark-ff 0.4.2", + "hex", + "lean-imt", + "light-poseidon", + "num-bigint", + "num-traits", + "rayon", + "serde", + "sha3", +] + +[[package]] +name = "e3-support-app" +version = "0.1.0" +dependencies = [ + "actix-web", + "anyhow", + "e3-compute-provider", + "e3-support-host", + "e3-support-types", + "env_logger", + "hex", + "reqwest", + "serde", + "serde_json", + "tokio", +] + +[[package]] +name = "e3-support-host" +version = "0.1.0" +dependencies = [ + "alloy-primitives", + "alloy-sol-types", + "anyhow", + "bincode", + "bytemuck", + "e3-compute-provider", + "e3-user-program", + "fhe", + "fhe-traits", + "fhe-util", + "log", + "methods", + "rand 0.8.5", + "risc0-ethereum-contracts", + "risc0-zkvm", + "serde", + "tokio", + "tracing-subscriber 0.3.19", +] + +[[package]] +name = "e3-support-types" +version = "0.1.0" +dependencies = [ + "anyhow", + "hex", + "serde", + "serde_json", +] + +[[package]] +name = "e3-user-program" +version = "0.1.0" +dependencies = [ + "e3-bfv-helpers", + "e3-compute-provider", + "fhe", + "fhe-traits", +] + [[package]] name = "ecdsa" version = "0.16.9" @@ -2218,7 +2214,7 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] @@ -2269,424 +2265,79 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" [[package]] -name = "ena" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5" -dependencies = [ - "log", -] - -[[package]] -name = "encoding_rs" -version = "0.8.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "enr" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a3d8dc56e02f954cac8eb489772c552c473346fc34f67412bb6244fd647f7e4" -dependencies = [ - "base64 0.21.7", - "bytes", - "hex", - "k256", - "log", - "rand 0.8.5", - "rlp", - "serde", - "sha3", - "zeroize", -] - -[[package]] -name = "enum-ordinalize" -version = "4.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea0dcfa4e54eeb516fe454635a95753ddd39acda650ce703031c6973e315dd5" -dependencies = [ - "enum-ordinalize-derive", -] - -[[package]] -name = "enum-ordinalize-derive" -version = "4.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", -] - -[[package]] -name = "env_logger" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" -dependencies = [ - "humantime", - "is-terminal", - "log", - "regex", - "termcolor", -] - -[[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - -[[package]] -name = "errno" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" -dependencies = [ - "libc", - "windows-sys 0.59.0", -] - -[[package]] -name = "eth-keystore" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fda3bf123be441da5260717e0661c25a2fd9cb2b2c1d20bf2e05580047158ab" -dependencies = [ - "aes", - "ctr", - "digest 0.10.7", - "hex", - "hmac", - "pbkdf2 0.11.0", - "rand 0.8.5", - "scrypt", - "serde", - "serde_json", - "sha2", - "sha3", - "thiserror 1.0.69", - "uuid", -] - -[[package]] -name = "ethabi" -version = "18.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7413c5f74cc903ea37386a8965a936cbeb334bd270862fdece542c1b2dcbc898" -dependencies = [ - "ethereum-types", - "hex", - "once_cell", - "regex", - "serde", - "serde_json", - "sha3", - "thiserror 1.0.69", - "uint", -] - -[[package]] -name = "ethbloom" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60" -dependencies = [ - "crunchy", - "fixed-hash", - "impl-codec", - "impl-rlp", - "impl-serde", - "scale-info", - "tiny-keccak", -] - -[[package]] -name = "ethereum-types" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" -dependencies = [ - "ethbloom", - "fixed-hash", - "impl-codec", - "impl-rlp", - "impl-serde", - "primitive-types", - "scale-info", - "uint", -] - -[[package]] -name = "ethers" -version = "2.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "816841ea989f0c69e459af1cf23a6b0033b19a55424a1ea3a30099becdb8dec0" -dependencies = [ - "ethers-addressbook", - "ethers-contract", - "ethers-core", - "ethers-etherscan", - "ethers-middleware", - "ethers-providers", - "ethers-signers", - "ethers-solc", -] - -[[package]] -name = "ethers-addressbook" -version = "2.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5495afd16b4faa556c3bba1f21b98b4983e53c1755022377051a975c3b021759" -dependencies = [ - "ethers-core", - "once_cell", - "serde", - "serde_json", -] - -[[package]] -name = "ethers-contract" -version = "2.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fceafa3578c836eeb874af87abacfb041f92b4da0a78a5edd042564b8ecdaaa" -dependencies = [ - "const-hex", - "ethers-contract-abigen", - "ethers-contract-derive", - "ethers-core", - "ethers-providers", - "futures-util", - "once_cell", - "pin-project", - "serde", - "serde_json", - "thiserror 1.0.69", -] - -[[package]] -name = "ethers-contract-abigen" -version = "2.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04ba01fbc2331a38c429eb95d4a570166781f14290ef9fdb144278a90b5a739b" -dependencies = [ - "Inflector", - "const-hex", - "dunce", - "ethers-core", - "ethers-etherscan", - "eyre", - "prettyplease", - "proc-macro2", - "quote", - "regex", - "reqwest 0.11.27", - "serde", - "serde_json", - "syn 2.0.101", - "toml", - "walkdir", -] - -[[package]] -name = "ethers-contract-derive" -version = "2.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87689dcabc0051cde10caaade298f9e9093d65f6125c14575db3fd8c669a168f" -dependencies = [ - "Inflector", - "const-hex", - "ethers-contract-abigen", - "ethers-core", - "proc-macro2", - "quote", - "serde_json", - "syn 2.0.101", -] - -[[package]] -name = "ethers-core" -version = "2.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82d80cc6ad30b14a48ab786523af33b37f28a8623fc06afd55324816ef18fb1f" -dependencies = [ - "arrayvec", - "bytes", - "cargo_metadata 0.18.1", - "chrono", - "const-hex", - "elliptic-curve", - "ethabi", - "generic-array", - "k256", - "num_enum", - "once_cell", - "open-fastrlp", - "rand 0.8.5", - "rlp", - "serde", - "serde_json", - "strum 0.26.3", - "syn 2.0.101", - "tempfile", - "thiserror 1.0.69", - "tiny-keccak", - "unicode-xid", -] - -[[package]] -name = "ethers-etherscan" -version = "2.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79e5973c26d4baf0ce55520bd732314328cabe53193286671b47144145b9649" -dependencies = [ - "chrono", - "ethers-core", - "reqwest 0.11.27", - "semver 1.0.26", - "serde", - "serde_json", - "thiserror 1.0.69", - "tracing", +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", ] [[package]] -name = "ethers-middleware" -version = "2.0.14" +name = "enum-ordinalize" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48f9fdf09aec667c099909d91908d5eaf9be1bd0e2500ba4172c1d28bfaa43de" +checksum = "fea0dcfa4e54eeb516fe454635a95753ddd39acda650ce703031c6973e315dd5" dependencies = [ - "async-trait", - "auto_impl", - "ethers-contract", - "ethers-core", - "ethers-etherscan", - "ethers-providers", - "ethers-signers", - "futures-channel", - "futures-locks", - "futures-util", - "instant", - "reqwest 0.11.27", - "serde", - "serde_json", - "thiserror 1.0.69", - "tokio", - "tracing", - "tracing-futures", - "url", + "enum-ordinalize-derive", ] [[package]] -name = "ethers-providers" -version = "2.0.14" +name = "enum-ordinalize-derive" +version = "4.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6434c9a33891f1effc9c75472e12666db2fa5a0fec4b29af6221680a6fe83ab2" +checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" dependencies = [ - "async-trait", - "auto_impl", - "base64 0.21.7", - "bytes", - "const-hex", - "enr", - "ethers-core", - "futures-core", - "futures-timer", - "futures-util", - "hashers", - "http 0.2.12", - "instant", - "jsonwebtoken", - "once_cell", - "pin-project", - "reqwest 0.11.27", - "serde", - "serde_json", - "thiserror 1.0.69", - "tokio", - "tokio-tungstenite", - "tracing", - "tracing-futures", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "ws_stream_wasm", + "proc-macro2", + "quote", + "syn 2.0.103", ] [[package]] -name = "ethers-signers" -version = "2.0.14" +name = "env_filter" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "228875491c782ad851773b652dd8ecac62cda8571d3bc32a5853644dd26766c2" +checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" dependencies = [ - "async-trait", - "coins-bip32", - "coins-bip39", - "const-hex", - "elliptic-curve", - "eth-keystore", - "ethers-core", - "rand 0.8.5", - "sha2", - "thiserror 1.0.69", - "tracing", + "log", + "regex", ] [[package]] -name = "ethers-solc" -version = "2.0.14" +name = "env_logger" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66244a771d9163282646dbeffe0e6eca4dda4146b6498644e678ac6089b11edd" +checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" dependencies = [ - "cfg-if", - "const-hex", - "dirs", - "dunce", - "ethers-core", - "glob", - "home", - "md-5", - "num_cpus", - "once_cell", - "path-slash", - "rayon", - "regex", - "semver 1.0.26", - "serde", - "serde_json", - "solang-parser", - "svm-rs", - "thiserror 1.0.69", - "tiny-keccak", - "tokio", - "tracing", - "walkdir", - "yansi", + "anstream", + "anstyle", + "env_filter", + "jiff", + "log", ] [[package]] -name = "ethnum" -version = "1.5.1" +name = "equivalent" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0939f82868b77ef93ce3c3c3daf2b3c526b456741da5a1a4559e590965b6026b" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] -name = "eyre" -version = "0.6.12" +name = "errno" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18" dependencies = [ - "indenter", - "once_cell", + "libc", + "windows-sys 0.59.0", ] +[[package]] +name = "ethnum" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca81e6b4777c89fd810c25a4be2b1bd93ea034fbe58e6a75216a34c6b82c539b" + [[package]] name = "fastrand" version = "2.3.0" @@ -2728,7 +2379,7 @@ dependencies = [ [[package]] name = "fhe" version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs?branch=feature%2Fgreco-integration#b529be34a8b6cfa589b3ce451dbba0ce0126b92a" +source = "git+https://github.com/gnosisguild/fhe.rs#11cdd749a8e01c486160d5f62572c4520af5358f" dependencies = [ "doc-comment", "fhe-math", @@ -2751,7 +2402,7 @@ dependencies = [ [[package]] name = "fhe-math" version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs?branch=feature%2Fgreco-integration#b529be34a8b6cfa589b3ce451dbba0ce0126b92a" +source = "git+https://github.com/gnosisguild/fhe.rs#11cdd749a8e01c486160d5f62572c4520af5358f" dependencies = [ "ethnum", "fhe-traits", @@ -2773,7 +2424,7 @@ dependencies = [ [[package]] name = "fhe-traits" version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs?branch=feature%2Fgreco-integration#b529be34a8b6cfa589b3ce451dbba0ce0126b92a" +source = "git+https://github.com/gnosisguild/fhe.rs#11cdd749a8e01c486160d5f62572c4520af5358f" dependencies = [ "rand 0.8.5", ] @@ -2781,7 +2432,7 @@ dependencies = [ [[package]] name = "fhe-util" version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs?branch=feature%2Fgreco-integration#b529be34a8b6cfa589b3ce451dbba0ce0126b92a" +source = "git+https://github.com/gnosisguild/fhe.rs#11cdd749a8e01c486160d5f62572c4520af5358f" dependencies = [ "itertools 0.12.1", "num-bigint-dig", @@ -2811,9 +2462,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" +checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" dependencies = [ "crc32fast", "miniz_oxide", @@ -2858,7 +2509,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] @@ -2882,16 +2533,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "fs2" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" -dependencies = [ - "libc", - "winapi", -] - [[package]] name = "funty" version = "2.0.0" @@ -2946,16 +2587,6 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" -[[package]] -name = "futures-locks" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45ec6fe3675af967e67c5536c0b9d44e34e6c52f86bedc4ea49c5317b8e94d06" -dependencies = [ - "futures-channel", - "futures-task", -] - [[package]] name = "futures-macro" version = "0.3.31" @@ -2964,7 +2595,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] @@ -2979,16 +2610,6 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" -[[package]] -name = "futures-timer" -version = "3.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" -dependencies = [ - "gloo-timers", - "send_wrapper 0.4.0", -] - [[package]] name = "futures-util" version = "0.3.31" @@ -3013,15 +2634,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42012b0f064e01aa58b545fe3727f90f7dd4020f4a3ea735b50344965f5a57e9" -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - [[package]] name = "generic-array" version = "0.14.7" @@ -3042,15 +2654,15 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi 0.11.1+wasi-snapshot-preview1", "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" dependencies = [ "cfg-if", "js-sys", @@ -3072,18 +2684,6 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" -[[package]] -name = "gloo-timers" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" -dependencies = [ - "futures-channel", - "futures-core", - "js-sys", - "wasm-bindgen", -] - [[package]] name = "group" version = "0.13.0" @@ -3114,6 +2714,25 @@ dependencies = [ "tracing", ] +[[package]] +name = "h2" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9421a676d1b147b16b82c9225157dc629087ef8ec4d5e2960f9437a90dac0a5" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.3.1", + "indexmap 2.9.0", + "slab", + "tokio", + "tokio-util", + "tracing", +] + [[package]] name = "hashbrown" version = "0.12.3" @@ -3140,9 +2759,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.3" +version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3" +checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" dependencies = [ "allocator-api2", "equivalent", @@ -3150,15 +2769,6 @@ dependencies = [ "serde", ] -[[package]] -name = "hashers" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2bca93b15ea5a746f220e56587f71e73c6165eab783df9e26590069953e3c30" -dependencies = [ - "fxhash", -] - [[package]] name = "hashlink" version = "0.9.1" @@ -3182,15 +2792,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" - -[[package]] -name = "hermit-abi" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f154ce46856750ed433c8649605bf7ed2de3bc35fd9d2a9f30cddd873c80cb08" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" [[package]] name = "hex" @@ -3201,6 +2805,15 @@ dependencies = [ "serde", ] +[[package]] +name = "hex-conservative" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5313b072ce3c597065a808dbf612c4c8e8590bdbf8b579508bf7a762c5eae6cd" +dependencies = [ + "arrayvec", +] + [[package]] name = "hex-literal" version = "0.4.1" @@ -3216,15 +2829,6 @@ dependencies = [ "digest 0.10.7", ] -[[package]] -name = "home" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" -dependencies = [ - "windows-sys 0.59.0", -] - [[package]] name = "http" version = "0.2.12" @@ -3247,17 +2851,6 @@ dependencies = [ "itoa", ] -[[package]] -name = "http-body" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http 0.2.12", - "pin-project-lite", -] - [[package]] name = "http-body" version = "1.0.1" @@ -3277,7 +2870,7 @@ dependencies = [ "bytes", "futures-core", "http 1.3.1", - "http-body 1.0.1", + "http-body", "pin-project-lite", ] @@ -3293,36 +2886,6 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" -[[package]] -name = "humantime" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f" - -[[package]] -name = "hyper" -version = "0.14.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http 0.2.12", - "http-body 0.4.6", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - [[package]] name = "hyper" version = "1.6.0" @@ -3332,8 +2895,9 @@ dependencies = [ "bytes", "futures-channel", "futures-util", + "h2 0.4.10", "http 1.3.1", - "http-body 1.0.1", + "http-body", "httparse", "itoa", "pin-project-lite", @@ -3344,34 +2908,19 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" -dependencies = [ - "futures-util", - "http 0.2.12", - "hyper 0.14.32", - "rustls 0.21.12", - "tokio", - "tokio-rustls 0.24.1", -] - -[[package]] -name = "hyper-rustls" -version = "0.27.5" +version = "0.27.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ - "futures-util", "http 1.3.1", - "hyper 1.6.0", + "hyper", "hyper-util", - "rustls 0.23.27", + "rustls", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.2", + "tokio-rustls", "tower-service", - "webpki-roots 0.26.11", + "webpki-roots", ] [[package]] @@ -3382,7 +2931,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", - "hyper 1.6.0", + "hyper", "hyper-util", "native-tls", "tokio", @@ -3392,22 +2941,28 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.11" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497bbc33a26fdd4af9ed9c70d63f61cf56a938375fbb32df34db9b1cd6d643f2" +checksum = "dc2fdfdbff08affe55bb779f33b053aa1fe5dd5b54c257343c17edfa55711bdb" dependencies = [ + "base64", "bytes", "futures-channel", + "futures-core", "futures-util", "http 1.3.1", - "http-body 1.0.1", - "hyper 1.6.0", + "http-body", + "hyper", + "ipnet", "libc", + "percent-encoding", "pin-project-lite", "socket2", + "system-configuration", "tokio", "tower-service", "tracing", + "windows-registry", ] [[package]] @@ -3436,21 +2991,22 @@ dependencies = [ [[package]] name = "icu_collections" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" dependencies = [ "displaydoc", + "potential_utf", "yoke", "zerofrom", "zerovec", ] [[package]] -name = "icu_locid" -version = "1.5.0" +name = "icu_locale_core" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" dependencies = [ "displaydoc", "litemap", @@ -3459,31 +3015,11 @@ dependencies = [ "zerovec", ] -[[package]] -name = "icu_locid_transform" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" -dependencies = [ - "displaydoc", - "icu_locid", - "icu_locid_transform_data", - "icu_provider", - "tinystr", - "zerovec", -] - -[[package]] -name = "icu_locid_transform_data" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" - [[package]] name = "icu_normalizer" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" dependencies = [ "displaydoc", "icu_collections", @@ -3491,65 +3027,52 @@ dependencies = [ "icu_properties", "icu_provider", "smallvec", - "utf16_iter", - "utf8_iter", - "write16", "zerovec", ] [[package]] name = "icu_normalizer_data" -version = "1.5.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" [[package]] name = "icu_properties" -version = "1.5.1" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" dependencies = [ "displaydoc", "icu_collections", - "icu_locid_transform", + "icu_locale_core", "icu_properties_data", "icu_provider", - "tinystr", + "potential_utf", + "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "1.5.1" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" [[package]] name = "icu_provider" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" dependencies = [ "displaydoc", - "icu_locid", - "icu_provider_macros", + "icu_locale_core", "stable_deref_trait", "tinystr", "writeable", "yoke", "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_provider_macros" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", + "zerotrie", + "zerovec", ] [[package]] @@ -3571,9 +3094,9 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" dependencies = [ "icu_normalizer", "icu_properties", @@ -3589,22 +3112,10 @@ dependencies = [ ] [[package]] -name = "impl-rlp" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808" -dependencies = [ - "rlp", -] - -[[package]] -name = "impl-serde" -version = "0.4.0" +name = "impl-more" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" -dependencies = [ - "serde", -] +checksum = "e8a5a9a0ff0086c7a148acb942baaabeadf9504d10400b5a05645853729b9cd2" [[package]] name = "impl-trait-for-tuples" @@ -3614,7 +3125,7 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] @@ -3623,12 +3134,6 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ee796ad498c8d9a1d68e477df8f754ed784ef875de1414ebdaf169f70a6a784" -[[package]] -name = "indenter" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" - [[package]] name = "indexmap" version = "1.9.3" @@ -3647,28 +3152,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" dependencies = [ "equivalent", - "hashbrown 0.15.3", + "hashbrown 0.15.4", "serde", ] -[[package]] -name = "inout" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" -dependencies = [ - "generic-array", -] - -[[package]] -name = "instant" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" -dependencies = [ - "cfg-if", -] - [[package]] name = "ipnet" version = "2.11.0" @@ -3676,14 +3163,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] -name = "is-terminal" -version = "0.4.16" +name = "iri-string" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" +checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" dependencies = [ - "hermit-abi 0.5.1", - "libc", - "windows-sys 0.59.0", + "memchr", + "serde", ] [[package]] @@ -3701,15 +3187,6 @@ dependencies = [ "either", ] -[[package]] -name = "itertools" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" -dependencies = [ - "either", -] - [[package]] name = "itertools" version = "0.12.1" @@ -3743,13 +3220,37 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +[[package]] +name = "jiff" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49" +dependencies = [ + "jiff-static", + "log", + "portable-atomic", + "portable-atomic-util", + "serde", +] + +[[package]] +name = "jiff-static" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", +] + [[package]] name = "jobserver" version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" dependencies = [ - "getrandom 0.3.2", + "getrandom 0.3.3", "libc", ] @@ -3763,20 +3264,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "jsonwebtoken" -version = "8.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" -dependencies = [ - "base64 0.21.7", - "pem", - "ring 0.16.20", - "serde", - "serde_json", - "simple_asn1", -] - [[package]] name = "k256" version = "0.13.4" @@ -3789,7 +3276,6 @@ dependencies = [ "once_cell", "serdect", "sha2", - "signature", ] [[package]] @@ -3812,34 +3298,10 @@ dependencies = [ ] [[package]] -name = "lalrpop" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cb077ad656299f160924eb2912aa147d7339ea7d69e1b5517326fdcec3c1ca" -dependencies = [ - "ascii-canvas", - "bit-set 0.5.3", - "ena", - "itertools 0.11.0", - "lalrpop-util", - "petgraph", - "regex", - "regex-syntax 0.8.5", - "string_cache", - "term", - "tiny-keccak", - "unicode-xid", - "walkdir", -] - -[[package]] -name = "lalrpop-util" -version = "0.20.2" +name = "language-tags" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "507460a910eb7b32ee961886ff48539633b788a36b65692b95f225b844c82553" -dependencies = [ - "regex-automata 0.4.9", -] +checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" [[package]] name = "lazy-regex" @@ -3861,7 +3323,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] @@ -3870,7 +3332,7 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" dependencies = [ - "spin 0.9.8", + "spin", ] [[package]] @@ -3879,20 +3341,20 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa2acc6dee32b12409446a76b9c1877e5ba9afb36dfcbe96d0ddaf15ca08f18d" dependencies = [ - "hashbrown 0.15.3", + "hashbrown 0.15.4", ] [[package]] name = "libc" -version = "0.2.172" +version = "0.2.174" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" +checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" [[package]] name = "libm" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a25169bd5913a4b437588a7e3d127cd6e90127b60e0ffbd834a38f1599e016b8" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libredox" @@ -3900,7 +3362,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "libc", ] @@ -3924,15 +3386,32 @@ checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" [[package]] name = "litemap" -version = "0.7.5" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" + +[[package]] +name = "local-channel" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6cbc85e69b8df4b8bb8b89ec634e7189099cea8927a276b7384ce5488e53ec8" +dependencies = [ + "futures-core", + "futures-sink", + "local-waker", +] + +[[package]] +name = "local-waker" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" +checksum = "4d873d7c67ce09b42110d801813efbc9364414e356be9935700d368351657487" [[package]] name = "lock_api" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" dependencies = [ "autocfg", "scopeguard", @@ -3950,9 +3429,15 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "227748d55f2f0ab4735d87fd623798cb6b664512fe979705f829c9f81c934465" dependencies = [ - "hashbrown 0.15.3", + "hashbrown 0.15.4", ] +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + [[package]] name = "macro-string" version = "0.1.4" @@ -3961,7 +3446,7 @@ checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] @@ -3984,9 +3469,9 @@ dependencies = [ [[package]] name = "matrixmultiply" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a" +checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08" dependencies = [ "autocfg", "rawpointer", @@ -4000,24 +3485,14 @@ checksum = "5cf92c10c7e361d6b99666ec1c6f9805b0bea2c3bd8c78dc6fe98ac5bd78db11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", -] - -[[package]] -name = "md-5" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" -dependencies = [ - "cfg-if", - "digest 0.10.7", + "syn 2.0.103", ] [[package]] name = "memchr" -version = "2.7.4" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" [[package]] name = "merlin" @@ -4037,7 +3512,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "block", "core-graphics-types", "foreign-types 0.5.0", @@ -4050,10 +3525,13 @@ dependencies = [ name = "methods" version = "0.1.0" dependencies = [ + "alloy-primitives", + "alloy-sol-types", "hex", "risc0-build", "risc0-build-ethereum", "risc0-zkp", + "risc0-zkvm", ] [[package]] @@ -4064,29 +3542,30 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "miniz_oxide" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", ] [[package]] name = "mio" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.52.0", + "log", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.59.0", ] [[package]] name = "multimap" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" +checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084" [[package]] name = "native-tls" @@ -4118,12 +3597,6 @@ dependencies = [ "rawpointer", ] -[[package]] -name = "new_debug_unreachable" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" - [[package]] name = "no_std_strings" version = "0.1.3" @@ -4239,11 +3712,11 @@ dependencies = [ [[package]] name = "num_cpus" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" dependencies = [ - "hermit-abi 0.3.9", + "hermit-abi", "libc", ] @@ -4262,10 +3735,9 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ - "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] @@ -4306,37 +3778,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] -name = "open-fastrlp" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "786393f80485445794f6043fd3138854dd109cc6c4bd1a6383db304c9ce9b9ce" -dependencies = [ - "arrayvec", - "auto_impl", - "bytes", - "ethereum-types", - "open-fastrlp-derive", -] - -[[package]] -name = "open-fastrlp-derive" -version = "0.1.1" +name = "once_cell_polyfill" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "003b2be5c6c53c1cfeb0a238b8a1c3915cd410feb684457a36c10038f764bb1c" -dependencies = [ - "bytes", - "proc-macro2", - "quote", - "syn 1.0.109", -] +checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" [[package]] name = "openssl" -version = "0.10.72" +version = "0.10.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fedfea7d58a1f73118430a55da6a286e7b044961736ce96a16a17068ea25e5da" +checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "cfg-if", "foreign-types 0.3.2", "libc", @@ -4353,7 +3806,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] @@ -4364,9 +3817,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.108" +version = "0.9.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e145e1651e858e820e4860f7b9c5e169bc1d8ce1c86043be79fa7b7634821847" +checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" dependencies = [ "cc", "libc", @@ -4388,9 +3841,9 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "parity-scale-codec" -version = "3.7.4" +version = "3.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9fde3d0718baf5bc92f577d652001da0f8d54cd03a7974e118d04fc888dc23d" +checksum = "799781ae679d79a948e13d4824a40970bfa500058d245760dd857301059810fa" dependencies = [ "arrayvec", "bitvec", @@ -4404,21 +3857,21 @@ dependencies = [ [[package]] name = "parity-scale-codec-derive" -version = "3.7.4" +version = "3.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581c837bb6b9541ce7faa9377c20616e4fb7650f6b0f68bc93c827ee504fb7b3" +checksum = "34b4653168b563151153c9e4c08ebed57fb8262bebfa79711552fa983c623e7a" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] name = "parking_lot" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" dependencies = [ "lock_api", "parking_lot_core", @@ -4426,9 +3879,9 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.10" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" dependencies = [ "cfg-if", "libc", @@ -4437,60 +3890,12 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "password-hash" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" -dependencies = [ - "base64ct", - "rand_core 0.6.4", - "subtle", -] - [[package]] name = "paste" version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" -[[package]] -name = "path-slash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42" - -[[package]] -name = "pbkdf2" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" -dependencies = [ - "digest 0.10.7", - "hmac", - "password-hash", - "sha2", -] - -[[package]] -name = "pbkdf2" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" -dependencies = [ - "digest 0.10.7", - "hmac", -] - -[[package]] -name = "pem" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" -dependencies = [ - "base64 0.13.1", -] - [[package]] name = "percent-encoding" version = "2.3.1" @@ -4499,9 +3904,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "198db74531d58c70a361c42201efde7e2591e976d518caf7662a47dc5720e7b6" +checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323" dependencies = [ "memchr", "thiserror 2.0.12", @@ -4518,58 +3923,6 @@ dependencies = [ "indexmap 2.9.0", ] -[[package]] -name = "pharos" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414" -dependencies = [ - "futures", - "rustc_version 0.4.1", -] - -[[package]] -name = "phf" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" -dependencies = [ - "phf_macros", - "phf_shared", -] - -[[package]] -name = "phf_generator" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" -dependencies = [ - "phf_shared", - "rand 0.8.5", -] - -[[package]] -name = "phf_macros" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" -dependencies = [ - "phf_generator", - "phf_shared", - "proc-macro2", - "quote", - "syn 2.0.101", -] - -[[package]] -name = "phf_shared" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" -dependencies = [ - "siphasher", -] - [[package]] name = "pin-project" version = "1.1.10" @@ -4587,7 +3940,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] @@ -4618,6 +3971,21 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +[[package]] +name = "portable-atomic" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" + +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] + [[package]] name = "postcard" version = "1.1.1" @@ -4630,6 +3998,15 @@ dependencies = [ "serde", ] +[[package]] +name = "potential_utf" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +dependencies = [ + "zerovec", +] + [[package]] name = "powerfmt" version = "0.2.0" @@ -4642,23 +4019,17 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "zerocopy 0.8.25", + "zerocopy", ] -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - [[package]] name = "prettyplease" -version = "0.2.32" +version = "0.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "664ec5419c51e34154eec046ebcba56312d5a2fc3b09a06da188e1ad21afadf6" +checksum = "6837b9e10d61f45f987d50808f83d1ee3d206c66acf650c3e4ae2e1f6ddedf55" dependencies = [ "proc-macro2", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] @@ -4680,9 +4051,6 @@ checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" dependencies = [ "fixed-hash", "impl-codec", - "impl-rlp", - "impl-serde", - "scale-info", "uint", ] @@ -4738,7 +4106,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] @@ -4752,17 +4120,17 @@ dependencies = [ [[package]] name = "proptest" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14cae93065090804185d3b75f0bf93b8eeda30c7a9b4a33d3bdb3988d6229e50" +checksum = "6fcdab19deb5195a31cf7726a210015ff1496ba1464fd42cb4f537b8b01b471f" dependencies = [ - "bit-set 0.8.0", - "bit-vec 0.8.0", - "bitflags 2.9.0", + "bit-set", + "bit-vec", + "bitflags 2.9.1", "lazy_static", "num-traits", - "rand 0.8.5", - "rand_chacha 0.3.1", + "rand 0.9.1", + "rand_chacha 0.9.0", "rand_xorshift", "regex-syntax 0.8.5", "rusty-fork", @@ -4807,7 +4175,7 @@ dependencies = [ "prost 0.12.6", "prost-types", "regex", - "syn 2.0.101", + "syn 2.0.103", "tempfile", ] @@ -4821,7 +4189,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] @@ -4834,7 +4202,7 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] @@ -4854,9 +4222,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quinn" -version = "0.11.7" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3bd15a6f2967aef83887dcb9fec0014580467e33720d073560cf015a5683012" +checksum = "626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8" dependencies = [ "bytes", "cfg_aliases", @@ -4864,7 +4232,7 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash", - "rustls 0.23.27", + "rustls", "socket2", "thiserror 2.0.12", "tokio", @@ -4874,16 +4242,17 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.11" +version = "0.11.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcbafbbdbb0f638fe3f35f3c56739f77a8a1d070cb25603226c83339b391472b" +checksum = "49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e" dependencies = [ "bytes", - "getrandom 0.3.2", + "getrandom 0.3.3", + "lru-slab", "rand 0.9.1", - "ring 0.17.14", + "ring", "rustc-hash", - "rustls 0.23.27", + "rustls", "rustls-pki-types", "slab", "thiserror 2.0.12", @@ -4917,9 +4286,9 @@ dependencies = [ [[package]] name = "r-efi" -version = "5.2.0" +version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] name = "radium" @@ -4947,6 +4316,7 @@ checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.3", + "serde", ] [[package]] @@ -4984,16 +4354,17 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ - "getrandom 0.3.2", + "getrandom 0.3.3", + "serde", ] [[package]] name = "rand_xorshift" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" dependencies = [ - "rand_core 0.6.4", + "rand_core 0.9.3", ] [[package]] @@ -5024,11 +4395,11 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.12" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" +checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", ] [[package]] @@ -5042,6 +4413,26 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "ref-cast" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", +] + [[package]] name = "regex" version = "1.11.1" @@ -5074,6 +4465,12 @@ dependencies = [ "regex-syntax 0.8.5", ] +[[package]] +name = "regex-lite" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53a49587ad06b26609c52e423de037e7f57f20d53535d66e08c695f347df952a" + [[package]] name = "regex-syntax" version = "0.6.29" @@ -5088,92 +4485,50 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" -version = "0.11.27" +version = "0.12.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +checksum = "eabf4c97d9130e2bf606614eb937e86edac8292eaa6f422f995d7e8de1eb1813" dependencies = [ - "base64 0.21.7", + "base64", "bytes", "encoding_rs", - "futures-core", - "futures-util", - "h2", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.32", - "hyper-rustls 0.24.2", - "ipnet", - "js-sys", - "log", - "mime", - "once_cell", - "percent-encoding", - "pin-project-lite", - "rustls 0.21.12", - "rustls-pemfile 1.0.4", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper 0.1.2", - "system-configuration", - "tokio", - "tokio-rustls 0.24.1", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "webpki-roots 0.25.4", - "winreg", -] - -[[package]] -name = "reqwest" -version = "0.12.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d19c46a6fdd48bc4dab94b6103fccc55d34c67cc0ad04653aad4ea2a07cd7bbb" -dependencies = [ - "base64 0.22.1", - "bytes", "futures-channel", "futures-core", "futures-util", + "h2 0.4.10", "http 1.3.1", - "http-body 1.0.1", + "http-body", "http-body-util", - "hyper 1.6.0", - "hyper-rustls 0.27.5", + "hyper", + "hyper-rustls", "hyper-tls", "hyper-util", - "ipnet", "js-sys", "log", "mime", "native-tls", - "once_cell", "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.27", - "rustls-pemfile 2.2.0", + "rustls", "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", - "sync_wrapper 1.0.2", + "sync_wrapper", "tokio", "tokio-native-tls", - "tokio-rustls 0.26.2", + "tokio-rustls", "tokio-util", "tower", + "tower-http", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots 0.26.11", - "windows-registry", + "webpki-roots", ] [[package]] @@ -5186,21 +4541,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "ring" -version = "0.16.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" -dependencies = [ - "cc", - "libc", - "once_cell", - "spin 0.5.2", - "untrusted 0.7.1", - "web-sys", - "winapi", -] - [[package]] name = "ring" version = "0.17.14" @@ -5211,19 +4551,10 @@ dependencies = [ "cfg-if", "getrandom 0.2.16", "libc", - "untrusted 0.9.0", + "untrusted", "windows-sys 0.52.0", ] -[[package]] -name = "ripemd" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" -dependencies = [ - "digest 0.10.7", -] - [[package]] name = "risc0-binfmt" version = "2.0.1" @@ -5232,7 +4563,7 @@ checksum = "f4fe7599ac55ad77515608ec42a9727001559fe4f579c533cb7c973b54800c05" dependencies = [ "anyhow", "borsh", - "derive_more 2.0.1", + "derive_more", "elf", "lazy_static", "postcard", @@ -5245,12 +4576,12 @@ dependencies = [ [[package]] name = "risc0-build" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31d104165340cba919a3dac26c4be7da04b20b941601a7ad50c04834c4d26de5" +checksum = "d17d6657b1fb615c0482bd4b57aae7850911ed7dbdc8e783df20e93f33209a8f" dependencies = [ "anyhow", - "cargo_metadata 0.19.2", + "cargo_metadata", "derive_builder", "dirs", "docker-generate", @@ -5269,8 +4600,8 @@ dependencies = [ [[package]] name = "risc0-build-ethereum" -version = "2.0.0" -source = "git+https://github.com/risc0/risc0-ethereum?tag=v2.0.0#38591d7a1302d437b76937bd3e0432005b33f616" +version = "2.2.0" +source = "git+https://github.com/risc0/risc0-ethereum?tag=v2.2.0#382d76a8040068243a5d13e3de50fcca4224b0d6" dependencies = [ "anyhow", "bytemuck", @@ -5282,9 +4613,9 @@ dependencies = [ [[package]] name = "risc0-circuit-keccak" -version = "2.0.1" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd8acfc84307ed1be64cf9fefc390963fc22b2865d027f03405977a0cfa9747" +checksum = "8d339c65b0e011677404bd6bdfe1b0f29748187a568fb2f74df7fb650590181a" dependencies = [ "anyhow", "bytemuck", @@ -5298,9 +4629,9 @@ dependencies = [ [[package]] name = "risc0-circuit-recursion" -version = "2.0.1" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd1514e94440e2da301f48d345e1937b315147f58c5dc4992feb045324651d" +checksum = "8c6501fd3936aea2dd3e55915f34328fe96e6ca25ef00320242f837ae668785b" dependencies = [ "anyhow", "bytemuck", @@ -5313,14 +4644,14 @@ dependencies = [ [[package]] name = "risc0-circuit-rv32im" -version = "2.0.3" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f6ed144d8b8f93c4a6096e3dd90f9dcbd91eff83eae690a72fd6e640760b94" +checksum = "c80e0a8f0f56106295bb682dbc27093438e163a5f6384a79e877ab895a11d9ae" dependencies = [ "anyhow", - "bit-vec 0.8.0", + "bit-vec", "bytemuck", - "derive_more 2.0.1", + "derive_more", "paste", "risc0-binfmt", "risc0-core", @@ -5342,11 +4673,11 @@ dependencies = [ [[package]] name = "risc0-ethereum-contracts" -version = "2.0.0" -source = "git+https://github.com/risc0/risc0-ethereum?tag=v2.0.0#38591d7a1302d437b76937bd3e0432005b33f616" +version = "2.2.0" +source = "git+https://github.com/risc0/risc0-ethereum?tag=v2.2.0#382d76a8040068243a5d13e3de50fcca4224b0d6" dependencies = [ "alloy", - "alloy-sol-types 0.8.25", + "alloy-sol-types", "anyhow", "cfg-if", "risc0-zkvm", @@ -5412,9 +4743,9 @@ dependencies = [ [[package]] name = "risc0-zkvm" -version = "2.0.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a049319790277845335445b549d49e66341f4a7ffba7f7aaa1e77e2fc4a9c19" +checksum = "0f1014d2efcb3b359aff878c9aeb6aa949a6d91f091a2ffb5ffd8d928a1ab7f3" dependencies = [ "anyhow", "bincode", @@ -5422,7 +4753,7 @@ dependencies = [ "borsh", "bytemuck", "bytes", - "derive_more 2.0.1", + "derive_more", "getrandom 0.2.16", "hex", "lazy-regex", @@ -5456,7 +4787,7 @@ dependencies = [ "bytemuck", "cfg-if", "getrandom 0.2.16", - "getrandom 0.3.2", + "getrandom 0.3.3", "libm", "stability", ] @@ -5468,21 +4799,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" dependencies = [ "bytes", - "rlp-derive", "rustc-hex", ] -[[package]] -name = "rlp-derive" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "rrs-lib" version = "0.1.0" @@ -5495,9 +4814,9 @@ dependencies = [ [[package]] name = "ruint" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78a46eb779843b2c4f21fac5773e25d6d5b7c8f0922876c91541790d2ca27eef" +checksum = "11256b5fe8c68f56ac6f39ef0720e592f33d2367a4782740d9c9142e889c7fb4" dependencies = [ "alloy-rlp", "ark-ff 0.3.0", @@ -5528,9 +4847,9 @@ checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" [[package]] name = "rustc-demangle" -version = "0.1.24" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" [[package]] name = "rustc-hash" @@ -5568,7 +4887,7 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "errno", "libc", "linux-raw-sys", @@ -5577,83 +4896,44 @@ dependencies = [ [[package]] name = "rustls" -version = "0.21.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" -dependencies = [ - "log", - "ring 0.17.14", - "rustls-webpki 0.101.7", - "sct", -] - -[[package]] -name = "rustls" -version = "0.23.27" +version = "0.23.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "730944ca083c1c233a75c09f199e973ca499344a2b7ba9e755c457e86fb4a321" +checksum = "7160e3e10bf4535308537f3c4e1641468cd0e485175d6163087c0393c7d46643" dependencies = [ "once_cell", - "ring 0.17.14", + "ring", "rustls-pki-types", - "rustls-webpki 0.103.2", + "rustls-webpki", "subtle", "zeroize", ] -[[package]] -name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64 0.21.7", -] - -[[package]] -name = "rustls-pemfile" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" -dependencies = [ - "rustls-pki-types", -] - [[package]] name = "rustls-pki-types" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" +checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" dependencies = [ "web-time", + "zeroize", ] [[package]] name = "rustls-webpki" -version = "0.101.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" -dependencies = [ - "ring 0.17.14", - "untrusted 0.9.0", -] - -[[package]] -name = "rustls-webpki" -version = "0.103.2" +version = "0.103.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7149975849f1abb3832b246010ef62ccc80d3a76169517ada7188252b9cfb437" +checksum = "e4a72fe2bcf7a6ac6fd7d0b9e5cb68aeb7d4c0a0271730218b3e92d43b4eb435" dependencies = [ - "ring 0.17.14", + "ring", "rustls-pki-types", - "untrusted 0.9.0", + "untrusted", ] [[package]] name = "rustversion" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" [[package]] name = "rusty-fork" @@ -5688,48 +4968,6 @@ dependencies = [ "yaml-rust2", ] -[[package]] -name = "salsa20" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" -dependencies = [ - "cipher", -] - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "scale-info" -version = "2.11.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "346a3b32eba2640d17a9cb5927056b08f3de90f65b72fe09402c2ad07d684d0b" -dependencies = [ - "cfg-if", - "derive_more 1.0.0", - "parity-scale-codec", - "scale-info-derive", -] - -[[package]] -name = "scale-info-derive" -version = "2.11.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6630024bf739e2179b91fb424b28898baf819414262c5d376677dbff1fe7ebf" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.101", -] - [[package]] name = "schannel" version = "0.1.27" @@ -5740,32 +4978,22 @@ dependencies = [ ] [[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "scrypt" -version = "0.10.0" +name = "schemars" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45d" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" dependencies = [ - "hmac", - "pbkdf2 0.11.0", - "salsa20", - "sha2", + "dyn-clone", + "ref-cast", + "serde", + "serde_json", ] [[package]] -name = "sct" -version = "0.7.1" +name = "scopeguard" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring 0.17.14", - "untrusted 0.9.0", -] +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sec1" @@ -5782,13 +5010,34 @@ dependencies = [ "zeroize", ] +[[package]] +name = "secp256k1" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b50c5943d326858130af85e049f2661ba3c78b26589b8ab98e65e80ae44a1252" +dependencies = [ + "bitcoin_hashes", + "rand 0.8.5", + "secp256k1-sys", + "serde", +] + +[[package]] +name = "secp256k1-sys" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4387882333d3aa8cb20530a17c69a3752e97837832f34f6dccc760e715001d9" +dependencies = [ + "cc", +] + [[package]] name = "security-framework" version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "core-foundation", "core-foundation-sys", "libc", @@ -5832,18 +5081,6 @@ dependencies = [ "pest", ] -[[package]] -name = "send_wrapper" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f638d531eccd6e23b980caf34876660d38e265409d8e99b397ab71eb3612fad0" - -[[package]] -name = "send_wrapper" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" - [[package]] name = "serde" version = "1.0.219" @@ -5861,7 +5098,7 @@ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] @@ -5878,9 +5115,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.8" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" dependencies = [ "serde", ] @@ -5899,15 +5136,16 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.12.0" +version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa" +checksum = "bf65a400f8f66fb7b0552869ad70157166676db75ed8181f8104ea91cf9d0b42" dependencies = [ - "base64 0.22.1", + "base64", "chrono", "hex", "indexmap 1.9.3", "indexmap 2.9.0", + "schemars", "serde", "serde_derive", "serde_json", @@ -5917,14 +5155,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.12.0" +version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e" +checksum = "81679d9ed988d5e9a5e6531dc3f2c28efbd639cbd1dfb628df08edea6004da77" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] @@ -6013,72 +5251,31 @@ dependencies = [ "rand_core 0.6.4", ] -[[package]] -name = "simple_asn1" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" -dependencies = [ - "num-bigint", - "num-traits", - "thiserror 2.0.12", - "time", -] - -[[package]] -name = "siphasher" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" - [[package]] name = "slab" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] +checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" [[package]] name = "smallvec" -version = "1.15.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" dependencies = [ "serde", ] [[package]] name = "socket2" -version = "0.5.9" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" dependencies = [ "libc", "windows-sys 0.52.0", ] -[[package]] -name = "solang-parser" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c425ce1c59f4b154717592f0bdf4715c3a1d55058883622d3157e1f0908a5b26" -dependencies = [ - "itertools 0.11.0", - "lalrpop", - "lalrpop-util", - "phf", - "thiserror 1.0.69", - "unicode-xid", -] - -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - [[package]] name = "spin" version = "0.9.8" @@ -6102,7 +5299,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d904e7009df136af5297832a3ace3370cd14ff1546a232f4f185036c2736fcac" dependencies = [ "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] @@ -6117,18 +5314,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" -[[package]] -name = "string_cache" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" -dependencies = [ - "new_debug_unreachable", - "parking_lot", - "phf_shared", - "precomputed-hash", -] - [[package]] name = "strsim" version = "0.11.1" @@ -6163,7 +5348,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] @@ -6176,7 +5361,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] @@ -6185,26 +5370,6 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" -[[package]] -name = "svm-rs" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11297baafe5fa0c99d5722458eac6a5e25c01eb1b8e5cd137f54079093daa7a4" -dependencies = [ - "dirs", - "fs2", - "hex", - "once_cell", - "reqwest 0.11.27", - "semver 1.0.26", - "serde", - "serde_json", - "sha2", - "thiserror 1.0.69", - "url", - "zip", -] - [[package]] name = "syn" version = "1.0.109" @@ -6218,9 +5383,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.101" +version = "2.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" +checksum = "e4307e30089d6fd6aff212f2da3a1f9e32f3223b1f010fb09b7c95f90f3ca1e8" dependencies = [ "proc-macro2", "quote", @@ -6229,34 +5394,16 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb3d0961cd53c23ea94eeec56ba940f636f6394788976e9f16ca5ee0aca7464a" -dependencies = [ - "paste", - "proc-macro2", - "quote", - "syn 2.0.101", -] - -[[package]] -name = "syn-solidity" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4560533fbd6914b94a8fb5cc803ed6801c3455668db3b810702c57612bac9412" +checksum = "14c8c8f496c33dc6343dac05b4be8d9e0bca180a4caa81d7b8416b10cc2273cd" dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] -[[package]] -name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - [[package]] name = "sync_wrapper" version = "1.0.2" @@ -6274,25 +5421,25 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] name = "system-configuration" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.9.1", "core-foundation", "system-configuration-sys", ] [[package]] name = "system-configuration-sys" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" dependencies = [ "core-foundation-sys", "libc", @@ -6302,39 +5449,19 @@ dependencies = [ name = "tap" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - -[[package]] -name = "tempfile" -version = "3.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" -dependencies = [ - "fastrand", - "getrandom 0.3.2", - "once_cell", - "rustix", - "windows-sys 0.59.0", -] - -[[package]] -name = "term" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" -dependencies = [ - "dirs-next", - "rustversion", - "winapi", -] +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] -name = "termcolor" -version = "1.4.1" +name = "tempfile" +version = "3.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" dependencies = [ - "winapi-util", + "fastrand", + "getrandom 0.3.3", + "once_cell", + "rustix", + "windows-sys 0.59.0", ] [[package]] @@ -6363,7 +5490,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] @@ -6374,17 +5501,16 @@ checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] name = "thread_local" -version = "1.1.8" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" dependencies = [ "cfg-if", - "once_cell", ] [[package]] @@ -6438,9 +5564,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.7.6" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" dependencies = [ "displaydoc", "zerovec", @@ -6463,9 +5589,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.45.0" +version = "1.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2513ca694ef9ede0fb23fe71a4ee4107cb102b9dc1930f6d0fd77aae068ae165" +checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" dependencies = [ "backtrace", "bytes", @@ -6487,7 +5613,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] @@ -6500,23 +5626,13 @@ dependencies = [ "tokio", ] -[[package]] -name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" -dependencies = [ - "rustls 0.21.12", - "tokio", -] - [[package]] name = "tokio-rustls" version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" dependencies = [ - "rustls 0.23.27", + "rustls", "tokio", ] @@ -6532,21 +5648,6 @@ dependencies = [ "tokio-util", ] -[[package]] -name = "tokio-tungstenite" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" -dependencies = [ - "futures-util", - "log", - "rustls 0.21.12", - "tokio", - "tokio-rustls 0.24.1", - "tungstenite", - "webpki-roots 0.25.4", -] - [[package]] name = "tokio-util" version = "0.7.15" @@ -6562,9 +5663,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.22" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ae329d1f08c4d17a59bed7ff5b5a769d062e64a62d34a3261b219e62cd5aae" +checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ "serde", "serde_spanned", @@ -6574,18 +5675,18 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.9" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" dependencies = [ "serde", ] [[package]] name = "toml_edit" -version = "0.22.26" +version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ "indexmap 2.9.0", "serde", @@ -6597,9 +5698,9 @@ dependencies = [ [[package]] name = "toml_write" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfb942dfe1d8e29a7ee7fcbde5bd2b9a25fb89aa70caea2eba3bee836ff41076" +checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] name = "tower" @@ -6610,12 +5711,30 @@ dependencies = [ "futures-core", "futures-util", "pin-project-lite", - "sync_wrapper 1.0.2", + "sync_wrapper", "tokio", "tower-layer", "tower-service", ] +[[package]] +name = "tower-http" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +dependencies = [ + "bitflags 2.9.1", + "bytes", + "futures-util", + "http 1.3.1", + "http-body", + "iri-string", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", +] + [[package]] name = "tower-layer" version = "0.3.3" @@ -6642,20 +5761,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.28" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] name = "tracing-core" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" dependencies = [ "once_cell", "valuable", @@ -6717,26 +5836,6 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" -[[package]] -name = "tungstenite" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" -dependencies = [ - "byteorder", - "bytes", - "data-encoding", - "http 0.2.12", - "httparse", - "log", - "rand 0.8.5", - "rustls 0.21.12", - "sha1", - "thiserror 1.0.69", - "url", - "utf-8", -] - [[package]] name = "typenum" version = "1.18.0" @@ -6779,12 +5878,6 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" -[[package]] -name = "untrusted" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" - [[package]] name = "untrusted" version = "0.9.0" @@ -6802,18 +5895,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - -[[package]] -name = "utf16_iter" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" - [[package]] name = "utf8_iter" version = "1.0.4" @@ -6826,16 +5907,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" -[[package]] -name = "uuid" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" -dependencies = [ - "getrandom 0.2.16", - "serde", -] - [[package]] name = "valuable" version = "0.1.1" @@ -6854,43 +5925,6 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" -[[package]] -name = "voting-core" -version = "0.1.0" -dependencies = [ - "commons", - "compute-provider", - "fhe", - "fhe-traits", -] - -[[package]] -name = "voting-host" -version = "0.1.0" -dependencies = [ - "alloy-primitives 0.8.25", - "alloy-sol-types 0.6.4", - "anyhow", - "bincode", - "bytemuck", - "clap", - "compute-provider", - "env_logger", - "ethers", - "fhe", - "fhe-traits", - "fhe-util", - "log", - "methods", - "rand 0.8.5", - "risc0-ethereum-contracts", - "risc0-zkvm", - "serde", - "tokio", - "tracing-subscriber 0.3.19", - "voting-core", -] - [[package]] name = "wait-timeout" version = "0.2.1" @@ -6900,16 +5934,6 @@ dependencies = [ "libc", ] -[[package]] -name = "walkdir" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" -dependencies = [ - "same-file", - "winapi-util", -] - [[package]] name = "want" version = "0.3.1" @@ -6921,9 +5945,9 @@ dependencies = [ [[package]] name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" @@ -6956,7 +5980,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", "wasm-bindgen-shared", ] @@ -6991,7 +6015,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -7020,9 +6044,9 @@ dependencies = [ [[package]] name = "wasmtimer" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0048ad49a55b9deb3953841fa1fc5858f0efbcb7a18868c899a360269fac1b23" +checksum = "d8d49b5d6c64e8558d9b1b065014426f35c18de636895d24893dbbd329743446" dependencies = [ "futures", "js-sys", @@ -7052,21 +6076,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "webpki-roots" -version = "0.25.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" - -[[package]] -name = "webpki-roots" -version = "0.26.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" -dependencies = [ - "webpki-roots 1.0.0", -] - [[package]] name = "webpki-roots" version = "1.0.0" @@ -7092,15 +6101,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -[[package]] -name = "winapi-util" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" -dependencies = [ - "windows-sys 0.59.0", -] - [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" @@ -7109,15 +6109,15 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-core" -version = "0.61.0" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ "windows-implement", "windows-interface", "windows-link", "windows-result", - "windows-strings 0.4.0", + "windows-strings", ] [[package]] @@ -7128,7 +6128,7 @@ checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] @@ -7139,49 +6139,40 @@ checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] name = "windows-link" -version = "0.1.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" [[package]] name = "windows-registry" -version = "0.4.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3" +checksum = "b3bab093bdd303a1240bb99b8aba8ea8a69ee19d34c9e2ef9594e708a4878820" dependencies = [ + "windows-link", "windows-result", - "windows-strings 0.3.1", - "windows-targets 0.53.0", + "windows-strings", ] [[package]] name = "windows-result" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252" -dependencies = [ - "windows-link", -] - -[[package]] -name = "windows-strings" -version = "0.3.1" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ "windows-link", ] [[package]] name = "windows-strings" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ "windows-link", ] @@ -7237,29 +6228,13 @@ dependencies = [ "windows_aarch64_gnullvm 0.52.6", "windows_aarch64_msvc 0.52.6", "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm 0.52.6", + "windows_i686_gnullvm", "windows_i686_msvc 0.52.6", "windows_x86_64_gnu 0.52.6", "windows_x86_64_gnullvm 0.52.6", "windows_x86_64_msvc 0.52.6", ] -[[package]] -name = "windows-targets" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1e4c7e8ceaaf9cb7d7507c974735728ab453b67ef8f18febdd7c11fe59dca8b" -dependencies = [ - "windows_aarch64_gnullvm 0.53.0", - "windows_aarch64_msvc 0.53.0", - "windows_i686_gnu 0.53.0", - "windows_i686_gnullvm 0.53.0", - "windows_i686_msvc 0.53.0", - "windows_x86_64_gnu 0.53.0", - "windows_x86_64_gnullvm 0.53.0", - "windows_x86_64_msvc 0.53.0", -] - [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" @@ -7272,12 +6247,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" - [[package]] name = "windows_aarch64_msvc" version = "0.48.5" @@ -7290,12 +6259,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" -[[package]] -name = "windows_aarch64_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" - [[package]] name = "windows_i686_gnu" version = "0.48.5" @@ -7308,24 +6271,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" -[[package]] -name = "windows_i686_gnu" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" - [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" -[[package]] -name = "windows_i686_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" - [[package]] name = "windows_i686_msvc" version = "0.48.5" @@ -7338,12 +6289,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" -[[package]] -name = "windows_i686_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" - [[package]] name = "windows_x86_64_gnu" version = "0.48.5" @@ -7356,12 +6301,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" -[[package]] -name = "windows_x86_64_gnu" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" - [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" @@ -7374,12 +6313,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" - [[package]] name = "windows_x86_64_msvc" version = "0.48.5" @@ -7392,70 +6325,29 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" -[[package]] -name = "windows_x86_64_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" - [[package]] name = "winnow" -version = "0.7.9" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9fb597c990f03753e08d3c29efbfcf2019a003b4bf4ba19225c158e1549f0f3" +checksum = "74c7b26e3480b707944fc872477815d29a8e429d2f93a1ce000f5fa84a15cbcd" dependencies = [ "memchr", ] -[[package]] -name = "winreg" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - [[package]] name = "wit-bindgen-rt" version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", ] -[[package]] -name = "write16" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" - [[package]] name = "writeable" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" - -[[package]] -name = "ws_stream_wasm" -version = "0.7.4" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7999f5f4217fe3818726b66257a4475f71e74ffd190776ad053fa159e50737f5" -dependencies = [ - "async_io_stream", - "futures", - "js-sys", - "log", - "pharos", - "rustc_version 0.4.1", - "send_wrapper 0.6.0", - "thiserror 1.0.69", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" [[package]] name = "wyz" @@ -7477,17 +6369,11 @@ dependencies = [ "hashlink", ] -[[package]] -name = "yansi" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" - [[package]] name = "yoke" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" dependencies = [ "serde", "stable_deref_trait", @@ -7497,54 +6383,34 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", "synstructure", ] [[package]] name = "zerocopy" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" -dependencies = [ - "zerocopy-derive 0.7.35", -] - -[[package]] -name = "zerocopy" -version = "0.8.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" -dependencies = [ - "zerocopy-derive 0.8.25", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.35" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", + "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" +checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] @@ -7564,7 +6430,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", "synstructure", ] @@ -7585,67 +6451,57 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.103", ] [[package]] -name = "zerovec" -version = "0.10.4" +name = "zerotrie" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" dependencies = [ + "displaydoc", "yoke", "zerofrom", - "zerovec-derive", ] [[package]] -name = "zerovec-derive" -version = "0.10.3" +name = "zerovec" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", + "yoke", + "zerofrom", + "zerovec-derive", ] [[package]] -name = "zip" -version = "0.6.6" +name = "zerovec-derive" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ - "aes", - "byteorder", - "bzip2", - "constant_time_eq", - "crc32fast", - "crossbeam-utils", - "flate2", - "hmac", - "pbkdf2 0.11.0", - "sha1", - "time", - "zstd", + "proc-macro2", + "quote", + "syn 2.0.103", ] [[package]] name = "zstd" -version = "0.11.2+zstd.1.5.2" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" +checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" dependencies = [ "zstd-safe", ] [[package]] name = "zstd-safe" -version = "5.0.2+zstd.1.5.2" +version = "7.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" dependencies = [ - "libc", "zstd-sys", ] diff --git a/crates/support/Cargo.toml b/crates/support/Cargo.toml new file mode 100644 index 0000000000..93b21745f7 --- /dev/null +++ b/crates/support/Cargo.toml @@ -0,0 +1,48 @@ +[workspace] +resolver = "2" +members = ["app", "host", "methods", "types"] +exclude = ["methods/guest"] + +[workspace.package] +version = "0.1.0" +edition = "2021" + +[workspace.dependencies] +e3-support-app = { path = "./app" } +e3-support-host = { path = "./host" } +e3-user-program = { path = "./program" } +e3-support-types = { path = "./types" } +methods = { path = "./methods" } +alloy-primitives = { version = "1.0", default-features = false, features = [ + "rlp", + "serde", + "std", +]} +alloy-sol-types = { version = "1.0" } +anyhow = { version = "1.0.86" } +actix-web = "4.10.2" +bincode = { version = "1.3.3" } +bytemuck = { version = "1" } +env_logger = "0.11.5" +hex = { version = "0.4.3" } +log = { version = "0.4" } +reqwest = { version = "0.12.15", features = ["json"] } +risc0-build = { version = "2.1.2", features = ["docker"] } +risc0-build-ethereum = { git = "https://github.com/risc0/risc0-ethereum", tag = "v2.2.0" } +risc0-ethereum-contracts = { git = "https://github.com/risc0/risc0-ethereum", tag = "v2.2.0" } +risc0-zkvm = { version = "2.1.0" } +risc0-zkp = { version = "2.0.1", default-features = false } +serde = { version = "1.0.208", features = ["derive", "std"] } +serde_json = "1.0.133" +fhe_rs = { package = "fhe", git = "https://github.com/gnosisguild/fhe.rs" } +fhe-traits = { git = "https://github.com/gnosisguild/fhe.rs" } +fhe-util = { git = "https://github.com/gnosisguild/fhe.rs" } +e3-compute-provider = { git = "https://github.com/gnosisguild/enclave", rev = "2ca0aa5f47dd962add5d1d0f74900d9bceb957e5" } +tokio = { version = "1.38", features = ["full"] } +rand = { version = "0.8.5" } +tracing-subscriber = { version = "0.3", features = ["env-filter"] } + +[profile.release] +debug = 1 +lto = true + diff --git a/crates/support/Dockerfile b/crates/support/Dockerfile new file mode 100644 index 0000000000..749c6eb105 --- /dev/null +++ b/crates/support/Dockerfile @@ -0,0 +1,50 @@ +ARG RUST_VERSION=1.85.0 +ARG RISC0_VERSION=2.1.0 +ARG SKIP_SOLIDITY=0 +FROM rust:${RUST_VERSION}-slim-bookworm AS base-dev + +ENV CARGO_HOME=/usr/local/cargo +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + build-essential \ + cmake \ + pkg-config \ + git \ + libssl-dev \ + curl \ + sudo \ + ca-certificates && \ + rm -rf /var/lib/apt/lists/* + +# Create user +ENV USERNAME=devuser +ARG USER_UID=1000 +ARG USER_GID=1000 + +RUN groupadd --gid $USER_GID $USERNAME \ + && useradd --uid $USER_UID --gid $USER_GID -m $USERNAME \ + && echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \ + && chmod 0440 /etc/sudoers.d/$USERNAME + +USER $USERNAME +WORKDIR /home/$USERNAME + +ENV SHELL=/bin/bash + +ENV PATH="/home/${USERNAME}/.risc0/bin:${PATH}" +RUN curl -L https://risczero.com/install | bash +RUN rzup install rust ${RUST_VERSION} +RUN rzup install r0vm ${RISC0_VERSION} +RUN rzup install cargo-risczero ${RISC0_VERSION} + +ENV PATH="/home/${USERNAME}/.foundry/bin:${PATH}" +RUN curl -L https://foundry.paradigm.xyz | bash +RUN foundryup + +COPY . /app + +RUN sudo chown -R $USERNAME:$USERNAME /app + +WORKDIR /app + +CMD ["/bin/bash"] diff --git a/crates/support/README.md b/crates/support/README.md new file mode 100644 index 0000000000..4c04b9c147 --- /dev/null +++ b/crates/support/README.md @@ -0,0 +1,46 @@ +This is a project to build the support container to allow risc0 to be run within docker by `enclave program start` + +The conatiner is built using the github workflow [here](../../.github/workflows/support-docker.yml) +You can also build it locally by using the `./scripts/build.sh` script. + +To develop on this you should log into the container by running `./scripts/dev.sh` and then you can run `cargo build` with access to the risc0 environment. + +```mermaid +graph TD + subgraph N["e3-support-scripts"] + A["enclave program start"] + AA["./.enclave/support/ctl/start"] + A --> AA + end + M["instigator"] --"http\:\/\/localhost\:13151\/run_compute (cb in payload)"--> D + D --"http\:\/\/someurl.com"--> O["callback server receives results"] + AA --listen on port 13151--> D + subgraph C["e3-support (container)"] + D["app"] + E["host"] + F["types"] + G["compute-provider"] + H["methods (risc0)"] + I["guest (risc0)"] + J["user-program"] + + D --> E + D --> F + D --> G + + E --> H + E --> G + E --> J + + H --> I + + I --> G + I --> J + end +``` + +NOTE: This is outside of the main workspace because it needs to be run within it's own context in order to isolate risc0. + +NOTE: We are attempting to isolate risc0 - it is anticipated that we will have to use feature flags to tody this up so that we can compile more of the code and enable rust-analyzer to work outside of the risc0 environment for this project. + +**NOTE: currently this is an open relay which is a known issue** diff --git a/crates/support/app/Cargo.toml b/crates/support/app/Cargo.toml new file mode 100644 index 0000000000..2a14b4dd3f --- /dev/null +++ b/crates/support/app/Cargo.toml @@ -0,0 +1,24 @@ +[package] +name = "e3-support-app" +version = "0.1.0" +edition.workspace = true + +[dependencies] +actix-web.workspace = true +env_logger.workspace = true +serde.workspace = true +serde_json.workspace = true +tokio.workspace = true +e3-compute-provider.workspace = true +e3-support-types.workspace = true +reqwest.workspace = true +anyhow.workspace = true +hex.workspace = true + +[dependencies.e3-support-host] +workspace = true +optional = true + +[features] +default = ["risc0"] +risc0 = ["e3-support-host"] diff --git a/crates/support/app/src/main.rs b/crates/support/app/src/main.rs new file mode 100644 index 0000000000..da35901ed0 --- /dev/null +++ b/crates/support/app/src/main.rs @@ -0,0 +1,130 @@ +use actix_web::{middleware::Logger, web, App, HttpResponse, HttpServer, Result as ActixResult}; +use e3_compute_provider::FHEInputs; +use e3_support_types::{ComputeRequest, WebhookPayload}; +use serde::Serialize; + +#[derive(Serialize, Debug)] +struct ProcessingResponse { + status: String, + e3_id: u64, +} + +async fn call_webhook( + callback_url: &str, + e3_id: u64, + proof: Vec, + ciphertext: Vec, +) -> anyhow::Result<()> { + println!("call_webhook()"); + let payload = WebhookPayload { + e3_id, + ciphertext, + proof, + }; + println!("callback_url: {}", callback_url); + println!("payload: {:?}", payload); + reqwest::Client::new() + .post(callback_url) + .json(&payload) + .send() + .await? + .error_for_status()?; + println!("✓ Webhook called successfully for E3 {}", e3_id); + Ok(()) +} + +#[cfg(feature = "risc0")] +async fn run_computation_async(fhe_inputs: FHEInputs) -> anyhow::Result<(Vec, Vec)> { + println!("running computation..."); + let (risc0_output, ciphertext) = + tokio::task::spawn_blocking(move || e3_support_host::run_compute(fhe_inputs)).await??; + println!("have result from computation!"); + let proof: Vec = risc0_output.seal.into(); + Ok((proof, ciphertext)) +} + +#[cfg(not(feature = "risc0"))] +async fn run_computation_async(fhe_inputs: FHEInputs) -> anyhow::Result<(Vec, Vec)> { + println!("NOOP: risc0 feature not enabled, skipping actual computation"); + // Return dummy data + Ok((vec![0u8; 32], vec![1u8; 64])) +} + +async fn handle_webhook_delivery( + e3_id: u64, + callback_url: &str, + proof: Vec, + ciphertext: Vec, +) -> anyhow::Result<()> { + println!("handle_webhook_delivery()"); + call_webhook(callback_url, e3_id, proof, ciphertext).await?; + println!("✓ Webhook sent successfully for E3 {}", e3_id); + Ok(()) +} + +async fn process_computation_background( + e3_id: u64, + callback_url: &str, + fhe_inputs: FHEInputs, +) -> anyhow::Result<()> { + let (proof, ciphertext) = run_computation_async(fhe_inputs).await?; + println!("computation finished!"); + println!("handling webhook delivery..."); + handle_webhook_delivery(e3_id, callback_url, proof, ciphertext).await?; + println!("✓ Computation completed for E3 {}", e3_id); + Ok(()) +} + +async fn handle_compute(req: web::Json) -> ActixResult { + println!("Processing computation..."); + let e3_id = req + .e3_id + .ok_or_else(|| actix_web::error::ErrorBadRequest("e3_id is required"))?; + let callback_url = req + .callback_url + .clone() + .ok_or_else(|| actix_web::error::ErrorBadRequest("callback_url is required"))?; + let fhe_inputs = FHEInputs { + params: req.params.clone(), + ciphertexts: req.ciphertext_inputs.clone(), + }; + + println!("fhe_inputs.params = {:?}", fhe_inputs.params); + let callback_url = callback_url + .replace("localhost", "host.local") + .replace("127.0.0.1", "host.local"); + + // Process computation in background + tokio::spawn(async move { + if let Err(e) = process_computation_background(e3_id, &callback_url, fhe_inputs).await { + eprintln!("✗ Background computation failed for E3 {}: {:?}", e3_id, e); + } + }); + Ok(HttpResponse::Ok().json(ProcessingResponse { + status: "processing".to_string(), + e3_id, + })) +} + +async fn handle_health_check() -> ActixResult { + Ok(HttpResponse::Ok().json(ProcessingResponse { + status: "healthy".to_string(), + e3_id: 0, + })) +} + +#[actix_web::main] +async fn main() -> anyhow::Result<()> { + env_logger::init(); + let bind_addr = "0.0.0.0:13151"; + let server = HttpServer::new(move || { + App::new() + .wrap(Logger::default()) + .route("/run_compute", web::post().to(handle_compute)) + .route("/health", web::get().to(handle_health_check)) + .route("/health", web::head().to(handle_health_check)) + }) + .bind(bind_addr)?; + println!("🚀 FHE Compute Service listening on http://{}", bind_addr); + server.run().await.map_err(Into::into) +} diff --git a/crates/support/contracts/.keep b/crates/support/contracts/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/crates/support/contracts/ImageID.sol b/crates/support/contracts/ImageID.sol new file mode 100644 index 0000000000..367814795a --- /dev/null +++ b/crates/support/contracts/ImageID.sol @@ -0,0 +1,23 @@ +// Copyright 2024 RISC Zero, Inc. +// +// 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. +// +// SPDX-License-Identifier: Apache-2.0 + +// This file is automatically generated + +pragma solidity ^0.8.20; + +library ImageID { + bytes32 public constant PROGRAM_ID = bytes32(0xa56efeb96ad1ed58ab6606e39504329affb555f71046de19ccbfbe7d09c967af); +} diff --git a/crates/support/curl_test.sh b/crates/support/curl_test.sh new file mode 100755 index 0000000000..0d3bf87d00 --- /dev/null +++ b/crates/support/curl_test.sh @@ -0,0 +1,5 @@ +curl -X POST \ + -H "Content-Type: application/json" \ + -d @./fixtures/payload.json \ + http://localhost:13151/run_compute + diff --git a/crates/support/fixtures/payload.json b/crates/support/fixtures/payload.json new file mode 100644 index 0000000000..24f2b1c7a4 --- /dev/null +++ b/crates/support/fixtures/payload.json @@ -0,0 +1,15 @@ +{ + "e3_id": 0, + "params": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000fc00100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000003fffffff000001", + "ciphertext_inputs": [ + [ + "0x0a8a6c08021080101a806ca049c3e165dd0d724db8e7ff91bd3cbdcaa21b19e3f5d254b350b328207a2d854f4b244107b674477d101f50daafd23feca3771c0923bfc2a19a419e095aa967a0d7ed0c7b59665acbe2fe8ea7a99874546e2092f93f37be13879d8dd6364d06b18f3fdf4a678d31b7456222e772f9c6c49ba9e4d7541fd859905f357acc380e3bc259eb987a800d20feb5fc4ec89a5d6ba519ffcd7d75e6ceb448852592db96bf1ba3e29054b4aad860a6f433eda762cce5960a23f19ca5f6dff895bf5bb78a15e3808a608b9ed38603481edaa9208f0887841ac4af289cf6b6486042dbf5e2ac1b53199beeef6129a45df4c6521664f304b955108539dd14596065a14d3f339936b421dd47bb66b2a49b367e40c8f9dd09697bc04aef671d1db930b0855326a8eb31975415d500b0040e6e56f40b6574e5ff2cb154d6168015522e504de9b25ecdcf3837d854017be5c80bb847f368958cc1ae157e82475ee52c9dc7b5e5ef334201c370af95a3af1c790ea9e27a538e44e3d82a6b0181b7ad883e4f7def4d2706c208b3e7441d9afcca4dce9247fab7762a6ce2d1624b3e18672610f219bc9755c8314265185fdcaa3dc203bd79ec6e6ed4a7b0b3ad5db383cbf290acb4ae9eaa8904d3216df99b68acd1efaa78207b89aa7814d05835b501680dfbf8d8079dc01312ca147f54234f010370df9ffbcfedc737c87bded7a901cea5a3077ee7fc4af96f8e6386245abf707a6b68f1fabc4b6b0d1704c45852aba599db14fb1cb62d6a1740d5813d6bacda9107fb6b0a1e26c2d5388fbafd9d53b6c0e26298742d3c20ec17cde0720805295ccc8d5fc930bf683b83ab644c8c59b55d4a0418938f44f597cdec69c97c8a1baef1f674cc18afaab16a3138ec1ac664c200659b55f18fabb7db1b17251e63b05a556f129659504f6a2a0207cbf2ffe353aa816ef078ad4f6ec2a6a2e5a7bac9b3104b1b6c234811e1bbd415594151b73a334b4c3f28dd865348568b3a4fa406e56dd7b1b0562859c8cc1d0dbd2b72d34c5e4c9a7625024b6e3918e1346aa9c82280787c4de8842620ff78483eebe5349de09703afe32eb938e68c2030e9c0a8e4ec730279a1eb63291801d391cc89b6d13febfaf85c82c832af74681c0483efb6ca8a384b33775720246832bbcaec495efd92f72602e682a75c9d9f6d0ad35e73d1a4017a3868adb52ebe5a080ff6c1b8c7355eb39730b59c3c6e9a24c483bc997eabbdfa778eebe9d3f44e2e195b8740ed960bb27dc1fe08edd8bac12b264cecbe548dfd8264ed7669d7534a24f098aee146d46fc5efb6ada42af40899b0de9ffe27fdfbdbc6f914d6be23d9bc15691876a7d64c7aaa0fd58132f514fd3e772ae6b8dfc76e939576efec7bec78214a7aa2675402cbfd1c44f39af967004ac409b6743ca4f3a7acd50ad4af945c4d2abe0397079eb39735cc7ee1418026bc6822b8e42d0dc46b1e2c7db2862fa057c312c3c76e82d2e0987d27b7225e4b40eb67edcc2b35e671884937f2992c25c00fd8cd24e987ffb0674627dd613b2393040a70d5f7caa12010651d0d7ebddf17acff6b156562e61086e68971955c03fe0a7355038ea108302df3f47a91dbcd4fdc24a5e37920923f61c3a8cb665dc41687c3f6108f4dfd4536e305fa394a92e554f5fe3cbcb7f6c1a2b6799ef2690315ba07964fdafc64944d6c54a600362cdc6e4e00d1747cfcf9c433422607d51ce54dff2d7c09dcbf9fc282d4621c8d881e6643eabb28ed20188d6cf67ab7ba7f45fab1aca01d26b4a0076a6b6f029427ad2cc7babda3fb75cc044d70cf4aa9b6da079d318b5b4d8379a1913e80c5268ca4151db34da60343ecfd5fbc4fa5749cbdc8d432180dff3a480c8acfa6197c400c42e3f8eacebbd769e4ddd2374de9c750f84063a827715457272559035fdcb6e39fdaac699d7285be86d3aa64486085d3ad9c43344c9b3736c2469b9c7eb00cf98f0466f07f738cd3c96e12ef0728f20116ad462fa9cba27b7b7b0f6b18e94050c19fd674e43a2127bff51045ba975540790ef36fe3bfc2db738475b36f6abf5e9140bcddc95b1ef31992c38e9c96553d662f5f9b352b33237cc46efdf5f2e35980f07342678ade5ac5258463973f4d05f63edd0479723ae6a701989433c7d0dd4534d82e73acf22e4486d1c61e890e0246020b4b21563a4290ec4361b91517cf8c63847d48b36d8fb36c0dddc454f80671bf2d9d71f35307bc789948e27d9f23b079fe2ee1ba9e0504de1ca324c24bd915e049394bbf7c28fd327ab906a18abb6f33b40cf01a1217961948e8417adb55d54b7ad18e04c8da27f881bd554cfa46636e11d0a60ae5dd7f2e7ad27800ce53e0ac3dcb2e8556485b874b16f49486f9d26acd1d6afbcb06e1da93717fb6e94f8f0cd80840ad3f1ead39dd3faa2fc7818228963b1db2400984f94513ddb427176a63e4af53da9c31f9d279439a53b07e19ab68085f5ebd9091b2cdf4fd85d19ea757cdaf462b13871ed5a918b48aace7c5ac1287bcca734c65c5e330de3c96ea6eda9ab1450afb830e5afc88b2b925955097c4ad1609465368fda745843da614a97f7411d79268b4f2361e9bd83c83528dbf1a87fc6f89a7e2abd6bfa27c1be2270d28b6963142a07e6ee8608806f34247e2848e7a5befc8bc87b221fca7bce629d1c72e242f40e44edf71f062501947d68b2fcc6e038ce8a43dac30e7eff4e74f3c9d8f642ae90b57a6ab886bfb60d3ba42840270b15830a75538cc33fcc2bb149217530754ff370719d125f2b41096cfa4c745de9089e69dbd086a06a704abf108331a20a5ca1a72b723ffa157c6c1cc7b8a97bbbf3928f014748c9fa89542eaa6016c664eebd6cb01db4839c2083d5a4cc38a871cffeb3a52667c593ef5bf65c11b4ea4732bd3a6fbeb8ac389de161c565a6653499ffab5a71b09ace40dd79b6d7ee919db59541ed7ab694d817e37e467dc8429bd58b8ebdaa6c1380b0269a87e6fbea6edcaac0b42f5798cf0cde4a3d5cf5ddb724858b63fae88826b115d00c00bf0a909c1d364ba5766c890eb4fb865b2edb3d6726c61d449406a438c7f1c853329a62cc791f928ff449c4f289aef8a72da06b772aedb21113c27e79fdff81550f7f5269ead35348116eaf8401459efd3da0ee6918429ba16335d535f0af3d33d8a4c146bbe390b0ae6228aa41b37ba9177f5fdec944ff8156cb4ba786145caa47e4c3513be0fb8e9cbb220aa647f9c87cec202b8d625c639c8324e6233a10d0d74dcbe6d391cb7f5bd3e9ce30299cb4e01e569bfdc0324d503737e9c28c58e3269deb1688bc70c0db4c6e4c088c5d1aaf31c598c010a5590fc03d9262601741dbf0662aa71f14fc4cb3643fd6559b3407f2f3469ca208187e22f6bcca28df708aa93e8dc85a64489565cd69966cbad6a0ed805bff40c1c9ab84ccc6c4fc5ba8aa71720274301702df3c874813977ce2f2026213924a66557b88fb526e12b943bf9bdbc496c2e35c4193457650797b599b6362bb6869939c0fbb51486112a8ec38ce49d3b3a3990895f0aefba7bfb928357551589346830eb3882cc840965eb55b8860a2594e613cde2613663327c062feaa3bfbe192c5c53a29166add212d7ace1bc858fc65725163dd5fcce9e12f1102e320ecc623904339e370514e0ebc4a3ec8ab11bd099ff8805695436548433fad5a69d7e08b3b8e1569a0eb79a77e2252442434393008bc2bdb003b2175b79f47593d99146d041c6df7abf8bbed6a957e7deca154d53d597625849050c453ac2b8bccbf3b49989d8d0276223dcb97e9d3f209640fa2d455538fffff1502987953d5a34e27088515bd08cabce3d9ff2e35ed40f3b464a1797896eb05f79714a855b013d864714e16a553ecf79f71ee935871bccaa30c408e188a48f4538413ae13fd2091fa1a36acc981753e937ddb90a20af6f9eb2679ba5ba50a77d69b5ee62f11d1bad3d3efe31bdf108f1620417933170bc9062c739b3848ac61f68cc02b01987b74d33a6ef2025dc512e412153ef6a69fbd767516582dd090ad42b4e74c726cf49fa79f7ee18fa003420f5559f345c5b7deaaafdf33dd1664926ec339da5e08cec6a207f264323d70f90109a3621fb5bf2ce0672aa9c4bb52f66a0b661866c9792328bcf9b39c0073bab28757a006c9c3d862d6e208a16f35714f4e562fc10881f503277e035b9bdb9b2851204f5fe78347c6cb34fe3094fc5b41433fd509bbddb549840ded7aea3e13e3226893852e037c12f1ddff92ae671db83e64f24245e2148194b006448bfc6a3ca1b961c49f6850f8115f3c17c7452cef01aa260a2f648bcc4551ed00ae3b124f0bb37a2b50a206483cdd72673bc366c88396b76ecd789bc32c52a59cfb322a1758d7be23599e2f41a9d50aa3ca12739f0ea9fa82840dbb113fffd6e9e1fed7af23938c81d1801b1551216180f6a891b50a4336f67d4bcec74d8748ca2289da14cdb975c22a00f746183fb2407c38f006a246e9b1f562ad6a0ddc95f820c9768975310558044df1c44c6abc099753272ec06650a4a1117cdc10662bd19f66d9c2d8596ca2eab7137fc731f53a93154f37dc24b254d1c03d1d85244dfda7fb8ffe8711f6bdab0da62f7bc77f172c4d485f878aeb1ba4fc9ef1883bac943982341a39753ec2ef9b5c305d706a8b48c69a119986e4a35ba87036ccf1a2f3306f07b5776a25659b7256581a9bc471dd86c4f07b348dda7bd4f9f902e41b0155b0307209d5d61c400c1347b4de54caf3161ccb3d7f0b28661d57e737dc625ae60c587d3c55fe039dfc5afde9d4c159e1945f42586617501ad8b1aa0d8cd2449ab7f6df7aed7cb73b90c06753456b929039012451957670d1ac9370f28e5b6581965f8b143ddf2e2e5fbb6d8e43f7de75ee7358749047e97169899285e85b6fcfd4e4bf3238e8ac109e6b399c9209469b7804390970b9d0bfdae2ddb5a9e3bec72bbf458e1a23faca596cd1a432ba9e294503a97870e42ecabd3b5e372b9021d96951e98b85e4899f18d818189e64497f89d9e3ea93fafdb6ab31d88322e6f82341535ca39520827b8af3966c16ef6bcebabe58546f206b63745214c8d2b2d31ab1a54638402ac48ce253e8de8226f3640f989ff5968a1809dc010feb1a8693782aba839563c8c18d2d23a7969878f1585019a0c4475f3413479eee743f29d26a1bdde1922bf9fc61bbdd0ab390fe7cf74cc7ced8242c2c024e097fd17a96dc1e6cf5974d8b9469aade07334da346f589890a1d98fdbeb3a268c165ed4caf2655a2133095aa1e4574f260d79355123feff27cad8b5c51cc1e8bfba3af0834e90875e34129253e9d4659ef75ff71cfc49fe82b1c57b3f1deb3e9a37daf35e37f52cfe98a56ed9d3633ab21d39376a4c6e55771983ee57693b2dc28e6a935f84071d2729d308b8ad192568800ada82ae9ee44269189951f120939fc73f2318f75ed4d89cc135ddf2a5d648dfc530d55c63ca4283ffb7153fe86a37a549878995e4fd48dbc816e3a7eb705f8373ca1d1c3cc07de5cbb5dd5b0ff68a8e6f64f76c60e3362a10851321383a7f98aac1e0006c0fbe193c2a7827a298fd7d5e30cbc661b93172e4e6144f6bf2d23abcb7b8740b6f8459f3bce6177f6d0a92a26e9683c76f0e6b615cb09d251896d30c23e0ec1ce88433b8f8ba00014382bc87e0769588b5b5b970046dc9274e56d466ee4ef59d4287185aa4e6b9dc241145421443ab0c631b579462513a87468a7ea08c4f76d2d4d788017a4892a4efe60207f7c884bcd6a72ed45ceb6e99246f18b0b94d854a27a1084224299ea2669029ed01957952ce10075804bdff3d4ae0e58115319fc146481902fad05923e1bdf3a1511bdbeda1ae9d587edaa02acf0ac613889c4ab7e8b5bdd28e85427921e15c0b4f1c8404bc76d40d138e5deb02d632d7aa4d2fe8460ab8136928b456ddd4f642dc24ac0e0c21946392b8ec5f74f4ee9ff0f66d1042333396d4cf14f0cd6c8d76746af2440d70b22810e34f5d34d679a82118320fdb397e65fe2279337a226161197e72a3146d006f24fa88647293d959d8956a480cee9c298d734ace59297f0e51506da0ae462fa966d869bcb7923278b4e74926384ff9ef102a71d74dac0290e670d1123440484aeec7c77ea1388214422c27994239017c1b2473540b662bc30222affca45b054fc1903991bcff310321fa37af7af15f2051d11d8b12a44f20ed4dabc8f4be5c2ed91c35e9ba597db04fa8c1169c1765fca0e7884446c4787cae17ea7970d566ce218de3c76a7e65cdce6eade69e8aab807093057f4489606ba4ef49e70fc78974ac2d7305cabf142f3d0277dd995b13eef79b0fc397b60bce1827bb75e7cecaec8ee33ef0e0fc01600c8d6e4961801639aeb287159f7e7ca0aa151772a66952ba9c91a803c59d15c81e2431faa3274aac8bb2feafb490f46acc508d4d018b39a140f69ae252f798abf2d3671fd6ab08995b4a4ed85be958b7f44b837453b6596b610b7abe2d06842fb4e95142367e80d2dabe6b8c17c27316747328bc93d665dca6280654557bd14caa9ed1c808bf12bc2cc47ef2f4773f7fe596dd6ebde449ca20bd3946e67074229a69ac1f08dee5d9ace9c3d9ab7dfdfd9771fc6c7c2366116ebd7417dec676d1ee48de0a4a498c2eb031c89a82ba8f6916989ccf32c3c029af45a08d0d30199897d05b29a120c299812e7c8f992383992324861d57f27a553cb6b50a39003b567a293f496969bf5a6f4a3a197fd41b3fcabad659b426398942cd8b79fda00d644ec1429e60c3f16d3000c7b751818a548722026deeae5bc9dd295debbf52296adfce9e8715d6649942cc23bf80b38c2dc82f8ed1cfa30a0d9bb1d8c4a4eece32fb7d8e3e792ca8879785151a0e5443b63f81c9e52f842c2dd5633ca97a1d550bdcf7b165cb04cb381984483f0a49e79dbc578ca731d0bdc7e48921ec371f40b28ca92b99f2c6a022c23f23f9ac8eaf9e9cbd7a35fe8546dde4cbe7024ef9cc1b161e56fe8d8394372ea871efbcde6ab292797853a8feb11fb95ec02ec9ffddef8eb58e94b949a33c08fcdc5190ce14b60e82ca9012bd9869f376b6bed0d8582ff1f782e2821fd410a5249ec3bb5ea0efbc01df1c5859c179a7d64d2645f6fa02ca93d88c998f644dcd892d25a6a9a449bcebbc87f4b0861b5af3165bd30638e61236ff2f857160a8ae9cf9309efbc8fe94ff8e6fc7454f1c81ddce47dcc0bb80192352b4e25554250151c21a21104abdbe8507348763beff441739eed1aca278a244e812e5efaca70127a16a3c9c64779b2de4eaf936e5f159f8f38d5197575fc83ecae499b6a0e427dadc7717e166009a4026ba04938a55f00dab1587a4fdf75d89ae6d0c9c21debd128445fc922804097bfe260311fb19aa1d1835c1f0db069982e7a9e2ce09ff8913bf9e3fcc9988de2ffc237acac8f54f95b6e1794513c89e2dad62b5775f588f5fc6d2a48a43b9174332040bc89a27e1512facefba82d77f9a3216a36f28271502bb784cfd5f5715c806f04b46273bab8fc0a8b12f39d4d4da79bdb865598a774e710e44327ca33bc39d70e93d36cd05bbc3d56b997d9f2ec01c46e64af25b6005091d0c04de503d46a046c9a146aa35f0b06a7bd877e84d2cf52d6bf8c353d807c4d962eee67f2d5aafc6071fd62a10120abe17fac0281a0478d53b37eba1cd17e31ef4af12f42f52694982300f2a046fb3af606a9ff257cfe9ab0171f4ddc6e45d2613c16fd3336394c13764b98a2fe8f22f85bdca4967bb7c0cd0711fdaea11f56be8dc79ca079bed6d73957d3fa816ae883613bcb98699b833d55e22167a4c5303e5a5a0e8c3f5f385b269b9297eaca3aa023b91ac1cfe193042fa92a26ccdd96f522d729335b5abdc6aab80eefdf02e85a97b4a0a21d5173ad451294cbeb99288a1d6acccb087a4d9b3218dc3ad84868b3b21d01acd4cfc3a97a3579f2f23db1d955307008d9251999d362bec24d50ce11038fff143d70b5b8523c60fb2f56ea4b5101046e46b219c09f181ab3d0c6edb7cf2c7f901427314f0f0ef6636f7d670c8b241d8ce9d3161e1a7d736e47135c6167e26422d684515dc6d90dde11f2a38423ef2cf9b25c8ce0c97d1f8fbd3f4b7d5a3cf97d6424bd532345c4e4024bd3ed6ceac4c922632d42bb4f187509d63f32fb0181cd061e8ccdc45f2a30702389c798490e9b82a0b4c23dae3bf95e246312eaecdda39d9d4b601fca0b2bda3d26250fd35655d2517f068927965273a9a6d14cfe908f0466befdee963b766bd18a85b9af93dae09688d10cfeabdd3405737bd9ce484b16184772c3a40c9695fb54dba677bd1db8aa64b69ef2069e14493e7e18b9e86cfdbbb85198d73a932a6e972d830a0de56fda439507dc95e27db1c1512774aa91a4042ad17e2c356e94cf3bcdd247b39e5825440f65552b006db2923cca9e22f200fb21e6b7a7534e67d5a79670cd03659cc3501d752613341c413558de1ce4b52d2d3d5243b0e1f1c3a3d14bc6ae6947cd11157040804d2412d27b20d567e0ba88c03c1b60196fccb44a43a75ea0d0b70e465bdbcafaf74df63f5d1f5d958a59da490bd166dd18c60a726d0b56a1c67b04241a7f169fad65144ba0f0150abcec159c1693089ee93dcc37c2d099dc7f68181971aeef873a7e20d7772413d5cd245f3d9a5e56e0807139872bc332ae7df88ff36f4ced695582e986706d686359bf23903f994e5fa239c30fcb3dc85d3f8e28197a50b31c58dd19a8d33286fb03f923323072fe91a337a8d63aeb8b33e35011db017acd3287ac3e222f4534fd097e102eec9f22031b0ff0eae8ebdda1f1eb36cb540160fe985cfa28b36490fd350b5fe78a76758eb8bd26234832075e2435fcae22f60d6206cfe7bad8e5858e17800d3f55cfed826b920ec582674cf1ffa0c2517540b3742b09f0117cfb63cd68b13bf61f10742ab301a859122d862cd2c9bb9a70e58cad3c896686f937b21f653b35275c7b292b044d0e82868467f5d293f6e6ec7370c9ee7721b44dc6f19470726fe79dbe51f2a03bcf462f2194b0caaecc00550ef59edc6aa9acce9c2128263b782c5aba11e01ddba83c94e394d805c635b5ba01d55742554b3f2c80a05ca7257bfda43583e9e5cec06d9d0d55fd36ba42bda87662243a2978ee3427ade52075573018cd0b429fe7276f9fcff19f5df1596d76e253f8d6228821a5da697abcfe70ecc243934b0f75361f607ab8a2ee00dc5a2db003089039fd19d63c569aed4795debd782b262e8b968c5bcdeba373be6a41dfa08ad64da32ef7cb42c13a0f757c13e2d40bd8e9eb209b345bbb422ac8627f20b2d3db75f7f497f338f96ec013c81044e5761f0a562aebe1471cf5c47cacfabaaa93f9d659a90c3919f7fc4a9a9c1fd0435cdcc64815378aefeb182c95883cc6e18032e67067c59b2ccc094fb9d52f571873fbb59960050e2a04bece86a4d23640a0e251ba502ec4e2b3e0851ca98f88bd707a0aa4f2b507c15e4b6d38f2aebaab994ff884cb4ec0b3e7742b9f912bc63db025722787b5bbd7318fa362e83687e33233fc419ec2b65336cc88b10c73944f20ee4b57cc6d01e00505b0197be281a316006deb57ca466fd8e1c67122a8d95289f1bc4ebea5f30c3bfb7bdd322a4a993560e075951375fd901ae2a6b531b35ffb0c0797b3aca5e13d0063ea60e2ad9af26e2ff31b6dab7d7705e5475daa187aed78b2814c460742140e4375f9feeff8f0e67750bce584f0c2aa1627ea49f7cec1fda009dc47479359982a75c0a0e9e62e30e8ed113053cb4995e04997b2d1610fa58915ea4c87af5ef7e86d839a98a42686648e6210220fbc3392815c72d67a2e7d9d84590a4a733c4fe5e539ce418be57eebe16b2d8059d61f61a6f4c9a314d99973557fb2a57f54e3ff24398954d71fb9403ee44cee0e83dc8a90af13a57ba60b9040b575ee7045246e1279439f88a875d9dcfde6d9b132e46cafb43f5353a623b11b0d357e19470f764a53c43922feb3a9995bc8535ae4e577166837090775fdb4d94ee07bc13e780110207ca424fef4cbeb95bfe4da4fb151a8b3f2e864071a964c4746867f4fbc091b62a30860b9d61658f14615736eb244cc923a16fb5462290769d4e9cef84918aa806baf16cfb383397165ddd39ce9e9ea1524133eabe820447c1bd50878a1569db9fcbceca624e9e7695b7cfaafcd2e9ff876f05f6da03848caede660b8bba9dbe898ca05c0a076ee95ff213cad1b3854b51349aebe065a2b1d1f5c9ab080c27a15a9120ef9193eabe60f38505f62d3d473d9236f81d0a359c506eb4530185b8071178b8545df1f831e93d3992282df185d698471522868bee153dfa1678571fa9a800b035ec08d37f62b19849410db87915464260c7678b485e053a90bbac8b364aefc448aeb176231eb7800b17648023a9acaa69c193b9fff902f6f1c09dc10141b931f38a53860f20c57f3b2f2ab8e0c0d858a13ee3d0f73395929528854d9a2a8fac97fdc4384516ed54c114c96dc88f0dcdb2f921be29778a1b61b2c4b6339d6844227a7bf3b8c344f0b1f2eef8a27048ea785c7181a018721400b1c4b604497de4546d954c76186dc12986cbf08aa90bee611ac28c426c2040dd29e8437a2d11c29a1dac00476012338911e0fa245df97a6cdb8ef23d13506a838f19c43fd33b11476782d58135ed7189da165e41fa04890f15409062f391e381adaf33619571ccfcbcd60742e2d430dcab8425ce7dfbd46ef3a72e027a376f1a2fd1e92e78b86d5d82d45a66f9e55a32fa4b0096f5abe089187c8b032b4b9f224042bd0a45a5b6fd3e29c167b5e715cc89549fb40e2e4e96fbced9de4b4ea8e4018c665d17d6076208141a94bc5362583b2bbffc9fc8d79306be6a310c95a9b6be38ce429237b74c332e1ee1bea197917a1a2e4b7abf7abe3eacee0a945b138df1fd6b8942788cad7f116ed1dc5a419b1ce1fc3965ee17a3766ebd58c5ab61058cf6ee1f321c518614646cea26911914851c312f372583f385e79a1dd2ece6455dd30245dc046742a8b25763e6cb7e940432f46d10c5be70d81954067ff3f9db070df81cfc4da0db1d2a733e2770febf22858a766e984ca8b7b607cd749bd3a8ea0147d840bd24ab0022688bf942b651bc0a5651a479392eb507da1a3d9de2015e57b72ac1abcabe2c407ce6894087e565e27bd3ee9eb156d384839c01c5357df067e95fdb896b956906a734d5f6cf767882f2a45ab63e46f984030ad9a51b82e38ef8ccbdba7a0617f5ff499433d168a7d60194c076c3a66c1b52bf9cd0efcdc4cfc92b7f3c7a4dd0f7a12c1cd58a477a072033c156a7fc81ae128b9b3d50cc41acdb56b129ec2edb6d1b81ecd60737217382157ac1ea63e56c28f82c6d3facde849d4bb5cff9e749a88f7afeb464225d6f334c03f70b3da3bc743e7f7c5eaa46937c4e412a498ea1063ce4115d74565faf6f6f81cddac4595a32ab8f9867494e4793d1b5965558e264f7b65085441007adde5634feaebaca9cb0c4fbd33942fcdd7ece91664c54524f00d6dfb9563421527dcd219ff54b2578dede9ab9e2e01b5e5012385de900747caa4eeb772943fefffcf862be39080c2614c4d2d02ade05f30129d01007643e2e5105de0775f8f9bd63a83be110ac8b47d5c1986fad0fb3f7cfef8230b9e6eeceec85df2758631b1fc5bcbb91a3f8de6f7251a31e22ddf822cadd66adaadccd0a8853cda0ea06e2825aa6a8530412d88cf37845bc0443d3de39f7338c5898f82c268f60278d366235768c692946009a93d9f6f21ccd38b52301dab871016fe534b0528cde20e8d30bb8b3143875d84aefd0e2264b39098578871d0ede2cbcb274251ee0ce92ded6edd794089b7f9ad131a1ed69f349ab91b8d82f2cc76d9e3ad216404964d2a8d2e9226c3121730770cf43be4ec216cabd1c637b652c15964bbbd8bb22ef6080eecfac4b99bf87e16f4973299cfcf0d666317b178ab8c56b3ca8d7b0da257ae7f875db68ec2da25722ac7fcc1a1fbcfb3b8b771db8f6b4f9d079265cec3a343fa4a90c8281a3e2068d915fd4ccb1bc8a679e11595bd84f9024404e986316b450c87352f7e818a48083573af94b41571ac81aeef6c9c97436e622143bd2fdd82a54ecf0d3a254528c0218bc322cc72d5ba4e6e737cd1321b55145727772337b5667ac8a60b783c30130dd7961b2e63159cc9ef866219d2e316f5bb54cd399a4a5c3f465b924337f1f9d522087ef76bbe4a605dbf72ca09ef27274c77e765df97eb974f84b39a228f65d5558439cc7259dc4ea0b308c2afb7346236496dfe89a4b4986558d6822fb409ab59dd2d9552cb595a40b83aa7bd1cf0562bc97cf704f25d710799dbea51cd0cab61d3891a1fdbbe46343c593fca944acfff6887eef099f895a13772aca46265b3a87d4792beabcb97827205da5b93aa61275f2f619743caec9327fa981bcc549393c0b58ac2f076f10506378bf963cbe55b0f06c9a71c251d22990aee58e31587857028c107f5e610c1c780b378e78bb2b761aedb9e764cd7bc26b5425197ab833892b8454ab02e91215340f032ce6f35249517289ff62266a30d636c532f065b5540c1c55e746ce4c605f53f3844dfc12c24c4ab941613cb2acf8571219a1ad04ec2f5568f454c089b82186afa26a0b8d5ad36a79d73f1ab9a9ae3980e41ac827ecb5bab47a86841f14134aae92f2debb3813f315d909bf3dcc16707ba9fed3f471ad442108468661fcec68424f7cdaa62cf35a2b355437d42269a551f87866cec04d0e421aff55f7c80ab439ded71b50dd03365fa71167537fc450b83fa442e1c91de25c09d07d51bb1775e95d75e74420fa51c71770ae1c0830a56d648fef688ef9779406ed4b5e965a9a667947f28f241d0a22e8f01df4c18ef4e3cb5304ade9fe45747050250e64f9585d5de7f783b37ba9368f482bd5a4d2d9d1ecf819ebb0be6442a531d7a1c458078e399f37b4f251adb56b7c972355c6a0de6b7cbc740fec8065035d7166acd87390f13d5baf7d6edf176275181f288cb1b24242291d133d8838b69e6c9351f090abf52da73ee16b8a98c808a2afb0c486dd186e245075b1f28d70068aba8b907215901ac0dabcc3417f08aa1fa485941860865dc0d904d39bf2f18fce14030ae958879ce9deaf78b83cb4de9a57efbe56a7aabd834cfcce75123ca9f036f3cef1d56937a84d3bb92744a515252b0f3bdc9d82a03ad639f7e13fc8d6fee9aa8a561c787c391d237f4ad892f1d50e37284ccdf7539afa53c53bf97326d72d71a9b70133029aa169b998c3ea757dd2555180a4beb95825c6f39bfae8c15bcdb4be0a6cca7eea462f562ab23f53ca0a800d440746bdb3b4aeac234eac7acf05288181a72ac40fe2a8e0cdc0ff5282bc0aed6ed99b7f060cf92cfd8beea2ee30b2463bdb8ff236ac3068ca5d7c295ec61417fc6b802f1bcf425bdecd2342a962d2ee7ea00e1850830e5f45667fc150b30f0fa2effe1adac431da05b4eae913636ac6c69fb9666d889ce21a21725e444355b200efb4d9296738840e88ead1798cfe9dd4918ddf02c78dff8bdfc382287fdf8980d88b513224cf2afb3d73f248b99e3e97eb414ee266b3cee0d08a9880b0acb157fca424420319bdfe587734d568cde589bb80bfbd79924e3393ac550271e6fa13d70f8491a276157f5fd11ab6b09e94288304486bcc2b636c79af0d64496b7513f6bb34ae9a656e5d0e44605852076fa4c606e5d9131b9ac6f1fdc4e415d663cca6e76fa6a43483d97f17e4de38104db7974643cc068862c1c56b903cef19fcb16150c0b7c7c1172c58e388c33a1b55c728ab95954c515afba56bff5147acf7f3005942714c1cd3b24ed9f3b4b8418c5d6d3a3442d7cb0870f0a5bca6fb4ce31c87e59f320c34d57aff72e2c7de0eeb3998f4a5841f949909d786932b41b05f2dd4e190ba7284045fadc4c0b057c79d00d30e30aa31dbb02c5867fe2d81612eb64316979adc69f9e7668d12aa8b1cc28e7606aaf8a03f11caa67ebb821cf69bfbeff78c544759ab760ca211defd33f0018adf69eab503634dc2958a0231418fad840600b915ccb318193d0716f1206fec5846ccfbd43f985bf9474846b710b5456b9cc2275bc9bc83375e83c87b31668927523d50bff35ca11d8f5c2d23e5423b3a9a496eaec7145e419425e0b5644046c1a60b363a6e06ebbd668138ad4521b1cf09f591a80ed36ae37671b90330a180fc97be3d579940fbf9368de2178a087ecf9eeebdb81fe6e8e2f0549f7ca790d78914c4cc74731e092033f57d918e74fbb664d7e47760a6e1adfc6e67706465ddffa05dff9435eaef6b218668819274764123b4f1a1f1c16f01df4c102efa17752d0357de1184d5ac0b72150e56394c09a8007178f014905b420c81b1a457ef7cfa268cfb4b16216a8238b95466cb11e02824feaf841e7594a65eaaef75f6de5043db3a8dbba764e98add0dbeab420a93f874c5de458fe73e3b175df6c97052c10641d7a8ad310f4416ed84e837c6088e9685394d9a41d8b7e35fd49de1544c90c6113bb16d8cf6e7b365762122260a6c7ce36ac0e0c914e558423791d7c22cf505eb6debdc82c15eeab882e6214e018be2174ba8a3e1f0fdd87c9883d5e3c65cc8c649dcd268cb41f3488adaddde719ed5fd9ca571126cdd6ec76e9f1e831cddf9bb932d26586f934382e15038286ca068160636beb3e1af45c45b42976385adbc2c216875b1d4c6e743c21c241ab4c592e9b95565d0dcbef265446fa1aab340017c87a70a9aec75a8456e52affccbe4011c71287d69c6252acaa8ef47131f1403ff927ac985c40d724e5685c3f482acda6216710d83351c8671dc4a2e693398af92ecb0c9888b9a664c9d70054287738467f9ce13902ff41f4b8f1270eadd50f3a6f3e255275795531eaf8caf034925caffe36343540848f6e6f03033cbbf9c517e06cba124401b2c5985ea60eb52ad88ed9af17b251ba2ba3c59b0b2dcdaaed59bc3a34527f2df832a0d0d6b08cc2e801d332e445e921bd8de2b285d0e4e3d87b1d638aadaf75e0a265b5e1b1170d80bd73b8ad3342a7a981d43835835a62e1c73f3ec7293eff4e91607bb9a365876981a3c93d9aff0831380c6858c6c45c54249843ac6693d530f445dad5afd0f1b7316efc5262225b79cc44942a88bd00a1d98122b730cbae148b7abbc1a6a8dc454d53ef6ead421709ef84b5e7ddaa33c047b3902d4c78c09f8b91f4244068c3dcad9da3f3411a75380ff86d46b50c15e37da32d5869b9de60b907154ccbd6e667c4ab8ddcd730b23d96d0c841932742ec4351e58e6f878eb3d66c268ea3bc2745dee1e8e905293c647cfba938cfda9636868be0a645249fa1165965e02d8eba91860f28cedfffdf435eb5b9c5eab18956af4ea5c449435d6d2927b8206d9192bc0bc1a75f98ececea21d8087551e8b709279372cdcea4f5ecd29efbb7261040180448e293a7d2e71fa407a1962e5c970c603ac44fb4636b37582957b2b7eaf93408118a40ecf8175c8c3d4497df790407182a45f4ceaefb4df68294eec6f8308f5ad7808de8af5eda19d1ca224b3dda516412d2eb76d14bceaaff94ecc976b7f0a761d712825373a5a634245d2df02eec2950c2bd5c125022e6af75f9ff4448cc8c84c2e3081f7e4c1c3c4fd8439db822ac30ac24e8747269bc72b6c71e2d6c6a3720cc54a1d95636054a8e437227c09fea15a46b214ff445dd91a1c8f6fcf5878b6ed8e624aea8777549a80106e5e9b9428e64c3d5630878c033a0e14b5bc306102f380c1d7eaded4ad20b92660fcdb1fd8547d7fd7663bc1b298941b1b4bc15a6964feee961612cc398ca14a74c30982811db9cafdaac5bb5e22d3fc055738f42853f6007fbd198d0414621540386075ebef65a953cf072321d8c2cb8fd3b9f114ff88bca9d0717179b2733f83fbd6ef6b6f645605e3e20675e4b7eb519eb9bd0a50e1e73b8b93418a1677e4c42c371e720fad30134ee2ec4130fc7157f40817cca05ba1e6e585bd8aacf73c0b0ca4fb0de263199277e772594901418a7bc92ca3b787cdf103910bf7a25a48693501f0c1d3d81652fc7af935ec8aa70772d64249e1d68c1c5ad5705e67e9af387a7ba1faae7a69474dd10ca50c1691bf1dd7ba3cf0335ae341701db62bdf231219296c30a991dc370994a08c9204c00c043ff685dd26dbf4298a005cb2352fbd453abf8303739e2731c1ea0406cfa434550a3b93c486a8563de78e8f02bb2ed5ddb358efd6ed39a7610ab2cd00a4c5f29323a0a6a7783a5f5d1e43f88bc428841b0b46bceee1f60e52c16f2e833b15c48736a62050db111808952fa12572f9a52c7f5c31f77fa8159fa95e1d0a10f9e2aa831d98c8d8d2d97d1aa768694de823e78db257ac05fba35708acea795adff54fdbbd9caa9329601abecd27a679b75c53fde5386ca188d83c02097b82064337e402f58df7c1ba86466fbf23392b3c055fae44d72e5c21acf8e281e087b1952be9500d93c6d0d415c4b1fbea5f31dad8064ab7cda41b8eb8052285e64fbfa6fa12db84230c47aa582905926135766e87b4722d8d78ac1affd2318b5b52d37faeb2ac6cc36095f8de3be2cb7a8dda78e6642efaa0bd3d8866509d622adec0d6c1b628f7ca3ac62cd898a5cf870557847c6ea326b4cf4081e2bff183b45cf2689d174562538e34325b07524fcc8cce4cec5fdd8d74c9605d62f93e8ebdb4be0944583dc1d6e2aeb74b6ae978643ae71342e9e1072d717881d2c1e488e87d8b31a38e3e77c37c5402851573ba66482f175f1327174469b7850428a026d8545e9e150e8c739309bb6867f5a26d637eab865a3d97ed91520aa9f8ea9eb1e80ab7c4d7f5a095dcc3eed11427b4a02b9bbb9d7a708290793421ebb69d827d3cf69bbc755d9b7d90320cdabe81a19479639af5d8926d99e9ecd999333e110f4622ca0cd1d003394dcf4547cddc0fbc157709590ea56f1a39e642d0232cd667535b2ee233025ec1846f80850747034bc1491e5fd7b09c3133c0b3a04393f788a5f63d67bd70f45cf446b07e91da3797b2e485fda1f60344558a7a24c5858bd753b422fd568ef37992782ed90b811e3250e1f61ff01b7ef8020e55d76544c5277befc6662c5605d3a02944d6e81cbec2133a9ef3b9a686ee4e3ab58e8ddb1a082af6d91a2686c59b041ad900ba1a1ba9e867b078c3086a5fe8938bc34bf2719610e9319b2692a9f3e6ada18b014ef59ffe8503ce28775d59ec62347bc9ef646f35c099350391354d454852dcbadf2da9f74ff890847c6ccc0f304061d18d3e9d5d1bcb7bcff2ff297c48cd3c2a9930b3d55aa49856c2696c98559990909d2d966407e2dae527a39074863b15186fba55d0c33fbb46ac4a1e596bc647552447e9fbf93e70fc89a88373d8a19d3c29ce4d980b8580e5bc199b8d1f166f60e88e766c1cdb658b93a82704be97e12532141a409ce9a1767118b77379c57b00b085dc643f84a849cf4dbb0b00442a8be01b1496ea5b6f21c43d2f85ef6265fc58ac2a29247cc8ffb3b333daeb386f42b816ba68fa3373691ded54143ccc8473d279a00574a3732f7ca0217d431907e7ada6237ef2e556b04ef999b41fb5d4acd9145a54152367fc86ee509fbf088dddf2c486fbbce8293f3e248046739346f891cb428328e5a161a3ce49fce92410044922346c480ae00523cbd86c2ebc962ee95c6dc4d36447ad88668e6fba64c41da002e371bcc83d7c9f3df5685cae0581272b923ca29878e19fe6f16cfa72ae1dd24dd88aa3704ddc26e2164214e4b9fdc6a494ca7986df01c2196bb6062d34e4c6b29988c2b68bdfd96840aa8d6998ce2058294614e0331ccd2e8e86e5205a55a69db78afa706de10a4c1766255f9a71effc0a29f7c49fad73067d6486fbcde0c88d15e54f3153ce8eccc76a1cac24ba2f710aa16e1f93a1a235e628940c05b6a4ebc53073b767de18b5aecf118afef486fa033b451f145d2c03ebdf47fd8a6a1a42d05d4c2e28c6edd9c0733fe8bbf0f7d1fd1710cdcfd34eb82f80f0b42e05b5d40ae7fe7823deaf5af004d8cb50d8ebbe9b465882c2fd0267c82edf7255df91653080e94d0da44f1919241ff187219d33e385ea43cb36da7e652b3b5b9a229c4c74eb7f1a3011e2cc2edb93fdb00bf7fafbb28d3b5e4d626b29cbac94ec19a772eb7e27dcc38d6309b5feff03bcce8907f6b9720b02f08a8456954cf7718c04461c44ead0c36679dd414eb34f03f29d10db68507ed1f5d08b3754b4974feddc85dd22968f283fc83ad2b4a7feae9e1522415c7f0f818df363b01c1dc9405c5bbab8257ede9dbf02e10736c14e88b293481620719a27378c3ae015357ece9e706a8b1dc8fbb5a2dfb373f63e84bc5393d42d21eee4b5be99e6fe6fef77746049ea781930ae07f924b745b83862b6da37133aca7b6745c46fb035129352a45a7566ef3a53d5ad265421521fdcde90d29849ba7ca321206aa343902ad0efda87ec812d39f512be76121dcce4cce858ee66c743d37de0007e8a63f3ab0fab3e87a90a03377a8d1f38ee93c2b7ec561594e62b43da5862d51e14106bb162a5b54c119e03cd16b46d90b1567f4d5f22e9f8505bfe26d5affad99ba842cc72254a57465819b3484cefb02ff4324d7418f6d5d50727da163e032f275183a4b2f4950843a35cf916a4810aad2580b0de2328d41f4ff8f224cc15626a226da66ccb21869166bfb00c144bcd5d2113aaea3a6652644648b4299440a4015babfb199cb8b89eb599a956eade5e79e86cf87e4c05dc753c749407ca82189741db092ab2cbea875cf4a60335f3b61809b630e5754513b4eafe32da1e9e02bf6dd322f64155c1c17819fa76cbd196d192a7a81ec50df7ba0bd91681aa065cd0511cd05be43bd1c790a508fb131f91d6b71545170cba29c6c69665e01d6866c24635cfb50c6d24f83368342ef09936e31309ba3ddc3542b40aa63cf3ac272ea028a9bcf50b89f8c9f4fd8fab27ecc296d5c313b8c925ede2ca17576e428323b4476252e4a13752d09bfa48b6c15e3df8a3beb91f9c5237fd9df890e5af4a30bb9322d09f193a0ecf40eac9c3654f5fe88e7fd702bfa8c2bf5afe1ecf212d1fa20e1bd6236d709e286f55bb244f3521ecedc94e4039523f55f49c428442ae8a72cb8a104ee227c161b6e48d38ff676d8b262f5476040e0b025d0853bbc9a88192b927fb1d0d770f74b06b1b76c46dcc9eaa6cbce637aba6a980d1313ea76183061f793fe3df6a2c7e5badffbef0cc2d4a7272a3d781000874000c6dedb13d8e65574b3a766b6553b72b93e3fe81c85220da7cb4627ae062f90db660cdbae98f22c173fdcfeab0214fb35383f197113e96a0d2342fefa2f75e297a92e8c65b971e2338862af1a34b2d1eda3b44559edf38ad0985c68d032c45a50ab146d73e106905515b086a56a2efdd0a59bf7f20010a8a6c08021080101a806cc40a5a5e343aee2824b13e7ed4fb4de0cf1398b32fc5a5fdb22e7730f36fabf13b2fb370c2f839f5d0fb6fd3682a98d458a311083ebe20f8476b3abe63c6f9782b1e3e21e6cfbf16dad7bc61747f79a13313874ceab8b619f97b9110d2d07eefe65d7dfd3c347980634fe855caf2796d865a3258abb0d109eab7029d8453cdba2d0b99585cd8757816da59704f028b688535d5a7105a49b6c4bcb38912965e064b485f8599c31808f6b13a16ac2546a24668a3f1a9fb26b14e0b1a3dcd0250192fbc1dfb33c48631ce125084c4fdc2770dc8ec6208997a1bbc99f14eb2bc3050c5177d3678f37011484d7cb8f8d81f8f14f1b9b5a559c210e858480f9ae76408ac7431e01e31317858d4676f2550ea4a5e59a4da03cb11f68fd7091a1489a2a391616171a6ca733254f8d731ca91c11819e3135b2010f54948a3853b966d55d8c8c993e8ec1ded1efcbcbdadcb0468ce3cb1dac35561ed369d3f6b655a92960c4cf4520d0b7fd5505248d7cf9825c5ea35d991db943bb42a867255341fa9a9381389353c6004df18f1c629bf2de786a0291830c7f1f6bce65e2654f7cdbb3c4dbbdc4e62f7417e53d9e8fb1b8ff0ec4a9804bc2ea029561324292767c2c92ee5d31a3d1273dae232ceefc3168036e35723f0cbacf7ebd0a879f9f7bc0e24c90def80706379272b9384682a8d58b6cf28bd17fdc0a04d9e14b3330275eb50a5a9f1ace136a98358f985d549853045e5c0bdd61cb9b01bff8226a46b98734d51dac928c3806b1ab4bafa245f658c33be6e0ff4103cbe7806dea0f7071ef60a877757fc64bdcf2ab4bde05e9fd9d2145ff576cf0b3dbb4b0c674588216bf5e381f506895967ce837263f94095a537b5972dfc5fb6de8d99ea8b8be00fb04fd83dcb2bda36e420f9d87e43e0c559b95605a6effac66372464ae2680c45c67ccd68996e21f080416ae45bd621de88893d537b4c70223a47f8419ed20cbb6a19a095f2122b5df8306b2e1e665a5300269f399ac20a10dfa85252a3c8b70a47e6c11391cfed49f06425f6f140524cf2f23450d975b62303b4f2b478848c83e879222654fcc5f7cb0a34499e3ced1800722da54aef809a9d7654ee0837c41423145a54d1d40d22719a9f659156e184f406493ff7e48a0e37f31dd968d990a1edccebda1f6b55e6f9e46646b5cdad66de43718de1eba0fe11d43cf38a6bf428ce5e79eb2332d6e50583c7baa349301190d3e53f4495f07a0966c47d800dba1e53c7da241287cc77f5f6cd38aef7f91e751ed918af8802a768c536d19fdb15654c380171303378b6fed33cdf61c1f526f61b0c3e9e0cac4bb88de5fb55108f35d3ae47d9f8914c3d883b7a80afd4c2875a38d166a98d78169c448330b8a07956ba52845c1145a82f19fbad4ac171d17940d5c449e7526bb9f7190928123cd98d8a78a8eefde90be4ff4597ac102432faa1752b334b05b7d52049aecc0acc9934bb486300a23f5aea60a754ec895f1ecbc1710a32e559b79d2754acb000ee648ae5c782425ce3dc26a22d85575a8b02016853c471e05f189507f4ab700a5177ca1d501bbd54eb93e5c9ee92f79f79fc5377edd7694bca346cc67a4c0baaee03354f57b8d57b065a1b8df0131cb7583b1b6aaf6f8ab37839006f328aa6b2e5f8bc8488e7f90307a4917b9a0f78cc8b2b2e68d41363dd29d0f890a84f3bdea1cdc0f47fd620059c90524dffbfe9d1d9c48fedd4aed0c5e0dfb4c81b91fe9f4d0b611d4793dab526423dfab0d530dee889fedda823ec9a7213a7323503da49125cb9d93b0dd4ce641bd815a9009c9cd769f32de500358b1fb01e023b54e09783820bbb25e2009f9bd9f8fa8bddc64cdc90180edbdad11ba15674c9c8097428fc49b59643b68a11c6c0ba00d2a8a3001a9b1e4352b31c639a57698a18a049302bc95f78024dc9b9e8457723735d60fca2f0b5934360236fcf1b17c044efb507a6c3d69b05659f538eb4a97eb34636f6053f6619ecde2aabefe6409051c7567b17cfafff93111130a7f84270d91a2c758085cf88ea878e70ed4ced7f3641c67eb2545f2c76024735a274d3521642f6582ef7003840e7f012350fd514b72fa66f59bf865084857c215644edb9e0e75143b1afe221b345982588049715eb0042126ad8ddc70428928f47ed79579855383c75ab7df7a11e9216e995b1171fc55031110852e893950457e423f3bc861686908a2af5c65edb2e5c5716d27f0dc175e89099c8f3289042e2a0c7b8dad546a5097bbb0ec5a4487a97106e3b1f2cc81f966cdadf47e9fdec40623634911a9ef493476c39b3b15a29312668574853ad0202c24cead2e186e39477695cbce98dbeff3d1086144404927296824b84b6b28886f9e7924bb64b550c174dac2f806f916e78619d0b9bed92928fc9319361dafed6f682a839ea049626a74dd3accb61b028968d5fd162684a6357d5b221360cd8adde9f6ec52b803aa2c9d2f9f2cdd1223ecfeb212bbae78329f07a586fcd016f75490fc943a755ef7aec1fd5dfacdabfd71e92ffb00e823afd7c7c33e9c32f7fe0253978f7b654063bc766a23b5848a6b91d151cb8c7af5d49d2142ea518e2ae2424ca8a90684d97cc6c13ebad034a043fbecfcfe529b5cf75b6139cc4e1f3fe90575c4b8d06c07f4cc465d02f074b610be717b1123fb24245fe30c411018e4838b2eebc7c65663494790e08424abdd84e9752b0e689dc6539b802bd2daaf9bb9a24a6f322add96b80f24e79d499340823cdf69f67faf66ddc92055941b9991377ba0118ea86257132e7f99325715bffa7242ecddfe8051b05bf16f8b21df98c78f25eeb125537534032ab0b0de1b9e4c94064172e37880f05893e818904435d045369fa78cd80c2ca56779b461348d44615ab44dab10bbf7fcbb8da1f3757901a39dc4dba0de65b4a3362ecb07e81623a2d7b05685e197169311433dbee448ba93e80b0d0580e5ed231a4fa78251fa02830a437df8e76c668e7cf8394c3fa838552e82c97be755536da9372165d7afbb2997931d736d5388a732edb5aa54774adb45aad60829ea0b56d897c9060af9e5763fab6f5f231c115fe5ede8a6fefb9669b8a9d6f92235528afe5be1c19592e317cde339bc2fe9f5b6b40f00495002320fadac0855ffdb593c1d459ffdca721f624ef1d47d3f4e3329269480274d1f7aec1c86c9bb65adf4a36b06e6cad4774e7a5c5636cc6e9b1fe5ebad9cb30f5afc8b31ec16dbda5e3808ec9f5a9ad1de5fe8cd9ba29b295ca25a341833b33e1c8745eb44e9fb910c438545777ec875fc7ccd2f79d62f947c82e3f2daac82bbab2ecfa4ed3f39129e1c4a0f91eab6bc8a7303ecf55eb666c0039a9b733fb1e6d7d6cb0a852a26bc160529223f78dcfb388d6a0ef4929321bb8b561c5cfa2cbdb04a23d500056f847f393040495b7270588f2f7477cc90ed91093910b093ea510c4b96891380d539e1c971de0d352475838f22f5e4d10c089edf27838a0ca092c700f88401b62a8e62a9578cab647d1dfd53b031a7602751983f7a852f444b6a50651753072fdebfb67a86e420034492eeb94531e86652e08063233c84ab3121def3794d54189b08c3d55705f0af6d4e664188fc6115e985240238afea4eb1e26b91a0f451427b401dc1cdc816fc7f769ad463900d85563fd950fbe0a51713873fa97673e702084b00bdcb4028ac0a5974259de8657ab5b5e0df66c28c2307896103b142e4024c6416df4e4cb1ad934a348ab4a94932e75d063b71e8557e3bfea407e774c434afbda9a418a5bf39ee37e82e9780a67f94cad916ba6ae63735873528318180a8e7a9d60b366f2a8a05a2b368fd36685d1546d88218e7ca99b585e0aa228eea2aa8a896c77ec2569c9a6678e441f6fc44c4da7b3c8eb805e711adcd0d0ab0bc64cba3134a046752d2911748f5e07ec796837ab7787fb533308826a397686a53411d731d341127bd62d7a469ade421859f4fac7d3a7dc3f79ae824b8280489aaf45b7f1b73aaf82900f6bdf0340b9443f242c389449efd6ffed88eb38de8547afd55f7fd59e8c064126d094fba943369f5477d963c36fcad0eead625393ad7b2f903e7e0d9e1bf43618bfae9d5ee9743c7aa7480120cd134ab8ded4125373a76a9348748e2b9ee43ffa54548ddd175aceaae045fd32b5e94c68a131c41fbaba16667d2fd7b7feff6aa5596fe79dc5ce615f045060e625b1c285173dc9a73b99f185d4f2d279723b8ca243b95be151197da9b8597377ad361bfb0a0d410919a6dd4a3286a25a8eefa296a93fe629d8eb688bae4794f99136a78d698a8df0933dfcb5d0324b6431d377597cf0d1e24d44be50da7b00153201b21d885449cdcef7e26995d4a94227a69e1eb7e1405d79d18c4e94b2c9ac9e2b23c7a94d58f3e81a6e4b314ceffd6f162e50d1e23b846049a3a0d3bafaea480a85ce017355cba563cdd96c99183affdfae9dfde777b66bf583c41a6d3a7ab41380ebfbd63ea9181f0c65f0cfa68dae9395a7bc11cfbd5f94f1799a501554c5a8a3226712753f9f5825a50620fd1c5f5723bb34c2191bccd6eacdb2c3a0368d6f8d0c5743d25f948b9a80c915dd3edcdff42ed57d2bf4f8aa477aa7327260ba52be9d409abb573f56be311b55d684f637590e52433bd3280664215d502120e5fbc3f5763f1bd5459233776a44ec8e0348510330d8f20a69fd03962fc18422034507b0e4c3d272985b72aa94f561c4841526c15e268b1c6b8d4be47ed3ed765da7b6843605b25b1ff3741a6146f6958698a46c0f61c10c205145ce2cf79480199c94d92feeadce8a9b8c34b8c87c6f807e81d3bd002fa4945d012c1b1c2e5dc9d45f52f64b139bb436339ae7a1c4e314142e0771c28e27bd6867a53cc222848e0d292c2e70d9bd5cb1d3f9624844fbe49fe02da09161a4bff2ab56d8f1c6c3e71f8d73e706a7636b9a0b88826fa8ca7b121c5e7fdca80e3fb7c1bf48dcc872655cc5c6f4176d3559e687b1244836a2d44eb70aeb1b54adbd771984ee7ff0b415b98d5d8957032751bae77226196c48068c4287703c0beb0c20adfb11462c82f9d400bcb9317564292ea9afddc9d177b9f8386dc2d2f9c69b02f3f1fa2e7531c6c60b03447f5b98447d049902ee5b53ce9a9f54830a216ddf576fd2e17b5db6132c64f30880468fca4877015f0a28ff55753b1c535c8170335445a27cf6d07cb3c939d3c0c3d679245dad437ffcfe59853eeed91fb83ee49a4f5649563ded657a3664d269e902951e38e9c417c40fd6720c7afa30007e00710d9f3a982ca771cf6fecd32d7596b86158c363becca480d3b80a8c0b7c24537bb607a2ce0fd4c1883f4da984b8d125fc814fd6561080a5b202ca652c4e2540e8a8d48cba462d61c5039c6865d5233e36de07f4c615b3483be1542df8ff8ff65f86d61a20215b138c2b2b140568b66f216cdbd5a9a0e3592e94faba56e4f168740aecc849ebf695bfb49f234bd649ddd63afdac719649d09dce8a0f647e39906217fae1dec1acc9585f76ef418a4da92509e1aa3cc7a0d9dcf8415f0f12ea3b248132168dd3128eee5692b7d2223d6f45cb809fda742309c1a19595340e46e4b677d561018260edff6ffef213acfe571496f5a3c6e67a350878e0a453a9b90feddc9cb50eb919028100fcf9d7776edabfbaf25accccb4bdfd10955bc9dfe43e1076a980aa40af6cca67b53a85e2c343e2e1992415b73e62ce5f216cb6d4cf77200d6cc4ff87e99236dcd4c7a0ec95c92431e005e6ab49304298176cf475524f34a6eb5df593cf841b844739ec60e7c3ffc2b6f581c473b06251131d82cf1e6e26b88e2df00cb4e5e0eaf2f17700b58c674cac2ab08f7342bda833b219a781c072dbda63369206ae069bd281f1d886807ed18fe386a9fde17b18774025f3c6cc9f97b7906c2a8620581e94b79957cabaab202f045905c60f8a1c78dbb74ea34ed95ae7a1f35f67f30c2caba2134f4bd32cb4bf81e2efb72e9fdb8e57a940be50df13d04f39eeab82a8f43461918f71c8d175b2a7fe098f39ad15b26b4a04aa863ce508e5796843465b81477cc56184a9905bb325b412b359510ba169ccc0e46dc4567734de9dbaa1deda791b90bd5adea2c7c7d4ff42024430778adc3eec32115992595793c6cca2774e42e714418a6d84cc868489db3d3c1d1c934cf9c2bcc43e0b1a7e85452bac1041531e5d9206f514609b98ac3c7d410cdf717128bd39d0ece6f4d377d6eace3f892d6f973659efd1183a3a9ecbdea46a6af922a53f1220d4347c8268a784a00f1933af4f9a0dc251b3dbb3758e77d3914a51ccebfd593b07f4140bb1e08c32ad367c193f5322699b121557c2b732e84a9caf5c77bdffb3c6366238c5d5dfe6f060ca8a3699086e1f6494b74b02f49caaeaa880029005a0552542b667320a05d90f37e3cd4d1d221cf2067b045b7255fa50ba776df1b0fffeaa0a046d09a8f13520ea7e1884c5fcc1d1c82817501649a30a6df415bf403f528d7cf5b127db1805fc2549947a3e8cca9890b0fdf25378d7d136eb44f0e2aa046cd56ffc7026f08d9c630f90b750c7e56b22b971e06911946620e613d4140249e6a2fb2c0dcfdfa0c96ee8955af10f1d19a06130103cb24871a5ea018373992df2b1246e544dcb5202fb9c580fd626f79781fd7e0b4d7492aefdd5508287a0b109fb376ded9dd58ffa47a18b066069d4084024e0b0995cb6b9177ab2467af0ce72ed0f9f1f591536a17f9a93e2e4a25751605b2b76be006d6e1cf48f0e39bca6d361f7f98d52776737a02cc7ca572683c953196585168037ad5458b62e41d8540c2987cecfbd2154afcefb36afee3dbc495bb451a9b0efb15ec2f172eca85463161d9fd4ac57098d2f3830a5f2ebb0daa012a443463fa44f5905b30b26fa9149f8d860fdbd80203c856845338e72a7c1ca48ce784e83bfc3474b20d42416ddf9be1c89c76bdf1f9cc39966795ed882a8f3a274a3426b0ec6a15b3d63a8cbb4aa27ba80548a56b0a3e924d9a54974f7a4fb7d00746d03fb458829569029f39e4946b8c627edf9e41fa4cffe11969212b4a0f35990a19be5c07356ed8afd41080de013502700a238124f0570b0d371f861f6af8d093f562734b68db1b2997f0b3e0c2ce1aec980b2a03523a73f8a065dffb8dd17515f0e8ac4d271a627f6cc649415650b309d89757dd63448d97424b0af68be878b6846efcad7779f10a6ea484ecd9ec3002895f0d96d65a68c81b7699af28b66cbaa528a102dd7bf423a3a4174dce46af6fa5e98aef0105e244dffea6d8f2f1e10bcd69cab32ff7b455479dac07dd402ad69f934c549722c48980aca5582322ae36befe26440926290affef1748b5eaef807e847ed68623a4407e8380efc4c706d0fe0d103803efd7a0ef719774d650e9fdf7dd9b71beb45427d2d6f150aff61d935bddc60b38d9af1530f7a0472ee220336e96da68b29687427f09a94fc47f9d7e078eb92a3df59870e0e02f32f53776a5d29c74bfabf82fd46e713fa7b4c3544668265a4db942102b2f127eaadb57af5981ed04f2c28e7d922f3b3998dc7867199d6e4cb32f4a22b5824f9c9c01067afb3277dbd0da0c7a4f43b1eec362d6ed77ac014cde31f06708ee9bd21b709e874705e345955a125aa86e2f74d5311cba9a78219ce7aae5e392975e5519971baecd602024bcaabf4ef37973d488486e0fe5ebc30c333636c5ca131faacd7bbeb465c49094e485c672608eaf903138b8736a4f4bff230ede9176c349bbeb932f27cd3e0a0d9f0a8d5157912db833b0312d4a1257c4bbd9b31c3cb80ad355cd2a4f62834aa552e5e047fdc23c878309c9c80f626789e998095931e9e6512047a45ab4d730b75a68c22053ed0d9a2a5edd4a9caa012b03f1e992b42dbf8964036401b56ebbe680b35997231548a8632d6f4702fffb3dedb575ff0aff2ecde771a8c529b67a9decf40ee476a90a3a2f3cee61f827344ae02f3547b1e696f1128e58a8c1fd7e077e433c0a35aa7216bee91a9277677c8c2bebb3cf42bed2fc45e0ce406437d209c01c3f1fc27b61acde25cfd7b40f1b2722e1a428d05913f5c4ae9bab05de704d060715a5e8bb298a68a2231d1b08702cd7a52420205dbab9daffb0505584a6a9f449d306475bf68368ab4cee06597c703a89f4ff4dafd8317403e7d781d586a5916eb6f814ddb0375ced7d51ef4650ab2c48108ddca1f01b01800de41a5297426a54bfe2415b0a9896ccc4f3b973b45e0b1a4fa59f430e8e67b17d03368690397a457dd06be64d0279ef4751923332827abf32e7582697d655bcd3944403541d78bd5e5487623004327b3a8d984b6b89e18f2ddbac928e87c55bbea7c797a9cbc681ae257b4e58658935fb1ff87deebc755884b420fc77949c523c59f505740290e17501d871b4331e5a28e8c00d875302a306e819e3c8b915cfac72d5ff52ef5162f5953355792959dd5d4be46e54f9c38cfe9fdcb71fad9b0a02eef0ddb5329134d313a087a4aa49e36ebfdedf2eec6a723d565ba092b87d4528a6f2ccb2cea6b0f3f7fafede9183b24ddfc42467e7cdd094a2b1299c81a6fe8b7f13a5574fa1b2090c559724ad90916e0a079716f0c720ae2a22184db917945a4192a2f9765ad12132c8822fb4173120bdf6d91baf67864c8b3805fb87b92832251b45f0452139a367b7bcd5f2cc071836d2fe2c2f982d71632e4bed7682611f7e91c58ba111ba9e36dbcc296580b8ced40a7670b0759492e765edbe1f33ddc004a413440fb301096e55983fbc58ab1b420e5023303d7aab8e6fab1206044626f38b60493fa0068eba6cb974621d3152416a07637eecef4ca3e1895e2e5f79b66fd353db4babeddba2320f9eeb529148b15b6849c24313b17beff15bbc7cdebfb9dd980edd6a246df52bbb9749065f4d81e7af3daaa209914bbabc5bd40dbdb753680140ee05175230b74cb8b6c30ef4862686d18a332b41255a29eb37e9eea2e5cecc8f29cf0605c55b0b0b9553e231089400c0adf629052c9856ced87b96cf06b7aab580554e5c156dd81d564d661e1a803ca185f8b8ee7364653f827e86c2734ce9e65912b7239be93363980ad87190a4c989584f3df6940a9d1b6f9bdc4f75cfbc21566714b2e4d51e61aafaaa2f9a4494db78d347b6e93ac0e03e9a92796b3bb25b0ee85eec95784b175eed0bc6d5b502f11d3b7cfdd78a7dcd3959804a8953ce623842988c1b7abe04df5bc4d6ee90ba24ef4d85e321770f1abb8f39729d881b875bbf2731e899349b7796878c7d727855261121e33293a5e5fdbcc57134b8efb2fe0eb31ec34702913eeaa377cc1fb135a9495a0a1667a88de6086fee22fe573fb4a1e11d66be6168709333cc516326512e2a515b6ca9b0ef7d31096eb490096b32e57ddbd73fa334eb539b8f1a5f45fffe2d7c85c124588b8e645058364df45013c6cad1e729434f90f1b37507ce459f33ef77fe4644279f2cb398945c286fb4fa2bc1b5e44d5cd69faa98f6f9b9f7ed7e8f6982922b1b332a2e26d6ea9c14b8a4c403e449ca832dea4406f21399e5d1d4c45feae6ed318a7f40667b3d96822e7a6efdeb88c04e80347e73aa3cc3c361b455f1b5b334c32a3d32528ef6ca28b5ac68338627065c0aca53af1ee66880252b822d59f8d099c122906e390d7821caf20d0375082e83d548bad0f6b4e424c576941bb50234ac06bd2afc2f4fb9354ca501e273002582293af82559821a65257604ac10a2d2cce3e39e9028a29cb2452cfcc1baf2868c3d32ca3919232caedfd4a3c13309751a6b4189cfabf442cc938064b6beb754dc11198ed29e5c5ad6625e0e0b8c37b37a2781dd45c936698d51f36029f93fc3fb88d8792f998c0cac930043db8d262e6347a15d94dd128fc2b2e50c79e7fd039f8cec35dcf3397ee44c9e21dff66b4daeedfb4e6b4a79b723b2e2c2cd721587b99a7d41274691be7c8b9f8144eeccb453954ca11f7cd70628e52f9cc7eb2ac6cbf51a338b4f3c868091df803c81ff81a9447c9ab0f7d4317ea1f9138dcf0852efe907cbd28516dfb6546f25324053c83b0d0ab9b1b4ee181c4a7882775fc708c8171f3854c4ff0c76e72b0b818bd232f3aeb8825946d793552b3a79029b471cbdbfdc7fbd764cbc59cccaf67ee5cbde869e6f44701bd62c4c604019b9c4a28426137eb55c857ef92304d3d24134ada35ebdda7512067f6bd16d7c1d1ea6e0ed8e27cc395c5131c06bbe8d5a94169eb7e80b7779beaeb1d552e545954107e2decf315840c30e97fe3ad177f487c8a04a355e5c1f9efd0e5974572c222a437b23e62339d2a38b58c7fd0c0892ca2c5bb198e798fce395ffb5911cfaffe8a55f23f7fc906596089081850c362e64bb6f69ce3296801bd32db9cd1edc6f0bdc03796f28e9e6ae92afc4cd390f0b2c94c34e3f76b28c97c1cbab9b16bb1c4d680a840ad05c3f40a2957ad8fa1d49c1940074ea55eeda292cadaf05edfd22317c9d48ea26b708ef6db48c9d8ed968ac138e9ef7373056b7f98505f27de10c360a084c63c82ac0f3bbc7a047f8ddd16dd063953158369f8ed48dc878cd1069fc2f7d001fc17f956db2000718769d7eac07328a2e24793fbb8dbda5f8b515928885ca65e72c544f54d07b3a6489f22202332396e37a02e15796e6e6aa7c9e9df6b8cc2a34194b6cd734e59cb608498e9b41bf5d23d63b9d6d15a412ccaccee1cc74d9a0e7e164757dfca4a642b75f44a1d88758db6a1b28afbdbbe28bc3a89f21c08e2a0c941b5cce308421f0bc6a62455120c4c0af0238ac5998c02fea7f42bfa239d01e39007f2d53e1ae7e48789f883098c5a0f5db3b39a51e109312f35780f526f532ecd428412127d2f7f5c7a9ca0df0635e557da30e9d86f1678781bb95d089c847393fe51bf3fbdb4121786cf46ed1d2f976a446ae230842aed51786812e6a4e43d90057abe8843f8c30f811065c6e49ef26e840c463b560b3b892204fa2cad1f9fd3c6c7a25dd4db956c2f5bed0d5a2b3d08225174a108af9415e70c61862f3b51596439a98087a66e4352cd7d70b4a8b9f98985de6fabf8cdeef8ec5a2e790ba3007bc716b72bd21b8962ca9d445abf4ab1272f3194aa397e0e57e790e44cd6b16cdeb987b948532924727fd1eb25a3cec752a175c599c1e60af1aba977c25118bcf67d242b682a646d03e50fd2ebe5ea61a627603432833cafe52d6f07e1a6f45e48216bd057c25d57661af31e3dc27a018f156a273b45aca344c665ca3660b46a281a37f29dd34cf09ade186e3bcee512393adec99e1a6eb27fd4eef5a561b3a6bb2b7d6b96fd48c35aae4301f65a03548fc33d92a5ff035c618028852604a91fd31c3bf5953942cdf511c05649c84b7aca3aac5e1bf74768f926834b415eff60d5c12307b81e4ad49c22b4a9c6f0c6164504121074a1dd20a202fb877762c313f1484bb39ef5c134e705477198a5d2a42548836c9f6585fe629b287a4125b668c91d3571aa689ac66c40c20b5a5518192a0b1a458baab89c5ae738f9592b22770b647042549b23080aec0ff3f08ccb2cd85eabb18c305f06ed0fd29bdb0c7933bbe0947e709e056076126f9980ca51d6e172102d66b8fad996cbac4b70bcae218abbcbe9336e48c5c0154a6e0dcf3452e28c5018ad24ba6110614b851d24ff609673b176a62647e168be9db8c688672c2e3494e4e0553cf7d9c4ede27181a5e670264855a459b20d0f62e4be811ca87cb8681e58a21f892174f1e3b8d3fc51377cac1a6995ee6c86f5286bdf28e8266181261b13680c82a24b6c7b5047d9306ef4606dda5a1b2b8d016b585aaff23985c5d18cd9a9e03bef061c4906b0a044ac990f090bd037e86559307bf0d3b5be515b6f0b8aa4f4e582a9de1fe040f35d542c8afc5823b1ef4ecc612fa3c25e1226064fd4e2b9f88475dc3fa7058ac737ca85dc17808b649a2aefcc60c0b00bb7fe6f0794fd285f8afd029d8f0e23ea5fb9b34afc4bf5957d2b36c0b5d6ddfe2f17188e9c2bdb3d183c38002e1d18e3bd4723fa6c70be85bd26e3eb7131da6b1ec2ff3954b019f1dde9cca69d50d1d9b7469f210b1f0f9740756f426a194cdb0f7a3339470e539eda0443c490f6071615dde096f6b3ff573e3ca7861408b5dea735a75d13ca8bd5852249668960cfaff101c575071615a1f27942c93e261f0eec5ad3fa7c4e925999292be2222b1da928afda55cf34aeee8b641f8a1144a5ccc5da6c8aa23c7c937530965fdff1da838d11f7d484384b544ad53ec54ba544be0eeb27bd5987dbbde0137e10b907f7aa987f331f736638770cb509055f5bc60dc618e66bc15771d88efff8c9c6037c26e4216aeff0d2b341f48c6ec00c820ff0c8e69b83b81d59648f2f043f0b48a70e70535a1446e3c7c9f5caaccd3f98fe95ea65ec8ece3d9e7b8e836fbb1e7a44bc8d3133a1550287515f97bcaec4538056066d8a1533e00db804357404bd926fe7f193c7b41b8fd0a944c1683383aec9dd0476cc62a2c7010965da2cc016a8c44df0ab4741a3c1a52f8dd45b30795a531f02be86b851e9cfff65ee5495fde3aeae4d82a24a375eacd7a71cbac5299b552179cf89cc48d325a5418a7f8964014ffe2aaa2234f12c3e10614fc5fa4b9da994c05ca75c78ef29b3147a32fa4da90b7225702c793ccd4d68daf326b85e60bc28557109b400718933bdd62081418db176c5bd759040b7096682f592bb94b889b70d15a051a80c41800329bfb8b41c59d3c4f02494b60cf77584f2899871d6dccdfcd60fe0839d6a5d604b41358b6ec2f6a71501937d3eb250e70e8c19483a64abfc2a2624dbb63e2c81586417cd0487452c2ff059238a6eaa451ec44cdc2180c7a03f07ec146c19dbccc5e1e68f2ff5402f54630a3c5be17a2c75bc2039b301b3defc3efc291abfe98d6db6cb1227583a0f7abaa903543d4c9de3fb040b6f064a71f81cdbca5e389b4da240c135065138887007fea831b91ee6299cebfc03645181c726c72153a6bbc9ba9a6f8c7c5850475b6aa0a9f1eea1288a64977ae17646cf8c109851116d98e3f4f7e9ed2f3f5d8ef319eb333ccef576c09dcbd0f89c648166f17bca0aca799feae2a9689da6f5a956637d5036b8522a9b9923a7ad360539b00aa79ce1f1d237325b348bbede44258bb2f8b1b7119c174133c9620645e89c8fdc8e5d5a6a88fb4f5c3a8b5f050929071ba99de3634b97fc535732b655badd7f5f0ba5ed1adee9665145256f20d3a92f31a87f9bfe96c0a09307c438f7f52c7a10445022bf1068082ba37f6636beca13e57731851b118a9fd662c5e0a5a41633a68464a95ba241b97cef5d6aabeacba3d5e4e18d1fda18ef1b1bc23dc4226a3b86d32c84ca56a883012b6ac8196180bbccd3a347a55b9fc6bded44686ef8ac416bbd03b1b9b154f70212e5977f60d804f527497928abd372d220beccddb0108a7ae7ff7813eee21e4fef72c15171e6d73d13b4541d7a6838ab9394c5ac8412c35e7db7e81663b7a3384153ddb2ec4a67558180faf5691a02cbc15c03968f85fc4fff191537c6d5f77e8ce36e013d75322685e845fba008dfb2dd8771175bf0f9964106c9b7c04288a820c134a68a7796924e6aba6e6751864cc2a1943cc1f0925b79bcfd2c2cf76760e0072cfb2107e7d3ea41c349de9381c3c263665674674188c4d5bb7d4efdb8892d986564ce342edd93f18c28837e893a1f80c5bd0ee0a9e42d2005bf018b3448eadcc5364d94c6b7ae4e1f609029b5e191e9003186103f2df0603f6ba4da24702fef16080d24cd1a59ac5fda327b93f5c7e8cead87770e562da363adcba4feb630c51a839ff8d2539481e7f4f076afa835c69fc90d01886ecf70c70a46b4f1301c75feb4f6e5e2f126acf82c9f12e806af04e25290962db5c43899a77d0b8d6a7193bd3021297c47c067bf744bf6a1bd9e807e86f5b871499149ce57a72683cb710067fcdd75889d46bad7ec5463ccd75e45ae85fe6d4217da3289d0d9331ce1c9926f7f7ba335609c11d5b559105e79d9cf461b3cd2583440e37ae934561a8c2a7ee40bd630a064120a6c4648a11edea0d0054a8521363f51979bed301492bf4f458e81729bbd53102c3cafb6cb13837c8ccc0006c1c297f1cdcf38a535cc84f767cd99870db4535eda39df6c9c92352aa70c3da0355c6db5215250884cf1bc144058e699eeeb95eaeae2775cfefe23fe35e2716774e5af0011b31ed56b2aaff1e6ccdce673f124445bc8dfb04439e157097e1f3f97bc26aff6bb015418cd9476ace0c832d4a18e3dc35e293cdef1bfde508be814db448836a0950b23b77bd9413e0c5114813436668a133cad7086f93593612a81ab62adbe7d4f07ff78b4cd7f88f71edb685e25d33c800012f68fae51bad93a5cb412949a6283b969dad2647ec8c729a6ffae5b14034a28936b09c6e8c8180455c465adb4535a3e1165e9a3429cfa7b406dd86016801b5a0b1027562d242cde2fc14bfb440d20d99d573fed25c00b86fdf767d5d7753b4e05b4a05acec2be60f97c998b3a6aea27e6be940eae22da331a82243c1538f7d264d6dd1962b0c499c9bf9d2c4a2aec9b4dd7cccee9dc91c9044e0ffbc5c12bf699ed2d28f80b0cfef6d82bcb0fe543b61ac72bad344dbc023a86243219114f25d72cad332ac3500c32e33a64655b78d5173a4afb8bbe06b01f420f3fee36ed0095457d9de9de0d671650c04966232ec44a734782262c0a196d90c56e9b61961a0c37de2f7300773ebc701706c069efddb84b3ae8937e0a78ca3360b35646415fe38fa64308c0b8ae17e9bb5c03b12d72527efd2f2ca3602793c3901115aa38ee7947df0d3bfe474f893ee830322134be25b7d85c763c504f75849d13689e34781256836f60a2f5eb63da12f558b65dac6539610549743460c354b90ac2f2efec8b4c6ef0a07caa9e1240b402d46cbcfcc5e5394aee696de938c33fdb4b84370460abf921eacb3ee7f2d05cce6f360a19ff80b6681b4c583c7b8d13c99c8c191214607323f6ec9af489bcbcc196d5be57c4ca58071c54e4e6f6ad906cd3deec8e789e0e1af588c3170c5bde50c21565c538c093c0d98c6f5084790fe65f82539cb8ec898a819e14f986c0ad5dc6c7ec1087dcc6e939d4b9cff8407f656f59e7fc72e159f29ef09209b9de142fbd359c7f6882bb6b105fc24909defd74ea2102881b237ad6ea29d885cdba8a20a769869ac985aa7598b4bd1e98b62ba1f18115c091b9ddefac8259d295f9faf5350f7d3f5276f80e43ef803d2b35c167f10fe37e4e4ae254e3bb23985a96fb74953353849100b8eb7f230eadbc98dc9f8132de4da07c7d5eb835edc06b3c2c315246e79f486bcc02a5b06af8332755c244fb8f005f64743c4d56f43f291808c6620592d5929b83f92650f103646d76428a5214f5f9c635be70e881951ce3dce230ebfb755038a920cf13615cb5e53e165f82a0d28bf366b42d7012986de1793feef26eb1fdb60702a32766aae9696cba13e025caa3e740e11c4572c3f7b0a90c3c82894e31c0430ed26faf752320b993c40e92c567acb44e62318031bd1f242d96614680af9f88e3a7c64512afa9b4d2df1c17c519892a80f3d321d2d1f8882f5f53841583af3e07d4a970e2b2b42d2c6d353c0721d7dcbebf98e865319bdf173de289aff3054a68fc4be5865e8cba9568a7e009dd3d80071086476ed8bfd1badfe4c24382c32bfebb1a301aeddb70954de1d4c9dbd1bdab8228250fc30840d600809af90686cae00ee76e7d6647321c970aa877eb85d14b26224d945e355188460704c85e2c992272ddc1098d3f12132419dc0a6f9fc17917233a2eafb073a730f1dcd4242bed3564af01d88ca17aa08f49fcc0ce4cfc86ba337c90e731307710b0325abddc7bb1cc7e670d83bb15e0f7baff02a36a5b40b69b2f8cd9c7b32b5647f15b5dc683aa29b14b83d12d1568ba39d2497ff19b15ac464ca977dce2945b9eb416f41749ef1dea511d003f479a3f88d080ea09f29d4291ab387e9018e8d7ab953719853edc8c2b4daed6083d769f6f07c7d46e82c7f53bfacc8b1cc0137b6fe9939f2f7e84a4775ab7ac39258e0a0daf9170d74e6c3f3c9c90e56a4d8033ce2c4f7335f88993ca0a24c8d42feecb35c7b5b1b4687761d7171a3deda275c00b32f9e6fb3eba5acd553afb313a9da58e4de220034321b3cc1f518352c305c11c2ebf1f96f986c462eb5e027952d6a832de4f357653bfe535f032a59d0bbfcea2969909c99ad35525624d3fcc28e152a8ce391bf2c6c6818ea36adf43b35b165e5683c5bf50013429ae5a2e7c5456e5f10c4413332b008a2cd8e677f813681d754cd5e3ec13dbb03aa3088b61041e41764ba3e7600b1f8b5ce9ed9166686de05f5c7928fdf849bd0a9b72aa0f46302249a5ab939416db0af414e47f523f6f7613b63547ef132ba67c456685cf6a98c90dca0cdc9e68dc328c4aa8ec3e2ba7104290e06b2a92ef53e30cb24afc5f22ebac8273fd0f192bc13f6b50a980e7abe55e5f935ca43d4863944189866714e9c1a82c8bd586360383df92d672efb7cf402df9d72d10fdadcebbbbe4ea0f6ec8b72743adcb5fb14c31369f3210dfc8d6b4c5e19e63e56b37a5a8b5750a0f7f16c2818ff0cbbbf9e92581bf655b0f3df8276a4a7903596f1ae8826307fb7978f9aec6bb298bab4f8ede3cac45349f70544c7aee8ee49f928b7a7f597776aaf68b254247e410b429e7d936bd35ec65089ccc2aa86c56ad2273ebbfcecbd752d913dd65f62a5b947d7bf63db3bcf608053569fe392dcecdcaaa10031e09ed45e5769d6f8c3b92e128e570238d8a3c641621c0b331156bc7e85ee4dfe4ca05da896c5e557375130d814f647c421dd6b794963c0e49309cd13ab6ea0abf7d2baaeec32f733bd39988a6a5298dc31c31bfa0e78af17a87cda158dd2b78e7bb9ff12b91c2c9d67c555098c1b71c79651116bc2d1312704d885402f94b78453a1d97e82f1ad413b940be527c51bcb81d108bf94c3a9ee5c04b19a38e933a4f6fbad24a4e0690ff184ef095f18e0c3ecf87fa34097b37493fb8794bb07036406159be797350dd8373fdcca70f39be4d8bec3aaa1b9b58be42f80e0fb8a82fbf1ee8193bdb15e21e243b0de385fb22048a916a15d04554eb214b81f54bc04ac6e290899718687d6af490756bd3bb55cc6d0e530068d54fdde6243a6170026c33daa82bc736a7c77259ef557656da3a865c5de70b0c65639801719ff63c18547f64c93ce4c58243186f52dfff9556088e8f3299f048f0ed69bee21fda64aca7d92b344c1a7f921a4e90a31747bc110165bdfdc0d9eb0266470cd3614b5d003d9f45a1409327629548bf7dbc556696857112a445709731d17797932d337dd9cad8ec42525dee7b35001c80184d3d03949a99816571a809877627bc3dbc341d86d0ac9c659ac676b5428ed5850ecdaebe140fa8cc4760bf15d886aad4676ee336acd467289a26909c14826a4c0cd07886e8bba864c10b8e551038bd22d62547377320790a55bcddfc15eec7756d1faf95edeff7d651c152e9eda95c7a4bf3a511e8c97556f26556977ac193cb3a072591b94a06757905c2a6ae0d9cc817312b01e27c275eb309a99cf45dc748678ad52b872b05a465e82d98a913cec8506781ad3c74235219500a9a3b8bc5f4ee3a1e4070d0a833186dcba224116011573d956451f63eaccf12e3c6a4651c21fba6dfecd830aeb25ef97649ea884b0f8a8ccbcca14473e6717c659967544b1aa2108c16ef9c7f0d90517bfdd36432c8fcaccb806393ce1eeb5e5bb558911da71be13cfb83df90b949f6a64d57656816f9047407759dba413d0ca941e20aeb3e131f59a81b835a32cd8233f4c66e5fc4fc8a79ad8ce8d378ad52e342e91297ad599b80b29901d996aad6efef50c9854871a2d160193f4849efaffc8e8750395f7b12ddc613a6697b74e8d72f53d8101da5cd4a54f36d4d924c05704a9da68745745772018e9ed8bd476b930d0f9f92c7dc3abfce9e802a47b9ddafef0684611bc7e1557ad82b34ea3f627f4b8941c4b457616add2d40368f1be7bf28d03a18b583b6f07fef42891776b11712b99d6c89429152e57fb96f17ed56ac10ef48c6fca8922eb191db4c23f44e1ca63906a4d2786a5b4957007ba4c75ce00dd72d1f798e654bb936ea0ec54d2b5acdc95d8a3f8c55f516ecb1496faa99158f025ccd5a3f65e976b5799f3dd22d84a1b46829b0882d154ed55931b8e48a82715503c1a9f97b4f3482ac9959372ae55b1e09739b7c9336ef5fbfcb68bf31c90fb4fce181fa2ede8cd3e83357923a702086dc2a1352eb88d3935b1269f21f045cb3c9f9c6fc6e746ea9989869eb9fdd5067bf72af4ba291ca235c28b645c1dfd22a709bc4499f047d9c46b54ce020aa3a9ecb0b54ad95dba6e2dabcc653b63fe19c77fa368f9e9207588b33b85f9d3285697fd218c3e89295f685ccb6120d600de157504424b108c5c1f799d57194040f08fe83ce748b3d9d0b646b8b1fb9a353ab9548b2cd34bca40309ae93be2a051d3dff8ee4e6673fba5646eb5f63e6b32556d3e9d8036bb55c5996de9c0852e93dfe79181c91717f44291b99387ed41569b23e8e09789fe3e4b36df18a5e9518a42d9c5a77d0973299abeceba15f281e70cd5061c162345ed134b68340c37a60d719115d2d0197eb90fe09170f1b4fdb36e53581b1ddeca62c47aed61f90c547ac152854fe2c76f746d48e5be18148038c8952026d1dd6469f135bc54ff323624696106f3235480ee68088d82ba41df978c5f47bf2f497b72d77de5a8c531c6c7a023b6d5f3392f1c962ef5de45d17ae5521f062105b55dbdae4a4679a2c29fc0825f8696f79ea9d8ef454ff10c83200696bc7a3bc235b29e0c97db473518469109d3cbcd0dd188775dce184168d911fceb6fb436f44da25673fe8f8a510760ba8af0750200cd34f33190c8e9a7f46b83814a826d5dd4cfdb21b1e3404598734ad958bc5604de993055cda5f2d36dd10d8c7457347bc8ca022c6dba73cf3233dcb99ea21e992c80d7f9316a09ac8e3dc02835b3928ea3716ec3f71ece138114b1a8d549d77e20d5777afcddb5c7a8c0c5d903a02d5707fd1afd9d8b962c4f9e1cd22d852843eb6fb7aef12b30dbeef7e30d192e1b8f7c7dcb0a4ff10e6b90b5afa700ef6e4e1fc9b7cff254711c9dd04597bb31507bed87f516311f38df4ba87cf2c57ca3c619a0edf3d7f1e04efc5750fdf04fe9cec670832bb16e249ac8788f41d67a917069fbaba659759581fa2b0a10f78b926b857befb2eb2570ebb9a2295a4c002648733d0fb9aa89f35541c74bbc36944160fdf15f38f4e1f4dae35150f1f97c71d313d087a31693af164272bf145f4fc54a9d80fdb9a98a4f3325655deba242f25d70ff47702714de1979eddfd83bc2ecc0d42a052c480f704127fd0651a85793ef16bf5b6feae9951c32bf36ee52bec8dc22001", + 0 + ], + [ + "0x0a8a6c08021080101a806cc3319b5df1c8ca5bd9148831a54a296ee8692e8e2bcfb697aa49d031f4e1e74b3f4893e30eda0d44ce2fe9d902cab4e837782e18d4c7807c52fedfe4bc02605c6b0dff0af05efadd364c794527fd8ce044a42650a13242b3f80e96ac2861167c7264ca220185834ef71bbba7bf2850aa2ed72b2345672d7f29a39634b1f3e4eb9f055b7992d84e0feb2afed0b9dbdbae3bcf433bc4ee39df235600bbfab6d6803a67f434b7dda4947c4e174144e03e74714ecb64745c03d21a0a5aebdfa0fe2e2a07ffadf5344d1eb15e7001e57463e4dcd38ac2d6c3427301602980a17e1717f48f6b915033011afad2b8e1abab98d3245eb218b3eb6d3afa072a767c8f51795ca2506496cf9c058d121e88ad720e57d8af7449b4a66ad3e89f2f05f592fd9c1dcbfa85b336e51324f5ecddd0c78b486528616485db1f1f3849dc768b1cf7c219c7d6123ff5c48c3e0a96d94f34ca32e11a2d05be1542b3ac9d2cf59718108676e97ed353846bcc81ab7af14289ce7f11029113919468f000455440743cd16504aeb0d87c4a8dae61a179230ff30145bf414dac12e81604796158b2fc0bab52583a5ad52c47270977f156b37f175b6b91de7441b594dc174c41c6d47403f4f94baea74a9f7782aa92eecdbe3231cf3a98b995466d0fc327e53356dd13b7cd4ac2f7811c468951b82bf2c1b50e6c6a6d050a1c374235b9d5584d2530c06203196b0b8c2954755b02466b1c8fe71f2fb9af57f3b514c9ef2c5d96031eaad2d1314da681fba9f7eb3e545f0d6e28efa084219277783941305fecaa6d9b7d3f3d93c6e02d53d955ec1f07b7af95b139734515c88eff9529b9dd9a9c82694cdd0885b4007ee0992cf8fd100d148721cdc9af10fc6347dac93c5cb1de5b7abf20ae513eec43e03d8ed218a38e088914b58bb69267bb5b7e494623a84f0da7ff2810b3efbe8367d5235e0471ac32287b6803709fc686a1ca118a79b9e6b65586c328e33fb0d52de785c8a6f1dc56f11a90b01cb678078fdb7c0890179ac44670ab80a3a6cc6ce0415c2647099d6034fa22effb5e73fa66ba0982b849de898ba4f5cd5c19f508457f8b28b382a60dfbab22746896d71072a9e70462d29930290c38900175323c285232527b84e6793fa98ad2dcea9daf9021f09ffb6f824a16d9e96333a257a3aa666d98aa2cb589e9b18acd62839f736fb123f82a5d6b388f6044e8781166013cd47b2ba4fe8a301bf3e3a831f6f0a07c88f6c309ad90e5012c0bac243455954db06f9f698093281b04d930477ff3d50001c0bf677beee1be64a807379b3f91f5977a6a7de504c9cfea5dbc8d5188b98ec7bf50f38d8e2fc1ba6de9ab7ddbd18b419df3e1834505e564838cd761947366a20120b2bc993cc6ef457b3b1d78b2fcdcb29b1f8569fb714fa18e1f59761838b94a6a6829db2336990aaf241bd2aaec0c1081eb36161f4d644ea64b6f6d7905fc9b4783348183696e178dabc74fad0166669675645b41dc2a9927415d29b81c19eea3cf021c183e398750f76aab4bc07c97ece5130ecd53100308bf35e7688b5563153a8002feefe82a63eb540b23903c4817fad40826116f5277dde3c855e10fde07a9a54d45c9f854f94b9234efa1b020167d52542fed897960078d55942273134be864c5c97bc1035e1abd4d138bb3e12664fb0ec014185e2f4f8c4b6c2e1ab33cd935340340db53bb03562f8c9b10c8640fc0e3e8ea08f7954d529ba61907c20ecb3befdbccd522c1cdd75b15f2c9fa560f44f90a57566ae86a9c5513366d59e7ffe0aa1de399b4148c12734b2317038a25b6e8a72f21f782fec51f24d16894f308d5367e595131bb5f73cf501b3345bad54a42e06e078a1693c063e48139d3939d1839e7560c3f55e5d8ac78760df9f0bb1bfecf8c51e611a6ba833815e38760225161a6309c5359e8f1b7ed9d707007b17d1a870ba7ac25e0cbc12923883214829fac999bd56077bc48e20e20cf23b759ddc125e58a67cac34b3c01ab2ce905195d166e5429f69eb4402d809d05cf596ecb9d0d4f20bcb133bba0fbb704311cdb68317eebbdcde8cd80ec6ba20774e1b6d0e8d2b0ed6c9964d9f1e65dac2bd74a89f4a4dccc9e91920549f1b87fcfd33c24c4e2d8ff7ae59287160372b14f2e8bcc8ae410cf3be2c18149df686333217025f62b53a2df0dc6c573e1c07c5030726cbe7c78405afcf91567efffc066d4f2d76b81e8e824e69bb58192f402c1ba0bdfc632f5907daef4e7340627e26cf371918596897e1ec51f4568dfe9ed6406cbcd812847b4edcb8a1ff69015735bf4bcac011f8e5a62c85ac6be97b5b91a1314f1d37eab0e8e61dc24a155b41306272eebc4da8df6e2856a74edb692984b94af223e57dbd8eb7f23ada0498d9aed26ed0770c7be86a7320d7a534477b3b5c7e64e2229e79fbfb4072f68706fc47ca0ff4e138a7982349d0bba1232f98f39f28469470c4e0e95883178e595dcd06414006e200714baab0e5925af9d1c3313514d375280a4b0fc402220dda8621e4ff4e173142b113e40547a3598edd7ed60b72bdd22d62fdbcf5e4113016687c9d1af01e2fbb6aa0daf2cfd13abf7d36075caa2056c83d39e7c34d2f89a433a326ab01ff27953f865919be6866361991335b9f68e597d2b5bf1b732a38afcb33cc6933b32433f9cc72c7d0a9319fe55a531e744213037b3453e0444a50c36b89b699abd3d5951568d2432671310ac2960f06aca48497880546a6e3f0b4f3dd3a78cbc5c6465eb5b12a791de1b8a27e4c49f2c1c923e0eeaab94de3210ac4dfb67697a365740da550aab8704fe638a9a00c1f0427c80309c3d80956616fd36d8df1b5f98987d23cb79296247795a46b6c259adcf8fe6013f76dfa48137282e45cd102de060597c6ba5cdd64ed78c4eb5935197193ab2831504b64642ffabf1718950ab124282a4cc06bc9a2e84d52c5eb6895d5987d0b4ade4c31797591411eeb2c4e30b74ddd851ba2ef8345893efd5a146e40ecd7619e4292349a8814d0438b662fde8c3130c121928620ac5c5babc74014bda986aac4474fc5c983af422596fd88763ee485992a33708eb48ca57253ce1620447a88497d7d570eff72d1d4cb46005202cf5f6c0d477ff9ad8f8eb8e1537ce1f5a6e8d080b3b28183f8cc82f5c7a9069d578a99095da6e79080a81ed27526ee8c3614273d9050c28ebe27f31623003dfef51776e3078a2d2f7f353585a367c50cc931114ff87797c65d35c943ddb9f04643b5b079ec0767c06eb43846f4cab0095291b847fe18c4615d21d7267d0b2a8ddba6bab7515fc6aeadac8e930abc6820f5e1fa3182f725182c5b59bed3c47eac7e27db39790fee88fece2327dea6dc1887e415706b4f1ce5420bc062c0314dfc66ce3a3234a90dca4c71bfc06189edba318e23b189d4499518e7d9f8aface33cb6a9e0c45505bc3da9700740bbac0158a55caf35b93310aefbe2ca2b1d0416a4d55592ed068e65d364cf80674d6c6ffb79d6247c4914b0ae34400ec3def61b3f7d5416600fc985b6f318a1f183f5a5f14c09ccc6791661fcf477a75fc0ad9c80aef45dea6f5068f09d23ea72db5934cfca4c7ce5a230aabba563805bba4d4c27d4ea117d51d4df8d28804b1a837306ac84a460f4b8c2bb5648751f474db64b1326dc5e1c0631aed12a48249f3092cc1f88595088fa9218165eabf6e7b31c0eaac37cc005d7eef284c9957d17b14a4e41719eee641147308b2dc032b0c0ced5d67a9326d5d039ecf3a62dbda07b4ab0d6cc201e17debf69b642bf06729b25138c2745bb200854ced5758d883fe127e918bd2af2da5e899bbf83bb3a42b350befc9b1b1b25daa05c7382046e23e4a658b7fac99b0729614c60396e3ce848ce06eb4f77f0a7e6cb4124a451eaf2848b5e7f2616c3504d1c5c714802375340c910b902dbd7757f80a5825ccf8466fb15c8d85897d4d048aba1cc48ecce90ce9ac9c87ce7daed5bed8f6c79975f347a638c83a67784be7cd0fd64b95574f1189d608ab3f5728e0ea3eb70c29293f51d4b1d4498827b7fb6f968780b03a590335435dd11cac8fad110ad11dabb4afa40bd9632b279a233d3363ce05f09abf86b64f99e8eaded1e4c131dee8c05689749874766768891cc86aa3f8bb9ed5fceb4bc3701c7cc439a8a3ca92204f4f7534b87ba1197da6c7f009e2a1bd0af09c12cf91024fb2c798ce2e4a2b4fa6c60735245155f5496eec6ee836f94a5102e5a74e1c059287c7ae34a0b3a917224ce7b2e596c43475f6f7ae2302239c3bfad1802fec29300df28132e38222ea0609ab3526515fadfafeb8019e6fcd798143a37cdf1bdb434c4b8e5cee91e01d2080d5d12f8ac6ad2a3a421732fde139cbbab219cac320d63d02a011af806e68362fea72bff4fb11be197b022862a4e48bcf6e8d7a745afae69b96b8643fdb3b3db821697f77ea350c08043631a4c65a81b5352669216e5a44fd3a0d0ee1e427d41a99b7d1e0cc5c5919f92c7a9d6966f6f158a40076b8290b22c783b0b245b961d2dfe7d176522680b35092d7d2c8779e452c00f6bffe788033087a1730b7a47910dcdd60fcc57ce750cf925cc5d9c7056786b1361b35aa60ec081b4730fa9746babdfbb2640cc4bc98a157a4ae8d6b20d74bf68f17d08b6deaea4d715dc1a74a2cc4ca8031ca6922f1e434e09c52bfb97e9a66e53103180fe4bbf51a4126e180c3ac0a82c16c5cf02356f39db877035edd05d4afe759ab267c2e8869aae4c11530bfcbfc6b0974a14232e73d920a0c11bf3bd452835193d1b4084566e03bbd13da2c01db06d79b7407b10b2a91435671bd59f4a59b9baa4b7213310ab6343020c91dd0cb9f70b0919bf35a4a2caedf95248e73f2dc1ac6765d825f2d53a827c0165316ab4ab1d124ef785118b5527ddfb12b806669dc34d78547868674c4f6d8f744ceae5ec28c19be281acc842b8d26b2fadfaec839e8d9d92b034d0193e4ccf373868c5d16a7bebdaebe8c31929c8ad936d74ec5a0425bdfa507cdccf57514515ed5503fc4b707cfbc0336a5f70745640f70a39c1e98a29959a873bc90afcf6e172a6e2bcbea716293f66933b9640b864871b370d5121624c4991545d801b045904cc61022ed99c70619984fe8cb370912e302df6c01f935f13c2202ee4c3422830746f1387d9e898929d5097a53ca0ddd804120ba0195993343d70ac5db85ad93844f8a9a3e6968a27d48808a4948e74909ad4b47ec17be53364532b213a741529be98b2e861709ac8e425885de58e189331da7277d2958b1d6b76e7255bd69f8ec9dadbb8a167a31d393d9bcf5517aa90eab46b1716df454981bd95e958058747c6099078da94d7914ed6e82ce90e96a9e01bdc0110ed13cea1b58e095145289096698838d776187b754930ced4d08aef8af96829696a02b40b7c5689da27b64831024c80821a5ffe42d78ae2103ca76ce5438a264e5ca5a94f8a7308c2c3df7949b6af653f93b9ce2bce99c1f43b1a9237a680dc971f6590b2c4d4821616638bb35acaa18ad0d1534110a8eeb9fcc91e77b5dd65118384297916312f75447e5e1549057bbca2a485d12235f2e3c477e0ad23d6603c617a003f363be94cd8d99e0d00b3bbb519728383f0def22f1f77cf62c42a4dd582b7fb254bb8f342c1129f546f02bb3e614d21a121e626c285e5e995010c6bd51d252627d2fefb0b2c7399f0bdd2ab1543bed32d558fb570b133885bd1712cdef582035b2f97f7a5f6e985af60e4a5b430f0cbbaf51c66bb0ec901c7ca04f87501895a065dd43ac2352c2dabf8711a76abf5de7da151021879244b6e41638de6a3522ee3f14e74ab755758407eb516b4aebd6eeec127317119f9ddf9edc21daa0ccbe898ecb9737da00cd2bf73f395bce8852e7caed3c2bb9d67ed1a811640b8e2b36eb9d151218d0ba61b52f7a686aa694c2a76e12df8b3ce97df2a7fe4cd75e290bda3e756e79a53f755e51aa6200c502850e97bb5c1f2bd97a872a299ab4b0fd691ebb160b1327eee3d1a1c0f4cf0decb77faa7d7601cb52e54c3b49c4e56ce730c05b1c34a9660210e67599dd63fabc58b422f9c78a487cf3af3fe6f9106d4bfc1ccbc7c7054aceb4b44c971949409f3e28ad9d12c6119f146f0d00cd7a1a90333a2627a565f43d13633cfe2e970b087fdd898ccc36d6677696f6a2ca618d8969c83e11e7d53aee1e5729273712eb52b927a356a3321e8a54e8e1dcb4774410d82b21d800429e7a34cf49b8561ef6b7f48db426a6bbda606ec282768fb36f5f508d5b1a1995e7b03c5da7e348552a4d0b02a508472dc791a9aa201ecd2ffbea41de41632f4d11a8b9bf51eb47aadbb4aabb83472044d546557500ae2eb487282261728c4249cc1b5fc22f75bdd069c99732334c471a50c2c944d2563c67b93901e0304333b407a4ab2289db5a9cb0b3efad1d357e329199a3b9693595f0e1b5f2a0355a110761655f9bf94eaef537e648f23bbd57bdc53b5790c5b23b50e0003e0ac603bf9f4ce0632004b0407b87da898c0ce89ce4718f382daf347e69f873ecdc82d4151b86694782569fb114979e8f499c3e48377f7eb4e84b63ff841c972dc195c14cec134c7ed425222dbb704bb09beb8a6fd7067e3c9dd6c26a8aee5c59922052d6d1367956edf672b62245f044af38b78e67b780523b610c0b40879faf4fe71224659aba7852a9d95d87eab777dec8787576cd33b827b8d33aedfca5c21a4317c0d554fb78321992f8da9e11c286b50aa9f42dbe474c611f7f6e41647e2effe5b61282a7d0a7adae4c4a22b54596075eaa729668e731c6d040cc1429725bffbadd620757e38c57ac5ed36ff6861a75db7c32b41459f5209e709e0708a8f825cf50eff912049332f159ba6e5a2a05ceb243e9972ca4b1a2984ddbd19f3b5159474c0a6d00befc794c23b3b9160b6e57d804b506e17161dd1614e2be8b4d30cfda057aeaa5d75182cf870d66aab9b3ad927dcdfb212fa83be8089f935fa5bc21269a60a59c0d59e6914e1b8556211ce2e57d06b387dce4cd3e9aa6b6430859f823e6f94c1cbb4ec599028ccced912726679cf9ca9c40cde1fea539a5130e5756fc5750a125110f57b158778b0c25a61ced4f7ba63ed6f67ac77cb9a23c3d1e9355f1f04182a0ef0a9a9758283f1100830aeb9a66bc4da38c5047a149165620718641b943dc0bf3fe991f3aa0e3aecb8e019651c262d5378c2fb3f86c50e49f62d6d47bb90f7f10e5120aeab73c9384b8ccd23801037c5af5aba4d507ebdcb3bfde67ac7c1bc7e7d3bf632189f47cea9ac61318818fdc1fdfcae63a4c421b43e0ed36a461eccf485ca86bf5347b0c2a2bb0af6257b9044355a45ba1d486cba67456c0c606e0b654fc45462d56371a625447617409b0f1891782addbf8e3877f38e49b634a8bc2e17b47e49e482b4157cc15680e4542a5fe270fe7001d663fe374f8e5cf64c01458c639c8785227200315283ea01465d001dd031f56b846ea02dfadd6ddecd7482cc31614400d557d0ddc816577adc77347e29297a19ee21c1dfe7aad972f0a3dddce5c1d42474f205097091a4f6edefc218d219dc5304d5dbf27985c29a0ce7eced298d1970353037b4eacf69a4808f1e3ef9cb726336c970699dd83385278ff63ac472c4923927cd12eb9376de17d0640006e1e0ee90e10836462552a02c220179d7f1f9058a12be5835ff350db5c94cd2e92c5cd25950bb4760fb920c210a14d1905552f43366c98724fb2459bf0fffe5c202af3d293cc97c6c0ae1cf5486fb78e0cc0d26aed4819fc050b1b2c8f1175d10c94e6942a56b028f7f3f25a59c6cc8735cf823cc7c21859093d5accd8dec34a6dcbeb790f12e82f59b3b62ff8b9ff0a9d12c688f72e51ef7b8967bcf459487f4ba361559fa2da7eea647608410057174cb7afd86353abe59c521975a7e0ebed3a9b05b696a83063ad693ec4738f6cbc816ca03f97e4fedb59674be736e8cce508628a93511d20cd3f417fed7e10bdb5ead332183eb20c59acfb0c77adbb7c2dd3f16394fed64c62bae9f97b94303597e9cffeb7dcef628d63549ee484432ae2c5b6987d40cfff6e11b6037a1bc3e0f48bf87d8e1e30bcfbc739a2307dfe12e5e23aec7ec4802ab4e5afd4fa7bcdb3b81d8341cab08645f10947f1b772cb2391bdff0573d335f148457624116c72b20a5e53ec983f6e601dfe152e35e4b28de209f6aa4055c271cd85ea04746bd4efaa4816e8a71a8d61ed88d3791f9606b965d8aaad7741a9f6bf06d55e3d1bba1b88f2bdb6ae9e48db89f40e3d65eab834167837130a4e80d3a9838d5ba0d09c011f80aeaf5a3e8a291672408898b4933849a468b786464bbb3fb7d944e8bb9ef85d1fd671b2792d5faf68c5e307bda8df5daf543f6ecf3919a63b3d6800257bab48afe18274b8a1a08f823670a33fe58aebd2123cc46b754bee7318eae4637c2a6885d8d1d5f6539b152681b986c297f17116e17cdde777ba39aa54402774eebaf093ffebc8db90d071812c02849665f03171eeff40f527be475d8f49d87ac77454ec24c214b9e2eeaf973176654c5238cd272b57166145bfd917b8213041d605eae8e33eeb31d83069d046cb482eb6bff7c885bbb029f4dc120cb3853fe18a345ccc9281a867642a0823e5e02ef01635470b44c92b917481d93090a95a75b8cf7ffae94922a928c26846dd8df14a07e737495990e22d82fe19a2f3e06252a8b1a299a4a1d483a4e9abbb0e261b1100c03b87b126fd074037b9a84f8a891462f5aaff53ad5b09fae1459f217543ff00485eba91800de8a58afe5951b06af1e2cb6a25e679da1ced0d4e0b3421b00e712e1208e1dbd10118e81457c6fcfdaf5e8c6570096b7bab3b08d4fd56200bee44b89f3a03bf6e245a50cbfcd4287cdbf41a8820b57102ce49ceb482a9b2362e223e5a99d4efa31f27244265493066b74695a960ac0976097ca62a9c740706907fffcaf11e4501bc05aed9b3d34ed7922b740aba00d2c4e3424125ac3dcb2c3cd743bd159a1443ea5cb27d6d3d09c927d84598f37511efb4e77343dddba507507d73719d7b53a43d7710ceb196795677d73962fc2f9e3d7c0602240bf5ff0556098077be4d75230266e936b2f7eeceb7a35baf9a91a2c8faa1b1f96d9d5b8b551caf0e94420e3edd126ef1dddd4d0e0961592b1cb3b2b67290663c086a0d96929fadd74b0da3dd64d3885b2f9e2e275f54b0ae3f1edac0fe568a28108f93bd9e9d2f4cc8c6265e3ee79c9e416d4d124145270cee7b41a4f32716c9742ab6cbfe3cd6e9298df8becd717fac63c5a7880169691d12a31b0763310d7e558e2c1afa6ed8e9ac776a50fe7cae2c3100e8f484fae1565b5cdd2ddb2aac7d9062e8cb25e75311d0b447c8149245c92a76cfac862173b37074aba19153ae7baa1f780ea899d99397fcc25fafb780bdf0b43978e325a7d355721ed2b4361eb08ece897670744beef4d31e52703e0736f8846f4c1a4678824bcc4eee0ac0a64106e586fbfedbd246fa7ffb090b1e4e807b1766d0820ea328654aaba569ad0290a2195349d25485e35668ef113054c39cba9153d212485ec2d3fe6d3c1b888fd6f47b479703598582b048552f9a3981ccb544c1a4836da60f776c5f3e485a8b5907903472ca2ab9f5ce92fe2434f444970e1a757fe19843ed55c1c6489b963664980b030c034ca92d5ff3a00197db40239f937bfdaafe4b1b4ba85bf6d041b96f5a422e754ffc5705248226bffe006e8efe943f5ee74df69ce5734cee1faa4e9be43edaf5e763a5cabd2048a89936143e8489489915d6ab1a51a2d85379045c99ee6267daf8ca67991ce9189d314d61b07b93241b4fc4c7dee8c9b7eecc2b4b9e74ec89706f47dd17eab6d08bf77195f1659733e7e2384246f3024df6faa50f76a6b556de4ac9b16926fda83a686ce2cbb98aba9e050bd5fb44a66d16617b4695be24bbb1337bd0aab29f504d6d6eb89d0a949786ac64954494cceeb6f3c4c87c39bc9c3f06e321dd8c172fc355c9faa8740809e1d325955d1dd4258d88bc20e931c572fbec36f5a4e045179356486f8ee53e1401c61127b8c5a17cb81614951e5e889366ab04243f08fb481ffdae619973ffed5bcc98cad271bd882b65719f5bd3e2a35896dc4e219dfa1a377d27879d0e97cbe046ed40b629773cc279076a300bb51d0ede08e148364300ec9b2ccf809e628daaa622160cf705b7186884ec5cf45b3a297b76b8add4067539b375544dc17dab27df841036bb2d2526705d184f9727d87aadc2d352c61174449b4417a93cf44d8103f09a0c03d2bc02e345bdb2ab8923b8a074ff48ed7cedad936cb633d39e273d152eaeba3b9e381f9067a6f4b1756a1346c966b77a550cad884699a3ec5aa31dc2adc12693915f21951faeb4c91d19577a0c7209e5d3bbca8d84c605a8918cd9761ed1240f258881f3608afad4415fd74bdda742a83da4a399a436aed7133ff24414ebbef1e2764d4c34d17b8d06bee52c338b59264f080ff06e728c5c8cc9a62d41316e796aeb17783031bda05aafd8e9656ca0f004884c33f87f4b1886c24e23fc7b59fc83077642245f4a584128111721c9aeb19fc6cdeab204a817367f04453ee8b58c4ebb16c7fbb62116f0e10f9dc288c3daf1631cb3e66ac5e7a0ebdc60a35ea7b486ee62c97e10e59a93837fd7e8e0e9d53c79d666a6432d1c78127ef6cac5a4fce8e85407d651b6e6fdac8283ba50512b8267a326e856dedc91489b2036d8cfdf3c571cde2ef5a4a6228abf440b43b29bcddd5a0237c002bb1b2a85378834ed97ccdcaff962da3583b1e63d2ef6b391b887d67eecb82cee4128e2f71086bd5762a1860a45c59d94fb7e845cd2f5416ac1f80bf12315190ef0526d532a1e9d9a8157fbb44a7cfee66de0a8b0480ea16dff23b4c9dce31131039aa6f6af41a772ea19ff3c5df7416686154e06c6e20424daddeafe3e6e6ae2cafcff58fec7ec45b288ef73e9916405204f2adaaffefe6a5ecd93ba602ca79223f994ba487f99ddd8bd0c35600e11048789b279ef585d37e62ce1d1c437239a58511df68bd316063787177f8a91925176f69a7450cb03828698ca31905a27f98318cab30186d0f34e2ff45cb365776a0f94f5e44e0410cc051e5b96266e26682fcea87604d0d73361fdb9fb957d31db5b07f4b5d97b52ebaae31b067359afb0c8d68dee37bc442cf5ff86b05538dc8d31fb7768cbd3756490a30d194065d849c57e791287260435b3acceca1363b96eaf52bed43cc6ba3b554403a47beb7ce32bcbcb18c56e6d918e36f6b420640f867e4982342b57ae1e2126f5bd1398913935af5b57852b8fda4a277cdba6ccd850ae578ca2622af0896d7872227f029c5a9529488f9ad5625ae5a7a6567d87e8a3a84329d1b9f0c2b3711c7ff37f14ab6f81780aaa7c7bc3434eee2284f02dba4110396697d43a2a3b64cf25dec64a2c59943839ac1b45a059f366236ba2c0d8d7a42da04684c0b212de066ae4cb8de50ab1472caf2d53a718dec4d64e31b2aee32616119d8a3558317237212d18d2ffc5e0a5616a7906b91c888ac6a76f70a15236beffee275964268ac5f91e955842d91c2bbd04c19b1a8a9d5e6df05bf224aca4517d8db9f0b9086b3a053cd7f7a15082ed0413f6eec98088203c78e8ded7192623329b4a533fabff89b89cf100ca1574ab15255e84c2033481dbd5ac0464b1f5e79731308df18d9164b2aa51818ea9dcc058fd8e983d38d7e84f89483c6c03ecf65fbdd4f3eed1f654eeadc7225faed914478ed94409689d216f03a306a3c52e2c153b1de98d7773266bd5a5e930868620c9d20544b2b0e157abc0c664302bd0a7bede6cf157a542407aaa30895b57515cc265e8d571918712c774abf68c42dfb6e5b67167d1a0b03d49d99812ccdcb4907cd6ca52afb9a82b17254250cbf56c2886b71cd2570168310ba7ae6ef46520632686d28c0ed495629a59b361004819ac13c8b1b27735ada548b91af4695d1247034ad9af3b2ba6659101b49ab3fe3276756e7ddca48d0d26cd4f5867b8ecaedc9644a9209b00fd076bda19e15c3fea4e02fc6159c5b96b0d31649c99928352eeaefc3179f82511b37f7a25739e279cbf7c3eabae2488bd0389496f3e4112536a473bc1233f27b472468ca847eee082a6afa4ca365a87362603ccb61935101c997b7ee946e89d47abc3d0abd883914c194c17cc17b510a19585881f224e89ed237a90ebe2fe7bc47e7274222b7d16ac9d56cd007c570a8f4f9052babb73f899d677fa2edf7babff38e5f718ed09b8148d4dc5aa24df54e2ad34067b91bafabf89dfd19a4c835e9dc528565949bb78bf1f886e0e1981d86e3ee9103240ac14981b074af45cc61c40f581a4ba630a920ff9e14b5a8ac8cbc1ac2863a6a64f144add63683e1713f5eb2edf832229b45912ece8d971ee3c3773d2653144847f6e6ea89449cf9cf1a7c6f0f676dc4ad67af5a880979fba322dbee26725cbf57971281d6b87a7cf02515dec94c7618054e58dd5937498f28f752e46157f7a232437c3a0cdb4a6781a09f91485392c11519f4618588a03aa1c6bff54ef2225c1080731cfe30dc237a4cae3421a98243d1a0b42366ac9256dac8dfe7694ee3869fdc28967caff931f5a7400f50d42b9453eda8b9e29bb9eccbc99592b87f26f42904fdb24837503d47e1e123a5cf278accd82f95ae3a0fcd20fcb73f4d8e4cb9eda50863a84fe21a34da368889f814015122fa33b859dd7de701b3160383223813451cdb5534f966a956efe2218fc9cba9952b5f6a9020bcabb23e1c0028e0b3f26a003d169bdac4f54beffa27e2f5f9cad71db9d3a097035acba205a9c60898338da3f32fafa4cf5dadc2e70336f4268518048b98f8637640f0ea45ad29646fd4fbc270b661b5a5bc596e0d1b2207666fa6283504ff88c21563c4b03e0817d3e3f4a9fdaf1ddc668574b2341c6afc67ae3377322ac9626c85e088cac7387234b7d5743ef93cc7df7076bcdd36de3e1deb00c6a2e2a34abe0dbe8fc75ee0198ce8b14ec8bc5d6fb211fde84d9629babcae5001ad4e6ec8afffa9cd02f355b466dcd8a81115f98ad896cbbed33c8dc2d3247a598e4ae78e2277748ead8a5071633b4512204098c4d9a0b717125ce53993759fb12abc550cf1415fce5001c397d9629c237a7a3e609317db5b3b483d4e99331100cb7f417a899fb92be3f6546aa3849314c863ad1d78c74bf97a0b79a3cc8bafc3ad58aa6a5da5ad8d5fd09a9d679d96d12d4311da3591556592e381e9239cb77bd66d9065d8dd2616d2807b55376d8e907ede7f34383cc0a53c300c6e6b6a498fc060f871305a2d560f926e2c7ba668452d73d44af62d15afceaf2e939cceeb50bc98d079c4482da75636061a334c400892f2b1ee1da8e32c7004e5285737c1b311a432f2b4408fb69a15d36234489a7f1f50c451d8275f4083a9124f7fd070eac8be98f16a0c5f467f93b2cb5f283ed0dc022a45946e5c46b39e0be9bc844164ce032b430587e2419752dec1b67c5aff5ff72758965de79b5122b80ab292b4704a0ae5ec9b3176e6d647627c53f52d4e363af7db58ed976ac4f63adaf19775f297e599c01bc85425e822d0c3963889be7afe7aa9584c912ef23fec578f6efb4b46dff66bd5fce6446f8a1f880947c33fd81298539b63f2b88881a2d4f064bd945cf598ffdad4dac5e70a1c386f2fa9a92d3fbd4029e27018c8dab866cd313fa045ad914cb1ce7f9fd727effb3d9d34b12fef06c1c0db513a2715d9a247b52de1005d87ba20e3bfc3b06986021c4f834cab4c86098d7549fa4d26fff7c779aa1106090a4be096ec7bf9b975af6f4c174282f4893501dc462b5f0d3e9c56aec1f65c489a77bd8429c180b3094da23b098e620ad94f86a3bdd87225ad40cdf07f291a06c909dd9202ead4266db2d39cc52ab7dacb868f967bc01b8e79e125e8f43f323cb86712a0b94e12d9c9ab524db75bbf49c0f75b1cf83e3752a2de2621d5e3f9e469f6a25585ff444936a12f2d704bd6365a555a4e182410d9a85d84cf4dc40d57088d06452cad2457eeb0792fda119b21625b0c048816dd5356462085ac82c81a6982fdda285d5fb14e87d11edbdc21e4958db8c8083617b3195a3e74457aa6be4ac12c288b6d999109e6f7bafcef8b669cbbe352437b3bb4803628e8e2fa2282b677ed41afd2a48550f80b8ca281e8f10e39769df87c51de50dc550a9e9bee3ea7eec1b2d35fabf2c3fb129a02a895799707a36cc192a1821dbeddd61323d711ab03022df2a438971821329ebfc27ae89b468a9ae30a0a8dfd4192f996e5afbee98e0fcf82d0885daf4f614a03597d9d873b2a0c4d88d02cee84e4037c3ba5895bb88f2a6979789c9a32d68612cc31ee8f9c39092d645913feda93b53b44db136b3576a3c877df9006651ef36f9712d306ac6ecedd2f3597c93cd8285592a85eac0223bd3d5a041a66bfa6864901f9217f36b13f6c8a47772de206e27cc6802702e3011549d6af9bf6b14bce532ee7ba1a1a1fbe15f3732b8ed806af1108e56d43f20d2724f9621f307615eb4060412af5ec7d9029fd3a339e5d9585268005268abf1755f9be78ceecb0bcbfcb96f09c1627dc1b22b28597388a97f43b1dbf0203dd6654a005a2b6442c4893b62a28534c49f1a234abc94bcaeab075825e599fb27224e4254099d297e2a659a79745368fb1f9e38d042008fb3e035c68ef0b799a3c14ad38893b63c7e189754128be43c9130502f2931fcf910729edb2d3ee71aec9df98d269730df66aa1a0f5b7043774b2a3bb4d57761b5ef702fd35c35e34f9b0f476a83d32295b48ec62e42ec0cc4fe0b9e7f1d3b205a6fbf848ed347dbe3d339a296d0b467783119f6cdea07be058c64e9c96c781f39a214d64acbaae211ce76dd6bc4aebb365bc3917ea27cdb53e5849b0dff068ddaef33a9a3a92000fe284528c9f591592bfb98fde74246e08dc6a001a91118cc9ca9c05186d3aff33d53d0577c5061ddd3ca7ca5bbc3dbe2ff63d54d23dd3cb8d12a4b2ae65e111b6b335e6bfbcf07cbf6663a179b6c21d8e5ad6b678223203c54083e5772671474b713185378def76392c934dd896755613b3dfa3c816b013922db4e77919ec4e4be1dcd0ae98d1738e53902d4ce86afc184b21f7da1371458bf68dda0ddb25c486bf88d754c1e10524d067f9d77af7d0220652357de578766af2676fa2a22c9dee118e54a75268a0f15e6bc825b0f7d34cbe65c510eae604d3b987038f45df0b4bbff97629e623ee14f48b893e66186c6edc961ab6292082d3f368ed74f663272ea5400852f09d5c6be4530b99b87d22b05aed8a646ca8bb6ea29c66f9786cec8566b1f1ced4bc7b933338d7076cabe2e2d7706cb30cf63d82026894fd8929766e8f5b622ece3b29a52971de73cb9c50bcf76b259302fe71175ccaa16359556d2162be8cb9e6fd7e3d4ad5d722fe8276c3bb3b19e15ec4bddf4b675e22d26ab99abbd23b818eb75d41d8c3d250ef239434f7961176de77971a87eb245aa2fc652796e9dcb2f0d021315c8f23b5ca5338f6d6b16625285b4f5f4f1aaa46bab1e434fd885c0e0532127d415047423c6dbc753e3385514a0acdfb6d5ba988ceea40db458d2b4001c02858b62654d736208d0a954a18174ea63a48c0795f0c27020715656d0b049fbf9cf3630ebb4240cf69824e10da3c6744866ea20bc07171fa33598b4e5ee5eaa5d59973886524f278f831e8b71787dac358b9a05c271289496c842ec49865f43e1e1d888afb3d85b3a8b74c17321897e3c5fa8abc51844aca9374ff066db410e2a4b45ddb2fabf1b202c2391fc3266accbde91a95318f35afb69883ee5ec3721bba12213c7181de23e6651655d2b9619d4aac08de66989afcffa2e5c1ee67b04958fa58bb4bdab3fa299a97b59e499721817e83998478156bad449558b11200234352f3d33c745ab26ab111a073509a90c6514175d295fa71695d8e485290ba63f136778eb864ad000673d4daf53e782a5e52684892aab6a4fd0430e404ce4195d880a0067018247ddd2cd07f4b19a8d65369e2aa6e74e42d5a6b32ec3ec32f4a7480f81358ef84ee201e10cba1379897ac62df5b359a357e344efb72763271157da8aca1bc9f4a2d39ffd4173e89dcdf6bae37c43d2c665ed38dc6d17e38a0f691cde3fa04d3d9c1df7325131c7734f582ccf15578fa8e0c6f3bf164bf2896671e624dfbea87bf08204041e6ea5c57cd14ac676ccc0727c8d55b14c4a1a6f3f227912686bad380d0bbabf3ea10b44efdf8ed6f2fd359773fcf4abec3f7f3ac6feef96a33e0436fd632969e4e127b4fb7579cda127af98e56160be2ddf7e6d8b868a8491a0e25152a6912ad6bdc561f63169315cefef202575fcd0b9c7de473cf3a447049292b95e08c0a3bbf5a969a7e563c3cb016da033b7e5e68ce78c2a877cb2ba806b21aa5a37ea175d11c3b548e1c47c6460d91419214603862f6728861f8f36d2682b1f177716857c3eb345f0641e569e31cb992b6c2046fbf083adc38044bbdf17bb115f707a7f72da8503fb6aa7a082b2b1905cf35d416ffa996723a23123f5567a5c9cad55cfeb470c394123e2874c27cf9ec3cb830e6edc2b66f43b4342f45fe260022f175e94279e2a202a18a052888aef459ff82e1505fb343869c793d56fd0e58555dd28c87242147d81787c57e1f8a964a1e8839986d308f0ad3f9acb65109eb19d821bd58c19cf30e071d8132a4cbe782d4054b870ab71c8e88a47c934644cb3b164feecd2d54272b0e4d54ed9e7483d1309d3ed79b46ae1feb65abe11ae879496c10a0479569e533d78b321b30242681f3a6f6460f608d853b748710602460771c578eb6c4d7c0ca0b8d46557947048d5d8c05c80bc2f12ec3a2de865047ce8e8c8edcbcd26ddbe5f25ffea6f7a76d4b693bed20f69da7ef5c892f4e78e53b6e68ea86e83f0da67b7474244ee0f4c71d4e10654ce6663bc746bdd984c91fc47c9e740b70635f9365de39652f1c0ba24e6d5db5da3c0203691add207aa9ef38dcc261d97497613a3663187d01ccba51793ee43837729b070168ff01c2e33c57f91c962c621942795223d4700025175287359a25a9954b81591e390ad580e88dd0416593d1022312294785d97e1854a797150c19d4e9467dba068a8112434ce4f49a7125aaad95050b68c40ddbabe531399870ea39386732f30ca67d1d6b59bbed9c55592ef67556d054c05741c5a1afc3a4b0a34f4e89bbb7d2493966cb0c473a0a6fc40cec1f71429c7a826a286c7d84f1f00bb66275cf6f0271136e7b599a06f95f7158e6f432dc35686aaf6c3ed3e3de856abb88e80552c4f3d2a3bacc981b1a49d83434c707fbf7fcb6bdb36ee4159d7a59854ede3b8dc21759f047a481041f25fceb00cdf403efbcc90f82b39e2ee050a105043e7e22c6eb6c1d12ca8b5695e109a3f4fd2fbd56373a4e0f34229d666abe0d1ad62e2a66946972af508e888797ba4b913e7c659b3f5715362e953fcc3494c904ebf9e86352845985b23e4e6cb642d402b2382327e8a25f2ec616ba5f7b42ac1192f862468d711c66662fe965f8743b8ddee4588a00916a8d3ac82b07f2ad78cc4fff6897a0a4b14881f5c746b8304a7413ae2fa5856cc75beb14d27b7d966b5137f658520acf11ddb4ba8f9b2041d906179c03c749c90a2a53d4a2bedcac3ad680e17b585e2348005d7f7fd1b2c72bac3e9512195578b0721215819429e59f189e5b681e63b9bb0528565c6c413e8fb06b93385b446e3427e1189ee0f91c97605d25a244d4ed63d9c551c1851af75b38648114e0592b9cac74cabbf28b93166fc46e336c065d1f09a0f26cc6d0a7b480fa52a79ac6d006bd4f95eed6e6d47b5eee066da00cf27c4c2a5cd136f36f48c20d81e1ab1c3aab6d6cc7f8dd8bed31a60951818fbef26eabde0d93ef1b1d4b206192ee0e3b484e5c6fe603891ff507b01e146bb674b457420031cfdc0809384daf0901afd58e429f32c25d8286e1c70a7b7a126c8e3801ff4d91c71f33ad2daab27b30397da7d104314f84391744de33a67aec1f47e3e933f142e42845b040fa2682232462752d453f84eb8e5aa2e82852dbcc64490c61c98cf2bb0051d230a3d726426fb8857404962951f9f1970c8f708ed93fe4ce9e8bfc7262f5c120a133f329b0f005f4e5f59839d3e007c027c118bda957d8a6eb697a832656a6b17750f809314477e5032729bddd47c9b7c6ebc2baa0982d6ea1275f5f16d9a3c987628bd3c1e9fe558816f044440d1ba2367af1044afec53ccdbe042e8c0fdf8fd772fd9cc813125b7b5e9f0124fe15cc920cc0abdb6c8cdfc67d5019167fd2cf5d060cc0b64a6aaf03423a816aafe3b250ea048b52835991fe9444c5c0ff4e94859d7c881c73708876bf3478e9817394eb784b324b2918044e51246b9b4a108a89b3453a852d3d40c9851f573510f58519f4beaf06b4b578e7d9bf346a621e188a4ba4f3137d3e9dcd83ed317ff1971eb42182f0b8c70b24ecab4132e01d6ae65b149e18cdcdf50c05038188b8408e87fd5df998fa6365406d820a7abb2062db37593c31ca523db22827f761c8d9ec4a8d2c1112dcde7a8f114102a10cce708be77755352ab9f1c2b980ad6da6a0c046ea024ee92b98296b293264200daa4398b3731764fc6d68a3add782567186b3ea8673f84e54abb859cd81170377ff3cee91e5cbdb3e37072ef262f698eb43c35cd526b3525c4dc6468cf760bb81784911fb513846274946b05608f687c4dc970e5d2a97b0532fdb6b3bdc176fd4937fbbf1b18803762f2bab1abb0a46003613bad8c7a596d691d86b909f6bdff11ed62fdeb2d71b0ca8f1b96519ae532d8e6c4854b3615f2ce1a9b53f3f1f41cd733f647a04076370b524fe2111d3f66e9c85a936391ac4b0adc0df553a11240d4af6ebda207608c473db8111949b756b46dc26fa70c9e80988fccd0ec6e2ffddbd3e12d8bc77fdb5d87963d32dc3a9f174510f530d3157e9abdeeb0b72113abeb945faa39f7a0f507f8096a7a6da674c49ea752d46936a8a812d1a4d475ae349942f59def4c38147037d89956127c321ae16722cfef8107fa7248110861605a5961a37586673f756b431d169133de7340da04ae9ff00f0e09385ccabb3f49a89c8663eebf6e721f992b994f77bdd81db84c6fbd21b2bc609877aee6d438da6b20f63b5cd4b5f96f7949312bd9d827d4f0db56bf0c2959c600986c70a884262e3b1d889c25c5ec936f4af59040009b7853603ec5b88ff07c3f96c6e5ea62409b22ce6898f792c222499a11bfcc101990ca9082eb6808f85acff3002adb6b99c344b13b489967fad0689f30e975baa23dce933b136471dbcb07a38d04e0f72cfd13f8bc89e111b42cf1e453871462b93ac96b7e570a6db3db83f9dbbea7b353b6e7f2b36e55d6a88ee220d2a2796d448e305820010a8a6c08021080101a806cca51809f6fb028bac197a1ad2b2aa3a9ca7e1f29e640d91fb2e89476bb2d14e4b14aa2af28ed8f66e884a4dddaca97dd84f1ae5cac96986f514152806ecf71c7b2abb22312e4dfd3aa6b2acf96885bce250bac75b45bfd5bb4ca1b140e8be097220474c23fdef63d7b951105a0745354f3773a4c04848432e10dbde3033aeede189c1d1c7e08f4557bdfb708a44b0754eb183dcb47f6affb554c7d4b851162ee4e5e57e66361311fdb7d5f1efd942199107fb61e477ce239e1badc0180b3eeadad1fb7774d6b2454c1e596044063767c21022066f563d4d49f203e21748961109a1cc3263856897d41d7fd7822c6f0c71f63c6f40e3b9d291005f94ee1bfe29405c89f19d28f26a2370ec9cf9167a2447bcafd8627b8d091756ed5037412795a19486386e1f2250c80f42b758d6b284ec3146b369387af07e98ef39c1fb536579ac9f39a3f1c809c5ee3d9b6666ecc7edadc3c45e4b9cd611b33fcdad85356c8d5943027ba91d3db8fd606503bc47aae6f430b62a15cb762921b53bb1e72a22062579865409eb70407bb1984b84e167f799a80e66db69adb195d58a5005968c55197cca467679ece0c80ed94976202fd0eb34635fdfda421bac7064769ea85cef8e8f9a1c89d59146ead0e7ed5ebb2d74c2b75fece75a5ac721892ae2bce38b12d858a61ea386a5e811fe5f477e2dda001e6bec1adaf5f77efd7a97bd1def6742fba28818a975d06cb74c92b062578c65fe6299a85f28a7bf44318dc3c81d6c3daa6f01693beeb5b00159583ec2de1e8e350a4339a014001ff2837714cb6dd226582cf4b9c5e3e83d5ddb23eaa2ad0e9777fb73fd7ad34e7890ec4614984a399ee135e6ea168c270313574ab37537d421244832c8cce09c5c1d74d3823014167f2e01f5a33bba2b7bc9cb7f101507ebc27cce5dd19288c8ee68828e1f191dcba7187c8ab25aabb33feb843e6c0c7325df43627271b3017fe27c62a6dd719c9c385fbf57c5b9a5f983f44534c8371e181eb29c168cdefd6befe8de3b7c938e6d61496cb92f3b141da2707d4570fc4e559acf912a8be0c2eb8d8958f8cb73497da499944377f5be83d8f0d54fbb6e5d76f0ec714c0177dcf7e9455473d99e8e1bb74b8273e14dab62890ed45726a1424c8d360c600c7cdd49c3b0559131e2759ff11dad5448b56a1191819b7ba7d70916d5b6b75a4abeecf14253e6ff71dd36b001ab8d10479653a64a3074775be9251aa18bff3dc236c9c2a12aa597085fb9900763733d305ccc10c21ffd1d8f3a128979f3664de4d7eaa87e22ad62072ca7c729d2acd682e66b058e6bca192de134e16803090537f797302b277c1d256d72b71406d30150e8ccc2b555f81a65bc7f63ab80cf19a84b1b35da933a5ad46d35ecaee9e22a68891c11157dfcef7773b37ed10b65a56dd8931e7e1aea10a43c0d42b0ea6aa017fe9bd0c5d9c5c1c7c51c51ead05ef77bddc327a59bdc0875d0b7ef8824fae892f46855e342af4cf8424b4bbc1da56fbfa735d56a8b5d94a4690632a56629d2a4b2b0a634f83bfc92cb77847fab265dbb4aabce07f5ccfa1c397cba9b627e7f9327b142d0d9aaf10110573a9789d2edd6a04f6506dfbe1a26182948feff185363ed4b8ae595e120a7098e6accc69df8fef256f2b0fa05d212670f4d55830843ad59b3829074e55b7117c2ea91c22092f6ae0585e7eb1d569d27ad2c16355d5a83df7805c5645ca2ccc6a20215c48ee0f0ab77b3203f61e5916542cb99fedb1e3e18f6d4e370cc2ca73f2fe059688047a4a067d626aa1aaa03616ef8447e3fe311a583f4cbda175f8b9ddb3062afa626d582f21753deee94df19b0eadf9ffd72a9af623b902d106f7322d94e8e6c8201d053497cea11a8b9a97d1e76b8d1c4f749d34c268f784e1d35ff8504aed4431140087dea1c043bc01fea4c5000519d7959720d9e5e45bf9a6c74890e04d44dad266df3bce699dd25e462d089d272d65cc3446c8b33bbbb16ab921b20e14b159b2beaace745653d801bcef30af5bc2a76816c02dde348a8bd4663350742f682d22b27e2b4712341f23811e151cc339dde6fa637137475ccfd1f02cd38f212eaff8d52bf4229647eab61690542f7364dee53fc41ce629a22fec802f41f52f19c3047ad3e85d6175486676cfbae47546401c86a7f5dac96cb65b194fbd3a1895d4b5cc54cb30594d81674a1212205214d624e10e0d300ee36ad5c2211191401d28c56bc7126d3961dda7532ebfb05a4ff206374007fe49968bb2fb8e4cb2d95dfebbd7f207fa8ae6fc535564e6cfa76af8596e56138af4b685b52f7744ca12396ca78e918271ab1444e65f5a79c3327bacfb8280bf5bc54b4cf3d1c03b998d7d9b2487d9d42b1405fb25f9530dc3f1fad04863d9bf5cf4bed1102be34883c7f1dbde224a3ca31430438e1abc23490f65f8d39bd3b0e79adf91b824191a16dde672754392b857a245e40979d2fb6226dea5f17e0d9c5b4c519f1b08bf9e32e314cf4275fce2031cb3977f946e18c2655ef6fb0f571826af2a1cf9a1dfbee4c07bc13659b609751e227a30555a43862020d4347fab9812efa82f235e775c6f1e29d9371db0592a9a4bfcee6d7bc779ce5fe11fd558dbb1463db8889e7658b9f0d2d71f4c2bdb3caba1a73f785741d3b47af729f390760dd8b67587b06fea1ad78fe61a2cf6978fefb282b0df576182fa3077d8c8bf722b8f6a26f889de3326c5230c6293b6e18c12c73ac42799bf91acac3484696b724c0f60f060a5cfd8a52187af85f4becdb7aff67bb0c5ef57b67ca455a0cdafaff7d96b267d265ffc0105f57de09922ef72561c82e16fac5cc9f1b3f968e45990a5fedb3403a13d8b577a6c2dfbeb911ca924012763d198b902378a94701b9edcf5a48f57d1c526598f9d678e503769fcc2d7246f955ae257efc44cedcadb44921f109631cd8987eadea41bf35c54e44e23accdb5c514d6622b0d51f4705594d272c6962481c037bf15b0e50ec42e370ecb1c3202c8ec4ddc36beceaa2f505baa3a89c1c4bacd872b7b89b99e9accdc802131c347540acf30b20ca42dece9f6549b9b33416426b4d67aa7b1d2304b0d3d3e606e1dd225b69a865e8916c28b1f8c7a8ec0213fd421186838a69bb38a2d442168e29cca916aa8c9cb133ba34e739ea93d54fe2f58ca8d24210a59193b9aecc9ae7c4176ebc07858c323788848611e4821f2b57213ac290314a45f7f31f2f68f0023beb3f473844c19ad281672b3aeda7005ef11baeefc492f04eca6cb6f0925c62898343958a5f10ee828bc51c7e2bdd07efac5eb9ff41d1fb46f240ac837635e964ecbc431abf57a9eb681f720ef661edfee907d66e550327f0fc61af0e2489b2232a543fa5b4d8bc75cafae7db71ffd3c555fcb5416fe3d7506c5e03f1850785605df8c6fcd1e41fc485f12d421980632bf85a408c42ce430c0688a2f2062be7ecbae4c319317285c2d5b8bc66087e6c892f1f85451a02711aa81da20e8d3c6b8d0fa8779f8ca2bdd4af1cb83dddeb1de43d6d9e2c1c26f91e216c26517b1ea54d36a4c2bbd7f999b1ad2c3f6f9ebbde6f2fd236519fa12feaecf9796cc8cebb843edc166fbd2ec3b91c1ccdefdbe42b22a938118b86b74c821d974cd65e14d5c7b384182d1ecfa22670d6e818f25da7eace1aa80c0f5ef7a208da22faa029393cbf52687b80c02de2ead3010d86e2728dbc031c88253a3977f9b6228ca760b29a47d1a71a1473058ca7c2c8adf38965b748a523ee9c6d44a4f288da885258bea149a2f3c25f77bdded0355cde33b32f55f1c9104fddbd13a17fed4ac27a1f798b98f7f9058b3d8ec630c6d1887c2c2d9ea89dc79d6e5d1b0fa202b6e3160c0ce1a0b6aa2456cb9a708f9a8480d94df87f6030dafc80e5f51bd7181065309b20bc156d58dd1ede6a73fe5b970e7bbba58e615841de209b560a6464cf381624793e2cb3012eaefb371fed189e1cde846781341f965d43f59f1e234b77e62cab81dc3a1a79d9de9cd64f7677d5a14fd7b1c50e91db4d8208dbe3e1ad67399e2bb9715b059097f47134d9bc8dcc91ff16e60cf084881db05059b747e275a880fbef8b7271dbfc354009f832420736f0ea70c015f2dfbb46adb69c20595baa9d66366876e843a74ac92c0647ab29e16cad1b1d76615741a547963d172e56fad058d4f0cb9281ba78be66d9d09cfb1ba5971fdd077e1a2bb77942461f04da4f7fbee5e8247c3fae0e7fe664f2f564399496682dec224a9bf502c974c5ab6318bccc127354d870f3c94659988be135dcde6e804b1cb76ae44a54f38712689b0cd86fb2cd2a4bf257c91b6cd474b629d5616d4b47ef282d1b74d633749342963c424b8cc3bd3c8a944e48ef888755d09571e3e8b86439bd7777cd6dc922f0dd1a236442514ef8131c628a0b73e6841518ec88f693f1e16d8f39a52706c631e44d20e71894b00c1f14b75a3e58fdc27dce0581cd46bd9ae66f54520842ed060d9eae67230c58df9b8694fc443d4530b51e7ff5ba44a3aeed4ac6b7bbbb125075e1933d7a0fe997296b12f0136a6cf5c78f1c24560f4a0c99e1038529c4f8f3244ce2ec56132cf45ca12989a6ac41a897f34d83c0168ca71c83060097cef3cf7f97b4d78f1c1d0fd01c18b4ef5835632bf20080c579d1e82e7d032f3c1e7e9bb295c8319e88dd001c69106d74e4ec0c3dd5d24bd1cff2c287ca61ae5b45e4d2d659233be3ce6a7c232d1c535a28086f4b1fc1ae25bc8196520ec1429413deb2d777b35069304a928c12526d2b4755ab052011a0fd6b5501f3193ac49b37ffa85d0be031c972d47e6a390149a08d8a84314dc3fb086cf5cfb2ce66087ea5ed9ffc80b10cab0d05fa179dd20fcea5cb922e750c60b74a2844afc5872aa6f43f4659562e3841d5d2d5335dff24ae360a697effbcaee3c3b511213446e53eb924243ab9c04c9f90123377a038a09b9932a0bf78fdc40d3b4c6706630649e797089df761f25baa62a2eeff55049d2b3fc566802498b3ce10ae69de25cf9c881ed786907c199c3bba7c835debe55419e87445a402ff6cc169cc152695c2005039eb1a55275f958f933223cb0145cf67581b64c0740dc3df73a465c9fe74a064b9e855edb72ccc80dd0090143e28450e5ebb1c1a13eb4cd3d5f93aa1354a3f18386ae358ae061406393cce531959725aa945652a14a3ce40100368699dec490c7d0b494145d48a35396046faca1cf9b3cb39d8392e3728c22adfaa327ad54bcca94df2d949a3bf9b84f1faca6c6ae612e99949a11f03f7ec045efd0207d21c75bd64537c9f6465cb2e917985d7ef0ba320c5dd713fc5c8718eeb1e50f37eeb176dd37ad7a50f6d0c666b7bbc05e4e168b07ff2a87c025c8b51eb60a2c8e04c745be1aeae87711a1f1c030b8623a82064ceeacae6f9f04dd67466330756b425f776e9919d1cf56a6dd4bccf0c5465120212ead57b65478f189fd3803b3c6963c67bf30fee8f6a80dffeaa427cde1b34012f1a2d2d4775d395d4c5537071c29aa6cad2d09f66800bc787ab700c90c028c2b7246d64d0840f0cdfdc89db41617f6e72e65516c1e8cc944e76899663f29746eaf5bd7e22b81428abd2193370a545f47e3a1e025c697da235ce500f2535cb4d416bdfc433b91b2f8852369c313c88d483ec9f9f59e70ab8cb504c13c6fe465067ad02361db2546aa6182f0538ad0d6e2a40a81fcac68c97af900ac6813cc174cd69e4df2699b42e915745d0b0ad601abe784d39823dcf3878f373f9e2350cf0eb0ee7ce6fb155649e06297174dd000d9af83c8c4320f0425617879dbc8b6733b9e42646efa95206bf84336dee38841f3813ada30976b9af372e48684eddeb7076df5afcdbae6989f8ed56845d34ec557bf749d3bc629aff0395464dc4666dece07dc31795d73edc284785e8052ec57d8138b3347ba547981c591c873468087ab5eca1398dec718b8347e879ccef782093e5eaf82412d1308b2e794387448cb04a750e8295c684e6b9d2a7d4e97f06b631cb5ed148e8ea7210e8020f41b4317006077096e64ad73b3c9e0bd2ea3863ee9142d00690bd61e1d1499006fc4bfa9ad54b993261f779490d0971f18148bf3678d70601b9a1938cc8ae66ac52499d0ef692e23bb769c3fbb60df42214c552469591188bcd0768c65ea3c90c002bc9b50bded4527fecec42921c6f349b8cbce3ee07704e4c9896ba524e006e3c8509c6a82574b5e4547de5022b287896e943344f32b7c2f144dd49934f301930ce74f46fd8e000c6b56e1c5cc531a5996315028828159e0c6b8ad7874f4d478182ddb4b8d864313a116711ead8ef45b1bc131645655f387ab13247406a7bde67f9a01cc4b25a7f8a46b2deb4b53dd1b61401b6ca4a0ca1f8206f460c4d0afbdbb364ac0f56ea56f1b9ff44f51f55423c371a375c6197c000b37ab4575f9f2c1a4ac06d2d37ca4028fb566f0b0a7a3a8120ea9edf8913f03e2a5ba56797525220dca17f28b740c004b12651c914ed37d7da669f7c7290f144c8f656ae4cfcbded82752ee2d2c9e622d5d083b1249d2dad020acb1398112a96b4ea7925e691158486bb609666170179576a8529a2df4ca1aacdd72596811a27f43ab46115943a2e931a230a8347a1688240b0a8c58f5bacf3f721a96fb6124ad6a92dc596ff1dc96012fbdedd095749a4b1334041c01cc82450999ef7987fa08cf6a681d323e5f4030be248570dea2ec5a33dadcabb98a0869a9e308f7a54c660cf6b8fa92fc79ffc2c218234203e45fa4e253255aea9ac6e03c715d9908829b3e9f36ad5a068298aa5c5e47b05e2fdb4517749c6149c8c8e9c9ee27bc64bab5f02deafa4bd663783251a5840d733554f17e325c234d78c3ee68ec4ff0547d5ed09e93c67a4d5f355a53e12cb330e4f044250c90a58f41541e87afa7ec2c2268ec95bc7644828d0b105191c4c6a6641c9344810b5bca1864e578a9f765d8827c5782012320e83399ecdee4606650aff3dca5d680de18cd2b1e4159a63034514442d7786e323216fede840f792fb8ac9feda1c38ae8f0d3837825b1a5c1e81fd1e06ed97724137304c6ba67df69e6c3085175e100c3eea911b1b85aec953755b9c3b76d29e2f69f2f3f8ff859f6a3a3edeccae8f266140c281b95a9da0733a57627ed7f23b52ed705fd27f7544867f9c13bc81e4252d8121d8fd471ade562a961344b35bd63b78dae83ea4c61282440ddb519cb0ae5c2e48bffe7171cc2b645d1ff1428878250d969d7a204ed95ee78f119c9d7b8990a9178a351e48d49433f5d5e1f79a01ee759168a721ca9dc36865092b6e7fc5af1ba338a75377b5eaddcb7196f57dea9be9b082e6d149fe2f34da8cb16e62735e80b2a8c959b041578f37cb6125ab7a1ea6fed9d68285f0db10c21ca87b6eb45a8f04d55436d22883f788ccb60d78d0ea34e989f020d5aaf123186d41487980df028c7f8b325755ff0a09b24910033ad6b7cbd03efed54dca1a59b42e8f11bdd8319d3a2e0cb9f614ed315e68a65bb681278fb97ab62b5351aec2766ce5d67522f2cceeb20e077fa6d0f1faf611f1d11cc00506f7124e46ed3711a8dc3f9d475b1a92c32a7a00f2a16e02727a4b467f99063501715fe9c888000dc03dffd0f963613deed7106920c8d003cdd144c184117d373c050aa664ab1aa0d874b8ec3d0e075ee29f965212ed06c361a18690c987cc7fa44b19d01e7dd7bab2119d55cd4bf112f79f375b54f8a1b6f1e8c51a0b3abe2708fe1c00b927c467d33f6a65a7572fb39a85578fd375f67fec14f8893f1c3652863177f38d1cefecc41d38706d5f03d5ecb160ead5805336e78ae1af1ef24ca86d507368723f71056794a2b999cddc975712245c213e221328a2ba8c5ae14e8639f4aec34df7116045d1e0a17ae5386c242d502c2f3242eace9f9aa33ac862f77bca6494ad7c531aa32c1aca70c702fe52c2a2c1a5ad43c8614dfb323edfe00de127b741e5c5f8000d892d982ec6782cbe4d183257e8715a52fbcd845b684999eba74c769661db3049de41dd47e523b79685d79f41286ff5d165b462f1d33b8f9ed5b6660605ce65b63172412061cd0a055be6414019ded66443d52ad6fef801f4830e33526399b4ca356cfd67e4bbf9ce7641e70df73a0141975fb8b7c0a2d71140904d7dcda3f8851bf8a207189b29c25617543a07a7ab3788c2bd6a7ddf531d444a1b43d5330d2887bc1271386051dcca5607caad836b0b8d9472e133594f2506c8edd3052a79085827e32d682fe13941563f0f8d888caf374909265ad5ee869094258212f75a1fddd931d511992dbce5bb4ec52ea7bf0b9bae5be67117eb45d7d7d523e3190b4f814eb77ee410c40e1fd5820747546b69849ee6514cb29eff5554c3d22e1fe0ce7114f540953f1b5d780b0486449950df22ba93221ad7008424308d6358a3704a1b449845669072ef58a5b68f40147af8231ccba2ab4e2751df1bbb00085ed112a7148954e5c5e8cecdc4b5f0b1e33de3351ae93b1241e04fe55dbaf1c8df079e0731bddfdea75cd41573c703ae3d10eaec247d6e4c217db27543ca630f12d6618b2437508aca230cef127971938db02aa57b782ab448888faeb19048c18a2d3b7b4c179581b3cdc1953a7f6f96b719b0f2e75fbf6359f1fe1890f4cb4f8f1f064a4a891ed65958b4bc1cef84a3f36825a15b326939229f1b7c4897f99bcf206b3b65f29ea7274fef2704dfc2605d9438b556cd2cc1eb0986bc356219c70df8d22da60b3e45baa768292cac53480f738a5ebc6b1a64950bf3809f9c37ff97f4a4c3a14fcc1ae39b775bd0efd01428d41d82c8b2ccceecf4333cc4cbd9f03c42b781be8f0a495c2997a9edcc73b9e900b02173718c0feccb52a28ddb8cb439c5c7254978ac06ea601c08f3f7a824a951a6590e1bed0257e0384f1b20a10252d53713472190ed15dc09ed005f4e808060435330603b9d3b856a8d9979c0eb747ebf946a9b73b4d39a239f7f0eccc36021d1b3348b9681f9de1115342a1aaa7019a2e9d4f4d29863fe0f343977caaf03d4990cdde431c279749bda1c247fe76bc07c5a14a6414e64a607a4f48ba3f20432642ad88213f1ece7ce8cbf1a95cee334d60aa366223d35ff207ecc6683976f3d3193fd25a257cc420513554ee30598764efc07d11ee3980794e775bb71c8d7b8ccd7f3533df68e7d2f17228b6f76172ac7c8ddae5baf844ea02ff5c17b363b4564389d449551e785193353676f81ad72a7e15e23f2bf11a2d1a399c6f3b22c082c49fa57166b0434f21fa8e659b3f8eae83289aba1136c48e11967c62c9f94334f5354e83da6fa3f4dde915cbb829914351a17fb4eda0811410ac4181ad41c8c4c7f04edd028f0e77217d7d606961f8eb07fc23064d8b9c73b12b1a634543bbc52601283a7ea1995dc459191ce002aa216df7f35615a0598598aa18ac5319992c2a73d77ef98575192ba9a8322834faa9a38f3d4863339c55f4f3972ce8e2b79dd112eae87fcb5c95ba8bbcb867da56e7b42a6ad919f56293600a40697f82fc2551c6aa2cbd20610acefa003b1a4e1c08248803c940844730cd22df38677ea2ccb6e6fd5e30036d92d3668f3c0464881367517f04c15ff77cd508c1f42bc5a4ad243c116b78184ba34a3bdbd4edd8062a8982926e36d916a8ef52db205e65a71568c17a50a742d1cee993ca1479a90120524c0ee0ce6266c4bae96e81aa6537a04ad820b683b1c8a01397be4c69cc96131f1a9bcb611b03546c082e63b6a1cd324661a30a91841294654123e6346513a4c69d98d9074706387897476145cbbdee48d5e587e6160b1f506200c46b8a4be24a345b8cadc2ddf4e1e777873b4adeceed2b6fd739f63c0fc73b29c24685c57989acf539e876f5ee13d3c9c4934e523b1cd3610a8e8585d963d4c13fd5d9fc935a9d0c1a8179aae1501f4743d7278ef08b92ee6a9d574b627435d836a5f3d7cbc64fc6d3c7751ea00090a2258aa9a877ec198ede3f84af892fa3ecf113f036667c743ee2d2c111f006eaa848de2628bbbac82e1adb7b91f2165d9e26eb3efdc9ac3a3ed1c90120bb8cd4eaa7a4b779477a4db47508e621c6e7279f8c7fead38aa6a7190291a902b6c6d190001f511a4c146e080e9fc4422fd281bb03529ab7432a798227a769167e610ec58d79c9fce50ec66501276e96aaa20f0c2840e8d8be2913cf9e6d617b9e8c4292ec3de4d0d0d2378ebf64bf0abdc4f05e9a9be664a526d3ccac50dd689631f8a259cc98e5ded2f0bec288cc7d2f3dd39ad84a8d3ced964a483ea1dbbc8de54295f69b02de86b06b4044fbc79cfd3a71b3a584f4777d7bd9904fccdea3842069f3e37bd750295500b53000ff6b03aa1647ce3199cdb1e52937adf58bdfef7299e211989e972183261265766e1dcb01b7779c4ec16df03a639e461b917f668f338c5ddbe98e6a2d12aeb994fb33665c7faced75f888cad5f1a58605038bbf715ca5c4d07ee3a0af9c29da545ba66c279e0afa580ed95a62d86871d741f805e2aaaf9ebf55f1835751fe0c667deb6cc970c728e5cbea49934fc7636a03453e9cc84a03f46d1d45cfd25c948edcb4ea277942d2d2ed4422eb89dc7f374e3101d730767739f642faa3e585e7efcdbefa35223b8e2f740ab7441f60385eaee0337aedb758a3693a72b2cf92e6d119469451677d2cc3cf81c2df76eee59cfab7748213a0435f2d1f28c5ccaeedd45aae23c70e48f0cffe2fe059d42f4a8bd2204b425d9ea970f7788260d89cec29fb0f5234aab238af7e9aa89c33992b86f84be73aaf959ee44e58b6b7ce8e5cb1e1ed9a2e49971cdadc97c1c7c0b2212dd3743e779ca3685063fab308c907f7d8ed662c69abb378ea5ece02b1cf5b2a23d98e3259f1a71092676eab7ddcd0267e61054e3049d39996fbc6fbcce2113a774cc2b1ed611f4571e7a2afe45bfa362b450715006619ddde58c6805c4b5d8278838c3ff9a33ba4f534b870a3a2d77e6de26b3ff3b74251f3271190aedc8a2e9ae9c80db393bad6ae9379b5d01d6fc161eeae1bc945d86cda537c2966ae6536010d43894955f03295da361757f9dc21c3ddd52ff1d68a9d60dd01a361c0b97f29f942d5da8c48d9c3c403332089433b72c66a69b0aab8f45737d91ea3027dcdc083c79b1b42c09c5fdd09dc403d44f3e19e6af7c324acc82d265ddd04b4c333f91464a2adf04cd17e22fb2cd7a72404d31e66e1d48e8b92ab7ca3bb4d4f4e301342bdce04ef1fd9c06240a403c1387edcfac9d862412c5638b58475ea4e831302a4938358e54647c6a1a764bb79a801451f6a3e7bb4f27efa72737447db72d77ef42a9fdfa2dc52bc06c8ab6fefaff92edfd3cd95ac57d7ac3a8ae6bdfefa1542a0cae653f7b78626fce19736a373896be22a245357671ff4fc3172066e70f30b9dac186943b92cd63796ee555c64ae34df577f0a81d648f1a55997c58df296a18c89f0a48c3c214108fa009f6d59f44242a877494f1b4eb9e92447b17fd63fa2d32a7bd88dc050fa85dc585a83c346ed82817b22593f444554a77ac6855b50640a1cc0e4b6e112e1bdd4ba1fce9e3788c50287cb96c50bde9563b11cd41cbe2338901bd1da4b9523995d4924fd66b5d070951757ca28361f2d322677705bc8c9fbe8043551cca46ad1c1c5d4d5b73a787321102fca6a50a215648cec49045b5c95dfa5233e60df80799d2fa746ac5785b5163a1e632c9e8dceeb0a857056e60597f0a31d113810a5e5b1254892521cae4a10f321aa478444cfd831d7cf3a14333bc890166d70043a4c7256177df981a8eb72dd4e7dd34a71d5c4a33f48168186aa51f1b03ea92a4c8214b0ca9f76c255f068602b54b15b1394b762d3f212951bea56a7d6cb5d0d124714f03c6a3300bb1bdb8faa730f18facaeafec1de34c78c00702fa2188658dff7e8270603110299ee314c404340f936073316593957dcbb798b057b01e743438caec716ca0fd5cd22f04454bb64bfae9360ced000491645a505c7b98a2d088d9167c6b3e3bf20abee4b04a05c0e47325936b4a5fed06d4d955f84254ab394975314d2df19f495d854a86ba06984421ec194a0d278c3f9cff99fbe3c3b8d29e3c73dff4d6a69173b3c48b967b47ad4a7ae5a2db3f7477e9b92f99468936685d1f566341f82186f53cfe098bd75b6e75e6c5196588578fa19e31131ab330a3531091d48e0f69152b077eac82f3287353756165062746356927c2e9fa2ec028d3a6580c8f1d84bb0fe897924a074f575f6eb756f5d89a6cc47232276dd83171f54f505cb28ae34c7f3bac3ab649933f4dcd6bccf7430d37b0e53abef0eb599f79be237cad6b19c748e0e503b9a7146f16c716bda7c4e2d5ee84a595f6abae029a2dc1cd5992439d603c92c18446b6ae34fa4e101c6af92054a5bab740f509b8915bd84ef86b86ccaeffc46d358db737e065cc7cd28db50c720a406fcb53c91fd7ea37d8304af1e036256397b5241a540dd1658e00873bd7b54b5d62158aad92185de760a974c4d0de3556823f2d269ecf7af9e209bc798b1ab53aea094b02df91a373b297b7565973ef52fdb0cf868439db8e9b88c6ced779c809fb7bc4d2946d1318ebe3679154ff510a5df173a47e9b9296dc96f3f43d219e4dacb90cdca8ff4cf75ecc60b43a79afdc6294bdb534b24da6533e8e54ebb1a34a0e7bdbf6dd4c79ffe9eadc3a002e2a53f0582953da8861b8cba715f4a3042d4e863d88a178b003b9a05b60b6b5feff3f0b42aaa814e79890b3f664e045e52c8bf873942e14543bb39e49f1007053da237f26b7bdc4b0ae7530913b0a629bc9838150276a3f40edaf75b481d3d1becddf14c39bffaf7fff2c1f8e828d32eeb43bf65242c7ad64b1d8a3e81112eec2f36bf5fe34a8bd43726c976ffaa0f41361a32cdcf5feb35706ebf6effa281d93d5dfb7f925c7c24e96a5b79036ba3e8db7f52cbf35aaf0f50d4c2308d03a6bdd58445f95fd4a347069cf26913c6f5379933a47a3211776fbaec01f6b2e212de4379cd7d367fac28897a821e856c578a2c65517fe7d867dc8df702edf3519a79107c885612342961300b32f68768f5cd616c862ae242b4e513ff711f2052809b4faddb982312ab95654bc6669623f6cb9136dd9d6555ad877fc065c405fbb1f58a5c393a4438f8a74534ccf6184f50b37207e7521ddb5e145570836d16f3ab27e318804d47bd4b33c140a3029516ce5162966723f903069446b8a8f544cb42d86528d2538d7eb32c435040337306919d7b9028e9d8de4d03a091bb7f915dedc0dc8ce8e6da8aeb0be210aeaae459b28d28f282f1a481b821f0d6a3fbd7f1c518b022b48992ac155aa4516021e942c8395241ab6719e64b7783ac2bb5e3e9d3eac0ef794281c42a64db73585e6dfe5902878232595b489f8d17c3dce3e26cd61288f003f110f9525dd6fc65a8c1bfdee3d7cfef891bd546e90e0c24698c50aafe8ede905257bc8b8f7cacffa90ee2b9b618afdae3de3bbd74a5c8a572df9c7ac8090a4efcf3d0a06b648669bc1d4bf17fdc7d1bf3425881c5059c87a30f5b79c92940f499005ef60d31f41143d919048fadbb7b7bda08d98031cd04fda6567cb8f671d76538d9da8345c04ba130652c4d6e9c95bb52e72d8059a7d99497f08c9fcaf03e7776523dd491bcfed0d6ff69d083e7f09d8469a4be78d8bc508dfc02f1e45f4e3ed9f5a25d41dd290c1c32a3a2847ebffa3ac300576aae59f24a954a6e57d3f4f84d8151b4076ac82665a0ea0c86a7f9115dc28a3ce34d6775b465611d07af445be5fa05a897850edef3bbc81cef43ac80df37c378aab2f8e28d8120694ca66289c50d963106beb146e95490734d749bbb2c49525945efbf670aba9ff7487ffe7972d5c422738ffd0c22aa722dcfa728a5866b30c368420e7a01ad326c7119d2fbbfa77dd80adca8f2360b387c386faa62f12524f322d5ee15cbf1d9ae1238eec586b28293d353c35bf0a914b19b22fd600837945b46ef80f20b04de7716e5d62cb85e48cc33c6396951bc7149a35d5e040982ea2675273cdbacf1822d6f01a8462a4b3f1a1cb44a7059d49fb732e9593b872563d9deefefb327a748d8098c3d82e2fe4ac46f213919d3dc2ad12ec87164c2eb1b78f133bba3e513d8f911181621a7cfd138423b17556d9263f625b618c74ee90afe891b73098460fb427683c9172d137caa977ad6ebab93f14b28613f60be6871b9bab80fe12e8a75b231b68bb37d925b942f3551a4f308cf5c8008c72e9ea3f3e21e187da1ad73cbd7a14c538c46b5621add6246f1d7980c9ff363da112d39469ab8bf67ecc087ab650d9be309aadf139584ba5f0ce082cae5bf51c77c21eaf8973c3218878f9c134a9910ce2dedfc65b833f587d03c065c024942f5e2b8f48ae80b6c11638ee45d25c91099d07121126000759ab5c4cfb72eb4b8decab6abbec1f4fa5ac32300cb3f6c64c82c9b037c4f188bf9da701fe84c1ab53092eced7c9aee69ca82caa6247a4e43c3c6542f20eb77568f8055b196850aac10eb7553c75e340675957a36ce9088c7791973ad33edb88dec96f8acbdeb949eddace60acadd9d3e3c1e65b65d42e22d0ca4cecac1ef63604ffe7a6bda658ad6baf8d09321ea117560a836fd44370793653fa0a8e6d084b33c1e01d4b9bf96c6e28d841f48c8d9590d8a99d06af7639a86c3609cc35b32e9e98454dc73ad034690214f75da4d63aa47e5c3168fa9e73e4d3d474efeabb5675b77a194a076becd0c5795776839697562f7fa54977075cf0764377eecda40f4c7f0c82124ac479244264418c11792d33294cb4fffdf9dd25a5b101a7e67eef825ff80754d1419df5df648222f8de777ccc37e835435fe0c378f8bd5e34c2e76977f60ed17ff7497803850d469d59469dca2253366a28c60c769ee5e07e5e450696577305859cb65edcf9cb69c949ae49e41e8ac16adc95080e97582a09a963d6b2749b0b41737f041cf529187aaeceea4e566add29d1c4a6a771c7254c7934abade89317a1b32aaa628356c72f643fc5379cf1eedbd0060309e65d8f30b1305d7cfb1bae60ea264260c48f3fd14e595b504ab4454e63462bb3430b2b6fe751ced4646570ef0c0dc8dcc6077b2ebf738e96cee8fe194455939c8802698dea9e983bc251eb5015dfe1cc802a2e525f0d990185b4c64954a94f0d6a4fe2abeecee27c4eba28a63be77e83a217b89883f4e5cab1cf4b04a5c07857fceb6276a3b32bff1f4f2850caea84f468ccd1b13946c011ebefb88d17a70d16591d7d990973475f322ffe86c70cdb66082a8f8d91e21dcd126c1dde4ccacc0a9e25e7cd7350d0823668c646f56029eec5a64cc66591b4494ad631201c64dd1cdb32d9ee74c4cb1a6ef5a13074203c4341a5d3107a29752eb3ce772a3c995938362f224264786189796e43a08d4f19ee309114392ab5deb6bb2cd0b28540d06c4e31ad73867e804484f7ed3538f0d5017206b0bd78755edf80f3421c74ff08564d39c702a6ae3671706cef5359580002ccb9ad48bf5ce5a07f44315b88a002420e084709b89ca25bc6f71b61f445f52de0503678e06f60e82d7896b8aa9131151df5d81c56572c10fd3d19cf16a319205a9014058a006ff6f64593f40e71b3d08f076845b98404128286b3731882fb1ff36ed24424b4cc18766986e8fd411bb389e9af81b49177d96a9b613f579da5a2e42d30ea0239b405e58d0deaf7634171d0499f4bf8aabb42c50a089b7484c4adfd3eb036c816b9c876601241f910c841d17b29d6f28862e155a0052f9c3640f3e85bd383ef54d997fd7c067126f40188a9c453a17dc2d35050738788c014bf9aeb45bdb0fc040a3dae9087843b7a7d61f736710c7246843faf1b159429555db921d3b6afbab29b487f99e22ad23a223ed953ef0558d3eaf690c2feeb587b53e85cd4f7460cc94dceef788abef63fc43585fae5c1ba451989b98b955b923ef28772d5de73791519800929ae90c966d2108f77be48d537f7f976bf526d422a3825f79099425dbdcc692bac4312a1816c573e6585d1c7848983d0f778a4cef8fa42351eb600d2abcfabbcf4fe884c524182755343a65ed4649e016fe55b38c5c4ad656a0fef36c5ff6d7cd2364a866a15f87e6d8efa4ee4ae17704f22280e3dd7021c13b0790cd53175a165355fc7fc818fc8fb947d281a81dfa6950a5e0946e667ff1c8408fc9b145900d8e71a91f9da8d2621627bc39e0cce4a714ed35affa7b0d602ff5f74b2e4aa4c165e1179b0413493bba42354bb21f021237f4fa51086f6f1a4b8926c68f2686efde9f3189a6eb7b0628ee7136c45bfe19113c5ecf8793b2baf64073cc4001c04ed6224adcd6dbe6739f80ad25150602f845d82fddb2b4a70477eaf63681b656fd07a86ce20c1d5077d3702ac7d8db563bee75d5b1b4fc18445232d29f4c477b0aaa668d8f36699b31331e8d7c485b8d6f2cc753d24cda807660b9305def828e7f88d8052c16d69b1a183e5592d7233224cabe76f357177124550ccdd8caad9e3a494a6db74f6ffa6acefbd37e8faafdd31d69716b3ee5922fd82a20343c8fd8f52cc1a0a7bbaf68f160bf007298c0a6724271cab4d800a7d9d074b12260a7bcd7fe613308b2559ec10def2753129826c019ad891456a599f97dd0a8bc629410912ca781ed51c5e74de646f73e6feca16dc5c1dbf20834edd2bc2f50c19d613a8cb4c6406781f4e533b0aff13084f8df3555d0834cb3e24db0ff2f41d1d3f21e7bc81202f56ef7e6607d169c39c6df1d9538745e9fff829e09a0f910e9a5d315501efa46c12d4af8587fe660c95154cf1c23b56635217d77577c7f9be1ff52c514df03229ceede0233f5048e82025f8a63bc3fe857dd01ba2c5844137b3a410257f2f318fa766a3b8c03c1186b927b724fdee1150e662a832ca1d91fd44de3c5da86e0172b6eccbffa626e487033d445b1d301432ebe23b03d832312482878f6706a73ab41b1c0c0607c78d44ab949292fc5be0ff9594dada1fe7340a78502bf712290a24c4d39abe18e57f72d6f268823e8917c07462602b43a0b31c34f0fe7a3182465b849b07b8379d2b8c8cd5c2cff07f283e4502f8b3f75329e7a8748ff0560c28a3defd9e19d7d75b309343e1b34a0363b783064e1297c0f341bf588a9753df9d7d664b8cea83cf99cd1f7d157801188b792f96d480152ffda80398b36c1891f77dfbb39455e323846e4bc043785d86ba579b028858e153a808a8423dae771712cbddeec0e1a37a0c11bfe5f9d60028c0d54eaac1491ee9eb6adf9483b8386cdc02c9b3d92e4c5d87bc5ce1c8c88182077139432fc35f8bf5c382b7d33d833c50209cd004c49be28680932e6b79c745ad6d5247fd84e03fb78a6a2f8952c3d350b565a0edf93889065ca671984aeb44323dc9dc4ee64902bb1e00e12157c4db2f6cab8ce09acb961afa48a58446a678b19f6d9edd8e6f3880cd713dec1c5003fece8c9214518e2afb7fb2b59529c71c5a50c99352bff9432ef3a34da9d4cbc13105c45c100538fcf17a891668c889b91200e0934d5b7eb2f8c6fd60712742953c36ea6b1a4fc7e1403f71077c8cb0a58fd7fc94c9eb7b26ee44b4d123918e03e064263ee7651bca931f447eccd4d8ace1662ad79bdd80f25446c2a8f3e19b3fdf94620952f79511b0eaf5d3872f4b7e5038e0628ddb50440c12e5e4eb6d57c37ce56cfab5eafa6e7c65053783b618962d07d549146e595ae4761a3912d9d7cc97f76bacf0ace92aadeee7664d50c63241dd99d8ce02cfc7aacfdca5441671be9f28a8aa7c34bde965f7878db559201c6d78e9d0f11aeff961fc4f6cbf89124e0e792e8cc7af62b130b8aa6b28ef1b7242dc651413d8b622cce56bf39c5b483074add091d6a45bd8a63576e065d8a01b9762344f1dae45dac3bfbb0ecb39ce206e75151d819dbbfb7bd95dfa8e81e2d1c0959abfb74e59683a9739ee78f2332085f52b342e1c2649db0202b9a721d52dc0ce3bfc6028e78de5182b60f5cc9a80ee7f01076f4816c3d5ffeb1874d58136d07b260f069c5e0b064df19884e50f9d55f5af31b65d57d26ae78d816408c51ad4c5cd16a83cd333594f3955799bb2e9ae6fe1faa1c927a9a7d68c544d285d177aecd253c67290b5b5c1858af9c9305b21fc1ce5d8b49b61f0bc22f746cd6a537a39970dce09c2ffaed8ce20d4b8105fd1c3bec1746e26057aec542b6e0f9aec5511fec1331aac9af4e9a70940b36963103e2e68bbf8bab41cf93434600c2b4749904c6109217e9167df1225c9e153e15e1b3f8a03b4c07b29b4e856c3258d73cd9978bef0a2fc48dc8c621ae6eca8ae14a42df29bd5b9f8b3aecf907bf2dd119f24b52a69486ea4a78286c219fa8706c488a3be95fc01fca255f76f266871f1c59d05290ccd6df0c72cce285549573cfaf0e94e58aef790c22f7d45ba34e570cf3177c396b190a9b3471b0acad51f7e9c97e6b51f44cb936b5121bce8d2689ab7a15aa1b7d06e22038f27963deaf110c31b5fb2bffdbd0f4d17441142862412cc09344142a8c5a04ec6c14edc9b22db758d23187d18518edd0a131bcb7c8f9008728912dc31ca149b2a01363dc9d9b9d842e8afc8158dff47a6f0be510bc6e84391de527e514a847aed0f6e96dabb954074a7693039c1bff2284d427538315c2df1397a69cb119463e9f1635a7c83599226e0527f20dcfadb087cfdb8da5d0f1d9114cd7d834ad5d210324ff6776dafe44853a9745436a24d2914a8b5afc9291aeebfa0ff7b918f71c2cbe58e1b4e14474bf21c2fc1439cc6bab3f95eafe7ef0b5872478ba1e7e59ccc4b13577844d288043c2914dbb368c8d9eb6c0583995736c7620fe39d65d72432578a8bab90839206a1ce2565d23e67c352527476f0f619fecb253c663bc273948c262b74b628855090a58c78f41d5452c49a57e133b8f87f3b04e1f4b0544efaf2a215b7fbb44e0bdc7bcfceff343c9ea2dcccbcf92708fb3a633d20e55c57b8fb2c58d63810d7fb3c148b4b79ba6e7cd167465e1dbd6473337cd890c01cb4d9f5d66ee7c99d38183f6df06fa0b6d0f8a413ffe189d06af350192e30fc8aa211641f0e0f9d2a76aec9906a19af17f27071194c75100e0f5edce561bafc3a55bcbb3452ad0b0c862d8e62c984879ce026817673d1dbc08bd82df6a691cc2cfb09f3c8ab8111322cbc366db71c3189ec557b4a978e1776442d10ed8433aa3e748858cc43901904f0f51a70d960b9a570406070df94a97b79721b9517f97ac09d9c5c57e27445e8fad05e96504d2695604955f8c65bc8fa8408cdb3e1014da7928cc9ba01649668c47f7c9b8889ba1402d384c659eea3e146f8c05c0887682a55b64ca3022c9cbeb208b4428578c84e181cb502650e5676f08b3d7f40704825c22c83cc4ecf660d437db95b2b6d9841cf5e182c0b5373aeaa47870379b2c1176e45710c4c074b7116d0ff12922fe2001", + 1 + ] + ], + "callback_url": "http://127.0.0.1:8080" +} diff --git a/crates/support/host/Cargo.toml b/crates/support/host/Cargo.toml new file mode 100644 index 0000000000..7dd2254e9d --- /dev/null +++ b/crates/support/host/Cargo.toml @@ -0,0 +1,24 @@ +[package] +name = "e3-support-host" +version = { workspace = true } +edition = { workspace = true } + +[dependencies] +bincode = { workspace = true } +bytemuck = { workspace = true } +serde = { workspace = true } +alloy-primitives = { workspace = true } +alloy-sol-types = { workspace = true } +anyhow = { workspace = true } +log = { workspace = true } +methods = { workspace = true } +risc0-ethereum-contracts = { workspace = true } +risc0-zkvm = { workspace = true } +tokio = { workspace = true } +e3-compute-provider = { git = "https://github.com/gnosisguild/enclave", rev = "2ca0aa5f47dd962add5d1d0f74900d9bceb957e5" } +fhe_rs = { workspace = true } +fhe-traits = { workspace = true } +fhe-util = { workspace = true } +e3-user-program = { workspace = true } +rand = { workspace = true } +tracing-subscriber = { workspace = true } diff --git a/crates/support/host/README.md b/crates/support/host/README.md new file mode 100644 index 0000000000..75d635705d --- /dev/null +++ b/crates/support/host/README.md @@ -0,0 +1,3 @@ +# Risc0 Host + +Exposes a function to run the computation found in `e3_user_program::fhe_processor` whilst also generating a risc0 proof assuming `risc0_dev_mode` is _not_ set. diff --git a/crates/support/host/src/lib.rs b/crates/support/host/src/lib.rs new file mode 100644 index 0000000000..7f034f2378 --- /dev/null +++ b/crates/support/host/src/lib.rs @@ -0,0 +1,90 @@ +use anyhow::{Error, Result}; +use bincode::serialize; +use e3_compute_provider::{ + ComputeInput, ComputeManager, ComputeProvider, ComputeResult, FHEInputs, +}; +use e3_user_program::fhe_processor; +use methods::PROGRAM_ELF; +use risc0_ethereum_contracts::groth16; +use risc0_zkvm::{default_prover, ExecutorEnv, ProverOpts, VerifierContext}; +use serde::{Deserialize, Serialize}; +use std::time::Instant; + +fn encode_input(input: &[u8]) -> Result, Error> { + Ok(bytemuck::pod_collect_to_vec(&risc0_zkvm::serde::to_vec( + input, + )?)) +} + +pub struct Risc0Provider; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Risc0Output { + pub result: ComputeResult, + pub bytes: Vec, + pub seal: Vec, +} + +impl ComputeProvider for Risc0Provider { + type Output = Risc0Output; + + fn prove(&self, input: &ComputeInput) -> Self::Output { + let encoded_input = encode_input(&serialize(input).unwrap()).unwrap(); + let env = ExecutorEnv::builder() + .write_slice(&encoded_input) + .build() + .unwrap(); + + let receipt = default_prover() + .prove_with_ctx( + env, + &VerifierContext::default(), + PROGRAM_ELF, + &ProverOpts::groth16(), + ) + .unwrap() + .receipt; + + let decoded_journal = receipt.journal.decode().unwrap(); + + let seal = if !std::env::var("RISC0_DEV_MODE") + .unwrap_or_default() + .is_empty() + { + vec![] + } else { + groth16::encode(receipt.inner.groth16().unwrap().seal.clone()).unwrap() + }; + + Risc0Output { + result: decoded_journal, + bytes: receipt.journal.bytes.clone(), + seal, + } + } +} + +pub fn run_compute(params: FHEInputs) -> Result<(Risc0Output, Vec)> { + let risc0_provider = Risc0Provider; + + let mut provider = ComputeManager::new(risc0_provider, params, fhe_processor, false, None); + + // Start timer + let start_time = Instant::now(); + + let output = provider.start(); + + // Capture end time and calculate the duration + let elapsed_time = start_time.elapsed(); + + // Convert the elapsed time to minutes and seconds + let minutes = elapsed_time.as_secs() / 60; + let seconds = elapsed_time.as_secs() % 60; + + println!( + "Prove function execution time: {} minutes and {} seconds", + minutes, seconds + ); + + Ok(output) +} diff --git a/crates/support/methods/Cargo.toml b/crates/support/methods/Cargo.toml new file mode 100644 index 0000000000..41a537beae --- /dev/null +++ b/crates/support/methods/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "methods" +version = { workspace = true } +edition = { workspace = true } + +[package.metadata.risc0] +methods = ["guest"] + +[build-dependencies] +hex = { workspace = true } +risc0-build = { workspace = true } +risc0-build-ethereum = { workspace = true } +risc0-zkp = { workspace = true } + +[dev-dependencies] +alloy-primitives = { workspace = true } +alloy-sol-types = { workspace = true } +risc0-zkvm = { workspace = true } diff --git a/crates/support/methods/README.md b/crates/support/methods/README.md new file mode 100644 index 0000000000..98e3253545 --- /dev/null +++ b/crates/support/methods/README.md @@ -0,0 +1,31 @@ +# zkVM Methods + +This directory contains the [zkVM] portion of your [RISC Zero] application. +This is where you will define one or more [guest programs] to act as a coprocessor to your [on-chain logic]. + +> In typical use cases, the only code in this directory that you will need to edit is inside [guest/src/bin]. + + +### Writing Guest Code + +To learn to write code for the zkVM, we recommend [Guest Code 101]. + +Examples of what you can do in the guest can be found in the [RISC Zero examples]. + + +### From Guest Code to Binary File + +Code in the `methods/guest` directory will be compiled into one or more binaries. + +Build configuration for the methods is included in `methods/build.rs`. + +Each will have a corresponding image ID, which is a hash identifying the program. + + +[zkVM]: https://dev.risczero.com/zkvm +[RISC Zero]: https://www.risczero.com/ +[guest programs]: https://dev.risczero.com/terminology#guest-program +[on-chain logic]: ../contracts/ +[guest/src/bin]: ./guest/src/bin/ +[Guest Code 101]: https://dev.risczero.com/zkvm/developer-guide/guest-code-101 +[RISC Zero examples]: https://github.com/risc0/tree/v0.18.0/examples \ No newline at end of file diff --git a/crates/support/methods/build.rs b/crates/support/methods/build.rs new file mode 100644 index 0000000000..bf910fb745 --- /dev/null +++ b/crates/support/methods/build.rs @@ -0,0 +1,52 @@ +// Copyright 2023 RISC Zero, Inc. +// +// 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. + +use std::{collections::HashMap, env, path::PathBuf}; + +use risc0_build::{embed_methods_with_options, DockerOptionsBuilder, GuestOptionsBuilder}; +use risc0_build_ethereum::generate_solidity_files; + +// Paths where the generated Solidity files will be written. +const SOLIDITY_IMAGE_ID_PATH: &str = "../contracts/ImageID.sol"; +const SOLIDITY_ELF_PATH: &str = "../tests/Elf.sol"; + +fn main() { + // Builds can be made deterministic, and thereby reproducible, by using Docker to build the + // guest. Check the RISC0_USE_DOCKER variable and use Docker to build the guest if set. + println!("cargo:rerun-if-env-changed=RISC0_USE_DOCKER"); + println!("cargo:rerun-if-changed=build.rs"); + let manifest_dir = PathBuf::from(std::env::var_os("CARGO_MANIFEST_DIR").unwrap()); + let mut builder = GuestOptionsBuilder::default(); + if env::var("RISC0_USE_DOCKER").is_ok() { + let docker_options = DockerOptionsBuilder::default() + .root_dir(manifest_dir.join("../")) + .build() + .unwrap(); + builder.use_docker(docker_options); + } + let guest_options = builder.build().unwrap(); + + // Generate Rust source files for the methods crate. + let guests = embed_methods_with_options(HashMap::from([("guests", guest_options)])); + + if std::env::var("SKIP_SOLIDITY").unwrap_or_default() != "1" { + // Generate Solidity source files for use with Forge. + let solidity_opts = risc0_build_ethereum::Options::default() + .with_image_id_sol_path(SOLIDITY_IMAGE_ID_PATH) + .with_elf_sol_path(SOLIDITY_ELF_PATH); + generate_solidity_files(guests.as_slice(), &solidity_opts).unwrap(); + } else { + println!("cargo:warning=Skipping solidity codegen (SKIP_SOLIDITY set)"); + } +} diff --git a/crates/support/methods/guest/Cargo.lock b/crates/support/methods/guest/Cargo.lock new file mode 100644 index 0000000000..cc21a3c82a --- /dev/null +++ b/crates/support/methods/guest/Cargo.lock @@ -0,0 +1,2984 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "ahash" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "alloy-dyn-abi" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9135eb501feccf7f4cb8a183afd406a65483fdad7bbd7332d0470e5d725c92f" +dependencies = [ + "alloy-json-abi", + "alloy-primitives", + "alloy-sol-type-parser", + "alloy-sol-types", + "itoa", + "serde", + "serde_json", + "winnow", +] + +[[package]] +name = "alloy-json-abi" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b26fdd571915bafe857fccba4ee1a4f352965800e46a53e4a5f50187b7776fa" +dependencies = [ + "alloy-primitives", + "alloy-sol-type-parser", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-primitives" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a326d47106039f38b811057215a92139f46eef7983a4b77b10930a0ea5685b1e" +dependencies = [ + "alloy-rlp", + "bytes", + "cfg-if", + "const-hex", + "derive_more", + "foldhash", + "hashbrown 0.15.4", + "indexmap", + "itoa", + "k256", + "keccak-asm", + "paste", + "proptest", + "rand 0.9.1", + "ruint", + "rustc-hash", + "serde", + "sha3", + "tiny-keccak", +] + +[[package]] +name = "alloy-rlp" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f70d83b765fdc080dbcd4f4db70d8d23fe4761f2f02ebfa9146b833900634b4" +dependencies = [ + "arrayvec", + "bytes", +] + +[[package]] +name = "alloy-sol-macro" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4be1ce1274ddd7fdfac86e5ece1b225e9bba1f2327e20fbb30ee6b9cc1423fe" +dependencies = [ + "alloy-sol-macro-expander", + "alloy-sol-macro-input", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "alloy-sol-macro-expander" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01e92f3708ea4e0d9139001c86c051c538af0146944a2a9c7181753bd944bf57" +dependencies = [ + "alloy-sol-macro-input", + "const-hex", + "heck", + "indexmap", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.103", + "syn-solidity", + "tiny-keccak", +] + +[[package]] +name = "alloy-sol-macro-input" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afe1bd348a41f8c9b4b54dfb314886786d6201235b0b3f47198b9d910c86bb2" +dependencies = [ + "const-hex", + "dunce", + "heck", + "macro-string", + "proc-macro2", + "quote", + "syn 2.0.103", + "syn-solidity", +] + +[[package]] +name = "alloy-sol-type-parser" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6195df2acd42df92a380a8db6205a5c7b41282d0ce3f4c665ecf7911ac292f1" +dependencies = [ + "serde", + "winnow", +] + +[[package]] +name = "alloy-sol-types" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6185e98a79cf19010722f48a74b5a65d153631d2f038cabd250f4b9e9813b8ad" +dependencies = [ + "alloy-json-abi", + "alloy-primitives", + "alloy-sol-macro", + "serde", +] + +[[package]] +name = "anyhow" +version = "1.0.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" + +[[package]] +name = "ark-bn254" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" +dependencies = [ + "ark-ec 0.4.2", + "ark-ff 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-bn254" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d69eab57e8d2663efa5c63135b2af4f396d66424f88954c21104125ab6b3e6bc" +dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-r1cs-std", + "ark-std 0.5.0", +] + +[[package]] +name = "ark-crypto-primitives" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0c292754729c8a190e50414fd1a37093c786c709899f29c9f7daccecfa855e" +dependencies = [ + "ahash", + "ark-crypto-primitives-macros", + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-relations", + "ark-serialize 0.5.0", + "ark-snark", + "ark-std 0.5.0", + "blake2", + "derivative", + "digest 0.10.7", + "fnv", + "merlin", + "sha2", +] + +[[package]] +name = "ark-crypto-primitives-macros" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7e89fe77d1f0f4fe5b96dfc940923d88d17b6a773808124f21e764dfb063c6a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff 0.4.2", + "ark-poly 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "hashbrown 0.13.2", + "itertools 0.10.5", + "num-traits", + "zeroize", +] + +[[package]] +name = "ark-ec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d68f2d516162846c1238e755a7c4d131b892b70cc70c471a8e3ca3ed818fce" +dependencies = [ + "ahash", + "ark-ff 0.5.0", + "ark-poly 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "educe", + "fnv", + "hashbrown 0.15.4", + "itertools 0.13.0", + "num-bigint", + "num-integer", + "num-traits", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" +dependencies = [ + "ark-ff-asm 0.3.0", + "ark-ff-macros 0.3.0", + "ark-serialize 0.3.0", + "ark-std 0.3.0", + "derivative", + "num-bigint", + "num-traits", + "paste", + "rustc_version 0.3.3", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm 0.4.2", + "ark-ff-macros 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint", + "num-traits", + "paste", + "rustc_version 0.4.1", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a177aba0ed1e0fbb62aa9f6d0502e9b46dad8c2eab04c14258a1212d2557ea70" +dependencies = [ + "ark-ff-asm 0.5.0", + "ark-ff-macros 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "arrayvec", + "digest 0.10.7", + "educe", + "itertools 0.13.0", + "num-bigint", + "num-traits", + "paste", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-asm" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" +dependencies = [ + "quote", + "syn 2.0.103", +] + +[[package]] +name = "ark-ff-macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" +dependencies = [ + "num-bigint", + "num-traits", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09be120733ee33f7693ceaa202ca41accd5653b779563608f1234f78ae07c4b3" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "ark-groth16" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88f1d0f3a534bb54188b8dcc104307db6c56cdae574ddc3212aec0625740fc7e" +dependencies = [ + "ark-crypto-primitives", + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-poly 0.5.0", + "ark-relations", + "ark-serialize 0.5.0", + "ark-std 0.5.0", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "hashbrown 0.13.2", +] + +[[package]] +name = "ark-poly" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "579305839da207f02b89cd1679e50e67b4331e2f9294a57693e5051b7703fe27" +dependencies = [ + "ahash", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "educe", + "fnv", + "hashbrown 0.15.4", +] + +[[package]] +name = "ark-r1cs-std" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "941551ef1df4c7a401de7068758db6503598e6f01850bdb2cfdb614a1f9dbea1" +dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-relations", + "ark-std 0.5.0", + "educe", + "num-bigint", + "num-integer", + "num-traits", + "tracing", +] + +[[package]] +name = "ark-relations" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec46ddc93e7af44bcab5230937635b06fb5744464dd6a7e7b083e80ebd274384" +dependencies = [ + "ark-ff 0.5.0", + "ark-std 0.5.0", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "ark-serialize" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" +dependencies = [ + "ark-std 0.3.0", + "digest 0.9.0", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive 0.4.2", + "ark-std 0.4.0", + "digest 0.10.7", + "num-bigint", +] + +[[package]] +name = "ark-serialize" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7" +dependencies = [ + "ark-serialize-derive 0.5.0", + "ark-std 0.5.0", + "arrayvec", + "digest 0.10.7", + "num-bigint", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "ark-snark" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d368e2848c2d4c129ce7679a7d0d2d612b6a274d3ea6a13bad4445d61b381b88" +dependencies = [ + "ark-ff 0.5.0", + "ark-relations", + "ark-serialize 0.5.0", + "ark-std 0.5.0", +] + +[[package]] +name = "ark-std" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "ark-std" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "246a225cc6131e9ee4f24619af0f19d67761fff15d7ccc22e42b80846e69449a" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "auto_impl" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64ct" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "borsh" +version = "1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad8646f98db542e39fc66e68a20b2144f6a732636df7c2354e74645faaa433ce" +dependencies = [ + "borsh-derive", + "cfg_aliases", +] + +[[package]] +name = "borsh-derive" +version = "1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdd1d3c0c2f5833f22386f252fe8ed005c7f59fdcddeef025c01b4c3b9fd9ac3" +dependencies = [ + "once_cell", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "byte-slice-cast" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" + +[[package]] +name = "bytemuck" +version = "1.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fa76293b4f7bb636ab88fd78228235b5248b4d05cc589aed610f954af5d7c7a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +dependencies = [ + "serde", +] + +[[package]] +name = "cc" +version = "1.2.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d487aa071b5f64da6f19a3e848e3578944b726ee5a4854b82172f02aa876bfdc" +dependencies = [ + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "cobs" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15" + +[[package]] +name = "const-hex" +version = "1.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83e22e0ed40b96a48d3db274f72fd365bd78f67af39b6bbd47e8a15e1c6207ff" +dependencies = [ + "cfg-if", + "cpufeatures", + "hex", + "proptest", + "serde", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "const_format" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crunchy" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "der" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_more" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", + "unicode-xid", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + +[[package]] +name = "downcast-rs" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" + +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "e3-bfv-helpers" +version = "0.1.0" +source = "git+https://github.com/gnosisguild/enclave?rev=1bf6340#1bf6340124ac2ef8ce6d409307d5455ef68ed8ab" +dependencies = [ + "alloy-dyn-abi", + "alloy-primitives", + "fhe", + "fhe-traits", +] + +[[package]] +name = "e3-compute-provider" +version = "0.1.0" +source = "git+https://github.com/gnosisguild/enclave?rev=1bf6340#1bf6340124ac2ef8ce6d409307d5455ef68ed8ab" +dependencies = [ + "ark-bn254 0.4.0", + "ark-ff 0.4.2", + "hex", + "lean-imt", + "light-poseidon", + "num-bigint", + "num-traits", + "rayon", + "serde", + "sha3", +] + +[[package]] +name = "e3-user-program" +version = "0.1.0" +dependencies = [ + "e3-bfv-helpers", + "e3-compute-provider", + "fhe", + "fhe-traits", +] + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + +[[package]] +name = "educe" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417" +dependencies = [ + "enum-ordinalize", + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" + +[[package]] +name = "elf" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4445909572dbd556c457c849c4ca58623d84b27c8fff1e74b0b4227d8b90d17b" + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest 0.10.7", + "ff", + "generic-array", + "group", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "subtle", + "zeroize", +] + +[[package]] +name = "embedded-io" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" + +[[package]] +name = "embedded-io" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" + +[[package]] +name = "enum-ordinalize" +version = "4.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea0dcfa4e54eeb516fe454635a95753ddd39acda650ce703031c6973e315dd5" +dependencies = [ + "enum-ordinalize-derive", +] + +[[package]] +name = "enum-ordinalize-derive" +version = "4.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "ethnum" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca81e6b4777c89fd810c25a4be2b1bd93ea034fbe58e6a75216a34c6b82c539b" + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "fastrlp" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", +] + +[[package]] +name = "fastrlp" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce8dba4714ef14b8274c371879b175aa55b16b30f269663f19d576f380018dc4" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", +] + +[[package]] +name = "ff" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "fhe" +version = "0.1.0-beta.7" +source = "git+https://github.com/gnosisguild/fhe.rs#11cdd749a8e01c486160d5f62572c4520af5358f" +dependencies = [ + "doc-comment", + "fhe-math", + "fhe-traits", + "fhe-util", + "itertools 0.12.1", + "ndarray", + "num-bigint", + "num-traits", + "prost", + "prost-build", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "thiserror 1.0.69", + "zeroize", + "zeroize_derive", +] + +[[package]] +name = "fhe-math" +version = "0.1.0-beta.7" +source = "git+https://github.com/gnosisguild/fhe.rs#11cdd749a8e01c486160d5f62572c4520af5358f" +dependencies = [ + "ethnum", + "fhe-traits", + "fhe-util", + "itertools 0.12.1", + "ndarray", + "num-bigint", + "num-bigint-dig", + "num-traits", + "prost", + "prost-build", + "rand 0.8.5", + "rand_chacha 0.3.1", + "sha2", + "thiserror 1.0.69", + "zeroize", +] + +[[package]] +name = "fhe-traits" +version = "0.1.0-beta.7" +source = "git+https://github.com/gnosisguild/fhe.rs#11cdd749a8e01c486160d5f62572c4520af5358f" +dependencies = [ + "rand 0.8.5", +] + +[[package]] +name = "fhe-util" +version = "0.1.0-beta.7" +source = "git+https://github.com/gnosisguild/fhe.rs#11cdd749a8e01c486160d5f62572c4520af5358f" +dependencies = [ + "itertools 0.12.1", + "num-bigint-dig", + "num-traits", + "prime_factorization", + "rand 0.8.5", + "rayon", +] + +[[package]] +name = "fixed-hash" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" +dependencies = [ + "byteorder", + "rand 0.8.5", + "rustc-hex", + "static_assertions", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "guests" +version = "0.1.0" +dependencies = [ + "alloy-primitives", + "alloy-sol-types", + "anyhow", + "bincode", + "e3-compute-provider", + "e3-user-program", + "risc0-zkvm", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", + "serde", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +dependencies = [ + "serde", +] + +[[package]] +name = "hex-literal" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "impl-codec" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +dependencies = [ + "parity-scale-codec", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "include_bytes_aligned" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee796ad498c8d9a1d68e477df8f754ed784ef875de1414ebdaf169f70a6a784" + +[[package]] +name = "indexmap" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" +dependencies = [ + "equivalent", + "hashbrown 0.15.4", + "serde", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "k256" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "sha2", +] + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "keccak-asm" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "505d1856a39b200489082f90d897c3f07c455563880bc5952e38eabf731c83b6" +dependencies = [ + "digest 0.10.7", + "sha3-asm", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin", +] + +[[package]] +name = "lean-imt" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa2acc6dee32b12409446a76b9c1877e5ba9afb36dfcbe96d0ddaf15ca08f18d" +dependencies = [ + "hashbrown 0.15.4", +] + +[[package]] +name = "libc" +version = "0.2.174" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" + +[[package]] +name = "libm" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" + +[[package]] +name = "light-poseidon" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c9a85a9752c549ceb7578064b4ed891179d20acd85f27318573b64d2d7ee7ee" +dependencies = [ + "ark-bn254 0.4.0", + "ark-ff 0.4.2", + "num-bigint", + "thiserror 1.0.69", +] + +[[package]] +name = "linux-raw-sys" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" + +[[package]] +name = "log" +version = "0.4.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" + +[[package]] +name = "macro-string" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "matrixmultiply" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08" +dependencies = [ + "autocfg", + "rawpointer", +] + +[[package]] +name = "memchr" +version = "2.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" + +[[package]] +name = "merlin" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" +dependencies = [ + "byteorder", + "keccak", + "rand_core 0.6.4", + "zeroize", +] + +[[package]] +name = "metal" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21" +dependencies = [ + "bitflags 2.9.1", + "block", + "core-graphics-types", + "foreign-types", + "log", + "objc", + "paste", +] + +[[package]] +name = "multimap" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084" + +[[package]] +name = "ndarray" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb12d4e967ec485a5f71c6311fe28158e9d6f4bc4a447b474184d0f91a8fa32" +dependencies = [ + "matrixmultiply", + "num-complex", + "num-integer", + "num-traits", + "rawpointer", +] + +[[package]] +name = "no_std_strings" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5b0c77c1b780822bc749a33e39aeb2c07584ab93332303babeabb645298a76e" + +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint-dig" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +dependencies = [ + "byteorder", + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand 0.8.5", + "serde", + "smallvec", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "parity-scale-codec" +version = "3.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799781ae679d79a948e13d4824a40970bfa500058d245760dd857301059810fa" +dependencies = [ + "arrayvec", + "bitvec", + "byte-slice-cast", + "const_format", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "rustversion", + "serde", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34b4653168b563151153c9e4c08ebed57fb8262bebfa79711552fa983c623e7a" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pest" +version = "2.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323" +dependencies = [ + "memchr", + "thiserror 2.0.12", + "ucd-trie", +] + +[[package]] +name = "petgraph" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +dependencies = [ + "fixedbitset", + "indexmap", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "postcard" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "170a2601f67cc9dba8edd8c4870b15f71a6a2dc196daec8c83f72b59dff628a8" +dependencies = [ + "cobs", + "embedded-io 0.4.0", + "embedded-io 0.6.1", + "serde", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "prettyplease" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6837b9e10d61f45f987d50808f83d1ee3d206c66acf650c3e4ae2e1f6ddedf55" +dependencies = [ + "proc-macro2", + "syn 2.0.103", +] + +[[package]] +name = "prime_factorization" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb24cb4f70d64221509ab3dca82ad2ec24e1d7f3fa3e7cb9eed4ced578683287" +dependencies = [ + "itertools 0.10.5", + "num", + "rand 0.8.5", +] + +[[package]] +name = "primitive-types" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" +dependencies = [ + "fixed-hash", + "impl-codec", + "uint", +] + +[[package]] +name = "proc-macro-crate" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro-error-attr2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "proc-macro-error2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +dependencies = [ + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "proc-macro2" +version = "1.0.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "proptest" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fcdab19deb5195a31cf7726a210015ff1496ba1464fd42cb4f537b8b01b471f" +dependencies = [ + "bit-set", + "bit-vec", + "bitflags 2.9.1", + "lazy_static", + "num-traits", + "rand 0.9.1", + "rand_chacha 0.9.0", + "rand_xorshift", + "regex-syntax", + "rusty-fork", + "tempfile", + "unarray", +] + +[[package]] +name = "prost" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-build" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" +dependencies = [ + "bytes", + "heck", + "itertools 0.12.1", + "log", + "multimap", + "once_cell", + "petgraph", + "prettyplease", + "prost", + "prost-types", + "regex", + "syn 2.0.103", + "tempfile", +] + +[[package]] +name = "prost-derive" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" +dependencies = [ + "anyhow", + "itertools 0.12.1", + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "prost-types" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" +dependencies = [ + "prost", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quote" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", + "serde", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.16", +] + +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.3", + "serde", +] + +[[package]] +name = "rand_xorshift" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" +dependencies = [ + "rand_core 0.9.3", +] + +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + +[[package]] +name = "risc0-binfmt" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4fe7599ac55ad77515608ec42a9727001559fe4f579c533cb7c973b54800c05" +dependencies = [ + "anyhow", + "borsh", + "derive_more", + "elf", + "lazy_static", + "postcard", + "risc0-zkp", + "risc0-zkvm-platform", + "semver 1.0.26", + "serde", + "tracing", +] + +[[package]] +name = "risc0-circuit-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d339c65b0e011677404bd6bdfe1b0f29748187a568fb2f74df7fb650590181a" +dependencies = [ + "anyhow", + "bytemuck", + "paste", + "risc0-binfmt", + "risc0-circuit-recursion", + "risc0-core", + "risc0-zkp", + "tracing", +] + +[[package]] +name = "risc0-circuit-recursion" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c6501fd3936aea2dd3e55915f34328fe96e6ca25ef00320242f837ae668785b" +dependencies = [ + "anyhow", + "bytemuck", + "hex", + "metal", + "risc0-core", + "risc0-zkp", + "tracing", +] + +[[package]] +name = "risc0-circuit-rv32im" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c80e0a8f0f56106295bb682dbc27093438e163a5f6384a79e877ab895a11d9ae" +dependencies = [ + "anyhow", + "bit-vec", + "bytemuck", + "derive_more", + "paste", + "risc0-binfmt", + "risc0-core", + "risc0-zkp", + "serde", + "tracing", +] + +[[package]] +name = "risc0-core" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317bbf70a8750b64d4fd7a2bdc9d7d5f30d8bb305cae486962c797ef35c8d08e" +dependencies = [ + "bytemuck", + "bytemuck_derive", + "rand_core 0.6.4", +] + +[[package]] +name = "risc0-groth16" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b31cb7b2a46f0cdaf71803ea7e0389af9f5bc1aea2531106f2972b241f26e98" +dependencies = [ + "anyhow", + "ark-bn254 0.5.0", + "ark-ec 0.5.0", + "ark-groth16", + "ark-serialize 0.5.0", + "bytemuck", + "hex", + "num-bigint", + "num-traits", + "risc0-binfmt", + "risc0-zkp", + "serde", + "stability", +] + +[[package]] +name = "risc0-zkos-v1compat" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f76c479b69d1987cb54ac72dcc017197296fdcd6daf78fafc10cbbd3a167a7de" +dependencies = [ + "include_bytes_aligned", + "no_std_strings", +] + +[[package]] +name = "risc0-zkp" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa210a232361fd671b30918469856b64d715f2564956d0a5df97ab6cb116d28b" +dependencies = [ + "anyhow", + "blake2", + "borsh", + "bytemuck", + "cfg-if", + "digest 0.10.7", + "hex", + "hex-literal", + "metal", + "paste", + "rand_core 0.6.4", + "risc0-core", + "risc0-zkvm-platform", + "serde", + "sha2", + "stability", + "tracing", +] + +[[package]] +name = "risc0-zkvm" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f1014d2efcb3b359aff878c9aeb6aa949a6d91f091a2ffb5ffd8d928a1ab7f3" +dependencies = [ + "anyhow", + "borsh", + "bytemuck", + "derive_more", + "getrandom 0.2.16", + "hex", + "risc0-binfmt", + "risc0-circuit-keccak", + "risc0-circuit-recursion", + "risc0-circuit-rv32im", + "risc0-core", + "risc0-groth16", + "risc0-zkos-v1compat", + "risc0-zkp", + "risc0-zkvm-platform", + "rrs-lib", + "semver 1.0.26", + "serde", + "sha2", + "stability", + "tracing", +] + +[[package]] +name = "risc0-zkvm-platform" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e4de2938eaf24892ef927d9cef6e4acb6a19ce01c017cd498533896f633f332" +dependencies = [ + "bytemuck", + "cfg-if", + "getrandom 0.2.16", + "getrandom 0.3.3", + "libm", + "stability", +] + +[[package]] +name = "rlp" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" +dependencies = [ + "bytes", + "rustc-hex", +] + +[[package]] +name = "rrs-lib" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4382d3af3a4ebdae7f64ba6edd9114fff92c89808004c4943b393377a25d001" +dependencies = [ + "downcast-rs", + "paste", +] + +[[package]] +name = "ruint" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11256b5fe8c68f56ac6f39ef0720e592f33d2367a4782740d9c9142e889c7fb4" +dependencies = [ + "alloy-rlp", + "ark-ff 0.3.0", + "ark-ff 0.4.2", + "bytes", + "fastrlp 0.3.1", + "fastrlp 0.4.0", + "num-bigint", + "num-integer", + "num-traits", + "parity-scale-codec", + "primitive-types", + "proptest", + "rand 0.8.5", + "rand 0.9.1", + "rlp", + "ruint-macro", + "serde", + "valuable", + "zeroize", +] + +[[package]] +name = "ruint-macro" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" + +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + +[[package]] +name = "rustc-hex" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" + +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver 0.11.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver 1.0.26", +] + +[[package]] +name = "rustix" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" +dependencies = [ + "bitflags 2.9.1", + "errno", + "libc", + "linux-raw-sys", + "windows-sys", +] + +[[package]] +name = "rustversion" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" + +[[package]] +name = "rusty-fork" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" +dependencies = [ + "fnv", + "quick-error", + "tempfile", + "wait-timeout", +] + +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" +dependencies = [ + "serde", +] + +[[package]] +name = "semver-parser" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9900206b54a3527fdc7b8a938bffd94a568bac4f4aa8113b209df75a09c0dec2" +dependencies = [ + "pest", +] + +[[package]] +name = "serde" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "serde_json" +version = "1.0.140" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest 0.10.7", + "keccak", +] + +[[package]] +name = "sha3-asm" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28efc5e327c837aa837c59eae585fc250715ef939ac32881bcc11677cd02d46" +dependencies = [ + "cc", + "cfg-if", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest 0.10.7", + "rand_core 0.6.4", +] + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "stability" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d904e7009df136af5297832a3ace3370cd14ff1546a232f4f185036c2736fcac" +dependencies = [ + "quote", + "syn 2.0.103", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4307e30089d6fd6aff212f2da3a1f9e32f3223b1f010fb09b7c95f90f3ca1e8" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn-solidity" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c8c8f496c33dc6343dac05b4be8d9e0bca180a4caa81d7b8416b10cc2273cd" +dependencies = [ + "paste", + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "tempfile" +version = "3.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" +dependencies = [ + "fastrand", + "getrandom 0.3.3", + "once_cell", + "rustix", + "windows-sys", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +dependencies = [ + "thiserror-impl 2.0.12", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "toml_datetime" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" + +[[package]] +name = "toml_edit" +version = "0.22.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tracing" +version = "0.1.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "tracing-core" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-subscriber" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" +dependencies = [ + "tracing-core", +] + +[[package]] +name = "typenum" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" + +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + +[[package]] +name = "uint" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + +[[package]] +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + +[[package]] +name = "unicode-ident" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "wait-timeout" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" +dependencies = [ + "libc", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasi" +version = "0.14.2+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winnow" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74c7b26e3480b707944fc872477815d29a8e429d2f93a1ce000f5fa84a15cbcd" +dependencies = [ + "memchr", +] + +[[package]] +name = "wit-bindgen-rt" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags 2.9.1", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "zerocopy" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", +] diff --git a/crates/support/methods/guest/Cargo.toml b/crates/support/methods/guest/Cargo.toml new file mode 100644 index 0000000000..f15a8db467 --- /dev/null +++ b/crates/support/methods/guest/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "guests" +version = "0.1.0" +edition = "2021" + +[workspace] + +[[bin]] +name = "program" +path = "src/bin/program.rs" + +[dependencies] +alloy-primitives = { version = "1.0", default-features = false, features = ["rlp", "serde", "std"] } +alloy-sol-types = "1.0" +risc0-zkvm = { version = "2.1.0", default-features = false, features = ['std'] } +e3-compute-provider = { git = "https://github.com/gnosisguild/enclave", rev = "2ca0aa5f47dd962add5d1d0f74900d9bceb957e5" } +e3-user-program = { path = "../../program" } +bincode = "1.3.3" +anyhow = "1.0.86" + +[profile.release] +lto = "thin" diff --git a/crates/support/methods/guest/README.md b/crates/support/methods/guest/README.md new file mode 100644 index 0000000000..8daf0334bb --- /dev/null +++ b/crates/support/methods/guest/README.md @@ -0,0 +1,12 @@ +# Guest Programs + +Each file in the [`src/bin`](./src/bin) folder defines a program for the zkVM. +We refer to the program running in the zkVM as the "[guest]". + +To learn more about writing guest programs, check out the zkVM [developer docs]. +For zkVM API documentation, see the [guest module] of the [`risc0-zkvm`] crate. + +[guest]: https://dev.risczero.com/terminology#guest +[developer docs]: https://dev.risczero.com/zkvm +[guest module]: https://docs.rs/risc0-zkvm/latest/risc0_zkvm/guest/index.html +[`risc0-zkvm`]: https://docs.rs/risc0-zkvm/latest/risc0_zkvm/index.html diff --git a/crates/support/methods/guest/src/bin/program.rs b/crates/support/methods/guest/src/bin/program.rs new file mode 100644 index 0000000000..b5be58c572 --- /dev/null +++ b/crates/support/methods/guest/src/bin/program.rs @@ -0,0 +1,20 @@ +use anyhow::{Error, Result}; +use bincode::deserialize; +use e3_compute_provider::{ComputeInput, ComputeResult}; +use e3_user_program::fhe_processor; +use risc0_zkvm::guest::env; +use std::io::Read; + +fn decode_input(input: &[u8]) -> Result, Error> { + Ok(risc0_zkvm::serde::from_slice(input)?) +} + +fn main() { + let mut input_slice = Vec::::new(); + env::stdin().read_to_end(&mut input_slice).unwrap(); + let input: ComputeInput = deserialize(&decode_input(&input_slice).unwrap()).unwrap(); + + let result: ComputeResult = input.process(fhe_processor); + + env::commit(&result); +} diff --git a/crates/support/methods/src/lib.rs b/crates/support/methods/src/lib.rs new file mode 100644 index 0000000000..2a5dd3b258 --- /dev/null +++ b/crates/support/methods/src/lib.rs @@ -0,0 +1,16 @@ +// Copyright 2023 RISC Zero, Inc. +// +// 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. + +//! Generated crate containing the image ID and ELF binary of the build guest. +include!(concat!(env!("OUT_DIR"), "/methods.rs")); diff --git a/crates/support/program/Cargo.toml b/crates/support/program/Cargo.toml new file mode 100644 index 0000000000..e5d627face --- /dev/null +++ b/crates/support/program/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "e3-user-program" +version = "0.1.0" +edition = "2024" + +[dependencies] +fhe_rs = { workspace = true } +fhe-traits = { workspace = true } +e3-compute-provider = { git = "https://github.com/gnosisguild/enclave", rev = "2ca0aa5f47dd962add5d1d0f74900d9bceb957e5" } +e3-bfv-helpers = { git = "https://github.com/gnosisguild/enclave", rev = "2ca0aa5f47dd962add5d1d0f74900d9bceb957e5" } diff --git a/crates/support/program/src/lib.rs b/crates/support/program/src/lib.rs new file mode 100644 index 0000000000..3ed45d3ac6 --- /dev/null +++ b/crates/support/program/src/lib.rs @@ -0,0 +1,17 @@ +use e3_bfv_helpers::decode_bfv_params_arc; +use e3_compute_provider::FHEInputs; +use fhe_rs::bfv::Ciphertext; +use fhe_traits::{DeserializeParametrized, Serialize}; + +/// CRISP Implementation of the CiphertextProcessor function +pub fn fhe_processor(fhe_inputs: &FHEInputs) -> Vec { + let params = decode_bfv_params_arc(&fhe_inputs.params); + + let mut sum = Ciphertext::zero(¶ms); + for ciphertext_bytes in &fhe_inputs.ciphertexts { + let ciphertext = Ciphertext::from_bytes(&ciphertext_bytes.0, ¶ms).unwrap(); + sum += &ciphertext; + } + + sum.to_bytes() +} diff --git a/crates/support/scripts/build.sh b/crates/support/scripts/build.sh new file mode 100755 index 0000000000..cfa349100d --- /dev/null +++ b/crates/support/scripts/build.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash +PKG=ghcr.io/gnosisguild/e3-support +GIT_SHA=$(git rev-parse --short HEAD) + +# Separate --push from other arguments +PUSH=false +BUILD_ARGS=() + +for arg in "$@"; do + if [ "$arg" = "--push" ]; then + PUSH=true + else + BUILD_ARGS+=("$arg") + fi +done + +# Build with any additional arguments +docker build -t $PKG:$GIT_SHA "${BUILD_ARGS[@]}" . + +# Push if --push was specified +if [ "$PUSH" = true ]; then + docker push $PKG:$GIT_SHA + echo "Image pushed to: $PKG:$GIT_SHA" +fi diff --git a/crates/support/scripts/container/build.sh b/crates/support/scripts/container/build.sh new file mode 100755 index 0000000000..8ebfb624e2 --- /dev/null +++ b/crates/support/scripts/container/build.sh @@ -0,0 +1 @@ +cargo build diff --git a/crates/support/scripts/container/start.sh b/crates/support/scripts/container/start.sh new file mode 100755 index 0000000000..c282ecc390 --- /dev/null +++ b/crates/support/scripts/container/start.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env bash + +# Clear any existing environment variables +unset BONSAI_API_KEY BONSAI_API_URL + +# Parse command line arguments +POSITIONAL=() +while [[ $# -gt 0 ]]; do + case $1 in + --api-key) + export BONSAI_API_KEY="$2" + shift 2 + ;; + --api-url) + export BONSAI_API_URL="$2" + shift 2 + ;; + --risc0-dev-mode) + export RISC0_DEV_MODE="$2" + shift 2 + ;; + *) + POSITIONAL+=("$1") + shift + ;; + esac +done + +set -- "${POSITIONAL[@]}" + +CARGO_INCREMENTAL=1 + +if [ -z "$RISC0_DEV_MODE" ]; then + [ -z "$BONSAI_API_KEY" ] && export RISC0_DEV_MODE=1 +fi + +echo "RISC0_DEV_MODE=$RISC0_DEV_MODE" + +exec cargo run --bin e3-support-app "$@" diff --git a/crates/support/scripts/dev.sh b/crates/support/scripts/dev.sh new file mode 100755 index 0000000000..1eb5d1230c --- /dev/null +++ b/crates/support/scripts/dev.sh @@ -0,0 +1,15 @@ +# dev +PKG=ghcr.io/gnosisguild/e3-support:next + +docker run -it \ + -v $(pwd)/app:/app/app \ + -v $(pwd)/host:/app/host \ + -v $(pwd)/methods:/app/methods \ + -v $(pwd)/types:/app/types \ + -v $(pwd)/program:/app/program \ + -v $(pwd)/scripts:/app/scripts \ + -v $(pwd)/contracts:/app/contracts \ + -v $(pwd)/tests:/app/tests \ + -v $(pwd)/Cargo.toml:/app/Cargo.toml \ + -v $(pwd)/Cargo.lock:/app/Cargo.lock \ + $PKG diff --git a/crates/support/tests/.keep b/crates/support/tests/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/crates/support/tests/Elf.sol b/crates/support/tests/Elf.sol new file mode 100644 index 0000000000..94f932e5b0 --- /dev/null +++ b/crates/support/tests/Elf.sol @@ -0,0 +1,24 @@ +// Copyright 2024 RISC Zero, Inc. +// +// 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. +// +// SPDX-License-Identifier: Apache-2.0 + +// This file is automatically generated + +pragma solidity ^0.8.20; + +library Elf { + string public constant PROGRAM_PATH = + "/app/target/riscv-guest/methods/guests/riscv32im-risc0-zkvm-elf/release/program.bin"; +} diff --git a/crates/support/types/Cargo.toml b/crates/support/types/Cargo.toml new file mode 100644 index 0000000000..4389bfb609 --- /dev/null +++ b/crates/support/types/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "e3-support-types" +version.workspace = true +edition.workspace = true + +[dependencies] +serde.workspace = true +serde_json.workspace = true +anyhow.workspace = true +hex.workspace = true diff --git a/crates/support/types/src/lib.rs b/crates/support/types/src/lib.rs new file mode 100644 index 0000000000..1d83ba9b9c --- /dev/null +++ b/crates/support/types/src/lib.rs @@ -0,0 +1,154 @@ +use anyhow::Result; +use serde::{Deserialize, Deserializer, Serialize, Serializer}; + +#[derive(Serialize, Deserialize, Debug)] +pub struct ComputeResponse { + pub ciphertext: Vec, + pub proof: Vec, +} + +#[derive(Debug, Deserialize)] +pub struct ComputeRequest { + pub e3_id: Option, + #[serde(deserialize_with = "deserialize_hex_string")] + pub params: Vec, + #[serde(deserialize_with = "deserialize_hex_tuple")] + pub ciphertext_inputs: Vec<(Vec, u64)>, + pub callback_url: Option, +} + +#[derive(Serialize, Debug)] +pub struct WebhookPayload { + pub e3_id: u64, + #[serde(serialize_with = "serialize_as_hex")] + pub ciphertext: Vec, + #[serde(serialize_with = "serialize_as_hex")] + pub proof: Vec, +} + +fn serialize_as_hex(bytes: &Vec, serializer: S) -> Result +where + S: Serializer, +{ + let hex_string = format!("0x{}", hex::encode(bytes)); + serializer.serialize_str(&hex_string) +} + +pub fn deserialize_hex_string<'de, D>(deserializer: D) -> Result, D::Error> +where + D: Deserializer<'de>, +{ + let s: String = Deserialize::deserialize(deserializer)?; + let hex_str = s.strip_prefix("0x").unwrap_or(&s); + hex::decode(hex_str).map_err(serde::de::Error::custom) +} + +pub fn deserialize_hex_tuple<'de, D>(deserializer: D) -> Result, u64)>, D::Error> +where + D: Deserializer<'de>, +{ + let tuples: Vec<(String, u64)> = Deserialize::deserialize(deserializer)?; + tuples + .into_iter() + .map(|(hex_str, num)| { + let stripped = hex_str.strip_prefix("0x").unwrap_or(&hex_str); + hex::decode(stripped) + .map(|bytes| (bytes, num)) + .map_err(serde::de::Error::custom) + }) + .collect() +} + +#[cfg(test)] +mod tests { + use crate::{ComputeRequest, WebhookPayload}; + + #[test] + fn test_deserialize_compute_request() { + let json = r#" + { + "e3_id": 12345, + "params": "0x12345ffa", + "ciphertext_inputs": [ + ["0xffabc123", 100], + ["0xaa6de432", 200] + ], + "callback_url": "https://example.com/callback" + } + "#; + + let payload: ComputeRequest = serde_json::from_str(json).unwrap(); + + assert_eq!(payload.e3_id, Some(12345)); + assert_eq!(payload.params, hex::decode("12345ffa").unwrap()); + assert_eq!(payload.ciphertext_inputs.len(), 2); + assert_eq!( + payload.ciphertext_inputs[0], + (hex::decode("ffabc123").unwrap(), 100) + ); + assert_eq!( + payload.ciphertext_inputs[1], + (hex::decode("aa6de432").unwrap(), 200) + ); + assert_eq!( + payload.callback_url, + Some("https://example.com/callback".to_string()) + ); + } + + #[test] + fn test_deserialize_compute_request_no_prefix() { + let json = r#" + { + "e3_id": 12345, + "params": "12345ffa", + "ciphertext_inputs": [ + ["ffabc123", 100], + ["aa6de432", 200] + ], + "callback_url": "https://example.com/callback" + } + "#; + + let payload: ComputeRequest = serde_json::from_str(json).unwrap(); + + assert_eq!(payload.e3_id, Some(12345)); + assert_eq!(payload.params, hex::decode("12345ffa").unwrap()); + assert_eq!(payload.ciphertext_inputs.len(), 2); + assert_eq!( + payload.ciphertext_inputs[0], + (hex::decode("ffabc123").unwrap(), 100) + ); + assert_eq!( + payload.ciphertext_inputs[1], + (hex::decode("aa6de432").unwrap(), 200) + ); + assert_eq!( + payload.callback_url, + Some("https://example.com/callback".to_string()) + ); + } + + #[test] + fn test_webhook_payload_serialization() { + let payload = WebhookPayload { + e3_id: 12345, + ciphertext: vec![0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef], + proof: vec![0xde, 0xad, 0xbe, 0xef], + }; + + let json = serde_json::to_string(&payload).expect("Failed to serialize"); + let expected = r#"{"e3_id":12345,"ciphertext":"0x0123456789abcdef","proof":"0xdeadbeef"}"#; + + assert_eq!(json, expected); + } + + #[test] + fn test_deserialize_compute_large_payload() { + let json = r#"{"e3_id":0,"params":"0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000fc00100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000003fffffff000001","ciphertext_inputs":[["0x0a8a6c08021080101a806ca049c3e165dd0d724db8e7ff91bd3cbdcaa21b19e3f5d254b350b328207a2d854f4b244107b674477d101f50daafd23feca3771c0923bfc2a19a419e095aa967a0d7ed0c7b59665acbe2fe8ea7a99874546e2092f93f37be13879d8dd6364d06b18f3fdf4a678d31b7456222e772f9c6c49ba9e4d7541fd859905f357acc380e3bc259eb987a800d20feb5fc4ec89a5d6ba519ffcd7d75e6ceb448852592db96bf1ba3e29054b4aad860a6f433eda762cce5960a23f19ca5f6dff895bf5bb78a15e3808a608b9ed38603481edaa9208f0887841ac4af289cf6b6486042dbf5e2ac1b53199beeef6129a45df4c6521664f304b955108539dd14596065a14d3f339936b421dd47bb66b2a49b367e40c8f9dd09697bc04aef671d1db930b0855326a8eb31975415d500b0040e6e56f40b6574e5ff2cb154d6168015522e504de9b25ecdcf3837d854017be5c80bb847f368958cc1ae157e82475ee52c9dc7b5e5ef334201c370af95a3af1c790ea9e27a538e44e3d82a6b0181b7ad883e4f7def4d2706c208b3e7441d9afcca4dce9247fab7762a6ce2d1624b3e18672610f219bc9755c8314265185fdcaa3dc203bd79ec6e6ed4a7b0b3ad5db383cbf290acb4ae9eaa8904d3216df99b68acd1efaa78207b89aa7814d05835b501680dfbf8d8079dc01312ca147f54234f010370df9ffbcfedc737c87bded7a901cea5a3077ee7fc4af96f8e6386245abf707a6b68f1fabc4b6b0d1704c45852aba599db14fb1cb62d6a1740d5813d6bacda9107fb6b0a1e26c2d5388fbafd9d53b6c0e26298742d3c20ec17cde0720805295ccc8d5fc930bf683b83ab644c8c59b55d4a0418938f44f597cdec69c97c8a1baef1f674cc18afaab16a3138ec1ac664c200659b55f18fabb7db1b17251e63b05a556f129659504f6a2a0207cbf2ffe353aa816ef078ad4f6ec2a6a2e5a7bac9b3104b1b6c234811e1bbd415594151b73a334b4c3f28dd865348568b3a4fa406e56dd7b1b0562859c8cc1d0dbd2b72d34c5e4c9a7625024b6e3918e1346aa9c82280787c4de8842620ff78483eebe5349de09703afe32eb938e68c2030e9c0a8e4ec730279a1eb63291801d391cc89b6d13febfaf85c82c832af74681c0483efb6ca8a384b33775720246832bbcaec495efd92f72602e682a75c9d9f6d0ad35e73d1a4017a3868adb52ebe5a080ff6c1b8c7355eb39730b59c3c6e9a24c483bc997eabbdfa778eebe9d3f44e2e195b8740ed960bb27dc1fe08edd8bac12b264cecbe548dfd8264ed7669d7534a24f098aee146d46fc5efb6ada42af40899b0de9ffe27fdfbdbc6f914d6be23d9bc15691876a7d64c7aaa0fd58132f514fd3e772ae6b8dfc76e939576efec7bec78214a7aa2675402cbfd1c44f39af967004ac409b6743ca4f3a7acd50ad4af945c4d2abe0397079eb39735cc7ee1418026bc6822b8e42d0dc46b1e2c7db2862fa057c312c3c76e82d2e0987d27b7225e4b40eb67edcc2b35e671884937f2992c25c00fd8cd24e987ffb0674627dd613b2393040a70d5f7caa12010651d0d7ebddf17acff6b156562e61086e68971955c03fe0a7355038ea108302df3f47a91dbcd4fdc24a5e37920923f61c3a8cb665dc41687c3f6108f4dfd4536e305fa394a92e554f5fe3cbcb7f6c1a2b6799ef2690315ba07964fdafc64944d6c54a600362cdc6e4e00d1747cfcf9c433422607d51ce54dff2d7c09dcbf9fc282d4621c8d881e6643eabb28ed20188d6cf67ab7ba7f45fab1aca01d26b4a0076a6b6f029427ad2cc7babda3fb75cc044d70cf4aa9b6da079d318b5b4d8379a1913e80c5268ca4151db34da60343ecfd5fbc4fa5749cbdc8d432180dff3a480c8acfa6197c400c42e3f8eacebbd769e4ddd2374de9c750f84063a827715457272559035fdcb6e39fdaac699d7285be86d3aa64486085d3ad9c43344c9b3736c2469b9c7eb00cf98f0466f07f738cd3c96e12ef0728f20116ad462fa9cba27b7b7b0f6b18e94050c19fd674e43a2127bff51045ba975540790ef36fe3bfc2db738475b36f6abf5e9140bcddc95b1ef31992c38e9c96553d662f5f9b352b33237cc46efdf5f2e35980f07342678ade5ac5258463973f4d05f63edd0479723ae6a701989433c7d0dd4534d82e73acf22e4486d1c61e890e0246020b4b21563a4290ec4361b91517cf8c63847d48b36d8fb36c0dddc454f80671bf2d9d71f35307bc789948e27d9f23b079fe2ee1ba9e0504de1ca324c24bd915e049394bbf7c28fd327ab906a18abb6f33b40cf01a1217961948e8417adb55d54b7ad18e04c8da27f881bd554cfa46636e11d0a60ae5dd7f2e7ad27800ce53e0ac3dcb2e8556485b874b16f49486f9d26acd1d6afbcb06e1da93717fb6e94f8f0cd80840ad3f1ead39dd3faa2fc7818228963b1db2400984f94513ddb427176a63e4af53da9c31f9d279439a53b07e19ab68085f5ebd9091b2cdf4fd85d19ea757cdaf462b13871ed5a918b48aace7c5ac1287bcca734c65c5e330de3c96ea6eda9ab1450afb830e5afc88b2b925955097c4ad1609465368fda745843da614a97f7411d79268b4f2361e9bd83c83528dbf1a87fc6f89a7e2abd6bfa27c1be2270d28b6963142a07e6ee8608806f34247e2848e7a5befc8bc87b221fca7bce629d1c72e242f40e44edf71f062501947d68b2fcc6e038ce8a43dac30e7eff4e74f3c9d8f642ae90b57a6ab886bfb60d3ba42840270b15830a75538cc33fcc2bb149217530754ff370719d125f2b41096cfa4c745de9089e69dbd086a06a704abf108331a20a5ca1a72b723ffa157c6c1cc7b8a97bbbf3928f014748c9fa89542eaa6016c664eebd6cb01db4839c2083d5a4cc38a871cffeb3a52667c593ef5bf65c11b4ea4732bd3a6fbeb8ac389de161c565a6653499ffab5a71b09ace40dd79b6d7ee919db59541ed7ab694d817e37e467dc8429bd58b8ebdaa6c1380b0269a87e6fbea6edcaac0b42f5798cf0cde4a3d5cf5ddb724858b63fae88826b115d00c00bf0a909c1d364ba5766c890eb4fb865b2edb3d6726c61d449406a438c7f1c853329a62cc791f928ff449c4f289aef8a72da06b772aedb21113c27e79fdff81550f7f5269ead35348116eaf8401459efd3da0ee6918429ba16335d535f0af3d33d8a4c146bbe390b0ae6228aa41b37ba9177f5fdec944ff8156cb4ba786145caa47e4c3513be0fb8e9cbb220aa647f9c87cec202b8d625c639c8324e6233a10d0d74dcbe6d391cb7f5bd3e9ce30299cb4e01e569bfdc0324d503737e9c28c58e3269deb1688bc70c0db4c6e4c088c5d1aaf31c598c010a5590fc03d9262601741dbf0662aa71f14fc4cb3643fd6559b3407f2f3469ca208187e22f6bcca28df708aa93e8dc85a64489565cd69966cbad6a0ed805bff40c1c9ab84ccc6c4fc5ba8aa71720274301702df3c874813977ce2f2026213924a66557b88fb526e12b943bf9bdbc496c2e35c4193457650797b599b6362bb6869939c0fbb51486112a8ec38ce49d3b3a3990895f0aefba7bfb928357551589346830eb3882cc840965eb55b8860a2594e613cde2613663327c062feaa3bfbe192c5c53a29166add212d7ace1bc858fc65725163dd5fcce9e12f1102e320ecc623904339e370514e0ebc4a3ec8ab11bd099ff8805695436548433fad5a69d7e08b3b8e1569a0eb79a77e2252442434393008bc2bdb003b2175b79f47593d99146d041c6df7abf8bbed6a957e7deca154d53d597625849050c453ac2b8bccbf3b49989d8d0276223dcb97e9d3f209640fa2d455538fffff1502987953d5a34e27088515bd08cabce3d9ff2e35ed40f3b464a1797896eb05f79714a855b013d864714e16a553ecf79f71ee935871bccaa30c408e188a48f4538413ae13fd2091fa1a36acc981753e937ddb90a20af6f9eb2679ba5ba50a77d69b5ee62f11d1bad3d3efe31bdf108f1620417933170bc9062c739b3848ac61f68cc02b01987b74d33a6ef2025dc512e412153ef6a69fbd767516582dd090ad42b4e74c726cf49fa79f7ee18fa003420f5559f345c5b7deaaafdf33dd1664926ec339da5e08cec6a207f264323d70f90109a3621fb5bf2ce0672aa9c4bb52f66a0b661866c9792328bcf9b39c0073bab28757a006c9c3d862d6e208a16f35714f4e562fc10881f503277e035b9bdb9b2851204f5fe78347c6cb34fe3094fc5b41433fd509bbddb549840ded7aea3e13e3226893852e037c12f1ddff92ae671db83e64f24245e2148194b006448bfc6a3ca1b961c49f6850f8115f3c17c7452cef01aa260a2f648bcc4551ed00ae3b124f0bb37a2b50a206483cdd72673bc366c88396b76ecd789bc32c52a59cfb322a1758d7be23599e2f41a9d50aa3ca12739f0ea9fa82840dbb113fffd6e9e1fed7af23938c81d1801b1551216180f6a891b50a4336f67d4bcec74d8748ca2289da14cdb975c22a00f746183fb2407c38f006a246e9b1f562ad6a0ddc95f820c9768975310558044df1c44c6abc099753272ec06650a4a1117cdc10662bd19f66d9c2d8596ca2eab7137fc731f53a93154f37dc24b254d1c03d1d85244dfda7fb8ffe8711f6bdab0da62f7bc77f172c4d485f878aeb1ba4fc9ef1883bac943982341a39753ec2ef9b5c305d706a8b48c69a119986e4a35ba87036ccf1a2f3306f07b5776a25659b7256581a9bc471dd86c4f07b348dda7bd4f9f902e41b0155b0307209d5d61c400c1347b4de54caf3161ccb3d7f0b28661d57e737dc625ae60c587d3c55fe039dfc5afde9d4c159e1945f42586617501ad8b1aa0d8cd2449ab7f6df7aed7cb73b90c06753456b929039012451957670d1ac9370f28e5b6581965f8b143ddf2e2e5fbb6d8e43f7de75ee7358749047e97169899285e85b6fcfd4e4bf3238e8ac109e6b399c9209469b7804390970b9d0bfdae2ddb5a9e3bec72bbf458e1a23faca596cd1a432ba9e294503a97870e42ecabd3b5e372b9021d96951e98b85e4899f18d818189e64497f89d9e3ea93fafdb6ab31d88322e6f82341535ca39520827b8af3966c16ef6bcebabe58546f206b63745214c8d2b2d31ab1a54638402ac48ce253e8de8226f3640f989ff5968a1809dc010feb1a8693782aba839563c8c18d2d23a7969878f1585019a0c4475f3413479eee743f29d26a1bdde1922bf9fc61bbdd0ab390fe7cf74cc7ced8242c2c024e097fd17a96dc1e6cf5974d8b9469aade07334da346f589890a1d98fdbeb3a268c165ed4caf2655a2133095aa1e4574f260d79355123feff27cad8b5c51cc1e8bfba3af0834e90875e34129253e9d4659ef75ff71cfc49fe82b1c57b3f1deb3e9a37daf35e37f52cfe98a56ed9d3633ab21d39376a4c6e55771983ee57693b2dc28e6a935f84071d2729d308b8ad192568800ada82ae9ee44269189951f120939fc73f2318f75ed4d89cc135ddf2a5d648dfc530d55c63ca4283ffb7153fe86a37a549878995e4fd48dbc816e3a7eb705f8373ca1d1c3cc07de5cbb5dd5b0ff68a8e6f64f76c60e3362a10851321383a7f98aac1e0006c0fbe193c2a7827a298fd7d5e30cbc661b93172e4e6144f6bf2d23abcb7b8740b6f8459f3bce6177f6d0a92a26e9683c76f0e6b615cb09d251896d30c23e0ec1ce88433b8f8ba00014382bc87e0769588b5b5b970046dc9274e56d466ee4ef59d4287185aa4e6b9dc241145421443ab0c631b579462513a87468a7ea08c4f76d2d4d788017a4892a4efe60207f7c884bcd6a72ed45ceb6e99246f18b0b94d854a27a1084224299ea2669029ed01957952ce10075804bdff3d4ae0e58115319fc146481902fad05923e1bdf3a1511bdbeda1ae9d587edaa02acf0ac613889c4ab7e8b5bdd28e85427921e15c0b4f1c8404bc76d40d138e5deb02d632d7aa4d2fe8460ab8136928b456ddd4f642dc24ac0e0c21946392b8ec5f74f4ee9ff0f66d1042333396d4cf14f0cd6c8d76746af2440d70b22810e34f5d34d679a82118320fdb397e65fe2279337a226161197e72a3146d006f24fa88647293d959d8956a480cee9c298d734ace59297f0e51506da0ae462fa966d869bcb7923278b4e74926384ff9ef102a71d74dac0290e670d1123440484aeec7c77ea1388214422c27994239017c1b2473540b662bc30222affca45b054fc1903991bcff310321fa37af7af15f2051d11d8b12a44f20ed4dabc8f4be5c2ed91c35e9ba597db04fa8c1169c1765fca0e7884446c4787cae17ea7970d566ce218de3c76a7e65cdce6eade69e8aab807093057f4489606ba4ef49e70fc78974ac2d7305cabf142f3d0277dd995b13eef79b0fc397b60bce1827bb75e7cecaec8ee33ef0e0fc01600c8d6e4961801639aeb287159f7e7ca0aa151772a66952ba9c91a803c59d15c81e2431faa3274aac8bb2feafb490f46acc508d4d018b39a140f69ae252f798abf2d3671fd6ab08995b4a4ed85be958b7f44b837453b6596b610b7abe2d06842fb4e95142367e80d2dabe6b8c17c27316747328bc93d665dca6280654557bd14caa9ed1c808bf12bc2cc47ef2f4773f7fe596dd6ebde449ca20bd3946e67074229a69ac1f08dee5d9ace9c3d9ab7dfdfd9771fc6c7c2366116ebd7417dec676d1ee48de0a4a498c2eb031c89a82ba8f6916989ccf32c3c029af45a08d0d30199897d05b29a120c299812e7c8f992383992324861d57f27a553cb6b50a39003b567a293f496969bf5a6f4a3a197fd41b3fcabad659b426398942cd8b79fda00d644ec1429e60c3f16d3000c7b751818a548722026deeae5bc9dd295debbf52296adfce9e8715d6649942cc23bf80b38c2dc82f8ed1cfa30a0d9bb1d8c4a4eece32fb7d8e3e792ca8879785151a0e5443b63f81c9e52f842c2dd5633ca97a1d550bdcf7b165cb04cb381984483f0a49e79dbc578ca731d0bdc7e48921ec371f40b28ca92b99f2c6a022c23f23f9ac8eaf9e9cbd7a35fe8546dde4cbe7024ef9cc1b161e56fe8d8394372ea871efbcde6ab292797853a8feb11fb95ec02ec9ffddef8eb58e94b949a33c08fcdc5190ce14b60e82ca9012bd9869f376b6bed0d8582ff1f782e2821fd410a5249ec3bb5ea0efbc01df1c5859c179a7d64d2645f6fa02ca93d88c998f644dcd892d25a6a9a449bcebbc87f4b0861b5af3165bd30638e61236ff2f857160a8ae9cf9309efbc8fe94ff8e6fc7454f1c81ddce47dcc0bb80192352b4e25554250151c21a21104abdbe8507348763beff441739eed1aca278a244e812e5efaca70127a16a3c9c64779b2de4eaf936e5f159f8f38d5197575fc83ecae499b6a0e427dadc7717e166009a4026ba04938a55f00dab1587a4fdf75d89ae6d0c9c21debd128445fc922804097bfe260311fb19aa1d1835c1f0db069982e7a9e2ce09ff8913bf9e3fcc9988de2ffc237acac8f54f95b6e1794513c89e2dad62b5775f588f5fc6d2a48a43b9174332040bc89a27e1512facefba82d77f9a3216a36f28271502bb784cfd5f5715c806f04b46273bab8fc0a8b12f39d4d4da79bdb865598a774e710e44327ca33bc39d70e93d36cd05bbc3d56b997d9f2ec01c46e64af25b6005091d0c04de503d46a046c9a146aa35f0b06a7bd877e84d2cf52d6bf8c353d807c4d962eee67f2d5aafc6071fd62a10120abe17fac0281a0478d53b37eba1cd17e31ef4af12f42f52694982300f2a046fb3af606a9ff257cfe9ab0171f4ddc6e45d2613c16fd3336394c13764b98a2fe8f22f85bdca4967bb7c0cd0711fdaea11f56be8dc79ca079bed6d73957d3fa816ae883613bcb98699b833d55e22167a4c5303e5a5a0e8c3f5f385b269b9297eaca3aa023b91ac1cfe193042fa92a26ccdd96f522d729335b5abdc6aab80eefdf02e85a97b4a0a21d5173ad451294cbeb99288a1d6acccb087a4d9b3218dc3ad84868b3b21d01acd4cfc3a97a3579f2f23db1d955307008d9251999d362bec24d50ce11038fff143d70b5b8523c60fb2f56ea4b5101046e46b219c09f181ab3d0c6edb7cf2c7f901427314f0f0ef6636f7d670c8b241d8ce9d3161e1a7d736e47135c6167e26422d684515dc6d90dde11f2a38423ef2cf9b25c8ce0c97d1f8fbd3f4b7d5a3cf97d6424bd532345c4e4024bd3ed6ceac4c922632d42bb4f187509d63f32fb0181cd061e8ccdc45f2a30702389c798490e9b82a0b4c23dae3bf95e246312eaecdda39d9d4b601fca0b2bda3d26250fd35655d2517f068927965273a9a6d14cfe908f0466befdee963b766bd18a85b9af93dae09688d10cfeabdd3405737bd9ce484b16184772c3a40c9695fb54dba677bd1db8aa64b69ef2069e14493e7e18b9e86cfdbbb85198d73a932a6e972d830a0de56fda439507dc95e27db1c1512774aa91a4042ad17e2c356e94cf3bcdd247b39e5825440f65552b006db2923cca9e22f200fb21e6b7a7534e67d5a79670cd03659cc3501d752613341c413558de1ce4b52d2d3d5243b0e1f1c3a3d14bc6ae6947cd11157040804d2412d27b20d567e0ba88c03c1b60196fccb44a43a75ea0d0b70e465bdbcafaf74df63f5d1f5d958a59da490bd166dd18c60a726d0b56a1c67b04241a7f169fad65144ba0f0150abcec159c1693089ee93dcc37c2d099dc7f68181971aeef873a7e20d7772413d5cd245f3d9a5e56e0807139872bc332ae7df88ff36f4ced695582e986706d686359bf23903f994e5fa239c30fcb3dc85d3f8e28197a50b31c58dd19a8d33286fb03f923323072fe91a337a8d63aeb8b33e35011db017acd3287ac3e222f4534fd097e102eec9f22031b0ff0eae8ebdda1f1eb36cb540160fe985cfa28b36490fd350b5fe78a76758eb8bd26234832075e2435fcae22f60d6206cfe7bad8e5858e17800d3f55cfed826b920ec582674cf1ffa0c2517540b3742b09f0117cfb63cd68b13bf61f10742ab301a859122d862cd2c9bb9a70e58cad3c896686f937b21f653b35275c7b292b044d0e82868467f5d293f6e6ec7370c9ee7721b44dc6f19470726fe79dbe51f2a03bcf462f2194b0caaecc00550ef59edc6aa9acce9c2128263b782c5aba11e01ddba83c94e394d805c635b5ba01d55742554b3f2c80a05ca7257bfda43583e9e5cec06d9d0d55fd36ba42bda87662243a2978ee3427ade52075573018cd0b429fe7276f9fcff19f5df1596d76e253f8d6228821a5da697abcfe70ecc243934b0f75361f607ab8a2ee00dc5a2db003089039fd19d63c569aed4795debd782b262e8b968c5bcdeba373be6a41dfa08ad64da32ef7cb42c13a0f757c13e2d40bd8e9eb209b345bbb422ac8627f20b2d3db75f7f497f338f96ec013c81044e5761f0a562aebe1471cf5c47cacfabaaa93f9d659a90c3919f7fc4a9a9c1fd0435cdcc64815378aefeb182c95883cc6e18032e67067c59b2ccc094fb9d52f571873fbb59960050e2a04bece86a4d23640a0e251ba502ec4e2b3e0851ca98f88bd707a0aa4f2b507c15e4b6d38f2aebaab994ff884cb4ec0b3e7742b9f912bc63db025722787b5bbd7318fa362e83687e33233fc419ec2b65336cc88b10c73944f20ee4b57cc6d01e00505b0197be281a316006deb57ca466fd8e1c67122a8d95289f1bc4ebea5f30c3bfb7bdd322a4a993560e075951375fd901ae2a6b531b35ffb0c0797b3aca5e13d0063ea60e2ad9af26e2ff31b6dab7d7705e5475daa187aed78b2814c460742140e4375f9feeff8f0e67750bce584f0c2aa1627ea49f7cec1fda009dc47479359982a75c0a0e9e62e30e8ed113053cb4995e04997b2d1610fa58915ea4c87af5ef7e86d839a98a42686648e6210220fbc3392815c72d67a2e7d9d84590a4a733c4fe5e539ce418be57eebe16b2d8059d61f61a6f4c9a314d99973557fb2a57f54e3ff24398954d71fb9403ee44cee0e83dc8a90af13a57ba60b9040b575ee7045246e1279439f88a875d9dcfde6d9b132e46cafb43f5353a623b11b0d357e19470f764a53c43922feb3a9995bc8535ae4e577166837090775fdb4d94ee07bc13e780110207ca424fef4cbeb95bfe4da4fb151a8b3f2e864071a964c4746867f4fbc091b62a30860b9d61658f14615736eb244cc923a16fb5462290769d4e9cef84918aa806baf16cfb383397165ddd39ce9e9ea1524133eabe820447c1bd50878a1569db9fcbceca624e9e7695b7cfaafcd2e9ff876f05f6da03848caede660b8bba9dbe898ca05c0a076ee95ff213cad1b3854b51349aebe065a2b1d1f5c9ab080c27a15a9120ef9193eabe60f38505f62d3d473d9236f81d0a359c506eb4530185b8071178b8545df1f831e93d3992282df185d698471522868bee153dfa1678571fa9a800b035ec08d37f62b19849410db87915464260c7678b485e053a90bbac8b364aefc448aeb176231eb7800b17648023a9acaa69c193b9fff902f6f1c09dc10141b931f38a53860f20c57f3b2f2ab8e0c0d858a13ee3d0f73395929528854d9a2a8fac97fdc4384516ed54c114c96dc88f0dcdb2f921be29778a1b61b2c4b6339d6844227a7bf3b8c344f0b1f2eef8a27048ea785c7181a018721400b1c4b604497de4546d954c76186dc12986cbf08aa90bee611ac28c426c2040dd29e8437a2d11c29a1dac00476012338911e0fa245df97a6cdb8ef23d13506a838f19c43fd33b11476782d58135ed7189da165e41fa04890f15409062f391e381adaf33619571ccfcbcd60742e2d430dcab8425ce7dfbd46ef3a72e027a376f1a2fd1e92e78b86d5d82d45a66f9e55a32fa4b0096f5abe089187c8b032b4b9f224042bd0a45a5b6fd3e29c167b5e715cc89549fb40e2e4e96fbced9de4b4ea8e4018c665d17d6076208141a94bc5362583b2bbffc9fc8d79306be6a310c95a9b6be38ce429237b74c332e1ee1bea197917a1a2e4b7abf7abe3eacee0a945b138df1fd6b8942788cad7f116ed1dc5a419b1ce1fc3965ee17a3766ebd58c5ab61058cf6ee1f321c518614646cea26911914851c312f372583f385e79a1dd2ece6455dd30245dc046742a8b25763e6cb7e940432f46d10c5be70d81954067ff3f9db070df81cfc4da0db1d2a733e2770febf22858a766e984ca8b7b607cd749bd3a8ea0147d840bd24ab0022688bf942b651bc0a5651a479392eb507da1a3d9de2015e57b72ac1abcabe2c407ce6894087e565e27bd3ee9eb156d384839c01c5357df067e95fdb896b956906a734d5f6cf767882f2a45ab63e46f984030ad9a51b82e38ef8ccbdba7a0617f5ff499433d168a7d60194c076c3a66c1b52bf9cd0efcdc4cfc92b7f3c7a4dd0f7a12c1cd58a477a072033c156a7fc81ae128b9b3d50cc41acdb56b129ec2edb6d1b81ecd60737217382157ac1ea63e56c28f82c6d3facde849d4bb5cff9e749a88f7afeb464225d6f334c03f70b3da3bc743e7f7c5eaa46937c4e412a498ea1063ce4115d74565faf6f6f81cddac4595a32ab8f9867494e4793d1b5965558e264f7b65085441007adde5634feaebaca9cb0c4fbd33942fcdd7ece91664c54524f00d6dfb9563421527dcd219ff54b2578dede9ab9e2e01b5e5012385de900747caa4eeb772943fefffcf862be39080c2614c4d2d02ade05f30129d01007643e2e5105de0775f8f9bd63a83be110ac8b47d5c1986fad0fb3f7cfef8230b9e6eeceec85df2758631b1fc5bcbb91a3f8de6f7251a31e22ddf822cadd66adaadccd0a8853cda0ea06e2825aa6a8530412d88cf37845bc0443d3de39f7338c5898f82c268f60278d366235768c692946009a93d9f6f21ccd38b52301dab871016fe534b0528cde20e8d30bb8b3143875d84aefd0e2264b39098578871d0ede2cbcb274251ee0ce92ded6edd794089b7f9ad131a1ed69f349ab91b8d82f2cc76d9e3ad216404964d2a8d2e9226c3121730770cf43be4ec216cabd1c637b652c15964bbbd8bb22ef6080eecfac4b99bf87e16f4973299cfcf0d666317b178ab8c56b3ca8d7b0da257ae7f875db68ec2da25722ac7fcc1a1fbcfb3b8b771db8f6b4f9d079265cec3a343fa4a90c8281a3e2068d915fd4ccb1bc8a679e11595bd84f9024404e986316b450c87352f7e818a48083573af94b41571ac81aeef6c9c97436e622143bd2fdd82a54ecf0d3a254528c0218bc322cc72d5ba4e6e737cd1321b55145727772337b5667ac8a60b783c30130dd7961b2e63159cc9ef866219d2e316f5bb54cd399a4a5c3f465b924337f1f9d522087ef76bbe4a605dbf72ca09ef27274c77e765df97eb974f84b39a228f65d5558439cc7259dc4ea0b308c2afb7346236496dfe89a4b4986558d6822fb409ab59dd2d9552cb595a40b83aa7bd1cf0562bc97cf704f25d710799dbea51cd0cab61d3891a1fdbbe46343c593fca944acfff6887eef099f895a13772aca46265b3a87d4792beabcb97827205da5b93aa61275f2f619743caec9327fa981bcc549393c0b58ac2f076f10506378bf963cbe55b0f06c9a71c251d22990aee58e31587857028c107f5e610c1c780b378e78bb2b761aedb9e764cd7bc26b5425197ab833892b8454ab02e91215340f032ce6f35249517289ff62266a30d636c532f065b5540c1c55e746ce4c605f53f3844dfc12c24c4ab941613cb2acf8571219a1ad04ec2f5568f454c089b82186afa26a0b8d5ad36a79d73f1ab9a9ae3980e41ac827ecb5bab47a86841f14134aae92f2debb3813f315d909bf3dcc16707ba9fed3f471ad442108468661fcec68424f7cdaa62cf35a2b355437d42269a551f87866cec04d0e421aff55f7c80ab439ded71b50dd03365fa71167537fc450b83fa442e1c91de25c09d07d51bb1775e95d75e74420fa51c71770ae1c0830a56d648fef688ef9779406ed4b5e965a9a667947f28f241d0a22e8f01df4c18ef4e3cb5304ade9fe45747050250e64f9585d5de7f783b37ba9368f482bd5a4d2d9d1ecf819ebb0be6442a531d7a1c458078e399f37b4f251adb56b7c972355c6a0de6b7cbc740fec8065035d7166acd87390f13d5baf7d6edf176275181f288cb1b24242291d133d8838b69e6c9351f090abf52da73ee16b8a98c808a2afb0c486dd186e245075b1f28d70068aba8b907215901ac0dabcc3417f08aa1fa485941860865dc0d904d39bf2f18fce14030ae958879ce9deaf78b83cb4de9a57efbe56a7aabd834cfcce75123ca9f036f3cef1d56937a84d3bb92744a515252b0f3bdc9d82a03ad639f7e13fc8d6fee9aa8a561c787c391d237f4ad892f1d50e37284ccdf7539afa53c53bf97326d72d71a9b70133029aa169b998c3ea757dd2555180a4beb95825c6f39bfae8c15bcdb4be0a6cca7eea462f562ab23f53ca0a800d440746bdb3b4aeac234eac7acf05288181a72ac40fe2a8e0cdc0ff5282bc0aed6ed99b7f060cf92cfd8beea2ee30b2463bdb8ff236ac3068ca5d7c295ec61417fc6b802f1bcf425bdecd2342a962d2ee7ea00e1850830e5f45667fc150b30f0fa2effe1adac431da05b4eae913636ac6c69fb9666d889ce21a21725e444355b200efb4d9296738840e88ead1798cfe9dd4918ddf02c78dff8bdfc382287fdf8980d88b513224cf2afb3d73f248b99e3e97eb414ee266b3cee0d08a9880b0acb157fca424420319bdfe587734d568cde589bb80bfbd79924e3393ac550271e6fa13d70f8491a276157f5fd11ab6b09e94288304486bcc2b636c79af0d64496b7513f6bb34ae9a656e5d0e44605852076fa4c606e5d9131b9ac6f1fdc4e415d663cca6e76fa6a43483d97f17e4de38104db7974643cc068862c1c56b903cef19fcb16150c0b7c7c1172c58e388c33a1b55c728ab95954c515afba56bff5147acf7f3005942714c1cd3b24ed9f3b4b8418c5d6d3a3442d7cb0870f0a5bca6fb4ce31c87e59f320c34d57aff72e2c7de0eeb3998f4a5841f949909d786932b41b05f2dd4e190ba7284045fadc4c0b057c79d00d30e30aa31dbb02c5867fe2d81612eb64316979adc69f9e7668d12aa8b1cc28e7606aaf8a03f11caa67ebb821cf69bfbeff78c544759ab760ca211defd33f0018adf69eab503634dc2958a0231418fad840600b915ccb318193d0716f1206fec5846ccfbd43f985bf9474846b710b5456b9cc2275bc9bc83375e83c87b31668927523d50bff35ca11d8f5c2d23e5423b3a9a496eaec7145e419425e0b5644046c1a60b363a6e06ebbd668138ad4521b1cf09f591a80ed36ae37671b90330a180fc97be3d579940fbf9368de2178a087ecf9eeebdb81fe6e8e2f0549f7ca790d78914c4cc74731e092033f57d918e74fbb664d7e47760a6e1adfc6e67706465ddffa05dff9435eaef6b218668819274764123b4f1a1f1c16f01df4c102efa17752d0357de1184d5ac0b72150e56394c09a8007178f014905b420c81b1a457ef7cfa268cfb4b16216a8238b95466cb11e02824feaf841e7594a65eaaef75f6de5043db3a8dbba764e98add0dbeab420a93f874c5de458fe73e3b175df6c97052c10641d7a8ad310f4416ed84e837c6088e9685394d9a41d8b7e35fd49de1544c90c6113bb16d8cf6e7b365762122260a6c7ce36ac0e0c914e558423791d7c22cf505eb6debdc82c15eeab882e6214e018be2174ba8a3e1f0fdd87c9883d5e3c65cc8c649dcd268cb41f3488adaddde719ed5fd9ca571126cdd6ec76e9f1e831cddf9bb932d26586f934382e15038286ca068160636beb3e1af45c45b42976385adbc2c216875b1d4c6e743c21c241ab4c592e9b95565d0dcbef265446fa1aab340017c87a70a9aec75a8456e52affccbe4011c71287d69c6252acaa8ef47131f1403ff927ac985c40d724e5685c3f482acda6216710d83351c8671dc4a2e693398af92ecb0c9888b9a664c9d70054287738467f9ce13902ff41f4b8f1270eadd50f3a6f3e255275795531eaf8caf034925caffe36343540848f6e6f03033cbbf9c517e06cba124401b2c5985ea60eb52ad88ed9af17b251ba2ba3c59b0b2dcdaaed59bc3a34527f2df832a0d0d6b08cc2e801d332e445e921bd8de2b285d0e4e3d87b1d638aadaf75e0a265b5e1b1170d80bd73b8ad3342a7a981d43835835a62e1c73f3ec7293eff4e91607bb9a365876981a3c93d9aff0831380c6858c6c45c54249843ac6693d530f445dad5afd0f1b7316efc5262225b79cc44942a88bd00a1d98122b730cbae148b7abbc1a6a8dc454d53ef6ead421709ef84b5e7ddaa33c047b3902d4c78c09f8b91f4244068c3dcad9da3f3411a75380ff86d46b50c15e37da32d5869b9de60b907154ccbd6e667c4ab8ddcd730b23d96d0c841932742ec4351e58e6f878eb3d66c268ea3bc2745dee1e8e905293c647cfba938cfda9636868be0a645249fa1165965e02d8eba91860f28cedfffdf435eb5b9c5eab18956af4ea5c449435d6d2927b8206d9192bc0bc1a75f98ececea21d8087551e8b709279372cdcea4f5ecd29efbb7261040180448e293a7d2e71fa407a1962e5c970c603ac44fb4636b37582957b2b7eaf93408118a40ecf8175c8c3d4497df790407182a45f4ceaefb4df68294eec6f8308f5ad7808de8af5eda19d1ca224b3dda516412d2eb76d14bceaaff94ecc976b7f0a761d712825373a5a634245d2df02eec2950c2bd5c125022e6af75f9ff4448cc8c84c2e3081f7e4c1c3c4fd8439db822ac30ac24e8747269bc72b6c71e2d6c6a3720cc54a1d95636054a8e437227c09fea15a46b214ff445dd91a1c8f6fcf5878b6ed8e624aea8777549a80106e5e9b9428e64c3d5630878c033a0e14b5bc306102f380c1d7eaded4ad20b92660fcdb1fd8547d7fd7663bc1b298941b1b4bc15a6964feee961612cc398ca14a74c30982811db9cafdaac5bb5e22d3fc055738f42853f6007fbd198d0414621540386075ebef65a953cf072321d8c2cb8fd3b9f114ff88bca9d0717179b2733f83fbd6ef6b6f645605e3e20675e4b7eb519eb9bd0a50e1e73b8b93418a1677e4c42c371e720fad30134ee2ec4130fc7157f40817cca05ba1e6e585bd8aacf73c0b0ca4fb0de263199277e772594901418a7bc92ca3b787cdf103910bf7a25a48693501f0c1d3d81652fc7af935ec8aa70772d64249e1d68c1c5ad5705e67e9af387a7ba1faae7a69474dd10ca50c1691bf1dd7ba3cf0335ae341701db62bdf231219296c30a991dc370994a08c9204c00c043ff685dd26dbf4298a005cb2352fbd453abf8303739e2731c1ea0406cfa434550a3b93c486a8563de78e8f02bb2ed5ddb358efd6ed39a7610ab2cd00a4c5f29323a0a6a7783a5f5d1e43f88bc428841b0b46bceee1f60e52c16f2e833b15c48736a62050db111808952fa12572f9a52c7f5c31f77fa8159fa95e1d0a10f9e2aa831d98c8d8d2d97d1aa768694de823e78db257ac05fba35708acea795adff54fdbbd9caa9329601abecd27a679b75c53fde5386ca188d83c02097b82064337e402f58df7c1ba86466fbf23392b3c055fae44d72e5c21acf8e281e087b1952be9500d93c6d0d415c4b1fbea5f31dad8064ab7cda41b8eb8052285e64fbfa6fa12db84230c47aa582905926135766e87b4722d8d78ac1affd2318b5b52d37faeb2ac6cc36095f8de3be2cb7a8dda78e6642efaa0bd3d8866509d622adec0d6c1b628f7ca3ac62cd898a5cf870557847c6ea326b4cf4081e2bff183b45cf2689d174562538e34325b07524fcc8cce4cec5fdd8d74c9605d62f93e8ebdb4be0944583dc1d6e2aeb74b6ae978643ae71342e9e1072d717881d2c1e488e87d8b31a38e3e77c37c5402851573ba66482f175f1327174469b7850428a026d8545e9e150e8c739309bb6867f5a26d637eab865a3d97ed91520aa9f8ea9eb1e80ab7c4d7f5a095dcc3eed11427b4a02b9bbb9d7a708290793421ebb69d827d3cf69bbc755d9b7d90320cdabe81a19479639af5d8926d99e9ecd999333e110f4622ca0cd1d003394dcf4547cddc0fbc157709590ea56f1a39e642d0232cd667535b2ee233025ec1846f80850747034bc1491e5fd7b09c3133c0b3a04393f788a5f63d67bd70f45cf446b07e91da3797b2e485fda1f60344558a7a24c5858bd753b422fd568ef37992782ed90b811e3250e1f61ff01b7ef8020e55d76544c5277befc6662c5605d3a02944d6e81cbec2133a9ef3b9a686ee4e3ab58e8ddb1a082af6d91a2686c59b041ad900ba1a1ba9e867b078c3086a5fe8938bc34bf2719610e9319b2692a9f3e6ada18b014ef59ffe8503ce28775d59ec62347bc9ef646f35c099350391354d454852dcbadf2da9f74ff890847c6ccc0f304061d18d3e9d5d1bcb7bcff2ff297c48cd3c2a9930b3d55aa49856c2696c98559990909d2d966407e2dae527a39074863b15186fba55d0c33fbb46ac4a1e596bc647552447e9fbf93e70fc89a88373d8a19d3c29ce4d980b8580e5bc199b8d1f166f60e88e766c1cdb658b93a82704be97e12532141a409ce9a1767118b77379c57b00b085dc643f84a849cf4dbb0b00442a8be01b1496ea5b6f21c43d2f85ef6265fc58ac2a29247cc8ffb3b333daeb386f42b816ba68fa3373691ded54143ccc8473d279a00574a3732f7ca0217d431907e7ada6237ef2e556b04ef999b41fb5d4acd9145a54152367fc86ee509fbf088dddf2c486fbbce8293f3e248046739346f891cb428328e5a161a3ce49fce92410044922346c480ae00523cbd86c2ebc962ee95c6dc4d36447ad88668e6fba64c41da002e371bcc83d7c9f3df5685cae0581272b923ca29878e19fe6f16cfa72ae1dd24dd88aa3704ddc26e2164214e4b9fdc6a494ca7986df01c2196bb6062d34e4c6b29988c2b68bdfd96840aa8d6998ce2058294614e0331ccd2e8e86e5205a55a69db78afa706de10a4c1766255f9a71effc0a29f7c49fad73067d6486fbcde0c88d15e54f3153ce8eccc76a1cac24ba2f710aa16e1f93a1a235e628940c05b6a4ebc53073b767de18b5aecf118afef486fa033b451f145d2c03ebdf47fd8a6a1a42d05d4c2e28c6edd9c0733fe8bbf0f7d1fd1710cdcfd34eb82f80f0b42e05b5d40ae7fe7823deaf5af004d8cb50d8ebbe9b465882c2fd0267c82edf7255df91653080e94d0da44f1919241ff187219d33e385ea43cb36da7e652b3b5b9a229c4c74eb7f1a3011e2cc2edb93fdb00bf7fafbb28d3b5e4d626b29cbac94ec19a772eb7e27dcc38d6309b5feff03bcce8907f6b9720b02f08a8456954cf7718c04461c44ead0c36679dd414eb34f03f29d10db68507ed1f5d08b3754b4974feddc85dd22968f283fc83ad2b4a7feae9e1522415c7f0f818df363b01c1dc9405c5bbab8257ede9dbf02e10736c14e88b293481620719a27378c3ae015357ece9e706a8b1dc8fbb5a2dfb373f63e84bc5393d42d21eee4b5be99e6fe6fef77746049ea781930ae07f924b745b83862b6da37133aca7b6745c46fb035129352a45a7566ef3a53d5ad265421521fdcde90d29849ba7ca321206aa343902ad0efda87ec812d39f512be76121dcce4cce858ee66c743d37de0007e8a63f3ab0fab3e87a90a03377a8d1f38ee93c2b7ec561594e62b43da5862d51e14106bb162a5b54c119e03cd16b46d90b1567f4d5f22e9f8505bfe26d5affad99ba842cc72254a57465819b3484cefb02ff4324d7418f6d5d50727da163e032f275183a4b2f4950843a35cf916a4810aad2580b0de2328d41f4ff8f224cc15626a226da66ccb21869166bfb00c144bcd5d2113aaea3a6652644648b4299440a4015babfb199cb8b89eb599a956eade5e79e86cf87e4c05dc753c749407ca82189741db092ab2cbea875cf4a60335f3b61809b630e5754513b4eafe32da1e9e02bf6dd322f64155c1c17819fa76cbd196d192a7a81ec50df7ba0bd91681aa065cd0511cd05be43bd1c790a508fb131f91d6b71545170cba29c6c69665e01d6866c24635cfb50c6d24f83368342ef09936e31309ba3ddc3542b40aa63cf3ac272ea028a9bcf50b89f8c9f4fd8fab27ecc296d5c313b8c925ede2ca17576e428323b4476252e4a13752d09bfa48b6c15e3df8a3beb91f9c5237fd9df890e5af4a30bb9322d09f193a0ecf40eac9c3654f5fe88e7fd702bfa8c2bf5afe1ecf212d1fa20e1bd6236d709e286f55bb244f3521ecedc94e4039523f55f49c428442ae8a72cb8a104ee227c161b6e48d38ff676d8b262f5476040e0b025d0853bbc9a88192b927fb1d0d770f74b06b1b76c46dcc9eaa6cbce637aba6a980d1313ea76183061f793fe3df6a2c7e5badffbef0cc2d4a7272a3d781000874000c6dedb13d8e65574b3a766b6553b72b93e3fe81c85220da7cb4627ae062f90db660cdbae98f22c173fdcfeab0214fb35383f197113e96a0d2342fefa2f75e297a92e8c65b971e2338862af1a34b2d1eda3b44559edf38ad0985c68d032c45a50ab146d73e106905515b086a56a2efdd0a59bf7f20010a8a6c08021080101a806cc40a5a5e343aee2824b13e7ed4fb4de0cf1398b32fc5a5fdb22e7730f36fabf13b2fb370c2f839f5d0fb6fd3682a98d458a311083ebe20f8476b3abe63c6f9782b1e3e21e6cfbf16dad7bc61747f79a13313874ceab8b619f97b9110d2d07eefe65d7dfd3c347980634fe855caf2796d865a3258abb0d109eab7029d8453cdba2d0b99585cd8757816da59704f028b688535d5a7105a49b6c4bcb38912965e064b485f8599c31808f6b13a16ac2546a24668a3f1a9fb26b14e0b1a3dcd0250192fbc1dfb33c48631ce125084c4fdc2770dc8ec6208997a1bbc99f14eb2bc3050c5177d3678f37011484d7cb8f8d81f8f14f1b9b5a559c210e858480f9ae76408ac7431e01e31317858d4676f2550ea4a5e59a4da03cb11f68fd7091a1489a2a391616171a6ca733254f8d731ca91c11819e3135b2010f54948a3853b966d55d8c8c993e8ec1ded1efcbcbdadcb0468ce3cb1dac35561ed369d3f6b655a92960c4cf4520d0b7fd5505248d7cf9825c5ea35d991db943bb42a867255341fa9a9381389353c6004df18f1c629bf2de786a0291830c7f1f6bce65e2654f7cdbb3c4dbbdc4e62f7417e53d9e8fb1b8ff0ec4a9804bc2ea029561324292767c2c92ee5d31a3d1273dae232ceefc3168036e35723f0cbacf7ebd0a879f9f7bc0e24c90def80706379272b9384682a8d58b6cf28bd17fdc0a04d9e14b3330275eb50a5a9f1ace136a98358f985d549853045e5c0bdd61cb9b01bff8226a46b98734d51dac928c3806b1ab4bafa245f658c33be6e0ff4103cbe7806dea0f7071ef60a877757fc64bdcf2ab4bde05e9fd9d2145ff576cf0b3dbb4b0c674588216bf5e381f506895967ce837263f94095a537b5972dfc5fb6de8d99ea8b8be00fb04fd83dcb2bda36e420f9d87e43e0c559b95605a6effac66372464ae2680c45c67ccd68996e21f080416ae45bd621de88893d537b4c70223a47f8419ed20cbb6a19a095f2122b5df8306b2e1e665a5300269f399ac20a10dfa85252a3c8b70a47e6c11391cfed49f06425f6f140524cf2f23450d975b62303b4f2b478848c83e879222654fcc5f7cb0a34499e3ced1800722da54aef809a9d7654ee0837c41423145a54d1d40d22719a9f659156e184f406493ff7e48a0e37f31dd968d990a1edccebda1f6b55e6f9e46646b5cdad66de43718de1eba0fe11d43cf38a6bf428ce5e79eb2332d6e50583c7baa349301190d3e53f4495f07a0966c47d800dba1e53c7da241287cc77f5f6cd38aef7f91e751ed918af8802a768c536d19fdb15654c380171303378b6fed33cdf61c1f526f61b0c3e9e0cac4bb88de5fb55108f35d3ae47d9f8914c3d883b7a80afd4c2875a38d166a98d78169c448330b8a07956ba52845c1145a82f19fbad4ac171d17940d5c449e7526bb9f7190928123cd98d8a78a8eefde90be4ff4597ac102432faa1752b334b05b7d52049aecc0acc9934bb486300a23f5aea60a754ec895f1ecbc1710a32e559b79d2754acb000ee648ae5c782425ce3dc26a22d85575a8b02016853c471e05f189507f4ab700a5177ca1d501bbd54eb93e5c9ee92f79f79fc5377edd7694bca346cc67a4c0baaee03354f57b8d57b065a1b8df0131cb7583b1b6aaf6f8ab37839006f328aa6b2e5f8bc8488e7f90307a4917b9a0f78cc8b2b2e68d41363dd29d0f890a84f3bdea1cdc0f47fd620059c90524dffbfe9d1d9c48fedd4aed0c5e0dfb4c81b91fe9f4d0b611d4793dab526423dfab0d530dee889fedda823ec9a7213a7323503da49125cb9d93b0dd4ce641bd815a9009c9cd769f32de500358b1fb01e023b54e09783820bbb25e2009f9bd9f8fa8bddc64cdc90180edbdad11ba15674c9c8097428fc49b59643b68a11c6c0ba00d2a8a3001a9b1e4352b31c639a57698a18a049302bc95f78024dc9b9e8457723735d60fca2f0b5934360236fcf1b17c044efb507a6c3d69b05659f538eb4a97eb34636f6053f6619ecde2aabefe6409051c7567b17cfafff93111130a7f84270d91a2c758085cf88ea878e70ed4ced7f3641c67eb2545f2c76024735a274d3521642f6582ef7003840e7f012350fd514b72fa66f59bf865084857c215644edb9e0e75143b1afe221b345982588049715eb0042126ad8ddc70428928f47ed79579855383c75ab7df7a11e9216e995b1171fc55031110852e893950457e423f3bc861686908a2af5c65edb2e5c5716d27f0dc175e89099c8f3289042e2a0c7b8dad546a5097bbb0ec5a4487a97106e3b1f2cc81f966cdadf47e9fdec40623634911a9ef493476c39b3b15a29312668574853ad0202c24cead2e186e39477695cbce98dbeff3d1086144404927296824b84b6b28886f9e7924bb64b550c174dac2f806f916e78619d0b9bed92928fc9319361dafed6f682a839ea049626a74dd3accb61b028968d5fd162684a6357d5b221360cd8adde9f6ec52b803aa2c9d2f9f2cdd1223ecfeb212bbae78329f07a586fcd016f75490fc943a755ef7aec1fd5dfacdabfd71e92ffb00e823afd7c7c33e9c32f7fe0253978f7b654063bc766a23b5848a6b91d151cb8c7af5d49d2142ea518e2ae2424ca8a90684d97cc6c13ebad034a043fbecfcfe529b5cf75b6139cc4e1f3fe90575c4b8d06c07f4cc465d02f074b610be717b1123fb24245fe30c411018e4838b2eebc7c65663494790e08424abdd84e9752b0e689dc6539b802bd2daaf9bb9a24a6f322add96b80f24e79d499340823cdf69f67faf66ddc92055941b9991377ba0118ea86257132e7f99325715bffa7242ecddfe8051b05bf16f8b21df98c78f25eeb125537534032ab0b0de1b9e4c94064172e37880f05893e818904435d045369fa78cd80c2ca56779b461348d44615ab44dab10bbf7fcbb8da1f3757901a39dc4dba0de65b4a3362ecb07e81623a2d7b05685e197169311433dbee448ba93e80b0d0580e5ed231a4fa78251fa02830a437df8e76c668e7cf8394c3fa838552e82c97be755536da9372165d7afbb2997931d736d5388a732edb5aa54774adb45aad60829ea0b56d897c9060af9e5763fab6f5f231c115fe5ede8a6fefb9669b8a9d6f92235528afe5be1c19592e317cde339bc2fe9f5b6b40f00495002320fadac0855ffdb593c1d459ffdca721f624ef1d47d3f4e3329269480274d1f7aec1c86c9bb65adf4a36b06e6cad4774e7a5c5636cc6e9b1fe5ebad9cb30f5afc8b31ec16dbda5e3808ec9f5a9ad1de5fe8cd9ba29b295ca25a341833b33e1c8745eb44e9fb910c438545777ec875fc7ccd2f79d62f947c82e3f2daac82bbab2ecfa4ed3f39129e1c4a0f91eab6bc8a7303ecf55eb666c0039a9b733fb1e6d7d6cb0a852a26bc160529223f78dcfb388d6a0ef4929321bb8b561c5cfa2cbdb04a23d500056f847f393040495b7270588f2f7477cc90ed91093910b093ea510c4b96891380d539e1c971de0d352475838f22f5e4d10c089edf27838a0ca092c700f88401b62a8e62a9578cab647d1dfd53b031a7602751983f7a852f444b6a50651753072fdebfb67a86e420034492eeb94531e86652e08063233c84ab3121def3794d54189b08c3d55705f0af6d4e664188fc6115e985240238afea4eb1e26b91a0f451427b401dc1cdc816fc7f769ad463900d85563fd950fbe0a51713873fa97673e702084b00bdcb4028ac0a5974259de8657ab5b5e0df66c28c2307896103b142e4024c6416df4e4cb1ad934a348ab4a94932e75d063b71e8557e3bfea407e774c434afbda9a418a5bf39ee37e82e9780a67f94cad916ba6ae63735873528318180a8e7a9d60b366f2a8a05a2b368fd36685d1546d88218e7ca99b585e0aa228eea2aa8a896c77ec2569c9a6678e441f6fc44c4da7b3c8eb805e711adcd0d0ab0bc64cba3134a046752d2911748f5e07ec796837ab7787fb533308826a397686a53411d731d341127bd62d7a469ade421859f4fac7d3a7dc3f79ae824b8280489aaf45b7f1b73aaf82900f6bdf0340b9443f242c389449efd6ffed88eb38de8547afd55f7fd59e8c064126d094fba943369f5477d963c36fcad0eead625393ad7b2f903e7e0d9e1bf43618bfae9d5ee9743c7aa7480120cd134ab8ded4125373a76a9348748e2b9ee43ffa54548ddd175aceaae045fd32b5e94c68a131c41fbaba16667d2fd7b7feff6aa5596fe79dc5ce615f045060e625b1c285173dc9a73b99f185d4f2d279723b8ca243b95be151197da9b8597377ad361bfb0a0d410919a6dd4a3286a25a8eefa296a93fe629d8eb688bae4794f99136a78d698a8df0933dfcb5d0324b6431d377597cf0d1e24d44be50da7b00153201b21d885449cdcef7e26995d4a94227a69e1eb7e1405d79d18c4e94b2c9ac9e2b23c7a94d58f3e81a6e4b314ceffd6f162e50d1e23b846049a3a0d3bafaea480a85ce017355cba563cdd96c99183affdfae9dfde777b66bf583c41a6d3a7ab41380ebfbd63ea9181f0c65f0cfa68dae9395a7bc11cfbd5f94f1799a501554c5a8a3226712753f9f5825a50620fd1c5f5723bb34c2191bccd6eacdb2c3a0368d6f8d0c5743d25f948b9a80c915dd3edcdff42ed57d2bf4f8aa477aa7327260ba52be9d409abb573f56be311b55d684f637590e52433bd3280664215d502120e5fbc3f5763f1bd5459233776a44ec8e0348510330d8f20a69fd03962fc18422034507b0e4c3d272985b72aa94f561c4841526c15e268b1c6b8d4be47ed3ed765da7b6843605b25b1ff3741a6146f6958698a46c0f61c10c205145ce2cf79480199c94d92feeadce8a9b8c34b8c87c6f807e81d3bd002fa4945d012c1b1c2e5dc9d45f52f64b139bb436339ae7a1c4e314142e0771c28e27bd6867a53cc222848e0d292c2e70d9bd5cb1d3f9624844fbe49fe02da09161a4bff2ab56d8f1c6c3e71f8d73e706a7636b9a0b88826fa8ca7b121c5e7fdca80e3fb7c1bf48dcc872655cc5c6f4176d3559e687b1244836a2d44eb70aeb1b54adbd771984ee7ff0b415b98d5d8957032751bae77226196c48068c4287703c0beb0c20adfb11462c82f9d400bcb9317564292ea9afddc9d177b9f8386dc2d2f9c69b02f3f1fa2e7531c6c60b03447f5b98447d049902ee5b53ce9a9f54830a216ddf576fd2e17b5db6132c64f30880468fca4877015f0a28ff55753b1c535c8170335445a27cf6d07cb3c939d3c0c3d679245dad437ffcfe59853eeed91fb83ee49a4f5649563ded657a3664d269e902951e38e9c417c40fd6720c7afa30007e00710d9f3a982ca771cf6fecd32d7596b86158c363becca480d3b80a8c0b7c24537bb607a2ce0fd4c1883f4da984b8d125fc814fd6561080a5b202ca652c4e2540e8a8d48cba462d61c5039c6865d5233e36de07f4c615b3483be1542df8ff8ff65f86d61a20215b138c2b2b140568b66f216cdbd5a9a0e3592e94faba56e4f168740aecc849ebf695bfb49f234bd649ddd63afdac719649d09dce8a0f647e39906217fae1dec1acc9585f76ef418a4da92509e1aa3cc7a0d9dcf8415f0f12ea3b248132168dd3128eee5692b7d2223d6f45cb809fda742309c1a19595340e46e4b677d561018260edff6ffef213acfe571496f5a3c6e67a350878e0a453a9b90feddc9cb50eb919028100fcf9d7776edabfbaf25accccb4bdfd10955bc9dfe43e1076a980aa40af6cca67b53a85e2c343e2e1992415b73e62ce5f216cb6d4cf77200d6cc4ff87e99236dcd4c7a0ec95c92431e005e6ab49304298176cf475524f34a6eb5df593cf841b844739ec60e7c3ffc2b6f581c473b06251131d82cf1e6e26b88e2df00cb4e5e0eaf2f17700b58c674cac2ab08f7342bda833b219a781c072dbda63369206ae069bd281f1d886807ed18fe386a9fde17b18774025f3c6cc9f97b7906c2a8620581e94b79957cabaab202f045905c60f8a1c78dbb74ea34ed95ae7a1f35f67f30c2caba2134f4bd32cb4bf81e2efb72e9fdb8e57a940be50df13d04f39eeab82a8f43461918f71c8d175b2a7fe098f39ad15b26b4a04aa863ce508e5796843465b81477cc56184a9905bb325b412b359510ba169ccc0e46dc4567734de9dbaa1deda791b90bd5adea2c7c7d4ff42024430778adc3eec32115992595793c6cca2774e42e714418a6d84cc868489db3d3c1d1c934cf9c2bcc43e0b1a7e85452bac1041531e5d9206f514609b98ac3c7d410cdf717128bd39d0ece6f4d377d6eace3f892d6f973659efd1183a3a9ecbdea46a6af922a53f1220d4347c8268a784a00f1933af4f9a0dc251b3dbb3758e77d3914a51ccebfd593b07f4140bb1e08c32ad367c193f5322699b121557c2b732e84a9caf5c77bdffb3c6366238c5d5dfe6f060ca8a3699086e1f6494b74b02f49caaeaa880029005a0552542b667320a05d90f37e3cd4d1d221cf2067b045b7255fa50ba776df1b0fffeaa0a046d09a8f13520ea7e1884c5fcc1d1c82817501649a30a6df415bf403f528d7cf5b127db1805fc2549947a3e8cca9890b0fdf25378d7d136eb44f0e2aa046cd56ffc7026f08d9c630f90b750c7e56b22b971e06911946620e613d4140249e6a2fb2c0dcfdfa0c96ee8955af10f1d19a06130103cb24871a5ea018373992df2b1246e544dcb5202fb9c580fd626f79781fd7e0b4d7492aefdd5508287a0b109fb376ded9dd58ffa47a18b066069d4084024e0b0995cb6b9177ab2467af0ce72ed0f9f1f591536a17f9a93e2e4a25751605b2b76be006d6e1cf48f0e39bca6d361f7f98d52776737a02cc7ca572683c953196585168037ad5458b62e41d8540c2987cecfbd2154afcefb36afee3dbc495bb451a9b0efb15ec2f172eca85463161d9fd4ac57098d2f3830a5f2ebb0daa012a443463fa44f5905b30b26fa9149f8d860fdbd80203c856845338e72a7c1ca48ce784e83bfc3474b20d42416ddf9be1c89c76bdf1f9cc39966795ed882a8f3a274a3426b0ec6a15b3d63a8cbb4aa27ba80548a56b0a3e924d9a54974f7a4fb7d00746d03fb458829569029f39e4946b8c627edf9e41fa4cffe11969212b4a0f35990a19be5c07356ed8afd41080de013502700a238124f0570b0d371f861f6af8d093f562734b68db1b2997f0b3e0c2ce1aec980b2a03523a73f8a065dffb8dd17515f0e8ac4d271a627f6cc649415650b309d89757dd63448d97424b0af68be878b6846efcad7779f10a6ea484ecd9ec3002895f0d96d65a68c81b7699af28b66cbaa528a102dd7bf423a3a4174dce46af6fa5e98aef0105e244dffea6d8f2f1e10bcd69cab32ff7b455479dac07dd402ad69f934c549722c48980aca5582322ae36befe26440926290affef1748b5eaef807e847ed68623a4407e8380efc4c706d0fe0d103803efd7a0ef719774d650e9fdf7dd9b71beb45427d2d6f150aff61d935bddc60b38d9af1530f7a0472ee220336e96da68b29687427f09a94fc47f9d7e078eb92a3df59870e0e02f32f53776a5d29c74bfabf82fd46e713fa7b4c3544668265a4db942102b2f127eaadb57af5981ed04f2c28e7d922f3b3998dc7867199d6e4cb32f4a22b5824f9c9c01067afb3277dbd0da0c7a4f43b1eec362d6ed77ac014cde31f06708ee9bd21b709e874705e345955a125aa86e2f74d5311cba9a78219ce7aae5e392975e5519971baecd602024bcaabf4ef37973d488486e0fe5ebc30c333636c5ca131faacd7bbeb465c49094e485c672608eaf903138b8736a4f4bff230ede9176c349bbeb932f27cd3e0a0d9f0a8d5157912db833b0312d4a1257c4bbd9b31c3cb80ad355cd2a4f62834aa552e5e047fdc23c878309c9c80f626789e998095931e9e6512047a45ab4d730b75a68c22053ed0d9a2a5edd4a9caa012b03f1e992b42dbf8964036401b56ebbe680b35997231548a8632d6f4702fffb3dedb575ff0aff2ecde771a8c529b67a9decf40ee476a90a3a2f3cee61f827344ae02f3547b1e696f1128e58a8c1fd7e077e433c0a35aa7216bee91a9277677c8c2bebb3cf42bed2fc45e0ce406437d209c01c3f1fc27b61acde25cfd7b40f1b2722e1a428d05913f5c4ae9bab05de704d060715a5e8bb298a68a2231d1b08702cd7a52420205dbab9daffb0505584a6a9f449d306475bf68368ab4cee06597c703a89f4ff4dafd8317403e7d781d586a5916eb6f814ddb0375ced7d51ef4650ab2c48108ddca1f01b01800de41a5297426a54bfe2415b0a9896ccc4f3b973b45e0b1a4fa59f430e8e67b17d03368690397a457dd06be64d0279ef4751923332827abf32e7582697d655bcd3944403541d78bd5e5487623004327b3a8d984b6b89e18f2ddbac928e87c55bbea7c797a9cbc681ae257b4e58658935fb1ff87deebc755884b420fc77949c523c59f505740290e17501d871b4331e5a28e8c00d875302a306e819e3c8b915cfac72d5ff52ef5162f5953355792959dd5d4be46e54f9c38cfe9fdcb71fad9b0a02eef0ddb5329134d313a087a4aa49e36ebfdedf2eec6a723d565ba092b87d4528a6f2ccb2cea6b0f3f7fafede9183b24ddfc42467e7cdd094a2b1299c81a6fe8b7f13a5574fa1b2090c559724ad90916e0a079716f0c720ae2a22184db917945a4192a2f9765ad12132c8822fb4173120bdf6d91baf67864c8b3805fb87b92832251b45f0452139a367b7bcd5f2cc071836d2fe2c2f982d71632e4bed7682611f7e91c58ba111ba9e36dbcc296580b8ced40a7670b0759492e765edbe1f33ddc004a413440fb301096e55983fbc58ab1b420e5023303d7aab8e6fab1206044626f38b60493fa0068eba6cb974621d3152416a07637eecef4ca3e1895e2e5f79b66fd353db4babeddba2320f9eeb529148b15b6849c24313b17beff15bbc7cdebfb9dd980edd6a246df52bbb9749065f4d81e7af3daaa209914bbabc5bd40dbdb753680140ee05175230b74cb8b6c30ef4862686d18a332b41255a29eb37e9eea2e5cecc8f29cf0605c55b0b0b9553e231089400c0adf629052c9856ced87b96cf06b7aab580554e5c156dd81d564d661e1a803ca185f8b8ee7364653f827e86c2734ce9e65912b7239be93363980ad87190a4c989584f3df6940a9d1b6f9bdc4f75cfbc21566714b2e4d51e61aafaaa2f9a4494db78d347b6e93ac0e03e9a92796b3bb25b0ee85eec95784b175eed0bc6d5b502f11d3b7cfdd78a7dcd3959804a8953ce623842988c1b7abe04df5bc4d6ee90ba24ef4d85e321770f1abb8f39729d881b875bbf2731e899349b7796878c7d727855261121e33293a5e5fdbcc57134b8efb2fe0eb31ec34702913eeaa377cc1fb135a9495a0a1667a88de6086fee22fe573fb4a1e11d66be6168709333cc516326512e2a515b6ca9b0ef7d31096eb490096b32e57ddbd73fa334eb539b8f1a5f45fffe2d7c85c124588b8e645058364df45013c6cad1e729434f90f1b37507ce459f33ef77fe4644279f2cb398945c286fb4fa2bc1b5e44d5cd69faa98f6f9b9f7ed7e8f6982922b1b332a2e26d6ea9c14b8a4c403e449ca832dea4406f21399e5d1d4c45feae6ed318a7f40667b3d96822e7a6efdeb88c04e80347e73aa3cc3c361b455f1b5b334c32a3d32528ef6ca28b5ac68338627065c0aca53af1ee66880252b822d59f8d099c122906e390d7821caf20d0375082e83d548bad0f6b4e424c576941bb50234ac06bd2afc2f4fb9354ca501e273002582293af82559821a65257604ac10a2d2cce3e39e9028a29cb2452cfcc1baf2868c3d32ca3919232caedfd4a3c13309751a6b4189cfabf442cc938064b6beb754dc11198ed29e5c5ad6625e0e0b8c37b37a2781dd45c936698d51f36029f93fc3fb88d8792f998c0cac930043db8d262e6347a15d94dd128fc2b2e50c79e7fd039f8cec35dcf3397ee44c9e21dff66b4daeedfb4e6b4a79b723b2e2c2cd721587b99a7d41274691be7c8b9f8144eeccb453954ca11f7cd70628e52f9cc7eb2ac6cbf51a338b4f3c868091df803c81ff81a9447c9ab0f7d4317ea1f9138dcf0852efe907cbd28516dfb6546f25324053c83b0d0ab9b1b4ee181c4a7882775fc708c8171f3854c4ff0c76e72b0b818bd232f3aeb8825946d793552b3a79029b471cbdbfdc7fbd764cbc59cccaf67ee5cbde869e6f44701bd62c4c604019b9c4a28426137eb55c857ef92304d3d24134ada35ebdda7512067f6bd16d7c1d1ea6e0ed8e27cc395c5131c06bbe8d5a94169eb7e80b7779beaeb1d552e545954107e2decf315840c30e97fe3ad177f487c8a04a355e5c1f9efd0e5974572c222a437b23e62339d2a38b58c7fd0c0892ca2c5bb198e798fce395ffb5911cfaffe8a55f23f7fc906596089081850c362e64bb6f69ce3296801bd32db9cd1edc6f0bdc03796f28e9e6ae92afc4cd390f0b2c94c34e3f76b28c97c1cbab9b16bb1c4d680a840ad05c3f40a2957ad8fa1d49c1940074ea55eeda292cadaf05edfd22317c9d48ea26b708ef6db48c9d8ed968ac138e9ef7373056b7f98505f27de10c360a084c63c82ac0f3bbc7a047f8ddd16dd063953158369f8ed48dc878cd1069fc2f7d001fc17f956db2000718769d7eac07328a2e24793fbb8dbda5f8b515928885ca65e72c544f54d07b3a6489f22202332396e37a02e15796e6e6aa7c9e9df6b8cc2a34194b6cd734e59cb608498e9b41bf5d23d63b9d6d15a412ccaccee1cc74d9a0e7e164757dfca4a642b75f44a1d88758db6a1b28afbdbbe28bc3a89f21c08e2a0c941b5cce308421f0bc6a62455120c4c0af0238ac5998c02fea7f42bfa239d01e39007f2d53e1ae7e48789f883098c5a0f5db3b39a51e109312f35780f526f532ecd428412127d2f7f5c7a9ca0df0635e557da30e9d86f1678781bb95d089c847393fe51bf3fbdb4121786cf46ed1d2f976a446ae230842aed51786812e6a4e43d90057abe8843f8c30f811065c6e49ef26e840c463b560b3b892204fa2cad1f9fd3c6c7a25dd4db956c2f5bed0d5a2b3d08225174a108af9415e70c61862f3b51596439a98087a66e4352cd7d70b4a8b9f98985de6fabf8cdeef8ec5a2e790ba3007bc716b72bd21b8962ca9d445abf4ab1272f3194aa397e0e57e790e44cd6b16cdeb987b948532924727fd1eb25a3cec752a175c599c1e60af1aba977c25118bcf67d242b682a646d03e50fd2ebe5ea61a627603432833cafe52d6f07e1a6f45e48216bd057c25d57661af31e3dc27a018f156a273b45aca344c665ca3660b46a281a37f29dd34cf09ade186e3bcee512393adec99e1a6eb27fd4eef5a561b3a6bb2b7d6b96fd48c35aae4301f65a03548fc33d92a5ff035c618028852604a91fd31c3bf5953942cdf511c05649c84b7aca3aac5e1bf74768f926834b415eff60d5c12307b81e4ad49c22b4a9c6f0c6164504121074a1dd20a202fb877762c313f1484bb39ef5c134e705477198a5d2a42548836c9f6585fe629b287a4125b668c91d3571aa689ac66c40c20b5a5518192a0b1a458baab89c5ae738f9592b22770b647042549b23080aec0ff3f08ccb2cd85eabb18c305f06ed0fd29bdb0c7933bbe0947e709e056076126f9980ca51d6e172102d66b8fad996cbac4b70bcae218abbcbe9336e48c5c0154a6e0dcf3452e28c5018ad24ba6110614b851d24ff609673b176a62647e168be9db8c688672c2e3494e4e0553cf7d9c4ede27181a5e670264855a459b20d0f62e4be811ca87cb8681e58a21f892174f1e3b8d3fc51377cac1a6995ee6c86f5286bdf28e8266181261b13680c82a24b6c7b5047d9306ef4606dda5a1b2b8d016b585aaff23985c5d18cd9a9e03bef061c4906b0a044ac990f090bd037e86559307bf0d3b5be515b6f0b8aa4f4e582a9de1fe040f35d542c8afc5823b1ef4ecc612fa3c25e1226064fd4e2b9f88475dc3fa7058ac737ca85dc17808b649a2aefcc60c0b00bb7fe6f0794fd285f8afd029d8f0e23ea5fb9b34afc4bf5957d2b36c0b5d6ddfe2f17188e9c2bdb3d183c38002e1d18e3bd4723fa6c70be85bd26e3eb7131da6b1ec2ff3954b019f1dde9cca69d50d1d9b7469f210b1f0f9740756f426a194cdb0f7a3339470e539eda0443c490f6071615dde096f6b3ff573e3ca7861408b5dea735a75d13ca8bd5852249668960cfaff101c575071615a1f27942c93e261f0eec5ad3fa7c4e925999292be2222b1da928afda55cf34aeee8b641f8a1144a5ccc5da6c8aa23c7c937530965fdff1da838d11f7d484384b544ad53ec54ba544be0eeb27bd5987dbbde0137e10b907f7aa987f331f736638770cb509055f5bc60dc618e66bc15771d88efff8c9c6037c26e4216aeff0d2b341f48c6ec00c820ff0c8e69b83b81d59648f2f043f0b48a70e70535a1446e3c7c9f5caaccd3f98fe95ea65ec8ece3d9e7b8e836fbb1e7a44bc8d3133a1550287515f97bcaec4538056066d8a1533e00db804357404bd926fe7f193c7b41b8fd0a944c1683383aec9dd0476cc62a2c7010965da2cc016a8c44df0ab4741a3c1a52f8dd45b30795a531f02be86b851e9cfff65ee5495fde3aeae4d82a24a375eacd7a71cbac5299b552179cf89cc48d325a5418a7f8964014ffe2aaa2234f12c3e10614fc5fa4b9da994c05ca75c78ef29b3147a32fa4da90b7225702c793ccd4d68daf326b85e60bc28557109b400718933bdd62081418db176c5bd759040b7096682f592bb94b889b70d15a051a80c41800329bfb8b41c59d3c4f02494b60cf77584f2899871d6dccdfcd60fe0839d6a5d604b41358b6ec2f6a71501937d3eb250e70e8c19483a64abfc2a2624dbb63e2c81586417cd0487452c2ff059238a6eaa451ec44cdc2180c7a03f07ec146c19dbccc5e1e68f2ff5402f54630a3c5be17a2c75bc2039b301b3defc3efc291abfe98d6db6cb1227583a0f7abaa903543d4c9de3fb040b6f064a71f81cdbca5e389b4da240c135065138887007fea831b91ee6299cebfc03645181c726c72153a6bbc9ba9a6f8c7c5850475b6aa0a9f1eea1288a64977ae17646cf8c109851116d98e3f4f7e9ed2f3f5d8ef319eb333ccef576c09dcbd0f89c648166f17bca0aca799feae2a9689da6f5a956637d5036b8522a9b9923a7ad360539b00aa79ce1f1d237325b348bbede44258bb2f8b1b7119c174133c9620645e89c8fdc8e5d5a6a88fb4f5c3a8b5f050929071ba99de3634b97fc535732b655badd7f5f0ba5ed1adee9665145256f20d3a92f31a87f9bfe96c0a09307c438f7f52c7a10445022bf1068082ba37f6636beca13e57731851b118a9fd662c5e0a5a41633a68464a95ba241b97cef5d6aabeacba3d5e4e18d1fda18ef1b1bc23dc4226a3b86d32c84ca56a883012b6ac8196180bbccd3a347a55b9fc6bded44686ef8ac416bbd03b1b9b154f70212e5977f60d804f527497928abd372d220beccddb0108a7ae7ff7813eee21e4fef72c15171e6d73d13b4541d7a6838ab9394c5ac8412c35e7db7e81663b7a3384153ddb2ec4a67558180faf5691a02cbc15c03968f85fc4fff191537c6d5f77e8ce36e013d75322685e845fba008dfb2dd8771175bf0f9964106c9b7c04288a820c134a68a7796924e6aba6e6751864cc2a1943cc1f0925b79bcfd2c2cf76760e0072cfb2107e7d3ea41c349de9381c3c263665674674188c4d5bb7d4efdb8892d986564ce342edd93f18c28837e893a1f80c5bd0ee0a9e42d2005bf018b3448eadcc5364d94c6b7ae4e1f609029b5e191e9003186103f2df0603f6ba4da24702fef16080d24cd1a59ac5fda327b93f5c7e8cead87770e562da363adcba4feb630c51a839ff8d2539481e7f4f076afa835c69fc90d01886ecf70c70a46b4f1301c75feb4f6e5e2f126acf82c9f12e806af04e25290962db5c43899a77d0b8d6a7193bd3021297c47c067bf744bf6a1bd9e807e86f5b871499149ce57a72683cb710067fcdd75889d46bad7ec5463ccd75e45ae85fe6d4217da3289d0d9331ce1c9926f7f7ba335609c11d5b559105e79d9cf461b3cd2583440e37ae934561a8c2a7ee40bd630a064120a6c4648a11edea0d0054a8521363f51979bed301492bf4f458e81729bbd53102c3cafb6cb13837c8ccc0006c1c297f1cdcf38a535cc84f767cd99870db4535eda39df6c9c92352aa70c3da0355c6db5215250884cf1bc144058e699eeeb95eaeae2775cfefe23fe35e2716774e5af0011b31ed56b2aaff1e6ccdce673f124445bc8dfb04439e157097e1f3f97bc26aff6bb015418cd9476ace0c832d4a18e3dc35e293cdef1bfde508be814db448836a0950b23b77bd9413e0c5114813436668a133cad7086f93593612a81ab62adbe7d4f07ff78b4cd7f88f71edb685e25d33c800012f68fae51bad93a5cb412949a6283b969dad2647ec8c729a6ffae5b14034a28936b09c6e8c8180455c465adb4535a3e1165e9a3429cfa7b406dd86016801b5a0b1027562d242cde2fc14bfb440d20d99d573fed25c00b86fdf767d5d7753b4e05b4a05acec2be60f97c998b3a6aea27e6be940eae22da331a82243c1538f7d264d6dd1962b0c499c9bf9d2c4a2aec9b4dd7cccee9dc91c9044e0ffbc5c12bf699ed2d28f80b0cfef6d82bcb0fe543b61ac72bad344dbc023a86243219114f25d72cad332ac3500c32e33a64655b78d5173a4afb8bbe06b01f420f3fee36ed0095457d9de9de0d671650c04966232ec44a734782262c0a196d90c56e9b61961a0c37de2f7300773ebc701706c069efddb84b3ae8937e0a78ca3360b35646415fe38fa64308c0b8ae17e9bb5c03b12d72527efd2f2ca3602793c3901115aa38ee7947df0d3bfe474f893ee830322134be25b7d85c763c504f75849d13689e34781256836f60a2f5eb63da12f558b65dac6539610549743460c354b90ac2f2efec8b4c6ef0a07caa9e1240b402d46cbcfcc5e5394aee696de938c33fdb4b84370460abf921eacb3ee7f2d05cce6f360a19ff80b6681b4c583c7b8d13c99c8c191214607323f6ec9af489bcbcc196d5be57c4ca58071c54e4e6f6ad906cd3deec8e789e0e1af588c3170c5bde50c21565c538c093c0d98c6f5084790fe65f82539cb8ec898a819e14f986c0ad5dc6c7ec1087dcc6e939d4b9cff8407f656f59e7fc72e159f29ef09209b9de142fbd359c7f6882bb6b105fc24909defd74ea2102881b237ad6ea29d885cdba8a20a769869ac985aa7598b4bd1e98b62ba1f18115c091b9ddefac8259d295f9faf5350f7d3f5276f80e43ef803d2b35c167f10fe37e4e4ae254e3bb23985a96fb74953353849100b8eb7f230eadbc98dc9f8132de4da07c7d5eb835edc06b3c2c315246e79f486bcc02a5b06af8332755c244fb8f005f64743c4d56f43f291808c6620592d5929b83f92650f103646d76428a5214f5f9c635be70e881951ce3dce230ebfb755038a920cf13615cb5e53e165f82a0d28bf366b42d7012986de1793feef26eb1fdb60702a32766aae9696cba13e025caa3e740e11c4572c3f7b0a90c3c82894e31c0430ed26faf752320b993c40e92c567acb44e62318031bd1f242d96614680af9f88e3a7c64512afa9b4d2df1c17c519892a80f3d321d2d1f8882f5f53841583af3e07d4a970e2b2b42d2c6d353c0721d7dcbebf98e865319bdf173de289aff3054a68fc4be5865e8cba9568a7e009dd3d80071086476ed8bfd1badfe4c24382c32bfebb1a301aeddb70954de1d4c9dbd1bdab8228250fc30840d600809af90686cae00ee76e7d6647321c970aa877eb85d14b26224d945e355188460704c85e2c992272ddc1098d3f12132419dc0a6f9fc17917233a2eafb073a730f1dcd4242bed3564af01d88ca17aa08f49fcc0ce4cfc86ba337c90e731307710b0325abddc7bb1cc7e670d83bb15e0f7baff02a36a5b40b69b2f8cd9c7b32b5647f15b5dc683aa29b14b83d12d1568ba39d2497ff19b15ac464ca977dce2945b9eb416f41749ef1dea511d003f479a3f88d080ea09f29d4291ab387e9018e8d7ab953719853edc8c2b4daed6083d769f6f07c7d46e82c7f53bfacc8b1cc0137b6fe9939f2f7e84a4775ab7ac39258e0a0daf9170d74e6c3f3c9c90e56a4d8033ce2c4f7335f88993ca0a24c8d42feecb35c7b5b1b4687761d7171a3deda275c00b32f9e6fb3eba5acd553afb313a9da58e4de220034321b3cc1f518352c305c11c2ebf1f96f986c462eb5e027952d6a832de4f357653bfe535f032a59d0bbfcea2969909c99ad35525624d3fcc28e152a8ce391bf2c6c6818ea36adf43b35b165e5683c5bf50013429ae5a2e7c5456e5f10c4413332b008a2cd8e677f813681d754cd5e3ec13dbb03aa3088b61041e41764ba3e7600b1f8b5ce9ed9166686de05f5c7928fdf849bd0a9b72aa0f46302249a5ab939416db0af414e47f523f6f7613b63547ef132ba67c456685cf6a98c90dca0cdc9e68dc328c4aa8ec3e2ba7104290e06b2a92ef53e30cb24afc5f22ebac8273fd0f192bc13f6b50a980e7abe55e5f935ca43d4863944189866714e9c1a82c8bd586360383df92d672efb7cf402df9d72d10fdadcebbbbe4ea0f6ec8b72743adcb5fb14c31369f3210dfc8d6b4c5e19e63e56b37a5a8b5750a0f7f16c2818ff0cbbbf9e92581bf655b0f3df8276a4a7903596f1ae8826307fb7978f9aec6bb298bab4f8ede3cac45349f70544c7aee8ee49f928b7a7f597776aaf68b254247e410b429e7d936bd35ec65089ccc2aa86c56ad2273ebbfcecbd752d913dd65f62a5b947d7bf63db3bcf608053569fe392dcecdcaaa10031e09ed45e5769d6f8c3b92e128e570238d8a3c641621c0b331156bc7e85ee4dfe4ca05da896c5e557375130d814f647c421dd6b794963c0e49309cd13ab6ea0abf7d2baaeec32f733bd39988a6a5298dc31c31bfa0e78af17a87cda158dd2b78e7bb9ff12b91c2c9d67c555098c1b71c79651116bc2d1312704d885402f94b78453a1d97e82f1ad413b940be527c51bcb81d108bf94c3a9ee5c04b19a38e933a4f6fbad24a4e0690ff184ef095f18e0c3ecf87fa34097b37493fb8794bb07036406159be797350dd8373fdcca70f39be4d8bec3aaa1b9b58be42f80e0fb8a82fbf1ee8193bdb15e21e243b0de385fb22048a916a15d04554eb214b81f54bc04ac6e290899718687d6af490756bd3bb55cc6d0e530068d54fdde6243a6170026c33daa82bc736a7c77259ef557656da3a865c5de70b0c65639801719ff63c18547f64c93ce4c58243186f52dfff9556088e8f3299f048f0ed69bee21fda64aca7d92b344c1a7f921a4e90a31747bc110165bdfdc0d9eb0266470cd3614b5d003d9f45a1409327629548bf7dbc556696857112a445709731d17797932d337dd9cad8ec42525dee7b35001c80184d3d03949a99816571a809877627bc3dbc341d86d0ac9c659ac676b5428ed5850ecdaebe140fa8cc4760bf15d886aad4676ee336acd467289a26909c14826a4c0cd07886e8bba864c10b8e551038bd22d62547377320790a55bcddfc15eec7756d1faf95edeff7d651c152e9eda95c7a4bf3a511e8c97556f26556977ac193cb3a072591b94a06757905c2a6ae0d9cc817312b01e27c275eb309a99cf45dc748678ad52b872b05a465e82d98a913cec8506781ad3c74235219500a9a3b8bc5f4ee3a1e4070d0a833186dcba224116011573d956451f63eaccf12e3c6a4651c21fba6dfecd830aeb25ef97649ea884b0f8a8ccbcca14473e6717c659967544b1aa2108c16ef9c7f0d90517bfdd36432c8fcaccb806393ce1eeb5e5bb558911da71be13cfb83df90b949f6a64d57656816f9047407759dba413d0ca941e20aeb3e131f59a81b835a32cd8233f4c66e5fc4fc8a79ad8ce8d378ad52e342e91297ad599b80b29901d996aad6efef50c9854871a2d160193f4849efaffc8e8750395f7b12ddc613a6697b74e8d72f53d8101da5cd4a54f36d4d924c05704a9da68745745772018e9ed8bd476b930d0f9f92c7dc3abfce9e802a47b9ddafef0684611bc7e1557ad82b34ea3f627f4b8941c4b457616add2d40368f1be7bf28d03a18b583b6f07fef42891776b11712b99d6c89429152e57fb96f17ed56ac10ef48c6fca8922eb191db4c23f44e1ca63906a4d2786a5b4957007ba4c75ce00dd72d1f798e654bb936ea0ec54d2b5acdc95d8a3f8c55f516ecb1496faa99158f025ccd5a3f65e976b5799f3dd22d84a1b46829b0882d154ed55931b8e48a82715503c1a9f97b4f3482ac9959372ae55b1e09739b7c9336ef5fbfcb68bf31c90fb4fce181fa2ede8cd3e83357923a702086dc2a1352eb88d3935b1269f21f045cb3c9f9c6fc6e746ea9989869eb9fdd5067bf72af4ba291ca235c28b645c1dfd22a709bc4499f047d9c46b54ce020aa3a9ecb0b54ad95dba6e2dabcc653b63fe19c77fa368f9e9207588b33b85f9d3285697fd218c3e89295f685ccb6120d600de157504424b108c5c1f799d57194040f08fe83ce748b3d9d0b646b8b1fb9a353ab9548b2cd34bca40309ae93be2a051d3dff8ee4e6673fba5646eb5f63e6b32556d3e9d8036bb55c5996de9c0852e93dfe79181c91717f44291b99387ed41569b23e8e09789fe3e4b36df18a5e9518a42d9c5a77d0973299abeceba15f281e70cd5061c162345ed134b68340c37a60d719115d2d0197eb90fe09170f1b4fdb36e53581b1ddeca62c47aed61f90c547ac152854fe2c76f746d48e5be18148038c8952026d1dd6469f135bc54ff323624696106f3235480ee68088d82ba41df978c5f47bf2f497b72d77de5a8c531c6c7a023b6d5f3392f1c962ef5de45d17ae5521f062105b55dbdae4a4679a2c29fc0825f8696f79ea9d8ef454ff10c83200696bc7a3bc235b29e0c97db473518469109d3cbcd0dd188775dce184168d911fceb6fb436f44da25673fe8f8a510760ba8af0750200cd34f33190c8e9a7f46b83814a826d5dd4cfdb21b1e3404598734ad958bc5604de993055cda5f2d36dd10d8c7457347bc8ca022c6dba73cf3233dcb99ea21e992c80d7f9316a09ac8e3dc02835b3928ea3716ec3f71ece138114b1a8d549d77e20d5777afcddb5c7a8c0c5d903a02d5707fd1afd9d8b962c4f9e1cd22d852843eb6fb7aef12b30dbeef7e30d192e1b8f7c7dcb0a4ff10e6b90b5afa700ef6e4e1fc9b7cff254711c9dd04597bb31507bed87f516311f38df4ba87cf2c57ca3c619a0edf3d7f1e04efc5750fdf04fe9cec670832bb16e249ac8788f41d67a917069fbaba659759581fa2b0a10f78b926b857befb2eb2570ebb9a2295a4c002648733d0fb9aa89f35541c74bbc36944160fdf15f38f4e1f4dae35150f1f97c71d313d087a31693af164272bf145f4fc54a9d80fdb9a98a4f3325655deba242f25d70ff47702714de1979eddfd83bc2ecc0d42a052c480f704127fd0651a85793ef16bf5b6feae9951c32bf36ee52bec8dc22001",0],["0x0a8a6c08021080101a806cc3319b5df1c8ca5bd9148831a54a296ee8692e8e2bcfb697aa49d031f4e1e74b3f4893e30eda0d44ce2fe9d902cab4e837782e18d4c7807c52fedfe4bc02605c6b0dff0af05efadd364c794527fd8ce044a42650a13242b3f80e96ac2861167c7264ca220185834ef71bbba7bf2850aa2ed72b2345672d7f29a39634b1f3e4eb9f055b7992d84e0feb2afed0b9dbdbae3bcf433bc4ee39df235600bbfab6d6803a67f434b7dda4947c4e174144e03e74714ecb64745c03d21a0a5aebdfa0fe2e2a07ffadf5344d1eb15e7001e57463e4dcd38ac2d6c3427301602980a17e1717f48f6b915033011afad2b8e1abab98d3245eb218b3eb6d3afa072a767c8f51795ca2506496cf9c058d121e88ad720e57d8af7449b4a66ad3e89f2f05f592fd9c1dcbfa85b336e51324f5ecddd0c78b486528616485db1f1f3849dc768b1cf7c219c7d6123ff5c48c3e0a96d94f34ca32e11a2d05be1542b3ac9d2cf59718108676e97ed353846bcc81ab7af14289ce7f11029113919468f000455440743cd16504aeb0d87c4a8dae61a179230ff30145bf414dac12e81604796158b2fc0bab52583a5ad52c47270977f156b37f175b6b91de7441b594dc174c41c6d47403f4f94baea74a9f7782aa92eecdbe3231cf3a98b995466d0fc327e53356dd13b7cd4ac2f7811c468951b82bf2c1b50e6c6a6d050a1c374235b9d5584d2530c06203196b0b8c2954755b02466b1c8fe71f2fb9af57f3b514c9ef2c5d96031eaad2d1314da681fba9f7eb3e545f0d6e28efa084219277783941305fecaa6d9b7d3f3d93c6e02d53d955ec1f07b7af95b139734515c88eff9529b9dd9a9c82694cdd0885b4007ee0992cf8fd100d148721cdc9af10fc6347dac93c5cb1de5b7abf20ae513eec43e03d8ed218a38e088914b58bb69267bb5b7e494623a84f0da7ff2810b3efbe8367d5235e0471ac32287b6803709fc686a1ca118a79b9e6b65586c328e33fb0d52de785c8a6f1dc56f11a90b01cb678078fdb7c0890179ac44670ab80a3a6cc6ce0415c2647099d6034fa22effb5e73fa66ba0982b849de898ba4f5cd5c19f508457f8b28b382a60dfbab22746896d71072a9e70462d29930290c38900175323c285232527b84e6793fa98ad2dcea9daf9021f09ffb6f824a16d9e96333a257a3aa666d98aa2cb589e9b18acd62839f736fb123f82a5d6b388f6044e8781166013cd47b2ba4fe8a301bf3e3a831f6f0a07c88f6c309ad90e5012c0bac243455954db06f9f698093281b04d930477ff3d50001c0bf677beee1be64a807379b3f91f5977a6a7de504c9cfea5dbc8d5188b98ec7bf50f38d8e2fc1ba6de9ab7ddbd18b419df3e1834505e564838cd761947366a20120b2bc993cc6ef457b3b1d78b2fcdcb29b1f8569fb714fa18e1f59761838b94a6a6829db2336990aaf241bd2aaec0c1081eb36161f4d644ea64b6f6d7905fc9b4783348183696e178dabc74fad0166669675645b41dc2a9927415d29b81c19eea3cf021c183e398750f76aab4bc07c97ece5130ecd53100308bf35e7688b5563153a8002feefe82a63eb540b23903c4817fad40826116f5277dde3c855e10fde07a9a54d45c9f854f94b9234efa1b020167d52542fed897960078d55942273134be864c5c97bc1035e1abd4d138bb3e12664fb0ec014185e2f4f8c4b6c2e1ab33cd935340340db53bb03562f8c9b10c8640fc0e3e8ea08f7954d529ba61907c20ecb3befdbccd522c1cdd75b15f2c9fa560f44f90a57566ae86a9c5513366d59e7ffe0aa1de399b4148c12734b2317038a25b6e8a72f21f782fec51f24d16894f308d5367e595131bb5f73cf501b3345bad54a42e06e078a1693c063e48139d3939d1839e7560c3f55e5d8ac78760df9f0bb1bfecf8c51e611a6ba833815e38760225161a6309c5359e8f1b7ed9d707007b17d1a870ba7ac25e0cbc12923883214829fac999bd56077bc48e20e20cf23b759ddc125e58a67cac34b3c01ab2ce905195d166e5429f69eb4402d809d05cf596ecb9d0d4f20bcb133bba0fbb704311cdb68317eebbdcde8cd80ec6ba20774e1b6d0e8d2b0ed6c9964d9f1e65dac2bd74a89f4a4dccc9e91920549f1b87fcfd33c24c4e2d8ff7ae59287160372b14f2e8bcc8ae410cf3be2c18149df686333217025f62b53a2df0dc6c573e1c07c5030726cbe7c78405afcf91567efffc066d4f2d76b81e8e824e69bb58192f402c1ba0bdfc632f5907daef4e7340627e26cf371918596897e1ec51f4568dfe9ed6406cbcd812847b4edcb8a1ff69015735bf4bcac011f8e5a62c85ac6be97b5b91a1314f1d37eab0e8e61dc24a155b41306272eebc4da8df6e2856a74edb692984b94af223e57dbd8eb7f23ada0498d9aed26ed0770c7be86a7320d7a534477b3b5c7e64e2229e79fbfb4072f68706fc47ca0ff4e138a7982349d0bba1232f98f39f28469470c4e0e95883178e595dcd06414006e200714baab0e5925af9d1c3313514d375280a4b0fc402220dda8621e4ff4e173142b113e40547a3598edd7ed60b72bdd22d62fdbcf5e4113016687c9d1af01e2fbb6aa0daf2cfd13abf7d36075caa2056c83d39e7c34d2f89a433a326ab01ff27953f865919be6866361991335b9f68e597d2b5bf1b732a38afcb33cc6933b32433f9cc72c7d0a9319fe55a531e744213037b3453e0444a50c36b89b699abd3d5951568d2432671310ac2960f06aca48497880546a6e3f0b4f3dd3a78cbc5c6465eb5b12a791de1b8a27e4c49f2c1c923e0eeaab94de3210ac4dfb67697a365740da550aab8704fe638a9a00c1f0427c80309c3d80956616fd36d8df1b5f98987d23cb79296247795a46b6c259adcf8fe6013f76dfa48137282e45cd102de060597c6ba5cdd64ed78c4eb5935197193ab2831504b64642ffabf1718950ab124282a4cc06bc9a2e84d52c5eb6895d5987d0b4ade4c31797591411eeb2c4e30b74ddd851ba2ef8345893efd5a146e40ecd7619e4292349a8814d0438b662fde8c3130c121928620ac5c5babc74014bda986aac4474fc5c983af422596fd88763ee485992a33708eb48ca57253ce1620447a88497d7d570eff72d1d4cb46005202cf5f6c0d477ff9ad8f8eb8e1537ce1f5a6e8d080b3b28183f8cc82f5c7a9069d578a99095da6e79080a81ed27526ee8c3614273d9050c28ebe27f31623003dfef51776e3078a2d2f7f353585a367c50cc931114ff87797c65d35c943ddb9f04643b5b079ec0767c06eb43846f4cab0095291b847fe18c4615d21d7267d0b2a8ddba6bab7515fc6aeadac8e930abc6820f5e1fa3182f725182c5b59bed3c47eac7e27db39790fee88fece2327dea6dc1887e415706b4f1ce5420bc062c0314dfc66ce3a3234a90dca4c71bfc06189edba318e23b189d4499518e7d9f8aface33cb6a9e0c45505bc3da9700740bbac0158a55caf35b93310aefbe2ca2b1d0416a4d55592ed068e65d364cf80674d6c6ffb79d6247c4914b0ae34400ec3def61b3f7d5416600fc985b6f318a1f183f5a5f14c09ccc6791661fcf477a75fc0ad9c80aef45dea6f5068f09d23ea72db5934cfca4c7ce5a230aabba563805bba4d4c27d4ea117d51d4df8d28804b1a837306ac84a460f4b8c2bb5648751f474db64b1326dc5e1c0631aed12a48249f3092cc1f88595088fa9218165eabf6e7b31c0eaac37cc005d7eef284c9957d17b14a4e41719eee641147308b2dc032b0c0ced5d67a9326d5d039ecf3a62dbda07b4ab0d6cc201e17debf69b642bf06729b25138c2745bb200854ced5758d883fe127e918bd2af2da5e899bbf83bb3a42b350befc9b1b1b25daa05c7382046e23e4a658b7fac99b0729614c60396e3ce848ce06eb4f77f0a7e6cb4124a451eaf2848b5e7f2616c3504d1c5c714802375340c910b902dbd7757f80a5825ccf8466fb15c8d85897d4d048aba1cc48ecce90ce9ac9c87ce7daed5bed8f6c79975f347a638c83a67784be7cd0fd64b95574f1189d608ab3f5728e0ea3eb70c29293f51d4b1d4498827b7fb6f968780b03a590335435dd11cac8fad110ad11dabb4afa40bd9632b279a233d3363ce05f09abf86b64f99e8eaded1e4c131dee8c05689749874766768891cc86aa3f8bb9ed5fceb4bc3701c7cc439a8a3ca92204f4f7534b87ba1197da6c7f009e2a1bd0af09c12cf91024fb2c798ce2e4a2b4fa6c60735245155f5496eec6ee836f94a5102e5a74e1c059287c7ae34a0b3a917224ce7b2e596c43475f6f7ae2302239c3bfad1802fec29300df28132e38222ea0609ab3526515fadfafeb8019e6fcd798143a37cdf1bdb434c4b8e5cee91e01d2080d5d12f8ac6ad2a3a421732fde139cbbab219cac320d63d02a011af806e68362fea72bff4fb11be197b022862a4e48bcf6e8d7a745afae69b96b8643fdb3b3db821697f77ea350c08043631a4c65a81b5352669216e5a44fd3a0d0ee1e427d41a99b7d1e0cc5c5919f92c7a9d6966f6f158a40076b8290b22c783b0b245b961d2dfe7d176522680b35092d7d2c8779e452c00f6bffe788033087a1730b7a47910dcdd60fcc57ce750cf925cc5d9c7056786b1361b35aa60ec081b4730fa9746babdfbb2640cc4bc98a157a4ae8d6b20d74bf68f17d08b6deaea4d715dc1a74a2cc4ca8031ca6922f1e434e09c52bfb97e9a66e53103180fe4bbf51a4126e180c3ac0a82c16c5cf02356f39db877035edd05d4afe759ab267c2e8869aae4c11530bfcbfc6b0974a14232e73d920a0c11bf3bd452835193d1b4084566e03bbd13da2c01db06d79b7407b10b2a91435671bd59f4a59b9baa4b7213310ab6343020c91dd0cb9f70b0919bf35a4a2caedf95248e73f2dc1ac6765d825f2d53a827c0165316ab4ab1d124ef785118b5527ddfb12b806669dc34d78547868674c4f6d8f744ceae5ec28c19be281acc842b8d26b2fadfaec839e8d9d92b034d0193e4ccf373868c5d16a7bebdaebe8c31929c8ad936d74ec5a0425bdfa507cdccf57514515ed5503fc4b707cfbc0336a5f70745640f70a39c1e98a29959a873bc90afcf6e172a6e2bcbea716293f66933b9640b864871b370d5121624c4991545d801b045904cc61022ed99c70619984fe8cb370912e302df6c01f935f13c2202ee4c3422830746f1387d9e898929d5097a53ca0ddd804120ba0195993343d70ac5db85ad93844f8a9a3e6968a27d48808a4948e74909ad4b47ec17be53364532b213a741529be98b2e861709ac8e425885de58e189331da7277d2958b1d6b76e7255bd69f8ec9dadbb8a167a31d393d9bcf5517aa90eab46b1716df454981bd95e958058747c6099078da94d7914ed6e82ce90e96a9e01bdc0110ed13cea1b58e095145289096698838d776187b754930ced4d08aef8af96829696a02b40b7c5689da27b64831024c80821a5ffe42d78ae2103ca76ce5438a264e5ca5a94f8a7308c2c3df7949b6af653f93b9ce2bce99c1f43b1a9237a680dc971f6590b2c4d4821616638bb35acaa18ad0d1534110a8eeb9fcc91e77b5dd65118384297916312f75447e5e1549057bbca2a485d12235f2e3c477e0ad23d6603c617a003f363be94cd8d99e0d00b3bbb519728383f0def22f1f77cf62c42a4dd582b7fb254bb8f342c1129f546f02bb3e614d21a121e626c285e5e995010c6bd51d252627d2fefb0b2c7399f0bdd2ab1543bed32d558fb570b133885bd1712cdef582035b2f97f7a5f6e985af60e4a5b430f0cbbaf51c66bb0ec901c7ca04f87501895a065dd43ac2352c2dabf8711a76abf5de7da151021879244b6e41638de6a3522ee3f14e74ab755758407eb516b4aebd6eeec127317119f9ddf9edc21daa0ccbe898ecb9737da00cd2bf73f395bce8852e7caed3c2bb9d67ed1a811640b8e2b36eb9d151218d0ba61b52f7a686aa694c2a76e12df8b3ce97df2a7fe4cd75e290bda3e756e79a53f755e51aa6200c502850e97bb5c1f2bd97a872a299ab4b0fd691ebb160b1327eee3d1a1c0f4cf0decb77faa7d7601cb52e54c3b49c4e56ce730c05b1c34a9660210e67599dd63fabc58b422f9c78a487cf3af3fe6f9106d4bfc1ccbc7c7054aceb4b44c971949409f3e28ad9d12c6119f146f0d00cd7a1a90333a2627a565f43d13633cfe2e970b087fdd898ccc36d6677696f6a2ca618d8969c83e11e7d53aee1e5729273712eb52b927a356a3321e8a54e8e1dcb4774410d82b21d800429e7a34cf49b8561ef6b7f48db426a6bbda606ec282768fb36f5f508d5b1a1995e7b03c5da7e348552a4d0b02a508472dc791a9aa201ecd2ffbea41de41632f4d11a8b9bf51eb47aadbb4aabb83472044d546557500ae2eb487282261728c4249cc1b5fc22f75bdd069c99732334c471a50c2c944d2563c67b93901e0304333b407a4ab2289db5a9cb0b3efad1d357e329199a3b9693595f0e1b5f2a0355a110761655f9bf94eaef537e648f23bbd57bdc53b5790c5b23b50e0003e0ac603bf9f4ce0632004b0407b87da898c0ce89ce4718f382daf347e69f873ecdc82d4151b86694782569fb114979e8f499c3e48377f7eb4e84b63ff841c972dc195c14cec134c7ed425222dbb704bb09beb8a6fd7067e3c9dd6c26a8aee5c59922052d6d1367956edf672b62245f044af38b78e67b780523b610c0b40879faf4fe71224659aba7852a9d95d87eab777dec8787576cd33b827b8d33aedfca5c21a4317c0d554fb78321992f8da9e11c286b50aa9f42dbe474c611f7f6e41647e2effe5b61282a7d0a7adae4c4a22b54596075eaa729668e731c6d040cc1429725bffbadd620757e38c57ac5ed36ff6861a75db7c32b41459f5209e709e0708a8f825cf50eff912049332f159ba6e5a2a05ceb243e9972ca4b1a2984ddbd19f3b5159474c0a6d00befc794c23b3b9160b6e57d804b506e17161dd1614e2be8b4d30cfda057aeaa5d75182cf870d66aab9b3ad927dcdfb212fa83be8089f935fa5bc21269a60a59c0d59e6914e1b8556211ce2e57d06b387dce4cd3e9aa6b6430859f823e6f94c1cbb4ec599028ccced912726679cf9ca9c40cde1fea539a5130e5756fc5750a125110f57b158778b0c25a61ced4f7ba63ed6f67ac77cb9a23c3d1e9355f1f04182a0ef0a9a9758283f1100830aeb9a66bc4da38c5047a149165620718641b943dc0bf3fe991f3aa0e3aecb8e019651c262d5378c2fb3f86c50e49f62d6d47bb90f7f10e5120aeab73c9384b8ccd23801037c5af5aba4d507ebdcb3bfde67ac7c1bc7e7d3bf632189f47cea9ac61318818fdc1fdfcae63a4c421b43e0ed36a461eccf485ca86bf5347b0c2a2bb0af6257b9044355a45ba1d486cba67456c0c606e0b654fc45462d56371a625447617409b0f1891782addbf8e3877f38e49b634a8bc2e17b47e49e482b4157cc15680e4542a5fe270fe7001d663fe374f8e5cf64c01458c639c8785227200315283ea01465d001dd031f56b846ea02dfadd6ddecd7482cc31614400d557d0ddc816577adc77347e29297a19ee21c1dfe7aad972f0a3dddce5c1d42474f205097091a4f6edefc218d219dc5304d5dbf27985c29a0ce7eced298d1970353037b4eacf69a4808f1e3ef9cb726336c970699dd83385278ff63ac472c4923927cd12eb9376de17d0640006e1e0ee90e10836462552a02c220179d7f1f9058a12be5835ff350db5c94cd2e92c5cd25950bb4760fb920c210a14d1905552f43366c98724fb2459bf0fffe5c202af3d293cc97c6c0ae1cf5486fb78e0cc0d26aed4819fc050b1b2c8f1175d10c94e6942a56b028f7f3f25a59c6cc8735cf823cc7c21859093d5accd8dec34a6dcbeb790f12e82f59b3b62ff8b9ff0a9d12c688f72e51ef7b8967bcf459487f4ba361559fa2da7eea647608410057174cb7afd86353abe59c521975a7e0ebed3a9b05b696a83063ad693ec4738f6cbc816ca03f97e4fedb59674be736e8cce508628a93511d20cd3f417fed7e10bdb5ead332183eb20c59acfb0c77adbb7c2dd3f16394fed64c62bae9f97b94303597e9cffeb7dcef628d63549ee484432ae2c5b6987d40cfff6e11b6037a1bc3e0f48bf87d8e1e30bcfbc739a2307dfe12e5e23aec7ec4802ab4e5afd4fa7bcdb3b81d8341cab08645f10947f1b772cb2391bdff0573d335f148457624116c72b20a5e53ec983f6e601dfe152e35e4b28de209f6aa4055c271cd85ea04746bd4efaa4816e8a71a8d61ed88d3791f9606b965d8aaad7741a9f6bf06d55e3d1bba1b88f2bdb6ae9e48db89f40e3d65eab834167837130a4e80d3a9838d5ba0d09c011f80aeaf5a3e8a291672408898b4933849a468b786464bbb3fb7d944e8bb9ef85d1fd671b2792d5faf68c5e307bda8df5daf543f6ecf3919a63b3d6800257bab48afe18274b8a1a08f823670a33fe58aebd2123cc46b754bee7318eae4637c2a6885d8d1d5f6539b152681b986c297f17116e17cdde777ba39aa54402774eebaf093ffebc8db90d071812c02849665f03171eeff40f527be475d8f49d87ac77454ec24c214b9e2eeaf973176654c5238cd272b57166145bfd917b8213041d605eae8e33eeb31d83069d046cb482eb6bff7c885bbb029f4dc120cb3853fe18a345ccc9281a867642a0823e5e02ef01635470b44c92b917481d93090a95a75b8cf7ffae94922a928c26846dd8df14a07e737495990e22d82fe19a2f3e06252a8b1a299a4a1d483a4e9abbb0e261b1100c03b87b126fd074037b9a84f8a891462f5aaff53ad5b09fae1459f217543ff00485eba91800de8a58afe5951b06af1e2cb6a25e679da1ced0d4e0b3421b00e712e1208e1dbd10118e81457c6fcfdaf5e8c6570096b7bab3b08d4fd56200bee44b89f3a03bf6e245a50cbfcd4287cdbf41a8820b57102ce49ceb482a9b2362e223e5a99d4efa31f27244265493066b74695a960ac0976097ca62a9c740706907fffcaf11e4501bc05aed9b3d34ed7922b740aba00d2c4e3424125ac3dcb2c3cd743bd159a1443ea5cb27d6d3d09c927d84598f37511efb4e77343dddba507507d73719d7b53a43d7710ceb196795677d73962fc2f9e3d7c0602240bf5ff0556098077be4d75230266e936b2f7eeceb7a35baf9a91a2c8faa1b1f96d9d5b8b551caf0e94420e3edd126ef1dddd4d0e0961592b1cb3b2b67290663c086a0d96929fadd74b0da3dd64d3885b2f9e2e275f54b0ae3f1edac0fe568a28108f93bd9e9d2f4cc8c6265e3ee79c9e416d4d124145270cee7b41a4f32716c9742ab6cbfe3cd6e9298df8becd717fac63c5a7880169691d12a31b0763310d7e558e2c1afa6ed8e9ac776a50fe7cae2c3100e8f484fae1565b5cdd2ddb2aac7d9062e8cb25e75311d0b447c8149245c92a76cfac862173b37074aba19153ae7baa1f780ea899d99397fcc25fafb780bdf0b43978e325a7d355721ed2b4361eb08ece897670744beef4d31e52703e0736f8846f4c1a4678824bcc4eee0ac0a64106e586fbfedbd246fa7ffb090b1e4e807b1766d0820ea328654aaba569ad0290a2195349d25485e35668ef113054c39cba9153d212485ec2d3fe6d3c1b888fd6f47b479703598582b048552f9a3981ccb544c1a4836da60f776c5f3e485a8b5907903472ca2ab9f5ce92fe2434f444970e1a757fe19843ed55c1c6489b963664980b030c034ca92d5ff3a00197db40239f937bfdaafe4b1b4ba85bf6d041b96f5a422e754ffc5705248226bffe006e8efe943f5ee74df69ce5734cee1faa4e9be43edaf5e763a5cabd2048a89936143e8489489915d6ab1a51a2d85379045c99ee6267daf8ca67991ce9189d314d61b07b93241b4fc4c7dee8c9b7eecc2b4b9e74ec89706f47dd17eab6d08bf77195f1659733e7e2384246f3024df6faa50f76a6b556de4ac9b16926fda83a686ce2cbb98aba9e050bd5fb44a66d16617b4695be24bbb1337bd0aab29f504d6d6eb89d0a949786ac64954494cceeb6f3c4c87c39bc9c3f06e321dd8c172fc355c9faa8740809e1d325955d1dd4258d88bc20e931c572fbec36f5a4e045179356486f8ee53e1401c61127b8c5a17cb81614951e5e889366ab04243f08fb481ffdae619973ffed5bcc98cad271bd882b65719f5bd3e2a35896dc4e219dfa1a377d27879d0e97cbe046ed40b629773cc279076a300bb51d0ede08e148364300ec9b2ccf809e628daaa622160cf705b7186884ec5cf45b3a297b76b8add4067539b375544dc17dab27df841036bb2d2526705d184f9727d87aadc2d352c61174449b4417a93cf44d8103f09a0c03d2bc02e345bdb2ab8923b8a074ff48ed7cedad936cb633d39e273d152eaeba3b9e381f9067a6f4b1756a1346c966b77a550cad884699a3ec5aa31dc2adc12693915f21951faeb4c91d19577a0c7209e5d3bbca8d84c605a8918cd9761ed1240f258881f3608afad4415fd74bdda742a83da4a399a436aed7133ff24414ebbef1e2764d4c34d17b8d06bee52c338b59264f080ff06e728c5c8cc9a62d41316e796aeb17783031bda05aafd8e9656ca0f004884c33f87f4b1886c24e23fc7b59fc83077642245f4a584128111721c9aeb19fc6cdeab204a817367f04453ee8b58c4ebb16c7fbb62116f0e10f9dc288c3daf1631cb3e66ac5e7a0ebdc60a35ea7b486ee62c97e10e59a93837fd7e8e0e9d53c79d666a6432d1c78127ef6cac5a4fce8e85407d651b6e6fdac8283ba50512b8267a326e856dedc91489b2036d8cfdf3c571cde2ef5a4a6228abf440b43b29bcddd5a0237c002bb1b2a85378834ed97ccdcaff962da3583b1e63d2ef6b391b887d67eecb82cee4128e2f71086bd5762a1860a45c59d94fb7e845cd2f5416ac1f80bf12315190ef0526d532a1e9d9a8157fbb44a7cfee66de0a8b0480ea16dff23b4c9dce31131039aa6f6af41a772ea19ff3c5df7416686154e06c6e20424daddeafe3e6e6ae2cafcff58fec7ec45b288ef73e9916405204f2adaaffefe6a5ecd93ba602ca79223f994ba487f99ddd8bd0c35600e11048789b279ef585d37e62ce1d1c437239a58511df68bd316063787177f8a91925176f69a7450cb03828698ca31905a27f98318cab30186d0f34e2ff45cb365776a0f94f5e44e0410cc051e5b96266e26682fcea87604d0d73361fdb9fb957d31db5b07f4b5d97b52ebaae31b067359afb0c8d68dee37bc442cf5ff86b05538dc8d31fb7768cbd3756490a30d194065d849c57e791287260435b3acceca1363b96eaf52bed43cc6ba3b554403a47beb7ce32bcbcb18c56e6d918e36f6b420640f867e4982342b57ae1e2126f5bd1398913935af5b57852b8fda4a277cdba6ccd850ae578ca2622af0896d7872227f029c5a9529488f9ad5625ae5a7a6567d87e8a3a84329d1b9f0c2b3711c7ff37f14ab6f81780aaa7c7bc3434eee2284f02dba4110396697d43a2a3b64cf25dec64a2c59943839ac1b45a059f366236ba2c0d8d7a42da04684c0b212de066ae4cb8de50ab1472caf2d53a718dec4d64e31b2aee32616119d8a3558317237212d18d2ffc5e0a5616a7906b91c888ac6a76f70a15236beffee275964268ac5f91e955842d91c2bbd04c19b1a8a9d5e6df05bf224aca4517d8db9f0b9086b3a053cd7f7a15082ed0413f6eec98088203c78e8ded7192623329b4a533fabff89b89cf100ca1574ab15255e84c2033481dbd5ac0464b1f5e79731308df18d9164b2aa51818ea9dcc058fd8e983d38d7e84f89483c6c03ecf65fbdd4f3eed1f654eeadc7225faed914478ed94409689d216f03a306a3c52e2c153b1de98d7773266bd5a5e930868620c9d20544b2b0e157abc0c664302bd0a7bede6cf157a542407aaa30895b57515cc265e8d571918712c774abf68c42dfb6e5b67167d1a0b03d49d99812ccdcb4907cd6ca52afb9a82b17254250cbf56c2886b71cd2570168310ba7ae6ef46520632686d28c0ed495629a59b361004819ac13c8b1b27735ada548b91af4695d1247034ad9af3b2ba6659101b49ab3fe3276756e7ddca48d0d26cd4f5867b8ecaedc9644a9209b00fd076bda19e15c3fea4e02fc6159c5b96b0d31649c99928352eeaefc3179f82511b37f7a25739e279cbf7c3eabae2488bd0389496f3e4112536a473bc1233f27b472468ca847eee082a6afa4ca365a87362603ccb61935101c997b7ee946e89d47abc3d0abd883914c194c17cc17b510a19585881f224e89ed237a90ebe2fe7bc47e7274222b7d16ac9d56cd007c570a8f4f9052babb73f899d677fa2edf7babff38e5f718ed09b8148d4dc5aa24df54e2ad34067b91bafabf89dfd19a4c835e9dc528565949bb78bf1f886e0e1981d86e3ee9103240ac14981b074af45cc61c40f581a4ba630a920ff9e14b5a8ac8cbc1ac2863a6a64f144add63683e1713f5eb2edf832229b45912ece8d971ee3c3773d2653144847f6e6ea89449cf9cf1a7c6f0f676dc4ad67af5a880979fba322dbee26725cbf57971281d6b87a7cf02515dec94c7618054e58dd5937498f28f752e46157f7a232437c3a0cdb4a6781a09f91485392c11519f4618588a03aa1c6bff54ef2225c1080731cfe30dc237a4cae3421a98243d1a0b42366ac9256dac8dfe7694ee3869fdc28967caff931f5a7400f50d42b9453eda8b9e29bb9eccbc99592b87f26f42904fdb24837503d47e1e123a5cf278accd82f95ae3a0fcd20fcb73f4d8e4cb9eda50863a84fe21a34da368889f814015122fa33b859dd7de701b3160383223813451cdb5534f966a956efe2218fc9cba9952b5f6a9020bcabb23e1c0028e0b3f26a003d169bdac4f54beffa27e2f5f9cad71db9d3a097035acba205a9c60898338da3f32fafa4cf5dadc2e70336f4268518048b98f8637640f0ea45ad29646fd4fbc270b661b5a5bc596e0d1b2207666fa6283504ff88c21563c4b03e0817d3e3f4a9fdaf1ddc668574b2341c6afc67ae3377322ac9626c85e088cac7387234b7d5743ef93cc7df7076bcdd36de3e1deb00c6a2e2a34abe0dbe8fc75ee0198ce8b14ec8bc5d6fb211fde84d9629babcae5001ad4e6ec8afffa9cd02f355b466dcd8a81115f98ad896cbbed33c8dc2d3247a598e4ae78e2277748ead8a5071633b4512204098c4d9a0b717125ce53993759fb12abc550cf1415fce5001c397d9629c237a7a3e609317db5b3b483d4e99331100cb7f417a899fb92be3f6546aa3849314c863ad1d78c74bf97a0b79a3cc8bafc3ad58aa6a5da5ad8d5fd09a9d679d96d12d4311da3591556592e381e9239cb77bd66d9065d8dd2616d2807b55376d8e907ede7f34383cc0a53c300c6e6b6a498fc060f871305a2d560f926e2c7ba668452d73d44af62d15afceaf2e939cceeb50bc98d079c4482da75636061a334c400892f2b1ee1da8e32c7004e5285737c1b311a432f2b4408fb69a15d36234489a7f1f50c451d8275f4083a9124f7fd070eac8be98f16a0c5f467f93b2cb5f283ed0dc022a45946e5c46b39e0be9bc844164ce032b430587e2419752dec1b67c5aff5ff72758965de79b5122b80ab292b4704a0ae5ec9b3176e6d647627c53f52d4e363af7db58ed976ac4f63adaf19775f297e599c01bc85425e822d0c3963889be7afe7aa9584c912ef23fec578f6efb4b46dff66bd5fce6446f8a1f880947c33fd81298539b63f2b88881a2d4f064bd945cf598ffdad4dac5e70a1c386f2fa9a92d3fbd4029e27018c8dab866cd313fa045ad914cb1ce7f9fd727effb3d9d34b12fef06c1c0db513a2715d9a247b52de1005d87ba20e3bfc3b06986021c4f834cab4c86098d7549fa4d26fff7c779aa1106090a4be096ec7bf9b975af6f4c174282f4893501dc462b5f0d3e9c56aec1f65c489a77bd8429c180b3094da23b098e620ad94f86a3bdd87225ad40cdf07f291a06c909dd9202ead4266db2d39cc52ab7dacb868f967bc01b8e79e125e8f43f323cb86712a0b94e12d9c9ab524db75bbf49c0f75b1cf83e3752a2de2621d5e3f9e469f6a25585ff444936a12f2d704bd6365a555a4e182410d9a85d84cf4dc40d57088d06452cad2457eeb0792fda119b21625b0c048816dd5356462085ac82c81a6982fdda285d5fb14e87d11edbdc21e4958db8c8083617b3195a3e74457aa6be4ac12c288b6d999109e6f7bafcef8b669cbbe352437b3bb4803628e8e2fa2282b677ed41afd2a48550f80b8ca281e8f10e39769df87c51de50dc550a9e9bee3ea7eec1b2d35fabf2c3fb129a02a895799707a36cc192a1821dbeddd61323d711ab03022df2a438971821329ebfc27ae89b468a9ae30a0a8dfd4192f996e5afbee98e0fcf82d0885daf4f614a03597d9d873b2a0c4d88d02cee84e4037c3ba5895bb88f2a6979789c9a32d68612cc31ee8f9c39092d645913feda93b53b44db136b3576a3c877df9006651ef36f9712d306ac6ecedd2f3597c93cd8285592a85eac0223bd3d5a041a66bfa6864901f9217f36b13f6c8a47772de206e27cc6802702e3011549d6af9bf6b14bce532ee7ba1a1a1fbe15f3732b8ed806af1108e56d43f20d2724f9621f307615eb4060412af5ec7d9029fd3a339e5d9585268005268abf1755f9be78ceecb0bcbfcb96f09c1627dc1b22b28597388a97f43b1dbf0203dd6654a005a2b6442c4893b62a28534c49f1a234abc94bcaeab075825e599fb27224e4254099d297e2a659a79745368fb1f9e38d042008fb3e035c68ef0b799a3c14ad38893b63c7e189754128be43c9130502f2931fcf910729edb2d3ee71aec9df98d269730df66aa1a0f5b7043774b2a3bb4d57761b5ef702fd35c35e34f9b0f476a83d32295b48ec62e42ec0cc4fe0b9e7f1d3b205a6fbf848ed347dbe3d339a296d0b467783119f6cdea07be058c64e9c96c781f39a214d64acbaae211ce76dd6bc4aebb365bc3917ea27cdb53e5849b0dff068ddaef33a9a3a92000fe284528c9f591592bfb98fde74246e08dc6a001a91118cc9ca9c05186d3aff33d53d0577c5061ddd3ca7ca5bbc3dbe2ff63d54d23dd3cb8d12a4b2ae65e111b6b335e6bfbcf07cbf6663a179b6c21d8e5ad6b678223203c54083e5772671474b713185378def76392c934dd896755613b3dfa3c816b013922db4e77919ec4e4be1dcd0ae98d1738e53902d4ce86afc184b21f7da1371458bf68dda0ddb25c486bf88d754c1e10524d067f9d77af7d0220652357de578766af2676fa2a22c9dee118e54a75268a0f15e6bc825b0f7d34cbe65c510eae604d3b987038f45df0b4bbff97629e623ee14f48b893e66186c6edc961ab6292082d3f368ed74f663272ea5400852f09d5c6be4530b99b87d22b05aed8a646ca8bb6ea29c66f9786cec8566b1f1ced4bc7b933338d7076cabe2e2d7706cb30cf63d82026894fd8929766e8f5b622ece3b29a52971de73cb9c50bcf76b259302fe71175ccaa16359556d2162be8cb9e6fd7e3d4ad5d722fe8276c3bb3b19e15ec4bddf4b675e22d26ab99abbd23b818eb75d41d8c3d250ef239434f7961176de77971a87eb245aa2fc652796e9dcb2f0d021315c8f23b5ca5338f6d6b16625285b4f5f4f1aaa46bab1e434fd885c0e0532127d415047423c6dbc753e3385514a0acdfb6d5ba988ceea40db458d2b4001c02858b62654d736208d0a954a18174ea63a48c0795f0c27020715656d0b049fbf9cf3630ebb4240cf69824e10da3c6744866ea20bc07171fa33598b4e5ee5eaa5d59973886524f278f831e8b71787dac358b9a05c271289496c842ec49865f43e1e1d888afb3d85b3a8b74c17321897e3c5fa8abc51844aca9374ff066db410e2a4b45ddb2fabf1b202c2391fc3266accbde91a95318f35afb69883ee5ec3721bba12213c7181de23e6651655d2b9619d4aac08de66989afcffa2e5c1ee67b04958fa58bb4bdab3fa299a97b59e499721817e83998478156bad449558b11200234352f3d33c745ab26ab111a073509a90c6514175d295fa71695d8e485290ba63f136778eb864ad000673d4daf53e782a5e52684892aab6a4fd0430e404ce4195d880a0067018247ddd2cd07f4b19a8d65369e2aa6e74e42d5a6b32ec3ec32f4a7480f81358ef84ee201e10cba1379897ac62df5b359a357e344efb72763271157da8aca1bc9f4a2d39ffd4173e89dcdf6bae37c43d2c665ed38dc6d17e38a0f691cde3fa04d3d9c1df7325131c7734f582ccf15578fa8e0c6f3bf164bf2896671e624dfbea87bf08204041e6ea5c57cd14ac676ccc0727c8d55b14c4a1a6f3f227912686bad380d0bbabf3ea10b44efdf8ed6f2fd359773fcf4abec3f7f3ac6feef96a33e0436fd632969e4e127b4fb7579cda127af98e56160be2ddf7e6d8b868a8491a0e25152a6912ad6bdc561f63169315cefef202575fcd0b9c7de473cf3a447049292b95e08c0a3bbf5a969a7e563c3cb016da033b7e5e68ce78c2a877cb2ba806b21aa5a37ea175d11c3b548e1c47c6460d91419214603862f6728861f8f36d2682b1f177716857c3eb345f0641e569e31cb992b6c2046fbf083adc38044bbdf17bb115f707a7f72da8503fb6aa7a082b2b1905cf35d416ffa996723a23123f5567a5c9cad55cfeb470c394123e2874c27cf9ec3cb830e6edc2b66f43b4342f45fe260022f175e94279e2a202a18a052888aef459ff82e1505fb343869c793d56fd0e58555dd28c87242147d81787c57e1f8a964a1e8839986d308f0ad3f9acb65109eb19d821bd58c19cf30e071d8132a4cbe782d4054b870ab71c8e88a47c934644cb3b164feecd2d54272b0e4d54ed9e7483d1309d3ed79b46ae1feb65abe11ae879496c10a0479569e533d78b321b30242681f3a6f6460f608d853b748710602460771c578eb6c4d7c0ca0b8d46557947048d5d8c05c80bc2f12ec3a2de865047ce8e8c8edcbcd26ddbe5f25ffea6f7a76d4b693bed20f69da7ef5c892f4e78e53b6e68ea86e83f0da67b7474244ee0f4c71d4e10654ce6663bc746bdd984c91fc47c9e740b70635f9365de39652f1c0ba24e6d5db5da3c0203691add207aa9ef38dcc261d97497613a3663187d01ccba51793ee43837729b070168ff01c2e33c57f91c962c621942795223d4700025175287359a25a9954b81591e390ad580e88dd0416593d1022312294785d97e1854a797150c19d4e9467dba068a8112434ce4f49a7125aaad95050b68c40ddbabe531399870ea39386732f30ca67d1d6b59bbed9c55592ef67556d054c05741c5a1afc3a4b0a34f4e89bbb7d2493966cb0c473a0a6fc40cec1f71429c7a826a286c7d84f1f00bb66275cf6f0271136e7b599a06f95f7158e6f432dc35686aaf6c3ed3e3de856abb88e80552c4f3d2a3bacc981b1a49d83434c707fbf7fcb6bdb36ee4159d7a59854ede3b8dc21759f047a481041f25fceb00cdf403efbcc90f82b39e2ee050a105043e7e22c6eb6c1d12ca8b5695e109a3f4fd2fbd56373a4e0f34229d666abe0d1ad62e2a66946972af508e888797ba4b913e7c659b3f5715362e953fcc3494c904ebf9e86352845985b23e4e6cb642d402b2382327e8a25f2ec616ba5f7b42ac1192f862468d711c66662fe965f8743b8ddee4588a00916a8d3ac82b07f2ad78cc4fff6897a0a4b14881f5c746b8304a7413ae2fa5856cc75beb14d27b7d966b5137f658520acf11ddb4ba8f9b2041d906179c03c749c90a2a53d4a2bedcac3ad680e17b585e2348005d7f7fd1b2c72bac3e9512195578b0721215819429e59f189e5b681e63b9bb0528565c6c413e8fb06b93385b446e3427e1189ee0f91c97605d25a244d4ed63d9c551c1851af75b38648114e0592b9cac74cabbf28b93166fc46e336c065d1f09a0f26cc6d0a7b480fa52a79ac6d006bd4f95eed6e6d47b5eee066da00cf27c4c2a5cd136f36f48c20d81e1ab1c3aab6d6cc7f8dd8bed31a60951818fbef26eabde0d93ef1b1d4b206192ee0e3b484e5c6fe603891ff507b01e146bb674b457420031cfdc0809384daf0901afd58e429f32c25d8286e1c70a7b7a126c8e3801ff4d91c71f33ad2daab27b30397da7d104314f84391744de33a67aec1f47e3e933f142e42845b040fa2682232462752d453f84eb8e5aa2e82852dbcc64490c61c98cf2bb0051d230a3d726426fb8857404962951f9f1970c8f708ed93fe4ce9e8bfc7262f5c120a133f329b0f005f4e5f59839d3e007c027c118bda957d8a6eb697a832656a6b17750f809314477e5032729bddd47c9b7c6ebc2baa0982d6ea1275f5f16d9a3c987628bd3c1e9fe558816f044440d1ba2367af1044afec53ccdbe042e8c0fdf8fd772fd9cc813125b7b5e9f0124fe15cc920cc0abdb6c8cdfc67d5019167fd2cf5d060cc0b64a6aaf03423a816aafe3b250ea048b52835991fe9444c5c0ff4e94859d7c881c73708876bf3478e9817394eb784b324b2918044e51246b9b4a108a89b3453a852d3d40c9851f573510f58519f4beaf06b4b578e7d9bf346a621e188a4ba4f3137d3e9dcd83ed317ff1971eb42182f0b8c70b24ecab4132e01d6ae65b149e18cdcdf50c05038188b8408e87fd5df998fa6365406d820a7abb2062db37593c31ca523db22827f761c8d9ec4a8d2c1112dcde7a8f114102a10cce708be77755352ab9f1c2b980ad6da6a0c046ea024ee92b98296b293264200daa4398b3731764fc6d68a3add782567186b3ea8673f84e54abb859cd81170377ff3cee91e5cbdb3e37072ef262f698eb43c35cd526b3525c4dc6468cf760bb81784911fb513846274946b05608f687c4dc970e5d2a97b0532fdb6b3bdc176fd4937fbbf1b18803762f2bab1abb0a46003613bad8c7a596d691d86b909f6bdff11ed62fdeb2d71b0ca8f1b96519ae532d8e6c4854b3615f2ce1a9b53f3f1f41cd733f647a04076370b524fe2111d3f66e9c85a936391ac4b0adc0df553a11240d4af6ebda207608c473db8111949b756b46dc26fa70c9e80988fccd0ec6e2ffddbd3e12d8bc77fdb5d87963d32dc3a9f174510f530d3157e9abdeeb0b72113abeb945faa39f7a0f507f8096a7a6da674c49ea752d46936a8a812d1a4d475ae349942f59def4c38147037d89956127c321ae16722cfef8107fa7248110861605a5961a37586673f756b431d169133de7340da04ae9ff00f0e09385ccabb3f49a89c8663eebf6e721f992b994f77bdd81db84c6fbd21b2bc609877aee6d438da6b20f63b5cd4b5f96f7949312bd9d827d4f0db56bf0c2959c600986c70a884262e3b1d889c25c5ec936f4af59040009b7853603ec5b88ff07c3f96c6e5ea62409b22ce6898f792c222499a11bfcc101990ca9082eb6808f85acff3002adb6b99c344b13b489967fad0689f30e975baa23dce933b136471dbcb07a38d04e0f72cfd13f8bc89e111b42cf1e453871462b93ac96b7e570a6db3db83f9dbbea7b353b6e7f2b36e55d6a88ee220d2a2796d448e305820010a8a6c08021080101a806cca51809f6fb028bac197a1ad2b2aa3a9ca7e1f29e640d91fb2e89476bb2d14e4b14aa2af28ed8f66e884a4dddaca97dd84f1ae5cac96986f514152806ecf71c7b2abb22312e4dfd3aa6b2acf96885bce250bac75b45bfd5bb4ca1b140e8be097220474c23fdef63d7b951105a0745354f3773a4c04848432e10dbde3033aeede189c1d1c7e08f4557bdfb708a44b0754eb183dcb47f6affb554c7d4b851162ee4e5e57e66361311fdb7d5f1efd942199107fb61e477ce239e1badc0180b3eeadad1fb7774d6b2454c1e596044063767c21022066f563d4d49f203e21748961109a1cc3263856897d41d7fd7822c6f0c71f63c6f40e3b9d291005f94ee1bfe29405c89f19d28f26a2370ec9cf9167a2447bcafd8627b8d091756ed5037412795a19486386e1f2250c80f42b758d6b284ec3146b369387af07e98ef39c1fb536579ac9f39a3f1c809c5ee3d9b6666ecc7edadc3c45e4b9cd611b33fcdad85356c8d5943027ba91d3db8fd606503bc47aae6f430b62a15cb762921b53bb1e72a22062579865409eb70407bb1984b84e167f799a80e66db69adb195d58a5005968c55197cca467679ece0c80ed94976202fd0eb34635fdfda421bac7064769ea85cef8e8f9a1c89d59146ead0e7ed5ebb2d74c2b75fece75a5ac721892ae2bce38b12d858a61ea386a5e811fe5f477e2dda001e6bec1adaf5f77efd7a97bd1def6742fba28818a975d06cb74c92b062578c65fe6299a85f28a7bf44318dc3c81d6c3daa6f01693beeb5b00159583ec2de1e8e350a4339a014001ff2837714cb6dd226582cf4b9c5e3e83d5ddb23eaa2ad0e9777fb73fd7ad34e7890ec4614984a399ee135e6ea168c270313574ab37537d421244832c8cce09c5c1d74d3823014167f2e01f5a33bba2b7bc9cb7f101507ebc27cce5dd19288c8ee68828e1f191dcba7187c8ab25aabb33feb843e6c0c7325df43627271b3017fe27c62a6dd719c9c385fbf57c5b9a5f983f44534c8371e181eb29c168cdefd6befe8de3b7c938e6d61496cb92f3b141da2707d4570fc4e559acf912a8be0c2eb8d8958f8cb73497da499944377f5be83d8f0d54fbb6e5d76f0ec714c0177dcf7e9455473d99e8e1bb74b8273e14dab62890ed45726a1424c8d360c600c7cdd49c3b0559131e2759ff11dad5448b56a1191819b7ba7d70916d5b6b75a4abeecf14253e6ff71dd36b001ab8d10479653a64a3074775be9251aa18bff3dc236c9c2a12aa597085fb9900763733d305ccc10c21ffd1d8f3a128979f3664de4d7eaa87e22ad62072ca7c729d2acd682e66b058e6bca192de134e16803090537f797302b277c1d256d72b71406d30150e8ccc2b555f81a65bc7f63ab80cf19a84b1b35da933a5ad46d35ecaee9e22a68891c11157dfcef7773b37ed10b65a56dd8931e7e1aea10a43c0d42b0ea6aa017fe9bd0c5d9c5c1c7c51c51ead05ef77bddc327a59bdc0875d0b7ef8824fae892f46855e342af4cf8424b4bbc1da56fbfa735d56a8b5d94a4690632a56629d2a4b2b0a634f83bfc92cb77847fab265dbb4aabce07f5ccfa1c397cba9b627e7f9327b142d0d9aaf10110573a9789d2edd6a04f6506dfbe1a26182948feff185363ed4b8ae595e120a7098e6accc69df8fef256f2b0fa05d212670f4d55830843ad59b3829074e55b7117c2ea91c22092f6ae0585e7eb1d569d27ad2c16355d5a83df7805c5645ca2ccc6a20215c48ee0f0ab77b3203f61e5916542cb99fedb1e3e18f6d4e370cc2ca73f2fe059688047a4a067d626aa1aaa03616ef8447e3fe311a583f4cbda175f8b9ddb3062afa626d582f21753deee94df19b0eadf9ffd72a9af623b902d106f7322d94e8e6c8201d053497cea11a8b9a97d1e76b8d1c4f749d34c268f784e1d35ff8504aed4431140087dea1c043bc01fea4c5000519d7959720d9e5e45bf9a6c74890e04d44dad266df3bce699dd25e462d089d272d65cc3446c8b33bbbb16ab921b20e14b159b2beaace745653d801bcef30af5bc2a76816c02dde348a8bd4663350742f682d22b27e2b4712341f23811e151cc339dde6fa637137475ccfd1f02cd38f212eaff8d52bf4229647eab61690542f7364dee53fc41ce629a22fec802f41f52f19c3047ad3e85d6175486676cfbae47546401c86a7f5dac96cb65b194fbd3a1895d4b5cc54cb30594d81674a1212205214d624e10e0d300ee36ad5c2211191401d28c56bc7126d3961dda7532ebfb05a4ff206374007fe49968bb2fb8e4cb2d95dfebbd7f207fa8ae6fc535564e6cfa76af8596e56138af4b685b52f7744ca12396ca78e918271ab1444e65f5a79c3327bacfb8280bf5bc54b4cf3d1c03b998d7d9b2487d9d42b1405fb25f9530dc3f1fad04863d9bf5cf4bed1102be34883c7f1dbde224a3ca31430438e1abc23490f65f8d39bd3b0e79adf91b824191a16dde672754392b857a245e40979d2fb6226dea5f17e0d9c5b4c519f1b08bf9e32e314cf4275fce2031cb3977f946e18c2655ef6fb0f571826af2a1cf9a1dfbee4c07bc13659b609751e227a30555a43862020d4347fab9812efa82f235e775c6f1e29d9371db0592a9a4bfcee6d7bc779ce5fe11fd558dbb1463db8889e7658b9f0d2d71f4c2bdb3caba1a73f785741d3b47af729f390760dd8b67587b06fea1ad78fe61a2cf6978fefb282b0df576182fa3077d8c8bf722b8f6a26f889de3326c5230c6293b6e18c12c73ac42799bf91acac3484696b724c0f60f060a5cfd8a52187af85f4becdb7aff67bb0c5ef57b67ca455a0cdafaff7d96b267d265ffc0105f57de09922ef72561c82e16fac5cc9f1b3f968e45990a5fedb3403a13d8b577a6c2dfbeb911ca924012763d198b902378a94701b9edcf5a48f57d1c526598f9d678e503769fcc2d7246f955ae257efc44cedcadb44921f109631cd8987eadea41bf35c54e44e23accdb5c514d6622b0d51f4705594d272c6962481c037bf15b0e50ec42e370ecb1c3202c8ec4ddc36beceaa2f505baa3a89c1c4bacd872b7b89b99e9accdc802131c347540acf30b20ca42dece9f6549b9b33416426b4d67aa7b1d2304b0d3d3e606e1dd225b69a865e8916c28b1f8c7a8ec0213fd421186838a69bb38a2d442168e29cca916aa8c9cb133ba34e739ea93d54fe2f58ca8d24210a59193b9aecc9ae7c4176ebc07858c323788848611e4821f2b57213ac290314a45f7f31f2f68f0023beb3f473844c19ad281672b3aeda7005ef11baeefc492f04eca6cb6f0925c62898343958a5f10ee828bc51c7e2bdd07efac5eb9ff41d1fb46f240ac837635e964ecbc431abf57a9eb681f720ef661edfee907d66e550327f0fc61af0e2489b2232a543fa5b4d8bc75cafae7db71ffd3c555fcb5416fe3d7506c5e03f1850785605df8c6fcd1e41fc485f12d421980632bf85a408c42ce430c0688a2f2062be7ecbae4c319317285c2d5b8bc66087e6c892f1f85451a02711aa81da20e8d3c6b8d0fa8779f8ca2bdd4af1cb83dddeb1de43d6d9e2c1c26f91e216c26517b1ea54d36a4c2bbd7f999b1ad2c3f6f9ebbde6f2fd236519fa12feaecf9796cc8cebb843edc166fbd2ec3b91c1ccdefdbe42b22a938118b86b74c821d974cd65e14d5c7b384182d1ecfa22670d6e818f25da7eace1aa80c0f5ef7a208da22faa029393cbf52687b80c02de2ead3010d86e2728dbc031c88253a3977f9b6228ca760b29a47d1a71a1473058ca7c2c8adf38965b748a523ee9c6d44a4f288da885258bea149a2f3c25f77bdded0355cde33b32f55f1c9104fddbd13a17fed4ac27a1f798b98f7f9058b3d8ec630c6d1887c2c2d9ea89dc79d6e5d1b0fa202b6e3160c0ce1a0b6aa2456cb9a708f9a8480d94df87f6030dafc80e5f51bd7181065309b20bc156d58dd1ede6a73fe5b970e7bbba58e615841de209b560a6464cf381624793e2cb3012eaefb371fed189e1cde846781341f965d43f59f1e234b77e62cab81dc3a1a79d9de9cd64f7677d5a14fd7b1c50e91db4d8208dbe3e1ad67399e2bb9715b059097f47134d9bc8dcc91ff16e60cf084881db05059b747e275a880fbef8b7271dbfc354009f832420736f0ea70c015f2dfbb46adb69c20595baa9d66366876e843a74ac92c0647ab29e16cad1b1d76615741a547963d172e56fad058d4f0cb9281ba78be66d9d09cfb1ba5971fdd077e1a2bb77942461f04da4f7fbee5e8247c3fae0e7fe664f2f564399496682dec224a9bf502c974c5ab6318bccc127354d870f3c94659988be135dcde6e804b1cb76ae44a54f38712689b0cd86fb2cd2a4bf257c91b6cd474b629d5616d4b47ef282d1b74d633749342963c424b8cc3bd3c8a944e48ef888755d09571e3e8b86439bd7777cd6dc922f0dd1a236442514ef8131c628a0b73e6841518ec88f693f1e16d8f39a52706c631e44d20e71894b00c1f14b75a3e58fdc27dce0581cd46bd9ae66f54520842ed060d9eae67230c58df9b8694fc443d4530b51e7ff5ba44a3aeed4ac6b7bbbb125075e1933d7a0fe997296b12f0136a6cf5c78f1c24560f4a0c99e1038529c4f8f3244ce2ec56132cf45ca12989a6ac41a897f34d83c0168ca71c83060097cef3cf7f97b4d78f1c1d0fd01c18b4ef5835632bf20080c579d1e82e7d032f3c1e7e9bb295c8319e88dd001c69106d74e4ec0c3dd5d24bd1cff2c287ca61ae5b45e4d2d659233be3ce6a7c232d1c535a28086f4b1fc1ae25bc8196520ec1429413deb2d777b35069304a928c12526d2b4755ab052011a0fd6b5501f3193ac49b37ffa85d0be031c972d47e6a390149a08d8a84314dc3fb086cf5cfb2ce66087ea5ed9ffc80b10cab0d05fa179dd20fcea5cb922e750c60b74a2844afc5872aa6f43f4659562e3841d5d2d5335dff24ae360a697effbcaee3c3b511213446e53eb924243ab9c04c9f90123377a038a09b9932a0bf78fdc40d3b4c6706630649e797089df761f25baa62a2eeff55049d2b3fc566802498b3ce10ae69de25cf9c881ed786907c199c3bba7c835debe55419e87445a402ff6cc169cc152695c2005039eb1a55275f958f933223cb0145cf67581b64c0740dc3df73a465c9fe74a064b9e855edb72ccc80dd0090143e28450e5ebb1c1a13eb4cd3d5f93aa1354a3f18386ae358ae061406393cce531959725aa945652a14a3ce40100368699dec490c7d0b494145d48a35396046faca1cf9b3cb39d8392e3728c22adfaa327ad54bcca94df2d949a3bf9b84f1faca6c6ae612e99949a11f03f7ec045efd0207d21c75bd64537c9f6465cb2e917985d7ef0ba320c5dd713fc5c8718eeb1e50f37eeb176dd37ad7a50f6d0c666b7bbc05e4e168b07ff2a87c025c8b51eb60a2c8e04c745be1aeae87711a1f1c030b8623a82064ceeacae6f9f04dd67466330756b425f776e9919d1cf56a6dd4bccf0c5465120212ead57b65478f189fd3803b3c6963c67bf30fee8f6a80dffeaa427cde1b34012f1a2d2d4775d395d4c5537071c29aa6cad2d09f66800bc787ab700c90c028c2b7246d64d0840f0cdfdc89db41617f6e72e65516c1e8cc944e76899663f29746eaf5bd7e22b81428abd2193370a545f47e3a1e025c697da235ce500f2535cb4d416bdfc433b91b2f8852369c313c88d483ec9f9f59e70ab8cb504c13c6fe465067ad02361db2546aa6182f0538ad0d6e2a40a81fcac68c97af900ac6813cc174cd69e4df2699b42e915745d0b0ad601abe784d39823dcf3878f373f9e2350cf0eb0ee7ce6fb155649e06297174dd000d9af83c8c4320f0425617879dbc8b6733b9e42646efa95206bf84336dee38841f3813ada30976b9af372e48684eddeb7076df5afcdbae6989f8ed56845d34ec557bf749d3bc629aff0395464dc4666dece07dc31795d73edc284785e8052ec57d8138b3347ba547981c591c873468087ab5eca1398dec718b8347e879ccef782093e5eaf82412d1308b2e794387448cb04a750e8295c684e6b9d2a7d4e97f06b631cb5ed148e8ea7210e8020f41b4317006077096e64ad73b3c9e0bd2ea3863ee9142d00690bd61e1d1499006fc4bfa9ad54b993261f779490d0971f18148bf3678d70601b9a1938cc8ae66ac52499d0ef692e23bb769c3fbb60df42214c552469591188bcd0768c65ea3c90c002bc9b50bded4527fecec42921c6f349b8cbce3ee07704e4c9896ba524e006e3c8509c6a82574b5e4547de5022b287896e943344f32b7c2f144dd49934f301930ce74f46fd8e000c6b56e1c5cc531a5996315028828159e0c6b8ad7874f4d478182ddb4b8d864313a116711ead8ef45b1bc131645655f387ab13247406a7bde67f9a01cc4b25a7f8a46b2deb4b53dd1b61401b6ca4a0ca1f8206f460c4d0afbdbb364ac0f56ea56f1b9ff44f51f55423c371a375c6197c000b37ab4575f9f2c1a4ac06d2d37ca4028fb566f0b0a7a3a8120ea9edf8913f03e2a5ba56797525220dca17f28b740c004b12651c914ed37d7da669f7c7290f144c8f656ae4cfcbded82752ee2d2c9e622d5d083b1249d2dad020acb1398112a96b4ea7925e691158486bb609666170179576a8529a2df4ca1aacdd72596811a27f43ab46115943a2e931a230a8347a1688240b0a8c58f5bacf3f721a96fb6124ad6a92dc596ff1dc96012fbdedd095749a4b1334041c01cc82450999ef7987fa08cf6a681d323e5f4030be248570dea2ec5a33dadcabb98a0869a9e308f7a54c660cf6b8fa92fc79ffc2c218234203e45fa4e253255aea9ac6e03c715d9908829b3e9f36ad5a068298aa5c5e47b05e2fdb4517749c6149c8c8e9c9ee27bc64bab5f02deafa4bd663783251a5840d733554f17e325c234d78c3ee68ec4ff0547d5ed09e93c67a4d5f355a53e12cb330e4f044250c90a58f41541e87afa7ec2c2268ec95bc7644828d0b105191c4c6a6641c9344810b5bca1864e578a9f765d8827c5782012320e83399ecdee4606650aff3dca5d680de18cd2b1e4159a63034514442d7786e323216fede840f792fb8ac9feda1c38ae8f0d3837825b1a5c1e81fd1e06ed97724137304c6ba67df69e6c3085175e100c3eea911b1b85aec953755b9c3b76d29e2f69f2f3f8ff859f6a3a3edeccae8f266140c281b95a9da0733a57627ed7f23b52ed705fd27f7544867f9c13bc81e4252d8121d8fd471ade562a961344b35bd63b78dae83ea4c61282440ddb519cb0ae5c2e48bffe7171cc2b645d1ff1428878250d969d7a204ed95ee78f119c9d7b8990a9178a351e48d49433f5d5e1f79a01ee759168a721ca9dc36865092b6e7fc5af1ba338a75377b5eaddcb7196f57dea9be9b082e6d149fe2f34da8cb16e62735e80b2a8c959b041578f37cb6125ab7a1ea6fed9d68285f0db10c21ca87b6eb45a8f04d55436d22883f788ccb60d78d0ea34e989f020d5aaf123186d41487980df028c7f8b325755ff0a09b24910033ad6b7cbd03efed54dca1a59b42e8f11bdd8319d3a2e0cb9f614ed315e68a65bb681278fb97ab62b5351aec2766ce5d67522f2cceeb20e077fa6d0f1faf611f1d11cc00506f7124e46ed3711a8dc3f9d475b1a92c32a7a00f2a16e02727a4b467f99063501715fe9c888000dc03dffd0f963613deed7106920c8d003cdd144c184117d373c050aa664ab1aa0d874b8ec3d0e075ee29f965212ed06c361a18690c987cc7fa44b19d01e7dd7bab2119d55cd4bf112f79f375b54f8a1b6f1e8c51a0b3abe2708fe1c00b927c467d33f6a65a7572fb39a85578fd375f67fec14f8893f1c3652863177f38d1cefecc41d38706d5f03d5ecb160ead5805336e78ae1af1ef24ca86d507368723f71056794a2b999cddc975712245c213e221328a2ba8c5ae14e8639f4aec34df7116045d1e0a17ae5386c242d502c2f3242eace9f9aa33ac862f77bca6494ad7c531aa32c1aca70c702fe52c2a2c1a5ad43c8614dfb323edfe00de127b741e5c5f8000d892d982ec6782cbe4d183257e8715a52fbcd845b684999eba74c769661db3049de41dd47e523b79685d79f41286ff5d165b462f1d33b8f9ed5b6660605ce65b63172412061cd0a055be6414019ded66443d52ad6fef801f4830e33526399b4ca356cfd67e4bbf9ce7641e70df73a0141975fb8b7c0a2d71140904d7dcda3f8851bf8a207189b29c25617543a07a7ab3788c2bd6a7ddf531d444a1b43d5330d2887bc1271386051dcca5607caad836b0b8d9472e133594f2506c8edd3052a79085827e32d682fe13941563f0f8d888caf374909265ad5ee869094258212f75a1fddd931d511992dbce5bb4ec52ea7bf0b9bae5be67117eb45d7d7d523e3190b4f814eb77ee410c40e1fd5820747546b69849ee6514cb29eff5554c3d22e1fe0ce7114f540953f1b5d780b0486449950df22ba93221ad7008424308d6358a3704a1b449845669072ef58a5b68f40147af8231ccba2ab4e2751df1bbb00085ed112a7148954e5c5e8cecdc4b5f0b1e33de3351ae93b1241e04fe55dbaf1c8df079e0731bddfdea75cd41573c703ae3d10eaec247d6e4c217db27543ca630f12d6618b2437508aca230cef127971938db02aa57b782ab448888faeb19048c18a2d3b7b4c179581b3cdc1953a7f6f96b719b0f2e75fbf6359f1fe1890f4cb4f8f1f064a4a891ed65958b4bc1cef84a3f36825a15b326939229f1b7c4897f99bcf206b3b65f29ea7274fef2704dfc2605d9438b556cd2cc1eb0986bc356219c70df8d22da60b3e45baa768292cac53480f738a5ebc6b1a64950bf3809f9c37ff97f4a4c3a14fcc1ae39b775bd0efd01428d41d82c8b2ccceecf4333cc4cbd9f03c42b781be8f0a495c2997a9edcc73b9e900b02173718c0feccb52a28ddb8cb439c5c7254978ac06ea601c08f3f7a824a951a6590e1bed0257e0384f1b20a10252d53713472190ed15dc09ed005f4e808060435330603b9d3b856a8d9979c0eb747ebf946a9b73b4d39a239f7f0eccc36021d1b3348b9681f9de1115342a1aaa7019a2e9d4f4d29863fe0f343977caaf03d4990cdde431c279749bda1c247fe76bc07c5a14a6414e64a607a4f48ba3f20432642ad88213f1ece7ce8cbf1a95cee334d60aa366223d35ff207ecc6683976f3d3193fd25a257cc420513554ee30598764efc07d11ee3980794e775bb71c8d7b8ccd7f3533df68e7d2f17228b6f76172ac7c8ddae5baf844ea02ff5c17b363b4564389d449551e785193353676f81ad72a7e15e23f2bf11a2d1a399c6f3b22c082c49fa57166b0434f21fa8e659b3f8eae83289aba1136c48e11967c62c9f94334f5354e83da6fa3f4dde915cbb829914351a17fb4eda0811410ac4181ad41c8c4c7f04edd028f0e77217d7d606961f8eb07fc23064d8b9c73b12b1a634543bbc52601283a7ea1995dc459191ce002aa216df7f35615a0598598aa18ac5319992c2a73d77ef98575192ba9a8322834faa9a38f3d4863339c55f4f3972ce8e2b79dd112eae87fcb5c95ba8bbcb867da56e7b42a6ad919f56293600a40697f82fc2551c6aa2cbd20610acefa003b1a4e1c08248803c940844730cd22df38677ea2ccb6e6fd5e30036d92d3668f3c0464881367517f04c15ff77cd508c1f42bc5a4ad243c116b78184ba34a3bdbd4edd8062a8982926e36d916a8ef52db205e65a71568c17a50a742d1cee993ca1479a90120524c0ee0ce6266c4bae96e81aa6537a04ad820b683b1c8a01397be4c69cc96131f1a9bcb611b03546c082e63b6a1cd324661a30a91841294654123e6346513a4c69d98d9074706387897476145cbbdee48d5e587e6160b1f506200c46b8a4be24a345b8cadc2ddf4e1e777873b4adeceed2b6fd739f63c0fc73b29c24685c57989acf539e876f5ee13d3c9c4934e523b1cd3610a8e8585d963d4c13fd5d9fc935a9d0c1a8179aae1501f4743d7278ef08b92ee6a9d574b627435d836a5f3d7cbc64fc6d3c7751ea00090a2258aa9a877ec198ede3f84af892fa3ecf113f036667c743ee2d2c111f006eaa848de2628bbbac82e1adb7b91f2165d9e26eb3efdc9ac3a3ed1c90120bb8cd4eaa7a4b779477a4db47508e621c6e7279f8c7fead38aa6a7190291a902b6c6d190001f511a4c146e080e9fc4422fd281bb03529ab7432a798227a769167e610ec58d79c9fce50ec66501276e96aaa20f0c2840e8d8be2913cf9e6d617b9e8c4292ec3de4d0d0d2378ebf64bf0abdc4f05e9a9be664a526d3ccac50dd689631f8a259cc98e5ded2f0bec288cc7d2f3dd39ad84a8d3ced964a483ea1dbbc8de54295f69b02de86b06b4044fbc79cfd3a71b3a584f4777d7bd9904fccdea3842069f3e37bd750295500b53000ff6b03aa1647ce3199cdb1e52937adf58bdfef7299e211989e972183261265766e1dcb01b7779c4ec16df03a639e461b917f668f338c5ddbe98e6a2d12aeb994fb33665c7faced75f888cad5f1a58605038bbf715ca5c4d07ee3a0af9c29da545ba66c279e0afa580ed95a62d86871d741f805e2aaaf9ebf55f1835751fe0c667deb6cc970c728e5cbea49934fc7636a03453e9cc84a03f46d1d45cfd25c948edcb4ea277942d2d2ed4422eb89dc7f374e3101d730767739f642faa3e585e7efcdbefa35223b8e2f740ab7441f60385eaee0337aedb758a3693a72b2cf92e6d119469451677d2cc3cf81c2df76eee59cfab7748213a0435f2d1f28c5ccaeedd45aae23c70e48f0cffe2fe059d42f4a8bd2204b425d9ea970f7788260d89cec29fb0f5234aab238af7e9aa89c33992b86f84be73aaf959ee44e58b6b7ce8e5cb1e1ed9a2e49971cdadc97c1c7c0b2212dd3743e779ca3685063fab308c907f7d8ed662c69abb378ea5ece02b1cf5b2a23d98e3259f1a71092676eab7ddcd0267e61054e3049d39996fbc6fbcce2113a774cc2b1ed611f4571e7a2afe45bfa362b450715006619ddde58c6805c4b5d8278838c3ff9a33ba4f534b870a3a2d77e6de26b3ff3b74251f3271190aedc8a2e9ae9c80db393bad6ae9379b5d01d6fc161eeae1bc945d86cda537c2966ae6536010d43894955f03295da361757f9dc21c3ddd52ff1d68a9d60dd01a361c0b97f29f942d5da8c48d9c3c403332089433b72c66a69b0aab8f45737d91ea3027dcdc083c79b1b42c09c5fdd09dc403d44f3e19e6af7c324acc82d265ddd04b4c333f91464a2adf04cd17e22fb2cd7a72404d31e66e1d48e8b92ab7ca3bb4d4f4e301342bdce04ef1fd9c06240a403c1387edcfac9d862412c5638b58475ea4e831302a4938358e54647c6a1a764bb79a801451f6a3e7bb4f27efa72737447db72d77ef42a9fdfa2dc52bc06c8ab6fefaff92edfd3cd95ac57d7ac3a8ae6bdfefa1542a0cae653f7b78626fce19736a373896be22a245357671ff4fc3172066e70f30b9dac186943b92cd63796ee555c64ae34df577f0a81d648f1a55997c58df296a18c89f0a48c3c214108fa009f6d59f44242a877494f1b4eb9e92447b17fd63fa2d32a7bd88dc050fa85dc585a83c346ed82817b22593f444554a77ac6855b50640a1cc0e4b6e112e1bdd4ba1fce9e3788c50287cb96c50bde9563b11cd41cbe2338901bd1da4b9523995d4924fd66b5d070951757ca28361f2d322677705bc8c9fbe8043551cca46ad1c1c5d4d5b73a787321102fca6a50a215648cec49045b5c95dfa5233e60df80799d2fa746ac5785b5163a1e632c9e8dceeb0a857056e60597f0a31d113810a5e5b1254892521cae4a10f321aa478444cfd831d7cf3a14333bc890166d70043a4c7256177df981a8eb72dd4e7dd34a71d5c4a33f48168186aa51f1b03ea92a4c8214b0ca9f76c255f068602b54b15b1394b762d3f212951bea56a7d6cb5d0d124714f03c6a3300bb1bdb8faa730f18facaeafec1de34c78c00702fa2188658dff7e8270603110299ee314c404340f936073316593957dcbb798b057b01e743438caec716ca0fd5cd22f04454bb64bfae9360ced000491645a505c7b98a2d088d9167c6b3e3bf20abee4b04a05c0e47325936b4a5fed06d4d955f84254ab394975314d2df19f495d854a86ba06984421ec194a0d278c3f9cff99fbe3c3b8d29e3c73dff4d6a69173b3c48b967b47ad4a7ae5a2db3f7477e9b92f99468936685d1f566341f82186f53cfe098bd75b6e75e6c5196588578fa19e31131ab330a3531091d48e0f69152b077eac82f3287353756165062746356927c2e9fa2ec028d3a6580c8f1d84bb0fe897924a074f575f6eb756f5d89a6cc47232276dd83171f54f505cb28ae34c7f3bac3ab649933f4dcd6bccf7430d37b0e53abef0eb599f79be237cad6b19c748e0e503b9a7146f16c716bda7c4e2d5ee84a595f6abae029a2dc1cd5992439d603c92c18446b6ae34fa4e101c6af92054a5bab740f509b8915bd84ef86b86ccaeffc46d358db737e065cc7cd28db50c720a406fcb53c91fd7ea37d8304af1e036256397b5241a540dd1658e00873bd7b54b5d62158aad92185de760a974c4d0de3556823f2d269ecf7af9e209bc798b1ab53aea094b02df91a373b297b7565973ef52fdb0cf868439db8e9b88c6ced779c809fb7bc4d2946d1318ebe3679154ff510a5df173a47e9b9296dc96f3f43d219e4dacb90cdca8ff4cf75ecc60b43a79afdc6294bdb534b24da6533e8e54ebb1a34a0e7bdbf6dd4c79ffe9eadc3a002e2a53f0582953da8861b8cba715f4a3042d4e863d88a178b003b9a05b60b6b5feff3f0b42aaa814e79890b3f664e045e52c8bf873942e14543bb39e49f1007053da237f26b7bdc4b0ae7530913b0a629bc9838150276a3f40edaf75b481d3d1becddf14c39bffaf7fff2c1f8e828d32eeb43bf65242c7ad64b1d8a3e81112eec2f36bf5fe34a8bd43726c976ffaa0f41361a32cdcf5feb35706ebf6effa281d93d5dfb7f925c7c24e96a5b79036ba3e8db7f52cbf35aaf0f50d4c2308d03a6bdd58445f95fd4a347069cf26913c6f5379933a47a3211776fbaec01f6b2e212de4379cd7d367fac28897a821e856c578a2c65517fe7d867dc8df702edf3519a79107c885612342961300b32f68768f5cd616c862ae242b4e513ff711f2052809b4faddb982312ab95654bc6669623f6cb9136dd9d6555ad877fc065c405fbb1f58a5c393a4438f8a74534ccf6184f50b37207e7521ddb5e145570836d16f3ab27e318804d47bd4b33c140a3029516ce5162966723f903069446b8a8f544cb42d86528d2538d7eb32c435040337306919d7b9028e9d8de4d03a091bb7f915dedc0dc8ce8e6da8aeb0be210aeaae459b28d28f282f1a481b821f0d6a3fbd7f1c518b022b48992ac155aa4516021e942c8395241ab6719e64b7783ac2bb5e3e9d3eac0ef794281c42a64db73585e6dfe5902878232595b489f8d17c3dce3e26cd61288f003f110f9525dd6fc65a8c1bfdee3d7cfef891bd546e90e0c24698c50aafe8ede905257bc8b8f7cacffa90ee2b9b618afdae3de3bbd74a5c8a572df9c7ac8090a4efcf3d0a06b648669bc1d4bf17fdc7d1bf3425881c5059c87a30f5b79c92940f499005ef60d31f41143d919048fadbb7b7bda08d98031cd04fda6567cb8f671d76538d9da8345c04ba130652c4d6e9c95bb52e72d8059a7d99497f08c9fcaf03e7776523dd491bcfed0d6ff69d083e7f09d8469a4be78d8bc508dfc02f1e45f4e3ed9f5a25d41dd290c1c32a3a2847ebffa3ac300576aae59f24a954a6e57d3f4f84d8151b4076ac82665a0ea0c86a7f9115dc28a3ce34d6775b465611d07af445be5fa05a897850edef3bbc81cef43ac80df37c378aab2f8e28d8120694ca66289c50d963106beb146e95490734d749bbb2c49525945efbf670aba9ff7487ffe7972d5c422738ffd0c22aa722dcfa728a5866b30c368420e7a01ad326c7119d2fbbfa77dd80adca8f2360b387c386faa62f12524f322d5ee15cbf1d9ae1238eec586b28293d353c35bf0a914b19b22fd600837945b46ef80f20b04de7716e5d62cb85e48cc33c6396951bc7149a35d5e040982ea2675273cdbacf1822d6f01a8462a4b3f1a1cb44a7059d49fb732e9593b872563d9deefefb327a748d8098c3d82e2fe4ac46f213919d3dc2ad12ec87164c2eb1b78f133bba3e513d8f911181621a7cfd138423b17556d9263f625b618c74ee90afe891b73098460fb427683c9172d137caa977ad6ebab93f14b28613f60be6871b9bab80fe12e8a75b231b68bb37d925b942f3551a4f308cf5c8008c72e9ea3f3e21e187da1ad73cbd7a14c538c46b5621add6246f1d7980c9ff363da112d39469ab8bf67ecc087ab650d9be309aadf139584ba5f0ce082cae5bf51c77c21eaf8973c3218878f9c134a9910ce2dedfc65b833f587d03c065c024942f5e2b8f48ae80b6c11638ee45d25c91099d07121126000759ab5c4cfb72eb4b8decab6abbec1f4fa5ac32300cb3f6c64c82c9b037c4f188bf9da701fe84c1ab53092eced7c9aee69ca82caa6247a4e43c3c6542f20eb77568f8055b196850aac10eb7553c75e340675957a36ce9088c7791973ad33edb88dec96f8acbdeb949eddace60acadd9d3e3c1e65b65d42e22d0ca4cecac1ef63604ffe7a6bda658ad6baf8d09321ea117560a836fd44370793653fa0a8e6d084b33c1e01d4b9bf96c6e28d841f48c8d9590d8a99d06af7639a86c3609cc35b32e9e98454dc73ad034690214f75da4d63aa47e5c3168fa9e73e4d3d474efeabb5675b77a194a076becd0c5795776839697562f7fa54977075cf0764377eecda40f4c7f0c82124ac479244264418c11792d33294cb4fffdf9dd25a5b101a7e67eef825ff80754d1419df5df648222f8de777ccc37e835435fe0c378f8bd5e34c2e76977f60ed17ff7497803850d469d59469dca2253366a28c60c769ee5e07e5e450696577305859cb65edcf9cb69c949ae49e41e8ac16adc95080e97582a09a963d6b2749b0b41737f041cf529187aaeceea4e566add29d1c4a6a771c7254c7934abade89317a1b32aaa628356c72f643fc5379cf1eedbd0060309e65d8f30b1305d7cfb1bae60ea264260c48f3fd14e595b504ab4454e63462bb3430b2b6fe751ced4646570ef0c0dc8dcc6077b2ebf738e96cee8fe194455939c8802698dea9e983bc251eb5015dfe1cc802a2e525f0d990185b4c64954a94f0d6a4fe2abeecee27c4eba28a63be77e83a217b89883f4e5cab1cf4b04a5c07857fceb6276a3b32bff1f4f2850caea84f468ccd1b13946c011ebefb88d17a70d16591d7d990973475f322ffe86c70cdb66082a8f8d91e21dcd126c1dde4ccacc0a9e25e7cd7350d0823668c646f56029eec5a64cc66591b4494ad631201c64dd1cdb32d9ee74c4cb1a6ef5a13074203c4341a5d3107a29752eb3ce772a3c995938362f224264786189796e43a08d4f19ee309114392ab5deb6bb2cd0b28540d06c4e31ad73867e804484f7ed3538f0d5017206b0bd78755edf80f3421c74ff08564d39c702a6ae3671706cef5359580002ccb9ad48bf5ce5a07f44315b88a002420e084709b89ca25bc6f71b61f445f52de0503678e06f60e82d7896b8aa9131151df5d81c56572c10fd3d19cf16a319205a9014058a006ff6f64593f40e71b3d08f076845b98404128286b3731882fb1ff36ed24424b4cc18766986e8fd411bb389e9af81b49177d96a9b613f579da5a2e42d30ea0239b405e58d0deaf7634171d0499f4bf8aabb42c50a089b7484c4adfd3eb036c816b9c876601241f910c841d17b29d6f28862e155a0052f9c3640f3e85bd383ef54d997fd7c067126f40188a9c453a17dc2d35050738788c014bf9aeb45bdb0fc040a3dae9087843b7a7d61f736710c7246843faf1b159429555db921d3b6afbab29b487f99e22ad23a223ed953ef0558d3eaf690c2feeb587b53e85cd4f7460cc94dceef788abef63fc43585fae5c1ba451989b98b955b923ef28772d5de73791519800929ae90c966d2108f77be48d537f7f976bf526d422a3825f79099425dbdcc692bac4312a1816c573e6585d1c7848983d0f778a4cef8fa42351eb600d2abcfabbcf4fe884c524182755343a65ed4649e016fe55b38c5c4ad656a0fef36c5ff6d7cd2364a866a15f87e6d8efa4ee4ae17704f22280e3dd7021c13b0790cd53175a165355fc7fc818fc8fb947d281a81dfa6950a5e0946e667ff1c8408fc9b145900d8e71a91f9da8d2621627bc39e0cce4a714ed35affa7b0d602ff5f74b2e4aa4c165e1179b0413493bba42354bb21f021237f4fa51086f6f1a4b8926c68f2686efde9f3189a6eb7b0628ee7136c45bfe19113c5ecf8793b2baf64073cc4001c04ed6224adcd6dbe6739f80ad25150602f845d82fddb2b4a70477eaf63681b656fd07a86ce20c1d5077d3702ac7d8db563bee75d5b1b4fc18445232d29f4c477b0aaa668d8f36699b31331e8d7c485b8d6f2cc753d24cda807660b9305def828e7f88d8052c16d69b1a183e5592d7233224cabe76f357177124550ccdd8caad9e3a494a6db74f6ffa6acefbd37e8faafdd31d69716b3ee5922fd82a20343c8fd8f52cc1a0a7bbaf68f160bf007298c0a6724271cab4d800a7d9d074b12260a7bcd7fe613308b2559ec10def2753129826c019ad891456a599f97dd0a8bc629410912ca781ed51c5e74de646f73e6feca16dc5c1dbf20834edd2bc2f50c19d613a8cb4c6406781f4e533b0aff13084f8df3555d0834cb3e24db0ff2f41d1d3f21e7bc81202f56ef7e6607d169c39c6df1d9538745e9fff829e09a0f910e9a5d315501efa46c12d4af8587fe660c95154cf1c23b56635217d77577c7f9be1ff52c514df03229ceede0233f5048e82025f8a63bc3fe857dd01ba2c5844137b3a410257f2f318fa766a3b8c03c1186b927b724fdee1150e662a832ca1d91fd44de3c5da86e0172b6eccbffa626e487033d445b1d301432ebe23b03d832312482878f6706a73ab41b1c0c0607c78d44ab949292fc5be0ff9594dada1fe7340a78502bf712290a24c4d39abe18e57f72d6f268823e8917c07462602b43a0b31c34f0fe7a3182465b849b07b8379d2b8c8cd5c2cff07f283e4502f8b3f75329e7a8748ff0560c28a3defd9e19d7d75b309343e1b34a0363b783064e1297c0f341bf588a9753df9d7d664b8cea83cf99cd1f7d157801188b792f96d480152ffda80398b36c1891f77dfbb39455e323846e4bc043785d86ba579b028858e153a808a8423dae771712cbddeec0e1a37a0c11bfe5f9d60028c0d54eaac1491ee9eb6adf9483b8386cdc02c9b3d92e4c5d87bc5ce1c8c88182077139432fc35f8bf5c382b7d33d833c50209cd004c49be28680932e6b79c745ad6d5247fd84e03fb78a6a2f8952c3d350b565a0edf93889065ca671984aeb44323dc9dc4ee64902bb1e00e12157c4db2f6cab8ce09acb961afa48a58446a678b19f6d9edd8e6f3880cd713dec1c5003fece8c9214518e2afb7fb2b59529c71c5a50c99352bff9432ef3a34da9d4cbc13105c45c100538fcf17a891668c889b91200e0934d5b7eb2f8c6fd60712742953c36ea6b1a4fc7e1403f71077c8cb0a58fd7fc94c9eb7b26ee44b4d123918e03e064263ee7651bca931f447eccd4d8ace1662ad79bdd80f25446c2a8f3e19b3fdf94620952f79511b0eaf5d3872f4b7e5038e0628ddb50440c12e5e4eb6d57c37ce56cfab5eafa6e7c65053783b618962d07d549146e595ae4761a3912d9d7cc97f76bacf0ace92aadeee7664d50c63241dd99d8ce02cfc7aacfdca5441671be9f28a8aa7c34bde965f7878db559201c6d78e9d0f11aeff961fc4f6cbf89124e0e792e8cc7af62b130b8aa6b28ef1b7242dc651413d8b622cce56bf39c5b483074add091d6a45bd8a63576e065d8a01b9762344f1dae45dac3bfbb0ecb39ce206e75151d819dbbfb7bd95dfa8e81e2d1c0959abfb74e59683a9739ee78f2332085f52b342e1c2649db0202b9a721d52dc0ce3bfc6028e78de5182b60f5cc9a80ee7f01076f4816c3d5ffeb1874d58136d07b260f069c5e0b064df19884e50f9d55f5af31b65d57d26ae78d816408c51ad4c5cd16a83cd333594f3955799bb2e9ae6fe1faa1c927a9a7d68c544d285d177aecd253c67290b5b5c1858af9c9305b21fc1ce5d8b49b61f0bc22f746cd6a537a39970dce09c2ffaed8ce20d4b8105fd1c3bec1746e26057aec542b6e0f9aec5511fec1331aac9af4e9a70940b36963103e2e68bbf8bab41cf93434600c2b4749904c6109217e9167df1225c9e153e15e1b3f8a03b4c07b29b4e856c3258d73cd9978bef0a2fc48dc8c621ae6eca8ae14a42df29bd5b9f8b3aecf907bf2dd119f24b52a69486ea4a78286c219fa8706c488a3be95fc01fca255f76f266871f1c59d05290ccd6df0c72cce285549573cfaf0e94e58aef790c22f7d45ba34e570cf3177c396b190a9b3471b0acad51f7e9c97e6b51f44cb936b5121bce8d2689ab7a15aa1b7d06e22038f27963deaf110c31b5fb2bffdbd0f4d17441142862412cc09344142a8c5a04ec6c14edc9b22db758d23187d18518edd0a131bcb7c8f9008728912dc31ca149b2a01363dc9d9b9d842e8afc8158dff47a6f0be510bc6e84391de527e514a847aed0f6e96dabb954074a7693039c1bff2284d427538315c2df1397a69cb119463e9f1635a7c83599226e0527f20dcfadb087cfdb8da5d0f1d9114cd7d834ad5d210324ff6776dafe44853a9745436a24d2914a8b5afc9291aeebfa0ff7b918f71c2cbe58e1b4e14474bf21c2fc1439cc6bab3f95eafe7ef0b5872478ba1e7e59ccc4b13577844d288043c2914dbb368c8d9eb6c0583995736c7620fe39d65d72432578a8bab90839206a1ce2565d23e67c352527476f0f619fecb253c663bc273948c262b74b628855090a58c78f41d5452c49a57e133b8f87f3b04e1f4b0544efaf2a215b7fbb44e0bdc7bcfceff343c9ea2dcccbcf92708fb3a633d20e55c57b8fb2c58d63810d7fb3c148b4b79ba6e7cd167465e1dbd6473337cd890c01cb4d9f5d66ee7c99d38183f6df06fa0b6d0f8a413ffe189d06af350192e30fc8aa211641f0e0f9d2a76aec9906a19af17f27071194c75100e0f5edce561bafc3a55bcbb3452ad0b0c862d8e62c984879ce026817673d1dbc08bd82df6a691cc2cfb09f3c8ab8111322cbc366db71c3189ec557b4a978e1776442d10ed8433aa3e748858cc43901904f0f51a70d960b9a570406070df94a97b79721b9517f97ac09d9c5c57e27445e8fad05e96504d2695604955f8c65bc8fa8408cdb3e1014da7928cc9ba01649668c47f7c9b8889ba1402d384c659eea3e146f8c05c0887682a55b64ca3022c9cbeb208b4428578c84e181cb502650e5676f08b3d7f40704825c22c83cc4ecf660d437db95b2b6d9841cf5e182c0b5373aeaa47870379b2c1176e45710c4c074b7116d0ff12922fe2001",1]],"callback_url":"http://127.0.0.1:8080"} +"#; + + // Just dont crash + let payload: ComputeRequest = serde_json::from_str(json).unwrap(); + } +} diff --git a/packages/ciphernode/test_helpers/Cargo.toml b/crates/test-helpers/Cargo.toml similarity index 50% rename from packages/ciphernode/test_helpers/Cargo.toml rename to crates/test-helpers/Cargo.toml index a59d053bf1..590118d3ef 100644 --- a/packages/ciphernode/test_helpers/Cargo.toml +++ b/crates/test-helpers/Cargo.toml @@ -1,12 +1,15 @@ [package] -name = "test-helpers" -version.workspace = true +name = "e3-test-helpers" +version = "0.1.0" edition.workspace = true +license.workspace = true +description = "E3 - Enclave Ciphernode Test Helpers" +repository = "https://github.com/gnosisguild/enclave/crates/test-helpers" [dependencies] actix = { workspace = true } -events = { workspace = true } -fhe = { workspace = true } +e3-events = { workspace = true } +e3-fhe = { workspace = true } bincode = { workspace = true } clap = { workspace = true } fhe_rs = { workspace = true } @@ -14,4 +17,4 @@ fhe-traits = { workspace = true } rand_chacha = { workspace = true } rand = { workspace = true } tracing = { workspace = true } -commons = { path = "../../commons" } +e3-sdk = { workspace = true } diff --git a/packages/ciphernode/test_helpers/src/bin/fake_encrypt.rs b/crates/test-helpers/src/bin/fake_encrypt.rs similarity index 94% rename from packages/ciphernode/test_helpers/src/bin/fake_encrypt.rs rename to crates/test-helpers/src/bin/fake_encrypt.rs index bfe13c8a23..e44f63ce33 100644 --- a/packages/ciphernode/test_helpers/src/bin/fake_encrypt.rs +++ b/crates/test-helpers/src/bin/fake_encrypt.rs @@ -1,6 +1,6 @@ // This is a test script designed to encrypt some fixed data to a fhe public key use clap::Parser; -use commons::bfv::{build_bfv_params_arc, params::SET_2048_1032193_1}; +use e3_sdk::bfv_helpers::{build_bfv_params_arc, params::SET_2048_1032193_1}; use fhe_rs::bfv::{Encoding, Plaintext, PublicKey}; use fhe_traits::{DeserializeParametrized, FheEncoder, FheEncrypter, Serialize}; use rand::SeedableRng; diff --git a/packages/ciphernode/test_helpers/src/bin/pack_e3_params.rs b/crates/test-helpers/src/bin/pack_e3_params.rs similarity index 93% rename from packages/ciphernode/test_helpers/src/bin/pack_e3_params.rs rename to crates/test-helpers/src/bin/pack_e3_params.rs index dd4b7681e0..f1b2f9f67d 100644 --- a/packages/ciphernode/test_helpers/src/bin/pack_e3_params.rs +++ b/crates/test-helpers/src/bin/pack_e3_params.rs @@ -1,5 +1,5 @@ use clap::{command, Parser}; -use commons::bfv::{build_bfv_params_arc, encode_bfv_params}; +use e3_sdk::bfv_helpers::{build_bfv_params_arc, encode_bfv_params}; use std::{error::Error, num::ParseIntError, process}; fn parse_hex(arg: &str) -> Result { diff --git a/packages/ciphernode/test_helpers/src/lib.rs b/crates/test-helpers/src/lib.rs similarity index 100% rename from packages/ciphernode/test_helpers/src/lib.rs rename to crates/test-helpers/src/lib.rs diff --git a/packages/ciphernode/test_helpers/src/plaintext_writer.rs b/crates/test-helpers/src/plaintext_writer.rs similarity index 81% rename from packages/ciphernode/test_helpers/src/plaintext_writer.rs rename to crates/test-helpers/src/plaintext_writer.rs index 26a1110374..f759ea25a4 100644 --- a/packages/ciphernode/test_helpers/src/plaintext_writer.rs +++ b/crates/test-helpers/src/plaintext_writer.rs @@ -2,7 +2,7 @@ use std::path::PathBuf; use super::write_file_with_dirs; use actix::{Actor, Addr, Context, Handler}; -use events::{EnclaveEvent, EventBus, Subscribe}; +use e3_events::{EnclaveEvent, EventBus, Subscribe}; use tracing::info; pub struct PlaintextWriter { @@ -31,7 +31,11 @@ impl Handler for PlaintextWriter { type Result = (); fn handle(&mut self, msg: EnclaveEvent, _: &mut Self::Context) -> Self::Result { if let EnclaveEvent::PlaintextAggregated { data, .. } = msg.clone() { - let output: Vec = bincode::deserialize(&data.decrypted_output).unwrap(); + let output: Vec = data + .decrypted_output + .chunks_exact(8) + .map(|chunk| u64::from_le_bytes(chunk.try_into().unwrap())) + .collect(); info!(path = ?&self.path, "Writing Plaintext To Path"); let contents: Vec = output.iter().map(|&num| num.to_string()).collect(); diff --git a/packages/ciphernode/test_helpers/src/public_key_writer.rs b/crates/test-helpers/src/public_key_writer.rs similarity index 95% rename from packages/ciphernode/test_helpers/src/public_key_writer.rs rename to crates/test-helpers/src/public_key_writer.rs index c21df7cfc3..11a1f0f984 100644 --- a/packages/ciphernode/test_helpers/src/public_key_writer.rs +++ b/crates/test-helpers/src/public_key_writer.rs @@ -2,7 +2,7 @@ use std::path::PathBuf; use super::write_file_with_dirs; use actix::{Actor, Addr, Context, Handler}; -use events::{EnclaveEvent, EventBus, Subscribe}; +use e3_events::{EnclaveEvent, EventBus, Subscribe}; use tracing::info; pub struct PublicKeyWriter { diff --git a/packages/ciphernode/test_helpers/src/utils.rs b/crates/test-helpers/src/utils.rs similarity index 100% rename from packages/ciphernode/test_helpers/src/utils.rs rename to crates/test-helpers/src/utils.rs diff --git a/crates/tests/Cargo.toml b/crates/tests/Cargo.toml new file mode 100644 index 0000000000..c5cba634e1 --- /dev/null +++ b/crates/tests/Cargo.toml @@ -0,0 +1,36 @@ +[package] +name = "e3-tests" +version = "0.1.0" +edition.workspace = true +license.workspace = true +description = "E3 - Enclave Ciphernode Tests" +repository = "https://github.com/gnosisguild/enclave/crates/tests" + +[dependencies] +e3-net = { workspace = true } +e3-sortition = { workspace = true } +e3-events = { workspace = true } +e3-evm = { workspace = true } +e3-logger = { workspace = true } +e3-fhe = { workspace = true } +e3-crypto = { workspace = true } +e3-data = { workspace = true } +e3-keyshare = { workspace = true } +e3-aggregator = { workspace = true } +e3-request = { workspace = true } +e3-test-helpers = { workspace = true } +fhe_rs = { workspace = true } +fhe-traits = { workspace = true } +fhe-util = { workspace = true } +async-std = { workspace = true } +tokio = { workspace = true } +alloy-primitives = { workspace = true } +alloy = { workspace = true } +clap = { workspace = true } +rand_chacha = { workspace = true } +rand = { workspace = true } +bincode = { workspace = true } +base64 = { workspace = true } +actix = { workspace = true } +anyhow = { workspace = true } +e3-sdk = { workspace = true } diff --git a/packages/ciphernode/tests/src/main.rs b/crates/tests/src/main.rs similarity index 100% rename from packages/ciphernode/tests/src/main.rs rename to crates/tests/src/main.rs diff --git a/packages/ciphernode/tests/tests/test_aggregation_and_decryption.rs b/crates/tests/tests/test_aggregation_and_decryption.rs similarity index 80% rename from packages/ciphernode/tests/tests/test_aggregation_and_decryption.rs rename to crates/tests/tests/test_aggregation_and_decryption.rs index f2ed8c2d95..6b55ab18f1 100644 --- a/packages/ciphernode/tests/tests/test_aggregation_and_decryption.rs +++ b/crates/tests/tests/test_aggregation_and_decryption.rs @@ -1,33 +1,33 @@ use actix::prelude::*; -use aggregator::ext::{PlaintextAggregatorExtension, PublicKeyAggregatorExtension}; use alloy::primitives::Address; use anyhow::*; -use commons::bfv::params::SET_2048_1032193_1; -use crypto::Cipher; -use data::RepositoriesFactory; -use data::{DataStore, InMemStore}; -use e3_request::E3Router; -use events::{ +use e3_aggregator::ext::{PlaintextAggregatorExtension, PublicKeyAggregatorExtension}; +use e3_crypto::Cipher; +use e3_data::RepositoriesFactory; +use e3_data::{DataStore, InMemStore}; +use e3_events::{ CiphernodeAdded, CiphernodeSelected, CiphertextOutputPublished, DecryptionshareCreated, - E3RequestComplete, E3Requested, E3id, EnclaveEvent, ErrorCollector, EventBus, GetErrors, - GetHistory, HistoryCollector, KeyshareCreated, OrderedSet, PlaintextAggregated, + E3RequestComplete, E3Requested, E3id, EnclaveEvent, ErrorCollector, EventBus, EventBusConfig, + GetErrors, GetHistory, HistoryCollector, KeyshareCreated, OrderedSet, PlaintextAggregated, PublicKeyAggregated, ResetHistory, Seed, Shutdown, Subscribe, }; -use fhe::ext::FheExtension; -use fhe::{setup_crp_params, ParamsWithCrp, SharedRng}; +use e3_fhe::ext::FheExtension; +use e3_fhe::{setup_crp_params, ParamsWithCrp, SharedRng}; +use e3_keyshare::ext::KeyshareExtension; +use e3_logger::SimpleLogger; +use e3_net::{events::NetworkPeerEvent, NetworkManager}; +use e3_request::E3Router; +use e3_sdk::bfv_helpers::{encode_bfv_params, params::SET_2048_1032193_1}; +use e3_sortition::SortitionRepositoryFactory; +use e3_sortition::{CiphernodeSelector, Sortition}; use fhe_rs::{ bfv::{BfvParameters, Ciphertext, Encoding, Plaintext, PublicKey, SecretKey}, mbfv::{AggregateIter, CommonRandomPoly, DecryptionShare, PublicKeyShare}, }; use fhe_traits::{FheEncoder, FheEncrypter, Serialize}; -use keyshare::ext::KeyshareExtension; -use logger::SimpleLogger; -use net::{events::NetworkPeerEvent, NetworkManager}; use rand::Rng; use rand::SeedableRng; use rand_chacha::ChaCha20Rng; -use sortition::SortitionRepositoryFactory; -use sortition::{CiphernodeSelector, Sortition}; use std::{sync::Arc, time::Duration}; use tokio::sync::{broadcast, Mutex}; use tokio::{sync::mpsc, time::sleep}; @@ -130,17 +130,20 @@ fn create_crp_bytes_params( struct AddToCommittee { bus: Addr>, count: usize, + chain_id: u64, } impl AddToCommittee { - fn new(bus: &Addr>) -> Self { + fn new(bus: &Addr>, chain_id: u64) -> Self { Self { bus: bus.clone(), + chain_id, count: 0, } } async fn add(&mut self, address: &str) -> Result { let evt = EnclaveEvent::from(CiphernodeAdded { + chain_id: self.chain_id, address: address.to_owned(), index: self.count, num_nodes: self.count + 1, @@ -176,7 +179,11 @@ fn encrypt_ciphertext( raw_plaintext: Vec, ) -> Result<(Arc, Vec)> { let padded = &pad_end(&raw_plaintext, 0, 2048); - let expected = bincode::serialize(&padded)?; + let mut bytes = Vec::with_capacity(padded.len() * 8); + for value in padded { + bytes.extend_from_slice(&value.to_le_bytes()); + } + let expected = bytes; let pt = Plaintext::try_encode(&raw_plaintext, Encoding::poly(), ¶ms)?; let ciphertext = pubkey.try_encrypt(&pt, &mut ChaCha20Rng::seed_from_u64(42))?; Ok((Arc::new(ciphertext), expected)) @@ -192,8 +199,9 @@ fn pad_end(input: &[u64], pad: u64, total: usize) -> Vec { async fn add_ciphernodes( bus: &Addr>, addrs: &Vec, + chain_id: u64, ) -> Result> { - let mut committee = AddToCommittee::new(&bus); + let mut committee = AddToCommittee::new(&bus, chain_id); let mut evts: Vec = vec![]; for addr in addrs { @@ -264,11 +272,10 @@ fn get_common_setup() -> Result<( Seed, Arc, CommonRandomPoly, - E3id, Addr>, Addr>, )> { - let bus = EventBus::::new().start(); + let bus = EventBus::::new(EventBusConfig { deduplicate: true }).start(); let errors = ErrorCollector::::new().start(); let history = HistoryCollector::::new().start(); bus.do_send(Subscribe::new("*", history.clone().recipient())); @@ -279,15 +286,15 @@ fn get_common_setup() -> Result<( let (degree, plaintext_modulus, moduli) = SET_2048_1032193_1; let (crp_bytes, params) = create_crp_bytes_params(&moduli, degree, plaintext_modulus, &seed); let crpoly = CommonRandomPoly::deserialize(&crp_bytes.clone(), ¶ms)?; - let e3_id = E3id::new("1234"); - Ok((bus, rng, seed, params, crpoly, e3_id, errors, history)) + Ok((bus, rng, seed, params, crpoly, errors, history)) } #[actix::test] async fn test_public_key_aggregation_and_decryption() -> Result<()> { // Setup - let (bus, rng, seed, params, crpoly, e3_id, _, history_collector) = get_common_setup()?; + let (bus, rng, seed, params, crpoly, _, history_collector) = get_common_setup()?; + let e3_id = E3id::new("1234", 1); let cipher = Arc::new(Cipher::from_password("Don't tell anyone my secret").await?); // Setup actual ciphernodes and dispatch add events @@ -296,13 +303,12 @@ async fn test_public_key_aggregation_and_decryption() -> Result<()> { .iter() .map(|tup| tup.0.to_owned()) .collect(); - let add_events = add_ciphernodes(&bus, ð_addrs).await?; + let add_events = add_ciphernodes(&bus, ð_addrs, 1).await?; let e3_request_event = EnclaveEvent::from(E3Requested { e3_id: e3_id.clone(), threshold_m: 3, seed: seed.clone(), - params: params.to_bytes(), - src_chain_id: 1, + params: encode_bfv_params(¶ms), }); // Send the computation requested event @@ -337,7 +343,6 @@ async fn test_public_key_aggregation_and_decryption() -> Result<()> { pubkey: test_pubkey.to_bytes(), e3_id: e3_id.clone(), nodes: OrderedSet::from(eth_addrs.clone()), - src_chain_id: 1, }), ]); @@ -379,7 +384,6 @@ async fn test_public_key_aggregation_and_decryption() -> Result<()> { EnclaveEvent::from(PlaintextAggregated { e3_id: e3_id.clone(), decrypted_output: expected.clone(), - src_chain_id: 1, }), EnclaveEvent::from(E3RequestComplete { e3_id: e3_id.clone(), @@ -397,15 +401,16 @@ async fn test_public_key_aggregation_and_decryption() -> Result<()> { #[actix::test] async fn test_stopped_keyshares_retain_state() -> Result<()> { - let (bus, rng, seed, params, crpoly, e3_id, error_collector, history_collector) = - get_common_setup()?; + let (bus, rng, seed, params, crpoly, error_collector, history_collector) = get_common_setup()?; + let e3_id = E3id::new("1234", 1); + let cipher = Arc::new(Cipher::from_password("Don't tell anyone my secret").await?); let eth_addrs = create_random_eth_addrs(2); let cn1 = setup_local_ciphernode(&bus, &rng, true, ð_addrs[0], None, &cipher).await?; let cn2 = setup_local_ciphernode(&bus, &rng, true, ð_addrs[1], None, &cipher).await?; - add_ciphernodes(&bus, ð_addrs).await?; + add_ciphernodes(&bus, ð_addrs, 1).await?; // Send e3request bus.send( @@ -413,8 +418,7 @@ async fn test_stopped_keyshares_retain_state() -> Result<()> { e3_id: e3_id.clone(), threshold_m: 2, seed: seed.clone(), - params: params.to_bytes(), - src_chain_id: 1, + params: encode_bfv_params(¶ms), }) .clone(), ) @@ -490,7 +494,7 @@ async fn test_p2p_actor_forwards_events_to_network() -> Result<()> { // Setup elements in test let (cmd_tx, mut cmd_rx) = mpsc::channel(100); // Transmit byte events to the network let (event_tx, _) = broadcast::channel(100); // Receive byte events from the network - let bus = EventBus::::new().start(); + let bus = EventBus::::new(EventBusConfig { deduplicate: true }).start(); let history_collector = HistoryCollector::::new().start(); bus.do_send(Subscribe::new("*", history_collector.clone().recipient())); let event_rx = event_tx.subscribe(); @@ -508,7 +512,7 @@ async fn test_p2p_actor_forwards_events_to_network() -> Result<()> { // the event bus as if it was gossiped from the network and ended up as an external // message this simulates a rebroadcast message if let Some(msg) = match cmd { - net::events::NetworkPeerCommand::GossipPublish { data, .. } => Some(data), + e3_net::events::NetworkPeerCommand::GossipPublish { data, .. } => Some(data), _ => None, } { msgs_loop.lock().await.push(msg.clone()); @@ -522,19 +526,17 @@ async fn test_p2p_actor_forwards_events_to_network() -> Result<()> { }); let evt_1 = EnclaveEvent::from(PlaintextAggregated { - e3_id: E3id::new("1235"), + e3_id: E3id::new("1235", 1), decrypted_output: vec![1, 2, 3, 4], - src_chain_id: 1, }); let evt_2 = EnclaveEvent::from(PlaintextAggregated { - e3_id: E3id::new("1236"), + e3_id: E3id::new("1236", 1), decrypted_output: vec![1, 2, 3, 4], - src_chain_id: 1, }); let local_evt_3 = EnclaveEvent::from(CiphernodeSelected { - e3_id: E3id::new("1235"), + e3_id: E3id::new("1235", 1), threshold_m: 3, }); @@ -565,6 +567,85 @@ async fn test_p2p_actor_forwards_events_to_network() -> Result<()> { Ok(()) } +#[actix::test] +async fn test_duplicate_e3_id_with_different_chain_id() -> Result<()> { + // Setup + let (bus, rng, seed, params, crpoly, _, history_collector) = get_common_setup()?; + let cipher = Arc::new(Cipher::from_password("Don't tell anyone my secret").await?); + + // Setup actual ciphernodes and dispatch add events + let ciphernode_addrs = create_local_ciphernodes(&bus, &rng, 3, &cipher).await?; + let eth_addrs = ciphernode_addrs + .iter() + .map(|tup| tup.0.to_owned()) + .collect(); + add_ciphernodes(&bus, ð_addrs, 1).await?; + add_ciphernodes(&bus, ð_addrs, 2).await?; + + // Send the computation requested event + bus.send(EnclaveEvent::from(E3Requested { + e3_id: E3id::new("1234", 1), + threshold_m: 3, + seed: seed.clone(), + params: encode_bfv_params(¶ms), + })) + .await?; + + // Wait for events to flush through + sleep(Duration::from_millis(10)).await; + + // Generate the test shares and pubkey + let rng_test = create_shared_rng_from_u64(42); + let test_pubkey = aggregate_public_key(&generate_pk_shares( + ¶ms, &crpoly, &rng_test, ð_addrs, + )?)?; + + let history = history_collector + .send(GetHistory::::new()) + .await?; + + assert_eq!( + history.last().unwrap(), + &EnclaveEvent::from(PublicKeyAggregated { + pubkey: test_pubkey.to_bytes(), + e3_id: E3id::new("1234", 1), + nodes: OrderedSet::from(eth_addrs.clone()), + }) + ); + + history_collector.send(ResetHistory).await?; + + // Send the computation requested event + bus.send(EnclaveEvent::from(E3Requested { + e3_id: E3id::new("1234", 2), + threshold_m: 3, + seed: seed.clone(), + params: encode_bfv_params(¶ms), + })) + .await?; + + sleep(Duration::from_millis(10)).await; + + let test_pubkey = aggregate_public_key(&generate_pk_shares( + ¶ms, &crpoly, &rng_test, ð_addrs, + )?)?; + + let history = history_collector + .send(GetHistory::::new()) + .await?; + + assert_eq!( + history.last().unwrap(), + &EnclaveEvent::from(PublicKeyAggregated { + pubkey: test_pubkey.to_bytes(), + e3_id: E3id::new("1234", 2), + nodes: OrderedSet::from(eth_addrs.clone()), + }) + ); + + Ok(()) +} + #[actix::test] async fn test_p2p_actor_forwards_events_to_bus() -> Result<()> { let seed = Seed(ChaCha20Rng::seed_from_u64(123).get_seed()); @@ -572,7 +653,7 @@ async fn test_p2p_actor_forwards_events_to_bus() -> Result<()> { // Setup elements in test let (cmd_tx, _) = mpsc::channel(100); // Transmit byte events to the network let (event_tx, event_rx) = broadcast::channel(100); // Receive byte events from the network - let bus = EventBus::::new().start(); + let bus = EventBus::::new(EventBusConfig { deduplicate: true }).start(); let history_collector = HistoryCollector::::new().start(); bus.do_send(Subscribe::new("*", history_collector.clone().recipient())); @@ -580,11 +661,10 @@ async fn test_p2p_actor_forwards_events_to_bus() -> Result<()> { // Capture messages from output on msgs vec let event = EnclaveEvent::from(E3Requested { - e3_id: E3id::new("1235"), + e3_id: E3id::new("1235", 1), threshold_m: 3, seed: seed.clone(), params: vec![1, 2, 3, 4], - src_chain_id: 1, }); // lets send an event from the network diff --git a/crates/wasm/.gitignore b/crates/wasm/.gitignore new file mode 100644 index 0000000000..9b1c8b133c --- /dev/null +++ b/crates/wasm/.gitignore @@ -0,0 +1 @@ +/dist diff --git a/crates/wasm/.npmignore b/crates/wasm/.npmignore new file mode 100644 index 0000000000..d8dcb746e2 --- /dev/null +++ b/crates/wasm/.npmignore @@ -0,0 +1,6 @@ +src/ +scripts/ +*.ts +tsconfig.json +.gitignore +node_modules/ diff --git a/crates/wasm/Cargo.toml b/crates/wasm/Cargo.toml new file mode 100644 index 0000000000..39cf7306b3 --- /dev/null +++ b/crates/wasm/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "e3-wasm" +version.workspace = true +edition.workspace = true +license.workspace = true +description.workspace = true +repository.workspace = true + +[lib] +crate-type = ["cdylib"] + +[dependencies] +wasm-bindgen = "0.2.99" +e3-bfv-helpers.workspace = true +rand.workspace = true +getrandom = { version = "0.2", features = ["js"] } +fhe_rs.workspace = true +fhe-traits.workspace = true diff --git a/crates/wasm/README.md b/crates/wasm/README.md new file mode 100644 index 0000000000..f535017ac9 --- /dev/null +++ b/crates/wasm/README.md @@ -0,0 +1,32 @@ +# Wasm bundle for enclave + +Here we export wasm funcionality for consumption in typescript to enable use to share code between Rust and Typescript. + +## Usage + +This package exposes an `init` subpackage default function which should be used to universally load the wasm module instead of exporting the default loader. + +This is because in modern node there is no need for preloading however in the browser we still need to load the wasm bundle. + +##### ❌ DONT USE THE DEFAULT INIT + +```ts +// Bad! Because this uses the raw loader which doesn't exist in node contexts +import init, { encrypt_number } from "@gnosis-guild/e3-wasm"; +``` + +##### ✅ DO USE THE EXPORTED SUBMODULE + +```ts +// Good! Use the universal loader +import init from "@gnosis-guild/e3-wasm/init"; +import { encrypt_number } from "@gnosis-guild/e3-wasm"; + +export async function encryptNumber( + data: bigint, + public_key: Uint8Array, +): Promise { + await init(); + return encrypt_number(data, public_key); +} +``` diff --git a/crates/wasm/init.d.ts b/crates/wasm/init.d.ts new file mode 100644 index 0000000000..b386967696 --- /dev/null +++ b/crates/wasm/init.d.ts @@ -0,0 +1,3 @@ +type Params = { module_or_path?: any }; +declare function init(param?: Params): Promise; +export default init; diff --git a/crates/wasm/init_node.js b/crates/wasm/init_node.js new file mode 100644 index 0000000000..ba586cf322 --- /dev/null +++ b/crates/wasm/init_node.js @@ -0,0 +1,3 @@ +export default async function init() { + // Node does not need to be loaded async +} diff --git a/crates/wasm/init_web.js b/crates/wasm/init_web.js new file mode 100644 index 0000000000..dce893170f --- /dev/null +++ b/crates/wasm/init_web.js @@ -0,0 +1,4 @@ +import init from "./dist/web/e3_wasm.js"; +export default async function init(initParams) { + return await init(initParams); +} diff --git a/crates/wasm/package.json b/crates/wasm/package.json new file mode 100644 index 0000000000..d86ed6e344 --- /dev/null +++ b/crates/wasm/package.json @@ -0,0 +1,53 @@ +{ + "name": "@gnosis-guild/e3-wasm", + "private": false, + "version": "0.0.6-test", + "description": "Wasm modules for enclave.", + "main": "index.js", + "files": [ + "dist/", + "dist/**/*" + ], + "scripts": { + "build": "./scripts/build.sh", + "prerelease": "pnpm build", + "release": "pnpm publish --access=public" + }, + "exports": { + ".": { + "node": { + "types": "./dist/nodejs/e3_wasm.d.ts", + "default": "./dist/nodejs/e3_wasm.js" + }, + "browser": { + "types": "./dist/web/e3_wasm.d.ts", + "default": "./dist/web/e3_wasm.js" + }, + "default": { + "types": "./dist/web/e3_wasm.d.ts", + "default": "./dist/web/e3_wasm.js" + } + }, + "./init": { + "node": { + "types": "./init.d.ts", + "default": "./init_node.js" + }, + "browser": { + "types": "./init.d.ts", + "default": "./init_web.js" + }, + "default": { + "types": "./init.d.ts", + "default": "./init_web.js" + } + } + }, + "keywords": [], + "author": { + "name": "gnosisguild", + "url": "https://github.com/gnosisguild" + }, + "license": "LGPL-3.0-only", + "packageManager": "pnpm@10.7.1+sha512.2d92c86b7928dc8284f53494fb4201f983da65f0fb4f0d40baafa5cf628fa31dae3e5968f12466f17df7e97310e30f343a648baea1b9b350685dafafffdf5808" +} diff --git a/crates/wasm/scripts/build.sh b/crates/wasm/scripts/build.sh new file mode 100755 index 0000000000..a1ab3209d1 --- /dev/null +++ b/crates/wasm/scripts/build.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +pnpm wasm-pack build --target web --out-dir dist/web +pnpm wasm-pack build --target nodejs --out-dir dist/nodejs diff --git a/crates/wasm/src/lib.rs b/crates/wasm/src/lib.rs new file mode 100644 index 0000000000..0c4ae6fd6b --- /dev/null +++ b/crates/wasm/src/lib.rs @@ -0,0 +1,10 @@ +use e3_bfv_helpers::client::bfv_encrypt_u64; +use rand::thread_rng; +use wasm_bindgen::prelude::*; + +#[wasm_bindgen] +pub fn encrypt_number(data: u64, public_key: Vec) -> Result, JsValue> { + let encrypted_data = bfv_encrypt_u64(data, public_key, thread_rng()) + .map_err(|e| JsValue::from_str(&format!("{}", e)))?; + Ok(encrypted_data) +} diff --git a/deploy/build.sh b/deploy/build.sh index a68aa2b229..d1abece205 100755 --- a/deploy/build.sh +++ b/deploy/build.sh @@ -9,4 +9,4 @@ time docker buildx build \ --cache-from=type=local,src=/tmp/docker-cache \ --cache-to=type=local,dest=/tmp/docker-cache \ --load \ - -t ${1:-ghcr.io/gnosisguild/ciphernode} -f ./packages/ciphernode/Dockerfile . + -t ${1:-ghcr.io/gnosisguild/ciphernode} -f ./crates/Dockerfile . diff --git a/deploy/local/contracts.sh b/deploy/local/contracts.sh new file mode 100755 index 0000000000..bcfa1fa321 --- /dev/null +++ b/deploy/local/contracts.sh @@ -0,0 +1,27 @@ +# !/bin/bash + +# Install the enclave binary +cargo install --path ./crates/cli --bin enclave -f + +# Deploy Contacts +(cd packages/evm && rm -rf deployments/localhost && pnpm deploy:mocks --network localhost) + +# Deploy CRISP Contracts +(cd examples/CRISP && ETH_WALLET_PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 FOUNDRY_PROFILE=local forge script --rpc-url http://localhost:8545 --broadcast deploy/Deploy.s.sol) + +# Add Ciphernodes to Enclave +sleep 2 # wait for enclave to start + +# Get the addresses of the ciphernodes +CN1=0xbDA5747bFD65F08deb54cb465eB87D40e51B197E +CN2=0xdD2FD4581271e230360230F9337D5c0430Bf44C0 +CN3=0x2546BcD3c84621e976D8185a91A922aE77ECEc30 + +# Add the ciphernodes to the enclave +pnpm ciphernode:add --ciphernode-address "$CN1" --network "localhost" +pnpm ciphernode:add --ciphernode-address "$CN2" --network "localhost" +pnpm ciphernode:add --ciphernode-address "$CN3" --network "localhost" + + +# Delete local DB +(rm -rf ./examples/CRISP/apps/server/database) diff --git a/deploy/local/nodes.sh b/deploy/local/nodes.sh new file mode 100755 index 0000000000..0027b15f6e --- /dev/null +++ b/deploy/local/nodes.sh @@ -0,0 +1,10 @@ +# !/bin/bash + +# Install the enclave binary +cargo install --path ./crates/cli --bin enclave -f + +concurrently \ + --names "ANVIL,NODES" \ + --prefix-colors "blue,yellow" \ + "anvil" \ + "cd examples/CRISP && enclave wallet set --name ag --private-key "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" && enclave nodes up -v" \ No newline at end of file diff --git a/deploy/local/start.sh b/deploy/local/start.sh new file mode 100755 index 0000000000..ac0d9ed346 --- /dev/null +++ b/deploy/local/start.sh @@ -0,0 +1,132 @@ +#!/bin/bash + +set -e + +echo "🚀 Starting CRISP Development Environment..." + +# Function to check if a command exists +command_exists() { + command -v "$1" >/dev/null 2>&1 +} + +# Check dependencies +echo "📋 Checking dependencies..." + +if ! command_exists "cargo"; then + echo "❌ Rust/Cargo is required but not installed" + exit 1 +fi + +if ! command_exists "pnpm"; then + echo "❌ pnpm is required but not installed" + exit 1 +fi + +if ! command_exists "concurrently"; then + echo "❌ concurrently is required but not installed" + echo "Install with: npm install -g concurrently" + exit 1 +fi + +if ! command_exists "anvil"; then + echo "❌ Foundry/Anvil is required but not installed" + exit 1 +fi + +echo "✅ All dependencies found" + +# Install the enclave binary +echo "🔧 Installing Enclave CLI..." +cargo install --path ./crates/cli --bin enclave -f + +# Function to wait for a service to be ready +wait_for_service() { + local url=$1 + local service_name=$2 + local max_attempts=30 + local attempt=1 + + echo "⏳ Waiting for $service_name to be ready..." + + while [ $attempt -le $max_attempts ]; do + if curl -s "$url" >/dev/null 2>&1; then + echo "✅ $service_name is ready!" + return 0 + fi + echo " Attempt $attempt/$max_attempts - $service_name not ready yet..." + sleep 2 + attempt=$((attempt + 1)) + done + + echo "❌ $service_name failed to start after $max_attempts attempts" + return 1 +} + +# Function to deploy contracts +deploy_contracts() { + echo "📄 Deploying contracts..." + + # Deploy Enclave contracts + echo " Deploying Enclave contracts..." + (cd packages/evm && rm -rf deployments/localhost && pnpm deploy:mocks --network localhost) + + # Deploy CRISP contracts + echo " Deploying CRISP contracts..." + (cd examples/CRISP && ETH_WALLET_PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 FOUNDRY_PROFILE=local forge script --rpc-url http://localhost:8545 --broadcast deploy/Deploy.s.sol) + + # Wait a bit for nodes to be ready + sleep 5 + + # Add ciphernodes to the registry + echo " Adding ciphernodes to registry..." + CN1=0xbDA5747bFD65F08deb54cb465eB87D40e51B197E + CN2=0xdD2FD4581271e230360230F9337D5c0430Bf44C0 + CN3=0x2546BcD3c84621e976D8185a91A922aE77ECEc30 + + pnpm ciphernode:add --ciphernode-address "$CN1" --network "localhost" + pnpm ciphernode:add --ciphernode-address "$CN2" --network "localhost" + pnpm ciphernode:add --ciphernode-address "$CN3" --network "localhost" + + # Clean up local database + echo " Cleaning up local database..." + rm -rf ./examples/CRISP/apps/server/database + + echo "✅ Contracts deployed successfully!" +} + +# Start infrastructure (anvil + ciphernodes) in background +echo "🏗️ Starting infrastructure..." +concurrently \ + --names "ANVIL,NODES" \ + --prefix-colors "blue,yellow" \ + "anvil" \ + "cd examples/CRISP && enclave wallet set --name ag --private-key '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80' && enclave nodes up -v" & + +INFRA_PID=$! + +# Wait for Anvil to be ready +wait_for_service "http://localhost:8545" "Anvil" + +# Deploy contracts +deploy_contracts + +# Wait a moment for everything to stabilize +echo "⏳ Waiting for infrastructure to stabilize..." +sleep 3 + +# Install CRISP dependencies +echo "📦 Installing CRISP dependencies..." +(cd examples/CRISP/apps/client && pnpm install) + +echo "🎯 Starting CRISP applications..." + +# Start all CRISP applications +concurrently \ + --names "CLIENT,SERVER,PROGRAM" \ + --prefix-colors "green,yellow,magenta" \ + "cd examples/CRISP/apps/client && pnpm dev" \ + "cd examples/CRISP/apps/server && cargo run --bin server" \ + "cd examples/CRISP/apps/program && cargo run" + +# This will run until interrupted +echo "🚨 CRISP development environment stopped" \ No newline at end of file diff --git a/docs/pages/CRISP/_meta.json b/docs/pages/CRISP/_meta.json index 7300cb711f..60f4927cd8 100644 --- a/docs/pages/CRISP/_meta.json +++ b/docs/pages/CRISP/_meta.json @@ -8,4 +8,4 @@ "running-e3": { "title": "Running an E3 Program" } -} +} \ No newline at end of file diff --git a/docs/pages/CRISP/introduction.mdx b/docs/pages/CRISP/introduction.mdx index 2a90aa7403..e0c3245e0b 100644 --- a/docs/pages/CRISP/introduction.mdx +++ b/docs/pages/CRISP/introduction.mdx @@ -1,60 +1,124 @@ --- title: 'CRISP Introduction' -description: '' +description: 'Coercion-Resistant Impartial Selection Protocol - A complete E3 program example' --- # Introduction to CRISP + CRISP (Coercion-Resistant Impartial Selection Protocol) is a secure protocol for digital decision-making, leveraging fully homomorphic encryption (FHE) and distributed threshold cryptography (DTC) to enable verifiable secret ballots. Built with Enclave, CRISP safeguards democratic systems and decision-making applications against coercion, manipulation, and other vulnerabilities. -This project is a comprehensive example of an E3 Program, designed to demonstrate secure and impartial decision-making processes. It includes a full-stack implementation with a front-end, back-end, smart contracts, and zkVM components, providing a robust framework for developers to explore and extend. +This project serves as a comprehensive example of an E3 Program, demonstrating secure and impartial decision-making processes with a modern Hardhat-based architecture. It showcases a complete full-stack implementation including frontend, backend, smart contracts, and zkVM components. ## Why CRISP? -Open ballots are known to produce suboptimal outcomes, exposing participants to bribery and coercion. CRISP mitigates these risks and other vulnerabilities with secret, receipt-free ballots, fostering secure and impartial decision-making environments. +Open ballots are known to produce suboptimal outcomes, exposing participants to bribery and coercion. CRISP mitigates these risks through: + +- **Secret ballots**: Votes remain encrypted throughout the process +- **Receipt-free voting**: No proof of vote can be generated for coercion +- **Verifiable results**: Zero-knowledge proofs ensure computation integrity +- **Distributed trust**: No single point of failure or control + +## Project Structure +CRISP follows a modern Hardhat-based structure with clear separation of concerns: -## CRISP Overview -![CRISP Project Structure](/crisp-overview-light.png) +``` +CRISP/ +├── apps/ # Application components +│ ├── client/ # React frontend application +│ ├── server/ # Rust coordination server +│ ├── program/ # RISC Zero computation program +│ └── wasm-crypto/ # WebAssembly crypto utilities +├── contracts/ # Smart contracts (Solidity) +├── circuits/ # Noir circuits for ZK proofs +├── scripts/ # Development and utility scripts +├── enclave.config.yaml # Ciphernode configuration +``` --- -### **Client** -The Client is a React application that serves as the front-end interface for users to interact with the CRISP protocol. It is organized into the following components: +### **Client Application** (`/apps/client`) -- `/libs/wasm/pkg/`: A WebAssembly library package responsible for encrypting the user's vote before sending it to the server. -- `/public/`: Static assets such as images and stylesheets. -- `/src/`: React components and the source code for the application. -- Configuration files and README for project setup and documentation. +The client is a React application built with TypeScript that provides a voting interface: + +- Wallet connection with MetaMask and other wallets +- Vote encryption using WebAssembly-based FHE encryption before submission +- Noir Zero-knowledge proof generation for vote validation +- Real-time updates on voting status and results --- -### **Server** -The Server is an Actix backend that handles the core functionality of the CRISP protocol: +### **Coordination Server** (`/apps/server`) -- **Voting:** Provides a secure interface for users to cast their votes. -- **Blockchain Event Listener:** Listens for and responds to events from the Enclave smart contracts. -- **Compute Provider Invocation:** Calls the Compute Provider to execute the Secure Process inside the RISC Zero zkVM (Zero-Knowledge Virtual Machine) to perform Fully Homomorphic Encryption (FHE) computations. -- **Result Publishing:** Publishes the computed results back to the blockchain for transparency and immutability. +The server is a Rust-based coordination service that manages the E3 lifecycle: -Aside from the core functionality, the Server module also includes a CLI that can be used to request a new voting round, submit a vote, and publish results. +- Listens to blockchain events and coordinates protocol progression +- Collects encrypted votes from the Smart Contract +- Triggers FHE computations after the voting round is closed. +- Publishes results back to the blockchain +- RESTful API for client interactions --- -### **RISC Zero** -CRISP utilizes the RISC Zero zkVM to run its Secure Process and perform FHE computations. This module includes: +### **ZK Program** (`/apps/program`) + +The core computation logic written in Rust for zkVM: -- The Secure Process, written in Rust, that performs encrypted computations. - - `/apps`: The host application that is responsible for interfacing with the Client and the Server. - - `/core`: The common logic shared between the host and the guest program. - - `/methods`: The Secure Process that is executed inside the zkVM. -- Verifier contracts that ensure the integrity and correctness of the computations. +- Performs computations on encrypted votes +- Counts votes without decrypting individual ballots +- Creates proofs of correct computation --- -### **Compute Provider** -A helper library designed to interface with the RISC Zero Compute Provider for executing secure computations. It can be used to run any Secure Process within a Compute Provider of your choice (e.g., SP1, Jolt, etc.). +### **WebAssembly Crypto** (`/apps/wasm-crypto`) + +High-performance cryptographic operations compiled to WebAssembly: + +- Client-side fully homomorphic encryption +- ZK Circuit input generation for Noir proofs +- Optimized for browser execution --- -### **Web Rust** -The Web Rust module contains the logic for encrypting data using an FHE public key. Compiled to WebAssembly, it is used by the Client to securely encrypt the user's vote before sending it to the Server for further processing. +### **Smart Contracts** (`/contracts`) + +Solidity contracts implementing the E3 program interface: + +#### **CRISPProgram.sol** +Main E3 program contract implementing the `IE3Program` interface: +- `validate()`: Validates voting parameters and setup +- `verify()`: Verifies zkVM proofs of computation + +#### **CRISPInputValidator.sol** +Handles vote validation and zero-knowledge proof verification: +- Validates encrypted vote format +- Verifies voter eligibility proofs +- Ensures vote uniqueness + +#### **CRISPVerifier.sol** +Noir verifier for proof of correct encryption: +- Verifies if the vote was encrypted correctly +- Verifies if the vote is valid + +#### **CRISPPolicy.sol** +Manages voting policies and governance: +- Defines voting rules and constraints +- Manages voter registration + +#### **CRISPChecker.sol** +Additional verification and checking logic: +- Vote format validation +- Eligibility checking +- Result verification + +--- + +## Next Steps + +To get started with CRISP: + +1. **[Setup](/CRISP/setup)**: Install dependencies and configure your environment +2. **[Running E3](/CRISP/running-e3)**: Deploy and run the complete CRISP protocol +3. **Study the code**: Examine the implementation for your own E3 programs + +CRISP demonstrates the full potential of E3 programs for privacy-preserving applications, providing a complete reference implementation for developers building with Enclave. diff --git a/docs/pages/CRISP/running-e3.mdx b/docs/pages/CRISP/running-e3.mdx index 76139cd42b..612122a6e0 100644 --- a/docs/pages/CRISP/running-e3.mdx +++ b/docs/pages/CRISP/running-e3.mdx @@ -3,132 +3,134 @@ title: Running an E3 Program description: '' --- +import { Steps } from 'nextra/components' + # Running an E3 Program -In this section, we will go through all the steps to run an E3 Program using CRISP. -We will run a single voting round of CRISP and do the following: + +In this section, we will go through all the steps to run an E3 Program using CRISP. We will run a complete voting round of CRISP and do the following: + +- Start the infrastructure (nodes and contracts) +- Start the CRISP applications (client, server, program) - Request an E3 Voting Round -- Submit a vote -- Compute the result -- Verify the result +- Submit votes through the web interface +- Compute and verify results Please make sure you have followed the [CRISP Setup](/CRISP/setup) guide before proceeding. + -## Ciphernodes Setup +### Start Infrastructure -### Running Ciphernodes -In the root `enclave` directory, you have to run the Ciphernodes. To run four Ciphernodes, use the provided script [`run_ciphernodes.sh`](https://github.com/gnosisguild/CRISP/blob/main/packages/local_testnet/run_ciphernodes.sh). Ensure you run the script from the root `enclave` directory to set the environment variables correctly: +First, ensure you have the infrastructure running. If you haven't already, complete the setup: + +**Terminal 1: Start Anvil** ```sh -RUST_LOG=info ./run_aggregator.sh +anvil ``` -### Running the Aggregator -After starting the Ciphernodes, run the aggregator with the script [`run_aggregator.sh`](https://github.com/gnosisguild/enclave/blob/main/evm/run_aggregator.sh): - +**Terminal 2: Start Ciphernodes** ```sh -RUST_LOG=info ./run_aggregator.sh +cd examples/CRISP +enclave nodes up -v ``` -### Adding Ciphernodes to the Registry -Once the aggregator is running, you can add the Ciphernodes to the registry with the script [`add_ciphernodes.sh`](https://github.com/gnosisguild/CRISP/blob/main/packages/local_testnet/add_ciphernodes.sh): +Make sure contracts are deployed and ciphernodes are added to the registry as described in the setup guide. -```sh -./add_ciphernodes.sh -``` +### Start the Client Application + +**Terminal 3: Client** + +Navigate to the client directory and start the React application: -After running the script, you should see the following output in the aggregator terminal: ```sh -[AGG]: READY -[AGG]: CiphernodeAdded(0x2546BcD3c84621e976D8185a91A922aE77ECEc30) -[AGG]: CiphernodeAdded(0xbDA5747bFD65F08deb54cb465eB87D40e51B197E) -[AGG]: CiphernodeAdded(0xdD2FD4581271e230360230F9337D5c0430Bf44C0) -[AGG]: CiphernodeAdded(0x8626f6940E2eb28930eFb4CeF49B2d1F2C9C1199) +cd examples/CRISP/apps/client +pnpm dev ``` +The client application will start on `http://localhost:3000`. -## Running the CRISP Server +### Start the Server Application -To run the CRISP Server, navigate to the `CRISP/packages/server` directory and execute the following command: -> **Note:** Make sure you have set the environment variables correctly before running the server. +**Terminal 4: Server** + +Navigate to the server directory and start the backend server: ```sh +cd examples/CRISP/apps/server cargo run --bin server ``` -## Interacting with CRISP via CLI +The server will start and begin listening for blockchain events. -Once the Server is running, you can interact with the CRISP by using the CLI. +### Start the Program Server -### Requesting a New Round +**Terminal 5: Program** +Navigate to the program directory and start the program server: -1. Run the CLI: -```sh -cargo run --bin cli -``` -You should see the following output: ```sh -? Enclave (EEEE): Please choose the private execution environment you would like to run! › -❯ CRISP: Voting Protocol (ETH) - More Coming Soon! +cd examples/CRISP/apps/program +cargo run ``` -2. Select `CRISP: Voting Protocol (ETH)` from the menu. +This runs the RISC Zero program server that handles secure computations. + +### Initialize a New Voting Round + +**Terminal 6: CLI** + +Navigate to the server directory and start the CLI: + ```sh -❯ Initialize new E3 round. - Activate an E3 round. - Participate in an E3 round. - Decrypt Ciphertext & Publish Results +cd examples/CRISP/apps/server +cargo run --bin cli ``` -3. To initiate a new CRISP voting round, choose the option `Initialize new CRISP round`. +Follow these steps in the CLI: + +1. Select `CRISP: Voting Protocol (ETH)` from the menu +2. Choose `Initialize new E3 round` to start a new voting round + +You should see output similar to: ```sh -✔ Initialize new E3 round. [2024-10-22 11:56:11] [commands.rs:42] - Starting new CRISP round! [2024-10-22 11:56:11] [commands.rs:46] - Enabling E3 Program... [2024-10-22 11:56:11] [commands.rs:50] - E3 Program enabled. TxHash: 0xa391a4cd2dcc59f4bc6dd1f5ed1c78006dbba4556ea633f4b6a53e2271538682 [2024-10-22 11:56:11] [commands.rs:74] - E3 request sent. TxHash: 0xe7998b9748e3526f6ca992c9bb498beabe4f387b02240a23d0f42a2386d3c305 ``` -Ensure all services are running correctly and that components are communicating as expected before starting a new CRISP round. +### Set Up MetaMask +To interact with the client application, you need to configure MetaMask: -### Submitting a Vote +1. Open MetaMask in your browser +2. Add the Anvil private key to your wallet: + ``` + 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 + ``` +3. Connect to the local Anvil network: + - Network Name: Anvil Local + - RPC URL: `http://localhost:8545` + - Chain ID: `31337` + - Currency Symbol: `ETH` -1. Run the CLI: -```sh -cargo run --bin cli -``` +### Submit Votes via Web Interface -2. Select the option `Participate in an E3 round`. -```sh -✔ Participate in an E3 round. -``` +1. Navigate to `http://localhost:3000` in your browser +2. Connect your MetaMask wallet +3. You should see the active voting round +4. Submit your vote by selecting your choice and confirming the transaction -3. Select the round you would like to participate in. -```sh -? Enter CRISP round ID. -❯ 0 -``` -4. Submit your vote by entering the vote in the prompt. -```sh -? Please select your voting option. -❯ Abstain - Yes - No -``` +### Monitor the Process -After submitting your vote, you should see the following output: -```sh -✔ Enclave (EEEE): Please choose the private execution environment you would like to run! · CRISP: Voting Protocol (ETH) -✔ Create a new CRISP round or participate in an existing round. · Participate in an E3 round. -✔ Enter CRISP round ID. · 0 -✔ Please select your voting option. · Vote yes. -[2024-10-22 11:58:58] [commands.rs:129] - Vote broadcast. TxHash: 0x389466265c543845f050aa931472840eb1d3f67276d1650aede77ce07426e98e -``` +You can monitor the entire process through the various terminal outputs: -### Computing the Result -After the voting period has ended, the server will compute the result and publish the ciphertext. +**Server logs will show:** +- Vote submissions being received +- Computation starting when the voting period ends +- Results being computed and published + +**Example server output:** ```sh [2024-10-22 11:59:12] [handlers.rs:95] - Vote Count: 1 [2024-10-22 11:59:12] [handlers.rs:101] - Starting computation for E3: 0 @@ -138,8 +140,7 @@ Prove function execution time: 2 minutes and 37 seconds [2024-10-22 12:01:49] [handlers.rs:111] - Publishing ciphertext... ``` -### Decrypting the Result -The Ciphernodes will capture the published ciphertext, decrypt it, and publish the plaintext. +**Ciphernode logs will show:** ```sh INFO Extracted log from evm sending now. INFO evt=CiphertextOutputPublished(e3_id: 0) e3_id=0 @@ -149,10 +150,7 @@ INFO evt=E3RequestComplete(e3_id: 0) INFO Plaintext published. tx=0x320dd95358cc86c2a709b6fec0c6865b43fa063cb61dfcb8a748005d4886f040 ``` -### Verifying the Result - -The server captures the plaintext, decodes it, and displays it. - +**Final result logs:** ```sh [2024-10-22 12:01:49] [handlers.rs:171] - Handling PlaintextOutputPublished event... [2024-10-22 12:01:49] [handlers.rs:181] - Vote Count: 1 @@ -161,5 +159,34 @@ The server captures the plaintext, decodes it, and displays it. [2024-10-22 12:01:49] [handlers.rs:187] - PlaintextOutputPublished event handled. ``` + + +## Understanding the Process + +The CRISP voting process involves several key steps: + +1. **Initialization**: A new E3 round is created on the blockchain +2. **Vote Submission**: Users submit encrypted votes through the web interface +3. **Computation**: After the voting period, RISC Zero computes the results using FHE +4. **Decryption**: Ciphernodes collaboratively decrypt the results +5. **Publication**: Final results are published to the blockchain and displayed + +## Troubleshooting + +- **Ensure all terminals remain open** during the voting process +- **MetaMask connection issues**: Check that you're connected to the correct network (Chain ID: 31337) +- **Transaction failures**: Verify you have sufficient ETH balance from the Anvil faucet +- **Server errors**: Monitor the server logs for detailed error messages +- **Ciphernode issues**: Ensure all ciphernode processes are running and connected + +## Next Steps + +Once you've successfully run a voting round, you can: + +- **Experiment with different voting scenarios**: Try multiple votes and different options +- **Modify voting parameters**: Adjust the configuration for different use cases +- **Explore the codebase**: Understand the implementation details for your own E3 programs +- **Deploy to testnet**: Move beyond local development to public testnets + ![Result](/poll-result.png) diff --git a/docs/pages/CRISP/setup.mdx b/docs/pages/CRISP/setup.mdx index c930ec55c9..855a3b2d7b 100644 --- a/docs/pages/CRISP/setup.mdx +++ b/docs/pages/CRISP/setup.mdx @@ -7,12 +7,52 @@ import { Steps } from 'nextra/components' # Getting Started with CRISP -This guide will walk you through the steps to set up and run CRISP locally. CRISP is a complete example of an E3 Program, and setting it up involves installing dependencies and deploying both the RISC Zero contracts and Enclave contracts. +This guide will walk you through the steps to set up and run CRISP locally. CRISP is a complete example of an E3 Program, built with a modern Hardhat-based architecture that includes smart contracts, frontend applications, and secure computation components. The setup includes the following: -- RISC Zero contracts located in the `CRISP/packages/risc0` directory. -- Ciphernodes (Enclave, Registry, etc.) located in the `evm` directory of the [Enclave Repo](https://github.com/gnosisguild/enclave). +- **CRISP contracts**: Smart contracts located in the `contracts/` directory +- **Applications**: Frontend, server, and computation programs in the `apps/` directory +- **Ciphernodes**: Distributed nodes managed through the Enclave CLI +- **Development environment**: Hardhat + Foundry hybrid setup + +## Quick Start with Docker (Recommended) + +The fastest way to get CRISP running is using the Docker development environment: + +```sh +cd examples/CRISP + +# Setup and build the development environment +pnpm dev:setup + +# Start all services (Anvil, Ciphernodes, Applications) +pnpm dev:up +``` + +This will: +- Build all necessary Docker containers +- Start Anvil (local blockchain) +- Deploy all contracts +- Start the ciphernode network +- Launch all CRISP applications + +**Available Docker Commands:** +- `pnpm dev:setup` - Build the development containers +- `pnpm dev:up` - Start all services +- `pnpm dev:down` - Stop and clean up all services +- `pnpm dev:build` - Rebuild containers +- `pnpm cli` - Invoke the Server CLI inside the Docker Container + +Once everything is running, you can: +1. Run `pnpm cli` to start a new E3 Round. +2. Open `http://localhost:3000` for the client interface +3. Configure MetaMask with the Anvil network (see [MetaMask Setup](#metamask-setup) below) +4. Start voting! + +## Manual Setup + +If you prefer to set up CRISP manually or want to understand each component: ## Prerequisites @@ -23,9 +63,34 @@ Before getting started, ensure you have the following tools installed: - **RISC Zero toolchain** (for RISC Zero program development) - **Node.js** (JavaScript runtime for client-side dependencies) - **Anvil** (local Ethereum node) +- **Enclave CLI** (for managing ciphernodes) ## Install Dependencies +### Install Enclave CLI + +The recommended way to install the Enclave CLI is using our installer script: + +```sh +curl -fsSL https://raw.githubusercontent.com/gnosisguild/enclave/main/install | bash +``` + +This will install `enclaveup`, which can then install the Enclave CLI: + +```sh +enclaveup install +``` + +For more installation options and details, see the [Installation Guide](/installation). + +**Alternative: Build from Source** + +If you prefer to build from source: + +```sh +cargo install --path ./crates/cli --bin enclave -f +``` + ### Install Rust and Foundry First, install Rust and Foundry. After installation, restart your terminal. @@ -60,30 +125,24 @@ At this point, you should have all the necessary tools to develop and deploy app ## Setting Up the Client -The Client is a simple React application used to interact with the CRISP Server. Follow these steps to set it up locally: +The Client is a React application used to interact with the CRISP Server. Follow these steps to set it up locally: -1. Clone the repository: +1. Navigate to the client directory: ```sh - git clone https://github.com/gnosisguild/CRISP.git + cd examples/CRISP/apps/client ``` -2. Navigate to the `client` directory: +2. Install dependencies: ```sh - cd CRISP/packages/client + pnpm install ``` -3. Install dependencies: +3. Start the development server: ```sh - yarn install - ``` - -4. Start the development server: - - ```sh - yarn dev + pnpm dev ``` ## Setting Up the CRISP Server @@ -102,21 +161,22 @@ The CRISP server setup involves several components. This guide will walk you thr Keep this terminal open and running. Open a new terminal for the next steps. -### Deploying the Enclave Contracts +### Deploy the Enclave Contracts -1. Clone the [Enclave Repo](https://github.com/gnosisguild/enclave): +1. Clone the [Enclave Repository](https://github.com/gnosisguild/enclave) if you haven't already: ```sh git clone https://github.com/gnosisguild/enclave.git cd enclave ``` -2. Install the dependencies and Compile the contracts: +2. Install the dependencies: ```sh - yarn && yarn compile + pnpm install ``` -3. Navigate to the `evm` directory: + +3. Navigate to the `packages/evm` directory: ```sh cd packages/evm @@ -125,102 +185,106 @@ Keep this terminal open and running. Open a new terminal for the next steps. 4. Deploy the Enclave contracts on the local testnet: ```sh - yarn deploy:mocks --network localhost + rm -rf deployments/localhost + pnpm deploy:mocks --network localhost ``` After deployment, take note of the addresses for the following contracts: -- Enclave -- Ciphernode Registry -- Naive Registry Filter -- Mock Input Validator +- **Enclave**: Main protocol contract +- **Ciphernode Registry**: Registry for compute nodes +- **Filter Registry**: Registry for computation filters +- **Mock Input Validator**: Development input validation -### Deploying the E3 Program and Verifier RISC Zero Contract +### Deploy the CRISP Contracts -1. Set up the environment variables by by exporting the Bonsai API Key: +1. Navigate to the CRISP directory: + + ```sh + cd examples/CRISP + ``` - > **_Note:_** _You will need a Bonsai API Key. You can request one [here](https://bonsai.xyz/apply)._ +2. Set up the environment variables by exporting the ETH wallet private key (Anvil's default private key): ```sh - export BONSAI_API_KEY="your_api_key" - export BONSAI_API_URL="your_api_url" + export ETH_WALLET_PRIVATE_KEY="0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" ``` -2. Navigate to the `CRISP/packages/evm_base` directory and install the dependencies: +3. **Optional**: Set up Bonsai for faster proving (requires API key): + + > **_Note:_** _You can request a Bonsai API Key [here](https://bonsai.xyz/apply)._ ```sh - cd CRISP/packages/evm_base - yarn install + export BONSAI_API_KEY="your_api_key" + export BONSAI_API_URL="your_api_url" ``` -3. Navigate to the `CRISP/packages/risc0` directory and build the contracts: +4. Deploy the CRISP contracts using Foundry: ```sh - cd CRISP/packages/risc0 - forge build + FOUNDRY_PROFILE=local forge script --rpc-url http://localhost:8545 --broadcast deploy/Deploy.s.sol ``` -4. In the `risc0/script` directory, update the `config.toml` with the deployed contract addresses: +Make sure to take note of the **CRISP Program Contract Address**, as this will serve as the **E3 Program Address**. + +### Set Up Ciphernodes - ```toml - [profile.custom] - chainId = 31337 - riscZeroVerifierAddress = "0x0000000000000000000000000000000000000000" - enclaveAddress = "your_enclave_address" - inputValidatorAddress = "your_input_validator_address" +Start the ciphernodes using the Enclave CLI: + +1. Set up the aggregator wallet: + + ```sh + enclave wallet set --name ag --private-key "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" ``` -4. Export the ETH wallet private key (Anvil’s default private key): +2. Start the ciphernode network: ```sh - export ETH_WALLET_PRIVATE_KEY="0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" + enclave nodes up -v ``` -5. Deploy the contracts: +3. Add ciphernodes to the registry: ```sh - forge script --rpc-url http://localhost:8545 --broadcast script/Deploy.s.sol + # Navigate back to the Enclave repository + cd ../../packages/evm + + # Add the ciphernodes + pnpm ciphernode:add --ciphernode-address "0xbDA5747bFD65F08deb54cb465eB87D40e51B197E" --network "localhost" + pnpm ciphernode:add --ciphernode-address "0xdD2FD4581271e230360230F9337D5c0430Bf44C0" --network "localhost" + pnpm ciphernode:add --ciphernode-address "0x2546BcD3c84621e976D8185a91A922aE77ECEc30" --network "localhost" ``` -Make sure to take note of the **CRISPRisc0 Contract Address**, as this will serve as the **E3 Program Address**. +### Configuration -### Set Up Environment Variables +The CRISP project uses an `enclave.config.yaml` file that defines: -Create a `.env` file in the `CRISP/packages/server` directory and fill in the values you noted during the previous steps: +- **Chains**: Network configuration (Hardhat/Anvil) +- **Contract addresses**: Enclave, Ciphernode Registry, Filter Registry +- **Nodes**: Configuration for ciphernodes (cn1, cn2, cn3) and aggregator (ag) -```sh -CRON_API_KEY=your_cron_api_key # Optional for e3_cron binary - -PRIVATE_KEY=your_private_key -ENCLAVE_SERVER_URL=http://0.0.0.0:4000 -HTTP_RPC_URL=http://localhost:8545 -WS_RPC_URL=ws://localhost:8545 -CHAIN_ID=your_chain_id - -ENCLAVE_ADDRESS=your_enclave_contract_address -E3_PROGRAM_ADDRESS=your_e3_program_address # CRISPRisc0 Contract Address -CIPHERNODE_REGISTRY_ADDRESS=your_ciphernode_registry_address -NAIVE_REGISTRY_FILTER_ADDRESS=your_naive_registry_filter_address - -# E3 Config -E3_WINDOW_SIZE=600 -E3_THRESHOLD_MIN=1 -E3_THRESHOLD_MAX=2 -E3_DURATION=600 - -# E3 Compute Provider Config -E3_COMPUTE_PROVIDER_NAME="RISC0" -E3_COMPUTE_PROVIDER_PARALLEL=false -E3_COMPUTE_PROVIDER_BATCH_SIZE=4 # Must be a power of 2 -``` +The default configuration is already set up for local development with Anvil. -## Overview +## MetaMask Setup + +To interact with CRISP through the web interface, configure MetaMask: + +1. **Add the Anvil private key** to your wallet: + ``` + 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 + ``` + +2. **Add the local Anvil network**: + - Network Name: `Anvil Local` + - RPC URL: `http://localhost:8545` + - Chain ID: `31337` + - Currency Symbol: `ETH` + +3. **Connect to the application** at `http://localhost:3000` + -If you followed the steps correctly, you should now have: +## Next Steps -- A local testnet running with Anvil -- Enclave contracts deployed -- RISC Zero E3 Program and Verifier contracts deployed -- CRISP Server set up with appropriate environment variables \ No newline at end of file +Once you have completed the setup, you can proceed to [Running an E3 Program](/CRISP/running-e3) to learn how to interact with CRISP and run voting rounds. \ No newline at end of file diff --git a/docs/pages/_meta.json b/docs/pages/_meta.json index fff010cdb1..fddb92457b 100644 --- a/docs/pages/_meta.json +++ b/docs/pages/_meta.json @@ -22,6 +22,19 @@ "building-with-enclave": { "title": "Building with Enclave" }, + "-- TUTORIAL": { + "type": "separator", + "title": "Tutorial" + }, + "installation": { + "title": "Installation" + }, + "quick-start": { + "title": "Quick Start" + }, + "hello-world-tutorial": { + "title": "Hello World" + }, "-- BUILD AN E3": { "type": "separator", "title": "BUILD AN E3 Program" @@ -61,4 +74,4 @@ "whitepaper": { "title": "White Paper" } -} +} \ No newline at end of file diff --git a/docs/pages/computation-flow.mdx b/docs/pages/computation-flow.mdx index 1fab789e29..cd4ade37b7 100644 --- a/docs/pages/computation-flow.mdx +++ b/docs/pages/computation-flow.mdx @@ -26,17 +26,17 @@ Providers, or other network participant. 4. **Submit the Request**: Call `request` on the Enclave contract to publish the request and initialize the E3. -```solidity -function request( - address filter, - uint32[2] calldata threshold, - uint256[2] calldata startWindow, - uint256 duration, - IE3Program e3Program, - bytes memory e3ProgramParams, - bytes memory computeProviderParams - ) external payable returns (uint256 e3Id, E3 memory e3) -``` + ```solidity + function request( + address filter, + uint32[2] calldata threshold, + uint256[2] calldata startWindow, + uint256 duration, + IE3Program e3Program, + bytes memory e3ProgramParams, + bytes memory computeProviderParams + ) external payable returns (uint256 e3Id, E3 memory e3) + ``` ### Phase 2: Node Selection @@ -57,19 +57,15 @@ During this phase, Data Providers — who may include individual users, applicat ensure they are valid for the requested E3. Some of these proofs are generic (e.g., proof of valid encryption) while others will be specific to your application. 3. **Submit Inputs**: Both encrypted data and ZKPs are submitted to the Enclave contract, which will - call the `validate` function on your E3P smart contract. The input hash is then added to a Merkle + call the `validate` function on your E3P InputValidator smart contract. The input hash is then added to a Merkle tree, the root of which can later be used to anchor proofs of correct execution of your E3 Program. ```solidity function validate( - uint256 e3Id, - uint256 seed, - bytes calldata e3ProgramParams, - bytes calldata computeProviderParams - ) - external - returns (bytes32 encryptionSchemeId, IInputValidator inputValidator); + address sender, + bytes memory data + ) external returns (bytes memory input); ``` ### Phase 4: Execution @@ -84,10 +80,10 @@ publishes the encrypted output back to Enclave contract. ```solidity function publishCiphertextOutput( - uint256 e3Id, - bytes memory ciphertextOutput, - bytes memory proof - ) external returns (bool success); + uint256 e3Id, + bytes memory ciphertextOutput, + bytes memory proof + ) external returns (bool success); ``` ### Phase 5: Decryption @@ -99,3 +95,9 @@ Enclave contract's `getE3()` function. ```solidity function getE3(uint256 e3Id) external view returns (E3 memory e3); ``` + +or by listening to the `PlaintextOutputPublished` event. + +```solidity +event PlaintextOutputPublished(uint256 indexed e3Id, bytes plaintextOutput); +``` diff --git a/docs/pages/compute-provider.mdx b/docs/pages/compute-provider.mdx index ee24681148..e2ee3c0479 100644 --- a/docs/pages/compute-provider.mdx +++ b/docs/pages/compute-provider.mdx @@ -46,7 +46,7 @@ Select a CP that suits your needs. Options include: - **Language Support**: Choose a CP that supports the programming languages you're comfortable with. Enclave provides a -[Compute Provider package](https://github.com/gnosisguild/CRISP/tree/main/packages/compute_provider) +[Compute Provider package](https://github.com/gnosisguild/CRISP/tree/main/crates/compute-provider) to simplify the integration, letting you focus on computation logic. More details can be found in the [Writing the Secure Process](./write-secure-program.mdx) guide. diff --git a/docs/pages/hello-world-tutorial.mdx b/docs/pages/hello-world-tutorial.mdx new file mode 100644 index 0000000000..d50b42672b --- /dev/null +++ b/docs/pages/hello-world-tutorial.mdx @@ -0,0 +1,200 @@ +--- +title: 'Hello World Tutorial' +description: 'Build your first E3 program from scratch with step-by-step explanations' +--- + +# Hello World Tutorial + +This tutorial walks you through building your first E3 program from scratch. You'll learn how each component works and how they interact to create a secure, encrypted computation. + +> Make sure to complete the [Quick Start](/quick-start) guide first to get familiar with the basic workflow before diving into this detailed tutorial. + +## What We're Building + +We'll create a simple E3 program that: +1. **Accepts** two encrypted numbers from users +2. **Computes** their sum using Fully Homomorphic Encryption +3. **Returns** the encrypted result without ever decrypting the inputs + +## Prerequisites + +Before starting, ensure you have: +- [Enclave CLI installed](/installation) +- Basic knowledge of Rust and TypeScript +- Rust, Docker, Node.js, and pnpm installed + +## Step 1: Project Setup + +Create a new E3 project: + +```bash +enclave init hello-world-e3 +cd hello-world-e3 +``` + +Let's examine the generated project structure: + +``` +hello-world-e3/ +├── program/ # FHE computation logic (Rust) +├── contracts/ # Smart contracts (Solidity) +├── client/ # Frontend application (React/TypeScript) +├── server/ # Coordination server (TypeScript) +├── enclave.config.yaml # Enclave configuration +└── README.md # Project documentation +``` + +## Step 2: Understanding the FHE Program + +The heart of your E3 program is in `./program/src/lib.rs`. Let's examine the default implementation: + +```rust +use e3_bfv_helpers::decode_bfv_params_arc; +use e3_compute_provider::FHEInputs; +use fhe_rs::bfv::Ciphertext; +use fhe_traits::{DeserializeParametrized, Serialize}; + +/// Implementation of the CiphertextProcessor function +pub fn fhe_processor(fhe_inputs: &FHEInputs) -> Vec { + // Decode the FHE parameters + let params = decode_bfv_params_arc(&fhe_inputs.params); + + // Start with zero (encrypted) + let mut sum = Ciphertext::zero(¶ms); + + // Add each encrypted input to the sum + for ciphertext_bytes in &fhe_inputs.ciphertexts { + let ciphertext = Ciphertext::from_bytes(&ciphertext_bytes.0, ¶ms).unwrap(); + sum += &ciphertext; // Homomorphic addition + } + + // Return the encrypted result + sum.to_bytes() +} +``` + +### Key Concepts: + +- **`FHEInputs`**: Contains encrypted data and parameters +- **`Ciphertext`**: Encrypted values that can be computed on +- **Homomorphic operations**: `+=` works on encrypted data +- **No decryption**: We never see the actual values + +## Step 3: Modifying the Computation + +Let's create a more interesting computation. Replace the content of `./program/src/lib.rs`: + +```rust +use e3_bfv_helpers::decode_bfv_params_arc; +use e3_compute_provider::FHEInputs; +use fhe_rs::bfv::Ciphertext; +use fhe_traits::{DeserializeParametrized, Serialize}; + +/// Compute: (a + b) * 2 +pub fn fhe_processor(fhe_inputs: &FHEInputs) -> Vec { + let params = decode_bfv_params_arc(&fhe_inputs.params); + + // Get the two input ciphertexts + if fhe_inputs.ciphertexts.len() != 2 { + panic!("Expected exactly 2 inputs"); + } + + let a = Ciphertext::from_bytes(&fhe_inputs.ciphertexts[0].0, ¶ms).unwrap(); + let b = Ciphertext::from_bytes(&fhe_inputs.ciphertexts[1].0, ¶ms).unwrap(); + + // Compute (a + b) * 2 homomorphically + let sum = &a + &b; // Add encrypted numbers + let double = &sum + ∑ // Multiply by 2 (via addition) + + double.to_bytes() +} +``` + +## Step 4: Understanding the Configuration + +The `enclave.config.yaml` file configures your development environment: + +```yaml +chains: + - name: "hardhat" + rpc_url: "ws://localhost:8545" + contracts: + e3_program: "0x9A676e781A523b5d0C0e43731313A708CB607508" + # ... other contract addresses + +nodes: + cn1: # Ciphernode 1 + address: "0xbDA5747bFD65F08deb54cb465eB87D40e51B197E" + quic_port: 9201 + autonetkey: true + autopassword: true + # ... more nodes +``` + +### Key Components: + +- **Chains**: Blockchain networks your E3 program uses +- **Contracts**: Deployed smart contract addresses +- **Nodes**: Ciphernodes that coordinate the E3 process + +## Step 5: Build and Test + +Compile your modified program: + +```bash +enclave program compile +``` + +Start the development environment: + +```bash +pnpm dev:all +``` + +## Step 6: Understanding the Client + +The client application (in `./client/`) handles: + +1. **Encryption**: User inputs → encrypted ciphertexts +2. **Submission**: Publish encrypted data to the Enclave contract +3. **Result retrieval**: Get the decrypted result from the Enclave contract + +## Step 7: Test Your Program + +1. Open [http://localhost:3000](http://localhost:3000) +2. Enter two numbers (e.g., 5 and 3) +3. Submit the request +4. Watch the result: `(5 + 3) * 2 = 16` + +The computation happened entirely on encrypted data! + +## Step 8: Exploring Further + +Now that you understand the basics, try these modifications: + +### Change the Computation + +```rust +// Compute a² + b² +let a_squared = &a * &a; +let b_squared = &b * &b; +let result = &a_squared + &b_squared; +``` + +### Add More Inputs + +Modify your program to accept 3 or more encrypted inputs. + +### Update the UI + +Customize the client application in `./client/src/` to match your computation. + +Happy building with Enclave! 🚀 + +## Next Steps + +Ready to build more complex E3 programs? Continue with: + +1. [Writing the Secure Process](/write-secure-program) - Advanced FHE programming +2. [Writing the E3 Program Contract](/write-e3-contract) - Smart contract integration +3. [Setting Up the Server](/setting-up-server) - Custom coordination logic diff --git a/docs/pages/installation.mdx b/docs/pages/installation.mdx new file mode 100644 index 0000000000..41fac9e033 --- /dev/null +++ b/docs/pages/installation.mdx @@ -0,0 +1,104 @@ +--- +title: 'Installation' +description: 'Install and set up the Enclave CLI' +--- + +# Installation + +This guide covers how to install the Enclave CLI and get your development environment set up. + +## Prerequisites + +Before installing Enclave, make sure you have the following dependencies: + +- [Rust](https://www.rust-lang.org/tools/install) + +## Quick Install (Recommended) + +The easiest way to install the Enclave CLI is using our installer script: + +```bash +curl -fsSL https://raw.githubusercontent.com/gnosisguild/enclave/main/install | bash +``` + +Or if you prefer `wget`: + +```bash +wget -qO- https://raw.githubusercontent.com/gnosisguild/enclave/main/install | bash +``` + +This script will download and install `enclaveup`, which is the standalone installer for the Enclave CLI. + +## Using enclaveup + +Once you have `enclaveup` installed, you can manage your Enclave CLI installation: + +### Install the Enclave CLI + +```bash +# Install to ~/.local/bin (default) +enclaveup install + +# Install to /usr/local/bin (requires sudo) +enclaveup install --system +``` + +Running `enclaveup install` will install the latest version of the Enclave CLI. +See `enclaveup --help` for more options. + +## Manual Installation + +If you prefer to install manually: + +1. Visit the [releases page](https://github.com/gnosisguild/enclave/releases) +2. Download the appropriate binary for your platform: + - Linux: `enclave-linux-x86_64.tar.gz` + - macOS: `enclave-macos-aarch64.tar.gz` +3. Extract the binary and place it in your PATH (e.g., `~/.local/bin` or `/usr/local/bin`) +4. Make sure the binary is executable: `chmod +x enclave` + +## Platform Support + +| Platform | Architecture | Status | +|----------|-------------|---------| +| Linux | x86_64 | ✅ Native binary | +| macOS | Apple Silicon (M1/M2/M3) | ✅ Native binary | +| macOS | Intel | ✅ Via Rosetta 2 | + +*Note: Intel Macs automatically run Apple Silicon binaries through Rosetta 2 translation.* + + +### Building from Source + +If you need to build `enclave` from source: +1. Ensure you have Rust installed (using [rustup](https://rustup.rs/)) +2. Clone the repository + +```bash +git clone https://github.com/gnosisguild/enclave.git +cd enclave +``` + +3. Build the binary + +```bash +cargo install --path ./crates/cli --bin enclave -f +``` + +## Verify Installation + +After installation, verify that the Enclave CLI is working correctly: + +```bash +enclave --help +``` + +You should see the help information for the Enclave CLI. + +## Next Steps + +Once you have the Enclave CLI installed, you're ready to: + +1. [Run your first E3 program](/quick-start) +2. [Learn about E3 concepts](/what-is-e3) +3. [Explore the architecture](/architecture-overview) \ No newline at end of file diff --git a/docs/pages/putting-it-together.mdx b/docs/pages/putting-it-together.mdx index 39b476a19a..38bf69ceb7 100644 --- a/docs/pages/putting-it-together.mdx +++ b/docs/pages/putting-it-together.mdx @@ -195,8 +195,8 @@ By following this guide, you should now have a solid understanding of Enclave an ## Additional Resources - **Enclave GitHub Repository**: [https://github.com/gnosisguild/enclave](https://github.com/gnosisguild/enclave) -- **CRISP GitHub Repository**: [https://github.com/gnosisguild/crisp](https://github.com/gnosisguild/crisp) -- **Enclave Starter Template**: [https://github.com/gnosisguild/enclave-starter-template](https://github.com/gnosisguild/enclave-starter-template) +- **CRISP GitHub Repository**: [https://github.com/gnosisguild/enclave](https://github.com/gnosisguild/enclave/tree/main/examples/CRISP) +- **Enclave Quick Start**: [Quick Start](/quick-start) - **RISC Zero Documentation**: [https://www.risczero.com](https://www.risczero.com) - **Compute Provider Package**: Check the Enclave repository for the Compute Provider package and examples. - **FHE Libraries**: Explore libraries like `fhe.rs` for Rust to handle homomorphic encryption. diff --git a/docs/pages/quick-start.mdx b/docs/pages/quick-start.mdx new file mode 100644 index 0000000000..2c8941bd41 --- /dev/null +++ b/docs/pages/quick-start.mdx @@ -0,0 +1,106 @@ +--- +title: 'Quick Start' +description: 'Get up and running with your first E3 program' +--- + +# Quick Start + +Get your first E3 program running on the Enclave Protocol! This guide assumes you have the [Enclave CLI installed](/installation). + +## Prerequisites Check + +Make sure you have the required software installed: + +```bash +# Check versions +docker --version # Should be 25.0.6+ +node --version # Should be 22.10.0+ +pnpm --version # Should be 10.7.1+ +rustc --version # Should be 1.85.1+ +enclave --version # Confirm CLI is installed +``` + +## 1. Create Your Project + +Generate a new E3 program from the default template: + +```bash +enclave init my-first-e3 +cd my-first-e3 +``` + +This creates a complete E3 project with: +- **FHE computation logic** (`./program/`) +- **Smart contracts** (`./contracts/`) +- **Client application** (`./client/`) +- **Coordination server** (`./server/`) +- **Configuration** (`enclave.config.yaml`) + +## 2. Compile Your E3 Program + +First, compile your E3 program to build the Risc0 zkvm image: + +```bash +enclave program compile +``` + +This builds the Risc0 zkvm image that will be deployed on the blockchain and used for verification of the final proof. + +## 3. Start the Development Environment + +Launch all services with one command: + +```bash +pnpm dev:all +``` + +This starts: +- Local Ethereum network (Hardhat) +- Deploys all the smart contracts to the local network +- Multiple ciphernodes for FHE processing +- TypeScript coordination server +- FHE program server +- Frontend client application + +**Wait for all services to start** (usually 30-60 seconds). + +## 4. Access Your Application + +1. Open your browser to [http://localhost:3000](http://localhost:3000) +2. Configure MetaMask for local development: + - Network: `http://localhost:8545` + - Chain ID: `31337` + +## 5. Test the FHE Computation + +The default template includes a simple addition program that: + +1. **Encrypts** two numbers on the client +2. **Computes** their sum using FHE (without decrypting) +3. **Returns** the encrypted result +4. **Decrypts** and displays the result + +Try it: +- Input two numbers in the web interface +- Click "Submit" +- Watch the encrypted computation happen! + +## What Just Happened? + +You successfully ran a **Fully Homomorphic Encryption** computation where: + +- Your inputs were encrypted before leaving the browser +- The computation happened on encrypted data +- The result was computed without exposing your private inputs +- All coordination was handled by the Enclave protocol + +## Next Steps + +Now that you have a working E3 program: + +1. **Explore the code**: Check out `./program/src/lib.rs` to see the FHE computation +2. **Modify the computation**: Try changing the addition to multiplication +3. **Update the UI**: Customize the client in `./client/src/` +4. **Deploy**: Learn about production deployment + +Ready to dive deeper? Continue with our [Hello World Tutorial](/hello-world-tutorial) for a step-by-step breakdown of building E3 programs from scratch. \ No newline at end of file diff --git a/docs/pages/setting-up-server.mdx b/docs/pages/setting-up-server.mdx index 8ad7f423af..e8a891710a 100644 --- a/docs/pages/setting-up-server.mdx +++ b/docs/pages/setting-up-server.mdx @@ -1,89 +1,362 @@ --- -title: 'Setting Up An E3 Nudging Server' -description: '' +title: 'Setting Up the Client and Server' +description: 'Build client applications and coordination servers using the Enclave SDK' --- -# Setting Up an E3 Nudging Server +# Setting Up the Client and Server -The end-to-end flow of an Encrypted Execution Environment (E3) involves multiple phases, each of which can be nudged along by anyone. However, to reduce delays and ensure a smooth progression of processes in your application, running a dedicated **E3 Nudging Server** can greatly enhance reliability and quality of service. While the protocol itself is decentralized and open to all, application developers are encouraged to manage this infrastructure for a more seamless experience. +Building E3 applications involves creating client-side interfaces for users and coordination logic +for managing the E3 lifecycle. The Enclave SDK provides powerful TypeScript and React tools to +streamline this development process. -## **What is an E3 Nudging Server?** +## Overview -An **E3 Nudging Server** is a process designed to ensure the seamless progression of the Enclave protocol. While any party can theoretically nudge an E3 forward, certain critical operations require dependable infratructure for efficient execution, such as: +Modern E3 applications typically consist of: -1. Event Monitoring: Listening for blockchain events. -2. Input Aggregation: Collecting and managing inputs for computations. -3. Computation Triggers: Running secure processes in a zkVM or similar environments. -4. Result Publication: Verifying and submitting outputs to the Enclave smart contracts. +1. **Client Application**: User interface with wallet integration and FHE encryption +2. **Coordination Logic**: Server-side or client-side coordination of E3 processes +3. **Event Management**: Real-time monitoring of E3 lifecycle events +4. **Contract Interactions**: Type-safe smart contract communication -By providing an automated and secure solution, the E3 Nudging Server reduces manual overhead for developers, ensures process continuity, and minimizes delays. +The Enclave SDK handles much of this complexity for you, providing: -### **Why Use an E3 Nudging Server?** +- Type-safe contract interactions +- Real-time event listening +- React hooks for easy frontend integration +- Comprehensive error handling -Enclave relies on external actions to progress through its phases. Without an E3 Nudging Serverr, the following challenges may arise: +## Setting Up a Client Application -- Missed Protocol Events: Key actions like **Key Publish** or **Input Publish** might go unnoticed, stalling the process. -- Increased Developer Overhead: Manual event handling and protocol nudging require custom infrastructure. -- Reduced Reliability: Disruptions in protocol execution can lead to delays or errors, impacting user trust. +### Install the SDK -The E3 Nudging Server ensures: +For TypeScript/JavaScript applications: -- Seamless event handling and input collection. -- Reliable computation triggers in secure environments (e.g., zkVM). -- Automatic publication of verified results to maintain decentralized integrity +```bash +pnpm add @gnosis-guild/enclave +``` -## **Building on Enclave with the Starter Template** +For React applications: -To simplify development, the **Enclave Starter Template** provides a pre-built foundation for developers to interact with the -protocol, write secure zkVM-based computations, and deploy reliable infrastructure. Template features: +```bash +pnpm add @gnosis-guild/enclave @gnosis-guild/enclave-react +``` -1. **Server Implementation**: An E3 Nudging Server for automating protocol progression. -2. **zkVM Framework**: Based on - [RISC Zero Foundry Template](https://github.com/risc0/risc0-foundry-template), enabling secure, verifiable off-chain computations. +### Basic TypeScript Client -### **How to Use the Starter Template** +Create a type-safe client that can interact with Enclave contracts: -#### **1. Setting Up the Server** +```typescript +import { EnclaveSDK, EnclaveEventType } from '@gnosis-guild/enclave-sdk' +import { createPublicClient, createWalletClient, http, custom } from 'viem' -The E3 Nudging Server ensures the protocol progresses by listening for events, gathering inputs, and triggering the next steps. +// Initialize clients +const publicClient = createPublicClient({ + transport: http('http://localhost:8545'), // Your RPC URL +}) -- Clone and build the server: +const walletClient = createWalletClient({ + transport: custom(window.ethereum), +}) - ```bash - git clone https://github.com/gnosisguild/enclave-starter-template.git - cd packages/server - cargo build - ``` +// Create SDK instance +const sdk = new EnclaveSDK({ + publicClient, + walletClient, + contracts: { + enclave: '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0', + ciphernodeRegistry: '0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9', + }, + chainId: 31337, // Hardhat local network +}) -- Implement custom logic if necessary: - - Event handlers can be extended to perform application-specific tasks. - - Routes and models can be customized to match your application's requirements. +// Initialize the SDK +await sdk.initialize() -#### **2. Writing E3 Programs** +// Request a new E3 computation +const hash = await sdk.requestE3({ + filter: '0x0000000000000000000000000000000000000000', + threshold: [2, 3], + startWindow: [BigInt(0), BigInt(100)], + duration: BigInt(3600), + e3Program: '0x9A676e781A523b5d0C0e43731313A708CB607508', + e3ProgramParams: '0x', + computeProviderParams: '0x', +}) -The E3 Nudging Server interacts with the E3 Program (zkVM logic) to securely process inputs and publish -verified outputs. Refer to the [**Building an E3 Program**](./write-secure-program.mdx) section of -the documentation for detailed instructions on: +console.log('E3 requested with hash:', hash) +``` -- Writing the Secure Process logic. -- Implementing guest programs. -- Deploying the associated smart contracts. +### React Application with Hooks -> **Note:** The zkVM framework follows the -> [RISC Zero Foundry Template](https://github.com/risc0/risc0-foundry-template). Developers can use -> the guide linked above to understand the nuances of RISC Zero development. +For React applications, use the `useEnclaveSDK` hook for seamless integration: -#### **3. Configuring the Protocol Interaction** +```typescript +import React, { useEffect, useState } from 'react'; +import { useEnclaveSDK } from '@gnosis-guild/enclave-react'; -Use the E3 Nudging Server to automate protocol nudging by: +function E3Dashboard() { + const [e3Data, setE3Data] = useState(null); -- Monitoring events such as **Key Publish** or **E3 Round Activiation**. -- Managing custom blockchain interaction logic under the `blockchain` directory. + const { + sdk, + isInitialized, + error, + requestE3, + onEnclaveEvent, + off, + EnclaveEventType + } = useEnclaveSDK({ + autoConnect: true, + contracts: { + enclave: '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0', + ciphernodeRegistry: '0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9' + }, + chainId: 31337 + }); -#### **4. Deploying Smart Contracts** + // Listen to E3 events + useEffect(() => { + if (!isInitialized) return; -The E3 Nudging Server publishes computation results to the blockchain using smart contracts. Use the template's pre-built -contracts as a starting point: + const handleE3Requested = (event) => { + console.log('New E3 request:', event.data); + setE3Data(event.data); + }; -- `CRISPRisc0.sol`: Verifies zkVM proofs and updates the state. -- Extend or modify contracts as needed to fit your application's logic. + const handleE3Activated = (event) => { + console.log('E3 activated:', event.data); + }; + + onEnclaveEvent(EnclaveEventType.E3_REQUESTED, handleE3Requested); + onEnclaveEvent(EnclaveEventType.E3_ACTIVATED, handleE3Activated); + + return () => { + off(EnclaveEventType.E3_REQUESTED, handleE3Requested); + off(EnclaveEventType.E3_ACTIVATED, handleE3Activated); + }; + }, [isInitialized, onEnclaveEvent, off, EnclaveEventType]); + + const handleRequestE3 = async () => { + try { + const hash = await requestE3({ + filter: '0x0000000000000000000000000000000000000000', + threshold: [2, 3], + startWindow: [BigInt(Date.now()), BigInt(Date.now() + 300000)], + duration: BigInt(1800), + e3Program: '0x9A676e781A523b5d0C0e43731313A708CB607508', + e3ProgramParams: '0x', + computeProviderParams: '0x', + }); + console.log('E3 requested:', hash); + } catch (error) { + console.error('Failed to request E3:', error); + } + }; + + if (error) { + return

Error: {error}
; + } + + if (!isInitialized) { + return
Connecting to Enclave...
; + } + + return ( +
+

E3 Dashboard

+ + {e3Data && ( +
+

Latest E3 Request

+
{JSON.stringify(e3Data, null, 2)}
+
+ )} +
+ ); +} + +export default E3Dashboard; +``` + +## Event-Driven Architecture + +The SDK provides comprehensive event handling for the entire E3 lifecycle: + +### Enclave Events + +```typescript +// Listen to key E3 lifecycle events +sdk.onEnclaveEvent(EnclaveEventType.E3_REQUESTED, (event) => { + console.log('New E3 computation requested:', event.data) +}) + +sdk.onEnclaveEvent(EnclaveEventType.E3_ACTIVATED, (event) => { + console.log('E3 environment activated:', event.data) +}) + +sdk.onEnclaveEvent(EnclaveEventType.INPUT_PUBLISHED, (event) => { + console.log('Input data published:', event.data) +}) + +sdk.onEnclaveEvent(EnclaveEventType.CIPHERTEXT_OUTPUT_PUBLISHED, (event) => { + console.log('Computation result available:', event.data) +}) +``` + +### Registry Events + +```typescript +import { RegistryEventType } from '@gnosis-guild/enclave/sdk' + +// Monitor ciphernode network changes +sdk.onEnclaveEvent(RegistryEventType.CIPHERNODE_ADDED, (event) => { + console.log('New ciphernode joined:', event.data) +}) + +sdk.onEnclaveEvent(RegistryEventType.COMMITTEE_PUBLISHED, (event) => { + console.log('Committee selection complete:', event.data) +}) +``` + +## Server-Side Coordination + +For server-side applications, you can create automated coordination services: + +```typescript +import { EnclaveSDK } from '@gnosis-guild/enclave-sdk' +import { createPublicClient, createWalletClient, http } from 'viem' +import { privateKeyToAccount } from 'viem/accounts' + +class E3CoordinationServer { + private sdk: EnclaveSDK + + constructor(privateKey: string, rpcUrl: string) { + const account = privateKeyToAccount(privateKey as `0x${string}`) + + const publicClient = createPublicClient({ + transport: http(rpcUrl), + }) + + const walletClient = createWalletClient({ + account, + transport: http(rpcUrl), + }) + + this.sdk = new EnclaveSDK({ + publicClient, + walletClient, + contracts: { + enclave: '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0', + ciphernodeRegistry: '0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9', + }, + }) + } + + async start() { + await this.sdk.initialize() + this.setupEventListeners() + console.log('E3 Coordination Server started') + } + + private setupEventListeners() { + // Auto-activate E3s when they become available + this.sdk.onEnclaveEvent(EnclaveEventType.E3_REQUESTED, async (event) => { + const { e3Id } = event.data + console.log(`Auto-activating E3 ${e3Id}`) + + try { + // In a real implementation, you'd generate/retrieve the public key + const publicKey = '0x...' // Your FHE public key + await this.sdk.activateE3(e3Id, publicKey) + } catch (error) { + console.error(`Failed to activate E3 ${e3Id}:`, error) + } + }) + + // Handle input aggregation + this.sdk.onEnclaveEvent(EnclaveEventType.INPUT_PUBLISHED, async (event) => { + console.log('Input published:', event.data) + // Implement your input aggregation logic here + }) + } + + async stop() { + this.sdk.cleanup() + console.log('E3 Coordination Server stopped') + } +} + +// Usage +const server = new E3CoordinationServer(process.env.PRIVATE_KEY!, process.env.RPC_URL!) + +server.start() +``` + +## Error Handling + +The SDK includes comprehensive error handling: + +```typescript +import { SDKError } from '@gnosis-guild/enclave-sdk' + +try { + await sdk.requestE3(params) +} catch (error) { + if (error instanceof SDKError) { + console.error(`SDK Error (${error.code}): ${error.message}`) + + switch (error.code) { + case 'MISSING_PUBLIC_CLIENT': + // Handle missing client + break + case 'INVALID_ADDRESS': + // Handle invalid contract address + break + case 'TRANSACTION_FAILED': + // Handle transaction failure + break + default: + console.error('Unknown SDK error:', error) + } + } else { + console.error('Unexpected error:', error) + } +} +``` + +## Configuration Management + +### Development Configuration + +For local development with the default template: + +```typescript +const devConfig = { + contracts: { + enclave: '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0', + ciphernodeRegistry: '0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9', + }, + chainId: 31337, + rpcUrl: 'http://localhost:8545', +} +``` + +### Production Configuration + +For production deployments: + +```typescript +const prodConfig = { + contracts: { + enclave: process.env.ENCLAVE_CONTRACT_ADDRESS!, + ciphernodeRegistry: process.env.REGISTRY_CONTRACT_ADDRESS!, + }, + chainId: 1, // Mainnet + rpcUrl: process.env.RPC_URL!, +} +``` + +The Enclave SDK abstracts away much of the complexity, allowing you to focus on your application's +unique business logic while ensuring robust, type-safe interaction with the Enclave protocol. diff --git a/docs/pages/write-secure-program.mdx b/docs/pages/write-secure-program.mdx index 0649573c1e..34b60cc5bd 100644 --- a/docs/pages/write-secure-program.mdx +++ b/docs/pages/write-secure-program.mdx @@ -8,7 +8,7 @@ description: '' The Secure Process is the core FHE logic for your E3 Program. It runs within your selected Compute Provider's environment, ultimately producing and publishing a ciphertext output that is decrypted by your Ciphernode Committee. To facilitate this, Enclave provides a -[Compute Provider package](https://github.com/gnosisguild/enclave/tree/main/packages/compute_provider) +[Compute Provider package](https://github.com/gnosisguild/enclave/tree/main/crates/compute-provider) to simplify writing the Secure Process with any Compute Provider. ### Using the Compute Provider Package @@ -30,7 +30,7 @@ To simplify integration with Enclave, use the provided Compute Provider package. **Example:** ```rust -use compute_provider::{ComputeInput, ComputeManager, ComputeProvider, ComputeResult, FHEInputs}; +use e3_compute_provider::{ComputeInput, ComputeManager, ComputeProvider, ComputeResult, FHEInputs}; // Implement ComputeProvider trait for your chosen provider pub struct Risc0Provider; diff --git a/docs/public/crisp-overview-light.png b/docs/public/crisp-overview-light.png deleted file mode 100644 index 2b0097dcf9..0000000000 Binary files a/docs/public/crisp-overview-light.png and /dev/null differ diff --git a/examples/CRISP/Dockerfile b/examples/CRISP/Dockerfile index 5298537f4e..a5d6ed7287 100644 --- a/examples/CRISP/Dockerfile +++ b/examples/CRISP/Dockerfile @@ -1,68 +1,88 @@ -FROM ubuntu:22.04 +# ──────────────────────────────────────────────────────────────────────────────── +# Base image & build-time versions +# ──────────────────────────────────────────────────────────────────────────────── +FROM ubuntu:24.04 -# Set environment variables -ENV RUST_VERSION=1.85.0 \ - COREPACK_ENABLE_DOWNLOAD_PROMPT=0 +ARG RISCZERO_VERSION=2.1.0 +ARG CPP_VERSION=2024.1.5 +ARG RUST_VERSION=1.85.0 -# Install dependencies -RUN apt-get update && apt-get install -y \ - build-essential \ - cmake \ - curl \ - git \ - libssl-dev \ - pkg-config \ - python3 \ - python3-pip \ - sudo \ - wget \ - && rm -rf /var/lib/apt/lists/* +# ──────────────────────────────────────────────────────────────────────────────── +# OS packages +# ──────────────────────────────────────────────────────────────────────────────── +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential cmake curl git libssl-dev pkg-config \ + python3 python3-pip sudo wget jq \ + && rm -rf /var/lib/apt/lists/* +# Node 18 / 22 + pnpm RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \ - && apt-get install -y nodejs \ - && npm install -g corepack concurrently wait-on \ - && corepack enable \ - && corepack prepare pnpm@10.7.1 --activate + && apt-get install -y nodejs \ + && npm install -g corepack concurrently wait-on \ + && corepack enable \ + && corepack prepare pnpm@10.7.1 --activate -# Create user -ENV USERNAME=devuser +# ──────────────────────────────────────────────────────────────────────────────── +# Non-root user (skip if it already exists) +# ──────────────────────────────────────────────────────────────────────────────── +ARG USERNAME=ubuntu ARG USER_UID=1000 -ARG USER_GID=1000 +ARG USER_GID=100 # use any free GID you like -RUN groupadd --gid $USER_GID $USERNAME \ - && useradd --uid $USER_UID --gid $USER_GID -m $USERNAME \ - && echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \ - && chmod 0440 /etc/sudoers.d/$USERNAME +RUN set -eux; \ + if ! id -u "${USERNAME}" 2>/dev/null; then \ + groupadd --gid "${USER_GID}" "${USERNAME}"; \ + useradd --uid "${USER_UID}" --gid "${USER_GID}" -m "${USERNAME}"; \ + fi && \ + echo "${USERNAME} ALL=(root) NOPASSWD:ALL" > /etc/sudoers.d/${USERNAME} && \ + chmod 0440 /etc/sudoers.d/${USERNAME} USER $USERNAME WORKDIR /home/$USERNAME -# Install Rust and add it to PATH -RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain ${RUST_VERSION} +# ──────────────────────────────────────────────────────────────────────────────── +# Rust toolchain +# ──────────────────────────────────────────────────────────────────────────────── +RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \ + | sh -s -- -y --default-toolchain ${RUST_VERSION} ENV PATH="/home/${USERNAME}/.cargo/bin:${PATH}" RUN rustup component add rustfmt clippy +ENV RUSTFLAGS="-C debuginfo=0 -C strip=symbols" \ + CARGO_TERM_COLOR=always +RUN cargo install wasm-pack -ENV SHELL=/bin/bash - +# ──────────────────────────────────────────────────────────────────────────────── +# Foundry +# ──────────────────────────────────────────────────────────────────────────────── ENV PATH="/home/${USERNAME}/.foundry/bin:${PATH}" -RUN curl -L https://foundry.paradigm.xyz | bash -RUN foundryup +RUN curl -L https://foundry.paradigm.xyz | bash \ + && foundryup +# ──────────────────────────────────────────────────────────────────────────────── +# Risc Zero tool-chain +# ──────────────────────────────────────────────────────────────────────────────── ENV PATH="/home/${USERNAME}/.risc0/bin:${PATH}" -RUN curl -L https://risczero.com/install | bash -RUN rzup install rust 1.85.0 -RUN rzup install cpp 2024.1.5 -RUN rzup install r0vm 2.0.0 -RUN rzup install cargo-risczero 2.0.0 -RUN sudo wget https://github.com/mikefarah/yq/releases/download/v4.45.1/yq_linux_amd64.tar.gz -O - |\ - tar xz && sudo mv yq_linux_amd64 /usr/bin/yq +RUN curl -L https://risczero.com/install | bash \ + && rzup install rust ${RUST_VERSION} \ + && rzup install cpp ${CPP_VERSION} \ + && rzup install r0vm ${RISCZERO_VERSION} \ + && rzup install cargo-risczero ${RISCZERO_VERSION} -RUN sudo mkdir -p /app && sudo chown -R $USERNAME:$USERNAME /app +# ──────────────────────────────────────────────────────────────────────────────── +# Helpers (yq) & workspace dir +# ──────────────────────────────────────────────────────────────────────────────── +RUN sudo wget -qO- https://github.com/mikefarah/yq/releases/download/v4.45.1/yq_linux_amd64.tar.gz \ + | sudo tar xz -C /usr/local/bin --transform='s|yq_linux_amd64|yq|' --no-same-owner +RUN sudo mkdir -p /app && sudo chown -R $USERNAME:$USERNAME /app WORKDIR /app/examples/CRISP -RUN pnpm config set store-dir "/home/${USERNAME}/.pnpm-store" -RUN pnpm --version +# Pre-set pnpm store path (speeds up mounts) +RUN pnpm config set store-dir "/home/${USERNAME}/.pnpm-store" \ + && pnpm --version -ENTRYPOINT ["/bin/bash"] +# ──────────────────────────────────────────────────────────────────────────────── +# Default entrypoint +# ──────────────────────────────────────────────────────────────────────────────── +ENTRYPOINT ["bash", "-l"] diff --git a/examples/CRISP/Readme.md b/examples/CRISP/Readme.md index 815ad009da..43cb296ab3 100644 --- a/examples/CRISP/Readme.md +++ b/examples/CRISP/Readme.md @@ -9,42 +9,26 @@ CRISP ├── Dockerfile - Dockerfile for a local development environment ├── apps │ ├── client -│ │ ├── libs/wasm/pkg - WebAssembly library package -│ │ ├── public - Static files -│ │ ├── src - React components and source code -│ │ └── [configuration files and README] │ ├── program -│ │ ├── core - Core logic for the RISC Zero zkVM -│ │ ├── host - Host logic for the RISC Zero zkVM -│ │ ├── methods - Guest programs to run on the RISC Zero zkVM │ ├── server -│ │ ├── src -│ │ │ ├── cli - CLI for interacting with the CRISP server -│ │ │ └── server - Server for interacting with the enclave contracts and the client │ └── wasm-crypto ├── contracts - Contracts for the CRISP protocol ├── deploy - Deployment scripts ├── docker-compose.yaml -└── scripts +└── scripts └── tasks - Scripts for tasks to be run inside the docker container ``` ## Docker Development -To start the development environment, run the following command: +There is a Dockerfile for easy local development which has all the tools you need preinstalled. To start the development environment, run the following command: ```sh -pnpm dev:setup -pnpm dev:start +pnpm dev:setup # build the devcontainer +pnpm dev:up # run the services ``` -To stop the development environment, run the following command: - -```sh -pnpm dev:stop -``` - -## Prerequisites +## Prerequisites for running without Docker Before getting started, make sure you have the following tools installed: diff --git a/examples/CRISP/apps/client/.env.example b/examples/CRISP/apps/client/.env.example index a8e9ac948d..75c76f98fd 100644 --- a/examples/CRISP/apps/client/.env.example +++ b/examples/CRISP/apps/client/.env.example @@ -1,7 +1,7 @@ VITE_ENCLAVE_API=http://127.0.0.1:4000 VITE_TWITTER_SERVERLESS_API= VITE_WALLETCONNECT_PROJECT_ID= -VITE_E3_PROGRAM_ADDRESS=0x959922bE3CAee4b8Cd9a407cc3ac1C251C2007B1 # Default E3 program address from anvil -VITE_SEMAPHORE_ADDRESS=0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0 +VITE_E3_PROGRAM_ADDRESS=0xc6e7DF5E7b4f2A278906862b61205850344D4e7d # Default E3 program address from anvil +VITE_SEMAPHORE_ADDRESS=0x0B306BF915C4d645ff596e518fAf3F9669b97016 diff --git a/examples/CRISP/apps/client/.gitignore b/examples/CRISP/apps/client/.gitignore index f57eb99b0c..28574c3f06 100644 --- a/examples/CRISP/apps/client/.gitignore +++ b/examples/CRISP/apps/client/.gitignore @@ -37,3 +37,6 @@ yarn-error.log* *.tsbuildinfo next-env.d.ts /dist/ + +# circuits compilation output +public/circuits/ diff --git a/examples/CRISP/apps/client/libs/noir/crisp_circuit.json b/examples/CRISP/apps/client/libs/noir/crisp_circuit.json new file mode 100644 index 0000000000..d152e555bc --- /dev/null +++ b/examples/CRISP/apps/client/libs/noir/crisp_circuit.json @@ -0,0 +1 @@ +{"noir_version":"1.0.0-beta.3+ceaa1986628197bd1170147f6a07f0f98d21030a","hash":14690302256544076630,"abi":{"parameters":[{"name":"pk0is","type":{"kind":"array","length":1,"type":{"kind":"struct","path":"greco::math::polynomial::Polynomial","fields":[{"name":"coefficients","type":{"kind":"array","length":2048,"type":{"kind":"field"}}}]}},"visibility":"private"},{"name":"pk1is","type":{"kind":"array","length":1,"type":{"kind":"struct","path":"greco::math::polynomial::Polynomial","fields":[{"name":"coefficients","type":{"kind":"array","length":2048,"type":{"kind":"field"}}}]}},"visibility":"private"},{"name":"ct0is","type":{"kind":"array","length":1,"type":{"kind":"struct","path":"greco::math::polynomial::Polynomial","fields":[{"name":"coefficients","type":{"kind":"array","length":2048,"type":{"kind":"field"}}}]}},"visibility":"private"},{"name":"ct1is","type":{"kind":"array","length":1,"type":{"kind":"struct","path":"greco::math::polynomial::Polynomial","fields":[{"name":"coefficients","type":{"kind":"array","length":2048,"type":{"kind":"field"}}}]}},"visibility":"private"},{"name":"u","type":{"kind":"struct","path":"greco::math::polynomial::Polynomial","fields":[{"name":"coefficients","type":{"kind":"array","length":2048,"type":{"kind":"field"}}}]},"visibility":"private"},{"name":"e0","type":{"kind":"struct","path":"greco::math::polynomial::Polynomial","fields":[{"name":"coefficients","type":{"kind":"array","length":2048,"type":{"kind":"field"}}}]},"visibility":"private"},{"name":"e1","type":{"kind":"struct","path":"greco::math::polynomial::Polynomial","fields":[{"name":"coefficients","type":{"kind":"array","length":2048,"type":{"kind":"field"}}}]},"visibility":"private"},{"name":"k1","type":{"kind":"struct","path":"greco::math::polynomial::Polynomial","fields":[{"name":"coefficients","type":{"kind":"array","length":2048,"type":{"kind":"field"}}}]},"visibility":"private"},{"name":"r1is","type":{"kind":"array","length":1,"type":{"kind":"struct","path":"greco::math::polynomial::Polynomial","fields":[{"name":"coefficients","type":{"kind":"array","length":4095,"type":{"kind":"field"}}}]}},"visibility":"private"},{"name":"r2is","type":{"kind":"array","length":1,"type":{"kind":"struct","path":"greco::math::polynomial::Polynomial","fields":[{"name":"coefficients","type":{"kind":"array","length":2047,"type":{"kind":"field"}}}]}},"visibility":"private"},{"name":"p1is","type":{"kind":"array","length":1,"type":{"kind":"struct","path":"greco::math::polynomial::Polynomial","fields":[{"name":"coefficients","type":{"kind":"array","length":4095,"type":{"kind":"field"}}}]}},"visibility":"private"},{"name":"p2is","type":{"kind":"array","length":1,"type":{"kind":"struct","path":"greco::math::polynomial::Polynomial","fields":[{"name":"coefficients","type":{"kind":"array","length":2047,"type":{"kind":"field"}}}]}},"visibility":"private"}],"return_type":null,"error_types":{"6485997221020871071":{"error_kind":"string","string":"call to assert_max_bit_size"}}},"bytecode":"H4sIAAAAAAAA/7zyVRAU5hq1aQd3d2/c3d3d3d3d3Rp3d3d3d3fXEEII7hBCCCGEIH/t+r+p2TNHU7XXvd6qrj5b9fTdV4gf/v+v4KaQPxSdFPKH/+uF+D/fxf7Pd7b/7WX/XvSHH/7zEe7mbJm9Tc7/bIpuzPbDf72Q4t//Q+D/3sqZLU+uXK3z5midPWf25tly5G+RL3e2XLlb5MmXPV/23Plyt8qRL2fO1vly5cubv0X+vNnyZ8+Vs3X2Nrnz52zzf8a+dFXdlT3nf/6PUP/n//7Pbokf/p/v/91Befv/uvVV1iFHnv/u8PX/Q4ds/9vLHiKg6/AN8vDN4OGb0MN3yMN3g4eQAV2HH7oxHv6zS3v479v/160Q3RgPIbrxHkIFdB1CQh5CGjyEFHoIBXkIZfAQOqDrEBryENrgIbTQQxjIQxiDhzABXYewkIewBg9hhR7CQR7CGTyEDeg6hIc8hDd4CC/0EAHyEMHgIVxA1yEi5CGiwUNEoYdIkIdIBg/hA7oOkSEPkQ0eIgs9RIE8RDF4iBDQdYgKeYhq8BBV6CEa5CGawUPEgK5DdMhDdIOH6EIPMSAPMQweIgV0HWJCHmIaPMQUeogFeYhl8BA5oOsQG/IQ2+AhttBDHMhDHIOHKAFdh7iQh7gGD3GFHuJBHuIZPEQN6DrEhzzEN3iIL/SQAPKQwOAhWkDXISHkIaHBQ0Khh0SQh0QGD9EDug6JIQ+JDR4SCz0kgTwkMXiIEdB1SAp5SGrwkFToIRnkIZnBQ8yArkMA8hAweAgIPSSHPCQ3eIgV0HVIAXlIYfCQQughJeQhpcFD7ICuQyrIQyqDh1RCD6khD6kNHuIEdB3SQB7SGDykEXpIC3lIa/AQN6DrkA7ykM7gIZ3QQ3rIQ3qDh3gBXYcMkIcMBg8ZhB4yQh4yGjzED+g6ZII8ZDJ4yCT0kBnykNngIUFA1yEL5CGLwUMWoYeskIesBg8JA7oO2SAP2Qwesgk9ZIc8ZDd4SBTQdcgBechh8JBD6CEn5CGnwUPigK5DLshDLoOHXEIPuSEPuQ0ekgR0HfJAHvIYPOQResgLechr8JA0oOuQD/KQz+Ahn9BDfshDfoOHZAFdhwKQhwIGDwWEHgpCHgoaPAQCug6FIA+FDB4KCT0UhjwUNnhIHtB1KAJ5KGLwUETooSjkoajBQ4qArkMxyEMxg4diQg/FIQ/FDR5SBnQdSkAeShg8lBB6KAl5KGnwkCqg61AK8lDK4KGU0ENpyENpg4fUAV2HMpCHMgYPZYQeykIeyho8pAnoOpSDPJQzeCgn9FAe8lDe4CFtQNehAuShgsFDBaGHipCHigYP6QK6DpUgD5UMHioJPVSGPFQ2eEgf0HWoAnmoYvBQReihKuShqsFDhoCuQzXIQzWDh2pCD9UhD9UNHjIGdB1qQB5qGDzUEHqoCXmoafCQKaDrUAvyUMvgoZbQQ23IQ22Dh8wBXYc6kIc6Bg91hB7qQh7qGjxkCeg61IM81DN4qCf0UB/yUN/gIWtA16EB5KGBwUMDoYeGkIeGBg/ZAroOjSAPjQweGgk9NIY8NDZ4yB7QdWgCeWhi8NBE6KEp5KGpwUOOgK5DM8hDM4OHZkIPzSEPzQ0ecgZ0HVpAHloYPLQQemgJeWhp8JAroOvQCvLQyuChldBDa8hDa4OH3AFdhzaQhzYGD22EHtpCHtoaPOQJ6Dq0gzy0M3hoJ/TQHvLQ3uAhb0DXoQPkoYPBQwehh46Qh44GD/kCug6dIA+dDB46CT10hjx0NnjIH9B16AJ56GLw0EXooSvkoavBQ4GArkM3yEM3g4duQg/dIQ/dDR4KBnQdekAeehg89BB66Al56GnwUCig69AL8tDL4KGX0ENvyENvg4fCAV2HPpCHPgYPfYQe+kIe+ho8FAnoOvSDPPQzeOgn9NAf8tDf4KFoQNdhAORhgMHDAKGHgZCHgQYPxQK6DoMgD4MMHgYJPQyGPAw2eCge0HUYAnkYYvAwROhhKORhqMFDiYCuQxDyEDR4CAo9DIM8DDN4KBnQdRgOeRhu8DBc6GEE5GGEwUOpgK7DSMjDSIOHkUIPoyAPowweSgd0HUZDHkYbPIwWehgDeRhj8FAmoOswFvIw1uBhrNDDOMjDOIOHsgFdh/GQh/EGD+OFHiZAHiYYPJQL6DpMhDxMNHiYKPQwCfIwyeChfEDXYTLkYbLBw2ShhymQhykGDxUCug5TIQ9TDR6mCj1MgzxMM3ioGNB1mA55mG7wMF3oYQbkYYbBQ6WArsNMyMNMg4eZQg+zIA+zDB4qB3QdZkMeZhs8zBZ6mAN5mGPwUCWg6zAX8jDX4GGu0MM8yMM8g4eqAV2H+ZCH+QYP84UeFkAeFhg8VAvoOiyEPCw0eFgo9LAI8rDI4KF6QNdhMeRhscHDYqGHJZCHJQYPNQK6DkshD0sNHpYKPSyDPCwzeKgZ0HVYDnlYbvCwXOhhBeRhhcFDrYCuw0rIw0qDh5VCD6sgD6sMHmoHdB1WQx5WGzysFnpYA3lYY/BQJ6DrsBbysNbgYa3QwzrIwzqDh7oBXYf1kIf1Bg/rhR42QB42GDzUC+g6bIQ8bDR42Cj0sAnysMngoX5A12Ez5GGzwcNmoYctkIctBg8NAroOWyEPWw0etgo9bIM8bDN4aBjQddgOedhu8LBd6GEH5GGHwUOjgK7DTsjDToOHnUIPuyAPuwweGgd0HXZDHnYbPOwWetgDedhj8NAkoOuwF/Kw1+Bhr9DDPsjDPoOHpgFdh/2Qh/0GD/uFHg5AHg4YPDQL6DochDwcNHg4KPRwCPJwyOCheUDX4TDk4bDBw2GhhyOQhyMGDy0Cug5HIQ9HDR6OCj0cgzwcM3hoGdB1OA55OG7wcFzo4QTk4YTBQ6uArsNJyMNJg4eTQg+nIA+nDB5aB3QdTkMeThs8nBZ6OAN5OGPw0Cag63AW8nDW4OGs0MM5yMM5g4e2AV2H85CH8wYP54UeLkAeLhg8tAvoOlyEPFw0eLgo9HAJ8nDJ4KF9QNfhMuThssHDZaGHK5CHKwYPHQK6DlchD1cNHq4KPVyDPFwzeOgY0HW4Dnm4bvBwXejhBuThhsFDp4Cuw03Iw02Dh5tCDz9CHn40eOgc0HW4BXm4ZfBwS+jhJ8jDTwYPXQK6DrchD7cNHm4LPfwMefjZ4KFrQNfhDuThjsHDHaGHXyAPvxg8dAvoOtyFPNw1eLgr9PAr5OFXg4fuAV2He5CHewYP94Qe7kMe7hs89AjoOjyAPDwweHgg9PAQ8vDQ4KFnQNfhEeThkcHDI6GHx5CHxwYPvQK6Dk8gD08MHp4IPTyFPDw1eOgd0HV4Bnl4ZvDwTOjhOeThucFDn4CuwwvIwwuDhxdCDy8hDy8NHvoGdB1eQR5eGTy8Enp4DXl4bfDQL6Dr8Aby8Mbg4Y3Qw2+Qh98MHvoHdB3eQh7eGjy8FXr4HfLwu8HDgICuwzvIwzuDh3dCD39AHv4weBgY0HV4D3l4b/DwXujhT8jDnwYPgwK6Dh8gDx8MHj4IPfwFefjL4GFwQNfhI+Tho8HDR6GHvyEPfxs8DAnoOnyCPHwyePgk9PAP5OEfg4ehAV2Hz5CHzwYPn4Ue/oU8/GvwEAzoOnyBPHwxePgi9PAV8vDV4GFYQNfhG+Thm8HDN6GH75CH7wYPwwO6Dj90Zzz8Z5f28N+3/69bIbozHkJ05z2MCOg6hIQ8hDR4CCn0EAryEMrgYWRA1yE05CG0wUNooYcwkIcwBg+jAroOYSEPYQ0ewgo9hIM8hDN4GB3QdQgPeQhv8BBe6CEC5CGCwcOYgK5DRMhDRIOHiEIPkSAPkQwexgZ0HSJDHiIbPEQWeogCeYhi8DAuoOsQFfIQ1eAhqtBDNMhDNIOH8QFdh+iQh+gGD9GFHmJAHmIYPEwI6DrEhDzENHiIKfQQC/IQy+BhYkDXITbkIbbBQ2yhhziQhzgGD5MCug5xIQ9xDR7iCj3EgzzEM3iYHNB1iA95iG/wEF/oIQHkIYHBw5SArkNCyENCg4eEQg+JIA+JDB6mBnQdEkMeEhs8JBZ6SAJ5SGLwMC2g65AU8pDU4CGp0EMyyEMyg4fpAV2HAOQhYPAQEHpIDnlIbvAwI6DrkALykMLgIYXQQ0rIQ0qDh5kBXYdUkIdUBg+phB5SQx5SGzzMCug6pIE8pDF4SCP0kBbykNbgYXZA1yEd5CGdwUM6oYf0kIf0Bg9zAroOGSAPGQweMgg9ZIQ8ZDR4mBvQdcgEechk8JBJ6CEz5CGzwcO8gK5DFshDFoOHLEIPWSEPWQ0e5gd0HbJBHrIZPGQTesgOechu8LAgoOuQA/KQw+Ahh9BDTshDToOHhQFdh1yQh1wGD7mEHnJDHnIbPCwK6DrkgTzkMXjII/SQF/KQ1+BhcUDXIR/kIZ/BQz6hh/yQh/wGD0sCug4FIA8FDB4KCD0UhDwUNHhYGtB1KAR5KGTwUEjooTDkobDBw7KArkMRyEMRg4ciQg9FIQ9FDR6WB3QdikEeihk8FBN6KA55KG7wsCKg61AC8lDC4KGE0ENJyENJg4eVAV2HUpCHUgYPpYQeSkMeShs8rAroOpSBPJQxeCgj9FAW8lDW4GF1QNehHOShnMFDOaGH8pCH8gYPawK6DhUgDxUMHioIPVSEPFQ0eFgb0HWoBHmoZPBQSeihMuShssHDuoCuQxXIQxWDhypCD1UhD1UNHtYHdB2qQR6qGTxUE3qoDnmobvCwIaDrUAPyUMPgoYbQQ03IQ02Dh40BXYdakIdaBg+1hB5qQx5qGzxsCug61IE81DF4qCP0UBfyUNfgYXNA16Ee5KGewUM9oYf6kIf6Bg9bAroODSAPDQweGgg9NIQ8NDR42BrQdWgEeWhk8NBI6KEx5KGxwcO2gK5DE8hDE4OHJkIPTSEPTQ0etgd0HZpBHpoZPDQTemgOeWhu8LAjoOvQAvLQwuChhdBDS8hDS4OHnQFdh1aQh1YGD62EHlpDHlobPOwK6Dq0gTy0MXhoI/TQFvLQ1uBhd0DXoR3koZ3BQzuhh/aQh/YGD3sCug4dIA8dDB46CD10hDx0NHjYG9B16AR56GTw0EnooTPkobPBw76ArkMXyEMXg4cuQg9dIQ9dDR72B3QdukEeuhk8dBN66A556G7wcCCg69AD8tDD4KGH0ENPyENPg4eDAV2HXpCHXgYPvYQeekMeehs8HAroOvSBPPQxeOgj9NAX8tDX4OFwQNehH+Shn8FDP6GH/pCH/gYPRwK6DgMgDwMMHgYIPQyEPAw0eDga0HUYBHkYZPAwSOhhMORhsMHDsYCuwxDIwxCDhyFCD0MhD0MNHo4HdB2CkIegwUNQ6GEY5GGYwcOJgK7DcMjDcIOH4UIPIyAPIwweTgZ0HUZCHkYaPIwUehgFeRhl8HAqoOswGvIw2uBhtNDDGMjDGIOH0wFdh7GQh7EGD2OFHsZBHsYZPJwJ6DqMhzyMN3gYL/QwAfIwweDhbEDXYSLkYaLBw0Shh0mQh0kGD+cCug6TIQ+TDR4mCz1MgTxMMXg4H9B1mAp5mGrwMFXoYRrkYZrBw4WArsN0yMN0g4fpQg8zIA8zDB4uBnQdZkIeZho8zBR6mAV5mGXwcCmg6zAb8jDb4GG20MMcyMMcg4fLAV2HuZCHuQYPc4Ue5kEe5hk8XAnoOsyHPMw3eJgv9LAA8rDA4OFqQNdhIeRhocHDQqGHRZCHRQYP1wK6DoshD4sNHhYLPSyBPCwxeLge0HVYCnlYavCwVOhhGeRhmcHDjYCuw3LIw3KDh+VCDysgDysMHm4GdB1WQh5WGjysFHpYBXlYZfDwY0DXYTXkYbXBw2qhhzWQhzUGD7cCug5rIQ9rDR7WCj2sgzysM3j4KaDrsB7ysN7gYb3QwwbIwwaDh9sBXYeNkIeNBg8bhR42QR42GTz8HNB12Ax52GzwsFnoYQvkYYvBw52ArsNWyMNWg4etQg/bIA/bDB5+Ceg6bIc8bDd42C70sAPysMPg4W5A12En5GGnwcNOoYddkIddBg+/BnQddkMedhs87BZ62AN52GPwcC+g67AX8rDX4GGv0MM+yMM+g4f7AV2H/ZCH/QYP+4UeDkAeDhg8PAjoOhyEPBw0eDgo9HAI8nDI4OFhQNfhMOThsMHDYaGHI5CHIwYPjwK6DkchD0cNHo4KPRyDPBwzeHgc0HU4Dnk4bvBwXOjhBOThhMHDk4Cuw0nIw0mDh5NCD6cgD6cMHp4GdB1OQx5OGzycFno4A3k4Y/DwLKDrcBbycNbg4azQwznIwzmDh+cBXYfzkIfzBg/nhR4uQB4uGDy8COg6XIQ8XDR4uCj0cAnycMng4WVA1+Ey5OGywcNloYcrkIcrBg+vAroOVyEPVw0ergo9XIM8XDN4eB3QdbgOebhu8HBd6OEG5OGGwcObgK7DTcjDTYOHm0IPP0IefjR4+C2g63AL8nDL4OGW0MNPkIefDB7eBnQdbkMebhs83BZ6+Bny8LPBw+8BXYc7kIc7Bg93hB5+gTz8YvDwLqDrcBfycNfg4a7Qw6+Qh18NHv4I6DrcgzzcM3i4J/RwH/Jw3+DhfUDX4QHk4YHBwwOhh4eQh4cGD38GdB0eQR4eGTw8Enp4DHl4bPDwIaDr8ATy8MTg4YnQw1PIw1ODh78Cug7PIA/PDB6eCT08hzw8N3j4GNB1eAF5eGHw8ELo4SXk4aXBw98BXYdXkIdXBg+vhB5eQx5eGzx8Cug6vIE8vDF4eCP08Bvk4TeDh38Cug5vIQ9vDR7eCj38Dnn43eDhc0DX4R3k4Z3Bwzuhhz8gD38YPPwb0HV4D3l4b/DwXujhT8jDnwYPXwK6Dh8gDx8MHj4IPfwFefjL4OFrQNfhI+Tho8HDR6GHvyEPfxs8fAvoOnyCPHwyePgk9PAP5OEfg4fvAV2Hz5CHzwYPn4Ue/oU8/Gvw8ENyXYcvkIcvBg9fhB6+Qh6+GjyEEHr4Bnn4ZvDwTejhO+Thu8FDSKGHH3owHv6zS3v479v/160QPRgPIXrwHkIJPYSEPIQ0eAgp9BAK8hDK4CG00ENoyENog4fQQg9hIA9hDB7CCD2EhTyENXgIK/QQDvIQzuAhrNBDeMhDeIOH8EIPESAPEQwewgk9RIQ8RDR4iCj0EAnyEMngIbzQQ2TIQ2SDh8hCD1EgD1EMHiIIPUSFPEQ1eIgq9BAN8hDN4CGi0EN0yEN0g4foQg8xIA8xDB4iCT3EhDzENHiIKfQQC/IQy+AhstBDbMhDbIOH2EIPcSAPcQweogg9xIU8xDV4iCv0EA/yEM/gIarQQ3zIQ3yDh/hCDwkgDwkMHqIJPSSEPCQ0eEgo9JAI8pDI4CG60ENiyENig4fEQg9JIA9JDB5iCD0khTwkNXhIKvSQDPKQzOAhptBDAPIQMHgICD0khzwkN3iIJfSQAvKQwuAhhdBDSshDSoOH2EIPqSAPqQweUgk9pIY8pDZ4iCP0kAbykMbgIY3QQ1rIQ1qDh7hCD+kgD+kMHtIJPaSHPKQ3eIgn9JAB8pDB4CGD0ENGyENGg4f4Qg+ZIA+ZDB4yCT1khjxkNnhIIPSQBfKQxeAhi9BDVshDVoOHhEIP2SAP2Qwesgk9ZIc8ZDd4SCT0kAPykMPgIYfQQ07IQ06Dh8RCD7kgD7kMHnIJPeSGPOQ2eEgi9JAH8pDH4CGP0ENeyENeg4ekQg/5IA/5DB7yCT3khzzkN3hIJvRQAPJQwOChgNBDQchDQYOHgNBDIchDIYOHQkIPhSEPhQ0ekgs9FIE8FDF4KCL0UBTyUNTgIYXQQzHIQzGDh2JCD8UhD8UNHlIKPZSAPJQweCgh9FAS8lDS4CGV0EMpyEMpg4dSQg+lIQ+lDR5SCz2UgTyUMXgoI/RQFvJQ1uAhjdBDOchDOYOHckIP5SEP5Q0e0go9VIA8VDB4qCD0UBHyUNHgIZ3QQyXIQyWDh0pCD5UhD5UNHtILPVSBPFQxeKgi9FAV8lDV4CGD0EM1yEM1g4dqQg/VIQ/VDR4yCj3UgDzUMHioIfRQE/JQ0+Ahk9BDLchDLYOHWkIPtSEPtQ0eMgs91IE81DF4qCP0UBfyUNfgIYvQQz3IQz2Dh3pCD/UhD/UNHrIKPTSAPDQweGgg9NAQ8tDQ4CGb0EMjyEMjg4dGQg+NIQ+NDR6yCz00gTw0MXhoIvTQFPLQ1OAhh9BDM8hDM4OHZkIPzSEPzQ0ecgo9tIA8tDB4aCH00BLy0NLgIZfQQyvIQyuDh1ZCD60hD60NHnILPbSBPLQxeGgj9NAW8tDW4CGP0EM7yEM7g4d2Qg/tIQ/tDR7yCj10gDx0MHjoIPTQEfLQ0eAhn9BDJ8hDJ4OHTkIPnSEPnQ0e8gs9dIE8dDF46CL00BXy0NXgoYDQQzfIQzeDh25CD90hD90NHgoKPfSAPPQweOgh9NAT8tDT4KGQ0EMvyEMvg4deQg+9IQ+9DR4KCz30gTz0MXjoI/TQF/LQ1+ChiNBDP8hDP4OHfkIP/SEP/Q0eigo9DIA8DDB4GCD0MBDyMNDgoZjQwyDIwyCDh0FCD4MhD4MNHooLPQyBPAwxeBgi9DAU8jDU4KGE0EMQ8hA0eAgKPQyDPAwzeCgp9DAc8jDc4GG40MMIyMMIg4dSQg8jIQ8jDR5GCj2MgjyMMngoLfQwGvIw2uBhtNDDGMjDGIOHMkIPYyEPYw0exgo9jIM8jDN4KCv0MB7yMN7gYbzQwwTIwwSDh3JCDxMhDxMNHiYKPUyCPEwyeCgv9DAZ8jDZ4GGy0MMUyMMUg4cKQg9TIQ9TDR6mCj1MgzxMM3ioKPQwHfIw3eBhutDDDMjDDIOHSkIPMyEPMw0eZgo9zII8zDJ4qCz0MBvyMNvgYbbQwxzIwxyDhypCD3MhD3MNHuYKPcyDPMwzeKgq9DAf8jDf4GG+0MMCyMMCg4dqQg8LIQ8LDR4WCj0sgjwsMnioLvSwGPKw2OBhsdDDEsjDEoOHGkIPSyEPSw0elgo9LIM8LDN4qCn0sBzysNzgYbnQwwrIwwqDh1pCDyshDysNHlYKPayCPKwyeKgt9LAa8rDa4GG10MMayMMag4c6Qg9rIQ9rDR7WCj2sgzysM3ioK/SwHvKw3uBhvdDDBsjDBoOHekIPGyEPGw0eNgo9bII8bDJ4qC/0sBnysNngYbPQwxbIwxaDhwZCD1shD1sNHrYKPWyDPGwzeGgo9LAd8rDd4GG70MMOyMMOg4dGQg87IQ87DR52Cj3sgjzsMnhoLPSwG/Kw2+Bht9DDHsjDHoOHJkIPeyEPew0e9go97IM87DN4aCr0sB/ysN/gYb/QwwHIwwGDh2ZCDwchDwcNHg4KPRyCPBwyeGgu9HAY8nDY4OGw0MMRyMMRg4cWQg9HIQ9HDR6OCj0cgzwcM3hoKfRwHPJw3ODhuNDDCcjDCYOHVkIPJyEPJw0eTgo9nII8nDJ4aC30cBrycNrg4bTQwxnIwxmDhzZCD2chD2cNHs4KPZyDPJwzeGgr9HAe8nDe4OG80MMFyMMFg4d2Qg8XIQ8XDR4uCj1cgjxcMnhoL/RwGfJw2eDhstDDFcjDFYOHDkIPVyEPVw0ergo9XIM8XDN46Cj0cB3ycN3g4brQww3Iww2Dh05CDzchDzcNHm4KPfwIefjR4KGz0MMtyMMtg4dbQg8/QR5+MnjoIvRwG/Jw2+DhttDDz5CHnw0eugo93IE83DF4uCP08Avk4ReDh25CD3chD3cNHu4KPfwKefjV4KG70MM9yMM9g4d7Qg/3IQ/3DR56CD08gDw8MHh4IPTwEPLw0OChp9DDI8jDI4OHR0IPjyEPjw0eegk9PIE8PDF4eCL08BTy8NTgobfQwzPIwzODh2dCD88hD88NHvoIPbyAPLwweHgh9PAS8vDS4KGv0MMryMMrg4dXQg+vIQ+vDR76CT28gTy8MXh4I/TwG+ThN4OH/kIPbyEPbw0e3go9/A55+N3gYYDQwzvIwzuDh3dCD39AHv4weBgo9PAe8vDe4OG90MOfkIc/DR4GCT18gDx8MHj4IPTwF+ThL4OHwUIPHyEPHw0ePgo9/A15+NvgYYjQwyfIwyeDh09CD/9AHv4xeBgq9PAZ8vDZ4OGz0MO/kId/DR6CQg9fIA9fDB6+CD18hTx8NXgYJvTwDfLwzeDhm9DDd8jDd4OH4UIPP/RkPPxnl/bw37f/r1shejIeQvTkPYwQeggJeQhp8BBS6CEU5CGUwcNIoYfQkIfQBg+hhR7CQB7CGDyMEnoIC3kIa/AQVughHOQhnMHDaKGH8JCH8AYP4YUeIkAeIhg8jBF6iAh5iGjwEFHoIRLkIZLBw1ihh8iQh8gGD5GFHqJAHqIYPIwTeogKeYhq8BBV6CEa5CGawcN4oYfokIfoBg/RhR5iQB5iGDxMEHqICXmIafAQU+ghFuQhlsHDRKGH2JCH2AYPsYUe4kAe4hg8TBJ6iAt5iGvwEFfoIR7kIZ7Bw2Shh/iQh/gGD/GFHhJAHhIYPEwRekgIeUho8JBQ6CER5CGRwcNUoYfEkIfEBg+JhR6SQB6SGDxME3pICnlIavCQVOghGeQhmcHDdKGHAOQhYPAQEHpIDnlIbvAwQ+ghBeQhhcFDCqGHlJCHlAYPM4UeUkEeUhk8pBJ6SA15SG3wMEvoIQ3kIY3BQxqhh7SQh7QGD7OFHtJBHtIZPKQTekgPeUhv8DBH6CED5CGDwUMGoYeMkIeMBg9zhR4yQR4yGTxkEnrIDHnIbPAwT+ghC+Qhi8FDFqGHrJCHrAYP84UeskEeshk8ZBN6yA55yG7wsEDoIQfkIYfBQw6hh5yQh5wGDwuFHnJBHnIZPOQSesgNecht8LBI6CEP5CGPwUMeoYe8kIe8Bg+LhR7yQR7yGTzkE3rID3nIb/CwROihAOShgMFDAaGHgpCHggYPS4UeCkEeChk8FBJ6KAx5KGzwsEzooQjkoYjBQxGhh6KQh6IGD8uFHopBHooZPBQTeigOeShu8LBC6KEE5KGEwUMJoYeSkIeSBg8rhR5KQR5KGTyUEnooDXkobfCwSuihDOShjMFDGaGHspCHsgYPq4UeykEeyhk8lBN6KA95KG/wsEbooQLkoYLBQwWhh4qQh4oGD2uFHipBHioZPFQSeqgMeahs8LBO6KEK5KGKwUMVoYeqkIeqBg/rhR6qQR6qGTxUE3qoDnmobvCwQeihBuShhsFDDaGHmpCHmgYPG4UeakEeahk81BJ6qA15qG3wsEnooQ7koY7BQx2hh7qQh7oGD5uFHupBHuoZPNQTeqgPeahv8LBF6KEB5KGBwUMDoYeGkIeGBg9bhR4aQR4aGTw0EnpoDHlobPCwTeihCeShicFDE6GHppCHpgYP24UemkEemhk8NBN6aA55aG7wsEPooQXkoYXBQwuhh5aQh5YGDzuFHlpBHloZPLQSemgNeWht8LBL6KEN5KGNwUMboYe2kIe2Bg+7hR7aQR7aGTy0E3poD3lob/CwR+ihA+Shg8FDB6GHjpCHjgYPe4UeOkEeOhk8dBJ66Ax56GzwsE/ooQvkoYvBQxehh66Qh64GD/uFHrpBHroZPHQTeugOeehu8HBA6KEH5KGHwUMPoYeekIeeBg8HhR56QR56GTz0EnroDXnobfBwSOihD+Shj8FDH6GHvpCHvgYPh4Ue+kEe+hk89BN66A956G/wcEToYQDkYYDBwwChh4GQh4EGD0eFHgZBHgYZPAwSehgMeRhs8HBM6GEI5GGIwcMQoYehkIehBg/HhR6CkIegwUNQ6GEY5GGYwcMJoYfhkIfhBg/DhR5GQB5GGDycFHoYCXkYafAwUuhhFORhlMHDKaGH0ZCH0QYPo4UexkAexhg8nBZ6GAt5GGvwMFboYRzkYZzBwxmhh/GQh/EGD+OFHiZAHiYYPJwVepgIeZho8DBR6GES5GGSwcM5oYfJkIfJBg+ThR6mQB6mGDycF3qYCnmYavAwVehhGuRhmsHDBaGH6ZCH6QYP04UeZkAeZhg8XBR6mAl5mGnwMFPoYRbkYZbBwyWhh9mQh9kGD7OFHuZAHuYYPFwWepgLeZhr8DBX6GEe5GGewcMVoYf5kIf5Bg/zhR4WQB4WGDxcFXpYCHlYaPCwUOhhEeRhkcHDNaGHxZCHxQYPi4UelkAelhg8XBd6WAp5WGrwsFToYRnkYZnBww2hh+WQh+UGD8uFHlZAHlYYPNwUelgJeVhp8LBS6GEV5GGVwcOPQg+rIQ+rDR5WCz2sgTysMXi4JfSwFvKw1uBhrdDDOsjDOoOHn4Qe1kMe1hs8rBd62AB52GDwcFvoYSPkYaPBw0ahh02Qh00GDz8LPWyGPGw2eNgs9LAF8rDF4OGO0MNWyMNWg4etQg/bIA/bDB5+EXrYDnnYbvCwXehhB+Rhh8HDXaGHnZCHnQYPO4UedkEedhk8/Cr0sBvysNvgYbfQwx7Iwx6Dh3tCD3shD3sNHvYKPeyDPOwzeLgv9LAf8rDf4GG/0MMByMMBg4cHQg8HIQ8HDR4OCj0cgjwcMnh4KPRwGPJw2ODhsNDDEcjDEYOHR0IPRyEPRw0ejgo9HIM8HDN4eCz0cBzycNzg4bjQwwnIwwmDhydCDychDycNHk4KPZyCPJwyeHgq9HAa8nDa4OG00MMZyMMZg4dnQg9nIQ9nDR7OCj2cgzycM3h4LvRwHvJw3uDhvNDDBcjDBYOHF0IPFyEPFw0eLgo9XII8XDJ4eCn0cBnycNng4bLQwxXIwxWDh1dCD1chD1cNHq4KPVyDPFwzeHgt9HAd8nDd4OG60MMNyMMNg4c3Qg83IQ83DR5uCj38CHn40eDhN6GHW5CHWwYPt4QefoI8/GTw8Fbo4Tbk4bbBw22hh58hDz8bPPwu9HAH8nDH4OGO0MMvkIdfDB7eJdd1uAt5uGvwcFfo4VfIw68GD38IPdyDPNwzeLgn9HAf8nDf4OG90MMDyMMDg4cHQg8PIQ8PDR7+FHp4BHl4ZPDwSOjhMeThscHDB6GHJ5CHJwYPT4QenkIenho8/CX08Azy8Mzg4ZnQw3PIw3ODh49CDy8gDy8MHl4IPbyEPLw0ePhb6OEV5OGVwcMroYfXkIfXBg+fhB7eQB7eGDy8EXr4DfLwm8HDP0IPbyEPbw0e3go9/A55+N3g4bPQwzvIwzuDh3dCD39AHv4wePhX6OE95OG9wcN7oYc/IQ9/Gjx8EXr4AHn4YPDwQejhL8jDXwYPX4UePkIePho8fBR6+Bvy8LfBwzehh0+Qh08GD5+EHv6BPPxj8PBd6OEz5OGzwcNnoYd/IQ//Gjz8kELX4Qvk4YvBwxehh6+Qh68GDyGEHr5BHr4ZPHwTevgOefhu8BBS6OGHXoyH/+zSHv779v91K0QvxkOIXryHUEIPISEPIQ0eQgo9hII8hDJ4CC30EBryENrgIbTQQxjIQxiDhzBCD2EhD2ENHsIKPYSDPIQzeAgr9BAe8hDe4CG80EMEyEMEg4dwQg8RIQ8RDR4iCj1EgjxEMngIL/QQGfIQ2eAhstBDFMhDFIOHCEIPUSEPUQ0eogo9RIM8RDN4iCj0EB3yEN3gIbrQQwzIQwyDh0hCDzEhDzENHmIKPcSCPMQyeIgs9BAb8hDb4CG20EMcyEMcg4coQg9xIQ9xDR7iCj3EgzzEM3iIKvQQH/IQ3+AhvtBDAshDAoOHaEIPCSEPCQ0eEgo9JII8JDJ4iC70kBjykNjgIbHQQxLIQxKDhxhCD0khD0kNHpIKPSSDPCQzeIgp9BCAPAQMHgJCD8khD8kNHmIJPaSAPKQweEgh9JAS8pDS4CG20EMqyEMqg4dUQg+pIQ+pDR7iCD2kgTykMXhII/SQFvKQ1uAhrtBDOshDOoOHdEIP6SEP6Q0e4gk9ZIA8ZDB4yCD0kBHykNHgIb7QQybIQyaDh0xCD5khD5kNHhIIPWSBPGQxeMgi9JAV8pDV4CGh0EM2yEM2g4dsQg/ZIQ/ZDR4SCT3kgDzkMHjIIfSQE/KQ0+AhsdBDLshDLoOHXEIPuSEPuQ0ekgg95IE85DF4yCP0kBfykNfgIanQQz7IQz6Dh3xCD/khD/kNHpIJPRSAPBQweCgg9FAQ8lDQ4CEg9FAI8lDI4KGQ0ENhyENhg4fkQg9FIA9FDB6KCD0UhTwUNXhIIfRQDPJQzOChmNBDcchDcYOHlEIPJSAPJQweSgg9lIQ8lDR4SCX0UAryUMrgoZTQQ2nIQ2mDh9RCD2UgD2UMHsoIPZSFPJQ1eEgj9FAO8lDO4KGc0EN5yEN5g4e0Qg8VIA8VDB4qCD1UhDxUNHhIJ/RQCfJQyeChktBDZchDZYOH9EIPVSAPVQweqgg9VIU8VDV4yCD0UA3yUM3goZrQQ3XIQ3WDh4xCDzUgDzUMHmoIPdSEPNQ0eMgk9FAL8lDL4KGW0ENtyENtg4fMQg91IA91DB7qCD3UhTzUNXjIIvRQD/JQz+ChntBDfchDfYOHrEIPDSAPDQweGgg9NIQ8NDR4yCb00Ajy0MjgoZHQQ2PIQ2ODh+xCD00gD00MHpoIPTSFPDQ1eMgh9NAM8tDM4KGZ0ENzyENzg4ecQg8tIA8tDB5aCD20hDy0NHjIJfTQCvLQyuChldBDa8hDa4OH3EIPbSAPbQwe2gg9tIU8tDV4yCP00A7y0M7goZ3QQ3vIQ3uDh7xCDx0gDx0MHjoIPXSEPHQ0eMgn9NAJ8tDJ4KGT0ENnyENng4f8Qg9dIA9dDB66CD10hTx0NXgoIPTQDfLQzeChm9BDd8hDd4OHgkIPPSAPPQweegg99IQ89DR4KCT00Avy0MvgoZfQQ2/IQ2+Dh8JCD30gD30MHvoIPfSFPPQ1eCgi9NAP8tDP4KGf0EN/yEN/g4eiQg8DIA8DDB4GCD0MhDwMNHgoJvQwCPIwyOBhkNDDYMjDYIOH4kIPQyAPQwwehgg9DIU8DDV4KCH0EIQ8BA0egkIPwyAPwwweSgo9DIc8DDd4GC70MALyMMLgoZTQw0jIw0iDh5FCD6MgD6MMHkoLPYyGPIw2eBgt9DAG8jDG4KGM0MNYyMNYg4exQg/jIA/jDB7KCj2MhzyMN3gYL/QwAfIwweChnNDDRMjDRIOHiUIPkyAPkwweygs9TIY8TDZ4mCz0MAXyMMXgoYLQw1TIw1SDh6lCD9MgD9MMHioKPUyHPEw3eJgu9DAD8jDD4KGS0MNMyMNMg4eZQg+zIA+zDB4qCz3MhjzMNniYLfQwB/Iwx+ChitDDXMjDXIOHuUIP8yAP8wweqgo9zIc8zDd4mC/0sADysMDgoZrQw0LIw0KDh4VCD4sgD4sMHqoLPSyGPCw2eFgs9LAE8rDE4KGG0MNSyMNSg4elQg/LIA/LDB5qCj0shzwsN3hYLvSwAvKwwuChltDDSsjDSoOHlUIPqyAPqwweags9rIY8rDZ4WC30sAbysMbgoY7Qw1rIw1qDh7VCD+sgD+sMHuoKPayHPKw3eFgv9LAB8rDB4KGe0MNGyMNGg4eNQg+bIA+bDB7qCz1shjxsNnjYLPSwBfKwxeChgdDDVsjDVoOHrUIP2yAP2wweGgo9bIc8bDd42C70sAPysMPgoZHQw07Iw06Dh51CD7sgD7sMHhoLPeyGPOw2eNgt9LAH8rDH4KGJ0MNeyMNeg4e9Qg/7IA/7DB6aCj3shzzsN3jYL/RwAPJwwOChmdDDQcjDQYOHg0IPhyAPhwwemgs9HIY8HDZ4OCz0cATycMTgoYXQw1HIw1GDh6NCD8cgD8cMHloKPRyHPBw3eDgu9HAC8nDC4KGV0MNJyMNJg4eTQg+nIA+nDB5aCz2chjycNng4LfRwBvJwxuChjdDDWcjDWYOHs0IP5yAP5wwe2go9nIc8nDd4OC/0cAHycMHgoZ3Qw0XIw0WDh4tCD5cgD5cMHtoLPVyGPFw2eLgs9HAF8nDF4KGD0MNVyMNVg4erQg/XIA/XDB46Cj1chzxcN3i4LvRwA/Jww+Chk9DDTcjDTYOHm0IPP0IefjR46Cz0cAvycMvg4ZbQw0+Qh58MHroIPdyGPNw2eLgt9PAz5OFng4euQg93IA93DB7uCD38Ann4xeChm9DDXcjDXYOHu0IPv0IefjV46C70cA/ycM/g4Z7Qw33Iw32Dhx5CDw8gDw8MHh4IPTyEPDw0eOgp9PAI8vDI4OGR0MNjyMNjg4deQg9PIA9PDB6eCD08hTw8NXjoLfTwDPLwzODhmdDDc8jDc4OHPkIPLyAPLwweXgg9vIQ8vDR46Cv08Ary8Mrg4ZXQw2vIw2uDh35CD28gD28MHt4IPfwGefjN4KG/0MNbyMNbg4e3Qg+/Qx5+N3gYIPTwDvLwzuDhndDDH5CHPwweBgo9vIc8vDd4eC/08Cfk4U+Dh0FCDx8gDx8MHj4IPfwFefjL4GGw0MNHyMNHg4ePQg9/Qx7+NngYIvTwCfLwyeDhk9DDP5CHfwwehgo9fIY8fDZ4+Cz08C/k4V+Dh6DQwxfIwxeDhy9CD18hD18NHoYJPXyDPHwzePgm9PAd8vDd4GG40MMPvRkP/9mlPfz37f/rVojejIcQvXkPI4QeQkIeQho8hBR6CAV5CGXwMFLoITTkIbTBQ2ihhzCQhzAGD6OEHsJCHsIaPIQVeggHeQhn8DBa6CE85CG8wUN4oYcIkIcIBg9jhB4iQh4iGjxEFHqIBHmIZPAwVughMuQhssFDZKGHKJCHKAYP44QeokIeoho8RBV6iAZ5iGbwMF7oITrkIbrBQ3ShhxiQhxgGDxOEHmJCHmIaPMQUeogFeYhl8DBR6CE25CG2wUNsoYc4kIc4Bg+ThB7iQh7iGjzEFXqIB3mIZ/AwWeghPuQhvsFDfKGHBJCHBAYPU4QeEkIeEho8JBR6SAR5SGTwMFXoITHkIbHBQ2KhhySQhyQGD9OEHpJCHpIaPCQVekgGeUhm8DBd6CEAeQgYPASEHpJDHpIbPMwQekgBeUhh8JBC6CEl5CGlwcNMoYdUkIdUBg+phB5SQx5SGzzMEnpIA3lIY/CQRughLeQhrcHDbKGHdJCHdAYP6YQe0kMe0hs8zBF6yAB5yGDwkEHoISPkIaPBw1yhh0yQh0wGD5mEHjJDHjIbPMwTesgCechi8JBF6CEr5CGrwcN8oYdskIdsBg/ZhB6yQx6yGzwsEHrIAXnIYfCQQ+ghJ+Qhp8HDQqGHXJCHXAYPuYQeckMechs8LBJ6yAN5yGPwkEfoIS/kIa/Bw2Khh3yQh3wGD/mEHvJDHvIbPCwReigAeShg8FBA6KEg5KGgwcNSoYdCkIdCBg+FhB4KQx4KGzwsE3ooAnkoYvBQROihKOShqMHDcqGHYpCHYgYPxYQeikMeihs8rBB6KAF5KGHwUELooSTkoaTBw0qhh1KQh1IGD6WEHkpDHkobPKwSeigDeShj8FBG6KEs5KGswcNqoYdykIdyBg/lhB7KQx7KGzysEXqoAHmoYPBQQeihIuShosHDWqGHSpCHSgYPlYQeKkMeKhs8rBN6qAJ5qGLwUEXooSrkoarBw3qhh2qQh2oGD9WEHqpDHqobPGwQeqgBeahh8FBD6KEm5KGmwcNGoYdakIdaBg+1hB5qQx5qGzxsEnqoA3moY/BQR+ihLuShrsHDZqGHepCHegYP9YQe6kMe6hs8bBF6aAB5aGDw0EDooSHkoaHBw1ahh0aQh0YGD42EHhpDHhobPGwTemgCeWhi8NBE6KEp5KGpwcN2oYdmkIdmBg/NhB6aQx6aGzzsEHpoAXloYfDQQuihJeShpcHDTqGHVpCHVgYPrYQeWkMeWhs87BJ6aAN5aGPw0EbooS3koa3Bw26hh3aQh3YGD+2EHtpDHtobPOwReugAeehg8NBB6KEj5KGjwcNeoYdOkIdOBg+dhB46Qx46GzzsE3roAnnoYvDQReihK+Shq8HDfqGHbpCHbgYP3YQeukMeuhs8HBB66AF56GHw0EPooSfkoafBw0Ghh16Qh14GD72EHnpDHnobPBwSeugDeehj8NBH6KEv5KGvwcNhoYd+kId+Bg/9hB76Qx76GzwcEXoYAHkYYPAwQOhhIORhoMHDUaGHQZCHQQYPg4QeBkMeBhs8HBN6GAJ5GGLwMEToYSjkYajBw3GhhyDkIWjwEBR6GAZ5GGbwcELoYTjkYbjBw3ChhxGQhxEGDyeFHkZCHkYaPIwUehgFeRhl8HBK6GE05GG0wcNooYcxkIcxBg+nhR7GQh7GGjyMFXoYB3kYZ/BwRuhhPORhvMHDeKGHCZCHCQYPZ4UeJkIeJho8TBR6mAR5mGTwcE7oYTLkYbLBw2ShhymQhykGD+eFHqZCHqYaPEwVepgGeZhm8HBB6GE65GG6wcN0oYcZkIcZBg8XhR5mQh5mGjzMFHqYBXmYZfBwSehhNuRhtsHDbKGHOZCHOQYPl4Ue5kIe5ho8zBV6mAd5mGfwcEXoYT7kYb7Bw3yhhwWQhwUGD1eFHhZCHhYaPCwUelgEeVhk8HBN6GEx5GGxwcNioYclkIclBg/XhR6WQh6WGjwsFXpYBnlYZvBwQ+hhOeRhucHDcqGHFZCHFQYPN4UeVkIeVho8rBR6WAV5WGXw8KPQw2rIw2qDh9VCD2sgD2sMHm4JPayFPKw1eFgr9LAO8rDO4OEnoYf1kIf1Bg/rhR42QB42GDzcFnrYCHnYaPCwUehhE+Rhk8HDz0IPmyEPmw0eNgs9bIE8bDF4uCP0sBXysNXgYavQwzbIwzaDh1+EHrZDHrYbPGwXetgBedhh8HBX6GEn5GGnwcNOoYddkIddBg+/Cj3shjzsNnjYLfSwB/Kwx+DhntDDXsjDXoOHvUIP+yAP+wwe7gs97Ic87Dd42C/0cADycMDg4YHQw0HIw0GDh4NCD4cgD4cMHh4KPRyGPBw2eDgs9HAE8nDE4OGR0MNRyMNRg4ejQg/HIA/HDB4eCz0chzwcN3g4LvRwAvJwwuDhidDDScjDSYOHk0IPpyAPpwwengo9nIY8nDZ4OC30cAbycMbg4ZnQw1nIw1mDh7NCD+cgD+cMHp4LPZyHPJw3eDgv9HAB8nDB4OGF0MNFyMNFg4eLQg+XIA+XDB5eCj1chjxcNni4LPRwBfJwxeDhldDDVcjDVYOHq0IP1yAP1wweXgs9XIc8XDd4uC70cAPycMPg4Y3Qw03Iw02Dh5tCDz9CHn40ePhN6OEW5OGWwcMtoYefIA8/GTy8FXq4DXm4bfBwW+jhZ8jDzwYPvws93IE83DF4uCP08Avk4ReDh3dCD3chD3cNHu4KPfwKefjV4OEPoYd7kId7Bg/3hB7uQx7uGzy8F3p4AHl4YPDwQOjhIeThocHDn0IPjyAPjwweHgk9PIY8PDZ4+CD08ATy8MTg4YnQw1PIw1ODh7+EHp5BHp4ZPDwTengOeXhu8PBR6OEF5OGFwcMLoYeXkIeXBg9/Cz28gjy8Mnh4JfTwGvLw2uDhk9DDG8jDG4OHN0IPv0EefjN4+Efo4S3k4a3Bw1uhh98hD78bPHwWengHeXhn8PBO6OEPyMMfBg//Cj28hzy8N3h4L/TwJ+ThT4OHL0IPHyAPHwwePgg9/AV5+Mvg4avQw0fIw0eDh49CD39DHv42ePgm9PAJ8vDJ4OGT0MM/kId/DB6+Cz18hjx8Nnj4LPTwL+ThX4OHH1LqOnyBPHwxePgi9PAV8vDV4CGE0MM3yMM3g4dvQg/fIQ/fDR5CCj380Ifx8J9d2sN/3/6/boXow3gI0Yf3EEroISTkIaTBQ0ihh1CQh1AGD6GFHkJDHkIbPIQWeggDeQhj8BBG6CEs5CGswUNYoYdwkIdwBg9hhR7CQx7CGzyEF3qIAHmIYPAQTughIuQhosFDRKGHSJCHSAYP4YUeIkMeIhs8RBZ6iAJ5iGLwEEHoISrkIarBQ1Shh2iQh2gGDxGFHqJDHqIbPEQXeogBeYhh8BBJ6CEm5CGmwUNMoYdYkIdYBg+RhR5iQx5iGzzEFnqIA3mIY/AQReghLuQhrsFDXKGHeJCHeAYPUYUe4kMe4hs8xBd6SAB5SGDwEE3oISHkIaHBQ0Khh0SQh0QGD9GFHhJDHhIbPCQWekgCeUhi8BBD6CEp5CGpwUNSoYdkkIdkBg8xhR4CkIeAwUNA6CE55CG5wUMsoYcUkIcUBg8phB5SQh5SGjzEFnpIBXlIZfCQSughNeQhtcFDHKGHNJCHNAYPaYQe0kIe0ho8xBV6SAd5SGfwkE7oIT3kIb3BQzyhhwyQhwwGDxmEHjJCHjIaPMQXesgEechk8JBJ6CEz5CGzwUMCoYcskIcsBg9ZhB6yQh6yGjwkFHrIBnnIZvCQTeghO+Qhu8FDIqGHHJCHHAYPOYQeckIecho8JBZ6yAV5yGXwkEvoITfkIbfBQxKhhzyQhzwGD3mEHvJCHvIaPCQVesgHechn8JBP6CE/5CG/wUMyoYcCkIcCBg8FhB4KQh4KGjwEhB4KQR4KGTwUEnooDHkobPCQXOihCOShiMFDEaGHopCHogYPKYQeikEeihk8FBN6KA55KG7wkFLooQTkoYTBQwmhh5KQh5IGD6mEHkpBHkoZPJQSeigNeSht8JBa6KEM5KGMwUMZoYeykIeyBg9phB7KQR7KGTyUE3ooD3kob/CQVuihAuShgsFDBaGHipCHigYP6YQeKkEeKhk8VBJ6qAx5qGzwkF7ooQrkoYrBQxWhh6qQh6oGDxmEHqpBHqoZPFQTeqgOeahu8JBR6KEG5KGGwUMNoYeakIeaBg+ZhB5qQR5qGTzUEnqoDXmobfCQWeihDuShjsFDHaGHupCHugYPWYQe6kEe6hk81BN6qA95qG/wkFXooQHkoYHBQwOhh4aQh4YGD9mEHhpBHhoZPDQSemgMeWhs8JBd6KEJ5KGJwUMToYemkIemBg85hB6aQR6aGTw0E3poDnlobvCQU+ihBeShhcFDC6GHlpCHlgYPuYQeWkEeWhk8tBJ6aA15aG3wkFvooQ3koY3BQxuhh7aQh7YGD3mEHtpBHtoZPLQTemgPeWhv8JBX6KED5KGDwUMHoYeOkIeOBg/5hB46QR46GTx0EnroDHnobPCQX+ihC+Shi8FDF6GHrpCHrgYPBYQeukEeuhk8dBN66A556G7wUFDooQfkoYfBQw+hh56Qh54GD4WEHnpBHnoZPPQSeugNeeht8FBY6KEP5KGPwUMfoYe+kIe+Bg9FhB76QR76GTz0E3roD3nob/BQVOhhAORhgMHDAKGHgZCHgQYPxYQeBkEeBhk8DBJ6GAx5GGzwUFzoYQjkYYjBwxChh6GQh6EGDyWEHoKQh6DBQ1DoYRjkYZjBQ0mhh+GQh+EGD8OFHkZAHkYYPJQSehgJeRhp8DBS6GEU5GGUwUNpoYfRkIfRBg+jhR7GQB7GGDyUEXoYC3kYa/AwVuhhHORhnMFDWaGH8ZCH8QYP44UeJkAeJhg8lBN6mAh5mGjwMFHoYRLkYZLBQ3mhh8mQh8kGD5OFHqZAHqYYPFQQepgKeZhq8DBV6GEa5GGawUNFoYfpkIfpBg/ThR5mQB5mGDxUEnqYCXmYafAwU+hhFuRhlsFDZaGH2ZCH2QYPs4Ue5kAe5hg8VBF6mAt5mGvwMFfoYR7kYZ7BQ1Whh/mQh/kGD/OFHhZAHhYYPFQTelgIeVho8LBQ6GER5GGRwUN1oYfFkIfFBg+LhR6WQB6WGDzUEHpYCnlYavCwVOhhGeRhmcFDTaGH5ZCH5QYPy4UeVkAeVhg81BJ6WAl5WGnwsFLoYRXkYZXBQ22hh9WQh9UGD6uFHtZAHtYYPNQRelgLeVhr8LBW6GEd5GGdwUNdoYf1kIf1Bg/rhR42QB42GDzUE3rYCHnYaPCwUehhE+Rhk8FDfaGHzZCHzQYPm4UetkAethg8NBB62Ap52GrwsFXoYRvkYZvBQ0Ohh+2Qh+0GD9uFHnZAHnYYPDQSetgJedhp8LBT6GEX5GGXwUNjoYfdkIfdBg+7hR72QB72GDw0EXrYC3nYa/CwV+hhH+Rhn8FDU6GH/ZCH/QYP+4UeDkAeDhg8NBN6OAh5OGjwcFDo4RDk4ZDBQ3Ohh8OQh8MGD4eFHo5AHo4YPLQQejgKeThq8HBU6OEY5OGYwUNLoYfjkIfjBg/HhR5OQB5OGDy0Eno4CXk4afBwUujhFOThlMFDa6GH05CH0wYPp4UezkAezhg8tBF6OAt5OGvwcFbo4Rzk4ZzBQ1uhh/OQh/MGD+eFHi5AHi4YPLQTergIebho8HBR6OES5OGSwUN7oYfLkIfLBg+XhR6uQB6uGDx0EHq4Cnm4avBwVejhGuThmsFDR6GH65CH6wYP14UebkAebhg8dBJ6uAl5uGnwcFPo4UfIw48GD52FHm5BHm4ZPNwSevgJ8vCTwUMXoYfbkIfbBg+3hR5+hjz8bPDQVejhDuThjsHDHaGHXyAPvxg8dBN6uAt5uGvwcFfo4VfIw68GD92FHu5BHu4ZPNwTergPebhv8NBD6OEB5OGBwcMDoYeHkIeHBg89hR4eQR4eGTw8Enp4DHl4bPDQS+jhCeThicHDE6GHp5CHpwYPvYUenkEenhk8PBN6eA55eG7w0Efo4QXk4YXBwwuhh5eQh5cGD32FHl5BHl4ZPLwSengNeXht8NBP6OEN5OGNwcMboYffIA+/GTz0F3p4C3l4a/DwVujhd8jD7wYPA4Qe3kEe3hk8vBN6+APy8IfBw0Chh/eQh/cGD++FHv6EPPxp8DBI6OED5OGDwcMHoYe/IA9/GTwMFnr4CHn4aPDwUejhb8jD3wYPQ4QePkEePhk8fBJ6+Afy8I/Bw1Chh8+Qh88GD5+FHv6FPPxr8BAUevgCefhi8PBF6OEr5OGrwcMwoYdvkIdvBg/fhB6+Qx6+GzwMF3r4oS/j4T+7tIf/vv1/3QrRl/EQoi/vYYTQQ0jIQ0iDh5BCD6EgD6EMHkYKPYSGPIQ2eAgt9BAG8hDG4GGU0ENYyENYg4ewQg/hIA/hDB5GCz2EhzyEN3gIL/QQAfIQweBhjNBDRMhDRIOHiEIPkSAPkQwexgo9RIY8RDZ4iCz0EAXyEMXgYZzQQ1TIQ1SDh6hCD9EgD9EMHsYLPUSHPEQ3eIgu9BAD8hDD4GGC0ENMyENMg4eYQg+xIA+xDB4mCj3EhjzENniILfQQB/IQx+BhktBDXMhDXIOHuEIP8SAP8QweJgs9xIc8xDd4iC/0kADykMDgYYrQQ0LIQ0KDh4RCD4kgD4kMHqYKPSSGPCQ2eEgs9JAE8pDE4GGa0ENSyENSg4ekQg/JIA/JDB6mCz0EIA8Bg4eA0ENyyENyg4cZQg8pIA8pDB5SCD2khDykNHiYKfSQCvKQyuAhldBDashDaoOHWUIPaSAPaQwe0gg9pIU8pDV4mC30kA7ykM7gIZ3QQ3rIQ3qDhzlCDxkgDxkMHjIIPWSEPGQ0eJgr9JAJ8pDJ4CGT0ENmyENmg4d5Qg9ZIA9ZDB6yCD1khTxkNXiYL/SQDfKQzeAhm9BDdshDdoOHBUIPOSAPOQwecgg95IQ85DR4WCj0kAvykMvgIZfQQ27IQ26Dh0VCD3kgD3kMHvIIPeSFPOQ1eFgs9JAP8pDP4CGf0EN+yEN+g4clQg8FIA8FDB4KCD0UhDwUNHhYKvRQCPJQyOChkNBDYchDYYOHZUIPRSAPRQweigg9FIU8FDV4WC70UAzyUMzgoZjQQ3HIQ3GDhxVCDyUgDyUMHkoIPZSEPJQ0eFgp9FAK8lDK4KGU0ENpyENpg4dVQg9lIA9lDB7KCD2UhTyUNXhYLfRQDvJQzuChnNBDechDeYOHNUIPFSAPFQweKgg9VIQ8VDR4WCv0UAnyUMngoZLQQ2XIQ2WDh3VCD1UgD1UMHqoIPVSFPFQ1eFgv9FAN8lDN4KGa0EN1yEN1g4cNQg81IA81DB5qCD3UhDzUNHjYKPRQC/JQy+ChltBDbchDbYOHTUIPdSAPdQwe6gg91IU81DV42Cz0UA/yUM/goZ7QQ33IQ32Dhy1CDw0gDw0MHhoIPTSEPDQ0eNgq9NAI8tDI4KGR0ENjyENjg4dtQg9NIA9NDB6aCD00hTw0NXjYLvTQDPLQzOChmdBDc8hDc4OHHUIPLSAPLQweWgg9tIQ8tDR42Cn00Ary0MrgoZXQQ2vIQ2uDh11CD20gD20MHtoIPbSFPLQ1eNgt9NAO8tDO4KGd0EN7yEN7g4c9Qg8dIA8dDB46CD10hDx0NHjYK/TQCfLQyeChk9BDZ8hDZ4OHfUIPXSAPXQweugg9dIU8dDV42C/00A3y0M3goZvQQ3fIQ3eDhwNCDz0gDz0MHnoIPfSEPPQ0eDgo9NAL8tDL4KGX0ENvyENvg4dDQg99IA99DB76CD30hTz0NXg4LPTQD/LQz+Chn9BDf8hDf4OHI0IPAyAPAwweBgg9DIQ8DDR4OCr0MAjyMMjgYZDQw2DIw2CDh2NCD0MgD0MMHoYIPQyFPAw1eDgu9BCEPAQNHoJCD8MgD8MMHk4IPQyHPAw3eBgu9DAC8jDC4OGk0MNIyMNIg4eRQg+jIA+jDB5OCT2MhjyMNngYLfQwBvIwxuDhtNDDWMjDWIOHsUIP4yAP4wwezgg9jIc8jDd4GC/0MAHyMMHg4azQw0TIw0SDh4lCD5MgD5MMHs4JPUyGPEw2eJgs9DAF8jDF4OG80MNUyMNUg4epQg/TIA/TDB4uCD1MhzxMN3iYLvQwA/Iww+DhotDDTMjDTIOHmUIPsyAPswweLgk9zIY8zDZ4mC30MAfyMMfg4bLQw1zIw1yDh7lCD/MgD/MMHq4IPcyHPMw3eJgv9LAA8rDA4OGq0MNCyMNCg4eFQg+LIA+LDB6uCT0shjwsNnhYLPSwBPKwxODhutDDUsjDUoOHpUIPyyAPywwebgg9LIc8LDd4WC70sALysMLg4abQw0rIw0qDh5VCD6sgD6sMHn4UelgNeVht8LBa6GEN5GGNwcMtoYe1kIe1Bg9rhR7WQR7WGTz8JPSwHvKw3uBhvdDDBsjDBoOH20IPGyEPGw0eNgo9bII8bDJ4+FnoYTPkYbPBw2ahhy2Qhy0GD3eEHrZCHrYaPGwVetgGedhm8PCL0MN2yMN2g4ftQg87IA87DB7uCj3shDzsNHjYKfSwC/Kwy+DhV6GH3ZCH3QYPu4Ue9kAe9hg83BN62At52GvwsFfoYR/kYZ/Bw32hh/2Qh/0GD/uFHg5AHg4YPDwQejgIeTho8HBQ6OEQ5OGQwcNDoYfDkIfDBg+HhR6OQB6OGDw8Eno4Cnk4avBwVOjhGOThmMHDY6GH45CH4wYPx4UeTkAeThg8PBF6OAl5OGnwcFLo4RTk4ZTBw1Ohh9OQh9MGD6eFHs5AHs4YPDwTejgLeThr8HBW6OEc5OGcwcNzoYfzkIfzBg/nhR4uQB4uGDy8EHq4CHm4aPBwUejhEuThksHDS6GHy5CHywYPl4UerkAerhg8vBJ6uAp5uGrwcFXo4Rrk4ZrBw2uhh+uQh+sGD9eFHm5AHm4YPLwRergJebhp8HBT6OFHyMOPBg+/CT3cgjzcMni4JfTwE+ThJ4OHt0IPtyEPtw0ebgs9/Ax5+Nng4XehhzuQhzsGD3eEHn6BPPxi8PBO6OEu5OGuwcNdoYdfIQ+/Gjz8IfRwD/Jwz+DhntDDfcjDfYOH90IPDyAPDwweHgg9PIQ8PDR4+FPo4RHk4ZHBwyOhh8eQh8cGDx+EHp5AHp4YPDwRengKeXhq8PCX0MMzyMMzg4dnQg/PIQ/PDR4+Cj28gDy8MHh4IfTwEvLw0uDhb6GHV5CHVwYPr4QeXkMeXhs8fBJ6eAN5eGPw8Ebo4TfIw28GD/8IPbyFPLw1eHgr9PA75OF3g4fPQg/vIA/vDB7eCT38AXn4w+DhX6GH95CH9wYP74Ue/oQ8/Gnw8EXo4QPk4YPBwwehh78gD38ZPHwVevgIefho8PBR6OFvyMPfBg/fhB4+QR4+GTx8Enr4B/Lwj8HDd6GHz5CHzwYPn4Ue/oU8/Gvw8EMqXYcvkIcvBg9fhB6+Qh6+GjyEEHr4Bnn4ZvDwTejhO+Thu8FDSKGHH/oxHv6zS3v479v/160Q/RgPIfrxHkIJPYSEPIQ0eAgp9BAK8hDK4CG00ENoyENog4fQQg9hIA9hDB7CCD2EhTyENXgIK/QQDvIQzuAhrNBDeMhDeIOH8EIPESAPEQwewgk9RIQ8RDR4iCj0EAnyEMngIbzQQ2TIQ2SDh8hCD1EgD1EMHiIIPUSFPEQ1eIgq9BAN8hDN4CGi0EN0yEN0g4foQg8xIA8xDB4iCT3EhDzENHiIKfQQC/IQy+AhstBDbMhDbIOH2EIPcSAPcQweogg9xIU8xDV4iCv0EA/yEM/gIarQQ3zIQ3yDh/hCDwkgDwkMHqIJPSSEPCQ0eEgo9JAI8pDI4CG60ENiyENig4fEQg9JIA9JDB5iCD0khTwkNXhIKvSQDPKQzOAhptBDAPIQMHgICD0khzwkN3iIJfSQAvKQwuAhhdBDSshDSoOH2EIPqSAPqQweUgk9pIY8pDZ4iCP0kAbykMbgIY3QQ1rIQ1qDh7hCD+kgD+kMHtIJPaSHPKQ3eIgn9JAB8pDB4CGD0ENGyENGg4f4Qg+ZIA+ZDB4yCT1khjxkNnhIIPSQBfKQxeAhi9BDVshDVoOHhEIP2SAP2Qwesgk9ZIc8ZDd4SCT0kAPykMPgIYfQQ07IQ06Dh8RCD7kgD7kMHnIJPeSGPOQ2eEgi9JAH8pDH4CGP0ENeyENeg4ekQg/5IA/5DB7yCT3khzzkN3hIJvRQAPJQwOChgNBDQchDQYOHgNBDIchDIYOHQkIPhSEPhQ0ekgs9FIE8FDF4KCL0UBTyUNTgIYXQQzHIQzGDh2JCD8UhD8UNHlIKPZSAPJQweCgh9FAS8lDS4CGV0EMpyEMpg4dSQg+lIQ+lDR5SCz2UgTyUMXgoI/RQFvJQ1uAhjdBDOchDOYOHckIP5SEP5Q0e0go9VIA8VDB4qCD0UBHyUNHgIZ3QQyXIQyWDh0pCD5UhD5UNHtILPVSBPFQxeKgi9FAV8lDV4CGD0EM1yEM1g4dqQg/VIQ/VDR4yCj3UgDzUMHioIfRQE/JQ0+Ahk9BDLchDLYOHWkIPtSEPtQ0eMgs91IE81DF4qCP0UBfyUNfgIYvQQz3IQz2Dh3pCD/UhD/UNHrIKPTSAPDQweGgg9NAQ8tDQ4CGb0EMjyEMjg4dGQg+NIQ+NDR6yCz00gTw0MXhoIvTQFPLQ1OAhh9BDM8hDM4OHZkIPzSEPzQ0ecgo9tIA8tDB4aCH00BLy0NLgIZfQQyvIQyuDh1ZCD60hD60NHnILPbSBPLQxeGgj9NAW8tDW4CGP0EM7yEM7g4d2Qg/tIQ/tDR7yCj10gDx0MHjoIPTQEfLQ0eAhn9BDJ8hDJ4OHTkIPnSEPnQ0e8gs9dIE8dDF46CL00BXy0NXgoYDQQzfIQzeDh25CD90hD90NHgoKPfSAPPQweOgh9NAT8tDT4KGQ0EMvyEMvg4deQg+9IQ+9DR4KCz30gTz0MXjoI/TQF/LQ1+ChiNBDP8hDP4OHfkIP/SEP/Q0eigo9DIA8DDB4GCD0MBDyMNDgoZjQwyDIwyCDh0FCD4MhD4MNHooLPQyBPAwxeBgi9DAU8jDU4KGE0EMQ8hA0eAgKPQyDPAwzeCgp9DAc8jDc4GG40MMIyMMIg4dSQg8jIQ8jDR5GCj2MgjyMMngoLfQwGvIw2uBhtNDDGMjDGIOHMkIPYyEPYw0exgo9jIM8jDN4KCv0MB7yMN7gYbzQwwTIwwSDh3JCDxMhDxMNHiYKPUyCPEwyeCgv9DAZ8jDZ4GGy0MMUyMMUg4cKQg9TIQ9TDR6mCj1MgzxMM3ioKPQwHfIw3eBhutDDDMjDDIOHSkIPMyEPMw0eZgo9zII8zDJ4qCz0MBvyMNvgYbbQwxzIwxyDhypCD3MhD3MNHuYKPcyDPMwzeKgq9DAf8jDf4GG+0MMCyMMCg4dqQg8LIQ8LDR4WCj0sgjwsMnioLvSwGPKw2OBhsdDDEsjDEoOHGkIPSyEPSw0elgo9LIM8LDN4qCn0sBzysNzgYbnQwwrIwwqDh1pCDyshDysNHlYKPayCPKwyeKgt9LAa8rDa4GG10MMayMMag4c6Qg9rIQ9rDR7WCj2sgzysM3ioK/SwHvKw3uBhvdDDBsjDBoOHekIPGyEPGw0eNgo9bII8bDJ4qC/0sBnysNngYbPQwxbIwxaDhwZCD1shD1sNHrYKPWyDPGwzeGgo9LAd8rDd4GG70MMOyMMOg4dGQg87IQ87DR52Cj3sgjzsMnhoLPSwG/Kw2+Bht9DDHsjDHoOHJkIPeyEPew0e9go97IM87DN4aCr0sB/ysN/gYb/QwwHIwwGDh2ZCDwchDwcNHg4KPRyCPBwyeGgu9HAY8nDY4OGw0MMRyMMRg4cWQg9HIQ9HDR6OCj0cgzwcM3hoKfRwHPJw3ODhuNDDCcjDCYOHVkIPJyEPJw0eTgo9nII8nDJ4aC30cBrycNrg4bTQwxnIwxmDhzZCD2chD2cNHs4KPZyDPJwzeGgr9HAe8nDe4OG80MMFyMMFg4d2Qg8XIQ8XDR4uCj1cgjxcMnhoL/RwGfJw2eDhstDDFcjDFYOHDkIPVyEPVw0ergo9XIM8XDN46Cj0cB3ycN3g4brQww3Iww2Dh05CDzchDzcNHm4KPfwIefjR4KGz0MMtyMMtg4dbQg8/QR5+MnjoIvRwG/Jw2+DhttDDz5CHnw0eugo93IE83DF4uCP08Avk4ReDh25CD3chD3cNHu4KPfwKefjV4KG70MM9yMM9g4d7Qg/3IQ/3DR56CD08gDw8MHh4IPTwEPLw0OChp9DDI8jDI4OHR0IPjyEPjw0eegk9PIE8PDF4eCL08BTy8NTgobfQwzPIwzODh2dCD88hD88NHvoIPbyAPLwweHgh9PAS8vDS4KGv0MMryMMrg4dXQg+vIQ+vDR76CT28gTy8MXh4I/TwG+ThN4OH/kIPbyEPbw0e3go9/A55+N3gYYDQwzvIwzuDh3dCD39AHv4weBgo9PAe8vDe4OG90MOfkIc/DR4GCT18gDx8MHj4IPTwF+ThL4OHwUIPHyEPHw0ePgo9/A15+NvgYYjQwyfIwyeDh09CD/9AHv4xeBgq9PAZ8vDZ4OGz0MO/kId/DR6CQg9fIA9fDB6+CD18hTx8NXgYJvTwDfLwzeDhm9DDd8jDd4OH4UIPP/RnPPxnl/bw37f/r1sh+jMeQvTnPYwQeggJeQhp8BBS6CEU5CGUwcNIoYfQkIfQBg+hhR7CQB7CGDyMEnoIC3kIa/AQVughHOQhnMHDaKGH8JCH8AYP4YUeIkAeIhg8jBF6iAh5iGjwEFHoIRLkIZLBw1ihh8iQh8gGD5GFHqJAHqIYPIwTeogKeYhq8BBV6CEa5CGawcN4oYfokIfoBg/RhR5iQB5iGDxMEHqICXmIafAQU+ghFuQhlsHDRKGH2JCH2AYPsYUe4kAe4hg8TBJ6iAt5iGvwEFfoIR7kIZ7Bw2Shh/iQh/gGD/GFHhJAHhIYPEwRekgIeUho8JBQ6CER5CGRwcNUoYfEkIfEBg+JhR6SQB6SGDxME3pICnlIavCQVOghGeQhmcHDdKGHAOQhYPAQEHpIDnlIbvAwQ+ghBeQhhcFDCqGHlJCHlAYPM4UeUkEeUhk8pBJ6SA15SG3wMEvoIQ3kIY3BQxqhh7SQh7QGD7OFHtJBHtIZPKQTekgPeUhv8DBH6CED5CGDwUMGoYeMkIeMBg9zhR4yQR4yGTxkEnrIDHnIbPAwT+ghC+Qhi8FDFqGHrJCHrAYP84UeskEeshk8ZBN6yA55yG7wsEDoIQfkIYfBQw6hh5yQh5wGDwuFHnJBHnIZPOQSesgNecht8LBI6CEP5CGPwUMeoYe8kIe8Bg+LhR7yQR7yGTzkE3rID3nIb/CwROihAOShgMFDAaGHgpCHggYPS4UeCkEeChk8FBJ6KAx5KGzwsEzooQjkoYjBQxGhh6KQh6IGD8uFHopBHooZPBQTeigOeShu8LBC6KEE5KGEwUMJoYeSkIeSBg8rhR5KQR5KGTyUEnooDXkobfCwSuihDOShjMFDGaGHspCHsgYPq4UeykEeyhk8lBN6KA95KG/wsEbooQLkoYLBQwWhh4qQh4oGD2uFHipBHioZPFQSeqgMeahs8LBO6KEK5KGKwUMVoYeqkIeqBg/rhR6qQR6qGTxUE3qoDnmobvCwQeihBuShhsFDDaGHmpCHmgYPG4UeakEeahk81BJ6qA15qG3wsEnooQ7koY7BQx2hh7qQh7oGD5uFHupBHuoZPNQTeqgPeahv8LBF6KEB5KGBwUMDoYeGkIeGBg9bhR4aQR4aGTw0EnpoDHlobPCwTeihCeShicFDE6GHppCHpgYP24UemkEemhk8NBN6aA55aG7wsEPooQXkoYXBQwuhh5aQh5YGDzuFHlpBHloZPLQSemgNeWht8LBL6KEN5KGNwUMboYe2kIe2Bg+7hR7aQR7aGTy0E3poD3lob/CwR+ihA+Shg8FDB6GHjpCHjgYPe4UeOkEeOhk8dBJ66Ax56GzwsE/ooQvkoYvBQxehh66Qh64GD/uFHrpBHroZPHQTeugOeehu8HBA6KEH5KGHwUMPoYeekIeeBg8HhR56QR56GTz0EnroDXnobfBwSOihD+Shj8FDH6GHvpCHvgYPh4Ue+kEe+hk89BN66A956G/wcEToYQDkYYDBwwChh4GQh4EGD0eFHgZBHgYZPAwSehgMeRhs8HBM6GEI5GGIwcMQoYehkIehBg/HhR6CkIegwUNQ6GEY5GGYwcMJoYfhkIfhBg/DhR5GQB5GGDycFHoYCXkYafAwUuhhFORhlMHDKaGH0ZCH0QYPo4UexkAexhg8nBZ6GAt5GGvwMFboYRzkYZzBwxmhh/GQh/EGD+OFHiZAHiYYPJwVepgIeZho8DBR6GES5GGSwcM5oYfJkIfJBg+ThR6mQB6mGDycF3qYCnmYavAwVehhGuRhmsHDBaGH6ZCH6QYP04UeZkAeZhg8XBR6mAl5mGnwMFPoYRbkYZbBwyWhh9mQh9kGD7OFHuZAHuYYPFwWepgLeZhr8DBX6GEe5GGewcMVoYf5kIf5Bg/zhR4WQB4WGDxcFXpYCHlYaPCwUOhhEeRhkcHDNaGHxZCHxQYPi4UelkAelhg8XBd6WAp5WGrwsFToYRnkYZnBww2hh+WQh+UGD8uFHlZAHlYYPNwUelgJeVhp8LBS6GEV5GGVwcOPQg+rIQ+rDR5WCz2sgTysMXi4JfSwFvKw1uBhrdDDOsjDOoOHn4Qe1kMe1hs8rBd62AB52GDwcFvoYSPkYaPBw0ahh02Qh00GDz8LPWyGPGw2eNgs9LAF8rDF4OGO0MNWyMNWg4etQg/bIA/bDB5+EXrYDnnYbvCwXehhB+Rhh8HDXaGHnZCHnQYPO4UedkEedhk8/Cr0sBvysNvgYbfQwx7Iwx6Dh3tCD3shD3sNHvYKPeyDPOwzeLgv9LAf8rDf4GG/0MMByMMBg4cHQg8HIQ8HDR4OCj0cgjwcMnh4KPRwGPJw2ODhsNDDEcjDEYOHR0IPRyEPRw0ejgo9HIM8HDN4eCz0cBzycNzg4bjQwwnIwwmDhydCDychDycNHk4KPZyCPJwyeHgq9HAa8nDa4OG00MMZyMMZg4dnQg9nIQ9nDR7OCj2cgzycM3h4LvRwHvJw3uDhvNDDBcjDBYOHF0IPFyEPFw0eLgo9XII8XDJ4eCn0cBnycNng4bLQwxXIwxWDh1dCD1chD1cNHq4KPVyDPFwzeHgt9HAd8nDd4OG60MMNyMMNg4c3Qg83IQ83DR5uCj38CHn40eDhN6GHW5CHWwYPt4QefoI8/GTw8Fbo4Tbk4bbBw22hh58hDz8bPPwu9HAH8nDH4OGO0MMvkIdfDB7eCT3chTzcNXi4K/TwK+ThV4OHP4Qe7kEe7hk83BN6uA95uG/w8F7o4QHk4YHBwwOhh4eQh4cGD38KPTyCPDwyeHgk9PAY8vDY4OGD0MMTyMMTg4cnQg9PIQ9PDR7+Enp4Bnl4ZvDwTOjhOeThucHDR6GHF5CHFwYPL4QeXkIeXho8/C308Ary8Mrg4ZXQw2vIw2uDh09CD28gD28MHt4IPfwGefjN4OEfoYe3kIe3Bg9vhR5+hzz8bvDwWejhHeThncHDO6GHPyAPfxg8/Cv08B7y8N7g4b3Qw5+Qhz8NHr4IPXyAPHwwePgg9PAX5OEvg4evQg8fIQ8fDR4+Cj38DXn42+Dhm9DDJ8jDJ4OHT0IP/0Ae/jF4+C708Bny8Nng4bPQw7+Qh38NHn5IrevwBfLwxeDhi9DDV8jDV4OHEEIP3yAP3wwevgk9fIc8fDd4CCn08MMAxsN/dmkP/337/7oVYgDjIcQA3kMooYeQkIeQBg8hhR5CQR5CGTyEFnoIDXkIbfAQWughDOQhjMFDGKGHsJCHsAYPYYUewkEewhk8hBV6CA95CG/wEF7oIQLkIYLBQzihh4iQh4gGDxGFHiJBHiIZPIQXeogMeYhs8BBZ6CEK5CGKwUMEoYeokIeoBg9RhR6iQR6iGTxEFHqIDnmIbvAQXeghBuQhhsFDJKGHmJCHmAYPMYUeYkEeYhk8RBZ6iA15iG3wEFvoIQ7kIY7BQxShh7iQh7gGD3GFHuJBHuIZPEQVeogPeYhv8BBf6CEB5CGBwUM0oYeEkIeEBg8JhR4SQR4SGTxEF3pIDHlIbPCQWOghCeQhicFDDKGHpJCHpAYPSYUekkEekhk8xBR6CEAeAgYPAaGH5JCH5AYPsYQeUkAeUhg8pBB6SAl5SGnwEFvoIRXkIZXBQyqhh9SQh9QGD3GEHtJAHtIYPKQRekgLeUhr8BBX6CEd5CGdwUM6oYf0kIf0Bg/xhB4yQB4yGDxkEHrICHnIaPAQX+ghE+Qhk8FDJqGHzJCHzAYPCYQeskAeshg8ZBF6yAp5yGrwkFDoIRvkIZvBQzahh+yQh+wGD4mEHnJAHnIYPOQQesgJechp8JBY6CEX5CGXwUMuoYfckIfcBg9JhB7yQB7yGDzkEXrIC3nIa/CQVOghH+Qhn8FDPqGH/JCH/AYPyYQeCkAeChg8FBB6KAh5KGjwEBB6KAR5KGTwUEjooTDkobDBQ3KhhyKQhyIGD0WEHopCHooaPKQQeigGeShm8FBM6KE45KG4wUNKoYcSkIcSBg8lhB5KQh5KGjykEnooBXkoZfBQSuihNOShtMFDaqGHMpCHMgYPZYQeykIeyho8pBF6KAd5KGfwUE7ooTzkobzBQ1qhhwqQhwoGDxWEHipCHioaPKQTeqgEeahk8FBJ6KEy5KGywUN6oYcqkIcqBg9VhB6qQh6qGjxkEHqoBnmoZvBQTeihOuShusFDRqGHGpCHGgYPNYQeakIeaho8ZBJ6qAV5qGXwUEvooTbkobbBQ2ahhzqQhzoGD3WEHupCHuoaPGQReqgHeahn8FBP6KE+5KG+wUNWoYcGkIcGBg8NhB4aQh4aGjxkE3poBHloZPDQSOihMeShscFDdqGHJpCHJgYPTYQemkIemho85BB6aAZ5aGbw0EzooTnkobnBQ06hhxaQhxYGDy2EHlpCHloaPOQSemgFeWhl8NBK6KE15KG1wUNuoYc2kIc2Bg9thB7aQh7aGjzkEXpoB3loZ/DQTuihPeShvcFDXqGHDpCHDgYPHYQeOkIeOho85BN66AR56GTw0EnooTPkobPBQ36hhy6Qhy4GD12EHrpCHroaPBQQeugGeehm8NBN6KE75KG7wUNBoYcekIceBg89hB56Qh56GjwUEnroBXnoZfDQS+ihN+Sht8FDYaGHPpCHPgYPfYQe+kIe+ho8FBF66Ad56Gfw0E/ooT/kob/BQ1GhhwGQhwEGDwOEHgZCHgYaPBQTehgEeRhk8DBI6GEw5GGwwUNxoYchkIchBg9DhB6GQh6GGjyUEHoIQh6CBg9BoYdhkIdhBg8lhR6GQx6GGzwMF3oYAXkYYfBQSuhhJORhpMHDSKGHUZCHUQYPpYUeRkMeRhs8jBZ6GAN5GGPwUEboYSzkYazBw1ihh3GQh3EGD2WFHsZDHsYbPIwXepgAeZhg8FBO6GEi5GGiwcNEoYdJkIdJBg/lhR4mQx4mGzxMFnqYAnmYYvBQQehhKuRhqsHDVKGHaZCHaQYPFYUepkMephs8TBd6mAF5mGHwUEnoYSbkYabBw0yhh1mQh1kGD5WFHmZDHmYbPMwWepgDeZhj8FBF6GEu5GGuwcNcoYd5kId5Bg9VhR7mQx7mGzzMF3pYAHlYYPBQTehhIeRhocHDQqGHRZCHRQYP1YUeFkMeFhs8LBZ6WAJ5WGLwUEPoYSnkYanBw1Khh2WQh2UGDzWFHpZDHpYbPCwXelgBeVhh8FBL6GEl5GGlwcNKoYdVkIdVBg+1hR5WQx5WGzysFnpYA3lYY/BQR+hhLeRhrcHDWqGHdZCHdQYPdYUe1kMe1hs8rBd62AB52GDwUE/oYSPkYaPBw0ahh02Qh00GD/WFHjZDHjYbPGwWetgCedhi8NBA6GEr5GGrwcNWoYdtkIdtBg8NhR62Qx62GzxsF3rYAXnYYfDQSOhhJ+Rhp8HDTqGHXZCHXQYPjYUedkMedhs87BZ62AN52GPw0EToYS/kYa/Bw16hh32Qh30GD02FHvZDHvYbPOwXejgAeThg8NBM6OEg5OGgwcNBoYdDkIdDBg/NhR4OQx4OGzwcFno4Ank4YvDQQujhKOThqMHDUaGHY5CHYwYPLYUejkMejhs8HBd6OAF5OGHw0Ero4STk4aTBw0mhh1OQh1MGD62FHk5DHk4bPJwWejgDeThj8NBG6OEs5OGswcNZoYdzkIdzBg9thR7OQx7OGzycF3q4AHm4YPDQTujhIuThosHDRaGHS5CHSwYP7YUeLkMeLhs8XBZ6uAJ5uGLw0EHo4Srk4arBw1Whh2uQh2sGDx2FHq5DHq4bPFwXergBebhh8NBJ6OEm5OGmwcNNoYcfIQ8/Gjx0Fnq4BXm4ZfBwS+jhJ8jDTwYPXYQebkMebhs83BZ6+Bny8LPBQ1ehhzuQhzsGD3eEHn6BPPxi8NBN6OEu5OGuwcNdoYdfIQ+/Gjx0F3q4B3m4Z/BwT+jhPuThvsFDD6GHB5CHBwYPD4QeHkIeHho89BR6eAR5eGTw8Ejo4THk4bHBQy+hhyeQhycGD0+EHp5CHp4aPPQWengGeXhm8PBM6OE55OG5wUMfoYcXkIcXBg8vhB5eQh5eGjz0FXp4BXl4ZfDwSujhNeThtcFDP6GHN5CHNwYPb4QefoM8/Gbw0F/o4S3k4a3Bw1uhh98hD78bPAwQengHeXhn8PBO6OEPyMMfBg8DhR7eQx7eGzy8F3r4E/Lwp8HDIKGHD5CHDwYPH4Qe/oI8/GXwMFjo4SPk4aPBw0ehh78hD38bPAwRevgEefhk8PBJ6OEfyMM/Bg9DhR4+Qx4+Gzx8Fnr4F/Lwr8FDUOjhC+Thi8HDF6GHr5CHrwYPw4QevkEevhk8fBN6+A55+G7wMFzo4YeBjIf/7NIe/vv2/3UrxEDGQ4iBvIcRQg8hIQ8hDR5CCj2EgjyEMngYKfQQGvIQ2uAhtNBDGMhDGIOHUUIPYSEPYQ0ewgo9hIM8hDN4GC30EB7yEN7gIbzQQwTIQwSDhzFCDxEhDxENHiIKPUSCPEQyeBgr9BAZ8hDZ4CGy0EMUyEMUg4dxQg9RIQ9RDR6iCj1EgzxEM3gYL/QQHfIQ3eAhutBDDMhDDIOHCUIPMSEPMQ0eYgo9xII8xDJ4mCj0EBvyENvgIbbQQxzIQxyDh0lCD3EhD3ENHuIKPcSDPMQzeJgs9BAf8hDf4CG+0EMCyEMCg4cpQg8JIQ8JDR4SCj0kgjwkMniYKvSQGPKQ2OAhsdBDEshDEoOHaUIPSSEPSQ0ekgo9JIM8JDN4mC70EIA8BAweAkIPySEPyQ0eZgg9pIA8pDB4SCH0kBLykNLgYabQQyrIQyqDh1RCD6khD6kNHmYJPaSBPKQxeEgj9JAW8pDW4GG20EM6yEM6g4d0Qg/pIQ/pDR7mCD1kgDxkMHjIIPSQEfKQ0eBhrtBDJshDJoOHTEIPmSEPmQ0e5gk9ZIE8ZDF4yCL0kBXykNXgYb7QQzbIQzaDh2xCD9khD9kNHhYIPeSAPOQweMgh9JAT8pDT4GGh0EMuyEMug4dcQg+5IQ+5DR4WCT3kgTzkMXjII/SQF/KQ1+BhsdBDPshDPoOHfEIP+SEP+Q0elgg9FIA8FDB4KCD0UBDyUNDgYanQQyHIQyGDh0JCD4UhD4UNHpYJPRSBPBQxeCgi9FAU8lDU4GG50EMxyEMxg4diQg/FIQ/FDR5WCD2UgDyUMHgoIfRQEvJQ0uBhpdBDKchDKYOHUkIPpSEPpQ0eVgk9lIE8lDF4KCP0UBbyUNbgYbXQQznIQzmDh3JCD+UhD+UNHtYIPVSAPFQweKgg9FAR8lDR4GGt0EMlyEMlg4dKQg+VIQ+VDR7WCT1UgTxUMXioIvRQFfJQ1eBhvdBDNchDNYOHakIP1SEP1Q0eNgg91IA81DB4qCH0UBPyUNPgYaPQQy3IQy2Dh1pCD7UhD7UNHjYJPdSBPNQxeKgj9FAX8lDX4GGz0EM9yEM9g4d6Qg/1IQ/1DR62CD00gDw0MHhoIPTQEPLQ0OBhq9BDI8hDI4OHRkIPjSEPjQ0etgk9NIE8NDF4aCL00BTy0NTgYbvQQzPIQzODh2ZCD80hD80NHnYIPbSAPLQweGgh9NAS8tDS4GGn0EMryEMrg4dWQg+tIQ+tDR52CT20gTy0MXhoI/TQFvLQ1uBht9BDO8hDO4OHdkIP7SEP7Q0e9gg9dIA8dDB46CD00BHy0NHgYa/QQyfIQyeDh05CD50hD50NHvYJPXSBPHQxeOgi9NAV8tDV4GG/0EM3yEM3g4duQg/dIQ/dDR4OCD30gDz0MHjoIfTQE/LQ0+DhoNBDL8hDL4OHXkIPvSEPvQ0eDgk99IE89DF46CP00Bfy0Nfg4bDQQz/IQz+Dh35CD/0hD/0NHo4IPQyAPAwweBgg9DAQ8jDQ4OGo0MMgyMMgg4dBQg+DIQ+DDR6OCT0MgTwMMXgYIvQwFPIw1ODhuNBDEPIQNHgICj0MgzwMM3g4IfQwHPIw3OBhuNDDCMjDCIOHk0IPIyEPIw0eRgo9jII8jDJ4OCX0MBryMNrgYbTQwxjIwxiDh9NCD2MhD2MNHsYKPYyDPIwzeDgj9DAe8jDe4GG80MMEyMMEg4ezQg8TIQ8TDR4mCj1MgjxMMng4J/QwGfIw2eBhstDDFMjDFIOH80IPUyEPUw0epgo9TIM8TDN4uCD0MB3yMN3gYbrQwwzIwwyDh4tCDzMhDzMNHmYKPcyCPMwyeLgk9DAb8jDb4GG20MMcyMMcg4fLQg9zIQ9zDR7mCj3MgzzMM3i4IvQwH/Iw3+BhvtDDAsjDAoOHq0IPCyEPCw0eFgo9LII8LDJ4uCb0sBjysNjgYbHQwxLIwxKDh+tCD0shD0sNHpYKPSyDPCwzeLgh9LAc8rDc4GG50MMKyMMKg4ebQg8rIQ8rDR5WCj2sgjysMnj4UehhNeRhtcHDaqGHNZCHNQYPt4Qe1kIe1ho8rBV6WAd5WGfw8JPQw3rIw3qDh/VCDxsgDxsMHm4LPWyEPGw0eNgo9LAJ8rDJ4OFnoYfNkIfNBg+bhR62QB62GDzcEXrYCnnYavCwVehhG+Rhm8HDL0IP2yEP2w0etgs97IA87DB4uCv0sBPysNPgYafQwy7Iwy6Dh1+FHnZDHnYbPOwWetgDedhj8HBP6GEv5GGvwcNeoYd9kId9Bg/3hR72Qx72GzzsF3o4AHk4YPDwQOjhIOThoMHDQaGHQ5CHQwYPD4UeDkMeDhs8HBZ6OAJ5OGLw8Ejo4Sjk4ajBw1Ghh2OQh2MGD4+FHo5DHo4bPBwXejgBeThh8PBE6OEk5OGkwcNJoYdTkIdTBg9PhR5OQx5OGzycFno4A3k4Y/DwTOjhLOThrMHDWaGHc5CHcwYPz4UezkMezhs8nBd6uAB5uGDw8ELo4SLk4aLBw0Whh0uQh0sGDy+FHi5DHi4bPFwWergCebhi8PBK6OEq5OGqwcNVoYdrkIdrBg+vhR6uQx6uGzxcF3q4AXm4YfDwRujhJuThpsHDTaGHHyEPPxo8/Cb0cAvycMvg4ZbQw0+Qh58MHt4KPdyGPNw2eLgt9PAz5OFng4ffhR7uQB7uGDzcEXr4BfLwi8HDO6GHu5CHuwYPd4UefoU8/Grw8IfQwz3Iwz2Dh3tCD/chD/cNHt4LPTyAPDwweHgg9PAQ8vDQ4OFPoYdHkIdHBg+PhB4eQx4eGzx8EHp4Anl4YvDwROjhKeThqcHDX0IPzyAPzwwengk9PIc8PDd4+Cj08ALy8MLg4YXQw0vIw0uDh7+FHl5BHl4ZPLwSengNeXht8PBJ6OEN5OGNwcMboYffIA+/GTz8I/TwFvLw1uDhrdDD75CH3w0ePgs9vIM8vDN4eCf08Afk4Q+Dh3+FHt5DHt4bPLwXevgT8vCnwcMXoYcPkIcPBg8fhB7+gjz8ZfDwVejhI+Tho8HDR6GHvyEPfxs8fBN6+AR5+GTw8Eno4R/Iwz8GD9+FHj5DHj4bPHwWevgX8vCvwcMPaXQdvkAevhg8fBF6+Ap5+GrwEELo4Rvk4ZvBwzehh++Qh+8GDyGFHn4YxHj4zy7t4b9v/1+3QgxiPIQYxHsIJfQQEvIQ0uAhpNBDKMhDKIOH0EIPoSEPoQ0eQgs9hIE8hDF4CCP0EBbyENbgIazQQzjIQziDh7BCD+EhD+ENHsILPUSAPEQweAgn9BAR8hDR4CGi0EMkyEMkg4fwQg+RIQ+RDR4iCz1EgTxEMXiIIPQQFfIQ1eAhqtBDNMhDNIOHiEIP0SEP0Q0eogs9xIA8xDB4iCT0EBPyENPgIabQQyzIQyyDh8hCD7EhD7ENHmILPcSBPMQxeIgi9BAX8hDX4CGu0EM8yEM8g4eoQg/xIQ/xDR7iCz0kgDwkMHiIJvSQEPKQ0OAhodBDIshDIoOH6EIPiSEPiQ0eEgs9JIE8JDF4iCH0kBTykNTgIanQQzLIQzKDh5hCDwHIQ8DgISD0kBzykNzgIZbQQwrIQwqDhxRCDykhDykNHmILPaSCPKQyeEgl9JAa8pDa4CGO0EMayEMag4c0Qg9pIQ9pDR7iCj2kgzykM3hIJ/SQHvKQ3uAhntBDBshDBoOHDEIPGSEPGQ0e4gs9ZII8ZDJ4yCT0kBnykNngIYHQQxbIQxaDhyxCD1khD1kNHhIKPWSDPGQzeMgm9JAd8pDd4CGR0EMOyEMOg4ccQg85IQ85DR4SCz3kgjzkMnjIJfSQG/KQ2+AhidBDHshDHoOHPEIPeSEPeQ0ekgo95IM85DN4yCf0kB/ykN/gIZnQQwHIQwGDhwJCDwUhDwUNHgJCD4UgD4UMHgoJPRSGPBQ2eEgu9FAE8lDE4KGI0ENRyENRg4cUQg/FIA/FDB6KCT0UhzwUN3hIKfRQAvJQwuChhNBDSchDSYOHVEIPpSAPpQweSgk9lIY8lDZ4SC30UAbyUMbgoYzQQ1nIQ1mDhzRCD+UgD+UMHsoJPZSHPJQ3eEgr9FAB8lDB4KGC0ENFyENFg4d0Qg+VIA+VDB4qCT1UhjxUNnhIL/RQBfJQxeChitBDVchDVYOHDEIP1SAP1Qweqgk9VIc8VDd4yCj0UAPyUMPgoYbQQ03IQ02Dh0xCD7UgD7UMHmoJPdSGPNQ2eMgs9FAH8lDH4KGO0ENdyENdg4csQg/1IA/1DB7qCT3UhzzUN3jIKvTQAPLQwOChgdBDQ8hDQ4OHbEIPjSAPjQweGgk9NIY8NDZ4yC700ATy0MTgoYnQQ1PIQ1ODhxxCD80gD80MHpoJPTSHPDQ3eMgp9NAC8tDC4KGF0ENLyENLg4dcQg+tIA+tDB5aCT20hjy0NnjILfTQBvLQxuChjdBDW8hDW4OHPEIP7SAP7Qwe2gk9tIc8tDd4yCv00AHy0MHgoYPQQ0fIQ0eDh3xCD50gD50MHjoJPXSGPHQ2eMgv9NAF8tDF4KGL0ENXyENXg4cCQg/dIA/dDB66CT10hzx0N3goKPTQA/LQw+Chh9BDT8hDT4OHQkIPvSAPvQweegk99IY89DZ4KCz00Afy0MfgoY/QQ1/IQ1+DhyJCD/0gD/0MHvoJPfSHPPQ3eCgq9DAA8jDA4GGA0MNAyMNAg4diQg+DIA+DDB4GCT0MhjwMNngoLvQwBPIwxOBhiNDDUMjDUIOHEkIPQchD0OAhKPQwDPIwzOChpNDDcMjDcIOH4UIPIyAPIwweSgk9jIQ8jDR4GCn0MAryMMrgobTQw2jIw2iDh9FCD2MgD2MMHsoIPYyFPIw1eBgr9DAO8jDO4KGs0MN4yMN4g4fxQg8TIA8TDB7KCT1MhDxMNHiYKPQwCfIwyeChvNDDZMjDZIOHyUIPUyAPUwweKgg9TIU8TDV4mCr0MA3yMM3goaLQw3TIw3SDh+lCDzMgDzMMHioJPcyEPMw0eJgp9DAL8jDL4KGy0MNsyMNsg4fZQg9zIA9zDB6qCD3MhTzMNXiYK/QwD/Iwz+ChqtDDfMjDfIOH+UIPCyAPCwweqgk9LIQ8LDR4WCj0sAjysMjgobrQw2LIw2KDh8VCD0sgD0sMHmoIPSyFPCw1eFgq9LAM8rDM4KGm0MNyyMNyg4flQg8rIA8rDB5qCT2shDysNHhYKfSwCvKwyuChttDDasjDaoOH1UIPayAPawwe6gg9rIU8rDV4WCv0sA7ysM7goa7Qw3rIw3qDh/VCDxsgDxsMHuoJPWyEPGw0eNgo9LAJ8rDJ4KG+0MNmyMNmg4fNQg9bIA9bDB4aCD1shTxsNXjYKvSwDfKwzeChodDDdsjDdoOH7UIPOyAPOwweGgk97IQ87DR42Cn0sAvysMvgobHQw27Iw26Dh91CD3sgD3sMHpoIPeyFPOw1eNgr9LAP8rDP4KGp0MN+yMN+g4f9Qg8HIA8HDB6aCT0chDwcNHg4KPRwCPJwyOChudDDYcjDYYOHw0IPRyAPRwweWgg9HIU8HDV4OCr0cAzycMzgoaXQw3HIw3GDh+NCDycgDycMHloJPZyEPJw0eDgp9HAK8nDK4KG10MNpyMNpg4fTQg9nIA9nDB7aCD2chTycNXg4K/RwDvJwzuChrdDDecjDeYOH80IPFyAPFwwe2gk9XIQ8XDR4uCj0cAnycMngob3Qw2XIw2WDh8tCD1cgD1cMHjoIPVyFPFw1eLgq9HAN8nDN4KGj0MN1yMN1g4frQg83IA83DB46CT3chDzcNHi4KfTwI+ThR4OHzkIPtyAPtwwebgk9/AR5+MngoYvQw23Iw22Dh9tCDz9DHn42eOgq9HAH8nDH4OGO0MMvkIdfDB66CT3chTzcNXi4K/TwK+ThV4OH7kIP9yAP9wwe7gk93Ic83Dd46CH08ADy8MDg4YHQw0PIw0ODh55CD48gD48MHh4JPTyGPDw2eOgl9PAE8vDE4OGJ0MNTyMNTg4feQg/PIA/PDB6eCT08hzw8N3joI/TwAvLwwuDhhdDDS8jDS4OHvkIPryAPrwweXgk9vIY8vDZ46Cf08Aby8Mbg4Y3Qw2+Qh98MHvoLPbyFPLw1eHgr9PA75OF3g4cBQg/vIA/vDB7eCT38AXn4w+BhoNDDe8jDe4OH90IPf0Ie/jR4GCT08AHy8MHg4YPQw1+Qh78MHgYLPXyEPHw0ePgo9PA35OFvg4chQg+fIA+fDB4+CT38A3n4x+BhqNDDZ8jDZ4OHz0IP/0Ie/jV4CAo9fIE8fDF4+CL08BXy8NXgYZjQwzfIwzeDh29CD98hD98NHoYLPfwwmPHwn13aw3/f/r9uhRjMeAgxmPcwQughJOQhpMFDSKGHUJCHUAYPI4UeQkMeQhs8hBZ6CAN5CGPwMEroISzkIazBQ1ihh3CQh3AGD6OFHsJDHsIbPIQXeogAeYhg8DBG6CEi5CGiwUNEoYdIkIdIBg9jhR4iQx4iGzxEFnqIAnmIYvAwTughKuQhqsFDVKGHaJCHaAYP44UeokMeohs8RBd6iAF5iGHwMEHoISbkIabBQ0yhh1iQh1gGDxOFHmJDHmIbPMQWeogDeYhj8DBJ6CEu5CGuwUNcoYd4kId4Bg+ThR7iQx7iGzzEF3pIAHlIYPAwReghIeQhocFDQqGHRJCHRAYPU4UeEkMeEhs8JBZ6SAJ5SGLwME3oISnkIanBQ1Khh2SQh2QGD9OFHgKQh4DBQ0DoITnkIbnBwwyhhxSQhxQGDymEHlJCHlIaPMwUekgFeUhl8JBK6CE15CG1wcMsoYc0kIc0Bg9phB7SQh7SGjzMFnpIB3lIZ/CQTughPeQhvcHDHKGHDJCHDAYPGYQeMkIeMho8zBV6yAR5yGTwkEnoITPkIbPBwzyhhyyQhywGD1mEHrJCHrIaPMwXesgGechm8JBN6CE75CG7wcMCoYcckIccBg85hB5yQh5yGjwsFHrIBXnIZfCQS+ghN+Qht8HDIqGHPJCHPAYPeYQe8kIe8ho8LBZ6yAd5yGfwkE/oIT/kIb/BwxKhhwKQhwIGDwWEHgpCHgoaPCwVeigEeShk8FBI6KEw5KGwwcMyoYcikIciBg9FhB6KQh6KGjwsF3ooBnkoZvBQTOihOOShuMHDCqGHEpCHEgYPJYQeSkIeSho8rBR6KAV5KGXwUErooTTkobTBwyqhhzKQhzIGD2WEHspCHsoaPKwWeigHeShn8FBO6KE85KG8wcMaoYcKkIcKBg8VhB4qQh4qGjysFXqoBHmoZPBQSeihMuShssHDOqGHKpCHKgYPVYQeqkIeqho8rBd6qAZ5qGbwUE3ooTrkobrBwwahhxqQhxoGDzWEHmpCHmoaPGwUeqgFeahl8FBL6KE25KG2wcMmoYc6kIc6Bg91hB7qQh7qGjxsFnqoB3moZ/BQT+ihPuShvsHDFqGHBpCHBgYPDYQeGkIeGho8bBV6aAR5aGTw0EjooTHkobHBwzahhyaQhyYGD02EHppCHpoaPGwXemgGeWhm8NBM6KE55KG5wcMOoYcWkIcWBg8thB5aQh5aGjzsFHpoBXloZfDQSuihNeShtcHDLqGHNpCHNgYPbYQe2kIe2ho87BZ6aAd5aGfw0E7ooT3kob3Bwx6hhw6Qhw4GDx2EHjpCHjoaPOwVeugEeehk8NBJ6KEz5KGzwcM+oYcukIcuBg9dhB66Qh66GjzsF3roBnnoZvDQTeihO+Shu8HDAaGHHpCHHgYPPYQeekIeeho8HBR66AV56GXw0EvooTfkobfBwyGhhz6Qhz4GD32EHvpCHvoaPBwWeugHeehn8NBP6KE/5KG/wcMRoYcBkIcBBg8DhB4GQh4GGjwcFXoYBHkYZPAwSOhhMORhsMHDMaGHIZCHIQYPQ4QehkIehho8HBd6CEIeggYPQaGHYZCHYQYPJ4QehkMehhs8DBd6GAF5GGHwcFLoYSTkYaTBw0ihh1GQh1EGD6eEHkZDHkYbPIwWehgDeRhj8HBa6GEs5GGswcNYoYdxkIdxBg9nhB7GQx7GGzyMF3qYAHmYYPBwVuhhIuRhosHDRKGHSZCHSQYP54QeJkMeJhs8TBZ6mAJ5mGLwcF7oYSrkYarBw1Shh2mQh2kGDxeEHqZDHqYbPEwXepgBeZhh8HBR6GEm5GGmwcNMoYdZkIdZBg+XhB5mQx5mGzzMFnqYA3mYY/BwWehhLuRhrsHDXKGHeZCHeQYPV4Qe5kMe5hs8zBd6WAB5WGDwcFXoYSHkYaHBw0Khh0WQh0UGD9eEHhZDHhYbPCwWelgCeVhi8HBd6GEp5GGpwcNSoYdlkIdlBg83hB6WQx6WGzwsF3pYAXlYYfBwU+hhJeRhpcHDSqGHVZCHVQYPPwo9rIY8rDZ4WC30sAbysMbg4ZbQw1rIw1qDh7VCD+sgD+sMHn4SelgPeVhv8LBe6GED5GGDwcNtoYeNkIeNBg8bhR42QR42GTz8LPSwGfKw2eBhs9DDFsjDFoOHO0IPWyEPWw0etgo9bIM8bDN4+EXoYTvkYbvBw3ahhx2Qhx0GD3eFHnZCHnYaPOwUetgFedhl8PCr0MNuyMNug4fdQg97IA97DB7uCT3shTzsNXjYK/SwD/Kwz+DhvtDDfsjDfoOH/UIPByAPBwweHgg9HIQ8HDR4OCj0cAjycMjg4aHQw2HIw2GDh8NCD0cgD0cMHh4JPRyFPBw1eDgq9HAM8nDM4OGx0MNxyMNxg4fjQg8nIA8nDB6eCD2chDycNHg4KfRwCvJwyuDhqdDDacjDaYOH00IPZyAPZwwengk9nIU8nDV4OCv0cA7ycM7g4bnQw3nIw3mDh/NCDxcgDxcMHl4IPVyEPFw0eLgo9HAJ8nDJ4OGl0MNlyMNlg4fLQg9XIA9XDB5eCT1chTxcNXi4KvRwDfJwzeDhtdDDdcjDdYOH60IPNyAPNwwe3gg93IQ83DR4uCn08CPk4UeDh9+EHm5BHm4ZPNwSevgJ8vCTwcNboYfbkIfbBg+3hR5+hjz8bPDwu9DDHcjDHYOHO0IPv0AefjF4eCf0cBfycNfg4a7Qw6+Qh18NHv4QergHebhn8HBP6OE+5OG+wcN7oYcHkIcHBg8PhB4eQh4eGjz8KfTwCPLwyODhkdDDY8jDY4OHD0IPTyAPTwwengg9PIU8PDV4+Evo4Rnk4ZnBwzOhh+eQh+cGDx+FHl5AHl4YPLwQengJeXhp8PC30MMryMMrg4dXQg+vIQ+vDR4+CT28gTy8MXh4I/TwG+ThN4OHf4Qe3kIe3ho8vBV6+B3y8LvBw2ehh3eQh3cGD++EHv6APPxh8PCv0MN7yMN7g4f3Qg9/Qh7+NHj4IvTwAfLwweDhg9DDX5CHvwwevgo9fIQ8fDR4+Cj08Dfk4W+Dh29CD58gD58MHj4JPfwDefjH4OG70MNnyMNng4fPQg//Qh7+NXj4Ia2uwxfIwxeDhy9CD18hD18NHkIIPXyDPHwzePgm9PAd8vDd4CGk0MMPQxgP/9mlPfz37f/rVoghjIcQQ3gPoYQeQkIeQho8hBR6CAV5CGXwEFroITTkIbTBQ2ihhzCQhzAGD2GEHsJCHsIaPIQVeggHeQhn8BBW6CE85CG8wUN4oYcIkIcIBg/hhB4iQh4iGjxEFHqIBHmIZPAQXughMuQhssFDZKGHKJCHKAYPEYQeokIeoho8RBV6iAZ5iGbwEFHoITrkIbrBQ3ShhxiQhxgGD5GEHmJCHmIaPMQUeogFeYhl8BBZ6CE25CG2wUNsoYc4kIc4Bg9RhB7iQh7iGjzEFXqIB3mIZ/AQVeghPuQhvsFDfKGHBJCHBAYP0YQeEkIeEho8JBR6SAR5SGTwEF3oITHkIbHBQ2KhhySQhyQGDzGEHpJCHpIaPCQVekgGeUhm8BBT6CEAeQgYPASEHpJDHpIbPMQSekgBeUhh8JBC6CEl5CGlwUNsoYdUkIdUBg+phB5SQx5SGzzEEXpIA3lIY/CQRughLeQhrcFDXKGHdJCHdAYP6YQe0kMe0hs8xBN6yAB5yGDwkEHoISPkIaPBQ3yhh0yQh0wGD5mEHjJDHjIbPCQQesgCechi8JBF6CEr5CGrwUNCoYdskIdsBg/ZhB6yQx6yGzwkEnrIAXnIYfCQQ+ghJ+Qhp8FDYqGHXJCHXAYPuYQeckMechs8JBF6yAN5yGPwkEfoIS/kIa/BQ1Khh3yQh3wGD/mEHvJDHvIbPCQTeigAeShg8FBA6KEg5KGgwUNA6KEQ5KGQwUMhoYfCkIfCBg/JhR6KQB6KGDwUEXooCnkoavCQQuihGOShmMFDMaGH4pCH4gYPKYUeSkAeShg8lBB6KAl5KGnwkErooRTkoZTBQymhh9KQh9IGD6mFHspAHsoYPJQReigLeShr8JBG6KEc5KGcwUM5oYfykIfyBg9phR4qQB4qGDxUEHqoCHmoaPCQTuihEuShksFDJaGHypCHygYP6YUeqkAeqhg8VBF6qAp5qGrwkEHooRrkoZrBQzWhh+qQh+oGDxmFHmpAHmoYPNQQeqgJeahp8JBJ6KEW5KGWwUMtoYfakIfaBg+ZhR7qQB7qGDzUEXqoC3moa/CQReihHuShnsFDPaGH+pCH+gYPWYUeGkAeGhg8NBB6aAh5aGjwkE3ooRHkoZHBQyOhh8aQh8YGD9mFHppAHpoYPDQRemgKeWhq8JBD6KEZ5KGZwUMzoYfmkIfmBg85hR5aQB5aGDy0EHpoCXloafCQS+ihFeShlcFDK6GH1pCH1gYPuYUe2kAe2hg8tBF6aAt5aGvwkEfooR3koZ3BQzuhh/aQh/YGD3mFHjpAHjoYPHQQeugIeeho8JBP6KET5KGTwUMnoYfOkIfOBg/5hR66QB66GDx0EXroCnnoavBQQOihG+Shm8FDN6GH7pCH7gYPBYUeekAeehg89BB66Al56GnwUEjooRfkoZfBQy+hh96Qh94GD4WFHvpAHvoYPPQReugLeehr8FBE6KEf5KGfwUM/oYf+kIf+Bg9FhR4GQB4GGDwMEHoYCHkYaPBQTOhhEORhkMHDIKGHwZCHwQYPxYUehkAehhg8DBF6GAp5GGrwUELoIQh5CBo8BIUehkEehhk8lBR6GA55GG7wMFzoYQTkYYTBQymhh5GQh5EGDyOFHkZBHkYZPJQWehgNeRht8DBa6GEM5GGMwUMZoYexkIexBg9jhR7GQR7GGTyUFXoYD3kYb/AwXuhhAuRhgsFDOaGHiZCHiQYPE4UeJkEeJhk8lBd6mAx5mGzwMFnoYQrkYYrBQwWhh6mQh6kGD1OFHqZBHqYZPFQUepgOeZhu8DBd6GEG5GGGwUMloYeZkIeZBg8zhR5mQR5mGTxUFnqYDXmYbfAwW+hhDuRhjsFDFaGHuZCHuQYPc4Ue5kEe5hk8VBV6mA95mG/wMF/oYQHkYYHBQzWhh4WQh4UGDwuFHhZBHhYZPFQXelgMeVhs8LBY6GEJ5GGJwUMNoYelkIelBg9LhR6WQR6WGTzUFHpYDnlYbvCwXOhhBeRhhcFDLaGHlZCHlQYPK4UeVkEeVhk81BZ6WA15WG3wsFroYQ3kYY3BQx2hh7WQh7UGD2uFHtZBHtYZPNQVelgPeVhv8LBe6GED5GGDwUM9oYeNkIeNBg8bhR42QR42GTzUF3rYDHnYbPCwWehhC+Rhi8FDA6GHrZCHrQYPW4UetkEethk8NBR62A552G7wsF3oYQfkYYfBQyOhh52Qh50GDzuFHnZBHnYZPDQWetgNedht8LBb6GEP5GGPwUMToYe9kIe9Bg97hR72QR72GTw0FXrYD3nYb/CwX+jhAOThgMFDM6GHg5CHgwYPB4UeDkEeDhk8NBd6OAx5OGzwcFjo4Qjk4YjBQwuhh6OQh6MGD0eFHo5BHo4ZPLQUejgOeThu8HBc6OEE5OGEwUMroYeTkIeTBg8nhR5OQR5OGTy0Fno4DXk4bfBwWujhDOThjMFDG6GHs5CHswYPZ4UezkEezhk8tBV6OA95OG/wcF7o4QLk4YLBQzuhh4uQh4sGDxeFHi5BHi4ZPLQXergMebhs8HBZ6OEK5OGKwUMHoYerkIerBg9XhR6uQR6uGTx0FHq4Dnm4bvBwXejhBuThhsFDJ6GHm5CHmwYPN4UefoQ8/Gjw0Fno4Rbk4ZbBwy2hh58gDz8ZPHQRergNebht8HBb6OFnyMPPBg9dhR7uQB7uGDzcEXr4BfLwi8FDN6GHu5CHuwYPd4UefoU8/Grw0F3o4R7k4Z7Bwz2hh/uQh/sGDz2EHh5AHh4YPDwQengIeXho8NBT6OER5OGRwcMjoYfHkIfHBg+9hB6eQB6eGDw8EXp4Cnl4avDQW+jhGeThmcHDM6GH55CH5wYPfYQeXkAeXhg8vBB6eAl5eGnw0Ffo4RXk4ZXBwyuhh9eQh9cGD/2EHt5AHt4YPLwRevgN8vCbwUN/oYe3kIe3Bg9vhR5+hzz8bvAwQOjhHeThncHDO6GHPyAPfxg8DBR6eA95eG/w8F7o4U/Iw58GD4OEHj5AHj4YPHwQevgL8vCXwcNgoYePkIePBg8fhR7+hjz8bfAwROjhE+Thk8HDJ6GHfyAP/xg8DBV6+Ax5+Gzw8Fno4V/Iw78GD0Ghhy+Qhy8GD1+EHr5CHr4aPAwTevgGefhm8PBN6OE75OG7wcNwoYcfhjIe/rNLe/jv2//XrRBDGQ8hhvIeRgg9hIQ8hDR4CCn0EAryEMrgYaTQQ2jIQ2iDh9BCD2EgD2EMHkYJPYSFPIQ1eAgr9BAO8hDO4GG00EN4yEN4g4fwQg8RIA8RDB7GCD1EhDxENHiIKPQQCfIQyeBhrNBDZMhDZIOHyEIPUSAPUQwexgk9RIU8RDV4iCr0EA3yEM3gYbzQQ3TIQ3SDh+hCDzEgDzEMHiYIPcSEPMQ0eIgp9BAL8hDL4GGi0ENsyENsg4fYQg9xIA9xDB4mCT3EhTzENXiIK/QQD/IQz+BhstBDfMhDfIOH+EIPCSAPCQwepgg9JIQ8JDR4SCj0kAjykMjgYarQQ2LIQ2KDh8RCD0kgD0kMHqYJPSSFPCQ1eEgq9JAM8pDM4GG60EMA8hAweAgIPSSHPCQ3eJgh9JAC8pDC4CGF0ENKyENKg4eZQg+pIA+pDB5SCT2khjykNniYJfSQBvKQxuAhjdBDWshDWoOH2UIP6SAP6Qwe0gk9pIc8pDd4mCP0kAHykMHgIYPQQ0bIQ0aDh7lCD5kgD5kMHjIJPWSGPGQ2eJgn9JAF8pDF4CGL0ENWyENWg4f5Qg/ZIA/ZDB6yCT1khzxkN3hYIPSQA/KQw+Ahh9BDTshDToOHhUIPuSAPuQwecgk95IY85DZ4WCT0kAfykMfgIY/QQ17IQ16Dh8VCD/kgD/kMHvIJPeSHPOQ3eFgi9FAA8lDA4KGA0ENByENBg4elQg+FIA+FDB4KCT0UhjwUNnhYJvRQBPJQxOChiNBDUchDUYOH5UIPxSAPxQweigk9FIc8FDd4WCH0UALyUMLgoYTQQ0nIQ0mDh5VCD6UgD6UMHkoJPZSGPJQ2eFgl9FAG8lDG4KGM0ENZyENZg4fVQg/lIA/lDB7KCT2UhzyUN3hYI/RQAfJQweChgtBDRchDRYOHtUIPlSAPlQweKgk9VIY8VDZ4WCf0UAXyUMXgoYrQQ1XIQ1WDh/VCD9UgD9UMHqoJPVSHPFQ3eNgg9FAD8lDD4KGG0ENNyENNg4eNQg+1IA+1DB5qCT3UhjzUNnjYJPRQB/JQx+ChjtBDXchDXYOHzUIP9SAP9Qwe6gk91Ic81Dd42CL00ADy0MDgoYHQQ0PIQ0ODh61CD40gD40MHhoJPTSGPDQ2eNgm9NAE8tDE4KGJ0ENTyENTg4ftQg/NIA/NDB6aCT00hzw0N3jYIfTQAvLQwuChhdBDS8hDS4OHnUIPrSAPrQweWgk9tIY8tDZ42CX00Aby0MbgoY3QQ1vIQ1uDh91CD+0gD+0MHtoJPbSHPLQ3eNgj9NAB8tDB4KGD0ENHyENHg4e9Qg+dIA+dDB46CT10hjx0NnjYJ/TQBfLQxeChi9BDV8hDV4OH/UIP3SAP3Qweugk9dIc8dDd4OCD00APy0MPgoYfQQ0/IQ0+Dh4NCD70gD70MHnoJPfSGPPQ2eDgk9NAH8tDH4KGP0ENfyENfg4fDQg/9IA/9DB76CT30hzz0N3g4IvQwAPIwwOBhgNDDQMjDQIOHo0IPgyAPgwweBgk9DIY8DDZ4OCb0MATyMMTgYYjQw1DIw1CDh+NCD0HIQ9DgISj0MAzyMMzg4YTQw3DIw3CDh+FCDyMgDyMMHk4KPYyEPIw0eBgp9DAK8jDK4OGU0MNoyMNog4fRQg9jIA9jDB5OCz2MhTyMNXgYK/QwDvIwzuDhjNDDeMjDeIOH8UIPEyAPEwwezgo9TIQ8TDR4mCj0MAnyMMng4ZzQw2TIw2SDh8lCD1MgD1MMHs4LPUyFPEw1eJgq9DAN8jDN4OGC0MN0yMN0g4fpQg8zIA8zDB4uCj3MhDzMNHiYKfQwC/Iwy+DhktDDbMjDbIOH2UIPcyAPcwweLgs9zIU8zDV4mCv0MA/yMM/g4YrQw3zIw3yDh/lCDwsgDwsMHq4KPSyEPCw0eFgo9LAI8rDI4OGa0MNiyMNig4fFQg9LIA9LDB6uCz0shTwsNXhYKvSwDPKwzODhhtDDcsjDcoOH5UIPKyAPKwwebgo9rIQ8rDR4WCn0sArysMrg4Uehh9WQh9UGD6uFHtZAHtYYPNwSelgLeVhr8LBW6GEd5GGdwcNPQg/rIQ/rDR7WCz1sgDxsMHi4LfSwEfKw0eBho9DDJsjDJoOHn4UeNkMeNhs8bBZ62AJ52GLwcEfoYSvkYavBw1ahh22Qh20GD78IPWyHPGw3eNgu9LAD8rDD4OGu0MNOyMNOg4edQg+7IA+7DB5+FXrYDXnYbfCwW+hhD+Rhj8HDPaGHvZCHvQYPe4Ue9kEe9hk83Bd62A952G/wsF/o4QDk4YDBwwOhh4OQh4MGDweFHg5BHg4ZPDwUejgMeThs8HBY6OEI5OGIwcMjoYejkIejBg9HhR6OQR6OGTw8Fno4Dnk4bvBwXOjhBOThhMHDE6GHk5CHkwYPJ4UeTkEeThk8PBV6OA15OG3wcFro4Qzk4YzBwzOhh7OQh7MGD2eFHs5BHs4ZPDwXejgPeThv8HBe6OEC5OGCwcMLoYeLkIeLBg8XhR4uQR4uGTy8FHq4DHm4bPBwWejhCuThisHDK6GHq5CHqwYPV4UerkEerhk8vBZ6uA55uG7wcF3o4Qbk4YbBwxuhh5uQh5sGDzeFHn6EPPxo8PCb0MMtyMMtg4dbQg8/QR5+Mnh4K/RwG/Jw2+DhttDDz5CHnw0efhd6uAN5uGPwcEfo4RfIwy8GD++EHu5CHu4aPNwVevgV8vCrwcMfQg/3IA/3DB7uCT3chzzcN3h4L/TwAPLwwODhgdDDQ8jDQ4OHP4UeHkEeHhk8PBJ6eAx5eGzw8EHo4Qnk4YnBwxOhh6eQh6cGD38JPTyDPDwzeHgm9PAc8vDc4OGj0MMLyMMLg4cXQg8vIQ8vDR7+Fnp4BXl4ZfDwSujhNeThtcHDJ6GHN5CHNwYPb4QefoM8/Gbw8I/Qw1vIw1uDh7dCD79DHn43ePgs9PAO8vDO4OGd0MMfkIc/DB7+FXp4D3l4b/DwXujhT8jDnwYPX4QePkAePhg8fBB6+Avy8JfBw1ehh4+Qh48GDx+FHv6GPPxt8PBN6OET5OGTwcMnoYd/IA//GDx8F3r4DHn4bPDwWejhX8jDvwYPP6TTdfgCefhi8PBF6OEr5OGrwUMIoYdvkIdvBg/fhB6+Qx6+GzyEFHr4Ich4+M8u7eG/b/9ft0IEGQ8hgryHUEIPIYOMh5AGDyGFHkJBHkIZPIQWeggdZDyENngILfQQBvIQxuAhjNBD2CDjIazBQ1ihh3CQh3AGD2GFHsIHGQ/hDR7CCz1EgDxEMHgIJ/QQMch4iGjwEFHoIRLkIZLBQ3ihh8hBxkNkg4fIQg9RIA9RDB4iCD1EDTIeoho8RBV6iAZ5iGbwEFHoIXqQ8RDd4CG60EMMyEMMg4dIQg8xg4yHmAYPMYUeYkEeYhk8RBZ6iB1kPMQ2eIgt9BAH8hDH4CGK0EPcIOMhrsFDXKGHeJCHeAYPUYUe4gcZD/ENHuILPSSAPCQweIgm9JAwyHhIaPCQUOghEeQhkcFDdKGHxEHGQ2KDh8RCD0kgD0kMHmIIPSQNMh6SGjwkFXpIBnlIZvAQU+ghEGQ8BAweAkIPySEPyQ0eYgk9pAgyHlIYPKQQekgJeUhp8BBb6CFVkPGQyuAhldBDashDaoOHOEIPaYKMhzQGD2mEHtJCHtIaPMQVekgXZDykM3hIJ/SQHvKQ3uAhntBDhiDjIYPBQwahh4yQh4wGD/GFHjIFGQ+ZDB4yCT1khjxkNnhIIPSQJch4yGLwkEXoISvkIavBQ0Khh2xBxkM2g4dsQg/ZIQ/ZDR4SCT3kCDIechg85BB6yAl5yGnwkFjoIVeQ8ZDL4CGX0ENuyENug4ckQg95goyHPAYPeYQe8kIe8ho8JBV6yBdkPOQzeMgn9JAf8pDf4CGZ0EOBIOOhgMFDAaGHgpCHggYPAaGHQkHGQyGDh0JCD4UhD4UNHpILPRQJMh6KGDwUEXooCnkoavCQQuihWJDxUMzgoZjQQ3HIQ3GDh5RCDyWCjIcSBg8lhB5KQh5KGjykEnooFWQ8lDJ4KCX0UBryUNrgIbXQQ5kg46GMwUMZoYeykIeyBg9phB7KBRkP5Qweygk9lIc8lDd4SCv0UCHIeKhg8FBB6KEi5KGiwUM6oYdKQcZDJYOHSkIPlSEPlQ0e0gs9VAkyHqoYPFQReqgKeahq8JBB6KFakPFQzeChmtBDdchDdYOHjEIPNYKMhxoGDzWEHmpCHmoaPGQSeqgVZDzUMnioJfRQG/JQ2+Ahs9BDnSDjoY7BQx2hh7qQh7oGD1mEHuoFGQ/1DB7qCT3UhzzUN3jIKvTQIMh4aGDw0EDooSHkoaHBQzahh0ZBxkMjg4dGQg+NIQ+NDR6yCz00CTIemhg8NBF6aAp5aGrwkEPooVmQ8dDM4KGZ0ENzyENzg4ecQg8tgoyHFgYPLYQeWkIeWho85BJ6aBVkPLQyeGgl9NAa8tDa4CG30EObIOOhjcFDG6GHtpCHtgYPeYQe2gUZD+0MHtoJPbSHPLQ3eMgr9NAhyHjoYPDQQeihI+Sho8FDPqGHTkHGQyeDh05CD50hD50NHvILPXQJMh66GDx0EXroCnnoavBQQOihW5Dx0M3goZvQQ3fIQ3eDh4JCDz2CjIceBg89hB56Qh56GjwUEnroFWQ89DJ46CX00Bvy0NvgobDQQ58g46GPwUMfoYe+kIe+Bg9FhB76BRkP/Qwe+gk99Ic89Dd4KCr0MCDIeBhg8DBA6GEg5GGgwUMxoYdBQcbDIIOHQUIPgyEPgw0eigs9DAkyHoYYPAwRehgKeRhq8FBC6CEYZDwEDR6CQg/DIA/DDB5KCj0MDzIehhs8DBd6GAF5GGHwUEroYWSQ8TDS4GGk0MMoyMMog4fSQg+jg4yH0QYPo4UexkAexhg8lBF6GBtkPIw1eBgr9DAO8jDO4KGs0MP4IONhvMHDeKGHCZCHCQYP5YQeJgYZDxMNHiYKPUyCPEwyeCgv9DA5yHiYbPAwWehhCuRhisFDBaGHqUHGw1SDh6lCD9MgD9MMHioKPUwPMh6mGzxMF3qYAXmYYfBQSehhZpDxMNPgYabQwyzIwyyDh8pCD7ODjIfZBg+zhR7mQB7mGDxUEXqYG2Q8zDV4mCv0MA/yMM/goarQw/wg42G+wcN8oYcFkIcFBg/VhB4WBhkPCw0eFgo9LII8LDJ4qC70sDjIeFhs8LBY6GEJ5GGJwUMNoYelQcbDUoOHpUIPyyAPywweago9LA8yHpYbPCwXelgBeVhh8FBL6GFlkPGw0uBhpdDDKsjDKoOH2kIPq4OMh9UGD6uFHtZAHtYYPNQRelgbZDysNXhYK/SwDvKwzuChrtDD+iDjYb3Bw3qhhw2Qhw0GD/WEHjYGGQ8bDR42Cj1sgjxsMnioL/SwOch42GzwsFnoYQvkYYvBQwOhh61BxsNWg4etQg/bIA/bDB4aCj1sDzIeths8bBd62AF52GHw0EjoYWeQ8bDT4GGn0MMuyMMug4fGQg+7g4yH3QYPu4Ue9kAe9hg8NBF62BtkPOw1eNgr9LAP8rDP4KGp0MP+IONhv8HDfqGHA5CHAwYPzYQeDgYZDwcNHg4KPRyCPBwyeGgu9HA4yHg4bPBwWOjhCOThiMFDC6GHo0HGw1GDh6NCD8cgD8cMHloKPRwPMh6OGzwcF3o4AXk4YfDQSujhZJDxcNLg4aTQwynIwymDh9ZCD6eDjIfTBg+nhR7OQB7OGDy0EXo4G2Q8nDV4OCv0cA7ycM7goa3Qw/kg4+G8wcN5oYcLkIcLBg/thB4uBhkPFw0eLgo9XII8XDJ4aC/0cDnIeLhs8HBZ6OEK5OGKwUMHoYerQcbDVYOHq0IP1yAP1wweOgo9XA8yHq4bPFwXergBebhh8NBJ6OFmkPFw0+DhptDDj5CHHw0eOgs93AoyHm4ZPNwSevgJ8vCTwUMXoYfbQcbDbYOH20IPP0MefjZ46Cr0cCfIeLhj8HBH6OEXyMMvBg/dhB7uBhkPdw0e7go9/Ap5+NXgobvQw70g4+GewcM9oYf7kIf7Bg89hB4eBBkPDwweHgg9PIQ8PDR46Cn08CjIeHhk8PBI6OEx5OGxwUMvoYcnQcbDE4OHJ0IPTyEPTw0eegs9PAsyHp4ZPDwTengOeXhu8NBH6OFFkPHwwuDhhdDDS8jDS4OHvkIPr4KMh1cGD6+EHl5DHl4bPPQTengTZDy8MXh4I/TwG+ThN4OH/kIPb4OMh7cGD2+FHn6HPPxu8DBA6OFdkPHwzuDhndDDH5CHPwweBgo9vA8yHt4bPLwXevgT8vCnwcMgoYcPQcbDB4OHD0IPf0Ee/jJ4GCz08DHIePho8PBR6OFvyMPfBg9DhB4+BRkPnwwePgk9/AN5+MfgYajQw+cg4+GzwcNnoYd/IQ//GjwEhR6+BBkPXwwevgg9fIU8fDV4GCb08C3IePhm8PBN6OE75OG7wcNwoYcfhjEe/rNLe/jv2//XrRDDGA8hhvEeRgg9hIQ8hDR4CCn0EAryEMrgYaTQQ2jIQ2iDh9BCD2EgD2EMHkYJPYSFPIQ1eAgr9BAO8hDO4GG00EN4yEN4g4fwQg8RIA8RDB7GCD1EhDxENHiIKPQQCfIQyeBhrNBDZMhDZIOHyEIPUSAPUQwexgk9RIU8RDV4iCr0EA3yEM3gYbzQQ3TIQ3SDh+hCDzEgDzEMHiYIPcSEPMQ0eIgp9BAL8hDL4GGi0ENsyENsg4fYQg9xIA9xDB4mCT3EhTzENXiIK/QQD/IQz+BhstBDfMhDfIOH+EIPCSAPCQwepgg9JIQ8JDR4SCj0kAjykMjgYarQQ2LIQ2KDh8RCD0kgD0kMHqYJPSSFPCQ1eEgq9JAM8pDM4GG60EMA8hAweAgIPSSHPCQ3eJgh9JAC8pDC4CGF0ENKyENKg4eZQg+pIA+pDB5SCT2khjykNniYJfSQBvKQxuAhjdBDWshDWoOH2UIP6SAP6Qwe0gk9pIc8pDd4mCP0kAHykMHgIYPQQ0bIQ0aDh7lCD5kgD5kMHjIJPWSGPGQ2eJgn9JAF8pDF4CGL0ENWyENWg4f5Qg/ZIA/ZDB6yCT1khzxkN3hYIPSQA/KQw+Ahh9BDTshDToOHhUIPuSAPuQwecgk95IY85DZ4WCT0kAfykMfgIY/QQ17IQ16Dh8VCD/kgD/kMHvIJPeSHPOQ3eFgi9FAA8lDA4KGA0ENByENBg4elQg+FIA+FDB4KCT0UhjwUNnhYJvRQBPJQxOChiNBDUchDUYOH5UIPxSAPxQweigk9FIc8FDd4WCH0UALyUMLgoYTQQ0nIQ0mDh5VCD6UgD6UMHkoJPZSGPJQ2eFgl9FAG8lDG4KGM0ENZyENZg4fVQg/lIA/lDB7KCT2UhzyUN3hYI/RQAfJQweChgtBDRchDRYOHtUIPlSAPlQweKgk9VIY8VDZ4WCf0UAXyUMXgoYrQQ1XIQ1WDh/VCD9UgD9UMHqoJPVSHPFQ3eNgg9FAD8lDD4KGG0ENNyENNg4eNQg+1IA+1DB5qCT3UhjzUNnjYJPRQB/JQx+ChjtBDXchDXYOHzUIP9SAP9Qwe6gk91Ic81Dd42CL00ADy0MDgoYHQQ0PIQ0ODh61CD40gD40MHhoJPTSGPDQ2eNgm9NAE8tDE4KGJ0ENTyENTg4ftQg/NIA/NDB6aCT00hzw0N3jYIfTQAvLQwuChhdBDS8hDS4OHnUIPrSAPrQweWgk9tIY8tDZ42CX00Aby0MbgoY3QQ1vIQ1uDh91CD+0gD+0MHtoJPbSHPLQ3eNgj9NAB8tDB4KGD0ENHyENHg4e9Qg+dIA+dDB46CT10hjx0NnjYJ/TQBfLQxeChi9BDV8hDV4OH/UIP3SAP3Qweugk9dIc8dDd4OCD00APy0MPgoYfQQ0/IQ0+Dh4NCD70gD70MHnoJPfSGPPQ2eDgk9NAH8tDH4KGP0ENfyENfg4fDQg/9IA/9DB76CT30hzz0N3g4IvQwAPIwwOBhgNDDQMjDQIOHo0IPgyAPgwweBgk9DIY8DDZ4OCb0MATyMMTgYYjQw1DIw1CDh+NCD0HIQ9DgISj0MAzyMMzg4YTQw3DIw3CDh+FCDyMgDyMMHk4KPYyEPIw0eBgp9DAK8jDK4OGU0MNoyMNog4fRQg9jIA9jDB5OCz2MhTyMNXgYK/QwDvIwzuDhjNDDeMjDeIOH8UIPEyAPEwwezgo9TIQ8TDR4mCj0MAnyMMng4ZzQw2TIw2SDh8lCD1MgD1MMHs4LPUyFPEw1eJgq9DAN8jDN4OGC0MN0yMN0g4fpQg8zIA8zDB4uCj3MhDzMNHiYKfQwC/Iwy+DhktDDbMjDbIOH2UIPcyAPcwweLgs9zIU8zDV4mCv0MA/yMM/g4YrQw3zIw3yDh/lCDwsgDwsMHq4KPSyEPCw0eFgo9LAI8rDI4OGa0MNiyMNig4fFQg9LIA9LDB6uCz0shTwsNXhYKvSwDPKwzODhhtDDcsjDcoOH5UIPKyAPKwwebgo9rIQ8rDR4WCn0sArysMrg4Uehh9WQh9UGD6uFHtZAHtYYPNwSelgLeVhr8LBW6GEd5GGdwcNPQg/rIQ/rDR7WCz1sgDxsMHi4LfSwEfKw0eBho9DDJsjDJoOHn4UeNkMeNhs8bBZ62AJ52GLwcEfoYSvkYavBw1ahh22Qh20GD78IPWyHPGw3eNgu9LAD8rDD4OGu0MNOyMNOg4edQg+7IA+7DB5+FXrYDXnYbfCwW+hhD+Rhj8HDPaGHvZCHvQYPe4Ue9kEe9hk83Bd62A952G/wsF/o4QDk4YDBwwOhh4OQh4MGDweFHg5BHg4ZPDwUejgMeThs8HBY6OEI5OGIwcMjoYejkIejBg9HhR6OQR6OGTw8Fno4Dnk4bvBwXOjhBOThhMHDE6GHk5CHkwYPJ4UeTkEeThk8PBV6OA15OG3wcFro4Qzk4YzBwzOhh7OQh7MGD2eFHs5BHs4ZPDwXejgPeThv8HBe6OEC5OGCwcMLoYeLkIeLBg8XhR4uQR4uGTy8FHq4DHm4bPBwWejhCuThisHDK6GHq5CHqwYPV4UerkEerhk8vBZ6uA55uG7wcF3o4Qbk4YbBwxuhh5uQh5sGDzeFHn6EPPxo8PCb0MMtyMMtg4dbQg8/QR5+Mnh4K/RwG/Jw2+DhttDDz5CHnw0efhd6uAN5uGPwcEfo4RfIwy8GD++EHu5CHu4aPNwVevgV8vCrwcMfQg/3IA/3DB7uCT3chzzcN3h4L/TwAPLwwODhgdDDQ8jDQ4OHP4UeHkEeHhk8PBJ6eAx5eGzw8EHo4Qnk4YnBwxOhh6eQh6cGD38JPTyDPDwzeHgm9PAc8vDc4OGj0MMLyMMLg4cXQg8vIQ8vDR7+Fnp4BXl4ZfDwSujhNeThtcHDJ6GHN5CHNwYPb4QefoM8/Gbw8I/Qw1vIw1uDh7dCD79DHn43ePgs9PAO8vDO4OGd0MMfkIc/DB7+FXp4D3l4b/DwXujhT8jDnwYPX4QePkAePhg8fBB6+Avy8JfBw1ehh4+Qh48GDx+FHv6GPPxt8PBN6OET5OGTwcMnoYd/IA//GDx8F3r4DHn4bPDwWejhX8jDvwYPP6TXdfgCefhi8PBF6OEr5OGrwUMIoYdvkIdvBg/fhB6+Qx6+GzyEFHr4YTjj4T+7tIf/vv1/3QoxnPEQYjjvIZTQQ0jIQ0iDh5BCD6EgD6EMHkILPYSGPIQ2eAgt9BAG8hDG4CGM0ENYyENYg4ewQg/hIA/hDB7CCj2EhzyEN3gIL/QQAfIQweAhnNBDRMhDRIOHiEIPkSAPkQwewgs9RIY8RDZ4iCz0EAXyEMXgIYLQQ1TIQ1SDh6hCD9EgD9EMHiIKPUSHPEQ3eIgu9BAD8hDD4CGS0ENMyENMg4eYQg+xIA+xDB4iCz3EhjzENniILfQQB/IQx+AhitBDXMhDXIOHuEIP8SAP8Qweogo9xIc8xDd4iC/0kADykMDgIZrQQ0LIQ0KDh4RCD4kgD4kMHqILPSSGPCQ2eEgs9JAE8pDE4CGG0ENSyENSg4ekQg/JIA/JDB5iCj0EIA8Bg4eA0ENyyENyg4dYQg8pIA8pDB5SCD2khDykNHiILfSQCvKQyuAhldBDashDaoOHOEIPaSAPaQwe0gg9pIU8pDV4iCv0kA7ykM7gIZ3QQ3rIQ3qDh3hCDxkgDxkMHjIIPWSEPGQ0eIgv9JAJ8pDJ4CGT0ENmyENmg4cEQg9ZIA9ZDB6yCD1khTxkNXhIKPSQDfKQzeAhm9BDdshDdoOHREIPOSAPOQwecgg95IQ85DR4SCz0kAvykMvgIZfQQ27IQ26DhyRCD3kgD3kMHvIIPeSFPOQ1eEgq9JAP8pDP4CGf0EN+yEN+g4dkQg8FIA8FDB4KCD0UhDwUNHgICD0UgjwUMngoJPRQGPJQ2OAhudBDEchDEYOHIkIPRSEPRQ0eUgg9FIM8FDN4KCb0UBzyUNzgIaXQQwnIQwmDhxJCDyUhDyUNHlIJPZSCPJQyeCgl9FAa8lDa4CG10EMZyEMZg4cyQg9lIQ9lDR7SCD2UgzyUM3goJ/RQHvJQ3uAhrdBDBchDBYOHCkIPFSEPFQ0e0gk9VII8VDJ4qCT0UBnyUNngIb3QQxXIQxWDhypCD1UhD1UNHjIIPVSDPFQzeKgm9FAd8lDd4CGj0EMNyEMNg4caQg81IQ81DR4yCT3UgjzUMnioJfRQG/JQ2+Ahs9BDHchDHYOHOkIPdSEPdQ0esgg91IM81DN4qCf0UB/yUN/gIavQQwPIQwODhwZCDw0hDw0NHrIJPTSCPDQyeGgk9NAY8tDY4CG70EMTyEMTg4cmQg9NIQ9NDR5yCD00gzw0M3hoJvTQHPLQ3OAhp9BDC8hDC4OHFkIPLSEPLQ0ecgk9tII8tDJ4aCX00Bry0NrgIbfQQxvIQxuDhzZCD20hD20NHvIIPbSDPLQzeGgn9NAe8tDe4CGv0EMHyEMHg4cOQg8dIQ8dDR7yCT10gjx0MnjoJPTQGfLQ2eAhv9BDF8hDF4OHLkIPXSEPXQ0eCgg9dIM8dDN46Cb00B3y0N3goaDQQw/IQw+Dhx5CDz0hDz0NHgoJPfSCPPQyeOgl9NAb8tDb4KGw0EMfyEMfg4c+Qg99IQ99DR6KCD30gzz0M3joJ/TQH/LQ3+ChqNDDAMjDAIOHAUIPAyEPAw0eigk9DII8DDJ4GCT0MBjyMNjgobjQwxDIwxCDhyFCD0MhD0MNHkoIPQQhD0GDh6DQwzDIwzCDh5JCD8MhD8MNHoYLPYyAPIwweCgl9DAS8jDS4GGk0MMoyMMog4fSQg+jIQ+jDR5GCz2MgTyMMXgoI/QwFvIw1uBhrNDDOMjDOIOHskIP4yEP4w0exgs9TIA8TDB4KCf0MBHyMNHgYaLQwyTIwySDh/JCD5MhD5MNHiYLPUyBPEwxeKgg9DAV8jDV4GGq0MM0yMM0g4eKQg/TIQ/TDR6mCz3MgDzMMHioJPQwE/Iw0+BhptDDLMjDLIOHykIPsyEPsw0eZgs9zIE8zDF4qCL0MBfyMNfgYa7QwzzIwzyDh6pCD/MhD/MNHuYLPSyAPCwweKgm9LAQ8rDQ4GGh0MMiyMMig4fqQg+LIQ+LDR4WCz0sgTwsMXioIfSwFPKw1OBhqdDDMsjDMoOHmkIPyyEPyw0elgs9rIA8rDB4qCX0sBLysNLgYaXQwyrIwyqDh9pCD6shD6sNHlYLPayBPKwxeKgj9LAW8rDW4GGt0MM6yMM6g4e6Qg/rIQ/rDR7WCz1sgDxsMHioJ/SwEfKw0eBho9DDJsjDJoOH+kIPmyEPmw0eNgs9bIE8bDF4aCD0sBXysNXgYavQwzbIwzaDh4ZCD9shD9sNHrYLPeyAPOwweGgk9LAT8rDT4GGn0MMuyMMug4fGQg+7IQ+7DR52Cz3sgTzsMXhoIvSwF/Kw1+Bhr9DDPsjDPoOHpkIP+yEP+w0e9gs9HIA8HDB4aCb0cBDycNDg4aDQwyHIwyGDh+ZCD4chD4cNHg4LPRyBPBwxeGgh9HAU8nDU4OGo0MMxyMMxg4eWQg/HIQ/HDR6OCz2cgDycMHhoJfRwEvJw0uDhpNDDKcjDKYOH1kIPpyEPpw0eTgs9nIE8nDF4aCP0cBbycNbg4azQwznIwzmDh7ZCD+chD+cNHs4LPVyAPFwweGgn9HAR8nDR4OGi0MMlyMMlg4f2Qg+XIQ+XDR4uCz1cgTxcMXjoIPRwFfJw1eDhqtDDNcjDNYOHjkIP1yEP1w0ergs93IA83DB46CT0cBPycNPg4abQw4+Qhx8NHjoLPdyCPNwyeLgl9PAT5OEng4cuQg+3IQ+3DR5uCz38DHn42eChq9DDHcjDHYOHO0IPv0AefjF46Cb0cBfycNfg4a7Qw6+Qh18NHroLPdyDPNwzeLgn9HAf8nDf4KGH0MMDyMMDg4cHQg8PIQ8PDR56Cj08gjw8Mnh4JPTwGPLw2OChl9DDE8jDE4OHJ0IPTyEPTw0eegs9PIM8PDN4eCb08Bzy8NzgoY/QwwvIwwuDhxdCDy8hDy8NHvoKPbyCPLwyeHgl9PAa8vDa4KGf0MMbyMMbg4c3Qg+/QR5+M3joL/TwFvLw1uDhrdDD75CH3w0eBgg9vIM8vDN4eCf08Afk4Q+Dh4FCD+8hD+8NHt4LPfwJefjT4GGQ0MMHyMMHg4cPQg9/QR7+MngYLPTwEfLw0eDho9DD35CHvw0ehgg9fII8fDJ4+CT08A/k4R+Dh6FCD58hD58NHj4LPfwLefjX4CEo9PAF8vDF4OGL0MNXyMNXg4dhQg/fIA/fDB6+CT18hzx8N3gYLvTwwwjGw392aQ//ffv/uhViBOMhxAjewwihh5CQh5AGDyGFHkJBHkIZPIwUeggNeQht8BBa6CEM5CGMwcMooYewkIewBg9hhR7CQR7CGTyMFnoID3kIb/AQXughAuQhgsHDGKGHiJCHiAYPEYUeIkEeIhk8jBV6iAx5iGzwEFnoIQrkIYrBwzihh6iQh6gGD1GFHqJBHqIZPIwXeogOeYhu8BBd6CEG5CGGwcMEoYeYkIeYBg8xhR5iQR5iGTxMFHqIDXmIbfAQW+ghDuQhjsHDJKGHuJCHuAYPcYUe4kEe4hk8TBZ6iA95iG/wEF/oIQHkIYHBwxShh4SQh4QGDwmFHhJBHhIZPEwVekgMeUhs8JBY6CEJ5CGJwcM0oYekkIekBg9JhR6SQR6SGTxMF3oIQB4CBg8BoYfkkIfkBg8zhB5SQB5SGDykEHpICXlIafAwU+ghFeQhlcFDKqGH1JCH1AYPs4Qe0kAe0hg8pBF6SAt5SGvwMFvoIR3kIZ3BQzqhh/SQh/QGD3OEHjJAHjIYPGQQesgIecho8DBX6CET5CGTwUMmoYfMkIfMBg/zhB6yQB6yGDxkEXrICnnIavAwX+ghG+Qhm8FDNqGH7JCH7AYPC4QeckAechg85BB6yAl5yGnwsFDoIRfkIZfBQy6hh9yQh9wGD4uEHvJAHvIYPOQResgLechr8LBY6CEf5CGfwUM+oYf8kIf8Bg9LhB4KQB4KGDwUEHooCHkoaPCwVOihEOShkMFDIaGHwpCHwgYPy4QeikAeihg8FBF6KAp5KGrwsFzooRjkoZjBQzGhh+KQh+IGDyuEHkpAHkoYPJQQeigJeShp8LBS6KEU5KGUwUMpoYfSkIfSBg+rhB7KQB7KGDyUEXooC3koa/CwWuihHOShnMFDOaGH8pCH8gYPa4QeKkAeKhg8VBB6qAh5qGjwsFbooRLkoZLBQyWhh8qQh8oGD+uEHqpAHqoYPFQReqgKeahq8LBe6KEa5KGawUM1oYfqkIfqBg8bhB5qQB5qGDzUEHqoCXmoafCwUeihFuShlsFDLaGH2pCH2gYPm4Qe6kAe6hg81BF6qAt5qGvwsFnooR7koZ7BQz2hh/qQh/oGD1uEHhpAHhoYPDQQemgIeWho8LBV6KER5KGRwUMjoYfGkIfGBg/bhB6aQB6aGDw0EXpoCnloavCwXeihGeShmcFDM6GH5pCH5gYPO4QeWkAeWhg8tBB6aAl5aGnwsFPooRXkoZXBQyuhh9aQh9YGD7uEHtpAHtoYPLQRemgLeWhr8LBb6KEd5KGdwUM7oYf2kIf2Bg97hB46QB46GDx0EHroCHnoaPCwV+ihE+Shk8FDJ6GHzpCHzgYP+4QeukAeuhg8dBF66Ap56GrwsF/ooRvkoZvBQzehh+6Qh+4GDweEHnpAHnoYPPQQeugJeehp8HBQ6KEX5KGXwUMvoYfekIfeBg+HhB76QB76GDz0EXroC3noa/BwWOihH+Shn8FDP6GH/pCH/gYPR4QeBkAeBhg8DBB6GAh5GGjwcFToYRDkYZDBwyChh8GQh8EGD8eEHoZAHoYYPAwRehgKeRhq8HBc6CEIeQgaPASFHoZBHoYZPJwQehgOeRhu8DBc6GEE5GGEwcNJoYeRkIeRBg8jhR5GQR5GGTycEnoYDXkYbfAwWuhhDORhjMHDaaGHsZCHsQYPY4UexkEexhk8nBF6GA95GG/wMF7oYQLkYYLBw1mhh4mQh4kGDxOFHiZBHiYZPJwTepgMeZhs8DBZ6GEK5GGKwcN5oYepkIepBg9ThR6mQR6mGTxcEHqYDnmYbvAwXehhBuRhhsHDRaGHmZCHmQYPM4UeZkEeZhk8XBJ6mA15mG3wMFvoYQ7kYY7Bw2Whh7mQh7kGD3OFHuZBHuYZPFwRepgPeZhv8DBf6GEB5GGBwcNVoYeFkIeFBg8LhR4WQR4WGTxcE3pYDHlYbPCwWOhhCeRhicHDdaGHpZCHpQYPS4UelkEelhk83BB6WA55WG7wsFzoYQXkYYXBw02hh5WQh5UGDyuFHlZBHlYZPPwo9LAa8rDa4GG10MMayMMag4dbQg9rIQ9rDR7WCj2sgzysM3j4SehhPeRhvcHDeqGHDZCHDQYPt4UeNkIeNho8bBR62AR52GTw8LPQw2bIw2aDh81CD1sgD1sMHu4IPWyFPGw1eNgq9LAN8rDN4OEXoYftkIftBg/bhR52QB52GDzcFXrYCXnYafCwU+hhF+Rhl8HDr0IPuyEPuw0edgs97IE87DF4uCf0sBfysNfgYa/Qwz7Iwz6Dh/tCD/shD/sNHvYLPRyAPBwweHgg9HAQ8nDQ4OGg0MMhyMMhg4eHQg+HIQ+HDR4OCz0cgTwcMXh4JPRwFPJw1ODhqNDDMcjDMYOHx0IPxyEPxw0ejgs9nIA8nDB4eCL0cBLycNLg4aTQwynIwymDh6dCD6chD6cNHk4LPZyBPJwxeHgm9HAW8nDW4OGs0MM5yMM5g4fnQg/nIQ/nDR7OCz1cgDxcMHh4IfRwEfJw0eDhotDDJcjDJYOHl0IPlyEPlw0eLgs9XIE8XDF4eCX0cBXycNXg4arQwzXIwzWDh9dCD9chD9cNHq4LPdyAPNwweHgj9HAT8vD/45UelgBBECCIzrRt27Zt27Zt27Zt27Zt27bdG3vb+1bWD2RUVLxLBg+XhB4uQx4uGzy8Fnq4Anm4YvBwRejhKuThqsHDG6GHa5CHawYP14QerkMerhs8vBV6uAF5uGHwcEPo4Sbk4abBwzuhh1uQh1sGD7eEHm5DHm4bPLwXergDebhj8HBH6OEu5OGuwcMHoYd7kId7Bg/3hB7uQx7uGzx8FHp4AHl4YPDwQOjhIeThocHDJ6GHR5CHRwYPj4QeHkMeHhs8fBZ6eAJ5eGLw8ETo4Snk4anBwxehh2eQh2cGD8+EHp5DHp4bPHwVengBeXhh8PBC6OEl5OGlwcM3oYdXkIdXBg+vhB5eQx5eGzx8F3p4A3l4Y/DwRujhLeThrcHDD6GHd5CHdwYP74Qe3kMe3hs8/BR6+AB5+GDw8EHo4SPk4aPBwy+hh0+Qh08GD5+EHj5DHj4bPPwWevgCefhi8PBF6OEr5OGrwcMfoYdvkIdvBg/fhB6+Qx6+Gzz8FXr4AXn4YfDwQ+jhJ+Thp8HDPyl0P/yCPPwyePgl9PAb8vDb4OFfoYc/kIc/Bg9/hB7+Qh7+GjwEEHr4ZxDj4b9d2sP/bv9/W/8OYjz8O4j3EFDoIQDkIYDBQwChh4CQh4AGD4GEHgJBHgIZPAQSeggMeQhs8BBY6CEI5CGIwUMQoYegkIegBg9BhB6CQR6CGTwEE3oIDnkIbvAQVOghBOQhhMFDCKGHkJCHkAYPwYQeQkEeQhk8hBJ6CA15CG3wEFzoIQzkIYzBQxihh7CQh7AGDyGEHsJBHsIZPIQTeggPeQhv8BBS6CEC5CGCwUMEoYeIkIeIBg+hhB4iQR4iGTxEEnqIDHmIbPAQWughCuQhisFDFKGHqJCHqAYPYYQeokEeohk8RBN6iA55iG7wEFboIQbkIYbBQwyhh5iQh5gGD+GEHmJBHmIZPMQSeogNeYht8BBe6CEO5CGOwUMcoYe4kIe4Bg8RhB7iQR7iGTzEE3qID3mIb/AQUeghAeQhgcFDAqGHhJCHhAYPkYQeEkEeEhk8JBJ6SAx5SGzwEFnoIQnkIYnBQxKhh6SQh6QGD1GEHpJBHpIZPCQTekgOeUhu8BBV6CEF5CGFwUMKoYeUkIeUBg/RhB5SQR5SGTykEnpIDXlIbfAQXeghDeQhjcFDGqGHtJCHtAYPMYQe0kEe0hk8pBN6SA95SG/wEFPoIQPkIYPBQwahh4yQh4wGD7GEHjJBHjIZPGQSesgMechs8BBb6CEL5CGLwUMWoYeskIesBg9xhB6yQR6yGTxkE3rIDnnIbvAQV+ghB+Qhh8FDDqGHnJCHnAYP8YQeckEechk85BJ6yA15yG3wEF/oIQ/kIY/BQx6hh7yQh7wGDwmEHvJBHvIZPOQTesgPechv8JBQ6KEA5KGAwUMBoYeCkIeCBg+JhB4KQR4KGTwUEnooDHkobPCQWOihCOShiMFDEaGHopCHogYPSYQeikEeihk8FBN6KA55KG7wkFTooQTkoYTBQwmhh5KQh5IGD8mEHkpBHkoZPJQSeigNeSht8JBc6KEM5KGMwUMZoYeykIeyBg8phB7KQR7KGTyUE3ooD3kob/CQUuihAuShgsFDBaGHipCHigYPqYQeKkEeKhk8VBJ6qAx5qGzwkFrooQrkoYrBQxWhh6qQh6oGD2mEHqpBHqoZPFQTeqgOeahu8JBW6KEG5KGGwUMNoYeakIeaBg/phB5qQR5qGTzUEnqoDXmobfCQXuihDuShjsFDHaGHupCHugYPGYQe6kEe6hk81BN6qA95qG/wkFHooQHkoYHBQwOhh4aQh4YGD5mEHhpBHhoZPDQSemgMeWhs8JBZ6KEJ5KGJwUMToYemkIemBg9ZhB6aQR6aGTw0E3poDnlobvCQVeihBeShhcFDC6GHlpCHlgYP2YQeWkEeWhk8tBJ6aA15aG3wkF3ooQ3koY3BQxuhh7aQh7YGDzmEHtpBHtoZPLQTemgPeWhv8JBT6KED5KGDwUMHoYeOkIeOBg+5hB46QR46GTx0EnroDHnobPCQW+ihC+Shi8FDF6GHrpCHrgYPeYQeukEeuhk8dBN66A556G7wkFfooQfkoYfBQw+hh56Qh54GD/mEHnpBHnoZPPQSeugNeeht8JBf6KEP5KGPwUMfoYe+kIe+Bg8FhB76QR76GTz0E3roD3nob/BQUOhhAORhgMHDAKGHgZCHgQYPhYQeBkEeBhk8DBJ6GAx5GGzwUFjoYQjkYYjBwxChh6GQh6EGD0WEHoZBHoYZPAwTehgOeRhu8FBU6GEE5GGEwcMIoYeRkIeRBg/FhB5GQR5GGTyMEnoYDXkYbfBQXOhhDORhjMHDGKGHsZCHsQYPJYQexkEexhk8jBN6GA95GG/wUFLoYQLkYYLBwwShh4mQh4kGD6WEHiZBHiYZPEwSepgMeZhs8FBa6GEK5GGKwcMUoYepkIepBg9lhB6mQR6mGTxME3qYDnmYbvBQVuhhBuRhhsHDDKGHmZCHmQYP5YQeZkEeZhk8zBJ6mA15mG3wUF7oYQ7kYY7Bwxyhh7mQh7kGDxWEHuZBHuYZPMwTepgPeZhv8FBR6GEB5GGBwcMCoYeFkIeFBg+VhB4WQR4WGTwsEnpYDHlYbPBQWehhCeRhicHDEqGHpZCHpQYPVYQelkEelhk8LBN6WA55WG7wUFXoYQXkYYXBwwqhh5WQh5UGD9WEHlZBHlYZPKwSelgNeVht8FBd6GEN5GGNwcMaoYe1kIe1Bg81hB7WQR7WGTysE3pYD3lYb/BQU+hhA+Rhg8HDBqGHjZCHjQYPtYQeNkEeNhk8bBJ62Ax52GzwUFvoYQvkYYvBwxahh62Qh60GD3WEHrZBHrYZPGwTetgOedhu8FBX6GEH5GGHwcMOoYedkIedBg/1hB52QR52GTzsEnrYDXnYbfBQX+hhD+Rhj8HDHqGHvZCHvQYPDYQe9kEe9hk87BN62A952G/w0FDo4QDk4YDBwwGhh4OQh4MGD42EHg5BHg4ZPBwSejgMeThs8NBY6OEI5OGIwcMRoYejkIejBg9NhB6OQR6OGTwcE3o4Dnk4bvDQVOjhBOThhMHDCaGHk5CHkwYPzYQeTkEeThk8nBJ6OA15OG3w0Fzo4Qzk4YzBwxmhh7OQh7MGDy2EHs5BHs4ZPJwTejgPeThv8NBS6OEC5OGCwcMFoYeLkIeLBg+thB4uQR4uGTxcEnq4DHm4bPDQWujhCuThisHDFaGHq5CHqwYPbYQerkEerhk8XBN6uA55uG7w0Fbo4Qbk4YbBww2hh5uQh5sGD+2EHm5BHm4ZPNwSergNebht8NBe6OEO5OGOwcMdoYe7kIe7Bg8dhB7uQR7uGTzcE3q4D3m4b/DQUejhAeThgcHDA6GHh5CHhwYPnYQeHkEeHhk8PBJ6eAx5eGzw0Fno4Qnk4YnBwxOhh6eQh6cGD12EHp5BHp4ZPDwTengOeXhu8NBV6OEF5OGFwcMLoYeXkIeXBg/dhB5eQR5eGTy8Enp4DXl4bfDQXejhDeThjcHDG6GHt5CHtwYPPYQe3kEe3hk8vBN6eA95eG/w0FPo4QPk4YPBwwehh4+Qh48GD72EHj5BHj4ZPHwSevgMefhs8NBb6OEL5OGLwcMXoYevkIevBg99hB6+QR6+GTx8E3r4Dnn4bvDQV+jhB+Thh8HDD6GHn5CHnwYP/YQefkEefhk8/BJ6+A15+G3w0F/o4Q/k4Y/Bwx+hh7+Qh78GDwOEHv4ZzHj4b5f28L/b/9/Wv4MZD/8O5j0MFHoIAHkIYPAQQOghIOQhoMHDIKGHQJCHQAYPgYQeAkMeAhs8DBZ6CAJ5CGLwEEToISjkIajBwxChh2CQh2AGD8GEHoJDHoIbPAwVeggBeQhh8BBC6CEk5CGkwcMwoYdQkIdQBg+hhB5CQx5CGzwMF3oIA3kIY/AQRughLOQhrMHDCKGHcJCHcAYP4YQewkMewhs8jBR6iAB5iGDwEEHoISLkIaLBwyihh0iQh0gGD5GEHiJDHiIbPIwWeogCeYhi8BBF6CEq5CGqwcMYoYdokIdoBg/RhB6iQx6iGzyMFXqIAXmIYfAQQ+ghJuQhpsHDOKGHWJCHWAYPsYQeYkMeYhs8jBd6iAN5iGPwEEfoIS7kIa7BwwShh3iQh3gGD/GEHuJDHuIbPEwUekgAeUhg8JBA6CEh5CGhwcMkoYdEkIdEBg+JhB4SQx4SGzxMFnpIAnlIYvCQROghKeQhqcHDFKGHZJCHZAYPyYQekkMekhs8TBV6SAF5SGHwkELoISXkIaXBwzShh1SQh1QGD6mEHlJDHlIbPEwXekgDeUhj8JBG6CEt5CGtwcMMoYd0kId0Bg/phB7SQx7SGzzMFHrIAHnIYPCQQeghI+Qho8HDLKGHTJCHTAYPmYQeMkMeMhs8zBZ6yAJ5yGLwkEXoISvkIavBwxyhh2yQh2wGD9mEHrJDHrIbPMwVesgBechh8JBD6CEn5CGnwcM8oYdckIdcBg+5hB5yQx5yGzzMF3rIA3nIY/CQR+ghL+Qhr8HDAqGHfJCHfAYP+YQe8kMe8hs8LBR6KAB5KGDwUEDooSDkoaDBwyKhh0KQh0IGD4WEHgpDHgobPCwWeigCeShi8FBE6KEo5KGowcMSoYdikIdiBg/FhB6KQx6KGzwsFXooAXkoYfBQQuihJOShpMHDMqGHUpCHUgYPpYQeSkMeShs8LBd6KAN5KGPwUEbooSzkoazBwwqhh3KQh3IGD+WEHspDHsobPKwUeqgAeahg8FBB6KEi5KGiwcMqoYdKkIdKBg+VhB4qQx4qGzysFnqoAnmoYvBQReihKuShqsHDGqGHapCHagYP1YQeqkMeqhs8rBV6qAF5qGHwUEPooSbkoabBwzqhh1qQh1oGD7WEHmpDHmobPKwXeqgDeahj8FBH6KEu5KGuwcMGoYd6kId6Bg/1hB7qQx7qGzxsFHpoAHloYPDQQOihIeShocHDJqGHRpCHRgYPjYQeGkMeGhs8bBZ6aAJ5aGLw0ETooSnkoanBwxahh2aQh2YGD82EHppDHpobPGwVemgBeWhh8NBC6KEl5KGlwcM2oYdWkIdWBg+thB5aQx5aGzxsF3poA3loY/DQRuihLeShrcHDDqGHdpCHdgYP7YQe2kMe2hs87BR66AB56GDw0EHooSPkoaPBwy6hh06Qh04GD52EHjpDHjobPOwWeugCeehi8NBF6KEr5KGrwcMeoYdukIduBg/dhB66Qx66GzzsFXroAXnoYfDQQ+ihJ+Shp8HDPqGHXpCHXgYPvYQeekMeehs87Bd66AN56GPw0EfooS/koa/BwwGhh36Qh34GD/2EHvpDHvobPBwUehgAeRhg8DBA6GEg5GGgwcMhoYdBkIdBBg+DhB4GQx4GGzwcFnoYAnkYYvAwROhhKORhqMHDEaGHYZCHYQYPw4QehkMehhs8HBV6GAF5GGHwMELoYSTkYaTBwzGhh1GQh1EGD6OEHkZDHkYbPBwXehgDeRhj8DBG6GEs5GGswcMJoYdxkIdxBg/jhB7GQx7GGzycFHqYAHmYYPAwQehhIuRhosHDKaGHSZCHSQYPk4QeJkMeJhs8nBZ6mAJ5mGLwMEXoYSrkYarBwxmhh2mQh2kGD9OEHqZDHqYbPJwVepgBeZhh8DBD6GEm5GGmwcM5oYdZkIdZBg+zhB5mQx5mGzycF3qYA3mYY/AwR+hhLuRhrsHDBaGHeZCHeQYP84Qe5kMe5hs8XBR6WAB5WGDwsEDoYSHkYaHBwyWhh0WQh0UGD4uEHhZDHhYbPFwWelgCeVhi8LBE6GEp5GGpwcMVoYdlkIdlBg/LhB6WQx6WGzxcFXpYAXlYYfCwQuhhJeRhpcHDNaGHVZCHVQYPq4QeVkMeVhs8XBd6WAN5WGPwsEboYS3kYa3Bww2hh3WQh3UGD+uEHtZDHtYbPNwUetgAedhg8LBB6GEj5GGjwcMtoYdNkIdNBg+bhB42Qx42GzzcFnrYAnnYYvCwRehhK+Rhq8HDHaGHbZCHbQYP24QetkMeths83BV62AF52GHwsEPoYSfkYafBwz2hh12Qh10GD7uEHnZDHnYbPNwXetgDedhj8LBH6GEv5GGvwcMDoYd9kId9Bg/7hB72Qx72Gzw8FHo4AHk4YPBwQOjhIOThoMHDI6GHQ5CHQwYPh4QeDkMeDhs8PBZ6OAJ5OGLwcETo4Sjk4ajBwxOhh2OQh2MGD8eEHo5DHo4bPDwVejgBeThh8HBC6OEk5OGkwcMzoYdTkIdTBg+nhB5OQx5OGzw8F3o4A3k4Y/BwRujhLOThrMHDC6GHc5CHcwYP54QezkMezhs8vBR6uAB5uGDwcEHo4SLk4aLBwyuhh0uQh0sGD5eEHi5DHi4bPLwWergCebhi8HBF6OEq5OGqwcMboYdrkIdrBg/XhB6uQx6uGzy8FXq4AXm4YfBwQ+jhJuThpsHDO6GHW5CHWwYPt4QebkMebhs8vBd6uAN5uGPwcEfo4S7k4a7Bwwehh3uQh3sGD/eEHu5DHu4bPHwUengAeXhg8PBA6OEh5OGhwcMnoYdHkIdHBg+PhB4eQx4eGzx8Fnp4Anl4YvDwROjhKeThqcHDF6GHZ5CHZwYPz4QenkMenhs8fBV6eAF5eGHw8ELo4SXk4aXBwzehh1eQh1cGD6+EHl5DHl4bPHwXengDeXhj8PBG6OEt5OGtwcMPoYd3kId3Bg/vhB7eQx7eGzz8FHr4AHn4YPDwQejhI+Tho8HDL6GHT5CHTwYPn4QePkMePhs8/BZ6+AJ5+GLw8EXo4Svk4avBwx+hh2+Qh28GD9+EHr5DHr4bPPwVevgBefhh8PBD6OEn5OGnwcM/KXU//II8/DJ4+CX08Bvy8Nvg4V+hhz+Qhz8GD3+EHv5CHv4aPAQQevhnCOPhv13aw/9u/39b/w5hPPw7hPcQUOghAOQhgMFDAKGHgJCHgAYPgYQeAkEeAhk8BBJ6CAx5CGzwEFjoIQjkIYjBQxChh6CQh6AGD0GEHoJBHoIZPAQTeggOeQhu8BBU6CEE5CGEwUMIoYeQkIeQBg/BhB5CQR5CGTyEEnoIDXkIbfAQXOghDOQhjMFDGKGHsJCHsAYPIYQewkEewhk8hBN6CA95CG/wEFLoIQLkIYLBQwShh4iQh4gGD6GEHiJBHiIZPEQSeogMeYhs8BBa6CEK5CGKwUMUoYeokIeoBg9hhB6iQR6iGTxEE3qIDnmIbvAQVughBuQhhsFDDKGHmJCHmAYP4YQeYkEeYhk8xBJ6iA15iG3wEF7oIQ7kIY7BQxyhh7iQh7gGDxGEHuJBHuIZPMQTeogPeYhv8BBR6CEB5CGBwUMCoYeEkIeEBg+RhB4SQR4SGTwkEnpIDHlIbPAQWeghCeQhicFDEqGHpJCHpAYPUYQekkEekhk8JBN6SA55SG7wEFXoIQXkIYXBQwqhh5SQh5QGD9GEHlJBHlIZPKQSekgNeUht8BBd6CEN5CGNwUMaoYe0kIe0Bg8xhB7SQR7SGTykE3pID3lIb/AQU+ghA+Qhg8FDBqGHjJCHjAYPsYQeMkEeMhk8ZBJ6yAx5yGzwEFvoIQvkIYvBQxahh6yQh6wGD3GEHrJBHrIZPGQTesgOechu8BBX6CEH5CGHwUMOoYeckIecBg/xhB5yQR5yGTzkEnrIDXnIbfAQX+ghD+Qhj8FDHqGHvJCHvAYPCYQe8kEe8hk85BN6yA95yG/wkFDooQDkoYDBQwGhh4KQh4IGD4mEHgpBHgoZPBQSeigMeShs8JBY6KEI5KGIwUMRoYeikIeiBg9JhB6KQR6KGTwUE3ooDnkobvCQVOihBOShhMFDCaGHkpCHkgYPyYQeSkEeShk8lBJ6KA15KG3wkFzooQzkoYzBQxmhh7KQh7IGDymEHspBHsoZPJQTeigPeShv8JBS6KEC5KGCwUMFoYeKkIeKBg+phB4qQR4qGTxUEnqoDHmobPCQWuihCuShisFDFaGHqpCHqgYPaYQeqkEeqhk8VBN6qA55qG7wkFbooQbkoYbBQw2hh5qQh5oGD+mEHmpBHmoZPNQSeqgNeaht8JBe6KEO5KGOwUMdoYe6kIe6Bg8ZhB7qQR7qGTzUE3qoD3mob/CQUeihAeShgcFDA6GHhpCHhgYPmYQeGkEeGhk8NBJ6aAx5aGzwkFnooQnkoYnBQxOhh6aQh6YGD1mEHppBHpoZPDQTemgOeWhu8JBV6KEF5KGFwUMLoYeWkIeWBg/ZhB5aQR5aGTy0EnpoDXlobfCQXeihDeShjcFDG6GHtpCHtgYPOYQe2kEe2hk8tBN6aA95aG/wkFPooQPkoYPBQwehh46Qh44GD7mEHjpBHjoZPHQSeugMeehs8JBb6KEL5KGLwUMXoYeukIeuBg95hB66QR66GTx0E3roDnnobvCQV+ihB+Shh8FDD6GHnpCHngYP+YQeekEeehk89BJ66A156G3wkF/ooQ/koY/BQx+hh76Qh74GDwWEHvpBHvoZPPQTeugPeehv8FBQ6GEA5GGAwcMAoYeBkIeBBg+FhB4GQR4GGTwMEnoYDHkYbPBQWOhhCORhiMHDEKGHoZCHoQYPRYQehkEehhk8DBN6GA55GG7wUFToYQTkYYTBwwihh5GQh5EGD8WEHkZBHkYZPIwSehgNeRht8FBc6GEM5GGMwcMYoYexkIexBg8lhB7GQR7GGTyME3oYD3kYb/BQUuhhAuRhgsHDBKGHiZCHiQYPpYQeJkEeJhk8TBJ6mAx5mGzwUFroYQrkYYrBwxShh6mQh6kGD2WEHqZBHqYZPEwTepgOeZhu8FBW6GEG5GGGwcMMoYeZkIeZBg/lhB5mQR5mGTzMEnqYDXmYbfBQXuhhDuRhjsHDHKGHuZCHuQYPFYQe5kEe5hk8zBN6mA95mG/wUFHoYQHkYYHBwwKhh4WQh4UGD5WEHhZBHhYZPCwSelgMeVhs8FBZ6GEJ5GGJwcMSoYelkIelBg9VhB6WQR6WGTwsE3pYDnlYbvBQVehhBeRhhcHDCqGHlZCHlQYP1YQeVkEeVhk8rBJ6WA15WG3wUF3oYQ3kYY3Bwxqhh7WQh7UGDzWEHtZBHtYZPKwTelgPeVhv8FBT6GED5GGDwcMGoYeNkIeNBg+1hB42QR42GTxsEnrYDHnYbPBQW+hhC+Rhi8HDFqGHrZCHrQYPdYQetkEethk8bBN62A552G7wUFfoYQfkYYfBww6hh52Qh50GD/WEHnZBHnYZPOwSetgNedht8FBf6GEP5GGPwcMeoYe9kIe9Bg8NhB72QR72GTzsE3rYD3nYb/DQUOjhAOThgMHDAaGHg5CHgwYPjYQeDkEeDhk8HBJ6OAx5OGzw0Fjo4Qjk4YjBwxGhh6OQh6MGD02EHo5BHo4ZPBwTejgOeThu8NBU6OEE5OGEwcMJoYeTkIeTBg/NhB5OQR5OGTycEno4DXk4bfDQXOjhDOThjMHDGaGHs5CHswYPLYQezkEezhk8nBN6OA95OG/w0FLo4QLk4YLBwwWhh4uQh4sGD62EHi5BHi4ZPFwSergMebhs8NBa6OEK5OGKwcMVoYerkIerBg9thB6uQR6uGTxcE3q4Dnm4bvDQVujhBuThhsHDDaGHm5CHmwYP7YQebkEebhk83BJ6uA15uG3w0F7o4Q7k4Y7Bwx2hh7uQh7sGDx2EHu5BHu4ZPNwTergPebhv8NBR6OEB5OGBwcMDoYeHkIeHBg+dhB4eQR4eGTw8Enp4DHl4bPDQWejhCeThicHDE6GHp5CHpwYPXYQenkEenhk8PBN6eA55eG7w0FXo4QXk4YXBwwuhh5eQh5cGD92EHl5BHl4ZPLwSengNeXht8NBd6OEN5OGNwcMboYe3kIe3Bg89hB7eQR7eGTy8E3p4D3l4b/DQU+jhA+Thg8HDB6GHj5CHjwYPvYQePkEePhk8fBJ6+Ax5+Gzw0Fvo4Qvk4YvBwxehh6+Qh68GD32EHr5BHr4ZPHwTevgOefhu8NBX6OEH5OGHwcMPoYefkIefBg/9hB5+QR5+GTz8Enr4DXn4bfDQX+jhD+Thj8HDH6GHv5CHvwYPA4Qe/hnKePhvl/bwv9v/39a/QxkP/w7lPQwUeggAeQhg8BBA6CEg5CGgwcMgoYdAkIdABg+BhB4CQx4CGzwMFnoIAnkIYvAQROghKOQhqMHDEKGHYJCHYAYPwYQegkMeghs8DBV6CAF5CGHwEELoISTkIaTBwzChh1CQh1AGD6GEHkJDHkIbPAwXeggDeQhj8BBG6CEs5CGswcMIoYdwkIdwBg/hhB7CQx7CGzyMFHqIAHmIYPAQQeghIuQhosHDKKGHSJCHSAYPkYQeIkMeIhs8jBZ6iAJ5iGLwEEXoISrkIarBwxihh2iQh2gGD9GEHqJDHqIbPIwVeogBeYhh8BBD6CEm5CGmwcM4oYdYkIdYBg+xhB5iQx5iGzyMF3qIA3mIY/AQR+ghLuQhrsHDBKGHeJCHeAYP8YQe4kMe4hs8TBR6SAB5SGDwkEDoISHkIaHBwyShh0SQh0QGD4mEHhJDHhIbPEwWekgCeUhi8JBE6CEp5CGpwcMUoYdkkIdkBg/JhB6SQx6SGzxMFXpIAXlIYfCQQughJeQhpcHDNKGHVJCHVAYPqYQeUkMeUhs8TBd6SAN5SGPwkEboIS3kIa3Bwwyhh3SQh3QGD+mEHtJDHtIbPMwUesgAechg8JBB6CEj5CGjwcMsoYdMkIdMBg+ZhB4yQx4yGzzMFnrIAnnIYvCQReghK+Qhq8HDHKGHbJCHbAYP2YQeskMeshs8zBV6yAF5yGHwkEPoISfkIafBwzyhh1yQh1wGD7mEHnJDHnIbPMwXesgDechj8JBH6CEv5CGvwcMCoYd8kId8Bg/5hB7yQx7yGzwsFHooAHkoYPBQQOihIOShoMHDIqGHQpCHQgYPhYQeCkMeChs8LBZ6KAJ5KGLwUETooSjkoajBwxKhh2KQh2IGD8WEHopDHoobPCwVeigBeShh8FBC6KEk5KGkwcMyoYdSkIdSBg+lhB5KQx5KGzwsF3ooA3koY/BQRuihLOShrMHDCqGHcpCHcgYP5YQeykMeyhs8rBR6qAB5qGDwUEHooSLkoaLBwyqhh0qQh0oGD5WEHipDHiobPKwWeqgCeahi8FBF6KEq5KGqwcMaoYdqkIdqBg/VhB6qQx6qGzysFXqoAXmoYfBQQ+ihJuShpsHDOqGHWpCHWgYPtYQeakMeahs8rBd6qAN5qGPwUEfooS7koa7Bwwahh3qQh3oGD/WEHupDHuobPGwUemgAeWhg8NBA6KEh5KGhwcMmoYdGkIdGBg+NhB4aQx4aGzxsFnpoAnloYvDQROihKeShqcHDFqGHZpCHZgYPzYQemkMemhs8bBV6aAF5aGHw0ELooSXkoaXBwzahh1aQh1YGD62EHlpDHlobPGwXemgDeWhj8NBG6KEt5KGtwcMOoYd2kId2Bg/thB7aQx7aGzzsFHroAHnoYPDQQeihI+Sho8HDLqGHTpCHTgYPnYQeOkMeOhs87BZ66AJ56GLw0EXooSvkoavBwx6hh26Qh24GD92EHrpDHrobPOwVeugBeehh8NBD6KEn5KGnwcM+oYdekIdeBg+9hB56Qx56GzzsF3roA3noY/DQR+ihL+Shr8HDAaGHfpCHfgYP/YQe+kMe+hs8HBR6GAB5GGDwMEDoYSDkYaDBwyGhh0GQh0EGD4OEHgZDHgYbPBwWehgCeRhi8DBE6GEo5GGowcMRoYdhkIdhBg/DhB6GQx6GGzwcFXoYAXkYYfAwQuhhJORhpMHDMaGHUZCHUQYPo4QeRkMeRhs8HBd6GAN5GGPwMEboYSzkYazBwwmhh3GQh3EGD+OEHsZDHsYbPJwUepgAeZhg8DBB6GEi5GGiwcMpoYdJkIdJBg+ThB4mQx4mGzycFnqYAnmYYvAwRehhKuRhqsHDGaGHaZCHaQYP04QepkMephs8nBV6mAF5mGHwMEPoYSbkYabBwzmhh1mQh1kGD7OEHmZDHmYbPJwXepgDeZhj8DBH6GEu5GGuwcMFoYd5kId5Bg/zhB7mQx7mGzxcFHpYAHlYYPCwQOhhIeRhocHDJaGHRZCHRQYPi4QeFkMeFhs8XBZ6WAJ5WGLwsEToYSnkYanBwxWhh2WQh2UGD8uEHpZDHpYbPFwVelgBeVhh8LBC6GEl5GGlwcM1oYdVkIdVBg+rhB5WQx5WGzxcF3pYA3lYY/CwRuhhLeRhrcHDDaGHdZCHdQYP64Qe1kMe1hs83BR62AB52GDwsEHoYSPkYaPBwy2hh02Qh00GD5uEHjZDHjYbPNwWetgCedhi8LBF6GEr5GGrwcMdoYdtkIdtBg/bhB62Qx62GzzcFXrYAXnYYfCwQ+hhJ+Rhp8HDPaGHXZCHXQYPu4QedkMedhs83Bd62AN52GPwsEfoYS/kYa/BwwOhh32Qh30GD/uEHvZDHvYbPDwUejgAeThg8HBA6OEg5OGgwcMjoYdDkIdDBg+HhB4OQx4OGzw8Fno4Ank4YvBwROjhKOThqMHDE6GHY5CHYwYPx4QejkMejhs8PBV6OAF5OGHwcELo4STk4aTBwzOhh1OQh1MGD6eEHk5DHk4bPDwXejgDeThj8HBG6OEs5OGswcMLoYdzkIdzBg/nhB7OQx7OGzy8FHq4AHm4YPBwQejhIuThosHDK6GHS5CHSwYPl4QeLkMeLhs8vBZ6uAJ5uGLwcEXo4Srk4arBwxuhh2uQh2sGD9eEHq5DHq4bPLwVergBebhh8HBD6OEm5OGmwcM7oYdbkIdbBg+3hB5uQx5uGzy8F3q4A3m4Y/BwR+jhLuThrsHDB6GHe5CHewYP94Qe7kMe7hs8fBR6eAB5eGDw8EDo4SHk4aHBwyehh0eQh0cGD4+EHh5DHh4bPHwWengCeXhi8PBE6OEp5OGpwcMXoYdnkIdnBg/PhB6eQx6eGzx8FXp4AXl4YfDwQujhJeThpcHDN6GHV5CHVwYPr4QeXkMeXhs8fBd6eAN5eGPw8Ebo4S3k4a3Bww+hh3eQh3cGD++EHt5DHt4bPPwUevgAefhg8PBB6OEj5OGjwcMvoYdPkIdPBg+fhB4+Qx4+Gzz8Fnr4Ann4YvDwRejhK+Thq8HDH6GHb5CHbwYP34QevkMevhs8/BV6+AF5+GHw8EPo4Sfk4afBwz+pdD/8gjz8Mnj4JfTwG/Lw2+DhX6GHP5CHPwYPf4Qe/kIe/ho8BBB6+GcY4+G/XdrD/27/f1v/DmM8/DuM9xBQ6CEA5CGAwUMAoYeAkIeABg+BhB4CQR4CGTwEEnoIDHkIbPAQWOghCOQhiMFDEKGHoJCHoAYPQYQegkEeghk8BBN6CA55CG7wEFToIQTkIYTBQwihh5CQh5AGD8GEHkJBHkIZPIQSeggNeQht8BBc6CEM5CGMwUMYoYewkIewBg8hhB7CQR7CGTyEE3oID3kIb/AQUughAuQhgsFDBKGHiJCHiAYPoYQeIkEeIhk8RBJ6iAx5iGzwEFroIQrkIYrBQxShh6iQh6gGD2GEHqJBHqIZPEQTeogOeYhu8BBW6CEG5CGGwUMMoYeYkIeYBg/hhB5iQR5iGTzEEnqIDXmIbfAQXughDuQhjsFDHKGHuJCHuAYPEYQe4kEe4hk8xBN6iA95iG/wEFHoIQHkIYHBQwKhh4SQh4QGD5GEHhJBHhIZPCQSekgMeUhs8BBZ6CEJ5CGJwUMSoYekkIekBg9RhB6SQR6SGTwkE3pIDnlIbvAQVeghBeQhhcFDCqGHlJCHlAYP0YQeUkEeUhk8pBJ6SA15SG3wEF3oIQ3kIY3BQxqhh7SQh7QGDzGEHtJBHtIZPKQTekgPeUhv8BBT6CED5CGDwUMGoYeMkIeMBg+xhB4yQR4yGTxkEnrIDHnIbPAQW+ghC+Qhi8FDFqGHrJCHrAYPcYQeskEeshk8ZBN6yA55yG7wEFfoIQfkIYfBQw6hh5yQh5wGD/GEHnJBHnIZPOQSesgNecht8BBf6CEP5CGPwUMeoYe8kIe8Bg8JhB7yQR7yGTzkE3rID3nIb/CQUOihAOShgMFDAaGHgpCHggYPiYQeCkEeChk8FBJ6KAx5KGzwkFjooQjkoYjBQxGhh6KQh6IGD0mEHopBHooZPBQTeigOeShu8JBU6KEE5KGEwUMJoYeSkIeSBg/JhB5KQR5KGTyUEnooDXkobfCQXOihDOShjMFDGaGHspCHsgYPKYQeykEeyhk8lBN6KA95KG/wkFLooQLkoYLBQwWhh4qQh4oGD6mEHipBHioZPFQSeqgMeahs8JBa6KEK5KGKwUMVoYeqkIeqBg9phB6qQR6qGTxUE3qoDnmobvCQVuihBuShhsFDDaGHmpCHmgYP6YQeakEeahk81BJ6qA15qG3wkF7ooQ7koY7BQx2hh7qQh7oGDxmEHupBHuoZPNQTeqgPeahv8JBR6KEB5KGBwUMDoYeGkIeGBg+ZhB4aQR4aGTw0EnpoDHlobPCQWeihCeShicFDE6GHppCHpgYPWYQemkEemhk8NBN6aA55aG7wkFXooQXkoYXBQwuhh5aQh5YGD9mEHlpBHloZPLQSemgNeWht8JBd6KEN5KGNwUMboYe2kIe2Bg85hB7aQR7aGTy0E3poD3lob/CQU+ihA+Shg8FDB6GHjpCHjgYPuYQeOkEeOhk8dBJ66Ax56GzwkFvooQvkoYvBQxehh66Qh64GD3mEHrpBHroZPHQTeugOeehu8JBX6KEH5KGHwUMPoYeekIeeBg/5hB56QR56GTz0EnroDXnobfCQX+ihD+Shj8FDH6GHvpCHvgYPBYQe+kEe+hk89BN66A956G/wUFDoYQDkYYDBwwChh4GQh4EGD4WEHgZBHgYZPAwSehgMeRhs8FBY6GEI5GGIwcMQoYehkIehBg9FhB6GQR6GGTwME3oYDnkYbvBQVOhhBORhhMHDCKGHkZCHkQYPxYQeRkEeRhk8jBJ6GA15GG3wUFzoYQzkYYzBwxihh7GQh7EGDyWEHsZBHsYZPIwTehgPeRhv8FBS6GEC5GGCwcMEoYeJkIeJBg+lhB4mQR4mGTxMEnqYDHmYbPBQWuhhCuRhisHDFKGHqZCHqQYPZYQepkEephk8TBN6mA55mG7wUFboYQbkYYbBwwyhh5mQh5kGD+WEHmZBHmYZPMwSepgNeZht8FBe6GEO5GGOwcMcoYe5kIe5Bg8VhB7mQR7mGTzME3qYD3mYb/BQUehhAeRhgcHDAqGHhZCHhQYPlYQeFkEeFhk8LBJ6WAx5WGzwUFnoYQnkYYnBwxKhh6WQh6UGD1WEHpZBHpYZPCwTelgOeVhu8FBV6GEF5GGFwcMKoYeVkIeVBg/VhB5WQR5WGTysEnpYDXlYbfBQXehhDeRhjcHDGqGHtZCHtQYPNYQe1kEe1hk8rBN6WA95WG/wUFPoYQPkYYPBwwahh42Qh40GD7WEHjZBHjYZPGwSetgMedhs8FBb6GEL5GGLwcMWoYetkIetBg91hB62QR62GTxsE3rYDnnYbvBQV+hhB+Rhh8HDDqGHnZCHnQYP9YQedkEedhk87BJ62A152G3wUF/oYQ/kYY/Bwx6hh72Qh70GDw2EHvZBHvYZPOwTetgPedhv8NBQ6OEA5OGAwcMBoYeDkIeDBg+NhB4OQR4OGTwcEno4DHk4bPDQWOjhCOThiMHDEaGHo5CHowYPTYQejkEejhk8HBN6OA55OG7w0FTo4QTk4YTBwwmhh5OQh5MGD82EHk5BHk4ZPJwSejgNeTht8NBc6OEM5OGMwcMZoYezkIezBg8thB7OQR7OGTycE3o4D3k4b/DQUujhAuThgsHDBaGHi5CHiwYPrYQeLkEeLhk8XBJ6uAx5uGzw0Fro4Qrk4YrBwxWhh6uQh6sGD22EHq5BHq4ZPFwTergOebhu8NBW6OEG5OGGwcMNoYebkIebBg/thB5uQR5uGTzcEnq4DXm4bfDQXujhDuThjsHDHaGHu5CHuwYPHYQe7kEe7hk83BN6uA95uG/w0FHo4QHk4YHBwwOhh4eQh4cGD52EHh5BHh4ZPDwSengMeXhs8NBZ6OEJ5OGJwcMToYenkIenBg9dhB6eQR6eGTw8E3p4Dnl4bvDQVejhBeThhcHDC6GHl5CHlwYP3YQeXkEeXhk8vBJ6eA15eG3w0F3o4Q3k4Y3Bwxuhh7eQh7cGDz2EHt5BHt4ZPLwTengPeXhv8NBT6OED5OGDwcMHoYePkIePBg+9hB4+QR4+GTx8Enr4DHn4bPDQW+jhC+Thi8HDF6GHr5CHrwYPfYQevkEevhk8fBN6+A55+G7w0Ffo4Qfk4YfBww+hh5+Qh58GD/2EHn5BHn4ZPPwSevgNefht8NBf6OEP5OGPwcMfoYe/kIe/Bg8DhB7+Gc54+G+X9vC/2//f1r/DGQ//Duc9DBR6CAB5CGDwEEDoISDkIaDBwyChh0CQh0AGD4GEHgJDHgIbPAwWeggCeQhi8BBE6CEo5CGowcMQoYdgkIdgBg/BhB6CQx6CGzwMFXoIAXkIYfAQQughJOQhpMHDMKGHUJCHUAYPoYQeQkMeQhs8DBd6CAN5CGPwEEboISzkIazBwwihh3CQh3AGD+GEHsJDHsIbPIwUeogAeYhg8BBB6CEi5CGiwcMooYdIkIdIBg+RhB4iQx4iGzyMFnqIAnmIYvAQReghKuQhqsHDGKGHaJCHaAYP0YQeokMeohs8jBV6iAF5iGHwEEPoISbkIabBwzihh1iQh1gGD7GEHmJDHmIbPIwXeogDeYhj8BBH6CEu5CGuwcMEoYd4kId4Bg/xhB7iQx7iGzxMFHpIAHlIYPCQQOghIeQhocHDJKGHRJCHRAYPiYQeEkMeEhs8TBZ6SAJ5SGLwkEToISnkIanBwxShh2SQh2QGD8mEHpJDHpIbPEwVekgBeUhh8JBC6CEl5CGlwcM0oYdUkIdUBg+phB5SQx5SGzxMF3pIA3lIY/CQRughLeQhrcHDDKGHdJCHdAYP6YQe0kMe0hs8zBR6yAB5yGDwkEHoISPkIaPBwyyhh0yQh0wGD5mEHjJDHjIbPMwWesgCechi8JBF6CEr5CGrwcMcoYdskIdsBg/ZhB6yQx6yGzzMFXrIAXnIYfCQQ+ghJ+Qhp8HDPKGHXJCHXAYPuYQeckMechs8zBd6yAN5yGPwkEfoIS/kIa/BwwKhh3yQh3wGD/mEHvJDHvIbPCwUeigAeShg8FBA6KEg5KGgwcMioYdCkIdCBg+FhB4KQx4KGzwsFnooAnkoYvBQROihKOShqMHDEqGHYpCHYgYPxYQeikMeihs8LBV6KAF5KGHwUELooSTkoaTBwzKhh1KQh1IGD6WEHkpDHkobPCwXeigDeShj8FBG6KEs5KGswcMKoYdykIdyBg/lhB7KQx7KGzysFHqoAHmoYPBQQeihIuShosHDKqGHSpCHSgYPlYQeKkMeKhs8rBZ6qAJ5qGLwUEXooSrkoarBwxqhh2qQh2oGD9WEHqpDHqobPKwVeqgBeahh8FBD6KEm5KGmwcM6oYdakIdaBg+1hB5qQx5qGzysF3qoA3moY/BQR+ihLuShrsHDBqGHepCHegYP9YQe6kMe6hs8bBR6aAB5aGDw0EDooSHkoaHBwyahh0aQh0YGD42EHhpDHhobPGwWemgCeWhi8NBE6KEp5KGpwcMWoYdmkIdmBg/NhB6aQx6aGzxsFXpoAXloYfDQQuihJeShpcHDNqGHVpCHVgYPrYQeWkMeWhs8bBd6aAN5aGPw0EbooS3koa3Bww6hh3aQh3YGD+2EHtpDHtobPOwUeugAeehg8NBB6KEj5KGjwcMuoYdOkIdOBg+dhB46Qx46GzzsFnroAnnoYvDQReihK+Shq8HDHqGHbpCHbgYP3YQeukMeuhs87BV66AF56GHw0EPooSfkoafBwz6hh16Qh14GD72EHnpDHnobPOwXeugDeehj8NBH6KEv5KGvwcMBoYd+kId+Bg/9hB76Qx76GzwcFHoYAHkYYPAwQOhhIORhoMHDIaGHQZCHQQYPg4QeBkMeBhs8HBZ6GAJ5GGLwMEToYSjkYajBwxGhh2GQh2EGD8OEHoZDHoYbPBwVehgBeRhh8DBC6GEk5GGkwcMxoYdRkIdRBg+jhB5GQx5GGzwcF3oYA3kYY/AwRuhhLORhrMHDCaGHcZCHcQYP44QexkMexhs8nBR6mAB5mGDwMEHoYSLkYaLBwymhh0mQh0kGD5OEHiZDHiYbPJwWepgCeZhi8DBF6GEq5GGqwcMZoYdpkIdpBg/ThB6mQx6mGzycFXqYAXmYYfAwQ+hhJuRhpsHDOaGHWZCHWQYPs4QeZkMeZhs8nBd6mAN5mGPwMEfoYS7kYa7BwwWhh3mQh3kGD/OEHuZDHuYbPFwUelgAeVhg8LBA6GEh5GGhwcMloYdFkIdFBg+LhB4WQx4WGzxcFnpYAnlYYvCwROhhKeRhqcHDFaGHZZCHZQYPy4QelkMelhs8XBV6WAF5WGHwsELoYSXkYaXBwzWhh1WQh1UGD6uEHlZDHlYbPFwXelgDeVhj8LBG6GEt5GGtwcMNoYd1kId1Bg/rhB7WQx7WGzzcFHrYAHnYYPCwQehhI+Rho8HDLaGHTZCHTQYPm4QeNkMeNhs83BZ62AJ52GLwsEXoYSvkYavBwx2hh22Qh20GD9uEHrZDHrYbPNwVetgBedhh8LBD6GEn5GGnwcM9oYddkIddBg+7hB52Qx52GzzcF3rYA3nYY/CwR+hhL+Rhr8HDA6GHfZCHfQYP+4Qe9kMe9hs8PBR6OAB5OGDwcEDo4SDk4aDBwyOhh0OQh0MGD4eEHg5DHg4bPDwWejgCeThi8HBE6OEo5OGowcMToYdjkIdjBg/HhB6OQx6OGzw8FXo4AXk4YfBwQujhJOThpMHDM6GHU5CHUwYPp4QeTkMeThs8PBd6OAN5OGPwcEbo4Szk4azBwwuhh3OQh3MGD+eEHs5DHs4bPLwUergAebhg8HBB6OEi5OGiwcMroYdLkIdLBg+XhB4uQx4uGzy8Fnq4Anm4YvBwRejhKuThqsHDG6GHa5CHawYP14QerkMerhs8vBV6uAF5uGHwcEPo4Sbk4abBwzuhh1uQh1sGD7eEHm5DHm4bPLwXergDebhj8HBH6OEu5OGuwcMHoYd7kId7Bg/3hB7uQx7uGzx8FHp4AHl4YPDwQOjhIeThocHDJ6GHR5CHRwYPj4QeHkMeHhs8fBZ6eAJ5eGLw8ETo4Snk4anBwxehh2eQh2cGD8+EHp5DHp4bPHwVengBeXhh8PBC6OEl5OGlwcM3oYdXkIdXBg+vhB5eQx5eGzx8F3p4A3l4Y/DwRujhLeThrcHDD6GHd5CHdwYP74Qe3kMe3hs8/BR6+AB5+GDw8EHo4SPk4aPBwy+hh0+Qh08GD5+EHj5DHj4bPPwWevgCefhi8PBF6OEr5OGrwcMfoYdvkIdvBg/fhB6+Qx6+Gzz8FXr4AXn4YfDwQ+jhJ+Thp8HDP6l1P/yCPPwyePgl9PAb8vDb4OFfoYc/kIc/Bg9/hB7+Qh7+GjwEEHr4ZwTj4b9d2sP/bv9/W/+OYDz8O4L3EFDoIQDkIYDBQwChh4CQh4AGD4GEHgJBHgIZPAQSeggMeQhs8BBY6CEI5CGIwUMQoYegkIegBg9BhB6CQR6CGTwEE3oIDnkIbvAQVOghBOQhhMFDCKGHkJCHkAYPwYQeQkEeQhk8hBJ6CA15CG3wEFzoIQzkIYzBQxihh7CQh7AGDyGEHsJBHsIZPIQTeggPeQhv8BBS6CEC5CGCwUMEoYeIkIeIBg+hhB4iQR4iGTxEEnqIDHmIbPAQWughCuQhisFDFKGHqJCHqAYPYYQeokEeohk8RBN6iA55iG7wEFboIQbkIYbBQwyhh5iQh5gGD+GEHmJBHmIZPMQSeogNeYht8BBe6CEO5CGOwUMcoYe4kIe4Bg8RhB7iQR7iGTzEE3qID3mIb/AQUeghAeQhgcFDAqGHhJCHhAYPkYQeEkEeEhk8JBJ6SAx5SGzwEFnoIQnkIYnBQxKhh6SQh6QGD1GEHpJBHpIZPCQTekgOeUhu8BBV6CEF5CGFwUMKoYeUkIeUBg/RhB5SQR5SGTykEnpIDXlIbfAQXeghDeQhjcFDGqGHtJCHtAYPMYQe0kEe0hk8pBN6SA95SG/wEFPoIQPkIYPBQwahh4yQh4wGD7GEHjJBHjIZPGQSesgMechs8BBb6CEL5CGLwUMWoYeskIesBg9xhB6yQR6yGTxkE3rIDnnIbvAQV+ghB+Qhh8FDDqGHnJCHnAYP8YQeckEechk85BJ6yA15yG3wEF/oIQ/kIY/BQx6hh7yQh7wGDwmEHvJBHvIZPOQTesgPechv8JBQ6KEA5KGAwUMBoYeCkIeCBg+JhB4KQR4KGTwUEnooDHkobPCQWOihCOShiMFDEaGHopCHogYPSYQeikEeihk8FBN6KA55KG7wkFTooQTkoYTBQwmhh5KQh5IGD8mEHkpBHkoZPJQSeigNeSht8JBc6KEM5KGMwUMZoYeykIeyBg8phB7KQR7KGTyUE3ooD3kob/CQUuihAuShgsFDBaGHipCHigYPqYQeKkEeKhk8VBJ6qAx5qGzwkFrooQrkoYrBQxWhh6qQh6oGD2mEHqpBHqoZPFQTeqgOeahu8JBW6KEG5KGGwUMNoYeakIeaBg/phB5qQR5qGTzUEnqoDXmobfCQXuihDuShjsFDHaGHupCHugYPGYQe6kEe6hk81BN6qA95qG/wkFHooQHkoYHBQwOhh4aQh4YGD5mEHhpBHhoZPDQSemgMeWhs8JBZ6KEJ5KGJwUMToYemkIemBg9ZhB6aQR6aGTw0E3poDnlobvCQVeihBeShhcFDC6GHlpCHlgYP2YQeWkEeWhk8tBJ6aA15aG3wkF3ooQ3koY3BQxuhh7aQh7YGDzmEHtpBHtoZPLQTemgPeWhv8JBT6KED5KGDwUMHoYeOkIeOBg+5hB46QR46GTx0EnroDHnobPCQW+ihC+Shi8FDF6GHrpCHrgYPeYQeukEeuhk8dBN66A556G7wkFfooQfkoYfBQw+hh56Qh54GD/mEHnpBHnoZPPQSeugNeeht8JBf6KEP5KGPwUMfoYe+kIe+Bg8FhB76QR76GTz0E3roD3nob/BQUOhhAORhgMHDAKGHgZCHgQYPhYQeBkEeBhk8DBJ6GAx5GGzwUFjoYQjkYYjBwxChh6GQh6EGD0WEHoZBHoYZPAwTehgOeRhu8FBU6GEE5GGEwcMIoYeRkIeRBg/FhB5GQR5GGTyMEnoYDXkYbfBQXOhhDORhjMHDGKGHsZCHsQYPJYQexkEexhk8jBN6GA95GG/wUFLoYQLkYYLBwwShh4mQh4kGD6WEHiZBHiYZPEwSepgMeZhs8FBa6GEK5GGKwcMUoYepkIepBg9lhB6mQR6mGTxME3qYDnmYbvBQVuhhBuRhhsHDDKGHmZCHmQYP5YQeZkEeZhk8zBJ6mA15mG3wUF7oYQ7kYY7Bwxyhh7mQh7kGDxWEHuZBHuYZPMwTepgPeZhv8FBR6GEB5GGBwcMCoYeFkIeFBg+VhB4WQR4WGTwsEnpYDHlYbPBQWehhCeRhicHDEqGHpZCHpQYPVYQelkEelhk8LBN6WA55WG7wUFXoYQXkYYXBwwqhh5WQh5UGD9WEHlZBHlYZPKwSelgNeVht8FBd6GEN5GGNwcMaoYe1kIe1Bg81hB7WQR7WGTysE3pYD3lYb/BQU+hhA+Rhg8HDBqGHjZCHjQYPtYQeNkEeNhk8bBJ62Ax52GzwUFvoYQvkYYvBwxahh62Qh60GD3WEHrZBHrYZPGwTetgOedhu8FBX6GEH5GGHwcMOoYedkIedBg/1hB52QR52GTzsEnrYDXnYbfBQX+hhD+Rhj8HDHqGHvZCHvQYPDYQe9kEe9hk87BN62A952G/w0FDo4QDk4YDBwwGhh4OQh4MGD42EHg5BHg4ZPBwSejgMeThs8NBY6OEI5OGIwcMRoYejkIejBg9NhB6OQR6OGTwcE3o4Dnk4bvDQVOjhBOThhMHDCaGHk5CHkwYPzYQeTkEeThk8nBJ6OA15OG3w0Fzo4Qzk4YzBwxmhh7OQh7MGDy2EHs5BHs4ZPJwTejgPeThv8NBS6OEC5OGCwcMFoYeLkIeLBg+thB4uQR4uGTxcEnq4DHm4bPDQWujhCuThisHDFaGHq5CHqwYPbYQerkEerhk8XBN6uA55uG7w0Fbo4Qbk4YbBww2hh5uQh5sGD+2EHm5BHm4ZPNwSergNebht8NBe6OEO5OGOwcMdoYe7kIe7Bg8dhB7uQR7uGTzcE3q4D3m4b/DQUejhAeThgcHDA6GHh5CHhwYPnYQeHkEeHhk8PBJ6eAx5eGzw0Fno4Qnk4YnBwxOhh6eQh6cGD12EHp5BHp4ZPDwTengOeXhu8NBV6OEF5OGFwcMLoYeXkIeXBg/dhB5eQR5eGTy8Enp4DXl4bfDQXejhDeThjcHDG6GHt5CHtwYPPYQe3kEe3hk8vBN6eA95eG/w0FPo4QPk4YPBwwehh4+Qh48GD72EHj5BHj4ZPHwSevgMefhs8NBb6OEL5OGLwcMXoYevkIevBg99hB6+QR6+GTx8E3r4Dnn4bvDQV+jhB+Thh8HDD6GHn5CHnwYP/YQefkEefhk8/BJ6+A15+G3w0F/o4Q/k4Y/Bwx+hh7+Qh78GDwOEHv4ZyXj4b5f28L/b/9/WvyMZD/+O5D0MFHoIAHkIYPAQQOghIOQhoMHDIKGHQJCHQAYPgYQeAkMeAhs8DBZ6CAJ5CGLwEEToISjkIajBwxChh2CQh2AGD8GEHoJDHoIbPAwVeggBeQhh8BBC6CEk5CGkwcMwoYdQkIdQBg+hhB5CQx5CGzwMF3oIA3kIY/AQRughLOQhrMHDCKGHcJCHcAYP4YQewkMewhs8jBR6iAB5iGDwEEHoISLkIaLBwyihh0iQh0gGD5GEHiJDHiIbPIwWeogCeYhi8BBF6CEq5CGqwcMYoYdokIdoBg/RhB6iQx6iGzyMFXqIAXmIYfAQQ+ghJuQhpsHDOKGHWJCHWAYPsYQeYkMeYhs8jBd6iAN5iGPwEEfoIS7kIa7BwwShh3iQh3gGD/GEHuJDHuIbPEwUekgAeUhg8JBA6CEh5CGhwcMkoYdEkIdEBg+JhB4SQx4SGzxMFnpIAnlIYvCQROghKeQhqcHDFKGHZJCHZAYPyYQekkMekhs8TBV6SAF5SGHwkELoISXkIaXBwzShh1SQh1QGD6mEHlJDHlIbPEwXekgDeUhj8JBG6CEt5CGtwcMMoYd0kId0Bg/phB7SQx7SGzzMFHrIAHnIYPCQQeghI+Qho8HDLKGHTJCHTAYPmYQeMkMeMhs8zBZ6yAJ5yGLwkEXoISvkIavBwxyhh2yQh2wGD9mEHrJDHrIbPMwVesgBechh8JBD6CEn5CGnwcM8oYdckIdcBg+5hB5yQx5yGzzMF3rIA3nIY/CQR+ghL+Qhr8HDAqGHfJCHfAYP+YQe8kMe8hs8LBR6KAB5KGDwUEDooSDkoaDBwyKhh0KQh0IGD4WEHgpDHgobPCwWeigCeShi8FBE6KEo5KGowcMSoYdikIdiBg/FhB6KQx6KGzwsFXooAXkoYfBQQuihJOShpMHDMqGHUpCHUgYPpYQeSkMeShs8LBd6KAN5KGPwUEbooSzkoazBwwqhh3KQh3IGD+WEHspDHsobPKwUeqgAeahg8FBB6KEi5KGiwcMqoYdKkIdKBg+VhB4qQx4qGzysFnqoAnmoYvBQReihKuShqsHDGqGHapCHagYP1YQeqkMeqhs8rBV6qAF5qGHwUEPooSbkoabBwzqhh1qQh1oGD7WEHmpDHmobPKwXeqgDeahj8FBH6KEu5KGuwcMGoYd6kId6Bg/1hB7qQx7qGzxsFHpoAHloYPDQQOihIeShocHDJqGHRpCHRgYPjYQeGkMeGhs8bBZ6aAJ5aGLw0ETooSnkoanBwxahh2aQh2YGD82EHppDHpobPGwVemgBeWhh8NBC6KEl5KGlwcM2oYdWkIdWBg+thB5aQx5aGzxsF3poA3loY/DQRuihLeShrcHDDqGHdpCHdgYP7YQe2kMe2hs87BR66AB56GDw0EHooSPkoaPBwy6hh06Qh04GD52EHjpDHjobPOwWeugCeehi8NBF6KEr5KGrwcMeoYdukIduBg/dhB66Qx66GzzsFXroAXnoYfDQQ+ihJ+Shp8HDPqGHXpCHXgYPvYQeekMeehs87Bd66AN56GPw0EfooS/koa/BwwGhh36Qh34GD/2EHvpDHvobPBwUehgAeRhg8DBA6GEg5GGgwcMhoYdBkIdBBg+DhB4GQx4GGzwcFnoYAnkYYvAwROhhKORhqMHDEaGHYZCHYQYPw4QehkMehhs8HBV6GAF5GGHwMELoYSTkYaTBwzGhh1GQh1EGD6OEHkZDHkYbPBwXehgDeRhj8DBG6GEs5GGswcMJoYdxkIdxBg/jhB7GQx7GGzycFHqYAHmYYPAwQehhIuRhosHDKaGHSZCHSQYPk4QeJkMeJhs8nBZ6mAJ5mGLwMEXoYSrkYarBwxmhh2mQh2kGD9OEHqZDHqYbPJwVepgBeZhh8DBD6GEm5GGmwcM5oYdZkIdZBg+zhB5mQx5mGzycF3qYA3mYY/AwR+hhLuRhrsHDBaGHeZCHeQYP84Qe5kMe5hs8XBR6WAB5WGDwsEDoYSHkYaHBwyWhh0WQh0UGD4uEHhZDHhYbPFwWelgCeVhi8LBE6GEp5GGpwcMVoYdlkIdlBg/LhB6WQx6WGzxcFXpYAXlYYfCwQuhhJeRhpcHDNaGHVZCHVQYPq4QeVkMeVhs8XBd6WAN5WGPwsEboYS3kYa3Bww2hh3WQh3UGD+uEHtZDHtYbPNwUetgAedhg8LBB6GEj5GGjwcMtoYdNkIdNBg+bhB42Qx42GzzcFnrYAnnYYvCwRehhK+Rhq8HDHaGHbZCHbQYP24QetkMeths83BV62AF52GHwsEPoYSfkYafBwz2hh12Qh10GD7uEHnZDHnYbPNwXetgDedhj8LBH6GEv5GGvwcMDoYd9kId9Bg/7hB72Qx72Gzw8FHo4AHk4YPBwQOjhIOThoMHDI6GHQ5CHQwYPh4QeDkMeDhs8PBZ6OAJ5OGLwcETo4Sjk4ajBwxOhh2OQh2MGD8eEHo5DHo4bPDwVejgBeThh8HBC6OEk5OGkwcMzoYdTkIdTBg+nhB5OQx5OGzw8F3o4A3k4Y/BwRujhLOThrMHDC6GHc5CHcwYP54QezkMezhs8vBR6uAB5uGDwcEHo4SLk4aLBwyuhh0uQh0sGD5eEHi5DHi4bPLwWergCebhi8HBF6OEq5OGqwcMboYdrkIdrBg/XhB6uQx6uGzy8FXq4AXm4YfBwQ+jhJuThpsHDO6GHW5CHWwYPt4QebkMebhs8vBd6uAN5uGPwcEfo4S7k4a7Bwwehh3uQh3sGD/eEHu5DHu4bPHwUengAeXhg8PBA6OEh5OGhwcMnoYdHkIdHBg+PhB4eQx4eGzx8Fnp4Anl4YvDwROjhKeThqcHDF6GHZ5CHZwYPz4QenkMenhs8fBV6eAF5eGHw8ELo4SXk4aXBwzehh1eQh1cGD6+EHl5DHl4bPHwXengDeXhj8PBG6OEt5OGtwcMPoYd3kId3Bg/vhB7eQx7eGzz8FHr4AHn4YPDwQejhI+Tho8HDL6GHT5CHTwYPn4QePkMePhs8/BZ6+AJ5+GLw8EXo4Svk4avBwx+hh2+Qh28GD9+EHr5DHr4bPPwVevgBefhh8PBD6OEn5OGnwcM/aXQ//II8/DJ4+CX08Bvy8Nvg4V+hhz+Qhz8GD3+EHv5CHv4aPAQQevhnFOPhv13aw/9u/39b/45iPPw7ivcQUOghAOQhgMFDAKGHgJCHgAYPgYQeAkEeAhk8BBJ6CAx5CGzwEFjoIQjkIYjBQxChh6CQh6AGD0GEHoJBHoIZPAQTeggOeQhu8BBU6CEE5CGEwUMIoYeQkIeQBg/BhB5CQR5CGTyEEnoIDXkIbfAQXOghDOQhjMFDGKGHsJCHsAYPIYQewkEewhk8hBN6CA95CG/wEFLoIQLkIYLBQwShh4iQh4gGD6GEHiJBHiIZPEQSeogMeYhs8BBa6CEK5CGKwUMUoYeokIeoBg9hhB6iQR6iGTxEE3qIDnmIbvAQVughBuQhhsFDDKGHmJCHmAYP4YQeYkEeYhk8xBJ6iA15iG3wEF7oIQ7kIY7BQxyhh7iQh7gGDxGEHuJBHuIZPMQTeogPeYhv8BBR6CEB5CGBwUMCoYeEkIeEBg+RhB4SQR4SGTwkEnpIDHlIbPAQWeghCeQhicFDEqGHpJCHpAYPUYQekkEekhk8JBN6SA55SG7wEFXoIQXkIYXBQwqhh5SQh5QGD9GEHlJBHlIZPKQSekgNeUht8BBd6CEN5CGNwUMaoYe0kIe0Bg8xhB7SQR7SGTykE3pID3lIb/AQU+ghA+Qhg8FDBqGHjJCHjAYPsYQeMkEeMhk8ZBJ6yAx5yGzwEFvoIQvkIYvBQxahh6yQh6wGD3GEHrJBHrIZPGQTesgOechu8BBX6CEH5CGHwUMOoYeckIecBg/xhB5yQR5yGTzkEnrIDXnIbfAQX+ghD+Qhj8FDHqGHvJCHvAYPCYQe8kEe8hk85BN6yA95yG/wkFDooQDkoYDBQwGhh4KQh4IGD4mEHgpBHgoZPBQSeigMeShs8JBY6KEI5KGIwUMRoYeikIeiBg9JhB6KQR6KGTwUE3ooDnkobvCQVOihBOShhMFDCaGHkpCHkgYPyYQeSkEeShk8lBJ6KA15KG3wkFzooQzkoYzBQxmhh7KQh7IGDymEHspBHsoZPJQTeigPeShv8JBS6KEC5KGCwUMFoYeKkIeKBg+phB4qQR4qGTxUEnqoDHmobPCQWuihCuShisFDFaGHqpCHqgYPaYQeqkEeqhk8VBN6qA55qG7wkFbooQbkoYbBQw2hh5qQh5oGD+mEHmpBHmoZPNQSeqgNeaht8JBe6KEO5KGOwUMdoYe6kIe6Bg8ZhB7qQR7qGTzUE3qoD3mob/CQUeihAeShgcFDA6GHhpCHhgYPmYQeGkEeGhk8NBJ6aAx5aGzwkFnooQnkoYnBQxOhh6aQh6YGD1mEHppBHpoZPDQTemgOeWhu8JBV6KEF5KGFwUMLoYeWkIeWBg/ZhB5aQR5aGTy0EnpoDXlobfCQXeihDeShjcFDG6GHtpCHtgYPOYQe2kEe2hk8tBN6aA95aG/wkFPooQPkoYPBQwehh46Qh44GD7mEHjpBHjoZPHQSeugMeehs8JBb6KEL5KGLwUMXoYeukIeuBg95hB66QR66GTx0E3roDnnobvCQV+ihB+Shh8FDD6GHnpCHngYP+YQeekEeehk89BJ66A156G3wkF/ooQ/koY/BQx+hh76Qh74GDwWEHvpBHvoZPPQTeugPeehv8FBQ6GEA5GGAwcMAoYeBkIeBBg+FhB4GQR4GGTwMEnoYDHkYbPBQWOhhCORhiMHDEKGHoZCHoQYPRYQehkEehhk8DBN6GA55GG7wUFToYQTkYYTBwwihh5GQh5EGD8WEHkZBHkYZPIwSehgNeRht8FBc6GEM5GGMwcMYoYexkIexBg8lhB7GQR7GGTyME3oYD3kYb/BQUuhhAuRhgsHDBKGHiZCHiQYPpYQeJkEeJhk8TBJ6mAx5mGzwUFroYQrkYYrBwxShh6mQh6kGD2WEHqZBHqYZPEwTepgOeZhu8FBW6GEG5GGGwcMMoYeZkIeZBg/lhB5mQR5mGTzMEnqYDXmYbfBQXuhhDuRhjsHDHKGHuZCHuQYPFYQe5kEe5hk8zBN6mA95mG/wUFHoYQHkYYHBwwKhh4WQh4UGD5WEHhZBHhYZPCwSelgMeVhs8FBZ6GEJ5GGJwcMSoYelkIelBg9VhB6WQR6WGTwsE3pYDnlYbvBQVehhBeRhhcHDCqGHlZCHlQYP1YQeVkEeVhk8rBJ6WA15WG3wUF3oYQ3kYY3Bwxqhh7WQh7UGDzWEHtZBHtYZPKwTelgPeVhv8FBT6GED5GGDwcMGoYeNkIeNBg+1hB42QR42GTxsEnrYDHnYbPBQW+hhC+Rhi8HDFqGHrZCHrQYPdYQetkEethk8bBN62A552G7wUFfoYQfkYYfBww6hh52Qh50GD/WEHnZBHnYZPOwSetgNedht8FBf6GEP5GGPwcMeoYe9kIe9Bg8NhB72QR72GTzsE3rYD3nYb/DQUOjhAOThgMHDAaGHg5CHgwYPjYQeDkEeDhk8HBJ6OAx5OGzw0Fjo4Qjk4YjBwxGhh6OQh6MGD02EHo5BHo4ZPBwTejgOeThu8NBU6OEE5OGEwcMJoYeTkIeTBg/NhB5OQR5OGTycEno4DXk4bfDQXOjhDOThjMHDGaGHs5CHswYPLYQezkEezhk8nBN6OA95OG/w0FLo4QLk4YLBwwWhh4uQh4sGD62EHi5BHi4ZPFwSergMebhs8NBa6OEK5OGKwcMVoYerkIerBg9thB6uQR6uGTxcE3q4Dnm4bvDQVujhBuThhsHDDaGHm5CHmwYP7YQebkEebhk83BJ6uA15uG3w0F7o4Q7k4Y7Bwx2hh7uQh7sGDx2EHu5BHu4ZPNwTergPebhv8NBR6OEB5OGBwcMDoYeHkIeHBg+dhB4eQR4eGTw8Enp4DHl4bPDQWejhCeThicHDE6GHp5CHpwYPXYQenkEenhk8PBN6eA55eG7w0FXo4QXk4YXBwwuhh5eQh5cGD92EHl5BHl4ZPLwSengNeXht8NBd6OEN5OGNwcMboYe3kIe3Bg89hB7eQR7eGTy8E3p4D3l4b/DQU+jhA+Thg8HDB6GHj5CHjwYPvYQePkEePhk8fBJ6+Ax5+Gzw0Fvo4Qvk4YvBwxehh6+Qh68GD32EHr5BHr4ZPHwTevgOefhu8NBX6OEH5OGHwcMPoYefkIefBg/9hB5+QR5+GTz8Enr4DXn4bfDQX+jhD+Thj8HDH6GHv5CHvwYPA4Qe/hnNePhvl/bwv9v/39a/oxkP/47mPQwUeggAeQhg8BBA6CEg5CGgwcMgoYdAkIdABg+BhB4CQx4CGzwMFnoIAnkIYvAQROghKOQhqMHDEKGHYJCHYAYPwYQegkMeghs8DBV6CAF5CGHwEELoISTkIaTBwzChh1CQh1AGD6GEHkJDHkIbPAwXeggDeQhj8BBG6CEs5CGswcMIoYdwkIdwBg/hhB7CQx7CGzyMFHqIAHmIYPAQQeghIuQhosHDKKGHSJCHSAYPkYQeIkMeIhs8jBZ6iAJ5iGLwEEXoISrkIarBwxihh2iQh2gGD9GEHqJDHqIbPIwVeogBeYhh8BBD6CEm5CGmwcM4oYdYkIdYBg+xhB5iQx5iGzyMF3qIA3mIY/AQR+ghLuQhrsHDBKGHeJCHeAYP8YQe4kMe4hs8TBR6SAB5SGDwkEDoISHkIaHBwyShh0SQh0QGD4mEHhJDHhIbPEwWekgCeUhi8JBE6CEp5CGpwcMUoYdkkIdkBg/JhB6SQx6SGzxMFXpIAXlIYfCQQughJeQhpcHDNKGHVJCHVAYPqYQeUkMeUhs8TBd6SAN5SGPwkEboIS3kIa3Bwwyhh3SQh3QGD+mEHtJDHtIbPMwUesgAechg8JBB6CEj5CGjwcMsoYdMkIdMBg+ZhB4yQx4yGzzMFnrIAnnIYvCQReghK+Qhq8HDHKGHbJCHbAYP2YQeskMeshs8zBV6yAF5yGHwkEPoISfkIafBwzyhh1yQh1wGD7mEHnJDHnIbPMwXesgDechj8JBH6CEv5CGvwcMCoYd8kId8Bg/5hB7yQx7yGzwsFHooAHkoYPBQQOihIOShoMHDIqGHQpCHQgYPhYQeCkMeChs8LBZ6KAJ5KGLwUETooSjkoajBwxKhh2KQh2IGD8WEHopDHoobPCwVeigBeShh8FBC6KEk5KGkwcMyoYdSkIdSBg+lhB5KQx5KGzwsF3ooA3koY/BQRuihLOShrMHDCqGHcpCHcgYP5YQeykMeyhs8rBR6qAB5qGDwUEHooSLkoaLBwyqhh0qQh0oGD5WEHipDHiobPKwWeqgCeahi8FBF6KEq5KGqwcMaoYdqkIdqBg/VhB6qQx6qGzysFXqoAXmoYfBQQ+ihJuShpsHDOqGHWpCHWgYPtYQeakMeahs8rBd6qAN5qGPwUEfooS7koa7Bwwahh3qQh3oGD/WEHupDHuobPGwUemgAeWhg8NBA6KEh5KGhwcMmoYdGkIdGBg+NhB4aQx4aGzxsFnpoAnloYvDQROihKeShqcHDFqGHZpCHZgYPzYQemkMemhs8bBV6aAF5aGHw0ELooSXkoaXBwzahh1aQh1YGD62EHlpDHlobPGwXemgDeWhj8NBG6KEt5KGtwcMOoYd2kId2Bg/thB7aQx7aGzzsFHroAHnoYPDQQeihI+Sho8HDLqGHTpCHTgYPnYQeOkMeOhs87BZ66AJ56GLw0EXooSvkoavBwx6hh26Qh24GD92EHrpDHrobPOwVeugBeehh8NBD6KEn5KGnwcM+oYdekIdeBg+9hB56Qx56GzzsF3roA3noY/DQR+ihL+Shr8HDAaGHfpCHfgYP/YQe+kMe+hs8HBR6GAB5GGDwMEDoYSDkYaDBwyGhh0GQh0EGD4OEHgZDHgYbPBwWehgCeRhi8DBE6GEo5GGowcMRoYdhkIdhBg/DhB6GQx6GGzwcFXoYAXkYYfAwQuhhJORhpMHDMaGHUZCHUQYPo4QeRkMeRhs8HBd6GAN5GGPwMEboYSzkYazBwwmhh3GQh3EGD+OEHsZDHsYbPJwUepgAeZhg8DBB6GEi5GGiwcMpoYdJkIdJBg+ThB4mQx4mGzycFnqYAnmYYvAwRehhKuRhqsHDGaGHaZCHaQYP04QepkMephs8nBV6mAF5mGHwMEPoYSbkYabBwzmhh1mQh1kGD7OEHmZDHmYbPJwXepgDeZhj8DBH6GEu5GGuwcMFoYd5kId5Bg/zhB7mQx7mGzxcFHpYAHlYYPCwQOhhIeRhocHDJaGHRZCHRQYPi4QeFkMeFhs8XBZ6WAJ5WGLwsEToYSnkYanBwxWhh2WQh2UGD8uEHpZDHpYbPFwVelgBeVhh8LBC6GEl5GGlwcM1oYdVkIdVBg+rhB5WQx5WGzxcF3pYA3lYY/CwRuhhLeRhrcHDDaGHdZCHdQYP64Qe1kMe1hs83BR62AB52GDwsEHoYSPkYaPBwy2hh02Qh00GD5uEHjZDHjYbPNwWetgCedhi8LBF6GEr5GGrwcMdoYdtkIdtBg/bhB62Qx62GzzcFXrYAXnYYfCwQ+hhJ+Rhp8HDPaGHXZCHXQYPu4QedkMedhs83Bd62AN52GPwsEfoYS/kYa/BwwOhh32Qh30GD/uEHvZDHvYbPDwUejgAeThg8HBA6OEg5OGgwcMjoYdDkIdDBg+HhB4OQx4OGzw8Fno4Ank4YvBwROjhKOThqMHDE6GHY5CHYwYPx4QejkMejhs8PBV6OAF5OGHwcELo4STk4aTBwzOhh1OQh1MGD6eEHk5DHk4bPDwXejgDeThj8HBG6OEs5OGswcMLoYdzkIdzBg/nhB7OQx7OGzy8FHq4AHm4YPBwQejhIuThosHDK6GHS5CHSwYPl4QeLkMeLhs8vBZ6uAJ5uGLwcEXo4Srk4arBwxuhh2uQh2sGD9eEHq5DHq4bPLwVergBebhh8HBD6OEm5OGmwcM7oYdbkIdbBg+3hB5uQx5uGzy8F3q4A3m4Y/BwR+jhLuThrsHDB6GHe5CHewYP94Qe7kMe7hs8fBR6eAB5eGDw8EDo4SHk4aHBwyehh0eQh0cGD4+EHh5DHh4bPHwWengCeXhi8PBE6OEp5OGpwcMXoYdnkIdnBg/PhB6eQx6eGzx8FXp4AXl4YfDwQujhJeThpcHDN6GHV5CHVwYPr4QeXkMeXhs8fBd6eAN5eGPw8Ebo4S3k4a3Bww+hh3eQh3cGD++EHt5DHt4bPPwUevgAefhg8PBB6OEj5OGjwcMvoYdPkIdPBg+fhB4+Qx4+Gzz8Fnr4Ann4YvDwRejhK+Thq8HDH6GHb5CHbwYP34QevkMevhs8/BV6+AF5+GHw8EPo4Sfk4afBwz9pdT/8gjz8Mnj4JfTwG/Lw2+DhX6GHP5CHPwYPf4Qe/kIe/ho8BBB6+GcM4+G/XdrD/27/f1v/jmE8/DuG9xBQ6CEA5CGAwUMAoYeAkIeABg+BhB4CQR4CGTwEEnoIDHkIbPAQWOghCOQhiMFDEKGHoJCHoAYPQYQegkEeghk8BBN6CA55CG7wEFToIQTkIYTBQwihh5CQh5AGD8GEHkJBHkIZPIQSeggNeQht8BBc6CEM5CGMwUMYoYewkIewBg8hhB7CQR7CGTyEE3oID3kIb/AQUughAuQhgsFDBKGHiJCHiAYPoYQeIkEeIhk8RBJ6iAx5iGzwEFroIQrkIYrBQxShh6iQh6gGD2GEHqJBHqIZPEQTeogOeYhu8BBW6CEG5CGGwUMMoYeYkIeYBg/hhB5iQR5iGTzEEnqIDXmIbfAQXughDuQhjsFDHKGHuJCHuAYPEYQe4kEe4hk8xBN6iA95iG/wEFHoIQHkIYHBQwKhh4SQh4QGD5GEHhJBHhIZPCQSekgMeUhs8BBZ6CEJ5CGJwUMSoYekkIekBg9RhB6SQR6SGTwkE3pIDnlIbvAQVeghBeQhhcFDCqGHlJCHlAYP0YQeUkEeUhk8pBJ6SA15SG3wEF3oIQ3kIY3BQxqhh7SQh7QGDzGEHtJBHtIZPKQTekgPeUhv8BBT6CED5CGDwUMGoYeMkIeMBg+xhB4yQR4yGTxkEnrIDHnIbPAQW+ghC+Qhi8FDFqGHrJCHrAYPcYQeskEeshk8ZBN6yA55yG7wEFfoIQfkIYfBQw6hh5yQh5wGD/GEHnJBHnIZPOQSesgNecht8BBf6CEP5CGPwUMeoYe8kIe8Bg8JhB7yQR7yGTzkE3rID3nIb/CQUOihAOShgMFDAaGHgpCHggYPiYQeCkEeChk8FBJ6KAx5KGzwkFjooQjkoYjBQxGhh6KQh6IGD0mEHopBHooZPBQTeigOeShu8JBU6KEE5KGEwUMJoYeSkIeSBg/JhB5KQR5KGTyUEnooDXkobfCQXOihDOShjMFDGaGHspCHsgYPKYQeykEeyhk8lBN6KA95KG/wkFLooQLkoYLBQwWhh4qQh4oGD6mEHipBHioZPFQSeqgMeahs8JBa6KEK5KGKwUMVoYeqkIeqBg9phB6qQR6qGTxUE3qoDnmobvCQVuihBuShhsFDDaGHmpCHmgYP6YQeakEeahk81BJ6qA15qG3wkF7ooQ7koY7BQx2hh7qQh7oGDxmEHupBHuoZPNQTeqgPeahv8JBR6KEB5KGBwUMDoYeGkIeGBg+ZhB4aQR4aGTw0EnpoDHlobPCQWeihCeShicFDE6GHppCHpgYPWYQemkEemhk8NBN6aA55aG7wkFXooQXkoYXBQwuhh5aQh5YGD9mEHlpBHloZPLQSemgNeWht8JBd6KEN5KGNwUMboYe2kIe2Bg85hB7aQR7aGTy0E3poD3lob/CQU+ihA+Shg8FDB6GHjpCHjgYPuYQeOkEeOhk8dBJ66Ax56GzwkFvooQvkoYvBQxehh66Qh64GD3mEHrpBHroZPHQTeugOeehu8JBX6KEH5KGHwUMPoYeekIeeBg/5hB56QR56GTz0EnroDXnobfCQX+ihD+Shj8FDH6GHvpCHvgYPBYQe+kEe+hk89BN66A956G/wUFDoYQDkYYDBwwChh4GQh4EGD4WEHgZBHgYZPAwSehgMeRhs8FBY6GEI5GGIwcMQoYehkIehBg9FhB6GQR6GGTwME3oYDnkYbvBQVOhhBORhhMHDCKGHkZCHkQYPxYQeRkEeRhk8jBJ6GA15GG3wUFzoYQzkYYzBwxihh7GQh7EGDyWEHsZBHsYZPIwTehgPeRhv8FBS6GEC5GGCwcMEoYeJkIeJBg+lhB4mQR4mGTxMEnqYDHmYbPBQWuhhCuRhisHDFKGHqZCHqQYPZYQepkEephk8TBN6mA55mG7wUFboYQbkYYbBwwyhh5mQh5kGD+WEHmZBHmYZPMwSepgNeZht8FBe6GEO5GGOwcMcoYe5kIe5Bg8VhB7mQR7mGTzME3qYD3mYb/BQUehhAeRhgcHDAqGHhZCHhQYPlYQeFkEeFhk8LBJ6WAx5WGzwUFnoYQnkYYnBwxKhh6WQh6UGD1WEHpZBHpYZPCwTelgOeVhu8FBV6GEF5GGFwcMKoYeVkIeVBg/VhB5WQR5WGTysEnpYDXlYbfBQXehhDeRhjcHDGqGHtZCHtQYPNYQe1kEe1hk8rBN6WA95WG/wUFPoYQPkYYPBwwahh42Qh40GD7WEHjZBHjYZPGwSetgMedhs8FBb6GEL5GGLwcMWoYetkIetBg91hB62QR62GTxsE3rYDnnYbvBQV+hhB+Rhh8HDDqGHnZCHnQYP9YQedkEedhk87BJ62A152G3wUF/oYQ/kYY/Bwx6hh72Qh70GDw2EHvZBHvYZPOwTetgPedhv8NBQ6OEA5OGAwcMBoYeDkIeDBg+NhB4OQR4OGTwcEno4DHk4bPDQWOjhCOThiMHDEaGHo5CHowYPTYQejkEejhk8HBN6OA55OG7w0FTo4QTk4YTBwwmhh5OQh5MGD82EHk5BHk4ZPJwSejgNeTht8NBc6OEM5OGMwcMZoYezkIezBg8thB7OQR7OGTycE3o4D3k4b/DQUujhAuThgsHDBaGHi5CHiwYPrYQeLkEeLhk8XBJ6uAx5uGzw0Fro4Qrk4YrBwxWhh6uQh6sGD22EHq5BHq4ZPFwTergOebhu8NBW6OEG5OGGwcMNoYebkIebBg/thB5uQR5uGTzcEnq4DXm4bfDQXujhDuThjsHDHaGHu5CHuwYPHYQe7kEe7hk83BN6uA95uG/w0FHo4QHk4YHBwwOhh4eQh4cGD52EHh5BHh4ZPDwSengMeXhs8NBZ6OEJ5OGJwcMToYenkIenBg9dhB6eQR6eGTw8E3p4Dnl4bvDQVejhBeThhcHDC6GHl5CHlwYP3YQeXkEeXhk8vBJ6eA15eG3w0F3o4Q3k4Y3Bwxuhh7eQh7cGDz2EHt5BHt4ZPLwTengPeXhv8NBT6OED5OGDwcMHoYePkIePBg+9hB4+QR4+GTx8Enr4DHn4bPDQW+jhC+Thi8HDF6GHr5CHrwYPfYQevkEevhk8fBN6+A55+G7w0Ffo4Qfk4YfBww+hh5+Qh58GD/2EHn5BHn4ZPPwSevgNefht8NBf6OEP5OGPwcMfoYe/kIe/Bg8DhB7+Gct4+G+X9vC/2//f1r9jGQ//juU9DBR6CAB5CGDwEEDoISDkIaDBwyChh0CQh0AGD4GEHgJDHgIbPAwWeggCeQhi8BBE6CEo5CGowcMQoYdgkIdgBg/BhB6CQx6CGzwMFXoIAXkIYfAQQughJOQhpMHDMKGHUJCHUAYPoYQeQkMeQhs8DBd6CAN5CGPwEEboISzkIazBwwihh3CQh3AGD+GEHsJDHsIbPIwUeogAeYhg8BBB6CEi5CGiwcMooYdIkIdIBg+RhB4iQx4iGzyMFnqIAnmIYvAQReghKuQhqsHDGKGHaJCHaAYP0YQeokMeohs8jBV6iAF5iGHwEEPoISbkIabBwzihh1iQh1gGD7GEHmJDHmIbPIwXeogDeYhj8BBH6CEu5CGuwcMEoYd4kId4Bg/xhB7iQx7iGzxMFHpIAHlIYPCQQOghIeQhocHDJKGHRJCHRAYPiYQeEkMeEhs8TBZ6SAJ5SGLwkEToISnkIanBwxShh2SQh2QGD8mEHpJDHpIbPEwVekgBeUhh8JBC6CEl5CGlwcM0oYdUkIdUBg+phB5SQx5SGzxMF3pIA3lIY/CQRughLeQhrcHDDKGHdJCHdAYP6YQe0kMe0hs8zBR6yAB5yGDwkEHoISPkIaPBwyyhh0yQh0wGD5mEHjJDHjIbPMwWesgCechi8JBF6CEr5CGrwcMcoYdskIdsBg/ZhB6yQx6yGzzMFXrIAXnIYfCQQ+ghJ+Qhp8HDPKGHXJCHXAYPuYQeckMechs8zBd6yAN5yGPwkEfoIS/kIa/BwwKhh3yQh3wGD/mEHvJDHvIbPCwUeigAeShg8FBA6KEg5KGgwcMioYdCkIdCBg+FhB4KQx4KGzwsFnooAnkoYvBQROihKOShqMHDEqGHYpCHYgYPxYQeikMeihs8LBV6KAF5KGHwUELooSTkoaTBwzKhh1KQh1IGD6WEHkpDHkobPCwXeigDeShj8FBG6KEs5KGswcMKoYdykIdyBg/lhB7KQx7KGzysFHqoAHmoYPBQQeihIuShosHDKqGHSpCHSgYPlYQeKkMeKhs8rBZ6qAJ5qGLwUEXooSrkoarBwxqhh2qQh2oGD9WEHqpDHqobPKwVeqgBeahh8FBD6KEm5KGmwcM6oYdakIdaBg+1hB5qQx5qGzysF3qoA3moY/BQR+ihLuShrsHDBqGHepCHegYP9YQe6kMe6hs8bBR6aAB5aGDw0EDooSHkoaHBwyahh0aQh0YGD42EHhpDHhobPGwWemgCeWhi8NBE6KEp5KGpwcMWoYdmkIdmBg/NhB6aQx6aGzxsFXpoAXloYfDQQuihJeShpcHDNqGHVpCHVgYPrYQeWkMeWhs8bBd6aAN5aGPw0EbooS3koa3Bww6hh3aQh3YGD+2EHtpDHtobPOwUeugAeehg8NBB6KEj5KGjwcMuoYdOkIdOBg+dhB46Qx46GzzsFnroAnnoYvDQReihK+Shq8HDHqGHbpCHbgYP3YQeukMeuhs87BV66AF56GHw0EPooSfkoafBwz6hh16Qh14GD72EHnpDHnobPOwXeugDeehj8NBH6KEv5KGvwcMBoYd+kId+Bg/9hB76Qx76GzwcFHoYAHkYYPAwQOhhIORhoMHDIaGHQZCHQQYPg4QeBkMeBhs8HBZ6GAJ5GGLwMEToYSjkYajBwxGhh2GQh2EGD8OEHoZDHoYbPBwVehgBeRhh8DBC6GEk5GGkwcMxoYdRkIdRBg+jhB5GQx5GGzwcF3oYA3kYY/AwRuhhLORhrMHDCaGHcZCHcQYP44QexkMexhs8nBR6mAB5mGDwMEHoYSLkYaLBwymhh0mQh0kGD5OEHiZDHiYbPJwWepgCeZhi8DBF6GEq5GGqwcMZoYdpkIdpBg/ThB6mQx6mGzycFXqYAXmYYfAwQ+hhJuRhpsHDOaGHWZCHWQYPs4QeZkMeZhs8nBd6mAN5mGPwMEfoYS7kYa7BwwWhh3mQh3kGD/OEHuZDHuYbPFwUelgAeVhg8LBA6GEh5GGhwcMloYdFkIdFBg+LhB4WQx4WGzxcFnpYAnlYYvCwROhhKeRhqcHDFaGHZZCHZQYPy4QelkMelhs8XBV6WAF5WGHwsELoYSXkYaXBwzWhh1WQh1UGD6uEHlZDHlYbPFwXelgDeVhj8LBG6GEt5GGtwcMNoYd1kId1Bg/rhB7WQx7WGzzcFHrYAHnYYPCwQehhI+Rho8HDLaGHTZCHTQYPm4QeNkMeNhs83BZ62AJ52GLwsEXoYSvkYavBwx2hh22Qh20GD9uEHrZDHrYbPNwVetgBedhh8LBD6GEn5GGnwcM9oYddkIddBg+7hB52Qx52GzzcF3rYA3nYY/CwR+hhL+Rhr8HDA6GHfZCHfQYP+4Qe9kMe9hs8PBR6OAB5OGDwcEDo4SDk4aDBwyOhh0OQh0MGD4eEHg5DHg4bPDwWejgCeThi8HBE6OEo5OGowcMToYdjkIdjBg/HhB6OQx6OGzw8FXo4AXk4YfBwQujhJOThpMHDM6GHU5CHUwYPp4QeTkMeThs8PBd6OAN5OGPwcEbo4Szk4azBwwuhh3OQh3MGD+eEHs5DHs4bPLwUergAebhg8HBB6OEi5OGiwcMroYdLkIdLBg+XhB4uQx4uGzy8Fnq4Anm4YvBwRejhKuThqsHDG6GHa5CHawYP14QerkMerhs8vBV6uAF5uGHwcEPo4Sbk4abBwzuhh1uQh1sGD7eEHm5DHm4bPLwXergDebhj8HBH6OEu5OGuwcMHoYd7kId7Bg/3hB7uQx7uGzx8FHp4AHl4YPDwQOjhIeThocHDJ6GHR5CHRwYPj4QeHkMeHhs8fBZ6eAJ5eGLw8ETo4Snk4anBwxehh2eQh2cGD8+EHp5DHp4bPHwVengBeXhh8PBC6OEl5OGlwcM3oYdXkIdXBg+vhB5eQx5eGzx8F3p4A3l4Y/DwRujhLeThrcHDD6GHd5CHdwYP74Qe3kMe3hs8/BR6+AB5+GDw8EHo4SPk4aPBwy+hh0+Qh08GD5+EHj5DHj4bPPwWevgCefhi8PBF6OEr5OGrwcMfoYdvkIdvBg/fhB6+Qx6+Gzz8FXr4AXn4YfDwQ+jhJ+Thp8HDP+l0P/yCPPwyePgl9PAb8vDb4OFfoYc/kIc/Bg9/hB7+Qh7+GjwEEHr4Zxzj4b9d2sP/bv9/W/+OYzz8O473EFDoIQDkIYDBQwChh4CQh4AGD4GEHgJBHgIZPAQSeggMeQhs8BBY6CEI5CGIwUMQoYegkIegBg9BhB6CQR6CGTwEE3oIDnkIbvAQVOghBOQhhMFDCKGHkJCHkAYPwYQeQkEeQhk8hBJ6CA15CG3wEFzoIQzkIYzBQxihh7CQh7AGDyGEHsJBHsIZPIQTeggPeQhv8BBS6CEC5CGCwUMEoYeIkIeIBg+hhB4iQR4iGTxEEnqIDHmIbPAQWughCuQhisFDFKGHqJCHqAYPYYQeokEeohk8RBN6iA55iG7wEFboIQbkIYbBQwyhh5iQh5gGD+GEHmJBHmIZPMQSeogNeYht8BBe6CEO5CGOwUMcoYe4kIe4Bg8RhB7iQR7iGTzEE3qID3mIb/AQUeghAeQhgcFDAqGHhJCHhAYPkYQeEkEeEhk8JBJ6SAx5SGzwEFnoIQnkIYnBQxKhh6SQh6QGD1GEHpJBHpIZPCQTekgOeUhu8BBV6CEF5CGFwUMKoYeUkIeUBg/RhB5SQR5SGTykEnpIDXlIbfAQXeghDeQhjcFDGqGHtJCHtAYPMYQe0kEe0hk8pBN6SA95SG/wEFPoIQPkIYPBQwahh4yQh4wGD7GEHjJBHjIZPGQSesgMechs8BBb6CEL5CGLwUMWoYeskIesBg9xhB6yQR6yGTxkE3rIDnnIbvAQV+ghB+Qhh8FDDqGHnJCHnAYP8YQeckEechk85BJ6yA15yG3wEF/oIQ/kIY/BQx6hh7yQh7wGDwmEHvJBHvIZPOQTesgPechv8JBQ6KEA5KGAwUMBoYeCkIeCBg+JhB4KQR4KGTwUEnooDHkobPCQWOihCOShiMFDEaGHopCHogYPSYQeikEeihk8FBN6KA55KG7wkFTooQTkoYTBQwmhh5KQh5IGD8mEHkpBHkoZPJQSeigNeSht8JBc6KEM5KGMwUMZoYeykIeyBg8phB7KQR7KGTyUE3ooD3kob/CQUuihAuShgsFDBaGHipCHigYPqYQeKkEeKhk8VBJ6qAx5qGzwkFrooQrkoYrBQxWhh6qQh6oGD2mEHqpBHqoZPFQTeqgOeahu8JBW6KEG5KGGwUMNoYeakIeaBg/phB5qQR5qGTzUEnqoDXmobfCQXuihDuShjsFDHaGHupCHugYPGYQe6kEe6hk81BN6qA95qG/wkFHooQHkoYHBQwOhh4aQh4YGD5mEHhpBHhoZPDQSemgMeWhs8JBZ6KEJ5KGJwUMToYemkIemBg9ZhB6aQR6aGTw0E3poDnlobvCQVeihBeShhcFDC6GHlpCHlgYP2YQeWkEeWhk8tBJ6aA15aG3wkF3ooQ3koY3BQxuhh7aQh7YGDzmEHtpBHtoZPLQTemgPeWhv8JBT6KED5KGDwUMHoYeOkIeOBg+5hB46QR46GTx0EnroDHnobPCQW+ihC+Shi8FDF6GHrpCHrgYPeYQeukEeuhk8dBN66A556G7wkFfooQfkoYfBQw+hh56Qh54GD/mEHnpBHnoZPPQSeugNeeht8JBf6KEP5KGPwUMfoYe+kIe+Bg8FhB76QR76GTz0E3roD3nob/BQUOhhAORhgMHDAKGHgZCHgQYPhYQeBkEeBhk8DBJ6GAx5GGzwUFjoYQjkYYjBwxChh6GQh6EGD0WEHoZBHoYZPAwTehgOeRhu8FBU6GEE5GGEwcMIoYeRkIeRBg/FhB5GQR5GGTyMEnoYDXkYbfBQXOhhDORhjMHDGKGHsZCHsQYPJYQexkEexhk8jBN6GA95GG/wUFLoYQLkYYLBwwShh4mQh4kGD6WEHiZBHiYZPEwSepgMeZhs8FBa6GEK5GGKwcMUoYepkIepBg9lhB6mQR6mGTxME3qYDnmYbvBQVuhhBuRhhsHDDKGHmZCHmQYP5YQeZkEeZhk8zBJ6mA15mG3wUF7oYQ7kYY7Bwxyhh7mQh7kGDxWEHuZBHuYZPMwTepgPeZhv8FBR6GEB5GGBwcMCoYeFkIeFBg+VhB4WQR4WGTwsEnpYDHlYbPBQWehhCeRhicHDEqGHpZCHpQYPVYQelkEelhk8LBN6WA55WG7wUFXoYQXkYYXBwwqhh5WQh5UGD9WEHlZBHlYZPKwSelgNeVht8FBd6GEN5GGNwcMaoYe1kIe1Bg81hB7WQR7WGTysE3pYD3lYb/BQU+hhA+Rhg8HDBqGHjZCHjQYPtYQeNkEeNhk8bBJ62Ax52GzwUFvoYQvkYYvBwxahh62Qh60GD3WEHrZBHrYZPGwTetgOedhu8FBX6GEH5GGHwcMOoYedkIedBg/1hB52QR52GTzsEnrYDXnYbfBQX+hhD+Rhj8HDHqGHvZCHvQYPDYQe9kEe9hk87BN62A952G/w0FDo4QDk4YDBwwGhh4OQh4MGD42EHg5BHg4ZPBwSejgMeThs8NBY6OEI5OGIwcMRoYejkIejBg9NhB6OQR6OGTwcE3o4Dnk4bvDQVOjhBOThhMHDCaGHk5CHkwYPzYQeTkEeThk8nBJ6OA15OG3w0Fzo4Qzk4YzBwxmhh7OQh7MGDy2EHs5BHs4ZPJwTejgPeThv8NBS6OEC5OGCwcMFoYeLkIeLBg+thB4uQR4uGTxcEnq4DHm4bPDQWujhCuThisHDFaGHq5CHqwYPbYQerkEerhk8XBN6uA55uG7w0Fbo4Qbk4YbBww2hh5uQh5sGD+2EHm5BHm4ZPNwSergNebht8NBe6OEO5OGOwcMdoYe7kIe7Bg8dhB7uQR7uGTzcE3q4D3m4b/DQUejhAeThgcHDA6GHh5CHhwYPnYQeHkEeHhk8PBJ6eAx5eGzw0Fno4Qnk4YnBwxOhh6eQh6cGD12EHp5BHp4ZPDwTengOeXhu8NBV6OEF5OGFwcMLoYeXkIeXBg/dhB5eQR5eGTy8Enp4DXl4bfDQXejhDeThjcHDG6GHt5CHtwYPPYQe3kEe3hk8vBN6eA95eG/w0FPo4QPk4YPBwwehh4+Qh48GD72EHj5BHj4ZPHwSevgMefhs8NBb6OEL5OGLwcMXoYevkIevBg99hB6+QR6+GTx8E3r4Dnn4bvDQV+jhB+Thh8HDD6GHn5CHnwYP/YQefkEefhk8/BJ6+A15+G3w0F/o4Q/k4Y/Bwx+hh7+Qh78GDwOEHv4Zz3j4b5f28L/b/9/Wv+MZD/+O5z0MFHoIAHkIYPAQQOghIOQhoMHDIKGHQJCHQAYPgYQeAkMeAhs8DBZ6CAJ5CGLwEEToISjkIajBwxChh2CQh2AGD8GEHoJDHoIbPAwVeggBeQhh8BBC6CEk5CGkwcMwoYdQkIdQBg+hhB5CQx5CGzwMF3oIA3kIY/AQRughLOQhrMHDCKGHcJCHcAYP4YQewkMewhs8jBR6iAB5iGDwEEHoISLkIaLBwyihh0iQh0gGD5GEHiJDHiIbPIwWeogCeYhi8BBF6CEq5CGqwcMYoYdokIdoBg/RhB6iQx6iGzyMFXqIAXmIYfAQQ+ghJuQhpsHDOKGHWJCHWAYPsYQeYkMeYhs8jBd6iAN5iGPwEEfoIS7kIa7BwwShh3iQh3gGD/GEHuJDHuIbPEwUekgAeUhg8JBA6CEh5CGhwcMkoYdEkIdEBg+JhB4SQx4SGzxMFnpIAnlIYvCQROghKeQhqcHDFKGHZJCHZAYPyYQekkMekhs8TBV6SAF5SGHwkELoISXkIaXBwzShh1SQh1QGD6mEHlJDHlIbPEwXekgDeUhj8JBG6CEt5CGtwcMMoYd0kId0Bg/phB7SQx7SGzzMFHrIAHnIYPCQQeghI+Qho8HDLKGHTJCHTAYPmYQeMkMeMhs8zBZ6yAJ5yGLwkEXoISvkIavBwxyhh2yQh2wGD9mEHrJDHrIbPMwVesgBechh8JBD6CEn5CGnwcM8oYdckIdcBg+5hB5yQx5yGzzMF3rIA3nIY/CQR+ghL+Qhr8HDAqGHfJCHfAYP+YQe8kMe8hs8LBR6KAB5KGDwUEDooSDkoaDBwyKhh0KQh0IGD4WEHgpDHgobPCwWeigCeShi8FBE6KEo5KGowcMSoYdikIdiBg/FhB6KQx6KGzwsFXooAXkoYfBQQuihJOShpMHDMqGHUpCHUgYPpYQeSkMeShs8LBd6KAN5KGPwUEbooSzkoazBwwqhh3KQh3IGD+WEHspDHsobPKwUeqgAeahg8FBB6KEi5KGiwcMqoYdKkIdKBg+VhB4qQx4qGzysFnqoAnmoYvBQReihKuShqsHDGqGHapCHagYP1YQeqkMeqhs8rBV6qAF5qGHwUEPooSbkoabBwzqhh1qQh1oGD7WEHmpDHmobPKwXeqgDeahj8FBH6KEu5KGuwcMGoYd6kId6Bg/1hB7qQx7qGzxsFHpoAHloYPDQQOihIeShocHDJqGHRpCHRgYPjYQeGkMeGhs8bBZ6aAJ5aGLw0ETooSnkoanBwxahh2aQh2YGD82EHppDHpobPGwVemgBeWhh8NBC6KEl5KGlwcM2oYdWkIdWBg+thB5aQx5aGzxsF3poA3loY/DQRuihLeShrcHDDqGHdpCHdgYP7YQe2kMe2hs87BR66AB56GDw0EHooSPkoaPBwy6hh06Qh04GD52EHjpDHjobPOwWeugCeehi8NBF6KEr5KGrwcMeoYdukIduBg/dhB66Qx66GzzsFXroAXnoYfDQQ+ihJ+Shp8HDPqGHXpCHXgYPvYQeekMeehs87Bd66AN56GPw0EfooS/koa/BwwGhh36Qh34GD/2EHvpDHvobPBwUehgAeRhg8DBA6GEg5GGgwcMhoYdBkIdBBg+DhB4GQx4GGzwcFnoYAnkYYvAwROhhKORhqMHDEaGHYZCHYQYPw4QehkMehhs8HBV6GAF5GGHwMELoYSTkYaTBwzGhh1GQh1EGD6OEHkZDHkYbPBwXehgDeRhj8DBG6GEs5GGswcMJoYdxkIdxBg/jhB7GQx7GGzycFHqYAHmYYPAwQehhIuRhosHDKaGHSZCHSQYPk4QeJkMeJhs8nBZ6mAJ5mGLwMEXoYSrkYarBwxmhh2mQh2kGD9OEHqZDHqYbPJwVepgBeZhh8DBD6GEm5GGmwcM5oYdZkIdZBg+zhB5mQx5mGzycF3qYA3mYY/AwR+hhLuRhrsHDBaGHeZCHeQYP84Qe5kMe5hs8XBR6WAB5WGDwsEDoYSHkYaHBwyWhh0WQh0UGD4uEHhZDHhYbPFwWelgCeVhi8LBE6GEp5GGpwcMVoYdlkIdlBg/LhB6WQx6WGzxcFXpYAXlYYfCwQuhhJeRhpcHDNaGHVZCHVQYPq4QeVkMeVhs8XBd6WAN5WGPwsEboYS3kYa3Bww2hh3WQh3UGD+uEHtZDHtYbPNwUetgAedhg8LBB6GEj5GGjwcMtoYdNkIdNBg+bhB42Qx42GzzcFnrYAnnYYvCwRehhK+Rhq8HDHaGHbZCHbQYP24QetkMeths83BV62AF52GHwsEPoYSfkYafBwz2hh12Qh10GD7uEHnZDHnYbPNwXetgDedhj8LBH6GEv5GGvwcMDoYd9kId9Bg/7hB72Qx72Gzw8FHo4AHk4YPBwQOjhIOThoMHDI6GHQ5CHQwYPh4QeDkMeDhs8PBZ6OAJ5OGLwcETo4Sjk4ajBwxOhh2OQh2MGD8eEHo5DHo4bPDwVejgBeThh8HBC6OEk5OGkwcMzoYdTkIdTBg+nhB5OQx5OGzw8F3o4A3k4Y/BwRujhLOThrMHDC6GHc5CHcwYP54QezkMezhs8vBR6uAB5uGDwcEHo4SLk4aLBwyuhh0uQh0sGD5eEHi5DHi4bPLwWergCebhi8HBF6OEq5OGqwcMboYdrkIdrBg/XhB6uQx6uGzy8FXq4AXm4YfBwQ+jhJuThpsHDO6GHW5CHWwYPt4QebkMebhs8vBd6uAN5uGPwcEfo4S7k4a7Bwwehh3uQh3sGD/eEHu5DHu4bPHwUengAeXhg8PBA6OEh5OGhwcMnoYdHkIdHBg+PhB4eQx4eGzx8Fnp4Anl4YvDwROjhKeThqcHDF6GHZ5CHZwYPz4QenkMenhs8fBV6eAF5eGHw8ELo4SXk4aXBwzehh1eQh1cGD6+EHl5DHl4bPHwXengDeXhj8PBG6OEt5OGtwcMPoYd3kId3Bg/vhB7eQx7eGzz8FHr4AHn4YPDwQejhI+Tho8HDL6GHT5CHTwYPn4QePkMePhs8/BZ6+AJ5+GLw8EXo4Svk4avBwx+hh2+Qh28GD9+EHr5DHr4bPPwVevgBefhh8PBD6OEn5OGnwcM/6XU//II8/DJ4+CX08Bvy8Nvg4V+hhz+Qhz8GD3+EHv5CHv4aPAQQevhnAuPhv13aw/9u/39b/05gPPw7gfcQUOghAOQhgMFDAKGHgJCHgAYPgYQeAkEeAhk8BBJ6CAx5CGzwEFjoIQjkIYjBQxChh6CQh6AGD0GEHoJBHoIZPAQTeggOeQhu8BBU6CEE5CGEwUMIoYeQkIeQBg/BhB5CQR5CGTyEEnoIDXkIbfAQXOghDOQhjMFDGKGHsJCHsAYPIYQewkEewhk8hBN6CA95CG/wEFLoIQLkIYLBQwShh4iQh4gGD6GEHiJBHiIZPEQSeogMeYhs8BBa6CEK5CGKwUMUoYeokIeoBg9hhB6iQR6iGTxEE3qIDnmIbvAQVughBuQhhsFDDKGHmJCHmAYP4YQeYkEeYhk8xBJ6iA15iG3wEF7oIQ7kIY7BQxyhh7iQh7gGDxGEHuJBHuIZPMQTeogPeYhv8BBR6CEB5CGBwUMCoYeEkIeEBg+RhB4SQR4SGTwkEnpIDHlIbPAQWeghCeQhicFDEqGHpJCHpAYPUYQekkEekhk8JBN6SA55SG7wEFXoIQXkIYXBQwqhh5SQh5QGD9GEHlJBHlIZPKQSekgNeUht8BBd6CEN5CGNwUMaoYe0kIe0Bg8xhB7SQR7SGTykE3pID3lIb/AQU+ghA+Qhg8FDBqGHjJCHjAYPsYQeMkEeMhk8ZBJ6yAx5yGzwEFvoIQvkIYvBQxahh6yQh6wGD3GEHrJBHrIZPGQTesgOechu8BBX6CEH5CGHwUMOoYeckIecBg/xhB5yQR5yGTzkEnrIDXnIbfAQX+ghD+Qhj8FDHqGHvJCHvAYPCYQe8kEe8hk85BN6yA95yG/wkFDooQDkoYDBQwGhh4KQh4IGD4mEHgpBHgoZPBQSeigMeShs8JBY6KEI5KGIwUMRoYeikIeiBg9JhB6KQR6KGTwUE3ooDnkobvCQVOihBOShhMFDCaGHkpCHkgYPyYQeSkEeShk8lBJ6KA15KG3wkFzooQzkoYzBQxmhh7KQh7IGDymEHspBHsoZPJQTeigPeShv8JBS6KEC5KGCwUMFoYeKkIeKBg+phB4qQR4qGTxUEnqoDHmobPCQWuihCuShisFDFaGHqpCHqgYPaYQeqkEeqhk8VBN6qA55qG7wkFbooQbkoYbBQw2hh5qQh5oGD+mEHmpBHmoZPNQSeqgNeaht8JBe6KEO5KGOwUMdoYe6kIe6Bg8ZhB7qQR7qGTzUE3qoD3mob/CQUeihAeShgcFDA6GHhpCHhgYPmYQeGkEeGhk8NBJ6aAx5aGzwkFnooQnkoYnBQxOhh6aQh6YGD1mEHppBHpoZPDQTemgOeWhu8JBV6KEF5KGFwUMLoYeWkIeWBg/ZhB5aQR5aGTy0EnpoDXlobfCQXeihDeShjcFDG6GHtpCHtgYPOYQe2kEe2hk8tBN6aA95aG/wkFPooQPkoYPBQwehh46Qh44GD7mEHjpBHjoZPHQSeugMeehs8JBb6KEL5KGLwUMXoYeukIeuBg95hB66QR66GTx0E3roDnnobvCQV+ihB+Shh8FDD6GHnpCHngYP+YQeekEeehk89BJ66A156G3wkF/ooQ/koY/BQx+hh76Qh74GDwWEHvpBHvoZPPQTeugPeehv8FBQ6GEA5GGAwcMAoYeBkIeBBg+FhB4GQR4GGTwMEnoYDHkYbPBQWOhhCORhiMHDEKGHoZCHoQYPRYQehkEehhk8DBN6GA55GG7wUFToYQTkYYTBwwihh5GQh5EGD8WEHkZBHkYZPIwSehgNeRht8FBc6GEM5GGMwcMYoYexkIexBg8lhB7GQR7GGTyME3oYD3kYb/BQUuhhAuRhgsHDBKGHiZCHiQYPpYQeJkEeJhk8TBJ6mAx5mGzwUFroYQrkYYrBwxShh6mQh6kGD2WEHqZBHqYZPEwTepgOeZhu8FBW6GEG5GGGwcMMoYeZkIeZBg/lhB5mQR5mGTzMEnqYDXmYbfBQXuhhDuRhjsHDHKGHuZCHuQYPFYQe5kEe5hk8zBN6mA95mG/wUFHoYQHkYYHBwwKhh4WQh4UGD5WEHhZBHhYZPCwSelgMeVhs8FBZ6GEJ5GGJwcMSoYelkIelBg9VhB6WQR6WGTwsE3pYDnlYbvBQVehhBeRhhcHDCqGHlZCHlQYP1YQeVkEeVhk8rBJ6WA15WG3wUF3oYQ3kYY3Bwxqhh7WQh7UGDzWEHtZBHtYZPKwTelgPeVhv8FBT6GED5GGDwcMGoYeNkIeNBg+1hB42QR42GTxsEnrYDHnYbPBQW+hhC+Rhi8HDFqGHrZCHrQYPdYQetkEethk8bBN62A552G7wUFfoYQfkYYfBww6hh52Qh50GD/WEHnZBHnYZPOwSetgNedht8FBf6GEP5GGPwcMeoYe9kIe9Bg8NhB72QR72GTzsE3rYD3nYb/DQUOjhAOThgMHDAaGHg5CHgwYPjYQeDkEeDhk8HBJ6OAx5OGzw0Fjo4Qjk4YjBwxGhh6OQh6MGD02EHo5BHo4ZPBwTejgOeThu8NBU6OEE5OGEwcMJoYeTkIeTBg/NhB5OQR5OGTycEno4DXk4bfDQXOjhDOThjMHDGaGHs5CHswYPLYQezkEezhk8nBN6OA95OG/w0FLo4QLk4YLBwwWhh4uQh4sGD62EHi5BHi4ZPFwSergMebhs8NBa6OEK5OGKwcMVoYerkIerBg9thB6uQR6uGTxcE3q4Dnm4bvDQVujhBuThhsHDDaGHm5CHmwYP7YQebkEebhk83BJ6uA15uG3w0F7o4Q7k4Y7Bwx2hh7uQh7sGDx2EHu5BHu4ZPNwTergPebhv8NBR6OEB5OGBwcMDoYeHkIeHBg+dhB4eQR4eGTw8Enp4DHl4bPDQWejhCeThicHDE6GHp5CHpwYPXYQenkEenhk8PBN6eA55eG7w0FXo4QXk4YXBwwuhh5eQh5cGD92EHl5BHl4ZPLwSengNeXht8NBd6OEN5OGNwcMboYe3kIe3Bg89hB7eQR7eGTy8E3p4D3l4b/DQU+jhA+Thg8HDB6GHj5CHjwYPvYQePkEePhk8fBJ6+Ax5+Gzw0Fvo4Qvk4YvBwxehh6+Qh68GD32EHr5BHr4ZPHwTevgOefhu8NBX6OEH5OGHwcMPoYefkIefBg/9hB5+QR5+GTz8Enr4DXn4bfDQX+jhD+Thj8HDH6GHv5CHvwYPA4Qe/pnIePhvl/bwv9v/39a/ExkP/07kPQwUeggAeQhg8BBA6CEg5CGgwcMgoYdAkIdABg+BhB4CQx4CGzwMFnoIAnkIYvAQROghKOQhqMHDEKGHYJCHYAYPwYQegkMeghs8DBV6CAF5CGHwEELoISTkIaTBwzChh1CQh1AGD6GEHkJDHkIbPAwXeggDeQhj8BBG6CEs5CGswcMIoYdwkIdwBg/hhB7CQx7CGzyMFHqIAHmIYPAQQeghIuQhosHDKKGHSJCHSAYPkYQeIkMeIhs8jBZ6iAJ5iGLwEEXoISrkIarBwxihh2iQh2gGD9GEHqJDHqIbPIwVeogBeYhh8BBD6CEm5CGmwcM4oYdYkIdYBg+xhB5iQx5iGzyMF3qIA3mIY/AQR+ghLuQhrsHDBKGHeJCHeAYP8YQe4kMe4hs8TBR6SAB5SGDwkEDoISHkIaHBwyShh0SQh0QGD4mEHhJDHhIbPEwWekgCeUhi8JBE6CEp5CGpwcMUoYdkkIdkBg/JhB6SQx6SGzxMFXpIAXlIYfCQQughJeQhpcHDNKGHVJCHVAYPqYQeUkMeUhs8TBd6SAN5SGPwkEboIS3kIa3Bwwyhh3SQh3QGD+mEHtJDHtIbPMwUesgAechg8JBB6CEj5CGjwcMsoYdMkIdMBg+ZhB4yQx4yGzzMFnrIAnnIYvCQReghK+Qhq8HDHKGHbJCHbAYP2YQeskMeshs8zBV6yAF5yGHwkEPoISfkIafBwzyhh1yQh1wGD7mEHnJDHnIbPMwXesgDechj8JBH6CEv5CGvwcMCoYd8kId8Bg/5hB7yQx7yGzwsFHooAHkoYPBQQOihIOShoMHDIqGHQpCHQgYPhYQeCkMeChs8LBZ6KAJ5KGLwUETooSjkoajBwxKhh2KQh2IGD8WEHopDHoobPCwVeigBeShh8FBC6KEk5KGkwcMyoYdSkIdSBg+lhB5KQx5KGzwsF3ooA3koY/BQRuihLOShrMHDCqGHcpCHcgYP5YQeykMeyhs8rBR6qAB5qGDwUEHooSLkoaLBwyqhh0qQh0oGD5WEHipDHiobPKwWeqgCeahi8FBF6KEq5KGqwcMaoYdqkIdqBg/VhB6qQx6qGzysFXqoAXmoYfBQQ+ihJuShpsHDOqGHWpCHWgYPtYQeakMeahs8rBd6qAN5qGPwUEfooS7koa7Bwwahh3qQh3oGD/WEHupDHuobPGwUemgAeWhg8NBA6KEh5KGhwcMmoYdGkIdGBg+NhB4aQx4aGzxsFnpoAnloYvDQROihKeShqcHDFqGHZpCHZgYPzYQemkMemhs8bBV6aAF5aGHw0ELooSXkoaXBwzahh1aQh1YGD62EHlpDHlobPGwXemgDeWhj8NBG6KEt5KGtwcMOoYd2kId2Bg/thB7aQx7aGzzsFHroAHnoYPDQQeihI+Sho8HDLqGHTpCHTgYPnYQeOkMeOhs87BZ66AJ56GLw0EXooSvkoavBwx6hh26Qh24GD92EHrpDHrobPOwVeugBeehh8NBD6KEn5KGnwcM+oYdekIdeBg+9hB56Qx56GzzsF3roA3noY/DQR+ihL+Shr8HDAaGHfpCHfgYP/YQe+kMe+hs8HBR6GAB5GGDwMEDoYSDkYaDBwyGhh0GQh0EGD4OEHgZDHgYbPBwWehgCeRhi8DBE6GEo5GGowcMRoYdhkIdhBg/DhB6GQx6GGzwcFXoYAXkYYfAwQuhhJORhpMHDMaGHUZCHUQYPo4QeRkMeRhs8HBd6GAN5GGPwMEboYSzkYazBwwmhh3GQh3EGD+OEHsZDHsYbPJwUepgAeZhg8DBB6GEi5GGiwcMpoYdJkIdJBg+ThB4mQx4mGzycFnqYAnmYYvAwRehhKuRhqsHDGaGHaZCHaQYP04QepkMephs8nBV6mAF5mGHwMEPoYSbkYabBwzmhh1mQh1kGD7OEHmZDHmYbPJwXepgDeZhj8DBH6GEu5GGuwcMFoYd5kId5Bg/zhB7mQx7mGzxcFHpYAHlYYPCwQOhhIeRhocHDJaGHRZCHRQYPi4QeFkMeFhs8XBZ6WAJ5WGLwsEToYSnkYanBwxWhh2WQh2UGD8uEHpZDHpYbPFwVelgBeVhh8LBC6GEl5GGlwcM1oYdVkIdVBg+rhB5WQx5WGzxcF3pYA3lYY/CwRuhhLeRhrcHDDaGHdZCHdQYP64Qe1kMe1hs83BR62AB52GDwsEHoYSPkYaPBwy2hh02Qh00GD5uEHjZDHjYbPNwWetgCedhi8LBF6GEr5GGrwcMdoYdtkIdtBg/bhB62Qx62GzzcFXrYAXnYYfCwQ+hhJ+Rhp8HDPaGHXZCHXQYPu4QedkMedhs83Bd62AN52GPwsEfoYS/kYa/BwwOhh32Qh30GD/uEHvZDHvYbPDwUejgAeThg8HBA6OEg5OGgwcMjoYdDkIdDBg+HhB4OQx4OGzw8Fno4Ank4YvBwROjhKOThqMHDE6GHY5CHYwYPx4QejkMejhs8PBV6OAF5OGHwcELo4STk4aTBwzOhh1OQh1MGD6eEHk5DHk4bPDwXejgDeThj8HBG6OEs5OGswcMLoYdzkIdzBg/nhB7OQx7OGzy8FHq4AHm4YPBwQejhIuThosHDK6GHS5CHSwYPl4QeLkMeLhs8vBZ6uAJ5uGLwcEXo4Srk4arBwxuhh2uQh2sGD9eEHq5DHq4bPLwVergBebhh8HBD6OEm5OGmwcM7oYdbkIdbBg+3hB5uQx5uGzy8F3q4A3m4Y/BwR+jhLuThrsHDB6GHe5CHewYP94Qe7kMe7hs8fBR6eAB5eGDw8EDo4SHk4aHBwyehh0eQh0cGD4+EHh5DHh4bPHwWengCeXhi8PBE6OEp5OGpwcMXoYdnkIdnBg/PhB6eQx6eGzx8FXp4AXl4YfDwQujhJeThpcHDN6GHV5CHVwYPr4QeXkMeXhs8fBd6eAN5eGPw8Ebo4S3k4a3Bww+hh3eQh3cGD++EHt5DHt4bPPwUevgAefhg8PBB6OEj5OGjwcMvoYdPkIdPBg+fhB4+Qx4+Gzz8Fnr4Ann4YvDwRejhK+Thq8HDH6GHb5CHbwYP34QevkMevhs8/BV6+AF5+GHw8EPo4Sfk4afBwz8ZdD/8gjz8Mnj4JfTwG/Lw2+DhX6GHP5CHPwYPf4Qe/kIe/ho8BBB6+GcS4+G/XdrD/27/f1v/TmI8/DuJ9xBQ6CEA5CGAwUMAoYeAkIeABg+BhB4CQR4CGTwEEnoIDHkIbPAQWOghCOQhiMFDEKGHoJCHoAYPQYQegkEeghk8BBN6CA55CG7wEFToIQTkIYTBQwihh5CQh5AGD8GEHkJBHkIZPIQSeggNeQht8BBc6CEM5CGMwUMYoYewkIewBg8hhB7CQR7CGTyEE3oID3kIb/AQUughAuQhgsFDBKGHiJCHiAYPoYQeIkEeIhk8RBJ6iAx5iGzwEFroIQrkIYrBQxShh6iQh6gGD2GEHqJBHqIZPEQTeogOeYhu8BBW6CEG5CGGwUMMoYeYkIeYBg/hhB5iQR5iGTzEEnqIDXmIbfAQXughDuQhjsFDHKGHuJCHuAYPEYQe4kEe4hk8xBN6iA95iG/wEFHoIQHkIYHBQwKhh4SQh4QGD5GEHhJBHhIZPCQSekgMeUhs8BBZ6CEJ5CGJwUMSoYekkIekBg9RhB6SQR6SGTwkE3pIDnlIbvAQVeghBeQhhcFDCqGHlJCHlAYP0YQeUkEeUhk8pBJ6SA15SG3wEF3oIQ3kIY3BQxqhh7SQh7QGDzGEHtJBHtIZPKQTekgPeUhv8BBT6CED5CGDwUMGoYeMkIeMBg+xhB4yQR4yGTxkEnrIDHnIbPAQW+ghC+Qhi8FDFqGHrJCHrAYPcYQeskEeshk8ZBN6yA55yG7wEFfoIQfkIYfBQw6hh5yQh5wGD/GEHnJBHnIZPOQSesgNecht8BBf6CEP5CGPwUMeoYe8kIe8Bg8JhB7yQR7yGTzkE3rID3nIb/CQUOihAOShgMFDAaGHgpCHggYPiYQeCkEeChk8FBJ6KAx5KGzwkFjooQjkoYjBQxGhh6KQh6IGD0mEHopBHooZPBQTeigOeShu8JBU6KEE5KGEwUMJoYeSkIeSBg/JhB5KQR5KGTyUEnooDXkobfCQXOihDOShjMFDGaGHspCHsgYPKYQeykEeyhk8lBN6KA95KG/wkFLooQLkoYLBQwWhh4qQh4oGD6mEHipBHioZPFQSeqgMeahs8JBa6KEK5KGKwUMVoYeqkIeqBg9phB6qQR6qGTxUE3qoDnmobvCQVuihBuShhsFDDaGHmpCHmgYP6YQeakEeahk81BJ6qA15qG3wkF7ooQ7koY7BQx2hh7qQh7oGDxmEHupBHuoZPNQTeqgPeahv8JBR6KEB5KGBwUMDoYeGkIeGBg+ZhB4aQR4aGTw0EnpoDHlobPCQWeihCeShicFDE6GHppCHpgYPWYQemkEemhk8NBN6aA55aG7wkFXooQXkoYXBQwuhh5aQh5YGD9mEHlpBHloZPLQSemgNeWht8JBd6KEN5KGNwUMboYe2kIe2Bg85hB7aQR7aGTy0E3poD3lob/CQU+ihA+Shg8FDB6GHjpCHjgYPuYQeOkEeOhk8dBJ66Ax56GzwkFvooQvkoYvBQxehh66Qh64GD3mEHrpBHroZPHQTeugOeehu8JBX6KEH5KGHwUMPoYeekIeeBg/5hB56QR56GTz0EnroDXnobfCQX+ihD+Shj8FDH6GHvpCHvgYPBYQe+kEe+hk89BN66A956G/wUFDoYQDkYYDBwwChh4GQh4EGD4WEHgZBHgYZPAwSehgMeRhs8FBY6GEI5GGIwcMQoYehkIehBg9FhB6GQR6GGTwME3oYDnkYbvBQVOhhBORhhMHDCKGHkZCHkQYPxYQeRkEeRhk8jBJ6GA15GG3wUFzoYQzkYYzBwxihh7GQh7EGDyWEHsZBHsYZPIwTehgPeRhv8FBS6GEC5GGCwcMEoYeJkIeJBg+lhB4mQR4mGTxMEnqYDHmYbPBQWuhhCuRhisHDFKGHqZCHqQYPZYQepkEephk8TBN6mA55mG7wUFboYQbkYYbBwwyhh5mQh5kGD+WEHmZBHmYZPMwSepgNeZht8FBe6GEO5GGOwcMcoYe5kIe5Bg8VhB7mQR7mGTzME3qYD3mYb/BQUehhAeRhgcHDAqGHhZCHhQYPlYQeFkEeFhk8LBJ6WAx5WGzwUFnoYQnkYYnBwxKhh6WQh6UGD1WEHpZBHpYZPCwTelgOeVhu8FBV6GEF5GGFwcMKoYeVkIeVBg/VhB5WQR5WGTysEnpYDXlYbfBQXehhDeRhjcHDGqGHtZCHtQYPNYQe1kEe1hk8rBN6WA95WG/wUFPoYQPkYYPBwwahh42Qh40GD7WEHjZBHjYZPGwSetgMedhs8FBb6GEL5GGLwcMWoYetkIetBg91hB62QR62GTxsE3rYDnnYbvBQV+hhB+Rhh8HDDqGHnZCHnQYP9YQedkEedhk87BJ62A152G3wUF/oYQ/kYY/Bwx6hh72Qh70GDw2EHvZBHvYZPOwTetgPedhv8NBQ6OEA5OGAwcMBoYeDkIeDBg+NhB4OQR4OGTwcEno4DHk4bPDQWOjhCOThiMHDEaGHo5CHowYPTYQejkEejhk8HBN6OA55OG7w0FTo4QTk4YTBwwmhh5OQh5MGD82EHk5BHk4ZPJwSejgNeTht8NBc6OEM5OGMwcMZoYezkIezBg8thB7OQR7OGTycE3o4D3k4b/DQUujhAuThgsHDBaGHi5CHiwYPrYQeLkEeLhk8XBJ6uAx5uGzw0Fro4Qrk4YrBwxWhh6uQh6sGD22EHq5BHq4ZPFwTergOebhu8NBW6OEG5OGGwcMNoYebkIebBg/thB5uQR5uGTzcEnq4DXm4bfDQXujhDuThjsHDHaGHu5CHuwYPHYQe7kEe7hk83BN6uA95uG/w0FHo4QHk4YHBwwOhh4eQh4cGD52EHh5BHh4ZPDwSengMeXhs8NBZ6OEJ5OGJwcMToYenkIenBg9dhB6eQR6eGTw8E3p4Dnl4bvDQVejhBeThhcHDC6GHl5CHlwYP3YQeXkEeXhk8vBJ6eA15eG3w0F3o4Q3k4Y3Bwxuhh7eQh7cGDz2EHt5BHt4ZPLwTengPeXhv8NBT6OED5OGDwcMHoYePkIePBg+9hB4+QR4+GTx8Enr4DHn4bPDQW+jhC+Thi8HDF6GHr5CHrwYPfYQevkEevhk8fBN6+A55+G7w0Ffo4Qfk4YfBww+hh5+Qh58GD/2EHn5BHn4ZPPwSevgNefht8NBf6OEP5OGPwcMfoYe/kIe/Bg8DhB7+mcx4+G+X9vC/2//f1r+TGQ//TuY9DBR6CAB5CGDwEEDoISDkIaDBwyChh0CQh0AGD4GEHgJDHgIbPAwWeggCeQhi8BBE6CEo5CGowcMQoYdgkIdgBg/BhB6CQx6CGzwMFXoIAXkIYfAQQughJOQhpMHDMKGHUJCHUAYPoYQeQkMeQhs8DBd6CAN5CGPwEEboISzkIazBwwihh3CQh3AGD+GEHsJDHsIbPIwUeogAeYhg8BBB6CEi5CGiwcMooYdIkIdIBg+RhB4iQx4iGzyMFnqIAnmIYvAQReghKuQhqsHDGKGHaJCHaAYP0YQeokMeohs8jBV6iAF5iGHwEEPoISbkIabBwzihh1iQh1gGD7GEHmJDHmIbPIwXeogDeYhj8BBH6CEu5CGuwcMEoYd4kId4Bg/xhB7iQx7iGzxMFHpIAHlIYPCQQOghIeQhocHDJKGHRJCHRAYPiYQeEkMeEhs8TBZ6SAJ5SGLwkEToISnkIanBwxShh2SQh2QGD8mEHpJDHpIbPEwVekgBeUhh8JBC6CEl5CGlwcM0oYdUkIdUBg+phB5SQx5SGzxMF3pIA3lIY/CQRughLeQhrcHDDKGHdJCHdAYP6YQe0kMe0hs8zBR6yAB5yGDwkEHoISPkIaPBwyyhh0yQh0wGD5mEHjJDHjIbPMwWesgCechi8JBF6CEr5CGrwcMcoYdskIdsBg/ZhB6yQx6yGzzMFXrIAXnIYfCQQ+ghJ+Qhp8HDPKGHXJCHXAYPuYQeckMechs8zBd6yAN5yGPwkEfoIS/kIa/BwwKhh3yQh3wGD/mEHvJDHvIbPCwUeigAeShg8FBA6KEg5KGgwcMioYdCkIdCBg+FhB4KQx4KGzwsFnooAnkoYvBQROihKOShqMHDEqGHYpCHYgYPxYQeikMeihs8LBV6KAF5KGHwUELooSTkoaTBwzKhh1KQh1IGD6WEHkpDHkobPCwXeigDeShj8FBG6KEs5KGswcMKoYdykIdyBg/lhB7KQx7KGzysFHqoAHmoYPBQQeihIuShosHDKqGHSpCHSgYPlYQeKkMeKhs8rBZ6qAJ5qGLwUEXooSrkoarBwxqhh2qQh2oGD9WEHqpDHqobPKwVeqgBeahh8FBD6KEm5KGmwcM6oYdakIdaBg+1hB5qQx5qGzysF3qoA3moY/BQR+ihLuShrsHDBqGHepCHegYP9YQe6kMe6hs8bBR6aAB5aGDw0EDooSHkoaHBwyahh0aQh0YGD42EHhpDHhobPGwWemgCeWhi8NBE6KEp5KGpwcMWoYdmkIdmBg/NhB6aQx6aGzxsFXpoAXloYfDQQuihJeShpcHDNqGHVpCHVgYPrYQeWkMeWhs8bBd6aAN5aGPw0EbooS3koa3Bww6hh3aQh3YGD+2EHtpDHtobPOwUeugAeehg8NBB6KEj5KGjwcMuoYdOkIdOBg+dhB46Qx46GzzsFnroAnnoYvDQReihK+Shq8HDHqGHbpCHbgYP3YQeukMeuhs87BV66AF56GHw0EPooSfkoafBwz6hh16Qh14GD72EHnpDHnobPOwXeugDeehj8NBH6KEv5KGvwcMBoYd+kId+Bg/9hB76Qx76GzwcFHoYAHkYYPAwQOhhIORhoMHDIaGHQZCHQQYPg4QeBkMeBhs8HBZ6GAJ5GGLwMEToYSjkYajBwxGhh2GQh2EGD8OEHoZDHoYbPBwVehgBeRhh8DBC6GEk5GGkwcMxoYdRkIdRBg+jhB5GQx5GGzwcF3oYA3kYY/AwRuhhLORhrMHDCaGHcZCHcQYP44QexkMexhs8nBR6mAB5mGDwMEHoYSLkYaLBwymhh0mQh0kGD5OEHiZDHiYbPJwWepgCeZhi8DBF6GEq5GGqwcMZoYdpkIdpBg/ThB6mQx6mGzycFXqYAXmYYfAwQ+hhJuRhpsHDOaGHWZCHWQYPs4QeZkMeZhs8nBd6mAN5mGPwMEfoYS7kYa7BwwWhh3mQh3kGD/OEHuZDHuYbPFwUelgAeVhg8LBA6GEh5GGhwcMloYdFkIdFBg+LhB4WQx4WGzxcFnpYAnlYYvCwROhhKeRhqcHDFaGHZZCHZQYPy4QelkMelhs8XBV6WAF5WGHwsELoYSXkYaXBwzWhh1WQh1UGD6uEHlZDHlYbPFwXelgDeVhj8LBG6GEt5GGtwcMNoYd1kId1Bg/rhB7WQx7WGzzcFHrYAHnYYPCwQehhI+Rho8HDLaGHTZCHTQYPm4QeNkMeNhs83BZ62AJ52GLwsEXoYSvkYavBwx2hh22Qh20GD9uEHrZDHrYbPNwVetgBedhh8LBD6GEn5GGnwcM9oYddkIddBg+7hB52Qx52GzzcF3rYA3nYY/CwR+hhL+Rhr8HDA6GHfZCHfQYP+4Qe9kMe9hs8PBR6OAB5OGDwcEDo4SDk4aDBwyOhh0OQh0MGD4eEHg5DHg4bPDwWejgCeThi8HBE6OEo5OGowcMToYdjkIdjBg/HhB6OQx6OGzw8FXo4AXk4YfBwQujhJOThpMHDM6GHU5CHUwYPp4QeTkMeThs8PBd6OAN5OGPwcEbo4Szk4azBwwuhh3OQh3MGD+eEHs5DHs4bPLwUergAebhg8HBB6OEi5OGiwcMroYdLkIdLBg+XhB4uQx4uGzy8Fnq4Anm4YvBwRejhKuThqsHDG6GHa5CHawYP14QerkMerhs8vBV6uAF5uGHwcEPo4Sbk4abBwzuhh1uQh1sGD7eEHm5DHm4bPLwXergDebhj8HBH6OEu5OGuwcMHoYd7kId7Bg/3hB7uQx7uGzx8FHp4AHl4YPDwQOjhIeThocHDJ6GHR5CHRwYPj4QeHkMeHhs8fBZ6eAJ5eGLw8ETo4Snk4anBwxehh2eQh2cGD8+EHp5DHp4bPHwVengBeXhh8PBC6OEl5OGlwcM3oYdXkIdXBg+vhB5eQx5eGzx8F3p4A3l4Y/DwRujhLeThrcHDD6GHd5CHdwYP74Qe3kMe3hs8/BR6+AB5+GDw8EHo4SPk4aPBwy+hh0+Qh08GD5+EHj5DHj4bPPwWevgCefhi8PBF6OEr5OGrwcMfoYdvkIdvBg/fhB6+Qx6+Gzz8FXr4AXn4YfDwQ+jhJ+Thp8HDPxl1P/yCPPwyePgl9PAb8vDb4OFfoYc/kIc/Bg9/hB7+Qh7+GjwEEHr4Zwrj4b9d2sP/bv9/W/9OYTz8O4X3EFDoIQDkIYDBQwChh4CQh4AGD4GEHgJBHgIZPAQSeggMeQhs8BBY6CEI5CGIwUMQoYegkIegBg9BhB6CQR6CGTwEE3oIDnkIbvAQVOghBOQhhMFDCKGHkJCHkAYPwYQeQkEeQhk8hBJ6CA15CG3wEFzoIQzkIYzBQxihh7CQh7AGDyGEHsJBHsIZPIQTeggPeQhv8BBS6CEC5CGCwUMEoYeIkIeIBg+hhB4iQR4iGTxEEnqIDHmIbPAQWughCuQhisFDFKGHqJCHqAYPYYQeokEeohk8RBN6iA55iG7wEFboIQbkIYbBQwyhh5iQh5gGD+GEHmJBHmIZPMQSeogNeYht8BBe6CEO5CGOwUMcoYe4kIe4Bg8RhB7iQR7iGTzEE3qID3mIb/AQUeghAeQhgcFDAqGHhJCHhAYPkYQeEkEeEhk8JBJ6SAx5SGzwEFnoIQnkIYnBQxKhh6SQh6QGD1GEHpJBHpIZPCQTekgOeUhu8BBV6CEF5CGFwUMKoYeUkIeUBg/RhB5SQR5SGTykEnpIDXlIbfAQXeghDeQhjcFDGqGHtJCHtAYPMYQe0kEe0hk8pBN6SA95SG/wEFPoIQPkIYPBQwahh4yQh4wGD7GEHjJBHjIZPGQSesgMechs8BBb6CEL5CGLwUMWoYeskIesBg9xhB6yQR6yGTxkE3rIDnnIbvAQV+ghB+Qhh8FDDqGHnJCHnAYP8YQeckEechk85BJ6yA15yG3wEF/oIQ/kIY/BQx6hh7yQh7wGDwmEHvJBHvIZPOQTesgPechv8JBQ6KEA5KGAwUMBoYeCkIeCBg+JhB4KQR4KGTwUEnooDHkobPCQWOihCOShiMFDEaGHopCHogYPSYQeikEeihk8FBN6KA55KG7wkFTooQTkoYTBQwmhh5KQh5IGD8mEHkpBHkoZPJQSeigNeSht8JBc6KEM5KGMwUMZoYeykIeyBg8phB7KQR7KGTyUE3ooD3kob/CQUuihAuShgsFDBaGHipCHigYPqYQeKkEeKhk8VBJ6qAx5qGzwkFrooQrkoYrBQxWhh6qQh6oGD2mEHqpBHqoZPFQTeqgOeahu8JBW6KEG5KGGwUMNoYeakIeaBg/phB5qQR5qGTzUEnqoDXmobfCQXuihDuShjsFDHaGHupCHugYPGYQe6kEe6hk81BN6qA95qG/wkFHooQHkoYHBQwOhh4aQh4YGD5mEHhpBHhoZPDQSemgMeWhs8JBZ6KEJ5KGJwUMToYemkIemBg9ZhB6aQR6aGTw0E3poDnlobvCQVeihBeShhcFDC6GHlpCHlgYP2YQeWkEeWhk8tBJ6aA15aG3wkF3ooQ3koY3BQxuhh7aQh7YGDzmEHtpBHtoZPLQTemgPeWhv8JBT6KED5KGDwUMHoYeOkIeOBg+5hB46QR46GTx0EnroDHnobPCQW+ihC+Shi8FDF6GHrpCHrgYPeYQeukEeuhk8dBN66A556G7wkFfooQfkoYfBQw+hh56Qh54GD/mEHnpBHnoZPPQSeugNeeht8JBf6KEP5KGPwUMfoYe+kIe+Bg8FhB76QR76GTz0E3roD3nob/BQUOhhAORhgMHDAKGHgZCHgQYPhYQeBkEeBhk8DBJ6GAx5GGzwUFjoYQjkYYjBwxChh6GQh6EGD0WEHoZBHoYZPAwTehgOeRhu8FBU6GEE5GGEwcMIoYeRkIeRBg/FhB5GQR5GGTyMEnoYDXkYbfBQXOhhDORhjMHDGKGHsZCHsQYPJYQexkEexhk8jBN6GA95GG/wUFLoYQLkYYLBwwShh4mQh4kGD6WEHiZBHiYZPEwSepgMeZhs8FBa6GEK5GGKwcMUoYepkIepBg9lhB6mQR6mGTxME3qYDnmYbvBQVuhhBuRhhsHDDKGHmZCHmQYP5YQeZkEeZhk8zBJ6mA15mG3wUF7oYQ7kYY7Bwxyhh7mQh7kGDxWEHuZBHuYZPMwTepgPeZhv8FBR6GEB5GGBwcMCoYeFkIeFBg+VhB4WQR4WGTwsEnpYDHlYbPBQWehhCeRhicHDEqGHpZCHpQYPVYQelkEelhk8LBN6WA55WG7wUFXoYQXkYYXBwwqhh5WQh5UGD9WEHlZBHlYZPKwSelgNeVht8FBd6GEN5GGNwcMaoYe1kIe1Bg81hB7WQR7WGTysE3pYD3lYb/BQU+hhA+Rhg8HDBqGHjZCHjQYPtYQeNkEeNhk8bBJ62Ax52GzwUFvoYQvkYYvBwxahh62Qh60GD3WEHrZBHrYZPGwTetgOedhu8FBX6GEH5GGHwcMOoYedkIedBg/1hB52QR52GTzsEnrYDXnYbfBQX+hhD+Rhj8HDHqGHvZCHvQYPDYQe9kEe9hk87BN62A952G/w0FDo4QDk4YDBwwGhh4OQh4MGD42EHg5BHg4ZPBwSejgMeThs8NBY6OEI5OGIwcMRoYejkIejBg9NhB6OQR6OGTwcE3o4Dnk4bvDQVOjhBOThhMHDCaGHk5CHkwYPzYQeTkEeThk8nBJ6OA15OG3w0Fzo4Qzk4YzBwxmhh7OQh7MGDy2EHs5BHs4ZPJwTejgPeThv8NBS6OEC5OGCwcMFoYeLkIeLBg+thB4uQR4uGTxcEnq4DHm4bPDQWujhCuThisHDFaGHq5CHqwYPbYQerkEerhk8XBN6uA55uG7w0Fbo4Qbk4YbBww2hh5uQh5sGD+2EHm5BHm4ZPNwSergNebht8NBe6OEO5OGOwcMdoYe7kIe7Bg8dhB7uQR7uGTzcE3q4D3m4b/DQUejhAeThgcHDA6GHh5CHhwYPnYQeHkEeHhk8PBJ6eAx5eGzw0Fno4Qnk4YnBwxOhh6eQh6cGD12EHp5BHp4ZPDwTengOeXhu8NBV6OEF5OGFwcMLoYeXkIeXBg/dhB5eQR5eGTy8Enp4DXl4bfDQXejhDeThjcHDG6GHt5CHtwYPPYQe3kEe3hk8vBN6eA95eG/w0FPo4QPk4YPBwwehh4+Qh48GD72EHj5BHj4ZPHwSevgMefhs8NBb6OEL5OGLwcMXoYevkIevBg99hB6+QR6+GTx8E3r4Dnn4bvDQV+jhB+Thh8HDD6GHn5CHnwYP/YQefkEefhk8/BJ6+A15+G3w0F/o4Q/k4Y/Bwx+hh7+Qh78GDwOEHv6Zynj4b5f28L/b/9/Wv1MZD/9O5T0MFHoIAHkIYPAQQOghIOQhoMHDIKGHQJCHQAYPgYQeAkMeAhs8DBZ6CAJ5CGLwEEToISjkIajBwxChh2CQh2AGD8GEHoJDHoIbPAwVeggBeQhh8BBC6CEk5CGkwcMwoYdQkIdQBg+hhB5CQx5CGzwMF3oIA3kIY/AQRughLOQhrMHDCKGHcJCHcAYP4YQewkMewhs8jBR6iAB5iGDwEEHoISLkIaLBwyihh0iQh0gGD5GEHiJDHiIbPIwWeogCeYhi8BBF6CEq5CGqwcMYoYdokIdoBg/RhB6iQx6iGzyMFXqIAXmIYfAQQ+ghJuQhpsHDOKGHWJCHWAYPsYQeYkMeYhs8jBd6iAN5iGPwEEfoIS7kIa7BwwShh3iQh3gGD/GEHuJDHuIbPEwUekgAeUhg8JBA6CEh5CGhwcMkoYdEkIdEBg+JhB4SQx4SGzxMFnpIAnlIYvCQROghKeQhqcHDFKGHZJCHZAYPyYQekkMekhs8TBV6SAF5SGHwkELoISXkIaXBwzShh1SQh1QGD6mEHlJDHlIbPEwXekgDeUhj8JBG6CEt5CGtwcMMoYd0kId0Bg/phB7SQx7SGzzMFHrIAHnIYPCQQeghI+Qho8HDLKGHTJCHTAYPmYQeMkMeMhs8zBZ6yAJ5yGLwkEXoISvkIavBwxyhh2yQh2wGD9mEHrJDHrIbPMwVesgBechh8JBD6CEn5CGnwcM8oYdckIdcBg+5hB5yQx5yGzzMF3rIA3nIY/CQR+ghL+Qhr8HDAqGHfJCHfAYP+YQe8kMe8hs8LBR6KAB5KGDwUEDooSDkoaDBwyKhh0KQh0IGD4WEHgpDHgobPCwWeigCeShi8FBE6KEo5KGowcMSoYdikIdiBg/FhB6KQx6KGzwsFXooAXkoYfBQQuihJOShpMHDMqGHUpCHUgYPpYQeSkMeShs8LBd6KAN5KGPwUEbooSzkoazBwwqhh3KQh3IGD+WEHspDHsobPKwUeqgAeahg8FBB6KEi5KGiwcMqoYdKkIdKBg+VhB4qQx4qGzysFnqoAnmoYvBQReihKuShqsHDGqGHapCHagYP1YQeqkMeqhs8rBV6qAF5qGHwUEPooSbkoabBwzqhh1qQh1oGD7WEHmpDHmobPKwXeqgDeahj8FBH6KEu5KGuwcMGoYd6kId6Bg/1hB7qQx7qGzxsFHpoAHloYPDQQOihIeShocHDJqGHRpCHRgYPjYQeGkMeGhs8bBZ6aAJ5aGLw0ETooSnkoanBwxahh2aQh2YGD82EHppDHpobPGwVemgBeWhh8NBC6KEl5KGlwcM2oYdWkIdWBg+thB5aQx5aGzxsF3poA3loY/DQRuihLeShrcHDDqGHdpCHdgYP7YQe2kMe2hs87BR66AB56GDw0EHooSPkoaPBwy6hh06Qh04GD52EHjpDHjobPOwWeugCeehi8NBF6KEr5KGrwcMeoYdukIduBg/dhB66Qx66GzzsFXroAXnoYfDQQ+ihJ+Shp8HDPqGHXpCHXgYPvYQeekMeehs87Bd66AN56GPw0EfooS/koa/BwwGhh36Qh34GD/2EHvpDHvobPBwUehgAeRhg8DBA6GEg5GGgwcMhoYdBkIdBBg+DhB4GQx4GGzwcFnoYAnkYYvAwROhhKORhqMHDEaGHYZCHYQYPw4QehkMehhs8HBV6GAF5GGHwMELoYSTkYaTBwzGhh1GQh1EGD6OEHkZDHkYbPBwXehgDeRhj8DBG6GEs5GGswcMJoYdxkIdxBg/jhB7GQx7GGzycFHqYAHmYYPAwQehhIuRhosHDKaGHSZCHSQYPk4QeJkMeJhs8nBZ6mAJ5mGLwMEXoYSrkYarBwxmhh2mQh2kGD9OEHqZDHqYbPJwVepgBeZhh8DBD6GEm5GGmwcM5oYdZkIdZBg+zhB5mQx5mGzycF3qYA3mYY/AwR+hhLuRhrsHDBaGHeZCHeQYP84Qe5kMe5hs8XBR6WAB5WGDwsEDoYSHkYaHBwyWhh0WQh0UGD4uEHhZDHhYbPFwWelgCeVhi8LBE6GEp5GGpwcMVoYdlkIdlBg/LhB6WQx6WGzxcFXpYAXlYYfCwQuhhJeRhpcHDNaGHVZCHVQYPq4QeVkMeVhs8XBd6WAN5WGPwsEboYS3kYa3Bww2hh3WQh3UGD+uEHtZDHtYbPNwUetgAedhg8LBB6GEj5GGjwcMtoYdNkIdNBg+bhB42Qx42GzzcFnrYAnnYYvCwRehhK+Rhq8HDHaGHbZCHbQYP24QetkMeths83BV62AF52GHwsEPoYSfkYafBwz2hh12Qh10GD7uEHnZDHnYbPNwXetgDedhj8LBH6GEv5GGvwcMDoYd9kId9Bg/7hB72Qx72Gzw8FHo4AHk4YPBwQOjhIOThoMHDI6GHQ5CHQwYPh4QeDkMeDhs8PBZ6OAJ5OGLwcETo4Sjk4ajBwxOhh2OQh2MGD8eEHo5DHo4bPDwVejgBeThh8HBC6OEk5OGkwcMzoYdTkIdTBg+nhB5OQx5OGzw8F3o4A3k4Y/BwRujhLOThrMHDC6GHc5CHcwYP54QezkMezhs8vBR6uAB5uGDwcEHo4SLk4aLBwyuhh0uQh0sGD5eEHi5DHi4bPLwWergCebhi8HBF6OEq5OGqwcMboYdrkIdrBg/XhB6uQx6uGzy8FXq4AXm4YfBwQ+jhJuThP7zSQxAmhtat4aTTadu2bdu2bdu2beNr27ZtptNp22kb957ZqX961rsme/jWql3PPwYPr4UebkAebhg83BB6uAl5uGnw8Ebo4Rbk4ZbBwy2hh9uQh9sGD2+FHu5AHu4YPNwRergLebhr8PBO6OEe5OGewcM9oYf7kIf7Bg/vhR4eQB4eGDw8EHp4CHl4aPDwQejhEeThkcHDI6GHx5CHxwYPH4UenkAenhg8PBF6eAp5eGrw8Eno4Rnk4ZnBwzOhh+eQh+cGD5+FHl5AHl4YPLwQengJeXhp8PBF6OEV5OGVwcMroYd/IQ//Gjx8FXp4DXl4bfDwWujhDeThjcHDN6GHt5CHtwYPb4Ue3kEe3hk8fBd6eA95eG/w8F7o4QPk4YPBww+hh4+Qh48GDx+FHj5BHj4ZPPwUevgMefhs8PBZ6OEL5OGLwcMvoYevkIevBg9fhR6+QR6+GTz8lkX3h++Qh+8GD9+FHn5AHn4YPPwu9PAT8vDT4OGn0MMvyMMvg4cgQg+/zWA8/KdLe/jv7f9r6/cZjIffZ/Ae/hB6CAJ5CGLwEETo4Q/Iwx8GD0GFHoJCHoIaPAQVevgT8vCnwcOfQg/BIA/BDB6CCT0EhzwEN3gIJvQQAvIQwuAhhNBDSMhDSIOH4EIPoSAPoQweQgk9hIY8hDZ4CCH0EAbyEMbgIYzQQ1jIQ1iDh5BCD+EgD+EMHsIJPYSHPIQ3eAgl9BAB8hDB4CGC0ENEyENEg4fQQg+RIA+RDB4iCT1EhjxENngII/QQBfIQxeAhitBDVMhDVIOHsEIP0SAP0Qweogk9RIc8RDd4CCf0EAPyEMPgIYbQQ0zIQ0yDh/BCD7EgD7EMHmIJPcSGPMQ2eIgg9BAH8hDH4CGO0ENcyENcg4eIQg/xIA/xDB7iCT3EhzzEN3iIJPSQAPKQwOAhgdBDQshDQoOHyEIPiSAPiQweEgk9JIY8JDZ4iCL0kATykMTgIYnQQ1LIQ1KDh6hCD8kgD8kMHpIJPSSHPCQ3eIgm9JAC8pDC4CGF0ENKyENKg4foQg+pIA+pDB5SCT2khjykNniIIfSQBvKQxuAhjdBDWshDWoOHmEIP6SAP6Qwe0gk9pIc8pDd4iCX0kAHykMHgIYPQQ0bIQ0aDh9hCD5kgD5kMHjIJPWSGPGQ2eIgj9JAF8pDF4CGL0ENWyENWg4e4Qg/ZIA/ZDB6yCT1khzxkN3iIJ/SQA/KQw+Ahh9BDTshDToOH+EIPuSAPuQwecgk95IY85DZ4SCD0kAfykMfgIY/QQ17IQ16Dh4RCD/kgD/kMHvIJPeSHPOQ3eEgk9FAA8lDA4KGA0ENByENBg4fEQg+FIA+FDB4KCT0UhjwUNnhIIvRQBPJQxOChiNBDUchDUYOHpEIPxSAPxQweigk9FIc8FDd4SCb0UALyUMLgoYTQQ0nIQ0mDh+RCD6UgD6UMHkoJPZSGPJQ2eEgh9FAG8lDG4KGM0ENZyENZg4eUQg/lIA/lDB7KCT2UhzyUN3hIJfRQAfJQweChgtBDRchDRYOH1EIPlSAPlQweKgk9VIY8VDZ4SCP0UAXyUMXgoYrQQ1XIQ1WDh7RCD9UgD9UMHqoJPVSHPFQ3eEgn9FAD8lDD4KGG0ENNyENNg4f0Qg+1IA+1DB5qCT3UhjzUNnjIIPRQB/JQx+ChjtBDXchDXYOHjEIP9SAP9Qwe6gk91Ic81Dd4yCT00ADy0MDgoYHQQ0PIQ0ODh8xCD40gD40MHhoJPTSGPDQ2eMgi9NAE8tDE4KGJ0ENTyENTg4esQg/NIA/NDB6aCT00hzw0N3jIJvTQAvLQwuChhdBDS8hDS4OH7EIPrSAPrQweWgk9tIY8tDZ4yCH00Aby0MbgoY3QQ1vIQ1uDh5xCD+0gD+0MHtoJPbSHPLQ3eMgl9NAB8tDB4KGD0ENHyENHg4fcQg+dIA+dDB46CT10hjx0NnjII/TQBfLQxeChi9BDV8hDV4OHvEIP3SAP3Qweugk9dIc8dDd4yCf00APy0MPgoYfQQ0/IQ0+Dh/xCD70gD70MHnoJPfSGPPQ2eCgg9NAH8tDH4KGP0ENfyENfg4eCQg/9IA/9DB76CT30hzz0N3goJPQwAPIwwOBhgNDDQMjDQIOHwkIPgyAPgwweBgk9DIY8DDZ4KCL0MATyMMTgYYjQw1DIw1CDh6JCD8MgD8MMHoYJPQyHPAw3eCgm9DAC8jDC4GGE0MNIyMNIg4fiQg+jIA+jDB5GCT2MhjyMNngoIfQwBvIwxuBhjNDDWMjDWIOHkkIP4yAP4wwexgk9jIc8jDd4KCX0MAHyMMHgYYLQw0TIw0SDh9JCD5MgD5MMHiYJPUyGPEw2eCgj9DAF8jDF4GGK0MNUyMNUg4eyQg/TIA/TDB6mCT1MhzxMN3goJ/QwA/Iww+BhhtDDTMjDTIOH8kIPsyAPswweZgk9zIY8zDZ4qCD0MAfyMMfgYY7Qw1zIw1yDh4pCD/MgD/MMHuYJPcyHPMw3eKgk9BCAPAQMHgJCDwsgDwsMHioLPSyEPCw0eFgo9LAI8rDI4KGK0MNiyMNig4fFQg9LIA9LDB6qCj0shTwsNXhYKvSwDPKwzOChmtDDcsjDcoOH5UIPKyAPKwweqgs9rIQ8rDR4WCn0sArysMrgoYbQw2rIw2qDh9VCD2sgD2sMHmoKPayFPKw1eFgr9LAO8rDO4KGW0MN6yMN6g4f1Qg8bIA8bDB5qCz1shDxsNHjYKPSwCfKwyeChjtDDZsjDZoOHzUIPWyAPWwwe6go9bIU8bDV42Cr0sA3ysM3goZ7Qw3bIw3aDh+1CDzsgDzsMHuoLPeyEPOw0eNgp9LAL8rDL4KGB0MNuyMNug4fdQg97IA97DB4aCj3shTzsNXjYK/SwD/Kwz+ChkdDDfsjDfoOH/UIPByAPBwweGgs9HIQ8HDR4OCj0cAjycMjgoYnQw2HIw2GDh8NCD0cgD0cMHpoKPRyFPBw1eDgq9HAM8nDM4KGZ0MNxyMNxg4fjQg8nIA8nDB6aCz2chDycNHg4KfRwCvJwyuChhdDDacjDaYOH00IPZyAPZwweWgo9nIU8nDV4OCv0cA7ycM7goZXQw3nIw3mDh/NCDxcgDxcMHloLPVyEPFw0eLgo9HAJ8nDJ4KGN0MNlyMNlg4fLQg9XIA9XDB7aCj1chTxcNXi4KvTwF+ThL4OHdkIP1yAP1wwergk9/A15+Nvgob3Qw3XIw3WDh+tCD/9AHv4xeOgg9HAD8nDD4OGG0MNNyMNNg4eOQg+3IA+3DB5uCT3chjzcNnjoJPRwB/Jwx+DhjtDDXcjDXYOHzkIP9yAP9wwe7gk93Ic83Dd46CL08ADy8MDg4YHQw0PIw0ODh65CD48gD48MHh4JPTyGPDw2eOgm9PAE8vDE4OGJ0MNTyMNTg4fuQg/PIA/PDB6eCT08hzw8N3joIfTwAvLwwuDhhdDDS8jDS4OHnkIPryAPrwweXgk9/At5+NfgoZfQw2vIw2uDh9dCD28gD28MHnoLPbyFPLw1eHgr9PAO8vDO4KGP0MN7yMN7g4f3Qg8fIA8fDB76Cj18hDx8NHj4KPTwCfLwyeChn9DDZ8jDZ4OHz0IPXyAPXwwe+gs9fIU8fDV4+Cr08A3y8M3gYYDQw3fIw3eDh+9CDz8gDz8MHgYKPfyEPPw0ePgp9PAL8vDL4GGQ0MNvMxkP/+nSHv57+//a+n0m4+H3mbyHwUIPQSAPQQweggg9/AF5+MPgYYjQQ1DIQ1CDh6BCD39CHv40eBgq9BAM8hDM4CGY0ENwyENwg4dhQg8hIA8hDB5CCD2EhDyENHgYLvQQCvIQyuAhlNBDaMhDaIOHEUIPYSAPYQwewgg9hIU8hDV4GCn0EA7yEM7gIZzQQ3jIQ3iDh1FCDxEgDxEMHiIIPUSEPEQ0eBgt9BAJ8hDJ4CGS0ENkyENkg4cxQg9RIA9RDB6iCD1EhTxENXgYK/QQDfIQzeAhmtBDdMhDdIOHcUIPMSAPMQweYgg9xIQ8xDR4GC/0EAvyEMvgIZbQQ2zIQ2yDhwlCD3EgD3EMHuIIPcSFPMQ1eJgo9BAP8hDP4CGe0EN8yEN8g4dJQg8JIA8JDB4SCD0khDwkNHiYLPSQCPKQyOAhkdBDYshDYoOHKUIPSSAPSQwekgg9JIU8JDV4mCr0kAzykMzgIZnQQ3LIQ3KDh2lCDykgDykMHlIIPaSEPKQ0eJgu9JAK8pDK4CGV0ENqyENqg4cZQg9pIA9pDB7SCD2khTykNXiYKfSQDvKQzuAhndBDeshDeoOHWUIPGSAPGQweMgg9ZIQ8ZDR4mC30kAnykMngIZPQQ2bIQ2aDhzlCD1kgD1kMHrIIPWSFPGQ1eJgr9JAN8pDN4CGb0EN2yEN2g4d5Qg85IA85DB5yCD3khDzkNHiYL/SQC/KQy+Ahl9BDbshDboOHgNBDHshDHoOHPEIPeSEPeQ0eFgg95IM85DN4yCf0kB/ykN/gYaHQQwHIQwGDhwJCDwUhDwUNHhYJPRSCPBQyeCgk9FAY8lDY4GGx0EMRyEMRg4ciQg9FIQ9FDR6WCD0UgzwUM3goJvRQHPJQ3OBhqdBDCchDCYOHEkIPJSEPJQ0elgk9lII8lDJ4KCX0UBryUNrgYbnQQxnIQxmDhzJCD2UhD2UNHlYIPZSDPJQzeCgn9FAe8lDe4GGl0EMFyEMFg4cKQg8VIQ8VDR5WCT1UgjxUMnioJPRQGfJQ2eBhtdBDFchDFYOHKkIPVSEPVQ0e1gg9VIM8VDN4qCb0UB3yUN3gYa3QQw3IQw2DhxpCDzUhDzUNHtYJPdSCPNQyeKgl9FAb8lDb4GG90EMdyEMdg4c6Qg91IQ91DR42CD3UgzzUM3ioJ/RQH/JQ3+Bho9BDA8hDA4OHBkIPDSEPDQ0eNgk9NII8NDJ4aCT00Bjy0NjgYbPQQxPIQxODhyZCD00hD00NHrYIPTSDPDQzeGgm9NAc8tDc4GGr0EMLyEMLg4cWQg8tIQ8tDR62CT20gjy0MnhoJfTQGvLQ2uBhu9BDG8hDG4OHNkIPbSEPbQ0edgg9tIM8tDN4aCf00B7y0N7gYafQQwfIQweDhw5CDx0hDx0NHnYJPXSCPHQyeOgk9NAZ8tDZ4GG30EMXyEMXg4cuQg9dIQ9dDR72CD10gzx0M3joJvTQHfLQ3eBhr9BDD8hDD4OHHkIPPSEPPQ0e9gk99II89DJ46CX00Bvy0NvgYb/QQx/IQx+Dhz5CD30hD30NHg4IPfSDPPQzeOgn9NAf8tDf4OGg0MMAyMMAg4cBQg8DIQ8DDR4OCT0MgjwMMngYJPQwGPIw2ODhsNDDEMjDEIOHIUIPQyEPQw0ejgg9DIM8DDN4GCb0MBzyMNzg4ajQwwjIwwiDhxFCDyMhDyMNHo4JPYyCPIwyeBgl9DAa8jDa4OG40MMYyMMYg4cxQg9jIQ9jDR5OCD2MgzyMM3gYJ/QwHvIw3uDhpNDDBMjDBIOHCUIPEyEPEw0eTgk9TII8TDJ4mCT0MBnyMNng4bTQwxTIwxSDhylCD1MhD1MNHs4IPUyDPEwzeJgm9DAd8jDd4OGs0MMMyMMMg4cZQg8zIQ8zDR7OCT3MgjzMMniYJfQwG/Iw2+DhvNDDHMjDHIOHOUIPcyEPcw0eLgg9zIM8zDN4mCf0MB/yMN/g4aLQQwDyEDB4CAg9LIA8LDB4uCT0sBDysNDgYaHQwyLIwyKDh8tCD4shD4sNHhYLPSyBPCwxeLgi9LAU8rDU4GGp0MMyyMMyg4erQg/LIQ/LDR6WCz2sgDysMHj4S+hhJeRhpcHDSqGHVZCHVQYP14QeVkMeVhs8rBZ6WAN5WGPw8LfQw1rIw1qDh7VCD+sgD+sMHq4LPayHPKw3eFgv9LAB8rDB4OEfoYeNkIeNBg8bhR42QR42GTzcEHrYDHnYbPCwWehhC+Rhi8HDTaGHrZCHrQYPW4UetkEethk83BJ62A552G7wsF3oYQfkYYfBw22hh52Qh50GDzuFHnZBHnYZPNwRetgNedht8LBb6GEP5GGPwcNdoYe9kIe9Bg97hR72QR72GTzcE3rYD3nYb/CwX+jhAOThgMHDfaGHg5CHgwYPB4UeDkEeDhk8PBB6OAx5OGzwcFjo4Qjk4YjBw0Ohh6OQh6MGD0eFHo5BHo4ZPDwSejgOeThu8HBc6OEE5OGEwcNjoYeTkIeTBg8nhR5OQR5OGTw8EXo4DXk4bfBwWujhDOThjMHDU6GHs5CHswYPZ4UezkEezhk8PBN6OA95OG/wcF7o4QLk4YLBw3Ohh4uQh4sGDxeFHi5BHi4ZPLwQergMebhs8HBZ6OEK5OGKwcNLoYerkIerBg9XhR7+gjz8ZfDwSujhGuThmsHDNaGHvyEPfxs8/Cv0cB3ycN3g4brQwz+Qh38MHl4LPdyAPNwweLgh9HAT8nDT4OGN0MMtyMMtg4dbQg+3IQ+3DR7eCj3cgTzcMXi4I/RwF/Jw1+DhndDDPcjDPYOHe0IP9yEP9w0e3gs9PIA8PDB4eCD08BDy8NDg4YPQwyPIwyODh0dCD48hD48NHj4KPTyBPDwxeHgi9PAU8vDU4OGT0MMzyMMzg4dnQg/PIQ/PDR4+Cz28gDy8MHh4IfTwEvLw0uDhi9DDK8jDK4OHV0IP/0Ie/jV4+Cr08Bry8Nrg4bXQwxvIwxuDh29CD28hD28NHt4KPbyDPLwzePgu9PAe8vDe4OG90MMHyMMHg4cfQg8fIQ8fDR4+Cj18gjx8Mnj4KfTwGfLw2eDhs9DDF8jDF4OHX0IPXyEPXw0evgo9fIM8fDN4+C2r7g/fIQ/fDR6+Cz38gDz8MHj4XejhJ+Thp8HDT6GHX5CHXwYPQYQefpvFePhPl/bw39v/19bvsxgPv8/iPfwh9BAE8hDE4CGI0MMfkIc/DB6CCj0EhTwENXgIKvTwJ+ThT4OHP4UegkEeghk8BBN6CA55CG7wEEzoIQTkIYTBQwihh5CQh5AGD8GFHkJBHkIZPIQSeggNeQht8BBC6CEM5CGMwUMYoYewkIewBg8hhR7CQR7CGTyEE3oID3kIb/AQSughAuQhgsFDBKGHiJCHiAYPoYUeIkEeIhk8RBJ6iAx5iGzwEEboIQrkIYrBQxShh6iQh6gGD2GFHqJBHqIZPEQTeogOeYhu8BBO6CEG5CGGwUMMoYeYkIeYBg/hhR5iQR5iGTzEEnqIDXmIbfAQQeghDuQhjsFDHKGHuJCHuAYPEYUe4kEe4hk8xBN6iA95iG/wEEnoIQHkIYHBQwKhh4SQh4QGD5GFHhJBHhIZPCQSekgMeUhs8BBF6CEJ5CGJwUMSoYekkIekBg9RhR6SQR6SGTwkE3pIDnlIbvAQTeghBeQhhcFDCqGHlJCHlAYP0YUeUkEeUhk8pBJ6SA15SG3wEEPoIQ3kIY3BQxqhh7SQh7QGDzGFHtJBHtIZPKQTekgPeUhv8BBL6CED5CGDwUMGoYeMkIeMBg+xhR4yQR4yGTxkEnrIDHnIbPAQR+ghC+Qhi8FDFqGHrJCHrAYPcYUeskEeshk8ZBN6yA55yG7wEE/oIQfkIYfBQw6hh5yQh5wGD/GFHnJBHnIZPOQSesgNecht8JBA6CEP5CGPwUMeoYe8kIe8Bg8JhR7yQR7yGTzkE3rID3nIb/CQSOihAOShgMFDAaGHgpCHggYPiYUeCkEeChk8FBJ6KAx5KGzwkETooQjkoYjBQxGhh6KQh6IGD0mFHopBHooZPBQTeigOeShu8JBM6KEE5KGEwUMJoYeSkIeSBg/JhR5KQR5KGTyUEnooDXkobfCQQuihDOShjMFDGaGHspCHsgYPKYUeykEeyhk8lBN6KA95KG/wkErooQLkoYLBQwWhh4qQh4oGD6mFHipBHioZPFQSeqgMeahs8JBG6KEK5KGKwUMVoYeqkIeqBg9phR6qQR6qGTxUE3qoDnmobvCQTuihBuShhsFDDaGHmpCHmgYP6YUeakEeahk81BJ6qA15qG3wkEHooQ7koY7BQx2hh7qQh7oGDxmFHupBHuoZPNQTeqgPeahv8JBJ6KEB5KGBwUMDoYeGkIeGBg+ZhR4aQR4aGTw0EnpoDHlobPCQReihCeShicFDE6GHppCHpgYPWYUemkEemhk8NBN6aA55aG7wkE3ooQXkoYXBQwuhh5aQh5YGD9mFHlpBHloZPLQSemgNeWht8JBD6KEN5KGNwUMboYe2kIe2Bg85hR7aQR7aGTy0E3poD3lob/CQS+ihA+Shg8FDB6GHjpCHjgYPuYUeOkEeOhk8dBJ66Ax56GzwkEfooQvkoYvBQxehh66Qh64GD3mFHrpBHroZPHQTeugOeehu8JBP6KEH5KGHwUMPoYeekIeeBg/5hR56QR56GTz0EnroDXnobfBQQOihD+Shj8FDH6GHvpCHvgYPBYUe+kEe+hk89BN66A956G/wUEjoYQDkYYDBwwChh4GQh4EGD4WFHgZBHgYZPAwSehgMeRhs8FBE6GEI5GGIwcMQoYehkIehBg9FhR6GQR6GGTwME3oYDnkYbvBQTOhhBORhhMHDCKGHkZCHkQYPxYUeRkEeRhk8jBJ6GA15GG3wUELoYQzkYYzBwxihh7GQh7EGDyWFHsZBHsYZPIwTehgPeRhv8FBK6GEC5GGCwcMEoYeJkIeJBg+lhR4mQR4mGTxMEnqYDHmYbPBQRuhhCuRhisHDFKGHqZCHqQYPZYUepkEephk8TBN6mA55mG7wUE7oYQbkYYbBwwyhh5mQh5kGD+WFHmZBHmYZPMwSepgNeZht8FBB6GEO5GGOwcMcoYe5kIe5Bg8VhR7mQR7mGTzME3qYD3mYb/BQSeghAHkIGDwEhB4WQB4WGDxUFnpYCHlYaPCwUOhhEeRhkcFDFaGHxZCHxQYPi4UelkAelhg8VBV6WAp5WGrwsFToYRnkYZnBQzWhh+WQh+UGD8uFHlZAHlYYPFQXelgJeVhp8LBS6GEV5GGVwUMNoYfVkIfVBg+rhR7WQB7WGDzUFHpYC3lYa/CwVuhhHeRhncFDLaGH9ZCH9QYP64UeNkAeNhg81BZ62Ah52GjwsFHoYRPkYZPBQx2hh82Qh80GD5uFHrZAHrYYPNQVetgKedhq8LBV6GEb5GGbwUM9oYftkIftBg/bhR52QB52GDzUF3rYCXnYafCwU+hhF+Rhl8FDA6GH3ZCH3QYPu4Ue9kAe9hg8NBR62At52GvwsFfoYR/kYZ/BQyOhh/2Qh/0GD/uFHg5AHg4YPDQWejgIeTho8HBQ6OEQ5OGQwUMToYfDkIfDBg+HhR6OQB6OGDw0FXo4Cnk4avBwVOjhGOThmMFDM6GH45CH4wYPx4UeTkAeThg8NBd6OAl5OGnwcFLo4RTk4ZTBQwuhh9OQh9MGD6eFHs5AHs4YPLQUejgLeThr8HBW6OEc5OGcwUMroYfzkIfzBg/nhR4uQB4uGDy0Fnq4CHm4aPBwUejhEuThksFDG6GHy5CHywYPl4UerkAerhg8tBV6uAp5uGrwcFXo4S/Iw18GD+2EHq5BHq4ZPFwTevgb8vC3wUN7oYfrkIfrBg/XhR7+gTz8Y/DQQejhBuThhsHDDaGHm5CHmwYPHYUebkEebhk83BJ6uA15uG3w0Eno4Q7k4Y7Bwx2hh7uQh7sGD52FHu5BHu4ZPNwTergPebhv8NBF6OEB5OGBwcMDoYeHkIeHBg9dhR4eQR4eGTw8Enp4DHl4bPDQTejhCeThicHDE6GHp5CHpwYP3YUenkEenhk8PBN6eA55eG7w0EPo4QXk4YXBwwuhh5eQh5cGDz2FHl5BHl4ZPLwSevgX8vCvwUMvoYfXkIfXBg+vhR7eQB7eGDz0Fnp4C3l4a/DwVujhHeThncFDH6GH95CH9wYP74UePkAePhg89BV6+Ah5+Gjw8FHo4RPk4ZPBQz+hh8+Qh88GD5+FHr5AHr4YPPQXevgKefhq8PBV6OEb5OGbwcMAoYfvkIfvBg/fhR5+QB5+GDwMFHr4CXn4afDwU+jhF+Thl8HDIKGH32YzHv7TpT389/b/tfX7bMbD77N5D4OFHoJAHoIYPAQRevgD8vCHwcMQoYegkIegBg9BhR7+hDz8afAwVOghGOQhmMFDMKGH4JCH4AYPw4QeQkAeQhg8hBB6CAl5CGnwMFzoIRTkIZTBQyihh9CQh9AGDyOEHsJAHsIYPIQReggLeQhr8DBS6CEc5CGcwUM4oYfwkIfwBg+jhB4iQB4iGDxEEHqICHmIaPAwWughEuQhksFDJKGHyJCHyAYPY4QeokAeohg8RBF6iAp5iGrwMFboIRrkIZrBQzShh+iQh+gGD+OEHmJAHmIYPMQQeogJeYhp8DBe6CEW5CGWwUMsoYfYkIfYBg8ThB7iQB7iGDzEEXqIC3mIa/AwUeghHuQhnsFDPKGH+JCH+AYPk4QeEkAeEhg8JBB6SAh5SGjwMFnoIRHkIZHBQyKhh8SQh8QGD1OEHpJAHpIYPCQRekgKeUhq8DBV6CEZ5CGZwUMyoYfkkIfkBg/ThB5SQB5SGDykEHpICXlIafAwXeghFeQhlcFDKqGH1JCH1AYPM4Qe0kAe0hg8pBF6SAt5SGvwMFPoIR3kIZ3BQzqhh/SQh/QGD7OEHjJAHjIYPGQQesgIecho8DBb6CET5CGTwUMmoYfMkIfMBg9zhB6yQB6yGDxkEXrICnnIavAwV+ghG+Qhm8FDNqGH7JCH7AYP84QeckAechg85BB6yAl5yGnwMF/oIRfkIZfBQy6hh9yQh9wGDwGhhzyQhzwGD3mEHvJCHvIaPCwQesgHechn8JBP6CE/5CG/wcNCoYcCkIcCBg8FhB4KQh4KGjwsEnooBHkoZPBQSOihMOShsMHDYqGHIpCHIgYPRYQeikIeiho8LBF6KAZ5KGbwUEzooTjkobjBw1KhhxKQhxIGDyWEHkpCHkoaPCwTeigFeShl8FBK6KE05KG0wcNyoYcykIcyBg9lhB7KQh7KGjysEHooB3koZ/BQTuihPOShvMHDSqGHCpCHCgYPFYQeKkIeKho8rBJ6qAR5qGTwUEnooTLkobLBw2qhhyqQhyoGD1WEHqpCHqoaPKwReqgGeahm8FBN6KE65KG6wcNaoYcakIcaBg81hB5qQh5qGjysE3qoBXmoZfBQS+ihNuShtsHDeqGHOpCHOgYPdYQe6kIe6ho8bBB6qAd5qGfwUE/ooT7kob7Bw0ahhwaQhwYGDw2EHhpCHhoaPGwSemgEeWhk8NBI6KEx5KGxwcNmoYcmkIcmBg9NhB6aQh6aGjxsEXpoBnloZvDQTOihOeShucHDVqGHFpCHFgYPLYQeWkIeWho8bBN6aAV5aGXw0ErooTXkobXBw3ahhzaQhzYGD22EHtpCHtoaPOwQemgHeWhn8NBO6KE95KG9wcNOoYcOkIcOBg8dhB46Qh46GjzsEnroBHnoZPDQSeihM+Shs8HDbqGHLpCHLgYPXYQeukIeuho87BF66AZ56Gbw0E3ooTvkobvBw16hhx6Qhx4GDz2EHnpCHnoaPOwTeugFeehl8NBL6KE35KG3wcN+oYc+kIc+Bg99hB76Qh76GjwcEHroB3noZ/DQT+ihP+Shv8HDQaGHAZCHAQYPA4QeBkIeBho8HBJ6GAR5GGTwMEjoYTDkYbDBw2GhhyGQhyEGD0OEHoZCHoYaPBwRehgGeRhm8DBM6GE45GG4wcNRoYcRkIcRBg8jhB5GQh5GGjwcE3oYBXkYZfAwSuhhNORhtMHDcaGHMZCHMQYPY4QexkIexho8nBB6GAd5GGfwME7oYTzkYbzBw0mhhwmQhwkGDxOEHiZCHiYaPJwSepgEeZhk8DBJ6GEy5GGywcNpoYcpkIcpBg9ThB6mQh6mGjycEXqYBnmYZvAwTehhOuRhusHDWaGHGZCHGQYPM4QeZkIeZho8nBN6mAV5mGXwMEvoYTbkYbbBw3mhhzmQhzkGD3OEHuZCHuYaPFwQepgHeZhn8DBP6GE+5GG+wcNFoYcA5CFg8BAQelgAeVhg8HBJ6GEh5GGhwcNCoYdFkIdFBg+XhR4WQx4WGzwsFnpYAnlYYvBwRehhKeRhqcHDUqGHZZCHZQYPV4UelkMelhs8LBd6WAF5WGHw8JfQw0rIw0qDh5VCD6sgD6sMHq4JPayGPKw2eFgt9LAG8rDG4OFvoYe1kIe1Bg9rhR7WQR7WGTxcF3pYD3lYb/CwXuhhA+Rhg8HDP0IPGyEPGw0eNgo9bII8bDJ4uCH0sBnysNngYbPQwxbIwxaDh5tCD1shD1sNHrYKPWyDPGwzeLgl9LAd8rDd4GG70MMOyMMOg4fbQg87IQ87DR52Cj3sgjzsMni4I/SwG/Kw2+Bht9DDHsjDHoOHu0IPeyEPew0e9go97IM87DN4uCf0sB/ysN/gYb/QwwHIwwGDh/tCDwchDwcNHg4KPRyCPBwyeHgg9HAY8nDY4OGw0MMRyMMRg4eHQg9HIQ9HDR6OCj0cgzwcM3h4JPRwHPJw3ODhuNDDCcjDCYOHx0IPJyEPJw0eTgo9nII8nDJ4eCL0cBrycNrg4bTQwxnIwxmDh6dCD2chD2cNHs4KPZyDPJwzeHgm9HAe8nDe4OG80MMFyMMFg4fnQg8XIQ8XDR4uCj1cgjxcMnh4IfRwGfJw2eDhstDDFcjDFYOHl0IPVyEPVw0ergo9/AV5+Mvg4ZXQwzXIwzWDh2tCD39DHv42ePhX6OE65OG6wcN1oYd/IA//GDy8Fnq4AXm4YfBwQ+jhJuThpsHDG6GHW5CHWwYPt4QebkMebhs8vBV6uAN5uGPwcEfo4S7k4a7Bwzuhh3uQh3sGD/eEHu5DHu4bPLwXengAeXhg8PBA6OEh5OGhwcMHoYdHkIdHBg+PhB4eQx4eGzx8FHp4Anl4YvDwROjhKeThqcHDJ6GHZ5CHZwYPz4QenkMenhs8fBZ6eAF5eGHw8ELo4SXk4aXBwxehh1eQh1cGD6+EHv6FPPxr8PBV6OE15OG1wcNroYc3kIc3Bg/fhB7eQh7eGjy8FXp4B3l4Z/DwXejhPeThvcHDe6GHD5CHDwYPP4QePkIePho8fBR6+AR5+GTw8FPo4TPk4bPBw2ehhy+Qhy8GD7+EHr5CHr4aPHwVevgGefhm8PBbNt0fvkMevhs8fBd6+AF5+GHw8LvQw0/Iw0+Dh59CD78gD78MHoIIPfw2h/Hwny7t4b+3/6+t3+cwHn6fw3v4Q+ghCOQhiMFDEKGHPyAPfxg8BBV6CAp5CGrwEFTo4U/Iw58GD38KPQSDPAQzeAgm9BAc8hDc4CGY0EMIyEMIg4cQQg8hIQ8hDR6CCz2EgjyEMngIJfQQGvIQ2uAhhNBDGMhDGIOHMEIPYSEPYQ0eQgo9hIM8hDN4CCf0EB7yEN7gIZTQQwTIQwSDhwhCDxEhDxENHkILPUSCPEQyeIgk9BAZ8hDZ4CGM0EMUyEMUg4coQg9RIQ9RDR7CCj1EgzxEM3iIJvQQHfIQ3eAhnNBDDMhDDIOHGEIPMSEPMQ0ewgs9xII8xDJ4iCX0EBvyENvgIYLQQxzIQxyDhzhCD3EhD3ENHiIKPcSDPMQzeIgn9BAf8hDf4CGS0EMCyEMCg4cEQg8JIQ8JDR4iCz0kgjwkMnhIJPSQGPKQ2OAhitBDEshDEoOHJEIPSSEPSQ0eogo9JIM8JDN4SCb0kBzykNzgIZrQQwrIQwqDhxRCDykhDykNHqILPaSCPKQyeEgl9JAa8pDa4CGG0EMayEMag4c0Qg9pIQ9pDR5iCj2kgzykM3hIJ/SQHvKQ3uAhltBDBshDBoOHDEIPGSEPGQ0eYgs9ZII8ZDJ4yCT0kBnykNngIY7QQxbIQxaDhyxCD1khD1kNHuIKPWSDPGQzeMgm9JAd8pDd4CGe0EMOyEMOg4ccQg85IQ85DR7iCz3kgjzkMnjIJfSQG/KQ2+AhgdBDHshDHoOHPEIPeSEPeQ0eEgo95IM85DN4yCf0kB/ykN/gIZHQQwHIQwGDhwJCDwUhDwUNHhILPRSCPBQyeCgk9FAY8lDY4CGJ0EMRyEMRg4ciQg9FIQ9FDR6SCj0UgzwUM3goJvRQHPJQ3OAhmdBDCchDCYOHEkIPJSEPJQ0ekgs9lII8lDJ4KCX0UBryUNrgIYXQQxnIQxmDhzJCD2UhD2UNHlIKPZSDPJQzeCgn9FAe8lDe4CGV0EMFyEMFg4cKQg8VIQ8VDR5SCz1UgjxUMnioJPRQGfJQ2eAhjdBDFchDFYOHKkIPVSEPVQ0e0go9VIM8VDN4qCb0UB3yUN3gIZ3QQw3IQw2DhxpCDzUhDzUNHtILPdSCPNQyeKgl9FAb8lDb4CGD0EMdyEMdg4c6Qg91IQ91DR4yCj3UgzzUM3ioJ/RQH/JQ3+Ahk9BDA8hDA4OHBkIPDSEPDQ0eMgs9NII8NDJ4aCT00Bjy0NjgIYvQQxPIQxODhyZCD00hD00NHrIKPTSDPDQzeGgm9NAc8tDc4CGb0EMLyEMLg4cWQg8tIQ8tDR6yCz20gjy0MnhoJfTQGvLQ2uAhh9BDG8hDG4OHNkIPbSEPbQ0ecgo9tIM8tDN4aCf00B7y0N7gIZfQQwfIQweDhw5CDx0hDx0NHnILPXSCPHQyeOgk9NAZ8tDZ4CGP0EMXyEMXg4cuQg9dIQ9dDR7yCj10gzx0M3joJvTQHfLQ3eAhn9BDD8hDD4OHHkIPPSEPPQ0e8gs99II89DJ46CX00Bvy0NvgoYDQQx/IQx+Dhz5CD30hD30NHgoKPfSDPPQzeOgn9NAf8tDf4KGQ0MMAyMMAg4cBQg8DIQ8DDR4KCz0MgjwMMngYJPQwGPIw2OChiNDDEMjDEIOHIUIPQyEPQw0eigo9DIM8DDN4GCb0MBzyMNzgoZjQwwjIwwiDhxFCDyMhDyMNHooLPYyCPIwyeBgl9DAa8jDa4KGE0MMYyMMYg4cxQg9jIQ9jDR5KCj2MgzyMM3gYJ/QwHvIw3uChlNDDBMjDBIOHCUIPEyEPEw0eSgs9TII8TDJ4mCT0MBnyMNngoYzQwxTIwxSDhylCD1MhD1MNHsoKPUyDPEwzeJgm9DAd8jDd4KGc0MMMyMMMg4cZQg8zIQ8zDR7KCz3MgjzMMniYJfQwG/Iw2+ChgtDDHMjDHIOHOUIPcyEPcw0eKgo9zIM8zDN4mCf0MB/yMN/goZLQQwDyEDB4CAg9LIA8LDB4qCz0sBDysNDgYaHQwyLIwyKDhypCD4shD4sNHhYLPSyBPCwxeKgq9LAU8rDU4GGp0MMyyMMyg4dqQg/LIQ/LDR6WCz2sgDysMHioLvSwEvKw0uBhpdDDKsjDKoOHGkIPqyEPqw0eVgs9rIE8rDF4qCn0sBbysNbgYa3QwzrIwzqDh1pCD+shD+sNHtYLPWyAPGwweKgt9LAR8rDR4GGj0MMmyMMmg4c6Qg+bIQ+bDR42Cz1sgTxsMXioK/SwFfKw1eBhq9DDNsjDNoOHekIP2yEP2w0etgs97IA87DB4qC/0sBPysNPgYafQwy7Iwy6DhwZCD7shD7sNHnYLPeyBPOwxeGgo9LAX8rDX4GGv0MM+yMM+g4dGQg/7IQ/7DR72Cz0cgDwcMHhoLPRwEPJw0ODhoNDDIcjDIYOHJkIPhyEPhw0eDgs9HIE8HDF4aCr0cBTycNTg4ajQwzHIwzGDh2ZCD8chD8cNHo4LPZyAPJwweGgu9HAS8nDS4OGk0MMpyMMpg4cWQg+nIQ+nDR5OCz2cgTycMXhoKfRwFvJw1uDhrNDDOcjDOYOHVkIP5yEP5w0ezgs9XIA8XDB4aC30cBHycNHg4aLQwyXIwyWDhzZCD5chD5cNHi4LPVyBPFwxeGgr9HAV8nDV4OGq0MNfkIe/DB7aCT1cgzxcM3i4JvTwN+Thb4OH9kIP1yEP1w0ergs9/AN5+MfgoYPQww3Iww2DhxtCDzchDzcNHjoKPdyCPNwyeLgl9HAb8nDb4KGT0MMdyMMdg4c7Qg93IQ93DR46Cz3cgzzcM3i4J/RwH/Jw3+Chi9DDA8jDA4OHB0IPDyEPDw0eugo9PII8PDJ4eCT08Bjy8NjgoZvQwxPIwxODhydCD08hD08NHroLPTyDPDwzeHgm9PAc8vDc4KGH0MMLyMMLg4cXQg8vIQ8vDR56Cj28gjy8Mnh4JfTwL+ThX4OHXkIPryEPrw0eXgs9vIE8vDF46C308Bby8Nbg4a3QwzvIwzuDhz5CD+8hD+8NHt4LPXyAPHwweOgr9PAR8vDR4OGj0MMnyMMng4d+Qg+fIQ+fDR4+Cz18gTx8MXjoL/TwFfLw1eDhq9DDN8jDN4OHAUIP3yEP3w0evgs9/IA8/DB4GCj08BPy8NPg4afQwy/Iwy+Dh0FCD7/NZTz8p0t7+O/t/2vr97mMh9/n8h4GCz0EgTwEMXgIIvTwB+ThD4OHIUIPQSEPQQ0eggo9/Al5+NPgYajQQzDIQzCDh2BCD8EhD8ENHoYJPYSAPIQweAgh9BAS8hDS4GG40EMoyEMog4dQQg+hIQ+hDR5GCD2EgTyEMXgII/QQFvIQ1uBhpNBDOMhDOIOHcEIP4SEP4Q0eRgk9RIA8RDB4iCD0EBHyENHgYbTQQyTIQySDh0hCD5EhD5ENHsYIPUSBPEQxeIgi9BAV8hDV4GGs0EM0yEM0g4doQg/RIQ/RDR7GCT3EgDzEMHiIIfQQE/IQ0+BhvNBDLMhDLIOHWEIPsSEPsQ0eJgg9xIE8xDF4iCP0EBfyENfgYaLQQzzIQzyDh3hCD/EhD/ENHiYJPSSAPCQweEgg9JAQ8pDQ4GGy0EMiyEMig4dEQg+JIQ+JDR6mCD0kgTwkMXhIIvSQFPKQ1OBhqtBDMshDMoOHZEIPySEPyQ0epgk9pIA8pDB4SCH0kBLykNLgYbrQQyrIQyqDh1RCD6khD6kNHmYIPaSBPKQxeEgj9JAW8pDW4GGm0EM6yEM6g4d0Qg/pIQ/pDR5mCT1kgDxkMHjIIPSQEfKQ0eBhttBDJshDJoOHTEIPmSEPmQ0e5gg9ZIE8ZDF4yCL0kBXykNXgYa7QQzbIQzaDh2xCD9khD9kNHuYJPeSAPOQweMgh9JAT8pDT4GG+0EMuyEMug4dcQg+5IQ+5DR4CQg95IA95DB7yCD3khTzkNXhYIPSQD/KQz+Ahn9BDfshDfoOHhUIPBSAPBQweCgg9FIQ8FDR4WCT0UAjyUMjgoZDQQ2HIQ2GDh8VCD0UgD0UMHooIPRSFPBQ1eFgi9FAM8lDM4KGY0ENxyENxg4elQg8lIA8lDB5KCD2UhDyUNHhYJvRQCvJQyuChlNBDachDaYOH5UIPZSAPZQweygg9lIU8lDV4WCH0UA7yUM7goZzQQ3nIQ3mDh5VCDxUgDxUMHioIPVSEPFQ0eFgl9FAJ8lDJ4KGS0ENlyENlg4fVQg9VIA9VDB6qCD1UhTxUNXhYI/RQDfJQzeChmtBDdchDdYOHtUIPNSAPNQweagg91IQ81DR4WCf0UAvyUMvgoZbQQ23IQ22Dh/VCD3UgD3UMHuoIPdSFPNQ1eNgg9FAP8lDP4KGe0EN9yEN9g4eNQg8NIA8NDB4aCD00hDw0NHjYJPTQCPLQyOChkdBDY8hDY4OHzUIPTSAPTQwemgg9NIU8NDV42CL00Azy0MzgoZnQQ3PIQ3ODh61CDy0gDy0MHloIPbSEPLQ0eNgm9NAK8tDK4KGV0ENryENrg4ftQg9tIA9tDB7aCD20hTy0NXjYIfTQDvLQzuChndBDe8hDe4OHnUIPHSAPHQweOgg9dIQ8dDR42CX00Any0MngoZPQQ2fIQ2eDh91CD10gD10MHroIPXSFPHQ1eNgj9NAN8tDN4KGb0EN3yEN3g4e9Qg89IA89DB56CD30hDz0NHjYJ/TQC/LQy+Chl9BDb8hDb4OH/UIPfSAPfQwe+gg99IU89DV4OCD00A/y0M/goZ/QQ3/IQ3+Dh4NCDwMgDwMMHgYIPQyEPAw0eDgk9DAI8jDI4GGQ0MNgyMNgg4fDQg9DIA9DDB6GCD0MhTwMNXg4IvQwDPIwzOBhmNDDcMjDcIOHo0IPIyAPIwweRgg9jIQ8jDR4OCb0MAryMMrgYZTQw2jIw2iDh+NCD2MgD2MMHsYIPYyFPIw1eDgh9DAO8jDO4GGc0MN4yMN4g4eTQg8TIA8TDB4mCD1MhDxMNHg4JfQwCfIwyeBhktDDZMjDZIOH00IPUyAPUwwepgg9TIU8TDV4OCP0MA3yMM3gYZrQw3TIw3SDh7NCDzMgDzMMHmYIPcyEPMw0eDgn9DAL8jDL4GGW0MNsyMNsg4fzQg9zIA9zDB7mCD3MhTzMNXi4IPQwD/Iwz+BhntDDfMjDfIOHi0IPAchDwOAhIPSwAPKwwODhktDDQsjDQoOHhUIPiyAPiwweLgs9LIY8LDZ4WCz0sATysMTg4YrQw1LIw1KDh6VCD8sgD8sMHq4KPSyHPCw3eFgu9LAC8rDC4OEvoYeVkIeVBg8rhR5WQR5WGTxcE3pYDXlYbfCwWuhhDeRhjcHD30IPayEPaw0e1go9rIM8rDN4uC70sB7ysN7gYb3QwwbIwwaDh3+EHjZCHjYaPGwUetgEedhk8HBD6GEz5GGzwcNmoYctkIctBg83hR62Qh62GjxsFXrYBnnYZvBwS+hhO+Rhu8HDdqGHHZCHHQYPt4UedkIedho87BR62AV52GXwcEfoYTfkYbfBw26hhz2Qhz0GD3eFHvZCHvYaPOwVetgHedhn8HBP6GE/5GG/wcN+oYcDkIcDBg/3hR4OQh4OGjwcFHo4BHk4ZPDwQOjhMOThsMHDYaGHI5CHIwYPD4UejkIejho8HBV6OAZ5OGbw8Ejo4Tjk4bjBw3GhhxOQhxMGD4+FHk5CHk4aPJwUejgFeThl8PBE6OE05OG0wcNpoYczkIczBg9PhR7OQh7OGjycFXo4B3k4Z/DwTOjhPOThvMHDeaGHC5CHCwYPz4UeLkIeLho8XBR6uAR5uGTw8ELo4TLk4bLBw2WhhyuQhysGDy+FHq5CHq4aPFwVevgL8vCXwcMroYdrkIdrBg/XhB7+hjz8bfDwr9DDdcjDdYOH60IP/0Ae/jF4eC30cAPycMPg4YbQw03Iw02DhzdCD7cgD7cMHm4JPdyGPNw2eHgr9HAH8nDH4OGO0MNdyMNdg4d3Qg/3IA/3DB7uCT3chzzcN3h4L/TwAPLwwODhgdDDQ8jDQ4OHD0IPjyAPjwweHgk9PIY8PDZ4+Cj08ATy8MTg4YnQw1PIw1ODh09CD88gD88MHp4JPTyHPDw3ePgs9PAC8vDC4OGF0MNLyMNLg4cvQg+vIA+vDB5eCT38C3n41+Dhq9DDa8jDa4OH10IPbyAPbwwevgk9vIU8vDV4eCv08A7y8M7g4bvQw3vIw3uDh/dCDx8gDx8MHn4IPXyEPHw0ePgo9PAJ8vDJ4OGn0MNnyMNng4fPQg9fIA9fDB5+CT18hTx8NXj4KvTwDfLwzeDht+y6P3yHPHw3ePgu9PAD8vDD4OF3oYefkIefBg8/hR5+QR5+GTwEEXr4bR7j4T9d2sN/b/9fW7/PYzz8Po/38IfQQxDIQxCDhyBCD39AHv4weAgq9BAU8hDU4CGo0MOfkIc/DR7+FHoIBnkIZvAQTOghOOQhuMFDMKGHEJCHEAYPIYQeQkIeQho8BBd6CAV5CGXwEEroITTkIbTBQwihhzCQhzAGD2GEHsJCHsIaPIQUeggHeQhn8BBO6CE85CG8wUMooYcIkIcIBg8RhB4iQh4iGjyEFnqIBHmIZPAQSeghMuQhssFDGKGHKJCHKAYPUYQeokIeoho8hBV6iAZ5iGbwEE3oITrkIbrBQzihhxiQhxgGDzGEHmJCHmIaPIQXeogFeYhl8BBL6CE25CG2wUMEoYc4kIc4Bg9xhB7iQh7iGjxEFHqIB3mIZ/AQT+ghPuQhvsFDJKGHBJCHBAYPCYQeEkIeEho8RBZ6SAR5SGTwkEjoITHkIbHBQxShhySQhyQGD0mEHpJCHpIaPEQVekgGeUhm8JBM6CE55CG5wUM0oYcUkIcUBg8phB5SQh5SGjxEF3pIBXlIZfCQSughNeQhtcFDDKGHNJCHNAYPaYQe0kIe0ho8xBR6SAd5SGfwkE7oIT3kIb3BQyyhhwyQhwwGDxmEHjJCHjIaPMQWesgEechk8JBJ6CEz5CGzwUMcoYcskIcsBg9ZhB6yQh6yGjzEFXrIBnnIZvCQTeghO+Qhu8FDPKGHHJCHHAYPOYQeckIecho8xBd6yAV5yGXwkEvoITfkIbfBQwKhhzyQhzwGD3mEHvJCHvIaPCQUesgHechn8JBP6CE/5CG/wUMioYcCkIcCBg8FhB4KQh4KGjwkFnooBHkoZPBQSOihMOShsMFDEqGHIpCHIgYPRYQeikIeiho8JBV6KAZ5KGbwUEzooTjkobjBQzKhhxKQhxIGDyWEHkpCHkoaPCQXeigFeShl8FBK6KE05KG0wUMKoYcykIcyBg9lhB7KQh7KGjykFHooB3koZ/BQTuihPOShvMFDKqGHCpCHCgYPFYQeKkIeKho8pBZ6qAR5qGTwUEnooTLkobLBQxqhhyqQhyoGD1WEHqpCHqoaPKQVeqgGeahm8FBN6KE65KG6wUM6oYcakIcaBg81hB5qQh5qGjykF3qoBXmoZfBQS+ihNuShtsFDBqGHOpCHOgYPdYQe6kIe6ho8ZBR6qAd5qGfwUE/ooT7kob7BQyahhwaQhwYGDw2EHhpCHhoaPGQWemgEeWhk8NBI6KEx5KGxwUMWoYcmkIcmBg9NhB6aQh6aGjxkFXpoBnloZvDQTOihOeShucFDNqGHFpCHFgYPLYQeWkIeWho8ZBd6aAV5aGXw0ErooTXkobXBQw6hhzaQhzYGD22EHtpCHtoaPOQUemgHeWhn8NBO6KE95KG9wUMuoYcOkIcOBg8dhB46Qh46GjzkFnroBHnoZPDQSeihM+Shs8FDHqGHLpCHLgYPXYQeukIeuho85BV66AZ56Gbw0E3ooTvkobvBQz6hhx6Qhx4GDz2EHnpCHnoaPOQXeugFeehl8NBL6KE35KG3wUMBoYc+kIc+Bg99hB76Qh76GjwUFHroB3noZ/DQT+ihP+Shv8FDIaGHAZCHAQYPA4QeBkIeBho8FBZ6GAR5GGTwMEjoYTDkYbDBQxGhhyGQhyEGD0OEHoZCHoYaPBQVehgGeRhm8DBM6GE45GG4wUMxoYcRkIcRBg8jhB5GQh5GGjwUF3oYBXkYZfAwSuhhNORhtMFDCaGHMZCHMQYPY4QexkIexho8lBR6GAd5GGfwME7oYTzkYbzBQymhhwmQhwkGDxOEHiZCHiYaPJQWepgEeZhk8DBJ6GEy5GGywUMZoYcpkIcpBg9ThB6mQh6mGjyUFXqYBnmYZvAwTehhOuRhusFDOaGHGZCHGQYPM4QeZkIeZho8lBd6mAV5mGXwMEvoYTbkYbbBQwWhhzmQhzkGD3OEHuZCHuYaPFQUepgHeZhn8DBP6GE+5GG+wUMloYcA5CFg8BAQelgAeVhg8FBZ6GEh5GGhwcNCoYdFkIdFBg9VhB4WQx4WGzwsFnpYAnlYYvBQVehhKeRhqcHDUqGHZZCHZQYP1YQelkMelhs8LBd6WAF5WGHwUF3oYSXkYaXBw0qhh1WQh1UGDzWEHlZDHlYbPKwWelgDeVhj8FBT6GEt5GGtwcNaoYd1kId1Bg+1hB7WQx7WGzysF3rYAHnYYPBQW+hhI+Rho8HDRqGHTZCHTQYPdYQeNkMeNhs8bBZ62AJ52GLwUFfoYSvkYavBw1ahh22Qh20GD/WEHrZDHrYbPGwXetgBedhh8FBf6GEn5GGnwcNOoYddkIddBg8NhB52Qx52GzzsFnrYA3nYY/DQUOhhL+Rhr8HDXqGHfZCHfQYPjYQe9kMe9hs87Bd6OAB5OGDw0Fjo4SDk4aDBw0Ghh0OQh0MGD02EHg5DHg4bPBwWejgCeThi8NBU6OEo5OGowcNRoYdjkIdjBg/NhB6OQx6OGzwcF3o4AXk4YfDQXOjhJOThpMHDSaGHU5CHUwYPLYQeTkMeThs8nBZ6OAN5OGPw0FLo4Szk4azBw1mhh3OQh3MGD62EHs5DHs4bPJwXergAebhg8NBa6OEi5OGiwcNFoYdLkIdLBg9thB4uQx4uGzxcFnq4Anm4YvDQVujhKuThqsHDVaGHvyAPfxk8tBN6uAZ5uGbwcE3o4W/Iw98GD+2FHq5DHq4bPFwXevgH8vCPwUMHoYcbkIcbBg83hB5uQh5uGjx0FHq4BXm4ZfBwS+jhNuThtsFDJ6GHO5CHOwYPd4Qe7kIe7ho8dBZ6uAd5uGfwcE/o4T7k4b7BQxehhweQhwcGDw+EHh5CHh4aPHQVengEeXhk8PBI6OEx5OGxwUM3oYcnkIcnBg9PhB6eQh6eGjx0F3p4Bnl4ZvDwTOjhOeThucFDD6GHF5CHFwYPL4QeXkIeXho89BR6eAV5eGXw8Ero4V/Iw78GD72EHl5DHl4bPLwWengDeXhj8NBb6OEt5OGtwcNboYd3kId3Bg99hB7eQx7eGzy8F3r4AHn4YPDQV+jhI+Tho8HDR6GHT5CHTwYP/YQePkMePhs8fBZ6+AJ5+GLw0F/o4Svk4avBw1ehh2+Qh28GDwOEHr5DHr4bPHwXevgBefhh8DBQ6OEn5OGnwcNPoYdfkIdfBg+DhB5+m894+E+X9vDf2//X1u/zGQ+/z+c9DBZ6CAJ5CGLwEETo4Q/Iwx8GD0OEHoJCHoIaPAQVevgT8vCnwcNQoYdgkIdgBg/BhB6CQx6CGzwME3oIAXkIYfAQQughJOQhpMHDcKGHUJCHUAYPoYQeQkMeQhs8jBB6CAN5CGPwEEboISzkIazBw0ihh3CQh3AGD+GEHsJDHsIbPIwSeogAeYhg8BBB6CEi5CGiwcNooYdIkIdIBg+RhB4iQx4iGzyMEXqIAnmIYvAQReghKuQhqsHDWKGHaJCHaAYP0YQeokMeohs8jBN6iAF5iGHwEEPoISbkIabBw3ihh1iQh1gGD7GEHmJDHmIbPEwQeogDeYhj8BBH6CEu5CGuwcNEoYd4kId4Bg/xhB7iQx7iGzxMEnpIAHlIYPCQQOghIeQhocHDZKGHRJCHRAYPiYQeEkMeEhs8TBF6SAJ5SGLwkEToISnkIanBw1Shh2SQh2QGD8mEHpJDHpIbPEwTekgBeUhh8JBC6CEl5CGlwcN0oYdUkIdUBg+phB5SQx5SGzzMEHpIA3lIY/CQRughLeQhrcHDTKGHdJCHdAYP6YQe0kMe0hs8zBJ6yAB5yGDwkEHoISPkIaPBw2yhh0yQh0wGD5mEHjJDHjIbPMwResgCechi8JBF6CEr5CGrwcNcoYdskIdsBg/ZhB6yQx6yGzzME3rIAXnIYfCQQ+ghJ+Qhp8HDfKGHXJCHXAYPuYQeckMechs8BIQe8kAe8hg85BF6yAt5yGvwsEDoIR/kIZ/BQz6hh/yQh/wGDwuFHgpAHgoYPBQQeigIeSho8LBI6KEQ5KGQwUMhoYfCkIfCBg+LhR6KQB6KGDwUEXooCnkoavCwROihGOShmMFDMaGH4pCH4gYPS4UeSkAeShg8lBB6KAl5KGnwsEzooRTkoZTBQymhh9KQh9IGD8uFHspAHsoYPJQReigLeShr8LBC6KEc5KGcwUM5oYfykIfyBg8rhR4qQB4qGDxUEHqoCHmoaPCwSuihEuShksFDJaGHypCHygYPq4UeqkAeqhg8VBF6qAp5qGrwsEbooRrkoZrBQzWhh+qQh+oGD2uFHmpAHmoYPNQQeqgJeahp8LBO6KEW5KGWwUMtoYfakIfaBg/rhR7qQB7qGDzUEXqoC3moa/CwQeihHuShnsFDPaGH+pCH+gYPG4UeGkAeGhg8NBB6aAh5aGjwsEnooRHkoZHBQyOhh8aQh8YGD5uFHppAHpoYPDQRemgKeWhq8LBF6KEZ5KGZwUMzoYfmkIfmBg9bhR5aQB5aGDy0EHpoCXloafCwTeihFeShlcFDK6GH1pCH1gYP24Ue2kAe2hg8tBF6aAt5aGvwsEPooR3koZ3BQzuhh/aQh/YGDzuFHjpAHjoYPHQQeugIeeho8LBL6KET5KGTwUMnoYfOkIfOBg+7hR66QB66GDx0EXroCnnoavCwR+ihG+Shm8FDN6GH7pCH7gYPe4UeekAeehg89BB66Al56GnwsE/ooRfkoZfBQy+hh96Qh94GD/uFHvpAHvoYPPQReugLeehr8HBA6KEf5KGfwUM/oYf+kIf+Bg8HhR4GQB4GGDwMEHoYCHkYaPBwSOhhEORhkMHDIKGHwZCHwQYPh4UehkAehhg8DBF6GAp5GGrwcEToYRjkYZjBwzChh+GQh+EGD0eFHkZAHkYYPIwQehgJeRhp8HBM6GEU5GGUwcMooYfRkIfRBg/HhR7GQB7GGDyMEXoYC3kYa/BwQuhhHORhnMHDOKGH8ZCH8QYPJ4UeJkAeJhg8TBB6mAh5mGjwcEroYRLkYZLBwyShh8mQh8kGD6eFHqZAHqYYPEwRepgKeZhq8HBG6GEa5GGawcM0oYfpkIfpBg9nhR5mQB5mGDzMEHqYCXmYafBwTuhhFuRhlsHDLKGH2ZCH2QYP54Ue5kAe5hg8zBF6mAt5mGvwcEHoYR7kYZ7Bwzyhh/mQh/kGDxeFHgKQh4DBQ0DoYQHkYYHBwyWhh4WQh4UGDwuFHhZBHhYZPFwWelgMeVhs8LBY6GEJ5GGJwcMVoYelkIelBg9LhR6WQR6WGTxcFXpYDnlYbvCwXOhhBeRhhcHDX0IPKyEPKw0eVgo9rII8rDJ4uCb0sBrysNrgYbXQwxrIwxqDh7+FHtZCHtYaPKwVelgHeVhn8HBd6GE95GG9wcN6oYcNkIcNBg//CD1shDxsNHjYKPSwCfKwyeDhhtDDZsjDZoOHzUIPWyAPWwwebgo9bIU8bDV42Cr0sA3ysM3g4ZbQw3bIw3aDh+1CDzsgDzsMHm4LPeyEPOw0eNgp9LAL8rDL4OGO0MNuyMNug4fdQg97IA97DB7uCj3shTzsNXjYK/SwD/Kwz+DhntDDfsjDfoOH/UIPByAPBwwe7gs9HIQ8HDR4OCj0cAjycMjg4YHQw2HIw2GDh8NCD0cgD0cMHh4KPRyFPBw1eDgq9HAM8nDM4OGR0MNxyMNxg4fjQg8nIA8nDB4eCz2chDycNHg4KfRwCvJwyuDhidDDacjDaYOH00IPZyAPZwwengo9nIU8nDV4OCv0cA7ycM7g4ZnQw3nIw3mDh/NCDxcgDxcMHp4LPVyEPFw0eLgo9HAJ8nDJ4OGF0MNlyMNlg4fLQg9XIA9XDB5eCj1chTxcNXi4KvTwF+ThL4OHV0IP1yAP1wwergk9/A15+Nvg4V+hh+uQh+sGD9eFHv6BPPxj8PBa6OEG5OGGwcMNoYebkIebBg9vhB5uQR5uGTzcEnq4DXm4bfDwVujhDuThjsHDHaGHu5CHuwYP74Qe7kEe7hk83BN6uA95uG/w8F7o4QHk4YHBwwOhh4eQh4cGDx+EHh5BHh4ZPDwSengMeXhs8PBR6OEJ5OGJwcMToYenkIenBg+fhB6eQR6eGTw8E3p4Dnl4bvDwWejhBeThhcHDC6GHl5CHlwYPX4QeXkEeXhk8vBJ6+Bfy8K/Bw1ehh9eQh9cGD6+FHt5AHt4YPHwTengLeXhr8PBW6OEd5OGdwcN3oYf3kIf3Bg/vhR4+QB4+GDz8EHr4CHn4aPDwUejhE+Thk8HDT6GHz5CHzwYPn4UevkAevhg8/BJ6+Ap5+Grw8FXo4Rvk4ZvBw285dH/4rvlD9qb///z3H74bPHwXevih+UOzxv/nDz8MHn4XevgJefhp8PBT6OEX5OGXwUMQoYffAoyH/3RpD/+9/X9t/R5gPPwe4D38IfQQJMB4CGLwEETo4Q/Iwx8GD0GFHoIGGA9BDR6CCj38CXn40+DhT6GHYAHGQzCDh2BCD8EhD8ENHoIJPYQIMB5CGDyEEHoICXkIafAQXOghVIDxEMrgIZTQQ2jIQ2iDhxBCD2ECjIcwBg9hhB7CQh7CGjyEFHoIF2A8hDN4CCf0EB7yEN7gIZTQQ4QA4yGCwUMEoYeIkIeIBg+hhR4iBRgPkQweIgk9RIY8RDZ4CCP0ECXAeIhi8BBF6CEq5CGqwUNYoYdoAcZDNIOHaEIP0SEP0Q0ewgk9xAgwHmIYPMQQeogJeYhp8BBe6CFWgPEQy+AhltBDbMhDbIOHCEIPcQKMhzgGD3GEHuJCHuIaPEQUeogXYDzEM3iIJ/QQH/IQ3+AhktBDggDjIYHBQwKhh4SQh4QGD5GFHhIFGA+JDB4SCT0khjwkNniIIvSQJMB4SGLwkEToISnkIanBQ1Shh2QBxkMyg4dkQg/JIQ/JDR6iCT2kCDAeUhg8pBB6SAl5SGnwEF3oIVWA8ZDK4CGV0ENqyENqg4cYQg9pAoyHNAYPaYQe0kIe0ho8xBR6SBdgPKQzeEgn9JAe8pDe4CGW0EOGAOMhg8FDBqGHjJCHjAYPsYUeMgUYD5kMHjIJPWSGPGQ2eIgj9JAlwHjIYvCQReghK+Qhq8FDXKGHbAHGQzaDh2xCD9khD9kNHuIJPeQIMB5yGDzkEHrICXnIafAQX+ghV4DxkMvgIZfQQ27IQ26DhwRCD3kCjIc8Bg95hB7yQh7yGjwkFHrIF2A85DN4yCf0kB/ykN/gIZHQQ4EA46GAwUMBoYeCkIeCBg+JhR4KBRgPhQweCgk9FIY8FDZ4SCL0UCTAeChi8FBE6KEo5KGowUNSoYdiAcZDMYOHYkIPxSEPxQ0ekgk9lAgwHkoYPJQQeigJeShp8JBc6KFUgPFQyuChlNBDachDaYOHFEIPZQKMhzIGD2WEHspCHsoaPKQUeigXYDyUM3goJ/RQHvJQ3uAhldBDhQDjoYLBQwWhh4qQh4oGD6mFHioFGA+VDB4qCT1UhjxUNnhII/RQJcB4qGLwUEXooSrkoarBQ1qhh2oBxkM1g4dqQg/VIQ/VDR7SCT3UCDAeahg81BB6qAl5qGnwkF7ooVaA8VDL4KGW0ENtyENtg4cMQg91AoyHOgYPdYQe6kIe6ho8ZBR6qBdgPNQzeKgn9FAf8lDf4CGT0EODAOOhgcFDA6GHhpCHhgYPmYUeGgUYD40MHhoJPTSGPDQ2eMgi9NAkwHhoYvDQROihKeShqcFDVqGHZgHGQzODh2ZCD80hD80NHrIJPbQIMB5aGDy0EHpoCXloafCQXeihVYDx0MrgoZXQQ2vIQ2uDhxxCD20CjIc2Bg9thB7aQh7aGjzkFHpoF2A8tDN4aCf00B7y0N7gIZfQQ4cA46GDwUMHoYeOkIeOBg+5hR46BRgPnQweOgk9dIY8dDZ4yCP00CXAeOhi8NBF6KEr5KGrwUNeoYduAcZDN4OHbkIP3SEP3Q0e8gk99AgwHnoYPPQQeugJeehp8JBf6KFXgPHQy+Chl9BDb8hDb4OHAkIPfQKMhz4GD32EHvpCHvoaPBQUeugXYDz0M3joJ/TQH/LQ3+ChkNDDgADjYYDBwwChh4GQh4EGD4WFHgYFGA+DDB4GCT0MhjwMNngoIvQwJMB4GGLwMEToYSjkYajBQ1Ghh2EBxsMwg4dhQg/DIQ/DDR6KCT2MCDAeRhg8jBB6GAl5GGnwUFzoYVSA8TDK4GGU0MNoyMNog4cSQg9jAoyHMQYPY4QexkIexho8lBR6GBdgPIwzeBgn9DAe8jDe4KGU0MOEAONhgsHDBKGHiZCHiQYPpYUeJgUYD5MMHiYJPUyGPEw2eCgj9DAlwHiYYvAwRehhKuRhqsFDWaGHaQHGwzSDh2lCD9MhD9MNHsoJPcwIMB5mGDzMEHqYCXmYafBQXuhhVoDxMMvgYZbQw2zIw2yDhwpCD3MCjIc5Bg9zhB7mQh7mGjxUFHqYF2A8zDN4mCf0MB/yMN/goZLQQyDAeAgYPASEHhZAHhYYPFQWelgYYDwsNHhYKPSwCPKwyOChitDD4gDjYbHBw2KhhyWQhyUGD1WFHpYGGA9LDR6WCj0sgzwsM3ioJvSwPMB4WG7wsFzoYQXkYYXBQ3Whh5UBxsNKg4eVQg+rIA+rDB5qCD2sDjAeVhs8rBZ6WAN5WGPwUFPoYW2A8bDW4GGt0MM6yMM6g4daQg/rA4yH9QYP64UeNkAeNhg81BZ62BhgPGw0eNgo9LAJ8rDJ4KGO0MPmAONhs8HDZqGHLZCHLQYPdYUetgYYD1sNHrYKPWyDPGwzeKgn9LA9wHjYbvCwXehhB+Rhh8FDfaGHnQHGw06Dh51CD7sgD7sMHhoIPewOMB52GzzsFnrYA3nYY/DQUOhhb4DxsNfgYa/Qwz7Iwz6Dh0ZCD/sDjIf9Bg/7hR4OQB4OGDw0Fno4GGA8HDR4OCj0cAjycMjgoYnQw+EA4+GwwcNhoYcjkIcjBg9NhR6OBhgPRw0ejgo9HIM8HDN4aCb0cDzAeDhu8HBc6OEE5OGEwUNzoYeTAcbDSYOHk0IPpyAPpwweWgg9nA4wHk4bPJwWejgDeThj8NBS6OFsgPFw1uDhrNDDOcjDOYOHVkIP5wOMh/MGD+eFHi5AHi4YPLQWergYYDxcNHi4KPRwCfJwyeChjdDD5QDj4bLBw2WhhyuQhysGD22FHq4GGA9XDR6uCj38BXn4y+ChndDDtQDj4ZrBwzWhh78hD38bPLQXergeYDxcN3i4LvTwD+ThH4OHDkIPNwKMhxsGDzeEHm5CHm4aPHQUergVYDzcMni4JfRwG/Jw2+Chk9DDnQDj4Y7Bwx2hh7uQh7sGD52FHu4FGA/3DB7uCT3chzzcN3joIvTwIMB4eGDw8EDo4SHk4aHBQ1ehh0cBxsMjg4dHQg+PIQ+PDR66CT08CTAenhg8PBF6eAp5eGrw0F3o4VmA8fDM4OGZ0MNzyMNzg4ceQg8vAoyHFwYPL4QeXkIeXho89BR6eBVgPLwyeHgl9PAv5OFfg4deQg+vA4yH1wYPr4Ue3kAe3hg89BZ6eBtgPLw1eHgr9PAO8vDO4KGP0MP7AOPhvcHDe6GHD5CHDwYPfYUePgYYDx8NHj4KPXyCPHwyeOgn9PA5wHj4bPDwWejhC+Thi8FDf6GHrwHGw1eDh69CD98gD98MHgYIPXwPMB6+Gzx8F3r4AXn4YfAwUOjhZ4Dx8NPg4afQwy/Iwy+Dh0FCD78tYDz8p0t7+O/t/2vr9wWMh98X8B4GCz0EgTwEMXgIIvTwB+ThD4OHIUIPQSEPQQ0eggo9/Al5+NPgYajQQzDIQzCDh2BCD8EhD8ENHoYJPYSAPIQweAgh9BAS8hDS4GG40EMoyEMog4dQQg+hIQ+hDR5GCD2EgTyEMXgII/QQFvIQ1uBhpNBDOMhDOIOHcEIP4SEP4Q0eRgk9RIA8RDB4iCD0EBHyENHgYbTQQyTIQySDh0hCD5EhD5ENHsYIPUSBPEQxeIgi9BAV8hDV4GGs0EM0yEM0g4doQg/RIQ/RDR7GCT3EgDzEMHiIIfQQE/IQ0+BhvNBDLMhDLIOHWEIPsSEPsQ0eJgg9xIE8xDF4iCP0EBfyENfgYaLQQzzIQzyDh3hCD/EhD/ENHiYJPSSAPCQweEgg9JAQ8pDQ4GGy0EMiyEMig4dEQg+JIQ+JDR6mCD0kgTwkMXhIIvSQFPKQ1OBhqtBDMshDMoOHZEIPySEPyQ0epgk9pIA8pDB4SCH0kBLykNLgYbrQQyrIQyqDh1RCD6khD6kNHmYIPaSBPKQxeEgj9JAW8pDW4GGm0EM6yEM6g4d0Qg/pIQ/pDR5mCT1kgDxkMHjIIPSQEfKQ0eBhttBDJshDJoOHTEIPmSEPmQ0e5gg9ZIE8ZDF4yCL0kBXykNXgYa7QQzbIQzaDh2xCD9khD9kNHuYJPeSAPOQweMgh9JAT8pDT4GG+0EMuyEMug4dcQg+5IQ+5DR4CQg95IA95DB7yCD3khTzkNXhYIPSQD/KQz+Ahn9BDfshDfoOHhUIPBSAPBQweCgg9FIQ8FDR4WCT0UAjyUMjgoZDQQ2HIQ2GDh8VCD0UgD0UMHooIPRSFPBQ1eFgi9FAM8lDM4KGY0ENxyENxg4elQg8lIA8lDB5KCD2UhDyUNHhYJvRQCvJQyuChlNBDachDaYOH5UIPZSAPZQweygg9lIU8lDV4WCH0UA7yUM7goZzQQ3nIQ3mDh5VCDxUgDxUMHioIPVSEPFQ0eFgl9FAJ8lDJ4KGS0ENlyENlg4fVQg9VIA9VDB6qCD1UhTxUNXhYI/RQDfJQzeChmtBDdchDdYOHtUIPNSAPNQweagg91IQ81DR4WCf0UAvyUMvgoZbQQ23IQ22Dh/VCD3UgD3UMHuoIPdSFPNQ1eNgg9FAP8lDP4KGe0EN9yEN9g4eNQg8NIA8NDB4aCD00hDw0NHjYJPTQCPLQyOChkdBDY8hDY4OHzUIPTSAPTQwemgg9NIU8NDV42CL00Azy0MzgoZnQQ3PIQ3ODh61CDy0gDy0MHloIPbSEPLQ0eNgm9NAK8tDK4KGV0ENryENrg4ftQg9tIA9tDB7aCD20hTy0NXjYIfTQDvLQzuChndBDe8hDe4OHnUIPHSAPHQweOgg9dIQ8dDR42CX00Any0MngoZPQQ2fIQ2eDh91CD10gD10MHroIPXSFPHQ1eNgj9NAN8tDN4KGb0EN3yEN3g4e9Qg89IA89DB56CD30hDz0NHjYJ/TQC/LQy+Chl9BDb8hDb4OH/UIPfSAPfQwe+gg99IU89DV4OCD00A/y0M/goZ/QQ3/IQ3+Dh4NCDwMgDwMMHgYIPQyEPAw0eDgk9DAI8jDI4GGQ0MNgyMNgg4fDQg9DIA9DDB6GCD0MhTwMNXg4IvQwDPIwzOBhmNDDcMjDcIOHo0IPIyAPIwweRgg9jIQ8jDR4OCb0MAryMMrgYZTQw2jIw2iDh+NCD2MgD2MMHsYIPYyFPIw1eDgh9DAO8jDO4GGc0MN4yMN4g4eTQg8TIA8TDB4mCD1MhDxMNHg4JfQwCfIwyeBhktDDZMjDZIOH00IPUyAPUwwepgg9TIU8TDV4OCP0MA3yMM3gYZrQw3TIw3SDh7NCDzMgDzMMHmYIPcyEPMw0eDgn9DAL8jDL4GGW0MNsyMNsg4fzQg9zIA9zDB7mCD3MhTzMNXi4IPQwD/Iwz+BhntDDfMjDfIOHi0IPAchDwOAhIPSwAPKwwODhktDDQsjDQoOHhUIPiyAPiwweLgs9LIY8LDZ4WCz0sATysMTg4YrQw1LIw1KDh6VCD8sgD8sMHq4KPSyHPCw3eFgu9LAC8rDC4OEvoYeVkIeVBg8rhR5WQR5WGTxcE3pYDXlYbfCwWuhhDeRhjcHD30IPayEPaw0e1go9rIM8rDN4uC70sB7ysN7gYb3QwwbIwwaDh3+EHjZCHjYaPGwUetgEedhk8HBD6GEz5GGzwcNmoYctkIctBg83hR62Qh62GjxsFXrYBnnYZvBwS+hhO+Rhu8HDdqGHHZCHHQYPt4UedkIedho87BR62AV52GXwcEfoYTfkYbfBw26hhz2Qhz0GD3eFHvZCHvYaPOwVetgHedhn8HBP6GE/5GG/wcN+oYcDkIcDBg/3hR4OQh4OGjwcFHo4BHk4ZPDwQOjhMOThsMHDYaGHI5CHIwYPD4UejkIejho8HBV6OAZ5OGbw8Ejo4Tjk4bjBw3GhhxOQhxMGD4+FHk5CHk4aPJwUejgFeThl8PBE6OE05OG0wcNpoYczkIczBg9PhR7OQh7OGjycFXo4B3k4Z/DwTOjhPOThvMHDeaGHC5CHCwYPz4UeLkIeLho8XBR6uAR5uGTw8ELo4TLk4bLBw2WhhyuQhysGDy+FHq5CHq4aPFwVevgL8vCXwcMroYdrkIdrBg/XhB7+hjz8bfDwr9DDdcjDdYOH60IP/0Ae/jF4eC30cAPycMPg4YbQw03Iw02DhzdCD7cgD7cMHm4JPdyGPNw2eHgr9HAH8nDH4OGO0MNdyMNdg4d3Qg/3IA/3DB7uCT3chzzcN3h4L/TwAPLwwODhgdDDQ8jDQ4OHD0IPjyAPjwweHgk9PIY8PDZ4+Cj08ATy8MTg4YnQw1PIw1ODh09CD88gD88MHp4JPTyHPDw3ePgs9PAC8vDC4OGF0MNLyMNLg4cvQg+vIA+vDB5eCT38C3n41+Dhq9DDa8jDa4OH10IPbyAPbwwevgk9vIU8vDV4eCv08A7y8M7g4bvQw3vIw3uDh/dCDx8gDx8MHn4IPXyEPHw0ePgo9PAJ8vDJ4OGn0MNnyMNng4fPQg9fIA9fDB5+CT18hTx8NXj4KvTwDfLwzeDht5y6P3yHPHw3ePgu9PAD8vDD4OF3oYefkIefBg8/hR5+QR5+GTwEEXr4bSHj4T9d2sN/b/9fW78vZDz8vpD38IfQQxDIQxCDhyBCD39AHv4weAgq9BAU8hDU4CGo0MOfkIc/DR7+FHoIBnkIZvAQTOghOOQhuMFDMKGHEJCHEAYPIYQeQkIeQho8BBd6CAV5CGXwEEroITTkIbTBQwihhzCQhzAGD2GEHsJCHsIaPIQUeggHeQhn8BBO6CE85CG8wUMooYcIkIcIBg8RhB4iQh4iGjyEFnqIBHmIZPAQSeghMuQhssFDGKGHKJCHKAYPUYQeokIeoho8hBV6iAZ5iGbwEE3oITrkIbrBQzihhxiQhxgGDzGEHmJCHmIaPIQXeogFeYhl8BBL6CE25CG2wUMEoYc4kIc4Bg9xhB7iQh7iGjxEFHqIB3mIZ/AQT+ghPuQhvsFDJKGHBJCHBAYPCYQeEkIeEho8RBZ6SAR5SGTwkEjoITHkIbHBQxShhySQhyQGD0mEHpJCHpIaPEQVekgGeUhm8JBM6CE55CG5wUM0oYcUkIcUBg8phB5SQh5SGjxEF3pIBXlIZfCQSughNeQhtcFDDKGHNJCHNAYPaYQe0kIe0ho8xBR6SAd5SGfwkE7oIT3kIb3BQyyhhwyQhwwGDxmEHjJCHjIaPMQWesgEechk8JBJ6CEz5CGzwUMcoYcskIcsBg9ZhB6yQh6yGjzEFXrIBnnIZvCQTeghO+Qhu8FDPKGHHJCHHAYPOYQeckIecho8xBd6yAV5yGXwkEvoITfkIbfBQwKhhzyQhzwGD3mEHvJCHvIaPCQUesgHechn8JBP6CE/5CG/wUMioYcCkIcCBg8FhB4KQh4KGjwkFnooBHkoZPBQSOihMOShsMFDEqGHIpCHIgYPRYQeikIeiho8JBV6KAZ5KGbwUEzooTjkobjBQzKhhxKQhxIGDyWEHkpCHkoaPCQXeigFeShl8FBK6KE05KG0wUMKoYcykIcyBg9lhB7KQh7KGjykFHooB3koZ/BQTuihPOShvMFDKqGHCpCHCgYPFYQeKkIeKho8pBZ6qAR5qGTwUEnooTLkobLBQxqhhyqQhyoGD1WEHqpCHqoaPKQVeqgGeahm8FBN6KE65KG6wUM6oYcakIcaBg81hB5qQh5qGjykF3qoBXmoZfBQS+ihNuShtsFDBqGHOpCHOgYPdYQe6kIe6ho8ZBR6qAd5qGfwUE/ooT7kob7BQyahhwaQhwYGDw2EHhpCHhoaPGQWemgEeWhk8NBI6KEx5KGxwUMWoYcmkIcmBg9NhB6aQh6aGjxkFXpoBnloZvDQTOihOeShucFDNqGHFpCHFgYPLYQeWkIeWho8ZBd6aAV5aGXw0ErooTXkobXBQw6hhzaQhzYGD22EHtpCHtoaPOQUemgHeWhn8NBO6KE95KG9wUMuoYcOkIcOBg8dhB46Qh46GjzkFnroBHnoZPDQSeihM+Shs8FDHqGHLpCHLgYPXYQeukIeuho85BV66AZ56Gbw0E3ooTvkobvBQz6hhx6Qhx4GDz2EHnpCHnoaPOQXeugFeehl8NBL6KE35KG3wUMBoYc+kIc+Bg99hB76Qh76GjwUFHroB3noZ/DQT+ihP+Shv8FDIaGHAZCHAQYPA4QeBkIeBho8FBZ6GAR5GGTwMEjoYTDkYbDBQxGhhyGQhyEGD0OEHoZCHoYaPBQVehgGeRhm8DBM6GE45GG4wUMxoYcRkIcRBg8jhB5GQh5GGjwUF3oYBXkYZfAwSuhhNORhtMFDCaGHMZCHMQYPY4QexkIexho8lBR6GAd5GGfwME7oYTzkYbzBQymhhwmQhwkGDxOEHiZCHiYaPJQWepgEeZhk8DBJ6GEy5GGywUMZoYcpkIcpBg9ThB6mQh6mGjyUFXqYBnmYZvAwTehhOuRhusFDOaGHGZCHGQYPM4QeZkIeZho8lBd6mAV5mGXwMEvoYTbkYbbBQwWhhzmQhzkGD3OEHuZCHuYaPFQUepgHeZhn8DBP6GE+5GG+wUMloYcA5CFg8BAQelgAeVhg8FBZ6GEh5GGhwcNCoYdFkIdFBg9VhB4WQx4WGzwsFnpYAnlYYvBQVehhKeRhqcHDUqGHZZCHZQYP1YQelkMelhs8LBd6WAF5WGHwUF3oYSXkYaXBw0qhh1WQh1UGDzWEHlZDHlYbPKwWelgDeVhj8FBT6GEt5GGtwcNaoYd1kId1Bg+1hB7WQx7WGzysF3rYAHnYYPBQW+hhI+Rho8HDRqGHTZCHTQYPdYQeNkMeNhs8bBZ62AJ52GLwUFfoYSvkYavBw1ahh22Qh20GD/WEHrZDHrYbPGwXetgBedhh8FBf6GEn5GGnwcNOoYddkIddBg8NhB52Qx52GzzsFnrYA3nYY/DQUOhhL+Rhr8HDXqGHfZCHfQYPjYQe9kMe9hs87Bd6OAB5OGDw0Fjo4SDk4aDBw0Ghh0OQh0MGD02EHg5DHg4bPBwWejgCeThi8NBU6OEo5OGowcNRoYdjkIdjBg/NhB6OQx6OGzwcF3o4AXk4YfDQXOjhJOThpMHDSaGHU5CHUwYPLYQeTkMeThs8nBZ6OAN5OGPw0FLo4Szk4azBw1mhh3OQh3MGD62EHs5DHs4bPJwXergAebhg8NBa6OEi5OGiwcNFoYdLkIdLBg9thB4uQx4uGzxcFnq4Anm4YvDQVujhKuThqsHDVaGHvyAPfxk8tBN6uAZ5uGbwcE3o4W/Iw98GD+2FHq5DHq4bPFwXevgH8vCPwUMHoYcbkIcbBg83hB5uQh5uGjx0FHq4BXm4ZfBwS+jhNuThtsFDJ6GHO5CHOwYPd4Qe7kIe7ho8dBZ6uAd5uGfwcE/o4T7k4b7BQxehhweQhwcGDw+EHh5CHh4aPHQVengEeXhk8PBI6OEx5OGxwUM3oYcnkIcnBg9PhB6eQh6eGjx0F3p4Bnl4ZvDwTOjhOeThucFDD6GHF5CHFwYPL4QeXkIeXho89BR6eAV5eGXw8Ero4V/Iw78GD72EHl5DHl4bPLwWengDeXhj8NBb6OEt5OGtwcNboYd3kId3Bg99hB7eQx7eGzy8F3r4AHn4YPDQV+jhI+Tho8HDR6GHT5CHTwYP/YQePkMePhs8fBZ6+AJ5+GLw0F/o4Svk4avBw1ehh2+Qh28GDwOEHr5DHr4bPHwXevgBefhh8DBQ6OEn5OGnwcNPoYdfkIdfBg+DhB5+W8R4+E+X9vDf2//X1u+LGA+/L+I9DBZ6CAJ5CGLwEETo4Q/Iwx8GD0OEHoJCHoIaPAQVevgT8vCnwcNQoYdgkIdgBg/BhB6CQx6CGzwME3oIAXkIYfAQQughJOQhpMHDcKGHUJCHUAYPoYQeQkMeQhs8jBB6CAN5CGPwEEboISzkIazBw0ihh3CQh3AGD+GEHsJDHsIbPIwSeogAeYhg8BBB6CEi5CGiwcNooYdIkIdIBg+RhB4iQx4iGzyMEXqIAnmIYvAQReghKuQhqsHDWKGHaJCHaAYP0YQeokMeohs8jBN6iAF5iGHwEEPoISbkIabBw3ihh1iQh1gGD7GEHmJDHmIbPEwQeogDeYhj8BBH6CEu5CGuwcNEoYd4kId4Bg/xhB7iQx7iGzxMEnpIAHlIYPCQQOghIeQhocHDZKGHRJCHRAYPiYQeEkMeEhs8TBF6SAJ5SGLwkEToISnkIanBw1Shh2SQh2QGD8mEHpJDHpIbPEwTekgBeUhh8JBC6CEl5CGlwcN0oYdUkIdUBg+phB5SQx5SGzzMEHpIA3lIY/CQRughLeQhrcHDTKGHdJCHdAYP6YQe0kMe0hs8zBJ6yAB5yGDwkEHoISPkIaPBw2yhh0yQh0wGD5mEHjJDHjIbPMwResgCechi8JBF6CEr5CGrwcNcoYdskIdsBg/ZhB6yQx6yGzzME3rIAXnIYfCQQ+ghJ+Qhp8HDfKGHXJCHXAYPuYQeckMechs8BIQe8kAe8hg85BF6yAt5yGvwsEDoIR/kIZ/BQz6hh/yQh/wGDwuFHgpAHgoYPBQQeigIeSho8LBI6KEQ5KGQwUMhoYfCkIfCBg+LhR6KQB6KGDwUEXooCnkoavCwROihGOShmMFDMaGH4pCH4gYPS4UeSkAeShg8lBB6KAl5KGnwsEzooRTkoZTBQymhh9KQh9IGD8uFHspAHsoYPJQReigLeShr8LBC6KEc5KGcwUM5oYfykIfyBg8rhR4qQB4qGDxUEHqoCHmoaPCwSuihEuShksFDJaGHypCHygYPq4UeqkAeqhg8VBF6qAp5qGrwsEbooRrkoZrBQzWhh+qQh+oGD2uFHmpAHmoYPNQQeqgJeahp8LBO6KEW5KGWwUMtoYfakIfaBg/rhR7qQB7qGDzUEXqoC3moa/CwQeihHuShnsFDPaGH+pCH+gYPG4UeGkAeGhg8NBB6aAh5aGjwsEnooRHkoZHBQyOhh8aQh8YGD5uFHppAHpoYPDQRemgKeWhq8LBF6KEZ5KGZwUMzoYfmkIfmBg9bhR5aQB5aGDy0EHpoCXloafCwTeihFeShlcFDK6GH1pCH1gYP24Ue2kAe2hg8tBF6aAt5aGvwsEPooR3koZ3BQzuhh/aQh/YGDzuFHjpAHjoYPHQQeugIeeho8LBL6KET5KGTwUMnoYfOkIfOBg+7hR66QB66GDx0EXroCnnoavCwR+ihG+Shm8FDN6GH7pCH7gYPe4UeekAeehg89BB66Al56GnwsE/ooRfkoZfBQy+hh96Qh94GD/uFHvpAHvoYPPQReugLeehr8HBA6KEf5KGfwUM/oYf+kIf+Bg8HhR4GQB4GGDwMEHoYCHkYaPBwSOhhEORhkMHDIKGHwZCHwQYPh4UehkAehhg8DBF6GAp5GGrwcEToYRjkYZjBwzChh+GQh+EGD0eFHkZAHkYYPIwQehgJeRhp8HBM6GEU5GGUwcMooYfRkIfRBg/HhR7GQB7GGDyMEXoYC3kYa/BwQuhhHORhnMHDOKGH8ZCH8QYPJ4UeJkAeJhg8TBB6mAh5mGjwcEroYRLkYZLBwyShh8mQh8kGD6eFHqZAHqYYPEwRepgKeZhq8HBG6GEa5GGawcM0oYfpkIfpBg9nhR5mQB5mGDzMEHqYCXmYafBwTuhhFuRhlsHDLKGH2ZCH2QYP54Ue5kAe5hg8zBF6mAt5mGvwcEHoYR7kYZ7Bwzyhh/mQh/kGDxeFHgKQh4DBQ0DoYQHkYYHBwyWhh4WQh4UGDwuFHhZBHhYZPFwWelgMeVhs8LBY6GEJ5GGJwcMVoYelkIelBg9LhR6WQR6WGTxcFXpYDnlYbvCwXOhhBeRhhcHDX0IPKyEPKw0eVgo9rII8rDJ4uCb0sBrysNrgYbXQwxrIwxqDh7+FHtZCHtYaPKwVelgHeVhn8HBd6GE95GG9wcN6oYcNkIcNBg//CD1shDxsNHjYKPSwCfKwyeDhhtDDZsjDZoOHzUIPWyAPWwwebgo9bIU8bDV42Cr0sA3ysM3g4ZbQw3bIw3aDh+1CDzsgDzsMHm4LPeyEPOw0eNgp9LAL8rDL4OGO0MNuyMNug4fdQg97IA97DB7uCj3shTzsNXjYK/SwD/Kwz+DhntDDfsjDfoOH/UIPByAPBwwe7gs9HIQ8HDR4OCj0cAjycMjg4YHQw2HIw2GDh8NCD0cgD0cMHh4KPRyFPBw1eDgq9HAM8nDM4OGR0MNxyMNxg4fjQg8nIA8nDB4eCz2chDycNHg4KfRwCvJwyuDhidDDacjDaYOH00IPZyAPZwwengo9nIU8nDV4OCv0cA7ycM7g4ZnQw3nIw3mDh/NCDxcgDxcMHp4LPVyEPFw0eLgo9HAJ8nDJ4OGF0MNlyMNlg4fLQg9XIA9XDB5eCj1chTxcNXi4KvTwF+ThL4OHV0IP1yAP1wwergk9/A15+Nvg4V+hh+uQh+sGD9eFHv6BPPxj8PBa6OEG5OGGwcMNoYebkIebBg9vhB5uQR5uGTzcEnq4DXm4bfDwVujhDuThjsHDHaGHu5CHuwYP74Qe7kEe7hk83BN6uA95uG/w8F7o4QHk4YHBwwOhh4eQh4cGDx+EHh5BHh4ZPDwSengMeXhs8PBR6OEJ5OGJwcMToYenkIenBg+fhB6eQR6eGTw8E3p4Dnl4bvDwWejhBeThhcHDC6GHl5CHlwYPX4QeXkEeXhk8vBJ6+Bfy8K/Bw1ehh9eQh9cGD6+FHt5AHt4YPHwTengLeXhr8PBW6OEd5OGdwcN3oYf3kIf3Bg/vhR4+QB4+GDz8EHr4CHn4aPDwUejhE+Thk8HDT6GHz5CHzwYPn4UevkAevhg8/BJ6+Ap5+Grw8FXo4Rvk4ZvBw2+5dH/4Dnn4bvDwXejhB+Thh8HD70IPPyEPPw0efgo9/II8/DJ4CCL08NtixsN/urSH/97+v7Z+X8x4+H0x7+EPoYcgkIcgBg9BhB7+gDz8YfAQVOghKOQhqMFDUKGHPyEPfxo8/Cn0EAzyEMzgIZjQQ3DIQ3CDh2BCDyEgDyEMHkIIPYSEPIQ0eAgu9BAK8hDK4CGU0ENoyENog4cQQg9hIA9hDB7CCD2EhTyENXgIKfQQDvIQzuAhnNBDeMhDeIOHUEIPESAPEQweIgg9RIQ8RDR4CC30EAnyEMngIZLQQ2TIQ2SDhzBCD1EgD1EMHqIIPUSFPEQ1eAgr9BAN8hDN4CGa0EN0yEN0g4dwQg8xIA8xDB5iCD3EhDzENHgIL/QQC/IQy+AhltBDbMhDbIOHCEIPcSAPcQwe4gg9xIU8xDV4iCj0EA/yEM/gIZ7QQ3zIQ3yDh0hCDwkgDwkMHhIIPSSEPCQ0eIgs9JAI8pDI4CGR0ENiyENig4coQg9JIA9JDB6SCD0khTwkNXiIKvSQDPKQzOAhmdBDcshDcoOHaEIPKSAPKQweUgg9pIQ8pDR4iC70kArykMrgIZXQQ2rIQ2qDhxhCD2kgD2kMHtIIPaSFPKQ1eIgp9JAO8pDO4CGd0EN6yEN6g4dYQg8ZIA8ZDB4yCD1khDxkNHiILfSQCfKQyeAhk9BDZshDZoOHOEIPWSAPWQwesgg9ZIU8ZDV4iCv0kA3ykM3gIZvQQ3bIQ3aDh3hCDzkgDzkMHnIIPeSEPOQ0eIgv9JAL8pDL4CGX0ENuyENug4cEQg95IA95DB7yCD3khTzkNXhIKPSQD/KQz+Ahn9BDfshDfoOHREIPBSAPBQweCgg9FIQ8FDR4SCz0UAjyUMjgoZDQQ2HIQ2GDhyRCD0UgD0UMHooIPRSFPBQ1eEgq9FAM8lDM4KGY0ENxyENxg4dkQg8lIA8lDB5KCD2UhDyUNHhILvRQCvJQyuChlNBDachDaYOHFEIPZSAPZQweygg9lIU8lDV4SCn0UA7yUM7goZzQQ3nIQ3mDh1RCDxUgDxUMHioIPVSEPFQ0eEgt9FAJ8lDJ4KGS0ENlyENlg4c0Qg9VIA9VDB6qCD1UhTxUNXhIK/RQDfJQzeChmtBDdchDdYOHdEIPNSAPNQweagg91IQ81DR4SC/0UAvyUMvgoZbQQ23IQ22DhwxCD3UgD3UMHuoIPdSFPNQ1eMgo9FAP8lDP4KGe0EN9yEN9g4dMQg8NIA8NDB4aCD00hDw0NHjILPTQCPLQyOChkdBDY8hDY4OHLEIPTSAPTQwemgg9NIU8NDV4yCr00Azy0MzgoZnQQ3PIQ3ODh2xCDy0gDy0MHloIPbSEPLQ0eMgu9NAK8tDK4KGV0ENryENrg4ccQg9tIA9tDB7aCD20hTy0NXjIKfTQDvLQzuChndBDe8hDe4OHXEIPHSAPHQweOgg9dIQ8dDR4yC300Any0MngoZPQQ2fIQ2eDhzxCD10gD10MHroIPXSFPHQ1eMgr9NAN8tDN4KGb0EN3yEN3g4d8Qg89IA89DB56CD30hDz0NHjIL/TQC/LQy+Chl9BDb8hDb4OHAkIPfSAPfQwe+gg99IU89DV4KCj00A/y0M/goZ/QQ3/IQ3+Dh0JCDwMgDwMMHgYIPQyEPAw0eCgs9DAI8jDI4GGQ0MNgyMNgg4ciQg9DIA9DDB6GCD0MhTwMNXgoKvQwDPIwzOBhmNDDcMjDcIOHYkIPIyAPIwweRgg9jIQ8jDR4KC70MAryMMrgYZTQw2jIw2iDhxJCD2MgD2MMHsYIPYyFPIw1eCgp9DAO8jDO4GGc0MN4yMN4g4dSQg8TIA8TDB4mCD1MhDxMNHgoLfQwCfIwyeBhktDDZMjDZIOHMkIPUyAPUwwepgg9TIU8TDV4KCv0MA3yMM3gYZrQw3TIw3SDh3JCDzMgDzMMHmYIPcyEPMw0eCgv9DAL8jDL4GGW0MNsyMNsg4cKQg9zIA9zDB7mCD3MhTzMNXioKPQwD/Iwz+BhntDDfMjDfIOHSkIPAchDwOAhIPSwAPKwwOChstDDQsjDQoOHhUIPiyAPiwweqgg9LIY8LDZ4WCz0sATysMTgoarQw1LIw1KDh6VCD8sgD8sMHqoJPSyHPCw3eFgu9LAC8rDC4KG60MNKyMNKg4eVQg+rIA+rDB5qCD2shjysNnhYLfSwBvKwxuChptDDWsjDWoOHtUIP6yAP6wweagk9rIc8rDd4WC/0sAHysMHgobbQw0bIw0aDh41CD5sgD5sMHuoIPWyGPGw2eNgs9LAF8rDF4KGu0MNWyMNWg4etQg/bIA/bDB7qCT1shzxsN3jYLvSwA/Kww+ChvtDDTsjDToOHnUIPuyAPuwweGgg97IY87DZ42C30sAfysMfgoaHQw17Iw16Dh71CD/sgD/sMHhoJPeyHPOw3eNgv9HAA8nDA4KGx0MNByMNBg4eDQg+HIA+HDB6aCD0chjwcNng4LPRwBPJwxOChqdDDUcjDUYOHo0IPxyAPxwwemgk9HIc8HDd4OC70cALycMLgobnQw0nIw0mDh5NCD6cgD6cMHloIPZyGPJw2eDgt9HAG8nDG4KGl0MNZyMNZg4ezQg/nIA/nDB5aCT2chzycN3g4L/RwAfJwweChtdDDRcjDRYOHi0IPlyAPlwwe2gg9XIY8XDZ4uCz0cAXycMXgoa3Qw1XIw1WDh6tCD39BHv4yeGgn9HAN8nDN4OGa0MPfkIe/DR7aCz1chzxcN3i4LvTwD+ThH4OHDkIPNyAPNwwebgg93IQ83DR46Cj0cAvycMvg4ZbQw23Iw22Dh05CD3cgD3cMHu4IPdyFPNw1eOgs9HAP8nDP4OGe0MN9yMN9g4cuQg8PIA8PDB4eCD08hDw8NHjoKvTwCPLwyODhkdDDY8jDY4OHbkIPTyAPTwwengg9PIU8PDV46C708Azy8Mzg4ZnQw3PIw3ODhx5CDy8gDy8MHl4IPbyEPLw0eOgp9PAK8vDK4OGV0MO/kId/DR56CT28hjy8Nnh4LfTwBvLwxuCht9DDW8jDW4OHt0IP7yAP7wwe+gg9vIc8vDd4eC/08AHy8MHgoa/Qw0fIw0eDh49CD58gD58MHvoJPXyGPHw2ePgs9PAF8vDF4KG/0MNXyMNXg4evQg/fIA/fDB4GCD18hzx8N3j4LvTwA/Lww+BhoNDDT8jDT4OHn0IPvyAPvwweBgk9/LaE8fCfLu3hv7f/r63flzAefl/Cexgs9BAE8hDE4CGI0MMfkIc/DB6GCD0EhTwENXgIKvTwJ+ThT4OHoUIPwSAPwQweggk9BIc8BDd4GCb0EALyEMLgIYTQQ0jIQ0iDh+FCD6EgD6EMHkIJPYSGPIQ2eBgh9BAG8hDG4CGM0ENYyENYg4eRQg/hIA/hDB7CCT2EhzyEN3gYJfQQAfIQweAhgtBDRMhDRIOH0UIPkSAPkQweIgk9RIY8RDZ4GCP0EAXyEMXgIYrQQ1TIQ1SDh7FCD9EgD9EMHqIJPUSHPEQ3eBgn9BAD8hDD4CGG0ENMyENMg4fxQg+xIA+xDB5iCT3EhjzENniYIPQQB/IQx+AhjtBDXMhDXIOHiUIP8SAP8Qwe4gk9xIc8xDd4mCT0kADykMDgIYHQQ0LIQ0KDh8lCD4kgD4kMHhIJPSSGPCQ2eJgi9JAE8pDE4CGJ0ENSyENSg4epQg/JIA/JDB6SCT0khzwkN3iYJvSQAvKQwuAhhdBDSshDSoOH6UIPqSAPqQweUgk9pIY8pDZ4mCH0kAbykMbgIY3QQ1rIQ1qDh5lCD+kgD+kMHtIJPaSHPKQ3eJgl9JAB8pDB4CGD0ENGyENGg4fZQg+ZIA+ZDB4yCT1khjxkNniYI/SQBfKQxeAhi9BDVshDVoOHuUIP2SAP2Qwesgk9ZIc8ZDd4mCf0kAPykMPgIYfQQ07IQ06Dh/lCD7kgD7kMHnIJPeSGPOQ2eAgIPeSBPOQxeMgj9JAX8pDX4GGB0EM+yEM+g4d8Qg/5IQ/5DR4WCj0UgDwUMHgoIPRQEPJQ0OBhkdBDIchDIYOHQkIPhSEPhQ0eFgs9FIE8FDF4KCL0UBTyUNTgYYnQQzHIQzGDh2JCD8UhD8UNHpYKPZSAPJQweCgh9FAS8lDS4GGZ0EMpyEMpg4dSQg+lIQ+lDR6WCz2UgTyUMXgoI/RQFvJQ1uBhhdBDOchDOYOHckIP5SEP5Q0eVgo9VIA8VDB4qCD0UBHyUNHgYZXQQyXIQyWDh0pCD5UhD5UNHlYLPVSBPFQxeKgi9FAV8lDV4GGN0EM1yEM1g4dqQg/VIQ/VDR7WCj3UgDzUMHioIfRQE/JQ0+BhndBDLchDLYOHWkIPtSEPtQ0e1gs91IE81DF4qCP0UBfyUNfgYYPQQz3IQz2Dh3pCD/UhD/UNHjYKPTSAPDQweGgg9NAQ8tDQ4GGT0EMjyEMjg4dGQg+NIQ+NDR42Cz00gTw0MXhoIvTQFPLQ1OBhi9BDM8hDM4OHZkIPzSEPzQ0etgo9tIA8tDB4aCH00BLy0NLgYZvQQyvIQyuDh1ZCD60hD60NHrYLPbSBPLQxeGgj9NAW8tDW4GGH0EM7yEM7g4d2Qg/tIQ/tDR52Cj10gDx0MHjoIPTQEfLQ0eBhl9BDJ8hDJ4OHTkIPnSEPnQ0edgs9dIE8dDF46CL00BXy0NXgYY/QQzfIQzeDh25CD90hD90NHvYKPfSAPPQweOgh9NAT8tDT4GGf0EMvyEMvg4deQg+9IQ+9DR72Cz30gTz0MXjoI/TQF/LQ1+DhgNBDP8hDP4OHfkIP/SEP/Q0eDgo9DIA8DDB4GCD0MBDyMNDg4ZDQwyDIwyCDh0FCD4MhD4MNHg4LPQyBPAwxeBgi9DAU8jDU4OGI0MMwyMMwg4dhQg/DIQ/DDR6OCj2MgDyMMHgYIfQwEvIw0uDhmNDDKMjDKIOHUUIPoyEPow0ejgs9jIE8jDF4GCP0MBbyMNbg4YTQwzjIwziDh3FCD+MhD+MNHk4KPUyAPEwweJgg9DAR8jDR4OGU0MMkyMMkg4dJQg+TIQ+TDR5OCz1MgTxMMXiYIvQwFfIw1eDhjNDDNMjDNIOHaUIP0yEP0w0ezgo9zIA8zDB4mCH0MBPyMNPg4ZzQwyzIwyyDh1lCD7MhD7MNHs4LPcyBPMwxeJgj9DAX8jDX4OGC0MM8yMM8g4d5Qg/zIQ/zDR4uCj0EIA8Bg4eA0MMCyMMCg4dLQg8LIQ8LDR4WCj0sgjwsMni4LPSwGPKw2OBhsdDDEsjDEoOHK0IPSyEPSw0elgo9LIM8LDN4uCr0sBzysNzgYbnQwwrIwwqDh7+EHlZCHlYaPKwUelgFeVhl8HBN6GE15GG1wcNqoYc1kIc1Bg9/Cz2shTysNXhYK/SwDvKwzuDhutDDesjDeoOH9UIPGyAPGwwe/hF62Ah52GjwsFHoYRPkYZPBww2hh82Qh80GD5uFHrZAHrYYPNwUetgKedhq8LBV6GEb5GGbwcMtoYftkIftBg/bhR52QB52GDzcFnrYCXnYafCwU+hhF+Rhl8HDHaGH3ZCH3QYPu4Ue9kAe9hg83BV62At52GvwsFfoYR/kYZ/Bwz2hh/2Qh/0GD/uFHg5AHg4YPNwXejgIeTho8HBQ6OEQ5OGQwcMDoYfDkIfDBg+HhR6OQB6OGDw8FHo4Cnk4avBwVOjhGOThmMHDI6GH45CH4wYPx4UeTkAeThg8PBZ6OAl5OGnwcFLo4RTk4ZTBwxOhh9OQh9MGD6eFHs5AHs4YPDwVejgLeThr8HBW6OEc5OGcwcMzoYfzkIfzBg/nhR4uQB4uGDw8F3q4CHm4aPBwUejhEuThksHDC6GHy5CHywYPl4UerkAerhg8vBR6uAp5uGrwcFXo4S/Iw18GD6+EHq5BHq4ZPFwTevgb8vC3wcO/Qg/XIQ/XDR6uCz38A3n4x+DhtdDDDcjDDYOHG0IPNyEPNw0e3gg93II83DJ4uCX0cBvycNvg4a3Qwx3Iwx2DhztCD3chD3cNHt4JPdyDPNwzeLgn9HAf8nDf4OG90MMDyMMDg4cHQg8PIQ8PDR4+CD08gjw8Mnh4JPTwGPLw2ODho9DDE8jDE4OHJ0IPTyEPTw0ePgk9PIM8PDN4eCb08Bzy8Nzg4bPQwwvIwwuDhxdCDy8hDy8NHr4IPbyCPLwyeHgl9PAv5OFfg4evQg+vIQ+vDR5eCz28gTy8MXj4JvTwFvLw1uDhrdDDO8jDO4OH70IP7yEP7w0e3gs9fIA8fDB4+CH08BHy8NHg4aPQwyfIwyeDh59CD58hD58NHj4LPXyBPHwxePgl9PAV8vDV4OGr0MM3yMM3g4ffcuv+8B3y8N3g4bvQww/Iww+Dh9+FHn5CHn4aPPwUevgFefhl8BBE6OG3pYyH/3RpD/+9/X9t/b6U8fD7Ut7DH0IPQSAPQQweggg9/AF5+MPgIajQQ1DIQ1CDh6BCD39CHv40ePhT6CEY5CGYwUMwoYfgkIfgBg/BhB5CQB5CGDyEEHoICXkIafAQXOghFOQhlMFDKKGH0JCH0AYPIYQewkAewhg8hBF6CAt5CGvwEFLoIRzkIZzBQzihh/CQh/AGD6GEHiJAHiIYPEQQeogIeYho8BBa6CES5CGSwUMkoYfIkIfIBg9hhB6iQB6iGDxEEXqICnmIavAQVughGuQhmsFDNKGH6JCH6AYP4YQeYkAeYhg8xBB6iAl5iGnwEF7oIRbkIZbBQyyhh9iQh9gGDxGEHuJAHuIYPMQReogLeYhr8BBR6CEe5CGewUM8oYf4kIf4Bg+RhB4SQB4SGDwkEHpICHlIaPAQWeghEeQhkcFDIqGHxJCHxAYPUYQekkAekhg8JBF6SAp5SGrwEFXoIRnkIZnBQzKhh+SQh+QGD9GEHlJAHlIYPKQQekgJeUhp8BBd6CEV5CGVwUMqoYfUkIfUBg8xhB7SQB7SGDykEXpIC3lIa/AQU+ghHeQhncFDOqGH9JCH9AYPsYQeMkAeMhg8ZBB6yAh5yGjwEFvoIRPkIZPBQyahh8yQh8wGD3GEHrJAHrIYPGQResgKechq8BBX6CEb5CGbwUM2oYfskIfsBg/xhB5yQB5yGDzkEHrICXnIafAQX+ghF+Qhl8FDLqGH3JCH3AYPCYQe8kAe8hg85BF6yAt5yGvwkFDoIR/kIZ/BQz6hh/yQh/wGD4mEHgpAHgoYPBQQeigIeSho8JBY6KEQ5KGQwUMhoYfCkIfCBg9JhB6KQB6KGDwUEXooCnkoavCQVOihGOShmMFDMaGH4pCH4gYPyYQeSkAeShg8lBB6KAl5KGnwkFzooRTkoZTBQymhh9KQh9IGDymEHspAHsoYPJQReigLeShr8JBS6KEc5KGcwUM5oYfykIfyBg+phB4qQB4qGDxUEHqoCHmoaPCQWuihEuShksFDJaGHypCHygYPaYQeqkAeqhg8VBF6qAp5qGrwkFbooRrkoZrBQzWhh+qQh+oGD+mEHmpAHmoYPNQQeqgJeahp8JBe6KEW5KGWwUMtoYfakIfaBg8ZhB7qQB7qGDzUEXqoC3moa/CQUeihHuShnsFDPaGH+pCH+gYPmYQeGkAeGhg8NBB6aAh5aGjwkFnooRHkoZHBQyOhh8aQh8YGD1mEHppAHpoYPDQRemgKeWhq8JBV6KEZ5KGZwUMzoYfmkIfmBg/ZhB5aQB5aGDy0EHpoCXloafCQXeihFeShlcFDK6GH1pCH1gYPOYQe2kAe2hg8tBF6aAt5aGvwkFPooR3koZ3BQzuhh/aQh/YGD7mEHjpAHjoYPHQQeugIeeho8JBb6KET5KGTwUMnoYfOkIfOBg95hB66QB66GDx0EXroCnnoavCQV+ihG+Shm8FDN6GH7pCH7gYP+YQeekAeehg89BB66Al56GnwkF/ooRfkoZfBQy+hh96Qh94GDwWEHvpAHvoYPPQReugLeehr8FBQ6KEf5KGfwUM/oYf+kIf+Bg+FhB4GQB4GGDwMEHoYCHkYaPBQWOhhEORhkMHDIKGHwZCHwQYPRYQehkAehhg8DBF6GAp5GGrwUFToYRjkYZjBwzChh+GQh+EGD8WEHkZAHkYYPIwQehgJeRhp8FBc6GEU5GGUwcMooYfRkIfRBg8lhB7GQB7GGDyMEXoYC3kYa/BQUuhhHORhnMHDOKGH8ZCH8QYPpYQeJkAeJhg8TBB6mAh5mGjwUFroYRLkYZLBwyShh8mQh8kGD2WEHqZAHqYYPEwRepgKeZhq8FBW6GEa5GGawcM0oYfpkIfpBg/lhB5mQB5mGDzMEHqYCXmYafBQXuhhFuRhlsHDLKGH2ZCH2QYPFYQe5kAe5hg8zBF6mAt5mGvwUFHoYR7kYZ7Bwzyhh/mQh/kGD5WEHgKQh4DBQ0DoYQHkYYHBQ2Whh4WQh4UGDwuFHhZBHhYZPFQRelgMeVhs8LBY6GEJ5GGJwUNVoYelkIelBg9LhR6WQR6WGTxUE3pYDnlYbvCwXOhhBeRhhcFDdaGHlZCHlQYPK4UeVkEeVhk81BB6WA15WG3wsFroYQ3kYY3BQ02hh7WQh7UGD2uFHtZBHtYZPNQSelgPeVhv8LBe6GED5GGDwUNtoYeNkIeNBg8bhR42QR42GTzUEXrYDHnYbPCwWehhC+Rhi8FDXaGHrZCHrQYPW4UetkEethk81BN62A552G7wsF3oYQfkYYfBQ32hh52Qh50GDzuFHnZBHnYZPDQQetgNedht8LBb6GEP5GGPwUNDoYe9kIe9Bg97hR72QR72GTw0EnrYD3nYb/CwX+jhAOThgMFDY6GHg5CHgwYPB4UeDkEeDhk8NBF6OAx5OGzwcFjo4Qjk4YjBQ1Ohh6OQh6MGD0eFHo5BHo4ZPDQTejgOeThu8HBc6OEE5OGEwUNzoYeTkIeTBg8nhR5OQR5OGTy0EHo4DXk4bfBwWujhDOThjMFDS6GHs5CHswYPZ4UezkEezhk8tBJ6OA95OG/wcF7o4QLk4YLBQ2uhh4uQh4sGDxeFHi5BHi4ZPLQRergMebhs8HBZ6OEK5OGKwUNboYerkIerBg9XhR7+gjz8ZfDQTujhGuThmsHDNaGHvyEPfxs8tBd6uA55uG7wcF3o4R/Iwz8GDx2EHm5AHm4YPNwQergJebhp8NBR6OEW5OGWwcMtoYfbkIfbBg+dhB7uQB7uGDzcEXq4C3m4a/DQWejhHuThnsHDPaGH+5CH+wYPXYQeHkAeHhg8PBB6eAh5eGjw0FXo4RHk4ZHBwyOhh8eQh8cGD92EHp5AHp4YPDwRengKeXhq8NBd6OEZ5OGZwcMzoYfnkIfnBg89hB5eQB5eGDy8EHp4CXl4afDQU+jhFeThlcHDK6GHfyEP/xo89BJ6eA15eG3w8Fro4Q3k4Y3BQ2+hh7eQh7cGD2+FHt5BHt4ZPPQRengPeXhv8PBe6OED5OGDwUNfoYePkIePBg8fhR4+QR4+GTz0E3r4DHn4bPDwWejhC+Thi8FDf6GHr5CHrwYPX4UevkEevhk8DBB6+A55+G7w8F3o4Qfk4YfBw0Chh5+Qh58GDz+FHn5BHn4ZPAwSevhtGePhP13aw39v/19bvy9jPPy+jPcwWOghCOQhiMFDEKGHPyAPfxg8DBF6CAp5CGrwEFTo4U/Iw58GD0OFHoJBHoIZPAQTeggOeQhu8DBM6CEE5CGEwUMIoYeQkIeQBg/DhR5CQR5CGTyEEnoIDXkIbfAwQughDOQhjMFDGKGHsJCHsAYPI4UewkEewhk8hBN6CA95CG/wMEroIQLkIYLBQwShh4iQh4gGD6OFHiJBHiIZPEQSeogMeYhs8DBG6CEK5CGKwUMUoYeokIeoBg9jhR6iQR6iGTxEE3qIDnmIbvAwTughBuQhhsFDDKGHmJCHmAYP44UeYkEeYhk8xBJ6iA15iG3wMEHoIQ7kIY7BQxyhh7iQh7gGDxOFHuJBHuIZPMQTeogPeYhv8DBJ6CEB5CGBwUMCoYeEkIeEBg+ThR4SQR4SGTwkEnpIDHlIbPAwReghCeQhicFDEqGHpJCHpAYPU4UekkEekhk8JBN6SA55SG7wME3oIQXkIYXBQwqhh5SQh5QGD9OFHlJBHlIZPKQSekgNeUht8DBD6CEN5CGNwUMaoYe0kIe0Bg8zhR7SQR7SGTykE3pID3lIb/AwS+ghA+Qhg8FDBqGHjJCHjAYPs4UeMkEeMhk8ZBJ6yAx5yGzwMEfoIQvkIYvBQxahh6yQh6wGD3OFHrJBHrIZPGQTesgOechu8DBP6CEH5CGHwUMOoYeckIecBg/zhR5yQR5yGTzkEnrIDXnIbfAQEHrIA3nIY/CQR+ghL+Qhr8HDAqGHfJCHfAYP+YQe8kMe8hs8LBR6KAB5KGDwUEDooSDkoaDBwyKhh0KQh0IGD4WEHgpDHgobPCwWeigCeShi8FBE6KEo5KGowcMSoYdikIdiBg/FhB6KQx6KGzwsFXooAXkoYfBQQuihJOShpMHDMqGHUpCHUgYPpYQeSkMeShs8LBd6KAN5KGPwUEbooSzkoazBwwqhh3KQh3IGD+WEHspDHsobPKwUeqgAeahg8FBB6KEi5KGiwcMqoYdKkIdKBg+VhB4qQx4qGzysFnqoAnmoYvBQReihKuShqsHDGqGHapCHagYP1YQeqkMeqhs8rBV6qAF5qGHwUEPooSbkoabBwzqhh1qQh1oGD7WEHmpDHmobPKwXeqgDeahj8FBH6KEu5KGuwcMGoYd6kId6Bg/1hB7qQx7qGzxsFHpoAHloYPDQQOihIeShocHDJqGHRpCHRgYPjYQeGkMeGhs8bBZ6aAJ5aGLw0ETooSnkoanBwxahh2aQh2YGD82EHppDHpobPGwVemgBeWhh8NBC6KEl5KGlwcM2oYdWkIdWBg+thB5aQx5aGzxsF3poA3loY/DQRuihLeShrcHDDqGHdpCHdgYP7YQe2kMe2hs87BR66AB56GDw0EHooSPkoaPBwy6hh06Qh04GD52EHjpDHjobPOwWeugCeehi8NBF6KEr5KGrwcMeoYdukIduBg/dhB66Qx66GzzsFXroAXnoYfDQQ+ihJ+Shp8HDPqGHXpCHXgYPvYQeekMeehs87Bd66AN56GPw0EfooS/koa/BwwGhh36Qh34GD/2EHvpDHvobPBwUehgAeRhg8DBA6GEg5GGgwcMhoYdBkIdBBg+DhB4GQx4GGzwcFnoYAnkYYvAwROhhKORhqMHDEaGHYZCHYQYPw4QehkMehhs8HBV6GAF5GGHwMELoYSTkYaTBwzGhh1GQh1EGD6OEHkZDHkYbPBwXehgDeRhj8DBG6GEs5GGswcMJoYdxkIdxBg/jhB7GQx7GGzycFHqYAHmYYPAwQehhIuRhosHDKaGHSZCHSQYPk4QeJkMeJhs8nBZ6mAJ5mGLwMEXoYSrkYarBwxmhh2mQh2kGD9OEHqZDHqYbPJwVepgBeZhh8DBD6GEm5GGmwcM5oYdZkIdZBg+zhB5mQx5mGzycF3qYA3mYY/AwR+hhLuRhrsHDBaGHeZCHeQYP84Qe5kMe5hs8XBR6CEAeAgYPAaGHBZCHBQYPl4QeFkIeFho8LBR6WAR5WGTwcFnoYTHkYbHBw2KhhyWQhyUGD1eEHpZCHpYaPCwVelgGeVhm8HBV6GE55GG5wcNyoYcVkIcVBg9/CT2shDysNHhYKfSwCvKwyuDhmtDDasjDaoOH1UIPayAPawwe/hZ6WAt5WGvwsFboYR3kYZ3Bw3Whh/WQh/UGD+uFHjZAHjYYPPwj9LAR8rDR4GGj0MMmyMMmg4cbQg+bIQ+bDR42Cz1sgTxsMXi4KfSwFfKw1eBhq9DDNsjDNoOHW0IP2yEP2w0etgs97IA87DB4uC30sBPysNPgYafQwy7Iwy6DhztCD7shD7sNHnYLPeyBPOwxeLgr9LAX8rDX4GGv0MM+yMM+g4d7Qg/7IQ/7DR72Cz0cgDwcMHi4L/RwEPJw0ODhoNDDIcjDIYOHB0IPhyEPhw0eDgs9HIE8HDF4eCj0cBTycNTg4ajQwzHIwzGDh0dCD8chD8cNHo4LPZyAPJwweHgs9HAS8nDS4OGk0MMpyMMpg4cnQg+nIQ+nDR5OCz2cgTycMXh4KvRwFvJw1uDhrNDDOcjDOYOHZ0IP5yEP5w0ezgs9XIA8XDB4eC70cBHycNHg4aLQwyXIwyWDhxdCD5chD5cNHi4LPVyBPFwxeHgp9HAV8nDV4OGq0MNfkIe/DB5eCT1cgzxcM3i4JvTwN+Thb4OHf4UerkMerhs8XBd6+Afy8I/Bw2uhhxuQhxsGDzeEHm5CHm4aPLwRergFebhl8HBL6OE25OG2wcNboYc7kIc7Bg93hB7uQh7uGjy8E3q4B3m4Z/BwT+jhPuThvsHDe6GHB5CHBwYPD4QeHkIeHho8fBB6eAR5eGTw8Ejo4THk4bHBw0ehhyeQhycGD0+EHp5CHp4aPHwSengGeXhm8PBM6OE55OG5wcNnoYcXkIcXBg8vhB5eQh5eGjx8EXp4BXl4ZfDwSujhX8jDvwYPX4UeXkMeXhs8vBZ6eAN5eGPw8E3o4S3k4a3Bw1uhh3eQh3cGD9+FHt5DHt4bPLwXevgAefhg8PBD6OEj5OGjwcNHoYdPkIdPBg8/hR4+Qx4+Gzx8Fnr4Ann4YvDwS+jhK+Thq8HDV6GHb5CHbwYPv+XR/eE75OG7wcN3oYcfkIcfBg+/Cz38hDz8NHj4KfTwC/Lwy+AhiNDDb8sZD//p0h7+e/v/2vp9OePh9+W8hz+EHoJAHoIYPAQRevgD8vCHwUNQoYegkIegBg9BhR7+hDz8afDwp9BDMMhDMIOHYEIPwSEPwQ0eggk9hIA8hDB4CCH0EBLyENLgIbjQQyjIQyiDh1BCD6EhD6ENHkIIPYSBPIQxeAgj9BAW8hDW4CGk0EM4yEM4g4dwQg/hIQ/hDR5CCT1EgDxEMHiIIPQQEfIQ0eAhtNBDJMhDJIOHSEIPkSEPkQ0ewgg9RIE8RDF4iCL0EBXyENXgIazQQzTIQzSDh2hCD9EhD9ENHsIJPcSAPMQweIgh9BAT8hDT4CG80EMsyEMsg4dYQg+xIQ+xDR4iCD3EgTzEMXiII/QQF/IQ1+AhotBDPMhDPIOHeEIP8SEP8Q0eIgk9JIA8JDB4SCD0kBDykNDgIbLQQyLIQyKDh0RCD4khD4kNHqIIPSSBPCQxeEgi9JAU8pDU4CGq0EMyyEMyg4dkQg/JIQ/JDR6iCT2kgDykMHhIIfSQEvKQ0uAhutBDKshDKoOHVEIPqSEPqQ0eYgg9pIE8pDF4SCP0kBbykNbgIabQQzrIQzqDh3RCD+khD+kNHmIJPWSAPGQweMgg9JAR8pDR4CG20EMmyEMmg4dMQg+ZIQ+ZDR7iCD1kgTxkMXjIIvSQFfKQ1eAhrtBDNshDNoOHbEIP2SEP2Q0e4gk95IA85DB4yCH0kBPykNPgIb7QQy7IQy6Dh1xCD7khD7kNHhIIPeSBPOQxeMgj9JAX8pDX4CGh0EM+yEM+g4d8Qg/5IQ/5DR4SCT0UgDwUMHgoIPRQEPJQ0OAhsdBDIchDIYOHQkIPhSEPhQ0ekgg9FIE8FDF4KCL0UBTyUNTgIanQQzHIQzGDh2JCD8UhD8UNHpIJPZSAPJQweCgh9FAS8lDS4CG50EMpyEMpg4dSQg+lIQ+lDR5SCD2UgTyUMXgoI/RQFvJQ1uAhpdBDOchDOYOHckIP5SEP5Q0eUgk9VIA8VDB4qCD0UBHyUNHgIbXQQyXIQyWDh0pCD5UhD5UNHtIIPVSBPFQxeKgi9FAV8lDV4CGt0EM1yEM1g4dqQg/VIQ/VDR7SCT3UgDzUMHioIfRQE/JQ0+AhvdBDLchDLYOHWkIPtSEPtQ0eMgg91IE81DF4qCP0UBfyUNfgIaPQQz3IQz2Dh3pCD/UhD/UNHjIJPTSAPDQweGgg9NAQ8tDQ4CGz0EMjyEMjg4dGQg+NIQ+NDR6yCD00gTw0MXhoIvTQFPLQ1OAhq9BDM8hDM4OHZkIPzSEPzQ0esgk9tIA8tDB4aCH00BLy0NLgIbvQQyvIQyuDh1ZCD60hD60NHnIIPbSBPLQxeGgj9NAW8tDW4CGn0EM7yEM7g4d2Qg/tIQ/tDR5yCT10gDx0MHjoIPTQEfLQ0eAht9BDJ8hDJ4OHTkIPnSEPnQ0e8gg9dIE8dDF46CL00BXy0NXgIa/QQzfIQzeDh25CD90hD90NHvIJPfSAPPQweOgh9NAT8tDT4CG/0EMvyEMvg4deQg+9IQ+9DR4KCD30gTz0MXjoI/TQF/LQ1+ChoNBDP8hDP4OHfkIP/SEP/Q0eCgk9DIA8DDB4GCD0MBDyMNDgobDQwyDIwyCDh0FCD4MhD4MNHooIPQyBPAwxeBgi9DAU8jDU4KGo0MMwyMMwg4dhQg/DIQ/DDR6KCT2MgDyMMHgYIfQwEvIw0uChuNDDKMjDKIOHUUIPoyEPow0eSgg9jIE8jDF4GCP0MBbyMNbgoaTQwzjIwziDh3FCD+MhD+MNHkoJPUyAPEwweJgg9DAR8jDR4KG00MMkyMMkg4dJQg+TIQ+TDR7KCD1MgTxMMXiYIvQwFfIw1eChrNDDNMjDNIOHaUIP0yEP0w0eygk9zIA8zDB4mCH0MBPyMNPgobzQwyzIwyyDh1lCD7MhD7MNHioIPcyBPMwxeJgj9DAX8jDX4KGi0MM8yMM8g4d5Qg/zIQ/zDR4qCT0EIA8Bg4eA0MMCyMMCg4fKQg8LIQ8LDR4WCj0sgjwsMnioIvSwGPKw2OBhsdDDEsjDEoOHqkIPSyEPSw0elgo9LIM8LDN4qCb0sBzysNzgYbnQwwrIwwqDh+pCDyshDysNHlYKPayCPKwyeKgh9LAa8rDa4GG10MMayMMag4eaQg9rIQ9rDR7WCj2sgzysM3ioJfSwHvKw3uBhvdDDBsjDBoOH2kIPGyEPGw0eNgo9bII8bDJ4qCP0sBnysNngYbPQwxbIwxaDh7pCD1shD1sNHrYKPWyDPGwzeKgn9LAd8rDd4GG70MMOyMMOg4f6Qg87IQ87DR52Cj3sgjzsMnhoIPSwG/Kw2+Bht9DDHsjDHoOHhkIPeyEPew0e9go97IM87DN4aCT0sB/ysN/gYb/QwwHIwwGDh8ZCDwchDwcNHg4KPRyCPBwyeGgi9HAY8nDY4OGw0MMRyMMRg4emQg9HIQ9HDR6OCj0cgzwcM3hoJvRwHPJw3ODhuNDDCcjDCYOH5kIPJyEPJw0eTgo9nII8nDJ4aCH0cBrycNrg4bTQwxnIwxmDh5ZCD2chD2cNHs4KPZyDPJwzeGgl9HAe8nDe4OG80MMFyMMFg4fWQg8XIQ8XDR4uCj1cgjxcMnhoI/RwGfJw2eDhstDDFcjDFYOHtkIPVyEPVw0ergo9/AV5+MvgoZ3QwzXIwzWDh2tCD39DHv42eGgv9HAd8nDd4OG60MM/kId/DB46CD3cgDzcMHi4IfRwE/Jw0+Cho9DDLcjDLYOHW0IPtyEPtw0eOgk93IE83DF4uCP0cBfycNfgobPQwz3Iwz2Dh3tCD/chD/cNHroIPTyAPDwweHgg9PAQ8vDQ4KGr0MMjyMMjg4dHQg+PIQ+PDR66CT08gTw8MXh4IvTwFPLw1OChu9DDM8jDM4OHZ0IPzyEPzw0eegg9vIA8vDB4eCH08BLy8NLgoafQwyvIwyuDh1dCD/9CHv41eOgl9PAa8vDa4OG10MMbyMMbg4feQg9vIQ9vDR7eCj28gzy8M3joI/TwHvLw3uDhvdDDB8jDB4OHvkIPHyEPHw0ePgo9fII8fDJ46Cf08Bny8Nng4bPQwxfIwxeDh/5CD18hD18NHr4KPXyDPHwzeBgg9PAd8vDd4OG70MMPyMMPg4eBQg8/IQ8/DR5+Cj38gjz8MngYJPTw2wrGw3+6tIf/3v6/tn5fwXj4fQXvYbDQQxDIQxCDhyBCD39AHv4weBgi9BAU8hDU4CGo0MOfkIc/DR6GCj0EgzwEM3gIJvQQHPIQ3OBhmNBDCMhDCIOHEEIPISEPIQ0ehgs9hII8hDJ4CCX0EBryENrgYYTQQxjIQxiDhzBCD2EhD2ENHkYKPYSDPIQzeAgn9BAe8hDe4GGU0EMEyEMEg4cIQg8RIQ8RDR5GCz1EgjxEMniIJPQQGfIQ2eBhjNBDFMhDFIOHKEIPUSEPUQ0exgo9RIM8RDN4iCb0EB3yEN3gYZzQQwzIQwyDhxhCDzEhDzENHsYLPcSCPMQyeIgl9BAb8hDb4GGC0EMcyEMcg4c4Qg9xIQ9xDR4mCj3EgzzEM3iIJ/QQH/IQ3+BhktBDAshDAoOHBEIPCSEPCQ0eJgs9JII8JDJ4SCT0kBjykNjgYYrQQxLIQxKDhyRCD0khD0kNHqYKPSSDPCQzeEgm9JAc8pDc4GGa0EMKyEMKg4cUQg8pIQ8pDR6mCz2kgjykMnhIJfSQGvKQ2uBhhtBDGshDGoOHNEIPaSEPaQ0eZgo9pIM8pDN4SCf0kB7ykN7gYZbQQwbIQwaDhwxCDxkhDxkNHmYLPWSCPGQyeMgk9JAZ8pDZ4GGO0EMWyEMWg4csQg9ZIQ9ZDR7mCj1kgzxkM3jIJvSQHfKQ3eBhntBDDshDDoOHHEIPOSEPOQ0e5gs95II85DJ4yCX0kBvykNvgISD0kAfykMfgIY/QQ17IQ16DhwVCD/kgD/kMHvIJPeSHPOQ3eFgo9FAA8lDA4KGA0ENByENBg4dFQg+FIA+FDB4KCT0UhjwUNnhYLPRQBPJQxOChiNBDUchDUYOHJUIPxSAPxQweigk9FIc8FDd4WCr0UALyUMLgoYTQQ0nIQ0mDh2VCD6UgD6UMHkoJPZSGPJQ2eFgu9FAG8lDG4KGM0ENZyENZg4cVQg/lIA/lDB7KCT2UhzyUN3hYKfRQAfJQweChgtBDRchDRYOHVUIPlSAPlQweKgk9VIY8VDZ4WC30UAXyUMXgoYrQQ1XIQ1WDhzVCD9UgD9UMHqoJPVSHPFQ3eFgr9FAD8lDD4KGG0ENNyENNg4d1Qg+1IA+1DB5qCT3UhjzUNnhYL/RQB/JQx+ChjtBDXchDXYOHDUIP9SAP9Qwe6gk91Ic81Dd42Cj00ADy0MDgoYHQQ0PIQ0ODh01CD40gD40MHhoJPTSGPDQ2eNgs9NAE8tDE4KGJ0ENTyENTg4ctQg/NIA/NDB6aCT00hzw0N3jYKvTQAvLQwuChhdBDS8hDS4OHbUIPrSAPrQweWgk9tIY8tDZ42C700Aby0MbgoY3QQ1vIQ1uDhx1CD+0gD+0MHtoJPbSHPLQ3eNgp9NAB8tDB4KGD0ENHyENHg4ddQg+dIA+dDB46CT10hjx0NnjYLfTQBfLQxeChi9BDV8hDV4OHPUIP3SAP3Qweugk9dIc8dDd42Cv00APy0MPgoYfQQ0/IQ0+Dh31CD70gD70MHnoJPfSGPPQ2eNgv9NAH8tDH4KGP0ENfyENfg4cDQg/9IA/9DB76CT30hzz0N3g4KPQwAPIwwOBhgNDDQMjDQIOHQ0IPgyAPgwweBgk9DIY8DDZ4OCz0MATyMMTgYYjQw1DIw1CDhyNCD8MgD8MMHoYJPQyHPAw3eDgq9DAC8jDC4GGE0MNIyMNIg4djQg+jIA+jDB5GCT2MhjyMNng4LvQwBvIwxuBhjNDDWMjDWIOHE0IP4yAP4wwexgk9jIc8jDd4OCn0MAHyMMHgYYLQw0TIw0SDh1NCD5MgD5MMHiYJPUyGPEw2eDgt9DAF8jDF4GGK0MNUyMNUg4czQg/TIA/TDB6mCT1MhzxMN3g4K/QwA/Iww+BhhtDDTMjDTIOHc0IPsyAPswweZgk9zIY8zDZ4OC/0MAfyMMfgYY7Qw1zIw1yDhwtCD/MgD/MMHuYJPcyHPMw3eLgo9BCAPAQMHgJCDwsgDwsMHi4JPSyEPCw0eFgo9LAI8rDI4OGy0MNiyMNig4fFQg9LIA9LDB6uCD0shTwsNXhYKvSwDPKwzODhqtDDcsjDcoOH5UIPKyAPKwwe/hJ6WAl5WGnwsFLoYRXkYZXBwzWhh9WQh9UGD6uFHtZAHtYYPPwt9LAW8rDW4GGt0MM6yMM6g4frQg/rIQ/rDR7WCz1sgDxsMHj4R+hhI+Rho8HDRqGHTZCHTQYPN4QeNkMeNhs8bBZ62AJ52GLwcFPoYSvkYavBw1ahh22Qh20GD7eEHrZDHrYbPGwXetgBedhh8HBb6GEn5GGnwcNOoYddkIddBg93hB52Qx52GzzsFnrYA3nYY/BwV+hhL+Rhr8HDXqGHfZCHfQYP94Qe9kMe9hs87Bd6OAB5OGDwcF/o4SDk4aDBw0Ghh0OQh0MGDw+EHg5DHg4bPBwWejgCeThi8PBQ6OEo5OGowcNRoYdjkIdjBg+PhB6OQx6OGzwcF3o4AXk4YfDwWOjhJOThpMHDSaGHU5CHUwYPT4QeTkMeThs8nBZ6OAN5OGPw8FTo4Szk4azBw1mhh3OQh3MGD8+EHs5DHs4bPJwXergAebhg8PBc6OEi5OGiwcNFoYdLkIdLBg8vhB4uQx4uGzxcFnq4Anm4YvDwUujhKuThqsHDVaGHvyAPfxk8vBJ6uAZ5uGbwcE3o4W/Iw98GD/8KPVyHPFw3eLgu9PAP5OEfg4fXQg83IA83DB5uCD3chDzcNHh4I/RwC/Jwy+DhltDDbcjDbYOHt0IPdyAPdwwe7gg93IU83DV4eCf0cA/ycM/g4Z7Qw33Iw32Dh/dCDw8gDw8MHh4IPTyEPDw0ePgg9PAI8vDI4OGR0MNjyMNjg4ePQg9PIA9PDB6eCD08hTw8NXj4JPTwDPLwzODhmdDDc8jDc4OHz0IPLyAPLwweXgg9vIQ8vDR4+CL08Ary8Mrg4ZXQw7+Qh38NHr4KPbyGPLw2eHgt9PAG8vDG4OGb0MNbyMNbg4e3Qg/vIA/vDB6+Cz28hzy8N3h4L/TwAfLwweDhh9DDR8jDR4OHj0IPnyAPnwwefgo9fIY8fDZ4+Cz08AXy8MXg4ZfQw1fIw1eDh69CD98gD98MHn7Lq/vDd8jDd4OH70IPPyAPPwwefhd6+Al5+Gnw8FPo4Rfk4ZfBQxChh99WMh7+06U9/Pf2/7X1+0rGw+8reQ9/CD0EgTwEMXgIIvTwB+ThD4OHoEIPQSEPQQ0eggo9/Al5+NPg4U+hh2CQh2AGD8GEHoJDHoIbPAQTeggBeQhh8BBC6CEk5CGkwUNwoYdQkIdQBg+hhB5CQx5CGzyEEHoIA3kIY/AQRughLOQhrMFDSKGHcJCHcAYP4YQewkMewhs8hBJ6iAB5iGDwEEHoISLkIaLBQ2ihh0iQh0gGD5GEHiJDHiIbPIQReogCeYhi8BBF6CEq5CGqwUNYoYdokIdoBg/RhB6iQx6iGzyEE3qIAXmIYfAQQ+ghJuQhpsFDeKGHWJCHWAYPsYQeYkMeYhs8RBB6iAN5iGPwEEfoIS7kIa7BQ0Shh3iQh3gGD/GEHuJDHuIbPEQSekgAeUhg8JBA6CEh5CGhwUNkoYdEkIdEBg+JhB4SQx4SGzxEEXpIAnlIYvCQROghKeQhqcFDVKGHZJCHZAYPyYQekkMekhs8RBN6SAF5SGHwkELoISXkIaXBQ3Shh1SQh1QGD6mEHlJDHlIbPMQQekgDeUhj8JBG6CEt5CGtwUNMoYd0kId0Bg/phB7SQx7SGzzEEnrIAHnIYPCQQeghI+Qho8FDbKGHTJCHTAYPmYQeMkMeMhs8xBF6yAJ5yGLwkEXoISvkIavBQ1yhh2yQh2wGD9mEHrJDHrIbPMQTesgBechh8JBD6CEn5CGnwUN8oYdckIdcBg+5hB5yQx5yGzwkEHrIA3nIY/CQR+ghL+Qhr8FDQqGHfJCHfAYP+YQe8kMe8hs8JBJ6KAB5KGDwUEDooSDkoaDBQ2Khh0KQh0IGD4WEHgpDHgobPCQReigCeShi8FBE6KEo5KGowUNSoYdikIdiBg/FhB6KQx6KGzwkE3ooAXkoYfBQQuihJOShpMFDcqGHUpCHUgYPpYQeSkMeShs8pBB6KAN5KGPwUEbooSzkoazBQ0qhh3KQh3IGD+WEHspDHsobPKQSeqgAeahg8FBB6KEi5KGiwUNqoYdKkIdKBg+VhB4qQx4qGzykEXqoAnmoYvBQReihKuShqsFDWqGHapCHagYP1YQeqkMeqhs8pBN6qAF5qGHwUEPooSbkoabBQ3qhh1qQh1oGD7WEHmpDHmobPGQQeqgDeahj8FBH6KEu5KGuwUNGoYd6kId6Bg/1hB7qQx7qGzxkEnpoAHloYPDQQOihIeShocFDZqGHRpCHRgYPjYQeGkMeGhs8ZBF6aAJ5aGLw0ETooSnkoanBQ1ahh2aQh2YGD82EHppDHpobPGQTemgBeWhh8NBC6KEl5KGlwUN2oYdWkIdWBg+thB5aQx5aGzzkEHpoA3loY/DQRuihLeShrcFDTqGHdpCHdgYP7YQe2kMe2hs85BJ66AB56GDw0EHooSPkoaPBQ26hh06Qh04GD52EHjpDHjobPOQReugCeehi8NBF6KEr5KGrwUNeoYdukIduBg/dhB66Qx66GzzkE3roAXnoYfDQQ+ihJ+Shp8FDfqGHXpCHXgYPvYQeekMeehs8FBB66AN56GPw0EfooS/koa/BQ0Ghh36Qh34GD/2EHvpDHvobPBQSehgAeRhg8DBA6GEg5GGgwUNhoYdBkIdBBg+DhB4GQx4GGzwUEXoYAnkYYvAwROhhKORhqMFDUaGHYZCHYQYPw4QehkMehhs8FBN6GAF5GGHwMELoYSTkYaTBQ3Ghh1GQh1EGD6OEHkZDHkYbPJQQehgDeRhj8DBG6GEs5GGswUNJoYdxkIdxBg/jhB7GQx7GGzyUEnqYAHmYYPAwQehhIuRhosFDaaGHSZCHSQYPk4QeJkMeJhs8lBF6mAJ5mGLwMEXoYSrkYarBQ1mhh2mQh2kGD9OEHqZDHqYbPJQTepgBeZhh8DBD6GEm5GGmwUN5oYdZkIdZBg+zhB5mQx5mGzxUEHqYA3mYY/AwR+hhLuRhrsFDRaGHeZCHeQYP84Qe5kMe5hs8VBJ6CEAeAgYPAaGHBZCHBQYPlYUeFkIeFho8LBR6WAR5WGTwUEXoYTHkYbHBw2KhhyWQhyUGD1WFHpZCHpYaPCwVelgGeVhm8FBN6GE55GG5wcNyoYcVkIcVBg/VhR5WQh5WGjysFHpYBXlYZfBQQ+hhNeRhtcHDaqGHNZCHNQYPNYUe1kIe1ho8rBV6WAd5WGfwUEvoYT3kYb3Bw3qhhw2Qhw0GD7WFHjZCHjYaPGwUetgEedhk8FBH6GEz5GGzwcNmoYctkIctBg91hR62Qh62GjxsFXrYBnnYZvBQT+hhO+Rhu8HDdqGHHZCHHQYP9YUedkIedho87BR62AV52GXw0EDoYTfkYbfBw26hhz2Qhz0GDw2FHvZCHvYaPOwVetgHedhn8NBI6GE/5GG/wcN+oYcDkIcDBg+NhR4OQh4OGjwcFHo4BHk4ZPDQROjhMOThsMHDYaGHI5CHIwYPTYUejkIejho8HBV6OAZ5OGbw0Ezo4Tjk4bjBw3GhhxOQhxMGD82FHk5CHk4aPJwUejgFeThl8NBC6OE05OG0wcNpoYczkIczBg8thR7OQh7OGjycFXo4B3k4Z/DQSujhPOThvMHDeaGHC5CHCwYPrYUeLkIeLho8XBR6uAR5uGTw0Ebo4TLk4bLBw2WhhyuQhysGD22FHq5CHq4aPFwVevgL8vCXwUM7oYdrkIdrBg/XhB7+hjz8bfDQXujhOuThusHDdaGHfyAP/xg8dBB6uAF5uGHwcEPo4Sbk4abBQ0ehh1uQh1sGD7eEHm5DHm4bPHQSergDebhj8HBH6OEu5OGuwUNnoYd7kId7Bg/3hB7uQx7uGzx0EXp4AHl4YPDwQOjhIeThocFDV6GHR5CHRwYPj4QeHkMeHhs8dBN6eAJ5eGLw8ETo4Snk4anBQ3ehh2eQh2cGD8+EHp5DHp4bPPQQengBeXhh8PBC6OEl5OGlwUNPoYdXkIdXBg+vhB7+hTz8a/DQS+jhNeThtcHDa6GHN5CHNwYPvYUe3kIe3ho8vBV6eAd5eGfw0Efo4T3k4b3Bw3uhhw+Qhw8GD32FHj5CHj4aPHwUevgEefhk8NBP6OEz5OGzwcNnoYcvkIcvBg/9hR6+Qh6+Gjx8FXr4Bnn4ZvAwQOjhO+Thu8HDd6GHH5CHHwYPA4UefkIefho8/BR6+AV5+GXwMEjo4bdVjIf/dGkP/739f239vorx8Psq3sNgoYcgkIcgBg9BhB7+gDz8YfAwROghKOQhqMFDUKGHPyEPfxo8DBV6CAZ5CGbwEEzoITjkIbjBwzChhxCQhxAGDyGEHkJCHkIaPAwXeggFeQhl8BBK6CE05CG0wcMIoYcwkIcwBg9hhB7CQh7CGjyMFHoIB3kIZ/AQTughPOQhvMHDKKGHCJCHCAYPEYQeIkIeIho8jBZ6iAR5iGTwEEnoITLkIbLBwxihhyiQhygGD1GEHqJCHqIaPIwVeogGeYhm8BBN6CE65CG6wcM4oYcYkIcYBg8xhB5iQh5iGjyMF3qIBXmIZfAQS+ghNuQhtsHDBKGHOJCHOAYPcYQe4kIe4ho8TBR6iAd5iGfwEE/oIT7kIb7BwyShhwSQhwQGDwmEHhJCHhIaPEwWekgEeUhk8JBI6CEx5CGxwcMUoYckkIckBg9JhB6SQh6SGjxMFXpIBnlIZvCQTOghOeQhucHDNKGHFJCHFAYPKYQeUkIeUho8TBd6SAV5SGXwkEroITXkIbXBwwyhhzSQhzQGD2mEHtJCHtIaPMwUekgHeUhn8JBO6CE95CG9wcMsoYcMkIcMBg8ZhB4yQh4yGjzMFnrIBHnIZPCQSeghM+Qhs8HDHKGHLJCHLAYPWYQeskIesho8zBV6yAZ5yGbwkE3oITvkIbvBwzyhhxyQhxwGDzmEHnJCHnIaPMwXesgFechl8JBL6CE35CG3wUNA6CEP5CGPwUMeoYe8kIe8Bg8LhB7yQR7yGTzkE3rID3nIb/CwUOihAOShgMFDAaGHgpCHggYPi4QeCkEeChk8FBJ6KAx5KGzwsFjooQjkoYjBQxGhh6KQh6IGD0uEHopBHooZPBQTeigOeShu8LBU6KEE5KGEwUMJoYeSkIeSBg/LhB5KQR5KGTyUEnooDXkobfCwXOihDOShjMFDGaGHspCHsgYPK4QeykEeyhk8lBN6KA95KG/wsFLooQLkoYLBQwWhh4qQh4oGD6uEHipBHioZPFQSeqgMeahs8LBa6KEK5KGKwUMVoYeqkIeqBg9rhB6qQR6qGTxUE3qoDnmobvCwVuihBuShhsFDDaGHmpCHmgYP64QeakEeahk81BJ6qA15qG3wsF7ooQ7koY7BQx2hh7qQh7oGDxuEHupBHuoZPNQTeqgPeahv8LBR6KEB5KGBwUMDoYeGkIeGBg+bhB4aQR4aGTw0EnpoDHlobPCwWeihCeShicFDE6GHppCHpgYPW4QemkEemhk8NBN6aA55aG7wsFXooQXkoYXBQwuhh5aQh5YGD9uEHlpBHloZPLQSemgNeWht8LBd6KEN5KGNwUMboYe2kIe2Bg87hB7aQR7aGTy0E3poD3lob/CwU+ihA+Shg8FDB6GHjpCHjgYPu4QeOkEeOhk8dBJ66Ax56GzwsFvooQvkoYvBQxehh66Qh64GD3uEHrpBHroZPHQTeugOeehu8LBX6KEH5KGHwUMPoYeekIeeBg/7hB56QR56GTz0EnroDXnobfCwX+ihD+Shj8FDH6GHvpCHvgYPB4Qe+kEe+hk89BN66A956G/wcFDoYQDkYYDBwwChh4GQh4EGD4eEHgZBHgYZPAwSehgMeRhs8HBY6GEI5GGIwcMQoYehkIehBg9HhB6GQR6GGTwME3oYDnkYbvBwVOhhBORhhMHDCKGHkZCHkQYPx4QeRkEeRhk8jBJ6GA15GG3wcFzoYQzkYYzBwxihh7GQh7EGDyeEHsZBHsYZPIwTehgPeRhv8HBS6GEC5GGCwcMEoYeJkIeJBg+nhB4mQR4mGTxMEnqYDHmYbPBwWuhhCuRhisHDFKGHqZCHqQYPZ4QepkEephk8TBN6mA55mG7wcFboYQbkYYbBwwyhh5mQh5kGD+eEHmZBHmYZPMwSepgNeZht8HBe6GEO5GGOwcMcoYe5kIe5Bg8XhB7mQR7mGTzME3qYD3mYb/BwUeghAHkIGDwEhB4WQB4WGDxcEnpYCHlYaPCwUOhhEeRhkcHDZaGHxZCHxQYPi4UelkAelhg8XBF6WAp5WGrwsFToYRnkYZnBw1Whh+WQh+UGD8uFHlZAHlYYPPwl9LAS8rDS4GGl0MMqyMMqg4drQg+rIQ+rDR5WCz2sgTysMXj4W+hhLeRhrcHDWqGHdZCHdQYP14Ue1kMe1hs8rBd62AB52GDw8I/Qw0bIw0aDh41CD5sgD5sMHm4IPWyGPGw2eNgs9LAF8rDF4OGm0MNWyMNWg4etQg/bIA/bDB5uCT1shzxsN3jYLvSwA/Kww+DhttDDTsjDToOHnUIPuyAPuwwe7gg97IY87DZ42C30sAfysMfg4a7Qw17Iw16Dh71CD/sgD/sMHu4JPeyHPOw3eNgv9HAA8nDA4OG+0MNByMNBg4eDQg+HIA+HDB4eCD0chjwcNng4LPRwBPJwxODhodDDUcjDUYOHo0IPxyAPxwweHgk9HIc8HDd4OC70cALycMLg4bHQw0nIw0mDh5NCD6cgD6cMHp4IPZyGPJw2eDgt9HAG8nDG4OGp0MNZyMNZg4ezQg/nIA/nDB6eCT2chzycN3g4L/RwAfJwweDhudDDRcjDRYOHi0IPlyAPlwweXgg9XIY8XDZ4uCz0cAXycMXg4aXQw9X/xys9BIG2pVG2vufcY9u2bdu2bdu2bdu2bdu2bb7IV9XIiGrmHHP3dmeuP0Z8kIcrBg9XhB6uQh6uGjy8EXq4Bnm4ZvBwTejhOuThusHDW6GHG5CHGwYPN4QebkIebho8vBN6uAV5uGXwcEvo4Tbk4bbBw3uhhzuQhzsGD3eEHu5CHu4aPHwQergHebhn8HBP6OE+5OG+wcNHoYcHkIcHBg8PhB4eQh4eGjx8Enp4BHl4ZPDwSOjhMeThscHDZ6GHJ5CHJwYPT4QenkIenho8fBF6eAZ5eGbw8Ezo4Tnk4bnBw1ehhxeQhxcGDy+EHl5CHl4aPHwTengFeXhl8PBK6OE15OG1wcN3oYc3kIc3Bg9vhB7eQh7eGjz8EHp4B3l4Z/DwTujhPeThvcHDT6GHD5CHDwYPH4QePkIePho8/BJ6+AR5+GTw8Eno4TPk4bPBw2+hhy+Qhy8GD1+EHr5CHr4aPPwRevgGefhm8PBN6OE75OG7wcNfoYcfkIcfBg8/hB5+Qh5+Gjz8k0fX4Rfk4ZfBwy+hh9+Qh98GDwGEHv5AHv4YPPwRevgLefhr8BBQ6OGfVYyH/+zSHv779v91K8AqxkOAVbyHf4UeAkIeAho8BBR6+Bfy8K/BQyChh0CQh0AGD4GEHgJDHgIbPAQWeggCeQhi8BBE6CEo5CGowUMQoYdgkIdgBg/BhB6CQx6CGzwEFXoIAXkIYfAQQughJOQhpMFDMKGHUJCHUAYPoYQeQkMeQhs8BBd6CAN5CGPwEEboISzkIazBQwihh3CQh3AGD+GEHsJDHsIbPIQUeogAeYhg8BBB6CEi5CGiwUMooYdIkIdIBg+RhB4iQx4iGzyEFnqIAnmIYvAQReghKuQhqsFDGKGHaJCHaAYP0YQeokMeohs8hBV6iAF5iGHwEEPoISbkIabBQzihh1iQh1gGD7GEHmJDHmIbPIQXeogDeYhj8BBH6CEu5CGuwUMEoYd4kId4Bg/xhB7iQx7iGzxEFHpIAHlIYPCQQOghIeQhocFDJKGHRJCHRAYPiYQeEkMeEhs8RBZ6SAJ5SGLwkEToISnkIanBQxShh2SQh2QGD8mEHpJDHpIbPEQVekgBeUhh8JBC6CEl5CGlwUM0oYdUkIdUBg+phB5SQx5SGzxEF3pIA3lIY/CQRughLeQhrcFDDKGHdJCHdAYP6YQe0kMe0hs8xBR6yAB5yGDwkEHoISPkIaPBQyyhh0yQh0wGD5mEHjJDHjIbPMQWesgCechi8JBF6CEr5CGrwUMcoYdskIdsBg/ZhB6yQx6yGzzEFXrIAXnIYfCQQ+ghJ+Qhp8FDPKGHXJCHXAYPuYQeckMechs8xBd6yAN5yGPwkEfoIS/kIa/BQwKhh3yQh3wGD/mEHvJDHvIbPCQUeigAeShg8FBA6KEg5KGgwUMioYdCkIdCBg+FhB4KQx4KGzwkFnooAnkoYvBQROihKOShqMFDEqGHYpCHYgYPxYQeikMeihs8JBV6KAF5KGHwUELooSTkoaTBQzKhh1KQh1IGD6WEHkpDHkobPCQXeigDeShj8FBG6KEs5KGswUMKoYdykIdyBg/lhB7KQx7KGzykFHqoAHmoYPBQQeihIuShosFDKqGHSpCHSgYPlYQeKkMeKhs8pBZ6qAJ5qGLwUEXooSrkoarBQxqhh2qQh2oGD9WEHqpDHqobPKQVeqgBeahh8FBD6KEm5KGmwUM6oYdakIdaBg+1hB5qQx5qGzykF3qoA3moY/BQR+ihLuShrsFDBqGHepCHegYP9YQe6kMe6hs8ZBR6aAB5aGDw0EDooSHkoaHBQyahh0aQh0YGD42EHhpDHhobPGQWemgCeWhi8NBE6KEp5KGpwUMWoYdmkIdmBg/NhB6aQx6aGzxkFXpoAXloYfDQQuihJeShpcFDNqGHVpCHVgYPrYQeWkMeWhs8ZBd6aAN5aGPw0EbooS3koa3BQw6hh3aQh3YGD+2EHtpDHtobPOQUeugAeehg8NBB6KEj5KGjwUMuoYdOkIdOBg+dhB46Qx46GzzkFnroAnnoYvDQReihK+Shq8FDHqGHbpCHbgYP3YQeukMeuhs85BV66AF56GHw0EPooSfkoafBQz6hh16Qh14GD72EHnpDHnobPOQXeugDeehj8NBH6KEv5KGvwUMBoYd+kId+Bg/9hB76Qx76GzwUFHoYAHkYYPAwQOhhIORhoMFDIaGHQZCHQQYPg4QeBkMeBhs8FBZ6GAJ5GGLwMEToYSjkYajBQxGhh2GQh2EGD8OEHoZDHoYbPBQVehgBeRhh8DBC6GEk5GGkwUMxoYdRkIdRBg+jhB5GQx5GGzwUF3oYA3kYY/AwRuhhLORhrMFDCaGHcZCHcQYP44QexkMexhs8lBR6mAB5mGDwMEHoYSLkYaLBQymhh0mQh0kGD5OEHiZDHiYbPJQWepgCeZhi8DBF6GEq5GGqwUMZoYdpkIdpBg/ThB6mQx6mGzyUFXqYAXmYYfAwQ+hhJuRhpsFDOaGHWZCHWQYPs4QeZkMeZhs8lBd6mAN5mGPwMEfoYS7kYa7BQwWhh3mQh3kGD/OEHuZDHuYbPFQUelgAeVhg8LBA6GEh5GGhwUMloYdFkIdFBg+LhB4WQx4WGzxUFnpYAnlYYvCwROhhKeRhqcFDFaGHZZCHZQYPy4QelkMelhs8VBV6WAF5WGHwsELoYSXkYaXBQzWhh1WQh1UGD6uEHlZDHlYbPFQXelgDeVhj8LBG6GEt5GGtwUMNoYd1kId1Bg/rhB7WQx7WGzzUFHrYAHnYYPCwQehhI+Rho8FDLaGHTZCHTQYPm4QeNkMeNhs81BZ62AJ52GLwsEXoYSvkYavBQx2hh22Qh20GD9uEHrZDHrYbPNQVetgBedhh8LBD6GEn5GGnwUM9oYddkIddBg+7hB52Qx52GzzUF3rYA3nYY/CwR+hhL+Rhr8FDA6GHfZCHfQYP+4Qe9kMe9hs8NBR6OAB5OGDwcEDo4SDk4aDBQyOhh0OQh0MGD4eEHg5DHg4bPDQWejgCeThi8HBE6OEo5OGowUMToYdjkIdjBg/HhB6OQx6OGzw0FXo4AXk4YfBwQujhJOThpMFDM6GHU5CHUwYPp4QeTkMeThs8NBd6OAN5OGPwcEbo4Szk4azBQwuhh3OQh3MGD+eEHs5DHs4bPLQUergAebhg8HBB6OEi5OGiwUMroYdLkIdLBg+XhB4uQx4uGzy0Fnq4Anm4YvBwRejhKuThqsFDG6GHa5CHawYP14QerkMerhs8tBV6uAF5uGHwcEPo4Sbk4abBQzuhh1uQh1sGD7eEHm5DHm4bPLQXergDebhj8HBH6OEu5OGuwUMHoYd7kId7Bg/3hB7uQx7uGzx0FHp4AHl4YPDwQOjhIeThocFDJ6GHR5CHRwYPj4QeHkMeHhs8dBZ6eAJ5eGLw8ETo4Snk4anBQxehh2eQh2cGD8+EHp5DHp4bPHQVengBeXhh8PBC6OEl5OGlwUM3oYdXkIdXBg+vhB5eQx5eGzx0F3p4A3l4Y/DwRujhLeThrcFDD6GHd5CHdwYP74Qe3kMe3hs89BR6+AB5+GDw8EHo4SPk4aPBQy+hh0+Qh08GD5+EHj5DHj4bPPQWevgCefhi8PBF6OEr5OGrwUMfoYdvkIdvBg/fhB6+Qx6+Gzz0FXr4AXn4YfDwQ+jhJ+Thp8FDP6GHX5CHXwYPv4QefkMefhs89Bd6+AN5+GPw8Efo4S/k4a/BwwChh39WMx7+s0t7+O/b/9etAKsZDwFW8x4GCj0EhDwENHgIKPTwL+ThX4OHQUIPgSAPgQweAgk9BIY8BDZ4GCz0EATyEMTgIYjQQ1DIQ1CDhyFCD8EgD8EMHoIJPQSHPAQ3eBgq9BAC8hDC4CGE0ENIyENIg4dhQg+hIA+hDB5CCT2EhjyENngYLvQQBvIQxuAhjNBDWMhDWIOHEUIP4SAP4Qwewgk9hIc8hDd4GCn0EAHyEMHgIYLQQ0TIQ0SDh1FCD5EgD5EMHiIJPUSGPEQ2eBgt9BAF8hDF4CGK0ENUyENUg4cxQg/RIA/RDB6iCT1EhzxEN3gYK/QQA/IQw+AhhtBDTMhDTIOHcUIPsSAPsQweYgk9xIY8xDZ4GC/0EAfyEMfgIY7QQ1zIQ1yDhwlCD/EgD/EMHuIJPcSHPMQ3eJgo9JAA8pDA4CGB0ENCyENCg4dJQg+JIA+JDB4SCT0khjwkNniYLPSQBPKQxOAhidBDUshDUoOHKUIPySAPyQwekgk9JIc8JDd4mCr0kALykMLgIYXQQ0rIQ0qDh2lCD6kgD6kMHlIJPaSGPKQ2eJgu9JAG8pDG4CGN0ENayENag4cZQg/pIA/pDB7SCT2khzykN3iYKfSQAfKQweAhg9BDRshDRoOHWUIPmSAPmQweMgk9ZIY8ZDZ4mC30kAXykMXgIYvQQ1bIQ1aDhzlCD9kgD9kMHrIJPWSHPGQ3eJgr9JAD8pDD4CGH0ENOyENOg4d5Qg+5IA+5DB5yCT3khjzkNniYL/SQB/KQx+Ahj9BDXshDXoOHBUIP+SAP+Qwe8gk95Ic85Dd4WCj0UADyUMDgoYDQQ0HIQ0GDh0VCD4UgD4UMHgoJPRSGPBQ2eFgs9FAE8lDE4KGI0ENRyENRg4clQg/FIA/FDB6KCT0UhzwUN3hYKvRQAvJQwuChhNBDSchDSYOHZUIPpSAPpQweSgk9lIY8lDZ4WC70UAbyUMbgoYzQQ1nIQ1mDhxVCD+UgD+UMHsoJPZSHPJQ3eFgp9FAB8lDB4KGC0ENFyENFg4dVQg+VIA+VDB4qCT1UhjxUNnhYLfRQBfJQxeChitBDVchDVYOHNUIP1SAP1Qweqgk9VIc8VDd4WCv0UAPyUMPgoYbQQ03IQ02Dh3VCD7UgD7UMHmoJPdSGPNQ2eFgv9FAH8lDH4KGO0ENdyENdg4cNQg/1IA/1DB7qCT3UhzzUN3jYKPTQAPLQwOChgdBDQ8hDQ4OHTUIPjSAPjQweGgk9NIY8NDZ42Cz00ATy0MTgoYnQQ1PIQ1ODhy1CD80gD80MHpoJPTSHPDQ3eNgq9NAC8tDC4KGF0ENLyENLg4dtQg+tIA+tDB5aCT20hjy0NnjYLvTQBvLQxuChjdBDW8hDW4OHHUIP7SAP7Qwe2gk9tIc8tDd42Cn00AHy0MHgoYPQQ0fIQ0eDh11CD50gD50MHjoJPXSGPHQ2eNgt9NAF8tDF4KGL0ENXyENXg4c9Qg/dIA/dDB66CT10hzx0N3jYK/TQA/LQw+Chh9BDT8hDT4OHfUIPvSAPvQweegk99IY89DZ42C/00Afy0MfgoY/QQ1/IQ1+DhwNCD/0gD/0MHvoJPfSHPPQ3eDgo9DAA8jDA4GGA0MNAyMNAg4dDQg+DIA+DDB4GCT0MhjwMNng4LPQwBPIwxOBhiNDDUMjDUIOHI0IPwyAPwwwehgk9DIc8DDd4OCr0MALyMMLgYYTQw0jIw0iDh2NCD6MgD6MMHkYJPYyGPIw2eDgu9DAG8jDG4GGM0MNYyMNYg4cTQg/jIA/jDB7GCT2MhzyMN3g4KfQwAfIwweBhgtDDRMjDRIOHU0IPkyAPkwweJgk9TIY8TDZ4OC30MAXyMMXgYYrQw1TIw1SDhzNCD9MgD9MMHqYJPUyHPEw3eDgr9DAD8jDD4GGG0MNMyMNMg4dzQg+zIA+zDB5mCT3MhjzMNng4L/QwB/Iwx+BhjtDDXMjDXIOHC0IP8yAP8wwe5gk9zIc8zDd4uCj0sADysMDgYYHQw0LIw0KDh0tCD4sgD4sMHhYJPSyGPCw2eLgs9LAE8rDE4GGJ0MNSyMNSg4crQg/LIA/LDB6WCT0shzwsN3i4KvSwAvKwwuBhhdDDSsjDSoOHa0IPqyAPqwweVgk9rIY8rDZ4uC70sAbysMbgYY3Qw1rIw1qDhxtCD+sgD+sMHtYJPayHPKw3eLgp9LAB8rDB4GGD0MNGyMNGg4dbQg+bIA+bDB42CT1shjxsNni4LfSwBfKwxeBhi9DDVsjDVoOHO0IP2yAP2wwetgk9bIc8bDd4uCv0sAPysMPgYYfQw07Iw06Dh3tCD7sgD7sMHnYJPeyGPOw2eLgv9LAH8rDH4GGP0MNeyMNeg4cHQg/7IA/7DB72CT3shzzsN3h4KPRwAPJwwODhgNDDQcjDQYOHR0IPhyAPhwweDgk9HIY8HDZ4eCz0cATycMTg4YjQw1HIw1GDhydCD8cgD8cMHo4JPRyHPBw3eHgq9HAC8nDC4OGE0MNJyMNJg4dnQg+nIA+nDB5OCT2chjycNnh4LvRwBvJwxuDhjNDDWcjDWYOHF0IP5yAP5wwezgk9nIc8nDd4eCn0cAHycMHg4YLQw0XIw0WDh1dCD5cgD5cMHi4JPVyGPFw2eHgt9HAF8nDF4OGK0MNVyMNVg4c3Qg/XIA/XDB6uCT1chzxcN3h4K/RwA/Jww+DhhtDDTcjDTYOHd0IPtyAPtwwebgk93IY83DZ4eC/0cAfycMfg4Y7Qw13Iw12Dhw9CD/cgD/cMHu4JPdyHPNw3ePgo9PAA8vDA4OGB0MNDyMNDg4dPQg+PIA+PDB4eCT08hjw8Nnj4LPTwBPLwxODhidDDU8jDU4OHL0IPzyAPzwwengk9PIc8PDd4+Cr08ALy8MLg4YXQw0vIw0uDh29CD68gD68MHl4JPbyGPLw2ePgu9PAG8vDG4OGN0MNbyMNbg4cfQg/vIA/vDB7eCT28hzy8N3j4KfTwAfLwweDhg9DDR8jDR4OHX0IPnyAPnwwePgk9fIY8fDZ4+C308AXy8MXg4YvQw1fIw1eDhz9CD98gD98MHr4JPXyHPHw3ePgr9PAD8vDD4OGH0MNPyMNPg4d/8uo6/II8/DJ4+CX08Bvy8NvgIYDQwx/Iwx+Dhz9CD38hD38NHgIKPfyzhvHwn13aw3/f/r9uBVjDeAiwhvfwr9BDQMhDQIOHgEIP/0Ie/jV4CCT0EAjyEMjgIZDQQ2DIQ2CDh8BCD0EgD0EMHoIIPQSFPAQ1eAgi9BAM8hDM4CGY0ENwyENwg4egQg8hIA8hDB5CCD2EhDyENHgIJvQQCvIQyuAhlNBDaMhDaIOH4EIPYSAPYQwewgg9hIU8hDV4CCH0EA7yEM7gIZzQQ3jIQ3iDh5BCDxEgDxEMHiIIPUSEPEQ0eAgl9BAJ8hDJ4CGS0ENkyENkg4fQQg9RIA9RDB6iCD1EhTxENXgII/QQDfIQzeAhmtBDdMhDdIOHsEIPMSAPMQweYgg9xIQ8xDR4CCf0EAvyEMvgIZbQQ2zIQ2yDh/BCD3EgD3EMHuIIPcSFPMQ1eIgg9BAP8hDP4CGe0EN8yEN8g4eIQg8JIA8JDB4SCD0khDwkNHiIJPSQCPKQyOAhkdBDYshDYoOHyEIPSSAPSQwekgg9JIU8JDV4iCL0kAzykMzgIZnQQ3LIQ3KDh6hCDykgDykMHlIIPaSEPKQ0eIgm9JAK8pDK4CGV0ENqyENqg4foQg9pIA9pDB7SCD2khTykNXiIIfSQDvKQzuAhndBDeshDeoOHmEIPGSAPGQweMgg9ZIQ8ZDR4iCX0kAnykMngIZPQQ2bIQ2aDh9hCD1kgD1kMHrIIPWSFPGQ1eIgj9JAN8pDN4CGb0EN2yEN2g4e4Qg85IA85DB5yCD3khDzkNHiIJ/SQC/KQy+Ahl9BDbshDboOH+EIPeSAPeQwe8gg95IU85DV4SCD0kA/ykM/gIZ/QQ37IQ36Dh4RCDwUgDwUMHgoIPRSEPBQ0eEgk9FAI8lDI4KGQ0ENhyENhg4fEQg9FIA9FDB6KCD0UhTwUNXhIIvRQDPJQzOChmNBDcchDcYOHpEIPJSAPJQweSgg9lIQ8lDR4SCb0UAryUMrgoZTQQ2nIQ2mDh+RCD2UgD2UMHsoIPZSFPJQ1eEgh9FAO8lDO4KGc0EN5yEN5g4eUQg8VIA8VDB4qCD1UhDxUNHhIJfRQCfJQyeChktBDZchDZYOH1EIPVSAPVQweqgg9VIU8VDV4SCP0UA3yUM3goZrQQ3XIQ3WDh7RCDzUgDzUMHmoIPdSEPNQ0eEgn9FAL8lDL4KGW0ENtyENtg4f0Qg91IA91DB7qCD3UhTzUNXjIIPRQD/JQz+ChntBDfchDfYOHjEIPDSAPDQweGgg9NIQ8NDR4yCT00Ajy0MjgoZHQQ2PIQ2ODh8xCD00gD00MHpoIPTSFPDQ1eMgi9NAM8tDM4KGZ0ENzyENzg4esQg8tIA8tDB5aCD20hDy0NHjIJvTQCvLQyuChldBDa8hDa4OH7EIPbSAPbQwe2gg9tIU8tDV4yCH00A7y0M7goZ3QQ3vIQ3uDh5xCDx0gDx0MHjoIPXSEPHQ0eMgl9NAJ8tDJ4KGT0ENnyENng4fcQg9dIA9dDB66CD10hTx0NXjII/TQDfLQzeChm9BDd8hDd4OHvEIPPSAPPQweegg99IQ89DR4yCf00Avy0MvgoZfQQ2/IQ2+Dh/xCD30gD30MHvoIPfSFPPQ1eCgg9NAP8tDP4KGf0EN/yEN/g4eCQg8DIA8DDB4GCD0MhDwMNHgoJPQwCPIwyOBhkNDDYMjDYIOHwkIPQyAPQwwehgg9DIU8DDV4KCL0MAzyMMzgYZjQw3DIw3CDh6JCDyMgDyMMHkYIPYyEPIw0eCgm9DAK8jDK4GGU0MNoyMNog4fiQg9jIA9jDB7GCD2MhTyMNXgoIfQwDvIwzuBhnNDDeMjDeIOHkkIPEyAPEwweJgg9TIQ8TDR4KCX0MAnyMMngYZLQw2TIw2SDh9JCD1MgD1MMHqYIPUyFPEw1eCgj9DAN8jDN4GGa0MN0yMN0g4eyQg8zIA8zDB5mCD3MhDzMNHgoJ/QwC/Iwy+BhltDDbMjDbIOH8kIPcyAPcwwe5gg9zIU8zDV4qCD0MA/yMM/gYZ7Qw3zIw3yDh4pCDwsgDwsMHhYIPSyEPCw0eKgk9LAI8rDI4GGR0MNiyMNig4fKQg9LIA9LDB6WCD0shTwsNXioIvSwDPKwzOBhmdDDcsjDcoOHqkIPKyAPKwweVgg9rIQ8rDR4qCb0sArysMrgYZXQw2rIw2qDh+pCD2sgD2sMHtYIPayFPKw1eKgh9LAO8rDO4GGd0MN6yMN6g4eaQg8bIA8bDB42CD1shDxsNHioJfSwCfKwyeBhk9DDZsjDZoOH2kIPWyAPWwwetgg9bIU8bDV4qCP0sA3ysM3gYZvQw3bIw3aDh7pCDzsgDzsMHnYIPeyEPOw0eKgn9LAL8rDL4GGX0MNuyMNug4f6Qg97IA97DB72CD3shTzsNXhoIPSwD/Kwz+Bhn9DDfsjDfoOHhkIPByAPBwweDgg9HIQ8HDR4aCT0cAjycMjg4ZDQw2HIw2GDh8ZCD0cgD0cMHo4IPRyFPBw1eGgi9HAM8nDM4OGY0MNxyMNxg4emQg8nIA8nDB5OCD2chDycNHhoJvRwCvJwyuDhlNDDacjDaYOH5kIPZyAPZwwezgg9nIU8nDV4aCH0cA7ycM7g4ZzQw3nIw3mDh5ZCDxcgDxcMHi4IPVyEPFw0eGgl9HAJ8nDJ4OGS0MNlyMNlg4fWQg9XIA9XDB6uCD1chTxcNXhoI/RwDfJwzeDhmtDDdcjDdYOHtkIPNyAPNwwebgg93IQ83DR4aCf0cAvycMvg4ZbQw23Iw22Dh/ZCD3cgD3cMHu4IPdyFPNw1eOgg9HAP8nDP4OGe0MN9yMN9g4eOQg8PIA8PDB4eCD08hDw8NHjoJPTwCPLwyODhkdDDY8jDY4OHzkIPTyAPTwwengg9PIU8PDV46CL08Azy8Mzg4ZnQw3PIw3ODh65CDy8gDy8MHl4IPbyEPLw0eOgm9PAK8vDK4OGV0MNryMNrg4fuQg9vIA9vDB7eCD28hTy8NXjoIfTwDvLwzuDhndDDe8jDe4OHnkIPHyAPHwwePgg9fIQ8fDR46CX08Any8Mng4ZPQw2fIw2eDh95CD18gD18MHr4IPXyFPHw1eOgj9PAN8vDN4OGb0MN3yMN3g4e+Qg8/IA8/DB5+CD38hDz8NHjoJ/TwC/Lwy+Dhl9DDb8jDb4OH/kIPfyAPfwwe/gg9/IU8/DV4GCD08M9axsN/dmkP/337/7oVYC3jIcBa3sNAoYeAkIeABg8BhR7+hTz8a/AwSOghEOQhkMFDIKGHwJCHwAYPg4UegkAeghg8BBF6CAp5CGrwMEToIRjkIZjBQzChh+CQh+AGD0OFHkJAHkIYPIQQeggJeQhp8DBM6CEU5CGUwUMooYfQkIfQBg/DhR7CQB7CGDyEEXoIC3kIa/AwQughHOQhnMFDOKGH8JCH8AYPI4UeIkAeIhg8RBB6iAh5iGjwMEroIRLkIZLBQyShh8iQh8gGD6OFHqJAHqIYPEQReogKeYhq8DBG6CEa5CGawUM0oYfokIfoBg9jhR5iQB5iGDzEEHqICXmIafAwTughFuQhlsFDLKGH2JCH2AYP44Ue4kAe4hg8xBF6iAt5iGvwMEHoIR7kIZ7BQzyhh/iQh/gGDxOFHhJAHhIYPCQQekgIeUho8DBJ6CER5CGRwUMioYfEkIfEBg+ThR6SQB6SGDwkEXpICnlIavAwReghGeQhmcFDMqGH5JCH5AYPU4UeUkAeUhg8pBB6SAl5SGnwME3oIRXkIZXBQyqhh9SQh9QGD9OFHtJAHtIYPKQRekgLeUhr8DBD6CEd5CGdwUM6oYf0kIf0Bg8zhR4yQB4yGDxkEHrICHnIaPAwS+ghE+Qhk8FDJqGHzJCHzAYPs4UeskAeshg8ZBF6yAp5yGrwMEfoIRvkIZvBQzahh+yQh+wGD3OFHnJAHnIYPOQQesgJechp8DBP6CEX5CGXwUMuoYfckIfcBg/zhR7yQB7yGDzkEXrIC3nIa/CwQOghH+Qhn8FDPqGH/JCH/AYPC4UeCkAeChg8FBB6KAh5KGjwsEjooRDkoZDBQyGhh8KQh8IGD4uFHopAHooYPBQReigKeShq8LBE6KEY5KGYwUMxoYfikIfiBg9LhR5KQB5KGDyUEHooCXkoafCwTOihFOShlMFDKaGH0pCH0gYPy4UeykAeyhg8lBF6KAt5KGvwsELooRzkoZzBQzmhh/KQh/IGDyuFHipAHioYPFQQeqgIeaho8LBK6KES5KGSwUMloYfKkIfKBg+rhR6qQB6qGDxUEXqoCnmoavCwRuihGuShmsFDNaGH6pCH6gYPa4UeakAeahg81BB6qAl5qGnwsE7ooRbkoZbBQy2hh9qQh9oGD+uFHupAHuoYPNQReqgLeahr8LBB6KEe5KGewUM9oYf6kIf6Bg8bhR4aQB4aGDw0EHpoCHloaPCwSeihEeShkcFDI6GHxpCHxgYPm4UemkAemhg8NBF6aAp5aGrwsEXooRnkoZnBQzOhh+aQh+YGD1uFHlpAHloYPLQQemgJeWhp8LBN6KEV5KGVwUMroYfWkIfWBg/bhR7aQB7aGDy0EXpoC3loa/CwQ+ihHeShncFDO6GH9pCH9gYPO4UeOkAeOhg8dBB66Ah56GjwsEvooRPkoZPBQyehh86Qh84GD7uFHrpAHroYPHQReugKeehq8LBH6KEb5KGbwUM3oYfukIfuBg97hR56QB56GDz0EHroCXnoafCwT+ihF+Shl8FDL6GH3pCH3gYP+4Ue+kAe+hg89BF66At56GvwcEDooR/koZ/BQz+hh/6Qh/4GDweFHgZAHgYYPAwQehgIeRho8HBI6GEQ5GGQwcMgoYfBkIfBBg+HhR6GQB6GGDwMEXoYCnkYavBwROhhGORhmMHDMKGH4ZCH4QYPR4UeRkAeRhg8jBB6GAl5GGnwcEzoYRTkYZTBwyihh9GQh9EGD8eFHsZAHsYYPIwRehgLeRhr8HBC6GEc5GGcwcM4oYfxkIfxBg8nhR4mQB4mGDxMEHqYCHmYaPBwSuhhEuRhksHDJKGHyZCHyQYPp4UepkAephg8TBF6mAp5mGrwcEboYRrkYZrBwzShh+mQh+kGD2eFHmZAHmYYPMwQepgJeZhp8HBO6GEW5GGWwcMsoYfZkIfZBg/nhR7mQB7mGDzMEXqYC3mYa/BwQehhHuRhnsHDPKGH+ZCH+QYPF4UeFkAeFhg8LBB6WAh5WGjwcEnoYRHkYZHBwyKhh8WQh8UGD5eFHpZAHpYYPCwRelgKeVhq8HBF6GEZ5GGZwcMyoYflkIflBg9XhR5WQB5WGDysEHpYCXlYafBwTehhFeRhlcHDKqGH1ZCH1QYP14Ue1kAe1hg8rBF6WAt5WGvwcEPoYR3kYZ3Bwzqhh/WQh/UGDzeFHjZAHjYYPGwQetgIedho8HBL6GET5GGTwcMmoYfNkIfNBg+3hR62QB62GDxsEXrYCnnYavBwR+hhG+Rhm8HDNqGH7ZCH7QYPd4UedkAedhg87BB62Al52GnwcE/oYRfkYZfBwy6hh92Qh90GD/eFHvZAHvYYPOwRetgLedhr8PBA6GEf5GGfwcM+oYf9kIf9Bg8PhR4OQB4OGDwcEHo4CHk4aPDwSOjhEOThkMHDIaGHw5CHwwYPj4UejkAejhg8HBF6OAp5OGrw8ETo4Rjk4ZjBwzGhh+OQh+MGD0+FHk5AHk4YPJwQejgJeThp8PBM6OEU5OGUwcMpoYfTkIfTBg/PhR7OQB7OGDycEXo4C3k4a/DwQujhHOThnMHDOaGH85CH8wYPL4UeLkAeLhg8XBB6uAh5uGjw8Ero4RLk4ZLBwyWhh8uQh8sGD6+FHq5AHq4YPFwRergKebhq8PBG6OEa5OGawcM1oYfrkIfrBg9vhR5uQB5uGDzcEHq4CXm4afDwTujhFuThlsHDLaGH25CH2wYP74Ue7kAe7hg83BF6uAt5uGvw8EHo4R7k4Z7Bwz2hh/uQh/sGDx+FHh5AHh4YPDwQengIeXho8PBJ6OER5OGRwcMjoYfHkIfHBg+fhR6eQB6eGDw8EXp4Cnl4avDwRejhGeThmcHDM6GH55CH5wYPX4UeXkAeXhg8vBB6eAl5eGnw8E3o4RXk4ZXBwyuhh9eQh9cGD9+FHt5AHt4YPLwRengLeXhr8PBD6OEd5OGdwcM7oYf3kIf3Bg8/hR4+QB4+GDx8EHr4CHn4aPDwS+jhE+Thk8HDJ6GHz5CHzwYPv4UevkAevhg8fBF6+Ap5+Grw8Efo4Rvk4ZvBwzehh++Qh+8GD3+FHn5AHn4YPPwQevgJefhp8KBs+ut/6pC+yf/5sv3/f//d4ZfBwy+hh9//U4eM/7dDuv+nw2+DhwDCpn8gD38MHv4IPfyFPPw1eAgobPrPOsbDf3ZpD/99+/+6FWAd4yHAOt7Dv8KmASEPAQ0eAgo9/At5+NfgIZCwaSDIQyCDh0BCD4EhD4ENHgILmwaBPAQxeAgi9BAU8hDU4CGIsGkwyEMwg4dgQg/BIQ/BDR6CCpuGgDyEMHgIIfQQEvIQ0uAhmLBpKMhDKIOHUEIPoSEPoQ0eggubhoE8hDF4CCP0EBbyENbgIYSwaTjIQziDh3BCD+EhD+ENHkIKm0aAPEQweIgg9BAR8hDR4CGUsGkkyEMkg4dIQg+RIQ+RDR5CC5tGgTxEMXiIIvQQFfIQ1eAhjLBpNMhDNIOHaEIP0SEP0Q0ewgqbxoA8xDB4iCH0EBPyENPgIZywaSzIQyyDh1hCD7EhD7ENHsILm8aBPMQxeIgj9BAX8hDX4CGCsGk8yEM8g4d4Qg/xIQ/xDR4iCpsmgDwkMHhIIPSQEPKQ0OAhkrBpIshDIoOHREIPiSEPiQ0eIgubJoE8JDF4SCL0kBTykNTgIYqwaTLIQzKDh2RCD8khD8kNHqIKm6aAPKQweEgh9JAS8pDS4CGasGkqyEMqg4dUQg+pIQ+pDR6iC5umgTykMXhII/SQFvKQ1uAhhrBpOshDOoOHdEIP6SEP6Q0eYgqbZoA8ZDB4yCD0kBHykNHgIZawaSbIQyaDh0xCD5khD5kNHmILm2aBPGQxeMgi9JAV8pDV4CGOsGk2yEM2g4dsQg/ZIQ/ZDR7iCpvmgDzkMHjIIfSQE/KQ0+AhnrBpLshDLoOHXEIPuSEPuQ0e4gub5oE85DF4yCP0kBfykNfgIYGwaT7IQz6Dh3xCD/khD/kNHhIKmxaAPBQweCgg9FAQ8lDQ4CGRsGkhyEMhg4dCQg+FIQ+FDR4SC5sWgTwUMXgoIvRQFPJQ1OAhibBpMchDMYOHYkIPxSEPxQ0ekgqbloA8lDB4KCH0UBLyUNLgIZmwaSnIQymDh1JCD6UhD6UNHpILm5aBPJQxeCgj9FAW8lDW4CGFsGk5yEM5g4dyQg/lIQ/lDR5SCptWgDxUMHioIPRQEfJQ0eAhlbBpJchDJYOHSkIPlSEPlQ0eUgubVoE8VDF4qCL0UBXyUNXgIY2waTXIQzWDh2pCD9UhD9UNHtIKm9aAPNQweKgh9FAT8lDT4CGdsGktyEMtg4daQg+1IQ+1DR7SC5vWgTzUMXioI/RQF/JQ1+Ahg7BpPchDPYOHekIP9SEP9Q0eMgqbNoA8NDB4aCD00BDy0NDgIZOwaSPIQyODh0ZCD40hD40NHjILmzaBPDQxeGgi9NAU8tDU4CGLsGkzyEMzg4dmQg/NIQ/NDR6yCpu2gDy0MHhoIfTQEvLQ0uAhm7BpK8hDK4OHVkIPrSEPrQ0esgubtoE8tDF4aCP00Bby0NbgIYewaTvIQzuDh3ZCD+0hD+0NHnIKm3aAPHQweOgg9NAR8tDR4CGXsGknyEMng4dOQg+dIQ+dDR5yC5t2gTx0MXjoIvTQFfLQ1eAhj7BpN8hDN4OHbkIP3SEP3Q0e8gqb9oA89DB46CH00BPy0NPgIZ+waS/IQy+Dh15CD70hD70NHvILm/aBPPQxeOgj9NAX8tDX4KGAsGk/yEM/g4d+Qg/9IQ/9DR4KCpsOgDwMMHgYIPQwEPIw0OChkLDpIMjDIIOHQUIPgyEPgw0eCgubDoE8DDF4GCL0MBTyMNTgoYiw6TDIwzCDh2FCD8MhD8MNHooKm46APIwweBgh9DAS8jDS4KGYsOkoyMMog4dRQg+jIQ+jDR6KC5uOgTyMMXgYI/QwFvIw1uChhLDpOMjDOIOHcUIP4yEP4w0eSgqbToA8TDB4mCD0MBHyMNHgoZSw6STIwySDh0lCD5MhD5MNHkoLm06BPEwxeJgi9DAV8jDV4KGMsOk0yMM0g4dpQg/TIQ/TDR7KCpvOgDzMMHiYIfQwE/Iw0+ChnLDpLMjDLIOHWUIPsyEPsw0eygubzoE8zDF4mCP0MBfyMNfgoYKw6TzIwzyDh3lCD/MhD/MNHioKmy6APCwweFgg9LAQ8rDQ4KGSsOkiyMMig4dFQg+LIQ+LDR4qC5sugTwsMXhYIvSwFPKw1OChirDpMsjDMoOHZUIPyyEPyw0eqgqbroA8rDB4WCH0sBLysNLgoZqw6SrIwyqDh1VCD6shD6sNHqoLm66BPKwxeFgj9LAW8rDW4KGGsOk6yMM6g4d1Qg/rIQ/rDR5qCptugDxsMHjYIPSwEfKw0eChlrDpJsjDJoOHTUIPmyEPmw0eagubboE8bDF42CL0sBXysNXgoY6w6TbIwzaDh21CD9shD9sNHuoKm+6APOwweNgh9LAT8rDT4KGesOkuyMMug4ddQg+7IQ+7DR7qC5vugTzsMXjYI/SwF/Kw1+ChgbDpPsjDPoOHfUIP+yEP+w0eGgqbHoA8HDB4OCD0cBDycNDgoZGw6SHIwyGDh0NCD4chD4cNHhoLmx6BPBwxeDgi9HAU8nDU4KGJsOkxyMMxg4djQg/HIQ/HDR6aCpuegDycMHg4IfRwEvJw0uChmbDpKcjDKYOHU0IPpyEPpw0emgubnoE8nDF4OCP0cBbycNbgoYWw6TnIwzmDh3NCD+chD+cNHloKm16APFwweLgg9HAR8nDR4KGVsOklyMMlg4dLQg+XIQ+XDR5aC5tegTxcMXi4IvRwFfJw1eChjbDpNcjDNYOHa0IP1yEP1w0e2gqb3oA83DB4uCH0cBPycNPgoZ2w6S3Iwy2Dh1tCD7chD7cNHtoLm96BPNwxeLgj9HAX8nDX4KGDsOk9yMM9g4d7Qg/3IQ/3DR46Cps+gDw8MHh4IPTwEPLw0OChk7DpI8jDI4OHR0IPjyEPjw0eOgubPoE8PDF4eCL08BTy8NTgoYuw6TPIwzODh2dCD88hD88NHroKm76APLwweHgh9PAS8vDS4KGbsOkryMMrg4dXQg+vIQ+vDR66C5u+gTy8MXh4I/TwFvLw1uChh7DpO8jDO4OHd0IP7yEP7w0eegqbfoA8fDB4+CD08BHy8NHgoZew6SfIwyeDh09CD58hD58NHnoLm36BPHwxePgi9PAV8vDV4KGPsOk3yMM3g4dvQg/fIQ/fDR76Cpv+gDz8MHj4IfTwE/Lw0+Chn7DpL8jDL4OHX0IPvyEPvw0e+gub/oE8/DF4+CP08Bfy8NfgYYCw6T/rGQ//2aU9/Pft/+tWgPWMhwDreQ8DhU0DQh4CGjwEFHr4F/Lwr8HDIGHTQJCHQAYPgYQeAkMeAhs8DBY2DQJ5CGLwEEToISjkIajBwxBh02CQh2AGD8GEHoJDHoIbPAwVNg0BeQhh8BBC6CEk5CGkwcMwYdNQkIdQBg+hhB5CQx5CGzwMFzYNA3kIY/AQRughLOQhrMHDCGHTcJCHcAYP4YQewkMewhs8jBQ2jQB5iGDwEEHoISLkIaLBwyhh00iQh0gGD5GEHiJDHiIbPIwWNo0CeYhi8BBF6CEq5CGqwcMYYdNokIdoBg/RhB6iQx6iGzyMFTaNAXmIYfAQQ+ghJuQhpsHDOGHTWJCHWAYPsYQeYkMeYhs8jBc2jQN5iGPwEEfoIS7kIa7BwwRh03iQh3gGD/GEHuJDHuIbPEwUNk0AeUhg8JBA6CEh5CGhwcMkYdNEkIdEBg+JhB4SQx4SGzxMFjZNAnlIYvCQROghKeQhqcHDFGHTZJCHZAYPyYQekkMekhs8TBU2TQF5SGHwkELoISXkIaXBwzRh01SQh1QGD6mEHlJDHlIbPEwXNk0DeUhj8JBG6CEt5CGtwcMMYdN0kId0Bg/phB7SQx7SGzzMFDbNAHnIYPCQQeghI+Qho8HDLGHTTJCHTAYPmYQeMkMeMhs8zBY2zQJ5yGLwkEXoISvkIavBwxxh02yQh2wGD9mEHrJDHrIbPMwVNs0Bechh8JBD6CEn5CGnwcM8YdNckIdcBg+5hB5yQx5yGzzMFzbNA3nIY/CQR+ghL+Qhr8HDAmHTfJCHfAYP+YQe8kMe8hs8LBQ2LQB5KGDwUEDooSDkoaDBwyJh00KQh0IGD4WEHgpDHgobPCwWNi0CeShi8FBE6KEo5KGowcMSYdNikIdiBg/FhB6KQx6KGzwsFTYtAXkoYfBQQuihJOShpMHDMmHTUpCHUgYPpYQeSkMeShs8LBc2LQN5KGPwUEbooSzkoazBwwph03KQh3IGD+WEHspDHsobPKwUNq0Aeahg8FBB6KEi5KGiwcMqYdNKkIdKBg+VhB4qQx4qGzysFjatAnmoYvBQReihKuShqsHDGmHTapCHagYP1YQeqkMeqhs8rBU2rQF5qGHwUEPooSbkoabBwzph01qQh1oGD7WEHmpDHmobPKwXNq0Deahj8FBH6KEu5KGuwcMGYdN6kId6Bg/1hB7qQx7qGzxsFDZtAHloYPDQQOihIeShocHDJmHTRpCHRgYPjYQeGkMeGhs8bBY2bQJ5aGLw0ETooSnkoanBwxZh02aQh2YGD82EHppDHpobPGwVNm0BeWhh8NBC6KEl5KGlwcM2YdNWkIdWBg+thB5aQx5aGzxsFzZtA3loY/DQRuihLeShrcHDDmHTdpCHdgYP7YQe2kMe2hs87BQ27QB56GDw0EHooSPkoaPBwy5h006Qh04GD52EHjpDHjobPOwWNu0Ceehi8NBF6KEr5KGrwcMeYdNukIduBg/dhB66Qx66GzzsFTbtAXnoYfDQQ+ihJ+Shp8HDPmHTXpCHXgYPvYQeekMeehs87Bc27QN56GPw0EfooS/koa/BwwFh036Qh34GD/2EHvpDHvobPBwUNh0AeRhg8DBA6GEg5GGgwcMhYdNBkIdBBg+DhB4GQx4GGzwcFjYdAnkYYvAwROhhKORhqMHDEWHTYZCHYQYPw4QehkMehhs8HBU2HQF5GGHwMELoYSTkYaTBwzFh01GQh1EGD6OEHkZDHkYbPBwXNh0DeRhj8DBG6GEs5GGswcMJYdNxkIdxBg/jhB7GQx7GGzycFDadAHmYYPAwQehhIuRhosHDKWHTSZCHSQYPk4QeJkMeJhs8nBY2nQJ5mGLwMEXoYSrkYarBwxlh02mQh2kGD9OEHqZDHqYbPJwVNp0BeZhh8DBD6GEm5GGmwcM5YdNZkIdZBg+zhB5mQx5mGzycFzadA3mYY/AwR+hhLuRhrsHDBWHTeZCHeQYP84Qe5kMe5hs8XBQ2XQB5WGDwsEDoYSHkYaHBwyVh00WQh0UGD4uEHhZDHhYbPFwWNl0CeVhi8LBE6GEp5GGpwcMVYdNlkIdlBg/LhB6WQx6WGzxcFTZdAXlYYfCwQuhhJeRhpcHDNWHTVZCHVQYPq4QeVkMeVhs8XBc2XQN5WGPwsEboYS3kYa3Bww1h03WQh3UGD+uEHtZDHtYbPNwUNt0Aedhg8LBB6GEj5GGjwcMtYdNNkIdNBg+bhB42Qx42GzzcFjbdAnnYYvCwRehhK+Rhq8HDHWHTbZCHbQYP24QetkMeths83BU23QF52GHwsEPoYSfkYafBwz1h012Qh10GD7uEHnZDHnYbPNwXNt0Dedhj8LBH6GEv5GGvwcMDYdN9kId9Bg/7hB72Qx72Gzw8FDY9AHk4YPBwQOjhIOThoMHDI2HTQ5CHQwYPh4QeDkMeDhs8PBY2PQJ5OGLwcETo4Sjk4ajBwxNh02OQh2MGD8eEHo5DHo4bPDwVNj0BeThh8HBC6OEk5OGkwcMzYdNTkIdTBg+nhB5OQx5OGzw8FzY9A3k4Y/BwRujhLOThrMHDC2HTc5CHcwYP54QezkMezhs8vBQ2vQB5uGDwcEHo4SLk4aLBwyth00uQh0sGD5eEHi5DHi4bPLwWNr0Cebhi8HBF6OEq5OGqwcMbYdNrkIdrBg/XhB6uQx6uGzy8FTa9AXm4YfBwQ+jhJuThpsHDO2HTW5CHWwYPt4QebkMebhs8vBc2vQN5uGPwcEfo4S7k4a7Bwwdh03uQh3sGD/eEHu5DHu4bPHwUNn0AeXhg8PBA6OEh5OGhwcMnYdNHkIdHBg+PhB4eQx4eGzx8FjZ9Anl4YvDwROjhKeThqcHDF2HTZ5CHZwYPz4QenkMenhs8fBU2fQF5eGHw8ELo4SXk4aXBwzdh01eQh1cGD6+EHl5DHl4bPHwXNn0DeXhj8PBG6OEt5OGtwcMPYdN3kId3Bg/vhB7eQx7eGzz8FDb9AHn4YPDwQejhI+Tho8HDL2HTT5CHTwYPn4QePkMePhs8/BY2/QJ5+GLw8EXo4Svk4avBwx9h02+Qh28GD9+EHr5DHr4bPPwVNv0Befhh8PBD6OEn5OGnwcN/HlJ1+AV5+GXw8Evo4Tfk4bfBQwChhz+Qhz8GD3+EHv5CHv4aPAQUevhnA+PhP7u0h/++/X/dCrCB8RBgA+/hX6GHgJCHgAYPAYUe/oU8/GvwEEjoIRDkIZDBQyChh8CQh8AGD4GFHoJAHoIYPAQReggKeQhq8BBE6CEY5CGYwUMwoYfgkIfgBg9BhR5CQB5CGDyEEHoICXkIafAQTOghFOQhlMFDKKGH0JCH0AYPwYUewkAewhg8hBF6CAt5CGvwEELoIRzkIZzBQzihh/CQh/AGDyGFHiJAHiIYPEQQeogIeYho8BBK6CES5CGSwUMkoYfIkIfIBg+hhR6iQB6iGDxEEXqICnmIavAQRughGuQhmsFDNKGH6JCH6AYPYYUeYkAeYhg8xBB6iAl5iGnwEE7oIRbkIZbBQyyhh9iQh9gGD+GFHuJAHuIYPMQReogLeYhr8BBB6CEe5CGewUM8oYf4kIf4Bg8RhR4SQB4SGDwkEHpICHlIaPAQSeghEeQhkcFDIqGHxJCHxAYPkYUekkAekhg8JBF6SAp5SGrwEEXoIRnkIZnBQzKhh+SQh+QGD1GFHlJAHlIYPKQQekgJeUhp8BBN6CEV5CGVwUMqoYfUkIfUBg/RhR7SQB7SGDykEXpIC3lIa/AQQ+ghHeQhncFDOqGH9JCH9AYPMYUeMkAeMhg8ZBB6yAh5yGjwEEvoIRPkIZPBQyahh8yQh8wGD7GFHrJAHrIYPGQResgKechq8BBH6CEb5CGbwUM2oYfskIfsBg9xhR5yQB5yGDzkEHrICXnIafAQT+ghF+Qhl8FDLqGH3JCH3AYP8YUe8kAe8hg85BF6yAt5yGvwkEDoIR/kIZ/BQz6hh/yQh/wGDwmFHgpAHgoYPBQQeigIeSho8JBI6KEQ5KGQwUMhoYfCkIfCBg+JhR6KQB6KGDwUEXooCnkoavCQROihGOShmMFDMaGH4pCH4gYPSYUeSkAeShg8lBB6KAl5KGnwkEzooRTkoZTBQymhh9KQh9IGD8mFHspAHsoYPJQReigLeShr8JBC6KEc5KGcwUM5oYfykIfyBg8phR4qQB4qGDxUEHqoCHmoaPCQSuihEuShksFDJaGHypCHygYPqYUeqkAeqhg8VBF6qAp5qGrwkEbooRrkoZrBQzWhh+qQh+oGD2mFHmpAHmoYPNQQeqgJeahp8JBO6KEW5KGWwUMtoYfakIfaBg/phR7qQB7qGDzUEXqoC3moa/CQQeihHuShnsFDPaGH+pCH+gYPGYUeGkAeGhg8NBB6aAh5aGjwkEnooRHkoZHBQyOhh8aQh8YGD5mFHppAHpoYPDQRemgKeWhq8JBF6KEZ5KGZwUMzoYfmkIfmBg9ZhR5aQB5aGDy0EHpoCXloafCQTeihFeShlcFDK6GH1pCH1gYP2YUe2kAe2hg8tBF6aAt5aGvwkEPooR3koZ3BQzuhh/aQh/YGDzmFHjpAHjoYPHQQeugIeeho8JBL6KET5KGTwUMnoYfOkIfOBg+5hR66QB66GDx0EXroCnnoavCQR+ihG+Shm8FDN6GH7pCH7gYPeYUeekAeehg89BB66Al56GnwkE/ooRfkoZfBQy+hh96Qh94GD/mFHvpAHvoYPPQReugLeehr8FBA6KEf5KGfwUM/oYf+kIf+Bg8FhR4GQB4GGDwMEHoYCHkYaPBQSOhhEORhkMHDIKGHwZCHwQYPhYUehkAehhg8DBF6GAp5GGrwUEToYRjkYZjBwzChh+GQh+EGD0WFHkZAHkYYPIwQehgJeRhp8FBM6GEU5GGUwcMooYfRkIfRBg/FhR7GQB7GGDyMEXoYC3kYa/BQQuhhHORhnMHDOKGH8ZCH8QYPJYUeJkAeJhg8TBB6mAh5mGjwUEroYRLkYZLBwyShh8mQh8kGD6WFHqZAHqYYPEwRepgKeZhq8FBG6GEa5GGawcM0oYfpkIfpBg9lhR5mQB5mGDzMEHqYCXmYafBQTuhhFuRhlsHDLKGH2ZCH2QYP5YUe5kAe5hg8zBF6mAt5mGvwUEHoYR7kYZ7Bwzyhh/mQh/kGDxWFHhZAHhYYPCwQelgIeVho8FBJ6GER5GGRwcMioYfFkIfFBg+VhR6WQB6WGDwsEXpYCnlYavBQRehhGeRhmcHDMqGH5ZCH5QYPVYUeVkAeVhg8rBB6WAl5WGnwUE3oYRXkYZXBwyqhh9WQh9UGD9WFHtZAHtYYPKwRelgLeVhr8FBD6GEd5GGdwcM6oYf1kIf1Bg81hR42QB42GDxsEHrYCHnYaPBQS+hhE+Rhk8HDJqGHzZCHzQYPtYUetkAethg8bBF62Ap52GrwUEfoYRvkYZvBwzahh+2Qh+0GD3WFHnZAHnYYPOwQetgJedhp8FBP6GEX5GGXwcMuoYfdkIfdBg/1hR72QB72GDzsEXrYC3nYa/DQQOhhH+Rhn8HDPqGH/ZCH/QYPDYUeDkAeDhg8HBB6OAh5OGjw0Ejo4RDk4ZDBwyGhh8OQh8MGD42FHo5AHo4YPBwRejgKeThq8NBE6OEY5OGYwcMxoYfjkIfjBg9NhR5OQB5OGDycEHo4CXk4afDQTOjhFOThlMHDKaGH05CH0wYPzYUezkAezhg8nBF6OAt5OGvw0ELo4Rzk4ZzBwzmhh/OQh/MGDy2FHi5AHi4YPFwQergIebho8NBK6OES5OGSwcMloYfLkIfLBg+thR6uQB6uGDxcEXq4Cnm4avDQRujhGuThmsHDNaGH65CH6wYPbYUebkAebhg83BB6uAl5uGnw0E7o4Rbk4ZbBwy2hh9uQh9sGD+2FHu5AHu4YPNwRergLebhr8NBB6OEe5OGewcM9oYf7kIf7Bg8dhR4eQB4eGDw8EHp4CHl4aPDQSejhEeThkcHDI6GHx5CHxwYPnYUenkAenhg8PBF6eAp5eGrw0EXo4Rnk4ZnBwzOhh+eQh+cGD12FHl5AHl4YPLwQengJeXhp8NBN6OEV5OGVwcMroYfXkIfXBg/dhR7eQB7eGDy8EXp4C3l4a/DQQ+jhHeThncHDO6GH95CH9wYPPYUePkAePhg8fBB6+Ah5+Gjw0Evo4RPk4ZPBwyehh8+Qh88GD72FHr5AHr4YPHwRevgKefhq8NBH6OEb5OGbwcM3oYfvkIfvBg99hR5+QB5+GDz8EHr4CXn4afDQT+jhF+Thl8HDL6GH35CH3wYP/YUe/kAe/hg8/BF6+At5+GvwMEDo4Z+NjIf/7NIe/vv2/3UrwEbGQ4CNvIeBQg8BIQ8BDR4CCj38C3n41+BhkNBDIMhDIIOHQEIPgSEPgQ0eBgs9BIE8BDF4CCL0EBTyENTgYYjQQzDIQzCDh2BCD8EhD8ENHoYKPYSAPIQweAgh9BAS8hDS4GGY0EMoyEMog4dQQg+hIQ+hDR6GCz2EgTyEMXgII/QQFvIQ1uBhhNBDOMhDOIOHcEIP4SEP4Q0eRgo9RIA8RDB4iCD0EBHyENHgYZTQQyTIQySDh0hCD5EhD5ENHkYLPUSBPEQxeIgi9BAV8hDV4GGM0EM0yEM0g4doQg/RIQ/RDR7GCj3EgDzEMHiIIfQQE/IQ0+BhnNBDLMhDLIOHWEIPsSEPsQ0exgs9xIE8xDF4iCP0EBfyENfgYYLQQzzIQzyDh3hCD/EhD/ENHiYKPSSAPCQweEgg9JAQ8pDQ4GGS0EMiyEMig4dEQg+JIQ+JDR4mCz0kgTwkMXhIIvSQFPKQ1OBhitBDMshDMoOHZEIPySEPyQ0epgo9pIA8pDB4SCH0kBLykNLgYZrQQyrIQyqDh1RCD6khD6kNHqYLPaSBPKQxeEgj9JAW8pDW4GGG0EM6yEM6g4d0Qg/pIQ/pDR5mCj1kgDxkMHjIIPSQEfKQ0eBhltBDJshDJoOHTEIPmSEPmQ0eZgs9ZIE8ZDF4yCL0kBXykNXgYY7QQzbIQzaDh2xCD9khD9kNHuYKPeSAPOQweMgh9JAT8pDT4GGe0EMuyEMug4dcQg+5IQ+5DR7mCz3kgTzkMXjII/SQF/KQ1+BhgdBDPshDPoOHfEIP+SEP+Q0eFgo9FIA8FDB4KCD0UBDyUNDgYZHQQyHIQyGDh0JCD4UhD4UNHhYLPRSBPBQxeCgi9FAU8lDU4GGJ0EMxyEMxg4diQg/FIQ/FDR6WCj2UgDyUMHgoIfRQEvJQ0uBhmdBDKchDKYOHUkIPpSEPpQ0elgs9lIE8lDF4KCP0UBbyUNbgYYXQQznIQzmDh3JCD+UhD+UNHlYKPVSAPFQweKgg9FAR8lDR4GGV0EMlyEMlg4dKQg+VIQ+VDR5WCz1UgTxUMXioIvRQFfJQ1eBhjdBDNchDNYOHakIP1SEP1Q0e1go91IA81DB4qCH0UBPyUNPgYZ3QQy3IQy2Dh1pCD7UhD7UNHtYLPdSBPNQxeKgj9FAX8lDX4GGD0EM9yEM9g4d6Qg/1IQ/1DR42Cj00gDw0MHhoIPTQEPLQ0OBhk9BDI8hDI4OHRkIPjSEPjQ0eNgs9NIE8NDF4aCL00BTy0NTgYYvQQzPIQzODh2ZCD80hD80NHrYKPbSAPLQweGgh9NAS8tDS4GGb0EMryEMrg4dWQg+tIQ+tDR62Cz20gTy0MXhoI/TQFvLQ1uBhh9BDO8hDO4OHdkIP7SEP7Q0edgo9dIA8dDB46CD00BHy0NHgYZfQQyfIQyeDh05CD50hD50NHnYLPXSBPHQxeOgi9NAV8tDV4GGP0EM3yEM3g4duQg/dIQ/dDR72Cj30gDz0MHjoIfTQE/LQ0+Bhn9BDL8hDL4OHXkIPvSEPvQ0e9gs99IE89DF46CP00Bfy0Nfg4YDQQz/IQz+Dh35CD/0hD/0NHg4KPQyAPAwweBgg9DAQ8jDQ4OGQ0MMgyMMgg4dBQg+DIQ+DDR4OCz0MgTwMMXgYIvQwFPIw1ODhiNDDMMjDMIOHYUIPwyEPww0ejgo9jIA8jDB4GCH0MBLyMNLg4ZjQwyjIwyiDh1FCD6MhD6MNHo4LPYyBPIwxeBgj9DAW8jDW4OGE0MM4yMM4g4dxQg/jIQ/jDR5OCj1MgDxMMHiYIPQwEfIw0eDhlNDDJMjDJIOHSUIPkyEPkw0eTgs9TIE8TDF4mCL0MBXyMNXg4YzQwzTIwzSDh2lCD9MhD9MNHs4KPcyAPMwweJgh9DAT8jDT4OGc0MMsyMMsg4dZQg+zIQ+zDR7OCz3MgTzMMXiYI/QwF/Iw1+DhgtDDPMjDPIOHeUIP8yEP8w0eLgo9LIA8LDB4WCD0sBDysNDg4ZLQwyLIwyKDh0VCD4shD4sNHi4LPSyBPCwxeFgi9LAU8rDU4OGK0MMyyMMyg4dlQg/LIQ/LDR6uCj2sgDysMHhYIfSwEvKw0uDhmtDDKsjDKoOHVUIPqyEPqw0ergs9rIE8rDF4WCP0sBbysNbg4YbQwzrIwzqDh3VCD+shD+sNHm4KPWyAPGwweNgg9LAR8rDR4OGW0MMmyMMmg4dNQg+bIQ+bDR5uCz1sgTxsMXjYIvSwFfKw1eDhjtDDNsjDNoOHbUIP2yEP2w0e7go97IA87DB42CH0sBPysNPg4Z7Qwy7Iwy6Dh11CD7shD7sNHu4LPeyBPOwxeNgj9LAX8rDX4OGB0MM+yMM+g4d9Qg/7IQ/7DR4eCj0cgDwcMHg4IPRwEPJw0ODhkdDDIcjDIYOHQ0IPhyEPhw0eHgs9HIE8HDF4OCL0cBTycNTg4YnQwzHIwzGDh2NCD8chD8cNHp4KPZyAPJwweDgh9HAS8nDS4OGZ0MMpyMMpg4dTQg+nIQ+nDR6eCz2cgTycMXg4I/RwFvJw1uDhhdDDOcjDOYOHc0IP5yEP5w0eXgo9XIA8XDB4uCD0cBHycNHg4ZXQwyXIwyWDh0tCD5chD5cNHl4LPVyBPFwxeLgi9HAV8nDV4OGN0MM1yMM1g4drQg/XIQ/XDR7eCj3cgDzcMHi4IfRwE/Jw0+DhXQBdh1uQh1sGD7eEHm5DHm4bPLwXergDebhj8HBH6OEu5OGuwcMHoYd7kId7Bg/3hB7uQx7uGzx8FHp4AHl4YPDwQOjhIeThocHDJ6GHR5CHRwYPj4QeHkMeHhs8fBZ6eAJ5eGLw8ETo4Snk4anBwxehh2eQh2cGD8+EHp5DHp4bPHwVengBeXhh8PBC6OEl5OGlwcM3oYdXkIdXBg+vhB5eQx5eGzx8F3p4A3l4Y/DwRujhLeThrcHDD6GHd5CHdwYP74Qe3kMe3hs8/BR6+AB5+GDw8EHo4SPk4aPBwy+hh0+Qh08GD5+EHj5DHj4bPPwWevgCefhi8PBF6OEr5OGrwcMfoYdvkIdvBg/fhB6+Qx6+Gzz8FXr4AXn4YfDwQ+jhJ+Thp8HDfwZVHX5BHn4ZPPwSevgNefht8BBA6OEP5OGPwcMfoYe/kIe/Bg8BhR7+2cR4+M8u7eG/b/9ftwJsYjwE2MR7+FfoISDkIaDBQ0Chh38hD/8aPAQSeggEeQhk8BBI6CEw5CGwwUNgoYcgkIcgBg9BhB6CQh6CGjwEEXoIBnkIZvAQTOghOOQhuMFDUKGHEJCHEAYPIYQeQkIeQho8BBN6CAV5CGXwEEroITTkIbTBQ3ChhzCQhzAGD2GEHsJCHsIaPIQQeggHeQhn8BBO6CE85CG8wUNIoYcIkIcIBg8RhB4iQh4iGjyEEnqIBHmIZPAQSeghMuQhssFDaKGHKJCHKAYPUYQeokIeoho8hBF6iAZ5iGbwEE3oITrkIbrBQ1ihhxiQhxgGDzGEHmJCHmIaPIQTeogFeYhl8BBL6CE25CG2wUN4oYc4kIc4Bg9xhB7iQh7iGjxEEHqIB3mIZ/AQT+ghPuQhvsFDRKGHBJCHBAYPCYQeEkIeEho8RBJ6SAR5SGTwkEjoITHkIbHBQ2ShhySQhyQGD0mEHpJCHpIaPEQRekgGeUhm8JBM6CE55CG5wUNUoYcUkIcUBg8phB5SQh5SGjxEE3pIBXlIZfCQSughNeQhtcFDdKGHNJCHNAYPaYQe0kIe0ho8xBB6SAd5SGfwkE7oIT3kIb3BQ0yhhwyQhwwGDxmEHjJCHjIaPMQSesgEechk8JBJ6CEz5CGzwUNsoYcskIcsBg9ZhB6yQh6yGjzEEXrIBnnIZvCQTeghO+Qhu8FDXKGHHJCHHAYPOYQeckIecho8xBN6yAV5yGXwkEvoITfkIbfBQ3yhhzyQhzwGD3mEHvJCHvIaPCQQesgHechn8JBP6CE/5CG/wUNCoYcCkIcCBg8FhB4KQh4KGjwkEnooBHkoZPBQSOihMOShsMFDYqGHIpCHIgYPRYQeikIeiho8JBF6KAZ5KGbwUEzooTjkobjBQ1KhhxKQhxIGDyWEHkpCHkoaPCQTeigFeShl8FBK6KE05KG0wUNyoYcykIcyBg9lhB7KQh7KGjykEHooB3koZ/BQTuihPOShvMFDSqGHCpCHCgYPFYQeKkIeKho8pBJ6qAR5qGTwUEnooTLkobLBQ2qhhyqQhyoGD1WEHqpCHqoaPKQReqgGeahm8FBN6KE65KG6wUNaoYcakIcaBg81hB5qQh5qGjykE3qoBXmoZfBQS+ihNuShtsFDeqGHOpCHOgYPdYQe6kIe6ho8ZBB6qAd5qGfwUE/ooT7kob7BQ0ahhwaQhwYGDw2EHhpCHhoaPGQSemgEeWhk8NBI6KEx5KGxwUNmoYcmkIcmBg9NhB6aQh6aGjxkEXpoBnloZvDQTOihOeShucFDVqGHFpCHFgYPLYQeWkIeWho8ZBN6aAV5aGXw0ErooTXkobXBQ3ahhzaQhzYGD22EHtpCHtoaPOQQemgHeWhn8NBO6KE95KG9wUNOoYcOkIcOBg8dhB46Qh46GjzkEnroBHnoZPDQSeihM+Shs8FDbqGHLpCHLgYPXYQeukIeuho85BF66AZ56Gbw0E3ooTvkobvBQ16hhx6Qhx4GDz2EHnpCHnoaPOQTeugFeehl8NBL6KE35KG3wUN+oYc+kIc+Bg99hB76Qh76GjwUEHroB3noZ/DQT+ihP+Shv8FDQaGHAZCHAQYPA4QeBkIeBho8FBJ6GAR5GGTwMEjoYTDkYbDBQ2GhhyGQhyEGD0OEHoZCHoYaPBQRehgGeRhm8DBM6GE45GG4wUNRoYcRkIcRBg8jhB5GQh5GGjwUE3oYBXkYZfAwSuhhNORhtMFDcaGHMZCHMQYPY4QexkIexho8lBB6GAd5GGfwME7oYTzkYbzBQ0mhhwmQhwkGDxOEHiZCHiYaPJQSepgEeZhk8DBJ6GEy5GGywUNpoYcpkIcpBg9ThB6mQh6mGjyUEXqYBnmYZvAwTehhOuRhusFDWaGHGZCHGQYPM4QeZkIeZho8lBN6mAV5mGXwMEvoYTbkYbbBQ3mhhzmQhzkGD3OEHuZCHuYaPFQQepgHeZhn8DBP6GE+5GG+wUNFoYcFkIcFBg8LhB4WQh4WGjxUEnpYBHlYZPCwSOhhMeRhscFDZaGHJZCHJQYPS4QelkIelho8VBF6WAZ5WGbwsEzoYTnkYbnBQ1WhhxWQhxUGDyuEHlZCHlYaPFQTelgFeVhl8LBK6GE15GG1wUN1oYc1kIc1Bg9rhB7WQh7WGjzUEHpYB3lYZ/CwTuhhPeRhvcFDTaGHDZCHDQYPG4QeNkIeNho81BJ62AR52GTwsEnoYTPkYbPBQ22hhy2Qhy0GD1uEHrZCHrYaPNQRetgGedhm8LBN6GE75GG7wUNdoYcdkIcdBg87hB52Qh52GjzUE3rYBXnYZfCwS+hhN+Rht8FDfaGHPZCHPQYPe4Qe9kIe9ho8NBB62Ad52GfwsE/oYT/kYb/BQ0OhhwOQhwMGDweEHg5CHg4aPDQSejgEeThk8HBI6OEw5OGwwUNjoYcjkIcjBg9HhB6OQh6OGjw0EXo4Bnk4ZvBwTOjhOOThuMFDU6GHE5CHEwYPJ4QeTkIeTho8NBN6OAV5OGXwcEro4TTk4bTBQ3OhhzOQhzMGD2eEHs5CHs4aPLQQejgHeThn8HBO6OE85OG8wUNLoYcLkIcLBg8XhB4uQh4uGjy0Enq4BHm4ZPBwSejhMuThssFDa6GHK5CHKwYPV4QerkIerho8tBF6uAZ5uGbwcE3o4Trk4brBQ1uhhxuQhxsGDzeEHm5CHm4aPLQTergFebhl8HBL6OE25OG2wUN7oYc7kIc7Bg93hB7uQh7uGjx0EHq4B3m4Z/BwT+jhPuThvsFDR6GHB5CHBwYPD4QeHkIeHho8dBJ6eAR5eGTw8Ejo4THk4bHBQ2ehhyeQhycGD0+EHp5CHp4aPHQRengGeXhm8PBM6OE55OG5wUNXoYcXkIcXBg8vhB5eQh5eGjx0E3p4BXl4ZfDwSujhNeThtcFDd6GHN5CHNwYPb4Qe3kIe3ho89BB6eAd5eGfw8E7o4T3k4b3BQ0+hhw+Qhw8GDx+EHj5CHj4aPPQSevgEefhk8PBJ6OEz5OGzwUNvoYcvkIcvBg9fhB6+Qh6+Gjz0EXr4Bnn4ZvDwTejhO+Thu8FDX6GHH5CHHwYPP4QefkIefho89BN6+AV5+GXw8Evo4Tfk4bfBQ3+hhz+Qhz8GD3+EHv5CHv4aPAwQevhnM+PhP7u0h/++/X/dCrCZ8RBgM+9hoNBDQMhDQIOHgEIP/0Ie/jV4GCT0EAjyEMjgIZDQQ2DIQ2CDh8FCD0EgD0EMHoIIPQSFPAQ1eBgi9BAM8hDM4CGY0ENwyENwg4ehQg8hIA8hDB5CCD2EhDyENHgYJvQQCvIQyuAhlNBDaMhDaIOH4UIPYSAPYQwewgg9hIU8hDV4GCH0EA7yEM7gIZzQQ3jIQ3iDh5FCDxEgDxEMHiIIPUSEPEQ0eBgl9BAJ8hDJ4CGS0ENkyENkg4fRQg9RIA9RDB6iCD1EhTxENXgYI/QQDfIQzeAhmtBDdMhDdIOHsUIPMSAPMQweYgg9xIQ8xDR4GCf0EAvyEMvgIZbQQ2zIQ2yDh/FCD3EgD3EMHuIIPcSFPMQ1eJgg9BAP8hDP4CGe0EN8yEN8g4eJQg8JIA8JDB4SCD0khDwkNHiYJPSQCPKQyOAhkdBDYshDYoOHyUIPSSAPSQwekgg9JIU8JDV4mCL0kAzykMzgIZnQQ3LIQ3KDh6lCDykgDykMHlIIPaSEPKQ0eJgm9JAK8pDK4CGV0ENqyENqg4fpQg9pIA9pDB7SCD2khTykNXiYIfSQDvKQzuAhndBDeshDeoOHmUIPGSAPGQweMgg9ZIQ8ZDR4mCX0kAnykMngIZPQQ2bIQ2aDh9lCD1kgD1kMHrIIPWSFPGQ1eJgj9JAN8pDN4CGb0EN2yEN2g4e5Qg85IA85DB5yCD3khDzkNHiYJ/SQC/KQy+Ahl9BDbshDboOH+UIPeSAPeQwe8gg95IU85DV4WCD0kA/ykM/gIZ/QQ37IQ36Dh4VCDwUgDwUMHgoIPRSEPBQ0eFgk9FAI8lDI4KGQ0ENhyENhg4fFQg9FIA9FDB6KCD0UhTwUNXhYIvRQDPJQzOChmNBDcchDcYOHpUIPJSAPJQweSgg9lIQ8lDR4WCb0UAryUMrgoZTQQ2nIQ2mDh+VCD2UgD2UMHsoIPZSFPJQ1eFgh9FAO8lDO4KGc0EN5yEN5g4eVQg8VIA8VDB4qCD1UhDxUNHhYJfRQCfJQyeChktBDZchDZYOH1UIPVSAPVQweqgg9VIU8VDV4WCP0UA3yUM3goZrQQ3XIQ3WDh7VCDzUgDzUMHmoIPdSEPNQ0eFgn9FAL8lDL4KGW0ENtyENtg4f1Qg91IA91DB7qCD3UhTzUNXjYIPRQD/JQz+ChntBDfchDfYOHjUIPDSAPDQweGgg9NIQ8NDR42CT00Ajy0MjgoZHQQ2PIQ2ODh81CD00gD00MHpoIPTSFPDQ1eNgi9NAM8tDM4KGZ0ENzyENzg4etQg8tIA8tDB5aCD20hDy0NHjYJvTQCvLQyuChldBDa8hDa4OH7UIPbSAPbQwe2gg9tIU8tDV42CH00A7y0M7goZ3QQ3vIQ3uDh51CDx0gDx0MHjoIPXSEPHQ0eNgl9NAJ8tDJ4KGT0ENnyENng4fdQg9dIA9dDB66CD10hTx0NXjYI/TQDfLQzeChm9BDd8hDd4OHvUIPPSAPPQweegg99IQ89DR42Cf00Avy0MvgoZfQQ2/IQ2+Dh/1CD30gD30MHvoIPfSFPPQ1eDgg9NAP8tDP4KGf0EN/yEN/g4eDQg8DIA8DDB4GCD0MhDwMNHg4JPQwCPIwyOBhkNDDYMjDYIOHw0IPQyAPQwwehgg9DIU8DDV4OCL0MAzyMMzgYZjQw3DIw3CDh6NCDyMgDyMMHkYIPYyEPIw0eDgm9DAK8jDK4GGU0MNoyMNog4fjQg9jIA9jDB7GCD2MhTyMNXg4IfQwDvIwzuBhnNDDeMjDeIOHk0IPEyAPEwweJgg9TIQ8TDR4OCX0MAnyMMngYZLQw2TIw2SDh9NCD1MgD1MMHqYIPUyFPEw1eDgj9DAN8jDN4GGa0MN0yMN0g4ezQg8zIA8zDB5mCD3MhDzMNHg4J/QwC/Iwy+BhltDDbMjDbIOH80IPcyAPcwwe5gg9zIU8zDV4uCD0MA/yMM/gYZ7Qw3zIw3yDh4tCDwsgDwsMHhYIPSyEPCw0eLgk9LAI8rDI4GGR0MNiyMNig4fLQg9LIA9LDB6WCD0shTwsNXi4IvSwDPKwzOBhmdDDcsjDcoOHq0IPKyAPKwweVgg9rIQ8rDR4uCb0sArysMrgYZXQw2rIw2qDh+tCD2sgD2sMHtYIPayFPKw1eLgh9LAO8rDO4GGd0MN6yMN6g4ebQg8bIA8bDB42CD1shDxsNHi4JfSwCfKwyeBhk9DDZsjDZoOH20IPWyAPWwwetgg9bIU8bDV4uCP0sA3ysM3gYZvQw3bIw3aDh7tCDzsgDzsMHnYIPeyEPOw0eLgn9LAL8rDL4GGX0MNuyMNug4f7Qg97IA97DB72CD3shTzsNXh4IPSwD/Kwz+Bhn9DDfsjDfoOHh0IPByAPBwweDgg9HIQ8HDR4eCT0cAjycMjg4ZDQw2HIw2GDh8dCD0cgD0cMHo4IPRyFPBw1eHgi9HAM8nDM4OGY0MNxyMNxg4enQg8nIA8nDB5OCD2chDycNHh4JvRwCvJwyuDhlNDDacjDaYOH50IPZyAPZwwezgg9nIU8nDV4eCH0cA7ycM7g4ZzQw3nIw3mDh5dCDxcgDxcMHi4IPVyEPFw0eHgl9HAJ8nDJ4OGS0MNlyMNlg4fXQg9XIA9XDB6uCD1chTxcNXh4I/RwDfJwzeDhmtDDdcjDdYOHt0IPNyAPNwwebgg93IQ83DR4eCf0cAvycMvg4ZbQw23Iw22Dh/dCD3cgD3cMHu4IPdyFPNw1ePgg9HAP8nDP4OGe0MN9yMN9g4ePQg8PIA8PDB4eCD08hDw8NHj4JPTwCPLwyODhkdDDY8jDY4OHz0IPTyAPTwwengg9PIU8PDV4+CL08Azy8Mzg4ZnQw3PIw3ODh69CDy8gDy8MHl4IPbyEPLw0ePgm9PAK8vDK4OGV0MNryMNrg4fvQg9vIA9vDB7eCD28hTy8NXj4IfTwDvLwzuDhndDDe8jDe4OHn0IPHyAPHwwePgg9fIQ8fDR4+CX08Any8Mng4ZPQw2fIw2eDh99CD18gD18MHr4IPXyFPHw1ePgj9PAN8vDN4OGb0MN3yMN3g4e/Qg8/IA8/DB5+CD38hDz8NHj4z2OqDr8gD78MHn4JPfyGPPw2eAgg9PAH8vDH4OGP0MNfyMNfg4eAQg//bGE8/GeX9vDft/+vWwG2MB4CbOE9/Cv0EBDyENDgIaDQw7+Qh38NHgIJPQSCPAQyeAgk9BAY8hDY4CGw0EMQyEMQg4cgQg9BIQ9BDR6CCD0EgzwEM3gIJvQQHPIQ3OAhqNBDCMhDCIOHEEIPISEPIQ0eggk9hII8hDJ4CCX0EBryENrgIbjQQxjIQxiDhzBCD2EhD2ENHkIIPYSDPIQzeAgn9BAe8hDe4CGk0EMEyEMEg4cIQg8RIQ8RDR5CCT1EgjxEMniIJPQQGfIQ2eAhtNBDFMhDFIOHKEIPUSEPUQ0ewgg9RIM8RDN4iCb0EB3yEN3gIazQQwzIQwyDhxhCDzEhDzENHsIJPcSCPMQyeIgl9BAb8hDb4CG80EMcyEMcg4c4Qg9xIQ9xDR4iCD3EgzzEM3iIJ/QQH/IQ3+AhotBDAshDAoOHBEIPCSEPCQ0eIgk9JII8JDJ4SCT0kBjykNjgIbLQQxLIQxKDhyRCD0khD0kNHqIIPSSDPCQzeEgm9JAc8pDc4CGq0EMKyEMKg4cUQg8pIQ8pDR6iCT2kgjykMnhIJfSQGvKQ2uAhutBDGshDGoOHNEIPaSEPaQ0eYgg9pIM8pDN4SCf0kB7ykN7gIabQQwbIQwaDhwxCDxkhDxkNHmIJPWSCPGQyeMgk9JAZ8pDZ4CG20EMWyEMWg4csQg9ZIQ9ZDR7iCD1kgzxkM3jIJvSQHfKQ3eAhrtBDDshDDoOHHEIPOSEPOQ0e4gk95II85DJ4yCX0kBvykNvgIb7QQx7IQx6DhzxCD3khD3kNHhIIPeSDPOQzeMgn9JAf8pDf4CGh0EMByEMBg4cCQg8FIQ8FDR4SCT0UgjwUMngoJPRQGPJQ2OAhsdBDEchDEYOHIkIPRSEPRQ0ekgg9FIM8FDN4KCb0UBzyUNzgIanQQwnIQwmDhxJCDyUhDyUNHpIJPZSCPJQyeCgl9FAa8lDa4CG50EMZyEMZg4cyQg9lIQ9lDR5SCD2UgzyUM3goJ/RQHvJQ3uAhpdBDBchDBYOHCkIPFSEPFQ0eUgk9VII8VDJ4qCT0UBnyUNngIbXQQxXIQxWDhypCD1UhD1UNHtIIPVSDPFQzeKgm9FAd8lDd4CGt0EMNyEMNg4caQg81IQ81DR7SCT3UgjzUMnioJfRQG/JQ2+AhvdBDHchDHYOHOkIPdSEPdQ0eMgg91IM81DN4qCf0UB/yUN/gIaPQQwPIQwODhwZCDw0hDw0NHjIJPTSCPDQyeGgk9NAY8tDY4CGz0EMTyEMTg4cmQg9NIQ9NDR6yCD00gzw0M3hoJvTQHPLQ3OAhq9BDC8hDC4OHFkIPLSEPLQ0esgk9tII8tDJ4aCX00Bry0NrgIbvQQxvIQxuDhzZCD20hD20NHnIIPbSDPLQzeGgn9NAe8tDe4CGn0EMHyEMHg4cOQg8dIQ8dDR5yCT10gjx0MnjoJPTQGfLQ2eAht9BDF8hDF4OHLkIPXSEPXQ0e8gg9dIM8dDN46Cb00B3y0N3gIa/QQw/IQw+Dhx5CDz0hDz0NHvIJPfSCPPQyeOgl9NAb8tDb4CG/0EMfyEMfg4c+Qg99IQ99DR4KCD30gzz0M3joJ/TQH/LQ3+ChoNDDAMjDAIOHAUIPAyEPAw0eCgk9DII8DDJ4GCT0MBjyMNjgobDQwxDIwxCDhyFCD0MhD0MNHooIPQyDPAwzeBgm9DAc8jDc4KGo0MMIyMMIg4cRQg8jIQ8jDR6KCT2MgjyMMngYJfQwGvIw2uChuNDDGMjDGIOHMUIPYyEPYw0eSgg9jIM8jDN4GCf0MB7yMN7goaTQwwTIwwSDhwlCDxMhDxMNHkoJPUyCPEwyeJgk9DAZ8jDZ4KG00MMUyMMUg4cpQg9TIQ9TDR7KCD1MgzxMM3iYJvQwHfIw3eChrNDDDMjDDIOHGUIPMyEPMw0eygk9zII8zDJ4mCX0MBvyMNvgobzQwxzIwxyDhzlCD3MhD3MNHioIPcyDPMwzeJgn9DAf8jDf4KGi0MMCyMMCg4cFQg8LIQ8LDR4qCT0sgjwsMnhYJPSwGPKw2OChstDDEsjDEoOHJUIPSyEPSw0eqgg9LIM8LDN4WCb0sBzysNzgoarQwwrIwwqDhxVCDyshDysNHqoJPayCPKwyeFgl9LAa8rDa4KG60MMayMMag4c1Qg9rIQ9rDR5qCD2sgzysM3hYJ/SwHvKw3uChptDDBsjDBoOHDUIPGyEPGw0eagk9bII8bDJ42CT0sBnysNngobbQwxbIwxaDhy1CD1shD1sNHuoIPWyDPGwzeNgm9LAd8rDd4KGu0MMOyMMOg4cdQg87IQ87DR7qCT3sgjzsMnjYJfSwG/Kw2+ChvtDDHsjDHoOHPUIPeyEPew0eGgg97IM87DN42Cf0sB/ysN/goaHQwwHIwwGDhwNCDwchDwcNHhoJPRyCPBwyeDgk9HAY8nDY4KGx0MMRyMMRg4cjQg9HIQ9HDR6aCD0cgzwcM3g4JvRwHPJw3OChqdDDCcjDCYOHE0IPJyEPJw0emgk9nII8nDJ4OCX0cBrycNrgobnQwxnIwxmDhzNCD2chD2cNHloIPZyDPJwzeDgn9HAe8nDe4KGl0MMFyMMFg4cLQg8XIQ8XDR5aCT1cgjxcMni4JPRwGfJw2eChtdDDFcjDFYOHK0IPVyEPVw0e2gg9XIM8XDN4uCb0cB3ycN3goa3Qww3Iww2DhxtCDzchDzcNHtoJPdyCPNwyeLgl9HAb8nDb4KG90MMdyMMdg4c7Qg93IQ93DR46CD3cgzzcM3i4J/RwH/Jw3+Cho9DDA8jDA4OHB0IPDyEPDw0eOgk9PII8PDJ4eCT08Bjy8NjgobPQwxPIwxODhydCD08hD08NHroIPTyDPDwzeHgm9PAc8vDc4KGr0MMLyMMLg4cXQg8vIQ8vDR66CT28gjy8Mnh4JfTwGvLw2uChu9DDG8jDG4OHN0IPbyEPbw0eegg9vIM8vDN4eCf08B7y8N7goafQwwfIwweDhw9CDx8hDx8NHnoJPXyCPHwyePgk9PAZ8vDZ4KG30MMXyMMXg4cvQg9fIQ9fDR76CD18gzx8M3j4JvTwHfLw3eChr9DDD8jDD4OHH0IPPyEPPw0e+gk9/II8/DJ4+CX08Bvy8Nvgob/Qwx/Iwx+Dhz9CD38hD38NHgYIPfyzlfHwn13aw3/f/r9uBdjKeAiwlfcwUOghIOQhoMFDQKGHfyEP/xo8DBJ6CAR5CGTwEEjoITDkIbDBw2ChhyCQhyAGD0GEHoJCHoIaPAwReggGeQhm8BBM6CE45CG4wcNQoYcQkIcQBg8hhB5CQh5CGjwME3oIBXkIZfAQSughNOQhtMHDcKGHMJCHMAYPYYQewkIewho8jBB6CAd5CGfwEE7oITzkIbzBw0ihhwiQhwgGDxGEHiJCHiIaPIwSeogEeYhk8BBJ6CEy5CGywcNooYcokIcoBg9RhB6iQh6iGjyMEXqIBnmIZvAQTeghOuQhusHDWKGHGJCHGAYPMYQeYkIeYho8jBN6iAV5iGXwEEvoITbkIbbBw3ihhziQhzgGD3GEHuJCHuIaPEwQeogHeYhn8BBP6CE+5CG+wcNEoYcEkIcEBg8JhB4SQh4SGjxMEnpIBHlIZPCQSOghMeQhscHDZKGHJJCHJAYPSYQekkIekho8TBF6SAZ5SGbwkEzoITnkIbnBw1ShhxSQhxQGDymEHlJCHlIaPEwTekgFeUhl8JBK6CE15CG1wcN0oYc0kIc0Bg9phB7SQh7SGjzMEHpIB3lIZ/CQTughPeQhvcHDTKGHDJCHDAYPGYQeMkIeMho8zBJ6yAR5yGTwkEnoITPkIbPBw2yhhyyQhywGD1mEHrJCHrIaPMwResgGechm8JBN6CE75CG7wcNcoYcckIccBg85hB5yQh5yGjzME3rIBXnIZfCQS+ghN+Qht8HDfKGHPJCHPAYPeYQe8kIe8ho8LBB6yAd5yGfwkE/oIT/kIb/Bw0KhhwKQhwIGDwWEHgpCHgoaPCwSeigEeShk8FBI6KEw5KGwwcNioYcikIciBg9FhB6KQh6KGjwsEXooBnkoZvBQTOihOOShuMHDUqGHEpCHEgYPJYQeSkIeSho8LBN6KAV5KGXwUErooTTkobTBw3KhhzKQhzIGD2WEHspCHsoaPKwQeigHeShn8FBO6KE85KG8wcNKoYcKkIcKBg8VhB4qQh4qGjysEnqoBHmoZPBQSeihMuShssHDaqGHKpCHKgYPVYQeqkIeqho8rBF6qAZ5qGbwUE3ooTrkobrBw1qhhxqQhxoGDzWEHmpCHmoaPKwTeqgFeahl8FBL6KE25KG2wcN6oYc6kIc6Bg91hB7qQh7qGjxsEHqoB3moZ/BQT+ihPuShvsHDRqGHBpCHBgYPDYQeGkIeGho8bBJ6aAR5aGTw0EjooTHkobHBw2ahhyaQhyYGD02EHppCHpoaPGwRemgGeWhm8NBM6KE55KG5wcNWoYcWkIcWBg8thB5aQh5aGjxsE3poBXloZfDQSuihNeShtcHDdqGHNpCHNgYPbYQe2kIe2ho87BB6aAd5aGfw0E7ooT3kob3Bw06hhw6Qhw4GDx2EHjpCHjoaPOwSeugEeehk8NBJ6KEz5KGzwcNuoYcukIcuBg9dhB66Qh66GjzsEXroBnnoZvDQTeihO+Shu8HDXqGHHpCHHgYPPYQeekIeeho87BN66AV56GXw0EvooTfkobfBw36hhz6Qhz4GD32EHvpCHvoaPBwQeugHeehn8NBP6KE/5KG/wcNBoYcBkIcBBg8DhB4GQh4GGjwcEnoYBHkYZPAwSOhhMORhsMHDYaGHIZCHIQYPQ4QehkIehho8HBF6GAZ5GGbwMEzoYTjkYbjBw1GhhxGQhxEGDyOEHkZCHkYaPBwTehgFeRhl8DBK6GE05GG0wcNxoYcxkIcxBg9jhB7GQh7GGjycEHoYB3kYZ/AwTuhhPORhvMHDSaGHCZCHCQYPE4QeJkIeJho8nBJ6mAR5mGTwMEnoYTLkYbLBw2mhhymQhykGD1OEHqZCHqYaPJwRepgGeZhm8DBN6GE65GG6wcNZoYcZkIcZBg8zhB5mQh5mGjycE3qYBXmYZfAwS+hhNuRhtsHDeaGHOZCHOQYPc4Qe5kIe5ho8XBB6mAd5mGfwME/oYT7kYb7Bw0WhhwWQhwUGDwuEHhZCHhYaPFwSelgEeVhk8LBI6GEx5GGxwcNloYclkIclBg9LhB6WQh6WGjxcEXpYBnlYZvCwTOhhOeRhucHDVaGHFZCHFQYPK4QeVkIeVho8XBN6WAV5WGXwsEroYTXkYbXBw3WhhzWQhzUGD2uEHtZCHtYaPNwQelgHeVhn8LBO6GE95GG9wcNNoYcNkIcNBg8bhB42Qh42GjzcEnrYBHnYZPCwSehhM+Rhs8HDbaGHLZCHLQYPW4QetkIetho83BF62AZ52GbwsE3oYTvkYbvBw12hhx2Qhx0GDzuEHnZCHnYaPNwTetgFedhl8LBL6GE35GG3wcN9oYc9kIc9Bg97hB72Qh72Gjw8EHrYB3nYZ/CwT+hhP+Rhv8HDQ6GHA5CHAwYPB4QeDkIeDho8PBJ6OAR5OGTwcEjo4TDk4bDBw2OhhyOQhyMGD0eEHo5CHo4aPDwRejgGeThm8HBM6OE45OG4wcNToYcTkIcTBg8nhB5OQh5OGjw8E3o4BXk4ZfBwSujhNOThtMHDc6GHM5CHMwYPZ4QezkIezho8vBB6OAd5OGfwcE7o4Tzk4bzBw0uhhwuQhwsGDxeEHi5CHi4aPLwSergEebhk8HBJ6OEy5OGywcNroYcrkIcrBg9XhB6uQh6uGjy8EXq4Bnm4ZvBwTejhOuThusHDW6GHG5CHGwYPN4QebkIebho8vBN6uAV5uGXwcEvo4Tbk4bbBw3uhhzuQhzsGD3eEHu5CHu4aPHwQergHebhn8HBP6OE+5OG+wcNHoYcHkIcHBg8PhB4eQh4eGjx8Enp4BHl4ZPDwSOjhMeThscHDZ6GHJ5CHJwYPT4QenkIenho8fBF6eAZ5eGbw8Ezo4Tnk4bnBw1ehhxeQhxcGDy+EHl5CHl4aPHwTengFeXhl8PBK6OE15OG1wcN3oYc3kIc3Bg9vhB7eQh7eGjz8EHp4B3l4Z/DwTujhPeThvcHDT6GHD5CHDwYPH4QePkIePho8/BJ6+AR5+GTw8Eno4TPk4bPBw2+hhy+Qhy8GD1+EHr5CHr4aPPwRevgGefhm8PBN6OE75OG7wcNfoYcfkIcfBg8/hB5+Qh5+Gjz8E0jX4Rfk4ZfBwy+hh9+Qh98GDwGEHv5AHv4YPPwRevgLefhr8BBQ6OGfbYyH/+zSHv779v91K8A2xkOAbbyHf4UeAkIeAho8BBR6+Bfy8K/BQyChh0CQh0AGD4GEHgJDHgIbPAQWeggCeQhi8BBE6CEo5CGowUMQoYdgkIdgBg/BhB6CQx6CGzwEFXoIAXkIYfAQQughJOQhpMFDMKGHUJCHUAYPoYQeQkMeQhs8BBd6CAN5CGPwEEboISzkIazBQwihh3CQh3AGD+GEHsJDHsIbPIQUeogAeYhg8BBB6CEi5CGiwUMooYdIkIdIBg+RhB4iQx4iGzyEFnqIAnmIYvAQReghKuQhqsFDGKGHaJCHaAYP0YQeokMeohs8hBV6iAF5iGHwEEPoISbkIabBQzihh1iQh1gGD7GEHmJDHmIbPIQXeogDeYhj8BBH6CEu5CGuwUMEoYd4kId4Bg/xhB7iQx7iGzxEFHpIAHlIYPCQQOghIeQhocFDJKGHRJCHRAYPiYQeEkMeEhs8RBZ6SAJ5SGLwkEToISnkIanBQxShh2SQh2QGD8mEHpJDHpIbPEQVekgBeUhh8JBC6CEl5CGlwUM0oYdUkIdUBg+phB5SQx5SGzxEF3pIA3lIY/CQRughLeQhrcFDDKGHdJCHdAYP6YQe0kMe0hs8xBR6yAB5yGDwkEHoISPkIaPBQyyhh0yQh0wGD5mEHjJDHjIbPMQWesgCechi8JBF6CEr5CGrwUMcoYdskIdsBg/ZhB6yQx6yGzzEFXrIAXnIYfCQQ+ghJ+Qhp8FDPKGHXJCHXAYPuYQeckMechs8xBd6yAN5yGPwkEfoIS/kIa/BQwKhh3yQh3wGD/mEHvJDHvIbPCQUeigAeShg8FBA6KEg5KGgwUMioYdCkIdCBg+FhB4KQx4KGzwkFnooAnkoYvBQROihKOShqMFDEqGHYpCHYgYPxYQeikMeihs8JBV6KAF5KGHwUELooSTkoaTBQzKhh1KQh1IGD6WEHkpDHkobPCQXeigDeShj8FBG6KEs5KGswUMKoYdykIdyBg/lhB7KQx7KGzykFHqoAHmoYPBQQeihIuShosFDKqGHSpCHSgYPlYQeKkMeKhs8pBZ6qAJ5qGLwUEXooSrkoarBQxqhh2qQh2oGD9WEHqpDHqobPKQVeqgBeahh8FBD6KEm5KGmwUM6oYdakIdaBg+1hB5qQx5qGzykF3qoA3moY/BQR+ihLuShrsFDBqGHepCHegYP9YQe6kMe6hs8ZBR6aAB5aGDw0EDooSHkoaHBQyahh0aQh0YGD42EHhpDHhobPGQWemgCeWhi8NBE6KEp5KGpwUMWoYdmkIdmBg/NhB6aQx6aGzxkFXpoAXloYfDQQuihJeShpcFDNqGHVpCHVgYPrYQeWkMeWhs8ZBd6aAN5aGPw0EbooS3koa3BQw6hh3aQh3YGD+2EHtpDHtobPOQUeugAeehg8NBB6KEj5KGjwUMuoYdOkIdOBg+dhB46Qx46GzzkFnroAnnoYvDQReihK+Shq8FDHqGHbpCHbgYP3YQeukMeuhs85BV66AF56GHw0EPooSfkoafBQz6hh16Qh14GD72EHnpDHnobPOQXeugDeehj8NBH6KEv5KGvwUMBoYd+kId+Bg/9hB76Qx76GzwUFHoYAHkYYPAwQOhhIORhoMFDIaGHQZCHQQYPg4QeBkMeBhs8FBZ6GAJ5GGLwMEToYSjkYajBQxGhh2GQh2EGD8OEHoZDHoYbPBQVehgBeRhh8DBC6GEk5GGkwUMxoYdRkIdRBg+jhB5GQx5GGzwUF3oYA3kYY/AwRuhhLORhrMFDCaGHcZCHcQYP44QexkMexhs8lBR6mAB5mGDwMEHoYSLkYaLBQymhh0mQh0kGD5OEHiZDHiYbPJQWepgCeZhi8DBF6GEq5GGqwUMZoYdpkIdpBg/ThB6mQx6mGzyUFXqYAXmYYfAwQ+hhJuRhpsFDOaGHWZCHWQYPs4QeZkMeZhs8lBd6mAN5mGPwMEfoYS7kYa7BQwWhh3mQh3kGD/OEHuZDHuYbPFQUelgAeVhg8LBA6GEh5GGhwUMloYdFkIdFBg+LhB4WQx4WGzxUFnpYAnlYYvCwROhhKeRhqcFDFaGHZZCHZQYPy4QelkMelhs8VBV6WAF5WGHwsELoYSXkYaXBQzWhh1WQh1UGD6uEHlZDHlYbPFQXelgDeVhj8LBG6GEt5GGtwUMNoYd1kId1Bg/rhB7WQx7WGzzUFHrYAHnYYPCwQehhI+Rho8FDLaGHTZCHTQYPm4QeNkMeNhs81BZ62AJ52GLwsEXoYSvkYavBQx2hh22Qh20GD9uEHrZDHrYbPNQVetgBedhh8LBD6GEn5GGnwUM9oYddkIddBg+7hB52Qx52GzzUF3rYA3nYY/CwR+hhL+Rhr8FDA6GHfZCHfQYP+4Qe9kMe9hs8NBR6OAB5OGDwcEDo4SDk4aDBQyOhh0OQh0MGD4eEHg5DHg4bPDQWejgCeThi8HBE6OEo5OGowUMToYdjkIdjBg/HhB6OQx6OGzw0FXo4AXk4YfBwQujhJOThpMFDM6GHU5CHUwYPp4QeTkMeThs8NBd6OAN5OGPwcEbo4Szk4azBQwuhh3OQh3MGD+eEHs5DHs4bPLQUergAebhg8HBB6OEi5OGiwUMroYdLkIdLBg+XhB4uQx4uGzy0Fnq4Anm4YvBwRejhKuThqsFDG6GHa5CHawYP14QerkMerhs8tBV6uAF5uGHwcEPo4Sbk4abBQzuhh1uQh1sGD7eEHm5DHm4bPLQXergDebhj8HBH6OEu5OGuwUMHoYd7kId7Bg/3hB7uQx7uGzx0FHp4AHl4YPDwQOjhIeThocFDJ6GHR5CHRwYPj4QeHkMeHhs8dBZ6eAJ5eGLw8ETo4Snk4anBQxehh2eQh2cGD8+EHp5DHp4bPHQVengBeXhh8PBC6OEl5OGlwUM3oYdXkIdXBg+vhB5eQx5eGzx0F3p4A3l4Y/DwRujhLeThrcFDD6GHd5CHdwYP74Qe3kMe3hs89BR6+AB5+GDw8EHo4SPk4aPBQy+hh0+Qh08GD5+EHj5DHj4bPPQWevgCefhi8PBF6OEr5OGrwUMfoYdvkIdvBg/fhB6+Qx6+Gzz0FXr4AXn4YfDwQ+jhJ+Thp8FDP6GHX5CHXwYPv4QefkMefhs89Bd6+AN5+GPw8Efo4S/k4a/BwwChh3+2Mx7+s0t7+O/b/9etANsZDwG28x4GCj0EhDwENHgIKPTwL+ThX4OHQUIPgSAPgQweAgk9BIY8BDZ4GCz0EATyEMTgIYjQQ1DIQ1CDhyFCD8EgD8EMHoIJPQSHPAQ3eBgq9BAC8hDC4CGE0ENIyENIg4dhQg+hIA+hDB5CCT2EhjyENngYLvQQBvIQxuAhjNBDWMhDWIOHEUIP4SAP4Qwewgk9hIc8hDd4GCn0EAHyEMHgIYLQQ0TIQ0SDh1FCD5EgD5EMHiIJPUSGPEQ2eBgt9BAF8hDF4CGK0ENUyENUg4cxQg/RIA/RDB6iCT1EhzxEN3gYK/QQA/IQw+AhhtBDTMhDTIOHcUIPsSAPsQweYgk9xIY8xDZ4GC/0EAfyEMfgIY7QQ1zIQ1yDhwlCD/EgD/EMHuIJPcSHPMQ3eJgo9JAA8pDA4CGB0ENCyENCg4dJQg+JIA+JDB4SCT0khjwkNniYLPSQBPKQxOAhidBDUshDUoOHKUIPySAPyQwekgk9JIc8JDd4mCr0kALykMLgIYXQQ0rIQ0qDh2lCD6kgD6kMHlIJPaSGPKQ2eJgu9JAG8pDG4CGN0ENayENag4cZQg/pIA/pDB7SCT2khzykN3iYKfSQAfKQweAhg9BDRshDRoOHWUIPmSAPmQweMgk9ZIY8ZDZ4mC30kAXykMXgIYvQQ1bIQ1aDhzlCD9kgD9kMHrIJPWSHPGQ3eJgr9JAD8pDD4CGH0ENOyENOg4d5Qg+5IA+5DB5yCT3khjzkNniYL/SQB/KQx+Ahj9BDXshDXoOHBUIP+SAP+Qwe8gk95Ic85Dd4WCj0UADyUMDgoYDQQ0HIQ0GDh0VCD4UgD4UMHgoJPRSGPBQ2eFgs9FAE8lDE4KGI0ENRyENRg4clQg/FIA/FDB6KCT0UhzwUN3hYKvRQAvJQwuChhNBDSchDSYOHZUIPpSAPpQweSgk9lIY8lDZ4WC70UAbyUMbgoYzQQ1nIQ1mDhxVCD+UgD+UMHsoJPZSHPJQ3eFgp9FAB8lDB4KGC0ENFyENFg4dVQg+VIA+VDB4qCT1UhjxUNnhYLfRQBfJQxeChitBDVchDVYOHNUIP1SAP1Qweqgk9VIc8VDd4WCv0UAPyUMPgoYbQQ03IQ02Dh3VCD7UgD7UMHmoJPdSGPNQ2eFgv9FAH8lDH4KGO0ENdyENdg4cNQg/1IA/1DB7qCT3UhzzUN3jYKPTQAPLQwOChgdBDQ8hDQ4OHTUIPjSAPjQweGgk9NIY8NDZ42Cz00ATy0MTgoYnQQ1PIQ1ODhy1CD80gD80MHpoJPTSHPDQ3eNgq9NAC8tDC4KGF0ENLyENLg4dtQg+tIA+tDB5aCT20hjy0NnjYLvTQBvLQxuChjdBDW8hDW4OHHUIP7SAP7Qwe2gk9tIc8tDd42Cn00AHy0MHgoYPQQ0fIQ0eDh11CD50gD50MHjoJPXSGPHQ2eNgt9NAF8tDF4KGL0ENXyENXg4c9Qg/dIA/dDB66CT10hzx0N3jYK/TQA/LQw+Chh9BDT8hDT4OHfUIPvSAPvQweegk99IY89DZ42C/00Afy0MfgoY/QQ1/IQ1+DhwNCD/0gD/0MHvoJPfSHPPQ3eDgo9DAA8jDA4GGA0MNAyMNAg4dDQg+DIA+DDB4GCT0MhjwMNng4LPQwBPIwxOBhiNDDUMjDUIOHI0IPwyAPwwwehgk9DIc8DDd4OCr0MALyMMLgYYTQw0jIw0iDh2NCD6MgD6MMHkYJPYyGPIw2eDgu9DAG8jDG4GGM0MNYyMNYg4cTQg/jIA/jDB7GCT2MhzyMN3g4KfQwAfIwweBhgtDDRMjDRIOHU0IPkyAPkwweJgk9TIY8TDZ4OC30MAXyMMXgYYrQw1TIw1SDhzNCD9MgD9MMHqYJPUyHPEw3eDgr9DAD8jDD4GGG0MNMyMNMg4dzQg+zIA+zDB5mCT3MhjzMNng4L/QwB/Iwx+BhjtDDXMjDXIOHC0IP8yAP8wwe5gk9zIc8zDd4uCj0sADysMDgYYHQw0LIw0KDh0tCD4sgD4sMHhYJPSyGPCw2eLgs9LAE8rDE4GGJ0MNSyMNSg4crQg/LIA/LDB6WCT0shzwsN3i4KvSwAvKwwuBhhdDDSsjDSoOHa0IPqyAPqwweVgk9rIY8rDZ4uC70sAbysMbgYY3Qw1rIw1qDhxtCD+sgD+sMHtYJPayHPKw3eLgp9LAB8rDB4GGD0MNGyMNGg4dbQg+bIA+bDB42CT1shjxsNni4LfSwBfKwxeBhi9DDVsjDVoOHO0IP2yAP2wwetgk9bIc8bDd4uCv0sAPysMPgYYfQw07Iw06Dh3tCD7sgD7sMHnYJPeyGPOw2eLgv9LAH8rDH4GGP0MNeyMNeg4cHQg/7IA/7DB72CT3shzzsN3h4KPRwAPJwwODhgNDDQcjDQYOHR0IPhyAPhwweDgk9HIY8HDZ4eCz0cATycMTg4YjQw1HIw1GDhydCD8cgD8cMHo4JPRyHPBw3eHgq9HAC8nDC4OGE0MNJyMNJg4dnQg+nIA+nDB5OCT2chjycNnh4LvRwBvJwxuDhjNDDWcjDWYOHF0IP5yAP5wwezgk9nIc8nDd4eCn0cAHycMHg4YLQw0XIw0WDh1dCD5cgD5cMHi4JPVyGPFw2eHgt9HAF8nDF4OGK0MNVyMNVg4c3Qg/XIA/XDB6uCT1chzxcN3h4K/RwA/Jww+DhhtDDTcjDTYOHd0IPtyAPtwwebgk93IY83DZ4eC/0cAfycMfg4Y7Qw13Iw12Dhw9CD/cgD/cMHu4JPdyHPNw3ePgo9PAA8vDA4OGB0MNDyMNDg4dPQg+PIA+PDB4eCT08hjw8Nnj4LPTwBPLwxODhidDDU8jDU4OHL0IPzyAPzwwengk9PIc8PDd4+Cr08ALy8MLg4YXQw0vIw0uDh29CD68gD68MHl4JPbyGPLw2ePgu9PAG8vDG4OGN0MNbyMNbg4cfQg/vIA/vDB7eCT28hzy8N3j4KfTwAfLwweDhg9DDR8jDR4OHX0IPnyAPnwwePgk9fIY8fDZ4+C308AXy8MXg4YvQw1fIw1eDhz9CD98gD98MHr4JPXyHPHw3ePgr9PAD8vDD4OGH0MNPyMNPg4d/Aus6/II8/DJ4+CX08Bvy8NvgIYDQwx/Iwx+Dhz9CD38hD38NHgIKPfyzg/Hwn13aw3/f/r9uBdjBeAiwg/fwr9BDQMhDQIOHgEIP/0Ie/jV4CCT0EAjyEMjgIZDQQ2DIQ2CDh8BCD0EgD0EMHoIIPQSFPAQ1eAgi9BAM8hDM4CGY0ENwyENwg4egQg8hIA8hDB5CCD2EhDyENHgIJvQQCvIQyuAhlNBDaMhDaIOH4EIPYSAPYQwewgg9hIU8hDV4CCH0EA7yEM7gIZzQQ3jIQ3iDh5BCDxEgDxEMHiIIPUSEPEQ0eAgl9BAJ8hDJ4CGS0ENkyENkg4fQQg9RIA9RDB6iCD1EhTxENXgII/QQDfIQzeAhmtBDdMhDdIOHsEIPMSAPMQweYgg9xIQ8xDR4CCf0EAvyEMvgIZbQQ2zIQ2yDh/BCD3EgD3EMHuIIPcSFPMQ1eIgg9BAP8hDP4CGe0EN8yEN8g4eIQg8JIA8JDB4SCD0khDwkNHiIJPSQCPKQyOAhkdBDYshDYoOHyEIPSSAPSQwekgg9JIU8JDV4iCL0kAzykMzgIZnQQ3LIQ3KDh6hCDykgDykMHlIIPaSEPKQ0eIgm9JAK8pDK4CGV0ENqyENqg4foQg9pIA9pDB7SCD2khTykNXiIIfSQDvKQzuAhndBDeshDeoOHmEIPGSAPGQweMgg9ZIQ8ZDR4iCX0kAnykMngIZPQQ2bIQ2aDh9hCD1kgD1kMHrIIPWSFPGQ1eIgj9JAN8pDN4CGb0EN2yEN2g4e4Qg85IA85DB5yCD3khDzkNHiIJ/SQC/KQy+Ahl9BDbshDboOH+EIPeSAPeQwe8gg95IU85DV4SCD0kA/ykM/gIZ/QQ37IQ36Dh4RCDwUgDwUMHgoIPRSEPBQ0eEgk9FAI8lDI4KGQ0ENhyENhg4fEQg9FIA9FDB6KCD0UhTwUNXhIIvRQDPJQzOChmNBDcchDcYOHpEIPJSAPJQweSgg9lIQ8lDR4SCb0UAryUMrgoZTQQ2nIQ2mDh+RCD2UgD2UMHsoIPZSFPJQ1eEgh9FAO8lDO4KGc0EN5yEN5g4eUQg8VIA8VDB4qCD1UhDxUNHhIJfRQCfJQyeChktBDZchDZYOH1EIPVSAPVQweqgg9VIU8VDV4SCP0UA3yUM3goZrQQ3XIQ3WDh7RCDzUgDzUMHmoIPdSEPNQ0eEgn9FAL8lDL4KGW0ENtyENtg4f0Qg91IA91DB7qCD3UhTzUNXjIIPRQD/JQz+ChntBDfchDfYOHjEIPDSAPDQweGgg9NIQ8NDR4yCT00Ajy0MjgoZHQQ2PIQ2ODh8xCD00gD00MHpoIPTSFPDQ1eMgi9NAM8tDM4KGZ0ENzyENzg4esQg8tIA8tDB5aCD20hDy0NHjIJvTQCvLQyuChldBDa8hDa4OH7EIPbSAPbQwe2gg9tIU8tDV4yCH00A7y0M7goZ3QQ3vIQ3uDh5xCDx0gDx0MHjoIPXSEPHQ0eMgl9NAJ8tDJ4KGT0ENnyENng4fcQg9dIA9dDB66CD10hTx0NXjII/TQDfLQzeChm9BDd8hDd4OHvEIPPSAPPQweegg99IQ89DR4yCf00Avy0MvgoZfQQ2/IQ2+Dh/xCD30gD30MHvoIPfSFPPQ1eCgg9NAP8tDP4KGf0EN/yEN/g4eCQg8DIA8DDB4GCD0MhDwMNHgoJPQwCPIwyOBhkNDDYMjDYIOHwkIPQyAPQwwehgg9DIU8DDV4KCL0MAzyMMzgYZjQw3DIw3CDh6JCDyMgDyMMHkYIPYyEPIw0eCgm9DAK8jDK4GGU0MNoyMNog4fiQg9jIA9jDB7GCD2MhTyMNXgoIfQwDvIwzuBhnNDDeMjDeIOHkkIPEyAPEwweJgg9TIQ8TDR4KCX0MAnyMMngYZLQw2TIw2SDh9JCD1MgD1MMHqYIPUyFPEw1eCgj9DAN8jDN4GGa0MN0yMN0g4eyQg8zIA8zDB5mCD3MhDzMNHgoJ/QwC/Iwy+BhltDDbMjDbIOH8kIPcyAPcwwe5gg9zIU8zDV4qCD0MA/yMM/gYZ7Qw3zIw3yDh4pCDwsgDwsMHhYIPSyEPCw0eKgk9LAI8rDI4GGR0MNiyMNig4fKQg9LIA9LDB6WCD0shTwsNXioIvSwDPKwzOBhmdDDcsjDcoOHqkIPKyAPKwweVgg9rIQ8rDR4qCb0sArysMrgYZXQw2rIw2qDh+pCD2sgD2sMHtYIPayFPKw1eKgh9LAO8rDO4GGd0MN6yMN6g4eaQg8bIA8bDB42CD1shDxsNHioJfSwCfKwyeBhk9DDZsjDZoOH2kIPWyAPWwwetgg9bIU8bDV4qCP0sA3ysM3gYZvQw3bIw3aDh7pCDzsgDzsMHnYIPeyEPOw0eKgn9LAL8rDL4GGX0MNuyMNug4f6Qg97IA97DB72CD3shTzsNXhoIPSwD/Kwz+Bhn9DDfsjDfoOHhkIPByAPBwweDgg9HIQ8HDR4aCT0cAjycMjg4ZDQw2HIw2GDh8ZCD0cgD0cMHo4IPRyFPBw1eGgi9HAM8nDM4OGY0MNxyMNxg4emQg8nIA8nDB5OCD2chDycNHhoJvRwCvJwyuDhlNDDacjDaYOH5kIPZyAPZwwezgg9nIU8nDV4aCH0cA7ycM7g4ZzQw3nIw3mDh5ZCDxcgDxcMHi4IPVyEPFw0eGgl9HAJ8nDJ4OGS0MNlyMNlg4fWQg9XIA9XDB6uCD1chTxcNXhoI/RwDfJwzeDhmtDDdcjDdYOHtkIPNyAPNwwebgg93IQ83DR4aCf0cAvycMvg4ZbQw23Iw22Dh/ZCD3cgD3cMHu4IPdyFPNw1eOgg9HAP8nDP4OGe0MN9yMN9g4eOQg8PIA8PDB4eCD08hDw8NHjoJPTwCPLwyODhkdDDY8jDY4OHzkIPTyAPTwwengg9PIU8PDV46CL08Azy8Mzg4ZnQw3PIw3ODh65CDy8gDy8MHl4IPbyEPLw0eOgm9PAK8vDK4OGV0MNryMNrg4fuQg9vIA9vDB7eCD28hTy8NXjoIfTwDvLwzuDhndDDe8jDe4OHnkIPHyAPHwwePgg9fIQ8fDR46CX08Any8Mng4ZPQw2fIw2eDh95CD18gD18MHr4IPXyFPHw1eOgj9PAN8vDN4OGb0MN3yMN3g4e+Qg8/IA8/DB5+CD38hDz8NHjoJ/TwC/Lwy+Dhl9DDb8jDb4OH/kIPfyAPfwwe/gg9/IU8/DV4GCD08M9OxsN/dmkP/337/7oVYCfjIcBO3sNAoYeAkIeABg8BhR7+hTz8a/AwSOghEOQhkMFDIKGHwJCHwAYPg4UegkAeghg8BBF6CAp5CGrwMEToIRjkIZjBQzChh+CQh+AGD0OFHkJAHkIYPIQQeggJeQhp8DBM6CEU5CGUwUMooYfQkIfQBg/DhR7CQB7CGDyEEXoIC3kIa/AwQughHOQhnMFDOKGH8JCH8AYPI4UeIkAeIhg8RBB6iAh5iGjwMEroIRLkIZLBQyShh8iQh8gGD6OFHqJAHqIYPEQReogKeYhq8DBG6CEa5CGawUM0oYfokIfoBg9jhR5iQB5iGDzEEHqICXmIafAwTughFuQhlsFDLKGH2JCH2AYP44Ue4kAe4hg8xBF6iAt5iGvwMEHoIR7kIZ7BQzyhh/iQh/gGDxOFHhJAHhIYPCQQekgIeUho8DBJ6CER5CGRwUMioYfEkIfEBg+ThR6SQB6SGDwkEXpICnlIavAwReghGeQhmcFDMqGH5JCH5AYPU4UeUkAeUhg8pBB6SAl5SGnwME3oIRXkIZXBQyqhh9SQh9QGD9OFHtJAHtIYPKQRekgLeUhr8DBD6CEd5CGdwUM6oYf0kIf0Bg8zhR4yQB4yGDxkEHrICHnIaPAwS+ghE+Qhk8FDJqGHzJCHzAYPs4UeskAeshg8ZBF6yAp5yGrwMEfoIRvkIZvBQzahh+yQh+wGD3OFHnJAHnIYPOQQesgJechp8DBP6CEX5CGXwUMuoYfckIfcBg/zhR7yQB7yGDzkEXrIC3nIa/CwQOghH+Qhn8FDPqGH/JCH/AYPC4UeCkAeChg8FBB6KAh5KGjwsEjooRDkoZDBQyGhh8KQh8IGD4uFHopAHooYPBQReigKeShq8LBE6KEY5KGYwUMxoYfikIfiBg9LhR5KQB5KGDyUEHooCXkoafCwTOihFOShlMFDKaGH0pCH0gYPy4UeykAeyhg8lBF6KAt5KGvwsELooRzkoZzBQzmhh/KQh/IGDyuFHipAHioYPFQQeqgIeaho8LBK6KES5KGSwUMloYfKkIfKBg+rhR6qQB6qGDxUEXqoCnmoavCwRuihGuShmsFDNaGH6pCH6gYPa4UeakAeahg81BB6qAl5qGnwsE7ooRbkoZbBQy2hh9qQh9oGD+uFHupAHuoYPNQReqgLeahr8LBB6KEe5KGewUM9oYf6kIf6Bg8bhR4aQB4aGDw0EHpoCHloaPCwSeihEeShkcFDI6GHxpCHxgYPm4UemkAemhg8NBF6aAp5aGrwsEXooRnkoZnBQzOhh+aQh+YGD1uFHlpAHloYPLQQemgJeWhp8LBN6KEV5KGVwUMroYfWkIfWBg/bhR7aQB7aGDy0EXpoC3loa/CwQ+ihHeShncFDO6GH9pCH9gYPO4UeOkAeOhg8dBB66Ah56GjwsEvooRPkoZPBQyehh86Qh84GD7uFHrpAHroYPHQReugKeehq8LBH6KEb5KGbwUM3oYfukIfuBg97hR56QB56GDz0EHroCXnoafCwT+ihF+Shl8FDL6GH3pCH3gYP+4Ue+kAe+hg89BF66At56GvwcEDooR/koZ/BQz+hh/6Qh/4GDweFHgZAHgYYPAwQehgIeRho8HBI6GEQ5GGQwcMgoYfBkIfBBg+HhR6GQB6GGDwMEXoYCnkYavBwROhhGORhmMHDMKGH4ZCH4QYPR4UeRkAeRhg8jBB6GAl5GGnwcEzoYRTkYZTBwyihh9GQh9EGD8eFHsZAHsYYPIwRehgLeRhr8HBC6GEc5GGcwcM4oYfxkIfxBg8nhR4mQB4mGDxMEHqYCHmYaPBwSuhhEuRhksHDJKGHyZCHyQYPp4UepkAephg8TBF6mAp5mGrwcEboYRrkYZrBwzShh+mQh+kGD2eFHmZAHmYYPMwQepgJeZhp8HBO6GEW5GGWwcMsoYfZkIfZBg/nhR7mQB7mGDzMEXqYC3mYa/BwQehhHuRhnsHDPKGH+ZCH+QYPF4UeFkAeFhg8LBB6WAh5WGjwcEnoYRHkYZHBwyKhh8WQh8UGD5eFHpZAHpYYPCwRelgKeVhq8HBF6GEZ5GGZwcMyoYflkIflBg9XhR5WQB5WGDysEHpYCXlYafBwTehhFeRhlcHDKqGH1ZCH1QYP14Ue1kAe1hg8rBF6WAt5WGvwcEPoYR3kYZ3Bwzqhh/WQh/UGDzeFHjZAHjYYPGwQetgIedho8HBL6GET5GGTwcMmoYfNkIfNBg+3hR62QB62GDxsEXrYCnnYavBwR+hhG+Rhm8HDNqGH7ZCH7QYPd4UedkAedhg87BB62Al52GnwcE/oYRfkYZfBwy6hh92Qh90GD/eFHvZAHvYYPOwRetgLedhr8PBA6GEf5GGfwcM+oYf9kIf9Bg8PhR4OQB4OGDwcEHo4CHk4aPDwSOjhEOThkMHDIaGHw5CHwwYPj4UejkAejhg8HBF6OAp5OGrw8ETo4Rjk4ZjBwzGhh+OQh+MGD0+FHk5AHk4YPJwQejgJeThp8PBM6OEU5OGUwcMpoYfTkIfTBg/PhR7OQB7OGDycEXo4C3k4a/DwQujhHOThnMHDOaGH85CH8wYPL4UeLkAeLhg8XBB6uAh5uGjw8Ero4RLk4ZLBwyWhh8uQh8sGD6+FHq5AHq4YPFwRergKebhq8PBG6OEa5OGawcM1oYfrkIfrBg9vhR5uQB5uGDzcEHq4CXm4afDwTujhFuThlsHDLaGH25CH2wYP74Ue7kAe7hg83BF6uAt5uGvw8EHo4R7k4Z7Bwz2hh/uQh/sGDx+FHh5AHh4YPDwQengIeXho8PBJ6OER5OGRwcMjoYfHkIfHBg+fhR6eQB6eGDw8EXp4Cnl4avDwRejhGeThmcHDM6GH55CH5wYPX4UeXkAeXhg8vBB6eAl5eGnw8E3o4RXk4ZXBwyuhh9eQh9cGD9+FHt5AHt4YPLwRengLeXhr8PBD6OEd5OGdwcM7oYf3kIf3Bg8/hR4+QB4+GDx8EHr4CHn4aPDwS+jhE+Thk8HDJ6GHz5CHzwYPv4UevkAevhg8fBF6+Ap5+Grw8Efo4Rvk4ZvBwzehh++Qh+8GD3+FHn5AHn4YPPwQevgJefhp8PBPEF2HX5CHXwYPv4QefkMefhs8BBB6+AN5+GPw8Efo4S/k4a/BQ0Chh392MR7+s0t7+O/b/9etALsYDwF28R7+FXoICHkIaPAQUOjhX8jDvwYPgYQeAkEeAhk8BBJ6CAx5CGzwEFjoIQjkIYjBQxChh6CQh6AGD0GEHoJBHoIZPAQTeggOeQhu8BBU6CEE5CGEwUMIoYeQkIeQBg/BhB5CQR5CGTyEEnoIDXkIbfAQXOghDOQhjMFDGKGHsJCHsAYPIYQewkEewhk8hBN6CA95CG/wEFLoIQLkIYLBQwShh4iQh4gGD6GEHiJBHiIZPEQSeogMeYhs8BBa6CEK5CGKwUMUoYeokIeoBg9hhB6iQR6iGTxEE3qIDnmIbvAQVughBuQhhsFDDKGHmJCHmAYP4YQeYkEeYhk8xBJ6iA15iG3wEF7oIQ7kIY7BQxyhh7iQh7gGDxGEHuJBHuIZPMQTeogPeYhv8BBR6CEB5CGBwUMCoYeEkIeEBg+RhB4SQR4SGTwkEnpIDHlIbPAQWeghCeQhicFDEqGHpJCHpAYPUYQekkEekhk8JBN6SA55SG7wEFXoIQXkIYXBQwqhh5SQh5QGD9GEHlJBHlIZPKQSekgNeUht8BBd6CEN5CGNwUMaoYe0kIe0Bg8xhB7SQR7SGTykE3pID3lIb/AQU+ghA+Qhg8FDBqGHjJCHjAYPsYQeMkEeMhk8ZBJ6yAx5yGzwEFvoIQvkIYvBQxahh6yQh6wGD3GEHrJBHrIZPGQTesgOechu8BBX6CEH5CGHwUMOoYeckIecBg/xhB5yQR5yGTzkEnrIDXnIbfAQX+ghD+Qhj8FDHqGHvJCHvAYPCYQe8kEe8hk85BN6yA95yG/wkFDooQDkoYDBQwGhh4KQh4IGD4mEHgpBHgoZPBQSeigMeShs8JBY6KEI5KGIwUMRoYeikIeiBg9JhB6KQR6KGTwUE3ooDnkobvCQVOihBOShhMFDCaGHkpCHkgYPyYQeSkEeShk8lBJ6KA15KG3wkFzooQzkoYzBQxmhh7KQh7IGDymEHspBHsoZPJQTeigPeShv8JBS6KEC5KGCwUMFoYeKkIeKBg+phB4qQR4qGTxUEnqoDHmobPCQWuihCuShisFDFaGHqpCHqgYPaYQeqkEeqhk8VBN6qA55qG7wkFbooQbkoYbBQw2hh5qQh5oGD+mEHmpBHmoZPNQSeqgNeaht8JBe6KEO5KGOwUMdoYe6kIe6Bg8ZhB7qQR7qGTzUE3qoD3mob/CQUeihAeShgcFDA6GHhpCHhgYPmYQeGkEeGhk8NBJ6aAx5aGzwkFnooQnkoYnBQxOhh6aQh6YGD1mEHppBHpoZPDQTemgOeWhu8JBV6KEF5KGFwUMLoYeWkIeWBg/ZhB5aQR5aGTy0EnpoDXlobfCQXeihDeShjcFDG6GHtpCHtgYPOYQe2kEe2hk8tBN6aA95aG/wkFPooQPkoYPBQwehh46Qh44GD7mEHjpBHjoZPHQSeugMeehs8JBb6KEL5KGLwUMXoYeukIeuBg95hB66QR66GTx0E3roDnnobvCQV+ihB+Shh8FDD6GHnpCHngYP+YQeekEeehk89BJ66A156G3wkF/ooQ/koY/BQx+hh76Qh74GDwWEHvpBHvoZPPQTeugPeehv8FBQ6GEA5GGAwcMAoYeBkIeBBg+FhB4GQR4GGTwMEnoYDHkYbPBQWOhhCORhiMHDEKGHoZCHoQYPRYQehkEehhk8DBN6GA55GG7wUFToYQTkYYTBwwihh5GQh5EGD8WEHkZBHkYZPIwSehgNeRht8FBc6GEM5GGMwcMYoYexkIexBg8lhB7GQR7GGTyME3oYD3kYb/BQUuhhAuRhgsHDBKGHiZCHiQYPpYQeJkEeJhk8TBJ6mAx5mGzwUFroYQrkYYrBwxShh6mQh6kGD2WEHqZBHqYZPEwTepgOeZhu8FBW6GEG5GGGwcMMoYeZkIeZBg/lhB5mQR5mGTzMEnqYDXmYbfBQXuhhDuRhjsHDHKGHuZCHuQYPFYQe5kEe5hk8zBN6mA95mG/wUFHoYQHkYYHBwwKhh4WQh4UGD5WEHhZBHhYZPCwSelgMeVhs8FBZ6GEJ5GGJwcMSoYelkIelBg9VhB6WQR6WGTwsE3pYDnlYbvBQVehhBeRhhcHDCqGHlZCHlQYP1YQeVkEeVhk8rBJ6WA15WG3wUF3oYQ3kYY3Bwxqhh7WQh7UGDzWEHtZBHtYZPKwTelgPeVhv8FBT6GED5GGDwcMGoYeNkIeNBg+1hB42QR42GTxsEnrYDHnYbPBQW+hhC+Rhi8HDFqGHrZCHrQYPdYQetkEethk8bBN62A552G7wUFfoYQfkYYfBww6hh52Qh50GD/WEHnZBHnYZPOwSetgNedht8FBf6GEP5GGPwcMeoYe9kIe9Bg8NhB72QR72GTzsE3rYD3nYb/DQUOjhAOThgMHDAaGHg5CHgwYPjYQeDkEeDhk8HBJ6OAx5OGzw0Fjo4Qjk4YjBwxGhh6OQh6MGD02EHo5BHo4ZPBwTejgOeThu8NBU6OEE5OGEwcMJoYeTkIeTBg/NhB5OQR5OGTycEno4DXk4bfDQXOjhDOThjMHDGaGHs5CHswYPLYQezkEezhk8nBN6OA95OG/w0FLo4QLk4YLBwwWhh4uQh4sGD62EHi5BHi4ZPFwSergMebhs8NBa6OEK5OGKwcMVoYerkIerBg9thB6uQR6uGTxcE3q4Dnm4bvDQVujhBuThhsHDDaGHm5CHmwYP7YQebkEebhk83BJ6uA15uG3w0F7o4Q7k4Y7Bwx2hh7uQh7sGDx2EHu5BHu4ZPNwTergPebhv8NBR6OEB5OGBwcMDoYeHkIeHBg+dhB4eQR4eGTw8Enp4DHl4bPDQWejhCeThicHDE6GHp5CHpwYPXYQenkEenhk8PBN6eA55eG7w0FXo4QXk4YXBwwuhh5eQh5cGD92EHl5BHl4ZPLwSengNeXht8NBd6OEN5OGNwcMboYe3kIe3Bg89hB7eQR7eGTy8E3p4D3l4b/DQU+jhA+Thg8HDB6GHj5CHjwYPvYQePkEePhk8fBJ6+Ax5+Gzw0Fvo4Qvk4YvBwxehh6+Qh68GD32EHr5BHr4ZPHwTevgOefhu8NBX6OEH5OGHwcMPoYefkIefBg/9hB5+QR5+GTz8Enr4DXn4bfDQX+jhD+Thj8HDH6GHv5CHvwYPA4Qe/tnNePjPLu3hv2//X7cC7GY8BNjNexgo9BAQ8hDQ4CGg0MO/kId/DR4GCT0EgjwEMngIJPQQGPIQ2OBhsNBDEMhDEIOHIEIPQSEPQQ0ehgg9BIM8BDN4CCb0EBzyENzgYajQQwjIQwiDhxBCDyEhDyENHoYJPYSCPIQyeAgl9BAa8hDa4GG40EMYyEMYg4cwQg9hIQ9hDR5GCD2EgzyEM3gIJ/QQHvIQ3uBhpNBDBMhDBIOHCEIPESEPEQ0eRgk9RII8RDJ4iCT0EBnyENngYbTQQxTIQxSDhyhCD1EhD1ENHsYIPUSDPEQzeIgm9BAd8hDd4GGs0EMMyEMMg4cYQg8xIQ8xDR7GCT3EgjzEMniIJfQQG/IQ2+BhvNBDHMhDHIOHOEIPcSEPcQ0eJgg9xIM8xDN4iCf0EB/yEN/gYaLQQwLIQwKDhwRCDwkhDwkNHiYJPSSCPCQyeEgk9JAY8pDY4GGy0EMSyEMSg4ckQg9JIQ9JDR6mCD0kgzwkM3hIJvSQHPKQ3OBhqtBDCshDCoOHFEIPKSEPKQ0epgk9pII8pDJ4SCX0kBrykNrgYbrQQxrIQxqDhzRCD2khD2kNHmYIPaSDPKQzeEgn9JAe8pDe4GGm0EMGyEMGg4cMQg8ZIQ8ZDR5mCT1kgjxkMnjIJPSQGfKQ2eBhttBDFshDFoOHLEIPWSEPWQ0e5gg9ZIM8ZDN4yCb0kB3ykN3gYa7QQw7IQw6DhxxCDzkhDzkNHuYJPeSCPOQyeMgl9JAb8pDb4GG+0EMeyEMeg4c8Qg95IQ95DR4WCD3kgzzkM3jIJ/SQH/KQ3+BhodBDAchDAYOHAkIPBSEPBQ0eFgk9FII8FDJ4KCT0UBjyUNjgYbHQQxHIQxGDhyJCD0UhD0UNHpYIPRSDPBQzeCgm9FAc8lDc4GGp0EMJyEMJg4cSQg8lIQ8lDR6WCT2UgjyUMngoJfRQGvJQ2uBhudBDGchDGYOHMkIPZSEPZQ0eVgg9lIM8lDN4KCf0UB7yUN7gYaXQQwXIQwWDhwpCDxUhDxUNHlYJPVSCPFQyeKgk9FAZ8lDZ4GG10EMVyEMVg4cqQg9VIQ9VDR7WCD1UgzxUM3ioJvRQHfJQ3eBhrdBDDchDDYOHGkIPNSEPNQ0e1gk91II81DJ4qCX0UBvyUNvgYb3QQx3IQx2DhzpCD3UhD3UNHjYIPdSDPNQzeKgn9FAf8lDf4GGj0EMDyEMDg4cGQg8NIQ8NDR42CT00gjw0MnhoJPTQGPLQ2OBhs9BDE8hDE4OHJkIPTSEPTQ0etgg9NIM8NDN4aCb00Bzy0NzgYavQQwvIQwuDhxZCDy0hDy0NHrYJPbSCPLQyeGgl9NAa8tDa4GG70EMbyEMbg4c2Qg9tIQ9tDR52CD20gzy0M3hoJ/TQHvLQ3uBhp9BDB8hDB4OHDkIPHSEPHQ0edgk9dII8dDJ46CT00Bny0NngYbfQQxfIQxeDhy5CD10hD10NHvYIPXSDPHQzeOgm9NAd8tDd4GGv0EMPyEMPg4ceQg89IQ89DR72CT30gjz0MnjoJfTQG/LQ2+Bhv9BDH8hDH4OHPkIPfSEPfQ0eDgg99IM89DN46Cf00B/y0N/g4aDQwwDIwwCDhwFCDwMhDwMNHg4JPQyCPAwyeBgk9DAY8jDY4OGw0MMQyMMQg4chQg9DIQ9DDR6OCD0MgzwMM3gYJvQwHPIw3ODhqNDDCMjDCIOHEUIPIyEPIw0ejgk9jII8jDJ4GCX0MBryMNrg4bjQwxjIwxiDhzFCD2MhD2MNHk4IPYyDPIwzeBgn9DAe8jDe4OGk0MMEyMMEg4cJQg8TIQ8TDR5OCT1MgjxMMniYJPQwGfIw2eDhtNDDFMjDFIOHKUIPUyEPUw0ezgg9TIM8TDN4mCb0MB3yMN3g4azQwwzIwwyDhxlCDzMhDzMNHs4JPcyCPMwyeJgl9DAb8jDb4OG80MMcyMMcg4c5Qg9zIQ9zDR4uCD3MgzzMM3iYJ/QwH/Iw3+DhotDDAsjDAoOHBUIPCyEPCw0eLgk9LII8LDJ4WCT0sBjysNjg4bLQwxLIwxKDhyVCD0shD0sNHq4IPSyDPCwzeFgm9LAc8rDc4OGq0MMKyMMKg4cVQg8rIQ8rDR6uCT2sgjysMnhYJfSwGvKw2uDhutDDGsjDGoOHNUIPayEPaw0ebgg9rIM8rDN4WCf0sB7ysN7g4abQwwbIwwaDhw1CDxshDxsNHm4JPWyCPGwyeNgk9LAZ8rDZ4OG20MMWyMMWg4ctQg9bIQ9bDR7uCD1sgzxsM3jYJvSwHfKw3eDhrtDDDsjDDoOHHUIPOyEPOw0e7gk97II87DJ42CX0sBvysNvg4b7Qwx7Iwx6Dhz1CD3shD3sNHh4IPeyDPOwzeNgn9LAf8rDf4OGh0MMByMMBg4cDQg8HIQ8HDR4eCT0cgjwcMng4JPRwGPJw2ODhsdDDEcjDEYOHI0IPRyEPRw0engg9HIM8HDN4OCb0cBzycNzg4anQwwnIwwmDhxNCDychDycNHp4JPZyCPJwyeDgl9HAa8nDa4OG50MMZyMMZg4czQg9nIQ9nDR5eCD2cgzycM3g4J/RwHvJw3uDhpdDDBcjDBYOHC0IPFyEPFw0eXgk9XII8XDJ4uCT0cBnycNng4bXQwxXIwxWDhytCD1chD1cNHt4IPVyDPFwzeLgm9HAd8nDd4OGt0MMNyMMNg4cbQg83IQ83DR7eCT3cgjzcMni4JfRwG/Jw2+DhvdDDHcjDHYOHO0IPdyEPdw0ePgg93IM83DN4uCf0cB/ycN/g4aPQwwPIwwODhwdCDw8hDw8NHj4JPTyCPDwyeHgk9PAY8vDY4OGz0MMTyMMTg4cnQg9PIQ9PDR6+CD08gzw8M3h4JvTwHPLw3ODhq9DDC8jDC4OHF0IPLyEPLw0evgk9vII8vDJ4eCX08Bry8Nrg4bvQwxvIwxuDhzdCD28hD28NHn4IPbyDPLwzeHgn9PAe8vDe4OGn0MMHyMMHg4cPQg8fIQ8fDR5+CT18gjx8Mnj4JPTwGfLw2eDht9DDF8jDF4OHL0IPXyEPXw0e/gg9fIM8fDN4+Cb08B3y8N3g4a/Qww/Iww+Dhx9CDz8hDz8NHv4JquvwC/Lwy+Dhl9DDb8jDb4OHAEIPfyAPfwwe/gg9/IU8/DV4CCj08M8exsN/dmkP/337/7oVYA/jIcAe3sO/Qg8BIQ8BDR4CCj38C3n41+AhkNBDIMhDIIOHQEIPgSEPgQ0eAgs9BIE8BDF4CCL0EBTyENTgIYjQQzDIQzCDh2BCD8EhD8ENHoIKPYSAPIQweAgh9BAS8hDS4CGY0EMoyEMog4dQQg+hIQ+hDR6CCz2EgTyEMXgII/QQFvIQ1uAhhNBDOMhDOIOHcEIP4SEP4Q0eQgo9RIA8RDB4iCD0EBHyENHgIZTQQyTIQySDh0hCD5EhD5ENHkILPUSBPEQxeIgi9BAV8hDV4CGM0EM0yEM0g4doQg/RIQ/RDR7CCj3EgDzEMHiIIfQQE/IQ0+AhnNBDLMhDLIOHWEIPsSEPsQ0ewgs9xIE8xDF4iCP0EBfyENfgIYLQQzzIQzyDh3hCD/EhD/ENHiIKPSSAPCQweEgg9JAQ8pDQ4CGS0EMiyEMig4dEQg+JIQ+JDR4iCz0kgTwkMXhIIvSQFPKQ1OAhitBDMshDMoOHZEIPySEPyQ0eogo9pIA8pDB4SCH0kBLykNLgIZrQQyrIQyqDh1RCD6khD6kNHqILPaSBPKQxeEgj9JAW8pDW4CGG0EM6yEM6g4d0Qg/pIQ/pDR5iCj1kgDxkMHjIIPSQEfKQ0eAhltBDJshDJoOHTEIPmSEPmQ0eYgs9ZIE8ZDF4yCL0kBXykNXgIY7QQzbIQzaDh2xCD9khD9kNHuIKPeSAPOQweMgh9JAT8pDT4CGe0EMuyEMug4dcQg+5IQ+5DR7iCz3kgTzkMXjII/SQF/KQ1+AhgdBDPshDPoOHfEIP+SEP+Q0eEgo9FIA8FDB4KCD0UBDyUNDgIZHQQyHIQyGDh0JCD4UhD4UNHhILPRSBPBQxeCgi9FAU8lDU4CGJ0EMxyEMxg4diQg/FIQ/FDR6SCj2UgDyUMHgoIfRQEvJQ0uAhmdBDKchDKYOHUkIPpSEPpQ0ekgs9lIE8lDF4KCP0UBbyUNbgIYXQQznIQzmDh3JCD+UhD+UNHlIKPVSAPFQweKgg9FAR8lDR4CGV0EMlyEMlg4dKQg+VIQ+VDR5SCz1UgTxUMXioIvRQFfJQ1eAhjdBDNchDNYOHakIP1SEP1Q0e0go91IA81DB4qCH0UBPyUNPgIZ3QQy3IQy2Dh1pCD7UhD7UNHtILPdSBPNQxeKgj9FAX8lDX4CGD0EM9yEM9g4d6Qg/1IQ/1DR4yCj00gDw0MHhoIPTQEPLQ0OAhk9BDI8hDI4OHRkIPjSEPjQ0eMgs9NIE8NDF4aCL00BTy0NTgIYvQQzPIQzODh2ZCD80hD80NHrIKPbSAPLQweGgh9NAS8tDS4CGb0EMryEMrg4dWQg+tIQ+tDR6yCz20gTy0MXhoI/TQFvLQ1uAhh9BDO8hDO4OHdkIP7SEP7Q0ecgo9dIA8dDB46CD00BHy0NHgIZfQQyfIQyeDh05CD50hD50NHnILPXSBPHQxeOgi9NAV8tDV4CGP0EM3yEM3g4duQg/dIQ/dDR7yCj30gDz0MHjoIfTQE/LQ0+Ahn9BDL8hDL4OHXkIPvSEPvQ0e8gs99IE89DF46CP00Bfy0NfgoYDQQz/IQz+Dh35CD/0hD/0NHgoKPQyAPAwweBgg9DAQ8jDQ4KGQ0MMgyMMgg4dBQg+DIQ+DDR4KCz0MgTwMMXgYIvQwFPIw1OChiNDDMMjDMIOHYUIPwyEPww0eigo9jIA8jDB4GCH0MBLyMNLgoZjQwyjIwyiDh1FCD6MhD6MNHooLPYyBPIwxeBgj9DAW8jDW4KGE0MM4yMM4g4dxQg/jIQ/jDR5KCj1MgDxMMHiYIPQwEfIw0eChlNDDJMjDJIOHSUIPkyEPkw0eSgs9TIE8TDF4mCL0MBXyMNXgoYzQwzTIwzSDh2lCD9MhD9MNHsoKPcyAPMwweJgh9DAT8jDT4KGc0MMsyMMsg4dZQg+zIQ+zDR7KCz3MgTzMMXiYI/QwF/Iw1+ChgtDDPMjDPIOHeUIP8yEP8w0eKgo9LIA8LDB4WCD0sBDysNDgoZLQwyLIwyKDh0VCD4shD4sNHioLPSyBPCwxeFgi9LAU8rDU4KGK0MMyyMMyg4dlQg/LIQ/LDR6qCj2sgDysMHhYIfSwEvKw0uChmtDDKsjDKoOHVUIPqyEPqw0eqgs9rIE8rDF4WCP0sBbysNbgoYbQwzrIwzqDh3VCD+shD+sNHmoKPWyAPGwweNgg9LAR8rDR4KGW0MMmyMMmg4dNQg+bIQ+bDR5qCz1sgTxsMXjYIvSwFfKw1eChjtDDNsjDNoOHbUIP2yEP2w0e6go97IA87DB42CH0sBPysNPgoZ7Qwy7Iwy6Dh11CD7shD7sNHuoLPeyBPOwxeNgj9LAX8rDX4KGB0MM+yMM+g4d9Qg/7IQ/7DR4aCj0cgDwcMHg4IPRwEPJw0OChkdDDIcjDIYOHQ0IPhyEPhw0eGgs9HIE8HDF4OCL0cBTycNTgoYnQwzHIwzGDh2NCD8chD8cNHpoKPZyAPJwweDgh9HAS8nDS4KGZ0MMpyMMpg4dTQg+nIQ+nDR6aCz2cgTycMXg4I/RwFvJw1uChhdDDOcjDOYOHc0IP5yEP5w0eWgo9XIA8XDB4uCD0cBHycNHgoZXQwyXIwyWDh0tCD5chD5cNHloLPVyBPFwxeLgi9HAV8nDV4KGN0MM1yMM1g4drQg/XIQ/XDR7aCj3cgDzcMHi4IfRwE/Jw0+ChndDDLcjDLYOHW0IPtyEPtw0e2gs93IE83DF4uCP0cBfycNfgoYPQwz3Iwz2Dh3tCD/chD/cNHjoKPTyAPDwweHgg9PAQ8vDQ4KGT0MMjyMMjg4dHQg+PIQ+PDR46Cz08gTw8MXh4IvTwFPLw1OChi9DDM8jDM4OHZ0IPzyEPzw0eugo9vIA8vDB4eCH08BLy8NLgoZvQwyvIwyuDh1dCD68hD68NHroLPbyBPLwxeHgj9PAW8vDW4KGH0MM7yMM7g4d3Qg/vIQ/vDR56Cj18gDx8MHj4IPTwEfLw0eChl9DDJ8jDJ4OHT0IPnyEPnw0eegs9fIE8fDF4+CL08BXy8NXgoY/QwzfIwzeDh29CD98hD98NHvoKPfyAPPwwePgh9PAT8vDT4KGf0MMvyMMvg4dfQg+/IQ+/DR76Cz38gTz8MXj4I/TwF/Lw1+BhgNDDP3sZD//ZpT389+3/61aAvYyHAHt5DwOFHgJCHgIaPAQUevgX8vCvwcMgoYdAkIdABg+BhB4CQx4CGzwMFnoIAnkIYvAQROghKOQhqMHDEKGHYJCHYAYPwYQegkMeghs8DBV6CAF5CGHwEELoISTkIaTBwzChh1CQh1AGD6GEHkJDHkIbPAwXeggDeQhj8BBG6CEs5CGswcMIoYdwkIdwBg/hhB7CQx7CGzyMFHqIAHmIYPAQQeghIuQhosHDKKGHSJCHSAYPkYQeIkMeIhs8jBZ6iAJ5iGLwEEXoISrkIarBwxihh2iQh2gGD9GEHqJDHqIbPIwVeogBeYhh8BBD6CEm5CGmwcM4oYdYkIdYBg+xhB5iQx5iGzyMF3qIA3mIY/AQR+ghLuQhrsHDBKGHeJCHeAYP8YQe4kMe4hs8TBR6SAB5SGDwkEDoISHkIaHBwyShh0SQh0QGD4mEHhJDHhIbPEwWekgCeUhi8JBE6CEp5CGpwcMUoYdkkIdkBg/JhB6SQx6SGzxMFXpIAXlIYfCQQughJeQhpcHDNKGHVJCHVAYPqYQeUkMeUhs8TBd6SAN5SGPwkEboIS3kIa3Bwwyhh3SQh3QGD+mEHtJDHtIbPMwUesgAechg8JBB6CEj5CGjwcMsoYdMkIdMBg+ZhB4yQx4yGzzMFnrIAnnIYvCQReghK+Qhq8HDHKGHbJCHbAYP2YQeskMeshs8zBV6yAF5yGHwkEPoISfkIafBwzyhh1yQh1wGD7mEHnJDHnIbPMwXesgDechj8JBH6CEv5CGvwcMCoYd8kId8Bg/5hB7yQx7yGzwsFHooAHkoYPBQQOihIOShoMHDIqGHQpCHQgYPhYQeCkMeChs8LBZ6KAJ5KGLwUETooSjkoajBwxKhh2KQh2IGD8WEHopDHoobPCwVeigBeShh8FBC6KEk5KGkwcMyoYdSkIdSBg+lhB5KQx5KGzwsF3ooA3koY/BQRuihLOShrMHDCqGHcpCHcgYP5YQeykMeyhs8rBR6qAB5qGDwUEHooSLkoaLBwyqhh0qQh0oGD5WEHipDHiobPKwWeqgCeahi8FBF6KEq5KGqwcMaoYdqkIdqBg/VhB6qQx6qGzysFXqoAXmoYfBQQ+ihJuShpsHDOqGHWpCHWgYPtYQeakMeahs8rBd6qAN5qGPwUEfooS7koa7Bwwahh3qQh3oGD/WEHupDHuobPGwUemgAeWhg8NBA6KEh5KGhwcMmoYdGkIdGBg+NhB4aQx4aGzxsFnpoAnloYvDQROihKeShqcHDFqGHZpCHZgYPzYQemkMemhs8bBV6aAF5aGHw0ELooSXkoaXBwzahh1aQh1YGD62EHlpDHlobPGwXemgDeWhj8NBG6KEt5KGtwcMOoYd2kId2Bg/thB7aQx7aGzzsFHroAHnoYPDQQeihI+Sho8HDLqGHTpCHTgYPnYQeOkMeOhs87BZ66AJ56GLw0EXooSvkoavBwx6hh26Qh24GD92EHrpDHrobPOwVeugBeehh8NBD6KEn5KGnwcM+oYdekIdeBg+9hB56Qx56GzzsF3roA3noY/DQR+ihL+Shr8HDAaGHfpCHfgYP/YQe+kMe+hs8HBR6GAB5GGDwMEDoYSDkYaDBwyGhh0GQh0EGD4OEHgZDHgYbPBwWehgCeRhi8DBE6GEo5GGowcMRoYdhkIdhBg/DhB6GQx6GGzwcFXoYAXkYYfAwQuhhJORhpMHDMaGHUZCHUQYPo4QeRkMeRhs8HBd6GAN5GGPwMEboYSzkYazBwwmhh3GQh3EGD+OEHsZDHsYbPJwUepgAeZhg8DBB6GEi5GGiwcMpoYdJkIdJBg+ThB4mQx4mGzycFnqYAnmYYvAwRehhKuRhqsHDGaGHaZCHaQYP04QepkMephs8nBV6mAF5mGHwMEPoYSbkYabBwzmhh1mQh1kGD7OEHmZDHmYbPJwXepgDeZhj8DBH6GEu5GGuwcMFoYd5kId5Bg/zhB7mQx7mGzxcFHpYAHlYYPCwQOhhIeRhocHDJaGHRZCHRQYPi4QeFkMeFhs8XBZ6WAJ5WGLwsEToYSnkYanBwxWhh2WQh2UGD8uEHpZDHpYbPFwVelgBeVhh8LBC6GEl5GGlwcM1oYdVkIdVBg+rhB5WQx5WGzxcF3pYA3lYY/CwRuhhLeRhrcHDDaGHdZCHdQYP64Qe1kMe1hs83BR62AB52GDwsEHoYSPkYaPBwy2hh02Qh00GD5uEHjZDHjYbPNwWetgCedhi8LBF6GEr5GGrwcMdoYdtkIdtBg/bhB62Qx62GzzcFXrYAXnYYfCwQ+hhJ+Rhp8HDPaGHXZCHXQYPu4QedkMedhs83Bd62AN52GPwsEfoYS/kYa/BwwOhh32Qh30GD/uEHvZDHvYbPDwUejgAeThg8HBA6OEg5OGgwcMjoYdDkIdDBg+HhB4OQx4OGzw8Fno4Ank4YvBwROjhKOThqMHDE6GHY5CHYwYPx4QejkMejhs8PBV6OAF5OGHwcELo4STk4aTBwzOhh1OQh1MGD6eEHk5DHk4bPDwXejgDeThj8HBG6OEs5OGswcMLoYdzkIdzBg/nhB7OQx7OGzy8FHq4AHm4YPBwQejhIuThosHDK6GHS5CHSwYPl4QeLkMeLhs8vBZ6uAJ5uGLwcEXo4Srk4arBwxuhh2uQh2sGD9eEHq5DHq4bPLwVergBebhh8HBD6OEm5OH/45WeuvAwGCUKt2ls27Zt27Zt27Zt23be2EbTNLaaxsZZ313vz+z5A3vNmvX8bfDwWujhJuThpsHDTaGHW5CHWwYPb4QebkMebhs83BZ6uAN5uGPw8Fbo4S7k4a7Bw12hh3uQh3sGD++EHu5DHu4bPNwXengAeXhg8PBe6OEh5OGhwcNDoYdHkIdHBg8fhB4eQx4eGzw8Fnp4Anl4YvDwUejhKeThqcHDU6GHZ5CHZwYPn4QenkMenhs8PBd6eAF5eGHw8Fno4SXk4aXBw0uhh38gD/8YPHwRengFeXhl8PBK6OFfyMO/Bg9fhR5eQx5eGzy8Fnp4A3l4Y/DwTejhLeThrcHDW6GHd5CHdwYP34Ue3kMe3hs8vBd6+AB5+GDw8EPo4SPk4aPBw0ehh0+Qh08GDz+FHj5DHj4bPHwWevgCefhi8PBL6OEr5OGrwcNXoYdvkIdvBg+/hdT98B3y8N3g4bvQww/Iww+Dh9+FHn5CHn4aPPwUevgFefhl8BBE6OG3AOPhf13aw3+3/39bvwcYD78HeA9/CD0ECTAeghg8BBF6+APy8IfBQ1Chh6ABxkNQg4egQg/BIA/BDB6CCT0EDzAeghs8BBd6CAF5CGHwEFzoIWSA8RDS4CGk0EMoyEMog4cQQg+hA4yH0AYPoYUewkAewhg8hBR6CBtgPIQ1eAgr9BAO8hDO4CGU0EP4AOMhvMFDeKGHCJCHCAYPoYUeIgYYDxENHiIKPUSCPEQyeAgj9BA5wHiIbPAQWeghCuQhisFDWKGHqAHGQ1SDh6hCD9EgD9EMHsIJPUQPMB6iGzxEF3qIAXmIYfAQXughZoDxENPgIabQQyzIQyyDhwhCD7EDjIfYBg+xhR7iQB7iGDxEFHqIG2A8xDV4iCv0EA/yEM/gIZLQQ/wA4yG+wUN8oYcEkIcEBg+RhR4SBhgPCQ0eEgo9JII8JDJ4iCL0kDjAeEhs8JBY6CEJ5CGJwUNUoYekAcZDUoOHpEIPySAPyQweogk9JA8wHpIbPCQXekgBeUhh8BBd6CFlgPGQ0uAhpdBDKshDKoOHGEIPqQOMh9QGD6mFHtJAHtIYPMQUekgbYDykNXhIK/SQDvKQzuAhltBD+gDjIb3BQ3qhhwyQhwwGD7GFHjIGGA8ZDR4yCj1kgjxkMniII/SQOcB4yGzwkFnoIQvkIYvBQ1yhh6wBxkNWg4esQg/ZIA/ZDB7iCT1kDzAeshs8ZBd6yAF5yGHwEF/oIWeA8ZDT4CGn0EMuyEMug4cEQg+5A4yH3AYPuYUe8kAe8hg8JBR6yBtgPOQ1eMgr9JAP8pDP4CGR0EP+AOMhv8FDfqGHApCHAgYPiYUeCgYYDwUNHgoKPRSCPBQyeEgi9FA4wHgobPBQWOihCOShiMFDUqGHogHGQ1GDh6JCD8UgD8UMHpIJPRQPMB6KGzwUF3ooAXkoYfCQXOihZIDxUNLgoaTQQynIQymDhxRCD6UDjIfSBg+lhR7KQB7KGDykFHooG2A8lDV4KCv0UA7yUM7gIZXQQ/kA46G8wUN5oYcKkIcKBg+phR4qBhgPFQ0eKgo9VII8VDJ4SCP0UDnAeKhs8FBZ6KEK5KGKwUNaoYeqAcZDVYOHqkIP1SAP1Qwe0gk9VA8wHqobPFQXeqgBeahh8JBe6KFmgPFQ0+ChptBDLchDLYOHDEIPtQOMh9oGD7WFHupAHuoYPGQUeqgbYDzUNXioK/RQD/JQz+Ahk9BD/QDjob7BQ32hhwaQhwYGD5mFHhoGGA8NDR4aCj00gjw0MnjIIvTQOMB4aGzw0FjooQnkoYnBQ1ahh6YBxkNTg4emQg/NIA/NDB6yCT00DzAemhs8NBd6aAF5aGHwkF3ooWWA8dDS4KGl0EMryEMrg4ccQg+tA4yH1gYPrYUe2kAe2hg85BR6aBtgPLQ1eGgr9NAO8tDO4CGX0EP7AOOhvcFDe6GHDpCHDgYPuYUeOgYYDx0NHjoKPXSCPHQyeMgj9NA5wHjobPDQWeihC+Shi8FDXqGHrgHGQ1eDh65CD90gD90MHvIJPXQPMB66Gzx0F3roAXnoYfCQX+ihZ4Dx0NPgoafQQy/IQy+DhwJCD70DjIfeBg+9hR76QB76GDwUFHroG2A89DV46Cv00A/y0M/goZDQQ/8A46G/wUN/oYcBkIcBBg+FhR4GBhgPAw0eBgo9DII8DDJ4KCL0MDjAeBhs8DBY6GEI5GGIwUNRoYehAcbDUIOHoUIPwyAPwwweigk9DA8wHoYbPAwXehgBeRhh8FBc6GFkgPEw0uBhpNDDKMjDKIOHEkIPowOMh9EGD6OFHsZAHsYYPJQUehgbYDyMNXgYK/QwDvIwzuChlNDD+ADjYbzBw3ihhwmQhwkGD6WFHiYGGA8TDR4mCj1MgjxMMngoI/QwOcB4mGzwMFnoYQrkYYrBQ1mhh6kBxsNUg4epQg/TIA/TDB7KCT1MDzAephs8TBd6mAF5mGHwUF7oYWaA8TDT4GGm0MMsyMMsg4cKQg+zA4yH2QYPs4Ue5kAe5hg8VBR6mBtgPMw1eJgr9DAP8jDP4KGS0MP8AONhvsHDfKGHBZCHBQYPlYUeFgYYDwsNHhYKPSyCPCwyeKgi9LA4wHhYbPCwWOhhCeRhicFDVaGHpQHGw1KDh6VCD8sgD8sMHqoJPSwPMB6WGzwsF3pYAXlYYfBQXehhZYDxsNLgYaXQwyrIwyqDhxpCD6sDjIfVBg+rhR7WQB7WGDzUFHpYG2A8rDV4WCv0sA7ysM7goZbQw/oA42G9wcN6oYcNkIcNBg+1hR42BhgPGw0eNgo9bII8bDJ4qCP0sDnAeNhs8LBZ6GEL5GGLwUNdoYetAcbDVoOHrUIP2yAP2wwe6gk9bA8wHrYbPGwXetgBedhh8FBf6GFngPGw0+Bhp9DDLsjDLoOHBkIPuwOMh90GD7uFHvZAHvYYPDQUetgbYDzsNXjYK/SwD/Kwz+ChkdDD/gDjYb/Bw36hhwOQhwMGD42FHgIBxkPA4CEg9HAQ8nDQ4KGJ0MOhAOPhkMHDIaGHw5CHwwYPTYUejgQYD0cMHo4IPRyFPBw1eGgm9HAswHg4ZvBwTOjhOOThuMFDc6GHEwHGwwmDhxNCDychDycNHloIPZwKMB5OGTycEno4DXk4bfDQUujhTIDxcMbg4YzQw1nIw1mDh1ZCD+cCjIdzBg/nhB7OQx7OGzy0Fnq4EGA8XDB4uCD0cBHycNHgoY3Qw6UA4+GSwcMloYfLkIfLBg9thR6uBBgPVwwergg9XIU8XDV4aCf0cC3AeLhm8HBN6OFPyMOfBg/thR6uBxgP1w0ergs9/AV5+MvgoYPQw40A4+GGwcMNoYe/IQ9/Gzx0FHq4GWA83DR4uCn0cAvycMvgoZPQw+0A4+G2wcNtoYc7kIc7Bg+dhR7uBhgPdw0e7go93IM83DN46CL0cD/AeLhv8HBf6OEB5OGBwUNXoYeHAcbDQ4OHh0IPjyAPjwweugk9PA4wHh4bPDwWengCeXhi8NBd6OFpgPHw1ODhqdDDM8jDM4OHHkIPzwOMh+cGD8+FHl5AHl4YPPQUengZYDy8NHh4KfTwD+ThH4OHXkIPrwKMh1cGD6+EHv6FPPxr8NBb6OF1gPHw2uDhtdDDG8jDG4OHPkIPbwOMh7cGD2+FHt5BHt4ZPPQVengfYDy8N3h4L/TwAfLwweChn9DDxwDj4aPBw0ehh0+Qh08GD/2FHj4HGA+fDR4+Cz18gTx8MXgYIPTwNcB4+Grw8FXo4Rvk4ZvBw0Chh+8BxsN3g4fvQg8/IA8/DB4GCT38DDAefho8/BR6+AV5+GXwMFjo4beDjIf/dWkP/93+/239fpDx8PtB3sMQoYcgkIcgBg9BhB7+gDz8YfAwVOghKOQhqMFDUKGHYJCHYAYPw4QegkMeghs8BBd6CAF5CGHwMFzoISTkIaTBQ0ihh1CQh1AGDyOEHkJDHkIbPIQWeggDeQhj8DBS6CEs5CGswUNYoYdwkIdwBg+jhB7CQx7CGzyEF3qIAHmIYPAwWughIuQhosFDRKGHSJCHSAYPY4QeIkMeIhs8RBZ6iAJ5iGLwMFboISrkIarBQ1Shh2iQh2gGD+OEHqJDHqIbPEQXeogBeYhh8DBe6CEm5CGmwUNMoYdYkIdYBg8ThB5iQx5iGzzEFnqIA3mIY/AwUeghLuQhrsFDXKGHeJCHeAYPk4Qe4kMe4hs8xBd6SAB5SGDwMFnoISHkIaHBQ0Khh0SQh0QGD1OEHhJDHhIbPCQWekgCeUhi8DBV6CEp5CGpwUNSoYdkkIdkBg/ThB6SQx6SGzwkF3pIAXlIYfAwXeghJeQhpcFDSqGHVJCHVAYPM4QeUkMeUhs8pBZ6SAN5SGPwMFPoIS3kIa3BQ1qhh3SQh3QGD7OEHtJDHtIbPKQXesgAechg8DBb6CEj5CGjwUNGoYdMkIdMBg9zhB4yQx4yGzxkFnrIAnnIYvAwV+ghK+Qhq8FDVqGHbJCHbAYP84QeskMeshs8ZBd6yAF5yGHwMF/oISfkIafBQ06hh1yQh1wGDwuEHnJDHnIbPOQWesgDechj8LBQ6CEv5CGvwUNeoYd8kId8Bg+LhB7yQx7yGzzkF3ooAHkoYPCwWOihIOShoMFDQaGHQpCHQgYPS4QeCkMeChs8FBZ6KAJ5KGLwsFTooSjkoajBQ1Ghh2KQh2IGD8uEHopDHoobPBQXeigBeShh8LBc6KEk5KGkwUNJoYdSkIdSBg8rhB5KQx5KGzyUFnooA3koY/CwUuihLOShrMFDWaGHcpCHcgYPq4QeykMeyhs8lBd6qAB5qGDwsFrooSLkoaLBQ0Whh0qQh0oGD2uEHipDHiobPFQWeqgCeahi8LBW6KEq5KGqwUNVoYdqkIdqBg/rhB6qQx6qGzxUF3qoAXmoYfCwXuihJuShpsFDTaGHWpCHWgYPG4QeakMeahs81BZ6qAN5qGPwsFHooS7koa7BQ12hh3qQh3oGD5uEHupDHuobPNQXemgAeWhg8LBZ6KEh5KGhwUNDoYdGkIdGBg9bhB4aQx4aGzw0FnpoAnloYvCwVeihKeShqcFDU6GHZpCHZgYP24QemkMemhs8NBd6aAF5aGHwsF3ooSXkoaXBQ0uhh1aQh1YGDzuEHlpDHlobPLQWemgDeWhj8LBT6KEt5KGtwUNboYd2kId2Bg+7hB7aQx7aGzy0F3roAHnoYPCwW+ihI+Sho8FDR6GHTpCHTgYPe4QeOkMeOhs8dBZ66AJ56GLwsFfooSvkoavBQ1ehh26Qh24GD/uEHrpDHrobPHQXeugBeehh8LBf6KEn5KGnwUNPoYdekIdeBg8HhB56Qx56Gzz0FnroA3noY/AQEHroC3noa/DQV+ihH+Shn8HDQaGH/pCH/gYP/YUeBkAeBhg8HBJ6GAh5GGjwMFDoYRDkYZDBw2Ghh8GQh8EGD4OFHoZAHoYYPBwRehgKeRhq8DBU6GEY5GGYwcNRoYfhkIfhBg/DhR5GQB5GGDwcE3oYCXkYafAwUuhhFORhlMHDcaGH0ZCH0QYPo4UexkAexhg8nBB6GAt5GGvwMFboYRzkYZzBw0mhh/GQh/EGD+OFHiZAHiYYPJwSepgIeZho8DBR6GES5GGSwcNpoYfJkIfJBg+ThR6mQB6mGDycEXqYCnmYavAwVehhGuRhmsHDWaGH6ZCH6QYP04UeZkAeZhg8nBN6mAl5mGnwMFPoYRbkYZbBw3mhh9mQh9kGD7OFHuZAHuYYPFwQepgLeZhr8DBX6GEe5GGewcNFoYf5kIf5Bg/zhR4WQB4WGDxcEnpYCHlYaPCwUOhhEeRhkcHDZaGHxZCHxQYPi4UelkAelhg8XBF6WAp5WGrwsFToYRnkYZnBw1Whh+WQh+UGD8uFHlZAHlYYPFwTelgJeVhp8LBS6GEV5GGVwcOfQg+rIQ+rDR5WCz2sgTysMXi4LvSwFvKw1uBhrdDDOsjDOoOHv4Qe1kMe1hs8rBd62AB52GDwcEPoYSPkYaPBw0ahh02Qh00GD38LPWyGPGw2eNgs9LAF8rDF4OGm0MNWyMNWg4etQg/bIA/bDB5uCT1shzxsN3jYLvSwA/Kww+DhttDDTsjDToOHnUIPuyAPuwwe7gg97IY87DZ42C30sAfysMfg4a7Qw17Iw16Dh71CD/sgD/sMHu4JPeyHPOw3eNgv9HAA8nDA4OG+0EMA8hAweAgIPRyEPBw0eHgg9HAI8nDI4OGQ0MNhyMNhg4eHQg9HIA9HDB6OCD0chTwcNXh4JPRwDPJwzODhmNDDccjDcYOHx0IPJyAPJwweTgg9nIQ8nDR4eCL0cArycMrg4ZTQw2nIw2mDh6dCD2cgD2cMHs4IPZyFPJw1eHgm9HAO8nDO4OGc0MN5yMN5g4fnQg8XIA8XDB4uCD1chDxcNHh4IfRwCfJwyeDhktDDZcjDZYOHl0IPVyAPVwwergg9XIU8XDV4+Efo4Rrk4ZrBwzWhhz8hD38aPLwSergOebhu8HBd6OEvyMNfBg//Cj3cgDzcMHi4IfTwN+Thb4OH10IPNyEPNw0ebgo93II83DJ4eCP0cBvycNvg4bbQwx3Iwx2Dh7dCD3chD3cNHu4KPdyDPNwzeHgn9HAf8nDf4OG+0MMDyMMDg4f3Qg8PIQ8PDR4eCj08gjw8Mnj4IPTwGPLw2ODhsdDDE8jDE4OHj0IPTyEPTw0engo9PIM8PDN4+CT08Bzy8Nzg4bnQwwvIwwuDh89CDy8hDy8NHl4KPfwDefjH4OGL0MMryMMrg4dXQg//Qh7+NXj4KvTwGvLw2uDhtdDDG8jDG4OHb0IPbyEPbw0e3go9vIM8vDN4+C708B7y8N7g4b3QwwfIwweDhx9CDx8hDx8NHj4KPXyCPHwyePgp9PAZ8vDZ4OGz0MMXyMMXg4dfQg9fIQ9fDR6+Cj18gzx8M3j4LZTuh++Qh+8GD9+FHn5AHn4YPPwu9PAT8vDT4OGn0MMvyMMvg4cgQg+/HWI8/K9Le/jv9v9v6/dDjIffD/Ee/hB6CAJ5CGLwEETo4Q/Iwx8GD0GFHoJCHoIaPAQVeggGeQhm8BBM6CE45CG4wUNwoYcQkIcQBg/BhR5CQh5CGjyEFHoIBXkIZfAQQughNOQhtMFDaKGHMJCHMAYPIYUewkIewho8hBV6CAd5CGfwEEroITzkIbzBQ3ihhwiQhwgGD6GFHiJCHiIaPEQUeogEeYhk8BBG6CEy5CGywUNkoYcokIcoBg9hhR6iQh6iGjxEFXqIBnmIZvAQTughOuQhusFDdKGHGJCHGAYP4YUeYkIeYho8xBR6iAV5iGXwEEHoITbkIbbBQ2yhhziQhzgGDxGFHuJCHuIaPMQVeogHeYhn8BBJ6CE+5CG+wUN8oYcEkIcEBg+RhR4SQh4SGjwkFHpIBHlIZPAQReghMeQhscFDYqGHJJCHJAYPUYUekkIekho8JBV6SAZ5SGbwEE3oITnkIbnBQ3KhhxSQhxQGD9GFHlJCHlIaPKQUekgFeUhl8BBD6CE15CG1wUNqoYc0kIc0Bg8xhR7SQh7SGjykFXpIB3lIZ/AQS+ghPeQhvcFDeqGHDJCHDAYPsYUeMkIeMho8ZBR6yAR5yGTwEEfoITPkIbPBQ2ahhyyQhywGD3GFHrJCHrIaPGQVesgGechm8BBP6CE75CG7wUN2oYcckIccBg/xhR5yQh5yGjzkFHrIBXnIZfCQQOghN+Qht8FDbqGHPJCHPAYPCYUe8kIe8ho85BV6yAd5yGfwkEjoIT/kIb/BQ36hhwKQhwIGD4mFHgpCHgoaPBQUeigEeShk8JBE6KEw5KGwwUNhoYcikIciBg9JhR6KQh6KGjwUFXooBnkoZvCQTOihOOShuMFDcaGHEpCHEgYPyYUeSkIeSho8lBR6KAV5KGXwkELooTTkobTBQ2mhhzKQhzIGDymFHspCHsoaPJQVeigHeShn8JBK6KE85KG8wUN5oYcKkIcKBg+phR4qQh4qGjxUFHqoBHmoZPCQRuihMuShssFDZaGHKpCHKgYPaYUeqkIeqho8VBV6qAZ5qGbwkE7ooTrkobrBQ3WhhxqQhxoGD+mFHmpCHmoaPNQUeqgFeahl8JBB6KE25KG2wUNtoYc6kIc6Bg8ZhR7qQh7qGjzUFXqoB3moZ/CQSeihPuShvsFDfaGHBpCHBgYPmYUeGkIeGho8NBR6aAR5aGTwkEXooTHkobHBQ2OhhyaQhyYGD1mFHppCHpoaPDQVemgGeWhm8JBN6KE55KG5wUNzoYcWkIcWBg/ZhR5aQh5aGjy0FHpoBXloZfCQQ+ihNeShtcFDa6GHNpCHNgYPOYUe2kIe2ho8tBV6aAd5aGfwkEvooT3kob3BQ3uhhw6Qhw4GD7mFHjpCHjoaPHQUeugEeehk8JBH6KEz5KGzwUNnoYcukIcuBg95hR66Qh66Gjx0FXroBnnoZvCQT+ihO+Shu8FDd6GHHpCHHgYP+YUeekIeeho89BR66AV56GXwUEDooTfkobfBQ2+hhz6Qhz4GDwWFHvpCHvoaPPQVeugHeehn8FBI6KE/5KG/wUN/oYcBkIcBBg+FhR4GQh4GGjwMFHoYBHkYZPBQROhhMORhsMHDYKGHIZCHIQYPRYUehkIehho8DBV6GAZ5GGbwUEzoYTjkYbjBw3ChhxGQhxEGD8WFHkZCHkYaPIwUehgFeRhl8FBC6GE05GG0wcNooYcxkIcxBg8lhR7GQh7GGjyMFXoYB3kYZ/BQSuhhPORhvMHDeKGHCZCHCQYPpYUeJkIeJho8TBR6mAR5mGTwUEboYTLkYbLBw2ShhymQhykGD2WFHqZCHqYaPEwVepgGeZhm8FBO6GE65GG6wcN0oYcZkIcZBg/lhR5mQh5mGjzMFHqYBXmYZfBQQehhNuRhtsHDbKGHOZCHOQYPFYUe5kIe5ho8zBV6mAd5mGfwUEnoYT7kYb7Bw3yhhwWQhwUGD5WFHhZCHhYaPCwUelgEeVhk8FBF6GEx5GGxwcNioYclkIclBg9VhR6WQh6WGjwsFXpYBnlYZvBQTehhOeRhucHDcqGHFZCHFQYP1YUeVkIeVho8rBR6WAV5WGXwUEPoYTXkYbXBw2qhhzWQhzUGDzWFHtZCHtYaPKwVelgHeVhn8FBL6GE95GG9wcN6oYcNkIcNBg+1hR42Qh42GjxsFHrYBHnYZPBQR+hhM+Rhs8HDZqGHLZCHLQYPdYUetkIetho8bBV62AZ52GbwUE/oYTvkYbvBw3ahhx2Qhx0GD/WFHnZCHnYaPOwUetgFedhl8NBA6GE35GG3wcNuoYc9kIc9Bg8NhR72Qh72GjzsFXrYB3nYZ/DQSOhhP+Rhv8HDfqGHA5CHAwYPjYUeApCHgMFDQOjhIOThoMFDE6GHQ5CHQwYPh4QeDkMeDhs8NBV6OAJ5OGLwcETo4Sjk4ajBQzOhh2OQh2MGD8eEHo5DHo4bPDQXejgBeThh8HBC6OEk5OGkwUMLoYdTkIdTBg+nhB5OQx5OGzy0FHo4A3k4Y/BwRujhLOThrMFDK6GHc5CHcwYP54QezkMezhs8tBZ6uAB5uGDwcEHo4SLk4aLBQxuhh0uQh0sGD5eEHi5DHi4bPLQVergCebhi8HBF6OEq5OGqwUM7oYdrkIdrBg/XhB7+hDz8afDQXujhOuThusHDdaGHvyAPfxk8dBB6uAF5uGHwcEPo4W/Iw98GDx2FHm5CHm4aPNwUergFebhl8NBJ6OE25OG2wcNtoYc7kIc7Bg+dhR7uQh7uGjzcFXq4B3m4Z/DQRejhPuThvsHDfaGHB5CHBwYPXYUeHkIeHho8PBR6eAR5eGTw0E3o4THk4bHBw2OhhyeQhycGD92FHp5CHp4aPDwVengGeXhm8NBD6OE55OG5wcNzoYcXkIcXBg89hR5eQh5eGjy8FHr4B/Lwj8FDL6GHV5CHVwYPr4Qe/oU8/Gvw0Fvo4TXk4bXBw2uhhzeQhzcGD32EHt5CHt4aPLwVengHeXhn8NBX6OE95OG9wcN7oYcPkIcPBg/9hB4+Qh4+Gjx8FHr4BHn4ZPDQX+jhM+Ths8HDZ6GHL5CHLwYPA4QevkIevho8fBV6+AZ5+GbwMFDo4Tvk4bvBw3ehhx+Qhx8GD4OEHn5CHn4aPPwUevgFefhl8DBY6OG3w4yH/3VpD//d/v9t/X6Y8fD7Yd7DEKGHIJCHIAYPQYQe/oA8/GHwMFToISjkIajBQ1Chh2CQh2AGD8OEHoJDHoIbPAQXeggBeQhh8DBc6CEk5CGkwUNIoYdQkIdQBg8jhB5CQx5CGzyEFnoIA3kIY/AwUughLOQhrMFDWKGHcJCHcAYPo4QewkMewhs8hBd6iAB5iGDwMFroISLkIaLBQ0Shh0iQh0gGD2OEHiJDHiIbPEQWeogCeYhi8DBW6CEq5CGqwUNUoYdokIdoBg/jhB6iQx6iGzxEF3qIAXmIYfAwXughJuQhpsFDTKGHWJCHWAYPE4QeYkMeYhs8xBZ6iAN5iGPwMFHoIS7kIa7BQ1yhh3iQh3gGD5OEHuJDHuIbPMQXekgAeUhg8DBZ6CEh5CGhwUNCoYdEkIdEBg9ThB4SQx4SGzwkFnpIAnlIYvAwVeghKeQhqcFDUqGHZJCHZAYP04QekkMekhs8JBd6SAF5SGHwMF3oISXkIaXBQ0qhh1SQh1QGDzOEHlJDHlIbPKQWekgDeUhj8DBT6CEt5CGtwUNaoYd0kId0Bg+zhB7SQx7SGzykF3rIAHnIYPAwW+ghI+Qho8FDRqGHTJCHTAYPc4QeMkMeMhs8ZBZ6yAJ5yGLwMFfoISvkIavBQ1ahh2yQh2wGD/OEHrJDHrIbPGQXesgBechh8DBf6CEn5CGnwUNOoYdckIdcBg8LhB5yQx5yGzzkFnrIA3nIY/CwUOghL+Qhr8FDXqGHfJCHfAYPi4Qe8kMe8hs85Bd6KAB5KGDwsFjooSDkoaDBQ0Ghh0KQh0IGD0uEHgpDHgobPBQWeigCeShi8LBU6KEo5KGowUNRoYdikIdiBg/LhB6KQx6KGzwUF3ooAXkoYfCwXOihJOShpMFDSaGHUpCHUgYPK4QeSkMeShs8lBZ6KAN5KGPwsFLooSzkoazBQ1mhh3KQh3IGD6uEHspDHsobPJQXeqgAeahg8LBa6KEi5KGiwUNFoYdKkIdKBg9rhB4qQx4qGzxUFnqoAnmoYvCwVuihKuShqsFDVaGHapCHagYP64QeqkMeqhs8VBd6qAF5qGHwsF7ooSbkoabBQ02hh1qQh1oGDxuEHmpDHmobPNQWeqgDeahj8LBR6KEu5KGuwUNdoYd6kId6Bg+bhB7qQx7qGzzUF3poAHloYPCwWeihIeShocFDQ6GHRpCHRgYPW4QeGkMeGhs8NBZ6aAJ5aGLwsFXooSnkoanBQ1Ohh2aQh2YGD9uEHppDHpobPDQXemgBeWhh8LBd6KEl5KGlwUNLoYdWkIdWBg87hB5aQx5aGzy0FnpoA3loY/CwU+ihLeShrcFDW6GHdpCHdgYPu4Qe2kMe2hs8tBd66AB56GDwsFvooSPkoaPBQ0ehh06Qh04GD3uEHjpDHjobPHQWeugCeehi8LBX6KEr5KGrwUNXoYdukIduBg/7hB66Qx66Gzx0F3roAXnoYfCwX+ihJ+Shp8FDT6GHXpCHXgYPB4QeekMeehs89BZ66AN56GPwEBB66At56Gvw0FfooR/koZ/Bw0Ghh/6Qh/4GD/2FHgZAHgYYPBwSehgIeRho8DBQ6GEQ5GGQwcNhoYfBkIfBBg+DhR6GQB6GGDwcEXoYCnkYavAwVOhhGORhmMHDUaGH4ZCH4QYPw4UeRkAeRhg8HBN6GAl5GGnwMFLoYRTkYZTBw3Ghh9GQh9EGD6OFHsZAHsYYPJwQehgLeRhr8DBW6GEc5GGcwcNJoYfxkIfxBg/jhR4mQB4mGDycEnqYCHmYaPAwUehhEuRhksHDaaGHyZCHyQYPk4UepkAephg8nBF6mAp5mGrwMFXoYRrkYZrBw1mhh+mQh+kGD9OFHmZAHmYYPJwTepgJeZhp8DBT6GEW5GGWwcN5oYfZkIfZBg+zhR7mQB7mGDxcEHqYC3mYa/AwV+hhHuRhnsHDRaGH+ZCH+QYP84UeFkAeFhg8XBJ6WAh5WGjwsFDoYRHkYZHBw2Whh8WQh8UGD4uFHpZAHpYYPFwRelgKeVhq8LBU6GEZ5GGZwcNVoYflkIflBg/LhR5WQB5WGDxcE3pYCXlYafCwUuhhFeRhlcHDn0IPqyEPqw0eVgs9rIE8rDF4uC70sBbysNbgYa3QwzrIwzqDh7+EHtZDHtYbPKwXetgAedhg8HBD6GEj5GGjwcNGoYdNkIdNBg9/Cz1shjxsNnjYLPSwBfKwxeDhptDDVsjDVoOHrUIP2yAP2wwebgk9bIc8bDd42C70sAPysMPg4bbQw07Iw06Dh51CD7sgD7sMHu4IPeyGPOw2eNgt9LAH8rDH4OGu0MNeyMNeg4e9Qg/7IA/7DB7uCT3shzzsN3jYL/RwAPJwwODhvtBDAPIQMHgICD0chDwcNHh4IPRwCPJwyODhkNDDYcjDYYOHh0IPRyAPRwwejgg9HIU8HDV4eCT0cAzycMzg4ZjQw3HIw3GDh8dCDycgDycMHk4IPZyEPJw0eHgi9HAK8nDK4OGU0MNpyMNpg4enQg9nIA9nDB7OCD2chTycNXh4JvRwDvJwzuDhnNDDecjDeYOH50IPFyAPFwweLgg9XIQ8XDR4eCH0cAnycMng4ZLQw2XIw2WDh5dCD1cgD1cMHq4IPVyFPFw1ePhH6OEa5OGawcM1oYc/IQ9/Gjy8Enq4Dnm4bvBwXejhL8jDXwYP/wo93IA83DB4uCH08Dfk4W+Dh9dCDzchDzcNHm4KPdyCPNwyeHgj9HAb8nDb4OG20MMdyMMdg4e3Qg93IQ93DR7uCj3cgzzcM3h4J/RwH/Jw3+DhvtDDA8jDA4OH90IPDyEPDw0eHgo9PII8PDJ4+CD08Bjy8Njg4bHQwxPIwxODh49CD08hD08NHp4KPTyDPDwzePgk9PAc8vDc4OG50MMLyMMLg4fPQg8vIQ8vDR5eCj38A3n4x+Dhi9DDK8jDK4OHV0IP/0Ie/jV4+Cr08Bry8Nrg4bXQwxvIwxuDh29CD28hD28NHt4KPbyDPLwzePgu9PAe8vDe4OG90MMHyMMHg4cfQg8fIQ8fDR4+Cj18gjx8Mnj4KfTwGfLw2eDhs9DDF8jDF4OHX0IPXyEPXw0evgo9fIM8fDN4+C207ofvkIfvBg/fhR5+QB5+GDz8LvTwE/Lw0+Dhp9DDL8jDL4OHIEIPvx1hPPyvS3v47/b/b+v3I4yH34/wHv4QeggCeQhi8BBE6OEPyMMfBg9BhR6CQh6CGjwEFXoIBnkIZvAQTOghOOQhuMFDcKGHEJCHEAYPwYUeQkIeQho8hBR6CAV5CGXwEELoITTkIbTBQ2ihhzCQhzAGDyGFHsJCHsIaPIQVeggHeQhn8BBK6CE85CG8wUN4oYcIkIcIBg+hhR4iQh4iGjxEFHqIBHmIZPAQRughMuQhssFDZKGHKJCHKAYPYYUeokIeoho8RBV6iAZ5iGbwEE7oITrkIbrBQ3ShhxiQhxgGD+GFHmJCHmIaPMQUeogFeYhl8BBB6CE25CG2wUNsoYc4kIc4Bg8RhR7iQh7iGjzEFXqIB3mIZ/AQSeghPuQhvsFDfKGHBJCHBAYPkYUeEkIeEho8JBR6SAR5SGTwEEXoITHkIbHBQ2KhhySQhyQGD1GFHpJCHpIaPCQVekgGeUhm8BBN6CE55CG5wUNyoYcUkIcUBg/RhR5SQh5SGjykFHpIBXlIZfAQQ+ghNeQhtcFDaqGHNJCHNAYPMYUe0kIe0ho8pBV6SAd5SGfwEEvoIT3kIb3BQ3qhhwyQhwwGD7GFHjJCHjIaPGQUesgEechk8BBH6CEz5CGzwUNmoYcskIcsBg9xhR6yQh6yGjxkFXrIBnnIZvAQT+ghO+Qhu8FDdqGHHJCHHAYP8YUeckIecho85BR6yAV5yGXwkEDoITfkIbfBQ26hhzyQhzwGDwmFHvJCHvIaPOQVesgHechn8JBI6CE/5CG/wUN+oYcCkIcCBg+JhR4KQh4KGjwUFHooBHkoZPCQROihMOShsMFDYaGHIpCHIgYPSYUeikIeiho8FBV6KAZ5KGbwkEzooTjkobjBQ3GhhxKQhxIGD8mFHkpCHkoaPJQUeigFeShl8JBC6KE05KG0wUNpoYcykIcyBg8phR7KQh7KGjyUFXooB3koZ/CQSuihPOShvMFDeaGHCpCHCgYPqYUeKkIeKho8VBR6qAR5qGTwkEbooTLkobLBQ2WhhyqQhyoGD2mFHqpCHqoaPFQVeqgGeahm8JBO6KE65KG6wUN1oYcakIcaBg/phR5qQh5qGjzUFHqoBXmoZfCQQeihNuShtsFDbaGHOpCHOgYPGYUe6kIe6ho81BV6qAd5qGfwkEnooT7kob7BQ32hhwaQhwYGD5mFHhpCHhoaPDQUemgEeWhk8JBF6KEx5KGxwUNjoYcmkIcmBg9ZhR6aQh6aGjw0FXpoBnloZvCQTeihOeShucFDc6GHFpCHFgYP2YUeWkIeWho8tBR6aAV5aGXwkEPooTXkobXBQ2uhhzaQhzYGDzmFHtpCHtoaPLQVemgHeWhn8JBL6KE95KG9wUN7oYcOkIcOBg+5hR46Qh46Gjx0FHroBHnoZPCQR+ihM+Shs8FDZ6GHLpCHLgYPeYUeukIeuho8dBV66AZ56GbwkE/ooTvkobvBQ3ehhx6Qhx4GD/mFHnpCHnoaPPQUeugFeehl8FBA6KE35KG3wUNvoYc+kIc+Bg8FhR76Qh76Gjz0FXroB3noZ/BQSOihP+Shv8FDf6GHAZCHAQYPhYUeBkIeBho8DBR6GAR5GGTwUEToYTDkYbDBw2ChhyGQhyEGD0WFHoZCHoYaPAwVehgGeRhm8FBM6GE45GG4wcNwoYcRkIcRBg/FhR5GQh5GGjyMFHoYBXkYZfBQQuhhNORhtMHDaKGHMZCHMQYPJYUexkIexho8jBV6GAd5GGfwUEroYTzkYbzBw3ihhwmQhwkGD6WFHiZCHiYaPEwUepgEeZhk8FBG6GEy5GGywcNkoYcpkIcpBg9lhR6mQh6mGjxMFXqYBnmYZvBQTuhhOuRhusHDdKGHGZCHGQYP5YUeZkIeZho8zBR6mAV5mGXwUEHoYTbkYbbBw2yhhzmQhzkGDxWFHuZCHuYaPMwVepgHeZhn8FBJ6GE+5GG+wcN8oYcFkIcFBg+VhR4WQh4WGjwsFHpYBHlYZPBQRehhMeRhscHDYqGHJZCHJQYPVYUelkIelho8LBV6WAZ5WGbwUE3oYTnkYbnBw3KhhxWQhxUGD9WFHlZCHlYaPKwUelgFeVhl8FBD6GE15GG1wcNqoYc1kIc1Bg81hR7WQh7WGjysFXpYB3lYZ/BQS+hhPeRhvcHDeqGHDZCHDQYPtYUeNkIeNho8bBR62AR52GTwUEfoYTPkYbPBw2ahhy2Qhy0GD3WFHrZCHrYaPGwVetgGedhm8FBP6GE75GG7wcN2oYcdkIcdBg/1hR52Qh52GjzsFHrYBXnYZfDQQOhhN+Rht8HDbqGHPZCHPQYPDYUe9kIe9ho87BV62Ad52Gfw0EjoYT/kYb/Bw36hhwOQhwMGD42FHgKQh4DBQ0Do4SDk4aDBQxOhh0OQh0MGD4eEHg5DHg4bPDQVejgCeThi8HBE6OEo5OGowUMzoYdjkIdjBg/HhB6OQx6OGzw0F3o4AXk4YfBwQujhJOThpMFDC6GHU5CHUwYPp4QeTkMeThs8tBR6OAN5OGPwcEbo4Szk4azBQyuhh3OQh3MGD+eEHs5DHs4bPLQWergAebhg8HBB6OEi5OGiwUMboYdLkIdLBg+XhB4uQx4uGzy0FXq4Anm4YvBwRejhKuThqsFDO6GHa5CHawYP14Qe/oQ8/Gnw0F7o4Trk4brBw3Whh78gD38ZPHQQergBebhh8HBD6OFvyMPfBg8dhR5uQh5uGjzcFHq4BXm4ZfDQSejhNuThtsHDbaGHO5CHOwYPnYUe7kIe7ho83BV6uAd5uGfw0EXo4T7k4b7Bw32hhweQhwcGD12FHh5CHh4aPDwUengEeXhk8NBN6OEx5OGxwcNjoYcnkIcnBg/dhR6eQh6eGjw8FXp4Bnl4ZvDQQ+jhOeThucHDc6GHF5CHFwYPPYUeXkIeXho8vBR6+Afy8I/BQy+hh1eQh1cGD6+EHv6FPPxr8NBb6OE15OG1wcNroYc3kIc3Bg99hB7eQh7eGjy8FXp4B3l4Z/DQV+jhPeThvcHDe6GHD5CHDwYP/YQePkIePho8fBR6+AR5+GTw0F/o4TPk4bPBw2ehhy+Qhy8GDwOEHr5CHr4aPHwVevgGefhm8DBQ6OE75OG7wcN3oYcfkIcfBg+DhB5+Qh5+Gjz8FHr4BXn4ZfAwWOjht6OMh/91aQ//3f7/bf1+lPHw+1HewxChhyCQhyAGD0GEHv6APPxh8DBU6CEo5CGowUNQoYdgkIdgBg/DhB6CQx6CGzwEF3oIAXkIYfAwXOghJOQhpMFDSKGHUJCHUAYPI4QeQkMeQhs8hBZ6CAN5CGPwMFLoISzkIazBQ1ihh3CQh3AGD6OEHsJDHsIbPIQXeogAeYhg8DBa6CEi5CGiwUNEoYdIkIdIBg9jhB4iQx4iGzxEFnqIAnmIYvAwVughKuQhqsFDVKGHaJCHaAYP44QeokMeohs8RBd6iAF5iGHwMF7oISbkIabBQ0yhh1iQh1gGDxOEHmJDHmIbPMQWeogDeYhj8DBR6CEu5CGuwUNcoYd4kId4Bg+ThB7iQx7iGzzEF3pIAHlIYPAwWeghIeQhocFDQqGHRJCHRAYPU4QeEkMeEhs8JBZ6SAJ5SGLwMFXoISnkIanBQ1Khh2SQh2QGD9OEHpJDHpIbPCQXekgBeUhh8DBd6CEl5CGlwUNKoYdUkIdUBg8zhB5SQx5SGzykFnpIA3lIY/AwU+ghLeQhrcFDWqGHdJCHdAYPs4Qe0kMe0hs8pBd6yAB5yGDwMFvoISPkIaPBQ0ahh0yQh0wGD3OEHjJDHjIbPGQWesgCechi8DBX6CEr5CGrwUNWoYdskIdsBg/zhB6yQx6yGzxkF3rIAXnIYfAwX+ghJ+Qhp8FDTqGHXJCHXAYPC4QeckMechs85BZ6yAN5yGPwsFDoIS/kIa/BQ16hh3yQh3wGD4uEHvJDHvIbPOQXeigAeShg8LBY6KEg5KGgwUNBoYdCkIdCBg9LhB4KQx4KGzwUFnooAnkoYvCwVOihKOShqMFDUaGHYpCHYgYPy4QeikMeihs8FBd6KAF5KGHwsFzooSTkoaTBQ0mhh1KQh1IGDyuEHkpDHkobPJQWeigDeShj8LBS6KEs5KGswUNZoYdykIdyBg+rhB7KQx7KGzyUF3qoAHmoYPCwWuihIuShosFDRaGHSpCHSgYPa4QeKkMeKhs8VBZ6qAJ5qGLwsFbooSrkoarBQ1Whh2qQh2oGD+uEHqpDHqobPFQXeqgBeahh8LBe6KEm5KGmwUNNoYdakIdaBg8bhB5qQx5qGzzUFnqoA3moY/CwUeihLuShrsFDXaGHepCHegYPm4Qe6kMe6hs81Bd6aAB5aGDwsFnooSHkoaHBQ0Ohh0aQh0YGD1uEHhpDHhobPDQWemgCeWhi8LBV6KEp5KGpwUNToYdmkIdmBg/bhB6aQx6aGzw0F3poAXloYfCwXeihJeShpcFDS6GHVpCHVgYPO4QeWkMeWhs8tBZ6aAN5aGPwsFPooS3koa3BQ1uhh3aQh3YGD7uEHtpDHtobPLQXeugAeehg8LBb6KEj5KGjwUNHoYdOkIdOBg97hB46Qx46Gzx0FnroAnnoYvCwV+ihK+Shq8FDV6GHbpCHbgYP+4QeukMeuhs8dBd66AF56GHwsF/ooSfkoafBQ0+hh16Qh14GDweEHnpDHnobPPQWeugDeehj8BAQeugLeehr8NBX6KEf5KGfwcNBoYf+kIf+Bg/9hR4GQB4GGDwcEnoYCHkYaPAwUOhhEORhkMHDYaGHwZCHwQYPg4UehkAehhg8HBF6GAp5GGrwMFToYRjkYZjBw1Ghh+GQh+EGD8OFHkZAHkYYPBwTehgJeRhp8DBS6GEU5GGUwcNxoYfRkIfRBg+jhR7GQB7GGDycEHoYC3kYa/AwVuhhHORhnMHDSaGH8ZCH8QYP44UeJkAeJhg8nBJ6mAh5mGjwMFHoYRLkYZLBw2mhh8mQh8kGD5OFHqZAHqYYPJwRepgKeZhq8DBV6GEa5GGawcNZoYfpkIfpBg/ThR5mQB5mGDycE3qYCXmYafAwU+hhFuRhlsHDeaGH2ZCH2QYPs4Ue5kAe5hg8XBB6mAt5mGvwMFfoYR7kYZ7Bw0Whh/mQh/kGD/OFHhZAHhYYPFwSelgIeVho8LBQ6GER5GGRwcNloYfFkIfFBg+LhR6WQB6WGDxcEXpYCnlYavCwVOhhGeRhmcHDVaGH5ZCH5QYPy4UeVkAeVhg8XBN6WAl5WGnwsFLoYRXkYZXBw59CD6shD6sNHlYLPayBPKwxeLgu9LAW8rDW4GGt0MM6yMM6g4e/hB7WQx7WGzysF3rYAHnYYPBwQ+hhI+Rho8HDRqGHTZCHTQYPfws9bIY8bDZ42Cz0sAXysMXg4abQw1bIw1aDh61CD9sgD9sMHm4JPWyHPGw3eNgu9LAD8rDD4OG20MNOyMNOg4edQg+7IA+7DB7uCD3shjzsNnjYLfSwB/Kwx+DhrtDDXsjDXoOHvUIP+yAP+wwe7gk97Ic87Dd42C/0cADycMDg4b7QQwDyEDB4CAg9HIQ8HDR4eCD0cAjycMjg4ZDQw2HIw2GDh4dCD0cgD0cMHo4IPRyFPBw1eHgk9HAM8nDM4OGY0MNxyMNxg4fHQg8nIA8nDB5OCD2chDycNHh4IvRwCvJwyuDhlNDDacjDaYOHp0IPZyAPZwwezgg9nIU8nDV4eCb0cA7ycM7g4ZzQw3nIw3mDh+dCDxcgDxcMHi4IPVyEPFw0eHgh9HAJ8nDJ4OGS0MNlyMNlg4eXQg9XIA9XDB6uCD1chTxcNXj4R+jhGuThmsHDNaGHPyEPfxo8vBJ6uA55uG7wcF3o4S/Iw18GD/8KPdyAPNwweLgh9PA35OFvg4fXQg83IQ83DR5uCj3cgjzcMnh4I/RwG/Jw2+DhttDDHcjDHYOHt0IPdyEPdw0e7go93IM83DN4eCf0cB/ycN/g4b7QwwPIwwODh/dCDw8hDw8NHh4KPTyCPDwyePgg9PAY8vDY4OGx0MMTyMMTg4ePQg9PIQ9PDR6eCj08gzw8M3j4JPTwHPLw3ODhudDDC8jDC4OHz0IPLyEPLw0eXgo9/AN5+Mfg4YvQwyvIwyuDh1dCD/9CHv41ePgq9PAa8vDa4OG10MMbyMMbg4dvQg9vIQ9vDR7eCj28gzy8M3j4LvTwHvLw3uDhvdDDB8jDB4OHH0IPHyEPHw0ePgo9fII8fDJ4+Cn08Bny8Nng4bPQwxfIwxeDh19CD18hD18NHr4KPXyDPHwzePgtjO6H75CH7wYP34UefkAefhg8/C708BPy8NPg4afQwy/Iwy+DhyBCD78dYzz8r0t7+O/2/2/r92OMh9+P8R7+EHoIAnkIYvAQROjhD8jDHwYPQYUegkIegho8BBV6CAZ5CGbwEEzoITjkIbjBQ3ChhxCQhxAGD8GFHkJCHkIaPIQUeggFeQhl8BBC6CE05CG0wUNooYcwkIcwBg8hhR7CQh7CGjyEFXoIB3kIZ/AQSughPOQhvMFDeKGHCJCHCAYPoYUeIkIeIho8RBR6iAR5iGTwEEboITLkIbLBQ2ShhyiQhygGD2GFHqJCHqIaPEQVeogGeYhm8BBO6CE65CG6wUN0oYcYkIcYBg/hhR5iQh5iGjzEFHqIBXmIZfAQQeghNuQhtsFDbKGHOJCHOAYPEYUe4kIe4ho8xBV6iAd5iGfwEEnoIT7kIb7BQ3yhhwSQhwQGD5GFHhJCHhIaPCQUekgEeUhk8BBF6CEx5CGxwUNioYckkIckBg9RhR6SQh6SGjwkFXpIBnlIZvAQTeghOeQhucFDcqGHFJCHFAYP0YUeUkIeUho8pBR6SAV5SGXwEEPoITXkIbXBQ2qhhzSQhzQGDzGFHtJCHtIaPKQVekgHeUhn8BBL6CE95CG9wUN6oYcMkIcMBg+xhR4yQh4yGjxkFHrIBHnIZPAQR+ghM+Qhs8FDZqGHLJCHLAYPcYUeskIesho8ZBV6yAZ5yGbwEE/oITvkIbvBQ3ahhxyQhxwGD/GFHnJCHnIaPOQUesgFechl8JBA6CE35CG3wUNuoYc8kIc8Bg8JhR7yQh7yGjzkFXrIB3nIZ/CQSOghP+Qhv8FDfqGHApCHAgYPiYUeCkIeCho8FBR6KAR5KGTwkETooTDkobDBQ2GhhyKQhyIGD0mFHopCHooaPBQVeigGeShm8JBM6KE45KG4wUNxoYcSkIcSBg/JhR5KQh5KGjyUFHooBXkoZfCQQuihNOShtMFDaaGHMpCHMgYPKYUeykIeyho8lBV6KAd5KGfwkErooTzkobzBQ3mhhwqQhwoGD6mFHipCHioaPFQUeqgEeahk8JBG6KEy5KGywUNloYcqkIcqBg9phR6qQh6qGjxUFXqoBnmoZvCQTuihOuShusFDdaGHGpCHGgYP6YUeakIeaho81BR6qAV5qGXwkEHooTbkobbBQ22hhzqQhzoGDxmFHupCHuoaPNQVeqgHeahn8JBJ6KE+5KG+wUN9oYcGkIcGBg+ZhR4aQh4aGjw0FHpoBHloZPCQReihMeShscFDY6GHJpCHJgYPWYUemkIemho8NBV6aAZ5aGbwkE3ooTnkobnBQ3OhhxaQhxYGD9mFHlpCHloaPLQUemgFeWhl8JBD6KE15KG1wUNroYc2kIc2Bg85hR7aQh7aGjy0FXpoB3loZ/CQS+ihPeShvcFDe6GHDpCHDgYPuYUeOkIeOho8dBR66AR56GTwkEfooTPkobPBQ2ehhy6Qhy4GD3mFHrpCHroaPHQVeugGeehm8JBP6KE75KG7wUN3oYcekIceBg/5hR56Qh56Gjz0FHroBXnoZfBQQOihN+Sht8FDb6GHPpCHPgYPBYUe+kIe+ho89BV66Ad56GfwUEjooT/kob/BQ3+hhwGQhwEGD4WFHgZCHgYaPAwUehgEeRhk8FBE6GEw5GGwwcNgoYchkIchBg9FhR6GQh6GGjwMFXoYBnkYZvBQTOhhOORhuMHDcKGHEZCHEQYPxYUeRkIeRho8jBR6GAV5GGXwUELoYTTkYbTBw2ihhzGQhzEGDyWFHsZCHsYaPIwVehgHeRhn8FBK6GE85GG8wcN4oYcJkIcJBg+lhR4mQh4mGjxMFHqYBHmYZPBQRuhhMuRhssHDZKGHKZCHKQYPZYUepkIepho8TBV6mAZ5mGbwUE7oYTrkYbrBw3ShhxmQhxkGD+WFHmZCHmYaPMwUepgFeZhl8FBB6GE25GG2wcNsoYc5kIc5Bg8VhR7mQh7mGjzMFXqYB3mYZ/BQSehhPuRhvsHDfKGHBZCHBQYPlYUeFkIeFho8LBR6WAR5WGTwUEXoYTHkYbHBw2KhhyWQhyUGD1WFHpZCHpYaPCwVelgGeVhm8FBN6GE55GG5wcNyoYcVkIcVBg/VhR5WQh5WGjysFHpYBXlYZfBQQ+hhNeRhtcHDaqGHNZCHNQYPNYUe1kIe1ho8rBV6WAd5WGfwUEvoYT3kYb3Bw3qhhw2Qhw0GD7WFHjZCHjYaPGwUetgEedhk8FBH6GEz5GGzwcNmoYctkIctBg91hR62Qh62GjxsFXrYBnnYZvBQT+hhO+Rhu8HDdqGHHZCHHQYP9YUedkIedho87BR62AV52GXw0EDoYTfkYbfBw26hhz2Qhz0GDw2FHvZCHvYaPOwVetgHedhn8NBI6GE/5GG/wcN+oYcDkIcDBg+NhR4CkIeAwUNA6OEg5OGgwUMToYdDkIdDBg+HhB4OQx4OGzw0FXo4Ank4YvBwROjhKOThqMFDM6GHY5CHYwYPx4QejkMejhs8NBd6OAF5OGHwcELo4STk4aTBQwuhh1OQh1MGD6eEHk5DHk4bPLQUejgDeThj8HBG6OEs5OGswUMroYdzkIdzBg/nhB7OQx7OGzy0Fnq4AHm4YPBwQejhIuThosFDG6GHS5CHSwYPl4QeLkMeLhs8tBV6uAJ5uGLwcEXo4Srk4arBQzuhh2uQh2sGD9eEHv6EPPxp8NBe6OE65OG6wcN1oYe/IA9/GTx0EHq4AXm4YfBwQ+jhb8jD3wYPHYUebkIebho83BR6uAV5uGXw0Eno4Tbk4bbBw22hhzuQhzsGD52FHu5CHu4aPNwVergHebhn8NBF6OE+5OG+wcN9oYcHkIcHBg9dhR4eQh4eGjw8FHp4BHl4ZPDQTejhMeThscHDY6GHJ5CHJwYP3YUenkIenho8PBV6eAZ5eGbw0EPo4Tnk4bnBw3OhhxeQhxcGDz2FHl5CHl4aPLwUevgH8vCPwUMvoYdXkIdXBg+vhB7+hTz8a/DQW+jhNeThtcHDa6GHN5CHNwYPfYQe3kIe3ho8vBV6eAd5eGfw0Ffo4T3k4b3Bw3uhhw+Qhw8GD/2EHj5CHj4aPHwUevgEefhk8NBf6OEz5OGzwcNnoYcvkIcvBg8DhB6+Qh6+Gjx8FXr4Bnn4ZvAwUOjhO+Thu8HDd6GHH5CHHwYPg4QefkIefho8/BR6+AV5+GXwMFjo4bfjjIf/dWkP/93+/239fpzx8Ptx3sMQoYcgkIcgBg9BhB7+gDz8YfAwVOghKOQhqMFDUKGHYJCHYAYPw4QegkMeghs8BBd6CAF5CGHwMFzoISTkIaTBQ0ihh1CQh1AGDyOEHkJDHkIbPIQWeggDeQhj8DBS6CEs5CGswUNYoYdwkIdwBg+jhB7CQx7CGzyEF3qIAHmIYPAwWughIuQhosFDRKGHSJCHSAYPY4QeIkMeIhs8RBZ6iAJ5iGLwMFboISrkIarBQ1Shh2iQh2gGD+OEHqJDHqIbPEQXeogBeYhh8DBe6CEm5CGmwUNMoYdYkIdYBg8ThB5iQx5iGzzEFnqIA3mIY/AwUeghLuQhrsFDXKGHeJCHeAYPk4Qe4kMe4hs8xBd6SAB5SGDwMFnoISHkIaHBQ0Khh0SQh0QGD1OEHhJDHhIbPCQWekgCeUhi8DBV6CEp5CGpwUNSoYdkkIdkBg/ThB6SQx6SGzwkF3pIAXlIYfAwXeghJeQhpcFDSqGHVJCHVAYPM4QeUkMeUhs8pBZ6SAN5SGPwMFPoIS3kIa3BQ1qhh3SQh3QGD7OEHtJDHtIbPKQXesgAechg8DBb6CEj5CGjwUNGoYdMkIdMBg9zhB4yQx4yGzxkFnrIAnnIYvAwV+ghK+Qhq8FDVqGHbJCHbAYP84QeskMeshs8ZBd6yAF5yGHwMF/oISfkIafBQ06hh1yQh1wGDwuEHnJDHnIbPOQWesgDechj8LBQ6CEv5CGvwUNeoYd8kId8Bg+LhB7yQx7yGzzkF3ooAHkoYPCwWOihIOShoMFDQaGHQpCHQgYPS4QeCkMeChs8FBZ6KAJ5KGLwsFTooSjkoajBQ1Ghh2KQh2IGD8uEHopDHoobPBQXeigBeShh8LBc6KEk5KGkwUNJoYdSkIdSBg8rhB5KQx5KGzyUFnooA3koY/CwUuihLOShrMFDWaGHcpCHcgYPq4QeykMeyhs8lBd6qAB5qGDwsFrooSLkoaLBQ0Whh0qQh0oGD2uEHipDHiobPFQWeqgCeahi8LBW6KEq5KGqwUNVoYdqkIdqBg/rhB6qQx6qGzxUF3qoAXmoYfCwXuihJuShpsFDTaGHWpCHWgYPG4QeakMeahs81BZ6qAN5qGPwsFHooS7koa7BQ12hh3qQh3oGD5uEHupDHuobPNQXemgAeWhg8LBZ6KEh5KGhwUNDoYdGkIdGBg9bhB4aQx4aGzw0FnpoAnloYvCwVeihKeShqcFDU6GHZpCHZgYP24QemkMemhs8NBd6aAF5aGHwsF3ooSXkoaXBQ0uhh1aQh1YGDzuEHlpDHlobPLQWemgDeWhj8LBT6KEt5KGtwUNboYd2kId2Bg+7hB7aQx7aGzy0F3roAHnoYPCwW+ihI+Sho8FDR6GHTpCHTgYPe4QeOkMeOhs8dBZ66AJ56GLwsFfooSvkoavBQ1ehh26Qh24GD/uEHrpDHrobPHQXeugBeehh8LBf6KEn5KGnwUNPoYdekIdeBg8HhB56Qx56Gzz0FnroA3noY/AQEHroC3noa/DQV+ihH+Shn8HDQaGH/pCH/gYP/YUeBkAeBhg8HBJ6GAh5GGjwMFDoYRDkYZDBw2Ghh8GQh8EGD4OFHoZAHoYYPBwRehgKeRhq8DBU6GEY5GGYwcNRoYfhkIfhBg/DhR5GQB5GGDwcE3oYCXkYafAwUuhhFORhlMHDcaGH0ZCH0QYPo4UexkAexhg8nBB6GAt5GGvwMFboYRzkYZzBw0mhh/GQh/EGD+OFHiZAHiYYPJwSepgIeZho8DBR6GES5GGSwcNpoYfJkIfJBg+ThR6mQB6mGDycEXqYCnmYavAwVehhGuRhmsHDWaGH6ZCH6QYP04UeZkAeZhg8nBN6mAl5mGnwMFPoYRbkYZbBw3mhh9mQh9kGD7OFHuZAHuYYPFwQepgLeZhr8DBX6GEe5GGewcNFoYf5kIf5Bg/zhR4WQB4WGDxcEnpYCHlYaPCwUOhhEeRhkcHDZaGHxZCHxQYPi4UelkAelhg8XBF6WAp5WGrwsFToYRnkYZnBw1Whh+WQh+UGD8uFHlZAHlYYPFwTelgJeVhp8LBS6GEV5GGVwcOfQg+rIQ+rDR5WCz2sgTysMXi4LvSwFvKw1uBhrdDDOsjDOoOHv4Qe1kMe1hs8rBd62AB52GDwcEPoYSPkYaPBw0ahh02Qh00GD38LPWyGPGw2eNgs9LAF8rDF4OGm0MNWyMNWg4etQg/bIA/bDB5uCT1shzxsN3jYLvSwA/Kww+DhttDDTsjDToOHnUIPuyAPuwwe7gg97IY87DZ42C30sAfysMfg4a7Qw17Iw16Dh71CD/sgD/sMHu4JPeyHPOw3eNgv9HAA8nDA4OG+0EMA8hAweAgIPRyEPBw0eHgg9HAI8nDI4OGQ0MNhyMNhg4eHQg9HIA9HDB6OCD0chTwcNXh4JPRwDPJwzODhmNDDccjDcYOHx0IPJyAPJwweTgg9nIQ8nDR4eCL0cArycMrg4ZTQw2nIw2mDh6dCD2cgD2cMHs4IPZyFPJw1eHgm9HAO8nDO4OGc0MN5yMN5g4fnQg8XIA8XDB4uCD1chDxcNHh4IfRwCfJwyeDhktDDZcjDZYOHl0IPVyAPVwwergg9XIU8XDV4+Efo4Rrk4ZrBwzWhhz8hD38aPLwSergOebhu8HBd6OEvyMNfBg//Cj3cgDzcMHi4IfTwN+Thb4OH10IPNyEPNw0ebgo93II83DJ4eCP0cBvycNvg4bbQwx3Iwx2Dh7dCD3chD3cNHu4KPdyDPNwzeHgn9HAf8nDf4OG+0MMDyMMDg4f3Qg8PIQ8PDR4eCj08gjw8Mnj4IPTwGPLw2ODhsdDDE8jDE4OHj0IPTyEPTw0engo9PIM8PDN4+CT08Bzy8Nzg4bnQwwvIwwuDh89CDy8hDy8NHl4KPfwDefjH4OGL0MMryMMrg4dXQg//Qh7+NXj4KvTwGvLw2uDhtdDDG8jDG4OHb0IPbyEPbw0e3go9vIM8vDN4+C708B7y8N7g4b3QwwfIwweDhx9CDx8hDx8NHj4KPXyCPHwyePgp9PAZ8vDZ4OGz0MMXyMMXg4dfQg9fIQ9fDR6+Cj18gzx8M3j4Lazuh++Qh+8GD9+FHn5AHn4YPPwu9PAT8vDT4OGn0MMvyMMvg4cgQg+/nWA8/K9Le/jv9v9v6/cTjIffT/Ae/hB6CAJ5CGLwEETo4Q/Iwx8GD0GFHoJCHoIaPAQVeggGeQhm8BBM6CE45CG4wUNwoYcQkIcQBg/BhR5CQh5CGjyEFHoIBXkIZfAQQughNOQhtMFDaKGHMJCHMAYPIYUewkIewho8hBV6CAd5CGfwEEroITzkIbzBQ3ihhwiQhwgGD6GFHiJCHiIaPEQUeogEeYhk8BBG6CEy5CGywUNkoYcokIcoBg9hhR6iQh6iGjxEFXqIBnmIZvAQTughOuQhusFDdKGHGJCHGAYP4YUeYkIeYho8xBR6iAV5iGXwEEHoITbkIbbBQ2yhhziQhzgGDxGFHuJCHuIaPMQVeogHeYhn8BBJ6CE+5CG+wUN8oYcEkIcEBg+RhR4SQh4SGjwkFHpIBHlIZPAQReghMeQhscFDYqGHJJCHJAYPUYUekkIekho8JBV6SAZ5SGbwEE3oITnkIbnBQ3KhhxSQhxQGD9GFHlJCHlIaPKQUekgFeUhl8BBD6CE15CG1wUNqoYc0kIc0Bg8xhR7SQh7SGjykFXpIB3lIZ/AQS+ghPeQhvcFDeqGHDJCHDAYPsYUeMkIeMho8ZBR6yAR5yGTwEEfoITPkIbPBQ2ahhyyQhywGD3GFHrJCHrIaPGQVesgGechm8BBP6CE75CG7wUN2oYcckIccBg/xhR5yQh5yGjzkFHrIBXnIZfCQQOghN+Qht8FDbqGHPJCHPAYPCYUe8kIe8ho85BV6yAd5yGfwkEjoIT/kIb/BQ36hhwKQhwIGD4mFHgpCHgoaPBQUeigEeShk8JBE6KEw5KGwwUNhoYcikIciBg9JhR6KQh6KGjwUFXooBnkoZvCQTOihOOShuMFDcaGHEpCHEgYPyYUeSkIeSho8lBR6KAV5KGXwkELooTTkobTBQ2mhhzKQhzIGDymFHspCHsoaPJQVeigHeShn8JBK6KE85KG8wUN5oYcKkIcKBg+phR4qQh4qGjxUFHqoBHmoZPCQRuihMuShssFDZaGHKpCHKgYPaYUeqkIeqho8VBV6qAZ5qGbwkE7ooTrkobrBQ3WhhxqQhxoGD+mFHmpCHmoaPNQUeqgFeahl8JBB6KE25KG2wUNtoYc6kIc6Bg8ZhR7qQh7qGjzUFXqoB3moZ/CQSeihPuShvsFDfaGHBpCHBgYPmYUeGkIeGho8NBR6aAR5aGTwkEXooTHkobHBQ2OhhyaQhyYGD1mFHppCHpoaPDQVemgGeWhm8JBN6KE55KG5wUNzoYcWkIcWBg/ZhR5aQh5aGjy0FHpoBXloZfCQQ+ihNeShtcFDa6GHNpCHNgYPOYUe2kIe2ho8tBV6aAd5aGfwkEvooT3kob3BQ3uhhw6Qhw4GD7mFHjpCHjoaPHQUeugEeehk8JBH6KEz5KGzwUNnoYcukIcuBg95hR66Qh66Gjx0FXroBnnoZvCQT+ihO+Shu8FDd6GHHpCHHgYP+YUeekIeeho89BR66AV56GXwUEDooTfkobfBQ2+hhz6Qhz4GDwWFHvpCHvoaPPQVeugHeehn8FBI6KE/5KG/wUN/oYcBkIcBBg+FhR4GQh4GGjwMFHoYBHkYZPBQROhhMORhsMHDYKGHIZCHIQYPRYUehkIehho8DBV6GAZ5GGbwUEzoYTjkYbjBw3ChhxGQhxEGD8WFHkZCHkYaPIwUehgFeRhl8FBC6GE05GG0wcNooYcxkIcxBg8lhR7GQh7GGjyMFXoYB3kYZ/BQSuhhPORhvMHDeKGHCZCHCQYPpYUeJkIeJho8TBR6mAR5mGTwUEboYTLkYbLBw2ShhymQhykGD2WFHqZCHqYaPEwVepgGeZhm8FBO6GE65GG6wcN0oYcZkIcZBg/lhR5mQh5mGjzMFHqYBXmYZfBQQehhNuRhtsHDbKGHOZCHOQYPFYUe5kIe5ho8zBV6mAd5mGfwUEnoYT7kYb7Bw3yhhwWQhwUGD5WFHhZCHhYaPCwUelgEeVhk8FBF6GEx5GGxwcNioYclkIclBg9VhR6WQh6WGjwsFXpYBnlYZvBQTehhOeRhucHDcqGHFZCHFQYP1YUeVkIeVho8rBR6WAV5WGXwUEPoYTXkYbXBw2qhhzWQhzUGDzWFHtZCHtYaPKwVelgHeVhn8FBL6GE95GG9wcN6oYcNkIcNBg+1hR42Qh42GjxsFHrYBHnYZPBQR+hhM+Rhs8HDZqGHLZCHLQYPdYUetkIetho8bBV62AZ52GbwUE/oYTvkYbvBw3ahhx2Qhx0GD/WFHnZCHnYaPOwUetgFedhl8NBA6GE35GG3wcNuoYc9kIc9Bg8NhR72Qh72GjzsFXrYB3nYZ/DQSOhhP+Rhv8HDfqGHA5CHAwYPjYUeApCHgMFDQOjhIOThoMFDE6GHQ5CHQwYPh4QeDkMeDhs8NBV6OAJ5OGLwcETo4Sjk4ajBQzOhh2OQh2MGD8eEHo5DHo4bPDQXejgBeThh8HBC6OEk5OGkwUMLoYdTkIdTBg+nhB5OQx5OGzy0FHo4A3k4Y/BwRujhLOThrMFDK6GHc5CHcwYP54QezkMezhs8tBZ6uAB5uGDwcEHo4SLk4aLBQxuhh0uQh0sGD5eEHi5DHi4bPLQVergCebhi8HBF6OEq5OGqwUM7oYdrkIdrBg/XhB7+hDz8afDQXujhOuThusHDdaGHvyAPfxk8dBB6uAF5uGHwcEPo4W/Iw98GDx2FHm5CHm4aPNwUergFebhl8NBJ6OE25OG2wcNtoYc7kIc7Bg+dhR7uQh7uGjzcFXq4B3m4Z/DQRejhPuThvsHDfaGHB5CHBwYPXYUeHkIeHho8PBR6eAR5eGTw0E3o4THk4bHBw2OhhyeQhycGD92FHp5CHp4aPDwVengGeXhm8NBD6OE55OG5wcNzoYcXkIcXBg89hR5eQh5eGjy8FHr4B/Lwj8FDL6GHV5CHVwYPr4Qe/oU8/Gvw0Fvo4TXk4bXBw2uhhzeQhzcGD32EHt5CHt4aPLwVengHeXhn8NBX6OE95OG9wcN7oYcPkIcPBg/9hB4+Qh4+Gjx8FHr4BHn4ZPDQX+jhM+Ths8HDZ6GHL5CHLwYPA4QevkIevho8fBV6+AZ5+GbwMFDo4Tvk4bvBw3ehhx+Qhx8GD4OEHn5CHn4aPPwUevgFefhl8DBY6OG3k4yH/3VpD//d/v9t/X6S8fD7Sd7DEKGHIJCHIAYPQYQe/oA8/GHwMFToISjkIajBQ1Chh2CQh2AGD8OEHoJDHoIbPAQXeggBeQhh8DBc6CEk5CGkwUNIoYdQkIdQBg8jhB5CQx5CGzyEFnoIA3kIY/AwUughLOQhrMFDWKGHcJCHcAYPo4QewkMewhs8hBd6iAB5iGDwMFroISLkIaLBQ0Shh0iQh0gGD2OEHiJDHiIbPEQWeogCeYhi8DBW6CEq5CGqwUNUoYdokIdoBg/jhB6iQx6iGzxEF3qIAXmIYfAwXughJuQhpsFDTKGHWJCHWAYPE4QeYkMeYhs8xBZ6iAN5iGPwMFHoIS7kIa7BQ1yhh3iQh3gGD5OEHuJDHuIbPMQXekgAeUhg8DBZ6CEh5CGhwUNCoYdEkIdEBg9ThB4SQx4SGzwkFnpIAnlIYvAwVeghKeQhqcFDUqGHZJCHZAYP04QekkMekhs8JBd6SAF5SGHwMF3oISXkIaXBQ0qhh1SQh1QGDzOEHlJDHlIbPKQWekgDeUhj8DBT6CEt5CGtwUNaoYd0kId0Bg+zhB7SQx7SGzykF3rIAHnIYPAwW+ghI+Qho8FDRqGHTJCHTAYPc4QeMkMeMhs8ZBZ6yAJ5yGLwMFfoISvkIavBQ1ahh2yQh2wGD/OEHrJDHrIbPGQXesgBechh8DBf6CEn5CGnwUNOoYdckIdcBg8LhB5yQx5yGzzkFnrIA3nIY/CwUOghL+Qhr8FDXqGHfJCHfAYPi4Qe8kMe8hs85Bd6KAB5KGDwsFjooSDkoaDBQ0Ghh0KQh0IGD0uEHgpDHgobPBQWeigCeShi8LBU6KEo5KGowUNRoYdikIdiBg/LhB6KQx6KGzwUF3ooAXkoYfCwXOihJOShpMFDSaGHUpCHUgYPK4QeSkMeShs8lBZ6KAN5KGPwsFLooSzkoazBQ1mhh3KQh3IGD6uEHspDHsobPJQXeqgAeahg8LBa6KEi5KGiwUNFoYdKkIdKBg9rhB4qQx4qGzxUFnqoAnmoYvCwVuihKuShqsFDVaGHapCHagYP64QeqkMeqhs8VBd6qAF5qGHwsF7ooSbkoabBQ02hh1qQh1oGDxuEHmpDHmobPNQWeqgDeahj8LBR6KEu5KGuwUNdoYd6kId6Bg+bhB7qQx7qGzzUF3poAHloYPCwWeihIeShocFDQ6GHRpCHRgYPW4QeGkMeGhs8NBZ6aAJ5aGLwsFXooSnkoanBQ1Ohh2aQh2YGD9uEHppDHpobPDQXemgBeWhh8LBd6KEl5KGlwUNLoYdWkIdWBg87hB5aQx5aGzy0FnpoA3loY/CwU+ihLeShrcFDW6GHdpCHdgYPu4Qe2kMe2hs8tBd66AB56GDwsFvooSPkoaPBQ0ehh06Qh04GD3uEHjpDHjobPHQWeugCeehi8LBX6KEr5KGrwUNXoYdukIduBg/7hB66Qx66Gzx0F3roAXnoYfCwX+ihJ+Shp8FDT6GHXpCHXgYPB4QeekMeehs89BZ66AN56GPwEBB66At56Gvw0FfooR/koZ/Bw0Ghh/6Qh/4GD/2FHgZAHgYYPBwSehgIeRho8DBQ6GEQ5GGQwcNhoYfBkIfBBg+DhR6GQB6GGDwcEXoYCnkYavAwVOhhGORhmMHDUaGH4ZCH4QYPw4UeRkAeRhg8HBN6GAl5GGnwMFLoYRTkYZTBw3Ghh9GQh9EGD6OFHsZAHsYYPJwQehgLeRhr8DBW6GEc5GGcwcNJoYfxkIfxBg/jhR4mQB4mGDycEnqYCHmYaPAwUehhEuRhksHDaaGHyZCHyQYPk4UepkAephg8nBF6mAp5mGrwMFXoYRrkYZrBw1mhh+mQh+kGD9OFHmZAHmYYPJwTepgJeZhp8DBT6GEW5GGWwcN5oYfZkIfZBg+zhR7mQB7mGDxcEHqYC3mYa/AwV+hhHuRhnsHDRaGH+ZCH+QYP84UeFkAeFhg8XBJ6WAh5WGjwsFDoYRHkYZHBw2Whh8WQh8UGD4uFHpZAHpYYPFwRelgKeVhq8LBU6GEZ5GGZwcNVoYflkIflBg/LhR5WQB5WGDxcE3pYCXlYafCwUuhhFeRhlcHDn0IPqyEPqw0eVgs9rIE8rDF4uC70sBbysNbgYa3QwzrIwzqDh7+EHtZDHtYbPKwXetgAedhg8HBD6GEj5GGjwcNGoYdNkIdNBg9/Cz1shjxsNnjYLPSwBfKwxeDhptDDVsjDVoOHrUIP2yAP2wwebgk9bIc8bDd42C70sAPysMPg4bbQw07Iw06Dh51CD7sgD7sMHu4IPeyGPOw2eNgt9LAH8rDH4OGu0MNeyMNeg4e9Qg/7IA/7DB7uCT3shzzsN3jYL/RwAPJwwODhvtBDAPIQMHgICD0chDwcNHh4IPRwCPJwyODhkNDDYcjDYYOHh0IPRyAPRwwejgg9HIU8HDV4eCT0cAzycMzg4ZjQw3HIw3GDh8dCDycgDycMHk4IPZyEPJw0eHgi9HAK8nDK4OGU0MNpyMNpg4enQg9nIA9nDB7OCD2chTycNXh4JvRwDvJwzuDhnNDDecjDeYOH50IPFyAPFwweLgg9XIQ8XDR4eCH0cAnycMng4ZLQw2XIw2WDh5dCD1cgD1cMHq4IPVyFPFw1ePhH6OEa5OGawcM1oYc/IQ9/Gjy8Enq4Dnm4bvBwXejhL8jDXwYP/wo93IA83DB4uCH08Dfk4W+Dh9dCDzchDzcNHm4KPdyCPNwyeHgj9HAb8nDb4OG20MMdyMMdg4e3Qg93IQ93DR7uCj3cgzzcM3h4J/RwH/Jw3+DhvtDDA8jDA4OH90IPDyEPDw0eHgo9PII8PDJ4+CD08Bjy8Njg4bHQwxPIwxODh49CD08hD08NHp4KPTyDPDwzePgk9PAc8vDc4OG50MMLyMMLg4fPQg8vIQ8vDR5eCj38A3n4x+Dhi9DDK8jDK4OHV0IP/0Ie/jV4+Cr08Bry8Nrg4bXQwxvIwxuDh29CD28hD28NHt4KPbyDPLwzePgu9PAe8vDe4OG90MMHyMMHg4cfQg8fIQ8fDR4+Cj18gjx8Mnj4KfTwGfLw2eDhs9DDF8jDF4OHX0IPXyEPXw0evgo9fIM8fDN4+C2c7ofvkIfvBg/fhR5+QB5+GDz8LvTwE/Lw0+Dhp9DDL8jDL4OHIEIPv51iPPyvS3v47/b/b+v3U4yH30/xHv4QeggCeQhi8BBE6OEPyMMfBg9BhR6CQh6CGjwEFXoIBnkIZvAQTOghOOQhuMFDcKGHEJCHEAYPwYUeQkIeQho8hBR6CAV5CGXwEELoITTkIbTBQ2ihhzCQhzAGDyGFHsJCHsIaPIQVeggHeQhn8BBK6CE85CG8wUN4oYcIkIcIBg+hhR4iQh4iGjxEFHqIBHmIZPAQRughMuQhssFDZKGHKJCHKAYPYYUeokIeoho8RBV6iAZ5iGbwEE7oITrkIbrBQ3ShhxiQhxgGD+GFHmJCHmIaPMQUeogFeYhl8BBB6CE25CG2wUNsoYc4kIc4Bg8RhR7iQh7iGjzEFXqIB3mIZ/AQSeghPuQhvsFDfKGHBJCHBAYPkYUeEkIeEho8JBR6SAR5SGTwEEXoITHkIbHBQ2KhhySQhyQGD1GFHpJCHpIaPCQVekgGeUhm8BBN6CE55CG5wUNyoYcUkIcUBg/RhR5SQh5SGjykFHpIBXlIZfAQQ+ghNeQhtcFDaqGHNJCHNAYPMYUe0kIe0ho8pBV6SAd5SGfwEEvoIT3kIb3BQ3qhhwyQhwwGD7GFHjJCHjIaPGQUesgEechk8BBH6CEz5CGzwUNmoYcskIcsBg9xhR6yQh6yGjxkFXrIBnnIZvAQT+ghO+Qhu8FDdqGHHJCHHAYP8YUeckIecho85BR6yAV5yGXwkEDoITfkIbfBQ26hhzyQhzwGDwmFHvJCHvIaPOQVesgHechn8JBI6CE/5CG/wUN+oYcCkIcCBg+JhR4KQh4KGjwUFHooBHkoZPCQROihMOShsMFDYaGHIpCHIgYPSYUeikIeiho8FBV6KAZ5KGbwkEzooTjkobjBQ3GhhxKQhxIGD8mFHkpCHkoaPJQUeigFeShl8JBC6KE05KG0wUNpoYcykIcyBg8phR7KQh7KGjyUFXooB3koZ/CQSuihPOShvMFDeaGHCpCHCgYPqYUeKkIeKho8VBR6qAR5qGTwkEbooTLkobLBQ2WhhyqQhyoGD2mFHqpCHqoaPFQVeqgGeahm8JBO6KE65KG6wUN1oYcakIcaBg/phR5qQh5qGjzUFHqoBXmoZfCQQeihNuShtsFDbaGHOpCHOgYPGYUe6kIe6ho81BV6qAd5qGfwkEnooT7kob7BQ32hhwaQhwYGD5mFHhpCHhoaPDQUemgEeWhk8JBF6KEx5KGxwUNjoYcmkIcmBg9ZhR6aQh6aGjw0FXpoBnloZvCQTeihOeShucFDc6GHFpCHFgYP2YUeWkIeWho8tBR6aAV5aGXwkEPooTXkobXBQ2uhhzaQhzYGDzmFHtpCHtoaPLQVemgHeWhn8JBL6KE95KG9wUN7oYcOkIcOBg+5hR46Qh46Gjx0FHroBHnoZPCQR+ihM+Shs8FDZ6GHLpCHLgYPeYUeukIeuho8dBV66AZ56GbwkE/ooTvkobvBQ3ehhx6Qhx4GD/mFHnpCHnoaPPQUeugFeehl8FBA6KE35KG3wUNvoYc+kIc+Bg8FhR76Qh76Gjz0FXroB3noZ/BQSOihP+Shv8FDf6GHAZCHAQYPhYUeBkIeBho8DBR6GAR5GGTwUEToYTDkYbDBw2ChhyGQhyEGD0WFHoZCHoYaPAwVehgGeRhm8FBM6GE45GG4wcNwoYcRkIcRBg/FhR5GQh5GGjyMFHoYBXkYZfBQQuhhNORhtMHDaKGHMZCHMQYPJYUexkIexho8jBV6GAd5GGfwUEroYTzkYbzBw3ihhwmQhwkGD6WFHiZCHiYaPEwUepgEeZhk8FBG6GEy5GGywcNkoYcpkIcpBg9lhR6mQh6mGjxMFXqYBnmYZvBQTuhhOuRhusHDdKGHGZCHGQYP5YUeZkIeZho8zBR6mAV5mGXwUEHoYTbkYbbBw2yhhzmQhzkGDxWFHuZCHuYaPMwVepgHeZhn8FBJ6GE+5GG+wcN8oYcFkIcFBg+VhR4WQh4WGjwsFHpYBHlYZPBQRehhMeRhscHDYqGHJZCHJQYPVYUelkIelho8LBV6WAZ5WGbwUE3oYTnkYbnBw3KhhxWQhxUGD9WFHlZCHlYaPKwUelgFeVhl8FBD6GE15GG1wcNqoYc1kIc1Bg81hR7WQh7WGjysFXpYB3lYZ/BQS+hhPeRhvcHDeqGHDZCHDQYPtYUeNkIeNho8bBR62AR52GTwUEfoYTPkYbPBw2ahhy2Qhy0GD3WFHrZCHrYaPGwVetgGedhm8FBP6GE75GG7wcN2oYcdkIcdBg/1hR52Qh52GjzsFHrYBXnYZfDQQOhhN+Rht8HDbqGHPZCHPQYPDYUe9kIe9ho87BV62Ad52Gfw0EjoYT/kYb/Bw36hhwOQhwMGD42FHgKQh4DBQ0Do4SDk4aDBQxOhh0OQh0MGD4eEHg5DHg4bPDQVejgCeThi8HBE6OEo5OGowUMzoYdjkIdjBg/HhB6OQx6OGzw0F3o4AXk4YfBwQujhJOThpMFDC6GHU5CHUwYPp4QeTkMeThs8tBR6OAN5OGPwcEbo4Szk4azBQyuhh3OQh3MGD+eEHs5DHs4bPLQWergAebhg8HBB6OEi5OGiwUMboYdLkIdLBg+XhB4uQx4uGzy0FXq4Anm4YvBwRejhKuThqsFDO6GHa5CHawYP14Qe/oQ8/Gnw0F7o4Trk4brBw3Whh78gD38ZPHQQergBebhh8HBD6OFvyMPfBg8dhR5uQh5uGjzcFHq4BXm4ZfDQSejhNuThtsHDbaGHO5CHOwYPnYUe7kIe7ho83BV6uAd5uGfw0EXo4T7k4b7Bw32hhweQhwcGD12FHh5CHh4aPDwUengEeXhk8NBN6OEx5OGxwcNjoYcnkIcnBg/dhR6eQh6eGjw8FXp4Bnl4ZvDQQ+jhOeThucHDc6GHF5CHFwYPPYUeXkIeXho8vBR6+Afy8I/BQy+hh1eQh1cGD6+EHv6FPPxr8NBb6OE15OG1wcNroYc3kIc3Bg99hB7eQh7eGjy8FXp4B3l4Z/DQV+jhPeThvcHDe6GHD5CHDwYP/YQePkIePho8fBR6+AR5+GTw0F/o4TPk4bPBw2ehhy+Qhy8GDwOEHr5CHr4aPHwVevgGefhm8DBQ6OE75OG7wcN3oYcfkIcfBg+DhB5+Qh5+Gjz8FHr4BXn4ZfAwWOjht9OMh/91aQ//3f7/bf1+mvHw+2newxChhyCQhyAGD0GEHv6APPxh8DBU6CEo5CGowUNQoYdgkIdgBg/DhB6CQx6CGzwEF3oIAXkIYfAwXOghJOQhpMFDSKGHUJCHUAYPI4QeQkMeQhs8hBZ6CAN5CGPwMFLoISzkIazBQ1ihh3CQh3AGD6OEHsJDHsIbPIQXeogAeYhg8DBa6CEi5CGiwUNEoYdIkIdIBg9jhB4iQx4iGzxEFnqIAnmIYvAwVughKuQhqsFDVKGHaJCHaAYP44QeokMeohs8RBd6iAF5iGHwMF7oISbkIabBQ0yhh1iQh1gGDxOEHmJDHmIbPMQWeogDeYhj8DBR6CEu5CGuwUNcoYd4kId4Bg+ThB7iQx7iGzzEF3pIAHlIYPAwWeghIeQhocFDQqGHRJCHRAYPU4QeEkMeEhs8JBZ6SAJ5SGLwMFXoISnkIanBQ1Khh2SQh2QGD9OEHpJDHpIbPCQXekgBeUhh8DBd6CEl5CGlwUNKoYdUkIdUBg8zhB5SQx5SGzykFnpIA3lIY/AwU+ghLeQhrcFDWqGHdJCHdAYPs4Qe0kMe0hs8pBd6yAB5yGDwMFvoISPkIaPBQ0ahh0yQh0wGD3OEHjJDHjIbPGQWesgCechi8DBX6CEr5CGrwUNWoYdskIdsBg/zhB6yQx6yGzxkF3rIAXnIYfAwX+ghJ+Qhp8FDTqGHXJCHXAYPC4QeckMechs85BZ6yAN5yGPwsFDoIS/kIa/BQ16hh3yQh3wGD4uEHvJDHvIbPOQXeigAeShg8LBY6KEg5KGgwUNBoYdCkIdCBg9LhB4KQx4KGzwUFnooAnkoYvCwVOihKOShqMFDUaGHYpCHYgYPy4QeikMeihs8FBd6KAF5KGHwsFzooSTkoaTBQ0mhh1KQh1IGDyuEHkpDHkobPJQWeigDeShj8LBS6KEs5KGswUNZoYdykIdyBg+rhB7KQx7KGzyUF3qoAHmoYPCwWuihIuShosFDRaGHSpCHSgYPa4QeKkMeKhs8VBZ6qAJ5qGLwsFbooSrkoarBQ1Whh2qQh2oGD+uEHqpDHqobPFQXeqgBeahh8LBe6KEm5KGmwUNNoYdakIdaBg8bhB5qQx5qGzzUFnqoA3moY/CwUeihLuShrsFDXaGHepCHegYPm4Qe6kMe6hs81Bd6aAB5aGDwsFnooSHkoaHBQ0Ohh0aQh0YGD1uEHhpDHhobPDQWemgCeWhi8LBV6KEp5KGpwUNToYdmkIdmBg/bhB6aQx6aGzw0F3poAXloYfCwXeihJeShpcFDS6GHVpCHVgYPO4QeWkMeWhs8tBZ6aAN5aGPwsFPooS3koa3BQ1uhh3aQh3YGD7uEHtpDHtobPLQXeugAeehg8LBb6KEj5KGjwUNHoYdOkIdOBg97hB46Qx46Gzx0FnroAnnoYvCwV+ihK+Shq8FDV6GHbpCHbgYP+4QeukMeuhs8dBd66AF56GHwsF/ooSfkoafBQ0+hh16Qh14GDweEHnpDHnobPPQWeugDeehj8BAQeugLeehr8NBX6KEf5KGfwcNBoYf+kIf+Bg/9hR4GQB4GGDwcEnoYCHkYaPAwUOhhEORhkMHDYaGHwZCHwQYPg4UehkAehhg8HBF6GAp5GGrwMFToYRjkYZjBw1Ghh+GQh+EGD8OFHkZAHkYYPBwTehgJeRhp8DBS6GEU5GGUwcNxoYfRkIfRBg+jhR7GQB7GGDycEHoYC3kYa/AwVuhhHORhnMHDSaGH8ZCH8QYP44UeJkAeJhg8nBJ6mAh5mGjwMFHoYRLkYZLBw2mhh8mQh8kGD5OFHqZAHqYYPJwRepgKeZhq8DBV6GEa5GGawcNZoYfpkIfpBg/ThR5mQB5mGDycE3qYCXmYafAwU+hhFuRhlsHDeaGH2ZCH2QYPs4Ue5kAe5hg8XBB6mAt5mGvwMFfoYR7kYZ7Bw0Whh/mQh/kGD/OFHhZAHhYYPFwSelgIeVho8LBQ6GER5GGRwcNloYfFkIfFBg+LhR6WQB6WGDxcEXpYCnlYavCwVOhhGeRhmcHDVaGH5ZCH5QYPy4UeVkAeVhg8XBN6WAl5WGnwsFLoYRXkYZXBw59CD6shD6sNHlYLPayBPKwxeLgu9LAW8rDW4GGt0MM6yMM6g4e/hB7WQx7WGzysF3rYAHnYYPBwQ+hhI+Rho8HDRqGHTZCHTQYPfws9bIY8bDZ42Cz0sAXysMXg4abQw1bIw1aDh61CD9sgD9sMHm4JPWyHPGw3eNgu9LAD8rDD4OG20MNOyMNOg4edQg+7IA+7DB7uCD3shjzsNnjYLfSwB/Kwx+DhrtDDXsjDXoOHvUIP+yAP+wwe7gk97Ic87Dd42C/0cADycMDg4b7QQwDyEDB4CAg9HIQ8HDR4eCD0cAjycMjg4ZDQw2HIw2GDh4dCD0cgD0cMHo4IPRyFPBw1eHgk9HAM8nDM4OGY0MNxyMNxg4fHQg8nIA8nDB5OCD2chDycNHh4IvRwCvJwyuDhlNDDacjDaYOHp0IPZyAPZwwezgg9nIU8nDV4eCb0cA7ycM7g4ZzQw3nIw3mDh+dCDxcgDxcMHi4IPVyEPFw0eHgh9HAJ8nDJ4OGS0MNlyMNlg4eXQg9XIA9XDB6uCD1chTxcNXj4R+jhGuThmsHDNaGHPyEPfxo8vBJ6uA55uG7wcF3o4S/Iw18GD/8KPdyAPNwweLgh9PA35OFvg4fXQg83IQ83DR5uCj3cgjzcMnh4I/RwG/Jw2+DhttDDHcjDHYOHt0IPdyEPdw0e7go93IM83DN4eCf0cB/ycN/g4b7QwwPIwwODh/dCDw8hDw8NHh4KPTyCPDwyePgg9PAY8vDY4OGx0MMTyMMTg4ePQg9PIQ9PDR6eCj08gzw8M3j4JPTwHPLw3ODhudDDC8jDC4OHz0IPLyEPLw0eXgo9/AN5+Mfg4YvQwyvIwyuDh1dCD/9CHv41ePgq9PAa8vDa4OG10MMbyMMbg4dvQg9vIQ9vDR7eCj28gzy8M3j4LvTwHvLw3uDhvdDDB8jDB4OHH0IPHyEPHw0ePgo9fII8fDJ4+Cn08Bny8Nng4bPQwxfIwxeDh19CD18hD18NHr4KPXyDPHwzePgtvO6H75CH7wYP34UefkAefhg8/C708BPy8NPg4afQwy/Iwy+DhyBCD7+dYTz8r0t7+O/2/2/r9zOMh9/P8B7+EHoIAnkIYvAQROjhD8jDHwYPQYUegkIegho8BBV6CAZ5CGbwEEzoITjkIbjBQ3ChhxCQhxAGD8GFHkJCHkIaPIQUeggFeQhl8BBC6CE05CG0wUNooYcwkIcwBg8hhR7CQh7CGjyEFXoIB3kIZ/AQSughPOQhvMFDeKGHCJCHCAYPoYUeIkIeIho8RBR6iAR5iGTwEEboITLkIbLBQ2ShhyiQhygGD2GFHqJCHqIaPEQVeogGeYhm8BBO6CE65CG6wUN0oYcYkIcYBg/hhR5iQh5iGjzEFHqIBXmIZfAQQeghNuQhtsFDbKGHOJCHOAYPEYUe4kIe4ho8xBV6iAd5iGfwEEnoIT7kIb7BQ3yhhwSQhwQGD5GFHhJCHhIaPCQUekgEeUhk8BBF6CEx5CGxwUNioYckkIckBg9RhR6SQh6SGjwkFXpIBnlIZvAQTeghOeQhucFDcqGHFJCHFAYP0YUeUkIeUho8pBR6SAV5SGXwEEPoITXkIbXBQ2qhhzSQhzQGDzGFHtJCHtIaPKQVekgHeUhn8BBL6CE95CG9wUN6oYcMkIcMBg+xhR4yQh4yGjxkFHrIBHnIZPAQR+ghM+Qhs8FDZqGHLJCHLAYPcYUeskIesho8ZBV6yAZ5yGbwEE/oITvkIbvBQ3ahhxyQhxwGD/GFHnJCHnIaPOQUesgFechl8JBA6CE35CG3wUNuoYc8kIc8Bg8JhR7yQh7yGjzkFXrIB3nIZ/CQSOghP+Qhv8FDfqGHApCHAgYPiYUeCkIeCho8FBR6KAR5KGTwkETooTDkobDBQ2GhhyKQhyIGD0mFHopCHooaPBQVeigGeShm8JBM6KE45KG4wUNxoYcSkIcSBg/JhR5KQh5KGjyUFHooBXkoZfCQQuihNOShtMFDaaGHMpCHMgYPKYUeykIeyho8lBV6KAd5KGfwkErooTzkobzBQ3mhhwqQhwoGD6mFHipCHioaPFQUeqgEeahk8JBG6KEy5KGywUNloYcqkIcqBg9phR6qQh6qGjxUFXqoBnmoZvCQTuihOuShusFDdaGHGpCHGgYP6YUeakIeaho81BR6qAV5qGXwkEHooTbkobbBQ22hhzqQhzoGDxmFHupCHuoaPNQVeqgHeahn8JBJ6KE+5KG+wUN9oYcGkIcGBg+ZhR4aQh4aGjw0FHpoBHloZPCQReihMeShscFDY6GHJpCHJgYPWYUemkIemho8NBV6aAZ5aGbwkE3ooTnkobnBQ3OhhxaQhxYGD9mFHlpCHloaPLQUemgFeWhl8JBD6KE15KG1wUNroYc2kIc2Bg85hR7aQh7aGjy0FXpoB3loZ/CQS+ihPeShvcFDe6GHDpCHDgYPuYUeOkIeOho8dBR66AR56GTwkEfooTPkobPBQ2ehhy6Qhy4GD3mFHrpCHroaPHQVeugGeehm8JBP6KE75KG7wUN3oYcekIceBg/5hR56Qh56Gjz0FHroBXnoZfBQQOihN+Sht8FDb6GHPpCHPgYPBYUe+kIe+ho89BV66Ad56GfwUEjooT/kob/BQ3+hhwGQhwEGD4WFHgZCHgYaPAwUehgEeRhk8FBE6GEw5GGwwcNgoYchkIchBg9FhR6GQh6GGjwMFXoYBnkYZvBQTOhhOORhuMHDcKGHEZCHEQYPxYUeRkIeRho8jBR6GAV5GGXwUELoYTTkYbTBw2ihhzGQhzEGDyWFHsZCHsYaPIwVehgHeRhn8FBK6GE85GG8wcN4oYcJkIcJBg+lhR4mQh4mGjxMFHqYBHmYZPBQRuhhMuRhssHDZKGHKZCHKQYPZYUepkIepho8TBV6mAZ5mGbwUE7oYTrkYbrBw3ShhxmQhxkGD+WFHmZCHmYaPMwUepgFeZhl8FBB6GE25GG2wcNsoYc5kIc5Bg8VhR7mQh7mGjzMFXqYB3mYZ/BQSehhPuRhvsHDfKGHBZCHBQYPlYUeFkIeFho8LBR6WAR5WGTwUEXoYTHkYbHBw2KhhyWQhyUGD1WFHpZCHpYaPCwVelgGeVhm8FBN6GE55GG5wcNyoYcVkIcVBg/VhR5WQh5WGjysFHpYBXlYZfBQQ+hhNeRhtcHDaqGHNZCHNQYPNYUe1kIe1ho8rBV6WAd5WGfwUEvoYT3kYb3Bw3qhhw2Qhw0GD7WFHjZCHjYaPGwUetgEedhk8FBH6GEz5GGzwcNmoYctkIctBg91hR62Qh62GjxsFXrYBnnYZvBQT+hhO+Rhu8HDdqGHHZCHHQYP9YUedkIedho87BR62AV52GXw0EDoYTfkYbfBw26hhz2Qhz0GDw2FHvZCHvYaPOwVetgHedhn8NBI6GE/5GG/wcN+oYcDkIcDBg+NhR4CkIeAwUNA6OEg5OGgwUMToYdDkIdDBg+HhB4OQx4OGzw0FXo4Ank4YvBwROjhKOThqMFDM6GHY5CHYwYPx4QejkMejhs8NBd6OAF5OGHwcELo4STk4aTBQwuhh1OQh1MGD6eEHk5DHk4bPLQUejgDeThj8HBG6OEs5OGswUMroYdzkIdzBg/nhB7OQx7OGzy0Fnq4AHm4YPBwQejhIuThosFDG6GHS5CHSwYPl4QeLkMeLhs8tBV6uAJ5uGLwcEXo4Srk4arBQzuhh2uQh2sGD9eEHv6EPPxp8NBe6OE65OG6wcN1oYe/IA9/GTx0EHq4AXm4YfBwQ+jhb8jD3wYPHYUebkIebho83BR6uAV5uGXw0Eno4Tbk4bbBw22hhzuQhzsGD52FHu5CHu4aPNwVergHebhn8NBF6OE+5OG+wcN9oYcHkIcHBg9dhR4eQh4eGjw8FHp4BHl4ZPDQTejhMeThscHDY6GHJ5CHJwYP3YUenkIenho8PBV6eAZ5eGbw0EPo4Tnk4bnBw3OhhxeQhxcGDz2FHl5CHl4aPLwUevgH8vCPwUMvoYdXkIdXBg+vhB7+hTz8a/DQW+jhNeThtcHDa6GHN5CHNwYPfYQe3kIe3ho8vBV6eAd5eGfw0Ffo4T3k4b3Bw3uhhw+Qhw8GD/2EHj5CHj4aPHwUevgEefhk8NBf6OEz5OGzwcNnoYcvkIcvBg8DhB6+Qh6+Gjx8FXr4Bnn4ZvAwUOjhO+Thu8HDd6GHH5CHHwYPg4QefkIefho8/BR6+AV5+GXwMFjo4bezjIf/dWkP/93+/239fpbx8PtZ3sMQoYcgkIcgBg9BhB7+gDz8YfAwVOghKOQhqMFDUKGHYJCHYAYPw4QegkMeghs8BBd6CAF5CGHwMFzoISTkIaTBQ0ihh1CQh1AGDyOEHkJDHkIbPIQWeggDeQhj8DBS6CEs5CGswUNYoYdwkIdwBg+jhB7CQx7CGzyEF3qIAHmIYPAwWughIuQhosFDRKGHSJCHSAYPY4QeIkMeIhs8RBZ6iAJ5iGLwMFboISrkIarBQ1Shh2iQh2gGD+OEHqJDHqIbPEQXeogBeYhh8DBe6CEm5CGmwUNMoYdYkIdYBg8ThB5iQx5iGzzEFnqIA3mIY/AwUeghLuQhrsFDXKGHeJCHeAYPk4Qe4kMe4hs8xBd6SAB5SGDwMFnoISHkIaHBQ0Khh0SQh0QGD1OEHhJDHhIbPCQWekgCeUhi8DBV6CEp5CGpwUNSoYdkkIdkBg/ThB6SQx6SGzwkF3pIAXlIYfAwXeghJeQhpcFDSqGHVJCHVAYPM4QeUkMeUhs8pBZ6SAN5SGPwMFPoIS3kIa3BQ1qhh3SQh3QGD7OEHtJDHtIbPKQXesgAechg8DBb6CEj5CGjwUNGoYdMkIdMBg9zhB4yQx4yGzxkFnrIAnnIYvAwV+ghK+Qhq8FDVqGHbJCHbAYP84QeskMeshs8ZBd6yAF5yGHwMF/oISfkIafBQ06hh1yQh1wGDwuEHnJDHnIbPOQWesgDechj8LBQ6CEv5CGvwUNeoYd8kId8Bg+LhB7yQx7yGzzkF3ooAHkoYPCwWOihIOShoMFDQaGHQpCHQgYPS4QeCkMeChs8FBZ6KAJ5KGLwsFTooSjkoajBQ1Ghh2KQh2IGD8uEHopDHoobPBQXeigBeShh8LBc6KEk5KGkwUNJoYdSkIdSBg8rhB5KQx5KGzyUFnooA3koY/CwUuihLOShrMFDWaGHcpCHcgYPq4QeykMeyhs8lBd6qAB5qGDwsFrooSLkoaLBQ0Whh0qQh0oGD2uEHipDHiobPFQWeqgCeahi8LBW6KEq5KGqwUNVoYdqkIdqBg/rhB6qQx6qGzxUF3qoAXmoYfCwXuihJuShpsFDTaGHWpCHWgYPG4QeakMeahs81BZ6qAN5qGPwsFHooS7koa7BQ12hh3qQh3oGD5uEHupDHuobPNQXemgAeWhg8LBZ6KEh5KGhwUNDoYdGkIdGBg9bhB4aQx4aGzw0FnpoAnloYvCwVeihKeShqcFDU6GHZpCHZgYP24QemkMemhs8NBd6aAF5aGHwsF3ooSXkoaXBQ0uhh1aQh1YGDzuEHlpDHlobPLQWemgDeWhj8LBT6KEt5KGtwUNboYd2kId2Bg+7hB7aQx7aGzy0F3roAHnoYPCwW+ihI+Sho8FDR6GHTpCHTgYPe4QeOkMeOhs8dBZ66AJ56GLwsFfooSvkoavBQ1ehh26Qh24GD/uEHrpDHrobPHQXeugBeehh8LBf6KEn5KGnwUNPoYdekIdeBg8HhB56Qx56Gzz0FnroA3noY/AQEHroC3noa/DQV+ihH+Shn8HDQaGH/pCH/gYP/YUeBkAeBhg8HBJ6GAh5GGjwMFDoYRDkYZDBw2Ghh8GQh8EGD4OFHoZAHoYYPBwRehgKeRhq8DBU6GEY5GGYwcNRoYfhkIfhBg/DhR5GQB5GGDwcE3oYCXkYafAwUuhhFORhlMHDcaGH0ZCH0QYPo4UexkAexhg8nBB6GAt5GGvwMFboYRzkYZzBw0mhh/GQh/EGD+OFHiZAHiYYPJwSepgIeZho8DBR6GES5GGSwcNpoYfJkIfJBg+ThR6mQB6mGDycEXqYCnmYavAwVehhGuRhmsHDWaGH6ZCH6QYP04UeZkAeZhg8nBN6mAl5mGnwMFPoYRbkYZbBw3mhh9mQh9kGD7OFHuZAHuYYPFwQepgLeZhr8DBX6GEe5GGewcNFoYf5kIf5Bg/zhR4WQB4WGDxcEnpYCHlYaPCwUOhhEeRhkcHDZaGHxZCHxQYPi4UelkAelhg8XBF6WAp5WGrwsFToYRnkYZnBw1Whh+WQh+UGD8uFHlZAHlYYPFwTelgJeVhp8LBS6GEV5GGVwcOfQg+rIQ+rDR5WCz2sgTysMXi4LvSwFvKw1uBhrdDDOsjDOoOHv4Qe1kMe1hs8rBd62AB52GDwcEPoYSPkYaPBw0ahh02Qh00GD38LPWyGPGw2eNgs9LAF8rDF4OGm0MNWyMNWg4etQg/bIA/bDB5uCT1shzxsN3jYLvSwA/Kww+DhttDDTsjDToOHnUIPuyAPuwwe7gg97IY87DZ42C30sAfysMfg4a7Qw17Iw16Dh71CD/sgD/sMHu4JPeyHPOw3eNgv9HAA8nDA4OG+0EMA8hAweAgIPRyEPBw0eHgg9HAI8nDI4OGQ0MNhyMNhg4eHQg9HIA9HDB6OCD0chTwcNXh4JPRwDPJwzODhmNDDccjDcYOHx0IPJyAPJwweTgg9nIQ8nDR4eCL0cArycMrg4ZTQw2nIw2mDh6dCD2cgD2cMHs4IPZyFPJw1eHgm9HAO8nDO4OGc0MN5yMN5g4fnQg8XIA8XDB4uCD1chDxcNHh4IfRwCfJwyeDhktDDZcjDZYOHl0IPVyAPVwwergg9XIU8XDV4+Efo4Rrk4ZrBwzWhhz8hD38aPLwSergOebhu8HBd6OEvyMNfBg//Cj3cgDzcMHi4IfTwN+Thb4OH10IPNyEPNw0ebgo93II83DJ4eCP0cBvycNvg4bbQwx3Iwx2Dh7dCD3chD3cNHu4KPdyDPNwzeHgn9HAf8nDf4OG+0MMDyMMDg4f3Qg8PIQ8PDR4eCj08gjw8Mnj4IPTwGPLw2ODhsdDDE8jDE4OHj0IPTyEPTw0engo9PIM8PDN4+CT08Bzy8Nzg4bnQwwvIwwuDh89CDy8hDy8NHl4KPfwDefjH4OGL0MMryMMrg4dXQg//Qh7+NXj4KvTwGvLw2uDhtdDDG8jDG4OHb0IPbyEPbw0e3go9vIM8vDN4+C708B7y8N7g4b3QwwfIwweDhx9CDx8hDx8NHj4KPXyCPHwyePgp9PAZ8vDZ4OGz0MMXyMMXg4dfQg9fIQ9fDR6+Cj18gzx8M3j4LYLuh++Qh+8GD9+FHn5AHn4YPPwu9PAT8vDT4OGn0MMvyMMvg4cgQg+/nWM8/K9Le/jv9v9v6/dzjIffz/Ee/hB6CAJ5CGLwEETo4Q/Iwx8GD0GFHoJCHoIaPAQVeggGeQhm8BBM6CE45CG4wUNwoYcQkIcQBg/BhR5CQh5CGjyEFHoIBXkIZfAQQughNOQhtMFDaKGHMJCHMAYPIYUewkIewho8hBV6CAd5CGfwEEroITzkIbzBQ3ihhwiQhwgGD6GFHiJCHiIaPEQUeogEeYhk8BBG6CEy5CGywUNkoYcokIcoBg9hhR6iQh6iGjxEFXqIBnmIZvAQTughOuQhusFDdKGHGJCHGAYP4YUeYkIeYho8xBR6iAV5iGXwEEHoITbkIbbBQ2yhhziQhzgGDxGFHuJCHuIaPMQVeogHeYhn8BBJ6CE+5CG+wUN8oYcEkIcEBg+RhR4SQh4SGjwkFHpIBHlIZPAQReghMeQhscFDYqGHJJCHJAYPUYUekkIekho8JBV6SAZ5SGbwEE3oITnkIbnBQ3KhhxSQhxQGD9GFHlJCHlIaPKQUekgFeUhl8BBD6CE15CG1wUNqoYc0kIc0Bg8xhR7SQh7SGjykFXpIB3lIZ/AQS+ghPeQhvcFDeqGHDJCHDAYPsYUeMkIeMho8ZBR6yAR5yGTwEEfoITPkIbPBQ2ahhyyQhywGD3GFHrJCHrIaPGQVesgGechm8BBP6CE75CG7wUN2oYcckIccBg/xhR5yQh5yGjzkFHrIBXnIZfCQQOghN+Qht8FDbqGHPJCHPAYPCYUe8kIe8ho85BV6yAd5yGfwkEjoIT/kIb/BQ36hhwKQhwIGD4mFHgpCHgoaPBQUeigEeShk8JBE6KEw5KGwwUNhoYcikIciBg9JhR6KQh6KGjwUFXooBnkoZvCQTOihOOShuMFDcaGHEpCHEgYPyYUeSkIeSho8lBR6KAV5KGXwkELooTTkobTBQ2mhhzKQhzIGDymFHspCHsoaPJQVeigHeShn8JBK6KE85KG8wUN5oYcKkIcKBg+phR4qQh4qGjxUFHqoBHmoZPCQRuihMuShssFDZaGHKpCHKgYPaYUeqkIeqho8VBV6qAZ5qGbwkE7ooTrkobrBQ3WhhxqQhxoGD+mFHmpCHmoaPNQUeqgFeahl8JBB6KE25KG2wUNtoYc6kIc6Bg8ZhR7qQh7qGjzUFXqoB3moZ/CQSeihPuShvsFDfaGHBpCHBgYPmYUeGkIeGho8NBR6aAR5aGTwkEXooTHkobHBQ2OhhyaQhyYGD1mFHppCHpoaPDQVemgGeWhm8JBN6KE55KG5wUNzoYcWkIcWBg/ZhR5aQh5aGjy0FHpoBXloZfCQQ+ihNeShtcFDa6GHNpCHNgYPOYUe2kIe2ho8tBV6aAd5aGfwkEvooT3kob3BQ3uhhw6Qhw4GD7mFHjpCHjoaPHQUeugEeehk8JBH6KEz5KGzwUNnoYcukIcuBg95hR66Qh66Gjx0FXroBnnoZvCQT+ihO+Shu8FDd6GHHpCHHgYP+YUeekIeeho89BR66AV56GXwUEDooTfkobfBQ2+hhz6Qhz4GDwWFHvpCHvoaPPQVeugHeehn8FBI6KE/5KG/wUN/oYcBkIcBBg+FhR4GQh4GGjwMFHoYBHkYZPBQROhhMORhsMHDYKGHIZCHIQYPRYUehkIehho8DBV6GAZ5GGbwUEzoYTjkYbjBw3ChhxGQhxEGD8WFHkZCHkYaPIwUehgFeRhl8FBC6GE05GG0wcNooYcxkIcxBg8lhR7GQh7GGjyMFXoYB3kYZ/BQSuhhPORhvMHDeKGHCZCHCQYPpYUeJkIeJho8TBR6mAR5mGTwUEboYTLkYbLBw2ShhymQhykGD2WFHqZCHqYaPEwVepgGeZhm8FBO6GE65GG6wcN0oYcZkIcZBg/lhR5mQh5mGjzMFHqYBXmYZfBQQehhNuRhtsHDbKGHOZCHOQYPFYUe5kIe5ho8zBV6mAd5mGfwUEnoYT7kYb7Bw3yhhwWQhwUGD5WFHhZCHhYaPCwUelgEeVhk8FBF6GEx5GGxwcNioYclkIclBg9VhR6WQh6WGjwsFXpYBnlYZvBQTehhOeRhucHDcqGHFZCHFQYP1YUeVkIeVho8rBR6WAV5WGXwUEPoYTXkYbXBw2qhhzWQhzUGDzWFHtZCHtYaPKwVelgHeVhn8FBL6GE95GG9wcN6oYcNkIcNBg+1hR42Qh42GjxsFHrYBHnYZPBQR+hhM+Rhs8HDZqGHLZCHLQYPdYUetkIetho8bBV62AZ52GbwUE/oYTvkYbvBw3ahhx2Qhx0GD/WFHnZCHnYaPOwUetgFedhl8NBA6GE35GG3wcNuoYc9kIc9Bg8NhR72Qh72GjzsFXrYB3nYZ/DQSOhhP+Rhv8HDfqGHA5CHAwYPjYUeApCHgMFDQOjhIOThoMFDE6GHQ5CHQwYPh4QeDkMeDhs8NBV6OAJ5OGLwcETo4Sjk4ajBQzOhh2OQh2MGD8eEHo5DHo4bPDQXejgBeThh8HBC6OEk5OGkwUMLoYdTkIdTBg+nhB5OQx5OGzy0FHo4A3k4Y/BwRujhLOThrMFDK6GHc5CHcwYP54QezkMezhs8tBZ6uAB5uGDwcEHo4SLk4aLBQxuhh0uQh0sGD5eEHi5DHi4bPLQVergCebhi8HBF6OEq5OGqwUM7oYdrkIdrBg/XhB7+hDz8afDQXujhOuThusHDdaGHvyAPfxk8dBB6uAF5uGHwcEPo4W/Iw98GDx2FHm5CHm4aPNwUergFebhl8NBJ6OE25OG2wcNtoYc7kIc7Bg+dhR7uQh7uGjzcFXq4B3m4Z/DQRejhPuThvsHDfaGHB5CHBwYPXYUeHkIeHho8PBR6eAR5eGTw0E3o4THk4bHBw2OhhyeQhycGD92FHp5CHp4aPDwVengGeXhm8NBD6OE55OG5wcNzoYcXkIcXBg89hR5eQh5eGjy8FHr4B/Lwj8FDL6GHV5CHVwYPr4Qe/oU8/Gvw0Fvo4TXk4bXBw2uhhzeQhzcGD32EHt5CHt4aPLwVengHeXhn8NBX6OE95OG9wcN7oYcPkIcPBg/9hB4+Qh4+Gjx8FHr4BHn4ZPDQX+jhM+Ths8HDZ6GHL5CHLwYPA4QevkIevho8fBV6+AZ5+GbwMFDo4Tvk4bvBw3ehhx+Qhx8GD4OEHn5CHn4aPPwUevgFefhl8DBY6OG384yH/3VpD//d/v9t/X6e8fD7ed7DEKGHIJCHIAYPQYQe/oA8/GHwMFToISjkIajBQ1Chh2CQh2AGD8OEHoJDHoIbPAQXeggBeQhh8DBc6CEk5CGkwUNIoYdQkIdQBg8jhB5CQx5CGzyEFnoIA3kIY/AwUughLOQhrMFDWKGHcJCHcAYPo4QewkMewhs8hBd6iAB5iGDwMFroISLkIaLBQ0Shh0iQh0gGD2OEHiJDHiIbPEQWeogCeYhi8DBW6CEq5CGqwUNUoYdokIdoBg/jhB6iQx6iGzxEF3qIAXmIYfAwXughJuQhpsFDTKGHWJCHWAYPE4QeYkMeYhs8xBZ6iAN5iGPwMFHoIS7kIa7BQ1yhh3iQh3gGD5OEHuJDHuIbPMQXekgAeUhg8DBZ6CEh5CGhwUNCoYdEkIdEBg9ThB4SQx4SGzwkFnpIAnlIYvAwVeghKeQhqcFDUqGHZJCHZAYP04QekkMekhs8JBd6SAF5SGHwMF3oISXkIaXBQ0qhh1SQh1QGDzOEHlJDHlIbPKQWekgDeUhj8DBT6CEt5CGtwUNaoYd0kId0Bg+zhB7SQx7SGzykF3rIAHnIYPAwW+ghI+Qho8FDRqGHTJCHTAYPc4QeMkMeMhs8ZBZ6yAJ5yGLwMFfoISvkIavBQ1ahh2yQh2wGD/OEHrJDHrIbPGQXesgBechh8DBf6CEn5CGnwUNOoYdckIdcBg8LhB5yQx5yGzzkFnrIA3nIY/CwUOghL+Qhr8FDXqGHfJCHfAYPi4Qe8kMe8hs85Bd6KAB5KGDwsFjooSDkoaDBQ0Ghh0KQh0IGD0uEHgpDHgobPBQWeigCeShi8LBU6KEo5KGowUNRoYdikIdiBg/LhB6KQx6KGzwUF3ooAXkoYfCwXOihJOShpMFDSaGHUpCHUgYPK4QeSkMeShs8lBZ6KAN5KGPwsFLooSzkoazBQ1mhh3KQh3IGD6uEHspDHsobPJQXeqgAeahg8LBa6KEi5KGiwUNFoYdKkIdKBg9rhB4qQx4qGzxUFnqoAnmoYvCwVuihKuShqsFDVaGHapCHagYP64QeqkMeqhs8VBd6qAF5qGHwsF7ooSbkoabBQ02hh1qQh1oGDxuEHmpDHmobPNQWeqgDeahj8LBR6KEu5KGuwUNdoYd6kId6Bg+bhB7qQx7qGzzUF3poAHloYPCwWeihIeShocFDQ6GHRpCHRgYPW4QeGkMeGhs8NBZ6aAJ5aGLwsFXooSnkoanBQ1Ohh2aQh2YGD9uEHppDHpobPDQXemgBeWhh8LBd6KEl5KGlwUNLoYdWkIdWBg87hB5aQx5aGzy0FnpoA3loY/CwU+ihLeShrcFDW6GHdpCHdgYPu4Qe2kMe2hs8tBd66AB56GDwsFvooSPkoaPBQ0ehh06Qh04GD3uEHjpDHjobPHQWeugCeehi8LBX6KEr5KGrwUNXoYdukIduBg/7hB66Qx66Gzx0F3roAXnoYfCwX+ihJ+Shp8FDT6GHXpCHXgYPB4QeekMeehs89BZ66AN56GPwEBB66At56Gvw0FfooR/koZ/Bw0Ghh/6Qh/4GD/2FHgZAHgYYPBwSehgIeRho8DBQ6GEQ5GGQwcNhoYfBkIfBBg+DhR6GQB6GGDwcEXoYCnkYavAwVOhhGORhmMHDUaGH4ZCH4QYPw4UeRkAeRhg8HBN6GAl5GGnwMFLoYRTkYZTBw3Ghh9GQh9EGD6OFHsZAHsYYPJwQehgLeRhr8DBW6GEc5GGcwcNJoYfxkIfxBg/jhR4mQB4mGDycEnqYCHmYaPAwUehhEuRhksHDaaGHyZCHyQYPk4UepkAephg8nBF6mAp5mGrwMFXoYRrkYZrBw1mhh+mQh+kGD9OFHmZAHmYYPJwTepgJeZhp8DBT6GEW5GGWwcN5oYfZkIfZBg+zhR7mQB7mGDxcEHqYC3mYa/AwV+hhHuRhnsHDRaGH+ZCH+QYP84UeFkAeFhg8XBJ6WAh5WGjwsFDoYRHkYZHBw2Whh8WQh8UGD4uFHpZAHpYYPFwRelgKeVhq8LBU6GEZ5GGZwcNVoYflkIflBg/LhR5WQB5WGDxcE3pYCXlYafCwUuhhFeRhlcHDn0IPqyEPqw0eVgs9rIE8rDF4uC70sBbysNbgYa3QwzrIwzqDh7+EHtZDHtYbPKwXetgAedhg8HBD6GEj5GGjwcNGoYdNkIdNBg9/Cz1shjxsNnjYLPSwBfKwxeDhptDDVsjDVoOHrUIP2yAP2wwebgk9bIc8bDd42C70sAPysMPg4bbQw07Iw06Dh51CD7sgD7sMHu4IPeyGPOw2eNgt9LAH8rDH4OGu0MNeyMNeg4e9Qg/7IA/7DB7uCT3shzzsN3jYL/RwAPJwwODhvtBDAPIQMHgICD0chDwcNHh4IPRwCPJwyODhkNDDYcjDYYOHh0IPRyAPRwwejgg9HIU8HDV4eCT0cAzycMzg4ZjQw3HIw3GDh8dCDycgDycMHk4IPZyEPJw0eHgi9HAK8nDK4OGU0MNpyMNpg4enQg9nIA9nDB7OCD2chTycNXh4JvRwDvJwzuDhnNDDecjDeYOH50IPFyAPFwweLgg9XIQ8XDR4eCH0cAnycMng4ZLQw2XIw2WDh5dCD1cgD1cMHq4IPVyFPFw1ePhH6OEa5OGawcM1oYc/IQ9/Gjy8Enq4Dnm4bvBwXejhL8jDXwYP/wo93IA83DB4uCH08Dfk4W+Dh9dCDzchDzcNHm4KPdyCPNwyeHgj9HAb8nDb4OG20MMdyMMdg4e3Qg93IQ93DR7uCj3cgzzcM3h4J/RwH/Jw3+DhvtDDA8jDA4OH90IPDyEPDw0eHgo9PII8PDJ4+CD08Bjy8Njg4bHQwxPIwxODh49CD08hD08NHp4KPTyDPDwzePgk9PAc8vDc4OG50MMLyMMLg4fPQg8vIQ8vDR5eCj38A3n4x+Dhi9DDK8jDK4OHV0IP/0Ie/jV4+Cr08Bry8Nrg4bXQwxvIwxuDh29CD28hD28NHt4KPbyDPLwzePgu9PAe8vDe4OG90MMHyMMHg4cfQg8fIQ8fDR4+Cj18gjx8Mnj4KfTwGfLw2eDhs9DDF8jDF4OHX0IPXyEPXw0evgo9fIM8fDN4+F9I9cP385JdObI1ypjlvz98N3j4LvTwQ/NDs8ZZM2b/7w8/DB5+F3r4CXn4afDwU+jhF+Thl8FDEKGH3y4wHv7XpT38d/v/t/X7BcbD7xd4D38IPQSBPAQxeAgi9PAH5OEPg4egQg9BIQ9BDR6CCj0EgzwEM3gIJvQQHPIQ3OAhuNBDCMhDCIOH4EIPISEPIQ0eQgo9hII8hDJ4CCH0EBryENrgIbTQQxjIQxiDh5BCD2EhD2ENHsIKPYSDPIQzeAgl9BAe8hDe4CG80EMEyEMEg4fQQg8RIQ8RDR4iCj1EgjxEMngII/QQGfIQ2eAhstBDFMhDFIOHsEIPUSEPUQ0eogo9RIM8RDN4CCf0EB3yEN3gIbrQQwzIQwyDh/BCDzEhDzENHmIKPcSCPMQyeIgg9BAb8hDb4CG20EMcyEMcg4eIQg9xIQ9xDR7iCj3EgzzEM3iIJPQQH/IQ3+AhvtBDAshDAoOHyEIPCSEPCQ0eEgo9JII8JDJ4iCL0kBjykNjgIbHQQxLIQxKDh6hCD0khD0kNHpIKPSSDPCQzeIgm9JAc8pDc4CG50EMKyEMKg4foQg8pIQ8pDR5SCj2kgjykMniIIfSQGvKQ2uAhtdBDGshDGoOHmEIPaSEPaQ0e0go9pIM8pDN4iCX0kB7ykN7gIb3QQwbIQwaDh9hCDxkhDxkNHjIKPWSCPGQyeIgj9JAZ8pDZ4CGz0EMWyEMWg4e4Qg9ZIQ9ZDR6yCj1kgzxkM3iIJ/SQHfKQ3eAhu9BDDshDDoOH+EIPOSEPOQ0ecgo95II85DJ4SCD0kBvykNvgIbfQQx7IQx6Dh4RCD3khD3kNHvIKPeSDPOQzeEgk9JAf8pDf4CG/0EMByEMBg4fEQg8FIQ8FDR4KCj0UgjwUMnhIIvRQGPJQ2OChsNBDEchDEYOHpEIPRSEPRQ0eigo9FIM8FDN4SCb0UBzyUNzgobjQQwnIQwmDh+RCDyUhDyUNHkoKPZSCPJQyeEgh9FAa8lDa4KG00EMZyEMZg4eUQg9lIQ9lDR7KCj2UgzyUM3hIJfRQHvJQ3uChvNBDBchDBYOH1EIPFSEPFQ0eKgo9VII8VDJ4SCP0UBnyUNngobLQQxXIQxWDh7RCD1UhD1UNHqoKPVSDPFQzeEgn9FAd8lDd4KG60EMNyEMNg4f0Qg81IQ81DR5qCj3UgjzUMnjIIPRQG/JQ2+ChttBDHchDHYOHjEIPdSEPdQ0e6go91IM81DN4yCT0UB/yUN/gob7QQwPIQwODh8xCDw0hDw0NHhoKPTSCPDQyeMgi9NAY8tDY4KGx0EMTyEMTg4esQg9NIQ9NDR6aCj00gzw0M3jIJvTQHPLQ3OChudBDC8hDC4OH7EIPLSEPLQ0eWgo9tII8tDJ4yCH00Bry0NrgobXQQxvIQxuDh5xCD20hD20NHtoKPbSDPLQzeMgl9NAe8tDe4KG90EMHyEMHg4fcQg8dIQ8dDR46Cj10gjx0MnjII/TQGfLQ2eChs9BDF8hDF4OHvEIPXSEPXQ0eugo9dIM8dDN4yCf00B3y0N3gobvQQw/IQw+Dh/xCDz0hDz0NHnoKPfSCPPQyeCgg9NAb8tDb4KG30EMfyEMfg4eCQg99IQ99DR76Cj30gzz0M3goJPTQH/LQ3+Chv9DDAMjDAIOHwkIPAyEPAw0eBgo9DII8DDJ4KCL0MBjyMNjgYbDQwxDIwxCDh6JCD0MhD0MNHoYKPQyDPAwzeCgm9DAc8jDc4GG40MMIyMMIg4fiQg8jIQ8jDR5GCj2MgjyMMngoIfQwGvIw2uBhtNDDGMjDGIOHkkIPYyEPYw0exgo9jIM8jDN4KCX0MB7yMN7gYbzQwwTIwwSDh9JCDxMhDxMNHiYKPUyCPEwyeCgj9DAZ8jDZ4GGy0MMUyMMUg4eyQg9TIQ9TDR6mCj1MgzxMM3goJ/QwHfIw3eBhutDDDMjDDIOH8kIPMyEPMw0eZgo9zII8zDJ4qCD0MBvyMNvgYbbQwxzIwxyDh4pCD3MhD3MNHuYKPcyDPMwzeKgk9DAf8jDf4GG+0MMCyMMCg4fKQg8LIQ8LDR4WCj0sgjwsMnioIvSwGPKw2OBhsdDDEsjDEoOHqkIPSyEPSw0elgo9LIM8LDN4qCb0sBzysNzgYbnQwwrIwwqDh+pCDyshDysNHlYKPayCPKwyeKgh9LAa8rDa4GG10MMayMMag4eaQg9rIQ9rDR7WCj2sgzysM3ioJfSwHvKw3uBhvdDDBsjDBoOH2kIPGyEPGw0eNgo9bII8bDJ4qCP0sBnysNngYbPQwxbIwxaDh7pCD1shD1sNHrYKPWyDPGwzeKgn9LAd8rDd4GG70MMOyMMOg4f6Qg87IQ87DR52Cj3sgjzsMnhoIPSwG/Kw2+Bht9DDHsjDHoOHhkIPeyEPew0e9go97IM87DN4aCT0sB/ysN/gYb/QwwHIwwGDh8ZCDwHIQ8DgISD0cBDycNDgoYnQwyHIwyGDh0NCD4chD4cNHpoKPRyBPBwxeDgi9HAU8nDU4KGZ0MMxyMMxg4djQg/HIQ/HDR6aCz2cgDycMHg4IfRwEvJw0uChhdDDKcjDKYOHU0IPpyEPpw0eWgo9nIE8nDF4OCP0cBbycNbgoZXQwznIwzmDh3NCD+chD+cNHloLPVyAPFwweLgg9HAR8nDR4KGN0MMlyMMlg4dLQg+XIQ+XDR7aCj1cgTxcMXi4IvRwFfJw1eChndDDNcjDNYOHa0IPf0Ie/jR4aC/0cB3ycN3g4brQw1+Qh78MHjoIPdyAPNwweLgh9PA35OFvg4eOQg83IQ83DR5uCj3cgjzcMnjoJPRwG/Jw2+DhttDDHcjDHYOHzkIPdyEPdw0e7go93IM83DN46CL0cB/ycN/g4b7QwwPIwwODh65CDw8hDw8NHh4KPTyCPDwyeOgm9PAY8vDY4OGx0MMTyMMTg4fuQg9PIQ9PDR6eCj08gzw8M3joIfTwHPLw3ODhudDDC8jDC4OHnkIPLyEPLw0eXgo9/AN5+MfgoZfQwyvIwyuDh1dCD/9CHv41eOgt9PAa8vDa4OG10MMbyMMbg4c+Qg9vIQ9vDR7eCj28gzy8M3joK/TwHvLw3uDhvdDDB8jDB4OHfkIPHyEPHw0ePgo9fII8fDJ46C/08Bny8Nng4bPQwxfIwxeDhwFCD18hD18NHr4KPXyDPHwzeBgo9PAd8vDd4OG70MMPyMMPg4dBQg8/IQ8/DR5+Cj38gjz8MngYLPTw20XGw/+6tIf/bv//tn6/yHj4/SLvYYjQQxDIQxCDhyBCD39AHv4weBgq9BAU8hDU4CGo0EMwyEMwg4dhQg/BIQ/BDR6CCz2EgDyEMHgYLvQQEvIQ0uAhpNBDKMhDKIOHEUIPoSEPoQ0eQgs9hIE8hDF4GCn0EBbyENbgIazQQzjIQziDh1FCD+EhD+ENHsILPUSAPEQweBgt9BAR8hDR4CGi0EMkyEMkg4cxQg+RIQ+RDR4iCz1EgTxEMXgYK/QQFfIQ1eAhqtBDNMhDNIOHcUIP0SEP0Q0eogs9xIA8xDB4GC/0EBPyENPgIabQQyzIQyyDhwlCD7EhD7ENHmILPcSBPMQxeJgo9BAX8hDX4CGu0EM8yEM8g4dJQg/xIQ/xDR7iCz0kgDwkMHiYLPSQEPKQ0OAhodBDIshDIoOHKUIPiSEPiQ0eEgs9JIE8JDF4mCr0kBTykNTgIanQQzLIQzKDh2lCD8khD8kNHpILPaSAPKQweJgu9JAS8pDS4CGl0EMqyEMqg4cZQg+pIQ+pDR5SCz2kgTykMXiYKfSQFvKQ1uAhrdBDOshDOoOHWUIP6SEP6Q0e0gs9ZIA8ZDB4mC30kBHykNHgIaPQQybIQyaDhzlCD5khD5kNHjILPWSBPGQxeJgr9JAV8pDV4CGr0EM2yEM2g4d5Qg/ZIQ/ZDR6yCz3kgDzkMHiYL/SQE/KQ0+Ahp9BDLshDLoOHBUIPuSEPuQ0ecgs95IE85DF4WCj0kBfykNfgIa/QQz7IQz6Dh0VCD/khD/kNHvILPRSAPBQweFgs9FAQ8lDQ4KGg0EMhyEMhg4clQg+FIQ+FDR4KCz0UgTwUMXhYKvRQFPJQ1OChqNBDMchDMYOHZUIPxSEPxQ0eigs9lIA8lDB4WC70UBLyUNLgoaTQQynIQymDhxVCD6UhD6UNHkoLPZSBPJQxeFgp9FAW8lDW4KGs0EM5yEM5g4dVQg/lIQ/lDR7KCz1UgDxUMHhYLfRQEfJQ0eChotBDJchDJYOHNUIPlSEPlQ0eKgs9VIE8VDF4WCv0UBXyUNXgoarQQzXIQzWDh3VCD9UhD9UNHqoLPdSAPNQweFgv9FAT8lDT4KGm0EMtyEMtg4cNQg+1IQ+1DR5qCz3UgTzUMXjYKPRQF/JQ1+ChrtBDPchDPYOHTUIP9SEP9Q0e6gs9NIA8NDB42Cz00BDy0NDgoaHQQyPIQyODhy1CD40hD40NHhoLPTSBPDQxeNgq9NAU8tDU4KGp0EMzyEMzg4dtQg/NIQ/NDR6aCz20gDy0MHjYLvTQEvLQ0uChpdBDK8hDK4OHHUIPrSEPrQ0eWgs9tIE8tDF42Cn00Bby0Nbgoa3QQzvIQzuDh11CD+0hD+0NHtoLPXSAPHQweNgt9NAR8tDR4KGj0EMnyEMng4c9Qg+dIQ+dDR46Cz10gTx0MXjYK/TQFfLQ1eChq9BDN8hDN4OHfUIP3SEP3Q0eugs99IA89DB42C/00BPy0NPgoafQQy/IQy+DhwNCD70hD70NHnoLPfSBPPQxeAgIPfSFPPQ1eOgr9NAP8tDP4OGg0EN/yEN/g4f+Qg8DIA8DDB4OCT0MhDwMNHgYKPQwCPIwyODhsNDDYMjDYIOHwUIPQyAPQwwejgg9DIU8DDV4GCr0MAzyMMzg4ajQw3DIw3CDh+FCDyMgDyMMHo4JPYyEPIw0eBgp9DAK8jDK4OG40MNoyMNog4fRQg9jIA9jDB5OCD2MhTyMNXgYK/QwDvIwzuDhpNDDeMjDeIOH8UIPEyAPEwweTgk9TIQ8TDR4mCj0MAnyMMng4bTQw2TIw2SDh8lCD1MgD1MMHs4IPUyFPEw1eJgq9DAN8jDN4OGs0MN0yMN0g4fpQg8zIA8zDB7OCT3MhDzMNHiYKfQwC/Iwy+DhvNDDbMjDbIOH2UIPcyAPcwweLgg9zIU8zDV4mCv0MA/yMM/g4aLQw3zIw3yDh/lCDwsgDwsMHi4JPSyEPCw0eFgo9LAI8rDI4OGy0MNiyMNig4fFQg9LIA9LDB6uCD0shTwsNXhYKvSwDPKwzODhqtDDcsjDcoOH5UIPKyAPKwwergk9rIQ8rDR4WCn0sArysMrg4U+hh9WQh9UGD6uFHtZAHtYYPFwXelgLeVhr8LBW6GEd5GGdwcNfQg/rIQ/rDR7WCz1sgDxsMHi4IfSwEfKw0eBho9DDJsjDJoOHv4UeNkMeNhs8bBZ62AJ52GLwcFPoYSvkYavBw1ahh22Qh20GD7eEHrZDHrYbPGwXetgBedhh8HBb6GEn5GGnwcNOoYddkIddBg93hB52Qx52GzzsFnrYA3nYY/BwV+hhL+Rhr8HDXqGHfZCHfQYP94Qe9kMe9hs87Bd6OAB5OGDwcF/oIQB5CBg8BIQeDkIeDho8PBB6OAR5OGTwcEjo4TDk4bDBw0OhhyOQhyMGD0eEHo5CHo4aPDwSejgGeThm8HBM6OE45OG4wcNjoYcTkIcTBg8nhB5OQh5OGjw8EXo4BXk4ZfBwSujhNOThtMHDU6GHM5CHMwYPZ4QezkIezho8PBN6OAd5OGfwcE7o4Tzk4bzBw3OhhwuQhwsGDxeEHi5CHi4aPLwQergEebhk8HBJ6OEy5OGywcNLoYcrkIcrBg9XhB6uQh6uGjz8I/RwDfJwzeDhmtDDn5CHPw0eXgk9XIc8XDd4uC708Bfk4S+Dh3+FHm5AHm4YPNwQevgb8vC3wcNroYebkIebBg83hR5uQR5uGTy8EXq4DXm4bfBwW+jhDuThjsHDW6GHu5CHuwYPd4Ue7kEe7hk8vBN6uA95uG/wcF/o4QHk4YHBw3uhh4eQh4cGDw+FHh5BHh4ZPHwQengMeXhs8PBY6OEJ5OGJwcNHoYenkIenBg9PhR6eQR6eGTx8Enp4Dnl4bvDwXOjhBeThhcHDZ6GHl5CHlwYPL4Ue/oE8/GPw8EXo4RXk4ZXBwyuhh38hD/8aPHwVengNeXht8PBa6OEN5OGNwcM3oYe3kIe3Bg9vhR7eQR7eGTx8F3p4D3l4b/DwXujhA+Thg8HDD6GHj5CHjwYPH4UePkEePhk8/BR6+Ax5+Gzw8Fno4Qvk4YvBwy+hh6+Qh68GD1+FHr5BHr4ZPPxWSPfDd8jDd4OH70IPPyAPPwwefhd6+Al5+Gnw8FPo4Rfk4ZfBQxChh98uMR7+16U9/Hf7/7f1+yXGw++XeA9/CD0EgTwEMXgIIvTwB+ThD4OHoEIPQSEPQQ0eggo9BIM8BDN4CCb0EBzyENzgIbjQQwjIQwiDh+BCDyEhDyENHkIKPYSCPIQyeAgh9BAa8hDa4CG00EMYyEMYg4eQQg9hIQ9hDR7CCj2EgzyEM3gIJfQQHvIQ3uAhvNBDBMhDBIOH0EIPESEPEQ0eIgo9RII8RDJ4CCP0EBnyENngIbLQQxTIQxSDh7BCD1EhD1ENHqIKPUSDPEQzeAgn9BAd8hDd4CG60EMMyEMMg4fwQg8xIQ8xDR5iCj3EgjzEMniIIPQQG/IQ2+AhttBDHMhDHIOHiEIPcSEPcQ0e4go9xIM8xDN4iCT0EB/yEN/gIb7QQwLIQwKDh8hCDwkhDwkNHhIKPSSCPCQyeIgi9JAY8pDY4CGx0EMSyEMSg4eoQg9JIQ9JDR6SCj0kgzwkM3iIJvSQHPKQ3OAhudBDCshDCoOH6EIPKSEPKQ0eUgo9pII8pDJ4iCH0kBrykNrgIbXQQxrIQxqDh5hCD2khD2kNHtIKPaSDPKQzeIgl9JAe8pDe4CG90EMGyEMGg4fYQg8ZIQ8ZDR4yCj1kgjxkMniII/SQGfKQ2eAhs9BDFshDFoOHuEIPWSEPWQ0esgo9ZIM8ZDN4iCf0kB3ykN3gIbvQQw7IQw6Dh/hCDzkhDzkNHnIKPeSCPOQyeEgg9JAb8pDb4CG30EMeyEMeg4eEQg95IQ95DR7yCj3kgzzkM3hIJPSQH/KQ3+Ahv9BDAchDAYOHxEIPBSEPBQ0eCgo9FII8FDJ4SCL0UBjyUNjgobDQQxHIQxGDh6RCD0UhD0UNHooKPRSDPBQzeEgm9FAc8lDc4KG40EMJyEMJg4fkQg8lIQ8lDR5KCj2UgjyUMnhIIfRQGvJQ2uChtNBDGchDGYOHlEIPZSEPZQ0eygo9lIM8lDN4SCX0UB7yUN7gobzQQwXIQwWDh9RCDxUhDxUNHioKPVSCPFQyeEgj9FAZ8lDZ4KGy0EMVyEMVg4e0Qg9VIQ9VDR6qCj1UgzxUM3hIJ/RQHfJQ3eChutBDDchDDYOH9EIPNSEPNQ0eago91II81DJ4yCD0UBvyUNvgobbQQx3IQx2Dh4xCD3UhD3UNHuoKPdSDPNQzeMgk9FAf8lDf4KG+0EMDyEMDg4fMQg8NIQ8NDR4aCj00gjw0MnjIIvTQGPLQ2OChsdBDE8hDE4OHrEIPTSEPTQ0emgo9NIM8NDN4yCb00Bzy0NzgobnQQwvIQwuDh+xCDy0hDy0NHloKPbSCPLQyeMgh9NAa8tDa4KG10EMbyEMbg4ecQg9tIQ9tDR7aCj20gzy0M3jIJfTQHvLQ3uChvdBDB8hDB4OH3EIPHSEPHQ0eOgo9dII8dDJ4yCP00Bny0NngobPQQxfIQxeDh7xCD10hD10NHroKPXSDPHQzeMgn9NAd8tDd4KG70EMPyEMPg4f8Qg89IQ89DR56Cj30gjz0MngoIPTQG/LQ2+Cht9BDH8hDH4OHgkIPfSEPfQ0e+go99IM89DN4KCT00B/y0N/gob/QwwDIwwCDh8JCDwMhDwMNHgYKPQyCPAwyeCgi9DAY8jDY4GGw0MMQyMMQg4eiQg9DIQ9DDR6GCj0MgzwMM3goJvQwHPIw3OBhuNDDCMjDCIOH4kIPIyEPIw0eRgo9jII8jDJ4KCH0MBryMNrgYbTQwxjIwxiDh5JCD2MhD2MNHsYKPYyDPIwzeCgl9DAe8jDe4GG80MMEyMMEg4fSQg8TIQ8TDR4mCj1MgjxMMngoI/QwGfIw2eBhstDDFMjDFIOHskIPUyEPUw0epgo9TIM8TDN4KCf0MB3yMN3gYbrQwwzIwwyDh/JCDzMhDzMNHmYKPcyCPMwyeKgg9DAb8jDb4GG20MMcyMMcg4eKQg9zIQ9zDR7mCj3MgzzMM3ioJPQwH/Iw3+BhvtDDAsjDAoOHykIPCyEPCw0eFgo9LII8LDJ4qCL0sBjysNjgYbHQwxLIwxKDh6pCD0shD0sNHpYKPSyDPCwzeKgm9LAc8rDc4GG50MMKyMMKg4fqQg8rIQ8rDR5WCj2sgjysMnioIfSwGvKw2uBhtdDDGsjDGoOHmkIPayEPaw0e1go9rIM8rDN4qCX0sB7ysN7gYb3QwwbIwwaDh9pCDxshDxsNHjYKPWyCPGwyeKgj9LAZ8rDZ4GGz0MMWyMMWg4e6Qg9bIQ9bDR62Cj1sgzxsM3ioJ/SwHfKw3eBhu9DDDsjDDoOH+kIPOyEPOw0edgo97II87DJ4aCD0sBvysNvgYbfQwx7Iwx6Dh4ZCD3shD3sNHvYKPeyDPOwzeGgk9LAf8rDf4GG/0MMByMMBg4fGQg8ByEPA4CEg9HAQ8nDQ4KGJ0MMhyMMhg4dDQg+HIQ+HDR6aCj0cgTwcMXg4IvRwFPJw1OChmdDDMcjDMYOHY0IPxyEPxw0emgs9nIA8nDB4OCH0cBLycNLgoYXQwynIwymDh1NCD6chD6cNHloKPZyBPJwxeDgj9HAW8nDW4KGV0MM5yMM5g4dzQg/nIQ/nDR5aCz1cgDxcMHi4IPRwEfJw0eChjdDDJcjDJYOHS0IPlyEPlw0e2go9XIE8XDF4uCL0cBXycNXgoZ3QwzXIwzWDh2tCD39CHv40eGgv9HAd8nDd4OG60MNfkIe/DB46CD3cgDzcMHi4IfTwN+Thb4OHjkIPNyEPNw0ebgo93II83DJ46CT0cBvycNvg4bbQwx3Iwx2Dh85CD3chD3cNHu4KPdyDPNwzeOgi9HAf8nDf4OG+0MMDyMMDg4euQg8PIQ8PDR4eCj08gjw8MnjoJvTwGPLw2ODhsdDDE8jDE4OH7kIPTyEPTw0engo9PIM8PDN46CH08Bzy8Nzg4bnQwwvIwwuDh55CDy8hDy8NHl4KPfwDefjH4KGX0MMryMMrg4dXQg//Qh7+NXjoLfTwGvLw2uDhtdDDG8jDG4OHPkIPbyEPbw0e3go9vIM8vDN46Cv08B7y8N7g4b3QwwfIwweDh35CDx8hDx8NHj4KPXyCPHwyeOgv9PAZ8vDZ4OGz0MMXyMMXg4cBQg9fIQ9fDR6+Cj18gzx8M3gYKPTwHfLw3eDhu9DDD8jDD4OHQUIPPyEPPw0efgo9/II8/DJ4GCz08NtlxsP/urSH/27//7Z+v8x4+P0y72GI0EMQyEMQg4cgQg9/QB7+MHgYKvQQFPIQ1OAhqNBDMMhDMIOHYUIPwSEPwQ0eggs9hIA8hDB4GC70EBLyENLgIaTQQyjIQyiDhxFCD6EhD6ENHkILPYSBPIQxeBgp9BAW8hDW4CGs0EM4yEM4g4dRQg/hIQ/hDR7CCz1EgDxEMHgYLfQQEfIQ0eAhotBDJMhDJIOHMUIPkSEPkQ0eIgs9RIE8RDF4GCv0EBXyENXgIarQQzTIQzSDh3FCD9EhD9ENHqILPcSAPMQweBgv9BAT8hDT4CGm0EMsyEMsg4cJQg+xIQ+xDR5iCz3EgTzEMXiYKPQQF/IQ1+AhrtBDPMhDPIOHSUIP8SEP8Q0e4gs9JIA8JDB4mCz0kBDykNDgIaHQQyLIQyKDhylCD4khD4kNHhILPSSBPCQxeJgq9JAU8pDU4CGp0EMyyEMyg4dpQg/JIQ/JDR6SCz2kgDykMHiYLvSQEvKQ0uAhpdBDKshDKoOHGUIPqSEPqQ0eUgs9pIE8pDF4mCn0kBbykNbgIa3QQzrIQzqDh1lCD+khD+kNHtILPWSAPGQweJgt9JAR8pDR4CGj0EMmyEMmg4c5Qg+ZIQ+ZDR4yCz1kgTxkMXiYK/SQFfKQ1eAhq9BDNshDNoOHeUIP2SEP2Q0esgs95IA85DB4mC/0kBPykNPgIafQQy7IQy6DhwVCD7khD7kNHnILPeSBPOQxeFgo9JAX8pDX4CGv0EM+yEM+g4dFQg/5IQ/5DR7yCz0UgDwUMHhYLPRQEPJQ0OChoNBDIchDIYOHJUIPhSEPhQ0eCgs9FIE8FDF4WCr0UBTyUNTgoajQQzHIQzGDh2VCD8UhD8UNHooLPZSAPJQweFgu9FAS8lDS4KGk0EMpyEMpg4cVQg+lIQ+lDR5KCz2UgTyUMXhYKfRQFvJQ1uChrNBDOchDOYOHVUIP5SEP5Q0eygs9VIA8VDB4WC30UBHyUNHgoaLQQyXIQyWDhzVCD5UhD5UNHioLPVSBPFQxeFgr9FAV8lDV4KGq0EM1yEM1g4d1Qg/VIQ/VDR6qCz3UgDzUMHhYL/RQE/JQ0+ChptBDLchDLYOHDUIPtSEPtQ0eags91IE81DF42Cj0UBfyUNfgoa7QQz3IQz2Dh01CD/UhD/UNHuoLPTSAPDQweNgs9NAQ8tDQ4KGh0EMjyEMjg4ctQg+NIQ+NDR4aCz00gTw0MXjYKvTQFPLQ1OChqdBDM8hDM4OHbUIPzSEPzQ0emgs9tIA8tDB42C700BLy0NLgoaXQQyvIQyuDhx1CD60hD60NHloLPbSBPLQxeNgp9NAW8tDW4KGt0EM7yEM7g4ddQg/tIQ/tDR7aCz10gDx0MHjYLfTQEfLQ0eCho9BDJ8hDJ4OHPUIPnSEPnQ0eOgs9dIE8dDF42Cv00BXy0NXgoavQQzfIQzeDh31CD90hD90NHroLPfSAPPQweNgv9NAT8tDT4KGn0EMvyEMvg4cDQg+9IQ+9DR56Cz30gTz0MXgICD30hTz0NXjoK/TQD/LQz+DhoNBDf8hDf4OH/kIPAyAPAwweDgk9DIQ8DDR4GCj0MAjyMMjg4bDQw2DIw2CDh8FCD0MgD0MMHo4IPQyFPAw1eBgq9DAM8jDM4OGo0MNwyMNwg4fhQg8jIA8jDB6OCT2MhDyMNHgYKfQwCvIwyuDhuNDDaMjDaIOH0UIPYyAPYwweTgg9jIU8jDV4GCv0MA7yMM7g4aTQw3jIw3iDh/FCDxMgDxMMHk4JPUyEPEw0eJgo9DAJ8jDJ4OG00MNkyMNkg4fJQg9TIA9TDB7OCD1MhTxMNXiYKvQwDfIwzeDhrNDDdMjDdIOH6UIPMyAPMwwezgk9zIQ8zDR4mCn0MAvyMMvg4bzQw2zIw2yDh9lCD3MgD3MMHi4IPcyFPMw1eJgr9DAP8jDP4OGi0MN8yMN8g4f5Qg8LIA8LDB4uCT0shDwsNHhYKPSwCPKwyODhstDDYsjDYoOHxUIPSyAPSwwergg9LIU8LDV4WCr0sAzysMzg4arQw3LIw3KDh+VCDysgDysMHq4JPayEPKw0eFgp9LAK8rDK4OFPoYfVkIfVBg+rhR7WQB7WGDxcF3pYC3lYa/CwVuhhHeRhncHDX0IP6yEP6w0e1gs9bIA8bDB4uCH0sBHysNHgYaPQwybIwyaDh7+FHjZDHjYbPGwWetgCedhi8HBT6GEr5GGrwcNWoYdtkIdtBg+3hB62Qx62GzxsF3rYAXnYYfBwW+hhJ+Rhp8HDTqGHXZCHXQYPd4QedkMedhs87BZ62AN52GPwcFfoYS/kYa/Bw16hh32Qh30GD/eEHvZDHvYbPOwXejgAeThg8HBf6CEAeQgYPASEHg5CHg4aPDwQejgEeThk8HBI6OEw5OGwwcNDoYcjkIcjBg9HhB6OQh6OGjw8Eno4Bnk4ZvBwTOjhOOThuMHDY6GHE5CHEwYPJ4QeTkIeTho8PBF6OAV5OGXwcEro4TTk4bTBw1OhhzOQhzMGD2eEHs5CHs4aPDwTejgHeThn8HBO6OE85OG8wcNzoYcLkIcLBg8XhB4uQh4uGjy8EHq4BHm4ZPBwSejhMuThssHDS6GHK5CHKwYPV4QerkIerho8/B+v9LQ1BoIFUbhj27Zt27Zt27Zt27Zto9Mx/xgd25k1d3M/tesF9ql11vdK6OEq5OGqwcNVoYdrkIdrBg+vhR6uQx6uGzxcF3q4AXm4YfDwRujhJuThpsHDTaGHW5CHWwYPbwvp/nAb8nDb4OG20MMdyMMdg4d3Qg93IQ93DR7uCj3cgzzcM3h4L/QQAHkIMHgIEHq4D3m4b/DwQejhAeThgcHDA6GHh5CHhwYPH4UeHkEeHhk8PBJ6eAx5eGzw8Eno4Qnk4YnBwxOhh6eQh6cGD5+FHp5BHp4ZPDwTengOeXhu8PBF6OEF5OGFwcMLoYd/IQ//Gjx8FXp4CXl4afDwUujhFeThlcHDN6GH15CH1wYPr4Ue3kAe3hg8fBd6eAt5eGvw8Fbo4R3k4Z3Bww+hh/eQh/cGD++FHj5AHj4YPPwUevgIefho8PBR6OET5OGTwcMvoYfPkIfPBg+fhR6+QB6+GDz8Fnr4Cnn4avDwVejhG+Thm8HDH6GH75CH7wYP34UefkAefhg8/PeA6g8/IQ8/DR5+Cj38gjz8MngIJPTwG/Lw2+Dht9DDH8jDH4OHwEIPf11mPPy3S3v43+3/byvQZcZDoMu8hyBCD4EhD4ENHgILPQSBPAQxeAgq9BAU8hDU4CGo0EMwyEMwg4dgQg/BIQ/BDR6CCz2EgDyEMHgILvQQEvIQ0uAhpNBDKMhDKIOHEEIPoSEPoQ0eQgs9hIE8hDF4CCn0EBbyENbgIazQQzjIQziDh1BCD+EhD+ENHsILPUSAPEQweAgt9BAR8hDR4CGi0EMkyEMkg4cwQg+RIQ+RDR4iCz1EgTxEMXgIK/QQFfIQ1eAhqtBDNMhDNIOHcEIP0SEP0Q0eogs9xIA8xDB4CC/0EBPyENPgIabQQyzIQyyDhwhCD7EhD7ENHmILPcSBPMQxeIgo9BAX8hDX4CGu0EM8yEM8g4dIQg/xIQ/xDR7iCz0kgDwkMHiILPSQEPKQ0OAhodBDIshDIoOHKEIPiSEPiQ0eEgs9JIE8JDF4iCr0kBTykNTgIanQQzLIQzKDh2hCD8khD8kNHpILPaSAPKQweIgu9JAS8pDS4CGl0EMqyEMqg4cYQg+pIQ+pDR5SCz2kgTykMXiIKfSQFvKQ1uAhrdBDOshDOoOHWEIP6SEP6Q0e0gs9ZIA8ZDB4iC30kBHykNHgIaPQQybIQyaDhzhCD5khD5kNHjILPWSBPGQxeIgr9JAV8pDV4CGr0EM2yEM2g4d4Qg/ZIQ/ZDR6yCz3kgDzkMHiIL/SQE/KQ0+Ahp9BDLshDLoOHBEIPuSEPuQ0ecgs95IE85DF4SCj0kBfykNfgIa/QQz7IQz6Dh0RCD/khD/kNHvILPRSAPBQweEgs9FAQ8lDQ4KGg0EMhyEMhg4ckQg+FIQ+FDR4KCz0UgTwUMXhIKvRQFPJQ1OChqNBDMchDMYOHZEIPxSEPxQ0eigs9lIA8lDB4SC70UBLyUNLgoaTQQynIQymDhxRCD6UhD6UNHkoLPZSBPJQxeEgp9FAW8lDW4KGs0EM5yEM5g4dUQg/lIQ/lDR7KCz1UgDxUMHhILfRQEfJQ0eChotBDJchDJYOHNEIPlSEPlQ0eKgs9VIE8VDF4SCv0UBXyUNXgoarQQzXIQzWDh3RCD9UhD9UNHqoLPdSAPNQweEgv9FAT8lDT4KGm0EMtyEMtg4cMQg+1IQ+1DR5qCz3UgTzUMXjIKPRQF/JQ1+ChrtBDPchDPYOHTEIP9SEP9Q0e6gs9NIA8NDB4yCz00BDy0NDgoaHQQyPIQyODhyxCD40hD40NHhoLPTSBPDQxeMgq9NAU8tDU4KGp0EMzyEMzg4dsQg/NIQ/NDR6aCz20gDy0MHjILvTQEvLQ0uChpdBDK8hDK4OHHEIPrSEPrQ0eWgs9tIE8tDF4yCn00Bby0Nbgoa3QQzvIQzuDh1xCD+0hD+0NHtoLPXSAPHQweMgt9NAR8tDR4KGj0EMnyEMng4c8Qg+dIQ+dDR46Cz10gTx0MXjIK/TQFfLQ1eChq9BDN8hDN4OHfEIP3SEP3Q0eugs99IA89DB4yC/00BPy0NPgoafQQy/IQy+DhwJCD70hD70NHnoLPfSBPPQxeCgo9NAX8tDX4KGv0EM/yEM/g4dCQg/9IQ/9DR76Cz0MgDwMMHgoLPQwEPIw0OBhoNDDIMjDIIOHIkIPgyEPgw0eBgs9DIE8DDF4KCr0MBTyMNTgYajQwzDIwzCDh2JCD8MhD8MNHoYLPYyAPIwweCgu9DAS8jDS4GGk0MMoyMMog4cSQg+jIQ+jDR5GCz2MgTyMMXgoKfQwFvIw1uBhrNDDOMjDOIOHUkIP4yEP4w0exgs9TIA8TDB4KC30MBHyMNHgYaLQwyTIwySDhzJCD5MhD5MNHiYLPUyBPEwxeCgr9DAV8jDV4GGq0MM0yMM0g4dyQg/TIQ/TDR6mCz3MgDzMMHgoL/QwE/Iw0+BhptDDLMjDLIOHCkIPsyEPsw0eZgs9zIE8zDF4qCj0MBfyMNfgYa7QwzzIwzyDh0pCD/MhD/MNHuYLPSyAPCwweKgs9LAQ8rDQ4GGh0MMiyMMig4cqQg+LIQ+LDR4WCz0sgTwsMXioKvSwFPKw1OBhqdDDMsjDMoOHakIPyyEPyw0elgs9rIA8rDB4qC70sBLysNLgYaXQwyrIwyqDhxpCD6shD6sNHlYLPayBPKwxeKgp9LAW8rDW4GGt0MM6yMM6g4daQg/rIQ/rDR7WCz1sgDxsMHioLfSwEfKw0eBho9DDJsjDJoOHOkIPmyEPmw0eNgs9bIE8bDF4qCv0sBXysNXgYavQwzbIwzaDh3pCD9shD9sNHrYLPeyAPOwweKgv9LAT8rDT4GGn0MMuyMMug4cGQg+7IQ+7DR52Cz3sgTzsMXhoKPSwF/Kw1+Bhr9DDPsjDPoOHRkIP+yEP+w0e9gs9HIA8HDB4aCz0cBDycNDg4aDQwyHIwyGDhyZCD4chD4cNHg4LPRyBPBwxeGgq9HAU8nDU4OGo0MMxyMMxg4dmQg/HIQ/HDR6OCz2cgDycMHhoLvRwEvJw0uDhpNDDKcjDKYOHFkIPpyEPpw0eTgs9nIE8nDF4aCn0cBbycNbg4azQwznIwzmDh1ZCD+chD+cNHs4LPVyAPFwweGgt9HAR8nDR4OGi0MPfkIe/DR7aCD1cgjxcMni4JPTwD+ThH4OHtkIPlyEPlw0eLgs9XIE8XDF4aCf0cBXycNXg4arQwzXIwzWDh/ZCD9chD9cNHq4LPdyAPNwweOgg9HAT8nDT4OGm0MMtyMMtg4eOQg+3IQ+3DR5uCz3cgTzcMXjoJPRwF/Jw1+DhrtDDPcjDPYOHzkIPAZCHAIOHAKGH+5CH+wYPXYQeHkAeHhg8PBB6eAh5eGjw0FXo4RHk4ZHBwyOhh8eQh8cGD92EHp5AHp4YPDwRengKeXhq8NBd6OEZ5OGZwcMzoYfnkIfnBg89hB5eQB5eGDy8EHr4F/Lwr8FDT6GHl5CHlwYPL4UeXkEeXhk89BJ6eA15eG3w8Fro4Q3k4Y3BQ2+hh7eQh7cGD2+FHt5BHt4ZPPQRengPeXhv8PBe6OED5OGDwUNfoYePkIePBg8fhR4+QR4+GTz0E3r4DHn4bPDwWejhC+Thi8FDf6GHr5CHrwYPX4UevkEevhk8DBB6+A55+G7w8F3o4Qfk4YfBw0Chh5+Qh58GDz+FHn5BHn4ZPAwSevgNefht8PBb6OEP5OGPwcNgoYe/rjAe/tulPfzv9v+3FegK4yHQFd7DEKGHwJCHwAYPgYUegkAeghg8DBV6CAp5CGrwEFToIRjkIZjBwzChh+CQh+AGD8GFHkJAHkIYPAwXeggJeQhp8BBS6CEU5CGUwcMIoYfQkIfQBg+hhR7CQB7CGDyMFHoIC3kIa/AQVughHOQhnMHDKKGH8JCH8AYP4YUeIkAeIhg8jBZ6iAh5iGjwEFHoIRLkIZLBwxihh8iQh8gGD5GFHqJAHqIYPIwVeogKeYhq8BBV6CEa5CGawcM4oYfokIfoBg/RhR5iQB5iGDyMF3qICXmIafAQU+ghFuQhlsHDBKGH2JCH2AYPsYUe4kAe4hg8TBR6iAt5iGvwEFfoIR7kIZ7BwyShh/iQh/gGD/GFHhJAHhIYPEwWekgIeUho8JBQ6CER5CGRwcMUoYfEkIfEBg+JhR6SQB6SGDxMFXpICnlIavCQVOghGeQhmcHDNKGH5JCH5AYPyYUeUkAeUhg8TBd6SAl5SGnwkFLoIRXkIZXBwwyhh9SQh9QGD6mFHtJAHtIYPMwUekgLeUhr8JBW6CEd5CGdwcMsoYf0kIf0Bg/phR4yQB4yGDzMFnrICHnIaPCQUeghE+Qhk8HDHKGHzJCHzAYPmYUeskAeshg8zBV6yAp5yGrwkFXoIRvkIZvBwzyhh+yQh+wGD9mFHnJAHnIYPMwXesgJechp8JBT6CEX5CGXwcMCoYfckIfcBg+5hR7yQB7yGDwsFHrIC3nIa/CQV+ghH+Qhn8HDIqGH/JCH/AYP+YUeCkAeChg8LBZ6KAh5KGjwUFDooRDkoZDBwxKhh8KQh8IGD4WFHopAHooYPCwVeigKeShq8FBU6KEY5KGYwcMyoYfikIfiBg/FhR5KQB5KGDwsF3ooCXkoafBQUuihFOShlMHDCqGH0pCH0gYPpYUeykAeyhg8rBR6KAt5KGvwUFbooRzkoZzBwyqhh/KQh/IGD+WFHipAHioYPKwWeqgIeaho8FBR6KES5KGSwcMaoYfKkIfKBg+VhR6qQB6qGDysFXqoCnmoavBQVeihGuShmsHDOqGH6pCH6gYP1YUeakAeahg8rBd6qAl5qGnwUFPooRbkoZbBwwahh9qQh9oGD7WFHupAHuoYPGwUeqgLeahr8FBX6KEe5KGewcMmoYf6kIf6Bg/1hR4aQB4aGDxsFnpoCHloaPDQUOihEeShkcHDFqGHxpCHxgYPjYUemkAemhg8bBV6aAp5aGrw0FTooRnkoZnBwzahh+aQh+YGD82FHlpAHloYPGwXemgJeWhp8NBS6KEV5KGVwcMOoYfWkIfWBg+thR7aQB7aGDzsFHpoC3loa/DQVuihHeShncHDLqGH9pCH9gYP7YUeOkAeOhg87BZ66Ah56Gjw0FHooRPkoZPBwx6hh86Qh84GD52FHrpAHroYPOwVeugKeehq8NBV6KEb5KGbwcM+oYfukIfuBg/dhR56QB56GDzsF3roCXnoafDQU+ihF+Shl8HDAaGH3pCH3gYPvYUe+kAe+hg8HBR66At56Gvw0FfooR/koZ/BwyGhh/6Qh/4GD/2FHgZAHgYYPBwWehgIeRho8DBQ6GEQ5GGQwcMRoYfBkIfBBg+DhR6GQB6GGDwcFXoYCnkYavAwVOhhGORhmMHDMaGH4ZCH4QYPw4UeRkAeRhg8HBd6GAl5GGnwMFLoYRTkYZTBwwmhh9GQh9EGD6OFHsZAHsYYPJwUehgLeRhr8DBW6GEc5GGcwcMpoYfxkIfxBg/jhR4mQB4mGDycFnqYCHmYaPAwUehhEuRhksHDGaGHyZCHyQYPk4UepkAephg8nBV6mAp5mGrwMFXoYRrkYZrBwzmhh+mQh+kGD9OFHmZAHmYYPJwXepgJeZhp8DBT6GEW5GGWwcMFoYfZkIfZBg+zhR7mQB7mGDxcFHqYC3mYa/AwV+hhHuRhnsHD30IP8yEP8w0e5gs9LIA8LDB4uCT0sBDysNDgYaHQwyLIwyKDh3+EHhZDHhYbPCwWelgCeVhi8HBZ6GEp5GGpwcNSoYdlkIdlBg9XhB6WQx6WGzwsF3pYAXlYYfBwVehhJeRhpcHDSqGHVZCHVQYP14QeVkMeVhs8rBZ6WAN5WGPwcF3oYS3kYa3Bw1qhh3WQh3UGDzeEHtZDHtYbPKwXetgAedhg8HBT6GEj5GGjwcNGoYdNkIdNBg+3hB42Qx42GzxsFnrYAnnYYvBwW+hhK+Rhq8HDVqGHbZCHbQYPd4QetkMeths8bBd62AF52GHwcFfoYSfkYafBw06hh12Qh10GD/eEHnZDHnYbPOwWetgDedhj8BAg9LAX8rDX4GGv0MM+yMM+g4f7Qg/7IQ/7DR72Cz0cgDwcMHh4IPRwEPJw0ODhoNDDIcjDIYOHh0IPhyEPhw0eDgs9HIE8HDF4eCT0cBTycNTg4ajQwzHIwzGDh8dCD8chD8cNHo4LPZyAPJwweHgi9HAS8nDS4OGk0MMpyMMpg4enQg+nIQ+nDR5OCz2cgTycMXh4JvRwFvJw1uDhrNDDOcjDOYOH50IP5yEP5w0ezgs9XIA8XDB4eCH0cBHycNHg4aLQw9+Qh78NHv4VergEebhk8HBJ6OEfyMM/Bg8vhR4uQx4uGzxcFnq4Anm4YvDwSujhKuThqsHDVaGHa5CHawYPr4UerkMerhs8XBd6uAF5uGHw8Ebo4Sbk4abBw02hh1uQh1sGD2+FHm5DHm4bPNwWergDebhj8PBO6OEu5OGuwcNdoYd7kId7Bg/vhR4CIA8BBg8BQg/3IQ/3DR4+CD08gDw8MHh4IPTwEPLw0ODho9DDI8jDI4OHR0IPjyEPjw0ePgk9PIE8PDF4eCL08BTy8NTg4bPQwzPIwzODh2dCD88hD88NHr4IPbyAPLwweHgh9PAv5OFfg4evQg8vIQ8vDR5eCj28gjy8Mnj4JvTwGvLw2uDhtdDDG8jDG4OH70IPbyEPbw0e3go9vIM8vDN4+CH08B7y8N7g4b3QwwfIwweDh59CDx8hDx8NHj4KPXyCPHwyePgl9PAZ8vDZ4OGz0MMXyMMXg4ffQg9fIQ9fDR6+Cj18gzx8M3j4I/TwHfLw3eDhu9DDD8jDD4OHv4ro/vAT8vDT4OGn0MMvyMMvg4dAQg+/IQ+/DR5+Cz38gTz8MXgILPTw11XGw3+7tIf/3f7/tgJdZTwEusp7CCL0EBjyENjgIbDQQxDIQxCDh6BCD0EhD0ENHoIKPQSDPAQzeAgm9BAc8hDc4CG40EMIyEMIg4fgQg8hIQ8hDR5CCj2EgjyEMngIIfQQGvIQ2uAhtNBDGMhDGIOHkEIPYSEPYQ0ewgo9hIM8hDN4CCX0EB7yEN7gIbzQQwTIQwSDh9BCDxEhDxENHiIKPUSCPEQyeAgj9BAZ8hDZ4CGy0EMUyEMUg4ewQg9RIQ9RDR6iCj1EgzxEM3gIJ/QQHfIQ3eAhutBDDMhDDIOH8EIPMSEPMQ0eYgo9xII8xDJ4iCD0EBvyENvgIbbQQxzIQxyDh4hCD3EhD3ENHuIKPcSDPMQzeIgk9BAf8hDf4CG+0EMCyEMCg4fIQg8JIQ8JDR4SCj0kgjwkMniIIvSQGPKQ2OAhsdBDEshDEoOHqEIPSSEPSQ0ekgo9JIM8JDN4iCb0kBzykNzgIbnQQwrIQwqDh+hCDykhDykNHlIKPaSCPKQyeIgh9JAa8pDa4CG10EMayEMag4eYQg9pIQ9pDR7SCj2kgzykM3iIJfSQHvKQ3uAhvdBDBshDBoOH2EIPGSEPGQ0eMgo9ZII8ZDJ4iCP0kBnykNngIbPQQxbIQxaDh7hCD1khD1kNHrIKPWSDPGQzeIgn9JAd8pDd4CG70EMOyEMOg4f4Qg85IQ85DR5yCj3kgjzkMnhIIPSQG/KQ2+Aht9BDHshDHoOHhEIPeSEPeQ0e8go95IM85DN4SCT0kB/ykN/gIb/QQwHIQwGDh8RCDwUhDwUNHgoKPRSCPBQyeEgi9FAY8lDY4KGw0EMRyEMRg4ekQg9FIQ9FDR6KCj0UgzwUM3hIJvRQHPJQ3OChuNBDCchDCYOH5EIPJSEPJQ0eSgo9lII8lDJ4SCH0UBryUNrgobTQQxnIQxmDh5RCD2UhD2UNHsoKPZSDPJQzeEgl9FAe8lDe4KG80EMFyEMFg4fUQg8VIQ8VDR4qCj1UgjxUMnhII/RQGfJQ2eChstBDFchDFYOHtEIPVSEPVQ0eqgo9VIM8VDN4SCf0UB3yUN3gobrQQw3IQw2Dh/RCDzUhDzUNHmoKPdSCPNQyeMgg9FAb8lDb4KG20EMdyEMdg4eMQg91IQ91DR7qCj3UgzzUM3jIJPRQH/JQ3+ChvtBDA8hDA4OHzEIPDSEPDQ0eGgo9NII8NDJ4yCL00Bjy0NjgobHQQxPIQxODh6xCD00hD00NHpoKPTSDPDQzeMgm9NAc8tDc4KG50EMLyEMLg4fsQg8tIQ8tDR5aCj20gjy0MnjIIfTQGvLQ2uChtdBDG8hDG4OHnEIPbSEPbQ0e2go9tIM8tDN4yCX00B7y0N7gob3QQwfIQweDh9xCDx0hDx0NHjoKPXSCPHQyeMgj9NAZ8tDZ4KGz0EMXyEMXg4e8Qg9dIQ9dDR66Cj10gzx0M3jIJ/TQHfLQ3eChu9BDD8hDD4OH/EIPPSEPPQ0eego99II89DJ4KCD00Bvy0NvgobfQQx/IQx+Dh4JCD30hD30NHvoKPfSDPPQzeCgk9NAf8tDf4KG/0MMAyMMAg4fCQg8DIQ8DDR4GCj0MgjwMMngoIvQwGPIw2OBhsNDDEMjDEIOHokIPQyEPQw0ehgo9DIM8DDN4KCb0MBzyMNzgYbjQwwjIwwiDh+JCDyMhDyMNHkYKPYyCPIwyeCgh9DAa8jDa4GG00MMYyMMYg4eSQg9jIQ9jDR7GCj2MgzyMM3goJfQwHvIw3uBhvNDDBMjDBIOH0kIPEyEPEw0eJgo9TII8TDJ4KCP0MBnyMNngYbLQwxTIwxSDh7JCD1MhD1MNHqYKPUyDPEwzeCgn9DAd8jDd4GG60MMMyMMMg4fyQg8zIQ8zDR5mCj3MgjzMMnioIPQwG/Iw2+BhttDDHMjDHIOHikIPcyEPcw0e5go9zIM8zDN4qCT0MB/yMN/gYb7QwwLIwwKDh8pCDwshDwsNHhYKPSyCPCwyeKgi9LAY8rDY4GGx0MMSyMMSg4eqQg9LIQ9LDR6WCj0sgzwsM3ioJvSwHPKw3OBhudDDCsjDCoOH6kIPKyEPKw0eVgo9rII8rDJ4qCH0sBrysNrgYbXQwxrIwxqDh5pCD2shD2sNHtYKPayDPKwzeKgl9LAe8rDe4GG90MMGyMMGg4faQg8bIQ8bDR42Cj1sgjxsMnioI/SwGfKw2eBhs9DDFsjDFoOHukIPWyEPWw0etgo9bIM8bDN4qCf0sB3ysN3gYbvQww7Iww6Dh/pCDzshDzsNHnYKPeyCPOwyeGgg9LAb8rDb4GG30MMeyMMeg4eGQg97IQ97DR72Cj3sgzzsM3hoJPSwH/Kw3+Bhv9DDAcjDAYOHxkIPByEPBw0eDgo9HII8HDJ4aCL0cBjycNjg4bDQwxHIwxGDh6ZCD0chD0cNHo4KPRyDPBwzeGgm9HAc8nDc4OG40MMJyMMJg4fmQg8nIQ8nDR5OCj2cgjycMnhoIfRwGvJw2uDhtNDDGcjDGYOHlkIPZyEPZw0ezgo9nIM8nDN4aCX0cB7ycN7g4bzQwwXIwwWDh9ZCDxchDxcNHi4KPfwNefjb4KGN0MMlyMMlg4dLQg//QB7+MXhoK/RwGfJw2eDhstDDFcjDFYOHdkIPVyEPVw0ergo9XIM8XDN4aC/0cB3ycN3g4brQww3Iww2Dhw5CDzchDzcNHm4KPdyCPNwyeOgo9HAb8nDb4OG20MMdyMMdg4dOQg93IQ93DR7uCj3cgzzcM3joLPQQAHkIMHgIEHq4D3m4b/DQRejhAeThgcHDA6GHh5CHhwYPXYUeHkEeHhk8PBJ6eAx5eGzw0E3o4Qnk4YnBwxOhh6eQh6cGD92FHp5BHp4ZPDwTengOeXhu8NBD6OEF5OGFwcMLoYd/IQ//Gjz0FHp4CXl4afDwUujhFeThlcFDL6GH15CH1wYPr4Ue3kAe3hg89BZ6eAt5eGvw8Fbo4R3k4Z3BQx+hh/eQh/cGD++FHj5AHj4YPPQVevgIefho8PBR6OET5OGTwUM/oYfPkIfPBg+fhR6+QB6+GDz0F3r4Cnn4avDwVejhG+Thm8HDAKGH75CH7wYP34UefkAefhg8DBR6+Al5+Gnw8FPo4Rfk4ZfBwyChh9+Qh98GD7+FHv5AHv4YPAwWevjrGuPhv13aw/9u/39bga4xHgJd4z0MEXoIDHkIbPAQWOghCOQhiMHDUKGHoJCHoAYPQYUegkEeghk8DBN6CA55CG7wEFzoIQTkIYTBw3Chh5CQh5AGDyGFHkJBHkIZPIwQeggNeQht8BBa6CEM5CGMwcNIoYewkIewBg9hhR7CQR7CGTyMEnoID3kIb/AQXughAuQhgsHDaKGHiJCHiAYPEYUeIkEeIhk8jBF6iAx5iGzwEFnoIQrkIYrBw1ihh6iQh6gGD1GFHqJBHqIZPIwTeogOeYhu8BBd6CEG5CGGwcN4oYeYkIeYBg8xhR5iQR5iGTxMEHqIDXmIbfAQW+ghDuQhjsHDRKGHuJCHuAYPcYUe4kEe4hk8TBJ6iA95iG/wEF/oIQHkIYHBw2Shh4SQh4QGDwmFHhJBHhIZPEwRekgMeUhs8JBY6CEJ5CGJwcNUoYekkIekBg9JhR6SQR6SGTxME3pIDnlIbvCQXOghBeQhhcHDdKGHlJCHlAYPKYUeUkEeUhk8zBB6SA15SG3wkFroIQ3kIY3Bw0yhh7SQh7QGD2mFHtJBHtIZPMwSekgPeUhv8JBe6CED5CGDwcNsoYeMkIeMBg8ZhR4yQR4yGTzMEXrIDHnIbPCQWeghC+Qhi8HDXKGHrJCHrAYPWYUeskEeshk8zBN6yA55yG7wkF3oIQfkIYfBw3yhh5yQh5wGDzmFHnJBHnIZPCwQesgNecht8JBb6CEP5CGPwcNCoYe8kIe8Bg95hR7yQR7yGTwsEnrID3nIb/CQX+ihAOShgMHDYqGHgpCHggYPBYUeCkEeChk8LBF6KAx5KGzwUFjooQjkoYjBw1Khh6KQh6IGD0WFHopBHooZPCwTeigOeShu8FBc6KEE5KGEwcNyoYeSkIeSBg8lhR5KQR5KGTysEHooDXkobfBQWuihDOShjMHDSqGHspCHsgYPZYUeykEeyhk8rBJ6KA95KG/wUF7ooQLkoYLBw2qhh4qQh4oGDxWFHipBHioZPKwReqgMeahs8FBZ6KEK5KGKwcNaoYeqkIeqBg9VhR6qQR6qGTysE3qoDnmobvBQXeihBuShhsHDeqGHmpCHmgYPNYUeakEeahk8bBB6qA15qG3wUFvooQ7koY7Bw0ahh7qQh7oGD3WFHupBHuoZPGwSeqgPeahv8FBf6KEB5KGBwcNmoYeGkIeGBg8NhR4aQR4aGTxsEXpoDHlobPDQWOihCeShicHDVqGHppCHpgYPTYUemkEemhk8bBN6aA55aG7w0FzooQXkoYXBw3ahh5aQh5YGDy2FHlpBHloZPOwQemgNeWht8NBa6KEN5KGNwcNOoYe2kIe2Bg9thR7aQR7aGTzsEnpoD3lob/DQXuihA+Shg8HDbqGHjpCHjgYPHYUeOkEeOhk87BF66Ax56Gzw0FnooQvkoYvBw16hh66Qh64GD12FHrpBHroZPOwTeugOeehu8NBd6KEH5KGHwcN+oYeekIeeBg89hR56QR56GTwcEHroDXnobfDQW+ihD+Shj8HDQaGHvpCHvgYPfYUe+kEe+hk8HBJ66A956G/w0F/oYQDkYYDBw2Ghh4GQh4EGDwOFHgZBHgYZPBwRehgMeRhs8DBY6GEI5GGIwcNRoYehkIehBg9DhR6GQR6GGTwcE3oYDnkYbvAwXOhhBORhhMHDcaGHkZCHkQYPI4UeRkEeRhk8nBB6GA15GG3wMFroYQzkYYzBw0mhh7GQh7EGD2OFHsZBHsYZPJwSehgPeRhv8DBe6GEC5GGCwcNpoYeJkIeJBg8ThR4mQR4mGTycEXqYDHmYbPAwWehhCuRhisHDWaGHqZCHqQYPU4UepkEephk8nBN6mA55mG7wMF3oYQbkYYbBw3mhh5mQh5kGDzOFHmZBHmYZPFwQepgNeZht8DBb6GEO5GGOwcNFoYe5kIe5Bg9zhR7mQR7mGTz8LfQwH/Iw3+BhvtDDAsjDAoOHS0IPCyEPCw0eFgo9LII8LDJ4+EfoYTHkYbHBw2KhhyWQhyUGD5eFHpZCHpYaPCwVelgGeVhm8HBF6GE55GG5wcNyoYcVkIcVBg9XhR5WQh5WGjysFHpYBXlYZfBwTehhNeRhtcHDaqGHNZCHNQYP14Ue1kIe1ho8rBV6WAd5WGfwcEPoYT3kYb3Bw3qhhw2Qhw0GDzeFHjZCHjYaPGwUetgEedhk8HBL6GEz5GGzwcNmoYctkIctBg+3hR62Qh62GjxsFXrYBnnYZvBwR+hhO+Rhu8HDdqGHHZCHHQYPd4UedkIedho87BR62AV52GXwcE/oYTfkYbfBw26hhz2Qhz0GDwFCD3shD3sNHvYKPeyDPOwzeLgv9LAf8rDf4GG/0MMByMMBg4cHQg8HIQ8HDR4OCj0cgjwcMnh4KPRwGPJw2ODhsNDDEcjDEYOHR0IPRyEPRw0ejgo9HIM8HDN4eCz0cBzycNzg4bjQwwnIwwmDhydCDychDycNHk4KPZyCPJwyeHgq9HAa8nDa4OG00MMZyMMZg4dnQg9nIQ9nDR7OCj2cgzycM3h4LvRwHvJw3uDhvNDDBcjDBYOHF0IPFyEPFw0eLgo9/A15+Nvg4V+hh0uQh0sGD5eEHv6BPPxj8PBS6OEy5OGywcNloYcrkIcrBg+vhB6uQh6uGjxcFXq4Bnm4ZvDwWujhOuThusHDdaGHG5CHGwYPb4QebkIebho83BR6uAV5uGXw8Fbo4Tbk4bbBw22hhzuQhzsGD++EHu5CHu4aPNwVergHebhn8PBe6CEA8hBg8BAg9HAf8nDf4OGD0MMDyMMDg4cHQg8PIQ8PDR4+Cj08gjw8Mnh4JPTwGPLw2ODhk9DDE8jDE4OHJ0IPTyEPTw0ePgs9PIM8PDN4eCb08Bzy8Nzg4YvQwwvIwwuDhxdCD/9CHv41ePgq9PAS8vDS4OGl0MMryMMrg4dvQg+vIQ+vDR5eCz28gTy8MXj4LvTwFvLw1uDhrdDDO8jDO4OHH0IP7yEP7w0e3gs9fIA8fDB4+Cn08BHy8NHg4aPQwyfIwyeDh19CD58hD58NHj4LPXyBPHwxePgt9PAV8vDV4OGr0MM3yMM3g4c/Qg/fIQ/fDR6+Cz38gDz8MHj4q6juDz8hDz8NHn4KPfyCPPwyeAgk9PAb8vDb4OG30MMfyMMfg4fAQg9/XWc8/LdLe/jf7f9vK9B1xkOg67yHIEIPgSEPgQ0eAgs9BIE8BDF4CCr0EBTyENTgIajQQzDIQzCDh2BCD8EhD8ENHoILPYSAPIQweAgu9BAS8hDS4CGk0EMoyEMog4cQQg+hIQ+hDR5CCz2EgTyEMXgIKfQQFvIQ1uAhrNBDOMhDOIOHUEIP4SEP4Q0ewgs9RIA8RDB4CC30EBHyENHgIaLQQyTIQySDhzBCD5EhD5ENHiILPUSBPEQxeAgr9BAV8hDV4CGq0EM0yEM0g4dwQg/RIQ/RDR6iCz3EgDzEMHgIL/QQE/IQ0+AhptBDLMhDLIOHCEIPsSEPsQ0eYgs9xIE8xDF4iCj0EBfyENfgIa7QQzzIQzyDh0hCD/EhD/ENHuILPSSAPCQweIgs9JAQ8pDQ4CGh0EMiyEMig4coQg+JIQ+JDR4SCz0kgTwkMXiIKvSQFPKQ1OAhqdBDMshDMoOHaEIPySEPyQ0ekgs9pIA8pDB4iC70kBLykNLgIaXQQyrIQyqDhxhCD6khD6kNHlILPaSBPKQxeIgp9JAW8pDW4CGt0EM6yEM6g4dYQg/pIQ/pDR7SCz1kgDxkMHiILfSQEfKQ0eAho9BDJshDJoOHOEIPmSEPmQ0eMgs9ZIE8ZDF4iCv0kBXykNXgIavQQzbIQzaDh3hCD9khD9kNHrILPeSAPOQweIgv9JAT8pDT4CGn0EMuyEMug4cEQg+5IQ+5DR5yCz3kgTzkMXhIKPSQF/KQ1+Ahr9BDPshDPoOHREIP+SEP+Q0e8gs9FIA8FDB4SCz0UBDyUNDgoaDQQyHIQyGDhyRCD4UhD4UNHgoLPRSBPBQxeEgq9FAU8lDU4KGo0EMxyEMxg4dkQg/FIQ/FDR6KCz2UgDyUMHhILvRQEvJQ0uChpNBDKchDKYOHFEIPpSEPpQ0eSgs9lIE8lDF4SCn0UBbyUNbgoazQQznIQzmDh1RCD+UhD+UNHsoLPVSAPFQweEgt9FAR8lDR4KGi0EMlyEMlg4c0Qg+VIQ+VDR4qCz1UgTxUMXhIK/RQFfJQ1eChqtBDNchDNYOHdEIP1SEP1Q0eqgs91IA81DB4SC/0UBPyUNPgoabQQy3IQy2DhwxCD7UhD7UNHmoLPdSBPNQxeMgo9FAX8lDX4KGu0EM9yEM9g4dMQg/1IQ/1DR7qCz00gDw0MHjILPTQEPLQ0OChodBDI8hDI4OHLEIPjSEPjQ0eGgs9NIE8NDF4yCr00BTy0NTgoanQQzPIQzODh2xCD80hD80NHpoLPbSAPLQweMgu9NAS8tDS4KGl0EMryEMrg4ccQg+tIQ+tDR5aCz20gTy0MXjIKfTQFvLQ1uChrdBDO8hDO4OHXEIP7SEP7Q0e2gs9dIA8dDB4yC300BHy0NHgoaPQQyfIQyeDhzxCD50hD50NHjoLPXSBPHQxeMgr9NAV8tDV4KGr0EM3yEM3g4d8Qg/dIQ/dDR66Cz30gDz0MHjIL/TQE/LQ0+Chp9BDL8hDL4OHAkIPvSEPvQ0eegs99IE89DF4KCj00Bfy0Nfgoa/QQz/IQz+Dh0JCD/0hD/0NHvoLPQyAPAwweCgs9DAQ8jDQ4GGg0MMgyMMgg4ciQg+DIQ+DDR4GCz0MgTwMMXgoKvQwFPIw1OBhqNDDMMjDMIOHYkIPwyEPww0ehgs9jIA8jDB4KC70MBLyMNLgYaTQwyjIwyiDhxJCD6MhD6MNHkYLPYyBPIwxeCgp9DAW8jDW4GGs0MM4yMM4g4dSQg/jIQ/jDR7GCz1MgDxMMHgoLfQwEfIw0eBhotDDJMjDJIOHMkIPkyEPkw0eJgs9TIE8TDF4KCv0MBXyMNXgYarQwzTIwzSDh3JCD9MhD9MNHqYLPcyAPMwweCgv9DAT8jDT4GGm0MMsyMMsg4cKQg+zIQ+zDR5mCz3MgTzMMXioKPQwF/Iw1+BhrtDDPMjDPIOHSkIP8yEP8w0e5gs9LIA8LDB4qCz0sBDysNDgYaHQwyLIwyKDhypCD4shD4sNHhYLPSyBPCwxeKgq9LAU8rDU4GGp0MMyyMMyg4dqQg/LIQ/LDR6WCz2sgDysMHioLvSwEvKw0uBhpdDDKsjDKoOHGkIPqyEPqw0eVgs9rIE8rDF4qCn0sBbysNbgYa3QwzrIwzqDh1pCD+shD+sNHtYLPWyAPGwweKgt9LAR8rDR4GGj0MMmyMMmg4c6Qg+bIQ+bDR42Cz1sgTxsMXioK/SwFfKw1eBhq9DDNsjDNoOHekIP2yEP2w0etgs97IA87DB4qC/0sBPysNPgYafQwy7Iwy6DhwZCD7shD7sNHnYLPeyBPOwxeGgo9LAX8rDX4GGv0MM+yMM+g4dGQg/7IQ/7DR72Cz0cgDwcMHhoLPRwEPJw0ODhoNDDIcjDIYOHJkIPhyEPhw0eDgs9HIE8HDF4aCr0cBTycNTg4ajQwzHIwzGDh2ZCD8chD8cNHo4LPZyAPJwweGgu9HAS8nDS4OGk0MMpyMMpg4cWQg+nIQ+nDR5OCz2cgTycMXhoKfRwFvJw1uDhrNDDOcjDOYOHVkIP5yEP5w0ezgs9XIA8XDB4aC30cBHycNHg4aLQw9+Qh78NHtoIPVyCPFwyeLgk9PAP5OEfg4e2Qg+XIQ+XDR4uCz1cgTxcMXhoJ/RwFfJw1eDhqtDDNcjDNYOH9kIP1yEP1w0ergs93IA83DB46CD0cBPycNPg4abQwy3Iwy2Dh45CD7chD7cNHm4LPdyBPNwxeOgk9HAX8nDX4OGu0MM9yMM9g4fOQg8BkIcAg4cAoYf7kIf7Bg9dhB4eQB4eGDw8EHp4CHl4aPDQVejhEeThkcHDI6GHx5CHxwYP3YQenkAenhg8PBF6eAp5eGrw0F3o4Rnk4ZnBwzOhh+eQh+cGDz2EHl5AHl4YPLwQevgX8vCvwUNPoYeXkIeXBg8vhR5eQR5eGTz0Enp4DXl4bfDwWujhDeThjcFDb6GHt5CHtwYPb4Ue3kEe3hk89BF6eA95eG/w8F7o4QPk4YPBQ1+hh4+Qh48GDx+FHj5BHj4ZPPQTevgMefhs8PBZ6OEL5OGLwUN/oYevkIevBg9fhR6+QR6+GTwMEHr4Dnn4bvDwXejhB+Thh8HDQKGHn5CHnwYPP4UefkEefhk8DBJ6+A15+G3w8Fvo4Q/k4Y/Bw2Chh79uMB7+26U9/O/2/7cV6AbjIdAN3sMQoYfAkIfABg+BhR6CQB6CGDwMFXoICnkIavAQVOghGOQhmMHDMKGH4JCH4AYPwYUeQkAeQhg8DBd6CAl5CGnwEFLoIRTkIZTBwwihh9CQh9AGD6GFHsJAHsIYPIwUeggLeQhr8BBW6CEc5CGcwcMooYfwkIfwBg/hhR4iQB4iGDyMFnqICHmIaPAQUeghEuQhksHDGKGHyJCHyAYPkYUeokAeohg8jBV6iAp5iGrwEFXoIRrkIZrBwzihh+iQh+gGD9GFHmJAHmIYPIwXeogJeYhp8BBT6CEW5CGWwcMEoYfYkIfYBg+xhR7iQB7iGDxMFHqIC3mIa/AQV+ghHuQhnsHDJKGH+JCH+AYP8YUeEkAeEhg8TBZ6SAh5SGjwkFDoIRHkIZHBwxShh8SQh8QGD4mFHpJAHpIYPEwVekgKeUhq8JBU6CEZ5CGZwcM0oYfkkIfkBg/JhR5SQB5SGDxMF3pICXlIafCQUughFeQhlcHDDKGH1JCH1AYPqYUe0kAe0hg8zBR6SAt5SGvwkFboIR3kIZ3Bwyyhh/SQh/QGD+mFHjJAHjIYPMwWesgIecho8JBR6CET5CGTwcMcoYfMkIfMBg+ZhR6yQB6yGDzMFXrICnnIavCQVeghG+Qhm8HDPKGH7JCH7AYP2YUeckAechg8zBd6yAl5yGnwkFPoIRfkIZfBwwKhh9yQh9wGD7mFHvJAHvIYPCwUesgLechr8JBX6CEf5CGfwcMioYf8kIf8Bg/5hR4KQB4KGDwsFnooCHkoaPBQUOihEOShkMHDEqGHwpCHwgYPhYUeikAeihg8LBV6KAp5KGrwUFTooRjkoZjBwzKhh+KQh+IGD8WFHkpAHkoYPCwXeigJeShp8FBS6KEU5KGUwcMKoYfSkIfSBg+lhR7KQB7KGDysFHooC3koa/BQVuihHOShnMHDKqGH8pCH8gYP5YUeKkAeKhg8rBZ6qAh5qGjwUFHooRLkoZLBwxqhh8qQh8oGD5WFHqpAHqoYPKwVeqgKeahq8FBV6KEa5KGawcM6oYfqkIfqBg/VhR5qQB5qGDysF3qoCXmoafBQU+ihFuShlsHDBqGH2pCH2gYPtYUe6kAe6hg8bBR6qAt5qGvwUFfooR7koZ7Bwyahh/qQh/oGD/WFHhpAHhoYPGwWemgIeWho8NBQ6KER5KGRwcMWoYfGkIfGBg+NhR6aQB6aGDxsFXpoCnloavDQVOihGeShmcHDNqGH5pCH5gYPzYUeWkAeWhg8bBd6aAl5aGnw0FLooRXkoZXBww6hh9aQh9YGD62FHtpAHtoYPOwUemgLeWhr8NBW6KEd5KGdwcMuoYf2kIf2Bg/thR46QB46GDzsFnroCHnoaPDQUeihE+Shk8HDHqGHzpCHzgYPnYUeukAeuhg87BV66Ap56Grw0FXooRvkoZvBwz6hh+6Qh+4GD92FHnpAHnoYPOwXeugJeehp8NBT6KEX5KGXwcMBoYfekIfeBg+9hR76QB76GDwcFHroC3noa/DQV+ihH+Shn8HDIaGH/pCH/gYP/YUeBkAeBhg8HBZ6GAh5GGjwMFDoYRDkYZDBwxGhh8GQh8EGD4OFHoZAHoYYPBwVehgKeRhq8DBU6GEY5GGYwcMxoYfhkIfhBg/DhR5GQB5GGDwcF3oYCXkYafAwUuhhFORhlMHDCaGH0ZCH0QYPo4UexkAexhg8nBR6GAt5GGvwMFboYRzkYZzBwymhh/GQh/EGD+OFHiZAHiYYPJwWepgIeZho8DBR6GES5GGSwcMZoYfJkIfJBg+ThR6mQB6mGDycFXqYCnmYavAwVehhGuRhmsHDOaGH6ZCH6QYP04UeZkAeZhg8nBd6mAl5mGnwMFPoYRbkYZbBwwWhh9mQh9kGD7OFHuZAHuYYPFwUepgLeZhr8DBX6GEe5GGewcPfQg/zIQ/zDR7mCz0sgDwsMHi4JPSwEPKw0OBhodDDIsjDIoOHf4QeFkMeFhs8LBZ6WAJ5WGLwcFnoYSnkYanBw1Khh2WQh2UGD1eEHpZDHpYbPCwXelgBeVhh8HBV6GEl5GGlwcNKoYdVkIdVBg/XhB5WQx5WGzysFnpYA3lYY/BwXehhLeRhrcHDWqGHdZCHdQYPN4Qe1kMe1hs8rBd62AB52GDwcFPoYSPkYaPBw0ahh02Qh00GD7eEHjZDHjYbPGwWetgCedhi8HBb6GEr5GGrwcNWoYdtkIdtBg93hB62Qx62GzxsF3rYAXnYYfBwV+hhJ+Rhp8HDTqGHXZCHXQYP94QedkMedhs87BZ62AN52GPwECD0sBfysNfgYa/Qwz7Iwz6Dh/tCD/shD/sNHvYLPRyAPBwweHgg9HAQ8nDQ4OGg0MMhyMMhg4eHQg+HIQ+HDR4OCz0cgTwcMXh4JPRwFPJw1ODhqNDDMcjDMYOHx0IPxyEPxw0ejgs9nIA8nDB4eCL0cBLycNLg4aTQwynIwymDh6dCD6chD6cNHk4LPZyBPJwxeHgm9HAW8nDW4OGs0MM5yMM5g4fnQg/nIQ/nDR7OCz1cgDxcMHh4IfRwEfJw0eDhotDD35CHvw0e/hV6uAR5uGTwcEno4R/Iwz8GDy+FHi5DHi4bPFwWergCebhi8PBK6OEq5OGqwcNVoYdrkIdrBg+vhR6uQx6uGzxcF3q4AXm4YfDwRujhJuThpsHDTaGHW5CHWwYPb4UebkMebhs83BZ6uAN5uGPw8E7o4S7k4a7Bw12hh3uQh3sGD++FHgIgDwEGDwFCD/chD/cNHj4IPTyAPDwweHgg9PAQ8vDQ4OGj0MMjyMMjg4dHQg+PIQ+PDR4+CT08gTw8MXh4IvTwFPLw1ODhs9DDM8jDM4OHZ0IPzyEPzw0evgg9vIA8vDB4eCH08C/k4V+Dh69CDy8hDy8NHl4KPbyCPLwyePgm9PAa8vDa4OG10MMbyMMbg4fvQg9vIQ9vDR7eCj28gzy8M3j4IfTwHvLw3uDhvdDDB8jDB4OHn0IPHyEPHw0ePgo9fII8fDJ4+CX08Bny8Nng4bPQwxfIwxeDh99CD18hD18NHr4KPXyDPHwzePgj9PAd8vDd4OG70MMPyMMPg4e/iun+8BPy8NPg4afQwy/Iwy+Dh0BCD78hD78NHn4LPfyBPPwxeAgs9PDXTcbDf7u0h//d/v+2At1kPAS6yXsIIvQQGPIQ2OAhsNBDEMhDEIOHoEIPQSEPQQ0eggo9BIM8BDN4CCb0EBzyENzgIbjQQwjIQwiDh+BCDyEhDyENHkIKPYSCPIQyeAgh9BAa8hDa4CG00EMYyEMYg4eQQg9hIQ9hDR7CCj2EgzyEM3gIJfQQHvIQ3uAhvNBDBMhDBIOH0EIPESEPEQ0eIgo9RII8RDJ4CCP0EBnyENngIbLQQxTIQxSDh7BCD1EhD1ENHqIKPUSDPEQzeAgn9BAd8hDd4CG60EMMyEMMg4fwQg8xIQ8xDR5iCj3EgjzEMniIIPQQG/IQ2+AhttBDHMhDHIOHiEIPcSEPcQ0e4go9xIM8xDN4iCT0EB/yEN/gIb7QQwLIQwKDh8hCDwkhDwkNHhIKPSSCPCQyeIgi9JAY8pDY4CGx0EMSyEMSg4eoQg9JIQ9JDR6SCj0kgzwkM3iIJvSQHPKQ3OAhudBDCshDCoOH6EIPKSEPKQ0eUgo9pII8pDJ4iCH0kBrykNrgIbXQQxrIQxqDh5hCD2khD2kNHtIKPaSDPKQzeIgl9JAe8pDe4CG90EMGyEMGg4fYQg8ZIQ8ZDR4yCj1kgjxkMniII/SQGfKQ2eAhs9BDFshDFoOHuEIPWSEPWQ0esgo9ZIM8ZDN4iCf0kB3ykN3gIbvQQw7IQw6Dh/hCDzkhDzkNHnIKPeSCPOQyeEgg9JAb8pDb4CG30EMeyEMeg4eEQg95IQ95DR7yCj3kgzzkM3hIJPSQH/KQ3+Ahv9BDAchDAYOHxEIPBSEPBQ0eCgo9FII8FDJ4SCL0UBjyUNjgobDQQxHIQxGDh6RCD0UhD0UNHooKPRSDPBQzeEgm9FAc8lDc4KG40EMJyEMJg4fkQg8lIQ8lDR5KCj2UgjyUMnhIIfRQGvJQ2uChtNBDGchDGYOHlEIPZSEPZQ0eygo9lIM8lDN4SCX0UB7yUN7gobzQQwXIQwWDh9RCDxUhDxUNHioKPVSCPFQyeEgj9FAZ8lDZ4KGy0EMVyEMVg4e0Qg9VIQ9VDR6qCj1UgzxUM3hIJ/RQHfJQ3eChutBDDchDDYOH9EIPNSEPNQ0eago91II81DJ4yCD0UBvyUNvgobbQQx3IQx2Dh4xCD3UhD3UNHuoKPdSDPNQzeMgk9FAf8lDf4KG+0EMDyEMDg4fMQg8NIQ8NDR4aCj00gjw0MnjIIvTQGPLQ2OChsdBDE8hDE4OHrEIPTSEPTQ0emgo9NIM8NDN4yCb00Bzy0NzgobnQQwvIQwuDh+xCDy0hDy0NHloKPbSCPLQyeMgh9NAa8tDa4KG10EMbyEMbg4ecQg9tIQ9tDR7aCj20gzy0M3jIJfTQHvLQ3uChvdBDB8hDB4OH3EIPHSEPHQ0eOgo9dII8dDJ4yCP00Bny0NngobPQQxfIQxeDh7xCD10hD10NHroKPXSDPHQzeMgn9NAd8tDd4KG70EMPyEMPg4f8Qg89IQ89DR56Cj30gjz0MngoIPTQG/LQ2+Cht9BDH8hDH4OHgkIPfSEPfQ0e+go99IM89DN4KCT00B/y0N/gob/QwwDIwwCDh8JCDwMhDwMNHgYKPQyCPAwyeCgi9DAY8jDY4GGw0MMQyMMQg4eiQg9DIQ9DDR6GCj0MgzwMM3goJvQwHPIw3OBhuNDDCMjDCIOH4kIPIyEPIw0eRgo9jII8jDJ4KCH0MBryMNrgYbTQwxjIwxiDh5JCD2MhD2MNHsYKPYyDPIwzeCgl9DAe8jDe4GG80MMEyMMEg4fSQg8TIQ8TDR4mCj1MgjxMMngoI/QwGfIw2eBhstDDFMjDFIOHskIPUyEPUw0epgo9TIM8TDN4KCf0MB3yMN3gYbrQwwzIwwyDh/JCDzMhDzMNHmYKPcyCPMwyeKgg9DAb8jDb4GG20MMcyMMcg4eKQg9zIQ9zDR7mCj3MgzzMM3ioJPQwH/Iw3+BhvtDDAsjDAoOHykIPCyEPCw0eFgo9LII8LDJ4qCL0sBjysNjgYbHQwxLIwxKDh6pCD0shD0sNHpYKPSyDPCwzeKgm9LAc8rDc4GG50MMKyMMKg4fqQg8rIQ8rDR5WCj2sgjysMnioIfSwGvKw2uBhtdDDGsjDGoOHmkIPayEPaw0e1go9rIM8rDN4qCX0sB7ysN7gYb3QwwbIwwaDh9pCDxshDxsNHjYKPWyCPGwyeKgj9LAZ8rDZ4GGz0MMWyMMWg4e6Qg9bIQ9bDR62Cj1sgzxsM3ioJ/SwHfKw3eBhu9DDDsjDDoOH+kIPOyEPOw0edgo97II87DJ4aCD0sBvysNvgYbfQwx7Iwx6Dh4ZCD3shD3sNHvYKPeyDPOwzeGgk9LAf8rDf4GG/0MMByMMBg4fGQg8HIQ8HDR4OCj0cgjwcMnhoIvRwGPJw2ODhsNDDEcjDEYOHpkIPRyEPRw0ejgo9HIM8HDN4aCb0cBzycNzg4bjQwwnIwwmDh+ZCDychDycNHk4KPZyCPJwyeGgh9HAa8nDa4OG00MMZyMMZg4eWQg9nIQ9nDR7OCj2cgzycM3hoJfRwHvJw3uDhvNDDBcjDBYOH1kIPFyEPFw0eLgo9/A15+NvgoY3QwyXIwyWDh0tCD/9AHv4xeGgr9HAZ8nDZ4OGy0MMVyMMVg4d2Qg9XIQ9XDR6uCj1cgzxcM3hoL/RwHfJw3eDhutDDDcjDDYOHDkIPNyEPNw0ebgo93II83DJ46Cj0cBvycNvg4bbQwx3Iwx2Dh05CD3chD3cNHu4KPdyDPNwzeOgs9BAAeQgweAgQergPebhv8NBF6OEB5OGBwcMDoYeHkIeHBg9dhR4eQR4eGTw8Enp4DHl4bPDQTejhCeThicHDE6GHp5CHpwYP3YUenkEenhk8PBN6eA55eG7w0EPo4QXk4YXBwwuhh38hD/8aPPQUengJeXhp8PBS6OEV5OGVwUMvoYfXkIfXBg+vhR7eQB7eGDz0Fnp4C3l4a/DwVujhHeThncFDH6GH95CH9wYP74UePkAePhg89BV6+Ah5+Gjw8FHo4RPk4ZPBQz+hh8+Qh88GD5+FHr5AHr4YPPQXevgKefhq8PBV6OEb5OGbwcMAoYfvkIfvBg/fhR5+QB5+GDwMFHr4CXn4afDwU+jhF+Thl8HDIKGH35CH3wYPv4Ue/kAe/hg8DBZ6+OsW4+G/XdrD/27/f1uBbjEeAt3iPQwReggMeQhs8BBY6CEI5CGIwcNQoYegkIegBg9BhR6CQR6CGTwME3oIDnkIbvAQXOghBOQhhMHDcKGHkJCHkAYPIYUeQkEeQhk8jBB6CA15CG3wEFroIQzkIYzBw0ihh7CQh7AGD2GFHsJBHsIZPIwSeggPeQhv8BBe6CEC5CGCwcNooYeIkIeIBg8RhR4iQR4iGTyMEXqIDHmIbPAQWeghCuQhisHDWKGHqJCHqAYPUYUeokEeohk8jBN6iA55iG7wEF3oIQbkIYbBw3ihh5iQh5gGDzGFHmJBHmIZPEwQeogNeYht8BBb6CEO5CGOwcNEoYe4kIe4Bg9xhR7iQR7iGTxMEnqID3mIb/AQX+ghAeQhgcHDZKGHhJCHhAYPCYUeEkEeEhk8TBF6SAx5SGzwkFjoIQnkIYnBw1Shh6SQh6QGD0mFHpJBHpIZPEwTekgOeUhu8JBc6CEF5CGFwcN0oYeUkIeUBg8phR5SQR5SGTzMEHpIDXlIbfCQWughDeQhjcHDTKGHtJCHtAYPaYUe0kEe0hk8zBJ6SA95SG/wkF7oIQPkIYPBw2yhh4yQh4wGDxmFHjJBHjIZPMwResgMechs8JBZ6CEL5CGLwcNcoYeskIesBg9ZhR6yQR6yGTzME3rIDnnIbvCQXeghB+Qhh8HDfKGHnJCHnAYPOYUeckEechk8LBB6yA15yG3wkFvoIQ/kIY/Bw0Khh7yQh7wGD3mFHvJBHvIZPCwSesgPechv8JBf6KEA5KGAwcNioYeCkIeCBg8FhR4KQR4KGTwsEXooDHkobPBQWOihCOShiMHDUqGHopCHogYPRYUeikEeihk8LBN6KA55KG7wUFzooQTkoYTBw3Khh5KQh5IGDyWFHkpBHkoZPKwQeigNeSht8FBa6KEM5KGMwcNKoYeykIeyBg9lhR7KQR7KGTysEnooD3kob/BQXuihAuShgsHDaqGHipCHigYPFYUeKkEeKhk8rBF6qAx5qGzwUFnooQrkoYrBw1qhh6qQh6oGD1WFHqpBHqoZPKwTeqgOeahu8FBd6KEG5KGGwcN6oYeakIeaBg81hR5qQR5qGTxsEHqoDXmobfBQW+ihDuShjsHDRqGHupCHugYPdYUe6kEe6hk8bBJ6qA95qG/wUF/ooQHkoYHBw2ahh4aQh4YGDw2FHhpBHhoZPGwRemgMeWhs8NBY6KEJ5KGJwcNWoYemkIemBg9NhR6aQR6aGTxsE3poDnlobvDQXOihBeShhcHDdqGHlpCHlgYPLYUeWkEeWhk87BB6aA15aG3w0FrooQ3koY3Bw06hh7aQh7YGD22FHtpBHtoZPOwSemgPeWhv8NBe6KED5KGDwcNuoYeOkIeOBg8dhR46QR46GTzsEXroDHnobPDQWeihC+Shi8HDXqGHrpCHrgYPXYUeukEeuhk87BN66A556G7w0F3ooQfkoYfBw36hh56Qh54GDz2FHnpBHnoZPBwQeugNeeht8NBb6KEP5KGPwcNBoYe+kIe+Bg99hR76QR76GTwcEnroD3nob/DQX+hhAORhgMHDYaGHgZCHgQYPA4UeBkEeBhk8HBF6GAx5GGzwMFjoYQjkYYjBw1Ghh6GQh6EGD0OFHoZBHoYZPBwTehgOeRhu8DBc6GEE5GGEwcNxoYeRkIeRBg8jhR5GQR5GGTycEHoYDXkYbfAwWuhhDORhjMHDSaGHsZCHsQYPY4UexkEexhk8nBJ6GA95GG/wMF7oYQLkYYLBw2mhh4mQh4kGDxOFHiZBHiYZPJwRepgMeZhs8DBZ6GEK5GGKwcNZoYepkIepBg9ThR6mQR6mGTycE3qYDnmYbvAwXehhBuRhhsHDeaGHmZCHmQYPM4UeZkEeZhk8XBB6mA15mG3wMFvoYQ7kYY7Bw0Whh7mQh7kGD3OFHuZBHuYZPPwt9DAf8jDf4GG+0MMCyMMCg4dLQg8LIQ8LDR4WCj0sgjwsMnj4R+hhMeRhscHDYqGHJZCHJQYPl4UelkIelho8LBV6WAZ5WGbwcEXoYTnkYbnBw3KhhxWQhxUGD1eFHlZCHlYaPKwUelgFeVhl8HBN6GE15GG1wcNqoYc1kIc1Bg/XhR7WQh7WGjysFXpYB3lYZ/BwQ+hhPeRhvcHDeqGHDZCHDQYPN4UeNkIeNho8bBR62AR52GTwcEvoYTPkYbPBw2ahhy2Qhy0GD7eFHrZCHrYaPGwVetgGedhm8HBH6GE75GG7wcN2oYcdkIcdBg93hR52Qh52GjzsFHrYBXnYZfBwT+hhN+Rht8HDbqGHPZCHPQYPAUIPeyEPew0e9go97IM87DN4uC/0sB/ysN/gYb/QwwHIwwGDhwdCDwchDwcNHg4KPRyCPBwyeHgo9HAY8nDY4OGw0MMRyMMRg4dHQg9HIQ9HDR6OCj0cgzwcM3h4LPRwHPJw3ODhuNDDCcjDCYOHJ0IPJyEPJw0eTgo9nII8nDJ4eCr0cBrycNrg4bTQwxnIwxmDh2dCD2chD2cNHs4KPZyDPJwzeHgu9HAe8nDe4OG80MMFyMMFg4cXQg8XIQ8XDR4uCj38DXn42+DhX6GHS5CHSwYPl4Qe/oE8/GPw8FLo4TLk4bLBw2WhhyuQhysGD6+EHq5CHq4aPFwVergGebhm8PBa6OE65OG6wcN1oYcbkIcbBg9vhB5uQh5uGjzcFHq4BXm4ZfDwVujhNuThtsHDbaGHO5CHOwYP74Qe7kIe7ho83BV6uAd5uGfw8F7oIQDyEGDwECD0cB/ycN/g4YPQwwPIwwODhwdCDw8hDw8NHj4KPTyCPDwyeHgk9PAY8vDY4OGT0MMTyMMTg4cnQg9PIQ9PDR4+Cz08gzw8M3h4JvTwHPLw3ODhi9DDC8jDC4OHF0IP/0Ie/jV4+Cr08BLy8NLg4aXQwyvIwyuDh29CD68hD68NHl4LPbyBPLwxePgu9PAW8vDW4OGt0MM7yMM7g4cfQg/vIQ/vDR7eCz18gDx8MHj4KfTwEfLw0eDho9DDJ8jDJ4OHX0IPnyEPnw0ePgs9fIE8fDF4+C308BXy8NXg4avQwzfIwzeDhz9CD98hD98NHr4LPfyAPPwwePiruO4PPyEPPw0efgo9/II8/DJ4CCT08Bvy8Nvg4bfQwx/Iwx+Dh8BCD3/dZjz8t0t7+N/t/28r0G3GQ6DbvIcgQg+BIQ+BDR4CCz0EgTwEMXgIKvQQFPIQ1OAhqNBDMMhDMIOHYEIPwSEPwQ0eggs9hIA8hDB4CC70EBLyENLgIaTQQyjIQyiDhxBCD6EhD6ENHkILPYSBPIQxeAgp9BAW8hDW4CGs0EM4yEM4g4dQQg/hIQ/hDR7CCz1EgDxEMHgILfQQEfIQ0eAhotBDJMhDJIOHMEIPkSEPkQ0eIgs9RIE8RDF4CCv0EBXyENXgIarQQzTIQzSDh3BCD9EhD9ENHqILPcSAPMQweAgv9BAT8hDT4CGm0EMsyEMsg4cIQg+xIQ+xDR5iCz3EgTzEMXiIKPQQF/IQ1+AhrtBDPMhDPIOHSEIP8SEP8Q0e4gs9JIA8JDB4iCz0kBDykNDgIaHQQyLIQyKDhyhCD4khD4kNHhILPSSBPCQxeIgq9JAU8pDU4CGp0EMyyEMyg4doQg/JIQ/JDR6SCz2kgDykMHiILvSQEvKQ0uAhpdBDKshDKoOHGEIPqSEPqQ0eUgs9pIE8pDF4iCn0kBbykNbgIa3QQzrIQzqDh1hCD+khD+kNHtILPWSAPGQweIgt9JAR8pDR4CGj0EMmyEMmg4c4Qg+ZIQ+ZDR4yCz1kgTxkMXiIK/SQFfKQ1eAhq9BDNshDNoOHeEIP2SEP2Q0esgs95IA85DB4iC/0kBPykNPgIafQQy7IQy6DhwRCD7khD7kNHnILPeSBPOQxeEgo9JAX8pDX4CGv0EM+yEM+g4dEQg/5IQ/5DR7yCz0UgDwUMHhILPRQEPJQ0OChoNBDIchDIYOHJEIPhSEPhQ0eCgs9FIE8FDF4SCr0UBTyUNTgoajQQzHIQzGDh2RCD8UhD8UNHooLPZSAPJQweEgu9FAS8lDS4KGk0EMpyEMpg4cUQg+lIQ+lDR5KCz2UgTyUMXhIKfRQFvJQ1uChrNBDOchDOYOHVEIP5SEP5Q0eygs9VIA8VDB4SC30UBHyUNHgoaLQQyXIQyWDhzRCD5UhD5UNHioLPVSBPFQxeEgr9FAV8lDV4KGq0EM1yEM1g4d0Qg/VIQ/VDR6qCz3UgDzUMHhIL/RQE/JQ0+ChptBDLchDLYOHDEIPtSEPtQ0eags91IE81DF4yCj0UBfyUNfgoa7QQz3IQz2Dh0xCD/UhD/UNHuoLPTSAPDQweMgs9NAQ8tDQ4KGh0EMjyEMjg4csQg+NIQ+NDR4aCz00gTw0MXjIKvTQFPLQ1OChqdBDM8hDM4OHbEIPzSEPzQ0emgs9tIA8tDB4yC700BLy0NLgoaXQQyvIQyuDhxxCD60hD60NHloLPbSBPLQxeMgp9NAW8tDW4KGt0EM7yEM7g4dcQg/tIQ/tDR7aCz10gDx0MHjILfTQEfLQ0eCho9BDJ8hDJ4OHPEIPnSEPnQ0eOgs9dIE8dDF4yCv00BXy0NXgoavQQzfIQzeDh3xCD90hD90NHroLPfSAPPQweMgv9NAT8tDT4KGn0EMvyEMvg4cCQg+9IQ+9DR56Cz30gTz0MXgoKPTQF/LQ1+Chr9BDP8hDP4OHQkIP/SEP/Q0e+gs9DIA8DDB4KCz0MBDyMNDgYaDQwyDIwyCDhyJCD4MhD4MNHgYLPQyBPAwxeCgq9DAU8jDU4GGo0MMwyMMwg4diQg/DIQ/DDR6GCz2MgDyMMHgoLvQwEvIw0uBhpNDDKMjDKIOHEkIPoyEPow0eRgs9jIE8jDF4KCn0MBbyMNbgYazQwzjIwziDh1JCD+MhD+MNHsYLPUyAPEwweCgt9DAR8jDR4GGi0MMkyMMkg4cyQg+TIQ+TDR4mCz1MgTxMMXgoK/QwFfIw1eBhqtDDNMjDNIOHckIP0yEP0w0epgs9zIA8zDB4KC/0MBPyMNPgYabQwyzIwyyDhwpCD7MhD7MNHmYLPcyBPMwxeKgo9DAX8jDX4GGu0MM8yMM8g4dKQg/zIQ/zDR7mCz0sgDwsMHioLPSwEPKw0OBhodDDIsjDIoOHKkIPiyEPiw0eFgs9LIE8LDF4qCr0sBTysNTgYanQwzLIwzKDh2pCD8shD8sNHpYLPayAPKwweKgu9LAS8rDS4GGl0MMqyMMqg4caQg+rIQ+rDR5WCz2sgTysMXioKfSwFvKw1uBhrdDDOsjDOoOHWkIP6yEP6w0e1gs9bIA8bDB4qC30sBHysNHgYaPQwybIwyaDhzpCD5shD5sNHjYLPWyBPGwxeKgr9LAV8rDV4GGr0MM2yMM2g4d6Qg/bIQ/bDR62Cz3sgDzsMHioL/SwE/Kw0+Bhp9DDLsjDLoOHBkIPuyEPuw0edgs97IE87DF4aCj0sBfysNfgYa/Qwz7Iwz6Dh0ZCD/shD/sNHvYLPRyAPBwweGgs9HAQ8nDQ4OGg0MMhyMMhg4cmQg+HIQ+HDR4OCz0cgTwcMXhoKvRwFPJw1ODhqNDDMcjDMYOHZkIPxyEPxw0ejgs9nIA8nDB4aC70cBLycNLg4aTQwynIwymDhxZCD6chD6cNHk4LPZyBPJwxeGgp9HAW8nDW4OGs0MM5yMM5g4dWQg/nIQ/nDR7OCz1cgDxcMHhoLfRwEfJw0eDhotDD35CHvw0e2gg9XII8XDJ4uCT08A/k4R+Dh7ZCD5chD5cNHi4LPVyBPFwxeGgn9HAV8nDV4OGq0MM1yMM1g4f2Qg/XIQ/XDR6uCz3cgDzcMHjoIPRwE/Jw0+DhptDDLcjDLYOHjkIPtyEPtw0ebgs93IE83DF46CT0cBfycNfg4a7Qwz3Iwz2Dh85CDwGQhwCDhwChh/uQh/sGD12EHh5AHh4YPDwQengIeXho8NBV6OER5OGRwcMjoYfHkIfHBg/dhB6eQB6eGDw8EXp4Cnl4avDQXejhGeThmcHDM6GH55CH5wYPPYQeXkAeXhg8vBB6+Bfy8K/BQ0+hh5eQh5cGDy+FHl5BHl4ZPPQSengNeXht8PBa6OEN5OGNwUNvoYe3kIe3Bg9vhR7eQR7eGTz0EXp4D3l4b/DwXujhA+Thg8FDX6GHj5CHjwYPH4UePkEePhk89BN6+Ax5+Gzw8Fno4Qvk4YvBQ3+hh6+Qh68GD1+FHr5BHr4ZPAwQevgOefhu8PBd6OEH5OGHwcNAoYefkIefBg8/hR5+QR5+GTwMEnr4DXn4bfDwW+jhD+Thj8HDYKGHv+4wHv7bpT387/b/txXoDuMh0B3ewxChh8CQh8AGD4GFHoJAHoIYPAwVeggKeQhq8BBU6CEY5CGYwcMwoYfgkIfgBg/BhR5CQB5CGDwMF3oICXkIafAQUughFOQhlMHDCKGH0JCH0AYPoYUewkAewhg8jBR6CAt5CGvwEFboIRzkIZzBwyihh/CQh/AGD+GFHiJAHiIYPIwWeogIeYho8BBR6CES5CGSwcMYoYfIkIfIBg+RhR6iQB6iGDyMFXqICnmIavAQVeghGuQhmsHDOKGH6JCH6AYP0YUeYkAeYhg8jBd6iAl5iGnwEFPoIRbkIZbBwwShh9iQh9gGD7GFHuJAHuIYPEwUeogLeYhr8BBX6CEe5CGewcMkoYf4kIf4Bg/xhR4SQB4SGDxMFnpICHlIaPCQUOghEeQhkcHDFKGHxJCHxAYPiYUekkAekhg8TBV6SAp5SGrwkFToIRnkIZnBwzShh+SQh+QGD8mFHlJAHlIYPEwXekgJeUhp8JBS6CEV5CGVwcMMoYfUkIfUBg+phR7SQB7SGDzMFHpIC3lIa/CQVughHeQhncHDLKGH9JCH9AYP6YUeMkAeMhg8zBZ6yAh5yGjwkFHoIRPkIZPBwxyhh8yQh8wGD5mFHrJAHrIYPMwVesgKechq8JBV6CEb5CGbwcM8oYfskIfsBg/ZhR5yQB5yGDzMF3rICXnIafCQU+ghF+Qhl8HDAqGH3JCH3AYPuYUe8kAe8hg8LBR6yAt5yGvwkFfoIR/kIZ/BwyKhh/yQh/wGD/mFHgpAHgoYPCwWeigIeSho8FBQ6KEQ5KGQwcMSoYfCkIfCBg+FhR6KQB6KGDwsFXooCnkoavBQVOihGOShmMHDMqGH4pCH4gYPxYUeSkAeShg8LBd6KAl5KGnwUFLooRTkoZTBwwqhh9KQh9IGD6WFHspAHsoYPKwUeigLeShr8FBW6KEc5KGcwcMqoYfykIfyBg/lhR4qQB4qGDysFnqoCHmoaPBQUeihEuShksHDGqGHypCHygYPlYUeqkAeqhg8rBV6qAp5qGrwUFXooRrkoZrBwzqhh+qQh+oGD9WFHmpAHmoYPKwXeqgJeahp8FBT6KEW5KGWwcMGoYfakIfaBg+1hR7qQB7qGDxsFHqoC3moa/BQV+ihHuShnsHDJqGH+pCH+gYP9YUeGkAeGhg8bBZ6aAh5aGjw0FDooRHkoZHBwxahh8aQh8YGD42FHppAHpoYPGwVemgKeWhq8NBU6KEZ5KGZwcM2oYfmkIfmBg/NhR5aQB5aGDxsF3poCXloafDQUuihFeShlcHDDqGH1pCH1gYPrYUe2kAe2hg87BR6aAt5aGvw0FbooR3koZ3Bwy6hh/aQh/YGD+2FHjpAHjoYPOwWeugIeeho8NBR6KET5KGTwcMeoYfOkIfOBg+dhR66QB66GDzsFXroCnnoavDQVeihG+Shm8HDPqGH7pCH7gYP3YUeekAeehg87Bd66Al56Gnw0FPooRfkoZfBwwGhh96Qh94GD72FHvpAHvoYPBwUeugLeehr8NBX6KEf5KGfwcMhoYf+kIf+Bg/9hR4GQB4GGDwcFnoYCHkYaPAwUOhhEORhkMHDEaGHwZCHwQYPg4UehkAehhg8HBV6GAp5GGrwMFToYRjkYZjBwzGhh+GQh+EGD8OFHkZAHkYYPBwXehgJeRhp8DBS6GEU5GGUwcMJoYfRkIfRBg+jhR7GQB7GGDycFHoYC3kYa/AwVuhhHORhnMHDKaGH8ZCH8QYP44UeJkAeJhg8nBZ6mAh5mGjwMFHoYRLkYZLBwxmhh8mQh8kGD5OFHqZAHqYYPJwVepgKeZhq8DBV6GEa5GGawcM5oYfpkIfpBg/ThR5mQB5mGDycF3qYCXmYafAwU+hhFuRhlsHDBaGH2ZCH2QYPs4Ue5kAe5hg8XBR6mAt5mGvwMFfoYR7kYZ7Bw99CD/MhD/MNHuYLPSyAPCwweLgk9LAQ8rDQ4GGh0MMiyMMig4d/hB4WQx4WGzwsFnpYAnlYYvBwWehhKeRhqcHDUqGHZZCHZQYPV4QelkMelhs8LBd6WAF5WGHwcFXoYSXkYaXBw0qhh1WQh1UGD9eEHlZDHlYbPKwWelgDeVhj8HBd6GEt5GGtwcNaoYd1kId1Bg83hB7WQx7WGzysF3rYAHnYYPBwU+hhI+Rho8HDRqGHTZCHTQYPt4QeNkMeNhs8bBZ62AJ52GLwcFvoYSvkYavBw1ahh22Qh20GD3eEHrZDHrYbPGwXetgBedhh8HBX6GEn5GGnwcNOoYddkIddBg/3hB52Qx52GzzsFnrYA3nYY/AQIPSwF/Kw1+Bhr9DDPsjDPoOH+0IP+yEP+w0e9gs9HIA8HDB4eCD0cBDycNDg4aDQwyHIwyGDh4dCD4chD4cNHg4LPRyBPBwxeHgk9HAU8nDU4OGo0MMxyMMxg4fHQg/HIQ/HDR6OCz2cgDycMHh4IvRwEvJw0uDhpNDDKcjDKYOHp0IPpyEPpw0eTgs9nIE8nDF4eCb0cBbycNbg4azQwznIwzmDh+dCD+chD+cNHs4LPVyAPFwweHgh9HAR8nDR4OGi0MPfkIe/DR7+FXq4BHm4ZPBwSejhH8jDPwYPL4UeLkMeLhs8XBZ6uAJ5uGLw8Ero4Srk4arBw1Whh2uQh2sGD6+FHq5DHq4bPFwXergBebhh8PBG6OEm5OGmwcNNoYdbkIdbBg9vhR5uQx5uGzzcFnq4A3m4Y/DwTujhLuThrsHDXaGHe5CHewYP74UeAiAPAQYPAUIP9yEP9w0ePgg9PIA8PDB4eCD08BDy8NDg4aPQwyPIwyODh0dCD48hD48NHj4JPTyBPDwxeHgi9PAU8vDU4OGz0MMzyMMzg4dnQg/PIQ/PDR6+CD28gDy8MHh4IfTwL+ThX4OHr0IPLyEPLw0eXgo9vII8vDJ4+Cb08Bry8Nrg4bXQwxvIwxuDh+9CD28hD28NHt4KPbyDPLwzePgh9PAe8vDe4OG90MMHyMMHg4efQg8fIQ8fDR4+Cj18gjx8Mnj4JfTwGfLw2eDhs9DDF8jDF4OH30IPXyEPXw0evgo9fIM8fDN4+CP08B3y8N3g4bvQww/Iww+Dh79K6P7wE/Lw0+Dhp9DDL8jDL4OHQEIPvyEPvw0efgs9/IE8/DF4CCz08NddxsN/u7SH/93+/7YC3WU8BLrLewgi9BAY8hDY4CGw0EMQyEMQg4egQg9BIQ9BDR6CCj0EgzwEM3gIJvQQHPIQ3OAhuNBDCMhDCIOH4EIPISEPIQ0eQgo9hII8hDJ4CCH0EBryENrgIbTQQxjIQxiDh5BCD2EhD2ENHsIKPYSDPIQzeAgl9BAe8hDe4CG80EMEyEMEg4fQQg8RIQ8RDR4iCj1EgjxEMngII/QQGfIQ2eAhstBDFMhDFIOHsEIPUSEPUQ0eogo9RIM8RDN4CCf0EB3yEN3gIbrQQwzIQwyDh/BCDzEhDzENHmIKPcSCPMQyeIgg9BAb8hDb4CG20EMcyEMcg4eIQg9xIQ9xDR7iCj3EgzzEM3iIJPQQH/IQ3+AhvtBDAshDAoOHyEIPCSEPCQ0eEgo9JII8JDJ4iCL0kBjykNjgIbHQQxLIQxKDh6hCD0khD0kNHpIKPSSDPCQzeIgm9JAc8pDc4CG50EMKyEMKg4foQg8pIQ8pDR5SCj2kgjykMniIIfSQGvKQ2uAhtdBDGshDGoOHmEIPaSEPaQ0e0go9pIM8pDN4iCX0kB7ykN7gIb3QQwbIQwaDh9hCDxkhDxkNHjIKPWSCPGQyeIgj9JAZ8pDZ4CGz0EMWyEMWg4e4Qg9ZIQ9ZDR6yCj1kgzxkM3iIJ/SQHfKQ3eAhu9BDDshDDoOH+EIPOSEPOQ0ecgo95II85DJ4SCD0kBvykNvgIbfQQx7IQx6Dh4RCD3khD3kNHvIKPeSDPOQzeEgk9JAf8pDf4CG/0EMByEMBg4fEQg8FIQ8FDR4KCj0UgjwUMnhIIvRQGPJQ2OChsNBDEchDEYOHpEIPRSEPRQ0eigo9FIM8FDN4SCb0UBzyUNzgobjQQwnIQwmDh+RCDyUhDyUNHkoKPZSCPJQyeEgh9FAa8lDa4KG00EMZyEMZg4eUQg9lIQ9lDR7KCj2UgzyUM3hIJfRQHvJQ3uChvNBDBchDBYOH1EIPFSEPFQ0eKgo9VII8VDJ4SCP0UBnyUNngobLQQxXIQxWDh7RCD1UhD1UNHqoKPVSDPFQzeEgn9FAd8lDd4KG60EMNyEMNg4f0Qg81IQ81DR5qCj3UgjzUMnjIIPRQG/JQ2+ChttBDHchDHYOHjEIPdSEPdQ0e6go91IM81DN4yCT0UB/yUN/gob7QQwPIQwODh8xCDw0hDw0NHhoKPTSCPDQyeMgi9NAY8tDY4KGx0EMTyEMTg4esQg9NIQ9NDR6aCj00gzw0M3jIJvTQHPLQ3OChudBDC8hDC4OH7EIPLSEPLQ0eWgo9tII8tDJ4yCH00Bry0NrgobXQQxvIQxuDh5xCD20hD20NHtoKPbSDPLQzeMgl9NAe8tDe4KG90EMHyEMHg4fcQg8dIQ8dDR46Cj10gjx0MnjII/TQGfLQ2eChs9BDF8hDF4OHvEIPXSEPXQ0eugo9dIM8dDN4yCf00B3y0N3gobvQQw/IQw+Dh/xCDz0hDz0NHnoKPfSCPPQyeCgg9NAb8tDb4KG30EMfyEMfg4eCQg99IQ99DR76Cj30gzz0M3goJPTQH/LQ3+Chv9DDAMjDAIOHwkIPAyEPAw0eBgo9DII8DDJ4KCL0MBjyMNjgYbDQwxDIwxCDh6JCD0MhD0MNHoYKPQyDPAwzeCgm9DAc8jDc4GG40MMIyMMIg4fiQg8jIQ8jDR5GCj2MgjyMMngoIfQwGvIw2uBhtNDDGMjDGIOHkkIPYyEPYw0exgo9jIM8jDN4KCX0MB7yMN7gYbzQwwTIwwSDh9JCDxMhDxMNHiYKPUyCPEwyeCgj9DAZ8jDZ4GGy0MMUyMMUg4eyQg9TIQ9TDR6mCj1MgzxMM3goJ/QwHfIw3eBhutDDDMjDDIOH8kIPMyEPMw0eZgo9zII8zDJ4qCD0MBvyMNvgYbbQwxzIwxyDh4pCD3MhD3MNHuYKPcyDPMwzeKgk9DAf8jDf4GG+0MMCyMMCg4fKQg8LIQ8LDR4WCj0sgjwsMnioIvSwGPKw2OBhsdDDEsjDEoOHqkIPSyEPSw0elgo9LIM8LDN4qCb0sBzysNzgYbnQwwrIwwqDh+pCDyshDysNHlYKPayCPKwyeKgh9LAa8rDa4GG10MMayMMag4eaQg9rIQ9rDR7WCj2sgzysM3ioJfSwHvKw3uBhvdDDBsjDBoOH2kIPGyEPGw0eNgo9bII8bDJ4qCP0sBnysNngYbPQwxbIwxaDh7pCD1shD1sNHrYKPWyDPGwzeKgn9LAd8rDd4GG70MMOyMMOg4f6Qg87IQ87DR52Cj3sgjzsMnhoIPSwG/Kw2+Bht9DDHsjDHoOHhkIPeyEPew0e9go97IM87DN4aCT0sB/ysN/gYb/QwwHIwwGDh8ZCDwchDwcNHg4KPRyCPBwyeGgi9HAY8nDY4OGw0MMRyMMRg4emQg9HIQ9HDR6OCj0cgzwcM3hoJvRwHPJw3ODhuNDDCcjDCYOH5kIPJyEPJw0eTgo9nII8nDJ4aCH0cBrycNrg4bTQwxnIwxmDh5ZCD2chD2cNHs4KPZyDPJwzeGgl9HAe8nDe4OG80MMFyMMFg4fWQg8XIQ8XDR4uCj38DXn42+ChjdDDJcjDJYOHS0IP/0Ae/jF4aCv0cBnycNng4bLQwxXIwxWDh3ZCD1chD1cNHq4KPVyDPFwzeGgv9HAd8nDd4OG60MMNyMMNg4cOQg83IQ83DR5uCj3cgjzcMnjoKPRwG/Jw2+DhttDDHcjDHYOHTkIPdyEPdw0e7go93IM83DN46Cz0EAB5CDB4CBB6uA95uG/w0EXo4QHk4YHBwwOhh4eQh4cGD12FHh5BHh4ZPDwSengMeXhs8NBN6OEJ5OGJwcMToYenkIenBg/dhR6eQR6eGTw8E3p4Dnl4bvDQQ+jhBeThhcHDC6GHfyEP/xo89BR6eAl5eGnw8FLo4RXk4ZXBQy+hh9eQh9cGD6+FHt5AHt4YPPQWengLeXhr8PBW6OEd5OGdwUMfoYf3kIf3Bg/vhR4+QB4+GDz0FXr4CHn4aPDwUejhE+Thk8FDP6GHz5CHzwYPn4UevkAevhg89Bd6+Ap5+Grw8FXo4Rvk4ZvBwwChh++Qh+8GD9+FHn5AHn4YPAwUevgJefhp8PBT6OEX5OGXwcMgoYffkIffBg+/hR7+QB7+GDwMFnr46x7j4b9d2sP/bv9/W4HuMR4C3eM9DBF6CAx5CGzwEFjoIQjkIYjBw1Chh6CQh6AGD0GFHoJBHoIZPAwTeggOeQhu8BBc6CEE5CGEwcNwoYeQkIeQBg8hhR5CQR5CGTyMEHoIDXkIbfAQWughDOQhjMHDSKGHsJCHsAYPYYUewkEewhk8jBJ6CA95CG/wEF7oIQLkIYLBw2ihh4iQh4gGDxGFHiJBHiIZPIwReogMeYhs8BBZ6CEK5CGKwcNYoYeokIeoBg9RhR6iQR6iGTyME3qIDnmIbvAQXeghBuQhhsHDeKGHmJCHmAYPMYUeYkEeYhk8TBB6iA15iG3wEFvoIQ7kIY7Bw0Shh7iQh7gGD3GFHuJBHuIZPEwSeogPeYhv8BBf6CEB5CGBwcNkoYeEkIeEBg8JhR4SQR4SGTxMEXpIDHlIbPCQWOghCeQhicHDVKGHpJCHpAYPSYUekkEekhk8TBN6SA55SG7wkFzoIQXkIYXBw3Shh5SQh5QGDymFHlJBHlIZPMwQekgNeUht8JBa6CEN5CGNwcNMoYe0kIe0Bg9phR7SQR7SGTzMEnpID3lIb/CQXughA+Qhg8HDbKGHjJCHjAYPGYUeMkEeMhk8zBF6yAx5yGzwkFnoIQvkIYvBw1yhh6yQh6wGD1mFHrJBHrIZPMwTesgOechu8JBd6CEH5CGHwcN8oYeckIecBg85hR5yQR5yGTwsEHrIDXnIbfCQW+ghD+Qhj8HDQqGHvJCHvAYPeYUe8kEe8hk8LBJ6yA95yG/wkF/ooQDkoYDBw2Khh4KQh4IGDwWFHgpBHgoZPCwReigMeShs8FBY6KEI5KGIwcNSoYeikIeiBg9FhR6KQR6KGTwsE3ooDnkobvBQXOihBOShhMHDcqGHkpCHkgYPJYUeSkEeShk8rBB6KA15KG3wUFrooQzkoYzBw0qhh7KQh7IGD2WFHspBHsoZPKwSeigPeShv8FBe6KEC5KGCwcNqoYeKkIeKBg8VhR4qQR4qGTysEXqoDHmobPBQWeihCuShisHDWqGHqpCHqgYPVYUeqkEeqhk8rBN6qA55qG7wUF3ooQbkoYbBw3qhh5qQh5oGDzWFHmpBHmoZPGwQeqgNeaht8FBb6KEO5KGOwcNGoYe6kIe6Bg91hR7qQR7qGTxsEnqoD3mob/BQX+ihAeShgcHDZqGHhpCHhgYPDYUeGkEeGhk8bBF6aAx5aGzw0FjooQnkoYnBw1ahh6aQh6YGD02FHppBHpoZPGwTemgOeWhu8NBc6KEF5KGFwcN2oYeWkIeWBg8thR5aQR5aGTzsEHpoDXlobfDQWuihDeShjcHDTqGHtpCHtgYPbYUe2kEe2hk87BJ6aA95aG/w0F7ooQPkoYPBw26hh46Qh44GDx2FHjpBHjoZPOwReugMeehs8NBZ6KEL5KGLwcNeoYeukIeuBg9dhR66QR66GTzsE3roDnnobvDQXeihB+Shh8HDfqGHnpCHngYPPYUeekEeehk8HBB66A156G3w0FvooQ/koY/Bw0Ghh76Qh74GD32FHvpBHvoZPBwSeugPeehv8NBf6GEA5GGAwcNhoYeBkIeBBg8DhR4GQR4GGTwcEXoYDHkYbPAwWOhhCORhiMHDUaGHoZCHoQYPQ4UehkEehhk8HBN6GA55GG7wMFzoYQTkYYTBw3Ghh5GQh5EGDyOFHkZBHkYZPJwQehgNeRht8DBa6GEM5GGMwcNJoYexkIexBg9jhR7GQR7GGTycEnoYD3kYb/AwXuhhAuRhgsHDaaGHiZCHiQYPE4UeJkEeJhk8nBF6mAx5mGzwMFnoYQrkYYrBw1mhh6mQh6kGD1OFHqZBHqYZPJwTepgOeZhu8DBd6GEG5GGGwcN5oYeZkIeZBg8zhR5mQR5mGTxcEHqYDXmYbfAwW+hhDuRhjsHDRaGHuZCHuQYPc4Ue5kEe5hk8/C30MB/yMN/gYb7QwwLIwwKDh0tCDwshDwsNHhYKPSyCPCwyePhH6GEx5GGxwcNioYclkIclBg+XhR6WQh6WGjwsFXpYBnlYZvBwRehhOeRhucHDcqGHFZCHFQYPV4UeVkIeVho8rBR6WAV5WGXwcE3oYTXkYbXBw2qhhzWQhzUGD9eFHtZCHtYaPKwVelgHeVhn8HBD6GE95GG9wcN6oYcNkIcNBg83hR42Qh42GjxsFHrYBHnYZPBwS+hhM+Rhs8HDZqGHLZCHLQYPt4UetkIetho8bBV62AZ52GbwcEfoYTvkYbvBw3ahhx2Qhx0GD3eFHnZCHnYaPOwUetgFedhl8HBP6GE35GG3wcNuoYc9kIc9Bg8BQg97IQ97DR72Cj3sgzzsM3i4L/SwH/Kw3+Bhv9DDAcjDAYOHB0IPByEPBw0eDgo9HII8HDJ4eCj0cBjycNjg4bDQwxHIwxGDh0dCD0chD0cNHo4KPRyDPBwzeHgs9HAc8nDc4OG40MMJyMMJg4cnQg8nIQ8nDR5OCj2cgjycMnh4KvRwGvJw2uDhtNDDGcjDGYOHZ0IPZyEPZw0ezgo9nIM8nDN4eC70cB7ycN7g4bzQwwXIwwWDhxdCDxchDxcNHi4KPfwNefjb4OFfoYdLkIdLBg+XhB7+gTz8Y/DwUujhMuThssHDZaGHK5CHKwYPr4QerkIerho8XBV6uAZ5uGbw8Fro4Trk4brBw3WhhxuQhxsGD2+EHm5CHm4aPNwUergFebhl8PBW6OE25OG2wcNtoYc7kIc7Bg/vhB7uQh7uGjzcFXq4B3m4Z/DwXughAPIQYPAQIPRwH/Jw3+Dhg9DDA8jDA4OHB0IPDyEPDw0ePgo9PII8PDJ4eCT08Bjy8Njg4ZPQwxPIwxODhydCD08hD08NHj4LPTyDPDwzeHgm9PAc8vDc4OGL0MMLyMMLg4cXQg//Qh7+NXj4KvTwEvLw0uDhpdDDK8jDK4OHb0IPryEPrw0eXgs9vIE8vDF4+C708Bby8Nbg4a3QwzvIwzuDhx9CD+8hD+8NHt4LPXyAPHwwePgp9PAR8vDR4OGj0MMnyMMng4dfQg+fIQ+fDR4+Cz18gTx8MXj4LfTwFfLw1eDhq9DDN8jDN4OHP0IP3yEP3w0evgs9/IA8/DB4+Kuk7g8/IQ8/DR5+Cj38gjz8MngIJPTwG/Lw2+Dht9DDH8jDH4OHwEIPfwUwHv7bpT387/b/txUogPEQKID3EEToIXAA4yGwwUNgoYcgkIcgBg9BhR6CBjAegho8BBV6CAZ5CGbwEEzoIXgA4yG4wUNwoYcQkIcQBg/BhR5CBjAeQho8hBR6CAV5CGXwEELoIXQA4yG0wUNooYcwkIcwBg8hhR7CBjAewho8hBV6CAd5CGfwEEroIXwA4yG8wUN4oYcIkIcIBg+hhR4iBjAeIho8RBR6iAR5iGTwEEboIXIA4yGywUNkoYcokIcoBg9hhR6iBjAeoho8RBV6iAZ5iGbwEE7oIXoA4yG6wUN0oYcYkIcYBg/hhR5iBjAeYho8xBR6iAV5iGXwEEHoIXYA4yG2wUNsoYc4kIc4Bg8RhR7iBjAe4ho8xBV6iAd5iGfwEEnoIX4A4yG+wUN8oYcEkIcEBg+RhR4SBjAeEho8JBR6SAR5SGTwEEXoIXEA4yGxwUNioYckkIckBg9RhR6SBjAekho8JBV6SAZ5SGbwEE3oIXkA4yG5wUNyoYcUkIcUBg/RhR5SBjAeUho8pBR6SAV5SGXwEEPoIXUA4yG1wUNqoYc0kIc0Bg8xhR7SBjAe0ho8pBV6SAd5SGfwEEvoIX0A4yG9wUN6oYcMkIcMBg+xhR4yBjAeMho8ZBR6yAR5yGTwEEfoIXMA4yGzwUNmoYcskIcsBg9xhR6yBjAesho8ZBV6yAZ5yGbwEE/oIXsA4yG7wUN2oYcckIccBg/xhR5yBjAecho85BR6yAV5yGXwkEDoIXcA4yG3wUNuoYc8kIc8Bg8JhR7yBjAe8ho85BV6yAd5yGfwkEjoIX8A4yG/wUN+oYcCkIcCBg+JhR4KBjAeCho8FBR6KAR5KGTwkETooXAA46GwwUNhoYcikIciBg9JhR6KBjAeiho8FBV6KAZ5KGbwkEzooXgA46G4wUNxoYcSkIcSBg/JhR5KBjAeSho8lBR6KAV5KGXwkELooXQA46G0wUNpoYcykIcyBg8phR7KBjAeyho8lBV6KAd5KGfwkErooXwA46G8wUN5oYcKkIcKBg+phR4qBjAeKho8VBR6qAR5qGTwkEbooXIA46GywUNloYcqkIcqBg9phR6qBjAeqho8VBV6qAZ5qGbwkE7ooXoA46G6wUN1oYcakIcaBg/phR5qBjAeaho81BR6qAV5qGXwkEHooXYA46G2wUNtoYc6kIc6Bg8ZhR7qBjAe6ho81BV6qAd5qGfwkEnooX4A46G+wUN9oYcGkIcGBg+ZhR4aBjAeGho8NBR6aAR5aGTwkEXooXEA46GxwUNjoYcmkIcmBg9ZhR6aBjAemho8NBV6aAZ5aGbwkE3ooXkA46G5wUNzoYcWkIcWBg/ZhR5aBjAeWho8tBR6aAV5aGXwkEPooXUA46G1wUNroYc2kIc2Bg85hR7aBjAe2ho8tBV6aAd5aGfwkEvooX0A46G9wUN7oYcOkIcOBg+5hR46BjAeOho8dBR66AR56GTwkEfooXMA46GzwUNnoYcukIcuBg95hR66BjAeuho8dBV66AZ56GbwkE/ooXsA46G7wUN3oYcekIceBg/5hR56BjAeeho89BR66AV56GXwUEDooXcA46G3wUNvoYc+kIc+Bg8FhR76BjAe+ho89BV66Ad56GfwUEjooX8A46G/wUN/oYcBkIcBBg+FhR4GBjAeBho8DBR6GAR5GGTwUEToYXAA42GwwcNgoYchkIchBg9FhR6GBjAehho8DBV6GAZ5GGbwUEzoYXgA42G4wcNwoYcRkIcRBg/FhR5GBjAeRho8jBR6GAV5GGXwUELoYXQA42G0wcNooYcxkIcxBg8lhR7GBjAexho8jBV6GAd5GGfwUEroYXwA42G8wcN4oYcJkIcJBg+lhR4mBjAeJho8TBR6mAR5mGTwUEboYXIA42GywcNkoYcpkIcpBg9lhR6mBjAepho8TBV6mAZ5mGbwUE7oYXoA42G6wcN0oYcZkIcZBg/lhR5mBjAeZho8zBR6mAV5mGXwUEHoYXYA42G2wcNsoYc5kIc5Bg8VhR7mBjAe5ho8zBV6mAd5mGfwUEnoYX4A42G+wcN8oYcFkIcFBg+VhR4WBjAeFho8LBR6WAR5WGTwUEXoYXEA42GxwcNioYclkIclBg9VhR6WBjAelho8LBV6WAZ5WGbwUE3oYXkA42G5wcNyoYcVkIcVBg/VhR5WBjAeVho8rBR6WAV5WGXwUEPoYXUA42G1wcNqoYc1kIc1Bg81hR7WBjAe1ho8rBV6WAd5WGfwUEvoYX0A42G9wcN6oYcNkIcNBg+1hR42BjAeNho8bBR62AR52GTwUEfoYXMA42GzwcNmoYctkIctBg91hR62BjAetho8bBV62AZ52GbwUE/oYXsA42G7wcN2oYcdkIcdBg/1hR52BjAedho87BR62AV52GXw0EDoYXcA42G3wcNuoYc9kIc9Bg8NhR72BjAe9ho87BV62Ad52Gfw0EjoYX8A42G/wcN+oYcDkIcDBg+NhR4OBjAeDho8HBR6OAR5OGTw0ETo4XAA4+GwwcNhoYcjkIcjBg9NhR6OBjAejho8HBV6OAZ5OGbw0Ezo4XgA4+G4wcNxoYcTkIcTBg/NhR5OBjAeTho8nBR6OAV5OGXw0ELo4XQA4+G0wcNpoYczkIczBg8thR7OBjAezho8nBV6OAd5OGfw0Ero4XwA4+G8wcN5oYcLkIcLBg+thR4uBjAeLho8XBR6+Bvy8LfBQxuhh0sBjIdLBg+XhB7+gTz8Y/DQVujhcgDj4bLBw2WhhyuQhysGD+2EHq4GMB6uGjxcFXq4Bnm4ZvDQXujhegDj4brBw3WhhxuQhxsGDx2EHm4GMB5uGjzcFHq4BXm4ZfDQUejhdgDj4bbBw22hhzuQhzsGD52EHu4GMB7uGjzcFXq4B3m4Z/DQWeghIIDxEGDwECD0cB/ycN/goYvQw4MAxsMDg4cHQg8PIQ8PDR66Cj08CmA8PDJ4eCT08Bjy8NjgoZvQw5MAxsMTg4cnQg9PIQ9PDR66Cz08C2A8PDN4eCb08Bzy8NzgoYfQw4sAxsMLg4cXQg//Qh7+NXjoKfTwMoDx8NLg4aXQwyvIwyuDh15CD68DGA+vDR5eCz28gTy8MXjoLfTwNoDx8Nbg4a3QwzvIwzuDhz5CD+8DGA/vDR7eCz18gDx8MHjoK/TwMYDx8NHg4aPQwyfIwyeDh35CD58DGA+fDR4+Cz18gTx8MXjoL/TwNYDx8NXg4avQwzfIwzeDhwFCD98DGA/fDR6+Cz38gDz8MHgYKPTwM4Dx8NPg4afQwy/Iwy+Dh0FCD78DGA+/DR5+Cz38gTz8MXgYLPTw133Gw3+7tIf/3f7/tgLdZzwEus97GCL0EBjyENjgIbDQQxDIQxCDh6FCD0EhD0ENHoIKPQSDPAQzeBgm9BAc8hDc4CG40EMIyEMIg4fhQg8hIQ8hDR5CCj2EgjyEMngYIfQQGvIQ2uAhtNBDGMhDGIOHkUIPYSEPYQ0ewgo9hIM8hDN4GCX0EB7yEN7gIbzQQwTIQwSDh9FCDxEhDxENHiIKPUSCPEQyeBgj9BAZ8hDZ4CGy0EMUyEMUg4exQg9RIQ9RDR6iCj1EgzxEM3gYJ/QQHfIQ3eAhutBDDMhDDIOH8UIPMSEPMQ0eYgo9xII8xDJ4mCD0EBvyENvgIbbQQxzIQxyDh4lCD3EhD3ENHuIKPcSDPMQzeJgk9BAf8hDf4CG+0EMCyEMCg4fJQg8JIQ8JDR4SCj0kgjwkMniYIvSQGPKQ2OAhsdBDEshDEoOHqUIPSSEPSQ0ekgo9JIM8JDN4mCb0kBzykNzgIbnQQwrIQwqDh+lCDykhDykNHlIKPaSCPKQyeJgh9JAa8pDa4CG10EMayEMag4eZQg9pIQ9pDR7SCj2kgzykM3iYJfSQHvKQ3uAhvdBDBshDBoOH2UIPGSEPGQ0eMgo9ZII8ZDJ4mCP0kBnykNngIbPQQxbIQxaDh7lCD1khD1kNHrIKPWSDPGQzeJgn9JAd8pDd4CG70EMOyEMOg4f5Qg85IQ85DR5yCj3kgjzkMnhYIPSQG/KQ2+Aht9BDHshDHoOHhUIPeSEPeQ0e8go95IM85DN4WCT0kB/ykN/gIb/QQwHIQwGDh8VCDwUhDwUNHgoKPRSCPBQyeFgi9FAY8lDY4KGw0EMRyEMRg4elQg9FIQ9FDR6KCj0UgzwUM3hYJvRQHPJQ3OChuNBDCchDCYOH5UIPJSEPJQ0eSgo9lII8lDJ4WCH0UBryUNrgobTQQxnIQxmDh5VCD2UhD2UNHsoKPZSDPJQzeFgl9FAe8lDe4KG80EMFyEMFg4fVQg8VIQ8VDR4qCj1UgjxUMnhYI/RQGfJQ2eChstBDFchDFYOHtUIPVSEPVQ0eqgo9VIM8VDN4WCf0UB3yUN3gobrQQw3IQw2Dh/VCDzUhDzUNHmoKPdSCPNQyeNgg9FAb8lDb4KG20EMdyEMdg4eNQg91IQ91DR7qCj3UgzzUM3jYJPRQH/JQ3+ChvtBDA8hDA4OHzUIPDSEPDQ0eGgo9NII8NDJ42CL00Bjy0NjgobHQQxPIQxODh61CD00hD00NHpoKPTSDPDQzeNgm9NAc8tDc4KG50EMLyEMLg4ftQg8tIQ8tDR5aCj20gjy0MnjYIfTQGvLQ2uChtdBDG8hDG4OHnUIPbSEPbQ0e2go9tIM8tDN42CX00B7y0N7gob3QQwfIQweDh91CDx0hDx0NHjoKPXSCPHQyeNgj9NAZ8tDZ4KGz0EMXyEMXg4e9Qg9dIQ9dDR66Cj10gzx0M3jYJ/TQHfLQ3eChu9BDD8hDD4OH/UIPPSEPPQ0eego99II89DJ4OCD00Bvy0NvgobfQQx/IQx+Dh4NCD30hD30NHvoKPfSDPPQzeDgk9NAf8tDf4KG/0MMAyMMAg4fDQg8DIQ8DDR4GCj0MgjwMMng4IvQwGPIw2OBhsNDDEMjDEIOHo0IPQyEPQw0ehgo9DIM8DDN4OCb0MBzyMNzgYbjQwwjIwwiDh+NCDyMhDyMNHkYKPYyCPIwyeDgh9DAa8jDa4GG00MMYyMMYg4eTQg9jIQ9jDR7GCj2MgzyMM3g4JfQwHvIw3uBhvNDDBMjDBIOH00IPEyEPEw0eJgo9TII8TDJ4OCP0MBnyMNngYbLQwxTIwxSDh7NCD1MhD1MNHqYKPUyDPEwzeDgn9DAd8jDd4GG60MMMyMMMg4fzQg8zIQ8zDR5mCj3MgjzMMni4IPQwG/Iw2+BhttDDHMjDHIOHi0IPcyEPcw0e5go9zIM8zDN4+FvoYT7kYb7Bw3yhhwWQhwUGD5eEHhZCHhYaPCwUelgEeVhk8PCP0MNiyMNig4fFQg9LIA9LDB4uCz0shTwsNXhYKvSwDPKwzODhitDDcsjDcoOH5UIPKyAPKwwergo9rIQ8rDR4WCn0sArysMrg4ZrQw2rIw2qDh9VCD2sgD2sMHq4LPayFPKw1eFgr9LAO8rDO4OGG0MN6yMN6g4f1Qg8bIA8bDB5uCj1shDxsNHjYKPSwCfKwyeDhltDDZsjDZoOHzUIPWyAPWwwebgs9bIU8bDV42Cr0sA3ysM3g4Y7Qw3bIw3aDh+1CDzsgDzsMHu4KPeyEPOw0eNgp9LAL8rDL4OGe0MNuyMNug4fdQg97IA97DB4ChB72Qh72GjzsFXrYB3nYZ/BwX+hhP+Rhv8HDfqGHA5CHAwYPD4QeDkIeDho8HBR6OAR5OGTw8FDo4TDk4bDBw2GhhyOQhyMGD4+EHo5CHo4aPBwVejgGeThm8PBY6OE45OG4wcNxoYcTkIcTBg9PhB5OQh5OGjycFHo4BXk4ZfDwVOjhNOThtMHDaaGHM5CHMwYPz4QezkIezho8nBV6OAd5OGfw8Fzo4Tzk4bzBw3mhhwuQhwsGDy+EHi5CHi4aPFwUevgb8vC3wcO/Qg+XIA+XDB4uCT38A3n4x+DhpdDDZcjDZYOHy0IPVyAPVwweXgk9XIU8XDV4uCr0cA3ycM3g4bXQw3XIw3WDh+tCDzcgDzcMHt4IPdyEPNw0eLgp9HAL8nDL4OGt0MNtyMNtg4fbQg93IA93DB7eCT3chTzcNXi4K/RwD/Jwz+DhvdBDAOQhwOAhQOjhPuThvsHDB6GHB5CHBwYPD4QeHkIeHho8fBR6eAR5eGTw8Ejo4THk4bHBwyehhyeQhycGD0+EHp5CHp4aPHwWengGeXhm8PBM6OE55OG5wcMXoYcXkIcXBg8vhB7+hTz8a/DwVejhJeThpcHDS6GHV5CHVwYP34QeXkMeXhs8vBZ6eAN5eGPw8F3o4S3k4a3Bw1uhh3eQh3cGDz+EHt5DHt4bPLwXevgAefhg8PBT6OEj5OGjwcNHoYdPkIdPBg+/hB4+Qx4+Gzx8Fnr4Ann4YvDwW+jhK+Thq8HDV6GHb5CHbwYPf4QevkMevhs8fBd6+AF5+GHw8Fcp3R9+Qh5+Gjz8FHr4BXn4ZfAQSOjhN+Tht8HDb6GHP5CHPwYPgYUe/nrAePhvl/bwv9v/31agB4yHQA94D0GEHgJDHgIbPAQWeggCeQhi8BBU6CEo5CGowUNQoYdgkIdgBg/BhB6CQx6CGzwEF3oIAXkIYfAQXOghJOQhpMFDSKGHUJCHUAYPIYQeQkMeQhs8hBZ6CAN5CGPwEFLoISzkIazBQ1ihh3CQh3AGD6GEHsJDHsIbPIQXeogAeYhg8BBa6CEi5CGiwUNEoYdIkIdIBg9hhB4iQx4iGzxEFnqIAnmIYvAQVughKuQhqsFDVKGHaJCHaAYP4YQeokMeohs8RBd6iAF5iGHwEF7oISbkIabBQ0yhh1iQh1gGDxGEHmJDHmIbPMQWeogDeYhj8BBR6CEu5CGuwUNcoYd4kId4Bg+RhB7iQx7iGzzEF3pIAHlIYPAQWeghIeQhocFDQqGHRJCHRAYPUYQeEkMeEhs8JBZ6SAJ5SGLwEFXoISnkIanBQ1Khh2SQh2QGD9GEHpJDHpIbPCQXekgBeUhh8BBd6CEl5CGlwUNKoYdUkIdUBg8xhB5SQx5SGzykFnpIA3lIY/AQU+ghLeQhrcFDWqGHdJCHdAYPsYQe0kMe0hs8pBd6yAB5yGDwEFvoISPkIaPBQ0ahh0yQh0wGD3GEHjJDHjIbPGQWesgCechi8BBX6CEr5CGrwUNWoYdskIdsBg/xhB6yQx6yGzxkF3rIAXnIYfAQX+ghJ+Qhp8FDTqGHXJCHXAYPCYQeckMechs85BZ6yAN5yGPwkFDoIS/kIa/BQ16hh3yQh3wGD4mEHvJDHvIbPOQXeigAeShg8JBY6KEg5KGgwUNBoYdCkIdCBg9JhB4KQx4KGzwUFnooAnkoYvCQVOihKOShqMFDUaGHYpCHYgYPyYQeikMeihs8FBd6KAF5KGHwkFzooSTkoaTBQ0mhh1KQh1IGDymEHkpDHkobPJQWeigDeShj8JBS6KEs5KGswUNZoYdykIdyBg+phB7KQx7KGzyUF3qoAHmoYPCQWuihIuShosFDRaGHSpCHSgYPaYQeKkMeKhs8VBZ6qAJ5qGLwkFbooSrkoarBQ1Whh2qQh2oGD+mEHqpDHqobPFQXeqgBeahh8JBe6KEm5KGmwUNNoYdakIdaBg8ZhB5qQx5qGzzUFnqoA3moY/CQUeihLuShrsFDXaGHepCHegYPmYQe6kMe6hs81Bd6aAB5aGDwkFnooSHkoaHBQ0Ohh0aQh0YGD1mEHhpDHhobPDQWemgCeWhi8JBV6KEp5KGpwUNToYdmkIdmBg/ZhB6aQx6aGzw0F3poAXloYfCQXeihJeShpcFDS6GHVpCHVgYPOYQeWkMeWhs8tBZ6aAN5aGPwkFPooS3koa3BQ1uhh3aQh3YGD7mEHtpDHtobPLQXeugAeehg8JBb6KEj5KGjwUNHoYdOkIdOBg95hB46Qx46Gzx0FnroAnnoYvCQV+ihK+Shq8FDV6GHbpCHbgYP+YQeukMeuhs8dBd66AF56GHwkF/ooSfkoafBQ0+hh16Qh14GDwWEHnpDHnobPPQWeugDeehj8FBQ6KEv5KGvwUNfoYd+kId+Bg+FhB76Qx76Gzz0F3oYAHkYYPBQWOhhIORhoMHDQKGHQZCHQQYPRYQeBkMeBhs8DBZ6GAJ5GGLwUFToYSjkYajBw1Chh2GQh2EGD8WEHoZDHoYbPAwXehgBeRhh8FBc6GEk5GGkwcNIoYdRkIdRBg8lhB5GQx5GGzyMFnoYA3kYY/BQUuhhLORhrMHDWKGHcZCHcQYPpYQexkMexhs8jBd6mAB5mGDwUFroYSLkYaLBw0Shh0mQh0kGD2WEHiZDHiYbPEwWepgCeZhi8FBW6GEq5GGqwcNUoYdpkIdpBg/lhB6mQx6mGzxMF3qYAXmYYfBQXuhhJuRhpsHDTKGHWZCHWQYPFYQeZkMeZhs8zBZ6mAN5mGPwUFHoYS7kYa7Bw1yhh3mQh3kGD5WEHuZDHuYbPMwXelgAeVhg8FBZ6GEh5GGhwcNCoYdFkIdFBg9VhB4WQx4WGzwsFnpYAnlYYvBQVehhKeRhqcHDUqGHZZCHZQYP1YQelkMelhs8LBd6WAF5WGHwUF3oYSXkYaXBw0qhh1WQh1UGDzWEHlZDHlYbPKwWelgDeVhj8FBT6GEt5GGtwcNaoYd1kId1Bg+1hB7WQx7WGzysF3rYAHnYYPBQW+hhI+Rho8HDRqGHTZCHTQYPdYQeNkMeNhs8bBZ62AJ52GLwUFfoYSvkYavBw1ahh22Qh20GD/WEHrZDHrYbPGwXetgBedhh8FBf6GEn5GGnwcNOoYddkIddBg8NhB52Qx52GzzsFnrYA3nYY/DQUOhhL+Rhr8HDXqGHfZCHfQYPjYQe9kMe9hs87Bd6OAB5OGDw0Fjo4SDk4aDBw0Ghh0OQh0MGD02EHg5DHg4bPBwWejgCeThi8NBU6OEo5OGowcNRoYdjkIdjBg/NhB6OQx6OGzwcF3o4AXk4YfDQXOjhJOThpMHDSaGHU5CHUwYPLYQeTkMeThs8nBZ6OAN5OGPw0FLo4Szk4azBw1mhh3OQh3MGD62EHs5DHs4bPJwXergAebhg8NBa6OEi5OGiwcNFoYe/IQ9/Gzy0EXq4BHm4ZPBwSejhH8jDPwYPbYUeLkMeLhs8XBZ6uAJ5uGLw0E7o4Srk4arBw1Whh2uQh2sGD+2FHq5DHq4bPFwXergBebhh8NBB6OEm5OGmwcNNoYdbkIdbBg8dhR5uQx5uGzzcFnq4A3m4Y/DQSejhLuThrsHDXaGHe5CHewYPnYUeAiAPAQYPAUIP9yEP9w0eugg9PIA8PDB4eCD08BDy8NDgoavQwyPIwyODh0dCD48hD48NHroJPTyBPDwxeHgi9PAU8vDU4KG70MMzyMMzg4dnQg/PIQ/PDR56CD28gDy8MHh4IfTwL+ThX4OHnkIPLyEPLw0eXgo9vII8vDJ46CX08Bry8Nrg4bXQwxvIwxuDh95CD28hD28NHt4KPbyDPLwzeOgj9PAe8vDe4OG90MMHyMMHg4e+Qg8fIQ8fDR4+Cj18gjx8MnjoJ/TwGfLw2eDhs9DDF8jDF4OH/kIPXyEPXw0evgo9fIM8fDN4GCD08B3y8N3g4bvQww/Iww+Dh4FCDz8hDz8NHn4KPfyCPPwyeBgk9PAb8vDb4OG30MMfyMMfg4fBQg9/PWQ8/LdLe/jf7f9vK9BDxkOgh7yHIUIPgSEPgQ0eAgs9BIE8BDF4GCr0EBTyENTgIajQQzDIQzCDh2FCD8EhD8ENHoILPYSAPIQweBgu9BAS8hDS4CGk0EMoyEMog4cRQg+hIQ+hDR5CCz2EgTyEMXgYKfQQFvIQ1uAhrNBDOMhDOIOHUUIP4SEP4Q0ewgs9RIA8RDB4GC30EBHyENHgIaLQQyTIQySDhzFCD5EhD5ENHiILPUSBPEQxeBgr9BAV8hDV4CGq0EM0yEM0g4dxQg/RIQ/RDR6iCz3EgDzEMHgYL/QQE/IQ0+AhptBDLMhDLIOHCUIPsSEPsQ0eYgs9xIE8xDF4mCj0EBfyENfgIa7QQzzIQzyDh0lCD/EhD/ENHuILPSSAPCQweJgs9JAQ8pDQ4CGh0EMiyEMig4cpQg+JIQ+JDR4SCz0kgTwkMXiYKvSQFPKQ1OAhqdBDMshDMoOHaUIPySEPyQ0ekgs9pIA8pDB4mC70kBLykNLgIaXQQyrIQyqDhxlCD6khD6kNHlILPaSBPKQxeJgp9JAW8pDW4CGt0EM6yEM6g4dZQg/pIQ/pDR7SCz1kgDxkMHiYLfSQEfKQ0eAho9BDJshDJoOHOUIPmSEPmQ0eMgs9ZIE8ZDF4mCv0kBXykNXgIavQQzbIQzaDh3lCD9khD9kNHrILPeSAPOQweJgv9JAT8pDT4CGn0EMuyEMug4cFQg+5IQ+5DR5yCz3kgTzkMXhYKPSQF/KQ1+Ahr9BDPshDPoOHRUIP+SEP+Q0e8gs9FIA8FDB4WCz0UBDyUNDgoaDQQyHIQyGDhyVCD4UhD4UNHgoLPRSBPBQxeFgq9FAU8lDU4KGo0EMxyEMxg4dlQg/FIQ/FDR6KCz2UgDyUMHhYLvRQEvJQ0uChpNBDKchDKYOHFUIPpSEPpQ0eSgs9lIE8lDF4WCn0UBbyUNbgoazQQznIQzmDh1VCD+UhD+UNHsoLPVSAPFQweFgt9FAR8lDR4KGi0EMlyEMlg4c1Qg+VIQ+VDR4qCz1UgTxUMXhYK/RQFfJQ1eChqtBDNchDNYOHdUIP1SEP1Q0eqgs91IA81DB4WC/0UBPyUNPgoabQQy3IQy2Dhw1CD7UhD7UNHmoLPdSBPNQxeNgo9FAX8lDX4KGu0EM9yEM9g4dNQg/1IQ/1DR7qCz00gDw0MHjYLPTQEPLQ0OChodBDI8hDI4OHLUIPjSEPjQ0eGgs9NIE8NDF42Cr00BTy0NTgoanQQzPIQzODh21CD80hD80NHpoLPbSAPLQweNgu9NAS8tDS4KGl0EMryEMrg4cdQg+tIQ+tDR5aCz20gTy0MXjYKfTQFvLQ1uChrdBDO8hDO4OHXUIP7SEP7Q0e2gs9dIA8dDB42C300BHy0NHgoaPQQyfIQyeDhz1CD50hD50NHjoLPXSBPHQxeNgr9NAV8tDV4KGr0EM3yEM3g4d9Qg/dIQ/dDR66Cz30gDz0MHjYL/TQE/LQ0+Chp9BDL8hDL4OHA0IPvSEPvQ0eegs99IE89DF4OCj00Bfy0Nfgoa/QQz/IQz+Dh0NCD/0hD/0NHvoLPQyAPAwweDgs9DAQ8jDQ4GGg0MMgyMMgg4cjQg+DIQ+DDR4GCz0MgTwMMXg4KvQwFPIw1OBhqNDDMMjDMIOHY0IPwyEPww0ehgs9jIA8jDB4OC70MBLyMNLgYaTQwyjIwyiDhxNCD6MhD6MNHkYLPYyBPIwxeDgp9DAW8jDW4GGs0MM4yMM4g4dTQg/jIQ/jDR7GCz1MgDxMMHg4LfQwEfIw0eBhotDDJMjDJIOHM0IPkyEPkw0eJgs9TIE8TDF4OCv0MBXyMNXgYarQwzTIwzSDh3NCD9MhD9MNHqYLPcyAPMwweDgv9DAT8jDT4GGm0MMsyMMsg4cLQg+zIQ+zDR5mCz3MgTzMMXi4KPQwF/Iw1+BhrtDDPMjDPIOHv4Ue5kMe5hs8zBd6WAB5WGDwcEnoYSHkYaHBw0Khh0WQh0UGD/8IPSyGPCw2eFgs9LAE8rDE4OGy0MNSyMNSg4elQg/LIA/LDB6uCD0shzwsN3hYLvSwAvKwwuDhqtDDSsjDSoOHlUIPqyAPqwwergk9rIY8rDZ4WC30sAbysMbg4brQw1rIw1qDh7VCD+sgD+sMHm4IPayHPKw3eFgv9LAB8rDB4OGm0MNGyMNGg4eNQg+bIA+bDB5uCT1shjxsNnjYLPSwBfKwxeDhttDDVsjDVoOHrUIP2yAP2wwe7gg9bIc8bDd42C70sAPysMPg4a7Qw07Iw06Dh51CD7sgD7sMHu4JPeyGPOw2eNgt9LAH8rDH4CFA6GEv5GGvwcNeoYd9kId9Bg/3hR72Qx72GzzsF3o4AHk4YPDwQOjhIOThoMHDQaGHQ5CHQwYPD4UeDkMeDhs8HBZ6OAJ5OGLw8Ejo4Sjk4ajBw1Ghh2OQh2MGD4+FHo5DHo4bPBwXejgBeThh8PBE6OEk5OGkwcNJoYdTkIdTBg9PhR5OQx5OGzycFno4A3k4Y/DwTOjhLOThrMHDWaGHc5CHcwYPz4UezkMezhs8nBd6uAB5uGDw8ELo4SLk4aLBw0Whh78hD38bPPwr9HAJ8nDJ4OGS0MM/kId/DB5eCj1chjxcNni4LPRwBfJwxeDhldDDVcjDVYOHq0IP1yAP1wweXgs9XIc8XDd4uC70cAPycMPg4Y3Qw03Iw02Dh5tCD7cgD7cMHt4KPdyGPNw2eLgt9HAH8nDH4OGd0MNdyMNdg4e7Qg/3IA/3DB7eCz0EQB4CDB4ChB7uQx7uGzx8EHp4AHl4YPDwQOjhIeThocHDR6GHR5CHRwYPj4QeHkMeHhs8fBJ6eAJ5eGLw8ETo4Snk4anBw2ehh2eQh2cGD8+EHp5DHp4bPHwRengBeXhh8PBC6OFfyMO/Bg9fhR5eQh5eGjy8FHp4BXl4ZfDwTejhNeThtcHDa6GHN5CHNwYP34Ue3kIe3ho8vBV6eAd5eGfw8EPo4T3k4b3Bw3uhhw+Qhw8GDz+FHj5CHj4aPHwUevgEefhk8PBL6OEz5OGzwcNnoYcvkIcvBg+/hR6+Qh6+Gjx8FXr4Bnn4ZvDwR+jhO+Thu8HDd6GHH5CHHwYPf5XW/eEn5OGnwcNPoYdfkIdfBg+BhB5+Qx5+Gzz8Fnr4A3n4Y/AQWOjhr0eMh/92aQ//u/3/bQV6xHgI9Ij3EEToITDkIbDBQ2ChhyCQhyAGD0GFHoJCHoIaPAQVeggGeQhm8BBM6CE45CG4wUNwoYcQkIcQBg/BhR5CQh5CGjyEFHoIBXkIZfAQQughNOQhtMFDaKGHMJCHMAYPIYUewkIewho8hBV6CAd5CGfwEEroITzkIbzBQ3ihhwiQhwgGD6GFHiJCHiIaPEQUeogEeYhk8BBG6CEy5CGywUNkoYcokIcoBg9hhR6iQh6iGjxEFXqIBnmIZvAQTughOuQhusFDdKGHGJCHGAYP4YUeYkIeYho8xBR6iAV5iGXwEEHoITbkIbbBQ2yhhziQhzgGDxGFHuJCHuIaPMQVeogHeYhn8BBJ6CE+5CG+wUN8oYcEkIcEBg+RhR4SQh4SGjwkFHpIBHlIZPAQReghMeQhscFDYqGHJJCHJAYPUYUekkIekho8JBV6SAZ5SGbwEE3oITnkIbnBQ3KhhxSQhxQGD9GFHlJCHlIaPKQUekgFeUhl8BBD6CE15CG1wUNqoYc0kIc0Bg8xhR7SQh7SGjykFXpIB3lIZ/AQS+ghPeQhvcFDeqGHDJCHDAYPsYUeMkIeMho8ZBR6yAR5yGTwEEfoITPkIbPBQ2ahhyyQhywGD3GFHrJCHrIaPGQVesgGechm8BBP6CE75CG7wUN2oYcckIccBg/xhR5yQh5yGjzkFHrIBXnIZfCQQOghN+Qht8FDbqGHPJCHPAYPCYUe8kIe8ho85BV6yAd5yGfwkEjoIT/kIb/BQ36hhwKQhwIGD4mFHgpCHgoaPBQUeigEeShk8JBE6KEw5KGwwUNhoYcikIciBg9JhR6KQh6KGjwUFXooBnkoZvCQTOihOOShuMFDcaGHEpCHEgYPyYUeSkIeSho8lBR6KAV5KGXwkELooTTkobTBQ2mhhzKQhzIGDymFHspCHsoaPJQVeigHeShn8JBK6KE85KG8wUN5oYcKkIcKBg+phR4qQh4qGjxUFHqoBHmoZPCQRuihMuShssFDZaGHKpCHKgYPaYUeqkIeqho8VBV6qAZ5qGbwkE7ooTrkobrBQ3WhhxqQhxoGD+mFHmpCHmoaPNQUeqgFeahl8JBB6KE25KG2wUNtoYc6kIc6Bg8ZhR7qQh7qGjzUFXqoB3moZ/CQSeihPuShvsFDfaGHBpCHBgYPmYUeGkIeGho8NBR6aAR5aGTwkEXooTHkobHBQ2OhhyaQhyYGD1mFHppCHpoaPDQVemgGeWhm8JBN6KE55KG5wUNzoYcWkIcWBg/ZhR5aQh5aGjy0FHpoBXloZfCQQ+ihNeShtcFDa6GHNpCHNgYPOYUe2kIe2ho8tBV6aAd5aGfwkEvooT3kob3BQ3uhhw6Qhw4GD7mFHjpCHjoaPHQUeugEeehk8JBH6KEz5KGzwUNnoYcukIcuBg95hR66Qh66Gjx0FXroBnnoZvCQT+ihO+Shu8FDd6GHHpCHHgYP+YUeekIeeho89BR66AV56GXwUEDooTfkobfBQ2+hhz6Qhz4GDwWFHvpCHvoaPPQVeugHeehn8FBI6KE/5KG/wUN/oYcBkIcBBg+FhR4GQh4GGjwMFHoYBHkYZPBQROhhMORhsMHDYKGHIZCHIQYPRYUehkIehho8DBV6GAZ5GGbwUEzoYTjkYbjBw3ChhxGQhxEGD8WFHkZCHkYaPIwUehgFeRhl8FBC6GE05GG0wcNooYcxkIcxBg8lhR7GQh7GGjyMFXoYB3kYZ/BQSuhhPORhvMHDeKGHCZCHCQYPpYUeJkIeJho8TBR6mAR5mGTwUEboYTLkYbLBw2ShhymQhykGD2WFHqZCHqYaPEwVepgGeZhm8FBO6GE65GG6wcN0oYcZkIcZBg/lhR5mQh5mGjzMFHqYBXmYZfBQQehhNuRhtsHDbKGHOZCHOQYPFYUe5kIe5ho8zBV6mAd5mGfwUEnoYT7kYb7Bw3yhhwWQhwUGD5WFHhZCHhYaPCwUelgEeVhk8FBF6GEx5GGxwcNioYclkIclBg9VhR6WQh6WGjwsFXpYBnlYZvBQTehhOeRhucHDcqGHFZCHFQYP1YUeVkIeVho8rBR6WAV5WGXwUEPoYTXkYbXBw2qhhzWQhzUGDzWFHtZCHtYaPKwVelgHeVhn8FBL6GE95GG9wcN6oYcNkIcNBg+1hR42Qh42GjxsFHrYBHnYZPBQR+hhM+Rhs8HDZqGHLZCHLQYPdYUetkIetho8bBV62AZ52GbwUE/oYTvkYbvBw3ahhx2Qhx0GD/WFHnZCHnYaPOwUetgFedhl8NBA6GE35GG3wcNuoYc9kIc9Bg8NhR72Qh72GjzsFXrYB3nYZ/DQSOhhP+Rhv8HDfqGHA5CHAwYPjYUeDkIeDho8HBR6OAR5OGTw0ETo4TDk4bDBw2GhhyOQhyMGD02FHo5CHo4aPBwVejgGeThm8NBM6OE45OG4wcNxoYcTkIcTBg/NhR5OQh5OGjycFHo4BXk4ZfDQQujhNOThtMHDaaGHM5CHMwYPLYUezkIezho8nBV6OAd5OGfw0Ero4Tzk4bzBw3mhhwuQhwsGD62FHi5CHi4aPFwUevgb8vC3wUMboYdLkIdLBg+XhB7+gTz8Y/DQVujhMuThssHDZaGHK5CHKwYP7YQerkIerho8XBV6uAZ5uGbw0F7o4Trk4brBw3WhhxuQhxsGDx2EHm5CHm4aPNwUergFebhl8NBR6OE25OG2wcNtoYc7kIc7Bg+dhB7uQh7uGjzcFXq4B3m4Z/DQWeghAPIQYPAQIPRwH/Jw3+Chi9DDA8jDA4OHB0IPDyEPDw0eugo9PII8PDJ4eCT08Bjy8NjgoZvQwxPIwxODhydCD08hD08NHroLPTyDPDwzeHgm9PAc8vDc4KGH0MMLyMMLg4cXQg//Qh7+NXjoKfTwEvLw0uDhpdDDK8jDK4OHXkIPryEPrw0eXgs9vIE8vDF46C308Bby8Nbg4a3QwzvIwzuDhz5CD+8hD+8NHt4LPXyAPHwweOgr9PAR8vDR4OGj0MMnyMMng4d+Qg+fIQ+fDR4+Cz18gTx8MXjoL/TwFfLw1eDhq9DDN8jDN4OHAUIP3yEP3w0evgs9/IA8/DB4GCj08BPy8NPg4afQwy/Iwy+Dh0FCD78hD78NHn4LPfyBPPwxeBgs9PDXY8bDf7u0h//d/v+2Aj1mPAR6zHsYIvQQGPIQ2OAhsNBDEMhDEIOHoUIPQSEPQQ0eggo9BIM8BDN4GCb0EBzyENzgIbjQQwjIQwiDh+FCDyEhDyENHkIKPYSCPIQyeBgh9BAa8hDa4CG00EMYyEMYg4eRQg9hIQ9hDR7CCj2EgzyEM3gYJfQQHvIQ3uAhvNBDBMhDBIOH0UIPESEPEQ0eIgo9RII8RDJ4GCP0EBnyENngIbLQQxTIQxSDh7FCD1EhD1ENHqIKPUSDPEQzeBgn9BAd8hDd4CG60EMMyEMMg4fxQg8xIQ8xDR5iCj3EgjzEMniYIPQQG/IQ2+AhttBDHMhDHIOHiUIPcSEPcQ0e4go9xIM8xDN4mCT0EB/yEN/gIb7QQwLIQwKDh8lCDwkhDwkNHhIKPSSCPCQyeJgi9JAY8pDY4CGx0EMSyEMSg4epQg9JIQ9JDR6SCj0kgzwkM3iYJvSQHPKQ3OAhudBDCshDCoOH6UIPKSEPKQ0eUgo9pII8pDJ4mCH0kBrykNrgIbXQQxrIQxqDh5lCD2khD2kNHtIKPaSDPKQzeJgl9JAe8pDe4CG90EMGyEMGg4fZQg8ZIQ8ZDR4yCj1kgjxkMniYI/SQGfKQ2eAhs9BDFshDFoOHuUIPWSEPWQ0esgo9ZIM8ZDN4mCf0kB3ykN3gIbvQQw7IQw6Dh/lCDzkhDzkNHnIKPeSCPOQyeFgg9JAb8pDb4CG30EMeyEMeg4eFQg95IQ95DR7yCj3kgzzkM3hYJPSQH/KQ3+Ahv9BDAchDAYOHxUIPBSEPBQ0eCgo9FII8FDJ4WCL0UBjyUNjgobDQQxHIQxGDh6VCD0UhD0UNHooKPRSDPBQzeFgm9FAc8lDc4KG40EMJyEMJg4flQg8lIQ8lDR5KCj2UgjyUMnhYIfRQGvJQ2uChtNBDGchDGYOHlUIPZSEPZQ0eygo9lIM8lDN4WCX0UB7yUN7gobzQQwXIQwWDh9VCDxUhDxUNHioKPVSCPFQyeFgj9FAZ8lDZ4KGy0EMVyEMVg4e1Qg9VIQ9VDR6qCj1UgzxUM3hYJ/RQHfJQ3eChutBDDchDDYOH9UIPNSEPNQ0eago91II81DJ42CD0UBvyUNvgobbQQx3IQx2Dh41CD3UhD3UNHuoKPdSDPNQzeNgk9FAf8lDf4KG+0EMDyEMDg4fNQg8NIQ8NDR4aCj00gjw0MnjYIvTQGPLQ2OChsdBDE8hDE4OHrUIPTSEPTQ0emgo9NIM8NDN42Cb00Bzy0NzgobnQQwvIQwuDh+1CDy0hDy0NHloKPbSCPLQyeNgh9NAa8tDa4KG10EMbyEMbg4edQg9tIQ9tDR7aCj20gzy0M3jYJfTQHvLQ3uChvdBDB8hDB4OH3UIPHSEPHQ0eOgo9dII8dDJ42CP00Bny0NngobPQQxfIQxeDh71CD10hD10NHroKPXSDPHQzeNgn9NAd8tDd4KG70EMPyEMPg4f9Qg89IQ89DR56Cj30gjz0Mng4IPTQG/LQ2+Cht9BDH8hDH4OHg0IPfSEPfQ0e+go99IM89DN4OCT00B/y0N/gob/QwwDIwwCDh8NCDwMhDwMNHgYKPQyCPAwyeDgi9DAY8jDY4GGw0MMQyMMQg4ejQg9DIQ9DDR6GCj0MgzwMM3g4JvQwHPIw3OBhuNDDCMjDCIOH40IPIyEPIw0eRgo9jII8jDJ4OCH0MBryMNrgYbTQwxjIwxiDh5NCD2MhD2MNHsYKPYyDPIwzeDgl9DAe8jDe4GG80MMEyMMEg4fTQg8TIQ8TDR4mCj1MgjxMMng4I/QwGfIw2eBhstDDFMjDFIOHs0IPUyEPUw0epgo9TIM8TDN4OCf0MB3yMN3gYbrQwwzIwwyDh/NCDzMhDzMNHmYKPcyCPMwyeLgg9DAb8jDb4GG20MMcyMMcg4eLQg9zIQ9zDR7mCj3MgzzMM3j4W+hhPuRhvsHDfKGHBZCHBQYPl4QeFkIeFho8LBR6WAR5WGTw8I/Qw2LIw2KDh8VCD0sgD0sMHi4LPSyFPCw1eFgq9LAM8rDM4OGK0MNyyMNyg4flQg8rIA8rDB6uCj2shDysNHhYKfSwCvKwyuDhmtDDasjDaoOH1UIPayAPawwergs9rIU8rDV4WCv0sA7ysM7g4YbQw3rIw3qDh/VCDxsgDxsMHm4KPWyEPGw0eNgo9LAJ8rDJ4OGW0MNmyMNmg4fNQg9bIA9bDB5uCz1shTxsNXjYKvSwDfKwzeDhjtDDdsjDdoOH7UIPOyAPOwwe7go97IQ87DR42Cn0sAvysMvg4Z7Qw27Iw26Dh91CD3sgD3sMHgKEHvZCHvYaPOwVetgHedhn8HBf6GE/5GG/wcN+oYcDkIcDBg8PhB4OQh4OGjwcFHo4BHk4ZPDwUOjhMOThsMHDYaGHI5CHIwYPj4QejkIejho8HBV6OAZ5OGbw8Fjo4Tjk4bjBw3GhhxOQhxMGD0+EHk5CHk4aPJwUejgFeThl8PBU6OE05OG0wcNpoYczkIczBg/PhB7OQh7OGjycFXo4B3k4Z/DwXOjhPOThvMHDeaGHC5CHCwYPL4QeLkIeLho8XBR6+Bvy8LfBw79CD5cgD5cMHi4JPfwDefjH4OGl0MNlyMNlg4fLQg9XIA9XDB5eCT1chTxcNXi4KvRwDfJwzeDhtdDDdcjDdYOH60IPNyAPNwwe3gg93IQ83DR4uCn0cAvycMvg4a3Qw23Iw22Dh9tCD3cgD3cMHt4JPdyFPNw1eLgr9HAP8nDP4OG90EMA5CHA4CFA6OE+5OG+wcMHoYcHkIcHBg8PhB4eQh4eGjx8FHp4BHl4ZPDwSOjhMeThscHDJ6GHJ5CHJwYPT4QenkIenho8fBZ6eAZ5eGbw8Ezo4Tnk4bnBwxehhxeQhxcGDy+EHv6FPPxr8PBV6OEl5OGlwcNLoYdXkIdXBg/fhB5eQx5eGzy8Fnp4A3l4Y/DwXejhLeThrcHDW6GHd5CHdwYPP4Qe3kMe3hs8vBd6+AB5+GDw8FPo4SPk4aPBw0ehh0+Qh08GD7+EHj5DHj4bPHwWevgCefhi8PBb6OEr5OGrwcNXoYdvkIdvBg9/hB6+Qx6+Gzx8F3r4AXn4YfDwVxndH35CHn4aPPwUevgFefhl8BBI6OE35OG3wcNvoYc/kIc/Bg+BhR7+esJ4+G+X9vC/2//fVqAnjIdAT3gPQYQeAkMeAhs8BBZ6CAJ5CGLwEFToISjkIajBQ1Chh2CQh2AGD8GEHoJDHoIbPAQXeggBeQhh8BBc6CEk5CGkwUNIoYdQkIdQBg8hhB5CQx5CGzyEFnoIA3kIY/AQUughLOQhrMFDWKGHcJCHcAYPoYQewkMewhs8hBd6iAB5iGDwEFroISLkIaLBQ0Shh0iQh0gGD2GEHiJDHiIbPEQWeogCeYhi8BBW6CEq5CGqwUNUoYdokIdoBg/hhB6iQx6iGzxEF3qIAXmIYfAQXughJuQhpsFDTKGHWJCHWAYPEYQeYkMeYhs8xBZ6iAN5iGPwEFHoIS7kIa7BQ1yhh3iQh3gGD5GEHuJDHuIbPMQXekgAeUhg8BBZ6CEh5CGhwUNCoYdEkIdEBg9RhB4SQx4SGzwkFnpIAnlIYvAQVeghKeQhqcFDUqGHZJCHZAYP0YQekkMekhs8JBd6SAF5SGHwEF3oISXkIaXBQ0qhh1SQh1QGDzGEHlJDHlIbPKQWekgDeUhj8BBT6CEt5CGtwUNaoYd0kId0Bg+xhB7SQx7SGzykF3rIAHnIYPAQW+ghI+Qho8FDRqGHTJCHTAYPcYQeMkMeMhs8ZBZ6yAJ5yGLwEFfoISvkIavBQ1ahh2yQh2wGD/GEHrJDHrIbPGQXesgBechh8BBf6CEn5CGnwUNOoYdckIdcBg8JhB5yQx5yGzzkFnrIA3nIY/CQUOghL+Qhr8FDXqGHfJCHfAYPiYQe8kMe8hs85Bd6KAB5KGDwkFjooSDkoaDBQ0Ghh0KQh0IGD0mEHgpDHgobPBQWeigCeShi8JBU6KEo5KGowUNRoYdikIdiBg/JhB6KQx6KGzwUF3ooAXkoYfCQXOihJOShpMFDSaGHUpCHUgYPKYQeSkMeShs8lBZ6KAN5KGPwkFLooSzkoazBQ1mhh3KQh3IGD6mEHspDHsobPJQXeqgAeahg8JBa6KEi5KGiwUNFoYdKkIdKBg9phB4qQx4qGzxUFnqoAnmoYvCQVuihKuShqsFDVaGHapCHagYP6YQeqkMeqhs8VBd6qAF5qGHwkF7ooSbkoabBQ02hh1qQh1oGDxmEHmpDHmobPNQWeqgDeahj8JBR6KEu5KGuwUNdoYd6kId6Bg+ZhB7qQx7qGzzUF3poAHloYPCQWeihIeShocFDQ6GHRpCHRgYPWYQeGkMeGhs8NBZ6aAJ5aGLwkFXooSnkoanBQ1Ohh2aQh2YGD9mEHppDHpobPDQXemgBeWhh8JBd6KEl5KGlwUNLoYdWkIdWBg85hB5aQx5aGzy0FnpoA3loY/CQU+ihLeShrcFDW6GHdpCHdgYPuYQe2kMe2hs8tBd66AB56GDwkFvooSPkoaPBQ0ehh06Qh04GD3mEHjpDHjobPHQWeugCeehi8JBX6KEr5KGrwUNXoYdukIduBg/5hB66Qx66Gzx0F3roAXnoYfCQX+ihJ+Shp8FDT6GHXpCHXgYPBYQeekMeehs89BZ66AN56GPwUFDooS/koa/BQ1+hh36Qh34GD4WEHvpDHvobPPQXehgAeRhg8FBY6GEg5GGgwcNAoYdBkIdBBg9FhB4GQx4GGzwMFnoYAnkYYvBQVOhhKORhqMHDUKGHYZCHYQYPxYQehkMehhs8DBd6GAF5GGHwUFzoYSTkYaTBw0ihh1GQh1EGDyWEHkZDHkYbPIwWehgDeRhj8FBS6GEs5GGswcNYoYdxkIdxBg+lhB7GQx7GGzyMF3qYAHmYYPBQWuhhIuRhosHDRKGHSZCHSQYPZYQeJkMeJhs8TBZ6mAJ5mGLwUFboYSrkYarBw1Shh2mQh2kGD+WEHqZDHqYbPEwXepgBeZhh8FBe6GEm5GGmwcNMoYdZkIdZBg8VhB5mQx5mGzzMFnqYA3mYY/BQUehhLuRhrsHDXKGHeZCHeQYPlYQe5kMe5hs8zBd6WAB5WGDwUFnoYSHkYaHBw0Khh0WQh0UGD1WEHhZDHhYbPCwWelgCeVhi8FBV6GEp5GGpwcNSoYdlkIdlBg/VhB6WQx6WGzwsF3pYAXlYYfBQXehhJeRhpcHDSqGHVZCHVQYPNYQeVkMeVhs8rBZ6WAN5WGPwUFPoYS3kYa3Bw1qhh3WQh3UGD7WEHtZDHtYbPKwXetgAedhg8FBb6GEj5GGjwcNGoYdNkIdNBg91hB42Qx42GzxsFnrYAnnYYvBQV+hhK+Rhq8HDVqGHbZCHbQYP9YQetkMeths8bBd62AF52GHwUF/oYSfkYafBw06hh12Qh10GDw2EHnZDHnYbPOwWetgDedhj8NBQ6GEv5GGvwcNeoYd9kId9Bg+NhB72Qx72GzzsF3o4AHk4YPDQWOjhIOThoMHDQaGHQ5CHQwYPTYQeDkMeDhs8HBZ6OAJ5OGLw0FTo4Sjk4ajBw1Ghh2OQh2MGD82EHo5DHo4bPBwXejgBeThh8NBc6OEk5OGkwcNJoYdTkIdTBg8thB5OQx5OGzycFno4A3k4Y/DQUujhLOThrMHDWaGHc5CHcwYPrYQezkMezhs8nBd6uAB5uGDw0Fro4SLk4aLBw0Whh78hD38bPLQRergEebhk8HBJ6OEfyMM/Bg9thR4uQx4uGzxcFnq4Anm4YvDQTujhKuThqsHDVaGHa5CHawYP7YUerkMerhs8XBd6uAF5uGHw0EHo4Sbk4abBw02hh1uQh1sGDx2FHm5DHm4bPNwWergDebhj8NBJ6OEu5OGuwcNdoYd7kId7Bg+dhR4CIA8BBg8BQg/3IQ/3DR66CD08gDw8MHh4IPTwEPLw0OChq9DDI8jDI4OHR0IPjyEPjw0eugk9PIE8PDF4eCL08BTy8NTgobvQwzPIwzODh2dCD88hD88NHnoIPbyAPLwweHgh9PAv5OFfg4eeQg8vIQ8vDR5eCj28gjy8MnjoJfTwGvLw2uDhtdDDG8jDG4OH3kIPbyEPbw0e3go9vIM8vDN46CP08B7y8N7g4b3QwwfIwweDh75CDx8hDx8NHj4KPXyCPHwyeOgn9PAZ8vDZ4OGz0MMXyMMXg4f+Qg9fIQ9fDR6+Cj18gzx8M3gYIPTwHfLw3eDhu9DDD8jDD4OHgUIPPyEPPw0efgo9/II8/DJ4GCT08Bvy8Nvg4bfQwx/Iwx+Dh8FCD389ZTz8t0t7+N/t/28r0FPGQ6CnvIchQg+BIQ+BDR4CCz0EgTwEMXgYKvQQFPIQ1OAhqNBDMMhDMIOHYUIPwSEPwQ0eggs9hIA8hDB4GC70EBLyENLgIaTQQyjIQyiDhxFCD6EhD6ENHkILPYSBPIQxeBgp9BAW8hDW4CGs0EM4yEM4g4dRQg/hIQ/hDR7CCz1EgDxEMHgYLfQQEfIQ0eAhotBDJMhDJIOHMUIPkSEPkQ0eIgs9RIE8RDF4GCv0EBXyENXgIarQQzTIQzSDh3FCD9EhD9ENHqILPcSAPMQweBgv9BAT8hDT4CGm0EMsyEMsg4cJQg+xIQ+xDR5iCz3EgTzEMXiYKPQQF/IQ1+AhrtBDPMhDPIOHSUIP8SEP8Q0e4gs9JIA8JDB4mCz0kBDykNDgIaHQQyLIQyKDhylCD4khD4kNHhILPSSBPCQxeJgq9JAU8pDU4CGp0EMyyEMyg4dpQg/JIQ/JDR6SCz2kgDykMHiYLvSQEvKQ0uAhpdBDKshDKoOHGUIPqSEPqQ0eUgs9pIE8pDF4mCn0kBbykNbgIa3QQzrIQzqDh1lCD+khD+kNHtILPWSAPGQweJgt9JAR8pDR4CGj0EMmyEMmg4c5Qg+ZIQ+ZDR4yCz1kgTxkMXiYK/SQFfKQ1eAhq9BDNshDNoOHeUIP2SEP2Q0esgs95IA85DB4mC/0kBPykNPgIafQQy7IQy6DhwVCD7khD7kNHnILPeSBPOQxeFgo9JAX8pDX4CGv0EM+yEM+g4dFQg/5IQ/5DR7yCz0UgDwUMHhYLPRQEPJQ0OChoNBDIchDIYOHJUIPhSEPhQ0eCgs9FIE8FDF4WCr0UBTyUNTgoajQQzHIQzGDh2VCD8UhD8UNHooLPZSAPJQweFgu9FAS8lDS4KGk0EMpyEMpg4cVQg+lIQ+lDR5KCz2UgTyUMXhYKfRQFvJQ1uChrNBDOchDOYOHVUIP5SEP5Q0eygs9VIA8VDB4WC30UBHyUNHgoaLQQyXIQyWDhzVCD5UhD5UNHioLPVSBPFQxeFgr9FAV8lDV4KGq0EM1yEM1g4d1Qg/VIQ/VDR6qCz3UgDzUMHhYL/RQE/JQ0+ChptBDLchDLYOHDUIPtSEPtQ0eags91IE81DF42Cj0UBfyUNfgoa7QQz3IQz2Dh01CD/UhD/UNHuoLPTSAPDQweNgs9NAQ8tDQ4KGh0EMjyEMjg4ctQg+NIQ+NDR4aCz00gTw0MXjYKvTQFPLQ1OChqdBDM8hDM4OHbUIPzSEPzQ0emgs9tIA8tDB42C700BLy0NLgoaXQQyvIQyuDhx1CD60hD60NHloLPbSBPLQxeNgp9NAW8tDW4KGt0EM7yEM7g4ddQg/tIQ/tDR7aCz10gDx0MHjYLfTQEfLQ0eCho9BDJ8hDJ4OHPUIPnSEPnQ0eOgs9dIE8dDF42Cv00BXy0NXgoavQQzfIQzeDh31CD90hD90NHroLPfSAPPQweNgv9NAT8tDT4KGn0EMvyEMvg4cDQg+9IQ+9DR56Cz30gTz0MXg4KPTQF/LQ1+Chr9BDP8hDP4OHQ0IP/SEP/Q0e+gs9DIA8DDB4OCz0MBDyMNDgYaDQwyDIwyCDhyNCD4MhD4MNHgYLPQyBPAwxeDgq9DAU8jDU4GGo0MMwyMMwg4djQg/DIQ/DDR6GCz2MgDyMMHg4LvQwEvIw0uBhpNDDKMjDKIOHE0IPoyEPow0eRgs9jIE8jDF4OCn0MBbyMNbgYazQwzjIwziDh1NCD+MhD+MNHsYLPUyAPEwweDgt9DAR8jDR4GGi0MMkyMMkg4czQg+TIQ+TDR4mCz1MgTxMMXg4K/QwFfIw1eBhqtDDNMjDNIOHc0IP0yEP0w0epgs9zIA8zDB4OC/0MBPyMNPgYabQwyzIwyyDhwtCD7MhD7MNHmYLPcyBPMwxeLgo9DAX8jDX4GGu0MM8yMM8g4e/hR7mQx7mGzzMF3pYAHlYYPBwSehhIeRhocHDQqGHRZCHRQYP/wg9LIY8LDZ4WCz0sATysMTg4bLQw1LIw1KDh6VCD8sgD8sMHq4IPSyHPCw3eFgu9LAC8rDC4OGq0MNKyMNKg4eVQg+rIA+rDB6uCT2shjysNnhYLfSwBvKwxuDhutDDWsjDWoOHtUIP6yAP6wwebgg9rIc8rDd4WC/0sAHysMHg4abQw0bIw0aDh41CD5sgD5sMHm4JPWyGPGw2eNgs9LAF8rDF4OG20MNWyMNWg4etQg/bIA/bDB7uCD1shzxsN3jYLvSwA/Kww+DhrtDDTsjDToOHnUIPuyAPuwwe7gk97IY87DZ42C30sAfysMfgIUDoYS/kYa/Bw16hh32Qh30GD/eFHvZDHvYbPOwXejgAeThg8PBA6OEg5OGgwcNBoYdDkIdDBg8PhR4OQx4OGzwcFno4Ank4YvDwSOjhKOThqMHDUaGHY5CHYwYPj4UejkMejhs8HBd6OAF5OGHw8ETo4STk4aTBw0mhh1OQh1MGD0+FHk5DHk4bPJwWejgDeThj8PBM6OEs5OGswcNZoYdzkIdzBg/PhR7OQx7OGzycF3q4AHm4YPDwQujhIuThosHDRaGHvyEP/+GVHoJA0dIgW997bNu2bdu2bdu2bdu2bdu27fOiXvegInpYuXLP9mRFxh/feYOHl0IPFyAPFwweLgg9XIQ8XDR4eCX0cAnycMng4ZLQw2XIw2WDh9dCD1cgD1cMHq4IPVyFPFw1eHgj9HAN8nDN4OGa0MN1yMN1g4e3Qg83IA83DB5uCD3chDzcNHh4J/RwC/Jwy+DhltDDbcjDbYOH90IPdyAPdwwe7gg93IU83DV4+CD0cA/ycM/g4Z7Qw33Iw32Dh49CDw8gDw8MHh4IPTyEPDw0ePgk9PAI8vDI4OGR0MNjyMNjg4fPQg9PIA9PDB6eCD08hTw8NXj4IvTwDPLwzODhmdDDc8jDc4OHr0IPLyAPLwweXgg9vIQ8vDR4+Cb08Ary8Mrg4ZXQw2vIw2uDh+9CD28gD28MHt4IPbyFPLw1ePgh9PAO8vDO4OGd0MN7yMN7g4efQg8fIA8fDB4+CD18hDx8NHj4JfTwCfLwyeDhk9DDZ8jDZ4OH30IPXyAPXwwevgg9fIU8fDV4+CP08A3y8M3g4ZvQw3fIw3eDh79CDz8gDz8MHn4IPfyEPPw0ePinlO4OvyAPvwwefgk9/IY8/DZ4+Ffo4Q/k4Y/Bwx+hh7+Qh78GDwGEHv55xnj4T5f28N/b/9fWv88YD/8+4z0EFHoIAHkIYPAQQOghIOQhoMFDIKGHQJCHQAYPgYQeAkMeAhs8BBZ6CAJ5CGLwEEToISjkIajBQxChh2CQh2AGD8GEHoJDHoIbPAQVeggBeQhh8BBC6CEk5CGkwUMwoYdQkIdQBg+hhB5CQx5CGzwEF3oIA3kIY/AQRughLOQhrMFDCKGHcJCHcAYP4YQewkMewhs8hBR6iAB5iGDwEEHoISLkIaLBQyihh0iQh0gGD5GEHiJDHiIbPIQWeogCeYhi8BBF6CEq5CGqwUMYoYdokIdoBg/RhB6iQx6iGzyEFXqIAXmIYfAQQ+ghJuQhpsFDOKGHWJCHWAYPsYQeYkMeYhs8hBd6iAN5iGPwEEfoIS7kIa7BQwShh3iQh3gGD/GEHuJDHuIbPEQUekgAeUhg8JBA6CEh5CGhwUMkoYdEkIdEBg+JhB4SQx4SGzxEFnpIAnlIYvCQROghKeQhqcFDFKGHZJCHZAYPyYQekkMekhs8RBV6SAF5SGHwkELoISXkIaXBQzShh1SQh1QGD6mEHlJDHlIbPEQXekgDeUhj8JBG6CEt5CGtwUMMoYd0kId0Bg/phB7SQx7SGzzEFHrIAHnIYPCQQeghI+Qho8FDLKGHTJCHTAYPmYQeMkMeMhs8xBZ6yAJ5yGLwkEXoISvkIavBQxyhh2yQh2wGD9mEHrJDHrIbPMQVesgBechh8JBD6CEn5CGnwUM8oYdckIdcBg+5hB5yQx5yGzzEF3rIA3nIY/CQR+ghL+Qhr8FDAqGHfJCHfAYP+YQe8kMe8hs8JBR6KAB5KGDwUEDooSDkoaDBQyKhh0KQh0IGD4WEHgpDHgobPCQWeigCeShi8FBE6KEo5KGowUMSoYdikIdiBg/FhB6KQx6KGzwkFXooAXkoYfBQQuihJOShpMFDMqGHUpCHUgYPpYQeSkMeShs8JBd6KAN5KGPwUEbooSzkoazBQwqhh3KQh3IGD+WEHspDHsobPKQUeqgAeahg8FBB6KEi5KGiwUMqoYdKkIdKBg+VhB4qQx4qGzykFnqoAnmoYvBQReihKuShqsFDGqGHapCHagYP1YQeqkMeqhs8pBV6qAF5qGHwUEPooSbkoabBQzqhh1qQh1oGD7WEHmpDHmobPKQXeqgDeahj8FBH6KEu5KGuwUMGoYd6kId6Bg/1hB7qQx7qGzxkFHpoAHloYPDQQOihIeShocFDJqGHRpCHRgYPjYQeGkMeGhs8ZBZ6aAJ5aGLw0ETooSnkoanBQxahh2aQh2YGD82EHppDHpobPGQVemgBeWhh8NBC6KEl5KGlwUM2oYdWkIdWBg+thB5aQx5aGzxkF3poA3loY/DQRuihLeShrcFDDqGHdpCHdgYP7YQe2kMe2hs85BR66AB56GDw0EHooSPkoaPBQy6hh06Qh04GD52EHjpDHjobPOQWeugCeehi8NBF6KEr5KGrwUMeoYdukIduBg/dhB66Qx66GzzkFXroAXnoYfDQQ+ihJ+Shp8FDPqGHXpCHXgYPvYQeekMeehs85Bd66AN56GPw0EfooS/koa/BQwGhh36Qh34GD/2EHvpDHvobPBQUehgAeRhg8DBA6GEg5GGgwUMhoYdBkIdBBg+DhB4GQx4GGzwUFnoYAnkYYvAwROhhKORhqMFDEaGHYZCHYQYPw4QehkMehhs8FBV6GAF5GGHwMELoYSTkYaTBQzGhh1GQh1EGD6OEHkZDHkYbPBQXehgDeRhj8DBG6GEs5GGswUMJoYdxkIdxBg/jhB7GQx7GGzyUFHqYAHmYYPAwQehhIuRhosFDKaGHSZCHSQYPk4QeJkMeJhs8lBZ6mAJ5mGLwMEXoYSrkYarBQxmhh2mQh2kGD9OEHqZDHqYbPJQVepgBeZhh8DBD6GEm5GGmwUM5oYdZkIdZBg+zhB5mQx5mGzyUF3qYA3mYY/AwR+hhLuRhrsFDBaGHeZCHeQYP84Qe5kMe5hs8VBR6WAB5WGDwsEDoYSHkYaHBQyWhh0WQh0UGD4uEHhZDHhYbPFQWelgCeVhi8LBE6GEp5GGpwUMVoYdlkIdlBg/LhB6WQx6WGzxUFXpYAXlYYfCwQuhhJeRhpcFDNaGHVZCHVQYPq4QeVkMeVhs8VBd6WAN5WGPwsEboYS3kYa3BQw2hh3WQh3UGD+uEHtZDHtYbPNQUetgAedhg8LBB6GEj5GGjwUMtoYdNkIdNBg+bhB42Qx42GzzUFnrYAnnYYvCwRehhK+Rhq8FDHaGHbZCHbQYP24QetkMeths81BV62AF52GHwsEPoYSfkYafBQz2hh12Qh10GD7uEHnZDHnYbPNQXetgDedhj8LBH6GEv5GGvwUMDoYd9kId9Bg/7hB72Qx72Gzw0FHo4AHk4YPBwQOjhIOThoMFDI6GHQ5CHQwYPh4QeDkMeDhs8NBZ6OAJ5OGLwcETo4Sjk4ajBQxOhh2OQh2MGD8eEHo5DHo4bPDQVejgBeThh8HBC6OEk5OGkwUMzoYdTkIdTBg+nhB5OQx5OGzw0F3o4A3k4Y/BwRujhLOThrMFDC6GHc5CHcwYP54QezkMezhs8tBR6uAB5uGDwcEHo4SLk4aLBQyuhh0uQh0sGD5eEHi5DHi4bPLQWergCebhi8HBF6OEq5OGqwUMboYdrkIdrBg/XhB6uQx6uGzy0FXq4AXm4YfBwQ+jhJuThpsFDO6GHW5CHWwYPt4QebkMebhs8tBd6uAN5uGPwcEfo4S7k4a7BQwehh3uQh3sGD/eEHu5DHu4bPHQUengAeXhg8PBA6OEh5OGhwUMnoYdHkIdHBg+PhB4eQx4eGzx0Fnp4Anl4YvDwROjhKeThqcFDF6GHZ5CHZwYPz4QenkMenhs8dBV6eAF5eGHw8ELo4SXk4aXBQzehh1eQh1cGD6+EHl5DHl4bPHQXengDeXhj8PBG6OEt5OGtwUMPoYd3kId3Bg/vhB7eQx7eGzz0FHr4AHn4YPDwQejhI+Tho8FDL6GHT5CHTwYPn4QePkMePhs89BZ6+AJ5+GLw8EXo4Svk4avBQx+hh2+Qh28GD9+EHr5DHr4bPPQVevgBefhh8PBD6OEn5OGnwUM/oYdfkIdfBg+/hB5+Qx5+Gzz0F3r4A3n4Y/DwR+jhL+Thr8HDAKGHf54zHv7TpT389/b/tfXvc8bDv895DwOFHgJAHgIYPAQQeggIeQho8DBI6CEQ5CGQwUMgoYfAkIfABg+DhR6CQB6CGDwEEXoICnkIavAwROghGOQhmMFDMKGH4JCH4AYPQ4UeQkAeQhg8hBB6CAl5CGnwMEzoIRTkIZTBQyihh9CQh9AGD8OFHsJAHsIYPIQReggLeQhr8DBC6CEc5CGcwUM4oYfwkIfwBg8jhR4iQB4iGDxEEHqICHmIaPAwSughEuQhksFDJKGHyJCHyAYPo4UeokAeohg8RBF6iAp5iGrwMEboIRrkIZrBQzShh+iQh+gGD2OFHmJAHmIYPMQQeogJeYhp8DBO6CEW5CGWwUMsoYfYkIfYBg/jhR7iQB7iGDzEEXqIC3mIa/AwQeghHuQhnsFDPKGH+JCH+AYPE4UeEkAeEhg8JBB6SAh5SGjwMEnoIRHkIZHBQyKhh8SQh8QGD5OFHpJAHpIYPCQRekgKeUhq8DBF6CEZ5CGZwUMyoYfkkIfkBg9ThR5SQB5SGDykEHpICXlIafAwTeghFeQhlcFDKqGH1JCH1AYP04Ue0kAe0hg8pBF6SAt5SGvwMEPoIR3kIZ3BQzqhh/SQh/QGDzOFHjJAHjIYPGQQesgIecho8DBL6CET5CGTwUMmoYfMkIfMBg+zhR6yQB6yGDxkEXrICnnIavAwR+ghG+Qhm8FDNqGH7JCH7AYPc4UeckAechg85BB6yAl5yGnwME/oIRfkIZfBQy6hh9yQh9wGD/OFHvJAHvIYPOQResgLechr8LBA6CEf5CGfwUM+oYf8kIf8Bg8LhR4KQB4KGDwUEHooCHkoaPCwSOihEOShkMFDIaGHwpCHwgYPi4UeikAeihg8FBF6KAp5KGrwsETooRjkoZjBQzGhh+KQh+IGD0uFHkpAHkoYPJQQeigJeShp8LBM6KEU5KGUwUMpoYfSkIfSBg/LhR7KQB7KGDyUEXooC3koa/CwQuihHOShnMFDOaGH8pCH8gYPK4UeKkAeKhg8VBB6qAh5qGjwsErooRLkoZLBQyWhh8qQh8oGD6uFHqpAHqoYPFQReqgKeahq8LBG6KEa5KGawUM1oYfqkIfqBg9rhR5qQB5qGDzUEHqoCXmoafCwTuihFuShlsFDLaGH2pCH2gYP64Ue6kAe6hg81BF6qAt5qGvwsEHooR7koZ7BQz2hh/qQh/oGDxuFHhpAHhoYPDQQemgIeWho8LBJ6KER5KGRwUMjoYfGkIfGBg+bhR6aQB6aGDw0EXpoCnloavCwReihGeShmcFDM6GH5pCH5gYPW4UeWkAeWhg8tBB6aAl5aGnwsE3ooRXkoZXBQyuhh9aQh9YGD9uFHtpAHtoYPLQRemgLeWhr8LBD6KEd5KGdwUM7oYf2kIf2Bg87hR46QB46GDx0EHroCHnoaPCwS+ihE+Shk8FDJ6GHzpCHzgYPu4UeukAeuhg8dBF66Ap56GrwsEfooRvkoZvBQzehh+6Qh+4GD3uFHnpAHnoYPPQQeugJeehp8LBP6KEX5KGXwUMvoYfekIfeBg/7hR76QB76GDz0EXroC3noa/BwQOihH+Shn8FDP6GH/pCH/gYPB4UeBkAeBhg8DBB6GAh5GGjwcEjoYRDkYZDBwyChh8GQh8EGD4eFHoZAHoYYPAwRehgKeRhq8HBE6GEY5GGYwcMwoYfhkIfhBg9HhR5GQB5GGDyMEHoYCXkYafBwTOhhFORhlMHDKKGH0ZCH0QYPx4UexkAexhg8jBF6GAt5GGvwcELoYRzkYZzBwzihh/GQh/EGDyeFHiZAHiYYPEwQepgIeZho8HBK6GES5GGSwcMkoYfJkIfJBg+nhR6mQB6mGDxMEXqYCnmYavBwRuhhGuRhmsHDNKGH6ZCH6QYPZ4UeZkAeZhg8zBB6mAl5mGnwcE7oYRbkYZbBwyyhh9mQh9kGD+eFHuZAHuYYPMwRepgLeZhr8HBB6GEe5GGewcM8oYf5kIf5Bg8XhR4WQB4WGDwsEHpYCHlYaPBwSehhEeRhkcHDIqGHxZCHxQYPl4UelkAelhg8LBF6WAp5WGrwcEXoYRnkYZnBwzKhh+WQh+UGD1eFHlZAHlYYPKwQelgJeVhp8HBN6GEV5GGVwcMqoYfVkIfVBg/XhR7WQB7WGDysEXpYC3lYa/BwQ+hhHeRhncHDOqGH9ZCH9QYPN4UeNkAeNhg8bBB62Ah52GjwcEvoYRPkYZPBwyahh82Qh80GD7eFHrZAHrYYPGwRetgKedhq8HBH6GEb5GGbwcM2oYftkIftBg93hR52QB52GDzsEHrYCXnYafBwT+hhF+Rhl8HDLqGH3ZCH3QYP94Ue9kAe9hg87BF62At52Gvw8EDoYR/kYZ/Bwz6hh/2Qh/0GDw+FHg5AHg4YPBwQejgIeTho8PBI6OEQ5OGQwcMhoYfDkIfDBg+PhR6OQB6OGDwcEXo4Cnk4avDwROjhGOThmMHDMaGH45CH4wYPT4UeTkAeThg8nBB6OAl5OGnw8Ezo4RTk4ZTBwymhh9OQh9MGD8+FHs5AHs4YPJwRejgLeThr8PBC6OEc5OGcwcM5oYfzkIfzBg8vhR4uQB4uGDxcEHq4CHm4aPDwSujhEuThksHDJaGHy5CHywYPr4UerkAerhg8XBF6uAp5uGrw8Ebo4Rrk4ZrBwzWhh+uQh+sGD2+FHm5AHm4YPNwQergJebhp8PBO6OEW5OGWwcMtoYfbkIfbBg/vhR7uQB7uGDzcEXq4C3m4a/DwQejhHuThnsHDPaGH+5CH+wYPH4UeHkAeHhg8PBB6eAh5eGjw8Eno4RHk4ZHBwyOhh8eQh8cGD5+FHp5AHp4YPDwRengKeXhq8PBF6OEZ5OGZwcMzoYfnkIfnBg9fhR5eQB5eGDy8EHp4CXl4afDwTejhFeThlcHDK6GH15CH1wYP34Ue3kAe3hg8vBF6eAt5eGvw8EPo4R3k4Z3Bwzuhh/eQh/cGDz+FHj5AHj4YPHwQevgIefho8PBL6OET5OGTwcMnoYfPkIfPBg+/hR6+QB6+GDx8EXr4Cnn4avDwR+jhG+Thm8HDN6GH75CH7wYPf4UefkAefhg8/BB6+Al5+Gnw8E9p3R1+QR5+GTz8Enr4DXn4bfDwr9DDH8jDH4OHP0IPfyEPfw0eAgg9/POC8fCfLu3hv7f/r61/XzAe/n3Bewgo9BAA8hDA4CGA0ENAyENAg4dAQg+BIA+BDB4CCT0EhjwENngILPQQBPIQxOAhiNBDUMhDUIOHIEIPwSAPwQweggk9BIc8BDd4CCr0EALyEMLgIYTQQ0jIQ0iDh2BCD6EgD6EMHkIJPYSGPIQ2eAgu9BAG8hDG4CGM0ENYyENYg4cQQg/hIA/hDB7CCT2EhzyEN3gIKfQQAfIQweAhgtBDRMhDRIOHUEIPkSAPkQweIgk9RIY8RDZ4CC30EAXyEMXgIYrQQ1TIQ1SDhzBCD9EgD9EMHqIJPUSHPEQ3eAgr9BAD8hDD4CGG0ENMyENMg4dwQg+xIA+xDB5iCT3EhjzENngIL/QQB/IQx+AhjtBDXMhDXIOHCEIP8SAP8Qwe4gk9xIc8xDd4iCj0kADykMDgIYHQQ0LIQ0KDh0hCD4kgD4kMHhIJPSSGPCQ2eIgs9JAE8pDE4CGJ0ENSyENSg4coQg/JIA/JDB6SCT0khzwkN3iIKvSQAvKQwuAhhdBDSshDSoOHaEIPqSAPqQweUgk9pIY8pDZ4iC70kAbykMbgIY3QQ1rIQ1qDhxhCD+kgD+kMHtIJPaSHPKQ3eIgp9JAB8pDB4CGD0ENGyENGg4dYQg+ZIA+ZDB4yCT1khjxkNniILfSQBfKQxeAhi9BDVshDVoOHOEIP2SAP2Qwesgk9ZIc8ZDd4iCv0kAPykMPgIYfQQ07IQ06Dh3hCD7kgD7kMHnIJPeSGPOQ2eIgv9JAH8pDH4CGP0ENeyENeg4cEQg/5IA/5DB7yCT3khzzkN3hIKPRQAPJQwOChgNBDQchDQYOHREIPhSAPhQweCgk9FIY8FDZ4SCz0UATyUMTgoYjQQ1HIQ1GDhyRCD8UgD8UMHooJPRSHPBQ3eEgq9FAC8lDC4KGE0ENJyENJg4dkQg+lIA+lDB5KCT2UhjyUNnhILvRQBvJQxuChjNBDWchDWYOHFEIP5SAP5Qweygk9lIc8lDd4SCn0UAHyUMHgoYLQQ0XIQ0WDh1RCD5UgD5UMHioJPVSGPFQ2eEgt9FAF8lDF4KGK0ENVyENVg4c0Qg/VIA/VDB6qCT1UhzxUN3hIK/RQA/JQw+ChhtBDTchDTYOHdEIPtSAPtQweagk91IY81DZ4SC/0UAfyUMfgoY7QQ13IQ12DhwxCD/UgD/UMHuoJPdSHPNQ3eMgo9NAA8tDA4KGB0ENDyENDg4dMQg+NIA+NDB4aCT00hjw0NnjILPTQBPLQxOChidBDU8hDU4OHLEIPzSAPzQwemgk9NIc8NDd4yCr00ALy0MLgoYXQQ0vIQ0uDh2xCD60gD60MHloJPbSGPLQ2eMgu9NAG8tDG4KGN0ENbyENbg4ccQg/tIA/tDB7aCT20hzy0N3jIKfTQAfLQweChg9BDR8hDR4OHXEIPnSAPnQweOgk9dIY8dDZ4yC300AXy0MXgoYvQQ1fIQ1eDhzxCD90gD90MHroJPXSHPHQ3eMgr9NAD8tDD4KGH0ENPyENPg4d8Qg+9IA+9DB56CT30hjz0NnjIL/TQB/LQx+Chj9BDX8hDX4OHAkIP/SAP/Qwe+gk99Ic89Dd4KCj0MADyMMDgYYDQw0DIw0CDh0JCD4MgD4MMHgYJPQyGPAw2eCgs9DAE8jDE4GGI0MNQyMNQg4ciQg/DIA/DDB6GCT0MhzwMN3goKvQwAvIwwuBhhNDDSMjDSIOHYkIPoyAPowweRgk9jIY8jDZ4KC70MAbyMMbgYYzQw1jIw1iDhxJCD+MgD+MMHsYJPYyHPIw3eCgp9DAB8jDB4GGC0MNEyMNEg4dSQg+TIA+TDB4mCT1MhjxMNngoLfQwBfIwxeBhitDDVMjDVIOHMkIP0yAP0wwepgk9TIc8TDd4KCv0MAPyMMPgYYbQw0zIw0yDh3JCD7MgD7MMHmYJPcyGPMw2eCgv9DAH8jDH4GGO0MNcyMNcg4cKQg/zIA/zDB7mCT3MhzzMN3ioKPSwAPKwwOBhgdDDQsjDQoOHSkIPiyAPiwweFgk9LIY8LDZ4qCz0sATysMTgYYnQw1LIw1KDhypCD8sgD8sMHpYJPSyHPCw3eKgq9LAC8rDC4GGF0MNKyMNKg4dqQg+rIA+rDB5WCT2shjysNnioLvSwBvKwxuBhjdDDWsjDWoOHGkIP6yAP6wwe1gk9rIc8rDd4qCn0sAHysMHgYYPQw0bIw0aDh1pCD5sgD5sMHjYJPWyGPGw2eKgt9LAF8rDF4GGL0MNWyMNWg4c6Qg/bIA/bDB62CT1shzxsN3ioK/SwA/Kww+Bhh9DDTsjDToOHekIPuyAPuwwedgk97IY87DZ4qC/0sAfysMfgYY/Qw17Iw16DhwZCD/sgD/sMHvYJPeyHPOw3eGgo9HAA8nDA4OGA0MNByMNBg4dGQg+HIA+HDB4OCT0chjwcNnhoLPRwBPJwxODhiNDDUcjDUYOHJkIPxyAPxwwejgk9HIc8HDd4aCr0cALycMLg4YTQw0nIw0mDh2ZCD6cgD6cMHk4JPZyGPJw2eGgu9HAG8nDG4OGM0MNZyMNZg4cWQg/nIA/nDB7OCT2chzycN3hoKfRwAfJwweDhgtDDRcjDRYOHVkIPlyAPlwweLgk9XIY8XDZ4aC30cAXycMXg4YrQw1XIw1WDhzZCD9cgD9cMHq4JPVyHPFw3eGgr9HAD8nDD4OGG0MNNyMNNg4d2Qg+3IA+3DB5uCT3chjzcNnhoL/RwB/Jwx+DhjtDDXcjDXYOHDkIP9yAP9wwe7gk93Ic83Dd46Cj08ADy8MDg4YHQw0PIw0ODh05CD48gD48MHh4JPTyGPDw2eOgs9PAE8vDE4OGJ0MNTyMNTg4cuQg/PIA/PDB6eCT08hzw8N3joKvTwAvLwwuDhhdDDS8jDS4OHbkIPryAPrwweXgk9vIY8vDZ46C708Aby8Mbg4Y3Qw1vIw1uDhx5CD+8gD+8MHt4JPbyHPLw3eOgp9PAB8vDB4OGD0MNHyMNHg4deQg+fIA+fDB4+CT18hjx8NnjoLfTwBfLwxeDhi9DDV8jDV4OHPkIP3yAP3wwevgk9fIc8fDd46Cv08APy8MPg4YfQw0/Iw0+Dh35CD78gD78MHn4JPfyGPPw2eOgv9PAH8vDH4OGP0MNfyMNfg4cBQg//vGQ8/KdLe/jv7f9r69+XjId/X/IeBgo9BIA8BDB4CCD0EBDyENDgYZDQQyDIQyCDh0BCD4EhD4ENHgYLPQSBPAQxeAgi9BAU8hDU4GGI0EMwyEMwg4dgQg/BIQ/BDR6GCj2EgDyEMHgIIfQQEvIQ0uBhmNBDKMhDKIOHUEIPoSEPoQ0ehgs9hIE8hDF4CCP0EBbyENbgYYTQQzjIQziDh3BCD+EhD+ENHkYKPUSAPEQweIgg9BAR8hDR4GGU0EMkyEMkg4dIQg+RIQ+RDR5GCz1EgTxEMXiIIvQQFfIQ1eBhjNBDNMhDNIOHaEIP0SEP0Q0exgo9xIA8xDB4iCH0EBPyENPgYZzQQyzIQyyDh1hCD7EhD7ENHsYLPcSBPMQxeIgj9BAX8hDX4GGC0EM8yEM8g4d4Qg/xIQ/xDR4mCj0kgDwkMHhIIPSQEPKQ0OBhktBDIshDIoOHREIPiSEPiQ0eJgs9JIE8JDF4SCL0kBTykNTgYYrQQzLIQzKDh2RCD8khD8kNHqYKPaSAPKQweEgh9JAS8pDS4GGa0EMqyEMqg4dUQg+pIQ+pDR6mCz2kgTykMXhII/SQFvKQ1uBhhtBDOshDOoOHdEIP6SEP6Q0eZgo9ZIA8ZDB4yCD0kBHykNHgYZbQQybIQyaDh0xCD5khD5kNHmYLPWSBPGQxeMgi9JAV8pDV4GGO0EM2yEM2g4dsQg/ZIQ/ZDR7mCj3kgDzkMHjIIfSQE/KQ0+BhntBDLshDLoOHXEIPuSEPuQ0e5gs95IE85DF4yCP0kBfykNfgYYHQQz7IQz6Dh3xCD/khD/kNHhYKPRSAPBQweCgg9FAQ8lDQ4GGR0EMhyEMhg4dCQg+FIQ+FDR4WCz0UgTwUMXgoIvRQFPJQ1OBhidBDMchDMYOHYkIPxSEPxQ0elgo9lIA8lDB4KCH0UBLyUNLgYZnQQynIQymDh1JCD6UhD6UNHpYLPZSBPJQxeCgj9FAW8lDW4GGF0EM5yEM5g4dyQg/lIQ/lDR5WCj1UgDxUMHioIPRQEfJQ0eBhldBDJchDJYOHSkIPlSEPlQ0eVgs9VIE8VDF4qCL0UBXyUNXgYY3QQzXIQzWDh2pCD9UhD9UNHtYKPdSAPNQweKgh9FAT8lDT4GGd0EMtyEMtg4daQg+1IQ+1DR7WCz3UgTzUMXioI/RQF/JQ1+Bhg9BDPchDPYOHekIP9SEP9Q0eNgo9NIA8NDB4aCD00BDy0NDgYZPQQyPIQyODh0ZCD40hD40NHjYLPTSBPDQxeGgi9NAU8tDU4GGL0EMzyEMzg4dmQg/NIQ/NDR62Cj20gDy0MHhoIfTQEvLQ0uBhm9BDK8hDK4OHVkIPrSEPrQ0etgs9tIE8tDF4aCP00Bby0NbgYYfQQzvIQzuDh3ZCD+0hD+0NHnYKPXSAPHQweOgg9NAR8tDR4GGX0EMnyEMng4dOQg+dIQ+dDR52Cz10gTx0MXjoIvTQFfLQ1eBhj9BDN8hDN4OHbkIP3SEP3Q0e9go99IA89DB46CH00BPy0NPgYZ/QQy/IQy+Dh15CD70hD70NHvYLPfSBPPQxeOgj9NAX8tDX4OGA0EM/yEM/g4d+Qg/9IQ/9DR4OCj0MgDwMMHgYIPQwEPIw0ODhkNDDIMjDIIOHQUIPgyEPgw0eDgs9DIE8DDF4GCL0MBTyMNTg4YjQwzDIwzCDh2FCD8MhD8MNHo4KPYyAPIwweBgh9DAS8jDS4OGY0MMoyMMog4dRQg+jIQ+jDR6OCz2MgTyMMXgYI/QwFvIw1uDhhNDDOMjDOIOHcUIP4yEP4w0eTgo9TIA8TDB4mCD0MBHyMNHg4ZTQwyTIwySDh0lCD5MhD5MNHk4LPUyBPEwxeJgi9DAV8jDV4OGM0MM0yMM0g4dpQg/TIQ/TDR7OCj3MgDzMMHiYIfQwE/Iw0+DhnNDDLMjDLIOHWUIPsyEPsw0ezgs9zIE8zDF4mCP0MBfyMNfg4YLQwzzIwzyDh3lCD/MhD/MNHi4KPSyAPCwweFgg9LAQ8rDQ4OGS0MMiyMMig4dFQg+LIQ+LDR4uCz0sgTwsMXhYIvSwFPKw1ODhitDDMsjDMoOHZUIPyyEPyw0ergo9rIA8rDB4WCH0sBLysNLg4ZrQwyrIwyqDh1VCD6shD6sNHq4LPayBPKwxeFgj9LAW8rDW4OGG0MM6yMM6g4d1Qg/rIQ/rDR5uCj1sgDxsMHjYIPSwEfKw0eDhltDDJsjDJoOHTUIPmyEPmw0ebgs9bIE8bDF42CL0sBXysNXg4Y7QwzbIwzaDh21CD9shD9sNHu4KPeyAPOwweNgh9LAT8rDT4OGe0MMuyMMug4ddQg+7IQ+7DR7uCz3sgTzsMXjYI/SwF/Kw1+DhgdDDPsjDPoOHfUIP+yEP+w0eHgo9HIA8HDB4OCD0cBDycNDg4ZHQwyHIwyGDh0NCD4chD4cNHh4LPRyBPBwxeDgi9HAU8nDU4OGJ0MMxyMMxg4djQg/HIQ/HDR6eCj2cgDycMHg4IfRwEvJw0uDhmdDDKcjDKYOHU0IPpyEPpw0engs9nIE8nDF4OCP0cBbycNbg4YXQwznIwzmDh3NCD+chD+cNHl4KPVyAPFwweLgg9HAR8nDR4OGV0MMlyMMlg4dLQg+XIQ+XDR5eCz1cgTxcMXi4IvRwFfJw1eDhjdDDNcjDNYOHa0IP1yEP1w0e3go93IA83DB4uCH0cBPycNPg4Z3Qwy3Iwy2Dh1tCD7chD7cNHt4LPdyBPNwxeLgj9HAX8nDX4OGD0MM9yMM9g4d7Qg/3IQ/3DR4+Cj08gDw8MHh4IPTwEPLw0ODhk9DDI8jDI4OHR0IPjyEPjw0ePgs9PIE8PDF4eCL08BTy8NTg4YvQwzPIwzODh2dCD88hD88NHr4KPbyAPLwweHgh9PAS8vDS4OGb0MMryMMrg4dXQg+vIQ+vDR6+Cz28gTy8MXh4I/TwFvLw1uDhh9DDO8jDO4OHd0IP7yEP7w0efgo9fIA8fDB4+CD08BHy8NHg4ZfQwyfIwyeDh09CD58hD58NHn4LPXyBPHwxePgi9PAV8vDV4OGP0MM3yMM3g4dvQg/fIQ/fDR7+Cj38gDz8MHj4IfTwE/Lw0+DhnzK6O/yCPPwyePgl9PAb8vDb4OFfoYc/kIc/Bg9/hB7+Qh7+GjwEEHr45xXj4T9d2sN/b/9fW/++Yjz8+4r3EFDoIQDkIYDBQwChh4CQh4AGD4GEHgJBHgIZPAQSeggMeQhs8BBY6CEI5CGIwUMQoYegkIegBg9BhB6CQR6CGTwEE3oIDnkIbvAQVOghBOQhhMFDCKGHkJCHkAYPwYQeQkEeQhk8hBJ6CA15CG3wEFzoIQzkIYzBQxihh7CQh7AGDyGEHsJBHsIZPIQTeggPeQhv8BBS6CEC5CGCwUMEoYeIkIeIBg+hhB4iQR4iGTxEEnqIDHmIbPAQWughCuQhisFDFKGHqJCHqAYPYYQeokEeohk8RBN6iA55iG7wEFboIQbkIYbBQwyhh5iQh5gGD+GEHmJBHmIZPMQSeogNeYht8BBe6CEO5CGOwUMcoYe4kIe4Bg8RhB7iQR7iGTzEE3qID3mIb/AQUeghAeQhgcFDAqGHhJCHhAYPkYQeEkEeEhk8JBJ6SAx5SGzwEFnoIQnkIYnBQxKhh6SQh6QGD1GEHpJBHpIZPCQTekgOeUhu8BBV6CEF5CGFwUMKoYeUkIeUBg/RhB5SQR5SGTykEnpIDXlIbfAQXeghDeQhjcFDGqGHtJCHtAYPMYQe0kEe0hk8pBN6SA95SG/wEFPoIQPkIYPBQwahh4yQh4wGD7GEHjJBHjIZPGQSesgMechs8BBb6CEL5CGLwUMWoYeskIesBg9xhB6yQR6yGTxkE3rIDnnIbvAQV+ghB+Qhh8FDDqGHnJCHnAYP8YQeckEechk85BJ6yA15yG3wEF/oIQ/kIY/BQx6hh7yQh7wGDwmEHvJBHvIZPOQTesgPechv8JBQ6KEA5KGAwUMBoYeCkIeCBg+JhB4KQR4KGTwUEnooDHkobPCQWOihCOShiMFDEaGHopCHogYPSYQeikEeihk8FBN6KA55KG7wkFTooQTkoYTBQwmhh5KQh5IGD8mEHkpBHkoZPJQSeigNeSht8JBc6KEM5KGMwUMZoYeykIeyBg8phB7KQR7KGTyUE3ooD3kob/CQUuihAuShgsFDBaGHipCHigYPqYQeKkEeKhk8VBJ6qAx5qGzwkFrooQrkoYrBQxWhh6qQh6oGD2mEHqpBHqoZPFQTeqgOeahu8JBW6KEG5KGGwUMNoYeakIeaBg/phB5qQR5qGTzUEnqoDXmobfCQXuihDuShjsFDHaGHupCHugYPGYQe6kEe6hk81BN6qA95qG/wkFHooQHkoYHBQwOhh4aQh4YGD5mEHhpBHhoZPDQSemgMeWhs8JBZ6KEJ5KGJwUMToYemkIemBg9ZhB6aQR6aGTw0E3poDnlobvCQVeihBeShhcFDC6GHlpCHlgYP2YQeWkEeWhk8tBJ6aA15aG3wkF3ooQ3koY3BQxuhh7aQh7YGDzmEHtpBHtoZPLQTemgPeWhv8JBT6KED5KGDwUMHoYeOkIeOBg+5hB46QR46GTx0EnroDHnobPCQW+ihC+Shi8FDF6GHrpCHrgYPeYQeukEeuhk8dBN66A556G7wkFfooQfkoYfBQw+hh56Qh54GD/mEHnpBHnoZPPQSeugNeeht8JBf6KEP5KGPwUMfoYe+kIe+Bg8FhB76QR76GTz0E3roD3nob/BQUOhhAORhgMHDAKGHgZCHgQYPhYQeBkEeBhk8DBJ6GAx5GGzwUFjoYQjkYYjBwxChh6GQh6EGD0WEHoZBHoYZPAwTehgOeRhu8FBU6GEE5GGEwcMIoYeRkIeRBg/FhB5GQR5GGTyMEnoYDXkYbfBQXOhhDORhjMHDGKGHsZCHsQYPJYQexkEexhk8jBN6GA95GG/wUFLoYQLkYYLBwwShh4mQh4kGD6WEHiZBHiYZPEwSepgMeZhs8FBa6GEK5GGKwcMUoYepkIepBg9lhB6mQR6mGTxME3qYDnmYbvBQVuhhBuRhhsHDDKGHmZCHmQYP5YQeZkEeZhk8zBJ6mA15mG3wUF7oYQ7kYY7Bwxyhh7mQh7kGDxWEHuZBHuYZPMwTepgPeZhv8FBR6GEB5GGBwcMCoYeFkIeFBg+VhB4WQR4WGTwsEnpYDHlYbPBQWehhCeRhicHDEqGHpZCHpQYPVYQelkEelhk8LBN6WA55WG7wUFXoYQXkYYXBwwqhh5WQh5UGD9WEHlZBHlYZPKwSelgNeVht8FBd6GEN5GGNwcMaoYe1kIe1Bg81hB7WQR7WGTysE3pYD3lYb/BQU+hhA+Rhg8HDBqGHjZCHjQYPtYQeNkEeNhk8bBJ62Ax52GzwUFvoYQvkYYvBwxahh62Qh60GD3WEHrZBHrYZPGwTetgOedhu8FBX6GEH5GGHwcMOoYedkIedBg/1hB52QR52GTzsEnrYDXnYbfBQX+hhD+Rhj8HDHqGHvZCHvQYPDYQe9kEe9hk87BN62A952G/w0FDo4QDk4YDBwwGhh4OQh4MGD42EHg5BHg4ZPBwSejgMeThs8NBY6OEI5OGIwcMRoYejkIejBg9NhB6OQR6OGTwcE3o4Dnk4bvDQVOjhBOThhMHDCaGHk5CHkwYPzYQeTkEeThk8nBJ6OA15OG3w0Fzo4Qzk4YzBwxmhh7OQh7MGDy2EHs5BHs4ZPJwTejgPeThv8NBS6OEC5OGCwcMFoYeLkIeLBg+thB4uQR4uGTxcEnq4DHm4bPDQWujhCuThisHDFaGHq5CHqwYPbYQerkEerhk8XBN6uA55uG7w0Fbo4Qbk4YbBww2hh5uQh5sGD+2EHm5BHm4ZPNwSergNebht8NBe6OEO5OGOwcMdoYe7kIe7Bg8dhB7uQR7uGTzcE3q4D3m4b/DQUejhAeThgcHDA6GHh5CHhwYPnYQeHkEeHhk8PBJ6eAx5eGzw0Fno4Qnk4YnBwxOhh6eQh6cGD12EHp5BHp4ZPDwTengOeXhu8NBV6OEF5OGFwcMLoYeXkIeXBg/dhB5eQR5eGTy8Enp4DXl4bfDQXejhDeThjcHDG6GHt5CHtwYPPYQe3kEe3hk8vBN6eA95eG/w0FPo4QPk4YPBwwehh4+Qh48GD72EHj5BHj4ZPHwSevgMefhs8NBb6OEL5OGLwcMXoYevkIevBg99hB6+QR6+GTx8E3r4Dnn4bvDQV+jhB+Thh8HDD6GHn5CHnwYP/YQefkEefhk8/BJ6+A15+G3w0F/o4Q/k4Y/Bwx+hh7+Qh78GDwOEHv55zXj4T5f28N/b/9fWv68ZD/++5j0MFHoIAHkIYPAQQOghIOQhoMHDIKGHQJCHQAYPgYQeAkMeAhs8DBZ6CAJ5CGLwEEToISjkIajBwxChh2CQh2AGD8GEHoJDHoIbPAwVeggBeQhh8BBC6CEk5CGkwcMwoYdQkIdQBg+hhB5CQx5CGzwMF3oIA3kIY/AQRughLOQhrMHDCKGHcJCHcAYP4YQewkMewhs8jBR6iAB5iGDwEEHoISLkIaLBwyihh0iQh0gGD5GEHiJDHiIbPIwWeogCeYhi8BBF6CEq5CGqwcMYoYdokIdoBg/RhB6iQx6iGzyMFXqIAXmIYfAQQ+ghJuQhpsHDOKGHWJCHWAYPsYQeYkMeYhs8jBd6iAN5iGPwEEfoIS7kIa7BwwShh3iQh3gGD/GEHuJDHuIbPEwUekgAeUhg8JBA6CEh5CGhwcMkoYdEkIdEBg+JhB4SQx4SGzxMFnpIAnlIYvCQROghKeQhqcHDFKGHZJCHZAYPyYQekkMekhs8TBV6SAF5SGHwkELoISXkIaXBwzShh1SQh1QGD6mEHlJDHlIbPEwXekgDeUhj8JBG6CEt5CGtwcMMoYd0kId0Bg/phB7SQx7SGzzMFHrIAHnIYPCQQeghI+Qho8HDLKGHTJCHTAYPmYQeMkMeMhs8zBZ6yAJ5yGLwkEXoISvkIavBwxyhh2yQh2wGD9mEHrJDHrIbPMwVesgBechh8JBD6CEn5CGnwcM8oYdckIdcBg+5hB5yQx5yGzzMF3rIA3nIY/CQR+ghL+Qhr8HDAqGHfJCHfAYP+YQe8kMe8hs8LBR6KAB5KGDwUEDooSDkoaDBwyKhh0KQh0IGD4WEHgpDHgobPCwWeigCeShi8FBE6KEo5KGowcMSoYdikIdiBg/FhB6KQx6KGzwsFXooAXkoYfBQQuihJOShpMHDMqGHUpCHUgYPpYQeSkMeShs8LBd6KAN5KGPwUEbooSzkoazBwwqhh3KQh3IGD+WEHspDHsobPKwUeqgAeahg8FBB6KEi5KGiwcMqoYdKkIdKBg+VhB4qQx4qGzysFnqoAnmoYvBQReihKuShqsHDGqGHapCHagYP1YQeqkMeqhs8rBV6qAF5qGHwUEPooSbkoabBwzqhh1qQh1oGD7WEHmpDHmobPKwXeqgDeahj8FBH6KEu5KGuwcMGoYd6kId6Bg/1hB7qQx7qGzxsFHpoAHloYPDQQOihIeShocHDJqGHRpCHRgYPjYQeGkMeGhs8bBZ6aAJ5aGLw0ETooSnkoanBwxahh2aQh2YGD82EHppDHpobPGwVemgBeWhh8NBC6KEl5KGlwcM2oYdWkIdWBg+thB5aQx5aGzxsF3poA3loY/DQRuihLeShrcHDDqGHdpCHdgYP7YQe2kMe2hs87BR66AB56GDw0EHooSPkoaPBwy6hh06Qh04GD52EHjpDHjobPOwWeugCeehi8NBF6KEr5KGrwcMeoYdukIduBg/dhB66Qx66GzzsFXroAXnoYfDQQ+ihJ+Shp8HDPqGHXpCHXgYPvYQeekMeehs87Bd66AN56GPw0EfooS/koa/BwwGhh36Qh34GD/2EHvpDHvobPBwUehgAeRhg8DBA6GEg5GGgwcMhoYdBkIdBBg+DhB4GQx4GGzwcFnoYAnkYYvAwROhhKORhqMHDEaGHYZCHYQYPw4QehkMehhs8HBV6GAF5GGHwMELoYSTkYaTBwzGhh1GQh1EGD6OEHkZDHkYbPBwXehgDeRhj8DBG6GEs5GGswcMJoYdxkIdxBg/jhB7GQx7GGzycFHqYAHmYYPAwQehhIuRhosHDKaGHSZCHSQYPk4QeJkMeJhs8nBZ6mAJ5mGLwMEXoYSrkYarBwxmhh2mQh2kGD9OEHqZDHqYbPJwVepgBeZhh8DBD6GEm5GGmwcM5oYdZkIdZBg+zhB5mQx5mGzycF3qYA3mYY/AwR+hhLuRhrsHDBaGHeZCHeQYP84Qe5kMe5hs8XBR6WAB5WGDwsEDoYSHkYaHBwyWhh0WQh0UGD4uEHhZDHhYbPFwWelgCeVhi8LBE6GEp5GGpwcMVoYdlkIdlBg/LhB6WQx6WGzxcFXpYAXlYYfCwQuhhJeRhpcHDNaGHVZCHVQYPq4QeVkMeVhs8XBd6WAN5WGPwsEboYS3kYa3Bww2hh3WQh3UGD+uEHtZDHtYbPNwUetgAedhg8LBB6GEj5GGjwcMtoYdNkIdNBg+bhB42Qx42GzzcFnrYAnnYYvCwRehhK+Rhq8HDHaGHbZCHbQYP24QetkMeths83BV62AF52GHwsEPoYSfkYafBwz2hh12Qh10GD7uEHnZDHnYbPNwXetgDedhj8LBH6GEv5GGvwcMDoYd9kId9Bg/7hB72Qx72Gzw8FHo4AHk4YPBwQOjhIOThoMHDI6GHQ5CHQwYPh4QeDkMeDhs8PBZ6OAJ5OGLwcETo4Sjk4ajBwxOhh2OQh2MGD8eEHo5DHo4bPDwVejgBeThh8HBC6OEk5OGkwcMzoYdTkIdTBg+nhB5OQx5OGzw8F3o4A3k4Y/BwRujhLOThrMHDC6GHc5CHcwYP54QezkMezhs8vBR6uAB5uGDwcEHo4SLk4aLBwyuhh0uQh0sGD5eEHi5DHi4bPLwWergCebhi8HBF6OEq5OGqwcMboYdrkIdrBg/XhB6uQx6uGzy8FXq4AXm4YfBwQ+jhJuThpsHDO6GHW5CHWwYPt4QebkMebhs8vBd6uAN5uGPwcEfo4S7k4a7Bwwehh3uQh3sGD/eEHu5DHu4bPHwUengAeXhg8PBA6OEh5OGhwcMnoYdHkIdHBg+PhB4eQx4eGzx8Fnp4Anl4YvDwROjhKeThqcHDF6GHZ5CHZwYPz4QenkMenhs8fBV6eAF5eGHw8ELo4SXk4aXBwzehh1eQh1cGD6+EHl5DHl4bPHwXengDeXhj8PBG6OEt5OGtwcMPoYd3kId3Bg/vhB7eQx7eGzz8FHr4AHn4YPDwQejhI+Tho8HDL6GHT5CHTwYPn4QePkMePhs8/BZ6+AJ5+GLw8EXo4Svk4avBwx+hh2+Qh28GD9+EHr5DHr4bPPwVevgBefhh8PBD6OEn5OGnwcM/ZXV3+AV5+GXw8Evo4Tfk4bfBw79CD38gD38MHv4IPfyFPPw1eAgg9PDPG8bDf7q0h//e/r+2/n3DePj3De8hoNBDAMhDAIOHAEIPASEPAQ0eAgk9BII8BDJ4CCT0EBjyENjgIbDQQxDIQxCDhyBCD0EhD0ENHoIIPQSDPAQzeAgm9BAc8hDc4CGo0EMIyEMIg4cQQg8hIQ8hDR6CCT2EgjyEMngIJfQQGvIQ2uAhuNBDGMhDGIOHMEIPYSEPYQ0eQgg9hIM8hDN4CCf0EB7yEN7gIaTQQwTIQwSDhwhCDxEhDxENHkIJPUSCPEQyeIgk9BAZ8hDZ4CG00EMUyEMUg4coQg9RIQ9RDR7CCD1EgzxEM3iIJvQQHfIQ3eAhrNBDDMhDDIOHGEIPMSEPMQ0ewgk9xII8xDJ4iCX0EBvyENvgIbzQQxzIQxyDhzhCD3EhD3ENHiIIPcSDPMQzeIgn9BAf8hDf4CGi0EMCyEMCg4cEQg8JIQ8JDR4iCT0kgjwkMnhIJPSQGPKQ2OAhstBDEshDEoOHJEIPSSEPSQ0eogg9JIM8JDN4SCb0kBzykNzgIarQQwrIQwqDhxRCDykhDykNHqIJPaSCPKQyeEgl9JAa8pDa4CG60EMayEMag4c0Qg9pIQ9pDR5iCD2kgzykM3hIJ/SQHvKQ3uAhptBDBshDBoOHDEIPGSEPGQ0eYgk9ZII8ZDJ4yCT0kBnykNngIbbQQxbIQxaDhyxCD1khD1kNHuIIPWSDPGQzeMgm9JAd8pDd4CGu0EMOyEMOg4ccQg85IQ85DR7iCT3kgjzkMnjIJfSQG/KQ2+AhvtBDHshDHoOHPEIPeSEPeQ0eEgg95IM85DN4yCf0kB/ykN/gIaHQQwHIQwGDhwJCDwUhDwUNHhIJPRSCPBQyeCgk9FAY8lDY4CGx0EMRyEMRg4ciQg9FIQ9FDR6SCD0UgzwUM3goJvRQHPJQ3OAhqdBDCchDCYOHEkIPJSEPJQ0ekgk9lII8lDJ4KCX0UBryUNrgIbnQQxnIQxmDhzJCD2UhD2UNHlIIPZSDPJQzeCgn9FAe8lDe4CGl0EMFyEMFg4cKQg8VIQ8VDR5SCT1UgjxUMnioJPRQGfJQ2eAhtdBDFchDFYOHKkIPVSEPVQ0e0gg9VIM8VDN4qCb0UB3yUN3gIa3QQw3IQw2DhxpCDzUhDzUNHtIJPdSCPNQyeKgl9FAb8lDb4CG90EMdyEMdg4c6Qg91IQ91DR4yCD3UgzzUM3ioJ/RQH/JQ3+Aho9BDA8hDA4OHBkIPDSEPDQ0eMgk9NII8NDJ4aCT00Bjy0NjgIbPQQxPIQxODhyZCD00hD00NHrIIPTSDPDQzeGgm9NAc8tDc4CGr0EMLyEMLg4cWQg8tIQ8tDR6yCT20gjy0MnhoJfTQGvLQ2uAhu9BDG8hDG4OHNkIPbSEPbQ0ecgg9tIM8tDN4aCf00B7y0N7gIafQQwfIQweDhw5CDx0hDx0NHnIJPXSCPHQyeOgk9NAZ8tDZ4CG30EMXyEMXg4cuQg9dIQ9dDR7yCD10gzx0M3joJvTQHfLQ3eAhr9BDD8hDD4OHHkIPPSEPPQ0e8gk99II89DJ46CX00Bvy0NvgIb/QQx/IQx+Dhz5CD30hD30NHgoIPfSDPPQzeOgn9NAf8tDf4KGg0MMAyMMAg4cBQg8DIQ8DDR4KCT0MgjwMMngYJPQwGPIw2OChsNDDEMjDEIOHIUIPQyEPQw0eigg9DIM8DDN4GCb0MBzyMNzgoajQwwjIwwiDhxFCDyMhDyMNHooJPYyCPIwyeBgl9DAa8jDa4KG40MMYyMMYg4cxQg9jIQ9jDR5KCD2MgzyMM3gYJ/QwHvIw3uChpNDDBMjDBIOHCUIPEyEPEw0eSgk9TII8TDJ4mCT0MBnyMNngobTQwxTIwxSDhylCD1MhD1MNHsoIPUyDPEwzeJgm9DAd8jDd4KGs0MMMyMMMg4cZQg8zIQ8zDR7KCT3MgjzMMniYJfQwG/Iw2+ChvNDDHMjDHIOHOUIPcyEPcw0eKgg9zIM8zDN4mCf0MB/yMN/goaLQwwLIwwKDhwVCDwshDwsNHioJPSyCPCwyeFgk9LAY8rDY4KGy0MMSyMMSg4clQg9LIQ9LDR6qCD0sgzwsM3hYJvSwHPKw3OChqtDDCsjDCoOHFUIPKyEPKw0eqgk9rII8rDJ4WCX0sBrysNrgobrQwxrIwxqDhzVCD2shD2sNHmoIPayDPKwzeFgn9LAe8rDe4KGm0MMGyMMGg4cNQg8bIQ8bDR5qCT1sgjxsMnjYJPSwGfKw2eChttDDFsjDFoOHLUIPWyEPWw0e6gg9bIM8bDN42Cb0sB3ysN3goa7Qww7Iww6Dhx1CDzshDzsNHuoJPeyCPOwyeNgl9LAb8rDb4KG+0MMeyMMeg4c9Qg97IQ97DR4aCD3sgzzsM3jYJ/SwH/Kw3+ChodDDAcjDAYOHA0IPByEPBw0eGgk9HII8HDJ4OCT0cBjycNjgobHQwxHIwxGDhyNCD0chD0cNHpoIPRyDPBwzeDgm9HAc8nDc4KGp0MMJyMMJg4cTQg8nIQ8nDR6aCT2cgjycMng4JfRwGvJw2uChudDDGcjDGYOHM0IPZyEPZw0eWgg9nIM8nDN4OCf0cB7ycN7goaXQwwXIwwWDhwtCDxchDxcNHloJPVyCPFwyeLgk9HAZ8nDZ4KG10MMVyMMVg4crQg9XIQ9XDR7aCD1cgzxcM3i4JvRwHfJw3eChrdDDDcjDDYOHG0IPNyEPNw0e2gk93II83DJ4uCX0cBvycNvgob3Qwx3Iwx2DhztCD3chD3cNHjoIPdyDPNwzeLgn9HAf8nDf4KGj0MMDyMMDg4cHQg8PIQ8PDR46CT08gjw8Mnh4JPTwGPLw2OChs9DDE8jDE4OHJ0IPTyEPTw0eugg9PIM8PDN4eCb08Bzy8NzgoavQwwvIwwuDhxdCDy8hDy8NHroJPbyCPLwyeHgl9PAa8vDa4KG70MMbyMMbg4c3Qg9vIQ9vDR56CD28gzy8M3h4J/TwHvLw3uChp9DDB8jDB4OHD0IPHyEPHw0eegk9fII8fDJ4+CT08Bny8NngobfQwxfIwxeDhy9CD18hD18NHvoIPXyDPHwzePgm9PAd8vDd4KGv0MMPyMMPg4cfQg8/IQ8/DR76CT38gjz8Mnj4JfTwG/Lw2+Chv9DDH8jDH4OHP0IPfyEPfw0eBgg9/POW8fCfLu3hv7f/r61/3zIe/n3Lexgo9BAA8hDA4CGA0ENAyENAg4dBQg+BIA+BDB4CCT0EhjwENngYLPQQBPIQxOAhiNBDUMhDUIOHIUIPwSAPwQweggk9BIc8BDd4GCr0EALyEMLgIYTQQ0jIQ0iDh2FCD6EgD6EMHkIJPYSGPIQ2eBgu9BAG8hDG4CGM0ENYyENYg4cRQg/hIA/hDB7CCT2EhzyEN3gYKfQQAfIQweAhgtBDRMhDRIOHUUIPkSAPkQweIgk9RIY8RDZ4GC30EAXyEMXgIYrQQ1TIQ1SDhzFCD9EgD9EMHqIJPUSHPEQ3eBgr9BAD8hDD4CGG0ENMyENMg4dxQg+xIA+xDB5iCT3EhjzENngYL/QQB/IQx+AhjtBDXMhDXIOHCUIP8SAP8Qwe4gk9xIc8xDd4mCj0kADykMDgIYHQQ0LIQ0KDh0lCD4kgD4kMHhIJPSSGPCQ2eJgs9JAE8pDE4CGJ0ENSyENSg4cpQg/JIA/JDB6SCT0khzwkN3iYKvSQAvKQwuAhhdBDSshDSoOHaUIPqSAPqQweUgk9pIY8pDZ4mC70kAbykMbgIY3QQ1rIQ1qDhxlCD+kgD+kMHtIJPaSHPKQ3eJgp9JAB8pDB4CGD0ENGyENGg4dZQg+ZIA+ZDB4yCT1khjxkNniYLfSQBfKQxeAhi9BDVshDVoOHOUIP2SAP2Qwesgk9ZIc8ZDd4mCv0kAPykMPgIYfQQ07IQ06Dh3lCD7kgD7kMHnIJPeSGPOQ2eJgv9JAH8pDH4CGP0ENeyENeg4cFQg/5IA/5DB7yCT3khzzkN3hYKPRQAPJQwOChgNBDQchDQYOHRUIPhSAPhQweCgk9FIY8FDZ4WCz0UATyUMTgoYjQQ1HIQ1GDhyVCD8UgD8UMHooJPRSHPBQ3eFgq9FAC8lDC4KGE0ENJyENJg4dlQg+lIA+lDB5KCT2UhjyUNnhYLvRQBvJQxuChjNBDWchDWYOHFUIP5SAP5Qweygk9lIc8lDd4WCn0UAHyUMHgoYLQQ0XIQ0WDh1VCD5UgD5UMHioJPVSGPFQ2eFgt9FAF8lDF4KGK0ENVyENVg4c1Qg/VIA/VDB6qCT1UhzxUN3hYK/RQA/JQw+ChhtBDTchDTYOHdUIPtSAPtQweagk91IY81DZ4WC/0UAfyUMfgoY7QQ13IQ12Dhw1CD/UgD/UMHuoJPdSHPNQ3eNgo9NAA8tDA4KGB0ENDyENDg4dNQg+NIA+NDB4aCT00hjw0NnjYLPTQBPLQxOChidBDU8hDU4OHLUIPzSAPzQwemgk9NIc8NDd42Cr00ALy0MLgoYXQQ0vIQ0uDh21CD60gD60MHloJPbSGPLQ2eNgu9NAG8tDG4KGN0ENbyENbg4cdQg/tIA/tDB7aCT20hzy0N3jYKfTQAfLQweChg9BDR8hDR4OHXUIPnSAPnQweOgk9dIY8dDZ42C300AXy0MXgoYvQQ1fIQ1eDhz1CD90gD90MHroJPXSHPHQ3eNgr9NAD8tDD4KGH0ENPyENPg4d9Qg+9IA+9DB56CT30hjz0NnjYL/TQB/LQx+Chj9BDX8hDX4OHA0IP/SAP/Qwe+gk99Ic89Dd4OCj0MADyMMDgYYDQw0DIw0CDh0NCD4MgD4MMHgYJPQyGPAw2eDgs9DAE8jDE4GGI0MNQyMNQg4cjQg/DIA/DDB6GCT0MhzwMN3g4KvQwAvIwwuBhhNDDSMjDSIOHY0IPoyAPowweRgk9jIY8jDZ4OC70MAbyMMbgYYzQw1jIw1iDhxNCD+MgD+MMHsYJPYyHPIw3eDgp9DAB8jDB4GGC0MNEyMNEg4dTQg+TIA+TDB4mCT1MhjxMNng4LfQwBfIwxeBhitDDVMjDVIOHM0IP0yAP0wwepgk9TIc8TDd4OCv0MAPyMMPgYYbQw0zIw0yDh3NCD7MgD7MMHmYJPcyGPMw2eDgv9DAH8jDH4GGO0MNcyMNcg4cLQg/zIA/zDB7mCT3MhzzMN3i4KPSwAPKwwOBhgdDDQsjDQoOHS0IPiyAPiwweFgk9LIY8LDZ4uCz0sATysMTgYYnQw1LIw1KDhytCD8sgD8sMHpYJPSyHPCw3eLgq9LAC8rDC4GGF0MNKyMNKg4drQg+rIA+rDB5WCT2shjysNni4LvSwBvKwxuBhjdDDWsjDWoOHG0IP6yAP6wwe1gk9rIc8rDd4uCn0sAHysMHgYYPQw0bIw0aDh1tCD5sgD5sMHjYJPWyGPGw2eLgt9LAF8rDF4GGL0MNWyMNWg4c7Qg/bIA/bDB62CT1shzxsN3i4K/SwA/Kww+Bhh9DDTsjDToOHe0IPuyAPuwwedgk97IY87DZ4uC/0sAfysMfgYY/Qw17Iw16DhwdCD/sgD/sMHvYJPeyHPOw3eHgo9HAA8nDA4OGA0MNByMNBg4dHQg+HIA+HDB4OCT0chjwcNnh4LPRwBPJwxODhiNDDUcjDUYOHJ0IPxyAPxwwejgk9HIc8HDd4eCr0cALycMLg4YTQw0nIw0mDh2dCD6cgD6cMHk4JPZyGPJw2eHgu9HAG8nDG4OGM0MNZyMNZg4cXQg/nIA/nDB7OCT2chzycN3h4KfRwAfJwweDhgtDDRcjDRYOHV0IPlyAPlwweLgk9XIY8XDZ4eC30cAXycMXg4YrQw1XIw1WDhzdCD9cgD9cMHq4JPVyHPFw3eHgr9HAD8nDD4OGG0MNNyMNNg4d3Qg+3IA+3DB5uCT3chjzcNnh4L/RwB/Jwx+DhjtDDXcjDXYOHD0IP9yAP9wwe7gk93Ic83Dd4+Cj08ADy8MDg4YHQw0PIw0ODh09CD48gD48MHh4JPTyGPDw2ePgs9PAE8vDE4OGJ0MNTyMNTg4cvQg/PIA/PDB6eCT08hzw8N3j4KvTwAvLwwuDhhdDDS8jDS4OHb0IPryAPrwweXgk9vIY8vDZ4+C708Aby8Mbg4Y3Qw1vIw1uDhx9CD+8gD+8MHt4JPbyHPLw3ePgp9PAB8vDB4OGD0MNHyMNHg4dfQg+fIA+fDB4+CT18hjx8Nnj4LfTwBfLwxeDhi9DDV8jDV4OHP0IP3yAP3wwevgk9fIc8fDd4+Cv08ON/ukP6Jv/nZfv/f/99hx8GDz+EHn7+T3fI+H/vkO7/ucNPg4d/yunu8Avy8Mvg4ZfQw2/Iw2+Dh3+FHv5AHv4YPPwRevgLefhr8BBA6OGfd4yH/3RpD/+9/X9t/fuO8fDvO95DQKGHAJCHAAYPAYQeAkIeAho8BBJ6CAR5CGTwEEjoITDkIbDBQ2ChhyCQhyAGD0GEHoJCHoIaPAQReggGeQhm8BBM6CE45CG4wUNQoYcQkIcQBg8hhB5CQh5CGjwEE3oIBXkIZfAQSughNOQhtMFDcKGHMJCHMAYPYYQewkIewho8hBB6CAd5CGfwEE7oITzkIbzBQ0ihhwiQhwgGDxGEHiJCHiIaPIQSeogEeYhk8BBJ6CEy5CGywUNooYcokIcoBg9RhB6iQh6iGjyEEXqIBnmIZvAQTeghOuQhusFDWKGHGJCHGAYPMYQeYkIeYho8hBN6iAV5iGXwEEvoITbkIbbBQ3ihhziQhzgGD3GEHuJCHuIaPEQQeogHeYhn8BBP6CE+5CG+wUNEoYcEkIcEBg8JhB4SQh4SGjxEEnpIBHlIZPCQSOghMeQhscFDZKGHJJCHJAYPSYQekkIekho8RBF6SAZ5SGbwkEzoITnkIbnBQ1ShhxSQhxQGDymEHlJCHlIaPEQTekgFeUhl8JBK6CE15CG1wUN0oYc0kIc0Bg9phB7SQh7SGjzEEHpIB3lIZ/CQTughPeQhvcFDTKGHDJCHDAYPGYQeMkIeMho8xBJ6yAR5yGTwkEnoITPkIbPBQ2yhhyyQhywGD1mEHrJCHrIaPMQResgGechm8JBN6CE75CG7wUNcoYcckIccBg85hB5yQh5yGjzEE3rIBXnIZfCQS+ghN+Qht8FDfKGHPJCHPAYPeYQe8kIe8ho8JBB6yAd5yGfwkE/oIT/kIb/BQ0KhhwKQhwIGDwWEHgpCHgoaPCQSeigEeShk8FBI6KEw5KGwwUNioYcikIciBg9FhB6KQh6KGjwkEXooBnkoZvBQTOihOOShuMFDUqGHEpCHEgYPJYQeSkIeSho8JBN6KAV5KGXwUErooTTkobTBQ3KhhzKQhzIGD2WEHspCHsoaPKQQeigHeShn8FBO6KE85KG8wUNKoYcKkIcKBg8VhB4qQh4qGjykEnqoBHmoZPBQSeihMuShssFDaqGHKpCHKgYPVYQeqkIeqho8pBF6qAZ5qGbwUE3ooTrkobrBQ1qhhxqQhxoGDzWEHmpCHmoaPKQTeqgFeahl8FBL6KE25KG2wUN6oYc6kIc6Bg91hB7qQh7qGjxkEHqoB3moZ/BQT+ihPuShvsFDRqGHBpCHBgYPDYQeGkIeGho8ZBJ6aAR5aGTw0EjooTHkobHBQ2ahhyaQhyYGD02EHppCHpoaPGQRemgGeWhm8NBM6KE55KG5wUNWoYcWkIcWBg8thB5aQh5aGjxkE3poBXloZfDQSuihNeShtcFDdqGHNpCHNgYPbYQe2kIe2ho85BB6aAd5aGfw0E7ooT3kob3BQ06hhw6Qhw4GDx2EHjpCHjoaPOQSeugEeehk8NBJ6KEz5KGzwUNuoYcukIcuBg9dhB66Qh66GjzkEXroBnnoZvDQTeihO+Shu8FDXqGHHpCHHgYPPYQeekIeeho85BN66AV56GXw0EvooTfkobfBQ36hhz6Qhz4GD32EHvpCHvoaPBQQeugHeehn8NBP6KE/5KG/wUNBoYcBkIcBBg8DhB4GQh4GGjwUEnoYBHkYZPAwSOhhMORhsMFDYaGHIZCHIQYPQ4QehkIehho8FBF6GAZ5GGbwMEzoYTjkYbjBQ1GhhxGQhxEGDyOEHkZCHkYaPBQTehgFeRhl8DBK6GE05GG0wUNxoYcxkIcxBg9jhB7GQh7GGjyUEHoYB3kYZ/AwTuhhPORhvMFDSaGHCZCHCQYPE4QeJkIeJho8lBJ6mAR5mGTwMEnoYTLkYbLBQ2mhhymQhykGD1OEHqZCHqYaPJQRepgGeZhm8DBN6GE65GG6wUNZoYcZkIcZBg8zhB5mQh5mGjyUE3qYBXmYZfAwS+hhNuRhtsFDeaGHOZCHOQYPc4Qe5kIe5ho8VBB6mAd5mGfwME/oYT7kYb7BQ0WhhwWQhwUGDwuEHhZCHhYaPFQSelgEeVhk8LBI6GEx5GGxwUNloYclkIclBg9LhB6WQh6WGjxUEXpYBnlYZvCwTOhhOeRhucFDVaGHFZCHFQYPK4QeVkIeVho8VBN6WAV5WGXwsEroYTXkYbXBQ3WhhzWQhzUGD2uEHtZCHtYaPNQQelgHeVhn8LBO6GE95GG9wUNNoYcNkIcNBg8bhB42Qh42GjzUEnrYBHnYZPCwSehhM+Rhs8FDbaGHLZCHLQYPW4QetkIetho81BF62AZ52GbwsE3oYTvkYbvBQ12hhx2Qhx0GDzuEHnZCHnYaPNQTetgFedhl8LBL6GE35GG3wUN9oYc9kIc9Bg97hB72Qh72Gjw0EHrYB3nYZ/CwT+hhP+Rhv8FDQ6GHA5CHAwYPB4QeDkIeDho8NBJ6OAR5OGTwcEjo4TDk4bDBQ2OhhyOQhyMGD0eEHo5CHo4aPDQRejgGeThm8HBM6OE45OG4wUNToYcTkIcTBg8nhB5OQh5OGjw0E3o4BXk4ZfBwSujhNOThtMFDc6GHM5CHMwYPZ4QezkIezho8tBB6OAd5OGfwcE7o4Tzk4bzBQ0uhhwuQhwsGDxeEHi5CHi4aPLQSergEebhk8HBJ6OEy5OGywUNroYcrkIcrBg9XhB6uQh6uGjy0EXq4Bnm4ZvBwTejhOuThusFDW6GHG5CHGwYPN4QebkIebho8tBN6uAV5uGXwcEvo4Tbk4bbBQ3uhhzuQhzsGD3eEHu5CHu4aPHQQergHebhn8HBP6OE+5OG+wUNHoYcHkIcHBg8PhB4eQh4eGjx0Enp4BHl4ZPDwSOjhMeThscFDZ6GHJ5CHJwYPT4QenkIenho8dBF6eAZ5eGbw8Ezo4Tnk4bnBQ1ehhxeQhxcGDy+EHl5CHl4aPHQTengFeXhl8PBK6OE15OG1wUN3oYc3kIc3Bg9vhB7eQh7eGjz0EHp4B3l4Z/DwTujhPeThvcFDT6GHD5CHDwYPH4QePkIePho89BJ6+AR5+GTw8Eno4TPk4bPBQ2+hhy+Qhy8GD1+EHr5CHr4aPPQRevgGefhm8PBN6OE75OG7wUNfoYcfkIcfBg8/hB5+Qh5+Gjz0E3r4BXn4ZfDwS+jhN+Tht8FDf6GHP5CHPwYPf4Qe/kIe/ho8DBB6+Oc94+E/XdrDf2//X1v/vmc8/Pue9zBQ6CEA5CGAwUMAoYeAkIeABg+DhB4CQR4CGTwEEnoIDHkIbPAwWOghCOQhiMFDEKGHoJCHoAYPQ4QegkEeghk8BBN6CA55CG7wMFToIQTkIYTBQwihh5CQh5AGD8OEHkJBHkIZPIQSeggNeQht8DBc6CEM5CGMwUMYoYewkIewBg8jhB7CQR7CGTyEE3oID3kIb/AwUughAuQhgsFDBKGHiJCHiAYPo4QeIkEeIhk8RBJ6iAx5iGzwMFroIQrkIYrBQxShh6iQh6gGD2OEHqJBHqIZPEQTeogOeYhu8DBW6CEG5CGGwUMMoYeYkIeYBg/jhB5iQR5iGTzEEnqIDXmIbfAwXughDuQhjsFDHKGHuJCHuAYPE4Qe4kEe4hk8xBN6iA95iG/wMFHoIQHkIYHBQwKhh4SQh4QGD5OEHhJBHhIZPCQSekgMeUhs8DBZ6CEJ5CGJwUMSoYekkIekBg9ThB6SQR6SGTwkE3pIDnlIbvAwVeghBeQhhcFDCqGHlJCHlAYP04QeUkEeUhk8pBJ6SA15SG3wMF3oIQ3kIY3BQxqhh7SQh7QGDzOEHtJBHtIZPKQTekgPeUhv8DBT6CED5CGDwUMGoYeMkIeMBg+zhB4yQR4yGTxkEnrIDHnIbPAwW+ghC+Qhi8FDFqGHrJCHrAYPc4QeskEeshk8ZBN6yA55yG7wMFfoIQfkIYfBQw6hh5yQh5wGD/OEHnJBHnIZPOQSesgNecht8DBf6CEP5CGPwUMeoYe8kIe8Bg8LhB7yQR7yGTzkE3rID3nIb/CwUOihAOShgMFDAaGHgpCHggYPi4QeCkEeChk8FBJ6KAx5KGzwsFjooQjkoYjBQxGhh6KQh6IGD0uEHopBHooZPBQTeigOeShu8LBU6KEE5KGEwUMJoYeSkIeSBg/LhB5KQR5KGTyUEnooDXkobfCwXOihDOShjMFDGaGHspCHsgYPK4QeykEeyhk8lBN6KA95KG/wsFLooQLkoYLBQwWhh4qQh4oGD6uEHipBHioZPFQSeqgMeahs8LBa6KEK5KGKwUMVoYeqkIeqBg9rhB6qQR6qGTxUE3qoDnmobvCwVuihBuShhsFDDaGHmpCHmgYP64QeakEeahk81BJ6qA15qG3wsF7ooQ7koY7BQx2hh7qQh7oGDxuEHupBHuoZPNQTeqgPeahv8LBR6KEB5KGBwUMDoYeGkIeGBg+bhB4aQR4aGTw0EnpoDHlobPCwWeihCeShicFDE6GHppCHpgYPW4QemkEemhk8NBN6aA55aG7wsFXooQXkoYXBQwuhh5aQh5YGD9uEHlpBHloZPLQSemgNeWht8LBd6KEN5KGNwUMboYe2kIe2Bg87hB7aQR7aGTy0E3poD3lob/CwU+ihA+Shg8FDB6GHjpCHjgYPu4QeOkEeOhk8dBJ66Ax56GzwsFvooQvkoYvBQxehh66Qh64GD3uEHrpBHroZPHQTeugOeehu8LBX6KEH5KGHwUMPoYeekIeeBg/7hB56QR56GTz0EnroDXnobfCwX+ihD+Shj8FDH6GHvpCHvgYPB4Qe+kEe+hk89BN66A956G/wcFDoYQDkYYDBwwChh4GQh4EGD4eEHgZBHgYZPAwSehgMeRhs8HBY6GEI5GGIwcMQoYehkIehBg9HhB6GQR6GGTwME3oYDnkYbvBwVOhhBORhhMHDCKGHkZCHkQYPx4QeRkEeRhk8jBJ6GA15GG3wcFzoYQzkYYzBwxihh7GQh7EGDyeEHsZBHsYZPIwTehgPeRhv8HBS6GEC5GGCwcMEoYeJkIeJBg+nhB4mQR4mGTxMEnqYDHmYbPBwWuhhCuRhisHDFKGHqZCHqQYPZ4QepkEephk8TBN6mA55mG7wcFboYQbkYYbBwwyhh5mQh5kGD+eEHmZBHmYZPMwSepgNeZht8HBe6GEO5GGOwcMcoYe5kIe5Bg8XhB7mQR7mGTzME3qYD3mYb/BwUehhAeRhgcHDAqGHhZCHhQYPl4QeFkEeFhk8LBJ6WAx5WGzwcFnoYQnkYYnBwxKhh6WQh6UGD1eEHpZBHpYZPCwTelgOeVhu8HBV6GEF5GGFwcMKoYeVkIeVBg/XhB5WQR5WGTysEnpYDXlYbfBwXehhDeRhjcHDGqGHtZCHtQYPN4Qe1kEe1hk8rBN6WA95WG/wcFPoYQPkYYPBwwahh42Qh40GD7eEHjZBHjYZPGwSetgMedhs8HBb6GEL5GGLwcMWoYetkIetBg93hB62QR62GTxsE3rYDnnYbvBwV+hhB+Rhh8HDDqGHnZCHnQYP94QedkEedhk87BJ62A152G3wcF/oYQ/kYY/Bwx6hh72Qh70GDw+EHvZBHvYZPOwTetgPedhv8PBQ6OEA5OGAwcMBoYeDkIeDBg+PhB4OQR4OGTwcEno4DHk4bPDwWOjhCOThiMHDEaGHo5CHowYPT4QejkEejhk8HBN6OA55OG7w8FTo4QTk4YTBwwmhh5OQh5MGD8+EHk5BHk4ZPJwSejgNeTht8PBc6OEM5OGMwcMZoYezkIezBg8vhB7OQR7OGTycE3o4D3k4b/DwUujhAuThgsHDBaGHi5CHiwYPr4QeLkEeLhk8XBJ6uAx5uGzw8Fro4Qrk4YrBwxWhh6uQh6sGD2+EHq5BHq4ZPFwTergOebhu8PBW6OEG5OGGwcMNoYebkIebBg/vhB5uQR5uGTzcEnq4DXm4bfDwXujhDuThjsHDHaGHu5CHuwYPH4Qe7kEe7hk83BN6uA95uG/w8FHo4QHk4YHBwwOhh4eQh4cGD5+EHh5BHh4ZPDwSengMeXhs8PBZ6OEJ5OGJwcMToYenkIenBg9fhB6eQR6eGTw8E3p4Dnl4bvDwVejhBeThhcHDC6GHl5CHlwYP34QeXkEeXhk8vBJ6eA15eG3w8F3o4Q3k4Y3Bwxuhh7eQh7cGDz+EHt5BHt4ZPLwTengPeXhv8PBT6OED5OGDwcMHoYePkIePBg+/hB4+QR4+GTx8Enr4DHn4bPDwW+jhC+Thi8HDF6GHr5CHrwYPf4QevkEevhk8fBN6+A55+G7w8Ffo4Qfk4YfBww+hh5+Qh58GD/+U193hF+Thl8HDL6GH35CH3wYP/wo9/IE8/DF4+CP08Bfy8NfgIYDQwz8fGA//6dIe/nv7/9r69wPj4d8PvIeAQg8BIA8BDB4CCD0EhDwENHgIJPQQCPIQyOAhkNBDYMhDYIOHwEIPQSAPQQweggg9BIU8BDV4CCL0EAzyEMzgIZjQQ3DIQ3CDh6BCDyEgDyEMHkIIPYSEPIQ0eAgm9BAK8hDK4CGU0ENoyENog4fgQg9hIA9hDB7CCD2EhTyENXgIIfQQDvIQzuAhnNBDeMhDeIOHkEIPESAPEQweIgg9RIQ8RDR4CCX0EAnyEMngIZLQQ2TIQ2SDh9BCD1EgD1EMHqIIPUSFPEQ1eAgj9BAN8hDN4CGa0EN0yEN0g4ewQg8xIA8xDB5iCD3EhDzENHgIJ/QQC/IQy+AhltBDbMhDbIOH8EIPcSAPcQwe4gg9xIU8xDV4iCD0EA/yEM/gIZ7QQ3zIQ3yDh4hCDwkgDwkMHhIIPSSEPCQ0eIgk9JAI8pDI4CGR0ENiyENig4fIQg9JIA9JDB6SCD0khTwkNXiIIvSQDPKQzOAhmdBDcshDcoOHqEIPKSAPKQweUgg9pIQ8pDR4iCb0kArykMrgIZXQQ2rIQ2qDh+hCD2kgD2kMHtIIPaSFPKQ1eIgh9JAO8pDO4CGd0EN6yEN6g4eYQg8ZIA8ZDB4yCD1khDxkNHiIJfSQCfKQyeAhk9BDZshDZoOH2EIPWSAPWQwesgg9ZIU8ZDV4iCP0kA3ykM3gIZvQQ3bIQ3aDh7hCDzkgDzkMHnIIPeSEPOQ0eIgn9JAL8pDL4CGX0ENuyENug4f4Qg95IA95DB7yCD3khTzkNXhIIPSQD/KQz+Ahn9BDfshDfoOHhEIPBSAPBQweCgg9FIQ8FDR4SCT0UAjyUMjgoZDQQ2HIQ2GDh8RCD0UgD0UMHooIPRSFPBQ1eEgi9FAM8lDM4KGY0ENxyENxg4ekQg8lIA8lDB5KCD2UhDyUNHhIJvRQCvJQyuChlNBDachDaYOH5EIPZSAPZQweygg9lIU8lDV4SCH0UA7yUM7goZzQQ3nIQ3mDh5RCDxUgDxUMHioIPVSEPFQ0eEgl9FAJ8lDJ4KGS0ENlyENlg4fUQg9VIA9VDB6qCD1UhTxUNXhII/RQDfJQzeChmtBDdchDdYOHtEIPNSAPNQweagg91IQ81DR4SCf0UAvyUMvgoZbQQ23IQ22Dh/RCD3UgD3UMHuoIPdSFPNQ1eMgg9FAP8lDP4KGe0EN9yEN9g4eMQg8NIA8NDB4aCD00hDw0NHjIJPTQCPLQyOChkdBDY8hDY4OHzEIPTSAPTQwemgg9NIU8NDV4yCL00Azy0MzgoZnQQ3PIQ3ODh6xCDy0gDy0MHloIPbSEPLQ0eMgm9NAK8tDK4KGV0ENryENrg4fsQg9tIA9tDB7aCD20hTy0NXjIIfTQDvLQzuChndBDe8hDe4OHnEIPHSAPHQweOgg9dIQ8dDR4yCX00Any0MngoZPQQ2fIQ2eDh9xCD10gD10MHroIPXSFPHQ1eMgj9NAN8tDN4KGb0EN3yEN3g4e8Qg89IA89DB56CD30hDz0NHjIJ/TQC/LQy+Chl9BDb8hDb4OH/EIPfSAPfQwe+gg99IU89DV4KCD00A/y0M/goZ/QQ3/IQ3+Dh4JCDwMgDwMMHgYIPQyEPAw0eCgk9DAI8jDI4GGQ0MNgyMNgg4fCQg9DIA9DDB6GCD0MhTwMNXgoIvQwDPIwzOBhmNDDcMjDcIOHokIPIyAPIwweRgg9jIQ8jDR4KCb0MAryMMrgYZTQw2jIw2iDh+JCD2MgD2MMHsYIPYyFPIw1eCgh9DAO8jDO4GGc0MN4yMN4g4eSQg8TIA8TDB4mCD1MhDxMNHgoJfQwCfIwyeBhktDDZMjDZIOH0kIPUyAPUwwepgg9TIU8TDV4KCP0MA3yMM3gYZrQw3TIw3SDh7JCDzMgDzMMHmYIPcyEPMw0eCgn9DAL8jDL4GGW0MNsyMNsg4fyQg9zIA9zDB7mCD3MhTzMNXioIPQwD/Iwz+BhntDDfMjDfIOHikIPCyAPCwweFgg9LIQ8LDR4qCT0sAjysMjgYZHQw2LIw2KDh8pCD0sgD0sMHpYIPSyFPCw1eKgi9LAM8rDM4GGZ0MNyyMNyg4eqQg8rIA8rDB5WCD2shDysNHioJvSwCvKwyuBhldDDasjDaoOH6kIPayAPawwe1gg9rIU8rDV4qCH0sA7ysM7gYZ3Qw3rIw3qDh5pCDxsgDxsMHjYIPWyEPGw0eKgl9LAJ8rDJ4GGT0MNmyMNmg4faQg9bIA9bDB62CD1shTxsNXioI/SwDfKwzeBhm9DDdsjDdoOHukIPOyAPOwwedgg97IQ87DR4qCf0sAvysMvgYZfQw27Iw26Dh/pCD3sgD3sMHvYIPeyFPOw1eGgg9LAP8rDP4GGf0MN+yMN+g4eGQg8HIA8HDB4OCD0chDwcNHhoJPRwCPJwyODhkNDDYcjDYYOHxkIPRyAPRwwejgg9HIU8HDV4aCL0cAzycMzg4ZjQw3HIw3GDh6ZCDycgDycMHk4IPZyEPJw0eGgm9HAK8nDK4OGU0MNpyMNpg4fmQg9nIA9nDB7OCD2chTycNXhoIfRwDvJwzuDhnNDDecjDeYOHlkIPFyAPFwweLgg9XIQ8XDR4aCX0cAnycMng4ZLQw2XIw2WDh9ZCD1cgD1cMHq4IPVyFPFw1eGgj9HAN8nDN4OGa0MN1yMN1g4e2Qg83IA83DB5uCD3chDzcNHhoJ/RwC/Jwy+DhltDDbcjDbYOH9kIPdyAPdwwe7gg93IU83DV46CD0cA/ycM/g4Z7Qw33Iw32Dh45CDw8gDw8MHh4IPTyEPDw0eOgk9PAI8vDI4OGR0MNjyMNjg4fOQg9PIA9PDB6eCD08hTw8NXjoIvTwDPLwzODhmdDDc8jDc4OHrkIPLyAPLwweXgg9vIQ8vDR46Cb08Ary8Mrg4ZXQw2vIw2uDh+5CD28gD28MHt4IPbyFPLw1eOgh9PAO8vDO4OGd0MN7yMN7g4eeQg8fIA8fDB4+CD18hDx8NHjoJfTwCfLwyeDhk9DDZ8jDZ4OH3kIPXyAPXwwevgg9fIU8fDV46CP08A3y8M3g4ZvQw3fIw3eDh75CDz8gDz8MHn4IPfyEPPw0eOgn9PAL8vDL4OGX0MNvyMNvg4f+Qg9/IA9/DB7+CD38hTz8NXgYIPTwz0fGw3+6tIf/3v6/tv79yHj49yPvYaDQQwDIQwCDhwBCDwEhDwENHgYJPQSCPAQyeAgk9BAY8hDY4GGw0EMQyEMQg4cgQg9BIQ9BDR6GCD0EgzwEM3gIJvQQHPIQ3OBhqNBDCMhDCIOHEEIPISEPIQ0ehgk9hII8hDJ4CCX0EBryENrgYbjQQxjIQxiDhzBCD2EhD2ENHkYIPYSDPIQzeAgn9BAe8hDe4GGk0EMEyEMEg4cIQg8RIQ8RDR5GCT1EgjxEMniIJPQQGfIQ2eBhtNBDFMhDFIOHKEIPUSEPUQ0exgg9RIM8RDN4iCb0EB3yEN3gYazQQwzIQwyDhxhCDzEhDzENHsYJPcSCPMQyeIgl9BAb8hDb4GG80EMcyEMcg4c4Qg9xIQ9xDR4mCD3EgzzEM3iIJ/QQH/IQ3+BhotBDAshDAoOHBEIPCSEPCQ0eJgk9JII8JDJ4SCT0kBjykNjgYbLQQxLIQxKDhyRCD0khD0kNHqYIPSSDPCQzeEgm9JAc8pDc4GGq0EMKyEMKg4cUQg8pIQ8pDR6mCT2kgjykMnhIJfSQGvKQ2uBhutBDGshDGoOHNEIPaSEPaQ0eZgg9pIM8pDN4SCf0kB7ykN7gYabQQwbIQwaDhwxCDxkhDxkNHmYJPWSCPGQyeMgk9JAZ8pDZ4GG20EMWyEMWg4csQg9ZIQ9ZDR7mCD1kgzxkM3jIJvSQHfKQ3eBhrtBDDshDDoOHHEIPOSEPOQ0e5gk95II85DJ4yCX0kBvykNvgYb7QQx7IQx6DhzxCD3khD3kNHhYIPeSDPOQzeMgn9JAf8pDf4GGh0EMByEMBg4cCQg8FIQ8FDR4WCT0UgjwUMngoJPRQGPJQ2OBhsdBDEchDEYOHIkIPRSEPRQ0elgg9FIM8FDN4KCb0UBzyUNzgYanQQwnIQwmDhxJCDyUhDyUNHpYJPZSCPJQyeCgl9FAa8lDa4GG50EMZyEMZg4cyQg9lIQ9lDR5WCD2UgzyUM3goJ/RQHvJQ3uBhpdBDBchDBYOHCkIPFSEPFQ0eVgk9VII8VDJ4qCT0UBnyUNngYbXQQxXIQxWDhypCD1UhD1UNHtYIPVSDPFQzeKgm9FAd8lDd4GGt0EMNyEMNg4caQg81IQ81DR7WCT3UgjzUMnioJfRQG/JQ2+BhvdBDHchDHYOHOkIPdSEPdQ0eNgg91IM81DN4qCf0UB/yUN/gYaPQQwPIQwODhwZCDw0hDw0NHjYJPTSCPDQyeGgk9NAY8tDY4GGz0EMTyEMTg4cmQg9NIQ9NDR62CD00gzw0M3hoJvTQHPLQ3OBhq9BDC8hDC4OHFkIPLSEPLQ0etgk9tII8tDJ4aCX00Bry0NrgYbvQQxvIQxuDhzZCD20hD20NHnYIPbSDPLQzeGgn9NAe8tDe4GGn0EMHyEMHg4cOQg8dIQ8dDR52CT10gjx0MnjoJPTQGfLQ2eBht9BDF8hDF4OHLkIPXSEPXQ0e9gg9dIM8dDN46Cb00B3y0N3gYa/QQw/IQw+Dhx5CDz0hDz0NHvYJPfSCPPQyeOgl9NAb8tDb4GG/0EMfyEMfg4c+Qg99IQ99DR4OCD30gzz0M3joJ/TQH/LQ3+DhoNDDAMjDAIOHAUIPAyEPAw0eDgk9DII8DDJ4GCT0MBjyMNjg4bDQwxDIwxCDhyFCD0MhD0MNHo4IPQyDPAwzeBgm9DAc8jDc4OGo0MMIyMMIg4cRQg8jIQ8jDR6OCT2MgjyMMngYJfQwGvIw2uDhuNDDGMjDGIOHMUIPYyEPYw0eTgg9jIM8jDN4GCf0MB7yMN7g4aTQwwTIwwSDhwlCDxMhDxMNHk4JPUyCPEwyeJgk9DAZ8jDZ4OG00MMUyMMUg4cpQg9TIQ9TDR7OCD1MgzxMM3iYJvQwHfIw3eDhrNDDDMjDDIOHGUIPMyEPMw0ezgk9zII8zDJ4mCX0MBvyMNvg4bzQwxzIwxyDhzlCD3MhD3MNHi4IPcyDPMwzeJgn9DAf8jDf4OGi0MMCyMMCg4cFQg8LIQ8LDR4uCT0sgjwsMnhYJPSwGPKw2ODhstDDEsjDEoOHJUIPSyEPSw0ergg9LIM8LDN4WCb0sBzysNzg4arQwwrIwwqDhxVCDyshDysNHq4JPayCPKwyeFgl9LAa8rDa4OG60MMayMMag4c1Qg9rIQ9rDR5uCD2sgzysM3hYJ/SwHvKw3uDhptDDBsjDBoOHDUIPGyEPGw0ebgk9bII8bDJ42CT0sBnysNng4bbQwxbIwxaDhy1CD1shD1sNHu4IPWyDPGwzeNgm9LAd8rDd4OGu0MMOyMMOg4cdQg87IQ87DR7uCT3sgjzsMnjYJfSwG/Kw2+DhvtDDHsjDHoOHPUIPeyEPew0eHgg97IM87DN42Cf0sB/ysN/g4aHQwwHIwwGDhwNCDwchDwcNHh4JPRyCPBwyeDgk9HAY8nDY4OGx0MMRyMMRg4cjQg9HIQ9HDR6eCD0cgzwcM3g4JvRwHPJw3ODhqdDDCcjDCYOHE0IPJyEPJw0engk9nII8nDJ4OCX0cBrycNrg4bnQwxnIwxmDhzNCD2chD2cNHl4IPZyDPJwzeDgn9HAe8nDe4OGl0MMFyMMFg4cLQg8XIQ8XDR5eCT1cgjxcMni4JPRwGfJw2eDhtdDDFcjDFYOHK0IPVyEPVw0e3gg9XIM8XDN4uCb0cB3ycN3g4a3Qww3Iww2DhxtCDzchDzcNHt4JPdyCPNwyeLgl9HAb8nDb4OG90MMdyMMdg4c7Qg93IQ93DR4+CD3cgzzcM3i4J/RwH/Jw3+Dho9DDA8jDA4OHB0IPDyEPDw0ePgk9PII8PDJ4eCT08Bjy8Njg4bPQwxPIwxODhydCD08hD08NHr4IPTyDPDwzeHgm9PAc8vDc4OGr0MMLyMMLg4cXQg8vIQ8vDR6+CT28gjy8Mnh4JfTwGvLw2uDhu9DDG8jDG4OHN0IPbyEPbw0efgg9vIM8vDN4eCf08B7y8N7g4afQwwfIwweDhw9CDx8hDx8NHn4JPXyCPHwyePgk9PAZ8vDZ4OG30MMXyMMXg4cvQg9fIQ9fDR7+CD18gzx8M3j4JvTwHfLw3eDhr9DDD8jDD4OHH0IPPyEPPw0e/qmgu8MvyMMvg4dfQg+/IQ+/DR7+FXr4A3n4Y/DwR+jhL+Thr8FDAKGHfz4xHv7TpT389/b/tfXvJ8bDv594DwGFHgJAHgIYPAQQeggIeQho8BBI6CEQ5CGQwUMgoYfAkIfABg+BhR6CQB6CGDwEEXoICnkIavAQROghGOQhmMFDMKGH4JCH4AYPQYUeQkAeQhg8hBB6CAl5CGnwEEzoIRTkIZTBQyihh9CQh9AGD8GFHsJAHsIYPIQReggLeQhr8BBC6CEc5CGcwUM4oYfwkIfwBg8hhR4iQB4iGDxEEHqICHmIaPAQSughEuQhksFDJKGHyJCHyAYPoYUeokAeohg8RBF6iAp5iGrwEEboIRrkIZrBQzShh+iQh+gGD2GFHmJAHmIYPMQQeogJeYhp8BBO6CEW5CGWwUMsoYfYkIfYBg/hhR7iQB7iGDzEEXqIC3mIa/AQQeghHuQhnsFDPKGH+JCH+AYPEYUeEkAeEhg8JBB6SAh5SGjwEEnoIRHkIZHBQyKhh8SQh8QGD5GFHpJAHpIYPCQRekgKeUhq8BBF6CEZ5CGZwUMyoYfkkIfkBg9RhR5SQB5SGDykEHpICXlIafAQTeghFeQhlcFDKqGH1JCH1AYP0YUe0kAe0hg8pBF6SAt5SGvwEEPoIR3kIZ3BQzqhh/SQh/QGDzGFHjJAHjIYPGQQesgIecho8BBL6CET5CGTwUMmoYfMkIfMBg+xhR6yQB6yGDxkEXrICnnIavAQR+ghG+Qhm8FDNqGH7JCH7AYPcYUeckAechg85BB6yAl5yGnwEE/oIRfkIZfBQy6hh9yQh9wGD/GFHvJAHvIYPOQResgLechr8JBA6CEf5CGfwUM+oYf8kIf8Bg8JhR4KQB4KGDwUEHooCHkoaPCQSOihEOShkMFDIaGHwpCHwgYPiYUeikAeihg8FBF6KAp5KGrwkETooRjkoZjBQzGhh+KQh+IGD0mFHkpAHkoYPJQQeigJeShp8JBM6KEU5KGUwUMpoYfSkIfSBg/JhR7KQB7KGDyUEXooC3koa/CQQuihHOShnMFDOaGH8pCH8gYPKYUeKkAeKhg8VBB6qAh5qGjwkErooRLkoZLBQyWhh8qQh8oGD6mFHqpAHqoYPFQReqgKeahq8JBG6KEa5KGawUM1oYfqkIfqBg9phR5qQB5qGDzUEHqoCXmoafCQTuihFuShlsFDLaGH2pCH2gYP6YUe6kAe6hg81BF6qAt5qGvwkEHooR7koZ7BQz2hh/qQh/oGDxmFHhpAHhoYPDQQemgIeWho8JBJ6KER5KGRwUMjoYfGkIfGBg+ZhR6aQB6aGDw0EXpoCnloavCQReihGeShmcFDM6GH5pCH5gYPWYUeWkAeWhg8tBB6aAl5aGnwkE3ooRXkoZXBQyuhh9aQh9YGD9mFHtpAHtoYPLQRemgLeWhr8JBD6KEd5KGdwUM7oYf2kIf2Bg85hR46QB46GDx0EHroCHnoaPCQS+ihE+Shk8FDJ6GHzpCHzgYPuYUeukAeuhg8dBF66Ap56GrwkEfooRvkoZvBQzehh+6Qh+4GD3mFHnpAHnoYPPQQeugJeehp8JBP6KEX5KGXwUMvoYfekIfeBg/5hR76QB76GDz0EXroC3noa/BQQOihH+Shn8FDP6GH/pCH/gYPBYUeBkAeBhg8DBB6GAh5GGjwUEjoYRDkYZDBwyChh8GQh8EGD4WFHoZAHoYYPAwRehgKeRhq8FBE6GEY5GGYwcMwoYfhkIfhBg9FhR5GQB5GGDyMEHoYCXkYafBQTOhhFORhlMHDKKGH0ZCH0QYPxYUexkAexhg8jBF6GAt5GGvwUELoYRzkYZzBwzihh/GQh/EGDyWFHiZAHiYYPEwQepgIeZho8FBK6GES5GGSwcMkoYfJkIfJBg+lhR6mQB6mGDxMEXqYCnmYavBQRuhhGuRhmsHDNKGH6ZCH6QYPZYUeZkAeZhg8zBB6mAl5mGnwUE7oYRbkYZbBwyyhh9mQh9kGD+WFHuZAHuYYPMwRepgLeZhr8FBB6GEe5GGewcM8oYf5kIf5Bg8VhR4WQB4WGDwsEHpYCHlYaPBQSehhEeRhkcHDIqGHxZCHxQYPlYUelkAelhg8LBF6WAp5WGrwUEXoYRnkYZnBwzKhh+WQh+UGD1WFHlZAHlYYPKwQelgJeVhp8FBN6GEV5GGVwcMqoYfVkIfVBg/VhR7WQB7WGDysEXpYC3lYa/BQQ+hhHeRhncHDOqGH9ZCH9QYPNYUeNkAeNhg8bBB62Ah52GjwUEvoYRPkYZPBwyahh82Qh80GD7WFHrZAHrYYPGwRetgKedhq8FBH6GEb5GGbwcM2oYftkIftBg91hR52QB52GDzsEHrYCXnYafBQT+hhF+Rhl8HDLqGH3ZCH3QYP9YUe9kAe9hg87BF62At52Gvw0EDoYR/kYZ/Bwz6hh/2Qh/0GDw2FHg5AHg4YPBwQejgIeTho8NBI6OEQ5OGQwcMhoYfDkIfDBg+NhR6OQB6OGDwcEXo4Cnk4avDQROjhGOThmMHDMaGH45CH4wYPTYUeTkAeThg8nBB6OAl5OGnw0Ezo4RTk4ZTBwymhh9OQh9MGD82FHs5AHs4YPJwRejgLeThr8NBC6OEc5OGcwcM5oYfzkIfzBg8thR4uQB4uGDxcEHq4CHm4aPDQSujhEuThksHDJaGHy5CHywYPrYUerkAerhg8XBF6uAp5uGrw0Ebo4Rrk4ZrBwzWhh+uQh+sGD22FHm5AHm4YPNwQergJebhp8NBO6OEW5OGWwcMtoYfbkIfbBg/thR7uQB7uGDzcEXq4C3m4a/DQQejhHuThnsHDPaGH+5CH+wYPHYUeHkAeHhg8PBB6eAh5eGjw0Eno4RHk4ZHBwyOhh8eQh8cGD52FHp5AHp4YPDwRengKeXhq8NBF6OEZ5OGZwcMzoYfnkIfnBg9dhR5eQB5eGDy8EHp4CXl4afDQTejhFeThlcHDK6GH15CH1wYP3YUe3kAe3hg8vBF6eAt5eGvw0EPo4R3k4Z3Bwzuhh/eQh/cGDz2FHj5AHj4YPHwQevgIefho8NBL6OET5OGTwcMnoYfPkIfPBg+9hR6+QB6+GDx8EXr4Cnn4avDQR+jhG+Thm8HDN6GH75CH7wYPfYUefkAefhg8/BB6+Al5+Gnw0E/o4Rfk4ZfBwy+hh9+Qh98GD/2FHv5AHv4YPPwRevgLefhr8DBA6OGfz4yH/3RpD/+9/X9t/fuZ8fDvZ97DQKGHAJCHAAYPAYQeAkIeAho8DBJ6CAR5CGTwEEjoITDkIbDBw2ChhyCQhyAGD0GEHoJCHoIaPAwReggGeQhm8BBM6CE45CG4wcNQoYcQkIcQBg8hhB5CQh5CGjwME3oIBXkIZfAQSughNOQhtMHDcKGHMJCHMAYPYYQewkIewho8jBB6CAd5CGfwEE7oITzkIbzBw0ihhwiQhwgGDxGEHiJCHiIaPIwSeogEeYhk8BBJ6CEy5CGywcNooYcokIcoBg9RhB6iQh6iGjyMEXqIBnmIZvAQTeghOuQhusHDWKGHGJCHGAYPMYQeYkIeYho8jBN6iAV5iGXwEEvoITbkIbbBw3ihhziQhzgGD3GEHuJCHuIaPEwQeogHeYhn8BBP6CE+5CG+wcNEoYcEkIcEBg8JhB4SQh4SGjxMEnpIBHlIZPCQSOghMeQhscHDZKGHJJCHJAYPSYQekkIekho8TBF6SAZ5SGbwkEzoITnkIbnBw1ShhxSQhxQGDymEHlJCHlIaPEwTekgFeUhl8JBK6CE15CG1wcN0oYc0kIc0Bg9phB7SQh7SGjzMEHpIB3lIZ/CQTughPeQhvcHDTKGHDJCHDAYPGYQeMkIeMho8zBJ6yAR5yGTwkEnoITPkIbPBw2yhhyyQhywGD1mEHrJCHrIaPMwResgGechm8JBN6CE75CG7wcNcoYcckIccBg85hB5yQh5yGjzME3rIBXnIZfCQS+ghN+Qht8HDfKGHPJCHPAYPeYQe8kIe8ho8LBB6yAd5yGfwkE/oIT/kIb/Bw0KhhwKQhwIGDwWEHgpCHgoaPCwSeigEeShk8FBI6KEw5KGwwcNioYcikIciBg9FhB6KQh6KGjwsEXooBnkoZvBQTOihOOShuMHDUqGHEpCHEgYPJYQeSkIeSho8LBN6KAV5KGXwUErooTTkobTBw3KhhzKQhzIGD2WEHspCHsoaPKwQeigHeShn8FBO6KE85KG8wcNKoYcKkIcKBg8VhB4qQh4qGjysEnqoBHmoZPBQSeihMuShssHDaqGHKpCHKgYPVYQeqkIeqho8rBF6qAZ5qGbwUE3ooTrkobrBw1qhhxqQhxoGDzWEHmpCHmoaPKwTeqgFeahl8FBL6KE25KG2wcN6oYc6kIc6Bg91hB7qQh7qGjxsEHqoB3moZ/BQT+ihPuShvsHDRqGHBpCHBgYPDYQeGkIeGho8bBJ6aAR5aGTw0EjooTHkobHBw2ahhyaQhyYGD02EHppCHpoaPGwRemgGeWhm8NBM6KE55KG5wcNWoYcWkIcWBg8thB5aQh5aGjxsE3poBXloZfDQSuihNeShtcHDdqGHNpCHNgYPbYQe2kIe2ho87BB6aAd5aGfw0E7ooT3kob3Bw06hhw6Qhw4GDx2EHjpCHjoaPOwSeugEeehk8NBJ6KEz5KGzwcNuoYcukIcuBg9dhB66Qh66GjzsEXroBnnoZvDQTeihO+Shu8HDXqGHHpCHHgYPPYQeekIeeho87BN66AV56GXw0EvooTfkobfBw36hhz6Qhz4GD32EHvpCHvoaPBwQeugHeehn8NBP6KE/5KG/wcNBoYcBkIcBBg8DhB4GQh4GGjwcEnoYBHkYZPAwSOhhMORhsMHDYaGHIZCHIQYPQ4QehkIehho8HBF6GAZ5GGbwMEzoYTjkYbjBw1GhhxGQhxEGDyOEHkZCHkYaPBwTehgFeRhl8DBK6GE05GG0wcNxoYcxkIcxBg9jhB7GQh7GGjycEHoYB3kYZ/AwTuhhPORhvMHDSaGHCZCHCQYPE4QeJkIeJho8nBJ6mAR5mGTwMEnoYTLkYbLBw2mhhymQhykGD1OEHqZCHqYaPJwRepgGeZhm8DBN6GE65GG6wcNZoYcZkIcZBg8zhB5mQh5mGjycE3qYBXmYZfAwS+hhNuRhtsHDeaGHOZCHOQYPc4Qe5kIe5ho8XBB6mAd5mGfwME/oYT7kYb7Bw0WhhwWQhwUGDwuEHhZCHhYaPFwSelgEeVhk8LBI6GEx5GGxwcNloYclkIclBg9LhB6WQh6WGjxcEXpYBnlYZvCwTOhhOeRhucHDVaGHFZCHFQYPK4QeVkIeVho8XBN6WAV5WGXwsEroYTXkYbXBw3WhhzWQhzUGD2uEHtZCHtYaPNwQelgHeVhn8LBO6GE95GG9wcNNoYcNkIcNBg8bhB42Qh42GjzcEnrYBHnYZPCwSehhM+Rhs8HDbaGHLZCHLQYPW4QetkIetho83BF62AZ52GbwsE3oYTvkYbvBw12hhx2Qhx0GDzuEHnZCHnYaPNwTetgFedhl8LBL6GE35GG3wcN9oYc9kIc9Bg97hB72Qh72Gjw8EHrYB3nYZ/CwT+hhP+Rhv8HDQ6GHA5CHAwYPB4QeDkIeDho8PBJ6OAR5OGTwcEjo4TDk4bDBw2OhhyOQhyMGD0eEHo5CHo4aPDwRejgGeThm8HBM6OE45OG4wcNToYcTkIcTBg8nhB5OQh5OGjw8E3o4BXk4ZfBwSujhNOThtMHDc6GHM5CHMwYPZ4QezkIezho8vBB6OAd5OGfwcE7o4Tzk4bzBw0uhhwuQhwsGDxeEHi5CHi4aPLwSergEebhk8HBJ6OEy5OGywcNroYcrkIcrBg9XhB6uQh6uGjy8EXq4Bnm4ZvBwTejhOuThusHDW6GHG5CHGwYPN4QebkIebho8vBN6uAV5uGXwcEvo4Tbk4bbBw3uhhzuQhzsGD3eEHu5CHu4aPHwQergHebhn8HBP6OE+5OG+wcNHoYcHkIcHBg8PhB4eQh4eGjx8Enp4BHl4ZPDwSOjhMeThscHDZ6GHJ5CHJwYPT4QenkIenho8fBF6eAZ5eGbw8Ezo4Tnk4bnBw1ehhxeQhxcGDy+EHl5CHl4aPHwTengFeXhl8PBK6OE15OG1wcN3oYc3kIc3Bg9vhB7eQh7eGjz8EHp4B3l4Z/DwTujhPeThvcHDT6GHD5CHDwYPH4QePkIePho8/BJ6+AR5+GTw8Eno4TPk4bPBw2+hhy+Qhy8GD1+EHr5CHr4aPPwRevgGefhm8PBN6OE75OG7wcNfoYcfkIcfBg8/hB5+Qh5+Gjz8U1F3h1+Qh18GD7+EHn5DHn4bPPwr9PAH8vDH4OGP0MNfyMNfg4cAQg//fGE8/KdLe/jv7f9r698vjId/v/AeAgo9BIA8BDB4CCD0EBDyENDgIZDQQyDIQyCDh0BCD4EhD4ENHgILPQSBPAQxeAgi9BAU8hDU4CGI0EMwyEMwg4dgQg/BIQ/BDR6CCj2EgDyEMHgIIfQQEvIQ0uAhmNBDKMhDKIOHUEIPoSEPoQ0eggs9hIE8hDF4CCP0EBbyENbgIYTQQzjIQziDh3BCD+EhD+ENHkIKPUSAPEQweIgg9BAR8hDR4CGU0EMkyEMkg4dIQg+RIQ+RDR5CCz1EgTxEMXiIIvQQFfIQ1eAhjNBDNMhDNIOHaEIP0SEP0Q0ewgo9xIA8xDB4iCH0EBPyENPgIZzQQyzIQyyDh1hCD7EhD7ENHsILPcSBPMQxeIgj9BAX8hDX4CGC0EM8yEM8g4d4Qg/xIQ/xDR4iCj0kgDwkMHhIIPSQEPKQ0OAhktBDIshDIoOHREIPiSEPiQ0eIgs9JIE8JDF4SCL0kBTykNTgIYrQQzLIQzKDh2RCD8khD8kNHqIKPaSAPKQweEgh9JAS8pDS4CGa0EMqyEMqg4dUQg+pIQ+pDR6iCz2kgTykMXhII/SQFvKQ1uAhhtBDOshDOoOHdEIP6SEP6Q0eYgo9ZIA8ZDB4yCD0kBHykNHgIZbQQybIQyaDh0xCD5khD5kNHmILPWSBPGQxeMgi9JAV8pDV4CGO0EM2yEM2g4dsQg/ZIQ/ZDR7iCj3kgDzkMHjIIfSQE/KQ0+AhntBDLshDLoOHXEIPuSEPuQ0e4gs95IE85DF4yCP0kBfykNfgIYHQQz7IQz6Dh3xCD/khD/kNHhIKPRSAPBQweCgg9FAQ8lDQ4CGR0EMhyEMhg4dCQg+FIQ+FDR4SCz0UgTwUMXgoIvRQFPJQ1OAhidBDMchDMYOHYkIPxSEPxQ0ekgo9lIA8lDB4KCH0UBLyUNLgIZnQQynIQymDh1JCD6UhD6UNHpILPZSBPJQxeCgj9FAW8lDW4CGF0EM5yEM5g4dyQg/lIQ/lDR5SCj1UgDxUMHioIPRQEfJQ0eAhldBDJchDJYOHSkIPlSEPlQ0eUgs9VIE8VDF4qCL0UBXyUNXgIY3QQzXIQzWDh2pCD9UhD9UNHtIKPdSAPNQweKgh9FAT8lDT4CGd0EMtyEMtg4daQg+1IQ+1DR7SCz3UgTzUMXioI/RQF/JQ1+Ahg9BDPchDPYOHekIP9SEP9Q0eMgo9NIA8NDB4aCD00BDy0NDgIZPQQyPIQyODh0ZCD40hD40NHjILPTSBPDQxeGgi9NAU8tDU4CGL0EMzyEMzg4dmQg/NIQ/NDR6yCj20gDy0MHhoIfTQEvLQ0uAhm9BDK8hDK4OHVkIPrSEPrQ0esgs9tIE8tDF4aCP00Bby0NbgIYfQQzvIQzuDh3ZCD+0hD+0NHnIKPXSAPHQweOgg9NAR8tDR4CGX0EMnyEMng4dOQg+dIQ+dDR5yCz10gTx0MXjoIvTQFfLQ1eAhj9BDN8hDN4OHbkIP3SEP3Q0e8go99IA89DB46CH00BPy0NPgIZ/QQy/IQy+Dh15CD70hD70NHvILPfSBPPQxeOgj9NAX8tDX4KGA0EM/yEM/g4d+Qg/9IQ/9DR4KCj0MgDwMMHgYIPQwEPIw0OChkNDDIMjDIIOHQUIPgyEPgw0eCgs9DIE8DDF4GCL0MBTyMNTgoYjQwzDIwzCDh2FCD8MhD8MNHooKPYyAPIwweBgh9DAS8jDS4KGY0MMoyMMog4dRQg+jIQ+jDR6KCz2MgTyMMXgYI/QwFvIw1uChhNDDOMjDOIOHcUIP4yEP4w0eSgo9TIA8TDB4mCD0MBHyMNHgoZTQwyTIwySDh0lCD5MhD5MNHkoLPUyBPEwxeJgi9DAV8jDV4KGM0MM0yMM0g4dpQg/TIQ/TDR7KCj3MgDzMMHiYIfQwE/Iw0+ChnNDDLMjDLIOHWUIPsyEPsw0eygs9zIE8zDF4mCP0MBfyMNfgoYLQwzzIwzyDh3lCD/MhD/MNHioKPSyAPCwweFgg9LAQ8rDQ4KGS0MMiyMMig4dFQg+LIQ+LDR4qCz0sgTwsMXhYIvSwFPKw1OChitDDMsjDMoOHZUIPyyEPyw0eqgo9rIA8rDB4WCH0sBLysNLgoZrQwyrIwyqDh1VCD6shD6sNHqoLPayBPKwxeFgj9LAW8rDW4KGG0MM6yMM6g4d1Qg/rIQ/rDR5qCj1sgDxsMHjYIPSwEfKw0eChltDDJsjDJoOHTUIPmyEPmw0eags9bIE8bDF42CL0sBXysNXgoY7QwzbIwzaDh21CD9shD9sNHuoKPeyAPOwweNgh9LAT8rDT4KGe0MMuyMMug4ddQg+7IQ+7DR7qCz3sgTzsMXjYI/SwF/Kw1+ChgdDDPsjDPoOHfUIP+yEP+w0eGgo9HIA8HDB4OCD0cBDycNDgoZHQwyHIwyGDh0NCD4chD4cNHhoLPRyBPBwxeDgi9HAU8nDU4KGJ0MMxyMMxg4djQg/HIQ/HDR6aCj2cgDycMHg4IfRwEvJw0uChmdDDKcjDKYOHU0IPpyEPpw0emgs9nIE8nDF4OCP0cBbycNbgoYXQwznIwzmDh3NCD+chD+cNHloKPVyAPFwweLgg9HAR8nDR4KGV0MMlyMMlg4dLQg+XIQ+XDR5aCz1cgTxcMXi4IvRwFfJw1eChjdDDNcjDNYOHa0IP1yEP1w0e2go93IA83DB4uCH0cBPycNPgoZ3Qwy3Iwy2Dh1tCD7chD7cNHtoLPdyBPNwxeLgj9HAX8nDX4KGD0MM9yMM9g4d7Qg/3IQ/3DR46Cj08gDw8MHh4IPTwEPLw0OChk9DDI8jDI4OHR0IPjyEPjw0eOgs9PIE8PDF4eCL08BTy8NTgoYvQwzPIwzODh2dCD88hD88NHroKPbyAPLwweHgh9PAS8vDS4KGb0MMryMMrg4dXQg+vIQ+vDR66Cz28gTy8MXh4I/TwFvLw1uChh9DDO8jDO4OHd0IP7yEP7w0eego9fIA8fDB4+CD08BHy8NHgoZfQwyfIwyeDh09CD58hD58NHnoLPXyBPHwxePgi9PAV8vDV4KGP0MM3yMM3g4dvQg/fIQ/fDR76Cj38gDz8MHj4IfTwE/Lw0+Chn9DDL8jDL4OHX0IPvyEPvw0e+gs9/IE8/DF4+CP08Bfy8NfgYYDQwz9fGQ//6dIe/nv7/9r69yvj4d+vvIeBQg8BIA8BDB4CCD0EhDwENHgYJPQQCPIQyOAhkNBDYMhDYIOHwUIPQSAPQQweggg9BIU8BDV4GCL0EAzyEMzgIZjQQ3DIQ3CDh6FCDyEgDyEMHkIIPYSEPIQ0eBgm9BAK8hDK4CGU0ENoyENog4fhQg9hIA9hDB7CCD2EhTyENXgYIfQQDvIQzuAhnNBDeMhDeIOHkUIPESAPEQweIgg9RIQ8RDR4GCX0EAnyEMngIZLQQ2TIQ2SDh9FCD1EgD1EMHqIIPUSFPEQ1eBgj9BAN8hDN4CGa0EN0yEN0g4exQg8xIA8xDB5iCD3EhDzENHgYJ/QQC/IQy+AhltBDbMhDbIOH8UIPcSAPcQwe4gg9xIU8xDV4mCD0EA/yEM/gIZ7QQ3zIQ3yDh4lCDwkgDwkMHhIIPSSEPCQ0eJgk9JAI8pDI4CGR0ENiyENig4fJQg9JIA9JDB6SCD0khTwkNXiYIvSQDPKQzOAhmdBDcshDcoOHqUIPKSAPKQweUgg9pIQ8pDR4mCb0kArykMrgIZXQQ2rIQ2qDh+lCD2kgD2kMHtIIPaSFPKQ1eJgh9JAO8pDO4CGd0EN6yEN6g4eZQg8ZIA8ZDB4yCD1khDxkNHiYJfSQCfKQyeAhk9BDZshDZoOH2UIPWSAPWQwesgg9ZIU8ZDV4mCP0kA3ykM3gIZvQQ3bIQ3aDh7lCDzkgDzkMHnIIPeSEPOQ0eJgn9JAL8pDL4CGX0ENuyENug4f5Qg95IA95DB7yCD3khTzkNXhYIPSQD/KQz+Ahn9BDfshDfoOHhUIPBSAPBQweCgg9FIQ8FDR4WCT0UAjyUMjgoZDQQ2HIQ2GDh8VCD0UgD0UMHooIPRSFPBQ1eFgi9FAM8lDM4KGY0ENxyENxg4elQg8lIA8lDB5KCD2UhDyUNHhYJvRQCvJQyuChlNBDachDaYOH5UIPZSAPZQweygg9lIU8lDV4WCH0UA7yUM7goZzQQ3nIQ3mDh5VCDxUgDxUMHioIPVSEPFQ0eFgl9FAJ8lDJ4KGS0ENlyENlg4fVQg9VIA9VDB6qCD1UhTxUNXhYI/RQDfJQzeChmtBDdchDdYOHtUIPNSAPNQweagg91IQ81DR4WCf0UAvyUMvgoZbQQ23IQ22Dh/VCD3UgD3UMHuoIPdSFPNQ1eNgg9FAP8lDP4KGe0EN9yEN9g4eNQg8NIA8NDB4aCD00hDw0NHjYJPTQCPLQyOChkdBDY8hDY4OHzUIPTSAPTQwemgg9NIU8NDV42CL00Azy0MzgoZnQQ3PIQ3ODh61CDy0gDy0MHloIPbSEPLQ0eNgm9NAK8tDK4KGV0ENryENrg4ftQg9tIA9tDB7aCD20hTy0NXjYIfTQDvLQzuChndBDe8hDe4OHnUIPHSAPHQweOgg9dIQ8dDR42CX00Any0MngoZPQQ2fIQ2eDh91CD10gD10MHroIPXSFPHQ1eNgj9NAN8tDN4KGb0EN3yEN3g4e9Qg89IA89DB56CD30hDz0NHjYJ/TQC/LQy+Chl9BDb8hDb4OH/UIPfSAPfQwe+gg99IU89DV4OCD00A/y0M/goZ/QQ3/IQ3+Dh4NCDwMgDwMMHgYIPQyEPAw0eDgk9DAI8jDI4GGQ0MNgyMNgg4fDQg9DIA9DDB6GCD0MhTwMNXg4IvQwDPIwzOBhmNDDcMjDcIOHo0IPIyAPIwweRgg9jIQ8jDR4OCb0MAryMMrgYZTQw2jIw2iDh+NCD2MgD2MMHsYIPYyFPIw1eDgh9DAO8jDO4GGc0MN4yMN4g4eTQg8TIA8TDB4mCD1MhDxMNHg4JfQwCfIwyeBhktDDZMjDZIOH00IPUyAPUwwepgg9TIU8TDV4OCP0MA3yMM3gYZrQw3TIw3SDh7NCDzMgDzMMHmYIPcyEPMw0eDgn9DAL8jDL4GGW0MNsyMNsg4fzQg9zIA9zDB7mCD3MhTzMNXi4IPQwD/Iwz+BhntDDfMjDfIOHi0IPCyAPCwweFgg9LIQ8LDR4uCT0sAjysMjgYZHQw2LIw2KDh8tCD0sgD0sMHpYIPSyFPCw1eLgi9LAM8rDM4GGZ0MNyyMNyg4erQg8rIA8rDB5WCD2shDysNHi4JvSwCvKwyuBhldDDasjDaoOH60IPayAPawwe1gg9rIU8rDV4uCH0sA7ysM7gYZ3Qw3rIw3qDh5tCDxsgDxsMHjYIPWyEPGw0eLgl9LAJ8rDJ4GGT0MNmyMNmg4fbQg9bIA9bDB62CD1shTxsNXi4I/SwDfKwzeBhm9DDdsjDdoOHu0IPOyAPOwwedgg97IQ87DR4uCf0sAvysMvgYZfQw27Iw26Dh/tCD3sgD3sMHvYIPeyFPOw1eHgg9LAP8rDP4GGf0MN+yMN+g4eHQg8HIA8HDB4OCD0chDwcNHh4JPRwCPJwyODhkNDDYcjDYYOHx0IPRyAPRwwejgg9HIU8HDV4eCL0cAzycMzg4ZjQw3HIw3GDh6dCDycgDycMHk4IPZyEPJw0eHgm9HAK8nDK4OGU0MNpyMNpg4fnQg9nIA9nDB7OCD2chTycNXh4IfRwDvJwzuDhnNDDecjDeYOHl0IPFyAPFwweLgg9XIQ8XDR4eCX0cAnycMng4ZLQw2XIw2WDh9dCD1cgD1cMHq4IPVyFPFw1eHgj9HAN8nDN4OGa0MN1yMN1g4e3Qg83IA83DB5uCD3chDzcNHh4J/RwC/Jwy+DhltDDbcjDbYOH90IPdyAPdwwe7gg93IU83DV4+CD0cA/ycM/g4Z7Qw33Iw32Dh49CDw8gDw8MHh4IPTyEPDw0ePgk9PAI8vDI4OGR0MNjyMNjg4fPQg9PIA9PDB6eCD08hTw8NXj4IvTwDPLwzODhmdDDc8jDc4OHr0IPLyAPLwweXgg9vIQ8vDR4+Cb08Ary8Mrg4ZXQw2vIw2uDh+9CD28gD28MHt4IPbyFPLw1ePgh9PAO8vDO4OGd0MN7yMN7g4efQg8fIA8fDB4+CD18hDx8NHj4JfTwCfLwyeDhk9DDZ8jDZ4OH30IPXyAPXwwevgg9fIU8fDV4+CP08A3y8M3g4ZvQw3fIw3eDh79CDz8gDz8MHn4IPfyEPPw0ePinku4OvyAPvwwefgk9/IY8/DZ4+Ffo4Q/k4Y/Bwx+hh7+Qh78GDwGEHv75xnj4T5f28N/b/9fWv98YD/9+4z0EFHoIAHkIYPAQQOghIOQhoMFDIKGHQJCHQAYPgYQeAkMeAhs8BBZ6CAJ5CGLwEEToISjkIajBQxChh2CQh2AGD8GEHoJDHoIbPAQVeggBeQhh8BBC6CEk5CGkwUMwoYdQkIdQBg+hhB5CQx5CGzwEF3oIA3kIY/AQRughLOQhrMFDCKGHcJCHcAYP4YQewkMewhs8hBR6iAB5iGDwEEHoISLkIaLBQyihh0iQh0gGD5GEHiJDHiIbPIQWeogCeYhi8BBF6CEq5CGqwUMYoYdokIdoBg/RhB6iQx6iGzyEFXqIAXmIYfAQQ+ghJuQhpsFDOKGHWJCHWAYPsYQeYkMeYhs8hBd6iAN5iGPwEEfoIS7kIa7BQwShh3iQh3gGD/GEHuJDHuIbPEQUekgAeUhg8JBA6CEh5CGhwUMkoYdEkIdEBg+JhB4SQx4SGzxEFnpIAnlIYvCQROghKeQhqcFDFKGHZJCHZAYPyYQekkMekhs8RBV6SAF5SGHwkELoISXkIaXBQzShh1SQh1QGD6mEHlJDHlIbPEQXekgDeUhj8JBG6CEt5CGtwUMMoYd0kId0Bg/phB7SQx7SGzzEFHrIAHnIYPCQQeghI+Qho8FDLKGHTJCHTAYPmYQeMkMeMhs8xBZ6yAJ5yGLwkEXoISvkIavBQxyhh2yQh2wGD9mEHrJDHrIbPMQVesgBechh8JBD6CEn5CGnwUM8oYdckIdcBg+5hB5yQx5yGzzEF3rIA3nIY/CQR+ghL+Qhr8FDAqGHfJCHfAYP+YQe8kMe8hs8JBR6KAB5KGDwUEDooSDkoaDBQyKhh0KQh0IGD4WEHgpDHgobPCQWeigCeShi8FBE6KEo5KGowUMSoYdikIdiBg/FhB6KQx6KGzwkFXooAXkoYfBQQuihJOShpMFDMqGHUpCHUgYPpYQeSkMeShs8JBd6KAN5KGPwUEbooSzkoazBQwqhh3KQh3IGD+WEHspDHsobPKQUeqgAeahg8FBB6KEi5KGiwUMqoYdKkIdKBg+VhB4qQx4qGzykFnqoAnmoYvBQReihKuShqsFDGqGHapCHagYP1YQeqkMeqhs8pBV6qAF5qGHwUEPooSbkoabBQzqhh1qQh1oGD7WEHmpDHmobPKQXeqgDeahj8FBH6KEu5KGuwUMGoYd6kId6Bg/1hB7qQx7qGzxkFHpoAHloYPDQQOihIeShocFDJqGHRpCHRgYPjYQeGkMeGhs8ZBZ6aAJ5aGLw0ETooSnkoanBQxahh2aQh2YGD82EHppDHpobPGQVemgBeWhh8NBC6KEl5KGlwUM2oYdWkIdWBg+thB5aQx5aGzxkF3poA3loY/DQRuihLeShrcFDDqGHdpCHdgYP7YQe2kMe2hs85BR66AB56GDw0EHooSPkoaPBQy6hh06Qh04GD52EHjpDHjobPOQWeugCeehi8NBF6KEr5KGrwUMeoYdukIduBg/dhB66Qx66GzzkFXroAXnoYfDQQ+ihJ+Shp8FDPqGHXpCHXgYPvYQeekMeehs85Bd66AN56GPw0EfooS/koa/BQwGhh36Qh34GD/2EHvpDHvobPBQUehgAeRhg8DBA6GEg5GGgwUMhoYdBkIdBBg+DhB4GQx4GGzwUFnoYAnkYYvAwROhhKORhqMFDEaGHYZCHYQYPw4QehkMehhs8FBV6GAF5GGHwMELoYSTkYaTBQzGhh1GQh1EGD6OEHkZDHkYbPBQXehgDeRhj8DBG6GEs5GGswUMJoYdxkIdxBg/jhB7GQx7GGzyUFHqYAHmYYPAwQehhIuRhosFDKaGHSZCHSQYPk4QeJkMeJhs8lBZ6mAJ5mGLwMEXoYSrkYarBQxmhh2mQh2kGD9OEHqZDHqYbPJQVepgBeZhh8DBD6GEm5GGmwUM5oYdZkIdZBg+zhB5mQx5mGzyUF3qYA3mYY/AwR+hhLuRhrsFDBaGHeZCHeQYP84Qe5kMe5hs8VBR6WAB5WGDwsEDoYSHkYaHBQyWhh0WQh0UGD4uEHhZDHhYbPFQWelgCeVhi8LBE6GEp5GGpwUMVoYdlkIdlBg/LhB6WQx6WGzxUFXpYAXlYYfCwQuhhJeRhpcFDNaGHVZCHVQYPq4QeVkMeVhs8VBd6WAN5WGPwsEboYS3kYa3BQw2hh3WQh3UGD+uEHtZDHtYbPNQUetgAedhg8LBB6GEj5GGjwUMtoYdNkIdNBg+bhB42Qx42GzzUFnrYAnnYYvCwRehhK+Rhq8FDHaGHbZCHbQYP24QetkMeths81BV62AF52GHwsEPoYSfkYafBQz2hh12Qh10GD7uEHnZDHnYbPNQXetgDedhj8LBH6GEv5GGvwUMDoYd9kId9Bg/7hB72Qx72Gzw0FHo4AHk4YPBwQOjhIOThoMFDI6GHQ5CHQwYPh4QeDkMeDhs8NBZ6OAJ5OGLwcETo4Sjk4ajBQxOhh2OQh2MGD8eEHo5DHo4bPDQVejgBeThh8HBC6OEk5OGkwUMzoYdTkIdTBg+nhB5OQx5OGzw0F3o4A3k4Y/BwRujhLOThrMFDC6GHc5CHcwYP54QezkMezhs8tBR6uAB5uGDwcEHo4SLk4aLBQyuhh0uQh0sGD5eEHi5DHi4bPLQWergCebhi8HBF6OEq5OGqwUMboYdrkIdrBg/XhB6uQx6uGzy0FXq4AXm4YfBwQ+jhJuThpsFDO6GHW5CHWwYPt4QebkMebhs8tBd6uAN5uGPwcEfo4S7k4a7BQwehh3uQh3sGD/eEHu5DHu4bPHQUengAeXhg8PBA6OEh5OGhwUMnoYdHkIdHBg+PhB4eQx4eGzx0Fnp4Anl4YvDwROjhKeThqcFDF6GHZ5CHZwYPz4QenkMenhs8dBV6eAF5eGHw8ELo4SXk4aXBQzehh1eQh1cGD6+EHl5DHl4bPHQXengDeXhj8PBG6OEt5OGtwUMPoYd3kId3Bg/vhB7eQx7eGzz0FHr4AHn4YPDwQejhI+Tho8FDL6GHT5CHTwYPn4QePkMePhs89BZ6+AJ5+GLw8EXo4Svk4avBQx+hh2+Qh28GD9+EHr5DHr4bPPQVevgBefhh8PBD6OEn5OGnwUM/oYdfkIdfBg+/hB5+Qx5+Gzz0F3r4A3n4Y/DwR+jhL+Thr8HDAKGHf74zHv7TpT389/b/tfXvd8bDv995DwOFHgJAHgIYPAQQeggIeQho8DBI6CEQ5CGQwUMgoYfAkIfABg+DhR6CQB6CGDwEEXoICnkIavAwROghGOQhmMFDMKGH4JCH4AYPQ4UeQkAeQhg8hBB6CAl5CGnwMEzoIRTkIZTBQyihh9CQh9AGD8OFHsJAHsIYPIQReggLeQhr8DBC6CEc5CGcwUM4oYfwkIfwBg8jhR4iQB4iGDxEEHqICHmIaPAwSughEuQhksFDJKGHyJCHyAYPo4UeokAeohg8RBF6iAp5iGrwMEboIRrkIZrBQzShh+iQh+gGD2OFHmJAHmIYPMQQeogJeYhp8DBO6CEW5CGWwUMsoYfYkIfYBg/jhR7iQB7iGDzEEXqIC3mIa/AwQeghHuQhnsFDPKGH+JCH+AYPE4UeEkAeEhg8JBB6SAh5SGjwMEnoIRHkIZHBQyKhh8SQh8QGD5OFHpJAHpIYPCQRekgKeUhq8DBF6CEZ5CGZwUMyoYfkkIfkBg9ThR5SQB5SGDykEHpICXlIafAwTeghFeQhlcFDKqGH1JCH1AYP04Ue0kAe0hg8pBF6SAt5SGvwMEPoIR3kIZ3BQzqhh/SQh/QGDzOFHjJAHjIYPGQQesgIecho8DBL6CET5CGTwUMmoYfMkIfMBg+zhR6yQB6yGDxkEXrICnnIavAwR+ghG+Qhm8FDNqGH7JCH7AYPc4UeckAechg85BB6yAl5yGnwME/oIRfkIZfBQy6hh9yQh9wGD/OFHvJAHvIYPOQResgLechr8LBA6CEf5CGfwUM+oYf8kIf8Bg8LhR4KQB4KGDwUEHooCHkoaPCwSOihEOShkMFDIaGHwpCHwgYPi4UeikAeihg8FBF6KAp5KGrwsETooRjkoZjBQzGhh+KQh+IGD0uFHkpAHkoYPJQQeigJeShp8LBM6KEU5KGUwUMpoYfSkIfSBg/LhR7KQB7KGDyUEXooC3koa/CwQuihHOShnMFDOaGH8pCH8gYPK4UeKkAeKhg8VBB6qAh5qGjwsErooRLkoZLBQyWhh8qQh8oGD6uFHqpAHqoYPFQReqgKeahq8LBG6KEa5KGawUM1oYfqkIfqBg9rhR5qQB5qGDzUEHqoCXmoafCwTuihFuShlsFDLaGH2pCH2gYP64Ue6kAe6hg81BF6qAt5qGvwsEHooR7koZ7BQz2hh/qQh/oGDxuFHhpAHhoYPDQQemgIeWho8LBJ6KER5KGRwUMjoYfGkIfGBg+bhR6aQB6aGDw0EXpoCnloavCwReihGeShmcFDM6GH5pCH5gYPW4UeWkAeWhg8tBB6aAl5aGnwsE3ooRXkoZXBQyuhh9aQh9YGD9uFHtpAHtoYPLQRemgLeWhr8LBD6KEd5KGdwUM7oYf2kIf2Bg87hR46QB46GDx0EHroCHnoaPCwS+ihE+Shk8FDJ6GHzpCHzgYPu4UeukAeuhg8dBF66Ap56GrwsEfooRvkoZvBQzehh+6Qh+4GD3uFHnpAHnoYPPQQeugJeehp8LBP6KEX5KGXwUMvoYfekIfeBg/7hR76QB76GDz0EXroC3noa/BwQOihH+Shn8FDP6GH/pCH/gYPB4UeBkAeBhg8DBB6GAh5GGjwcEjoYRDkYZDBwyChh8GQh8EGD4eFHoZAHoYYPAwRehgKeRhq8HBE6GEY5GGYwcMwoYfhkIfhBg9HhR5GQB5GGDyMEHoYCXkYafBwTOhhFORhlMHDKKGH0ZCH0QYPx4UexkAexhg8jBF6GAt5GGvwcELoYRzkYZzBwzihh/GQh/EGDyeFHiZAHiYYPEwQepgIeZho8HBK6GES5GGSwcMkoYfJkIfJBg+nhR6mQB6mGDxMEXqYCnmYavBwRuhhGuRhmsHDNKGH6ZCH6QYPZ4UeZkAeZhg8zBB6mAl5mGnwcE7oYRbkYZbBwyyhh9mQh9kGD+eFHuZAHuYYPMwRepgLeZhr8HBB6GEe5GGewcM8oYf5kIf5Bg8XhR4WQB4WGDwsEHpYCHlYaPBwSehhEeRhkcHDIqGHxZCHxQYPl4UelkAelhg8LBF6WAp5WGrwcEXoYRnkYZnBwzKhh+WQh+UGD1eFHlZAHlYYPKwQelgJeVhp8HBN6GEV5GGVwcMqoYfVkIfVBg/XhR7WQB7WGDysEXpYC3lYa/BwQ+hhHeRhncHDOqGH9ZCH9QYPN4UeNkAeNhg8bBB62Ah52GjwcEvoYRPkYZPBwyahh82Qh80GD7eFHrZAHrYYPGwRetgKedhq8HBH6GEb5GGbwcM2oYftkIftBg93hR52QB52GDzsEHrYCXnYafBwT+hhF+Rhl8HDLqGH3ZCH3QYP94Ue9kAe9hg87BF62At52Gvw8EDoYR/kYZ/Bwz6hh/2Qh/0GDw+FHg5AHg4YPBwQejgIeTho8PBI6OEQ5OGQwcMhoYfDkIfDBg+PhR6OQB6OGDwcEXo4Cnk4avDwROjhGOThmMHDMaGH45CH4wYPT4UeTkAeThg8nBB6OAl5OGnw8Ezo4RTk4ZTBwymhh9OQh9MGD8+FHs5AHs4YPJwRejgLeThr8PBC6OEc5OGcwcM5oYfzkIfzBg8vhR4uQB4uGDxcEHq4CHm4aPDwSujhEuThksHDJaGHy5CHywYPr4UerkAerhg8XBF6uAp5uGrw8Ebo4Rrk4ZrBwzWhh+uQh+sGD2+FHm5AHm4YPNwQergJebhp8PBO6OEW5OGWwcMtoYfbkIfbBg/vhR7uQB7uGDzcEXq4C3m4a/DwQejhHuThnsHDPaGH+5CH+wYPH4UeHkAeHhg8PBB6eAh5eGjw8Eno4RHk4ZHBwyOhh8eQh8cGD5+FHp5AHp4YPDwRengKeXhq8PBF6OEZ5OGZwcMzoYfnkIfnBg9fhR5eQB5eGDy8EHp4CXl4afDwTejhFeThlcHDK6GH15CH1wYP34Ue3kAe3hg8vBF6eAt5eGvw8EPo4R3k4Z3Bwzuhh/eQh/cGDz+FHj5AHj4YPHwQevgIefho8PBL6OET5OGTwcMnoYfPkIfPBg+/hR6+QB6+GDx8EXr4Cnn4avDwR+jhG+Thm8HDN6GH75CH7wYPf4UefkAefhg8/BB6+Al5+Gnw8E9l3R1+QR5+GTz8Enr4DXn4bfDwr9DDH8jDH4OHP0IPfyEPfw0eAgg9/POD8fCfLu3hv7f/r61/fzAe/v3Bewgo9BAA8hDA4CGA0ENAyENAg4dAQg+BIA+BDB4CCT0EhjwENngILPQQBPIQxOAhiNBDUMhDUIOHIEIPwSAPwQweggk9BIc8BDd4CCr0EALyEMLgIYTQQ0jIQ0iDh2BCD6EgD6EMHkIJPYSGPIQ2eAgu9BAG8hDG4CGM0ENYyENYg4cQQg/hIA/hDB7CCT2EhzyEN3gIKfQQAfIQweAhgtBDRMhDRIOHUEIPkSAPkQweIgk9RIY8RDZ4CC30EAXyEMXgIYrQQ1TIQ1SDhzBCD9EgD9EMHqIJPUSHPEQ3eAgr9BAD8hDD4CGG0ENMyENMg4dwQg+xIA+xDB5iCT3EhjzENngIL/QQB/IQx+AhjtBDXMhDXIOHCEIP8SAP8Qwe4gk9xIc8xDd4iCj0kADykMDgIYHQQ0LIQ0KDh0hCD4kgD4kMHhIJPSSGPCQ2eIgs9JAE8pDE4CGJ0ENSyENSg4coQg/JIA/JDB6SCT0khzwkN3iIKvSQAvKQwuAhhdBDSshDSoOHaEIPqSAPqQweUgk9pIY8pDZ4iC70kAbykMbgIY3QQ1rIQ1qDhxhCD+kgD+kMHtIJPaSHPKQ3eIgp9JAB8pDB4CGD0ENGyENGg4dYQg+ZIA+ZDB4yCT1khjxkNniILfSQBfKQxeAhi9BDVshDVoOHOEIP2SAP2Qwesgk9ZIc8ZDd4iCv0kAPykMPgIYfQQ07IQ06Dh3hCD7kgD7kMHnIJPeSGPOQ2eIgv9JAH8pDH4CGP0ENeyENeg4cEQg/5IA/5DB7yCT3khzzkN3hIKPRQAPJQwOChgNBDQchDQYOHREIPhSAPhQweCgk9FIY8FDZ4SCz0UATyUMTgoYjQQ1HIQ1GDhyRCD8UgD8UMHooJPRSHPBQ3eEgq9FAC8lDC4KGE0ENJyENJg4dkQg+lIA+lDB5KCT2UhjyUNnhILvRQBvJQxuChjNBDWchDWYOHFEIP5SAP5Qweygk9lIc8lDd4SCn0UAHyUMHgoYLQQ0XIQ0WDh1RCD5UgD5UMHioJPVSGPFQ2eEgt9FAF8lDF4KGK0ENVyENVg4c0Qg/VIA/VDB6qCT1UhzxUN3hIK/RQA/JQw+ChhtBDTchDTYOHdEIPtSAPtQweagk91IY81DZ4SC/0UAfyUMfgoY7QQ13IQ12DhwxCD/UgD/UMHuoJPdSHPNQ3eMgo9NAA8tDA4KGB0ENDyENDg4dMQg+NIA+NDB4aCT00hjw0NnjILPTQBPLQxOChidBDU8hDU4OHLEIPzSAPzQwemgk9NIc8NDd4yCr00ALy0MLgoYXQQ0vIQ0uDh2xCD60gD60MHloJPbSGPLQ2eMgu9NAG8tDG4KGN0ENbyENbg4ccQg/tIA/tDB7aCT20hzy0N3jIKfTQAfLQweChg9BDR8hDR4OHXEIPnSAPnQweOgk9dIY8dDZ4yC300AXy0MXgoYvQQ1fIQ1eDhzxCD90gD90MHroJPXSHPHQ3eMgr9NAD8tDD4KGH0ENPyENPg4d8Qg+9IA+9DB56CT30hjz0NnjIL/TQB/LQx+Chj9BDX8hDX4OHAkIP/SAP/Qwe+gk99Ic89Dd4KCj0MADyMMDgYYDQw0DIw0CDh0JCD4MgD4MMHgYJPQyGPAw2eCgs9DAE8jDE4GGI0MNQyMNQg4ciQg/DIA/DDB6GCT0MhzwMN3goKvQwAvIwwuBhhNDDSMjDSIOHYkIPoyAPowweRgk9jIY8jDZ4KC70MAbyMMbgYYzQw1jIw1iDhxJCD+MgD+MMHsYJPYyHPIw3eCgp9DAB8jDB4GGC0MNEyMNEg4dSQg+TIA+TDB4mCT1MhjxMNngoLfQwBfIwxeBhitDDVMjDVIOHMkIP0yAP0wwepgk9TIc8TDd4KCv0MAPyMMPgYYbQw0zIw0yDh3JCD7MgD7MMHmYJPcyGPMw2eCgv9DAH8jDH4GGO0MNcyMNcg4cKQg/zIA/zDB7mCT3MhzzMN3ioKPSwAPKwwOBhgdDDQsjDQoOHSkIPiyAPiwweFgk9LIY8LDZ4qCz0sATysMTgYYnQw1LIw1KDhypCD8sgD8sMHpYJPSyHPCw3eKgq9LAC8rDC4GGF0MNKyMNKg4dqQg+rIA+rDB5WCT2shjysNnioLvSwBvKwxuBhjdDDWsjDWoOHGkIP6yAP6wwe1gk9rIc8rDd4qCn0sAHysMHgYYPQw0bIw0aDh1pCD5sgD5sMHjYJPWyGPGw2eKgt9LAF8rDF4GGL0MNWyMNWg4c6Qg/bIA/bDB62CT1shzxsN3ioK/SwA/Kww+Bhh9DDTsjDToOHekIPuyAPuwwedgk97IY87DZ4qC/0sAfysMfgYY/Qw17Iw16DhwZCD/sgD/sMHvYJPeyHPOw3eGgo9HAA8nDA4OGA0MNByMNBg4dGQg+HIA+HDB4OCT0chjwcNnhoLPRwBPJwxODhiNDDUcjDUYOHJkIPxyAPxwwejgk9HIc8HDd4aCr0cALycMLg4YTQw0nIw0mDh2ZCD6cgD6cMHk4JPZyGPJw2eGgu9HAG8nDG4OGM0MNZyMNZg4cWQg/nIA/nDB7OCT2chzycN3hoKfRwAfJwweDhgtDDRcjDRYOHVkIPlyAPlwweLgk9XIY8XDZ4aC30cAXycMXg4YrQw1XIw1WDhzZCD9cgD9cMHq4JPVyHPFw3eGgr9HAD8nDD4OGG0MNNyMNNg4d2Qg+3IA+3DB5uCT3chjzcNnhoL/RwB/Jwx+DhjtDDXcjDXYOHDkIP9yAP9wwe7gk93Ic83Dd46Cj08ADy8MDg4YHQw0PIw0ODh05CD48gD48MHh4JPTyGPDw2eOgs9PAE8vDE4OGJ0MNTyMNTg4cuQg/PIA/PDB6eCT08hzw8N3joKvTwAvLwwuDhhdDDS8jDS4OHbkIPryAPrwweXgk9vIY8vDZ46C708Aby8Mbg4Y3Qw1vIw1uDhx5CD+8gD+8MHt4JPbyHPLw3eOgp9PAB8vDB4OGD0MNHyMNHg4deQg+fIA+fDB4+CT18hjx8NnjoLfTwBfLwxeDhi9DDV8jDV4OHPkIP3yAP3wwevgk9fIc8fDd46Cv08APy8MPg4YfQw0/Iw0+Dh35CD78gD78MHn4JPfyGPPw2eOgv9PAH8vDH4OGP0MNfyMNfg4cBQg///GQ8/KdLe/jv7f9r69+fjId/f/IeBgo9BIA8BDB4CCD0EBDyENDgYZDQQyDIQyCDh0BCD4EhD4ENHgYLPQSBPAQxeAgi9BAU8hDU4GGI0EMwyEMwg4dgQg/BIQ/BDR6GCj2EgDyEMHgIIfQQEvIQ0uBhmNBDKMhDKIOHUEIPoSEPoQ0ehgs9hIE8hDF4CCP0EBbyENbgYYTQQzjIQziDh3BCD+EhD+ENHkYKPUSAPEQweIgg9BAR8hDR4GGU0EMkyEMkg4dIQg+RIQ+RDR5GCz1EgTxEMXiIIvQQFfIQ1eBhjNBDNMhDNIOHaEIP0SEP0Q0exgo9xIA8xDB4iCH0EBPyENPgYZzQQyzIQyyDh1hCD7EhD7ENHsYLPcSBPMQxeIgj9BAX8hDX4GGC0EM8yEM8g4d4Qg/xIQ/xDR4mCj0kgDwkMHhIIPSQEPKQ0OBhktBDIshDIoOHREIPiSEPiQ0eJgs9JIE8JDF4SCL0kBTykNTgYYrQQzLIQzKDh2RCD8khD8kNHqYKPaSAPKQweEgh9JAS8pDS4GGa0EMqyEMqg4dUQg+pIQ+pDR6mCz2kgTykMXhII/SQFvKQ1uBhhtBDOshDOoOHdEIP6SEP6Q0eZgo9ZIA8ZDB4yCD0kBHykNHgYZbQQybIQyaDh0xCD5khD5kNHmYLPWSBPGQxeMgi9JAV8pDV4GGO0EM2yEM2g4dsQg/ZIQ/ZDR7mCj3kgDzkMHjIIfSQE/KQ0+BhntBDLshDLoOHXEIPuSEPuQ0e5gs95IE85DF4yCP0kBfykNfgYYHQQz7IQz6Dh3xCD/khD/kNHhYKPRSAPBQweCgg9FAQ8lDQ4GGR0EMhyEMhg4dCQg+FIQ+FDR4WCz0UgTwUMXgoIvRQFPJQ1OBhidBDMchDMYOHYkIPxSEPxQ0elgo9lIA8lDB4KCH0UBLyUNLgYZnQQynIQymDh1JCD6UhD6UNHpYLPZSBPJQxeCgj9FAW8lDW4GGF0EM5yEM5g4dyQg/lIQ/lDR5WCj1UgDxUMHioIPRQEfJQ0eBhldBDJchDJYOHSkIPlSEPlQ0eVgs9VIE8VDF4qCL0UBXyUNXgYY3QQzXIQzWDh2pCD9UhD9UNHtYKPdSAPNQweKgh9FAT8lDT4GGd0EMtyEMtg4daQg+1IQ+1DR7WCz3UgTzUMXioI/RQF/JQ1+Bhg9BDPchDPYOHekIP9SEP9Q0eNgo9NIA8NDB4aCD00BDy0NDgYZPQQyPIQyODh0ZCD40hD40NHjYLPTSBPDQxeGgi9NAU8tDU4GGL0EMzyEMzg4dmQg/NIQ/NDR62Cj20gDy0MHhoIfTQEvLQ0uBhm9BDK8hDK4OHVkIPrSEPrQ0etgs9tIE8tDF4aCP00Bby0NbgYYfQQzvIQzuDh3ZCD+0hD+0NHnYKPXSAPHQweOgg9NAR8tDR4GGX0EMnyEMng4dOQg+dIQ+dDR52Cz10gTx0MXjoIvTQFfLQ1eBhj9BDN8hDN4OHbkIP3SEP3Q0e9go99IA89DB46CH00BPy0NPgYZ/QQy/IQy+Dh15CD70hD70NHvYLPfSBPPQxeOgj9NAX8tDX4OGA0EM/yEM/g4d+Qg/9IQ/9DR4OCj0MgDwMMHgYIPQwEPIw0ODhkNDDIMjDIIOHQUIPgyEPgw0eDgs9DIE8DDF4GCL0MBTyMNTg4YjQwzDIwzCDh2FCD8MhD8MNHo4KPYyAPIwweBgh9DAS8jDS4OGY0MMoyMMog4dRQg+jIQ+jDR6OCz2MgTyMMXgYI/QwFvIw1uDhhNDDOMjDOIOHcUIP4yEP4w0eTgo9TIA8TDB4mCD0MBHyMNHg4ZTQwyTIwySDh0lCD5MhD5MNHk4LPUyBPEwxeJgi9DAV8jDV4OGM0MM0yMM0g4dpQg/TIQ/TDR7OCj3MgDzMMHiYIfQwE/Iw0+DhnNDDLMjDLIOHWUIPsyEPsw0ezgs9zIE8zDF4mCP0MBfyMNfg4YLQwzzIwzyDh3lCD/MhD/MNHi4KPSyAPCwweFgg9LAQ8rDQ4OGS0MMiyMMig4dFQg+LIQ+LDR4uCz0sgTwsMXhYIvSwFPKw1ODhitDDMsjDMoOHZUIPyyEPyw0ergo9rIA8rDB4WCH0sBLysNLg4ZrQwyrIwyqDh1VCD6shD6sNHq4LPayBPKwxeFgj9LAW8rDW4OGG0MM6yMM6g4d1Qg/rIQ/rDR5uCj1sgDxsMHjYIPSwEfKw0eDhltDDJsjDJoOHTUIPmyEPmw0ebgs9bIE8bDF42CL0sBXysNXg4Y7QwzbIwzaDh21CD9shD9sNHu4KPeyAPOwweNgh9LAT8rDT4OGe0MMuyMMug4ddQg+7IQ+7DR7uCz3sgTzsMXjYI/SwF/Kw1+DhgdDDPsjDPoOHfUIP+yEP+w0eHgo9HIA8HDB4OCD0cBDycNDg4ZHQwyHIwyGDh0NCD4chD4cNHh4LPRyBPBwxeDgi9HAU8nDU4OGJ0MMxyMMxg4djQg/HIQ/HDR6eCj2cgDycMHg4IfRwEvJw0uDhmdDDKcjDKYOHU0IPpyEPpw0engs9nIE8nDF4OCP0cBbycNbg4YXQwznIwzmDh3NCD+chD+cNHl4KPVyAPFwweLgg9HAR8nDR4OGV0MMlyMMlg4dLQg+XIQ+XDR5eCz1cgTxcMXj4/3ilhxhQtDTKwu/aeNe2bdu2bdu2bdu2bdu2baNTs+oedVJ77TM4w5WdP98VoYerkIerBg9vhB6uQR6uGTxcE3q4Dnm4bvDwVujhBuThhsHDDaGHm5CHmwYP74QebkEebhk83BJ6uA15uG3w8F7o4Q7k4Y7Bwx2hh7uQh7sGDx+EHu5BHu4ZPNwTergPebhv8PBR6OEB5OGBwcMDoYeHkIeHBg+fhB4eQR4eGTw8Enp4DHl4bPDwWejhCeThicHDE6GHp5CHpwYPX4QenkEenhk8PBN6eA55eG7w8FXo4QXk4YXBwwuhh5eQh5cGD9+EHl5BHl4ZPLwSengNeXht8PBd6OEN5OGNwcMboYe3kIe3Bg8/hB7eQR7eGTy8E3p4D3l4b/DwU+jhA+Thg8HDB6GHj5CHjwYPv4QePkEePhk8fBJ6+Ax5+Gzw8Fvo4Qvk4YvBwxehh6+Qh68GD3+EHr5BHr4ZPHwTevgOefhu8PBX6OEH5OGHwcMPoYefkIefBg//VNHd4Rfk4ZfBwy+hh9+Qh98GDwGEHv5AHv4YPPwRevgLefhr8BBQ6OGfX4yH/3RpD/+9/X9tBfjFeAjwi/cQSOghIOQhoMFDQKGHQJCHQAYPgYUeAkMeAhs8BBZ6CAJ5CGLwEEToISjkIajBQ1Chh2CQh2AGD0GFHoJDHoIbPAQXeggBeQhh8BBM6CEk5CGkwUNIoYdQkIdQBg/BhR5CQx5CGzyEFnoIA3kIY/AQQughLOQhrMFDWKGHcJCHcAYPIYUewkMewhs8hBd6+Bfy8K/BQyihhwiQhwgGDxGEHiJCHiIaPIQWeogEeYhk8BBJ6CEy5CGywUMYoYcokIcoBg9RhB6iQh6iGjyEFXqIBnmIZvAQTeghOuQhusFDOKGHGJCHGAYPMYQeYkIeYho8hBd6iAV5iGXwEEvoITbkIbbBw79CD3EgD3EMHuIIPcSFPMQ1eIgg9BAP8hDP4CGe0EN8yEN8g4eIQg8JIA8JDB4SCD0khDwkNHiIJPSQCPKQyOAhkdBDYshDYoOHyEIPSSAPSQwekgg9JIU8JDV4iCL0kAzykMzgIZnQQ3LIQ3KDh6hCDykgDykMHlIIPaSEPKQ0eIgm9JAK8pDK4CGV0ENqyENqg4foQg9pIA9pDB7SCD2khTykNXiIIfSQDvKQzuAhndBDeshDeoOHmEIPGSAPGQweMgg9ZIQ8ZDR4iCX0kAnykMngIZPQQ2bIQ2aDh9hCD1kgD1kMHrIIPWSFPGQ1eIgj9JAN8pDN4CGb0EN2yEN2g4e4Qg85IA85DB5yCD3khDzkNHiIJ/SQC/KQy+Ahl9BDbshDboOH+EIPeSAPeQwe8gg95IU85DV4SCD0kA/ykM/gIZ/QQ37IQ36Dh4RCDwUgDwUMHgoIPRSEPBQ0eEgk9FAI8lDI4KGQ0ENhyENhg4fEQg9FIA9FDB6KCD0UhTwUNXhIIvRQDPJQzOChmNBDcchDcYOHpEIPJSAPJQweSgg9lIQ8lDR4SCb0UAryUMrgoZTQQ2nIQ2mDh+RCD2UgD2UMHsoIPZSFPJQ1eEgh9FAO8lDO4KGc0EN5yEN5g4eUQg8VIA8VDB4qCD1UhDxUNHhIJfRQCfJQyeChktBDZchDZYOH1EIPVSAPVQweqgg9VIU8VDV4SCP0UA3yUM3goZrQQ3XIQ3WDh7RCDzUgDzUMHmoIPdSEPNQ0eEgn9FAL8lDL4KGW0ENtyENtg4f0Qg91IA91DB7qCD3UhTzUNXjIIPRQD/JQz+ChntBDfchDfYOHjEIPDSAPDQweGgg9NIQ8NDR4yCT00Ajy0MjgoZHQQ2PIQ2ODh8xCD00gD00MHpoIPTSFPDQ1eMgi9NAM8tDM4KGZ0ENzyENzg4esQg8tIA8tDB5aCD20hDy0NHjIJvTQCvLQyuChldBDa8hDa4OH7EIPbSAPbQwe2gg9tIU8tDV4yCH00A7y0M7goZ3QQ3vIQ3uDh5xCDx0gDx0MHjoIPXSEPHQ0eMgl9NAJ8tDJ4KGT0ENnyENng4fcQg9dIA9dDB66CD10hTx0NXjII/TQDfLQzeChm9BDd8hDd4OHvEIPPSAPPQweegg99IQ89DR4yCf00Avy0MvgoZfQQ2/IQ2+Dh/xCD30gD30MHvoIPfSFPPQ1eCgg9NAP8tDP4KGf0EN/yEN/g4eCQg8DIA8DDB4GCD0MhDwMNHgoJPQwCPIwyOBhkNDDYMjDYIOHwkIPQyAPQwwehgg9DIU8DDV4KCL0MAzyMMzgYZjQw3DIw3CDh6JCDyMgDyMMHkYIPYyEPIw0eCgm9DAK8jDK4GGU0MNoyMNog4fiQg9jIA9jDB7GCD2MhTyMNXgoIfQwDvIwzuBhnNDDeMjDeIOHkkIPEyAPEwweJgg9TIQ8TDR4KCX0MAnyMMngYZLQw2TIw2SDh9JCD1MgD1MMHqYIPUyFPEw1eCgj9DAN8jDN4GGa0MN0yMN0g4eyQg8zIA8zDB5mCD3MhDzMNHgoJ/QwC/Iwy+BhltDDbMjDbIOH8kIPcyAPcwwe5gg9zIU8zDV4qCD0MA/yMM/gYZ7Qw3zIw3yDh4pCDwsgDwsMHhYIPSyEPCw0eKgk9LAI8rDI4GGR0MNiyMNig4fKQg9LIA9LDB6WCD0shTwsNXioIvSwDPKwzOBhmdDDcsjDcoOHqkIPKyAPKwweVgg9rIQ8rDR4qCb0sArysMrgYZXQw2rIw2qDh+pCD2sgD2sMHtYIPayFPKw1eKgh9LAO8rDO4GGd0MN6yMN6g4eaQg8bIA8bDB42CD1shDxsNHioJfSwCfKwyeBhk9DDZsjDZoOH2kIPWyAPWwwetgg9bIU8bDV4qCP0sA3ysM3gYZvQw3bIw3aDh7pCDzsgDzsMHnYIPeyEPOw0eKgn9LAL8rDL4GGX0MNuyMNug4f6Qg97IA97DB72CD3shTzsNXhoIPSwD/Kwz+Bhn9DDfsjDfoOHhkIPByAPBwweDgg9HIQ8HDR4aCT0cAjycMjg4ZDQw2HIw2GDh8ZCD0cgD0cMHo4IPRyFPBw1eGgi9HAM8nDM4OGY0MNxyMNxg4emQg8nIA8nDB5OCD2chDycNHhoJvRwCvJwyuDhlNDDacjDaYOH5kIPZyAPZwwezgg9nIU8nDV4aCH0cA7ycM7g4ZzQw3nIw3mDh5ZCDxcgDxcMHi4IPVyEPFw0eGgl9HAJ8nDJ4OGS0MNlyMNlg4fWQg9XIA9XDB6uCD1chTxcNXhoI/RwDfJwzeDhmtDDdcjDdYOHtkIPNyAPNwwebgg93IQ83DR4aCf0cAvycMvg4ZbQw23Iw22Dh/ZCD3cgD3cMHu4IPdyFPNw1eOgg9HAP8nDP4OGe0MN9yMN9g4eOQg8PIA8PDB4eCD08hDw8NHjoJPTwCPLwyODhkdDDY8jDY4OHzkIPTyAPTwwengg9PIU8PDV46CL08Azy8Mzg4ZnQw3PIw3ODh65CDy8gDy8MHl4IPbyEPLw0eOgm9PAK8vDK4OGV0MNryMNrg4fuQg9vIA9vDB7eCD28hTy8NXjoIfTwDvLwzuDhndDDe8jDe4OHnkIPHyAPHwwePgg9fIQ8fDR46CX08Any8Mng4ZPQw2fIw2eDh95CD18gD18MHr4IPXyFPHw1eOgj9PAN8vDN4OGb0MN3yMN3g4e+Qg8/IA8/DB5+CD38hDz8NHjoJ/TwC/Lwy+Dhl9DDb8jDb4OH/kIPfyAPfwwe/gg9/IU8/DV4GCD08M9vxsN/urSH/97+v7YC/GY8BPjNexgo9BAQ8hDQ4CGg0EMgyEMgg4dBQg+BIQ+BDR4CCz0EgTwEMXgYLPQQFPIQ1OAhqNBDMMhDMIOHIUIPwSEPwQ0eggs9hIA8hDB4GCr0EBLyENLgIaTQQyjIQyiDh2FCD6EhD6ENHkILPYSBPIQxeBgu9BAW8hDW4CGs0EM4yEM4g4cRQg/hIQ/hDR7CCz38C3n41+BhpNBDBMhDBIOHCEIPESEPEQ0eRgk9RII8RDJ4iCT0EBnyENngYbTQQxTIQxSDhyhCD1EhD1ENHsYIPUSDPEQzeIgm9BAd8hDd4GGs0EMMyEMMg4cYQg8xIQ8xDR7GCT3EgjzEMniIJfQQG/IQ2+BhvNBDHMhDHIOHOEIPcSEPcQ0eJgg9xIM8xDN4iCf0EB/yEN/gYaLQQwLIQwKDhwRCDwkhDwkNHiYJPSSCPCQyeEgk9JAY8pDY4GGy0EMSyEMSg4ckQg9JIQ9JDR6mCD0kgzwkM3hIJvSQHPKQ3OBhqtBDCshDCoOHFEIPKSEPKQ0epgk9pII8pDJ4SCX0kBrykNrgYbrQQxrIQxqDhzRCD2khD2kNHmYIPaSDPKQzeEgn9JAe8pDe4GGm0EMGyEMGg4cMQg8ZIQ8ZDR5mCT1kgjxkMnjIJPSQGfKQ2eBhttBDFshDFoOHLEIPWSEPWQ0e5gg9ZIM8ZDN4yCb0kB3ykN3gYa7QQw7IQw6DhxxCDzkhDzkNHuYJPeSCPOQyeMgl9JAb8pDb4GG+0EMeyEMeg4c8Qg95IQ95DR4WCD3kgzzkM3jIJ/SQH/KQ3+BhodBDAchDAYOHAkIPBSEPBQ0eFgk9FII8FDJ4KCT0UBjyUNjgYbHQQxHIQxGDhyJCD0UhD0UNHpYIPRSDPBQzeCgm9FAc8lDc4GGp0EMJyEMJg4cSQg8lIQ8lDR6WCT2UgjyUMngoJfRQGvJQ2uBhudBDGchDGYOHMkIPZSEPZQ0eVgg9lIM8lDN4KCf0UB7yUN7gYaXQQwXIQwWDhwpCDxUhDxUNHlYJPVSCPFQyeKgk9FAZ8lDZ4GG10EMVyEMVg4cqQg9VIQ9VDR7WCD1UgzxUM3ioJvRQHfJQ3eBhrdBDDchDDYOHGkIPNSEPNQ0e1gk91II81DJ4qCX0UBvyUNvgYb3QQx3IQx2DhzpCD3UhD3UNHjYIPdSDPNQzeKgn9FAf8lDf4GGj0EMDyEMDg4cGQg8NIQ8NDR42CT00gjw0MnhoJPTQGPLQ2OBhs9BDE8hDE4OHJkIPTSEPTQ0etgg9NIM8NDN4aCb00Bzy0NzgYavQQwvIQwuDhxZCDy0hDy0NHrYJPbSCPLQyeGgl9NAa8tDa4GG70EMbyEMbg4c2Qg9tIQ9tDR52CD20gzy0M3hoJ/TQHvLQ3uBhp9BDB8hDB4OHDkIPHSEPHQ0edgk9dII8dDJ46CT00Bny0NngYbfQQxfIQxeDhy5CD10hD10NHvYIPXSDPHQzeOgm9NAd8tDd4GGv0EMPyEMPg4ceQg89IQ89DR72CT30gjz0MnjoJfTQG/LQ2+Bhv9BDH8hDH4OHPkIPfSEPfQ0eDgg99IM89DN46Cf00B/y0N/g4aDQwwDIwwCDhwFCDwMhDwMNHg4JPQyCPAwyeBgk9DAY8jDY4OGw0MMQyMMQg4chQg9DIQ9DDR6OCD0MgzwMM3gYJvQwHPIw3ODhqNDDCMjDCIOHEUIPIyEPIw0ejgk9jII8jDJ4GCX0MBryMNrg4bjQwxjIwxiDhzFCD2MhD2MNHk4IPYyDPIwzeBgn9DAe8jDe4OGk0MMEyMMEg4cJQg8TIQ8TDR5OCT1MgjxMMniYJPQwGfIw2eDhtNDDFMjDFIOHKUIPUyEPUw0ezgg9TIM8TDN4mCb0MB3yMN3g4azQwwzIwwyDhxlCDzMhDzMNHs4JPcyCPMwyeJgl9DAb8jDb4OG80MMcyMMcg4c5Qg9zIQ9zDR4uCD3MgzzMM3iYJ/QwH/Iw3+DhotDDAsjDAoOHBUIPCyEPCw0eLgk9LII8LDJ4WCT0sBjysNjg4bLQwxLIwxKDhyVCD0shD0sNHq4IPSyDPCwzeFgm9LAc8rDc4OGq0MMKyMMKg4cVQg8rIQ8rDR6uCT2sgjysMnhYJfSwGvKw2uDhutDDGsjDGoOHNUIPayEPaw0ebgg9rIM8rDN4WCf0sB7ysN7g4abQwwbIwwaDhw1CDxshDxsNHm4JPWyCPGwyeNgk9LAZ8rDZ4OG20MMWyMMWg4ctQg9bIQ9bDR7uCD1sgzxsM3jYJvSwHfKw3eDhrtDDDsjDDoOHHUIPOyEPOw0e7gk97II87DJ42CX0sBvysNvg4b7Qwx7Iwx6Dhz1CD3shD3sNHh4IPeyDPOwzeNgn9LAf8rDf4OGh0MMByMMBg4cDQg8HIQ8HDR4eCT0cgjwcMng4JPRwGPJw2ODhsdDDEcjDEYOHI0IPRyEPRw0engg9HIM8HDN4OCb0cBzycNzg4anQwwnIwwmDhxNCDychDycNHp4JPZyCPJwyeDgl9HAa8nDa4OG50MMZyMMZg4czQg9nIQ9nDR5eCD2cgzycM3g4J/RwHvJw3uDhpdDDBcjDBYOHC0IPFyEPFw0eXgk9XII8XDJ4uCT0cBnycNng4bXQwxXIwxWDhytCD1chD1cNHt4IPVyDPFwzeLgm9HAd8nDd4OGt0MMNyMMNg4cbQg83IQ83DR7eCT3cgjzcMni4JfRwG/Jw2+DhvdDDHcjDHYOHO0IPdyEPdw0ePgg93IM83DN4uCf0cB/ycN/g4aPQwwPIwwODhwdCDw8hDw8NHj4JPTyCPDwyeHgk9PAY8vDY4OGz0MMTyMMTg4cnQg9PIQ9PDR6+CD08gzw8M3h4JvTwHPLw3ODhq9DDC8jDC4OHF0IPLyEPLw0evgk9vII8vDJ4eCX08Bry8Nrg4bvQwxvIwxuDhzdCD28hD28NHn4IPbyDPLwzeHgn9PAe8vDe4OGn0MMHyMMHg4cPQg8fIQ8fDR5+CT18gjx8Mnj4JPTwGfLw2eDht9DDF8jDF4OHL0IPXyEPXw0e/gg9fIM8fDN4+Cb08B3y8N3g4a/Qww/Iww+Dhx9CDz8hDz8NHv6pqrvDL8jDL4OHX0IPvyEPvw0eAgg9/IE8/DF4+CP08Bfy8NfgIaDQwz9/GA//6dIe/nv7/9oK8IfxEOAP7yGQ0ENAyENAg4eAQg+BIA+BDB4CCz0EhjwENngILPQQBPIQxOAhiNBDUMhDUIOHoEIPwSAPwQweggo9BIc8BDd4CC70EALyEMLgIZjQQ0jIQ0iDh5BCD6EgD6EMHoILPYSGPIQ2eAgt9BAG8hDG4CGE0ENYyENYg4ewQg/hIA/hDB5CCj2EhzyEN3gIL/TwL+ThX4OHUEIPESAPEQweIgg9RIQ8RDR4CC30EAnyEMngIZLQQ2TIQ2SDhzBCD1EgD1EMHqIIPUSFPEQ1eAgr9BAN8hDN4CGa0EN0yEN0g4dwQg8xIA8xDB5iCD3EhDzENHgIL/QQC/IQy+AhltBDbMhDbIOHf4Ue4kAe4hg8xBF6iAt5iGvwEEHoIR7kIZ7BQzyhh/iQh/gGDxGFHhJAHhIYPCQQekgIeUho8BBJ6CER5CGRwUMioYfEkIfEBg+RhR6SQB6SGDwkEXpICnlIavAQReghGeQhmcFDMqGH5JCH5AYPUYUeUkAeUhg8pBB6SAl5SGnwEE3oIRXkIZXBQyqhh9SQh9QGD9GFHtJAHtIYPKQRekgLeUhr8BBD6CEd5CGdwUM6oYf0kIf0Bg8xhR4yQB4yGDxkEHrICHnIaPAQS+ghE+Qhk8FDJqGHzJCHzAYPsYUeskAeshg8ZBF6yAp5yGrwEEfoIRvkIZvBQzahh+yQh+wGD3GFHnJAHnIYPOQQesgJechp8BBP6CEX5CGXwUMuoYfckIfcBg/xhR7yQB7yGDzkEXrIC3nIa/CQQOghH+Qhn8FDPqGH/JCH/AYPCYUeCkAeChg8FBB6KAh5KGjwkEjooRDkoZDBQyGhh8KQh8IGD4mFHopAHooYPBQReigKeShq8JBE6KEY5KGYwUMxoYfikIfiBg9JhR5KQB5KGDyUEHooCXkoafCQTOihFOShlMFDKaGH0pCH0gYPyYUeykAeyhg8lBF6KAt5KGvwkELooRzkoZzBQzmhh/KQh/IGDymFHipAHioYPFQQeqgIeaho8JBK6KES5KGSwUMloYfKkIfKBg+phR6qQB6qGDxUEXqoCnmoavCQRuihGuShmsFDNaGH6pCH6gYPaYUeakAeahg81BB6qAl5qGnwkE7ooRbkoZbBQy2hh9qQh9oGD+mFHupAHuoYPNQReqgLeahr8JBB6KEe5KGewUM9oYf6kIf6Bg8ZhR4aQB4aGDw0EHpoCHloaPCQSeihEeShkcFDI6GHxpCHxgYPmYUemkAemhg8NBF6aAp5aGrwkEXooRnkoZnBQzOhh+aQh+YGD1mFHlpAHloYPLQQemgJeWhp8JBN6KEV5KGVwUMroYfWkIfWBg/ZhR7aQB7aGDy0EXpoC3loa/CQQ+ihHeShncFDO6GH9pCH9gYPOYUeOkAeOhg8dBB66Ah56GjwkEvooRPkoZPBQyehh86Qh84GD7mFHrpAHroYPHQReugKeehq8JBH6KEb5KGbwUM3oYfukIfuBg95hR56QB56GDz0EHroCXnoafCQT+ihF+Shl8FDL6GH3pCH3gYP+YUe+kAe+hg89BF66At56GvwUEDooR/koZ/BQz+hh/6Qh/4GDwWFHgZAHgYYPAwQehgIeRho8FBI6GEQ5GGQwcMgoYfBkIfBBg+FhR6GQB6GGDwMEXoYCnkYavBQROhhGORhmMHDMKGH4ZCH4QYPRYUeRkAeRhg8jBB6GAl5GGnwUEzoYRTkYZTBwyihh9GQh9EGD8WFHsZAHsYYPIwRehgLeRhr8FBC6GEc5GGcwcM4oYfxkIfxBg8lhR4mQB4mGDxMEHqYCHmYaPBQSuhhEuRhksHDJKGHyZCHyQYPpYUepkAephg8TBF6mAp5mGrwUEboYRrkYZrBwzShh+mQh+kGD2WFHmZAHmYYPMwQepgJeZhp8FBO6GEW5GGWwcMsoYfZkIfZBg/lhR7mQB7mGDzMEXqYC3mYa/BQQehhHuRhnsHDPKGH+ZCH+QYPFYUeFkAeFhg8LBB6WAh5WGjwUEnoYRHkYZHBwyKhh8WQh8UGD5WFHpZAHpYYPCwRelgKeVhq8FBF6GEZ5GGZwcMyoYflkIflBg9VhR5WQB5WGDysEHpYCXlYafBQTehhFeRhlcHDKqGH1ZCH1QYP1YUe1kAe1hg8rBF6WAt5WGvwUEPoYR3kYZ3Bwzqhh/WQh/UGDzWFHjZAHjYYPGwQetgIedho8FBL6GET5GGTwcMmoYfNkIfNBg+1hR62QB62GDxsEXrYCnnYavBQR+hhG+Rhm8HDNqGH7ZCH7QYPdYUedkAedhg87BB62Al52GnwUE/oYRfkYZfBwy6hh92Qh90GD/WFHvZAHvYYPOwRetgLedhr8NBA6GEf5GGfwcM+oYf9kIf9Bg8NhR4OQB4OGDwcEHo4CHk4aPDQSOjhEOThkMHDIaGHw5CHwwYPjYUejkAejhg8HBF6OAp5OGrw0ETo4Rjk4ZjBwzGhh+OQh+MGD02FHk5AHk4YPJwQejgJeThp8NBM6OEU5OGUwcMpoYfTkIfTBg/NhR7OQB7OGDycEXo4C3k4a/DQQujhHOThnMHDOaGH85CH8wYPLYUeLkAeLhg8XBB6uAh5uGjw0Ero4RLk4ZLBwyWhh8uQh8sGD62FHq5AHq4YPFwRergKebhq8NBG6OEa5OGawcM1oYfrkIfrBg9thR5uQB5uGDzcEHq4CXm4afDQTujhFuThlsHDLaGH25CH2wYP7YUe7kAe7hg83BF6uAt5uGvw0EHo4R7k4Z7Bwz2hh/uQh/sGDx2FHh5AHh4YPDwQengIeXho8NBJ6OER5OGRwcMjoYfHkIfHBg+dhR6eQB6eGDw8EXp4Cnl4avDQRejhGeThmcHDM6GH55CH5wYPXYUeXkAeXhg8vBB6eAl5eGnw0E3o4RXk4ZXBwyuhh9eQh9cGD92FHt5AHt4YPLwRengLeXhr8NBD6OEd5OGdwcM7oYf3kIf3Bg89hR4+QB4+GDx8EHr4CHn4aPDQS+jhE+Thk8HDJ6GHz5CHzwYPvYUevkAevhg8fBF6+Ap5+Grw0Efo4Rvk4ZvBwzehh++Qh+8GD32FHn5AHn4YPPwQevgJefhp8NBP6OEX5OGXwcMvoYffkIffBg/9hR7+QB7+GDz8EXr4C3n4a/AwQOjhn7+Mh/90aQ//vf1/bQX4y3gI8Jf3MFDoISDkIaDBQ0Chh0CQh0AGD4OEHgJDHgIbPAQWeggCeQhi8DBY6CEo5CGowUNQoYdgkIdgBg9DhB6CQx6CGzwEF3oIAXkIYfAwVOghJOQhpMFDSKGHUJCHUAYPw4QeQkMeQhs8hBZ6CAN5CGPwMFzoISzkIazBQ1ihh3CQh3AGDyOEHsJDHsIbPIQXevgX8vCvwcNIoYcIkIcIBg8RhB4iQh4iGjyMEnqIBHmIZPAQSeghMuQhssHDaKGHKJCHKAYPUYQeokIeoho8jBF6iAZ5iGbwEE3oITrkIbrBw1ihhxiQhxgGDzGEHmJCHmIaPIwTeogFeYhl8BBL6CE25CG2wcN4oYc4kIc4Bg9xhB7iQh7iGjxMEHqIB3mIZ/AQT+ghPuQhvsHDRKGHBJCHBAYPCYQeEkIeEho8TBJ6SAR5SGTwkEjoITHkIbHBw2ShhySQhyQGD0mEHpJCHpIaPEwRekgGeUhm8JBM6CE55CG5wcNUoYcUkIcUBg8phB5SQh5SGjxME3pIBXlIZfCQSughNeQhtcHDdKGHNJCHNAYPaYQe0kIe0ho8zBB6SAd5SGfwkE7oIT3kIb3Bw0yhhwyQhwwGDxmEHjJCHjIaPMwSesgEechk8JBJ6CEz5CGzwcNsoYcskIcsBg9ZhB6yQh6yGjzMEXrIBnnIZvCQTeghO+Qhu8HDXKGHHJCHHAYPOYQeckIecho8zBN6yAV5yGXwkEvoITfkIbfBw3yhhzyQhzwGD3mEHvJCHvIaPCwQesgHechn8JBP6CE/5CG/wcNCoYcCkIcCBg8FhB4KQh4KGjwsEnooBHkoZPBQSOihMOShsMHDYqGHIpCHIgYPRYQeikIeiho8LBF6KAZ5KGbwUEzooTjkobjBw1KhhxKQhxIGDyWEHkpCHkoaPCwTeigFeShl8FBK6KE05KG0wcNyoYcykIcyBg9lhB7KQh7KGjysEHooB3koZ/BQTuihPOShvMHDSqGHCpCHCgYPFYQeKkIeKho8rBJ6qAR5qGTwUEnooTLkobLBw2qhhyqQhyoGD1WEHqpCHqoaPKwReqgGeahm8FBN6KE65KG6wcNaoYcakIcaBg81hB5qQh5qGjysE3qoBXmoZfBQS+ihNuShtsHDeqGHOpCHOgYPdYQe6kIe6ho8bBB6qAd5qGfwUE/ooT7kob7Bw0ahhwaQhwYGDw2EHhpCHhoaPGwSemgEeWhk8NBI6KEx5KGxwcNmoYcmkIcmBg9NhB6aQh6aGjxsEXpoBnloZvDQTOihOeShucHDVqGHFpCHFgYPLYQeWkIeWho8bBN6aAV5aGXw0ErooTXkobXBw3ahhzaQhzYGD22EHtpCHtoaPOwQemgHeWhn8NBO6KE95KG9wcNOoYcOkIcOBg8dhB46Qh46GjzsEnroBHnoZPDQSeihM+Shs8HDbqGHLpCHLgYPXYQeukIeuho87BF66AZ56Gbw0E3ooTvkobvBw16hhx6Qhx4GDz2EHnpCHnoaPOwTeugFeehl8NBL6KE35KG3wcN+oYc+kIc+Bg99hB76Qh76GjwcEHroB3noZ/DQT+ihP+Shv8HDQaGHAZCHAQYPA4QeBkIeBho8HBJ6GAR5GGTwMEjoYTDkYbDBw2GhhyGQhyEGD0OEHoZCHoYaPBwRehgGeRhm8DBM6GE45GG4wcNRoYcRkIcRBg8jhB5GQh5GGjwcE3oYBXkYZfAwSuhhNORhtMHDcaGHMZCHMQYPY4QexkIexho8nBB6GAd5GGfwME7oYTzkYbzBw0mhhwmQhwkGDxOEHiZCHiYaPJwSepgEeZhk8DBJ6GEy5GGywcNpoYcpkIcpBg9ThB6mQh6mGjycEXqYBnmYZvAwTehhOuRhusHDWaGHGZCHGQYPM4QeZkIeZho8nBN6mAV5mGXwMEvoYTbkYbbBw3mhhzmQhzkGD3OEHuZCHuYaPFwQepgHeZhn8DBP6GE+5GG+wcNFoYcFkIcFBg8LhB4WQh4WGjxcEnpYBHlYZPCwSOhhMeRhscHDZaGHJZCHJQYPS4QelkIelho8XBF6WAZ5WGbwsEzoYTnkYbnBw1WhhxWQhxUGDyuEHlZCHlYaPFwTelgFeVhl8LBK6GE15GG1wcN1oYc1kIc1Bg9rhB7WQh7WGjzcEHpYB3lYZ/CwTuhhPeRhvcHDTaGHDZCHDQYPG4QeNkIeNho83BJ62AR52GTwsEnoYTPkYbPBw22hhy2Qhy0GD1uEHrZCHrYaPNwRetgGedhm8LBN6GE75GG7wcNdoYcdkIcdBg87hB52Qh52GjzcE3rYBXnYZfCwS+hhN+Rht8HDfaGHPZCHPQYPe4Qe9kIe9ho8PBB62Ad52GfwsE/oYT/kYb/Bw0OhhwOQhwMGDweEHg5CHg4aPDwSejgEeThk8HBI6OEw5OGwwcNjoYcjkIcjBg9HhB6OQh6OGjw8EXo4Bnk4ZvBwTOjhOOThuMHDU6GHE5CHEwYPJ4QeTkIeTho8PBN6OAV5OGXwcEro4TTk4bTBw3OhhzOQhzMGD2eEHs5CHs4aPLwQejgHeThn8HBO6OE85OG8wcNLoYcLkIcLBg8XhB4uQh4uGjy8Enq4BHm4ZPBwSejhMuThssHDa6GHK5CHKwYPV4QerkIerho8vBF6uAZ5uGbwcE3o4Trk4brBw1uhhxuQhxsGDzeEHm5CHm4aPLwTergFebhl8HBL6OE25OG2wcN7oYc7kIc7Bg93hB7uQh7uGjx8EHq4B3m4Z/BwT+jhPuThvsHDR6GHB5CHBwYPD4QeHkIeHho8fBJ6eAR5eGTw8Ejo4THk4bHBw2ehhyeQhycGD0+EHp5CHp4aPHwRengGeXhm8PBM6OE55OG5wcNXoYcXkIcXBg8vhB5eQh5eGjx8E3p4BXl4ZfDwSujhNeThtcHDd6GHN5CHNwYPb4Qe3kIe3ho8/BB6eAd5eGfw8E7o4T3k4b3Bw0+hhw+Qhw8GDx+EHj5CHj4aPPwSevgEefhk8PBJ6OEz5OGzwcNvoYcvkIcvBg9fhB6+Qh6+Gjz8EXr49lezK1PD//sO3wwevgk9fBfdIXu2//sO3w0e/go9/IA8/DB4+CH08BPy8NPg4Z9qujv8gjz8Mnj4JfTwG/Lw2+AhgNDDH8jDH4OHP0IPfyEPfw0eAgo9/Gc14eE/P+3hv7f/r60Aojv8vx4C/H/cId3/9tIHEnoICHkIaPAQUOghEOQhkMFDYKGHwJCHwAYPgYUegkAeghg8BBF6CAp5CGrwEFToIRjkIZjBQ1Chh+CQh+AGD8GFHkJAHkIYPAQTeggJeQhp8BBS6CEU5CGUwUNwoYfQkIfQBg+hhR7CQB7CGDyEEHoIC3kIa/AQVughHOQhnMFDSKGH8JCH8AYP4YUe/oU8/GvwEEroIQLkIYLBQwShh4iQh4gGD6GFHiJBHiIZPEQSeogMeYhs8BBG6CEK5CGKwUMUoYeokIeoBg9hhR6iQR6iGTxEE3qIDnmIbvAQTughBuQhhsFDDKGHmJCHmAYP4YUeYkEeYhk8xBJ6iA15iG3w8K/QQxzIQxyDhzhCD3EhD3ENHiIIPcSDPMQzeIgn9BAf8hDf4CGi0EMCyEMCg4cEQg8JIQ8JDR4iCT0kgjwkMnhIJPSQGPKQ2OAhstBDEshDEoOHJEIPSSEPSQ0eogg9JIM8JDN4SCb0kBzykNzgIarQQwrIQwqDhxRCDykhDykNHqIJPaSCPKQyeEgl9JAa8pDa4CG60EMayEMag4c0Qg9pIQ9pDR5iCD2kgzykM3hIJ/SQHvKQ3uAhptBDBshDBoOHDEIPGSEPGQ0eYgk9ZII8ZDJ4yCT0kBnykNngIbbQQxbIQxaDhyxCD1khD1kNHuIIPWSDPGQzeMgm9JAd8pDd4CGu0EMOyEMOg4ccQg85IQ85DR7iCT3kgjzkMnjIJfSQG/KQ2+AhvtBDHshDHoOHPEIPeSEPeQ0eEgg95IM85DN4yCf0kB/ykN/gIaHQQwHIQwGDhwJCDwUhDwUNHhIJPRSCPBQyeCgk9FAY8lDY4CGx0EMRyEMRg4ciQg9FIQ9FDR6SCD0UgzwUM3goJvRQHPJQ3OAhqdBDCchDCYOHEkIPJSEPJQ0ekgk9lII8lDJ4KCX0UBryUNrgIbnQQxnIQxmDhzJCD2UhD2UNHlIIPZSDPJQzeCgn9FAe8lDe4CGl0EMFyEMFg4cKQg8VIQ8VDR5SCT1UgjxUMnioJPRQGfJQ2eAhtdBDFchDFYOHKkIPVSEPVQ0e0gg9VIM8VDN4qCb0UB3yUN3gIa3QQw3IQw2DhxpCDzUhDzUNHtIJPdSCPNQyeKgl9FAb8lDb4CG90EMdyEMdg4c6Qg91IQ91DR4yCD3UgzzUM3ioJ/RQH/JQ3+Aho9BDA8hDA4OHBkIPDSEPDQ0eMgk9NII8NDJ4aCT00Bjy0NjgIbPQQxPIQxODhyZCD00hD00NHrIIPTSDPDQzeGgm9NAc8tDc4CGr0EMLyEMLg4cWQg8tIQ8tDR6yCT20gjy0MnhoJfTQGvLQ2uAhu9BDG8hDG4OHNkIPbSEPbQ0ecgg9tIM8tDN4aCf00B7y0N7gIafQQwfIQweDhw5CDx0hDx0NHnIJPXSCPHQyeOgk9NAZ8tDZ4CG30EMXyEMXg4cuQg9dIQ9dDR7yCD10gzx0M3joJvTQHfLQ3eAhr9BDD8hDD4OHHkIPPSEPPQ0e8gk99II89DJ46CX00Bvy0NvgIb/QQx/IQx+Dhz5CD30hD30NHgoIPfSDPPQzeOgn9NAf8tDf4KGg0MMAyMMAg4cBQg8DIQ8DDR4KCT0MgjwMMngYJPQwGPIw2OChsNDDEMjDEIOHIUIPQyEPQw0eigg9DIM8DDN4GCb0MBzyMNzgoajQwwjIwwiDhxFCDyMhDyMNHooJPYyCPIwyeBgl9DAa8jDa4KG40MMYyMMYg4cxQg9jIQ9jDR5KCD2MgzyMM3gYJ/QwHvIw3uChpNDDBMjDBIOHCUIPEyEPEw0eSgk9TII8TDJ4mCT0MBnyMNngobTQwxTIwxSDhylCD1MhD1MNHsoIPUyDPEwzeJgm9DAd8jDd4KGs0MMMyMMMg4cZQg8zIQ8zDR7KCT3MgjzMMniYJfQwG/Iw2+ChvNDDHMjDHIOHOUIPcyEPcw0eKgg9zIM8zDN4mCf0MB/yMN/goaLQwwLIwwKDhwVCDwshDwsNHioJPSyCPCwyeFgk9LAY8rDY4KGy0MMSyMMSg4clQg9LIQ9LDR6qCD0sgzwsM3hYJvSwHPKw3OChqtDDCsjDCoOHFUIPKyEPKw0eqgk9rII8rDJ4WCX0sBrysNrgobrQwxrIwxqDhzVCD2shD2sNHmoIPayDPKwzeFgn9LAe8rDe4KGm0MMGyMMGg4cNQg8bIQ8bDR5qCT1sgjxsMnjYJPSwGfKw2eChttDDFsjDFoOHLUIPWyEPWw0e6gg9bIM8bDN42Cb0sB3ysN3goa7Qww7Iww6Dhx1CDzshDzsNHuoJPeyCPOwyeNgl9LAb8rDb4KG+0MMeyMMeg4c9Qg97IQ97DR4aCD3sgzzsM3jYJ/SwH/Kw3+ChodDDAcjDAYOHA0IPByEPBw0eGgk9HII8HDJ4OCT0cBjycNjgobHQwxHIwxGDhyNCD0chD0cNHpoIPRyDPBwzeDgm9HAc8nDc4KGp0MMJyMMJg4cTQg8nIQ8nDR6aCT2cgjycMng4JfRwGvJw2uChudDDGcjDGYOHM0IPZyEPZw0eWgg9nIM8nDN4OCf0cB7ycN7goaXQwwXIwwWDhwtCDxchDxcNHloJPVyCPFwyeLgk9HAZ8nDZ4KG10MMVyMMVg4crQg9XIQ9XDR7aCD1cgzxcM3i4JvRwHfJw3eChrdDDDcjDDYOHG0IPNyEPNw0e2gk93II83DJ4uCX0cBvycNvgob3Qwx3Iwx2DhztCD3chD3cNHjoIPdyDPNwzeLgn9HAf8nDf4KGj0MMDyMMDg4cHQg8PIQ8PDR46CT08gjw8Mnh4JPTwGPLw2OChs9DDE8jDE4OHJ0IPTyEPTw0eugg9PIM8PDN4eCb08Bzy8NzgoavQwwvIwwuDhxdCDy8hDy8NHroJPbyCPLwyeHgl9PAa8vDa4KG70MMbyMMbg4c3Qg9vIQ9vDR56CD28gzy8M3h4J/TwHvLw3uChp9DDB8jDB4OHD0IPHyEPHw0eegk9fII8fDJ4+CT08Bny8NngobfQwxfIwxeDhy9CD18hD18NHvoIPXyDPHwzePgm9PAd8vDd4KGv0MMPyMMPg4cfQg8/IQ8/DR76CT38gjz8Mnj4JfTwG/Lw2+Chv9DDH8jDH4OHP0IPfyEPfw0eBgg9/BOA8fCfLu3hv7f/r60AARgPAQLwHgYKPQSEPAQ0eAgo9BAI8hDI4GGQ0ENgyENgg4fAQg9BIA9BDB4GCz0EhTwENXgIKvQQDPIQzOBhiNBDcMhDcIOH4EIPISAPIQwehgo9hIQ8hDR4CCn0EAryEMrgYZjQQ2jIQ2iDh9BCD2EgD2EMHoYLPYSFPIQ1eAgr9BAO8hDO4GGE0EN4yEN4g4fwQg//Qh7+NXgYKfQQAfIQweAhgtBDRMhDRIOHUUIPkSAPkQweIgk9RIY8RDZ4GC30EAXyEMXgIYrQQ1TIQ1SDhzFCD9EgD9EMHqIJPUSHPEQ3eBgr9BAD8hDD4CGG0ENMyENMg4dxQg+xIA+xDB5iCT3EhjzENngYL/QQB/IQx+AhjtBDXMhDXIOHCUIP8SAP8Qwe4gk9xIc8xDd4mCj0kADykMDgIYHQQ0LIQ0KDh0lCD4kgD4kMHhIJPSSGPCQ2eJgs9JAE8pDE4CGJ0ENSyENSg4cpQg/JIA/JDB6SCT0khzwkN3iYKvSQAvKQwuAhhdBDSshDSoOHaUIPqSAPqQweUgk9pIY8pDZ4mC70kAbykMbgIY3QQ1rIQ1qDhxlCD+kgD+kMHtIJPaSHPKQ3eJgp9JAB8pDB4CGD0ENGyENGg4dZQg+ZIA+ZDB4yCT1khjxkNniYLfSQBfKQxeAhi9BDVshDVoOHOUIP2SAP2Qwesgk9ZIc8ZDd4mCv0kAPykMPgIYfQQ07IQ06Dh3lCD7kgD7kMHnIJPeSGPOQ2eJgv9JAH8pDH4CGP0ENeyENeg4cFQg/5IA/5DB7yCT3khzzkN3hYKPRQAPJQwOChgNBDQchDQYOHRUIPhSAPhQweCgk9FIY8FDZ4WCz0UATyUMTgoYjQQ1HIQ1GDhyVCD8UgD8UMHooJPRSHPBQ3eFgq9FAC8lDC4KGE0ENJyENJg4dlQg+lIA+lDB5KCT2UhjyUNnhYLvRQBvJQxuChjNBDWchDWYOHFUIP5SAP5Qweygk9lIc8lDd4WCn0UAHyUMHgoYLQQ0XIQ0WDh1VCD5UgD5UMHioJPVSGPFQ2eFgt9FAF8lDF4KGK0ENVyENVg4c1Qg/VIA/VDB6qCT1UhzxUN3hYK/RQA/JQw+ChhtBDTchDTYOHdUIPtSAPtQweagk91IY81DZ4WC/0UAfyUMfgoY7QQ13IQ12Dhw1CD/UgD/UMHuoJPdSHPNQ3eNgo9NAA8tDA4KGB0ENDyENDg4dNQg+NIA+NDB4aCT00hjw0NnjYLPTQBPLQxOChidBDU8hDU4OHLUIPzSAPzQwemgk9NIc8NDd42Cr00ALy0MLgoYXQQ0vIQ0uDh21CD60gD60MHloJPbSGPLQ2eNgu9NAG8tDG4KGN0ENbyENbg4cdQg/tIA/tDB7aCT20hzy0N3jYKfTQAfLQweChg9BDR8hDR4OHXUIPnSAPnQweOgk9dIY8dDZ42C300AXy0MXgoYvQQ1fIQ1eDhz1CD90gD90MHroJPXSHPHQ3eNgr9NAD8tDD4KGH0ENPyENPg4d9Qg+9IA+9DB56CT30hjz0NnjYL/TQB/LQx+Chj9BDX8hDX4OHA0IP/SAP/Qwe+gk99Ic89Dd4OCj0MADyMMDgYYDQw0DIw0CDh0NCD4MgD4MMHgYJPQyGPAw2eDgs9DAE8jDE4GGI0MNQyMNQg4cjQg/DIA/DDB6GCT0MhzwMN3g4KvQwAvIwwuBhhNDDSMjDSIOHY0IPoyAPowweRgk9jIY8jDZ4OC70MAbyMMbgYYzQw1jIw1iDhxNCD+MgD+MMHsYJPYyHPIw3eDgp9DAB8jDB4GGC0MNEyMNEg4dTQg+TIA+TDB4mCT1MhjxMNng4LfQwBfIwxeBhitDDVMjDVIOHM0IP0yAP0wwepgk9TIc8TDd4OCv0MAPyMMPgYYbQw0zIw0yDh3NCD7MgD7MMHmYJPcyGPMw2eDgv9DAH8jDH4GGO0MNcyMNcg4cLQg/zIA/zDB7mCT3MhzzMN3i4KPSwAPKwwOBhgdDDQsjDQoOHS0IPiyAPiwweFgk9LIY8LDZ4uCz0sATysMTgYYnQw1LIw1KDhytCD8sgD8sMHpYJPSyHPCw3eLgq9LAC8rDC4GGF0MNKyMNKg4drQg+rIA+rDB5WCT2shjysNni4LvSwBvKwxuBhjdDDWsjDWoOHG0IP6yAP6wwe1gk9rIc8rDd4uCn0sAHysMHgYYPQw0bIw0aDh1tCD5sgD5sMHjYJPWyGPGw2eLgt9LAF8rDF4GGL0MNWyMNWg4c7Qg/bIA/bDB62CT1shzxsN3i4K/SwA/Kww+Bhh9DDTsjDToOHe0IPuyAPuwwedgk97IY87DZ4uC/0sAfysMfgYY/Qw17Iw16DhwdCD/sgD/sMHvYJPeyHPOw3eHgo9HAA8nDA4OGA0MNByMNBg4dHQg+HIA+HDB4OCT0chjwcNnh4LPRwBPJwxODhiNDDUcjDUYOHJ0IPxyAPxwwejgk9HIc8HDd4eCr0cALycMLg4YTQw0nIw0mDh2dCD6cgD6cMHk4JPZyGPJw2eHgu9HAG8nDG4OGM0MNZyMNZg4cXQg/nIA/nDB7OCT2chzycN3h4KfRwAfJwweDhgtDDRcjDRYOHV0IPlyAPlwweLgk9XIY8XDZ4eC30cAXycMXg4YrQw1XIw1WDhzdCD9cgD9cMHq4JPVyHPFw3eHgr9HAD8nDD4OGG0MNNyMNNg4d3Qg+3IA+3DB5uCT3chjzcNnh4L/RwB/Jwx+DhjtDDXcjDXYOHD0IP9yAP9wwe7gk93Ic83Dd4+Cj08ADy8MDg4YHQw0PIw0ODh09CD48gD48MHh4JPTyGPDw2ePgs9PAE8vDE4OGJ0MNTyMNTg4cvQg/PIA/PDB6eCT08hzw8N3j4KvTwAvLwwuDhhdDDS8jDS4OHb0IPryAPrwweXgk9vIY8vDZ4+C708Aby8Mbg4Y3Qw1vIw1uDhx9CD+8gD+8MHt4JPbyHPLw3ePgp9PAB8vDB4OGD0MNHyMNHg4dfQg+fIA+fDB4+CT18hjx8Nnj4LfTwBfLwxeDhi9DDV8jDV4OHP0IP3yAP3wwevgk9fIc8fDd4+Cv08APy8MPg4YfQw0/Iw0+Dh3+q6276C/Lwy+Dhl9DDb8jDb4OHAEIPfyAPfwwe/gg9/IU8/DV4CCj08E9AxsN/urSH/97+v7YCBGQ8BAjIewgk9BAQ8hDQ4CGg0EMgyEMgg4fAQg+BIQ+BDR4CCz0EgTwEMXgIIvQQFPIQ1OAhqNBDMMhDMIOHoEIPwSEPwQ0eggs9hIA8hDB4CCb0EBLyENLgIaTQQyjIQyiDh+BCD6EhD6ENHkILPYSBPIQxeAgh9BAW8hDW4CGs0EM4yEM4g4eQQg/hIQ/hDR7CCz38C3n41+AhlNBDBMhDBIOHCEIPESEPEQ0eQgs9RII8RDJ4iCT0EBnyENngIYzQQxTIQxSDhyhCD1EhD1ENHsIKPUSDPEQzeIgm9BAd8hDd4CGc0EMMyEMMg4cYQg8xIQ8xDR7CCz3EgjzEMniIJfQQG/IQ2+DhX6GHOJCHOAYPcYQe4kIe4ho8RBB6iAd5iGfwEE/oIT7kIb7BQ0ShhwSQhwQGDwmEHhJCHhIaPEQSekgEeUhk8JBI6CEx5CGxwUNkoYckkIckBg9JhB6SQh6SGjxEEXpIBnlIZvCQTOghOeQhucFDVKGHFJCHFAYPKYQeUkIeUho8RBN6SAV5SGXwkEroITXkIbXBQ3ShhzSQhzQGD2mEHtJCHtIaPMQQekgHeUhn8JBO6CE95CG9wUNMoYcMkIcMBg8ZhB4yQh4yGjzEEnrIBHnIZPCQSeghM+Qhs8FDbKGHLJCHLAYPWYQeskIesho8xBF6yAZ5yGbwkE3oITvkIbvBQ1yhhxyQhxwGDzmEHnJCHnIaPMQTesgFechl8JBL6CE35CG3wUN8oYc8kIc8Bg95hB7yQh7yGjwkEHrIB3nIZ/CQT+ghP+Qhv8FDQqGHApCHAgYPBYQeCkIeCho8JBJ6KAR5KGTwUEjooTDkobDBQ2KhhyKQhyIGD0WEHopCHooaPCQReigGeShm8FBM6KE45KG4wUNSoYcSkIcSBg8lhB5KQh5KGjwkE3ooBXkoZfBQSuihNOShtMFDcqGHMpCHMgYPZYQeykIeyho8pBB6KAd5KGfwUE7ooTzkobzBQ0qhhwqQhwoGDxWEHipCHioaPKQSeqgEeahk8FBJ6KEy5KGywUNqoYcqkIcqBg9VhB6qQh6qGjykEXqoBnmoZvBQTeihOuShusFDWqGHGpCHGgYPNYQeakIeaho8pBN6qAV5qGXwUEvooTbkobbBQ3qhhzqQhzoGD3WEHupCHuoaPGQQeqgHeahn8FBP6KE+5KG+wUNGoYcGkIcGBg8NhB4aQh4aGjxkEnpoBHloZPDQSOihMeShscFDZqGHJpCHJgYPTYQemkIemho8ZBF6aAZ5aGbw0EzooTnkobnBQ1ahhxaQhxYGDy2EHlpCHloaPGQTemgFeWhl8NBK6KE15KG1wUN2oYc2kIc2Bg9thB7aQh7aGjzkEHpoB3loZ/DQTuihPeShvcFDTqGHDpCHDgYPHYQeOkIeOho85BJ66AR56GTw0EnooTPkobPBQ26hhy6Qhy4GD12EHrpCHroaPOQReugGeehm8NBN6KE75KG7wUNeoYcekIceBg89hB56Qh56GjzkE3roBXnoZfDQS+ihN+Sht8FDfqGHPpCHPgYPfYQe+kIe+ho8FBB66Ad56Gfw0E/ooT/kob/BQ0GhhwGQhwEGDwOEHgZCHgYaPBQSehgEeRhk8DBI6GEw5GGwwUNhoYchkIchBg9DhB6GQh6GGjwUEXoYBnkYZvAwTOhhOORhuMFDUaGHEZCHEQYPI4QeRkIeRho8FBN6GAV5GGXwMEroYTTkYbTBQ3GhhzGQhzEGD2OEHsZCHsYaPJQQehgHeRhn8DBO6GE85GG8wUNJoYcJkIcJBg8ThB4mQh4mGjyUEnqYBHmYZPAwSehhMuRhssFDaaGHKZCHKQYPU4QepkIepho8lBF6mAZ5mGbwME3oYTrkYbrBQ1mhhxmQhxkGDzOEHmZCHmYaPJQTepgFeZhl8DBL6GE25GG2wUN5oYc5kIc5Bg9zhB7mQh7mGjxUEHqYB3mYZ/AwT+hhPuRhvsFDRaGHBZCHBQYPC4QeFkIeFho8VBJ6WAR5WGTwsEjoYTHkYbHBQ2WhhyWQhyUGD0uEHpZCHpYaPFQRelgGeVhm8LBM6GE55GG5wUNVoYcVkIcVBg8rhB5WQh5WGjxUE3pYBXlYZfCwSuhhNeRhtcFDdaGHNZCHNQYPa4Qe1kIe1ho81BB6WAd5WGfwsE7oYT3kYb3BQ02hhw2Qhw0GDxuEHjZCHjYaPNQSetgEedhk8LBJ6GEz5GGzwUNtoYctkIctBg9bhB62Qh62GjzUEXrYBnnYZvCwTehhO+Rhu8FDXaGHHZCHHQYPO4QedkIedho81BN62AV52GXwsEvoYTfkYbfBQ32hhz2Qhz0GD3uEHvZCHvYaPDQQetgHedhn8LBP6GE/5GG/wUNDoYcDkIcDBg8HhB4OQh4OGjw0Eno4BHk4ZPBwSOjhMOThsMFDY6GHI5CHIwYPR4QejkIejho8NBF6OAZ5OGbwcEzo4Tjk4bjBQ1OhhxOQhxMGDyeEHk5CHk4aPDQTejgFeThl8HBK6OE05OG0wUNzoYczkIczBg9nhB7OQh7OGjy0EHo4B3k4Z/BwTujhPOThvMFDS6GHC5CHCwYPF4QeLkIeLho8tBJ6uAR5uGTwcEno4TLk4bLBQ2uhhyuQhysGD1eEHq5CHq4aPLQRergGebhm8HBN6OE65OG6wUNboYcbkIcbBg83hB5uQh5uGjy0E3q4BXm4ZfBwS+jhNuThtsFDe6GHO5CHOwYPd4Qe7kIe7ho8dBB6uAd5uGfwcE/o4T7k4b7BQ0ehhweQhwcGDw+EHh5CHh4aPHQSengEeXhk8PBI6OEx5OGxwUNnoYcnkIcnBg9PhB6eQh6eGjx0EXp4Bnl4ZvDwTOjhOeThucFDV6GHF5CHFwYPL4QeXkIeXho8dBN6eAV5eGXw8Ero4TXk4bXBQ3ehhzeQhzcGD2+EHt5CHt4aPPQQengHeXhn8PBO6OE95OG9wUNPoYcPkIcPBg8fhB4+Qh4+Gjz0Enr4BHn4ZPDwSejhM+Ths8FDb6GHL5CHLwYPX4QevkIevho89BF6+AZ5+Gbw8E3o4Tvk4bvBQ1+hhx+Qhx8GDz+EHn5CHn4aPPQTevgFefhl8PBL6OE35OG3wUN/oYc/kIc/Bg9/hB7+Qh7+GjwMEHr4JxDj4T9d2sN/b/9fWwECMR4CBOI9DBR6CAh5CGjwEFDoIRDkIZDBwyChh8CQh8AGD4GFHoJAHoIYPAwWeggKeQhq8BBU6CEY5CGYwcMQoYfgkIfgBg/BhR5CQB5CGDwMFXoICXkIafAQUughFOQhlMHDMKGH0JCH0AYPoYUewkAewhg8DBd6CAt5CGvwEFboIRzkIZzBwwihh/CQh/AGD+GFHv6FPPxr8DBS6CEC5CGCwUMEoYeIkIeIBg+jhB4iQR4iGTxEEnqIDHmIbPAwWughCuQhisFDFKGHqJCHqAYPY4QeokEeohk8RBN6iA55iG7wMFboIQbkIYbBQwyhh5iQh5gGD+OEHmJBHmIZPMQSeogNeYht8DBe6CEO5CGOwUMcoYe4kIe4Bg8ThB7iQR7iGTzEE3qID3mIb/AwUeghAeQhgcFDAqGHhJCHhAYPk4QeEkEeEhk8JBJ6SAx5SGzwMFnoIQnkIYnBQxKhh6SQh6QGD1OEHpJBHpIZPCQTekgOeUhu8DBV6CEF5CGFwUMKoYeUkIeUBg/ThB5SQR5SGTykEnpIDXlIbfAwXeghDeQhjcFDGqGHtJCHtAYPM4Qe0kEe0hk8pBN6SA95SG/wMFPoIQPkIYPBQwahh4yQh4wGD7OEHjJBHjIZPGQSesgMechs8DBb6CEL5CGLwUMWoYeskIesBg9zhB6yQR6yGTxkE3rIDnnIbvAwV+ghB+Qhh8FDDqGHnJCHnAYP84QeckEechk85BJ6yA15yG3wMF/oIQ/kIY/BQx6hh7yQh7wGDwuEHvJBHvIZPOQTesgPechv8LBQ6KEA5KGAwUMBoYeCkIeCBg+LhB4KQR4KGTwUEnooDHkobPCwWOihCOShiMFDEaGHopCHogYPS4QeikEeihk8FBN6KA55KG7wsFTooQTkoYTBQwmhh5KQh5IGD8uEHkpBHkoZPJQSeigNeSht8LBc6KEM5KGMwUMZoYeykIeyBg8rhB7KQR7KGTyUE3ooD3kob/CwUuihAuShgsFDBaGHipCHigYPq4QeKkEeKhk8VBJ6qAx5qGzwsFrooQrkoYrBQxWhh6qQh6oGD2uEHqpBHqoZPFQTeqgOeahu8LBW6KEG5KGGwUMNoYeakIeaBg/rhB5qQR5qGTzUEnqoDXmobfCwXuihDuShjsFDHaGHupCHugYPG4Qe6kEe6hk81BN6qA95qG/wsFHooQHkoYHBQwOhh4aQh4YGD5uEHhpBHhoZPDQSemgMeWhs8LBZ6KEJ5KGJwUMToYemkIemBg9bhB6aQR6aGTw0E3poDnlobvCwVeihBeShhcFDC6GHlpCHlgYP24QeWkEeWhk8tBJ6aA15aG3wsF3ooQ3koY3BQxuhh7aQh7YGDzuEHtpBHtoZPLQTemgPeWhv8LBT6KED5KGDwUMHoYeOkIeOBg+7hB46QR46GTx0EnroDHnobPCwW+ihC+Shi8FDF6GHrpCHrgYPe4QeukEeuhk8dBN66A556G7wsFfooQfkoYfBQw+hh56Qh54GD/uEHnpBHnoZPPQSeugNeeht8LBf6KEP5KGPwUMfoYe+kIe+Bg8HhB76QR76GTz0E3roD3nob/BwUOhhAORhgMHDAKGHgZCHgQYPh4QeBkEeBhk8DBJ6GAx5GGzwcFjoYQjkYYjBwxChh6GQh6EGD0eEHoZBHoYZPAwTehgOeRhu8HBU6GEE5GGEwcMIoYeRkIeRBg/HhB5GQR5GGTyMEnoYDXkYbfBwXOhhDORhjMHDGKGHsZCHsQYPJ4QexkEexhk8jBN6GA95GG/wcFLoYQLkYYLBwwShh4mQh4kGD6eEHiZBHiYZPEwSepgMeZhs8HBa6GEK5GGKwcMUoYepkIepBg9nhB6mQR6mGTxME3qYDnmYbvBwVuhhBuRhhsHDDKGHmZCHmQYP54QeZkEeZhk8zBJ6mA15mG3wcF7oYQ7kYY7Bwxyhh7mQh7kGDxeEHuZBHuYZPMwTepgPeZhv8HBR6GEB5GGBwcMCoYeFkIeFBg+XhB4WQR4WGTwsEnpYDHlYbPBwWehhCeRhicHDEqGHpZCHpQYPV4QelkEelhk8LBN6WA55WG7wcFXoYQXkYYXBwwqhh5WQh5UGD9eEHlZBHlYZPKwSelgNeVht8HBd6GEN5GGNwcMaoYe1kIe1Bg83hB7WQR7WGTysE3pYD3lYb/BwU+hhA+Rhg8HDBqGHjZCHjQYPt4QeNkEeNhk8bBJ62Ax52GzwcFvoYQvkYYvBwxahh62Qh60GD3eEHrZBHrYZPGwTetgOedhu8HBX6GEH5GGHwcMOoYedkIedBg/3hB52QR52GTzsEnrYDXnYbfBwX+hhD+Rhj8HDHqGHvZCHvQYPD4Qe9kEe9hk87BN62A952G/w8FDo4QDk4YDBwwGhh4OQh4MGD4+EHg5BHg4ZPBwSejgMeThs8PBY6OEI5OGIwcMRoYejkIejBg9PhB6OQR6OGTwcE3o4Dnk4bvDwVOjhBOThhMHDCaGHk5CHkwYPz4QeTkEeThk8nBJ6OA15OG3w8Fzo4Qzk4YzBwxmhh7OQh7MGDy+EHs5BHs4ZPJwTejgPeThv8PBS6OEC5OGCwcMFoYeLkIeLBg+vhB4uQR4uGTxcEnq4DHm4bPDwWujhCuThisHDFaGHq5CHqwYPb4QerkEerhk8XBN6uA55uG7w8Fbo4Qbk4YbBww2hh5uQh5sGD++EHm5BHm4ZPNwSergNebht8PBe6OEO5OGOwcMdoYe7kIe7Bg8fhB7uQR7uGTzcE3q4D3m4b/DwUejhAeThgcHDA6GHh5CHhwYPn4QeHkEeHhk8PBJ6eAx5eGzw8Fno4Qnk4YnBwxOhh6eQh6cGD1+EHp5BHp4ZPDwTengOeXhu8PBV6OEF5OGFwcMLoYeXkIeXBg/fhB5eQR5eGTy8Enp4DXl4bfDwXejhDeThjcHDG6GHt5CHtwYPP4Qe3kEe3hk8vBN6eA95eG/w8FPo4QPk4YPBwwehh4+Qh48GD7+EHj5BHj4ZPHwSevgMefhs8PBb6OEL5OGLwcMXoYevkIevBg9/hB6+QR6+GTx8E3r4Dnn4bvDwV+jhB+Thh8HDD6GHn5CHnwYP/9TQ3fQX5OGXwcMvoYffkIffBg8BhB7+QB7+GDz8EXr4C3n4a/AQUOjhn8CMh/90aQ//vf1/bQUIzHgIEJj3EEjoISDkIaDBQ0Chh0CQh0AGD4GFHgJDHgIbPAQWeggCeQhi8BBE6CEo5CGowUNQoYdgkIdgBg9BhR6CQx6CGzwEF3oIAXkIYfAQTOghJOQhpMFDSKGHUJCHUAYPwYUeQkMeQhs8hBZ6CAN5CGPwEELoISzkIazBQ1ihh3CQh3AGDyGFHsJDHsIbPIQXevgX8vCvwUMooYcIkIcIBg8RhB4iQh4iGjyEFnqIBHmIZPAQSeghMuQhssFDGKGHKJCHKAYPUYQeokIeoho8hBV6iAZ5iGbwEE3oITrkIbrBQzihhxiQhxgGDzGEHmJCHmIaPIQXeogFeYhl8BBL6CE25CG2wcO/Qg9xIA9xDB7iCD3EhTzENXiIIPQQD/IQz+AhntBDfMhDfIOHiEIPCSAPCQweEgg9JIQ8JDR4iCT0kAjykMjgIZHQQ2LIQ2KDh8hCD0kgD0kMHpIIPSSFPCQ1eIgi9JAM8pDM4CGZ0ENyyENyg4eoQg8pIA8pDB5SCD2khDykNHiIJvSQCvKQyuAhldBDashDaoOH6EIPaSAPaQwe0gg9pIU8pDV4iCH0kA7ykM7gIZ3QQ3rIQ3qDh5hCDxkgDxkMHjIIPWSEPGQ0eIgl9JAJ8pDJ4CGT0ENmyENmg4fYQg9ZIA9ZDB6yCD1khTxkNXiII/SQDfKQzeAhm9BDdshDdoOHuEIPOSAPOQwecgg95IQ85DR4iCf0kAvykMvgIZfQQ27IQ26Dh/hCD3kgD3kMHvIIPeSFPOQ1eEgg9JAP8pDP4CGf0EN+yEN+g4eEQg8FIA8FDB4KCD0UhDwUNHhIJPRQCPJQyOChkNBDYchDYYOHxEIPRSAPRQweigg9FIU8FDV4SCL0UAzyUMzgoZjQQ3HIQ3GDh6RCDyUgDyUMHkoIPZSEPJQ0eEgm9FAK8lDK4KGU0ENpyENpg4fkQg9lIA9lDB7KCD2UhTyUNXhIIfRQDvJQzuChnNBDechDeYOHlEIPFSAPFQweKgg9VIQ8VDR4SCX0UAnyUMngoZLQQ2XIQ2WDh9RCD1UgD1UMHqoIPVSFPFQ1eEgj9FAN8lDN4KGa0EN1yEN1g4e0Qg81IA81DB5qCD3UhDzUNHhIJ/RQC/JQy+ChltBDbchDbYOH9EIPdSAPdQwe6gg91IU81DV4yCD0UA/yUM/goZ7QQ33IQ32Dh4xCDw0gDw0MHhoIPTSEPDQ0eMgk9NAI8tDI4KGR0ENjyENjg4fMQg9NIA9NDB6aCD00hTw0NXjIIvTQDPLQzOChmdBDc8hDc4OHrEIPLSAPLQweWgg9tIQ8tDR4yCb00Ary0MrgoZXQQ2vIQ2uDh+xCD20gD20MHtoIPbSFPLQ1eMgh9NAO8tDO4KGd0EN7yEN7g4ecQg8dIA8dDB46CD10hDx0NHjIJfTQCfLQyeChk9BDZ8hDZ4OH3EIPXSAPXQweugg9dIU8dDV4yCP00A3y0M3goZvQQ3fIQ3eDh7xCDz0gDz0MHnoIPfSEPPQ0eMgn9NAL8tDL4KGX0ENvyENvg4f8Qg99IA99DB76CD30hTz0NXgoIPTQD/LQz+Chn9BDf8hDf4OHgkIPAyAPAwweBgg9DIQ8DDR4KCT0MAjyMMjgYZDQw2DIw2CDh8JCD0MgD0MMHoYIPQyFPAw1eCgi9DAM8jDM4GGY0MNwyMNwg4eiQg8jIA8jDB5GCD2MhDyMNHgoJvQwCvIwyuBhlNDDaMjDaIOH4kIPYyAPYwwexgg9jIU8jDV4KCH0MA7yMM7gYZzQw3jIw3iDh5JCDxMgDxMMHiYIPUyEPEw0eCgl9DAJ8jDJ4GGS0MNkyMNkg4fSQg9TIA9TDB6mCD1MhTxMNXgoI/QwDfIwzeBhmtDDdMjDdIOHskIPMyAPMwweZgg9zIQ8zDR4KCf0MAvyMMvgYZbQw2zIw2yDh/JCD3MgD3MMHuYIPcyFPMw1eKgg9DAP8jDP4GGe0MN8yMN8g4eKQg8LIA8LDB4WCD0shDwsNHioJPSwCPKwyOBhkdDDYsjDYoOHykIPSyAPSwwelgg9LIU8LDV4qCL0sAzysMzgYZnQw3LIw3KDh6pCDysgDysMHlYIPayEPKw0eKgm9LAK8rDK4GGV0MNqyMNqg4fqQg9rIA9rDB7WCD2shTysNXioIfSwDvKwzuBhndDDesjDeoOHmkIPGyAPGwweNgg9bIQ8bDR4qCX0sAnysMngYZPQw2bIw2aDh9pCD1sgD1sMHrYIPWyFPGw1eKgj9LAN8rDN4GGb0MN2yMN2g4e6Qg87IA87DB52CD3shDzsNHioJ/SwC/Kwy+Bhl9DDbsjDboOH+kIPeyAPewwe9gg97IU87DV4aCD0sA/ysM/gYZ/Qw37Iw36Dh4ZCDwcgDwcMHg4IPRyEPBw0eGgk9HAI8nDI4OGQ0MNhyMNhg4fGQg9HIA9HDB6OCD0chTwcNXhoIvRwDPJwzODhmNDDccjDcYOHpkIPJyAPJwweTgg9nIQ8nDR4aCb0cArycMrg4ZTQw2nIw2mDh+ZCD2cgD2cMHs4IPZyFPJw1eGgh9HAO8nDO4OGc0MN5yMN5g4eWQg8XIA8XDB4uCD1chDxcNHhoJfRwCfJwyeDhktDDZcjDZYOH1kIPVyAPVwwergg9XIU8XDV4aCP0cA3ycM3g4ZrQw3XIw3WDh7ZCDzcgDzcMHm4IPdyEPNw0eGgn9HAL8nDL4OGW0MNtyMNtg4f2Qg93IA93DB7uCD3chTzcNXjoIPRwD/Jwz+DhntDDfcjDfYOHjkIPDyAPDwweHgg9PIQ8PDR46CT08Ajy8Mjg4ZHQw2PIw2ODh85CD08gD08MHp4IPTyFPDw1eOgi9PAM8vDM4OGZ0MNzyMNzg4euQg8vIA8vDB5eCD28hDy8NHjoJvTwCvLwyuDhldDDa8jDa4OH7kIPbyAPbwwe3gg9vIU8vDV46CH08A7y8M7g4Z3Qw3vIw3uDh55CDx8gDx8MHj4IPXyEPHw0eOgl9PAJ8vDJ4OGT0MNnyMNng4feQg9fIA9fDB6+CD18hTx8NXjoI/TwDfLwzeDhm9DDd8jDd4OHvkIPPyAPPwwefgg9/IQ8/DR46Cf08Avy8Mvg4ZfQw2/Iw2+Dh/5CD38gD38MHv4IPfyFPPw1eBgg9PBPEMbDf7q0h//e/r+2AgRhPAQIwnsYKPQQEPIQ0OAhoNBDIMhDIIOHQUIPgSEPgQ0eAgs9BIE8BDF4GCz0EBTyENTgIajQQzDIQzCDhyFCD8EhD8ENHoILPYSAPIQweBgq9BAS8hDS4CGk0EMoyEMog4dhQg+hIQ+hDR5CCz2EgTyEMXgYLvQQFvIQ1uAhrNBDOMhDOIOHEUIP4SEP4Q0ewgs9/At5+NfgYaTQQwTIQwSDhwhCDxEhDxENHkYJPUSCPEQyeIgk9BAZ8hDZ4GG00EMUyEMUg4coQg9RIQ9RDR7GCD1EgzxEM3iIJvQQHfIQ3eBhrNBDDMhDDIOHGEIPMSEPMQ0exgk9xII8xDJ4iCX0EBvyENvgYbzQQxzIQxyDhzhCD3EhD3ENHiYIPcSDPMQzeIgn9BAf8hDf4GGi0EMCyEMCg4cEQg8JIQ8JDR4mCT0kgjwkMnhIJPSQGPKQ2OBhstBDEshDEoOHJEIPSSEPSQ0epgg9JIM8JDN4SCb0kBzykNzgYarQQwrIQwqDhxRCDykhDykNHqYJPaSCPKQyeEgl9JAa8pDa4GG60EMayEMag4c0Qg9pIQ9pDR5mCD2kgzykM3hIJ/SQHvKQ3uBhptBDBshDBoOHDEIPGSEPGQ0eZgk9ZII8ZDJ4yCT0kBnykNngYbbQQxbIQxaDhyxCD1khD1kNHuYIPWSDPGQzeMgm9JAd8pDd4GGu0EMOyEMOg4ccQg85IQ85DR7mCT3kgjzkMnjIJfSQG/KQ2+BhvtBDHshDHoOHPEIPeSEPeQ0eFgg95IM85DN4yCf0kB/ykN/gYaHQQwHIQwGDhwJCDwUhDwUNHhYJPRSCPBQyeCgk9FAY8lDY4GGx0EMRyEMRg4ciQg9FIQ9FDR6WCD0UgzwUM3goJvRQHPJQ3OBhqdBDCchDCYOHEkIPJSEPJQ0elgk9lII8lDJ4KCX0UBryUNrgYbnQQxnIQxmDhzJCD2UhD2UNHlYIPZSDPJQzeCgn9FAe8lDe4GGl0EMFyEMFg4cKQg8VIQ8VDR5WCT1UgjxUMnioJPRQGfJQ2eBhtdBDFchDFYOHKkIPVSEPVQ0e1gg9VIM8VDN4qCb0UB3yUN3gYa3QQw3IQw2DhxpCDzUhDzUNHtYJPdSCPNQyeKgl9FAb8lDb4GG90EMdyEMdg4c6Qg91IQ91DR42CD3UgzzUM3ioJ/RQH/JQ3+Bho9BDA8hDA4OHBkIPDSEPDQ0eNgk9NII8NDJ4aCT00Bjy0NjgYbPQQxPIQxODhyZCD00hD00NHrYIPTSDPDQzeGgm9NAc8tDc4GGr0EMLyEMLg4cWQg8tIQ8tDR62CT20gjy0MnhoJfTQGvLQ2uBhu9BDG8hDG4OHNkIPbSEPbQ0edgg9tIM8tDN4aCf00B7y0N7gYafQQwfIQweDhw5CDx0hDx0NHnYJPXSCPHQyeOgk9NAZ8tDZ4GG30EMXyEMXg4cuQg9dIQ9dDR72CD10gzx0M3joJvTQHfLQ3eBhr9BDD8hDD4OHHkIPPSEPPQ0e9gk99II89DJ46CX00Bvy0NvgYb/QQx/IQx+Dhz5CD30hD30NHg4IPfSDPPQzeOgn9NAf8tDf4OGg0MMAyMMAg4cBQg8DIQ8DDR4OCT0MgjwMMngYJPQwGPIw2ODhsNDDEMjDEIOHIUIPQyEPQw0ejgg9DIM8DDN4GCb0MBzyMNzg4ajQwwjIwwiDhxFCDyMhDyMNHo4JPYyCPIwyeBgl9DAa8jDa4OG40MMYyMMYg4cxQg9jIQ9jDR5OCD2MgzyMM3gYJ/QwHvIw3uDhpNDDBMjDBIOHCUIPEyEPEw0eTgk9TII8TDJ4mCT0MBnyMNng4bTQwxTIwxSDhylCD1MhD1MNHs4IPUyDPEwzeJgm9DAd8jDd4OGs0MMMyMMMg4cZQg8zIQ8zDR7OCT3MgjzMMniYJfQwG/Iw2+DhvNDDHMjDHIOHOUIPcyEPcw0eLgg9zIM8zDN4mCf0MB/yMN/g4aLQwwLIwwKDhwVCDwshDwsNHi4JPSyCPCwyeFgk9LAY8rDY4OGy0MMSyMMSg4clQg9LIQ9LDR6uCD0sgzwsM3hYJvSwHPKw3ODhqtDDCsjDCoOHFUIPKyEPKw0ergk9rII8rDJ4WCX0sBrysNrg4brQwxrIwxqDhzVCD2shD2sNHm4IPayDPKwzeFgn9LAe8rDe4OGm0MMGyMMGg4cNQg8bIQ8bDR5uCT1sgjxsMnjYJPSwGfKw2eDhttDDFsjDFoOHLUIPWyEPWw0e7gg9bIM8bDN42Cb0sB3ysN3g4a7Qww7Iww6Dhx1CDzshDzsNHu4JPeyCPOwyeNgl9LAb8rDb4OG+0MMeyMMeg4c9Qg97IQ97DR4eCD3sgzzsM3jYJ/SwH/Kw3+DhodDDAcjDAYOHA0IPByEPBw0eHgk9HII8HDJ4OCT0cBjycNjg4bHQwxHIwxGDhyNCD0chD0cNHp4IPRyDPBwzeDgm9HAc8nDc4OGp0MMJyMMJg4cTQg8nIQ8nDR6eCT2cgjycMng4JfRwGvJw2uDhudDDGcjDGYOHM0IPZyEPZw0eXgg9nIM8nDN4OCf0cB7ycN7g4aXQwwXIwwWDhwtCDxchDxcNHl4JPVyCPFwyeLgk9HAZ8nDZ4OG10MMVyMMVg4crQg9XIQ9XDR7eCD1cgzxcM3i4JvRwHfJw3eDhrdDDDcjDDYOHG0IPNyEPNw0e3gk93II83DJ4uCX0cBvycNvg4b3Qwx3Iwx2DhztCD3chD3cNHj4IPdyDPNwzeLgn9HAf8nDf4OGj0MMDyMMDg4cHQg8PIQ8PDR4+CT08gjw8Mnh4JPTwGPLw2ODhs9DDE8jDE4OHJ0IPTyEPTw0evgg9PIM8PDN4eCb08Bzy8Nzg4avQwwvIwwuDhxdCDy8hDy8NHr4JPbyCPLwyeHgl9PAa8vDa4OG70MMbyMMbg4c3Qg9vIQ9vDR5+CD28gzy8M3h4J/TwHvLw3uDhp9DDB8jDB4OHD0IPHyEPHw0efgk9fII8fDJ4+CT08Bny8Nng4bfQwxfIwxeDhy9CD18hD18NHv4IPXyDPHwzePgm9PAd8vDd4OGv0MMPyMMPg4cfQg8/IQ8/DR7+qam76S/Iwy+Dh19CD78hD78NHgIIPfyBPPwxePgj9PAX8vDX4CGg0MM/QRkP/+nSHv57+//aChCU8RAgKO8hkNBDQMhDQIOHgEIPgSAPgQweAgs9BIY8BDZ4CCz0EATyEMTgIYjQQ1DIQ1CDh6BCD8EgD8EMHoIKPQSHPAQ3eAgu9BAC8hDC4CGY0ENIyENIg4eQQg+hIA+hDB6CCz2EhjyENngILfQQBvIQxuAhhNBDWMhDWIOHsEIP4SAP4QweQgo9hIc8hDd4CC/08C/k4V+Dh1BCDxEgDxEMHiIIPUSEPEQ0eAgt9BAJ8hDJ4CGS0ENkyENkg4cwQg9RIA9RDB6iCD1EhTxENXgIK/QQDfIQzeAhmtBDdMhDdIOHcEIPMSAPMQweYgg9xIQ8xDR4CC/0EAvyEMvgIZbQQ2zIQ2yDh3+FHuJAHuIYPMQReogLeYhr8BBB6CEe5CGewUM8oYf4kIf4Bg8RhR4SQB4SGDwkEHpICHlIaPAQSeghEeQhkcFDIqGHxJCHxAYPkYUekkAekhg8JBF6SAp5SGrwEEXoIRnkIZnBQzKhh+SQh+QGD1GFHlJAHlIYPKQQekgJeUhp8BBN6CEV5CGVwUMqoYfUkIfUBg/RhR7SQB7SGDykEXpIC3lIa/AQQ+ghHeQhncFDOqGH9JCH9AYPMYUeMkAeMhg8ZBB6yAh5yGjwEEvoIRPkIZPBQyahh8yQh8wGD7GFHrJAHrIYPGQResgKechq8BBH6CEb5CGbwUM2oYfskIfsBg9xhR5yQB5yGDzkEHrICXnIafAQT+ghF+Qhl8FDLqGH3JCH3AYP8YUe8kAe8hg85BF6yAt5yGvwkEDoIR/kIZ/BQz6hh/yQh/wGDwmFHgpAHgoYPBQQeigIeSho8JBI6KEQ5KGQwUMhoYfCkIfCBg+JhR6KQB6KGDwUEXooCnkoavCQROihGOShmMFDMaGH4pCH4gYPSYUeSkAeShg8lBB6KAl5KGnwkEzooRTkoZTBQymhh9KQh9IGD8mFHspAHsoYPJQReigLeShr8JBC6KEc5KGcwUM5oYfykIfyBg8phR4qQB4qGDxUEHqoCHmoaPCQSuihEuShksFDJaGHypCHygYPqYUeqkAeqhg8VBF6qAp5qGrwkEbooRrkoZrBQzWhh+qQh+oGD2mFHmpAHmoYPNQQeqgJeahp8JBO6KEW5KGWwUMtoYfakIfaBg/phR7qQB7qGDzUEXqoC3moa/CQQeihHuShnsFDPaGH+pCH+gYPGYUeGkAeGhg8NBB6aAh5aGjwkEnooRHkoZHBQyOhh8aQh8YGD5mFHppAHpoYPDQRemgKeWhq8JBF6KEZ5KGZwUMzoYfmkIfmBg9ZhR5aQB5aGDy0EHpoCXloafCQTeihFeShlcFDK6GH1pCH1gYP2YUe2kAe2hg8tBF6aAt5aGvwkEPooR3koZ3BQzuhh/aQh/YGDzmFHjpAHjoYPHQQeugIeeho8JBL6KET5KGTwUMnoYfOkIfOBg+5hR66QB66GDx0EXroCnnoavCQR+ihG+Shm8FDN6GH7pCH7gYPeYUeekAeehg89BB66Al56GnwkE/ooRfkoZfBQy+hh96Qh94GD/mFHvpAHvoYPPQReugLeehr8FBA6KEf5KGfwUM/oYf+kIf+Bg8FhR4GQB4GGDwMEHoYCHkYaPBQSOhhEORhkMHDIKGHwZCHwQYPhYUehkAehhg8DBF6GAp5GGrwUEToYRjkYZjBwzChh+GQh+EGD0WFHkZAHkYYPIwQehgJeRhp8FBM6GEU5GGUwcMooYfRkIfRBg/FhR7GQB7GGDyMEXoYC3kYa/BQQuhhHORhnMHDOKGH8ZCH8QYPJYUeJkAeJhg8TBB6mAh5mGjwUEroYRLkYZLBwyShh8mQh8kGD6WFHqZAHqYYPEwRepgKeZhq8FBG6GEa5GGawcM0oYfpkIfpBg9lhR5mQB5mGDzMEHqYCXmYafBQTuhhFuRhlsHDLKGH2ZCH2QYP5YUe5kAe5hg8zBF6mAt5mGvwUEHoYR7kYZ7Bwzyhh/mQh/kGDxWFHhZAHhYYPCwQelgIeVho8FBJ6GER5GGRwcMioYfFkIfFBg+VhR6WQB6WGDwsEXpYCnlYavBQRehhGeRhmcHDMqGH5ZCH5QYPVYUeVkAeVhg8rBB6WAl5WGnwUE3oYRXkYZXBwyqhh9WQh9UGD9WFHtZAHtYYPKwRelgLeVhr8FBD6GEd5GGdwcM6oYf1kIf1Bg81hR42QB42GDxsEHrYCHnYaPBQS+hhE+Rhk8HDJqGHzZCHzQYPtYUetkAethg8bBF62Ap52GrwUEfoYRvkYZvBwzahh+2Qh+0GD3WFHnZAHnYYPOwQetgJedhp8FBP6GEX5GGXwcMuoYfdkIfdBg/1hR72QB72GDzsEXrYC3nYa/DQQOhhH+Rhn8HDPqGH/ZCH/QYPDYUeDkAeDhg8HBB6OAh5OGjw0Ejo4RDk4ZDBwyGhh8OQh8MGD42FHo5AHo4YPBwRejgKeThq8NBE6OEY5OGYwcMxoYfjkIfjBg9NhR5OQB5OGDycEHo4CXk4afDQTOjhFOThlMHDKaGH05CH0wYPzYUezkAezhg8nBF6OAt5OGvw0ELo4Rzk4ZzBwzmhh/OQh/MGDy2FHi5AHi4YPFwQergIebho8NBK6OES5OGSwcMloYfLkIfLBg+thR6uQB6uGDxcEXq4Cnm4avDQRujhGuThmsHDNaGH65CH6wYPbYUebkAebhg83BB6uAl5uGnw0E7o4Rbk4ZbBwy2hh9uQh9sGD+2FHu5AHu4YPNwRergLebhr8NBB6OEe5OGewcM9oYf7kIf7Bg8dhR4eQB4eGDw8EHp4CHl4aPDQSejhEeThkcHDI6GHx5CHxwYPnYUenkAenhg8PBF6eAp5eGrw0EXo4Rnk4ZnBwzOhh+eQh+cGD12FHl5AHl4YPLwQengJeXhp8NBN6OEV5OGVwcMroYfXkIfXBg/dhR7eQB7eGDy8EXp4C3l4a/DQQ+jhHeThncHDO6GH95CH9wYPPYUePkAePhg8fBB6+Ah5+Gjw0Evo4RPk4ZPBwyehh8+Qh88GD72FHr5AHr4YPHwRevgKefhq8NBH6OEb5OGbwcM3oYfvkIfvBg99hR5+QB5+GDz8EHr4CXn4afDQT+jhF+Thl8HDL6GH35CH3wYP/YUe/kAe/hg8/BF6+At5+GvwMEDo4Z9gjIf/dGkP/739f20FCMZ4CBCM9zBQ6CEg5CGgwUNAoYdAkIdABg+DhB4CQx4CGzwEFnoIAnkIYvAwWOghKOQhqMFDUKGHYJCHYAYPQ4QegkMeghs8BBd6CAF5CGHwMFToISTkIaTBQ0ihh1CQh1AGD8OEHkJDHkIbPIQWeggDeQhj8DBc6CEs5CGswUNYoYdwkIdwBg8jhB7CQx7CGzyEF3r4F/Lwr8HDSKGHCJCHCAYPEYQeIkIeIho8jBJ6iAR5iGTwEEnoITLkIbLBw2ihhyiQhygGD1GEHqJCHqIaPIwReogGeYhm8BBN6CE65CG6wcNYoYcYkIcYBg8xhB5iQh5iGjyME3qIBXmIZfAQS+ghNuQhtsHDeKGHOJCHOAYPcYQe4kIe4ho8TBB6iAd5iGfwEE/oIT7kIb7Bw0ShhwSQhwQGDwmEHhJCHhIaPEwSekgEeUhk8JBI6CEx5CGxwcNkoYckkIckBg9JhB6SQh6SGjxMEXpIBnlIZvCQTOghOeQhucHDVKGHFJCHFAYPKYQeUkIeUho8TBN6SAV5SGXwkEroITXkIbXBw3ShhzSQhzQGD2mEHtJCHtIaPMwQekgHeUhn8JBO6CE95CG9wcNMoYcMkIcMBg8ZhB4yQh4yGjzMEnrIBHnIZPCQSeghM+Qhs8HDbKGHLJCHLAYPWYQeskIesho8zBF6yAZ5yGbwkE3oITvkIbvBw1yhhxyQhxwGDzmEHnJCHnIaPMwTesgFechl8JBL6CE35CG3wcN8oYc8kIc8Bg95hB7yQh7yGjwsEHrIB3nIZ/CQT+ghP+Qhv8HDQqGHApCHAgYPBYQeCkIeCho8LBJ6KAR5KGTwUEjooTDkobDBw2KhhyKQhyIGD0WEHopCHooaPCwReigGeShm8FBM6KE45KG4wcNSoYcSkIcSBg8lhB5KQh5KGjwsE3ooBXkoZfBQSuihNOShtMHDcqGHMpCHMgYPZYQeykIeyho8rBB6KAd5KGfwUE7ooTzkobzBw0qhhwqQhwoGDxWEHipCHioaPKwSeqgEeahk8FBJ6KEy5KGywcNqoYcqkIcqBg9VhB6qQh6qGjysEXqoBnmoZvBQTeihOuShusHDWqGHGpCHGgYPNYQeakIeaho8rBN6qAV5qGXwUEvooTbkobbBw3qhhzqQhzoGD3WEHupCHuoaPGwQeqgHeahn8FBP6KE+5KG+wcNGoYcGkIcGBg8NhB4aQh4aGjxsEnpoBHloZPDQSOihMeShscHDZqGHJpCHJgYPTYQemkIemho8bBF6aAZ5aGbw0EzooTnkobnBw1ahhxaQhxYGDy2EHlpCHloaPGwTemgFeWhl8NBK6KE15KG1wcN2oYc2kIc2Bg9thB7aQh7aGjzsEHpoB3loZ/DQTuihPeShvcHDTqGHDpCHDgYPHYQeOkIeOho87BJ66AR56GTw0EnooTPkobPBw26hhy6Qhy4GD12EHrpCHroaPOwReugGeehm8NBN6KE75KG7wcNeoYcekIceBg89hB56Qh56GjzsE3roBXnoZfDQS+ihN+Sht8HDfqGHPpCHPgYPfYQe+kIe+ho8HBB66Ad56Gfw0E/ooT/kob/Bw0GhhwGQhwEGDwOEHgZCHgYaPBwSehgEeRhk8DBI6GEw5GGwwcNhoYchkIchBg9DhB6GQh6GGjwcEXoYBnkYZvAwTOhhOORhuMHDUaGHEZCHEQYPI4QeRkIeRho8HBN6GAV5GGXwMEroYTTkYbTBw3GhhzGQhzEGD2OEHsZCHsYaPJwQehgHeRhn8DBO6GE85GG8wcNJoYcJkIcJBg8ThB4mQh4mGjycEnqYBHmYZPAwSehhMuRhssHDaaGHKZCHKQYPU4QepkIepho8nBF6mAZ5mGbwME3oYTrkYbrBw1mhhxmQhxkGDzOEHmZCHmYaPJwTepgFeZhl8DBL6GE25GG2wcN5oYc5kIc5Bg9zhB7mQh7mGjxcEHqYB3mYZ/AwT+hhPuRhvsHDRaGHBZCHBQYPC4QeFkIeFho8XBJ6WAR5WGTwsEjoYTHkYbHBw2WhhyWQhyUGD0uEHpZCHpYaPFwRelgGeVhm8LBM6GE55GG5wcNVoYcVkIcVBg8rhB5WQh5WGjxcE3pYBXlYZfCwSuhhNeRhtcHDdaGHNZCHNQYPa4Qe1kIe1ho83BB6WAd5WGfwsE7oYT3kYb3Bw02hhw2Qhw0GDxuEHjZCHjYaPNwSetgEedhk8LBJ6GEz5GGzwcNtoYctkIctBg9bhB62Qh62GjzcEXrYBnnYZvCwTehhO+Rhu8HDXaGHHZCHHQYPO4QedkIedho83BN62AV52GXwsEvoYTfkYbfBw32hhz2Qhz0GD3uEHvZCHvYaPDwQetgHedhn8LBP6GE/5GG/wcNDoYcDkIcDBg8HhB4OQh4OGjw8Eno4BHk4ZPBwSOjhMOThsMHDY6GHI5CHIwYPR4QejkIejho8PBF6OAZ5OGbwcEzo4Tjk4bjBw1OhhxOQhxMGDyeEHk5CHk4aPDwTejgFeThl8HBK6OE05OG0wcNzoYczkIczBg9nhB7OQh7OGjy8EHo4B3k4Z/BwTujhPOThvMHDS6GHC5CHCwYPF4QeLkIeLho8vBJ6uAR5uGTwcEno4TLk4bLBw2uhhyuQhysGD1eEHq5CHq4aPLwRergGebhm8HBN6OE65OG6wcNboYcbkIcbBg83hB5uQh5uGjy8E3q4BXm4ZfBwS+jhNuThtsHDe6GHO5CHOwYPd4Qe7kIe7ho8fBB6uAd5uGfwcE/o4T7k4b7Bw0ehhweQhwcGDw+EHh5CHh4aPHwSengEeXhk8PBI6OEx5OGxwcNnoYcnkIcnBg9PhB6eQh6eGjx8EXp4Bnl4ZvDwTOjhOeThucHDV6GHF5CHFwYPL4QeXkIeXho8fBN6eAV5eGXw8Ero4TXk4bXBw3ehhzeQhzcGD2+EHt5CHt4aPPwQengHeXhn8PBO6OE95OG9wcNPoYcPkIcPBg8fhB4+Qh4+Gjz8Enr4BHn4ZPDwSejhM+Ths8HDb6GHL5CHLwYPX4QevkIevho8/BF6+AZ5+Gbw8E3o4Tvk4bvBw1+hhx+Qhx8GDz+EHn5CHn4aPPxTS3fTX5CHXwYPv4QefkMefhs8BBB6+AN5+GPw8Efo4S/k4a/BQ0Chh3+CMx7+06U9/Pf2/7UVIDjjIUBw3kMgoYeAkIeABg8BhR4CQR4CGTwEFnoIDHkIbPAQWOghCOQhiMFDEKGHoJCHoAYPQYUegkEeghk8BBV6CA55CG7wEFzoIQTkIYTBQzChh5CQh5AGDyGFHkJBHkIZPAQXeggNeQht8BBa6CEM5CGMwUMIoYewkIewBg9hhR7CQR7CGTyEFHoID3kIb/AQXujhX8jDvwYPoYQeIkAeIhg8RBB6iAh5iGjwEFroIRLkIZLBQyShh8iQh8gGD2GEHqJAHqIYPEQReogKeYhq8BBW6CEa5CGawUM0oYfokIfoBg/hhB5iQB5iGDzEEHqICXmIafAQXughFuQhlsFDLKGH2JCH2AYP/wo9xIE8xDF4iCP0EBfyENfgIYLQQzzIQzyDh3hCD/EhD/ENHiIKPSSAPCQweEgg9JAQ8pDQ4CGS0EMiyEMig4dEQg+JIQ+JDR4iCz0kgTwkMXhIIvSQFPKQ1OAhitBDMshDMoOHZEIPySEPyQ0eogo9pIA8pDB4SCH0kBLykNLgIZrQQyrIQyqDh1RCD6khD6kNHqILPaSBPKQxeEgj9JAW8pDW4CGG0EM6yEM6g4d0Qg/pIQ/pDR5iCj1kgDxkMHjIIPSQEfKQ0eAhltBDJshDJoOHTEIPmSEPmQ0eYgs9ZIE8ZDF4yCL0kBXykNXgIY7QQzbIQzaDh2xCD9khD9kNHuIKPeSAPOQweMgh9JAT8pDT4CGe0EMuyEMug4dcQg+5IQ+5DR7iCz3kgTzkMXjII/SQF/KQ1+AhgdBDPshDPoOHfEIP+SEP+Q0eEgo9FIA8FDB4KCD0UBDyUNDgIZHQQyHIQyGDh0JCD4UhD4UNHhILPRSBPBQxeCgi9FAU8lDU4CGJ0EMxyEMxg4diQg/FIQ/FDR6SCj2UgDyUMHgoIfRQEvJQ0uAhmdBDKchDKYOHUkIPpSEPpQ0ekgs9lIE8lDF4KCP0UBbyUNbgIYXQQznIQzmDh3JCD+UhD+UNHlIKPVSAPFQweKgg9FAR8lDR4CGV0EMlyEMlg4dKQg+VIQ+VDR5SCz1UgTxUMXioIvRQFfJQ1eAhjdBDNchDNYOHakIP1SEP1Q0e0go91IA81DB4qCH0UBPyUNPgIZ3QQy3IQy2Dh1pCD7UhD7UNHtILPdSBPNQxeKgj9FAX8lDX4CGD0EM9yEM9g4d6Qg/1IQ/1DR4yCj00gDw0MHhoIPTQEPLQ0OAhk9BDI8hDI4OHRkIPjSEPjQ0eMgs9NIE8NDF4aCL00BTy0NTgIYvQQzPIQzODh2ZCD80hD80NHrIKPbSAPLQweGgh9NAS8tDS4CGb0EMryEMrg4dWQg+tIQ+tDR6yCz20gTy0MXhoI/TQFvLQ1uAhh9BDO8hDO4OHdkIP7SEP7Q0ecgo9dIA8dDB46CD00BHy0NHgIZfQQyfIQyeDh05CD50hD50NHnILPXSBPHQxeOgi9NAV8tDV4CGP0EM3yEM3g4duQg/dIQ/dDR7yCj30gDz0MHjoIfTQE/LQ0+Ahn9BDL8hDL4OHXkIPvSEPvQ0e8gs99IE89DF46CP00Bfy0NfgoYDQQz/IQz+Dh35CD/0hD/0NHgoKPQyAPAwweBgg9DAQ8jDQ4KGQ0MMgyMMgg4dBQg+DIQ+DDR4KCz0MgTwMMXgYIvQwFPIw1OChiNDDMMjDMIOHYUIPwyEPww0eigo9jIA8jDB4GCH0MBLyMNLgoZjQwyjIwyiDh1FCD6MhD6MNHooLPYyBPIwxeBgj9DAW8jDW4KGE0MM4yMM4g4dxQg/jIQ/jDR5KCj1MgDxMMHiYIPQwEfIw0eChlNDDJMjDJIOHSUIPkyEPkw0eSgs9TIE8TDF4mCL0MBXyMNXgoYzQwzTIwzSDh2lCD9MhD9MNHsoKPcyAPMwweJgh9DAT8jDT4KGc0MMsyMMsg4dZQg+zIQ+zDR7KCz3MgTzMMXiYI/QwF/Iw1+ChgtDDPMjDPIOHeUIP8yEP8w0eKgo9LIA8LDB4WCD0sBDysNDgoZLQwyLIwyKDh0VCD4shD4sNHioLPSyBPCwxeFgi9LAU8rDU4KGK0MMyyMMyg4dlQg/LIQ/LDR6qCj2sgDysMHhYIfSwEvKw0uChmtDDKsjDKoOHVUIPqyEPqw0eqgs9rIE8rDF4WCP0sBbysNbgoYbQwzrIwzqDh3VCD+shD+sNHmoKPWyAPGwweNgg9LAR8rDR4KGW0MMmyMMmg4dNQg+bIQ+bDR5qCz1sgTxsMXjYIvSwFfKw1eChjtDDNsjDNoOHbUIP2yEP2w0e6go97IA87DB42CH0sBPysNPgoZ7Qwy7Iwy6Dh11CD7shD7sNHuoLPeyBPOwxeNgj9LAX8rDX4KGB0MM+yMM+g4d9Qg/7IQ/7DR4aCj0cgDwcMHg4IPRwEPJw0OChkdDDIcjDIYOHQ0IPhyEPhw0eGgs9HIE8HDF4OCL0cBTycNTgoYnQwzHIwzGDh2NCD8chD8cNHpoKPZyAPJwweDgh9HAS8nDS4KGZ0MMpyMMpg4dTQg+nIQ+nDR6aCz2cgTycMXg4I/RwFvJw1uChhdDDOcjDOYOHc0IP5yEP5w0eWgo9XIA8XDB4uCD0cBHycNHgoZXQwyXIwyWDh0tCD5chD5cNHloLPVyBPFwxeLgi9HAV8nDV4KGN0MM1yMM1g4drQg/XIQ/XDR7aCj3cgDzcMHi4IfRwE/Jw0+ChndDDLcjDLYOHW0IPtyEPtw0e2gs93IE83DF4uCP0cBfycNfgoYPQwz3Iwz2Dh3tCD/chD/cNHjoKPTyAPDwweHgg9PAQ8vDQ4KGT0MMjyMMjg4dHQg+PIQ+PDR46Cz08gTw8MXh4IvTwFPLw1OChi9DDM8jDM4OHZ0IPzyEPzw0eugo9vIA8vDB4eCH08BLy8NLgoZvQwyvIwyuDh1dCD68hD68NHroLPbyBPLwxeHgj9PAW8vDW4KGH0MM7yMM7g4d3Qg/vIQ/vDR56Cj18gDx8MHj4IPTwEfLw0eChl9DDJ8jDJ4OHT0IPnyEPnw0eegs9fIE8fDF4+CL08BXy8NXgoY/QwzfIwzeDh29CD98hD98NHvoKPfyAPPwwePgh9PAT8vDT4KGf0MMvyMMvg4dfQg+/IQ+/DR76Cz38gTz8MXj4I/TwF/Lw1+BhgNDDPyEYD//p0h7+e/v/2goQgvEQIATvYaDQQ0DIQ0CDh4BCD4EgD4EMHgYJPQSGPAQ2eAgs9BAE8hDE4GGw0ENQyENQg4egQg/BIA/BDB6GCD0EhzwEN3gILvQQAvIQwuBhqNBDSMhDSIOHkEIPoSAPoQwehgk9hIY8hDZ4CC30EAbyEMbgYbjQQ1jIQ1iDh7BCD+EgD+EMHkYIPYSHPIQ3eAgv9PAv5OFfg4eRQg8RIA8RDB4iCD1EhDxENHgYJfQQCfIQyeAhktBDZMhDZIOH0UIPUSAPUQweogg9RIU8RDV4GCP0EA3yEM3gIZrQQ3TIQ3SDh7FCDzEgDzEMHmIIPcSEPMQ0eBgn9BAL8hDL4CGW0ENsyENsg4fxQg9xIA9xDB7iCD3EhTzENXiYIPQQD/IQz+AhntBDfMhDfIOHiUIPCSAPCQweEgg9JIQ8JDR4mCT0kAjykMjgIZHQQ2LIQ2KDh8lCD0kgD0kMHpIIPSSFPCQ1eJgi9JAM8pDM4CGZ0ENyyENyg4epQg8pIA8pDB5SCD2khDykNHiYJvSQCvKQyuAhldBDashDaoOH6UIPaSAPaQwe0gg9pIU8pDV4mCH0kA7ykM7gIZ3QQ3rIQ3qDh5lCDxkgDxkMHjIIPWSEPGQ0eJgl9JAJ8pDJ4CGT0ENmyENmg4fZQg9ZIA9ZDB6yCD1khTxkNXiYI/SQDfKQzeAhm9BDdshDdoOHuUIPOSAPOQwecgg95IQ85DR4mCf0kAvykMvgIZfQQ27IQ26Dh/lCD3kgD3kMHvIIPeSFPOQ1eFgg9JAP8pDP4CGf0EN+yEN+g4eFQg8FIA8FDB4KCD0UhDwUNHhYJPRQCPJQyOChkNBDYchDYYOHxUIPRSAPRQweigg9FIU8FDV4WCL0UAzyUMzgoZjQQ3HIQ3GDh6VCDyUgDyUMHkoIPZSEPJQ0eFgm9FAK8lDK4KGU0ENpyENpg4flQg9lIA9lDB7KCD2UhTyUNXhYIfRQDvJQzuChnNBDechDeYOHlUIPFSAPFQweKgg9VIQ8VDR4WCX0UAnyUMngoZLQQ2XIQ2WDh9VCD1UgD1UMHqoIPVSFPFQ1eFgj9FAN8lDN4KGa0EN1yEN1g4e1Qg81IA81DB5qCD3UhDzUNHhYJ/RQC/JQy+ChltBDbchDbYOH9UIPdSAPdQwe6gg91IU81DV42CD0UA/yUM/goZ7QQ33IQ32Dh41CDw0gDw0MHhoIPTSEPDQ0eNgk9NAI8tDI4KGR0ENjyENjg4fNQg9NIA9NDB6aCD00hTw0NXjYIvTQDPLQzOChmdBDc8hDc4OHrUIPLSAPLQweWgg9tIQ8tDR42Cb00Ary0MrgoZXQQ2vIQ2uDh+1CD20gD20MHtoIPbSFPLQ1eNgh9NAO8tDO4KGd0EN7yEN7g4edQg8dIA8dDB46CD10hDx0NHjYJfTQCfLQyeChk9BDZ8hDZ4OH3UIPXSAPXQweugg9dIU8dDV42CP00A3y0M3goZvQQ3fIQ3eDh71CDz0gDz0MHnoIPfSEPPQ0eNgn9NAL8tDL4KGX0ENvyENvg4f9Qg99IA99DB76CD30hTz0NXg4IPTQD/LQz+Chn9BDf8hDf4OHg0IPAyAPAwweBgg9DIQ8DDR4OCT0MAjyMMjgYZDQw2DIw2CDh8NCD0MgD0MMHoYIPQyFPAw1eDgi9DAM8jDM4GGY0MNwyMNwg4ejQg8jIA8jDB5GCD2MhDyMNHg4JvQwCvIwyuBhlNDDaMjDaIOH40IPYyAPYwwexgg9jIU8jDV4OCH0MA7yMM7gYZzQw3jIw3iDh5NCDxMgDxMMHiYIPUyEPEw0eDgl9DAJ8jDJ4GGS0MNkyMNkg4fTQg9TIA9TDB6mCD1MhTxMNXg4I/QwDfIwzeBhmtDDdMjDdIOHs0IPMyAPMwweZgg9zIQ8zDR4OCf0MAvyMMvgYZbQw2zIw2yDh/NCD3MgD3MMHuYIPcyFPMw1eLgg9DAP8jDP4GGe0MN8yMN8g4eLQg8LIA8LDB4WCD0shDwsNHi4JPSwCPKwyOBhkdDDYsjDYoOHy0IPSyAPSwwelgg9LIU8LDV4uCL0sAzysMzgYZnQw3LIw3KDh6tCDysgDysMHlYIPayEPKw0eLgm9LAK8rDK4GGV0MNqyMNqg4frQg9rIA9rDB7WCD2shTysNXi4IfSwDvKwzuBhndDDesjDeoOHm0IPGyAPGwweNgg9bIQ8bDR4uCX0sAnysMngYZPQw2bIw2aDh9tCD1sgD1sMHrYIPWyFPGw1eLgj9LAN8rDN4GGb0MN2yMN2g4e7Qg87IA87DB52CD3shDzsNHi4J/SwC/Kwy+Bhl9DDbsjDboOH+0IPeyAPewwe9gg97IU87DV4eCD0sA/ysM/gYZ/Qw37Iw36Dh4dCDwcgDwcMHg4IPRyEPBw0eHgk9HAI8nDI4OGQ0MNhyMNhg4fHQg9HIA9HDB6OCD0chTwcNXh4IvRwDPJwzODhmNDDccjDcYOHp0IPJyAPJwweTgg9nIQ8nDR4eCb0cArycMrg4ZTQw2nIw2mDh+dCD2cgD2cMHs4IPZyFPJw1eHgh9HAO8nDO4OGc0MN5yMN5g4eXQg8XIA8XDB4uCD1chDxcNHh4JfRwCfJwyeDhktDDZcjDZYOH10IPVyAPVwwergg9XIU8XDV4eCP0cA3ycM3g4ZrQw3XIw3WDh7dCDzcgDzcMHm4IPdyEPNw0eHgn9HAL8nDL4OGW0MNtyMNtg4f3Qg93IA93DB7uCD3chTzcNXj4IPRwD/Jwz+DhntDDfcjDfYOHj0IPDyAPDwweHgg9PIQ8PDR4+CT08Ajy8Mjg4ZHQw2PIw2ODh89CD08gD08MHp4IPTyFPDw1ePgi9PAM8vDM4OGZ0MNzyMNzg4evQg8vIA8vDB5eCD28hDy8NHj4JvTwCvLwyuDhldDDa8jDa4OH70IPbyAPbwwe3gg9vIU8vDV4+CH08A7y8M7g4Z3Qw3vIw3uDh59CDx8gDx8MHj4IPXyEPHw0ePgl9PAJ8vDJ4OGT0MNnyMNng4ffQg9fIA9fDB6+CD18hTx8NXj4I/TwDfLwzeDhm9DDd8jDd4OHv0IPPyAPPwwefgg9/IQ8/DR4+Ke27qa/IA+/DB5+CT38hjz8NngIIPTwB/Lwx+Dhj9DDX8jDX4OHgEIP/4RkPPynS3v47+3/aytASMZDgJC8h0BCDwEhDwENHgIKPQSCPAQyeAgs9BAY8hDY4CGw0EMQyEMQg4cgQg9BIQ9BDR6CCj0EgzwEM3gIKvQQHPIQ3OAhuNBDCMhDCIOHYEIPISEPIQ0eQgo9hII8hDJ4CC70EBryENrgIbTQQxjIQxiDhxBCD2EhD2ENHsIKPYSDPIQzeAgp9BAe8hDe4CG80MO/kId/DR5CCT1EgDxEMHiIIPQQEfIQ0eAhtNBDJMhDJIOHSEIPkSEPkQ0ewgg9RIE8RDF4iCL0EBXyENXgIazQQzTIQzSDh2hCD9EhD9ENHsIJPcSAPMQweIgh9BAT8hDT4CG80EMsyEMsg4dYQg+xIQ+xDR7+FXqIA3mIY/AQR+ghLuQhrsFDBKGHeJCHeAYP8YQe4kMe4hs8RBR6SAB5SGDwkEDoISHkIaHBQyShh0SQh0QGD4mEHhJDHhIbPEQWekgCeUhi8JBE6CEp5CGpwUMUoYdkkIdkBg/JhB6SQx6SGzxEFXpIAXlIYfCQQughJeQhpcFDNKGHVJCHVAYPqYQeUkMeUhs8RBd6SAN5SGPwkEboIS3kIa3BQwyhh3SQh3QGD+mEHtJDHtIbPMQUesgAechg8JBB6CEj5CGjwUMsoYdMkIdMBg+ZhB4yQx4yGzzEFnrIAnnIYvCQReghK+Qhq8FDHKGHbJCHbAYP2YQeskMeshs8xBV6yAF5yGHwkEPoISfkIafBQzyhh1yQh1wGD7mEHnJDHnIbPMQXesgDechj8JBH6CEv5CGvwUMCoYd8kId8Bg/5hB7yQx7yGzwkFHooAHkoYPBQQOihIOShoMFDIqGHQpCHQgYPhYQeCkMeChs8JBZ6KAJ5KGLwUETooSjkoajBQxKhh2KQh2IGD8WEHopDHoobPCQVeigBeShh8FBC6KEk5KGkwUMyoYdSkIdSBg+lhB5KQx5KGzwkF3ooA3koY/BQRuihLOShrMFDCqGHcpCHcgYP5YQeykMeyhs8pBR6qAB5qGDwUEHooSLkoaLBQyqhh0qQh0oGD5WEHipDHiobPKQWeqgCeahi8FBF6KEq5KGqwUMaoYdqkIdqBg/VhB6qQx6qGzykFXqoAXmoYfBQQ+ihJuShpsFDOqGHWpCHWgYPtYQeakMeahs8pBd6qAN5qGPwUEfooS7koa7BQwahh3qQh3oGD/WEHupDHuobPGQUemgAeWhg8NBA6KEh5KGhwUMmoYdGkIdGBg+NhB4aQx4aGzxkFnpoAnloYvDQROihKeShqcFDFqGHZpCHZgYPzYQemkMemhs8ZBV6aAF5aGHw0ELooSXkoaXBQzahh1aQh1YGD62EHlpDHlobPGQXemgDeWhj8NBG6KEt5KGtwUMOoYd2kId2Bg/thB7aQx7aGzzkFHroAHnoYPDQQeihI+Sho8FDLqGHTpCHTgYPnYQeOkMeOhs85BZ66AJ56GLw0EXooSvkoavBQx6hh26Qh24GD92EHrpDHrobPOQVeugBeehh8NBD6KEn5KGnwUM+oYdekIdeBg+9hB56Qx56GzzkF3roA3noY/DQR+ihL+Shr8FDAaGHfpCHfgYP/YQe+kMe+hs8FBR6GAB5GGDwMEDoYSDkYaDBQyGhh0GQh0EGD4OEHgZDHgYbPBQWehgCeRhi8DBE6GEo5GGowUMRoYdhkIdhBg/DhB6GQx6GGzwUFXoYAXkYYfAwQuhhJORhpMFDMaGHUZCHUQYPo4QeRkMeRhs8FBd6GAN5GGPwMEboYSzkYazBQwmhh3GQh3EGD+OEHsZDHsYbPJQUepgAeZhg8DBB6GEi5GGiwUMpoYdJkIdJBg+ThB4mQx4mGzyUFnqYAnmYYvAwRehhKuRhqsFDGaGHaZCHaQYP04QepkMephs8lBV6mAF5mGHwMEPoYSbkYabBQzmhh1mQh1kGD7OEHmZDHmYbPJQXepgDeZhj8DBH6GEu5GGuwUMFoYd5kId5Bg/zhB7mQx7mGzxUFHpYAHlYYPCwQOhhIeRhocFDJaGHRZCHRQYPi4QeFkMeFhs8VBZ6WAJ5WGLwsEToYSnkYanBQxWhh2WQh2UGD8uEHpZDHpYbPFQVelgBeVhh8LBC6GEl5GGlwUM1oYdVkIdVBg+rhB5WQx5WGzxUF3pYA3lYY/CwRuhhLeRhrcFDDaGHdZCHdQYP64Qe1kMe1hs81BR62AB52GDwsEHoYSPkYaPBQy2hh02Qh00GD5uEHjZDHjYbPNQWetgCedhi8LBF6GEr5GGrwUMdoYdtkIdtBg/bhB62Qx62GzzUFXrYAXnYYfCwQ+hhJ+Rhp8FDPaGHXZCHXQYPu4QedkMedhs81Bd62AN52GPwsEfoYS/kYa/BQwOhh32Qh30GD/uEHvZDHvYbPDQUejgAeThg8HBA6OEg5OGgwUMjoYdDkIdDBg+HhB4OQx4OGzw0Fno4Ank4YvBwROjhKOThqMFDE6GHY5CHYwYPx4QejkMejhs8NBV6OAF5OGHwcELo4STk4aTBQzOhh1OQh1MGD6eEHk5DHk4bPDQXejgDeThj8HBG6OEs5OGswUMLoYdzkIdzBg/nhB7OQx7OGzy0FHq4AHm4YPBwQejhIuThosFDK6GHS5CHSwYPl4QeLkMeLhs8tBZ6uAJ5uGLwcEXo4Srk4arBQxuhh2uQh2sGD9eEHq5DHq4bPLQVergBebhh8HBD6OEm5OGmwUM7oYdbkIdbBg+3hB5uQx5uGzy0F3q4A3m4Y/BwR+jhLuThrsFDB6GHe5CHewYP94Qe7kMe7hs8dBR6eAB5eGDw8EDo4SHk4aHBQyehh0eQh0cGD4+EHh5DHh4bPHQWengCeXhi8PBE6OEp5OGpwUMXoYdnkIdnBg/PhB6eQx6eGzx0FXp4AXl4YfDwQujhJeThpcFDN6GHV5CHVwYPr4QeXkMeXhs8dBd6eAN5eGPw8Ebo4S3k4a3BQw+hh3eQh3cGD++EHt5DHt4bPPQUevgAefhg8PBB6OEj5OGjwUMvoYdPkIdPBg+fhB4+Qx4+Gzz0Fnr4Ann4YvDwRejhK+Thq8FDH6GHb5CHbwYP34QevkMevhs89BV6+AF5+GHw8EPo4Sfk4afBQz+hh1+Qh18GD7+EHn5DHn4bPPQXevgDefhj8PBH6OEv5OGvwcMAoYd/QjEe/tOlPfz39v+1FSAU4yFAKN7DQKGHgJCHgAYPAYUeAkEeAhk8DBJ6CAx5CGzwEFjoIQjkIYjBw2Chh6CQh6AGD0GFHoJBHoIZPAwReggOeQhu8BBc6CEE5CGEwcNQoYeQkIeQBg8hhR5CQR5CGTwME3oIDXkIbfAQWughDOQhjMHDcKGHsJCHsAYPYYUewkEewhk8jBB6CA95CG/wEF7o4V/Iw78GDyOFHiJAHiIYPEQQeogIeYho8DBK6CES5CGSwUMkoYfIkIfIBg+jhR6iQB6iGDxEEXqICnmIavAwRughGuQhmsFDNKGH6JCH6AYPY4UeYkAeYhg8xBB6iAl5iGnwME7oIRbkIZbBQyyhh9iQh9gGD+OFHuJAHuIYPMQReogLeYhr8DBB6CEe5CGewUM8oYf4kIf4Bg8ThR4SQB4SGDwkEHpICHlIaPAwSeghEeQhkcFDIqGHxJCHxAYPk4UekkAekhg8JBF6SAp5SGrwMEXoIRnkIZnBQzKhh+SQh+QGD1OFHlJAHlIYPKQQekgJeUhp8DBN6CEV5CGVwUMqoYfUkIfUBg/ThR7SQB7SGDykEXpIC3lIa/AwQ+ghHeQhncFDOqGH9JCH9AYPM4UeMkAeMhg8ZBB6yAh5yGjwMEvoIRPkIZPBQyahh8yQh8wGD7OFHrJAHrIYPGQResgKechq8DBH6CEb5CGbwUM2oYfskIfsBg9zhR5yQB5yGDzkEHrICXnIafAwT+ghF+Qhl8FDLqGH3JCH3AYP84Ue8kAe8hg85BF6yAt5yGvwsEDoIR/kIZ/BQz6hh/yQh/wGDwuFHgpAHgoYPBQQeigIeSho8LBI6KEQ5KGQwUMhoYfCkIfCBg+LhR6KQB6KGDwUEXooCnkoavCwROihGOShmMFDMaGH4pCH4gYPS4UeSkAeShg8lBB6KAl5KGnwsEzooRTkoZTBQymhh9KQh9IGD8uFHspAHsoYPJQReigLeShr8LBC6KEc5KGcwUM5oYfykIfyBg8rhR4qQB4qGDxUEHqoCHmoaPCwSuihEuShksFDJaGHypCHygYPq4UeqkAeqhg8VBF6qAp5qGrwsEbooRrkoZrBQzWhh+qQh+oGD2uFHmpAHmoYPNQQeqgJeahp8LBO6KEW5KGWwUMtoYfakIfaBg/rhR7qQB7qGDzUEXqoC3moa/CwQeihHuShnsFDPaGH+pCH+gYPG4UeGkAeGhg8NBB6aAh5aGjwsEnooRHkoZHBQyOhh8aQh8YGD5uFHppAHpoYPDQRemgKeWhq8LBF6KEZ5KGZwUMzoYfmkIfmBg9bhR5aQB5aGDy0EHpoCXloafCwTeihFeShlcFDK6GH1pCH1gYP24Ue2kAe2hg8tBF6aAt5aGvwsEPooR3koZ3BQzuhh/aQh/YGDzuFHjpAHjoYPHQQeugIeeho8LBL6KET5KGTwUMnoYfOkIfOBg+7hR66QB66GDx0EXroCnnoavCwR+ihG+Shm8FDN6GH7pCH7gYPe4UeekAeehg89BB66Al56GnwsE/ooRfkoZfBQy+hh96Qh94GD/uFHvpAHvoYPPQReugLeehr8HBA6KEf5KGfwUM/oYf+kIf+Bg8HhR4GQB4GGDwMEHoYCHkYaPBwSOhhEORhkMHDIKGHwZCHwQYPh4UehkAehhg8DBF6GAp5GGrwcEToYRjkYZjBwzChh+GQh+EGD0eFHkZAHkYYPIwQehgJeRhp8HBM6GEU5GGUwcMooYfRkIfRBg/HhR7GQB7GGDyMEXoYC3kYa/BwQuhhHORhnMHDOKGH8ZCH8QYPJ4UeJkAeJhg8TBB6mAh5mGjwcEroYRLkYZLBwyShh8mQh8kGD6eFHqZAHqYYPEwRepgKeZhq8HBG6GEa5GGawcM0oYfpkIfpBg9nhR5mQB5mGDzMEHqYCXmYafBwTuhhFuRhlsHDLKGH2ZCH2QYP54Ue5kAe5hg8zBF6mAt5mGvwcEHoYR7kYZ7Bwzyhh/mQh/kGDxeFHhZAHhYYPCwQelgIeVho8HBJ6GER5GGRwcMioYfFkIfFBg+XhR6WQB6WGDwsEXpYCnlYavBwRehhGeRhmcHDMqGH5ZCH5QYPV4UeVkAeVhg8rBB6WAl5WGnwcE3oYRXkYZXBwyqhh9WQh9UGD9eFHtZAHtYYPKwRelgLeVhr8HBD6GEd5GGdwcM6oYf1kIf1Bg83hR42QB42GDxsEHrYCHnYaPBwS+hhE+Rhk8HDJqGHzZCHzQYPt4UetkAethg8bBF62Ap52GrwcEfoYRvkYZvBwzahh+2Qh+0GD3eFHnZAHnYYPOwQetgJedhp8HBP6GEX5GGXwcMuoYfdkIfdBg/3hR72QB72GDzsEXrYC3nYa/DwQOhhH+Rhn8HDPqGH/ZCH/QYPD4UeDkAeDhg8HBB6OAh5OGjw8Ejo4RDk4ZDBwyGhh8OQh8MGD4+FHo5AHo4YPBwRejgKeThq8PBE6OEY5OGYwcMxoYfjkIfjBg9PhR5OQB5OGDycEHo4CXk4afDwTOjhFOThlMHDKaGH05CH0wYPz4UezkAezhg8nBF6OAt5OGvw8ELo4Rzk4ZzBwzmhh/OQh/MGDy+FHi5AHi4YPFwQergIebho8PBK6OES5OGSwcMloYfLkIfLBg+vhR6uQB6uGDxcEXq4Cnm4avDwRujhGuThmsHDNaGH65CH6wYPb4UebkAebhg83BB6uAl5uGnw8E7o4Rbk4ZbBwy2hh9uQh9sGD++FHu5AHu4YPNwRergLebhr8PBB6OEe5OGewcM9oYf7kIf7Bg8fhR4eQB4eGDw8EHp4CHl4aPDwSejhEeThkcHDI6GHx5CHxwYPn4UenkAenhg8PBF6eAp5eGrw8EXo4Rnk4ZnBwzOhh+eQh+cGD1+FHl5AHl4YPLwQengJeXhp8PBN6OEV5OGVwcMroYfXkIfXBg/fhR7eQB7eGDy8EXp4C3l4a/DwQ+jhHeThncHDO6GH95CH9wYPP4UePkAePhg8fBB6+Ah5+Gjw8Evo4RPk4ZPBwyehh8+Qh88GD7+FHr5AHr4YPHwRevgKefhq8PBH6OEb5OGbwcM3oYfvkIfvBg9/hR5+QB5+GDz8EHr4CXn4afDwTx3dTX9BHn4ZPPwSevgNefht8BBA6OEP5OGPwcMfoYe/kIe/Bg8BhR7+Cc14+E+X9vDf2//XVoDQjIcAoXkPgYQeAkIeAho8BBR6CAR5CGTwEFjoITDkIbDBQ2ChhyCQhyAGD0GEHoJCHoIaPAQVeggGeQhm8BBU6CE45CG4wUNwoYcQkIcQBg/BhB5CQh5CGjyEFHoIBXkIZfAQXOghNOQhtMFDaKGHMJCHMAYPIYQewkIewho8hBV6CAd5CGfwEFLoITzkIbzBQ3ihh38hD/8aPIQSeogAeYhg8BBB6CEi5CGiwUNooYdIkIdIBg+RhB4iQx4iGzyEEXqIAnmIYvAQReghKuQhqsFDWKGHaJCHaAYP0YQeokMeohs8hBN6iAF5iGHwEEPoISbkIabBQ3ihh1iQh1gGD7GEHmJDHmIbPPwr9BAH8hDH4CGO0ENcyENcg4cIQg/xIA/xDB7iCT3EhzzEN3iIKPSQAPKQwOAhgdBDQshDQoOHSEIPiSAPiQweEgk9JIY8JDZ4iCz0kATykMTgIYnQQ1LIQ1KDhyhCD8kgD8kMHpIJPSSHPCQ3eIgq9JAC8pDC4CGF0ENKyENKg4doQg+pIA+pDB5SCT2khjykNniILvSQBvKQxuAhjdBDWshDWoOHGEIP6SAP6Qwe0gk9pIc8pDd4iCn0kAHykMHgIYPQQ0bIQ0aDh1hCD5kgD5kMHjIJPWSGPGQ2eIgt9JAF8pDF4CGL0ENWyENWg4c4Qg/ZIA/ZDB6yCT1khzxkN3iIK/SQA/KQw+Ahh9BDTshDToOHeEIPuSAPuQwecgk95IY85DZ4iC/0kAfykMfgIY/QQ17IQ16DhwRCD/kgD/kMHvIJPeSHPOQ3eEgo9FAA8lDA4KGA0ENByENBg4dEQg+FIA+FDB4KCT0UhjwUNnhILPRQBPJQxOChiNBDUchDUYOHJEIPxSAPxQweigk9FIc8FDd4SCr0UALyUMLgoYTQQ0nIQ0mDh2RCD6UgD6UMHkoJPZSGPJQ2eEgu9FAG8lDG4KGM0ENZyENZg4cUQg/lIA/lDB7KCT2UhzyUN3hIKfRQAfJQweChgtBDRchDRYOHVEIPlSAPlQweKgk9VIY8VDZ4SC30UAXyUMXgoYrQQ1XIQ1WDhzRCD9UgD9UMHqoJPVSHPFQ3eEgr9FAD8lDD4KGG0ENNyENNg4d0Qg+1IA+1DB5qCT3UhjzUNnhIL/RQB/JQx+ChjtBDXchDXYOHDEIP9SAP9Qwe6gk91Ic81Dd4yCj00ADy0MDgoYHQQ0PIQ0ODh0xCD40gD40MHhoJPTSGPDQ2eMgs9NAE8tDE4KGJ0ENTyENTg4csQg/NIA/NDB6aCT00hzw0N3jIKvTQAvLQwuChhdBDS8hDS4OHbEIPrSAPrQweWgk9tIY8tDZ4yC700Aby0MbgoY3QQ1vIQ1uDhxxCD+0gD+0MHtoJPbSHPLQ3eMgp9NAB8tDB4KGD0ENHyENHg4dcQg+dIA+dDB46CT10hjx0NnjILfTQBfLQxeChi9BDV8hDV4OHPEIP3SAP3Qweugk9dIc8dDd4yCv00APy0MPgoYfQQ0/IQ0+Dh3xCD70gD70MHnoJPfSGPPQ2eMgv9NAH8tDH4KGP0ENfyENfg4cCQg/9IA/9DB76CT30hzz0N3goKPQwAPIwwOBhgNDDQMjDQIOHQkIPgyAPgwweBgk9DIY8DDZ4KCz0MATyMMTgYYjQw1DIw1CDhyJCD8MgD8MMHoYJPQyHPAw3eCgq9DAC8jDC4GGE0MNIyMNIg4diQg+jIA+jDB5GCT2MhjyMNngoLvQwBvIwxuBhjNDDWMjDWIOHEkIP4yAP4wwexgk9jIc8jDd4KCn0MAHyMMHgYYLQw0TIw0SDh1JCD5MgD5MMHiYJPUyGPEw2eCgt9DAF8jDF4GGK0MNUyMNUg4cyQg/TIA/TDB6mCT1MhzxMN3goK/QwA/Iww+BhhtDDTMjDTIOHckIPsyAPswweZgk9zIY8zDZ4KC/0MAfyMMfgYY7Qw1zIw1yDhwpCD/MgD/MMHuYJPcyHPMw3eKgo9LAA8rDA4GGB0MNCyMNCg4dKQg+LIA+LDB4WCT0shjwsNnioLPSwBPKwxOBhidDDUsjDUoOHKkIPyyAPywwelgk9LIc8LDd4qCr0sALysMLgYYXQw0rIw0qDh2pCD6sgD6sMHlYJPayGPKw2eKgu9LAG8rDG4GGN0MNayMNag4caQg/rIA/rDB7WCT2shzysN3ioKfSwAfKwweBhg9DDRsjDRoOHWkIPmyAPmwweNgk9bIY8bDZ4qC30sAXysMXgYYvQw1bIw1aDhzpCD9sgD9sMHrYJPWyHPGw3eKgr9LAD8rDD4GGH0MNOyMNOg4d6Qg+7IA+7DB52CT3shjzsNnioL/SwB/Kwx+Bhj9DDXsjDXoOHBkIP+yAP+wwe9gk97Ic87Dd4aCj0cADycMDg4YDQw0HIw0GDh0ZCD4cgD4cMHg4JPRyGPBw2eGgs9HAE8nDE4OGI0MNRyMNRg4cmQg/HIA/HDB6OCT0chzwcN3hoKvRwAvJwwuDhhNDDScjDSYOHZkIPpyAPpwweTgk9nIY8nDZ4aC70cAbycMbg4YzQw1nIw1mDhxZCD+cgD+cMHs4JPZyHPJw3eGgp9HAB8nDB4OGC0MNFyMNFg4dWQg+XIA+XDB4uCT1chjxcNnhoLfRwBfJwxeDhitDDVcjDVYOHNkIP1yAP1wwergk9XIc8XDd4aCv0cAPycMPg4YbQw03Iw02Dh3ZCD7cgD7cMHm4JPdyGPNw2eGgv9HAH8nDH4OGO0MNdyMNdg4cOQg/3IA/3DB7uCT3chzzcN3joKPTwAPLwwODhgdDDQ8jDQ4OHTkIPjyAPjwweHgk9PIY8PDZ46Cz08ATy8MTg4YnQw1PIw1ODhy5CD88gD88MHp4JPTyHPDw3eOgq9PAC8vDC4OGF0MNLyMNLg4duQg+vIA+vDB5eCT28hjy8NnjoLvTwBvLwxuDhjdDDW8jDW4OHHkIP7yAP7wwe3gk9vIc8vDd46Cn08AHy8MHg4YPQw0fIw0eDh15CD58gD58MHj4JPXyGPHw2eOgt9PAF8vDF4OGL0MNXyMNXg4c+Qg/fIA/fDB6+CT18hzx8N3joK/TwA/Lww+Dhh9DDT8jDT4OHfkIPvyAPvwwefgk9/IY8/DZ46C/08Afy8Mfg4Y/Qw1/Iw1+DhwFCD/+EYTz8p0t7+O/t/2srQBjGQ4AwvIeBQg8BIQ8BDR4CCj0EgjwEMngYJPQQGPIQ2OAhsNBDEMhDEIOHwUIPQSEPQQ0eggo9BIM8BDN4GCL0EBzyENzgIbjQQwjIQwiDh6FCDyEhDyENHkIKPYSCPIQyeBgm9BAa8hDa4CG00EMYyEMYg4fhQg9hIQ9hDR7CCj2EgzyEM3gYIfQQHvIQ3uAhvNDDv5CHfw0eRgo9RIA8RDB4iCD0EBHyENHgYZTQQyTIQySDh0hCD5EhD5ENHkYLPUSBPEQxeIgi9BAV8hDV4GGM0EM0yEM0g4doQg/RIQ/RDR7GCj3EgDzEMHiIIfQQE/IQ0+BhnNBDLMhDLIOHWEIPsSEPsQ0exgs9xIE8xDF4iCP0EBfyENfgYYLQQzzIQzyDh3hCD/EhD/ENHiYKPSSAPCQweEgg9JAQ8pDQ4GGS0EMiyEMig4dEQg+JIQ+JDR4mCz0kgTwkMXhIIvSQFPKQ1OBhitBDMshDMoOHZEIPySEPyQ0epgo9pIA8pDB4SCH0kBLykNLgYZrQQyrIQyqDh1RCD6khD6kNHqYLPaSBPKQxeEgj9JAW8pDW4GGG0EM6yEM6g4d0Qg/pIQ/pDR5mCj1kgDxkMHjIIPSQEfKQ0eBhltBDJshDJoOHTEIPmSEPmQ0eZgs9ZIE8ZDF4yCL0kBXykNXgYY7QQzbIQzaDh2xCD9khD9kNHuYKPeSAPOQweMgh9JAT8pDT4GGe0EMuyEMug4dcQg+5IQ+5DR7mCz3kgTzkMXjII/SQF/KQ1+BhgdBDPshDPoOHfEIP+SEP+Q0eFgo9FIA8FDB4KCD0UBDyUNDgYZHQQyHIQyGDh0JCD4UhD4UNHhYLPRSBPBQxeCgi9FAU8lDU4GGJ0EMxyEMxg4diQg/FIQ/FDR6WCj2UgDyUMHgoIfRQEvJQ0uBhmdBDKchDKYOHUkIPpSEPpQ0elgs9lIE8lDF4KCP0UBbyUNbgYYXQQznIQzmDh3JCD+UhD+UNHlYKPVSAPFQweKgg9FAR8lDR4GGV0EMlyEMlg4dKQg+VIQ+VDR5WCz1UgTxUMXioIvRQFfJQ1eBhjdBDNchDNYOHakIP1SEP1Q0e1go91IA81DB4qCH0UBPyUNPgYZ3QQy3IQy2Dh1pCD7UhD7UNHtYLPdSBPNQxeKgj9FAX8lDX4GGD0EM9yEM9g4d6Qg/1IQ/1DR42Cj00gDw0MHhoIPTQEPLQ0OBhk9BDI8hDI4OHRkIPjSEPjQ0eNgs9NIE8NDF4aCL00BTy0NTgYYvQQzPIQzODh2ZCD80hD80NHrYKPbSAPLQweGgh9NAS8tDS4GGb0EMryEMrg4dWQg+tIQ+tDR62Cz20gTy0MXhoI/TQFvLQ1uBhh9BDO8hDO4OHdkIP7SEP7Q0edgo9dIA8dDB46CD00BHy0NHgYZfQQyfIQyeDh05CD50hD50NHnYLPXSBPHQxeOgi9NAV8tDV4GGP0EM3yEM3g4duQg/dIQ/dDR72Cj30gDz0MHjoIfTQE/LQ0+Bhn9BDL8hDL4OHXkIPvSEPvQ0e9gs99IE89DF46CP00Bfy0Nfg4YDQQz/IQz+Dh35CD/0hD/0NHg4KPQyAPAwweBgg9DAQ8jDQ4OGQ0MMgyMMgg4dBQg+DIQ+DDR4OCz0MgTwMMXgYIvQwFPIw1ODhiNDDMMjDMIOHYUIPwyEPww0ejgo9jIA8jDB4GCH0MBLyMNLg4ZjQwyjIwyiDh1FCD6MhD6MNHo4LPYyBPIwxeBgj9DAW8jDW4OGE0MM4yMM4g4dxQg/jIQ/jDR5OCj1MgDxMMHiYIPQwEfIw0eDhlNDDJMjDJIOHSUIPkyEPkw0eTgs9TIE8TDF4mCL0MBXyMNXg4YzQwzTIwzSDh2lCD9MhD9MNHs4KPcyAPMwweJgh9DAT8jDT4OGc0MMsyMMsg4dZQg+zIQ+zDR7OCz3MgTzMMXiYI/QwF/Iw1+DhgtDDPMjDPIOHeUIP8yEP8w0eLgo9LIA8LDB4WCD0sBDysNDg4ZLQwyLIwyKDh0VCD4shD4sNHi4LPSyBPCwxeFgi9LAU8rDU4OGK0MMyyMMyg4dlQg/LIQ/LDR6uCj2sgDysMHhYIfSwEvKw0uDhmtDDKsjDKoOHVUIPqyEPqw0ergs9rIE8rDF4WCP0sBbysNbg4YbQwzrIwzqDh3VCD+shD+sNHm4KPWyAPGwweNgg9LAR8rDR4OGW0MMmyMMmg4dNQg+bIQ+bDR5uCz1sgTxsMXjYIvSwFfKw1eDhjtDDNsjDNoOHbUIP2yEP2w0e7go97IA87DB42CH0sBPysNPg4Z7Qwy7Iwy6Dh11CD7shD7sNHu4LPeyBPOwxeNgj9LAX8rDX4OGB0MM+yMM+g4d9Qg/7IQ/7DR4eCj0cgDwcMHg4IPRwEPJw0ODhkdDDIcjDIYOHQ0IPhyEPhw0eHgs9HIE8HDF4OCL0cBTycNTg4YnQwzHIwzGDh2NCD8chD8cNHp4KPZyAPJwweDgh9HAS8nDS4OGZ0MMpyMMpg4dTQg+nIQ+nDR6eCz2cgTycMXg4I/RwFvJw1uDhhdDDOcjDOYOHc0IP5yEP5w0eXgo9XIA8XDB4uCD0cBHycNHg4ZXQwyXIwyWDh0tCD5chD5cNHl4LPVyBPFwxeLgi9HAV8nDV4OGN0MM1yMM1g4drQg/XIQ/XDR7eCj3cgDzcMHi4IfRwE/Jw0+DhndDDLcjDLYOHW0IPtyEPtw0e3gs93IE83DF4uCP0cBfycNfg4YPQwz3Iwz2Dh3tCD/chD/cNHj4KPTyAPDwweHgg9PAQ8vDQ4OGT0MMjyMMjg4dHQg+PIQ+PDR4+Cz08gTw8MXh4IvTwFPLw1ODhi9DDM8jDM4OHZ0IPzyEPzw0evgo9vIA8vDB4eCH08BLy8NLg4ZvQwyvIwyuDh1dCD68hD68NHr4LPbyBPLwxeHgj9PAW8vDW4OGH0MM7yMM7g4d3Qg/vIQ/vDR5+Cj18gDx8MHj4IPTwEfLw0eDhl9DDJ8jDJ4OHT0IPnyEPnw0efgs9fIE8fDF4+CL08BXy8NXg4Y/QwzfIwzeDh29CD98hD98NHv4KPfyAPPwwePgh9PAT8vDT4OGfurqb/oI8/DJ4+CX08Bvy8NvgIYDQwx/Iwx+Dhz9CD38hD38NHgIKPfwTlvHwny7t4b+3/6+tAGEZDwHC8h4CCT0EhDwENHgIKPQQCPIQyOAhsNBDYMhDYIOHwEIPQSAPQQweggg9BIU8BDV4CCr0EAzyEMzgIajQQ3DIQ3CDh+BCDyEgDyEMHoIJPYSEPIQ0eAgp9BAK8hDK4CG40ENoyENog4fQQg9hIA9hDB5CCD2EhTyENXgIK/QQDvIQzuAhpNBDeMhDeIOH8EIP/0Ie/jV4CCX0EAHyEMHgIYLQQ0TIQ0SDh9BCD5EgD5EMHiIJPUSGPEQ2eAgj9BAF8hDF4CGK0ENUyENUg4ewQg/RIA/RDB6iCT1EhzxEN3gIJ/QQA/IQw+AhhtBDTMhDTIOH8EIPsSAPsQweYgk9xIY8xDZ4+FfoIQ7kIY7BQxyhh7iQh7gGDxGEHuJBHuIZPMQTeogPeYhv8BBR6CEB5CGBwUMCoYeEkIeEBg+RhB4SQR4SGTwkEnpIDHlIbPAQWeghCeQhicFDEqGHpJCHpAYPUYQekkEekhk8JBN6SA55SG7wEFXoIQXkIYXBQwqhh5SQh5QGD9GEHlJBHlIZPKQSekgNeUht8BBd6CEN5CGNwUMaoYe0kIe0Bg8xhB7SQR7SGTykE3pID3lIb/AQU+ghA+Qhg8FDBqGHjJCHjAYPsYQeMkEeMhk8ZBJ6yAx5yGzwEFvoIQvkIYvBQxahh6yQh6wGD3GEHrJBHrIZPGQTesgOechu8BBX6CEH5CGHwUMOoYeckIecBg/xhB5yQR5yGTzkEnrIDXnIbfAQX+ghD+Qhj8FDHqGHvJCHvAYPCYQe8kEe8hk85BN6yA95yG/wkFDooQDkoYDBQwGhh4KQh4IGD4mEHgpBHgoZPBQSeigMeShs8JBY6KEI5KGIwUMRoYeikIeiBg9JhB6KQR6KGTwUE3ooDnkobvCQVOihBOShhMFDCaGHkpCHkgYPyYQeSkEeShk8lBJ6KA15KG3wkFzooQzkoYzBQxmhh7KQh7IGDymEHspBHsoZPJQTeigPeShv8JBS6KEC5KGCwUMFoYeKkIeKBg+phB4qQR4qGTxUEnqoDHmobPCQWuihCuShisFDFaGHqpCHqgYPaYQeqkEeqhk8VBN6qA55qG7wkFbooQbkoYbBQw2hh5qQh5oGD+mEHmpBHmoZPNQSeqgNeaht8JBe6KEO5KGOwUMdoYe6kIe6Bg8ZhB7qQR7qGTzUE3qoD3mob/CQUeihAeShgcFDA6GHhpCHhgYPmYQeGkEeGhk8NBJ6aAx5aGzwkFnooQnkoYnBQxOhh6aQh6YGD1mEHppBHpoZPDQTemgOeWhu8JBV6KEF5KGFwUMLoYeWkIeWBg/ZhB5aQR5aGTy0EnpoDXlobfCQXeihDeShjcFDG6GHtpCHtgYPOYQe2kEe2hk8tBN6aA95aG/wkFPooQPkoYPBQwehh46Qh44GD7mEHjpBHjoZPHQSeugMeehs8JBb6KEL5KGLwUMXoYeukIeuBg95hB66QR66GTx0E3roDnnobvCQV+ihB+Shh8FDD6GHnpCHngYP+YQeekEeehk89BJ66A156G3wkF/ooQ/koY/BQx+hh76Qh74GDwWEHvpBHvoZPPQTeugPeehv8FBQ6GEA5GGAwcMAoYeBkIeBBg+FhB4GQR4GGTwMEnoYDHkYbPBQWOhhCORhiMHDEKGHoZCHoQYPRYQehkEehhk8DBN6GA55GG7wUFToYQTkYYTBwwihh5GQh5EGD8WEHkZBHkYZPIwSehgNeRht8FBc6GEM5GGMwcMYoYexkIexBg8lhB7GQR7GGTyME3oYD3kYb/BQUuhhAuRhgsHDBKGHiZCHiQYPpYQeJkEeJhk8TBJ6mAx5mGzwUFroYQrkYYrBwxShh6mQh6kGD2WEHqZBHqYZPEwTepgOeZhu8FBW6GEG5GGGwcMMoYeZkIeZBg/lhB5mQR5mGTzMEnqYDXmYbfBQXuhhDuRhjsHDHKGHuZCHuQYPFYQe5kEe5hk8zBN6mA95mG/wUFHoYQHkYYHBwwKhh4WQh4UGD5WEHhZBHhYZPCwSelgMeVhs8FBZ6GEJ5GGJwcMSoYelkIelBg9VhB6WQR6WGTwsE3pYDnlYbvBQVehhBeRhhcHDCqGHlZCHlQYP1YQeVkEeVhk8rBJ6WA15WG3wUF3oYQ3kYY3Bwxqhh7WQh7UGDzWEHtZBHtYZPKwTelgPeVhv8FBT6GED5GGDwcMGoYeNkIeNBg+1hB42QR42GTxsEnrYDHnYbPBQW+hhC+Rhi8HDFqGHrZCHrQYPdYQetkEethk8bBN62A552G7wUFfoYQfkYYfBww6hh52Qh50GD/WEHnZBHnYZPOwSetgNedht8FBf6GEP5GGPwcMeoYe9kIe9Bg8NhB72QR72GTzsE3rYD3nYb/DQUOjhAOThgMHDAaGHg5CHgwYPjYQeDkEeDhk8HBJ6OAx5OGzw0Fjo4Qjk4YjBwxGhh6OQh6MGD02EHo5BHo4ZPBwTejgOeThu8NBU6OEE5OGEwcMJoYeTkIeTBg/NhB5OQR5OGTycEno4DXk4bfDQXOjhDOThjMHDGaGHs5CHswYPLYQezkEezhk8nBN6OA95OG/w0FLo4QLk4YLBwwWhh4uQh4sGD62EHi5BHi4ZPFwSergMebhs8NBa6OEK5OGKwcMVoYerkIerBg9thB6uQR6uGTxcE3q4Dnm4bvDQVujhBuThhsHDDaGHm5CHmwYP7YQebkEebhk83BJ6uA15uG3w0F7o4Q7k4Y7Bwx2hh7uQh7sGDx2EHu5BHu4ZPNwTergPebhv8NBR6OEB5OGBwcMDoYeHkIeHBg+dhB4eQR4eGTw8Enp4DHl4bPDQWejhCeThicHDE6GHp5CHpwYPXYQenkEenhk8PBN6eA55eG7w0FXo4QXk4YXBwwuhh5eQh5cGD92EHl5BHl4ZPLwSengNeXht8NBd6OEN5OGNwcMboYe3kIe3Bg89hB7eQR7eGTy8E3p4D3l4b/DQU+jhA+Thg8HDB6GHj5CHjwYPvYQePkEePhk8fBJ6+Ax5+Gzw0Fvo4Qvk4YvBwxehh6+Qh68GD32EHr5BHr4ZPHwTevgOefhu8NBX6OEH5OGHwcMPoYefkIefBg/9hB5+QR5+GTz8Enr4DXn4bfDQX+jhD+Thj8HDH6GHv5CHvwYPA4Qe/gnHePhPl/bw39v/11aAcIyHAOF4DwOFHgJCHgIaPAQUeggEeQhk8DBI6CEw5CGwwUNgoYcgkIcgBg+DhR6CQh6CGjwEFXoIBnkIZvAwROghOOQhuMFDcKGHEJCHEAYPQ4UeQkIeQho8hBR6CAV5CGXwMEzoITTkIbTBQ2ihhzCQhzAGD8OFHsJCHsIaPIQVeggHeQhn8DBC6CE85CG8wUN4oYd/IQ//GjyMFHqIAHmIYPAQQeghIuQhosHDKKGHSJCHSAYPkYQeIkMeIhs8jBZ6iAJ5iGLwEEXoISrkIarBwxihh2iQh2gGD9GEHqJDHqIbPIwVeogBeYhh8BBD6CEm5CGmwcM4oYdYkIdYBg+xhB5iQx5iGzyMF3qIA3mIY/AQR+ghLuQhrsHDBKGHeJCHeAYP8YQe4kMe4hs8TBR6SAB5SGDwkEDoISHkIaHBwyShh0SQh0QGD4mEHhJDHhIbPEwWekgCeUhi8JBE6CEp5CGpwcMUoYdkkIdkBg/JhB6SQx6SGzxMFXpIAXlIYfCQQughJeQhpcHDNKGHVJCHVAYPqYQeUkMeUhs8TBd6SAN5SGPwkEboIS3kIa3Bwwyhh3SQh3QGD+mEHtJDHtIbPMwUesgAechg8JBB6CEj5CGjwcMsoYdMkIdMBg+ZhB4yQx4yGzzMFnrIAnnIYvCQReghK+Qhq8HDHKGHbJCHbAYP2YQeskMeshs8zBV6yAF5yGHwkEPoISfkIafBwzyhh1yQh1wGD7mEHnJDHnIbPMwXesgDechj8JBH6CEv5CGvwcMCoYd8kId8Bg/5hB7yQx7yGzwsFHooAHkoYPBQQOihIOShoMHDIqGHQpCHQgYPhYQeCkMeChs8LBZ6KAJ5KGLwUETooSjkoajBwxKhh2KQh2IGD8WEHopDHoobPCwVeigBeShh8FBC6KEk5KGkwcMyoYdSkIdSBg+lhB5KQx5KGzwsF3ooA3koY/BQRuihLOShrMHDCqGHcpCHcgYP5YQeykMeyhs8rBR6qAB5qGDwUEHooSLkoaLBwyqhh0qQh0oGD5WEHipDHiobPKwWeqgCeahi8FBF6KEq5KGqwcMaoYdqkIdqBg/VhB6qQx6qGzysFXqoAXmoYfBQQ+ihJuShpsHDOqGHWpCHWgYPtYQeakMeahs8rBd6qAN5qGPwUEfooS7koa7Bwwahh3qQh3oGD/WEHupDHuobPGwUemgAeWhg8NBA6KEh5KGhwcMmoYdGkIdGBg+NhB4aQx4aGzxsFnpoAnloYvDQROihKeShqcHDFqGHZpCHZgYPzYQemkMemhs8bBV6aAF5aGHw0ELooSXkoaXBwzahh1aQh1YGD62EHlpDHlobPGwXemgDeWhj8NBG6KEt5KGtwcMOoYd2kId2Bg/thB7aQx7aGzzsFHroAHnoYPDQQeihI+Sho8HDLqGHTpCHTgYPnYQeOkMeOhs87BZ66AJ56GLw0EXooSvkoavBwx6hh26Qh24GD92EHrpDHrobPOwVeugBeehh8NBD6KEn5KGnwcM+oYdekIdeBg+9hB56Qx56GzzsF3roA3noY/DQR+ihL+Shr8HDAaGHfpCHfgYP/YQe+kMe+hs8HBR6GAB5GGDwMEDoYSDkYaDBwyGhh0GQh0EGD4OEHgZDHgYbPBwWehgCeRhi8DBE6GEo5GGowcMRoYdhkIdhBg/DhB6GQx6GGzwcFXoYAXkYYfAwQuhhJORhpMHDMaGHUZCHUQYPo4QeRkMeRhs8HBd6GAN5GGPwMEboYSzkYazBwwmhh3GQh3EGD+OEHsZDHsYbPJwUepgAeZhg8DBB6GEi5GGiwcMpoYdJkIdJBg+ThB4mQx4mGzycFnqYAnmYYvAwRehhKuRhqsHDGaGHaZCHaQYP04QepkMephs8nBV6mAF5mGHwMEPoYSbkYabBwzmhh1mQh1kGD7OEHmZDHmYbPJwXepgDeZhj8DBH6GEu5GGuwcMFoYd5kId5Bg/zhB7mQx7mGzxcFHpYAHlYYPCwQOhhIeRhocHDJaGHRZCHRQYPi4QeFkMeFhs8XBZ6WAJ5WGLwsEToYSnkYanBwxWhh2WQh2UGD8uEHpZDHpYbPFwVelgBeVhh8LBC6GEl5GGlwcM1oYdVkIdVBg+rhB5WQx5WGzxcF3pYA3lYY/CwRuhhLeRhrcHDDaGHdZCHdQYP64Qe1kMe1hs83BR62AB52GDwsEHoYSPkYaPBwy2hh02Qh00GD5uEHjZDHjYbPNwWetgCedhi8LBF6GEr5GGrwcMdoYdtkIdtBg/bhB62Qx62GzzcFXrYAXnYYfCwQ+hhJ+Rhp8HDPaGHXZCHXQYPu4QedkMedhs83Bd62AN52GPwsEfoYS/kYa/BwwOhh32Qh30GD/uEHvZDHvYbPDwUejgAeThg8HBA6OEg5OGgwcMjoYdDkIdDBg+HhB4OQx4OGzw8Fno4Ank4YvBwROjhKOThqMHDE6GHY5CHYwYPx4QejkMejhs8PBV6OAF5OGHwcELo4STk4aTBwzOhh1OQh1MGD6eEHk5DHk4bPDwXejgDeThj8HBG6OEs5OGswcMLoYdzkIdzBg/nhB7OQx7OGzy8FHq4AHm4YPBwQejhIuThosHDK6GHS5CHSwYPl4QeLkMeLhs8vBZ6uAJ5uGLwcEXo4Srk4arBwxuhh2uQh2sGD9eEHq5DHq4bPLwVergBebhh8HBD6OEm5OGmwcM7oYdbkIf/wys9BeGBrdG67ti2bdu2bf2xbdu2bds2O51Op9Pp2LadU+vsfbGq9uUa75h382bUV2891w0ergs93IA83DB4eCP0cBPycNPg4abQwy3Iwy2Dh7dCD7chD7cNHm4LPdyBPNwxeHgn9HAX8nDX4OGu0MM9yMM9g4f3Qg/3IQ/3DR7uCz08gDw8MHj4IPTwEPLw0ODhodDDI8jDI4OHj0IPjyEPjw0eHgs9PIE8PDF4+CT08BTy8NTg4anQwzPIwzODh89CD88hD88NHp4LPbyAPLwwePgi9PAS8vDS4OGl0MMryMMrg4evQg+vIQ+vDR5eCz28gTy8MXj4JvTwFvLw1uDhrdDDO8jDO4OH70IP7yEP7w0e3gs9fIA8fDB4+CH08BHy8NHg4aPQwyfIwyeDh59CD58hD58NHj4LPXyBPHwxePgl9PAV8vDV4OGr0MM3yMM3g4ffArqm3yEP3w0evgs9/IA8/DB4CBLQNf0Jefhp8PBT6OEX5OGXwUPQgK7pb5EZD//ZpT389+3/61aQyIyHIJF5D8ECuqZBIQ9BDR6CCj0EgzwEM3gIHtA1DQ55CG7wEFzoIQTkIYTBQ4iArmlIyENIg4eQQg+hIA+hDB5CBnRNQ0MeQhs8hBZ6CAN5CGPwECqgaxoW8hDW4CGs0EM4yEM4g4fQAV3T8JCH8AYP4YUeIkAeIhg8hAnomkaEPEQ0eIgo9BAJ8hDJ4CFsQNc0MuQhssFDZKGHKJCHKAYP4QK6plEhD1ENHqIKPUSDPEQzeAgf0DWNDnmIbvAQXeghBuQhhsFDhICuaUzIQ0yDh5hCD7EgD7EMHiIGdE1jQx5iGzzEFnqIA3mIY/AQKaBrGhfyENfgIa7QQzzIQzyDh8gBXdP4kIf4Bg/xhR4SQB4SGDxECeiaJoQ8JDR4SCj0kAjykMjgIWpA1zQx5CGxwUNioYckkIckBg/RArqmSSEPSQ0ekgo9JIM8JDN4iB7QNU0OeUhu8JBc6CEF5CGFwUOMgK5pSshDSoOHlEIPqSAPqQweYgZ0TVNDHlIbPKQWekgDeUhj8BAroGuaFvKQ1uAhrdBDOshDOoOH2AFd0/SQh/QGD+mFHjJAHjIYPMQJ6JpmhDxkNHjIKPSQCfKQyeAhbkDXNDPkIbPBQ2ahhyyQhywGD/ECuqZZIQ9ZDR6yCj1kgzxkM3iIH9A1zQ55yG7wkF3oIQfkIYfBQ4KArmlOyENOg4ecQg+5IA+5DB4SBnRNc0Mechs85BZ6yAN5yGPwkCiga5oX8pDX4CGv0EM+yEM+g4fEAV3T/JCH/AYP+YUeCkAeChg8JAnomhaEPBQ0eCgo9FAI8lDI4CFpQNe0MOShsMFDYaGHIpCHIgYPyQK6pkUhD0UNHooKPRSDPBQzeEge0DUtDnkobvBQXOihBOShhMFDioCuaUnIQ0mDh5JCD6UgD6UMHlIGdE1LQx5KGzyUFnooA3koY/CQKqBrWhbyUNbgoazQQznIQzmDh9QBXdPykIfyBg/lhR4qQB4qGDykCeiaVoQ8VDR4qCj0UAnyUMngIW1A17Qy5KGywUNloYcqkIcqBg/pArqmVSEPVQ0eqgo9VIM8VDN4SB/QNa0Oeahu8FBd6KEG5KGGwUOGgK5pTchDTYOHmkIPtSAPtQweMgZ0TWtDHmobPNQWeqgDeahj8JApoGtaF/JQ1+ChrtBDPchDPYOHzAFd0/qQh/oGD/WFHhpAHhoYPGQJ6Jo2hDw0NHhoKPTQCPLQyOAha0DXNAB5CBg8BIQeGkMeGhs8ZAvomjaBPDQxeGgi9NAU8tDU4CF7QNe0GeShmcFDM6GH5pCH5gYPOQK6pi0gDy0MHloIPbSEPLQ0eMgZ0DVtBXloZfDQSuihNeShtcFDroCuaRvIQxuDhzZCD20hD20NHnIHdE3bQR7aGTy0E3poD3lob/CQJ6Br2gHy0MHgoYPQQ0fIQ0eDh7wBXdNOkIdOBg+dhB46Qx46GzzkC+iadoE8dDF46CL00BXy0NXgIX9A17Qb5KGbwUM3oYfukIfuBg8FArqmPSAPPQweegg99IQ89DR4KBjQNe0Feehl8NBL6KE35KG3wUOhgK5pH8hDH4OHPkIPfSEPfQ0eCgd0TftBHvoZPPQTeugPeehv8FAkoGs6APIwwOBhgNDDQMjDQIOHogFd00GQh0EGD4OEHgZDHgYbPBQL6JoOgTwMMXgYIvQwFPIw1OCheEDXdBjkYZjBwzChh+GQh+EGDyUCuqYjIA8jDB5GCD2MhDyMNHgoGdA1HQV5GGXwMEroYTTkYbTBQ6mArukYyMMYg4cxQg9jIQ9jDR5KB3RNx0Eexhk8jBN6GA95GG/wUCagazoB8jDB4GGC0MNEyMNEg4eyAV3TSZCHSQYPk4QeJkMeJhs8lAvomk6BPEwxeJgi9DAV8jDV4KF8QNd0GuRhmsHDNKGH6ZCH6QYPFQK6pjMgDzMMHmYIPcyEPMw0eKgY0DWdBXmYZfAwS+hhNuRhtsFDpYCu6RzIwxyDhzlCD3MhD3MNHioHdE3nQR7mGTzME3qYD3mYb/BQJaBrugDysMDgYYHQw0LIw0KDh6oBXdNFkIdFBg+LhB4WQx4WGzxUC+iaLoE8LDF4WCL0sBTysNTgoXpA13QZ5GGZwcMyoYflkIflBg81ArqmKyAPKwweVgg9rIQ8rDR4qBnQNV0FeVhl8LBK6GE15GG1wUOtgK7pGsjDGoOHNUIPayEPaw0eagd0TddBHtYZPKwTelgPeVhv8FAnoGu6AfKwweBhg9DDRsjDRoOHugFd002Qh00GD5uEHjZDHjYbPNQL6JpugTxsMXjYIvSwFfKw1eChfkDXdBvkYZvBwzahh+2Qh+0GDw0CuqY7IA87DB52CD3shDzsNHhoGNA13QV52GXwsEvoYTfkYbfBQ6OArukeyMMeg4c9Qg97IQ97DR4CAV3TfZCHfQYP+4Qe9kMe9hs8NA7omh6APBwweDgg9HAQ8nDQ4KFJQNf0EOThkMHDIaGHw5CHwwYPTQO6pkcgD0cMHo4IPRyFPBw1eGgW0DU9Bnk4ZvBwTOjhOOThuMFD84Cu6QnIwwmDhxNCDychDycNHloEdE1PQR5OGTycEno4DXk4bfDQMqBregbycMbg4YzQw1nIw1mDh1YBXdNzkIdzBg/nhB5+hzz8bvDQOqBreh7ycN7g4bzQwx+Qhz8MHtoEdE0vQB4uGDxcEHr4E/Lwp8FD24Cu6UXIw0WDh4tCD39BHv4yeGgX0DW9BHm4ZPBwSejhb8jD3wYP7QO6ppchD5cNHi4LPfwDefjH4KFDQNf0CuThisHDFaGHfyEP/xo8dAzoml6FPFw1eLgq9HAN8nDN4KFTQNf0OuThusHDdaGHG5CHGwYPnQO6pjchDzcNHm4KPdyCPNwyeOgS0DW9DXm4bfBwW+jhDuThjsFD14Cu6V3Iw12Dh7tCD/cgD/cMHroFdE3vQx7uGzzcF3p4AHl4YPDQPaBr+hDy8NDg4aHQwyPIwyODhx4BXdPHkIfHBg+PhR6eQB6eGDz0DOiaPoU8PDV4eCr08Azy8MzgoVdA1/Q55OG5wcNzoYcXkIcXBg+9A7qmLyEPLw0eXgo9vII8vDJ46BPQNX0NeXht8PBa6OEN5OGNwUPfgK7pW8jDW4OHt0IP7yAP7wwe+gV0Td9DHt4bPLwXevgAefhg8NA/oGv6EfLw0eDho9DDJ8jDJ4OHAQFd08+Qh88GD5+FHr5AHr4YPAwM6Jp+hTx8NXj4KvTwDfLwzeBhUEDX9Dvk4bvBw3ehhx+Qhx8GD4MDuqY/IQ8/DR5+Cj38gjz8MngYEtA1/S0K4+E/u7SH/779f90KEoXxECQK72FoQNc0KOQhqMFDUKGHYJCHYAYPwwK6psEhD8ENHoILPYSAPIQweBge0DUNCXkIafAQUughFOQhlMHDiICuaWjIQ2iDh9BCD2EgD2EMHkYGdE3DQh7CGjyEFXoIB3kIZ/AwKqBrGh7yEN7gIbzQQwTIQwSDh9EBXdOIkIeIBg8RhR4iQR4iGTyMCeiaRoY8RDZ4iCz0EAXyEMXgYWxA1zQq5CGqwUNUoYdokIdoBg/jArqm0SEP0Q0eogs9xIA8xDB4GB/QNY0JeYhp8BBT6CEW5CGWwcOEgK5pbMhDbIOH2EIPcSAPcQweJgZ0TeNCHuIaPMQVeogHeYhn8DApoGsaH/IQ3+AhvtBDAshDAoOHyQFd04SQh4QGDwmFHhJBHhIZPEwJ6JomhjwkNnhILPSQBPKQxOBhakDXNCnkIanBQ1Khh2SQh2QGD9MCuqbJIQ/JDR6SCz2kgDykMHiYHtA1TQl5SGnwkFLoIRXkIZXBw4yArmlqyENqg4fUQg9pIA9pDB5mBnRN00Ie0ho8pBV6SAd5SGfwMCuga5oe8pDe4CG90EMGyEMGg4fZAV3TjJCHjAYPGYUeMkEeMhk8zAnommaGPGQ2eMgs9JAF8pDF4GFuQNc0K+Qhq8FDVqGHbJCHbAYP8wK6ptkhD9kNHrILPeSAPOQweJgf0DXNCXnIafCQU+ghF+Qhl8HDgoCuaW7IQ26Dh9xCD3kgD3kMHhYGdE3zQh7yGjzkFXrIB3nIZ/CwKKBrmh/ykN/gIb/QQwHIQwGDh8UBXdOCkIeCBg8FhR4KQR4KGTwsCeiaFoY8FDZ4KCz0UATyUMTgYWlA17Qo5KGowUNRoYdikIdiBg/LArqmxSEPxQ0eigs9lIA8lDB4WB7QNS0JeShp8FBS6KEU5KGUwcOKgK5pachDaYOH0kIPZSAPZQweVgZ0TctCHsoaPJQVeigHeShn8LAqoGtaHvJQ3uChvNBDBchDBYOH1QFd04qQh4oGDxWFHipBHioZPKwJ6JpWhjxUNnioLPRQBfJQxeBhbUDXtCrkoarBQ1Whh2qQh2oGD+sCuqbVIQ/VDR6qCz3UgDzUMHhYH9A1rQl5qGnwUFPooRbkoZbBw4aArmltyENtg4faQg91IA91DB42BnRN60Ie6ho81BV6qAd5qGfwsCmga1of8lDf4KG+0EMDyEMDg4fNAV3ThpCHhgYPDYUeGkEeGhk8bAnomgYgDwGDh4DQQ2PIQ2ODh60BXdMmkIcmBg9NhB6aQh6aGjxsC+iaNoM8NDN4aCb00Bzy0NzgYXtA17QF5KGFwUMLoYeWkIeWBg87ArqmrSAPrQweWgk9tIY8tDZ42BnQNW0DeWhj8NBG6KEt5KGtwcOugK5pO8hDO4OHdkIP7SEP7Q0edgd0TTtAHjoYPHQQeugIeeho8LAnoGvaCfLQyeChk9BDZ8hDZ4OHvQFd0y6Qhy4GD12EHrpCHroaPOwL6Jp2gzx0M3joJvTQHfLQ3eBhf0DXtAfkoYfBQw+hh56Qh54GDwcCuqa9IA+9DB56CT30hjz0Nng4GNA17QN56GPw0EfooS/koa/Bw6GArmk/yEM/g4d+Qg/9IQ/9DR4OB3RNB0AeBhg8DBB6GAh5GGjwcCSgazoI8jDI4GGQ0MNgyMNgg4ejAV3TIZCHIQYPQ4QehkIehho8HAvomg6DPAwzeBgm9DAc8jDc4OF4QNd0BORhhMHDCKGHkZCHkQYPJwK6pqMgD6MMHkYJPYyGPIw2eDgZ0DUdA3kYY/AwRuhhLORhrMHDqYCu6TjIwziDh3FCD+MhD+MNHk4HdE0nQB4mGDxMEHqYCHmYaPBwJqBrOgnyMMngYZLQw2TIw2SDh7MBXdMpkIcpBg9ThB6mQh6mGjycC+iaToM8TDN4mCb0MB3yMN3g4feArukMyMMMg4cZQg8zIQ8zDR7OB3RNZ0EeZhk8zBJ6mA15mG3w8EdA13QO5GGOwcMcoYe5kIe5Bg8XArqm8yAP8wwe5gk9zIc8zDd4+DOga7oA8rDA4GGB0MNCyMNCg4eLAV3TRZCHRQYPi4QeFkMeFhs8/BXQNV0CeVhi8LBE6GEp5GGpwcOlgK7pMsjDMoOHZUIPyyEPyw0e/g7omq6APKwweFgh9LAS8rDS4OFyQNd0FeRhlcHDKqGH1ZCH1QYP/wR0TddAHtYYPKwRelgLeVhr8HAloGu6DvKwzuBhndDDesjDeoOHfwO6phsgDxsMHjYIPWyEPGw0eLga0DXdBHnYZPCwSehhM+Rhs8HDtYCu6RbIwxaDhy1CD1shD1sNHq4HdE23QR62GTxsE3rYDnnYbvBwI6BrugPysMPgYYfQw07Iw06Dh5sBXdNdkIddBg+7hB52Qx52GzzcCuia7oE87DF42CP0sBfysNfg4XZA13Qf5GGfwcM+oYf9kIf9Bg93ArqmByAPBwweDgg9HIQ8HDR4uBvQNT0EeThk8HBI6OEw5OGwwcO9gK7pEcjDEYOHI0IPRyEPRw0e7gd0TY9BHo4ZPBwTejgOeThu8PAgoGt6AvJwwuDhhNDDScjDSYOHhwFd01OQh1MGD6eEHk5DHk4bPDwK6JqegTycMXg4I/RwFvJw1uDhcUDX9Bzk4ZzBwzmhh98hD78bPDwJ6JqehzycN3g4L/TwB+ThD4OHpwFd0wuQhwsGDxeEHv6EPPxp8PAsoGt6EfJw0eDhotDDX5CHvwwengd0TS9BHi4ZPFwSevgb8vC3wcOLgK7pZcjDZYOHy0IP/0Ae/jF4eBnQNb0Cebhi8HBF6OFfyMO/Bg+vArqmVyEPVw0ergo9XIM8XDN4eB3QNb0Oebhu8HBd6OEG5OGGwcObgK7pTcjDTYOHm0IPtyAPtwwe3gZ0TW9DHm4bPNwWergDebhj8PAuoGt6F/Jw1+DhrtDDPcjDPYOH9wFd0/uQh/sGD/eFHh5AHh4YPHwI6Jo+hDw8NHh4KPTwCPLwyODhY0DX9DHk4bHBw2OhhyeQhycGD58CuqZPIQ9PDR6eCj08gzw8M3j4HNA1fQ55eG7w8Fzo4QXk4YXBw5eArulLyMNLg4eXQg+vIA+vDB6+BnRNX0MeXhs8vBZ6eAN5eGPw8C2ga/oW8vDW4OGt0MM7yMM7g4fvAV3T95CH9wYP74UePkAePhg8/Ajomn6EPHw0ePgo9PAJ8vDJ4OFnQNf0M+Ths8HDZ6GHL5CHLwYPvwK6pl8hD18NHr4KPXyDPHwzePitsa7pd8jDd4OH70IPPyAPPwweggg9/IQ8/DR4+Cn08Avy8MvgIajQw29RGQ//2aU9/Pft/+tWkKiMhyBReQ/BhB6CQh6CGjwEFXoIBnkIZvAQXOghOOQhuMFDcKGHEJCHEAYPIYQeQkIeQho8hBR6CAV5CGXwEFLoITTkIbTBQ2ihhzCQhzAGD6GEHsJCHsIaPIQVeggHeQhn8BBa6CE85CG8wUN4oYcIkIcIBg9hhB4iQh4iGjxEFHqIBHmIZPAQVughMuQhssFDZKGHKJCHKAYP4YQeokIeoho8RBV6iAZ5iGbwEF7oITrkIbrBQ3ShhxiQhxgGDxGEHmJCHmIaPMQUeogFeYhl8BBR6CE25CG2wUNsoYc4kIc4Bg+RhB7iQh7iGjzEFXqIB3mIZ/AQWeghPuQhvsFDfKGHBJCHBAYPUYQeEkIeEho8JBR6SAR5SGTwEFXoITHkIbHBQ2KhhySQhyQGD9GEHpJCHpIaPCQVekgGeUhm8BBd6CE55CG5wUNyoYcUkIcUBg8xhB5SQh5SGjykFHpIBXlIZfAQU+ghNeQhtcFDaqGHNJCHNAYPsYQe0kIe0ho8pBV6SAd5SGfwEFvoIT3kIb3BQ3qhhwyQhwwGD3GEHjJCHjIaPGQUesgEechk8BBX6CEz5CGzwUNmoYcskIcsBg/xhB6yQh6yGjxkFXrIBnnIZvAQX+ghO+Qhu8FDdqGHHJCHHAYPCYQeckIecho85BR6yAV5yGXwkFDoITfkIbfBQ26hhzyQhzwGD4mEHvJCHvIaPOQVesgHechn8JBY6CE/5CG/wUN+oYcCkIcCBg9JhB4KQh4KGjwUFHooBHkoZPCQVOihMOShsMFDYaGHIpCHIgYPyYQeikIeiho8FBV6KAZ5KGbwkFzooTjkobjBQ3GhhxKQhxIGDymEHkpCHkoaPJQUeigFeShl8JBS6KE05KG0wUNpoYcykIcyBg+phB7KQh7KGjyUFXooB3koZ/CQWuihPOShvMFDeaGHCpCHCgYPaYQeKkIeKho8VBR6qAR5qGTwkFbooTLkobLBQ2WhhyqQhyoGD+mEHqpCHqoaPFQVeqgGeahm8JBe6KE65KG6wUN1oYcakIcaBg8ZhB5qQh5qGjzUFHqoBXmoZfCQUeihNuShtsFDbaGHOpCHOgYPmYQe6kIe6ho81BV6qAd5qGfwkFnooT7kob7BQ32hhwaQhwYGD1mEHhpCHhoaPDQUemgEeWhk8JBV6CEAeQgYPASEHhpDHhobPGQTemgCeWhi8NBE6KEp5KGpwUN2oYdmkIdmBg/NhB6aQx6aGzzkEHpoAXloYfDQQuihJeShpcFDTqGHVpCHVgYPrYQeWkMeWhs85BJ6aAN5aGPw0EbooS3koa3BQ26hh3aQh3YGD+2EHtpDHtobPOQReugAeehg8NBB6KEj5KGjwUNeoYdOkIdOBg+dhB46Qx46GzzkE3roAnnoYvDQReihK+Shq8FDfqGHbpCHbgYP3YQeukMeuhs8FBB66AF56GHw0EPooSfkoafBQ0Ghh16Qh14GD72EHnpDHnobPBQSeugDeehj8NBH6KEv5KGvwUNhoYd+kId+Bg/9hB76Qx76GzwUEXoYAHkYYPAwQOhhIORhoMFDUaGHQZCHQQYPg4QeBkMeBhs8FBN6GAJ5GGLwMEToYSjkYajBQ3Ghh2GQh2EGD8OEHoZDHoYbPJQQehgBeRhh8DBC6GEk5GGkwUNJoYdRkIdRBg+jhB5GQx5GGzyUEnoYA3kYY/AwRuhhLORhrMFDaaGHcZCHcQYP44QexkMexhs8lBF6mAB5mGDwMEHoYSLkYaLBQ1mhh0mQh0kGD5OEHiZDHiYbPJQTepgCeZhi8DBF6GEq5GGqwUN5oYdpkIdpBg/ThB6mQx6mGzxUEHqYAXmYYfAwQ+hhJuRhpsFDRaGHWZCHWQYPs4QeZkMeZhs8VBJ6mAN5mGPwMEfoYS7kYa7BQ2Whh3mQh3kGD/OEHuZDHuYbPFQRelgAeVhg8LBA6GEh5GGhwUNVoYdFkIdFBg+LhB4WQx4WGzxUE3pYAnlYYvCwROhhKeRhqcFDdaGHZZCHZQYPy4QelkMelhs81BB6WAF5WGHwsELoYSXkYaXBQ02hh1WQh1UGD6uEHlZDHlYbPNQSelgDeVhj8LBG6GEt5GGtwUNtoYd1kId1Bg/rhB7WQx7WGzzUEXrYAHnYYPCwQehhI+Rho8FDXaGHTZCHTQYPm4QeNkMeNhs81BN62AJ52GLwsEXoYSvkYavBQ32hh22Qh20GD9uEHrZDHrYbPDQQetgBedhh8LBD6GEn5GGnwUNDoYddkIddBg+7hB52Qx52Gzw0EnrYA3nYY/CwR+hhL+Rhr8FDQOhhH+Rhn8HDPqGH/ZCH/QYPjYUeDkAeDhg8HBB6OAh5OGjw0ETo4RDk4ZDBwyGhh8OQh8MGD02FHo5AHo4YPBwRejgKeThq8NBM6OEY5OGYwcMxoYfjkIfjBg/NhR5OQB5OGDycEHo4CXk4afDQQujhFOThlMHDKaGH05CH0wYPLYUezkAezhg8nBF6OAt5OGvw0Ero4Rzk4ZzBwzmhh98hD78bPLQWejgPeThv8HBe6OEPyMMfBg9thB4uQB4uGDxcEHr4E/Lwp8FDW6GHi5CHiwYPF4Ue/oI8/GXw0E7o4RLk4ZLBwyWhh78hD38bPLQXergMebhs8HBZ6OEfyMM/Bg8dhB6uQB6uGDxcEXr4F/Lwr8FDR6GHq5CHqwYPV4UerkEerhk8dBJ6uA55uG7wcF3o4Qbk4YbBQ2ehh5uQh5sGDzeFHm5BHm4ZPHQRergNebht8HBb6OEO5OGOwUNXoYe7kIe7Bg93hR7uQR7uGTx0E3q4D3m4b/BwX+jhAeThgcFDd6GHh5CHhwYPD4UeHkEeHhk89BB6eAx5eGzw8Fjo4Qnk4YnBQ0+hh6eQh6cGD0+FHp5BHp4ZPPQSengOeXhu8PBc6OEF5OGFwUNvoYeXkIeXBg8vhR5eQR5eGTz0EXp4DXl4bfDwWujhDeThjcFDX6GHt5CHtwYPb4Ue3kEe3hk89BN6eA95eG/w8F7o4QPk4YPBQ3+hh4+Qh48GDx+FHj5BHj4ZPAwQevgMefhs8PBZ6OEL5OGLwcNAoYevkIevBg9fhR6+QR6+GTwMEnr4Dnn4bvDwXejhB+Thh8HDYKGHn5CHnwYPP4UefkEefhk8DBF6+C0a4+E/u7SH/779f90KEo3xECQa72Go0ENQyENQg4egQg/BIA/BDB6GCT0EhzwEN3gILvQQAvIQwuBhuNBDSMhDSIOHkEIPoSAPoQweRgg9hIY8hDZ4CC30EAbyEMbgYaTQQ1jIQ1iDh7BCD+EgD+EMHkYJPYSHPIQ3eAgv9BAB8hDB4GG00ENEyENEg4eIQg+RIA+RDB7GCD1EhjxENniILPQQBfIQxeBhrNBDVMhDVIOHqEIP0SAP0Qwexgk9RIc8RDd4iC70EAPyEMPgYbzQQ0zIQ0yDh5hCD7EgD7EMHiYIPcSGPMQ2eIgt9BAH8hDH4GGi0ENcyENcg4e4Qg/xIA/xDB4mCT3EhzzEN3iIL/SQAPKQwOBhstBDQshDQoOHhEIPiSAPiQwepgg9JIY8JDZ4SCz0kATykMTgYarQQ1LIQ1KDh6RCD8kgD8kMHqYJPSSHPCQ3eEgu9JAC8pDC4GG60ENKyENKg4eUQg+pIA+pDB5mCD2khjykNnhILfSQBvKQxuBhptBDWshDWoOHtEIP6SAP6QweZgk9pIc8pDd4SC/0kAHykMHgYbbQQ0bIQ0aDh4xCD5kgD5kMHuYIPWSGPGQ2eMgs9JAF8pDF4GGu0ENWyENWg4esQg/ZIA/ZDB7mCT1khzxkN3jILvSQA/KQw+BhvtBDTshDToOHnEIPuSAPuQweFgg95IY85DZ4yC30kAfykMfgYaHQQ17IQ16Dh7xCD/kgD/kMHhYJPeSHPOQ3eMgv9FAA8lDA4GGx0ENByENBg4eCQg+FIA+FDB6WCD0UhjwUNngoLPRQBPJQxOBhqdBDUchDUYOHokIPxSAPxQwelgk9FIc8FDd4KC70UALyUMLgYbnQQ0nIQ0mDh5JCD6UgD6UMHlYIPZSGPJQ2eCgt9FAG8lDG4GGl0ENZyENZg4eyQg/lIA/lDB5WCT2UhzyUN3goL/RQAfJQweBhtdBDRchDRYOHikIPlSAPlQwe1gg9VIY8VDZ4qCz0UAXyUMXgYa3QQ1XIQ1WDh6pCD9UgD9UMHtYJPVSHPFQ3eKgu9FAD8lDD4GG90ENNyENNg4eaQg+1IA+1DB42CD3UhjzUNnioLfRQB/JQx+Bho9BDXchDXYOHukIP9SAP9QweNgk91Ic81Dd4qC/00ADy0MDgYbPQQ0PIQ0ODh4ZCD40gD40MHrYIPQQgDwGDh4DQQ2PIQ2ODh61CD00gD00MHpoIPTSFPDQ1eNgm9NAM8tDM4KGZ0ENzyENzg4ftQg8tIA8tDB5aCD20hDy0NHjYIfTQCvLQyuChldBDa8hDa4OHnUIPbSAPbQwe2gg9tIU8tDV42CX00A7y0M7goZ3QQ3vIQ3uDh91CDx0gDx0MHjoIPXSEPHQ0eNgj9NAJ8tDJ4KGT0ENnyENng4e9Qg9dIA9dDB66CD10hTx0NXjYJ/TQDfLQzeChm9BDd8hDd4OH/UIPPSAPPQweegg99IQ89DR4OCD00Avy0MvgoZfQQ2/IQ2+Dh4NCD30gD30MHvoIPfSFPPQ1eDgk9NAP8tDP4KGf0EN/yEN/g4fDQg8DIA8DDB4GCD0MhDwMNHg4IvQwCPIwyOBhkNDDYMjDYIOHo0IPQyAPQwwehgg9DIU8DDV4OCb0MAzyMMzgYZjQw3DIw3CDh+NCDyMgDyMMHkYIPYyEPIw0eDgh9DAK8jDK4GGU0MNoyMNog4eTQg9jIA9jDB7GCD2MhTyMNXg4JfQwDvIwzuBhnNDDeMjDeIOH00IPEyAPEwweJgg9TIQ8TDR4OCP0MAnyMMngYZLQw2TIw2SDh7NCD1MgD1MMHqYIPUyFPEw1eDgn9DAN8jDN4GGa0MN0yMN0g4ffhR5mQB5mGDzMEHqYCXmYafBwXuhhFuRhlsHDLKGH2ZCH2QYPfwg9zIE8zDF4mCP0MBfyMNfg4YLQwzzIwzyDh3lCD/MhD/MNHv4UelgAeVhg8LBA6GEh5GGhwcNFoYdFkIdFBg+LhB4WQx4WGzz8JfSwBPKwxOBhidDDUsjDUoOHS0IPyyAPywwelgk9LIc8LDd4+FvoYQXkYYXBwwqhh5WQh5UGD5eFHlZBHlYZPKwSelgNeVht8PCP0MMayMMag4c1Qg9rIQ9rDR6uCD2sgzysM3hYJ/SwHvKw3uDhX6GHDZCHDQYPG4QeNkIeNho8XBV62AR52GTwsEnoYTPkYbPBwzWhhy2Qhy0GD1uEHrZCHrYaPFwXetgGedhm8LBN6GE75GG7wcMNoYcdkIcdBg87hB52Qh52GjzcFHrYBXnYZfCwS+hhN+Rht8HDLaGHPZCHPQYPe4Qe9kIe9ho83BZ62Ad52GfwsE/oYT/kYb/Bwx2hhwOQhwMGDweEHg5CHg4aPNwVejgEeThk8HBI6OEw5OGwwcM9oYcjkIcjBg9HhB6OQh6OGjzcF3o4Bnk4ZvBwTOjhOOThuMHDA6GHE5CHEwYPJ4QeTkIeTho8PBR6OAV5OGXwcEro4TTk4bTBwyOhhzOQhzMGD2eEHs5CHs4aPDwWejgHeThn8HBO6OF3yMPvBg9PhB7OQx7OGzycF3r4A/Lwh8HDU6GHC5CHCwYPF4Qe/oQ8/Gnw8Ezo4SLk4aLBw0Whh78gD38ZPDwXergEebhk8HBJ6OFvyMPfBg8vhB4uQx4uGzxcFnr4B/Lwj8HDS6GHK5CHKwYPV4Qe/oU8/Gvw8Ero4Srk4arBw1Whh2uQh2sGD68b65pehzxcN3i4LvRwA/Jww+DhjdDDTcjDTYOHm0IPtyAPtwwe3go93IY83DZ4uC30cAfycMfg4Z3Qw13Iw12Dh7tCD/cgD/cMHt4LPdyHPNw3eLgv9PAA8vDA4OGD0MNDyMNDg4eHQg+PIA+PDB4+Cj08hjw8Nnh4LPTwBPLwxODhk9DDU8jDU4OHp0IPzyAPzwwePgs9PIc8PDd4eC708ALy8MLg4YvQw0vIw0uDh5dCD68gD68MHr4KPbyGPLw2eHgt9PAG8vDG4OGb0MNbyMNbg4e3Qg/vIA/vDB6+Cz28hzy8N3h4L/TwAfLwweDhh9DDR8jDR4OHj0IPnyAPnwwefgo9fIY8fDZ4+Cz08AXy8MXg4ZfQw1fIw1eDh69CD98gD98MHn5romv6HfLw3eDhu9DDD8jDD4OHIEIPPyEPPw0efgo9/II8/DJ4CCr08Ft0xsN/dmkP/337/7oVJDrjIUh03kMwoYegkIegBg9BhR6CQR6CGTwEF3oIDnkIbvAQXOghBOQhhMFDCKGHkJCHkAYPIYUeQkEeQhk8hBR6CA15CG3wEFroIQzkIYzBQyihh7CQh7AGD2GFHsJBHsIZPIQWeggPeQhv8BBe6CEC5CGCwUMYoYeIkIeIBg8RhR4iQR4iGTyEFXqIDHmIbPAQWeghCuQhisFDOKGHqJCHqAYPUYUeokEeohk8hBd6iA55iG7wEF3oIQbkIYbBQwShh5iQh5gGDzGFHmJBHmIZPEQUeogNeYht8BBb6CEO5CGOwUMkoYe4kIe4Bg9xhR7iQR7iGTxEFnqID3mIb/AQX+ghAeQhgcFDFKGHhJCHhAYPCYUeEkEeEhk8RBV6SAx5SGzwkFjoIQnkIYnBQzShh6SQh6QGD0mFHpJBHpIZPEQXekgOeUhu8JBc6CEF5CGFwUMMoYeUkIeUBg8phR5SQR5SGTzEFHpIDXlIbfCQWughDeQhjcFDLKGHtJCHtAYPaYUe0kEe0hk8xBZ6SA95SG/wkF7oIQPkIYPBQxyhh4yQh4wGDxmFHjJBHjIZPMQVesgMechs8JBZ6CEL5CGLwUM8oYeskIesBg9ZhR6yQR6yGTzEF3rIDnnIbvCQXeghB+Qhh8FDAqGHnJCHnAYPOYUeckEechk8JBR6yA15yG3wkFvoIQ/kIY/BQyKhh7yQh7wGD3mFHvJBHvIZPCQWesgPechv8JBf6KEA5KGAwUMSoYeCkIeCBg8FhR4KQR4KGTwkFXooDHkobPBQWOihCOShiMFDMqGHopCHogYPRYUeikEeihk8JBd6KA55KG7wUFzooQTkoYTBQwqhh5KQh5IGDyWFHkpBHkoZPKQUeigNeSht8FBa6KEM5KGMwUMqoYeykIeyBg9lhR7KQR7KGTykFnooD3kob/BQXuihAuShgsFDGqGHipCHigYPFYUeKkEeKhk8pBV6qAx5qGzwUFnooQrkoYrBQzqhh6qQh6oGD1WFHqpBHqoZPKQXeqgOeahu8FBd6KEG5KGGwUMGoYeakIeaBg81hR5qQR5qGTxkFHqoDXmobfBQW+ihDuShjsFDJqGHupCHugYPdYUe6kEe6hk8ZBZ6qA95qG/wUF/ooQHkoYHBQxahh4aQh4YGDw2FHhpBHhoZPGQVeghAHgIGDwGhh8aQh8YGD9mEHppAHpoYPDQRemgKeWhq8JBd6KEZ5KGZwUMzoYfmkIfmBg85hB5aQB5aGDy0EHpoCXloafCQU+ihFeShlcFDK6GH1pCH1gYPuYQe2kAe2hg8tBF6aAt5aGvwkFvooR3koZ3BQzuhh/aQh/YGD3mEHjpAHjoYPHQQeugIeeho8JBX6KET5KGTwUMnoYfOkIfOBg/5hB66QB66GDx0EXroCnnoavCQX+ihG+Shm8FDN6GH7pCH7gYPBYQeekAeehg89BB66Al56GnwUFDooRfkoZfBQy+hh96Qh94GD4WEHvpAHvoYPPQReugLeehr8FBY6KEf5KGfwUM/oYf+kIf+Bg9FhB4GQB4GGDwMEHoYCHkYaPBQVOhhEORhkMHDIKGHwZCHwQYPxYQehkAehhg8DBF6GAp5GGrwUFzoYRjkYZjBwzChh+GQh+EGDyWEHkZAHkYYPIwQehgJeRhp8FBS6GEU5GGUwcMooYfRkIfRBg+lhB7GQB7GGDyMEXoYC3kYa/BQWuhhHORhnMHDOKGH8ZCH8QYPZYQeJkAeJhg8TBB6mAh5mGjwUFboYRLkYZLBwyShh8mQh8kGD+WEHqZAHqYYPEwRepgKeZhq8FBe6GEa5GGawcM0oYfpkIfpBg8VhB5mQB5mGDzMEHqYCXmYafBQUehhFuRhlsHDLKGH2ZCH2QYPlYQe5kAe5hg8zBF6mAt5mGvwUFnoYR7kYZ7Bwzyhh/mQh/kGD1WEHhZAHhYYPCwQelgIeVho8FBV6GER5GGRwcMioYfFkIfFBg/VhB6WQB6WGDwsEXpYCnlYavBQXehhGeRhmcHDMqGH5ZCH5QYPNYQeVkAeVhg8rBB6WAl5WGnwUFPoYRXkYZXBwyqhh9WQh9UGD7WEHtZAHtYYPKwRelgLeVhr8FBb6GEd5GGdwcM6oYf1kIf1Bg91hB42QB42GDxsEHrYCHnYaPBQV+hhE+Rhk8HDJqGHzZCHzQYP9YQetkAethg8bBF62Ap52GrwUF/oYRvkYZvBwzahh+2Qh+0GDw2EHnZAHnYYPOwQetgJedhp8NBQ6GEX5GGXwcMuoYfdkIfdBg+NhB72QB72GDzsEXrYC3nYa/AQEHrYB3nYZ/CwT+hhP+Rhv8FDY6GHA5CHAwYPB4QeDkIeDho8NBF6OAR5OGTwcEjo4TDk4bDBQ1OhhyOQhyMGD0eEHo5CHo4aPDQTejgGeThm8HBM6OE45OG4wUNzoYcTkIcTBg8nhB5OQh5OGjy0EHo4BXk4ZfBwSujhNOThtMFDS6GHM5CHMwYPZ4QezkIezho8tBJ6OAd5OGfwcE7o4XfIw+8GD62FHs5DHs4bPJwXevgD8vCHwUMboYcLkIcLBg8XhB7+hDz8afDQVujhIuThosHDRaGHvyAPfxk8tBN6uAR5uGTwcEno4W/Iw98GD+2FHi5DHi4bPFwWevgH8vCPwUMHoYcrkIcrBg9XhB7+hTz8a/DQUejhKuThqsHDVaGHa5CHawYPnYQerkMerhs8XBd6uAF5uGHw0Fno4Sbk4abBw02hh1uQh1sGD12EHm5DHm4bPNwWergDebhj8NBV6OEu5OGuwcNdoYd7kId7Bg/dhB7uQx7uGzzcF3p4AHl4YPDQXejhIeThocHDQ6GHR5CHRwYPPYQeHkMeHhs8PBZ6eAJ5eGLw0FPo4Snk4anBw1Ohh2eQh2cGD72EHp5DHp4bPDwXengBeXhh8NBb6OEl5OGlwcNLoYdXkIdXBg99hB5eQx5eGzy8Fnp4A3l4Y/DQV+jhLeThrcHDW6GHd5CHdwYP/YQe3kMe3hs8vBd6+AB5+GDw0F/o4SPk4aPBw0ehh0+Qh08GDwOEHj5DHj4bPHwWevgCefhi8DBQ6OEr5OGrwcNXoYdvkIdvBg+DhB6+Qx6+Gzx8F3r4AXn4YfAwWOjhJ+Thp8HDT6GHX5CHXwYPQ4QefovBePjPLu3hv2//X7eCxGA8BInBexgq9BAU8hDU4CGo0EMwyEMwg4dhQg/BIQ/BDR6CCz2EgDyEMHgYLvQQEvIQ0uAhpNBDKMhDKIOHEUIPoSEPoQ0eQgs9hIE8hDF4GCn0EBbyENbgIazQQzjIQziDh1FCD+EhD+ENHsILPUSAPEQweBgt9BAR8hDR4CGi0EMkyEMkg4cxQg+RIQ+RDR4iCz1EgTxEMXgYK/QQFfIQ1eAhqtBDNMhDNIOHcUIP0SEP0Q0eogs9xIA8xDB4GC/0EBPyENPgIabQQyzIQyyDhwlCD7EhD7ENHmILPcSBPMQxeJgo9BAX8hDX4CGu0EM8yEM8g4dJQg/xIQ/xDR7iCz0kgDwkMHiYLPSQEPKQ0OAhodBDIshDIoOHKUIPiSEPiQ0eEgs9JIE8JDF4mCr0kBTykNTgIanQQzLIQzKDh2lCD8khD8kNHpILPaSAPKQweJgu9JAS8pDS4CGl0EMqyEMqg4cZQg+pIQ+pDR5SCz2kgTykMXiYKfSQFvKQ1uAhrdBDOshDOoOHWUIP6SEP6Q0e0gs9ZIA8ZDB4mC30kBHykNHgIaPQQybIQyaDhzlCD5khD5kNHjILPWSBPGQxeJgr9JAV8pDV4CGr0EM2yEM2g4d5Qg/ZIQ/ZDR6yCz3kgDzkMHiYL/SQE/KQ0+Ahp9BDLshDLoOHBUIPuSEPuQ0ecgs95IE85DF4WCj0kBfykNfgIa/QQz7IQz6Dh0VCD/khD/kNHvILPRSAPBQweFgs9FAQ8lDQ4KGg0EMhyEMhg4clQg+FIQ+FDR4KCz0UgTwUMXhYKvRQFPJQ1OChqNBDMchDMYOHZUIPxSEPxQ0eigs9lIA8lDB4WC70UBLyUNLgoaTQQynIQymDhxVCD6UhD6UNHkoLPZSBPJQxeFgp9FAW8lDW4KGs0EM5yEM5g4dVQg/lIQ/lDR7KCz1UgDxUMHhYLfRQEfJQ0eChotBDJchDJYOHNUIPlSEPlQ0eKgs9VIE8VDF4WCv0UBXyUNXgoarQQzXIQzWDh3VCD9UhD9UNHqoLPdSAPNQweFgv9FAT8lDT4KGm0EMtyEMtg4cNQg+1IQ+1DR5qCz3UgTzUMXjYKPRQF/JQ1+ChrtBDPchDPYOHTUIP9SEP9Q0e6gs9NIA8NDB42Cz00BDy0NDgoaHQQyPIQyODhy1CDwHIQ8DgISD00Bjy0NjgYavQQxPIQxODhyZCD00hD00NHrYJPTSDPDQzeGgm9NAc8tDc4GG70EMLyEMLg4cWQg8tIQ8tDR52CD20gjy0MnhoJfTQGvLQ2uBhp9BDG8hDG4OHNkIPbSEPbQ0edgk9tIM8tDN4aCf00B7y0N7gYbfQQwfIQweDhw5CDx0hDx0NHvYIPXSCPHQyeOgk9NAZ8tDZ4GGv0EMXyEMXg4cuQg9dIQ9dDR72CT10gzx0M3joJvTQHfLQ3eBhv9BDD8hDD4OHHkIPPSEPPQ0eDgg99II89DJ46CX00Bvy0Nvg4aDQQx/IQx+Dhz5CD30hD30NHg4JPfSDPPQzeOgn9NAf8tDf4OGw0MMAyMMAg4cBQg8DIQ8DDR6OCD0MgjwMMngYJPQwGPIw2ODhqNDDEMjDEIOHIUIPQyEPQw0ejgk9DIM8DDN4GCb0MBzyMNzg4bjQwwjIwwiDhxFCDyMhDyMNHk4IPYyCPIwyeBgl9DAa8jDa4OGk0MMYyMMYg4cxQg9jIQ9jDR5OCT2MgzyMM3gYJ/QwHvIw3uDhtNDDBMjDBIOHCUIPEyEPEw0ezgg9TII8TDJ4mCT0MBnyMNng4azQwxTIwxSDhylCD1MhD1MNHs4JPUyDPEwzeJgm9DAd8jDd4OF3oYcZkIcZBg8zhB5mQh5mGjycF3qYBXmYZfAwS+hhNuRhtsHDH0IPcyAPcwwe5gg9zIU8zDV4uCD0MA/yMM/gYZ7Qw3zIw3yDhz+FHhZAHhYYPCwQelgIeVho8HBR6GER5GGRwcMioYfFkIfFBg9/CT0sgTwsMXhYIvSwFPKw1ODhktDDMsjDMoOHZUIPyyEPyw0e/hZ6WAF5WGHwsELoYSXkYaXBw2Whh1WQh1UGD6uEHlZDHlYbPPwj9LAG8rDG4GGN0MNayMNag4crQg/rIA/rDB7WCT2shzysN3j4V+hhA+Rhg8HDBqGHjZCHjQYPV4UeNkEeNhk8bBJ62Ax52GzwcE3oYQvkYYvBwxahh62Qh60GD9eFHrZBHrYZPGwTetgOedhu8HBD6GEH5GGHwcMOoYedkIedBg83hR52QR52GTzsEnrYDXnYbfBwS+hhD+Rhj8HDHqGHvZCHvQYPt4Ue9kEe9hk87BN62A952G/wcEfo4QDk4YDBwwGhh4OQh4MGD3eFHg5BHg4ZPBwSejgMeThs8HBP6OEI5OGIwcMRoYejkIejBg/3hR6OQR6OGTwcE3o4Dnk4bvDwQOjhBOThhMHDCaGHk5CHkwYPD4UeTkEeThk8nBJ6OA15OG3w8Ejo4Qzk4YzBwxmhh7OQh7MGD4+FHs5BHs4ZPJwTevgd8vC7wcMToYfzkIfzBg/nhR7+gDz8YfDwVOjhAuThgsHDBaGHPyEPfxo8PBN6uAh5uGjwcFHo4S/Iw18GD8+FHi5BHi4ZPFwSevgb8vC3wcMLoYfLkIfLBg+XhR7+gTz8Y/DwUujhCuThisHDFaGHfyEP/xo8vBJ6uAp5uGrwcFXo4Rrk4ZrBw2uhh+uQh+sGD9eFHm5AHm4YPLwRergJebhp8HBT6OEW5OGWwcNboYfbkIfbBg+3hR7uQB7uGDy8E3q4C3m4a/BwV+jhHuThnsHDe6GH+5CH+wYP94UeHkAeHhg8fBB6eAh5eGjw8FDo4RHk4ZHBw0ehh8eQh8cGD4+FHp5AHp4YPHwSengKeXhq8PBU6OEZ5OGZwcNnoYfnkIfnBg/PhR5eQB5eGDx8EXp4CXl4afDwUujhFeThlcHDV6GH15CH1wYPr4Ue3kAe3hg8fBN6eAt5eGvw8Fbo4R3k4Z3Bw3ehh/eQh/cGD++FHj5AHj4YPPwQevgIefho8PBR6OET5OGTwcNPoYfPkIfPBg+fhR6+QB6+GDz8Enr4Cnn4avDwVejhG+Thm8HDb011Tb9DHr4bPHwXevgBefhh8BBE6OEn5OGnwcNPoYdfkIdfBg9BhR5+i8l4+M8u7eG/b/9ft4LEZDwEicl7CCb0EBTyENTgIajQQzDIQzCDh+BCD8EhD8ENHoILPYSAPIQweAgh9BAS8hDS4CGk0EMoyEMog4eQQg+hIQ+hDR5CCz2EgTyEMXgIJfQQFvIQ1uAhrNBDOMhDOIOH0EIP4SEP4Q0ewgs9RIA8RDB4CCP0EBHyENHgIaLQQyTIQySDh7BCD5EhD5ENHiILPUSBPEQxeAgn9BAV8hDV4CGq0EM0yEM0g4fwQg/RIQ/RDR6iCz3EgDzEMHiIIPQQE/IQ0+AhptBDLMhDLIOHiEIPsSEPsQ0eYgs9xIE8xDF4iCT0EBfyENfgIa7QQzzIQzyDh8hCD/EhD/ENHuILPSSAPCQweIgi9JAQ8pDQ4CGh0EMiyEMig4eoQg+JIQ+JDR4SCz0kgTwkMXiIJvSQFPKQ1OAhqdBDMshDMoOH6EIPySEPyQ0ekgs9pIA8pDB4iCH0kBLykNLgIaXQQyrIQyqDh5hCD6khD6kNHlILPaSBPKQxeIgl9JAW8pDW4CGt0EM6yEM6g4fYQg/pIQ/pDR7SCz1kgDxkMHiII/SQEfKQ0eAho9BDJshDJoOHuEIPmSEPmQ0eMgs9ZIE8ZDF4iCf0kBXykNXgIavQQzbIQzaDh/hCD9khD9kNHrILPeSAPOQweEgg9JAT8pDT4CGn0EMuyEMug4eEQg+5IQ+5DR5yCz3kgTzkMXhIJPSQF/KQ1+Ahr9BDPshDPoOHxEIP+SEP+Q0e8gs9FIA8FDB4SCL0UBDyUNDgoaDQQyHIQyGDh6RCD4UhD4UNHgoLPRSBPBQxeEgm9FAU8lDU4KGo0EMxyEMxg4fkQg/FIQ/FDR6KCz2UgDyUMHhIIfRQEvJQ0uChpNBDKchDKYOHlEIPpSEPpQ0eSgs9lIE8lDF4SCX0UBbyUNbgoazQQznIQzmDh9RCD+UhD+UNHsoLPVSAPFQweEgj9FAR8lDR4KGi0EMlyEMlg4e0Qg+VIQ+VDR4qCz1UgTxUMXhIJ/RQFfJQ1eChqtBDNchDNYOH9EIP1SEP1Q0eqgs91IA81DB4yCD0UBPyUNPgoabQQy3IQy2Dh4xCD7UhD7UNHmoLPdSBPNQxeMgk9FAX8lDX4KGu0EM9yEM9g4fMQg/1IQ/1DR7qCz00gDw0MHjIIvTQEPLQ0OChodBDI8hDI4OHrEIPAchDwOAhIPTQGPLQ2OAhm9BDE8hDE4OHJkIPTSEPTQ0esgs9NIM8NDN4aCb00Bzy0NzgIYfQQwvIQwuDhxZCDy0hDy0NHnIKPbSCPLQyeGgl9NAa8tDa4CGX0EMbyEMbg4c2Qg9tIQ9tDR5yCz20gzy0M3hoJ/TQHvLQ3uAhj9BDB8hDB4OHDkIPHSEPHQ0e8go9dII8dDJ46CT00Bny0NngIZ/QQxfIQxeDhy5CD10hD10NHvILPXSDPHQzeOgm9NAd8tDd4KGA0EMPyEMPg4ceQg89IQ89DR4KCj30gjz0MnjoJfTQG/LQ2+ChkNBDH8hDH4OHPkIPfSEPfQ0eCgs99IM89DN46Cf00B/y0N/goYjQwwDIwwCDhwFCDwMhDwMNHooKPQyCPAwyeBgk9DAY8jDY4KGY0MMQyMMQg4chQg9DIQ9DDR6KCz0MgzwMM3gYJvQwHPIw3OChhNDDCMjDCIOHEUIPIyEPIw0eSgo9jII8jDJ4GCX0MBryMNrgoZTQwxjIwxiDhzFCD2MhD2MNHkoLPYyDPIwzeBgn9DAe8jDe4KGM0MMEyMMEg4cJQg8TIQ8TDR7KCj1MgjxMMniYJPQwGfIw2eChnNDDFMjDFIOHKUIPUyEPUw0eygs9TIM8TDN4mCb0MB3yMN3goYLQwwzIwwyDhxlCDzMhDzMNHioKPcyCPMwyeJgl9DAb8jDb4KGS0MMcyMMcg4c5Qg9zIQ9zDR4qCz3MgzzMM3iYJ/QwH/Iw3+ChitDDAsjDAoOHBUIPCyEPCw0eqgo9LII8LDJ4WCT0sBjysNjgoZrQwxLIwxKDhyVCD0shD0sNHqoLPSyDPCwzeFgm9LAc8rDc4KGG0MMKyMMKg4cVQg8rIQ8rDR5qCj2sgjysMnhYJfSwGvKw2uChltDDGsjDGoOHNUIPayEPaw0eags9rIM8rDN4WCf0sB7ysN7goY7QwwbIwwaDhw1CDxshDxsNHuoKPWyCPGwyeNgk9LAZ8rDZ4KGe0MMWyMMWg4ctQg9bIQ9bDR7qCz1sgzxsM3jYJvSwHfKw3eChgdDDDsjDDoOHHUIPOyEPOw0eGgo97II87DJ42CX0sBvysNvgoZHQwx7Iwx6Dhz1CD3shD3sNHgJCD/sgD/sMHvYJPeyHPOw3eGgs9HAA8nDA4OGA0MNByMNBg4cmQg+HIA+HDB4OCT0chjwcNnhoKvRwBPJwxODhiNDDUcjDUYOHZkIPxyAPxwwejgk9HIc8HDd4aC70cALycMLg4YTQw0nIw0mDhxZCD6cgD6cMHk4JPZyGPJw2eGgp9HAG8nDG4OGM0MNZyMNZg4dWQg/nIA/nDB7OCT38Dnn43eChtdDDecjDeYOH80IPf0Ae/jB4aCP0cAHycMHg4YLQw5+Qhz8NHtoKPVyEPFw0eLgo9PAX5OEvg4d2Qg+XIA+XDB4uCT38DXn42+ChvdDDZcjDZYOHy0IP/0Ae/jF46CD0cAXycMXg4YrQw7+Qh38NHjoKPVyFPFw1eLgq9HAN8nDN4KGT0MN1yMN1g4frQg83IA83DB46Cz3chDzcNHi4KfRwC/Jwy+Chi9DDbcjDbYOH20IPdyAPdwweugo93IU83DV4uCv0cA/ycM/goZvQw33Iw32Dh/tCDw8gDw8MHroLPTyEPDw0eHgo9PAI8vDI4KGH0MNjyMNjg4fHQg9PIA9PDB56Cj08hTw8NXh4KvTwDPLwzOChl9DDc8jDc4OH50IPLyAPLwweegs9vIQ8vDR4eCn08Ary8MrgoY/Qw2vIw2uDh9dCD28gD28MHvoKPbyFPLw1eHgr9PAO8vDO4KGf0MN7yMN7g4f3Qg8fIA8fDB76Cz18hDx8NHj4KPTwCfLwyeBhgNDDZ8jDZ4OHz0IPXyAPXwweBgo9fIU8fDV4+Cr08A3y8M3gYZDQw3fIw3eDh+9CDz8gDz8MHgYLPfyEPPw0ePgp9PAL8vDL4GGI0MNvsRgP/9mlPfz37f/rVpBYjIcgsXgPQ4UegkIegho8BBV6CAZ5CGbwMEzoITjkIbjBQ3ChhxCQhxAGD8OFHkJCHkIaPIQUeggFeQhl8DBC6CE05CG0wUNooYcwkIcwBg8jhR7CQh7CGjyEFXoIB3kIZ/AwSughPOQhvMFDeKGHCJCHCAYPo4UeIkIeIho8RBR6iAR5iGTwMEboITLkIbLBQ2ShhyiQhygGD2OFHqJCHqIaPEQVeogGeYhm8DBO6CE65CG6wUN0oYcYkIcYBg/jhR5iQh5iGjzEFHqIBXmIZfAwQeghNuQhtsFDbKGHOJCHOAYPE4Ue4kIe4ho8xBV6iAd5iGfwMEnoIT7kIb7BQ3yhhwSQhwQGD5OFHhJCHhIaPCQUekgEeUhk8DBF6CEx5CGxwUNioYckkIckBg9ThR6SQh6SGjwkFXpIBnlIZvAwTeghOeQhucFDcqGHFJCHFAYP04UeUkIeUho8pBR6SAV5SGXwMEPoITXkIbXBQ2qhhzSQhzQGDzOFHtJCHtIaPKQVekgHeUhn8DBL6CE95CG9wUN6oYcMkIcMBg+zhR4yQh4yGjxkFHrIBHnIZPAwR+ghM+Qhs8FDZqGHLJCHLAYPc4UeskIesho8ZBV6yAZ5yGbwME/oITvkIbvBQ3ahhxyQhxwGD/OFHnJCHnIaPOQUesgFechl8LBA6CE35CG3wUNuoYc8kIc8Bg8LhR7yQh7yGjzkFXrIB3nIZ/CwSOghP+Qhv8FDfqGHApCHAgYPi4UeCkIeCho8FBR6KAR5KGTwsETooTDkobDBQ2GhhyKQhyIGD0uFHopCHooaPBQVeigGeShm8LBM6KE45KG4wUNxoYcSkIcSBg/LhR5KQh5KGjyUFHooBXkoZfCwQuihNOShtMFDaaGHMpCHMgYPK4UeykIeyho8lBV6KAd5KGfwsErooTzkobzBQ3mhhwqQhwoGD6uFHipCHioaPFQUeqgEeahk8LBG6KEy5KGywUNloYcqkIcqBg9rhR6qQh6qGjxUFXqoBnmoZvCwTuihOuShusFDdaGHGpCHGgYP64UeakIeaho81BR6qAV5qGXwsEHooTbkobbBQ22hhzqQhzoGDxuFHupCHuoaPNQVeqgHeahn8LBJ6KE+5KG+wUN9oYcGkIcGBg+bhR4aQh4aGjw0FHpoBHloZPCwReghAHkIGDwEhB4aQx4aGzxsFXpoAnloYvDQROihKeShqcHDNqGHZpCHZgYPzYQemkMemhs8bBd6aAF5aGHw0ELooSXkoaXBww6hh1aQh1YGD62EHlpDHlobPOwUemgDeWhj8NBG6KEt5KGtwcMuoYd2kId2Bg/thB7aQx7aGzzsFnroAHnoYPDQQeihI+Sho8HDHqGHTpCHTgYPnYQeOkMeOhs87BV66AJ56GLw0EXooSvkoavBwz6hh26Qh24GD92EHrpDHrobPOwXeugBeehh8NBD6KEn5KGnwcMBoYdekIdeBg+9hB56Qx56GzwcFHroA3noY/DQR+ihL+Shr8HDIaGHfpCHfgYP/YQe+kMe+hs8HBZ6GAB5GGDwMEDoYSDkYaDBwxGhh0GQh0EGD4OEHgZDHgYbPBwVehgCeRhi8DBE6GEo5GGowcMxoYdhkIdhBg/DhB6GQx6GGzwcF3oYAXkYYfAwQuhhJORhpMHDCaGHUZCHUQYPo4QeRkMeRhs8nBR6GAN5GGPwMEboYSzkYazBwymhh3GQh3EGD+OEHsZDHsYbPJwWepgAeZhg8DBB6GEi5GGiwcMZoYdJkIdJBg+ThB4mQx4mGzycFXqYAnmYYvAwRehhKuRhqsHDOaGHaZCHaQYP04QepkMephs8/C70MAPyMMPgYYbQw0zIw0yDh/NCD7MgD7MMHmYJPcyGPMw2ePhD6GEO5GGOwcMcoYe5kIe5Bg8XhB7mQR7mGTzME3qYD3mYb/Dwp9DDAsjDAoOHBUIPCyEPCw0eLgo9LII8LDJ4WCT0sBjysNjg4S+hhyWQhyUGD0uEHpZCHpYaPFwSelgGeVhm8LBM6GE55GG5wcPfQg8rIA8rDB5WCD2shDysNHi4LPSwCvKwyuBhldDDasjDaoOHf4Qe1kAe1hg8rBF6WAt5WGvwcEXoYR3kYZ3Bwzqhh/WQh/UGD/8KPWyAPGwweNgg9LAR8rDR4OGq0MMmyMMmg4dNQg+bIQ+bDR6uCT1sgTxsMXjYIvSwFfKw1eDhutDDNsjDNoOHbUIP2yEP2w0ebgg97IA87DB42CH0sBPysNPg4abQwy7Iwy6Dh11CD7shD7sNHm4JPeyBPOwxeNgj9LAX8rDX4OG20MM+yMM+g4d9Qg/7IQ/7DR7uCD0cgDwcMHg4IPRwEPJw0ODhrtDDIcjDIYOHQ0IPhyEPhw0e7gk9HIE8HDF4OCL0cBTycNTg4b7QwzHIwzGDh2NCD8chD8cNHh4IPZyAPJwweDgh9HAS8nDS4OGh0MMpyMMpg4dTQg+nIQ+nDR4eCT2cgTycMXg4I/RwFvJw1uDhsdDDOcjDOYOHc0IPv0Mefjd4eCL0cB7ycN7g4bzQwx+Qhz8MHp4KPVyAPFwweLgg9PAn5OFPg4dnQg8XIQ8XDR4uCj38BXn4y+DhudDDJcjDJYOHS0IPf0Me/jZ4eCH0cBnycNng4bLQwz+Qh38MHl4KPVyBPFwxeLgi9PAv5OFfg4dXQg9XIQ9XDR6uCj1cgzxcM3h4LfRwHfJw3eDhutDDDcjDDYOHN0IPNyEPNw0ebgo93II83DJ4eCv0cBvycNvg4bbQwx3Iwx2Dh3dCD3chD3cNHu4KPdyDPNwzeHgv9HAf8nDf4OG+0MMDyMMDg4cPQg8PIQ8PDR4eCj08gjw8Mnj4KPTwGPLw2ODhsdDDE8jDE4OHT0IPTyEPTw0engo9PIM8PDN4+Cz08Bzy8Nzg4bnQwwvIwwuDhy9CDy8hDy8NHl4KPbyCPLwyePgq9PAa8vDa4OG10MMbyMMbg4dvQg9vIQ9vDR7eCj28gzy8M3j4LvTwHvLw3uDhvdDDB8jDB4OHH0IPHyEPHw0ePgo9fII8fDJ4+Cn08Bny8Nng4bPQwxfIwxeDh19CD18hD18NHr4KPXyDPHwzePitma7pd8jDd4OH70IPPyAPPwweggg9/IQ8/DR4+Cn08Avy8MvgIajQw2+xGQ//2aU9/Pft/+tWkNiMhyCxeQ/BhB6CQh6CGjwEFXoIBnkIZvAQXOghOOQhuMFDcKGHEJCHEAYPIYQeQkIeQho8hBR6CAV5CGXwEFLoITTkIbTBQ2ihhzCQhzAGD6GEHsJCHsIaPIQVeggHeQhn8BBa6CE85CG8wUN4oYcIkIcIBg9hhB4iQh4iGjxEFHqIBHmIZPAQVughMuQhssFDZKGHKJCHKAYP4YQeokIeoho8RBV6iAZ5iGbwEF7oITrkIbrBQ3ShhxiQhxgGDxGEHmJCHmIaPMQUeogFeYhl8BBR6CE25CG2wUNsoYc4kIc4Bg+RhB7iQh7iGjzEFXqIB3mIZ/AQWeghPuQhvsFDfKGHBJCHBAYPUYQeEkIeEho8JBR6SAR5SGTwEFXoITHkIbHBQ2KhhySQhyQGD9GEHpJCHpIaPCQVekgGeUhm8BBd6CE55CG5wUNyoYcUkIcUBg8xhB5SQh5SGjykFHpIBXlIZfAQU+ghNeQhtcFDaqGHNJCHNAYPsYQe0kIe0ho8pBV6SAd5SGfwEFvoIT3kIb3BQ3qhhwyQhwwGD3GEHjJCHjIaPGQUesgEechk8BBX6CEz5CGzwUNmoYcskIcsBg/xhB6yQh6yGjxkFXrIBnnIZvAQX+ghO+Qhu8FDdqGHHJCHHAYPCYQeckIecho85BR6yAV5yGXwkFDoITfkIbfBQ26hhzyQhzwGD4mEHvJCHvIaPOQVesgHechn8JBY6CE/5CG/wUN+oYcCkIcCBg9JhB4KQh4KGjwUFHooBHkoZPCQVOihMOShsMFDYaGHIpCHIgYPyYQeikIeiho8FBV6KAZ5KGbwkFzooTjkobjBQ3GhhxKQhxIGDymEHkpCHkoaPJQUeigFeShl8JBS6KE05KG0wUNpoYcykIcyBg+phB7KQh7KGjyUFXooB3koZ/CQWuihPOShvMFDeaGHCpCHCgYPaYQeKkIeKho8VBR6qAR5qGTwkFbooTLkobLBQ2WhhyqQhyoGD+mEHqpCHqoaPFQVeqgGeahm8JBe6KE65KG6wUN1oYcakIcaBg8ZhB5qQh5qGjzUFHqoBXmoZfCQUeihNuShtsFDbaGHOpCHOgYPmYQe6kIe6ho81BV6qAd5qGfwkFnooT7kob7BQ32hhwaQhwYGD1mEHhpCHhoaPDQUemgEeWhk8JBV6CEAeQgYPASEHhpDHhobPGQTemgCeWhi8NBE6KEp5KGpwUN2oYdmkIdmBg/NhB6aQx6aGzzkEHpoAXloYfDQQuihJeShpcFDTqGHVpCHVgYPrYQeWkMeWhs85BJ6aAN5aGPw0EbooS3koa3BQ26hh3aQh3YGD+2EHtpDHtobPOQReugAeehg8NBB6KEj5KGjwUNeoYdOkIdOBg+dhB46Qx46GzzkE3roAnnoYvDQReihK+Shq8FDfqGHbpCHbgYP3YQeukMeuhs8FBB66AF56GHw0EPooSfkoafBQ0Ghh16Qh14GD72EHnpDHnobPBQSeugDeehj8NBH6KEv5KGvwUNhoYd+kId+Bg/9hB76Qx76GzwUEXoYAHkYYPAwQOhhIORhoMFDUaGHQZCHQQYPg4QeBkMeBhs8FBN6GAJ5GGLwMEToYSjkYajBQ3Ghh2GQh2EGD8OEHoZDHoYbPJQQehgBeRhh8DBC6GEk5GGkwUNJoYdRkIdRBg+jhB5GQx5GGzyUEnoYA3kYY/AwRuhhLORhrMFDaaGHcZCHcQYP44QexkMexhs8lBF6mAB5mGDwMEHoYSLkYaLBQ1mhh0mQh0kGD5OEHiZDHiYbPJQTepgCeZhi8DBF6GEq5GGqwUN5oYdpkIdpBg/ThB6mQx6mGzxUEHqYAXmYYfAwQ+hhJuRhpsFDRaGHWZCHWQYPs4QeZkMeZhs8VBJ6mAN5mGPwMEfoYS7kYa7BQ2Whh3mQh3kGD/OEHuZDHuYbPFQRelgAeVhg8LBA6GEh5GGhwUNVoYdFkIdFBg+LhB4WQx4WGzxUE3pYAnlYYvCwROhhKeRhqcFDdaGHZZCHZQYPy4QelkMelhs81BB6WAF5WGHwsELoYSXkYaXBQ02hh1WQh1UGD6uEHlZDHlYbPNQSelgDeVhj8LBG6GEt5GGtwUNtoYd1kId1Bg/rhB7WQx7WGzzUEXrYAHnYYPCwQehhI+Rho8FDXaGHTZCHTQYPm4QeNkMeNhs81BN62AJ52GLwsEXoYSvkYavBQ32hh22Qh20GD9uEHrZDHrYbPDQQetgBedhh8LBD6GEn5GGnwUNDoYddkIddBg+7hB52Qx52Gzw0EnrYA3nYY/CwR+hhL+Rhr8FDQOhhH+Rhn8HDPqGH/ZCH/QYPjYUeDkAeDhg8HBB6OAh5OGjw0ETo4RDk4ZDBwyGhh8OQh8MGD02FHo5AHo4YPBwRejgKeThq8NBM6OEY5OGYwcMxoYfjkIfjBg/NhR5OQB5OGDycEHo4CXk4afDQQujhFOThlMHDKaGH05CH0wYPLYUezkAezhg8nBF6OAt5OGvw0Ero4Rzk4ZzBwzmhh98hD78bPLQWejgPeThv8HBe6OEPyMMfBg9thB4uQB4uGDxcEHr4E/Lwp8FDW6GHi5CHiwYPF4Ue/oI8/GXw0E7o4RLk4ZLBwyWhh78hD38bPLQXergMebhs8HBZ6OEfyMM/Bg8dhB6uQB6uGDxcEXr4F/Lwr8FDR6GHq5CHqwYPV4UerkEerhk8dBJ6uA55uG7wcF3o4Qbk4YbBQ2ehh5uQh5sGDzeFHm5BHm4ZPHQRergNebht8HBb6OEO5OGOwUNXoYe7kIe7Bg93hR7uQR7uGTx0E3q4D3m4b/BwX+jhAeThgcFDd6GHh5CHhwYPD4UeHkEeHhk89BB6eAx5eGzw8Fjo4Qnk4YnBQ0+hh6eQh6cGD0+FHp5BHp4ZPPQSengOeXhu8PBc6OEF5OGFwUNvoYeXkIeXBg8vhR5eQR5eGTz0EXp4DXl4bfDwWujhDeThjcFDX6GHt5CHtwYPb4Ue3kEe3hk89BN6eA95eG/w8F7o4QPk4YPBQ3+hh4+Qh48GDx+FHj5BHj4ZPAwQevgMefhs8PBZ6OEL5OGLwcNAoYevkIevBg9fhR6+QR6+GTwMEnr4Dnn4bvDwXejhB+Thh8HDYKGHn5CHnwYPP4UefkEefhk8DBF6+C0O4+E/u7SH/779f90KEofxECQO72Go0ENQyENQg4egQg/BIA/BDB6GCT0EhzwEN3gILvQQAvIQwuBhuNBDSMhDSIOHkEIPoSAPoQweRgg9hIY8hDZ4CC30EAbyEMbgYaTQQ1jIQ1iDh7BCD+EgD+EMHkYJPYSHPIQ3eAgv9BAB8hDB4GG00ENEyENEg4eIQg+RIA+RDB7GCD1EhjxENniILPQQBfIQxeBhrNBDVMhDVIOHqEIP0SAP0Qwexgk9RIc8RDd4iC70EAPyEMPgYbzQQ0zIQ0yDh5hCD7EgD7EMHiYIPcSGPMQ2eIgt9BAH8hDH4GGi0ENcyENcg4e4Qg/xIA/xDB4mCT3EhzzEN3iIL/SQAPKQwOBhstBDQshDQoOHhEIPiSAPiQwepgg9JIY8JDZ4SCz0kATykMTgYarQQ1LIQ1KDh6RCD8kgD8kMHqYJPSSHPCQ3eEgu9JAC8pDC4GG60ENKyENKg4eUQg+pIA+pDB5mCD2khjykNnhILfSQBvKQxuBhptBDWshDWoOHtEIP6SAP6QweZgk9pIc8pDd4SC/0kAHykMHgYbbQQ0bIQ0aDh4xCD5kgD5kMHuYIPWSGPGQ2eMgs9JAF8pDF4GGu0ENWyENWg4esQg/ZIA/ZDB7mCT1khzxkN3jILvSQA/KQw+BhvtBDTshDToOHnEIPuSAPuQweFgg95IY85DZ4yC30kAfykMfgYaHQQ17IQ16Dh7xCD/kgD/kMHhYJPeSHPOQ3eMgv9FAA8lDA4GGx0ENByENBg4eCQg+FIA+FDB6WCD0UhjwUNngoLPRQBPJQxOBhqdBDUchDUYOHokIPxSAPxQwelgk9FIc8FDd4KC70UALyUMLgYbnQQ0nIQ0mDh5JCD6UgD6UMHlYIPZSGPJQ2eCgt9FAG8lDG4GGl0ENZyENZg4eyQg/lIA/lDB5WCT2UhzyUN3goL/RQAfJQweBhtdBDRchDRYOHikIPlSAPlQwe1gg9VIY8VDZ4qCz0UAXyUMXgYa3QQ1XIQ1WDh6pCD9UgD9UMHtYJPVSHPFQ3eKgu9FAD8lDD4GG90ENNyENNg4eaQg+1IA+1DB42CD3UhjzUNnioLfRQB/JQx+Bho9BDXchDXYOHukIP9SAP9QweNgk91Ic81Dd4qC/00ADy0MDgYbPQQ0PIQ0ODh4ZCD40gD40MHrYIPQQgDwGDh4DQQ2PIQ2ODh61CD00gD00MHpoIPTSFPDQ1eNgm9NAM8tDM4KGZ0ENzyENzg4ftQg8tIA8tDB5aCD20hDy0NHjYIfTQCvLQyuChldBDa8hDa4OHnUIPbSAPbQwe2gg9tIU8tDV42CX00A7y0M7goZ3QQ3vIQ3uDh91CDx0gDx0MHjoIPXSEPHQ0eNgj9NAJ8tDJ4KGT0ENnyENng4e9Qg9dIA9dDB66CD10hTx0NXjYJ/TQDfLQzeChm9BDd8hDd4OH/UIPPSAPPQweegg99IQ89DR4OCD00Avy0MvgoZfQQ2/IQ2+Dh4NCD30gD30MHvoIPfSFPPQ1eDgk9NAP8tDP4KGf0EN/yEN/g4fDQg8DIA8DDB4GCD0MhDwMNHg4IvQwCPIwyOBhkNDDYMjDYIOHo0IPQyAPQwwehgg9DIU8DDV4OCb0MAzyMMzgYZjQw3DIw3CDh+NCDyMgDyMMHkYIPYyEPIw0eDgh9DAK8jDK4GGU0MNoyMNog4eTQg9jIA9jDB7GCD2MhTyMNXg4JfQwDvIwzuBhnNDDeMjDeIOH00IPEyAPEwweJgg9TIQ8TDR4OCP0MAnyMMngYZLQw2TIw2SDh7NCD1MgD1MMHqYIPUyFPEw1eDgn9DAN8jDN4GGa0MN0yMN0g4ffhR5mQB5mGDzMEHqYCXmYafBwXuhhFuRhlsHDLKGH2ZCH2QYPfwg9zIE8zDF4mCP0MBfyMNfg4YLQwzzIwzyDh3lCD/MhD/MNHv4UelgAeVhg8LBA6GEh5GGhwcNFoYdFkIdFBg+LhB4WQx4WGzz8JfSwBPKwxOBhidDDUsjDUoOHS0IPyyAPywwelgk9LIc8LDd4+FvoYQXkYYXBwwqhh5WQh5UGD5eFHlZBHlYZPKwSelgNeVht8PCP0MMayMMag4c1Qg9rIQ9rDR6uCD2sgzysM3hYJ/SwHvKw3uDhX6GHDZCHDQYPG4QeNkIeNho8XBV62AR52GTwsEnoYTPkYbPBwzWhhy2Qhy0GD1uEHrZCHrYaPFwXetgGedhm8LBN6GE75GG7wcMNoYcdkIcdBg87hB52Qh52GjzcFHrYBXnYZfCwS+hhN+Rht8HDLaGHPZCHPQYPe4Qe9kIe9ho83BZ62Ad52GfwsE/oYT/kYb/Bwx2hhwOQhwMGDweEHg5CHg4aPNwVejgEeThk8HBI6OEw5OGwwcM9oYcjkIcjBg9HhB6OQh6OGjzcF3o4Bnk4ZvBwTOjhOOThuMHDA6GHE5CHEwYPJ4QeTkIeTho8PBR6OAV5OGXwcEro4TTk4bTBwyOhhzOQhzMGD2eEHs5CHs4aPDwWejgHeThn8HBO6OF3yMPvBg9PhB7OQx7OGzycF3r4A/Lwh8HDU6GHC5CHCwYPF4Qe/oQ8/Gnw8Ezo4SLk4aLBw0Whh78gD38ZPDwXergEebhk8HBJ6OFvyMPfBg8vhB4uQx4uGzxcFnr4B/Lwj8HDS6GHK5CHKwYPV4Qe/oU8/Gvw8Ero4Srk4arBw1Whh2uQh2sGD6+FHq5DHq4bPFwXergBebhh8PBG6OEm5OGmwcNNoYdbkIdbBg9vhR5uQx5uGzzcFnq4A3m4Y/DwTujhLuThrsHDXaGHe5CHewYP74Ue7kMe7hs83Bd6eAB5eGDw8EHo4SHk4aHBw0Ohh0eQh0cGDx+FHh5DHh4bPDwWengCeXhi8PBJ6OEp5OGpwcNToYdnkIdnBg+fhR6eQx6eGzw8F3p4AXl4YfDwRejhJeThpcHDS6GHV5CHVwYPX4UeXkMeXhs8vBZ6eAN5eGPw8E3o4S3k4a3Bw1uhh3eQh3cGD9+FHt5DHt4bPLwXevgAefhg8PBD6OEj5OGjwcNHoYdPkIdPBg8/hR4+Qx4+Gzx8Fnr4Ann4YvDwS+jhK+Thq8HDV6GHb5CHbwYPvzXXNf0Oefhu8PBd6OEH5OGHwUMQoYefkIefBg8/hR5+QR5+GTwEFXr4LS7j4T+7tIf/vv1/3QoSl/EQJC7vIZjQQ1DIQ1CDh6BCD8EgD8EMHoILPQSHPAQ3eAgu9BAC8hDC4CGE0ENIyENIg4eQQg+hIA+hDB5CCj2EhjyENngILfQQBvIQxuAhlNBDWMhDWIOHsEIP4SAP4QweQgs9hIc8hDd4CC/0EAHyEMHgIYzQQ0TIQ0SDh4hCD5EgD5EMHsIKPUSGPEQ2eIgs9BAF8hDF4CGc0ENUyENUg4eoQg/RIA/RDB7CCz1EhzxEN3iILvQQA/IQw+AhgtBDTMhDTIOHmEIPsSAPsQweIgo9xIY8xDZ4iC30EAfyEMfgIZLQQ1zIQ1yDh7hCD/EgD/EMHiILPcSHPMQ3eIgv9JAA8pDA4CGK0ENCyENCg4eEQg+JIA+JDB6iCj0khjwkNnhILPSQBPKQxOAhmtBDUshDUoOHpEIPySAPyQweogs9JIc8JDd4SC70kALykMLgIYbQQ0rIQ0qDh5RCD6kgD6kMHmIKPaSGPKQ2eEgt9JAG8pDG4CGW0ENayENag4e0Qg/pIA/pDB5iCz2khzykN3hIL/SQAfKQweAhjtBDRshDRoOHjEIPmSAPmQwe4go9ZIY8ZDZ4yCz0kAXykMXgIZ7QQ1bIQ1aDh6xCD9kgD9kMHuILPWSHPGQ3eMgu9JAD8pDD4CGB0ENOyENOg4ecQg+5IA+5DB4SCj3khjzkNnjILfSQB/KQx+AhkdBDXshDXoOHvEIP+SAP+QweEgs95Ic85Dd4yC/0UADyUMDgIYnQQ0HIQ0GDh4JCD4UgD4UMHpIKPRSGPBQ2eCgs9FAE8lDE4CGZ0ENRyENRg4eiQg/FIA/FDB6SCz0UhzwUN3goLvRQAvJQwuAhhdBDSchDSYOHkkIPpSAPpQweUgo9lIY8lDZ4KC30UAbyUMbgIZXQQ1nIQ1mDh7JCD+UgD+UMHlILPZSHPJQ3eCgv9FAB8lDB4CGN0ENFyENFg4eKQg+VIA+VDB7SCj1UhjxUNnioLPRQBfJQxeAhndBDVchDVYOHqkIP1SAP1Qwe0gs9VIc8VDd4qC70UAPyUMPgIYPQQ03IQ02Dh5pCD7UgD7UMHjIKPdSGPNQ2eKgt9FAH8lDH4CGT0ENdyENdg4e6Qg/1IA/1DB4yCz3UhzzUN3ioL/TQAPLQwOAhi9BDQ8hDQ4OHhkIPjSAPjQwesgo9BCAPAYOHgNBDY8hDY4OHbEIPTSAPTQwemgg9NIU8NDV4yC700Azy0MzgoZnQQ3PIQ3ODhxxCDy0gDy0MHloIPbSEPLQ0eMgp9NAK8tDK4KGV0ENryENrg4dcQg9tIA9tDB7aCD20hTy0NXjILfTQDvLQzuChndBDe8hDe4OHPEIPHSAPHQweOgg9dIQ8dDR4yCv00Any0MngoZPQQ2fIQ2eDh3xCD10gD10MHroIPXSFPHQ1eMgv9NAN8tDN4KGb0EN3yEN3g4cCQg89IA89DB56CD30hDz0NHgoKPTQC/LQy+Chl9BDb8hDb4OHQkIPfSAPfQwe+gg99IU89DV4KCz00A/y0M/goZ/QQ3/IQ3+DhyJCDwMgDwMMHgYIPQyEPAw0eCgq9DAI8jDI4GGQ0MNgyMNgg4diQg9DIA9DDB6GCD0MhTwMNXgoLvQwDPIwzOBhmNDDcMjDcIOHEkIPIyAPIwweRgg9jIQ8jDR4KCn0MAryMMrgYZTQw2jIw2iDh1JCD2MgD2MMHsYIPYyFPIw1eCgt9DAO8jDO4GGc0MN4yMN4g4cyQg8TIA8TDB4mCD1MhDxMNHgoK/QwCfIwyeBhktDDZMjDZIOHckIPUyAPUwwepgg9TIU8TDV4KC/0MA3yMM3gYZrQw3TIw3SDhwpCDzMgDzMMHmYIPcyEPMw0eKgo9DAL8jDL4GGW0MNsyMNsg4dKQg9zIA9zDB7mCD3MhTzMNXioLPQwD/Iwz+BhntDDfMjDfIOHKkIPCyAPCwweFgg9LIQ8LDR4qCr0sAjysMjgYZHQw2LIw2KDh2pCD0sgD0sMHpYIPSyFPCw1eKgu9LAM8rDM4GGZ0MNyyMNyg4caQg8rIA8rDB5WCD2shDysNHioKfSwCvKwyuBhldDDasjDaoOHWkIPayAPawwe1gg9rIU8rDV4qC30sA7ysM7gYZ3Qw3rIw3qDhzpCDxsgDxsMHjYIPWyEPGw0eKgr9LAJ8rDJ4GGT0MNmyMNmg4d6Qg9bIA9bDB62CD1shTxsNXioL/SwDfKwzeBhm9DDdsjDdoOHBkIPOyAPOwwedgg97IQ87DR4aCj0sAvysMvgYZfQw27Iw26Dh0ZCD3sgD3sMHvYIPeyFPOw1eAgIPeyDPOwzeNgn9LAf8rDf4KGx0MMByMMBg4cDQg8HIQ8HDR6aCD0cgjwcMng4JPRwGPJw2OChqdDDEcjDEYOHI0IPRyEPRw0emgk9HIM8HDN4OCb0cBzycNzgobnQwwnIwwmDhxNCDychDycNHloIPZyCPJwyeDgl9HAa8nDa4KGl0MMZyMMZg4czQg9nIQ9nDR5aCT2cgzycM3g4J/TwO+Thd4OH1kIP5yEP5w0ezgs9/AF5+MPgoY3QwwXIwwWDhwtCD39CHv40eGgr9HAR8nDR4OGi0MNfkIe/DB7aCT1cgjxcMni4JPTwN+Thb4OH9kIPlyEPlw0eLgs9/AN5+MfgoYPQwxXIwxWDhytCD/9CHv41eOgo9HAV8nDV4OGq0MM1yMM1g4dOQg/XIQ/XDR6uCz3cgDzcMHjoLPRwE/Jw0+DhptDDLcjDLYOHLkIPtyEPtw0ebgs93IE83DF46Cr0cBfycNfg4a7Qwz3Iwz2Dh25CD/chD/cNHu4LPTyAPDwweOgu9PAQ8vDQ4OGh0MMjyMMjg4ceQg+PIQ+PDR4eCz08gTw8MXjoKfTwFPLw1ODhqdDDM8jDM4OHXkIPzyEPzw0engs9vIA8vDB46C308BLy8NLg4aXQwyvIwyuDhz5CD68hD68NHl4LPbyBPLwxeOgr9PAW8vDW4OGt0MM7yMM7g4d+Qg/vIQ/vDR7eCz18gDx8MHjoL/TwEfLw0eDho9DDJ8jDJ4OHAUIPnyEPnw0ePgs9fIE8fDF4GCj08BXy8NXg4avQwzfIwzeDh0FCD98hD98NHr4LPfyAPPwweBgs9PAT8vDT4OGn0MMvyMMvg4chQg+/xWM8/GeX9vDft/+vW0HiMR6CxOM9DBV6CAp5CGrwEFToIRjkIZjBwzChh+CQh+AGD8GFHkJAHkIYPAwXeggJeQhp8BBS6CEU5CGUwcMIoYfQkIfQBg+hhR7CQB7CGDyMFHoIC3kIa/AQVughHOQhnMHDKKGH8JCH8AYP4YUeIkAeIhg8jBZ6iAh5iGjwEFHoIRLkIZLBwxihh8iQh8gGD5GFHqJAHqIYPIwVeogKeYhq8BBV6CEa5CGawcM4oYfokIfoBg/RhR5iQB5iGDyMF3qICXmIafAQU+ghFuQhlsHDBKGH2JCH2AYPsYUe4kAe4hg8TBR6iAt5iGvwEFfoIR7kIZ7BwyShh/iQh/gGD/GFHhJAHhIYPEwWekgIeUho8JBQ6CER5CGRwcMUoYfEkIfEBg+JhR6SQB6SGDxMFXpICnlIavCQVOghGeQhmcHDNKGH5JCH5AYPyYUeUkAeUhg8TBd6SAl5SGnwkFLoIRXkIZXBwwyhh9SQh9QGD6mFHtJAHtIYPMwUekgLeUhr8JBW6CEd5CGdwcMsoYf0kIf0Bg/phR4yQB4yGDzMFnrICHnIaPCQUeghE+Qhk8HDHKGHzJCHzAYPmYUeskAeshg8zBV6yAp5yGrwkFXoIRvkIZvBwzyhh+yQh+wGD9mFHnJAHnIYPMwXesgJechp8JBT6CEX5CGXwcMCoYfckIfcBg+5hR7yQB7yGDwsFHrIC3nIa/CQV+ghH+Qhn8HDIqGH/JCH/AYP+YUeCkAeChg8LBZ6KAh5KGjwUFDooRDkoZDBwxKhh8KQh8IGD4WFHopAHooYPCwVeigKeShq8FBU6KEY5KGYwcMyoYfikIfiBg/FhR5KQB5KGDwsF3ooCXkoafBQUuihFOShlMHDCqGH0pCH0gYPpYUeykAeyhg8rBR6KAt5KGvwUFbooRzkoZzBwyqhh/KQh/IGD+WFHipAHioYPKwWeqgIeaho8FBR6KES5KGSwcMaoYfKkIfKBg+VhR6qQB6qGDysFXqoCnmoavBQVeihGuShmsHDOqGH6pCH6gYP1YUeakAeahg8rBd6qAl5qGnwUFPooRbkoZbBwwahh9qQh9oGD7WFHupAHuoYPGwUeqgLeahr8FBX6KEe5KGewcMmoYf6kIf6Bg/1hR4aQB4aGDxsFnpoCHloaPDQUOihEeShkcHDFqGHAOQhYPAQEHpoDHlobPCwVeihCeShicFDE6GHppCHpgYP24QemkEemhk8NBN6aA55aG7wsF3ooQXkoYXBQwuhh5aQh5YGDzuEHlpBHloZPLQSemgNeWht8LBT6KEN5KGNwUMboYe2kIe2Bg+7hB7aQR7aGTy0E3poD3lob/CwW+ihA+Shg8FDB6GHjpCHjgYPe4QeOkEeOhk8dBJ66Ax56GzwsFfooQvkoYvBQxehh66Qh64GD/uEHrpBHroZPHQTeugOeehu8LBf6KEH5KGHwUMPoYeekIeeBg8HhB56QR56GTz0EnroDXnobfBwUOihD+Shj8FDH6GHvpCHvgYPh4Qe+kEe+hk89BN66A956G/wcFjoYQDkYYDBwwChh4GQh4EGD0eEHgZBHgYZPAwSehgMeRhs8HBU6GEI5GGIwcMQoYehkIehBg/HhB6GQR6GGTwME3oYDnkYbvBwXOhhBORhhMHDCKGHkZCHkQYPJ4QeRkEeRhk8jBJ6GA15GG3wcFLoYQzkYYzBwxihh7GQh7EGD6eEHsZBHsYZPIwTehgPeRhv8HBa6GEC5GGCwcMEoYeJkIeJBg9nhB4mQR4mGTxMEnqYDHmYbPBwVuhhCuRhisHDFKGHqZCHqQYP54QepkEephk8TBN6mA55mG7w8LvQwwzIwwyDhxlCDzMhDzMNHs4LPcyCPMwyeJgl9DAb8jDb4OEPoYc5kIc5Bg9zhB7mQh7mGjxcEHqYB3mYZ/AwT+hhPuRhvsHDn0IPCyAPCwweFgg9LIQ8LDR4uCj0sAjysMjgYZHQw2LIw2KDh7+EHpZAHpYYPCwRelgKeVhq8HBJ6GEZ5GGZwcMyoYflkIflBg9/Cz2sgDysMHhYIfSwEvKw0uDhstDDKsjDKoOHVUIPqyEPqw0e/hF6WAN5WGPwsEboYS3kYa3BwxWhh3WQh3UGD+uEHtZDHtYbPPwr9LAB8rDB4GGD0MNGyMNGg4erQg+bIA+bDB42CT1shjxsNni4JvSwBfKwxeBhi9DDVsjDVoOH60IP2yAP2wwetgk9bIc8bDd4uCH0sAPysMPgYYfQw07Iw06Dh5tCD7sgD7sMHnYJPeyGPOw2eLgl9LAH8rDH4GGP0MNeyMNeg4fbQg/7IA/7DB72CT3shzzsN3i4I/RwAPJwwODhgNDDQcjDQYOHu0IPhyAPhwweDgk9HIY8HDZ4uCf0cATycMTg4YjQw1HIw1GDh/tCD8cgD8cMHo4JPRyHPBw3eHgg9HAC8nDC4OGE0MNJyMNJg4eHQg+nIA+nDB5OCT2chjycNnh4JPRwBvJwxuDhjNDDWcjDWYOHx0IP5yAP5wwezgk9/A55+N3g4YnQw3nIw3mDh/NCD39AHv4weHgq9HAB8nDB4OGC0MOfkIc/DR6eCT1chDxcNHi4KPTwF+ThL4OH50IPlyAPlwweLgk9/A15+Nvg4YXQw2XIw2WDh8tCD/9AHv4xeHgp9HAF8nDF4OGK0MO/kId/DR5eCT1chTxcNXi4KvRwDfJwzeDhtdDDdcjDdYOH60IPNyAPNwwe3gg93IQ83DR4uCn0cAvycMvg4a3Qw23Iw22Dh9tCD3cgD3cMHt4JPdyFPNw1eLgr9HAP8nDP4OG90MN9yMN9g4f7Qg8PIA8PDB4+CD08hDw8NHh4KPTwCPLwyODho9DDY8jDY4OHx0IPTyAPTwwePgk9PIU8PDV4eCr08Azy8Mzg4bPQw3PIw3ODh+dCDy8gDy8MHr4IPbyEPLw0eHgp9PAK8vDK4OGr0MNryMNrg4fXQg9vIA9vDB6+CT28hTy8NXh4K/TwDvLwzuDhu9DDe8jDe4OH90IPHyAPHwwefgg9fIQ8fDR4+Cj08Any8Mng4afQw2fIw2eDh89CD18gD18MHn4JPXyFPHw1ePgq9PAN8vDN4OG3Frqm3yEP3w0evgs9/IA8/DB4CCL08BPy8NPg4afQwy/Iwy+Dh6BCD7/FZzz8Z5f28N+3/69bQeIzHoLE5z0EE3oICnkIavAQVOghGOQhmMFDcKGH4JCH4AYPwYUeQkAeQhg8hBB6CAl5CGnwEFLoIRTkIZTBQ0ihh9CQh9AGD6GFHsJAHsIYPIQSeggLeQhr8BBW6CEc5CGcwUNooYfwkIfwBg/hhR4iQB4iGDyEEXqICHmIaPAQUeghEuQhksFDWKGHyJCHyAYPkYUeokAeohg8hBN6iAp5iGrwEFXoIRrkIZrBQ3ihh+iQh+gGD9GFHmJAHmIYPEQQeogJeYhp8BBT6CEW5CGWwUNEoYfYkIfYBg+xhR7iQB7iGDxEEnqIC3mIa/AQV+ghHuQhnsFDZKGH+JCH+AYP8YUeEkAeEhg8RBF6SAh5SGjwkFDoIRHkIZHBQ1Shh8SQh8QGD4mFHpJAHpIYPEQTekgKeUhq8JBU6CEZ5CGZwUN0oYfkkIfkBg/JhR5SQB5SGDzEEHpICXlIafCQUughFeQhlcFDTKGH1JCH1AYPqYUe0kAe0hg8xBJ6SAt5SGvwkFboIR3kIZ3BQ2yhh/SQh/QGD+mFHjJAHjIYPMQResgIecho8JBR6CET5CGTwUNcoYfMkIfMBg+ZhR6yQB6yGDzEE3rICnnIavCQVeghG+Qhm8FDfKGH7JCH7AYP2YUeckAechg8JBB6yAl5yGnwkFPoIRfkIZfBQ0Khh9yQh9wGD7mFHvJAHvIYPCQSesgLechr8JBX6CEf5CGfwUNioYf8kIf8Bg/5hR4KQB4KGDwkEXooCHkoaPBQUOihEOShkMFDUqGHwpCHwgYPhYUeikAeihg8JBN6KAp5KGrwUFTooRjkoZjBQ3Khh+KQh+IGD8WFHkpAHkoYPKQQeigJeShp8FBS6KEU5KGUwUNKoYfSkIfSBg+lhR7KQB7KGDykEnooC3koa/BQVuihHOShnMFDaqGH8pCH8gYP5YUeKkAeKhg8pBF6qAh5qGjwUFHooRLkoZLBQ1qhh8qQh8oGD5WFHqpAHqoYPKQTeqgKeahq8FBV6KEa5KGawUN6oYfqkIfqBg/VhR5qQB5qGDxkEHqoCXmoafBQU+ihFuShlsFDRqGH2pCH2gYPtYUe6kAe6hg8ZBJ6qAt5qGvwUFfooR7koZ7BQ2ahh/qQh/oGD/WFHhpAHhoYPGQRemgIeWho8NBQ6KER5KGRwUNWoYcA5CFg8BAQemgMeWhs8JBN6KEJ5KGJwUMToYemkIemBg/ZhR6aQR6aGTw0E3poDnlobvCQQ+ihBeShhcFDC6GHlpCHlgYPOYUeWkEeWhk8tBJ6aA15aG3wkEvooQ3koY3BQxuhh7aQh7YGD7mFHtpBHtoZPLQTemgPeWhv8JBH6KED5KGDwUMHoYeOkIeOBg95hR46QR46GTx0EnroDHnobPCQT+ihC+Shi8FDF6GHrpCHrgYP+YUeukEeuhk8dBN66A556G7wUEDooQfkoYfBQw+hh56Qh54GDwWFHnpBHnoZPPQSeugNeeht8FBI6KEP5KGPwUMfoYe+kIe+Bg+FhR76QR76GTz0E3roD3nob/BQROhhAORhgMHDAKGHgZCHgQYPRYUeBkEeBhk8DBJ6GAx5GGzwUEzoYQjkYYjBwxChh6GQh6EGD8WFHoZBHoYZPAwTehgOeRhu8FBC6GEE5GGEwcMIoYeRkIeRBg8lhR5GQR5GGTyMEnoYDXkYbfBQSuhhDORhjMHDGKGHsZCHsQYPpYUexkEexhk8jBN6GA95GG/wUEboYQLkYYLBwwShh4mQh4kGD2WFHiZBHiYZPEwSepgMeZhs8FBO6GEK5GGKwcMUoYepkIepBg/lhR6mQR6mGTxME3qYDnmYbvBQQehhBuRhhsHDDKGHmZCHmQYPFYUeZkEeZhk8zBJ6mA15mG3wUEnoYQ7kYY7Bwxyhh7mQh7kGD5WFHuZBHuYZPMwTepgPeZhv8FBF6GEB5GGBwcMCoYeFkIeFBg9VhR4WQR4WGTwsEnpYDHlYbPBQTehhCeRhicHDEqGHpZCHpQYP1YUelkEelhk8LBN6WA55WG7wUEPoYQXkYYXBwwqhh5WQh5UGDzWFHlZBHlYZPKwSelgNeVht8FBL6GEN5GGNwcMaoYe1kIe1Bg+1hR7WQR7WGTysE3pYD3lYb/BQR+hhA+Rhg8HDBqGHjZCHjQYPdYUeNkEeNhk8bBJ62Ax52GzwUE/oYQvkYYvBwxahh62Qh60GD/WFHrZBHrYZPGwTetgOedhu8NBA6GEH5GGHwcMOoYedkIedBg8NhR52QR52GTzsEnrYDXnYbfDQSOhhD+Rhj8HDHqGHvZCHvQYPAaGHfZCHfQYP+4Qe9kMe9hs8NBZ6OAB5OGDwcEDo4SDk4aDBQxOhh0OQh0MGD4eEHg5DHg4bPDQVejgCeThi8HBE6OEo5OGowUMzoYdjkIdjBg/HhB6OQx6OGzw0F3o4AXk4YfBwQujhJOThpMFDC6GHU5CHUwYPp4QeTkMeThs8tBR6OAN5OGPwcEbo4Szk4azBQyuhh3OQh3MGD+eEHn6HPPxu8NBa6OE85OG8wcN5oYc/IA9/GDy0EXq4AHm4YPBwQejhT8jDnwYPbYUeLkIeLho8XBR6+Avy8JfBQzuhh0uQh0sGD5eEHv6GPPxt8NBe6OEy5OGywcNloYd/IA//GDx0EHq4Anm4YvBwRejhX8jDvwYPHYUerkIerho8XBV6uAZ5uGbw0Eno4Trk4brBw3WhhxuQhxsGD52FHm5CHm4aPNwUergFebhl8NBF6OE25OG2wcNtoYc7kIc7Bg9dhR7uQh7uGjzcFXq4B3m4Z/DQTejhPuThvsHDfaGHB5CHBwYP3YUeHkIeHho8PBR6eAR5eGTw0EPo4THk4bHBw2OhhyeQhycGDz2FHp5CHp4aPDwVengGeXhm8NBL6OE55OG5wcNzoYcXkIcXBg+9hR5eQh5eGjy8FHp4BXl4ZfDQR+jhNeThtcHDa6GHN5CHNwYPfYUe3kIe3ho8vBV6eAd5eGfw0E/o4T3k4b3Bw3uhhw+Qhw8GD/2FHj5CHj4aPHwUevgEefhk8DBA6OEz5OGzwcNnoYcvkIcvBg8DhR6+Qh6+Gjx8FXr4Bnn4ZvAwSOjhO+Thu8HDd6GHH5CHHwYPg4UefkIefho8/BR6+AV5+GXwMETo4bcEjIf/7NIe/vv2/3UrSALGQ5AEvIehQg9BIQ9BDR6CCj0EgzwEM3gYJvQQHPIQ3OAhuNBDCMhDCIOH4UIPISEPIQ0eQgo9hII8hDJ4GCH0EBryENrgIbTQQxjIQxiDh5FCD2EhD2ENHsIKPYSDPIQzeBgl9BAe8hDe4CG80EMEyEMEg4fRQg8RIQ8RDR4iCj1EgjxEMngYI/QQGfIQ2eAhstBDFMhDFIOHsUIPUSEPUQ0eogo9RIM8RDN4GCf0EB3yEN3gIbrQQwzIQwyDh/FCDzEhDzENHmIKPcSCPMQyeJgg9BAb8hDb4CG20EMcyEMcg4eJQg9xIQ9xDR7iCj3EgzzEM3iYJPQQH/IQ3+AhvtBDAshDAoOHyUIPCSEPCQ0eEgo9JII8JDJ4mCL0kBjykNjgIbHQQxLIQxKDh6lCD0khD0kNHpIKPSSDPCQzeJgm9JAc8pDc4CG50EMKyEMKg4fpQg8pIQ8pDR5SCj2kgjykMniYIfSQGvKQ2uAhtdBDGshDGoOHmUIPaSEPaQ0e0go9pIM8pDN4mCX0kB7ykN7gIb3QQwbIQwaDh9lCDxkhDxkNHjIKPWSCPGQyeJgj9JAZ8pDZ4CGz0EMWyEMWg4e5Qg9ZIQ9ZDR6yCj1kgzxkM3iYJ/SQHfKQ3eAhu9BDDshDDoOH+UIPOSEPOQ0ecgo95II85DJ4WCD0kBvykNvgIbfQQx7IQx6Dh4VCD3khD3kNHvIKPeSDPOQzeFgk9JAf8pDf4CG/0EMByEMBg4fFQg8FIQ8FDR4KCj0UgjwUMnhYIvRQGPJQ2OChsNBDEchDEYOHpUIPRSEPRQ0eigo9FIM8FDN4WCb0UBzyUNzgobjQQwnIQwmDh+VCDyUhDyUNHkoKPZSCPJQyeFgh9FAa8lDa4KG00EMZyEMZg4eVQg9lIQ9lDR7KCj2UgzyUM3hYJfRQHvJQ3uChvNBDBchDBYOH1UIPFSEPFQ0eKgo9VII8VDJ4WCP0UBnyUNngobLQQxXIQxWDh7VCD1UhD1UNHqoKPVSDPFQzeFgn9FAd8lDd4KG60EMNyEMNg4f1Qg81IQ81DR5qCj3UgjzUMnjYIPRQG/JQ2+ChttBDHchDHYOHjUIPdSEPdQ0e6go91IM81DN42CT0UB/yUN/gob7QQwPIQwODh81CDw0hDw0NHhoKPTSCPDQyeNgi9BCAPAQMHgJCD40hD40NHrYKPTSBPDQxeGgi9NAU8tDU4GGb0EMzyEMzg4dmQg/NIQ/NDR62Cz20gDy0MHhoIfTQEvLQ0uBhh9BDK8hDK4OHVkIPrSEPrQ0edgo9tIE8tDF4aCP00Bby0NbgYZfQQzvIQzuDh3ZCD+0hD+0NHnYLPXSAPHQweOgg9NAR8tDR4GGP0EMnyEMng4dOQg+dIQ+dDR72Cj10gTx0MXjoIvTQFfLQ1eBhn9BDN8hDN4OHbkIP3SEP3Q0e9gs99IA89DB46CH00BPy0NPg4YDQQy/IQy+Dh15CD70hD70NHg4KPfSBPPQxeOgj9NAX8tDX4OGQ0EM/yEM/g4d+Qg/9IQ/9DR4OCz0MgDwMMHgYIPQwEPIw0ODhiNDDIMjDIIOHQUIPgyEPgw0ejgo9DIE8DDF4GCL0MBTyMNTg4ZjQwzDIwzCDh2FCD8MhD8MNHo4LPYyAPIwweBgh9DAS8jDS4OGE0MMoyMMog4dRQg+jIQ+jDR5OCj2MgTyMMXgYI/QwFvIw1uDhlNDDOMjDOIOHcUIP4yEP4w0eTgs9TIA8TDB4mCD0MBHyMNHg4YzQwyTIwySDh0lCD5MhD5MNHs4KPUyBPEwxeJgi9DAV8jDV4OGc0MM0yMM0g4dpQg/TIQ/TDR5+F3qYAXmYYfAwQ+hhJuRhpsHDeaGHWZCHWQYPs4QeZkMeZhs8/CH0MAfyMMfgYY7Qw1zIw1yDhwtCD/MgD/MMHuYJPcyHPMw3ePhT6GEB5GGBwcMCoYeFkIeFBg8XhR4WQR4WGTwsEnpYDHlYbPDwl9DDEsjDEoOHJUIPSyEPSw0eLgk9LIM8LDN4WCb0sBzysNzg4W+hhxWQhxUGDyuEHlZCHlYaPFwWelgFeVhl8LBK6GE15GG1wcM/Qg9rIA9rDB7WCD2shTysNXi4IvSwDvKwzuBhndDDesjDeoOHf4UeNkAeNhg8bBB62Ah52GjwcFXoYRPkYZPBwyahh82Qh80GD9eEHrZAHrYYPGwRetgKedhq8HBd6GEb5GGbwcM2oYftkIftBg83hB52QB52GDzsEHrYCXnYafBwU+hhF+Rhl8HDLqGH3ZCH3QYPt4Qe9kAe9hg87BF62At52GvwcFvoYR/kYZ/Bwz6hh/2Qh/0GD3eEHg5AHg4YPBwQejgIeTho8HBX6OEQ5OGQwcMhoYfDkIfDBg/3hB6OQB6OGDwcEXo4Cnk4avBwX+jhGOThmMHDMaGH45CH4wYPD4QeTkAeThg8nBB6OAl5OGnw8FDo4RTk4ZTBwymhh9OQh9MGD4+EHs5AHs4YPJwRejgLeThr8PBY6OEc5OGcwcM5oYffIQ+/Gzw8EXo4D3k4b/BwXujhD8jDHwYPT4UeLkAeLhg8XBB6+BPy8KfBwzOhh4uQh4sGDxeFHv6CPPxl8PBc6OES5OGSwcMloYe/IQ9/Gzy8EHq4DHm4bPBwWejhH8jDPwYPL4UerkAerhg8XBF6+Bfy8K/Bwyuhh6uQh6sGD1eFHq5BHq4ZPLwWergOebhu8HBd6OEG5OGGwcMboYebkIebBg83hR5uQR5uGTy8FXq4DXm4bfBwW+jhDuThjsHDO6GHu5CHuwYPd4Ue7kEe7hk8vBd6uA95uG/wcF/o4QHk4YHBwwehh4eQh4cGDw+FHh5BHh4ZPHwUengMeXhs8PBY6OEJ5OGJwcMnoYenkIenBg9PhR6eQR6eGTx8Fnp4Dnl4bvDwXOjhBeThhcHDF6GHl5CHlwYPL4UeXkEeXhk8fBV6eA15eG3w8Fro4Q3k4Y3Bwzehh7eQh7cGD2+FHt5BHt4ZPHwXengPeXhv8PBe6OED5OGDwcMPoYePkIePBg8fhR4+QR4+GTz8FHr4DHn4bPDwWejhC+Thi8HDL6GHr5CHrwYPX4UevkEevhk8/NZS1/Q75OG7wcN3oYcfkIcfBg9BhB5+Qh5+Gjz8FHr4BXn4ZfAQVOjht4SMh//s0h7++/b/dStIQsZDkIS8h2BCD0EhD0ENHoIKPQSDPAQzeAgu9BAc8hDc4CG40EMIyEMIg4cQQg8hIQ8hDR5CCj2EgjyEMngIKfQQGvIQ2uAhtNBDGMhDGIOHUEIPYSEPYQ0ewgo9hIM8hDN4CC30EB7yEN7gIbzQQwTIQwSDhzBCDxEhDxENHiIKPUSCPEQyeAgr9BAZ8hDZ4CGy0EMUyEMUg4dwQg9RIQ9RDR6iCj1EgzxEM3gIL/QQHfIQ3eAhutBDDMhDDIOHCEIPMSEPMQ0eYgo9xII8xDJ4iCj0EBvyENvgIbbQQxzIQxyDh0hCD3EhD3ENHuIKPcSDPMQzeIgs9BAf8hDf4CG+0EMCyEMCg4coQg8JIQ8JDR4SCj0kgjwkMniIKvSQGPKQ2OAhsdBDEshDEoOHaEIPSSEPSQ0ekgo9JIM8JDN4iC70kBzykNzgIbnQQwrIQwqDhxhCDykhDykNHlIKPaSCPKQyeIgp9JAa8pDa4CG10EMayEMag4dYQg9pIQ9pDR7SCj2kgzykM3iILfSQHvKQ3uAhvdBDBshDBoOHOEIPGSEPGQ0eMgo9ZII8ZDJ4iCv0kBnykNngIbPQQxbIQxaDh3hCD1khD1kNHrIKPWSDPGQzeIgv9JAd8pDd4CG70EMOyEMOg4cEQg85IQ85DR5yCj3kgjzkMnhIKPSQG/KQ2+Aht9BDHshDHoOHREIPeSEPeQ0e8go95IM85DN4SCz0kB/ykN/gIb/QQwHIQwGDhyRCDwUhDwUNHgoKPRSCPBQyeEgq9FAY8lDY4KGw0EMRyEMRg4dkQg9FIQ9FDR6KCj0UgzwUM3hILvRQHPJQ3OChuNBDCchDCYOHFEIPJSEPJQ0eSgo9lII8lDJ4SCn0UBryUNrgobTQQxnIQxmDh1RCD2UhD2UNHsoKPZSDPJQzeEgt9FAe8lDe4KG80EMFyEMFg4c0Qg8VIQ8VDR4qCj1UgjxUMnhIK/RQGfJQ2eChstBDFchDFYOHdEIPVSEPVQ0eqgo9VIM8VDN4SC/0UB3yUN3gobrQQw3IQw2DhwxCDzUhDzUNHmoKPdSCPNQyeMgo9FAb8lDb4KG20EMdyEMdg4dMQg91IQ91DR7qCj3UgzzUM3jILPRQH/JQ3+ChvtBDA8hDA4OHLEIPDSEPDQ0eGgo9NII8NDJ4yCr0EIA8BAweAkIPjSEPjQ0esgk9NIE8NDF4aCL00BTy0NTgIbvQQzPIQzODh2ZCD80hD80NHnIIPbSAPLQweGgh9NAS8tDS4CGn0EMryEMrg4dWQg+tIQ+tDR5yCT20gTy0MXhoI/TQFvLQ1uAht9BDO8hDO4OHdkIP7SEP7Q0e8gg9dIA8dDB46CD00BHy0NHgIa/QQyfIQyeDh05CD50hD50NHvIJPXSBPHQxeOgi9NAV8tDV4CG/0EM3yEM3g4duQg/dIQ/dDR4KCD30gDz0MHjoIfTQE/LQ0+ChoNBDL8hDL4OHXkIPvSEPvQ0eCgk99IE89DF46CP00Bfy0NfgobDQQz/IQz+Dh35CD/0hD/0NHooIPQyAPAwweBgg9DAQ8jDQ4KGo0MMgyMMgg4dBQg+DIQ+DDR6KCT0MgTwMMXgYIvQwFPIw1OChuNDDMMjDMIOHYUIPwyEPww0eSgg9jIA8jDB4GCH0MBLyMNLgoaTQwyjIwyiDh1FCD6MhD6MNHkoJPYyBPIwxeBgj9DAW8jDW4KG00MM4yMM4g4dxQg/jIQ/jDR7KCD1MgDxMMHiYIPQwEfIw0eChrNDDJMjDJIOHSUIPkyEPkw0eygk9TIE8TDF4mCL0MBXyMNXgobzQwzTIwzSDh2lCD9MhD9MNHioIPcyAPMwweJgh9DAT8jDT4KGi0MMsyMMsg4dZQg+zIQ+zDR4qCT3MgTzMMXiYI/QwF/Iw1+ChstDDPMjDPIOHeUIP8yEP8w0eqgg9LIA8LDB4WCD0sBDysNDgoarQwyLIwyKDh0VCD4shD4sNHqoJPSyBPCwxeFgi9LAU8rDU4KG60MMyyMMyg4dlQg/LIQ/LDR5qCD2sgDysMHhYIfSwEvKw0uChptDDKsjDKoOHVUIPqyEPqw0eagk9rIE8rDF4WCP0sBbysNbgobbQwzrIwzqDh3VCD+shD+sNHuoIPWyAPGwweNgg9LAR8rDR4KGu0MMmyMMmg4dNQg+bIQ+bDR7qCT1sgTxsMXjYIvSwFfKw1eChvtDDNsjDNoOHbUIP2yEP2w0eGgg97IA87DB42CH0sBPysNPgoaHQwy7Iwy6Dh11CD7shD7sNHhoJPeyBPOwxeNgj9LAX8rDX4CEg9LAP8rDP4GGf0MN+yMN+g4fGQg8HIA8HDB4OCD0chDwcNHhoIvRwCPJwyODhkNDDYcjDYYOHpkIPRyAPRwwejgg9HIU8HDV4aCb0cAzycMzg4ZjQw3HIw3GDh+ZCDycgDycMHk4IPZyEPJw0eGgh9HAK8nDK4OGU0MNpyMNpg4eWQg9nIA9nDB7OCD2chTycNXhoJfRwDvJwzuDhnNDD75CH3w0eWgs9nIc8nDd4OC/08Afk4Q+DhzZCDxcgDxcMHi4IPfwJefjT4KGt0MNFyMNFg4eLQg9/QR7+MnhoJ/RwCfJwyeDhktDD35CHvw0e2gs9XIY8XDZ4uCz08A/k4R+Dhw5CD1cgD1cMHq4IPfwLefjX4KGj0MNVyMNVg4erQg/XIA/XDB46CT1chzxcN3i4LvRwA/Jww+Chs9DDTcjDTYOHm0IPtyAPtwweugg93IY83DZ4uC30cAfycMfgoavQw13Iw12Dh7tCD/cgD/cMHroJPdyHPNw3eLgv9PAA8vDA4KG70MNDyMNDg4eHQg+PIA+PDB56CD08hjw8Nnh4LPTwBPLwxOChp9DDU8jDU4OHp0IPzyAPzwweegk9PIc8PDd4eC708ALy8MLgobfQw0vIw0uDh5dCD68gD68MHvoIPbyGPLw2eHgt9PAG8vDG4KGv0MNbyMNbg4e3Qg/vIA/vDB76CT28hzy8N3h4L/TwAfLwweChv9DDR8jDR4OHj0IPnyAPnwweBgg9fIY8fDZ4+Cz08AXy8MXgYaDQw1fIw1eDh69CD98gD98MHgYJPXyHPHw3ePgu9PAD8vDD4GGw0MNPyMNPg4efQg+/IA+/DB6GCD38lojx8J9d2sN/3/6/bgVJxHgIkoj3MFToISjkIajBQ1Chh2CQh2AGD8OEHoJDHoIbPAQXeggBeQhh8DBc6CEk5CGkwUNIoYdQkIdQBg8jhB5CQx5CGzyEFnoIA3kIY/AwUughLOQhrMFDWKGHcJCHcAYPo4QewkMewhs8hBd6iAB5iGDwMFroISLkIaLBQ0Shh0iQh0gGD2OEHiJDHiIbPEQWeogCeYhi8DBW6CEq5CGqwUNUoYdokIdoBg/jhB6iQx6iGzxEF3qIAXmIYfAwXughJuQhpsFDTKGHWJCHWAYPE4QeYkMeYhs8xBZ6iAN5iGPwMFHoIS7kIa7BQ1yhh3iQh3gGD5OEHuJDHuIbPMQXekgAeUhg8DBZ6CEh5CGhwUNCoYdEkIdEBg9ThB4SQx4SGzwkFnpIAnlIYvAwVeghKeQhqcFDUqGHZJCHZAYP04QekkMekhs8JBd6SAF5SGHwMF3oISXkIaXBQ0qhh1SQh1QGDzOEHlJDHlIbPKQWekgDeUhj8DBT6CEt5CGtwUNaoYd0kId0Bg+zhB7SQx7SGzykF3rIAHnIYPAwW+ghI+Qho8FDRqGHTJCHTAYPc4QeMkMeMhs8ZBZ6yAJ5yGLwMFfoISvkIavBQ1ahh2yQh2wGD/OEHrJDHrIbPGQXesgBechh8DBf6CEn5CGnwUNOoYdckIdcBg8LhB5yQx5yGzzkFnrIA3nIY/CwUOghL+Qhr8FDXqGHfJCHfAYPi4Qe8kMe8hs85Bd6KAB5KGDwsFjooSDkoaDBQ0Ghh0KQh0IGD0uEHgpDHgobPBQWeigCeShi8LBU6KEo5KGowUNRoYdikIdiBg/LhB6KQx6KGzwUF3ooAXkoYfCwXOihJOShpMFDSaGHUpCHUgYPK4QeSkMeShs8lBZ6KAN5KGPwsFLooSzkoazBQ1mhh3KQh3IGD6uEHspDHsobPJQXeqgAeahg8LBa6KEi5KGiwUNFoYdKkIdKBg9rhB4qQx4qGzxUFnqoAnmoYvCwVuihKuShqsFDVaGHapCHagYP64QeqkMeqhs8VBd6qAF5qGHwsF7ooSbkoabBQ02hh1qQh1oGDxuEHmpDHmobPNQWeqgDeahj8LBR6KEu5KGuwUNdoYd6kId6Bg+bhB7qQx7qGzzUF3poAHloYPCwWeihIeShocFDQ6GHRpCHRgYPW4QeApCHgMFDQOihMeShscHDVqGHJpCHJgYPTYQemkIemho8bBN6aAZ5aGbw0EzooTnkobnBw3ahhxaQhxYGDy2EHlpCHloaPOwQemgFeWhl8NBK6KE15KG1wcNOoYc2kIc2Bg9thB7aQh7aGjzsEnpoB3loZ/DQTuihPeShvcHDbqGHDpCHDgYPHYQeOkIeOho87BF66AR56GTw0EnooTPkobPBw16hhy6Qhy4GD12EHrpCHroaPOwTeugGeehm8NBN6KE75KG7wcN+oYcekIceBg89hB56Qh56GjwcEHroBXnoZfDQS+ihN+Sht8HDQaGHPpCHPgYPfYQe+kIe+ho8HBJ66Ad56Gfw0E/ooT/kob/Bw2GhhwGQhwEGDwOEHgZCHgYaPBwRehgEeRhk8DBI6GEw5GGwwcNRoYchkIchBg9DhB6GQh6GGjwcE3oYBnkYZvAwTOhhOORhuMHDcaGHEZCHEQYPI4QeRkIeRho8nBB6GAV5GGXwMEroYTTkYbTBw0mhhzGQhzEGD2OEHsZCHsYaPJwSehgHeRhn8DBO6GE85GG8wcNpoYcJkIcJBg8ThB4mQh4mGjycEXqYBHmYZPAwSehhMuRhssHDWaGHKZCHKQYPU4QepkIepho8nBN6mAZ5mGbwME3oYTrkYbrBw+9CDzMgDzMMHmYIPcyEPMw0eDgv9DAL8jDL4GGW0MNsyMNsg4c/hB7mQB7mGDzMEXqYC3mYa/BwQehhHuRhnsHDPKGH+ZCH+QYPfwo9LIA8LDB4WCD0sBDysNDg4aLQwyLIwyKDh0VCD4shD4sNHv4SelgCeVhi8LBE6GEp5GGpwcMloYdlkIdlBg/LhB6WQx6WGzz8LfSwAvKwwuBhhdDDSsjDSoOHy0IPqyAPqwweVgk9rIY8rDZ4+EfoYQ3kYY3Bwxqhh7WQh7UGD1eEHtZBHtYZPKwTelgPeVhv8PCv0MMGyMMGg4cNQg8bIQ8bDR6uCj1sgjxsMnjYJPSwGfKw2eDhmtDDFsjDFoOHLUIPWyEPWw0ergs9bIM8bDN42Cb0sB3ysN3g4YbQww7Iww6Dhx1CDzshDzsNHm4KPeyCPOwyeNgl9LAb8rDb4OGW0MMeyMMeg4c9Qg97IQ97DR5uCz3sgzzsM3jYJ/SwH/Kw3+DhjtDDAcjDAYOHA0IPByEPBw0e7go9HII8HDJ4OCT0cBjycNjg4Z7QwxHIwxGDhyNCD0chD0cNHu4LPRyDPBwzeDgm9HAc8nDc4OGB0MMJyMMJg4cTQg8nIQ8nDR4eCj2cgjycMng4JfRwGvJw2uDhkdDDGcjDGYOHM0IPZyEPZw0eHgs9nIM8nDN4OCf08Dvk4XeDhydCD+chD+cNHs4LPfwBefjD4OGp0MMFyMMFg4cLQg9/Qh7+NHh4JvRwEfJw0eDhotDDX5CHvwwengs9XII8XDJ4uCT08Dfk4W+DhxdCD5chD5cNHi4LPfwDefjH4OGl0MMVyMMVg4crQg//Qh7+NXh4JfRwFfJw1eDhqtDDNcjDNYOH10IP1yEP1w0ergs93IA83DB4eCP0cBPycNPg4abQwy3Iwy2Dh7dCD7chD7cNHm4LPdyBPNwxeHgn9HAX8nDX4OGu0MM9yMM9g4f3Qg/3IQ/3DR7uCz08gDw8MHj4IPTwEPLw0ODhodDDI8jDI4OHj0IPjyEPjw0eHgs9PIE8PDF4+CT08BTy8NTg4anQwzPIwzODh89CD88hD88NHp4LPbyAPLwwePgi9PAS8vDS4OGl0MMryMMrg4evQg+vIQ+vDR5eCz28gTy8MXj4JvTwFvLw1uDhrdDDO8jDO4OH70IP7yEP7w0e3gs9fIA8fDB4+CH08PF/6pClxf95uf//3393+Gjw8FHo4dP/1CHb/+2Q+f/p8Mng4afQw2fIw2eDh89CD18gD18MHn4JPXyFPHw1ePgq9PAN8vDN4OG3Vrqm3yEP3w0evgs9/IA8/DB4CCL08BPy8NPg4afQwy/Iwy+Dh6BCD78lZjz8Z5f28N+3/69bQRIzHoIk5j0EE3oICnkIavAQVOghGOQhmMFDcKGH4JCH4AYPwYUeQkAeQhg8hBB6CAl5CGnwEFLoIRTkIZTBQ0ihh9CQh9AGD6GFHsJAHsIYPIQSeggLeQhr8BBW6CEc5CGcwUNooYfwkIfwBg/hhR4iQB4iGDyEEXqICHmIaPAQUeghEuQhksFDWKGHyJCHyAYPkYUeokAeohg8hBN6iAp5iGrwEFXoIRrkIZrBQ3ihh+iQh+gGD9GFHmJAHmIYPEQQeogJeYhp8BBT6CEW5CGWwUNEoYfYkIfYBg+xhR7iQB7iGDxEEnqIC3mIa/AQV+ghHuQhnsFDZKGH+JCH+AYP8YUeEkAeEhg8RBF6SAh5SGjwkFDoIRHkIZHBQ1Shh8SQh8QGD4mFHpJAHpIYPEQTekgKeUhq8JBU6CEZ5CGZwUN0oYfkkIfkBg/JhR5SQB5SGDzEEHpICXlIafCQUughFeQhlcFDTKGH1JCH1AYPqYUe0kAe0hg8xBJ6SAt5SGvwkFboIR3kIZ3BQ2yhh/SQh/QGD+mFHjJAHjIYPMQResgIecho8JBR6CET5CGTwUNcoYfMkIfMBg+ZhR6yQB6yGDzEE3rICnnIavCQVeghG+Qhm8FDfKGH7JCH7AYP2YUeckAechg8JBB6yAl5yGnwkFPoIRfkIZfBQ0Khh9yQh9wGD7mFHvJAHvIYPCQSesgLechr8JBX6CEf5CGfwUNioYf8kIf8Bg/5hR4KQB4KGDwkEXooCHkoaPBQUOihEOShkMFDUqGHwpCHwgYPhYUeikAeihg8JBN6KAp5KGrwUFTooRjkoZjBQ3Khh+KQh+IGD8WFHkpAHkoYPKQQeigJeShp8FBS6KEU5KGUwUNKoYfSkIfSBg+lhR7KQB7KGDykEnooC3koa/BQVuihHOShnMFDaqGH8pCH8gYP5YUeKkAeKhg8pBF6qAh5qGjwUFHooRLkoZLBQ1qhh8qQh8oGD5WFHqpAHqoYPKQTeqgKeahq8FBV6KEa5KGawUN6oYfqkIfqBg/VhR5qQB5qGDxkEHqoCXmoafBQU+ihFuShlsFDRqGH2pCH2gYPtYUe6kAe6hg8ZBJ6qAt5qGvwUFfooR7koZ7BQ2ahh/qQh/oGD/WFHhpAHhoYPGQRemgIeWho8NBQ6KER5KGRwUNWoYcA5CFg8BAQemgMeWhs8JBN6KEJ5KGJwUMToYemkIemBg/ZhR6aQR6aGTw0E3poDnlobvCQQ+ihBeShhcFDC6GHlpCHlgYPOYUeWkEeWhk8tBJ6aA15aG3wkEvooQ3koY3BQxuhh7aQh7YGD7mFHtpBHtoZPLQTemgPeWhv8JBH6KED5KGDwUMHoYeOkIeOBg95hR46QR46GTx0EnroDHnobPCQT+ihC+Shi8FDF6GHrpCHrgYP+YUeukEeuhk8dBN66A556G7wUEDooQfkoYfBQw+hh56Qh54GDwWFHnpBHnoZPPQSeugNeeht8FBI6KEP5KGPwUMfoYe+kIe+Bg+FhR76QR76GTz0E3roD3nob/BQROhhAORhgMHDAKGHgZCHgQYPRYUeBkEeBhk8DBJ6GAx5GGzwUEzoYQjkYYjBwxChh6GQh6EGD8WFHoZBHoYZPAwTehgOeRhu8FBC6GEE5GGEwcMIoYeRkIeRBg8lhR5GQR5GGTyMEnoYDXkYbfBQSuhhDORhjMHDGKGHsZCHsQYPpYUexkEexhk8jBN6GA95GG/wUEboYQLkYYLBwwShh4mQh4kGD2WFHiZBHiYZPEwSepgMeZhs8FBO6GEK5GGKwcMUoYepkIepBg/lhR6mQR6mGTxME3qYDnmYbvBQQehhBuRhhsHDDKGHmZCHmQYPFYUeZkEeZhk8zBJ6mA15mG3wUEnoYQ7kYY7Bwxyhh7mQh7kGD5WFHuZBHuYZPMwTepgPeZhv8FBF6GEB5GGBwcMCoYeFkIeFBg9VhR4WQR4WGTwsEnpYDHlYbPBQTehhCeRhicHDEqGHpZCHpQYP1YUelkEelhk8LBN6WA55WG7wUEPoYQXkYYXBwwqhh5WQh5UGDzWFHlZBHlYZPKwSelgNeVht8FBL6GEN5GGNwcMaoYe1kIe1Bg+1hR7WQR7WGTysE3pYD3lYb/BQR+hhA+Rhg8HDBqGHjZCHjQYPdYUeNkEeNhk8bBJ62Ax52GzwUE/oYQvkYYvBwxahh62Qh60GD/WFHrZBHrYZPGwTetgOedhu8NBA6GEH5GGHwcMOoYedkIedBg8NhR52QR52GTzsEnrYDXnYbfDQSOhhD+Rhj8HDHqGHvZCHvQYPAaGHfZCHfQYP+4Qe9kMe9hs8NBZ6OAB5OGDwcEDo4SDk4aDBQxOhh0OQh0MGD4eEHg5DHg4bPDQVejgCeThi8HBE6OEo5OGowUMzoYdjkIdjBg/HhB6OQx6OGzw0F3o4AXk4YfBwQujhJOThpMFDC6GHU5CHUwYPp4QeTkMeThs8tBR6OAN5OGPwcEbo4Szk4azBQyuhh3OQh3MGD+eEHn6HPPxu8NBa6OE85OG8wcN5oYc/IA9/GDy0EXq4AHm4YPBwQejhT8jDnwYPbYUeLkIeLho8XBR6+Avy8JfBQzuhh0uQh0sGD5eEHv6GPPxt8NBe6OEy5OGywcNloYd/IA//GDx0EHq4Anm4YvBwRejhX8jDvwYPHYUerkIerho8XBV6uAZ5uGbw0Eno4Trk4brBw3WhhxuQhxsGD52FHm5CHm4aPNwUergFebhl8NBF6OE25OG2wcNtoYc7kIc7Bg9dhR7uQh7uGjzcFXq4B3m4Z/DQTejhPuThvsHDfaGHB5CHBwYP3YUeHkIeHho8PBR6eAR5eGTw0EPo4THk4bHBw2OhhyeQhycGDz2FHp5CHp4aPDwVengGeXhm8NBL6OE55OG5wcNzoYcXkIcXBg+9hR5eQh5eGjy8FHp4BXl4ZfDQR+jhNeThtcHDa6GHN5CHNwYPfYUe3kIe3ho8vBV6eAd5eGfw0E/o4T3k4b3Bw3uhhw+Qhw8GD/2FHj5CHj4aPHwUevgEefhk8DBA6OEz5OGzwcNnoYcvkIcvBg8DhR6+Qh6+Gjx8FXr4Bnn4ZvAwSOjhO+Thu8HDd6GHH5CHHwYPg4UefkIefho8/BR6+AV5+GXwMETo4bckjIf/7NIe/vv2/3UrSBLGQ5AkvIehQg9BIQ9BDR6CCj0EgzwEM3gYJvQQHPIQ3OAhuNBDCMhDCIOH4UIPISEPIQ0eQgo9hII8hDJ4GCH0EBryENrgIbTQQxjIQxiDh5FCD2EhD2ENHsIKPYSDPIQzeBgl9BAe8hDe4CG80EMEyEMEg4fRQg8RIQ8RDR4iCj1EgjxEMngYI/QQGfIQ2eAhstBDFMhDFIOHsUIPUSEPUQ0eogo9RIM8RDN4GCf0EB3yEN3gIbrQQwzIQwyDh/FCDzEhDzENHmIKPcSCPMQyeJgg9BAb8hDb4CG20EMcyEMcg4eJQg9xIQ9xDR7iCj3EgzzEM3iYJPQQH/IQ3+AhvtBDAshDAoOHyUIPCSEPCQ0eEgo9JII8JDJ4mCL0kBjykNjgIbHQQxLIQxKDh6lCD0khD0kNHpIKPSSDPCQzeJgm9JAc8pDc4CG50EMKyEMKg4fpQg8pIQ8pDR5SCj2kgjykMniYIfSQGvKQ2uAhtdBDGshDGoOHmUIPaSEPaQ0e0go9pIM8pDN4mCX0kB7ykN7gIb3QQwbIQwaDh9lCDxkhDxkNHjIKPWSCPGQyeJgj9JAZ8pDZ4CGz0EMWyEMWg4e5Qg9ZIQ9ZDR6yCj1kgzxkM3iYJ/SQHfKQ3eAhu9BDDshDDoOH+UIPOSEPOQ0ecgo95II85DJ4WCD0kBvykNvgIbfQQx7IQx6Dh4VCD3khD3kNHvIKPeSDPOQzeFgk9JAf8pDf4CG/0EMByEMBg4fFQg8FIQ8FDR4KCj0UgjwUMnhYIvRQGPJQ2OChsNBDEchDEYOHpUIPRSEPRQ0eigo9FIM8FDN4WCb0UBzyUNzgobjQQwnIQwmDh+VCDyUhDyUNHkoKPZSCPJQyeFgh9FAa8lDa4KG00EMZyEMZg4eVQg9lIQ9lDR7KCj2UgzyUM3hYJfRQHvJQ3uChvNBDBchDBYOH1UIPFSEPFQ0eKgo9VII8VDJ4WCP0UBnyUNngobLQQxXIQxWDh7VCD1UhD1UNHqoKPVSDPFQzeFgn9FAd8lDd4KG60EMNyEMNg4f1Qg81IQ81DR5qCj3UgjzUMnjYIPRQG/JQ2+ChttBDHchDHYOHjUIPdSEPdQ0e6go91IM81DN42CT0UB/yUN/gob7QQwPIQwODh81CDw0hDw0NHhoKPTSCPDQyeNgi9BCAPAQMHgJCD40hD40NHrYKPTSBPDQxeGgi9NAU8tDU4GGb0EMzyEMzg4dmQg/NIQ/NDR62Cz20gDy0MHhoIfTQEvLQ0uBhh9BDK8hDK4OHVkIPrSEPrQ0edgo9tIE8tDF4aCP00Bby0NbgYZfQQzvIQzuDh3ZCD+0hD+0NHnYLPXSAPHQweOgg9NAR8tDR4GGP0EMnyEMng4dOQg+dIQ+dDR72Cj10gTx0MXjoIvTQFfLQ1eBhn9BDN8hDN4OHbkIP3SEP3Q0e9gs99IA89DB46CH00BPy0NPg4YDQQy/IQy+Dh15CD70hD70NHg4KPfSBPPQxeOgj9NAX8tDX4OGQ0EM/yEM/g4d+Qg/9IQ/9DR4OCz0MgDwMMHgYIPQwEPIw0ODhiNDDIMjDIIOHQUIPgyEPgw0ejgo9DIE8DDF4GCL0MBTyMNTg4ZjQwzDIwzCDh2FCD8MhD8MNHo4LPYyAPIwweBgh9DAS8jDS4OGE0MMoyMMog4dRQg+jIQ+jDR5OCj2MgTyMMXgYI/QwFvIw1uDhlNDDOMjDOIOHcUIP4yEP4w0eTgs9TIA8TDB4mCD0MBHyMNHg4YzQwyTIwySDh0lCD5MhD5MNHs4KPUyBPEwxeJgi9DAV8jDV4OGc0MM0yMM0g4dpQg/TIQ/TDR5+F3qYAXmYYfAwQ+hhJuRhpsHDeaGHWZCHWQYPs4QeZkMeZhs8/CH0MAfyMMfgYY7Qw1zIw1yDhwtCD/MgD/MMHuYJPcyHPMw3ePhT6GEB5GGBwcMCoYeFkIeFBg8XhR4WQR4WGTwsEnpYDHlYbPDwl9DDEsjDEoOHJUIPSyEPSw0eLgk9LIM8LDN4WCb0sBzysNzg4W+hhxWQhxUGDyuEHlZCHlYaPFwWelgFeVhl8LBK6GE15GG1wcM/Qg9rIA9rDB7WCD2shTysNXi4IvSwDvKwzuBhndDDesjDeoOHf4UeNkAeNhg8bBB62Ah52GjwcFXoYRPkYZPBwyahh82Qh80GD9eEHrZAHrYYPGwRetgKedhq8HBd6GEb5GGbwcM2oYftkIftBg83hB52QB52GDzsEHrYCXnYafBwU+hhF+Rhl8HDLqGH3ZCH3QYPt4Qe9kAe9hg87BF62At52GvwcFvoYR/kYZ/Bwz6hh/2Qh/0GD3eEHg5AHg4YPBwQejgIeTho8HBX6OEQ5OGQwcMhoYfDkIfDBg/3hB6OQB6OGDwcEXo4Cnk4avBwX+jhGOThmMHDMaGH45CH4wYPD4QeTkAeThg8nBB6OAl5OGnw8FDo4RTk4ZTBwymhh9OQh9MGD4+EHs5AHs4YPJwRejgLeThr8PBY6OEc5OGcwcM5oYffIQ+/Gzw8EXo4D3k4b/BwXujhD8jDHwYPT4UeLkAeLhg8XBB6+BPy8KfBwzOhh4uQh4sGDxeFHv6CPPxl8PBc6OES5OGSwcMloYe/IQ9/Gzy8EHq4DHm4bPBwWejhH8jDPwYPL4UerkAerhg8XBF6+Bfy8K/Bwyuhh6uQh6sGD1eFHq5BHq4ZPLwWergOebhu8HBd6OEG5OGGwcMboYebkIebBg83hR5uQR5uGTy8FXq4DXm4bfBwW+jhDuThjsHDO6GHu5CHuwYPd4Ue7kEe7hk8vBd6uA95uG/wcF/o4QHk4YHBwwehh4eQh4cGDw+FHh5BHh4ZPHwUengMeXhs8PBY6OEJ5OGJwcMnoYenkIenBg9PhR6eQR6eGTx8Fnp4Dnl4bvDwXOjhBeThhcHDF6GHl5CHlwYPL4UeXkEeXhk8fBV6eA15eG3w8Fro4Q3k4Y3Bwzehh7eQh7cGD2+FHt5BHt4ZPHwXengPeXhv8PBe6OED5OGDwcMPoYePkIePBg8fhR4+QR4+GTz8FHr4DHn4bPDwWejhC+Thi8HDL6GHr5CHrwYPX4UevkEevhk8/NZa1/Q75OG7wcN3oYcfkIcfBg9BhB5+Qh5+Gjz8FHr4BXn4ZfAQVOjht6SMh//s0h7++/b/dStIUsZDkKS8h2BCD0EhD0ENHoIKPQSDPAQzeAgu9BAc8hDc4CG40EMIyEMIg4cQQg8hIQ8hDR5CCj2EgjyEMngIKfQQGvIQ2uAhtNBDGMhDGIOHUEIPYSEPYQ0ewgo9hIM8hDN4CC30EB7yEN7gIbzQQwTIQwSDhzBCDxEhDxENHiIKPUSCPEQyeAgr9BAZ8hDZ4CGy0EMUyEMUg4dwQg9RIQ9RDR6iCj1EgzxEM3gIL/QQHfIQ3eAhutBDDMhDDIOHCEIPMSEPMQ0eYgo9xII8xDJ4iCj0EBvyENvgIbbQQxzIQxyDh0hCD3EhD3ENHuIKPcSDPMQzeIgs9BAf8hDf4CG+0EMCyEMCg4coQg8JIQ8JDR4SCj0kgjwkMniIKvSQGPKQ2OAhsdBDEshDEoOHaEIPSSEPSQ0ekgo9JIM8JDN4iC70kBzykNzgIbnQQwrIQwqDhxhCDykhDykNHlIKPaSCPKQyeIgp9JAa8pDa4CG10EMayEMag4dYQg9pIQ9pDR7SCj2kgzykM3iILfSQHvKQ3uAhvdBDBshDBoOHOEIPGSEPGQ0eMgo9ZII8ZDJ4iCv0kBnykNngIbPQQxbIQxaDh3hCD1khD1kNHrIKPWSDPGQzeIgv9JAd8pDd4CG70EMOyEMOg4cEQg85IQ85DR5yCj3kgjzkMnhIKPSQG/KQ2+Aht9BDHshDHoOHREIPeSEPeQ0e8go95IM85DN4SCz0kB/ykN/gIb/QQwHIQwGDhyRCDwUhDwUNHgoKPRSCPBQyeEgq9FAY8lDY4KGw0EMRyEMRg4dkQg9FIQ9FDR6KCj0UgzwUM3hILvRQHPJQ3OChuNBDCchDCYOHFEIPJSEPJQ0eSgo9lII8lDJ4SCn0UBryUNrgobTQQxnIQxmDh1RCD2UhD2UNHsoKPZSDPJQzeEgt9FAe8lDe4KG80EMFyEMFg4c0Qg8VIQ8VDR4qCj1UgjxUMnhIK/RQGfJQ2eChstBDFchDFYOHdEIPVSEPVQ0eqgo9VIM8VDN4SC/0UB3yUN3gobrQQw3IQw2DhwxCDzUhDzUNHmoKPdSCPNQyeMgo9FAb8lDb4KG20EMdyEMdg4dMQg91IQ91DR7qCj3UgzzUM3jILPRQH/JQ3+ChvtBDA8hDA4OHLEIPDSEPDQ0eGgo9NII8NDJ4yCr0EIA8BAweAkIPjSEPjQ0esgk9NIE8NDF4aCL00BTy0NTgIbvQQzPIQzODh2ZCD80hD80NHnIIPbSAPLQweGgh9NAS8tDS4CGn0EMryEMrg4dWQg+tIQ+tDR5yCT20gTy0MXhoI/TQFvLQ1uAht9BDO8hDO4OHdkIP7SEP7Q0e8gg9dIA8dDB46CD00BHy0NHgIa/QQyfIQyeDh05CD50hD50NHvIJPXSBPHQxeOgi9NAV8tDV4CG/0EM3yEM3g4duQg/dIQ/dDR4KCD30gDz0MHjoIfTQE/LQ0+ChoNBDL8hDL4OHXkIPvSEPvQ0eCgk99IE89DF46CP00Bfy0NfgobDQQz/IQz+Dh35CD/0hD/0NHooIPQyAPAwweBgg9DAQ8jDQ4KGo0MMgyMMgg4dBQg+DIQ+DDR6KCT0MgTwMMXgYIvQwFPIw1OChuNDDMMjDMIOHYUIPwyEPww0eSgg9jIA8jDB4GCH0MBLyMNLgoaTQwyjIwyiDh1FCD6MhD6MNHkoJPYyBPIwxeBgj9DAW8jDW4KG00MM4yMM4g4dxQg/jIQ/jDR7KCD1MgDxMMHiYIPQwEfIw0eChrNDDJMjDJIOHSUIPkyEPkw0eygk9TIE8TDF4mCL0MBXyMNXgobzQwzTIwzSDh2lCD9MhD9MNHioIPcyAPMwweJgh9DAT8jDT4KGi0MMsyMMsg4dZQg+zIQ+zDR4qCT3MgTzMMXiYI/QwF/Iw1+ChstDDPMjDPIOHeUIP8yEP8w0eqgg9LIA8LDB4WCD0sBDysNDgoarQwyLIwyKDh0VCD4shD4sNHqoJPSyBPCwxeFgi9LAU8rDU4KG60MMyyMMyg4dlQg/LIQ/LDR5qCD2sgDysMHhYIfSwEvKw0uChptDDKsjDKoOHVUIPqyEPqw0eagk9rIE8rDF4WCP0sBbysNbgobbQwzrIwzqDh3VCD+shD+sNHuoIPWyAPGwweNgg9LAR8rDR4KGu0MMmyMMmg4dNQg+bIQ+bDR7qCT1sgTxsMXjYIvSwFfKw1eChvtDDNsjDNoOHbUIP2yEP2w0eGgg97IA87DB42CH0sBPysNPgoaHQwy7Iwy6Dh11CD7shD7sNHhoJPeyBPOwxeNgj9LAX8rDX4CEg9LAP8rDP4GGf0MN+yMN+g4fGQg8HIA8HDB4OCD0chDwcNHhoIvRwCPJwyODhkNDDYcjDYYOHpkIPRyAPRwwejgg9HIU8HDV4aCb0cAzycMzg4ZjQw3HIw3GDh+ZCDycgDycMHk4IPZyEPJw0eGgh9HAK8nDK4OGU0MNpyMNpg4eWQg9nIA9nDB7OCD2chTycNXhoJfRwDvJwzuDhnNDD75CH3w0eWgs9nIc8nDd4OC/08Afk4Q+DhzZCDxcgDxcMHi4IPfwJefjT4KGt0MNFyMNFg4eLQg9/QR7+MnhoJ/RwCfJwyeDhktDD35CHvw0e2gs9XIY8XDZ4uCz08A/k4R+Dhw5CD1cgD1cMHq4IPfwLefjX4KGj0MNVyMNVg4erQg/XIA/XDB46CT1chzxcN3i4LvRwA/Jww+Chs9DDTcjDTYOHm0IPtyAPtwweugg93IY83DZ4uC30cAfycMfgoavQw13Iw12Dh7tCD/cgD/cMHroJPdyHPNw3eLgv9PAA8vDA4KG70MNDyMNDg4eHQg+PIA+PDB56CD08hjw8Nnh4LPTwBPLwxOChp9DDU8jDU4OHp0IPzyAPzwweegk9PIc8PDd4eC708ALy8MLgobfQw0vIw0uDh5dCD68gD68MHvoIPbyGPLw2eHgt9PAG8vDG4KGv0MNbyMNbg4e3Qg/vIA/vDB76CT28hzy8N3h4L/TwAfLwweChv9DDR8jDR4OHj0IPnyAPnwweBgg9fIY8fDZ4+Cz08AXy8MXgYaDQw1fIw1eDh69CD98gD98MHgYJPXyHPHw3ePgu9PAD8vDD4GGw0MNPyMNPg4efQg+/IA+/DB6GCD38lozx8J9d2sN/3/6/bgVJxngIkoz3MFToISjkIajBQ1Chh2CQh2AGD8OEHoJDHoIbPAQXeggBeQhh8DBc6CEk5CGkwUNIoYdQkIdQBg8jhB5CQx5CGzyEFnoIA3kIY/AwUughLOQhrMFDWKGHcJCHcAYPo4QewkMewhs8hBd6iAB5iGDwMFroISLkIaLBQ0Shh0iQh0gGD2OEHiJDHiIbPEQWeogCeYhi8DBW6CEq5CGqwUNUoYdokIdoBg/jhB6iQx6iGzxEF3qIAXmIYfAwXughJuQhpsFDTKGHWJCHWAYPE4QeYkMeYhs8xBZ6iAN5iGPwMFHoIS7kIa7BQ1yhh3iQh3gGD5OEHuJDHuIbPMQXekgAeUhg8DBZ6CEh5CGhwUNCoYdEkIdEBg9ThB4SQx4SGzwkFnpIAnlIYvAwVeghKeQhqcFDUqGHZJCHZAYP04QekkMekhs8JBd6SAF5SGHwMF3oISXkIaXBQ0qhh1SQh1QGDzOEHlJDHlIbPKQWekgDeUhj8DBT6CEt5CGtwUNaoYd0kId0Bg+zhB7SQx7SGzykF3rIAHnIYPAwW+ghI+Qho8FDRqGHTJCHTAYPc4QeMkMeMhs8ZBZ6yAJ5yGLwMFfoISvkIavBQ1ahh2yQh2wGD/OEHrJDHrIbPGQXesgBechh8DBf6CEn5CGnwUNOoYdckIdcBg8LhB5yQx5yGzzkFnrIA3nIY/CwUOghL+Qhr8FDXqGHfJCHfAYPi4Qe8kMe8hs85Bd6KAB5KGDwsFjooSDkoaDBQ0Ghh0KQh0IGD0uEHgpDHgobPBQWeigCeShi8LBU6KEo5KGowUNRoYdikIdiBg/LhB6KQx6KGzwUF3ooAXkoYfCwXOihJOShpMFDSaGHUpCHUgYPK4QeSkMeShs8lBZ6KAN5KGPwsFLooSzkoazBQ1mhh3KQh3IGD6uEHspDHsobPJQXeqgAeahg8LBa6KEi5KGiwUNFoYdKkIdKBg9rhB4qQx4qGzxUFnqoAnmoYvCwVuihKuShqsFDVaGHapCHagYP64QeqkMeqhs8VBd6qAF5qGHwsF7ooSbkoabBQ02hh1qQh1oGDxuEHmpDHmobPNQWeqgDeahj8LBR6KEu5KGuwUNdoYd6kId6Bg+bhB7qQx7qGzzUF3poAHloYPCwWeihIeShocFDQ6GHRpCHRgYPW4QeApCHgMFDQOihMeShscHDVqGHJpCHJgYPTYQemkIemho8bBN6aAZ5aGbw0EzooTnkobnBw3ahhxaQhxYGDy2EHlpCHloaPOwQemgFeWhl8NBK6KE15KG1wcNOoYc2kIc2Bg9thB7aQh7aGjzsEnpoB3loZ/DQTuihPeShvcHDbqGHDpCHDgYPHYQeOkIeOho87BF66AR56GTw0EnooTPkobPBw16hhy6Qhy4GD12EHrpCHroaPOwTeugGeehm8NBN6KE75KG7wcN+oYcekIceBg89hB56Qh56GjwcEHroBXnoZfDQS+ihN+Sht8HDQaGHPpCHPgYPfYQe+kIe+ho8HBJ66Ad56Gfw0E/ooT/kob/Bw2GhhwGQhwEGDwOEHgZCHgYaPBwRehgEeRhk8DBI6GEw5GGwwcNRoYchkIchBg9DhB6GQh6GGjwcE3oYBnkYZvAwTOhhOORhuMHDcaGHEZCHEQYPI4QeRkIeRho8nBB6GAV5GGXwMEroYTTkYbTBw0mhhzGQhzEGD2OEHsZCHsYaPJwSehgHeRhn8DBO6GE85GG8wcNpoYcJkIcJBg8ThB4mQh4mGjycEXqYBHmYZPAwSehhMuRhssHDWaGHKZCHKQYPU4QepkIepho8nBN6mAZ5mGbwME3oYTrkYbrBw+9CDzMgDzMMHmYIPcyEPMw0eDgv9DAL8jDL4GGW0MNsyMNsg4c/hB7mQB7mGDzMEXqYC3mYa/BwQehhHuRhnsHDPKGH+ZCH+QYPfwo9LIA8LDB4WCD0sBDysNDg4aLQwyLIwyKDh0VCD4shD4sNHv4SelgCeVhi8LBE6GEp5GGpwcMloYdlkIdlBg/LhB6WQx6WGzz8LfSwAvKwwuBhhdDDSsjDSoOHy0IPqyAPqwweVgk9rIY8rDZ4+EfoYQ3kYY3Bwxqhh7WQh7UGD1eEHtZBHtYZPKwTelgPeVhv8PCv0MMGyMMGg4cNQg8bIQ8bDR6uCj1sgjxsMnjYJPSwGfKw2eDhmtDDFsjDFoOHLUIPWyEPWw0ergs9bIM8bDN42Cb0sB3ysN3g4YbQww7Iww6Dhx1CDzshDzsNHm4KPeyCPOwyeNgl9LAb8rDb4OGW0MMeyMMeg4c9Qg97IQ97DR5uCz3sgzzsM3jYJ/SwH/Kw3+DhjtDDAcjDAYOHA0IPByEPBw0e7go9HII8HDJ4OCT0cBjycNjg4Z7QwxHIwxGDhyNCD0chD0cNHu4LPRyDPBwzeDgm9HAc8nDc4OGB0MMJyMMJg4cTQg8nIQ8nDR4eCj2cgjycMng4JfRwGvJw2uDhkdDDGcjDGYOHM0IPZ/8/au4xRtNtixZw27aNaldXV1dX27Zt27Zt27Zt27Zt+65O7sld5839d8YYydrJTObqpN98GfM5IyfZySZ5OCnw8Azo4RTJwymBh1NAD6dJHk4LPDwHejhD8nBG4OEM0MNZkoezAg8vgB7OkTycE3g4B/RwnuThvMDDS6CHCyQPFwQeLgA9XCR5uCjw8Aro4RLJwyWBh0tAD5dJHi4LPLwGerhC8nBF4OEK0MNVkoerAg9vgB6ukTxcE3i4BvRwneThusDDW6CHGyQPNwQebgA93CR5uCnw8A7o4RbJwy2Bh1tAD7dJHm4LPLwHerhD8nBH4OEO0MNdkoe7Ag8fgB7ukTzcE3i4B/Rwn+ThvsDDR6CHByQPDwQeHgA9PCR5eCjw8Ano4RHJwyOBh0dAD49JHh4LPHwGenhC8vBE4OEJ0MNTkoenAg9fgB6ekTw8E3h4BvTwnOThucDDV6CHFyQPLwQeXgA9vCR5eCnw8A3o4RXJwyuBh1dAD69JHl4LPHwHenhD8vBG4OEN0MNbkoe3Ag8/gB7ekTy8E3h4B/TwnuThvcDDT6CHDyQPHwQePgA9fCR5+Cjw8Avo4RPJwyeBh09AD59JHj4LPPwGevhC8vBF4OEL0MNXkoevAg9/gB6+kTx8E3j4BvTwneThu8DDX6CHHyQPPwQefgA9/CR5+CnwEKQFLtNfJA+/BB5+AT38Jnn4LfAQFOjhD8nDH4GHP0APf0ke/go8BAN6CJKC4+Hfd9ke7N/+v34raAqOh6Ap+B6CAz0EI3kIJvAQDOghOMlDcIGHEEAPIUgeQgg8hAB6CEnyEFLgISTQQyiSh1ACD6GAHkKTPIQWeAgF9BCG5CGMwEMYoIewJA9hBR5CAz2EI3kIJ/AQDughPMlDeIGHMEAPEUgeIgg8RAB6iEjyEFHgISzQQySSh0gCD5GAHiKTPEQWeAgH9BCF5CGKwEMUoIeoJA9RBR7CAz1EI3mIJvAQDeghOslDdIGHCEAPMUgeYgg8xAB6iEnyEFPgISLQQyySh1gCD7GAHmKTPMQWeIgE9BCH5CGOwEMcoIe4JA9xBR4iAz3EI3mIJ/AQD+ghPslDfIGHKEAPCUgeEgg8JAB6SEjykFDgISrQQyKSh0QCD4mAHhKTPCQWeIgG9JCE5CGJwEMSoIekJA9JBR6iAz0kI3lIJvCQDOghOclDcoGHGEAPKUgeUgg8pAB6SEnykFLgISbQQyqSh1QCD6mAHlKTPKQWeIgF9OBD8uAj8OAD9JCG5CGNwENsoIe0JA9pBR7SAj2kI3lIJ/AQB+ghPclDeoGH9EAPGUgeMgg8xAV6yEjykFHgISPQQyaSh0wCD/GAHnxJHnwFHnyBHjKTPGQWeIgP9OBH8uAn8OAH9JCF5CGLwEMCoAd/kgd/gQd/oIesJA9ZBR4SAj0EkDwECDwEAD1kI3nIJvCQCOghkOQhUOAhEOghO8lDdoGHxEAPOUgecgg85AB6yEnykFPgIQnQQy6Sh1wCD7mAHnKTPOQWeEgK9JCH5CGPwEMeoIe8JA95BR6SAT3kI3nIJ/CQD+ghP8lDfoGH5EAPBUgeCgg8FAB6KEjyUFDgIQXQQyGSh0ICD4WAHgqTPBQWeEgJ9FCE5KGIwEMRoIeiJA9FBR5SAT0UI3koJvBQDOihOMlDcYGH1EAPJUgeSgg8lAB6KEnyUFLgwQfooRTJQymBh1JAD6VJHkoLPKQBeihD8lBG4KEM0ENZkoeyAg9pgR7KkTyUE3goB/RQnuShvMBDOqCHCiQPFQQeKgA9VCR5qCjwkB7ooRLJQyWBh0pAD5VJHioLPGQAeqhC8lBF4KEK0ENVkoeqAg8ZgR6qkTxUE3ioBvRQneShusBDJqCHGiQPNQQeagA91CR5qCnw4Av0UIvkoZbAQy2gh9okD7UFHjIDPdQheagj8FAH6KEuyUNdgQc/oId6JA/1BB7qAT3UJ3moL/CQBeihAclDA4GHBkAPDUkeGgo8+AM9NCJ5aCTw0AjooTHJQ2OBh6xAD01IHpoIPDQBemhK8tBU4CEA6KEZyUMzgYdmQA/NSR6aCzxkA3poQfLQQuChBdBDS5KHlgIPgUAPrUgeWgk8tAJ6aE3y0FrgITvQQxuShzYCD22AHtqSPLQVeMgB9NCO5KGdwEM7oIf2JA/tBR5yAj10IHnoIPDQAeihI8lDR4GHXEAPnUgeOgk8dAJ66Ezy0FngITfQQxeShy4CD12AHrqSPHQVeMgD9NCN5KGbwEM3oIfuJA/dBR7yAj30IHnoIfDQA+ihJ8lDT4GHfEAPvUgeegk89AJ66E3y0FvgIT/QQx+Shz4CD32AHvqSPPQVeCgA9NCP5KGfwEM/oIf+JA/9BR4KAj0MIHkYIPAwAOhhIMnDQIGHQkAPg0geBgk8DAJ6GEzyMFjgoTDQwxCShyECD0OAHoaSPAwVeCgC9DCM5GGYwMMwoIfhJA/DBR6KAj2MIHkYIfAwAuhhJMnDSIGHYkAPo0geRgk8jAJ6GE3yMFrgoTjQwxiShzECD2OAHsaSPIwVeCgB9DCO5GGcwMM4oIfxJA/jBR5KAj1MIHmYIPAwAehhIsnDRIGHUkAPk0geJgk8TAJ6mEzyMFngoTTQwxSShykCD1OAHqaSPEwVeCgD9DCN5GGawMM0oIfpJA/TBR7KAj3MIHmYIfAwA+hhJsnDTIGHckAPs0geZgk8zAJ6mE3yMFvgoTzQwxyShzkCD3OAHuaSPMwVeKgA9DCP5GGewMM8oIf5JA/zBR4qAj0sIHlYIPCwAOhhIcnDQoGHSkAPi0geFgk8LAJ6WEzysFjgoTLQwxKShyUCD0uAHpaSPCwVeKgC9LCM5GGZwMMyoIflJA/LBR6qAj2sIHlYIfCwAuhhJcnDSoGHakAPq0geVgk8rAJ6WE3ysFrgoTrQwxqShzUCD2uAHtaSPKwVeKgB9LCO5GGdwMM6oIf1JA/rBR5qAj1sIHnYIPCwAehhI8nDRoGHWkAPm0geNgk8bAJ62EzysFngoTbQwxaShy0CD1uAHraSPGwVeKgD9LCN5GGbwMM2oIftJA/bBR7qAj3sIHnYIfCwA+hhJ8nDToGHekAPu0gedgk87AJ62E3ysFvgoT7Qwx6Shz0CD3uAHvaSPOwVeGgA9LCP5GGfwMM+oIf9JA/7BR4aAj0cIHk4IPBwAOjhIMnDQYGHRkAPh0geDgk8HAJ6OEzycFjgoTHQwxGShyMCD0eAHo6SPBwVeGgC9HCM5OGYwMMxoIfjJA/HBR6aAj2cIHk4IfBwAujhJMnDSYGHZkAPp0geTgk8nAJ6OE3ycFrgoTnQwxmShzMCD2eAHs6SPJwVeGgB9HCO5OGcwMM5oIfzJA/nBR5aAj1cIHm4IPBwAejhIsnDRYGHVkAPl0geLgk8XAJ6uEzycFngoTXQwxWShysCD1eAHq6SPFwVeGgD9HCN5OGawMM1oIfrJA/XBR7aAj3cIHm4IfBwA+jhJsnDTYGHdkAPt0gebgk83AJ6uE3ycFvgoT3Qwx2ShzsCD3eAHu6SPNwVeOgA9HCP5OGewMM9oIf7JA/3BR46Aj08IHl4IPDwAOjhIcnDQ4GHTkAPj0geHgk8PAJ6eEzy8FjgoTPQwxOShycCD0+AHp6SPDwVeOgC9PCM5OGZwMMzoIfnJA/PBR66Aj28IHl4IfDwAujhJcnDS4GHbkAPr0geXgk8vAJ6eE3y8FrgoTvQwxuShzcCD2+AHt6SPLwVeOgB9PCO5OGdwMM7oIf3JA/vBR56Aj18IHn4IPDwAejhI8nDR4GHXkAPn0gePgk8fAJ6+Ezy8FngoTfQwxeShy8CD1+AHr6SPHwVeOgD9PCN5OGbwMM3oIfvJA/fBR76Aj38IHn4IfDwA+jhJ8nDT4GHfkAPv0gefgk8/AJ6+E3y8FvgoT/Qwx+Shz8CD3+AHv6SPPwVeBgA9BAkJcfDv++yPdi//X/9VtCUHA9BU/I9DAR6CEbyEEzgIRjQQ3CSh+ACD4OAHkKQPIQQeAgB9BCS5CGkwMNgoIdQJA+hBB5CAT2EJnkILfAwBOghDMlDGIGHMEAPYUkewgo8DAV6CEfyEE7gIRzQQ3iSh/ACD8OAHiKQPEQQeIgA9BCR5CGiwMNwoIdIJA+RBB4iAT1EJnmILPAwAughCslDFIGHKEAPUUkeogo8jAR6iEbyEE3gIRrQQ3SSh+gCD6OAHmKQPMQQeIgB9BCT5CGmwMNooIdYJA+xBB5iAT3EJnmILfAwBughDslDHIGHOEAPcUke4go8jAV6iEfyEE/gIR7QQ3ySh/gCD+OAHhKQPCQQeEgA9JCQ5CGhwMN4oIdEJA+JBB4SAT0kJnlILPAwAeghCclDEoGHJEAPSUkekgo8TAR6SEbykEzgIRnQQ3KSh+QCD5OAHlKQPKQQeEgB9JCS5CGlwMNkoIdUJA+pBB5SAT2kJnlILfAwBejBh+TBR+DBB+ghDclDGoGHqUAPaUke0go8pAV6SEfykE7gYRrQQ3qSh/QCD+mBHjKQPGQQeJgO9JCR5CGjwENGoIdMJA+ZBB5mAD34kjz4Cjz4Aj1kJnnILPAwE+jBj+TBT+DBD+ghC8lDFoGHWUAP/iQP/gIP/kAPWUkesgo8zAZ6CCB5CBB4CAB6yEbykE3gYQ7QQyDJQ6DAQyDQQ3aSh+wCD3OBHnKQPOQQeMgB9JCT5CGnwMM8oIdcJA+5BB5yAT3kJnnILfAwH+ghD8lDHoGHPEAPeUke8go8LAB6yEfykE/gIR/QQ36Sh/wCDwuBHgqQPBQQeCgA9FCQ5KGgwMMioIdCJA+FBB4KAT0UJnkoLPCwGOihCMlDEYGHIkAPRUkeigo8LAF6KEbyUEzgoRjQQ3GSh+ICD0uBHkqQPJQQeCgB9FCS5KGkwMMyoIdSJA+lBB5KAT2UJnkoLfCwHOihDMlDGYGHMkAPZUkeygo8rAB6KEfyUE7goRzQQ3mSh/ICDyuBHiqQPFQQeKgA9FCR5KGiwMMqoIdKJA+VBB4qAT1UJnmoLPCwGuihCslDFYGHKkAPVUkeqgo8rAF6qEbyUE3goRrQQ3WSh+oCD2uBHmqQPNQQeKgB9FCT5KGmwMM6oIdaJA+1BB5qAT3UJnmoLfCwHuihDslDHYGHOkAPdUke6go8bAB6qEfyUE/goR7QQ32Sh/oCDxuBHhqQPDQQeGgA9NCQ5KGhwMMmoIdGJA+NBB4aAT00JnloLPCwGeihCclDE4GHJkAPTUkemgo8bAF6aEby0EzgoRnQQ3OSh+YCD1uBHlqQPLQQeGgB9NCS5KGlwMM2oIdWJA+tBB5aAT20JnloLfCwHeihDclDG4GHNkAPbUke2go87AB6aEfy0E7goR3QQ3uSh/YCDzuBHjqQPHQQeOgA9NCR5KGjwMMuoIdOJA+dBB46AT10JnnoLPCwG+ihC8lDF4GHLkAPXUkeugo87AF66Eby0E3goRvQQ3eSh+4CD3uBHnqQPPQQeOgB9NCT5KGnwMM+oIdeJA+9BB56AT30JnnoLfCwH+ihD8lDH4GHPkAPfUke+go8HAB66Efy0E/goR/QQ3+Sh/4CDweBHgaQPAwQeBgA9DCQ5GGgwMMhoIdBJA+DBB4GAT0MJnkYLPBwGOhhCMnDEIGHIUAPQ0kehgo8HAF6GEbyMEzgYRjQw3CSh+ECD0eBHkaQPIwQeBgB9DCS5GGkwMMxoIdRJA+jBB5GAT2MJnkYLfBwHOhhDMnDGIGHMUAPY0kexgo8nAB6GEfyME7gYRzQw3iSh/ECDyeBHiaQPEwQeJgA9DCR5GGiwMMpoIdJJA+TBB4mAT1MJnmYLPBwGuhhCsnDFIGHKUAPU0kepgo8nAF6mEbyME3gYRrQw3SSh+kCD2eBHmaQPMwQeJgB9DCT5GGmwMM5oIdZJA+zBB5mAT3MJnmYLfBwHuhhDsnDHIGHOUAPc0ke5go8XAB6mEfyME/gYR7Qw3ySh/kCDxeBHhaQPCwQeFgA9LCQ5GGhwMMloIdFJA+LBB4WAT0sJnlYLPBwGehhCcnDEoGHJUAPS0kelgo8XAF6WEbysEzgYRnQw3KSh+UCD1eBHlaQPKwQeFgB9LCS5GGlwMM1oIdVJA+rBB5WAT2sJnlYLfBwHehhDcnDGoGHNUAPa0ke1go83AB6WEfysE7gYR3Qw3qSh/UCDzeBHjaQPGwQeNgA9LCR5GGjwMMtoIdNJA+bBB42AT1sJnnYLPBwG+hhC8nDFoGHLUAPW0ketgo83AF62EbysE3gYRvQw3aSh+0CD3eBHnaQPOwQeNgB9LCT5GGnwMM9oIddJA+7BB52AT3sJnnYLfBwH+hhD8nDHoGHPUAPe0ke9go8PAB62EfysE/gYR/Qw36Sh/0CDw+BHg6QPBwQeDgA9HCQ5OGgwMMjoIdDJA+HBB4OAT0cJnk4LPDwGOjhCMnDEYGHI0APR0kejgo8PAF6OEbycEzg4RjQw3GSh+MCD0+BHk6QPJwQeDgB9HCS5OGkwMMzoIdTJA+nBB5OAT2cJnk4LfDwHOjhDMnDGYGHM0APZ0kezgo8vAB6OEfycE7g4RzQw3mSh/MCDy+BHi6QPFwQeLgA9HCR5OGiwMMroIdLJA+XBB4uAT1cJnm4LPDwGujhCsnDFYGHK0APV0kergo8vAF6uEbycE3g4RrQw3WSh+sCD2+BHm6QPNwQeLgB9HCT5OGmwMM7oIdbJA+3BB5uAT3cJnm4LfDwHujhDsnDHYGHO0APd0ke7go8fAB6uEfycE/g4R7Qw32Sh/sCDx+BHh6QPDwQeHgA9PCQ5OGhwMMnoIdHJA+PBB4eAT08Jnl4LPDwGejhCcnDE4GHJ0APT0kengo8fAF6eEby8Ezg4RnQw3OSh+cCD1+BHl6QPLwQeHgB9PCS5OGlwMM3oIdXJA+vBB5eAT28Jnl4LfDwHejhDcnDG4GHN0APb0ke3go8/AB6eEfy8E7g4R3Qw3uSh/cCDz+BHj6QPHwQePgA9PCR5OGjwMMvoIdPJA+fBB4+AT18Jnn4LPDwG+jhC8nDF4GHL0APX0kevgo8/AF6+Eby8E3g4RvQw3eSh+8CD3+BHn6QPPwQePgB9PCT5OGnwEOQlrhMf5E8/BJ4+AX08Jvk4bfAQ1Cghz8kD38EHv4APfwlefgr8BAM6CFIKo6Hf99le7B/+//6raCpOB6CpuJ7CA70EIzkIZjAQzCgh+AkD8EFHkIAPYQgeQgh8BAC6CEkyUNIgYeQQA+hSB5CCTyEAnoITfIQWuAhFNBDGJKHMAIPYYAewpI8hBV4CA30EI7kIZzAQzigh/AkD+EFHsIAPUQgeYgg8BAB6CEiyUNEgYewQA+RSB4iCTxEAnqITPIQWeAhHNBDFJKHKAIPUYAeopI8RBV4CA/0EI3kIZrAQzSgh+gkD9EFHiIAPcQgeYgh8BAD6CEmyUNMgYeIQA+xSB5iCTzEAnqITfIQW+AhEtBDHJKHOAIPcYAe4pI8xBV4iAz0EI/kIZ7AQzygh/gkD/EFHqIAPSQgeUgg8JAA6CEhyUNCgYeoQA+JSB4SCTwkAnpITPKQWOAhGtBDEpKHJAIPSYAekpI8JBV4iA70kIzkIZnAQzKgh+QkD8kFHmIAPaQgeUgh8JAC6CElyUNKgYeYQA+pSB5SCTykAnpITfKQWuAhFtCDD8mDj8CDD9BDGpKHNAIPsYEe0pI8pBV4SAv0kI7kIZ3AQxygh/QkD+kFHtIDPWQgecgg8BAX6CEjyUNGgYeMQA+ZSB4yCTzEA3rwJXnwFXjwBXrITPKQWeAhPtCDH8mDn8CDH9BDFpKHLAIPCYAe/Eke/AUe/IEespI8ZBV4SAj0EEDyECDwEAD0kI3kIZvAQyKgh0CSh0CBh0Cgh+wkD9kFHhIDPeQgecgh8JAD6CEnyUNOgYckQA+5SB5yCTzkAnrITfKQW+AhKdBDHpKHPAIPeYAe8pI85BV4SAb0kI/kIZ/AQz6gh/wkD/kFHpIDPRQgeSgg8FAA6KEgyUNBgYcUQA+FSB4KCTwUAnooTPJQWOAhJdBDEZKHIgIPRYAeipI8FBV4SAX0UIzkoZjAQzGgh+IkD8UFHlIDPZQgeSgh8FAC6KEkyUNJgQcfoIdSJA+lBB5KAT2UJnkoLfCQBuihDMlDGYGHMkAPZUkeygo8pAV6KEfyUE7goRzQQ3mSh/ICD+mAHiqQPFQQeKgA9FCR5KGiwEN6oIdKJA+VBB4qAT1UJnmoLPCQAeihCslDFYGHKkAPVUkeqgo8ZAR6qEbyUE3goRrQQ3WSh+oCD5mAHmqQPNQQeKgB9FCT5KGmwIMv0EMtkodaAg+1gB5qkzzUFnjIDPRQh+ShjsBDHaCHuiQPdQUe/IAe6pE81BN4qAf0UJ/kob7AQxaghwYkDw0EHhoAPTQkeWgo8OAP9NCI5KGRwEMjoIfGJA+NBR6yAj00IXloIvDQBOihKclDU4GHAKCHZiQPzQQemgE9NCd5aC7wkA3ooQXJQwuBhxZADy1JHloKPAQCPbQieWgl8NAK6KE1yUNrgYfsQA9tSB7aCDy0AXpoS/LQVuAhB9BDO5KHdgIP7YAe2pM8tBd4yAn00IHkoYPAQwegh44kDx0FHnIBPXQieegk8NAJ6KEzyUNngYfcQA9dSB66CDx0AXroSvLQVeAhD9BDN5KHbgIP3YAeupM8dBd4yAv00IPkoYfAQw+gh54kDz0FHvIBPfQieegl8NAL6KE3yUNvgYf8QA99SB76CDz0AXroS/LQV+ChANBDP5KHfgIP/YAe+pM89Bd4KAj0MIDkYYDAwwCgh4EkDwMFHgoBPQwieRgk8DAI6GEwycNggYfCQA9DSB6GCDwMAXoYSvIwVOChCNDDMJKHYQIPw4AehpM8DBd4KAr0MILkYYTAwwigh5EkDyMFHooBPYwieRgl8DAK6GE0ycNogYfiQA9jSB7GCDyMAXoYS/IwVuChBNDDOJKHcQIP44AexpM8jBd4KAn0MIHkYYLAwwSgh4kkDxMFHkoBPUwieZgk8DAJ6GEyycNkgYfSQA9TSB6mCDxMAXqYSvIwVeChDNDDNJKHaQIP04AeppM8TBd4KAv0MIPkYYbAwwygh5kkDzMFHsoBPcwieZgl8DAL6GE2ycNsgYfyQA9zSB7mCDzMAXqYS/IwV+ChAtDDPJKHeQIP84Ae5pM8zBd4qAj0sIDkYYHAwwKgh4UkDwsFHioBPSwieVgk8LAI6GExycNigYfKQA9LSB6WCDwsAXpYSvKwVOChCtDDMpKHZQIPy4AelpM8LBd4qAr0sILkYYXAwwqgh5UkDysFHqoBPawieVgl8LAK6GE1ycNqgYfqQA9rSB7WCDysAXpYS/KwVuChBtDDOpKHdQIP64Ae1pM8rBd4qAn0sIHkYYPAwwagh40kDxsFHmoBPWwiedgk8LAJ6GEzycNmgYfaQA9bSB62CDxsAXrYSvKwVeChDtDDNpKHbQIP24AetpM8bBd4qAv0sIPkYYfAww6gh50kDzsFHuoBPewiedgl8LAL6GE3ycNugYf6QA97SB72CDzsAXrYS/KwV+ChAdDDPpKHfQIP+4Ae9pM87Bd4aAj0cIDk4YDAwwGgh4MkDwcFHhoBPRwieTgk8HAI6OEwycNhgYfGQA9HSB6OCDwcAXo4SvJwVOChCdDDMZKHYwIPx4AejpM8HBd4aAr0cILk4YTAwwmgh5MkDycFHpoBPZwieTgl8HAK6OE0ycNpgYfmQA9nSB7OCDycAXo4S/JwVuChBdDDOZKHcwIP54AezpM8nBd4aAn0cIHk4YLAwwWgh4skDxcFHloBPVwiebgk8HAJ6OEyycNlgYfWQA9XSB6uCDxcAXq4SvJwVeChDdDDNZKHawIP14AerpM8XBd4aAv0cIPk4YbAww2gh5skDzcFHtoBPdwiebgl8HAL6OE2ycNtgYf2QA93SB7uCDzcAXq4S/JwV+ChA9DDPZKHewIP94Ae7pM83Bd46Aj08IDk4YHAwwOgh4ckDw8FHjoBPTwieXgk8PAI6OExycNjgYfOQA9PSB6eCDw8AXp4SvLwVOChC9DDM5KHZwIPz4AenpM8PBd46Ar08ILk4YXAwwugh5ckDy8FHroBPbwieXgl8PAK6OE1ycNrgYfuQA9vSB7eCDy8AXp4S/LwVuChB9DDO5KHdwIP74Ae3pM8vBd46An08IHk4YPAwwegh48kDx8FHnoBPXwiefgk8PAJ6OEzycNngYfeQA9fSB6+CDx8AXr4SvLwVeChD9DDN5KHbwIP34AevpM8fBd46Av08IPk4YfAww+gh58kDz8FHvoBPfwiefgl8PAL6OE3ycNvgYf+QA9/SB7+CDz8AXr4S/LwV+BhANBDkNQcD/++y/Zg//b/9VtBU3M8BE3N9zAQ6CEYyUMwgYdgQA/BSR6CCzwMAnoIQfIQQuAhBNBDSJKHkAIPg4EeQpE8hBJ4CAX0EJrkIbTAwxCghzAkD2EEHsIAPYQleQgr8DAU6CEcyUM4gYdwQA/hSR7CCzwMA3qIQPIQQeAhAtBDRJKHiAIPw4EeIpE8RBJ4iAT0EJnkIbLAwwighygkD1EEHqIAPUQleYgq8DAS6CEayUM0gYdoQA/RSR6iCzyMAnqIQfIQQ+AhBtBDTJKHmAIPo4EeYpE8xBJ4iAX0EJvkIbbAwxighzgkD3EEHuIAPcQleYgr8DAW6CEeyUM8gYd4QA/xSR7iCzyMA3pIQPKQQOAhAdBDQpKHhAIP44EeEpE8JBJ4SAT0kJjkIbHAwwSghyQkD0kEHpIAPSQleUgq8DAR6CEZyUMygYdkQA/JSR6SCzxMAnpIQfKQQuAhBdBDSpKHlAIPk4EeUpE8pBJ4SAX0kJrkIbXAwxSgBx+SBx+BBx+ghzQkD2kEHqYCPaQleUgr8JAW6CEdyUM6gYdpQA/pSR7SCzykB3rIQPKQQeBhOtBDRpKHjAIPGYEeMpE8ZBJ4mAH04Evy4Cvw4Av0kJnkIbPAw0ygBz+SBz+BBz+ghywkD1kEHmYBPfiTPPgLPPgDPWQlecgq8DAb6CGA5CFA4CEA6CEbyUM2gYc5QA+BJA+BAg+BQA/ZSR6yCzzMBXrIQfKQQ+AhB9BDTpKHnAIP84AecpE85BJ4yAX0kJvkIbfAw3yghzwkD3kEHvIAPeQlecgr8LAA6CEfyUM+gYd8QA/5SR7yCzwsBHooQPJQQOChANBDQZKHggIPi4AeCpE8FBJ4KAT0UJjkobDAw2KghyIkD0UEHooAPRQleSgq8LAE6KEYyUMxgYdiQA/FSR6KCzwsBXooQfJQQuChBNBDSZKHkgIPy4AeSpE8lBJ4KAX0UJrkobTAw3KghzIkD2UEHsoAPZQleSgr8LAC6KEcyUM5gYdyQA/lSR7KCzysBHqoQPJQQeChAtBDRZKHigIPq4AeKpE8VBJ4qAT0UJnkobLAw2qghyokD1UEHqoAPVQleagq8LAG6KEayUM1gYdqQA/VSR6qCzysBXqoQfJQQ+ChBtBDTZKHmgIP64AeapE81BJ4qAX0UJvkobbAw3qghzokD3UEHuoAPdQleagr8LAB6KEeyUM9gYd6QA/1SR7qCzxsBHpoQPLQQOChAdBDQ5KHhgIPm4AeGpE8NBJ4aAT00JjkobHAw2aghyYkD00EHpoAPTQleWgq8LAF6KEZyUMzgYdmQA/NSR6aCzxsBXpoQfLQQuChBdBDS5KHlgIP24AeWpE8tBJ4aAX00JrkobXAw3aghzYkD20EHtoAPbQleWgr8LAD6KEdyUM7gYd2QA/tSR7aCzzsBHroQPLQQeChA9BDR5KHjgIPu4AeOpE8dBJ46AT00JnkobPAw26ghy4kD10EHroAPXQleegq8LAH6KEbyUM3gYduQA/dSR66CzzsBXroQfLQQ+ChB9BDT5KHngIP+4AeepE89BJ46AX00JvkobfAw36ghz4kD30EHvoAPfQleegr8HAA6KEfyUM/gYd+QA/9SR76CzwcBHoYQPIwQOBhANDDQJKHgQIPh4AeBpE8DBJ4GAT0MJjkYbDAw2GghyEkD0MEHoYAPQwleRgq8HAE6GEYycMwgYdhQA/DSR6GCzwcBXoYQfIwQuBhBNDDSJKHkQIPx4AeRpE8jBJ4GAX0MJrkYbTAw3GghzEkD2MEHsYAPYwleRgr8HAC6GEcycM4gYdxQA/jSR7GCzycBHqYQPIwQeBhAtDDRJKHiQIPp4AeJpE8TBJ4mAT0MJnkYbLAw2mghykkD1MEHqYAPUwleZgq8HAG6GEaycM0gYdpQA/TSR6mCzycBXqYQfIwQ+BhBtDDTJKHmQIP54AeZpE8zBJ4mAX0MJvkYbbAw3mghzkkD3MEHuYAPcwleZgr8HAB6GEeycM8gYd5QA/zSR7mCzxcBHpYQPKwQOBhAdDDQpKHhQIPl4AeFpE8LBJ4WAT0sJjkYbHAw2WghyUkD0sEHpYAPSwleVgq8HAF6GEZycMygYdlQA/LSR6WCzxcBXpYQfKwQuBhBdDDSpKHlQIP14AeVpE8rBJ4WAX0sJrkYbXAw3WghzUkD2sEHtYAPawleVgr8HAD6GEdycM6gYd1QA/rSR7WCzzcBHrYQPKwQeBhA9DDRpKHjQIPt4AeNpE8bBJ42AT0sJnkYbPAw22ghy0kD1sEHrYAPWwledgq8HAH6GEbycM2gYdtQA/bSR62CzzcBXrYQfKwQ+BhB9DDTpKHnQIP94AedpE87BJ42AX0sJvkYbfAw32ghz0kD3sEHvYAPewledgr8PAA6GEfycM+gYd9QA/7SR72Czw8BHo4QPJwQODhANDDQZKHgwIPj4AeDpE8HBJ4OAT0cJjk4bDAw2OghyMkD0cEHo4APRwleTgq8PAE6OEYycMxgYdjQA/HSR6OCzw8BXo4QfJwQuDhBNDDSZKHkwIPz4AeTpE8nBJ4OAX0cJrk4bTAw3OghzMkD2cEHs4APZwleTgr8PAC6OEcycM5gYdzQA/nSR7OCzy8BHq4QPJwQeDhAtDDRZKHiwIPr4AeLpE8XBJ4uAT0cJnk4bLAw2ughyskD1cEHq4APVwlebgq8PAG6OEaycM1gYdrQA/XSR6uCzy8BXq4QfJwQ+DhBtDDTZKHmwIP74AebpE83BJ4uAX0cJvk4bbAw3ughzskD3cEHu4APdwlebgr8PAB6OEeycM9gYd7QA/3SR7uCzx8BHp4QPLwQODhAdDDQ5KHhwIPn4AeHpE8PBJ4eAT08Jjk4bHAw2eghyckD08EHp4APTwleXgq8PAF6OEZycMzgYdnQA/PSR6eCzx8BXp4QfLwQuDhBdDDS5KHlwIP34AeXpE8vBJ4eAX08Jrk4bXAw3eghzckD28EHt4APbwleXgr8PAD6OEdycM7gYd3QA/vSR7eCzz8BHr4QPLwQeDhA9DDR5KHjwIPv4AePpE8fBJ4+AT08Jnk4bPAw2+ghy8kD18EHr4APXwlefgq8PAH6OEbycM3gYdvQA/fSR6+Czz8BXr4QfLwQ+DhB9DDT5KHnwIPQVrhMv1F8vBL4OEX0MNvkoffAg9BgR7+kDz8EXj4A/Twl+Thr8BDMKCHID4cD/++y/Zg//b/9VtBfTgegvrwPQQHeghG8hBM4CEY0ENwkofgAg8hgB5CkDyEEHgIAfQQkuQhpMBDSKCHUCQPoQQeQgE9hCZ5CC3wEAroIQzJQxiBhzBAD2FJHsIKPIQGeghH8hBO4CEc0EN4kofwAg9hgB4ikDxEEHiIAPQQkeQhosBDWKCHSCQPkQQeIgE9RCZ5iCzwEA7oIQrJQxSBhyhAD1FJHqIKPIQHeohG8hBN4CEa0EN0kofoAg8RgB5ikDzEEHiIAfQQk+QhpsBDRKCHWCQPsQQeYgE9xCZ5iC3wEAnoIQ7JQxyBhzhAD3FJHuIKPEQGeohH8hBP4CEe0EN8kof4Ag9RgB4SkDwkEHhIAPSQkOQhocBDVKCHRCQPiQQeEgE9JCZ5SCzwEA3oIQnJQxKBhyRAD0lJHpIKPEQHekhG8pBM4CEZ0ENykofkAg8xgB5SkDykEHhIAfSQkuQhpcBDTKCHVCQPqQQeUgE9pCZ5SC3wEAvowYfkwUfgwQfoIQ3JQxqBh9hAD2lJHtIKPKQFekhH8pBO4CEO0EN6kof0Ag/pgR4ykDxkEHiIC/SQkeQho8BDRqCHTCQPmQQe4gE9+JI8+Ao8+AI9ZCZ5yCzwEB/owY/kwU/gwQ/oIQvJQxaBhwRAD/4kD/4CD/5AD1lJHrIKPCQEegggeQgQeAgAeshG8pBN4CER0EMgyUOgwEMg0EN2kofsAg+JgR5ykDzkEHjIAfSQk+Qhp8BDEqCHXCQPuQQecgE95CZ5yC3wkBToIQ/JQx6BhzxAD3lJHvIKPCQDeshH8pBP4CEf0EN+kof8Ag/JgR4KkDwUEHgoAPRQkOShoMBDCqCHQiQPhQQeCgE9FCZ5KCzwkBLooQjJQxGBhyJAD0VJHooKPKQCeihG8lBM4KEY0ENxkofiAg+pgR5KkDyUEHgoAfRQkuShpMCDD9BDKZKHUgIPpYAeSpM8lBZ4SAP0UIbkoYzAQxmgh7IkD2UFHtICPZQjeSgn8FAO6KE8yUN5gYd0QA8VSB4qCDxUAHqoSPJQUeAhPdBDJZKHSgIPlYAeKpM8VBZ4yAD0UIXkoYrAQxWgh6okD1UFHjICPVQjeagm8FAN6KE6yUN1gYdMQA81SB5qCDzUAHqoSfJQU+DBF+ihFslDLYGHWkAPtUkeags8ZAZ6qEPyUEfgoQ7QQ12Sh7oCD35AD/VIHuoJPNQDeqhP8lBf4CEL0EMDkocGAg8NgB4akjw0FHjwB3poRPLQSOChEdBDY5KHxgIPWYEempA8NBF4aAL00JTkoanAQwDQQzOSh2YCD82AHpqTPDQXeMgG9NCC5KGFwEMLoIeWJA8tBR4CgR5akTy0EnhoBfTQmuShtcBDdqCHNiQPbQQe2gA9tCV5aCvwkAPooR3JQzuBh3ZAD+1JHtoLPOQEeuhA8tBB4KED0ENHkoeOAg+5gB46kTx0EnjoBPTQmeShs8BDbqCHLiQPXQQeugA9dCV56CrwkAfooRvJQzeBh25AD91JHroLPOQFeuhB8tBD4KEH0ENPkoeeAg/5gB56kTz0EnjoBfTQm+Sht8BDfqCHPiQPfQQe+gA99CV56CvwUADooR/JQz+Bh35AD/1JHvoLPBQEehhA8jBA4GEA0MNAkoeBAg+FgB4GkTwMEngYBPQwmORhsMBDYaCHISQPQwQehgA9DCV5GCrwUAToYRjJwzCBh2FAD8NJHoYLPBQFehhB8jBC4GEE0MNIkoeRAg/FgB5GkTyMEngYBfQwmuRhtMBDcaCHMSQPYwQexgA9jCV5GCvwUALoYRzJwziBh3FAD+NJHsYLPJQEephA8jBB4GEC0MNEkoeJAg+lgB4mkTxMEniYBPQwmeRhssBDaaCHKSQPUwQepgA9TCV5mCrwUAboYRrJwzSBh2lAD9NJHqYLPJQFephB8jBD4GEG0MNMkoeZAg/lgB5mkTzMEniYBfQwm+RhtsBDeaCHOSQPcwQe5gA9zCV5mCvwUAHoYR7JwzyBh3lAD/NJHuYLPFQEelhA8rBA4GEB0MNCkoeFAg+VgB4WkTwsEnhYBPSwmORhscBDZaCHJSQPSwQelgA9LCV5WCrwUAXoYRnJwzKBh2VAD8tJHpYLPFQFelhB8rBC4GEF0MNKkoeVAg/VgB5WkTysEnhYBfSwmuRhtcBDdaCHNSQPawQe1gA9rCV5WCvwUAPoYR3JwzqBh3VAD+tJHtYLPNQEethA8rBB4GED0MNGkoeNAg+1gB42kTxsEnjYBPSwmeRhs8BDbaCHLSQPWwQetgA9bCV52CrwUAfoYRvJwzaBh21AD9tJHrYLPNQFethB8rBD4GEH0MNOkoedAg/1gB52kTzsEnjYBfSwm+Rht8BDfaCHPSQPewQe9gA97CV52Cvw0ADoYR/Jwz6Bh31AD/tJHvYLPDQEejhA8nBA4OEA0MNBkoeDAg+NgB4OkTwcEng4BPRwmOThsMBDY6CHIyQPRwQejgA9HCV5OCrw0ATo4RjJwzGBh2NAD8dJHo4LPDQFejhB8nBC4OEE0MNJkoeTAg/NgB5OkTycEng4BfRwmuThtMBDc6CHMyQPZwQezgA9nCV5OCvw0ALo4RzJwzmBh3NAD+dJHs4LPLQEerhA8nBB4OEC0MNFkoeLAg+tgB4ukTxcEni4BPRwmeThssBDa6CHKyQPVwQergA9XCV5uCrw0Abo4RrJwzWBh2tAD9dJHq4LPLQFerhB8nBD4OEG0MNNkoebAg/tgB5ukTzcEni4BfRwm+ThtsBDe6CHOyQPdwQe7gA93CV5uCvw0AHo4R7Jwz2Bh3tAD/dJHu4LPHQEenhA8vBA4OEB0MNDkoeHAg+dgB4ekTw8Enh4BPTwmOThscBDZ6CHJyQPTwQengA9PCV5eCrw0AXo4RnJwzOBh2dAD89JHp4LPHQFenhB8vBC4OEF0MNLkoeXAg/dgB5ekTy8Enh4BfTwmuThtcBDd6CHNyQPbwQe3gA9vCV5eCvw0APo4R3JwzuBh3dAD+9JHt4LPPQEevhA8vBB4OED0MNHkoePAg+9gB4+kTx8Enj4BPTwmeThs8BDb6CHLyQPXwQevgA9fCV5+Crw0Afo4RvJwzeBh29AD99JHr4LPPQFevhB8vBD4OEH0MNPkoefAg/9gB5+kTz8Enj4BfTwm+Tht8BDf6CHPyQPfwQe/gA9/CV5+CvwMADoIUgajod/32V7sH/7//qtoGk4HoKm4XsYCPQQjOQhmMBDMKCH4CQPwQUeBgE9hCB5CCHwEALoISTJQ0iBh8FAD6FIHkIJPIQCeghN8hBa4GEI0EMYkocwAg9hgB7CkjyEFXgYCvQQjuQhnMBDOKCH8CQP4QUehgE9RCB5iCDwEAHoISLJQ0SBh+FAD5FIHiIJPEQCeohM8hBZ4GEE0EMUkocoAg9RgB6ikjxEFXgYCfQQjeQhmsBDNKCH6CQP0QUeRgE9xCB5iCHwEAPoISbJQ0yBh9FAD7FIHmIJPMQCeohN8hBb4GEM0EMckoc4Ag9xgB7ikjzEFXgYC/QQj+QhnsBDPKCH+CQP8QUexgE9JCB5SCDwkADoISHJQ0KBh/FAD4lIHhIJPCQCekhM8pBY4GEC0EMSkockAg9JgB6SkjwkFXiYCPSQjOQhmcBDMqCH5CQPyQUeJgE9pCB5SCHwkALoISXJQ0qBh8lAD6lIHlIJPKQCekhN8pBa4GEK0IMPyYOPwIMP0EMakoc0Ag9TgR7SkjykFXhIC/SQjuQhncDDNKCH9CQP6QUe0gM9ZCB5yCDwMB3oISPJQ0aBh4xAD5lIHjIJPMwAevAlefAVePAFeshM8pBZ4GEm0IMfyYOfwIMf0EMWkocsAg+zgB78SR78BR78gR6ykjxkFXiYDfQQQPIQIPAQAPSQjeQhm8DDHKCHQJKHQIGHQKCH7CQP2QUe5gI95CB5yCHwkAPoISfJQ06Bh3lAD7lIHnIJPOQCeshN8pBb4GE+0EMekoc8Ag95gB7ykjzkFXhYAPSQj+Qhn8BDPqCH/CQP+QUeFgI9FCB5KCDwUADooSDJQ0GBh0VAD4VIHgoJPBQCeihM8lBY4GEx0EMRkociAg9FgB6KkjwUFXhYAvRQjOShmMBDMaCH4iQPxQUelgI9lCB5KCHwUALooSTJQ0mBh2VAD6VIHkoJPJQCeihN8lBa4GE50EMZkocyAg9lgB7KkjyUFXhYAfRQjuShnMBDOaCH8iQP5QUeVgI9VCB5qCDwUAHooSLJQ0WBh1VAD5VIHioJPFQCeqhM8lBZ4GE10EMVkocqAg9VgB6qkjxUFXhYA/RQjeShmsBDNaCH6iQP1QUe1gI91CB5qCHwUAPooSbJQ02Bh3VAD7VIHmoJPNQCeqhN8lBb4GE90EMdkoc6Ag91gB7qkjzUFXjYAPRQj+ShnsBDPaCH+iQP9QUeNgI9NCB5aCDw0ADooSHJQ0OBh01AD41IHhoJPDQCemhM8tBY4GEz0EMTkocmAg9NgB6akjw0FXjYAvTQjOShmcBDM6CH5iQPzQUetgI9tCB5aCHw0ALooSXJQ0uBh21AD61IHloJPLQCemhN8tBa4GE70EMbkoc2Ag9tgB7akjy0FXjYAfTQjuShncBDO6CH9iQP7QUedgI9dCB56CDw0AHooSPJQ0eBh11AD51IHjoJPHQCeuhM8tBZ4GE30EMXkocuAg9dgB66kjx0FXjYA/TQjeShm8BDN6CH7iQP3QUe9gI99CB56CHw0APooSfJQ0+Bh31AD71IHnoJPPQCeuhN8tBb4GE/0EMfkoc+Ag99gB76kjz0FXg4APTQj+Shn8BDP6CH/iQP/QUeDgI9DCB5GCDwMADoYSDJw0CBh0NAD4NIHgYJPAwCehhM8jBY4OEw0MMQkochAg9DgB6GkjwMFXg4AvQwjORhmMDDMKCH4SQPwwUejgI9jCB5GCHwMALoYSTJw0iBh2NAD6NIHkYJPIwCehhN8jBa4OE40MMYkocxAg9jgB7GkjyMFXg4AfQwjuRhnMDDOKCH8SQP4wUeTgI9TCB5mCDwMAHoYSLJw0SBh1NAD5NIHiYJPEwCephM8jBZ4OE00MMUkocpAg9TgB6mkjxMFXg4A/QwjeRhmsDDNKCH6SQP0wUezgI9zCB5mCHwMAPoYSbJw0yBh3NAD7NIHmYJPMwCephN8jBb4OE80MMckoc5Ag9zgB7mkjzMFXi4APQwj+RhnsDDPKCH+SQP8wUeLgI9LCB5WCDwsADoYSHJw0KBh0tAD4tIHhYJPCwCelhM8rBY4OEy0MMSkoclAg9LgB6WkjwsFXi4AvSwjORhmcDDMqCH5SQPywUergI9rCB5WCHwsALoYSXJw0qBh2tAD6tIHlYJPKwCelhN8rBa4OE60MMakoc1Ag9rgB7WkjysFXi4AfSwjuRhncDDOqCH9SQP6wUebgI9bCB52CDwsAHoYSPJw0aBh1tAD5tIHjYJPGwCethM8rBZ4OE20MMWkoctAg9bgB62kjxsFXi4A/SwjeRhm8DDNqCH7SQP2wUe7gI97CB52CHwsAPoYSfJw06Bh3tAD7tIHnYJPOwCethN8rBb4OE+0MMekoc9Ag97gB72kjzsFXh4APSwj+Rhn8DDPqCH/SQP+wUeHgI9HCB5OCDwcADo4SDJw0GBh0dAD4dIHg4JPBwCejhM8nBY4OEx0MMRkocjAg9HgB6OkjwcFXh4AvRwjOThmMDDMaCH4yQPxwUengI9nCB5OCHwcALo4STJw0mBh2dAD6dIHk4JPJwCejhN8nBa4OE50MMZkoczAg9ngB7OkjycFXh4AfRwjuThnMDDOaCH8yQP5wUeXgI9XCB5uCDwcAHo4SLJw0WBh1dAD5dIHi4JPFwCerhM8nBZ4OE10MMVkocrAg9XgB6ukjxcFXh4A/RwjeThmsDDNaCH6yQP1wUe3gI93CB5uCHwcAPo4SbJw02Bh3dAD7dIHm4JPNwCerhN8nBb4OE90MMdkoc7Ag93gB7ukjzcFXj4APRwj+ThnsDDPaCH+yQP9wUePgI9PCB5eCDw8ADo4SHJw0OBh09AD49IHh4JPDwCenhM8vBY4OEz0MMTkocnAg9PgB6ekjw8FXj4AvTwjOThmcDDM6CH5yQPzwUevgI9vCB5eCHw8ALo4SXJw0uBh29AD69IHl4JPLwCenhN8vBa4OE70MMbkoc3Ag9vgB7ekjy8FXj4AfTwjuThncDDO6CH9yQP7wUefgI9fCB5+CDw8AHo4SPJw0eBh19AD59IHj4JPHwCevhM8vBZ4OE30MMXkocvAg9fgB6+kjx8FXj4A/TwjeThm8DDN6CH7yQP3wUe/gI9/CB5+CHw8APo4SfJw0+BhyCtcZn+Inn4JfDwC+jhN8nDb4GHoEAPf0ge/gg8/AF6+Evy8FfgIRjQQ5C0HA//vsv2YP/2//VbQdNyPARNy/cQHOghGMlDMIGHYEAPwUkeggs8hAB6CEHyEELgIQTQQ0iSh5ACDyGBHkKRPIQSeAgF9BCa5CG0wEMooIcwJA9hBB7CAD2EJXkIK/AQGughHMlDOIGHcEAP4Ukewgs8hAF6iEDyEEHgIQLQQ0SSh4gCD2GBHiKRPEQSeIgE9BCZ5CGywEM4oIcoJA9RBB6iAD1EJXmIKvAQHughGslDNIGHaEAP0Ukeogs8RAB6iEHyEEPgIQbQQ0ySh5gCDxGBHmKRPMQSeIgF9BCb5CG2wEMkoIc4JA9xBB7iAD3EJXmIK/AQGeghHslDPIGHeEAP8Uke4gs8RAF6SEDykEDgIQHQQ0KSh4QCD1GBHhKRPCQSeEgE9JCY5CGxwEM0oIckJA9JBB6SAD0kJXlIKvAQHeghGclDMoGHZEAPyUkekgs8xAB6SEHykELgIQXQQ0qSh5QCDzGBHlKRPKQSeEgF9JCa5CG1wEMsoAcfkgcfgQcfoIc0JA9pBB5iAz2kJXlIK/CQFughHclDOoGHOEAP6Uke0gs8pAd6yEDykEHgIS7QQ0aSh4wCDxmBHjKRPGQSeIgH9OBL8uAr8OAL9JCZ5CGzwEN8oAc/kgc/gQc/oIcsJA9ZBB4SAD34kzz4Czz4Az1kJXnIKvCQEOghgOQhQOAhAOghG8lDNoGHREAPgSQPgQIPgUAP2Ukesgs8JAZ6yEHykEPgIQfQQ06Sh5wCD0mAHnKRPOQSeMgF9JCb5CG3wENSoIc8JA95BB7yAD3kJXnIK/CQDOghH8lDPoGHfEAP+Uke8gs8JAd6KEDyUEDgoQDQQ0GSh4ICDymAHgqRPBQSeCgE9FCY5KGwwENKoIciJA9FBB6KAD0UJXkoKvCQCuihGMlDMYGHYkAPxUkeigs8pAZ6KEHyUELgoQTQQ0mSh5ICDz5AD6VIHkoJPJQCeihN8lBa4CEN0EMZkocyAg9lgB7KkjyUFXhIC/RQjuShnMBDOaCH8iQP5QUe0gE9VCB5qCDwUAHooSLJQ0WBh/RAD5VIHioJPFQCeqhM8lBZ4CED0EMVkocqAg9VgB6qkjxUFXjICPRQjeShmsBDNaCH6iQP1QUeMgE91CB5qCHwUAPooSbJQ02BB1+gh1okD7UEHmoBPdQmeagt8JAZ6KEOyUMdgYc6QA91SR7qCjz4AT3UI3moJ/BQD+ihPslDfYGHLEAPDUgeGgg8NAB6aEjy0FDgwR/ooRHJQyOBh0ZAD41JHhoLPGQFemhC8tBE4KEJ0ENTkoemAg8BQA/NSB6aCTw0A3poTvLQXOAhG9BDC5KHFgIPLYAeWpI8tBR4CAR6aEXy0ErgoRXQQ2uSh9YCD9mBHtqQPLQReGgD9NCW5KGtwEMOoId2JA/tBB7aAT20J3loL/CQE+ihA8lDB4GHDkAPHUkeOgo85AJ66ETy0EngoRPQQ2eSh84CD7mBHrqQPHQReOgC9NCV5KGrwEMeoIduJA/dBB66AT10J3noLvCQF+ihB8lDD4GHHkAPPUkeego85AN66EXy0EvgoRfQQ2+Sh94CD/mBHvqQPPQReOgD9NCX5KGvwEMBoId+JA/9BB76AT30J3noL/BQEOhhAMnDAIGHAUAPA0keBgo8FAJ6GETyMEjgYRDQw2CSh8ECD4WBHoaQPAwReBgC9DCU5GGowEMRoIdhJA/DBB6GAT0MJ3kYLvBQFOhhBMnDCIGHEUAPI0keRgo8FAN6GEXyMErgYRTQw2iSh9ECD8WBHsaQPIwReBgD9DCW5GGswEMJoIdxJA/jBB7GAT2MJ3kYL/BQEuhhAsnDBIGHCUAPE0keJgo8lAJ6mETyMEngYRLQw2SSh8kCD6WBHqaQPEwReJgC9DCV5GGqwEMZoIdpJA/TBB6mAT1MJ3mYLvBQFuhhBsnDDIGHGUAPM0keZgo8lAN6mEXyMEvgYRbQw2ySh9kCD+WBHuaQPMwReJgD9DCX5GGuwEMFoId5JA/zBB7mAT3MJ3mYL/BQEehhAcnDAoGHBUAPC0keFgo8VAJ6WETysEjgYRHQw2KSh8UCD5WBHpaQPCwReFgC9LCU5GGpwEMVoIdlJA/LBB6WAT0sJ3lYLvBQFehhBcnDCoGHFUAPK0keVgo8VAN6WEXysErgYRXQw2qSh9UCD9WBHtaQPKwReFgD9LCW5GGtwEMNoId1JA/rBB7WAT2sJ3lYL/BQE+hhA8nDBoGHDUAPG0keNgo81AJ62ETysEngYRPQw2aSh80CD7WBHraQPGwReNgC9LCV5GGrwEMdoIdtJA/bBB62AT1sJ3nYLvBQF+hhB8nDDoGHHUAPO0kedgo81AN62EXysEvgYRfQw26Sh90CD/WBHvaQPOwReNgD9LCX5GGvwEMDoId9JA/7BB72AT3sJ3nYL/DQEOjhAMnDAYGHA0APB0keDgo8NAJ6OETycEjg4RDQw2GSh8MCD42BHo6QPBwReDgC9HCU5OGowEMToIdjJA/HBB6OAT0cJ3k4LvDQFOjhBMnDCYGHE0APJ0keTgo8NAN6OEXycErg4RTQw2mSh9MCD82BHs6QPJwReDgD9HCW5OGswEMLoIdzJA/nBB7OAT2cJ3k4L/DQEujhAsnDBYGHC0APF0keLgo8tAJ6uETycEng4RLQw2WSh8sCD62BHq6QPFwReLgC9HCV5OGqwEMboIdrJA/XBB6uAT1cJ3m4LvDQFujhBsnDDYGHG0APN0kebgo8tAN6uEXycEvg4RbQw22Sh9sCD+2BHu6QPNwReLgD9HCX5OGuwEMHoId7JA/3BB7uAT3cJ3m4L/DQEejhAcnDA4GHB0APD0keHgo8dAJ6eETy8Ejg4RHQw2OSh8cCD52BHp6QPDwReHgC9PCU5OGpwEMXoIdnJA/PBB6eAT08J3l4LvDQFejhBcnDC4GHF0APL0keXgo8dAN6eEXy8Erg4RXQw2uSh9cCD92BHt6QPLwReHgD9PCW5OGtwEMPoId3JA/vBB7eAT28J3l4L/DQE+jhA8nDB4GHD0APH0kePgo89AJ6+ETy8Eng4RPQw2eSh88CD72BHr6QPHwRePgC9PCV5OGrwEMfoIdvJA/fBB6+AT18J3n4LvDQF+jhB8nDD4GHH0APP0kefgo89AN6+EXy8Evg4RfQw2+Sh98CD/2BHv6QPPwRePgD9PCX5OGvwMMAoIcg6Tge/n2X7cH+7f/rt4Km43gImo7vYSDQQzCSh2ACD8GAHoKTPAQXeBgE9BCC5CGEwEMIoIeQJA8hBR4GAz2EInkIJfAQCughNMlDaIGHIUAPYUgewgg8hAF6CEvyEFbgYSjQQziSh3ACD+GAHsKTPIQXeBgG9BCB5CGCwEMEoIeIJA8RBR6GAz1EInmIJPAQCeghMslDZIGHEUAPUUgeogg8RAF6iEryEFXgYSTQQzSSh2gCD9GAHqKTPEQXeBgF9BCD5CGGwEMMoIeYJA8xBR5GAz3EInmIJfAQC+ghNslDbIGHMUAPcUge4gg8xAF6iEvyEFfgYSzQQzySh3gCD/GAHuKTPMQXeBgH9JCA5CGBwEMCoIeEJA8JBR7GAz0kInlIJPCQCOghMclDYoGHCUAPSUgekgg8JAF6SErykFTgYSLQQzKSh2QCD8mAHpKTPCQXeJgE9JCC5CGFwEMKoIeUJA8pBR4mAz2kInlIJfCQCughNclDaoGHKUAPPiQPPgIPPkAPaUge0gg8TAV6SEvykFbgIS3QQzqSh3QCD9OAHtKTPKQXeEgP9JCB5CGDwMN0oIeMJA8ZBR4yAj1kInnIJPAwA+jBl+TBV+DBF+ghM8lDZoGHmUAPfiQPfgIPfkAPWUgesgg8zAJ68Cd58Bd48Ad6yErykFXgYTbQQwDJQ4DAQwDQQzaSh2wCD3OAHgJJHgIFHgKBHrKTPGQXeJgL9JCD5CGHwEMOoIecJA85BR7mAT3kInnIJfCQC+ghN8lDboGH+UAPeUge8gg85AF6yEvykFfgYQHQQz6Sh3wCD/mAHvKTPOQXeFgI9FCA5KGAwEMBoIeCJA8FBR4WAT0UInkoJPBQCOihMMlDYYGHxUAPRUgeigg8FAF6KEryUFTgYQnQQzGSh2ICD8WAHoqTPBQXeFgK9FCC5KGEwEMJoIeSJA8lBR6WAT2UInkoJfBQCuihNMlDaYGH5UAPZUgeygg8lAF6KEvyUFbgYQXQQzmSh3ICD+WAHsqTPJQXeFgJ9FCB5KGCwEMFoIeKJA8VBR5WAT1UInmoJPBQCeihMslDZYGH1UAPVUgeqgg8VAF6qEryUFXgYQ3QQzWSh2oCD9WAHqqTPFQXeFgL9FCD5KGGwEMNoIeaJA81BR7WAT3UInmoJfBQC+ihNslDbYGH9UAPdUge6gg81AF6qEvyUFfgYQPQQz2Sh3oCD/WAHuqTPNQXeNgI9NCA5KGBwEMDoIeGJA8NBR42AT00InloJPDQCOihMclDY4GHzUAPTUgemgg8NAF6aEry0FTgYQvQQzOSh2YCD82AHpqTPDQXeNgK9NCC5KGFwEMLoIeWJA8tBR62AT20InloJfDQCuihNclDa4GH7UAPbUge2gg8tAF6aEvy0FbgYQfQQzuSh3YCD+2AHtqTPLQXeNgJ9NCB5KGDwEMHoIeOJA8dBR52AT10InnoJPDQCeihM8lDZ4GH3UAPXUgeugg8dAF66Ery0FXgYQ/QQzeSh24CD92AHrqTPHQXeNgL9NCD5KGHwEMPoIeeJA89BR72AT30InnoJfDQC+ihN8lDb4GH/UAPfUge+gg89AF66Evy0Ffg4QDQQz+Sh34CD/2AHvqTPPQXeDgI9DCA5GGAwMMAoIeBJA8DBR4OAT0MInkYJPAwCOhhMMnDYIGHw0APQ0gehgg8DAF6GEryMFTg4QjQwzCSh2ECD8OAHoaTPAwXeDgK9DCC5GGEwMMIoIeRJA8jBR6OAT2MInkYJfAwCuhhNMnDaIGH40APY0gexgg8jAF6GEvyMFbg4QTQwziSh3ECD+OAHsaTPIwXeDgJ9DCB5GGCwMMEoIeJJA8TBR5OAT1MInmYJPAwCehhMsnDZIGH00APU0gepgg8TAF6mEryMFXg4QzQwzSSh2kCD9OAHqaTPEwXeDgL9DCD5GGGwMMMoIeZJA8zBR7OAT3MInmYJfAwC+hhNsnDbIGH80APc0ge5gg8zAF6mEvyMFfg4QLQwzySh3kCD/OAHuaTPMwXeLgI9LCA5GGBwMMCoIeFJA8LBR4uAT0sInlYJPCwCOhhMcnDYoGHy0APS0gelgg8LAF6WErysFTg4QrQwzKSh2UCD8uAHpaTPCwXeLgK9LCC5GGFwMMKoIeVJA8rBR6uAT2sInlYJfCwCuhhNcnDaoGH60APa0ge1gg8rAF6WEvysFbg4QbQwzqSh3UCD+uAHtaTPKwXeLgJ9LCB5GGDwMMGoIeNJA8bBR5uAT1sInnYJPCwCehhM8nDZoGH20APW0getgg8bAF62ErysFXg4Q7QwzaSh20CD9uAHraTPGwXeLgL9LCD5GGHwMMOoIedJA87BR7uAT3sInnYJfCwC+hhN8nDboGH+0APe0ge9gg87AF62EvysFfg4QHQwz6Sh30CD/uAHvaTPOwXeHgI9HCA5OGAwMMBoIeDJA8HBR4eAT0cInk4JPBwCOjhMMnDYYGHx0APR0gejgg8HAF6OErycFTg4QnQwzGSh2MCD8eAHo6TPBwXeHgK9HCC5OGEwMMJoIeTJA8nBR6eAT2cInk4JfBwCujhNMnDaYGH50APZ0gezgg8nAF6OEvycFbg4QXQwzmSh3MCD+eAHs6TPJwXeHgJ9HCB5OGCwMMFoIeLJA8XBR5eAT1cInm4JPBwCejhMsnDZYGH10APV0gergg8XAF6uErycFXg4Q3QwzWSh2sCD9eAHq6TPFwXeHgL9HCD5OGGwMMNoIebJA83BR7eAT3cInm4JfBwC+jhNsnDbYGH90APd0ge7gg83AF6uEvycFfg4QPQwz2Sh3sCD/eAHu6TPNwXePgI9PCA5OGBwMMDoIeHJA8PBR4+AT08Inl4JPDwCOjhMcnDY4GHz0APT0gengg8PAF6eEry8FTg4QvQwzOSh2cCD8+AHp6TPDwXePgK9PCC5OGFwMMLoIeXJA8vBR6+AT28Inl4JfDwCujhNcnDa4GH70APb0ge3gg8vAF6eEvy8Fbg4QfQwzuSh3cCD++AHt6TPLwXePgJ9PCB5OGDwMMHoIePJA8fBR5+AT18Inn4JPDwCejhM8nDZ4GH30APX0gevgg8fAF6+Ery8FXg4Q/QwzeSh28CD9+AHr6TPHwXePgL9PCD5OGHwMMPoIefJA8/BR6CtMFl+ovk4ZfAwy+gh98kD78FHoICPfwhefgj8PAH6OEvycNfgYdgQA9B0nM8/Psu24P92//XbwVNz/EQND3fQ3Cgh2AkD8EEHoIBPQQneQgu8BAC6CEEyUMIgYcQQA8hSR5CCjyEBHoIRfIQSuAhFNBDaJKH0AIPoYAewpA8hBF4CAP0EJbkIazAQ2igh3AkD+EEHsIBPYQneQgv8BAG6CECyUMEgYcIQA8RSR4iCjyEBXqIRPIQSeAhEtBDZJKHyAIP4YAeopA8RBF4iAL0EJXkIarAQ3igh2gkD9EEHqIBPUQneYgu8BAB6CEGyUMMgYcYQA8xSR5iCjxEBHqIRfIQS+AhFtBDbJKH2AIPkYAe4pA8xBF4iAP0EJfkIa7AQ2Sgh3gkD/EEHuIBPcQneYgv8BAF6CEByUMCgYcEQA8JSR4SCjxEBXpIRPKQSOAhEdBDYpKHxAIP0YAekpA8JBF4SAL0kJTkIanAQ3Sgh2QkD8kEHpIBPSQneUgu8BAD6CEFyUMKgYcUQA8pSR5SCjzEBHpIRfKQSuAhFdBDapKH1AIPsYAefEgefAQefIAe0pA8pBF4iA30kJbkIa3AQ1qgh3QkD+kEHuIAPaQneUgv8JAe6CEDyUMGgYe4QA8ZSR4yCjxkBHrIRPKQSeAhHtCDL8mDr8CDL9BDZpKHzAIP8YEe/Ege/AQe/IAespA8ZBF4SAD04E/y4C/w4A/0kJXkIavAQ0KghwCShwCBhwCgh2wkD9kEHhIBPQSSPAQKPAQCPWQnecgu8JAY6CEHyUMOgYccQA85SR5yCjwkAXrIRfKQS+AhF9BDbpKH3AIPSYEe8pA85BF4yAP0kJfkIa/AQzKgh3wkD/kEHvIBPeQnecgv8JAc6KEAyUMBgYcCQA8FSR4KCjykAHooRPJQSOChENBDYZKHwgIPKYEeipA8FBF4KAL0UJTkoajAQyqgh2IkD8UEHooBPRQneSgu8JAa6KEEyUMJgYcSQA8lSR5KCjz4AD2UInkoJfBQCuihNMlDaYGHNEAPZUgeygg8lAF6KEvyUFbgIS3QQzmSh3ICD+WAHsqTPJQXeEgH9FCB5KGCwEMFoIeKJA8VBR7SAz1UInmoJPBQCeihMslDZYGHDEAPVUgeqgg8VAF6qEryUFXgISPQQzWSh2oCD9WAHqqTPFQXeMgE9FCD5KGGwEMNoIeaJA81BR58gR5qkTzUEnioBfRQm+ShtsBDZqCHOiQPdQQe6gA91CV5qCvw4Af0UI/koZ7AQz2gh/okD/UFHrIAPTQgeWgg8NAA6KEhyUNDgQd/oIdGJA+NBB4aAT00JnloLPCQFeihCclDE4GHJkAPTUkemgo8BAA9NCN5aCbw0AzooTnJQ3OBh2xADy1IHloIPLQAemhJ8tBS4CEQ6KEVyUMrgYdWQA+tSR5aCzxkB3poQ/LQRuChDdBDW5KHtgIPOYAe2pE8tBN4aAf00J7kob3AQ06ghw4kDx0EHjoAPXQkeego8JAL6KETyUMngYdOQA+dSR46CzzkBnroQvLQReChC9BDV5KHrgIPeYAeupE8dBN46Ab00J3kobvAQ16ghx4kDz0EHnoAPfQkeegp8JAP6KEXyUMvgYdeQA+9SR56CzzkB3roQ/LQR+ChD9BDX5KHvgIPBYAe+pE89BN46Af00J/kob/AQ0GghwEkDwMEHgYAPQwkeRgo8FAI6GEQycMggYdBQA+DSR4GCzwUBnoYQvIwROBhCNDDUJKHoQIPRYAehpE8DBN4GAb0MJzkYbjAQ1GghxEkDyMEHkYAPYwkeRgp8FAM6GEUycMogYdRQA+jSR5GCzwUB3oYQ/IwRuBhDNDDWJKHsQIPJYAexpE8jBN4GAf0MJ7kYbzAQ0mghwkkDxMEHiYAPUwkeZgo8FAK6GESycMkgYdJQA+TSR4mCzyUBnqYQvIwReBhCtDDVJKHqQIPZYAeppE8TBN4mAb0MJ3kYbrAQ1mghxkkDzMEHmYAPcwkeZgp8FAO6GEWycMsgYdZQA+zSR5mCzyUB3qYQ/IwR+BhDtDDXJKHuQIPFYAe5pE8zBN4mAf0MJ/kYb7AQ0WghwUkDwsEHhYAPSwkeVgo8FAJ6GERycMigYdFQA+LSR4WCzxUBnpYQvKwROBhCdDDUpKHpQIPVYAelpE8LBN4WAb0sJzkYbnAQ1WghxUkDysEHlYAPawkeVgp8FAN6GEVycMqgYdVQA+rSR5WCzxUB3pYQ/KwRuBhDdDDWpKHtQIPNYAe1pE8rBN4WAf0sJ7kYb3AQ02ghw0kDxsEHjYAPWwkedgo8FAL6GETycMmgYdNQA+bSR42CzzUBnrYQvKwReBhC9DDVpKHrQIPdYAetpE8bBN42Ab0sJ3kYbvAQ12ghx0kDzsEHnYAPewkedgp8FAP6GEXycMugYddQA+7SR52CzzUB3rYQ/KwR+BhD9DDXpKHvQIPDYAe9pE87BN42Af0sJ/kYb/AQ0OghwMkDwcEHg4APRwkeTgo8NAI6OEQycMhgYdDQA+HSR4OCzw0Bno4QvJwRODhCNDDUZKHowIPTYAejpE8HBN4OAb0cJzk4bjAQ1OghxMkDycEHk4APZwkeTgp8NAM6OEUycMpgYdTQA+nSR5OCzw0B3o4Q/JwRuDhDNDDWZKHswIPLYAezpE8nBN4OAf0cJ7k4bzAQ0ughwskDxcEHi4APVwkebgo8NAK6OESycMlgYdLQA+XSR4uCzy0Bnq4QvJwReDhCtDDVZKHqwIPbYAerpE8XBN4uAb0cJ3k4brAQ1ughxskDzcEHm4APdwkebgp8NAO6OEWycMtgYdbQA+3SR5uCzy0B3q4Q/JwR+DhDtDDXZKHuwIPHYAe7pE83BN4uAf0cJ/k4b7AQ0eghwckDw8EHh4APTwkeXgo8NAJ6OERycMjgYdHQA+PSR4eCzx0Bnp4QvLwRODhCdDDU5KHpwIPXYAenpE8PBN4eAb08Jzk4bnAQ1eghxckDy8EHl4APbwkeXgp8NAN6OEVycMrgYdXQA+vSR5eCzx0B3p4Q/LwRuDhDdDDW5KHtwIPPYAe3pE8vBN4eAf08J7k4b3AQ0+ghw8kDx8EHj4APXwkefgo8NAL6OETycMngYdPQA+fSR4+Czz0Bnr4QvLwReDhC9DDV5KHrwIPfYAevpE8fBN4+Ab08J3k4bvAQ1+ghx8kDz8EHn4APfwkefgp8NAP6OEXycMvgYdfQA+/SR5+Czz0B3r4Q/LwR+DhD9DDX5KHvwIPA4AegmTgePj3XbYH+7f/r98KmoHjIWgGvoeBQA/BSB6CCTwEA3oITvIQXOBhENBDCJKHEAIPIYAeQpI8hBR4GAz0EIrkIZTAQyigh9AkD6EFHoYAPYQheQgj8BAG6CEsyUNYgYehQA/hSB7CCTyEA3oIT/IQXuBhGNBDBJKHCAIPEYAeIpI8RBR4GA70EInkIZLAQySgh8gkD5EFHkYAPUQheYgi8BAF6CEqyUNUgYeRQA/RSB6iCTxEA3qITvIQXeBhFNBDDJKHGAIPMYAeYpI8xBR4GA30EIvkIZbAQyygh9gkD7EFHsYAPcQheYgj8BAH6CEuyUNcgYexQA/xSB7iCTzEA3qIT/IQX+BhHNBDApKHBAIPCYAeEpI8JBR4GA/0kIjkIZHAQyKgh8QkD4kFHiYAPSQheUgi8JAE6CEpyUNSgYeJQA/JSB6SCTwkA3pITvKQXOBhEtBDCpKHFAIPKYAeUpI8pBR4mAz0kIrkIZXAQyqgh9QkD6kFHqYAPfiQPPgIPPgAPaQheUgj8DAV6CEtyUNagYe0QA/pSB7SCTxMA3pIT/KQXuAhPdBDBpKHDAIP04EeMpI8ZBR4yAj0kInkIZPAwwygB1+SB1+BB1+gh8wkD5kFHmYCPfiRPPgJPPgBPWQhecgi8DAL6MGf5MFf4MEf6CEryUNWgYfZQA8BJA8BAg8BQA/ZSB6yCTzMAXoIJHkIFHgIBHrITvKQXeBhLtBDDpKHHAIPOYAecpI85BR4mAf0kIvkIZfAQy6gh9wkD7kFHuYDPeQhecgj8JAH6CEvyUNegYcFQA/5SB7yCTzkA3rIT/KQX+BhIdBDAZKHAgIPBYAeCpI8FBR4WAT0UIjkoZDAQyGgh8IkD4UFHhYDPRQheSgi8FAE6KEoyUNRgYclQA/FSB6KCTwUA3ooTvJQXOBhKdBDCZKHEgIPJYAeSpI8lBR4WAb0UIrkoZTAQymgh9IkD6UFHpYDPZQheSgj8FAG6KEsyUNZgYcVQA/lSB7KCTyUA3ooT/JQXuBhJdBDBZKHCgIPFYAeKpI8VBR4WAX0UInkoZLAQyWgh8okD5UFHlYDPVQheagi8FAF6KEqyUNVgYc1QA/VSB6qCTxUA3qoTvJQXeBhLdBDDZKHGgIPNYAeapI81BR4WAf0UIvkoZbAQy2gh9okD7UFHtYDPdQheagj8FAH6KEuyUNdgYcNQA/1SB7qCTzUA3qoT/JQX+BhI9BDA5KHBgIPDYAeGpI8NBR42AT00IjkoZHAQyOgh8YkD40FHjYDPTQheWgi8NAE6KEpyUNTgYctQA/NSB6aCTw0A3poTvLQXOBhK9BDC5KHFgIPLYAeWpI8tBR42Ab00IrkoZXAQyugh9YkD60FHrYDPbQheWgj8NAG6KEtyUNbgYcdQA/tSB7aCTy0A3poT/LQXuBhJ9BDB5KHDgIPHYAeOpI8dBR42AX00InkoZPAQyegh84kD50FHnYDPXQheegi8NAF6KEryUNXgYc9QA/dSB66CTx0A3roTvLQXeBhL9BDD5KHHgIPPYAeepI89BR42Af00IvkoZfAQy+gh94kD70FHvYDPfQheegj8NAH6KEvyUNfgYcDQA/9SB76CTz0A3roT/LQX+DhINDDAJKHAQIPA4AeBpI8DBR4OAT0MIjkYZDAwyCgh8EkD4MFHg4DPQwheRgi8DAE6GEoycNQgYcjQA/DSB6GCTwMA3oYTvIwXODhKNDDCJKHEQIPI4AeRpI8jBR4OAb0MIrkYZTAwyigh9EkD6MFHo4DPYwheRgj8DAG6GEsycNYgYcTQA/jSB7GCTyMA3oYT/IwXuDhJNDDBJKHCQIPE4AeJpI8TBR4OAX0MInkYZLAwySgh8kkD5MFHk4DPUwheZgi8DAF6GEqycNUgYczQA/TSB6mCTxMA3qYTvIwXeDhLNDDDJKHGQIPM4AeZpI8zBR4OAf0MIvkYZbAwyygh9kkD7MFHs4DPcwheZgj8DAH6GEuycNcgYcLQA/zSB7mCTzMA3qYT/IwX+DhItDDApKHBQIPC4AeFpI8LBR4uAT0sIjkYZHAwyKgh8UkD4sFHi4DPSwheVgi8LAE6GEpycNSgYcrQA/LSB6WCTwsA3pYTvKwXODhKtDDCpKHFQIPK4AeVpI8rBR4uAb0sIrkYZXAwyqgh9UkD6sFHq4DPawheVgj8LAG6GEtycNagYcbQA/rSB7WCTysA3pYT/KwXuDhJtDDBpKHDQIPG4AeNpI8bBR4uAX0sInkYZPAwyagh80kD5sFHm4DPWwhedgi8LAF6GErycNWgYc7QA/bSB62CTxsA3rYTvKwXeDhLtDDDpKHHQIPO4AedpI87BR4uAf0sIvkYZfAwy6gh90kD7sFHu4DPewhedgj8LAH6GEvycNegYcHQA/7SB72CTzsA3rYT/KwX+DhIdDDAZKHAwIPB4AeDpI8HBR4eAT0cIjk4ZDAwyGgh8MkD4cFHh4DPRwheTgi8HAE6OEoycNRgYcnQA/HSB6OCTwcA3o4TvJwXODhKdDDCZKHEwIPJ4AeTpI8nBR4eAb0cIrk4ZTAwymgh9MkD6cFHp4DPZwheTgj8HAG6OEsycNZgYcXQA/nSB7OCTycA3o4T/JwXuDhJdDDBZKHCwIPF4AeLpI8XBR4eAX0cInk4ZLAwyWgh8skD5cFHl4DPVwhebgi8HAF6OEqycNVgYc3QA/XSB6uCTxcA3q4TvJwXeDhLdDDDZKHGwIPN4AebpI83BR4eAf0cIvk4ZbAwy2gh9skD7cFHt4DPdwhebgj8HAH6OEuycNdgYcPQA/3SB7uCTzcA3q4T/JwX+DhI9DDA5KHBwIPD4AeHpI8PBR4+AT08Ijk4ZHAwyOgh8ckD48FHj4DPTwheXgi8PAE6OEpycNTgYcvQA/PSB6eCTw8A3p4TvLwXODhK9DDC5KHFwIPL4AeXpI8vBR4+Ab08Irk4ZXAwyugh9ckD68FHr4DPbwheXgj8PAG6OEtycNbgYcfQA/vSB7eCTy8A3p4T/LwXuDhJ9DDB5KHDwIPH4AePpI8fBR4+AX08Ink4ZPAwyegh88kD58FHn4DPXwhefgi8PAF6OErycNXgYc/QA/fSB6+CTx8A3r4TvLwXeDhL9DDD5KHHwIPP4AefpI8/BR4CNIWl+kvkodfAg+/gB5+kzz8FngICvTwh+Thj8DDH6CHvyQPfwUeggE9BMnI8fDvu2wP9m//X78VNCPHQ9CMfA/BgR6CkTwEE3gIBvQQnOQhuMBDCKCHECQPIQQeQgA9hCR5CCnwEBLoIRTJQyiBh1BAD6FJHkILPIQCeghD8hBG4CEM0ENYkoewAg+hgR7CkTyEE3gIB/QQnuQhvMBDGKCHCCQPEQQeIgA9RCR5iCjwEBboIRLJQySBh0hAD5FJHiILPIQDeohC8hBF4CEK0ENUkoeoAg/hgR6ikTxEE3iIBvQQneQhusBDBKCHGCQPMQQeYgA9xCR5iCnwEBHoIRbJQyyBh1hAD7FJHmILPEQCeohD8hBH4CEO0ENckoe4Ag+RgR7ikTzEE3iIB/QQn+QhvsBDFKCHBCQPCQQeEgA9JCR5SCjwEBXoIRHJQyKBh0RAD4lJHhILPEQDekhC8pBE4CEJ0ENSkoekAg/RgR6SkTwkE3hIBvSQnOQhucBDDKCHFCQPKQQeUgA9pCR5SCnwEBPoIRXJQyqBh1RAD6lJHlILPMQCevAhefARePABekhD8pBG4CE20ENakoe0Ag9pgR7SkTykE3iIA/SQnuQhvcBDeqCHDCQPGQQe4gI9ZCR5yCjwkBHoIRPJQyaBh3hAD74kD74CD75AD5lJHjILPMQHevAjefATePADeshC8pBF4CEB0IM/yYO/wIM/0ENWkoesAg8JgR4CSB4CBB4CgB6ykTxkE3hIBPQQSPIQKPAQCPSQneQhu8BDYqCHHCQPOQQecgA95CR5yCnwkAToIRfJQy6Bh1xAD7lJHnILPCQFeshD8pBH4CEP0ENekoe8Ag/JgB7ykTzkE3jIB/SQn+Qhv8BDcqCHAiQPBQQeCgA9FCR5KCjwkALooRDJQyGBh0JAD4VJHgoLPKQEeihC8lBE4KEI0ENRkoeiAg+pgB6KkTwUE3goBvRQnOShuMBDaqCHEiQPJQQeSgA9lCR5KCnw4AP0UIrkoZTAQymgh9IkD6UFHtIAPZQheSgj8FAG6KEsyUNZgYe0QA/lSB7KCTyUA3ooT/JQXuAhHdBDBZKHCgIPFYAeKpI8VBR4SA/0UInkoZLAQyWgh8okD5UFHjIAPVQheagi8FAF6KEqyUNVgYeMQA/VSB6qCTxUA3qoTvJQXeAhE9BDDZKHGgIPNYAeapI81BR48AV6qEXyUEvgoRbQQ22Sh9oCD5mBHuqQPNQReKgD9FCX5KGuwIMf0EM9kod6Ag/1gB7qkzzUF3jIAvTQgOShgcBDA6CHhiQPDQUe/IEeGpE8NBJ4aAT00JjkobHAQ1aghyYkD00EHpoAPTQleWgq8BAA9NCM5KGZwEMzoIfmJA/NBR6yAT20IHloIfDQAuihJclDS4GHQKCHViQPrQQeWgE9tCZ5aC3wkB3ooQ3JQxuBhzZAD21JHtoKPOQAemhH8tBO4KEd0EN7kof2Ag85gR46kDx0EHjoAPTQkeSho8BDLqCHTiQPnQQeOgE9dCZ56CzwkBvooQvJQxeBhy5AD11JHroKPOQBeuhG8tBN4KEb0EN3kofuAg95gR56kDz0EHjoAfTQk+Shp8BDPqCHXiQPvQQeegE99CZ56C3wkB/ooQ/JQx+Bhz5AD31JHvoKPBQAeuhH8tBP4KEf0EN/kof+Ag8FgR4GkDwMEHgYAPQwkORhoMBDIaCHQSQPgwQeBgE9DCZ5GCzwUBjoYQjJwxCBhyFAD0NJHoYKPBQBehhG8jBM4GEY0MNwkofhAg9FgR5GkDyMEHgYAfQwkuRhpMBDMaCHUSQPowQeRgE9jCZ5GC3wUBzoYQzJwxiBhzFAD2NJHsYKPJQAehhH8jBO4GEc0MN4kofxAg8lgR4mkDxMEHiYAPQwkeRhosBDKaCHSSQPkwQeJgE9TCZ5mCzwUBroYQrJwxSBhylAD1NJHqYKPJQBephG8jBN4GEa0MN0kofpAg9lgR5mkDzMEHiYAfQwk+RhpsBDOaCHWSQPswQeZgE9zCZ5mC3wUB7oYQ7JwxyBhzlAD3NJHuYKPFQAephH8jBP4GEe0MN8kof5Ag8VgR4WkDwsEHhYAPSwkORhocBDJaCHRSQPiwQeFgE9LCZ5WCzwUBnoYQnJwxKBhyVAD0tJHpYKPFQBelhG8rBM4GEZ0MNykoflAg9VgR5WkDysEHhYAfSwkuRhpcBDNaCHVSQPqwQeVgE9rCZ5WC3wUB3oYQ3JwxqBhzVAD2tJHtYKPNQAelhH8rBO4GEd0MN6kof1Ag81gR42kDxsEHjYAPSwkeRho8BDLaCHTSQPmwQeNgE9bCZ52CzwUBvoYQvJwxaBhy1AD1tJHrYKPNQBethG8rBN4GEb0MN2koftAg91gR52kDzsEHjYAfSwk+Rhp8BDPaCHXSQPuwQedgE97CZ52C3wUB/oYQ/Jwx6Bhz1AD3tJHvYKPDQAethH8rBP4GEf0MN+kof9Ag8NgR4OkDwcEHg4APRwkOThoMBDI6CHQyQPhwQeDgE9HCZ5OCzw0Bjo4QjJwxGBhyNAD0dJHo4KPDQBejhG8nBM4OEY0MNxkofjAg9NgR5OkDycEHg4AfRwkuThpMBDM6CHUyQPpwQeTgE9nCZ5OC3w0Bzo4QzJwxmBhzNAD2dJHs4KPLQAejhH8nBO4OEc0MN5kofzAg8tgR4ukDxcEHi4APRwkeThosBDK6CHSyQPlwQeLgE9XCZ5uCzw0Bro4QrJwxWBhytAD1dJHq4KPLQBerhG8nBN4OEa0MN1kofrAg9tgR5ukDzcEHi4AfRwk+ThpsBDO6CHWyQPtwQebgE93CZ5uC3w0B7o4Q7Jwx2BhztAD3dJHu4KPHQAerhH8nBP4OEe0MN9kof7Ag8dgR4ekDw8EHh4APTwkOThocBDJ6CHRyQPjwQeHgE9PCZ5eCzw0Bno4QnJwxOBhydAD09JHp4KPHQBenhG8vBM4OEZ0MNzkofnAg9dgR5ekDy8EHh4AfTwkuThpcBDN6CHVyQPrwQeXgE9vCZ5eC3w0B3o4Q3JwxuBhzdAD29JHt4KPPQAenhH8vBO4OEd0MN7kof3Ag89gR4+kDx8EHj4APTwkeTho8BDL6CHTyQPnwQePgE9fCZ5+Czw0Bvo4QvJwxeBhy9AD19JHr4KPPQBevhG8vBN4OEb0MN3kofvAg99gR5+kDz8EHj4AfTwk+Thp8BDP6CHXyQPvwQefgE9/CZ5+C3w0B/o4Q/Jwx+Bhz9AD39JHv4KPAwAegiSiePh33fZHuzf/r9+K2gmjoegmfgeBgI9BCN5CCbwEAzoITjJQ3CBh0FADyFIHkIIPIQAeghJ8hBS4GEw0EMokodQAg+hgB5CkzyEFngYAvQQhuQhjMBDGKCHsCQPYQUehgI9hCN5CCfwEA7oITzJQ3iBh2FADxFIHiIIPEQAeohI8hBR4GE40EMkkodIAg+RgB4ikzxEFngYAfQQheQhisBDFKCHqCQPUQUeRgI9RCN5iCbwEA3oITrJQ3SBh1FADzFIHmIIPMQAeohJ8hBT4GE00EMskodYAg+xgB5ikzzEFngYA/QQh+QhjsBDHKCHuCQPcQUexgI9xCN5iCfwEA/oIT7JQ3yBh3FADwlIHhIIPCQAekhI8pBQ4GE80EMikodEAg+JgB4SkzwkFniYAPSQhOQhicBDEqCHpCQPSQUeJgI9JCN5SCbwkAzoITnJQ3KBh0lADylIHlIIPKQAekhJ8pBS4GEy0EMqkodUAg+pgB5SkzykFniYAvTgQ/LgI/DgA/SQhuQhjcDDVKCHtCQPaQUe0gI9pCN5SCfwMA3oIT3JQ3qBh/RADxlIHjIIPEwHeshI8pBR4CEj0EMmkodMAg8zgB58SR58BR58gR4ykzxkFniYCfTgR/LgJ/DgB/SQheQhi8DDLKAHf5IHf4EHf6CHrCQPWQUeZgM9BJA8BAg8BAA9ZCN5yCbwMAfoIZDkIVDgIRDoITvJQ3aBh7lADzlIHnIIPOQAeshJ8pBT4GEe0EMukodcAg+5gB5ykzzkFniYD/SQh+Qhj8BDHqCHvCQPeQUeFgA95CN5yCfwkA/oIT/JQ36Bh4VADwVIHgoIPBQAeihI8lBQ4GER0EMhkodCAg+FgB4KkzwUFnhYDPRQhOShiMBDEaCHoiQPRQUelgA9FCN5KCbwUAzooTjJQ3GBh6VADyVIHkoIPJQAeihJ8lBS4GEZ0EMpkodSAg+lgB5KkzyUFnhYDvRQhuShjMBDGaCHsiQPZQUeVgA9lCN5KCfwUA7ooTzJQ3mBh5VADxVIHioIPFQAeqhI8lBR4GEV0EMlkodKAg+VgB4qkzxUFnhYDfRQheShisBDFaCHqiQPVQUe1gA9VCN5qCbwUA3ooTrJQ3WBh7VADzVIHmoIPNQAeqhJ8lBT4GEd0EMtkodaAg+1gB5qkzzUFnhYD/RQh+ShjsBDHaCHuiQPdQUeNgA91CN5qCfwUA/ooT7JQ32Bh41ADw1IHhoIPDQAemhI8tBQ4GET0EMjkodGAg+NgB4akzw0FnjYDPTQhOShicBDE6CHpiQPTQUetgA9NCN5aCbw0AzooTnJQ3OBh61ADy1IHloIPLQAemhJ8tBS4GEb0EMrkodWAg+tgB5akzy0FnjYDvTQhuShjcBDG6CHtiQPbQUedgA9tCN5aCfw0A7ooT3JQ3uBh51ADx1IHjoIPHQAeuhI8tBR4GEX0EMnkodOAg+dgB46kzx0FnjYDfTQheShi8BDF6CHriQPXQUe9gA9dCN56Cbw0A3ooTvJQ3eBh71ADz1IHnoIPPQAeuhJ8tBT4GEf0EMvkodeAg+9gB56kzz0FnjYD/TQh+Shj8BDH6CHviQPfQUeDgA99CN56Cfw0A/ooT/JQ3+Bh4NADwNIHgYIPAwAehhI8jBQ4OEQ0MMgkodBAg+DgB4GkzwMFng4DPQwhORhiMDDEKCHoSQPQwUejgA9DCN5GCbwMAzoYTjJw3CBh6NADyNIHkYIPIwAehhJ8jBS4OEY0MMokodRAg+jgB5GkzyMFng4DvQwhuRhjMDDGKCHsSQPYwUeTgA9jCN5GCfwMA7oYTzJw3iBh5NADxNIHiYIPEwAephI8jBR4OEU0MMkkodJAg+TgB4mkzxMFng4DfQwheRhisDDFKCHqSQPUwUezgA9TCN5mCbwMA3oYTrJw3SBh7NADzNIHmYIPMwAephJ8jBT4OEc0MMskodZAg+zgB5mkzzMFng4D/Qwh+RhjsDDHKCHuSQPcwUeLgA9zCN5mCfwMA/oYT7Jw3yBh4tADwtIHhYIPCwAelhI8rBQ4OES0MMikodFAg+LgB4WkzwsFni4DPSwhORhicDDEqCHpSQPSwUergA9LCN5WCbwsAzoYTnJw3KBh6tADytIHlYIPKwAelhJ8rBS4OEa0MMqkodVAg+rgB5WkzysFni4DvSwhuRhjcDDGqCHtSQPawUebgA9rCN5WCfwsA7oYT3Jw3qBh5tADxtIHjYIPGwAethI8rBR4OEW0MMmkodNAg+bgB42kzxsFni4DfSwheRhi8DDFqCHrSQPWwUe7gA9bCN52CbwsA3oYTvJw3aBh7tADztIHnYIPOwAethJ8rBT4OEe0MMukoddAg+7gB52kzzsFni4D/Swh+Rhj8DDHqCHvSQPewUeHgA97CN52CfwsA/oYT/Jw36Bh4dADwdIHg4IPBwAejhI8nBQ4OER0MMhkodDAg+HgB4OkzwcFnh4DPRwhOThiMDDEaCHoyQPRwUengA9HCN5OCbwcAzo4TjJw3GBh6dADydIHk4IPJwAejhJ8nBS4OEZ0MMpkodTAg+ngB5OkzycFnh4DvRwhuThjMDDGaCHsyQPZwUeXgA9nCN5OCfwcA7o4TzJw3mBh5dADxdIHi4IPFwAerhI8nBR4OEV0MMlkodLAg+XgB4ukzxcFnh4DfRwheThisDDFaCHqyQPVwUe3gA9XCN5uCbwcA3o4TrJw3WBh7dADzdIHm4IPNwAerhJ8nBT4OEd0MMtkodbAg+3gB5ukzzcFnh4D/Rwh+ThjsDDHaCHuyQPdwUePgA93CN5uCfwcA/o4T7Jw32Bh49ADw9IHh4IPDwAenhI8vBQ4OET0MMjkodHAg+PgB4ekzw8Fnj4DPTwhOThicDDE6CHpyQPTwUevgA9PCN5eCbw8Azo4TnJw3OBh69ADy9IHl4IPLwAenhJ8vBS4OEb0MMrkodXAg+vgB5ekzy8Fnj4DvTwhuThjcDDG6CHtyQPbwUefgA9vCN5eCfw8A7o4T3Jw3uBh59ADx9IHj4IPHwAevhI8vDx/5NDUHAOn/63G2bJ3CjAN6BxliaZff3r//tt0cyEsH7rv+//sX73f/ag1h7s/+7/+Xufzd/5YuarmW9mQngyCO7JwPd/+ydzcOC3vgBdff+fbvPf/zDzCwH81ldgfj8cyS8k8FvfgPn9BOb3/+uGz1Y3fLf2H9b+8//u//l7v8z7978/M/NX0A2hgN/6DbxNEF83bIcGfusPML+gjuQXBvitv8D8gvlyu+GX/f8bfP/fHtTag/n+dzcEN+8QZkKaCeXL74awwG+F8MXdJrQjtsMBvxUSmF8YR/ILD/xWKGB+YcndENzqgNDWHsbaw3q6IZx5hzcTwUxEQTdEQN4ZeJtIjtiOiLwFML/IjuQXCXkLYH5RyN0QzuqASNYe2dqjeLohqnlHMxPdTAxBN0QGfisa8DYxHbEdBfit6MD8YjmSX1Tgt2IA84tN7oaoVgfEtPZY1h7b0w1xzDuumXhm4gu6IRrwW3GBt0ngiO3owG/FA+aX0JH8YgC/FR+YXyJyN8SxOiCBtSe09kSebkhs3knMJDWTTNANMYHfSgK8TXJHbMcCfispML8UjuQXG/itZMD8UpK7IbHVAcmtPYW1p/R0QyrzTm3Gx0waQTfEAX4rNfA2aR2xHRf4LR9gfukcyS8e8FtpgPmlJ3dDKqsD0lp7OmtP7+mGDOad0UwmM76CbogP/FZG4G0yO2I7AfBbmYD5+TmSX0Lgt3yB+WUhd0MGqwMyW7uftWfxdIO/eWc1E2Amm6AbEgG/lRV4m0BHbCcGfisAmF92R/JLAvxWNmB+Ocjd4G91QKC1Z7f2HJ5uyGneuczkNpNH0A1Jgd/KBbxNXkdsJwN+Kzcwv3yO5Jcc+K08wPzyk7shp9UBea09n7Xn93RDAfMuaKaQmcKCbkgB/FZB4G2KOGI7JfBbhYD5FXUkv1TAbxUG5leM3A0FrA4oYu1Frb2YpxuKm3cJMyXNlBJ0Q2rgt0oAb1PaEds+wG+VBOZXxpH80gC/VQqYX1lyNxS3OqC0tZex9rKebihn3uXNVDBTUdANaYHfKg+8TSVHbKcDfqsCML/KjuSXHvitisD8qpC7oZzVAZWsvbK1V/F0Q1Xzrmamupkagm7IAPxWNeBtajpiOyPwW9WB+dVyJL9MwG/VAOZXm9wNVa0OqGnttay9tqcb6ph3XTP1zNQXdIMv8Ft1gbdp4IjtzMBv1QPm19CR/PyA36oPzK8RuRvqWB3QwNobWnsjTzc0Nu8mZpqaaSbohizAbzUB3qa5I7b9gd9qCsyvhSP5ZQV+qxkwv5bkbmhsdUBza29h7S093dDKvFubaWOmraAbAoDfag28TTtHbGcDfqsNML/2juQXCPxWW2B+Hcjd0MrqgHbW3t7aO3i6oaN5dzLT2UwXQTdkB36rE/A2XR2xnQP4rc7A/Lo5kl9O4Le6APPrTu6GjlYHdLX2btbe3dMNPcy7p5leZnoLuiEX8Fs9gbfp44jt3MBv9QLm19eR/PIAv9UbmF8/cjf0sDqgj7X3tfZ+nm7ob94DzAw0M0jQDXmB3xoAvM1gR2znA35rIDC/IY7klx/4rUHA/IaSu6G/1QGDrX2ItQ/1dMMw8x5uZoSZkYJuKAD81nDgbUY5Yrsg8FsjgPmNdiS/QsBvjQTmN4bcDcOsDhhl7aOtfYynG8aa9zgz481MEHRDYeC3xgFvM9ER20WA3xoPzG+SI/kVBX5rAjC/yeRuGGt1wERrn2Ttkz3dMMW8p5qZZma6oBuKAb81FXibGY7YLg781jRgfjMdya8E8FvTgfnNInfDFKsDZlj7TGuf5emG2eY9x8xcM/ME3VAS+K05wNvMd8R2KeC35gLzW+BIfqWB35oHzG8huRtmWx0w39oXWPtCTzcsMu/FZpaYWSrohjLAby0G3maZI7bLAr+1BJjfckfyKwf81lJgfivI3bDI6oBl1r7c2ld4umGlea8ys9rMGkE3lAd+axXwNmsdsV0B+K3VwPzWOZJfReC31gDzW0/uhpVWB6y19nXWvt7TDRvMe6OZTWY2C7qhEvBbG4G32eKI7crAb20C5rfVkfyqAL+1GZjfNnI3bLA6YIu1b7X2bZ5u2G7eO8zsNLNL0A1Vgd/aAbzNbkdsVwN+aycwvz2O5Fcd+K1dwPz2krthu9UBu619j7Xv9XTDPvPeb+aAmYOCbqgB/NZ+4G0OOWK7JvBbB4D5HXYkv1rAbx0E5neE3A37rA44ZO2Hrf2IpxuOmvcxM8fNnBB0Q23gt44Bb3PSEdt1gN86DszvlCP51QV+6wQwv9PkbjhqdcBJaz9l7ac93XDGvM+aOWfmvKAb6gG/dRZ4mwuO2K4P/NY5YH4XHcmvAfBb54H5XSJ3wxmrAy5Y+0Vrv+TphsvmfcXMVTPXBN3QEPitK8DbXHfEdiPgt64C87vhSH6Ngd+6BszvJrkbLlsdcN3ab1j7TU833DLv22bumLkr6IYmwG/dBt7mniO2mwK/dQeY331H8msG/NZdYH4PyN1wy+qAe9Z+39ofeLrhoXk/MvPYzBNBNzQHfusR8DZPHbHdAvitx8D8njmSX0vgt54A83tO7oaHVgc8tfZn1v7c0w0vzPulmVdmXgu6oRXwWy+Bt3njiO3WwG+9Aub31pH82gC/9RqY3ztyN7ywOuCNtb+19neebnhv3h/MfDTzSdANbYHf+gC8zWdHbLcDfusjML8vjuTXHvitT8D8vpK74b3VAZ+t/Yu1f/V0wzfz/m7mh5mfgm7oAPzWd+BtfjliuyPwWz+A+f12JL9OwG/9BOb3h9wN36wO+GXtv639j6cb/v77UuagQYKaCZaZ3w2dgd/697tRtwme2Q3bXYDfCgrML4Qj+XUFfisYML+Qmbnd8NfqgH/W/7OHsPaQmf+7G0KZd2gzYcyEFXRDN+C3QgNvE84R292B3woDzC+8I/n1AH4rLDC/CORuCGV1QDhrD2/tETzdENG8I5mJbCaKoBt6Ar8VCXibqI7Y7gX8VmRgftEcya838FtRgPlFJ3dDRKsDolp7NGuP7umGGOYd00wsM7EF3dAH+K2YwNvEccR2X+C3YgHzi+tIfv2A34oNzC8euRtiWB0Qx9rjWns8TzfEN+8EZhKaSSTohv7AbyUA3iaxI7YHAL+VEJhfEkfyGwj8ViJgfknJ3RDf6oDE1p7E2pN6uiGZeSc3k8JMSkE3DAJ+KznwNqkcsT0Y+K0UwPxSO5LfEOC3UgLz8yF3QzKrA1JZe2pr9/F0QxrzTmsmnZn0gm4YCvxWWuBtMjhiexjwW+mA+WV0JL/hwG+lB+aXidwNaawOyGDtGa09k6cbzL/JCpLZjJ+ZLIJuGAH8VmbgbfwdsT0S+C0/YH5ZHclvFPBbWYD5BZC7wdfqAH9rz2rtAZ5uyGbegWaym8kh6IbRwG8FAm+T0xHbY4Dfyg7ML5cj+Y0FfisHML/c5G7IZnVATmvPZe25Pd2Qx7zz/vtdZvILumEc8Ft5gbcp4Ijt8cBv5QPmV9CR/CYAv5UfmF8hcjfksTqggLUXtPZCnm4obN5FzBQ1U0zQDROB3yoCvE1xR2xPAn6rKDC/Eo7kNxn4rWLA/EqSu6Gw1QHFrb2EtZf0dEMp8y5tpoyZsoJumAL8Vmngbco5Ynsq8FtlgPmVdyS/acBvlQXmV4HcDaWsDihn7eWtvYKnGyqadyUzlc1UEXTDdOC3KgFvU9UR2zOA36oMzK+aI/nNBH6rCjC/6uRuqGh1QFVrr2bt1T3dUMO8a5qpZaa2oBtmAb9VE3ibOo7Yng38Vi1gfnUdyW8O8Fu1gfnVI3dDDasD6lh7XWuv5+mG+ubdwExDM40E3TAX+K0GwNs0dsT2POC3GgLza+JIfvOB32oEzK8puRvqWx3Q2NqbWHtTTzc0M+/mZlqYaSnohgXAbzUH3qaVI7YXAr/VAphfa0fyWwT8Vktgfm3I3dDM6oBW1t7a2tt4uqGtebcz095MB0E3LAZ+qx3wNh0dsb0E+K32wPw6OZLfUuC3OgDz60zuhrZWB3S09k7W3tnTDV3Mu6uZbma6C7phGfBbXYG36eGI7eXAb3UD5tfTkfxWAL/VHZhfL3I3dLE6oIe197T2Xp5u6G3efcz0NdNP0A0rgd/qA7xNf0dsrwJ+qy8wvwGO5Lca+K1+wPwGkruht9UB/a19gLUP9HTDIPMebGaImaGCblgD/NZg4G2GOWJ7LfBbQ4D5DXckv3XAbw0F5jeC3A2DrA4YZu3DrX2EpxtGmvcoM6PNjBF0w3rgt0YBbzPWEdsbgN8aDcxvnCP5bQR+awwwv/HkbhhpdcBYax9n7eM93TDBvCeamWRmsqAbNgG/NRF4mymO2N4M/NYkYH5THclvC/Bbk4H5TSN3wwSrA6ZY+1Rrn+bphunmPcPMTDOzBN2wFfitGcDbzHbE9jbgt2YC85vjSH7bgd+aBcxvLrkbplsdMNva51j7XE83zDPv+WYWmFko6IYdwG/NB95mkSO2dwK/tQCY32JH8tsF/NZCYH5LyN0wz+qARda+2NqXeLphqXkvM7PczApBN+wGfmsZ8DYrHbG9B/it5cD8VjmS317gt1YA81tN7oalVgestPZV1r7a0w1rzHutmXVm1gu6YR/wW2uBt9ngiO39wG+tA+a30ZH8DgC/tR6Y3yZyN6yxOmCDtW+09k2ebths3lvMbDWzTdANB4Hf2gK8zXZHbB8CfmsrML8djuR3GPitbcD8dpK7YbPVAdutfYe17/R0wy7z3m1mj5m9gm44AvzWbuBt9jli+yjwW3uA+e13JL9jwG/tBeZ3gNwNu6wO2Gft+639gKcbDpr3ITOHzRwRdMNx4LcOAW9z1BHbJ4DfOgzM75gj+Z0EfusIML/j5G44aHXAUWs/Zu3HPd1wwrxPmjll5rSgG04h7wy8zRlHbJ9G3gKY31lH8juDvAUwv3PkbjhhdcAZaz9r7ec83XDevC+YuWjmkqAbzgK/dQF4m8uO2D4H/NZFYH5XHMnvPPBbl4D5XSV3w3mrAy5b+xVrv+rphmvmfd3MDTM3Bd1wAfit68Db3HLE9kXgt24A87vtSH6XgN+6CczvDrkbrlkdcMvab1v7HU833DXve2bum3kg6IbLwG/dA97moSO2rwC/dR+Y3yNH8rsK/NYDYH6Pyd1w1+qAh9b+yNofe7rhiXk/NfPMzHNBN1wDfusp8DYvHLF9HfitZ8D8XjqS3w3gt54D83tF7oYnVge8sPaX1v7K0w2vzfuNmbdm3gm64SbwW2+At3nviO1bwG+9Beb3wZH8bgO/9Q6Y30dyN7y2OuC9tX+w9o+ebvhk3p/NfDHzVdANd4Df+gy8zTdHbN8FfusLML/vjuR3D/itr8D8fpC74ZPVAd+s/bu1//B0w0/z/mXm978/F3TDfeC3fgFv89cR2w+A3/oNzC+Inxv5PQR+6w8wv6B+3G74aXXAX2v/d7f/7EH9/rsbgpl3cDMhzIT043fDI+C3gvvhbhPKEduPgd8KAcwvtCP5PQF+KyQwvzDkbghmdUAoaw9t7WE83RDWvMOZCW8mgqAbngK/FQ54m4iO2H4G/FZ4YH6RHMnvOfBbEYD5RSZ3Q1irAyJaeyRrj+zphijmHdVMNDPRBd3wAvitqMDbxHDE9kvgt6IB84vpSH6vgN+KDswvFrkbolgdEMPaY1p7LE83xDbvOGbimokn6IbXwG/FAd4mviO23wC/FReYXwJH8nsL/FY8YH4Jyd0Q2+qA+NaewNoTerohkXknNpPETFJBN7wDfisx8DbJHLH9HvitJMD8kjuS3wfgt5IC80tB7oZEVgcks/bk1p7C0w0pzTuVmdRmfATd8BH4rVTA26RxxPYn4LdSA/NL60h+n4Hf8gHml47cDSmtDkhj7WmtPZ2nG9KbdwYzGc1kEnTDF+C3MgBv4+uI7a/Ab2UE5pfZkfy+Ab+VCZifH7kb0lsd4Gvtma3dz9MNWczb30xWMwGCbvgO/JY/8DbZHLH9A/itrMD8Ah3J7yfwWwHA/LKTuyGL1QHZrD3Q2rN7uiGHeec0k8tMbkE3/AJ+KyfwNnkcsf0b+K1cwPzyOpLfH+C3cgPzy0fuhhxWB+Sx9rzWns/TDfnNu4CZgmYKCbrhL/BbBYC3KeyI7X9HRH2rIDC/Io7kFxSYXyFgfkXJ3ZDf6oDC1l7E2ot6uqGYeRc3U8JMSUE3BAPepjjwNqUcsR0cmF8JYH6lHckvBDC/ksD8ypC7oZjVAaWsvbS1l/F0Q1nzLmemvJkKgm4ICbxNOeBtKjpiOxQwv/LA/Co5kl9oYH4VgPlVJndDWasDKlp7JWuv7OmGKuZd1Uw1M9UF3RAGeJuqwNvUcMR2WGB+1YD51XQkv3DA/KoD86tF7oYqVgfUsPaa1l7L0w21zbuOmbpm6gm6ITzwNnWAt6nviO0IwPzqAvNr4Eh+EYH51QPm15DcDbWtDqhv7Q2svaGnGxqZd2MzTcw0FXRDJOBtGgNv08wR25GB+TUB5tfckfyiAPNrCsyvBbkbGlkd0Mzam1t7C083tDTvVmZam2kj6IaowNu0At6mrSO2owHzaw3Mr50j+UUH5tcGmF97cje0tDqgrbW3s/b2nm7oYN4dzXQy01nQDTGAt+kIvE0XR2zHBObXCZhfV0fyiwXMrzMwv27kbuhgdUAXa+9q7d083dDdvHuY6Wmml6AbYgNv0wN4m96O2I4DzK8nML8+juQXF5hfL2B+fcnd0N3qgN7W3sfa+3q6oZ959zczwMxAQTfEA96mP/A2gxyxHR+Y3wBgfoMdyS8BML+BwPyGkLuhn9UBg6x9sLUP8XTDUPMeZma4mRGCbkgIvM0w4G1GOmI7ETC/4cD8RjmSX2JgfiOA+Y0md8NQqwNGWvsoax/t6YYx5j3WzDgz4wXdkAR4m7HA20xwxHZSYH7jgPlNdCS/ZMD8xgPzm0TuhjFWB0yw9onWPsnTDZPNe4qZqWamCbohOfA2U4C3me6I7RTA/KYC85vhSH4pgflNA+Y3k9wNk60OmG7tM6x9pqcbZpn3bDNzzMwVdEMq4G1mA28zzxHbqYH5zQHmN9+R/HyA+c0F5reA3A2zrA6YZ+3zrX2BpxsWmvciM4vNLBF0QxrgbRYBb7PUEdtpgfktBua3zJH80gHzWwLMbzm5GxZaHbDU2pdZ+3JPN6ww75VmVplZLeiG9MDbrATeZo0jtjMA81sFzG+tI/llBOa3GpjfOnI3rLA6YI21r7X2dZ5uWG/eG8xsNLNJ0A2ZgLfZALzNZkds+wLz2wjMb4sj+WUG5rcJmN9Wcjestzpgs7Vvsfatnm7YZt7bzewws1PQDX7A22wH3maXI7azAPPbAcxvtyP5+QPz2wnMbw+5G7ZZHbDL2ndb+x5PN+w1731m9ps5IOiGrMDb7APe5qAjtgOA+e0H5nfIkfyyAfM7AMzvMLkb9lodcNDaD1n7YU83HDHvo2aOmTku6IZA4G2OAm9zwhHb2YH5HQPmd9KR/HIA8zsOzO8UuRuOWB1wwtpPWvspTzecNu8zZs6aOSfohpzA25wB3ua8I7ZzAfM7C8zvgiP55Qbmdw6Y30VyN5y2OuC8tV+w9ouebrhk3pfNXDFzVdANeYC3uQy8zTVHbOcF5ncFmN91R/LLB8zvKjC/G+RuuGR1wDVrv27tNzzdcNO8b5m5beaOoBvyA29zC3ibu47YLgDM7zYwv3uO5FcQmN8dYH73yd1w0+qAu9Z+z9rve7rhgXk/NPPIzGNBNxQC3uYh8DZPHLFdGJjfI2B+Tx3Jrwgwv8fA/J6Ru+GB1QFPrP2ptT/zdMNz835h5qWZV4JuKAq8zQvgbV47YrsYML+XwPzeOJJfcWB+r4D5vSV3w3OrA15b+xtrf+vphnfm/d7MBzMfBd1QAnib98DbfHLEdklgfh+A+X12JL9SwPw+AvP7Qu6Gd1YHfLL2z9b+xdMNX837m5nvZn4IuqE08DbfgLf56YjtMsD8vgPz++VIfmWB+f0A5veb3A1frQ74ae2/rP23pxv+mPdfM0GyBA0SNAu/G8oBb/MXeJtgWdywXR6YX5AsuPyCO5JfBWB+QYH5hcjC7YY/Vgf8s/6fPbi1h8jy390Q0rxDmQltJoygGyoCbxMKeJuwjtiuBMwvNDC/cI7kVxmYXxhgfuHJ3RDS6oCw1h7O2sN7uiGCeUc0E8lMZEE3VAHeJiLwNlEcsV0VmF8kYH5RHcmvGjC/yMD8opG7IYLVAVGsPaq1R/N0Q3TzjmEmpplYgm6oDrxNDOBtYjtiuwYwv5jA/OI4kl9NYH6xgPnFJXdDdKsDYlt7HGuP6+mGeOYd30wCMwkF3VALeJv4wNskcsR2bWB+CYD5JXYkvzrA/BIC80tC7oZ4VgcksvbE1p7E0w1JzTuZmeRmUgi6oS7wNsmAt0npiO16wPySA/NL5Uh+9YH5pQDml5rcDUmtDkhp7amsPbWnG3zMO42ZtGbSCbqhAfA2aYC3Se+I7YbA/NIC88vgSH6NgPmlA+aXkdwNPlYHpLf2DNae0dMNmczb18y//2iIn6AbGgNv4wu8TRZHbDcB5pcZmJ+/I/k1BebnB8wvK7kbMlkdkMXa/a09q6cbAsw7m5lAM9kF3dAMeJtswNvkcMR2c2B+gcD8cjqSXwtgftmB+eUid0OA1QE5rD2ntefydENu885jJu+/3ybohpbA2+QB3ia/I7ZbAfPLC8yvgCP5tQbmlw+YX0FyN+S2OiC/tRew9oKebihk3oXNFDFTVNANbYC3KQy8TTFHbLcF5lcEmF9xR/JrB8yvKDC/EuRuKGR1QDFrL27tJTzdUNK8S5kpbaaMoBvaA29TCnibso7Y7gDMrzQwv3KO5NcRmF8ZYH7lyd1Q0uqAstZeztrLe7qhgnlXNFPJTGVBN3QC3qYi8DZVHLHdGZhfJWB+VR3Jrwswv8rA/KqRu6GC1QFVrL2qtVfzdEN1865hpqaZWoJu6Aq8TQ3gbWo7YrsbML+awPzqOJJfd2B+tYD51SV3Q3WrA2pbex1rr+vphnrmXd9MAzMNBd3QA3ib+sDbNHLEdk9gfg2A+TV2JL9ewPwaAvNrQu6GelYHNLL2xtbexNMNTc27mZnmZloIuqE38DbNgLdp6YjtPsD8mgPza+VIfn2B+bUA5tea3A1NrQ5oae2trL21pxvamHdbM+3MtBd0Qz/gbdoCb9PBEdv9gfm1A+bX0ZH8BgDzaw/MrxO5G9pYHdDB2jtaeydPN3Q27y5muprpJuiGgcDbdAHeprsjtgcB8+sKzK+HI/kNBubXDZhfT3I3dLY6oLu197D2np5u6GXevc30MdNX0A1DgLfpDbxNP0dsDwXm1weYX39H8hsGzK8vML8B5G7oZXVAP2vvb+0DPN0w0LwHmRlsZoigG4YDbzMIeJuhjtgeAcxvMDC/YY7kNxKY3xBgfsPJ3TDQ6oCh1j7M2od7umGEeY80M8rMaEE3jALeZiTwNmMcsT0amN8oYH5jHclvDDC/0cD8xpG7YYTVAWOsfay1j/N0w3jznmBmoplJgm4YC7zNBOBtJjtiexwwv4nA/KY4kt94YH6TgPlNJXfDeKsDJlv7FGuf6umGaeY93cwMMzMF3TABeJvpwNvMcsT2RGB+M4D5zXYkv0nA/GYC85tD7oZpVgfMsvbZ1j7H0w1zzXuemflmFgi6YTLwNvOAt1noiO0pwPzmA/Nb5Eh+U4H5LQDmt5jcDXOtDlho7YusfbGnG5aY91Izy8wsF3TDNOBtlgJvs8IR29OB+S0D5rfSkfxmAPNbDsxvFbkbllgdsMLaV1r7Kk83rDbvNWbWmlkn6IaZwNusAd5mvSO2ZwHzWwvMb4Mj+c0G5rcOmN9GcjestjpgvbVvsPaNnm7YZN6bzWwxs1XQDXOAt9kMvM02R2zPBea3BZjfdkfymwfMbyswvx3kbthkdcA2a99u7Ts83bDTvHeZ2W1mj6Ab5gNvswt4m72O2F4AzG83ML99juS3EJjfHmB++8ndsNPqgL3Wvs/a93u64YB5HzRzyMxhQTcsAt7mIPA2RxyxvRiY3yFgfkcdyW8JML/DwPyOkbvhgNUBR6z9qLUf83TDcfM+YeakmVOCblgKvM0J4G1OO2J7GTC/k8D8zjiS33JgfqeA+Z0ld8NxqwNOW/sZaz/r6YZz5n3ezAUzFwXdsAJ4m/PA21xyxPZKYH4XgPlddiS/VcD8LgLzu0LuhnNWB1yy9svWfsXTDVfN+5qZ62ZuCLphNfA214C3uemI7TXA/K4D87vlSH5rgfndAOZ3m9wNV60OuGntt6z9tqcb7pj3XTP3zNwXdMM64G3uAm/zwBHb64H53QPm99CR/DYA87sPzO8RuRvuWB3wwNofWvsjTzc8Nu8nZp6aeSboho3A2zwB3ua5I7Y3AfN7CszvhSP5bQbm9wyY30tyNzy2OuC5tb+w9peebnhl3q/NvDHzVtANW4C3eQ28zTtHbG8F5vcGmN97R/LbBszvLTC/D+RueGV1wDtrf2/tHzzd8NG8P5n5bOaLoBu2A2/zCXibr47Y3gHM7zMwv2+O5LcTmN8XYH7fyd3w0eqAr9b+zdq/e7rhh3n/NPPLzG9BN+wC3uYn8DZ/HLG9G5jfL2B+fx3Jbw8wv9/A/IL4c7vhh9UBf6z9r7X/+w12NwQ172BmgpsJ4c/vhr3A2wTzx90mpL8btvcB8wsOzC+UI/ntB+YXAphfaHI3BPX/fx0Q0tpDWXtoTzeEMe+wZsKZCS/ohgPA24QF3iaCI7YPAvMLB8wvoiP5HQLmFx6YXyRyN4SxOiCCtUe09kiebohs3lHMRDUTTdANh4G3iQK8TXRHbB8B5hcVmF8MR/I7CswvGjC/mORuiGx1QHRrj2HtMT3dEMu8Y5uJYyauoBuOAW8TG3ibeI7YPg7MLw4wv/iO5HcCmF9cYH4JyN0Qy+qAeNYe39oTeLohoXknMpPYTBJBN5wE3iYR8DZJHbF9CphfYmB+yRzJ7zQwvyTA/JKTuyGh1QFJrT2ZtSf3dEMK805pJpWZ1IJuOAO8TUrgbXwcsX0WmF8qYH5pHMnvHDC/1MD80pK7IYXVAT7Wnsba03q6IZ15pzeTwUxGQTecB94mPfA2mRyxfQGYXwZgfr6O5HcRmF9GYH6Zyd2QzuqATNbua+2ZPd3gZ95ZzPibySrohkvA22QB3ibAEduXgfn5A/PL5kh+V4D5ZQXmF0juBj+rAwKsPZu1B3q6Ibt55zCT00wuQTdcBd4mB/A2uR2xfQ2YX05gfnkcye86ML9cwPzykrshu9UBua09j7Xn9XRDPvPOb6aAmYKCbrgBvE1+4G0KOWL7JjC/AsD8CjuS3y1gfgWB+RUhd0M+qwMKWXthay/i6Yai5l3MTHEzJQTdcBt4m2LA25R0xPYdYH7FgfmVciS/u8D8SgDzK03uhqJWB5S09lLWXtrTDWXMu6yZcmbKC7rhHvA2ZYG3qeCI7fvA/MoB86voSH4PgPmVB+ZXidwNZawOqGDtFa29kqcbKpt3FTNVzVQTdMND4G2qAG9T3RHbj4D5VQXmV8OR/B4D86sGzK8muRsqWx1Q3dprWHtNTzfUMu/aZuqYqSvohifA29QG3qaeI7afAvOrA8yvviP5PQPmVxeYXwNyN9SyOqCetde39gaebmho3o3MNDbTRNANz4G3aQS8TVNHbL8A5tcYmF8zR/J7CcyvCTC/5uRuaGh1QFNrb2btzT3d0MK8W5ppZaa1oBteAW/TEnibNo7Yfg3MrxUwv7aO5PcGmF9rYH7tyN3QwuqANtbe1trbebqhvXl3MNPRTCdBN7wF3qYD8DadHbH9DphfR2B+XRzJ7z0wv07A/LqSu6G91QGdrb2LtXf1dEM38+5upoeZnoJu+AC8TXfgbXo5YvsjML8ewPx6O5LfJ2B+PYH59SF3QzerA3pZe29r7+Pphr7m3c9MfzMDBN3wGXibfsDbDHTE9hdgfv2B+Q1yJL+vwPwGAPMbTO6GvlYHDLT2QdY+2NMNQ8x7qJlhZoYLuuEb8DZDgbcZ4Yjt78D8hgHzG+lIfj+A+Q0H5jeK3A1DrA4YYe0jrX2UpxtGm/cYM2PNjBN0w0/gbcYAbzPeEdu/gPmNBeY3wZH8fgPzGwfMbyK5G0ZbHTDe2idY+0RPN0wy78lmppiZKuiGP8DbTAbeZpojtv8C85sCzG+6I/kFCYb71lRgfjPI3TDJ6oBp1j7d2md4umGmec8yM9vMHEE3BAXeZhbwNnMdsR0MmN9sYH7zHMkvODC/OcD85pO7YabVAXOtfZ61z/d0wwLzXmhmkZnFgm4IAbzNQuBtljhiOyQwv0XA/JY6kl8oYH6LgfktI3fDAqsDllj7Umtf5umG5ea9wsxKM6sE3RAaeJsVwNusdsR2GGB+K4H5rXEkv7DA/FYB81tL7oblVgestvY11r7W0w3rzHu9mQ1mNgq6IRzwNuuBt9nkiO3wwPw2APPb7Eh+EYD5bQTmt4XcDeusDthk7ZutfYunG7aa9zYz283sEHRDROBttgFvs9MR25GA+W0H5rfLkfwiA/PbAcxvN7kbtlodsNPad1n7bk837DHvvWb2mdkv6IYowNvsBd7mgCO2owLz2wfM76Aj+UUD5rcfmN8hcjfssTrggLUftPZDnm44bN5HzBw1c0zQDdGBtzkCvM1xR2zHAOZ3FJjfCUfyiwnM7xgwv5PkbjhsdcBxaz9h7Sc93XDKvE+bOWPmrKAbYgFvcxp4m3OO2I4NzO8MML/zjuQXB5jfWWB+F8jdcMrqgHPWft7aL3i64aJ5XzJz2cwVQTfEBd7mEvA2Vx2xHQ+Y32VgftccyS8+ML8rwPyuk7vhotUBV639mrVf93TDDfO+aeaWmduCbkgAvM1N4G3uOGI7ITC/W8D87jqSXyJgfreB+d0jd8MNqwPuWPtda7/n6Yb75v3AzEMzjwTdkBh4mwfA2zx2xHYSYH4Pgfk9cSS/pMD8HgHze0ruhvtWBzy29ifW/tTTDc/M+7mZF2ZeCrohGfA2z4G3eeWI7eTA/F4A83vtSH4pgPm9BOb3htwNz6wOeGXtr639jacb3pr3OzPvzXwQdENK4G3eAW/z0RHbqYD5vQfm98mR/FID8/sAzO8zuRveWh3w0do/WftnTzd8Me+vZr6Z+S7oBh/gbb4Cb/PDEdtpgPl9A+b305H80gLz+w7M7xe5G75YHfDD2n9a+y9PN/z+9zbz10yQrPxuSAe8zR/gbYJmdcN2emB+f4H5BXMkvwzA/IJkxeUXPCu3G35bHfDP+n/2YNYePOt/d0MI8w5pJpSZ0IJuyAi8TUjgbcI4YjsTML9QwPzCOpKfLzC/0MD8wpG7IYTVAWGsPay1h/N0Q3jzjmAmoplIgm7IDLxNBOBtIjti2w+YX0RgflEcyS8LML9IwPyikrshvNUBka09irVH9XRDNPOObiaGmZiCbvAH3iY68DaxHLGdFZhfDGB+sR3JLwCYX0xgfnHI3RDN6oBY1h7b2uN4uiGuecczE99MAkE3ZAPeJh7wNgkdsR0IzC8+ML9EjuSXHZhfAmB+icndENfqgITWnsjaE3u6IYl5JzWTzExyQTfkAN4mKfA2KRyxnROYXzJgfikdyS8XML/kwPxSkbshidUBKaw9pbWn8nRDavP2MZPGTFpBN+QG3sYHeJt0jtjOA8wvDTC/9I7klxeYX1pgfhnI3ZDa6oB01p7e2jN4uiGjeWcy42sms6Ab8gFvkwl4Gz9HbOcH5ucLzC+LI/kVAOaXGZifP7kbMlod4GftWazd39MNWc07wEw2M4GCbigIvE0A8DbZHbFdCJhfNmB+ORzJrzAwv0BgfjnJ3ZDV6oDs1p7D2nN6uiGXeec2k8dMXkE3FAHeJjfwNvkcsV0UmF8eYH75HcmvGDC/vMD8CpC7IZfVAfmsPb+1F/B0Q0HzLmSmsJkigm4oDrxNIeBtijpiuwQwv8LA/Io5kl9JYH5FgPkVJ3dDQasDilp7MWsv7umGEuZd0kwpM6UF3VAKeJuSwNuUccR2aWB+pYD5lXUkvzLA/EoD8ytH7oYSVgeUsfay1l7O0w3lzbuCmYpmKgm6oSzwNhWAt6nsiO1ywPwqAvOr4kh+5YH5VQLmV5XcDeWtDqhs7VWsvaqnG6qZd3UzNczUFHRDBeBtqgNvU8sR2xWB+dUA5lfbkfwqAfOrCcyvDrkbqlkdUMvaa1t7HU831DXvembqm2kg6IbKwNvUA96moSO2qwDzqw/Mr5Ej+VUF5tcAmF9jcjfUtTqgobU3svbGnm5oYt5NzTQz01zQDdWAt2kKvE0LR2xXB+bXDJhfS0fyqwHMrzkwv1bkbmhidUALa29p7a083dDavNuYaWumnaAbagJv0wZ4m/aO2K4FzK8tML8OjuRXG5hfO2B+Hcnd0NrqgPbW3sHaO3q6oZN5dzbTxUxXQTfUAd6mM/A23RyxXReYXxdgft0dya8eML+uwPx6kLuhk9UB3ay9u7X38HRDT/PuZaa3mT6CbqgPvE0v4G36OmK7ATC/3sD8+jmSX0Ngfn2A+fUnd0NPqwP6Wns/a+/v6YYB5j3QzCAzgwXd0Ah4m4HA2wxxxHZjYH6DgPkNdSS/JsD8BgPzG0buhgFWBwyx9qHWPszTDcPNe4SZkWZGCbqhKfA2I4C3Ge2I7WbA/EYC8xvjSH7NgfmNAuY3ltwNw60OGG3tY6x9rKcbxpn3eDMTzEwUdEML4G3GA28zyRHbLYH5TQDmN9mR/FoB85sIzG8KuRvGWR0wydonW/sUTzdMNe9pZqabmSHohtbA20wD3mamI7bbAPObDsxvliP5tQXmNwOY32xyN0y1OmCmtc+y9tmebphj3nPNzDMzX9AN7YC3mQu8zQJHbLcH5jcPmN9CR/LrAMxvPjC/ReRumGN1wAJrX2jtizzdsNi8l5hZamaZoBs6Am+zBHib5Y7Y7gTMbykwvxWO5NcZmN8yYH4ryd2w2OqA5da+wtpXerphlXmvNrPGzFpBN3QB3mY18DbrHLHdFZjfGmB+6x3Jrxswv7XA/DaQu2GV1QHrrH29tW/wdMNG895kZrOZLYJu6A68zSbgbbY6YrsHML/NwPy2OZJfT2B+W4D5bSd3w0arA7Za+zZr3+7phh3mvdPMLjO7Bd3QC3ibncDb7HHEdm9gfruA+e11JL8+wPx2A/PbR+6GHVYH7LH2vda+z9MN+837gJmDZg4JuqEv8DYHgLc57IjtfsD8DgLzO+JIfv2B+R0C5neU3A37rQ44bO1HrP2opxuOmfdxMyfMnBR0wwDgbY4Db3PKEdsDgfmdAOZ32pH8BgHzOwnM7wy5G45ZHXDK2k9b+xlPN5w173Nmzpu5IOiGwcDbnAPe5qIjtocA8zsPzO+SI/kNBeZ3AZjfZXI3nLU64KK1X7L2y55uuGLeV81cM3Nd0A3DgLe5CrzNDUdsDwfmdw2Y301H8hsBzO86ML9b5G64YnXADWu/ae23PN1w27zvmLlr5p6gG0YCb3MHeJv7jtgeBczvLjC/B47kNxqY3z1gfg/J3XDb6oD71v7A2h96uuGReT8288TMU0E3jAHe5jHwNs8csT0WmN8TYH7PHclvHDC/p8D8XpC74ZHVAc+s/bm1v/B0w0vzfmXmtZk3gm4YD7zNK+Bt3jpiewIwv9fA/N45kt9EYH5vgPm9J3fDS6sD3lr7O2t/7+mGD+b90cwnM58F3TAJeJuPwNt8ccT2ZGB+n4D5fXUkvynA/D4D8/tG7oYPVgd8sfav1v7N0w3fzfuHmZ9mfgm6YSrwNj+At/ntiO1pwPx+AvP740h+04H5/QLm95fcDd+tDvht7X+s/a+nG4IEBA0S1EwwM8ED+N0wA3ibf78bdZsQAW7YngnMLxgwv5CO5DcLmF9wYH6hArjd8O9/5//pgBDWHtLaQwX8dzeENu8wZsKaCSfohtnA24QB3ia8I7bnAPMLC8wvgiP5zQXmFw6YX0RyN4S2OiC8tUew9oiebohk3pHNRDETVdAN84C3iQy8TTRHbM8H5hcFmF90R/JbAMwvKjC/GORuiGR1QDRrj27tMTzdENO8Y5mJbSaOoBsWAm8TC3ibuI7YXgTMLzYwv3iO5LcYmF8cYH7xyd0Q0+qAuNYez9rje7ohgXknNJPITGJBNywB3iYh8DZJHLG9FJhfImB+SR3Jbxkwv8TA/JKRuyGB1QFJrD2ptSfzdENy805hJqWZVIJuWA68TQrgbVI7YnsFML+UwPx8HMlvJTC/VMD80pC7IbnVAamt3cfa03i6Ia15pzOT3kwGQTesAt4mHfA2GR2xvRqYX3pgfpkcyW8NML8MwPx8yd2Q1uqAjNaeydp9Pd2Q2bz9zGQx4y/ohrXA2/gBb5PVEdvrgPllAeYX4Eh+64H5+QPzy0buhsxWB2S19gBrz+bphkDzzm4mh5mcgm7YALxNduBtcjlieyMwvxzA/HI7kt8mYH45gfnlIXdDoNUBuaw9t7Xn8XRD3n+/yUx+MwUE3bAZeJt8wNsUdMT2FmB++YH5FXIkv63A/AoA8ytM7oa8VgcUtPZC1l7Y0w1FzLuomWJmigu6YRvwNkWBtynhiO3twPyKAfMr6Uh+O4D5FQfmV4rcDUWsDihh7SWtvZSnG0qbdxkzZc2UE3TDTuBtygBvU94R27uA+ZUF5lfBkfx2A/MrB8yvIrkbSlsdUN7aK1h7RU83VDLvymaqmKkq6IY9wNtUBt6mmiO29wLzqwLMr7oj+e0D5lcVmF8NcjdUsjqgmrVXt/Yanm6oad61zNQ2U0fQDfuBt6kFvE1dR2wfAOZXG5hfPUfyOwjMrw4wv/rkbqhpdUBda69n7fU93dDAvBuaaWSmsaAbDgFv0xB4myaO2D4MzK8RML+mjuR3BJhfY2B+zcjd0MDqgCbW3tTam3m6obl5tzDT0kwrQTccBd6mBfA2rR2xfQyYX0tgfm0cye84ML9WwPzakruhudUBra29jbW39XRDO/Nub6aDmY6CbjgBvE174G06OWL7JDC/DsD8OjuS3ylgfh2B+XUhd0M7qwM6WXtna+/i6Yau5t3NTHczPQTdcBp4m27A2/R0xPYZYH7dgfn1ciS/s8D8egDz603uhq5WB/S09l7W3tvTDX3Mu6+Zfmb6C7rhHPA2fYG3GeCI7fPA/PoB8xvoSH4XgPn1B+Y3iNwNfawOGGDtA619kKcbBpv3EDNDzQwTdMNF4G2GAG8z3BHbl4D5DQXmN8KR/C4D8xsGzG8kuRsGWx0w3NpHWPtITzeMMu/RZsaYGSvohivA24wG3macI7avAvMbA8xvvCP5XQPmNxaY3wRyN4yyOmCctY+39gmebpho3pPMTDYzRdAN14G3mQS8zVRHbN8A5jcZmN80R/K7CcxvCjC/6eRumGh1wFRrn2bt0z3dMMO8Z5qZZWa2oBtuAW8zE3ibOY7Yvg3MbxYwv7mO5HcHmN9sYH7zyN0ww+qAOdY+19rnebphvnkvMLPQzCJBN9wF3mYB8DaLHbF9D5jfQmB+SxzJ7z4wv0XA/JaSu2G+1QGLrX2JtS/1dMMy815uZoWZlYJueAC8zXLgbVY5YvshML8VwPxWO5LfI2B+K4H5rSF3wzKrA1ZZ+2prX+PphrXmvc7MejMbBN3wGHibdcDbbHTE9hNgfuuB+W1yJL+nwPw2APPbTO6GtVYHbLT2Tda+2dMNW8x7q5ltZrYLuuEZ8DZbgbfZ4Yjt58D8tgHz2+lIfi+A+W0H5reL3A1brA7YYe07rX2Xpxt2m/ceM3vN7BN0w0vgbfYAb7PfEduvgPntBeZ3wJH8XgPz2wfM7yC5G3ZbHbDf2g9Y+0FPNxwy78Nmjpg5KuiGN8DbHAbe5pgjtt8C8zsCzO+4I/m9A+Z3FJjfCXI3HLI64Ji1H7f2E55uOGnep8ycNnNG0A3vgbc5BbzNWUdsfwDmdxqY3zlH8vsIzO8MML/z5G44aXXAWWs/Z+3nPd1wwbwvmrlk5rKgGz4Bb3MReJsrjtj+DMzvEjC/q47k9wWY32VgftfI3XDB6oAr1n7V2q95uuG6ed8wc9PMLUE3fAXe5gbwNrcdsf0NmN9NYH53HMnvOzC/W8D87pK74brVAbet/Y613/V0wz3zvm/mgZmHgm74AbzNfeBtHjli+ycwvwfA/B47kt8vYH4Pgfk9IXfDPasDHln7Y2t/4umGp+b9zMxzMy8E3fAbeJtnwNu8dMT2H2B+z4H5vXIkv7/A/F4A83tN7oanVge8tPZX1v7a0w1vzPutmXdm3gu64d8HUd96C7zNB0dsBwXm9w6Y30dH8gsGzO89ML9P5G54Y3XAB2v/aO2fPN3w2by/mPlq5pugG4IDb/MFeJvvjtgOAczvKzC/H47kFxKY3zdgfj/J3fDZ6oDv1v7D2n96uuGXef/+92dm/gq6IRTwNr+BtwmSzQ3boYH5/QHmF9SR/MIA8/sLzC9YNm43/LI64J/1/+xBrT1Ytv/uhuDmHcJMSDOhsvG7ISzwNiGy4W4T2hHb4YD5hQTmF8aR/MID8wsFzC8suRuCWx0Q2trDWHtYTzeEM+/wZiKYiSjohgjA24QH3iaSI7YjAvOLAMwvsiP5RQLmFxGYXxRyN4SzOiCStUe29iiebohq3tHMRDcTQ9ANkYG3iQa8TUxHbEcB5hcdmF8sR/KLCswvBjC/2ORuiGp1QExrj2XtsT3dEMe845qJZya+oBuiAW8TF3ibBI7Yjg7MLx4wv4SO5BcDmF98YH6JyN0Qx+qABNae0NoTebohsXknMZPUTDJBN8QE3iYJ8DbJHbEdC5hfUmB+KRzJLzYwv2TA/FKSuyGx1QHJrT2Ftaf0dEMq805txsdMGkE3xAHeJjXwNmkdsR0XmJ8PML90juQXD5hfGmB+6cndkMrqgLTWns7a03u6IYN5ZzSTyYyvoBviA2+TEXibzI7YTgDMLxMwPz9H8ksIzM8XmF8WcjdksDogs7X7WXsWTzf4m3dWMwFmsgm6IRHwNlmBtwl0xHZiYH4BwPyyO5JfEmB+2YD55SB3g7/VAYHWnt3ac3i6Iad55zKT20weQTckBd4mF/A2eR2xnQyYX25gfvkcyS85ML88wPzyk7shp9UBea09n7Xn93RDAfMuaKaQmcKCbkgBvE1B4G2KOGI7JTC/QsD8ijqSXypgfoWB+RUjd0MBqwOKWHtRay/m6Ybi5l3CTEkzpQTdkBp4mxLA25R2xLYPML+SwPzKOJJfGmB+pYD5lSV3Q3GrA0pbexlrL+vphnLmXd5MBTMVBd2QFnib8sDbVHLEdjpgfhWA+VV2JL/0wPwqAvOrQu6GclYHVLL2ytZexdMNVc27mpnqZmoIuiED8DbVgLep6YjtjMD8qgPzq+VIfpmA+dUA5leb3A1VrQ6oae21rL22pxvqmHddM/XM1Bd0gy/wNnWBt2ngiO3MwPzqAfNr6Eh+fsD86gPza0TuhjpWBzSw9obW3sjTDY3Nu4mZpmaaCbohC/A2TYC3ae6IbX9gfk2B+bVwJL+swPyaAfNrSe6GxlYHNLf2Ftbe0tMNrcy7tZk2ZtoKuiEAeJvWwNu0c8R2NmB+bYD5tXckv0Bgfm2B+XUgd0MrqwPaWXt7a+/g6YaO5t3JTGczXQTdkB14m07A23R1xHYOYH6dgfl1cyS/nMD8ugDz607uho5WB3S19m7W3t3TDT3Mu6eZXmZ6C7ohF/A2PYG36eOI7dzA/HoB8+vrSH55gPn1BubXj9wNPawO6GPtfa29n6cb+pv3ADMDzQwSdENe4G0GAG8z2BHb+YD5DQTmN8SR/PID8xsEzG8ouRv6Wx0w2NqHWPtQTzcMM+/hZkaYGSnohgLA2wwH3maUI7YLAvMbAcxvtCP5FQLmNxKY3xhyNwyzOmCUtY+29jGebhhr3uPMjDczQdANhYG3GQe8zURHbBcB5jcemN8kR/IrCsxvAjC/yeRuGGt1wERrn2Ttkz3dMMW8p5qZZma6oBuKAW8zFXibGY7YLg7Mbxowv5mO5FcCmN90YH6zyN0wxeqAGdY+09pnebphtnnPMTPXzDxBN5QE3mYO8DbzHbFdCpjfXGB+CxzJrzQwv3nA/BaSu2G21QHzrX2BtS/0dMMi815sZomZpYJuKAO8zWLgbZY5YrssML8lwPyWO5JfOWB+S4H5rSB3wyKrA5ZZ+3JrX+HphpXmvcrMajNrBN1QHnibVcDbrHXEdgVgfquB+a1zJL+KwPzWAPNbT+6GlVYHrLX2dda+3tMNG8x7o5lNZjYLuqES8DYbgbfZ4ojtysD8NgHz2+pIflWA+W0G5reN3A0brA7YYu1brX2bpxu2m/cOMzvN7BJ0Q1XgbXYAb7PbEdvVgPntBOa3x5H8qgPz2wXMby+5G7ZbHbDb2vdY+15PN+wz7/1mDpg5KOiGGsDb7Afe5pAjtmsC8zsAzO+wI/nVAuZ3EJjfEXI37LM64JC1H7b2I55uOGrex8wcN3NC0A21gbc5BrzNSUds1wHmdxyY3ylH8qsLzO8EML/T5G44anXASWs/Ze2nPd1wxrzPmjln5rygG+oBb3MWeJsLjtiuD8zvHDC/i47k1wCY33lgfpfI3XDG6oAL1n7R2i95uuGyeV8xc9XMNUE3NATe5grwNtcdsd0ImN9VYH43HMmvMTC/a8D8bpK74bLVAdet/Ya13/R0wy3zvm3mjpm7gm5oArzNbeBt7jliuykwvzvA/O47kl8zYH53gfk9IHfDLasD7ln7fWt/4OmGh+b9yMxjM08E3dAceJtHwNs8dcR2C2B+j4H5PXMkv5bA/J4A83tO7oaHVgc8tfZn1v7c0w0vzPulmVdmXgu6oRXwNi+Bt3njiO3WwPxeAfN760h+bYD5vQbm947cDS+sDnhj7W+t/Z2nG96b9wczH818EnRDW+BtPgBv89kR2+2A+X0E5vfFkfzaA/P7BMzvK7kb3lsd8Nnav1j7V083fDPv72Z+mPkp6IYOwNt8B97mlyO2OwLz+wHM77cj+XUC5vcTmN8fcjd8szrgl7X/tvY/nm74a95BAoMGCWomWCC/GzoDb/Pvd6NuEzzQDdtdgPkFBeYXwpH8ugLzCwbML2Qgtxv+Wh3wz/p/9hDWHjLwv7shlHmHNhPGTFhBN3QD3iY08DbhHLHdHZhfGGB+4R3Jrwcwv7DA/CKQuyGU1QHhrD28tUfwdENE845kJrKZKIJu6Am8TSTgbaI6YrsXML/IwPyiOZJfb2B+UYD5RSd3Q0SrA6JaezRrj+7phhjmHdNMLDOxBd3QB3ibmMDbxHHEdl9gfrGA+cV1JL9+wPxiA/OLR+6GGFYHxLH2uNYez9MN8c07gZmEZhIJuqE/8DYJgLdJ7IjtAcD8EgLzS+JIfgOB+SUC5peU3A3xrQ5IbO1JrD2ppxuSmXdyMynMpBR0wyDgbZIDb5PKEduDgfmlAOaX2pH8hgDzSwnMz4fcDcmsDkhl7amt3cfTDWnMO62ZdGbSC7phKPA2aYG3yeCI7WHA/NIB88voSH7DgfmlB+aXidwNaawOyGDtGa09k6cbfM07sxk/M1kE3TACeJvMwNv4O2J7JDA/P2B+WR3JbxQwvyzA/ALI3eBrdYC/tWe19gBPN2Qz70Az2c3kEHTDaOBtAoG3yemI7THA/LID88vlSH5jgfnlAOaXm9wN2awOyGntuaw9t6cb8ph33n+/y0x+QTeMA94mL/A2BRyxPR6YXz5gfgUdyW8CML/8wPwKkbshj9UBBay9oLUX8nRDYfMuYqaomWKCbpgIvE0R4G2KO2J7EjC/osD8SjiS32RgfsWA+ZUkd0NhqwOKW3sJay/p6YZS5l3aTBkzZQXdMAV4m9LA25RzxPZUYH5lgPmVdyS/acD8ygLzq0DuhlJWB5Sz9vLWXsHTDRXNu5KZymaqCLphOvA2lYC3qeqI7RnA/CoD86vmSH4zgflVAeZXndwNFa0OqGrt1ay9uqcbaph3TTO1zNQWdMMs4G1qAm9TxxHbs4H51QLmV9eR/OYA86sNzK8euRtqWB1Qx9rrWns9TzfUN+8GZhqaaSTohrnA2zQA3qaxI7bnAfNrCMyviSP5zQfm1wiYX1NyN9S3OqCxtTex9qaebmhm3s3NtDDTUtANC4C3aQ68TStHbC8E5tcCmF9rR/JbBMyvJTC/NuRuaGZ1QCtrb23tbTzd0Na825lpb6aDoBsWA2/TDnibjo7YXgLMrz0wv06O5LcUmF8HYH6dyd3Q1uqAjtbeydo7e7qhi3l3NdPNTHdBNywD3qYr8DY9HLG9HJhfN2B+PR3JbwUwv+7A/HqRu6GL1QE9rL2ntffydENv8+5jpq+ZfoJuWAm8TR/gbfo7YnsVML++wPwGOJLfamB+/YD5DSR3Q2+rA/pb+wBrH+jphkHmPdjMEDNDBd2wBnibwcDbDHPE9lpgfkOA+Q13JL91wPyGAvMbQe6GQVYHDLP24dY+wtMNI817lJnRZsYIumE98DajgLcZ64jtDcD8RgPzG+dIfhuB+Y0B5jee3A0jrQ4Ya+3jrH28pxsmmPdEM5PMTBZ0wybgbSYCbzPFEdubgflNAuY31ZH8tgDzmwzMbxq5GyZYHTDF2qda+zRPN0w37xlmZpqZJeiGrcDbzADeZrYjtrcB85sJzG+OI/ltB+Y3C5jfXHI3TLc6YLa1z7H2uZ5umGfe880sMLNQ0A07gLeZD7zNIkds7wTmtwCY32JH8tsFzG8hML8l5G6YZ3XAImtfbO1LPN2w1LyXmVluZoWgG3YDb7MMeJuVjtjeA8xvOTC/VY7ktxeY3wpgfqvJ3bDU6oCV1r7K2ld7umGNea81s87MekE37APeZi3wNhscsb0fmN86YH4bHcnvADC/9cD8NpG7YY3VARusfaO1b/J0w2bz3mJmq5ltgm44CLzNFuBttjti+xAwv63A/HY4kt9hYH7bgPntJHfDZqsDtlv7Dmvf6emGXea928weM3sF3XAEeJvdwNvsc8T2UWB+e4D57Xckv2PA/PYC8ztA7oZdVgfss/b91n7A0w0HzfuQmcNmjgi64TjwNoeAtznqiO0TwPwOA/M75kh+J4H5HQHmd5zcDQetDjhq7ces/binG06Y90kzp8ycFnTDKeBtTgJvc8YR26eB+Z0C5nfWkfzOAPM7DczvHLkbTlgdcMbaz1r7OU83nDfvC2Yumrkk6IazwNtcAN7msiO2zwHzuwjM74oj+Z0H5ncJmN9VcjectzrgsrVfsfarnm64Zt7Xzdwwc1PQDReAt7kOvM0tR2xfBOZ3A5jfbUfyuwTM7yYwvzvkbrhmdcAta79t7Xc83XDXvO+ZuW/mgaAbLgNvcw94m4eO2L4CzO8+ML9HjuR3FZjfA2B+j8ndcNfqgIfW/sjaH3u64Yl5PzXzzMxzQTdcA97mKfA2LxyxfR2Y3zNgfi8dye8GML/nwPxekbvhidUBL6z9pbW/8nTDa/N+Y+atmXeCbrgJvM0b4G3eO2L7FjC/t8D8PjiS321gfu+A+X0kd8NrqwPeW/sHa//o6YZP5v3ZzBczXwXdcAd4m8/A23xzxPZdYH5fgPl9dyS/e8D8vgLz+0Huhk9WB3yz9u/W/sPTDT/N+5eZ3//+XNAN94G3+QW8zV9HbD8A5vcbmF+Q7G7k9xCY3x9gfkGzc7vhp9UBf639393+swfN/t/dEMy8g5sJYSZkdn43PALeJnh23G1COWL7MTC/EMD8QjuS3xNgfiGB+YUhd0MwqwNCWXtoaw/j6Yaw5h3OTHgzEQTd8BR4m3DA20R0xPYzYH7hgflFciS/58D8IgDzi0zuhrBWB0S09kjWHtnTDVHMO6qZaGaiC7rhBfA2UYG3ieGI7ZfA/KIB84vpSH6vgPlFB+YXi9wNUawOiGHtMa09lqcbYpt3HDNxzcQTdMNr4G3iAG8T3xHbb4D5xQXml8CR/N4C84sHzC8huRtiWx0Q39oTWHtCTzckMu/EZpKYSSrohnfA2yQG3iaZI7bfA/NLAswvuSP5fQDmlxSYXwpyNySyOiCZtSe39hSebkhp3qnMpDbjI+iGj8DbpALeJo0jtj8B80sNzC+tI/l9BubnA8wvHbkbUlodkMba01p7Ok83pDfvDGYymskk6IYvwNtkAN7G1xHbX4H5ZQTml9mR/L4B88sEzM+P3A3prQ7wtfbM1u7n6YYs5u1vJquZAEE3fAfexh94m2yO2P4BzC8rML9AR/L7CcwvAJhfdnI3ZLE6IJu1B1p7dk835DDvnGZymckt6IZfwNvkBN4mjyO2fwPzywXML68j+f0B5pcbmF8+cjfksDogj7XntfZ8nm7Ib94FzBQ0U0jQDX+BtykAvE1hR2z/OxDqWwWB+RVxJL+gwPwKAfMrSu6G/FYHFLb2ItZe1NMNxcy7uJkSZkoKuiEY8DbFgbcp5Yjt4MD8SgDzK+1IfiGA+ZUE5leG3A3FrA4oZe2lrb2MpxvKmnc5M+XNVBB0Q0jgbcoBb1PREduhgPmVB+ZXyZH8QgPzqwDMrzK5G8paHVDR2itZe2VPN1Qx76pmqpmpLuiGMMDbVAXepoYjtsMC86sGzK+mI/mFA+ZXHZhfLXI3VLE6oIa117T2Wp5uqG3edczUNVNP0A3hgbepA7xNfUdsRwDmVxeYXwNH8osIzK8eML+G5G6obXVAfWtvYO0NPd3QyLwbm2lipqmgGyIBb9MYeJtmjtiODMyvCTC/5o7kFwWYX1Ngfi3I3dDI6oBm1t7c2lt4uqGlebcy09pMG0E3RAXephXwNm0dsR0NmF9rYH7tHMkvOjC/NsD82pO7oaXVAW2tvZ21t/d0Qwfz7mimk5nOgm6IAbxNR+BtujhiOyYwv07A/Lo6kl8sYH6dgfl1I3dDB6sDulh7V2vv5umG7ubdw0xPM70E3RAbeJsewNv0dsR2HGB+PYH59XEkv7jA/HoB8+tL7obuVgf0tvY+1t7X0w39zLu/mQFmBgq6IR7wNv2BtxnkiO34wPwGAPMb7Eh+CYD5DQTmN4TcDf2sDhhk7YOtfYinG4aa9zAzw82MEHRDQuBthgFvM9IR24mA+Q0H5jfKkfwSA/MbAcxvNLkbhlodMNLaR1n7aE83jDHvsWbGmRkv6IYkwNuMBd5mgiO2kwLzGwfMb6Ij+SUD5jcemN8kcjeMsTpggrVPtPZJnm6YbN5TzEw1M03QDcmBt5kCvM10R2ynAOY3FZjfDEfySwnMbxowv5nkbphsdcB0a59h7TM93TDLvGebmWNmrqAbUgFvMxt4m3mO2E4NzG8OML/5juTnA8xvLjC/BeRumGV1wDxrn2/tCzzdsNC8F5lZbGaJoBvSAG+z6P9QYw5BgjbdEh7btm2jhz1qc2zbtm3btm3btm1b98zij5tfrbMq4iwyIqsXHW88efpZNHGbpUpuOxuR32Iiv2VK+GUn8ltC5LfcshsWggOWQl8GfbnhhhXyXilZJVntwA05iNusJG6zRslt5yTyW0Xkt1YJv1xEfquJ/NZZdsMKcMAa6GuhrzPcsF7eGyQbJZscuCE3cZsNxG02K7ntPER+G4n8tijhl5fIbxOR31bLblgPDtgMfQv0rYYbtsl7u2SHZKcDN+QjbrOduM0uJbedn8hvB5HfbiX8ChD57STy22PZDdvAAbug74a+x3DDXnnvk+yXHHDghoLEbfYRtzmo5LYLEfntJ/I7pIRfYSK/A0R+hy27YS844CD0Q9APG244Iu+jkmOS4w7cUIS4zVHiNieU3HZRIr9jRH4nlfDzIPI7TuR3yrIbjoADTkA/Cf2U4YbT8j4jOSs558ANxYjbnCFuc17JbRcn8jtL5HdBCb8SRH7niPwuWnbDaXDAeegXoF803HBJ3pclVyRXHbihJHGby8Rtrim57VJEfleI/K4r4VeayO8qkd8Ny264BA64Bv069BuGG27K+5bktuSOAzd4Ere5RdzmrpLbLkPkd5vI754SfmWJ/O4Q+d237Iab4IC70O9Bv2+44YG8H0oeSR47cEM54jYPids8UXLb5Yn8HhH5PVXCrwKR32Miv2eW3fAAHPAE+lPozww3PJf3C8lLySsHbvAibvOCuM1rJbftTeT3ksjvjRJ+PkR+r4j83lp2w3NwwGvob6C/NdzwTt7vJR8kHx24wZe4zXviNp+U3LYfkd8HIr/PSvj5E/l9JPL7YtkN78ABn6B/hv7FcMNXeX+TfJf8cOCGAOI234jb/FRy24FEft+J/H4p4RdE5PeDyO+3ZTd8BQf8hP4L+m/DDX/k/VcSxiNsmLAe9t0QTNzmL3GbcB46bjuEyC+MB49feCX8Qon8whL5RfCw64Y/4IB/t/6/Hh56BI//uiGivCNJIkuiOHBDReI2kYjbRFVy25WI/CIT+UVTwq8ykV8UIr/olt0QERwQFXo06NENN8SQd0xJLElsB26oQtwmJnGbOEpuuyqRXywiv7hK+FUj8otN5BfPshtigAPiQI8LPZ7hhvjyTiBJKEnkwA3VidskIG6TWMlt1yDyS0jkl0QJv5pEfomI/JJadkN8cEBi6EmgJzXckEzeySUpJCkduKEWcZvkxG1SKbnt2kR+KYj8UivhV4fILyWRXxrLbkgGDkgFPTX0NIYb0so7nSS9JIMDN9QlbpOOuE1GJbddj8gvPZFfJiX86hP5ZSDyy2zZDWnBARmhZ4Ke2XBDFnlnlWSTZHfghgbEbbISt8mh5LYbEvllI/LLqYRfIyK/7ER+uSy7IQs4IAf0nNBzGW7ILe88krySfA7c0Ji4TR7iNvmV3HYTIr+8RH4FlPBrSuSXj8ivoGU35AYH5IdeAHpBww2F5F1YUkRS1IEbmhG3KUzcxkPJbTcn8itC5FdMCb8WRH5FifyKW3ZDIXCAB/Ri0Isbbigh75KSUv++zYEbWhK3KUncxlPJbbci8itF5FdGCb/WRH6lifzKWnZDCXCAJ/Qy0Msabign7/KSChIvB25oQ9ymPHEbbyW33ZbIrwKRn48Sfu2I/LyI/Hwtu6EcOMAbug90X8MNfvL2lwRIAh24oT1xG3/iNkFKbrsDkV8AkV+wEn4difwCifxCLLvBDxwQBD0YeojhhlB5V5RUklR24IZOxG0qErepouS2OxP5VSLyq6qEXxciv8pEftUsuyEUHFAFelXo1Qw3VJd3DUlNSS0HbuhK3KYGcZvaSm67G5FfTSK/Okr4dSfyq0XkV9eyG6qDA2pDrwO9ruGGevKuL2kgaejADT2I29QnbtNIyW33JPJrQOTXWAm/XkR+DYn8mlh2Qz1wQCPojaE3MdzQVN7NJM0lLRy4oTdxm2bEbVoque0+RH7NifxaKeHXl8ivBZFfa8tuaAoOaAm9FfTWhhvayLutpJ2kvQM39CNu05a4TQclt92fyK8dkV9HJfwGEPm1J/LrZNkNbcABHaB3hN7JcENneXeRdJV0c+CGgcRtuhC36a7ktgcR+XUl8uuhhN9gIr9uRH49LbuhMzigO/Qe0Hsabugl796SPpK+DtwwhLhNb+I2/ZTc9lAivz5Efv2V8BtG5NeXyG+AZTf0Agf0g94f+gDDDQPlPUgyWDLEgRuGE7cZRNxmqJLbHkHkN5jIb5gSfiOJ/IYQ+Q237IaB4ICh0IdBH264YYS8R0pGSUY7cMMo4jYjiduMUXLbo4n8RhH5jVXCbwyR32giv3GW3TACHDAG+ljo4ww3jJf3BMlEySQHbhhL3GYCcZvJSm57HJHfRCK/KUr4jSfym0TkN9WyG8aDAyZDnwJ9quGGafKeLpkhmenADROI20wnbjNLyW1PJPKbQeQ3Wwm/SUR+M4n85lh2wzRwwCzos6HPMdwwV97zJPMlCxy4YTJxm3nEbRYque0pRH7zifwWKeE3lchvAZHfYstumAsOWAh9EfTFhhuWyHupZJlkuQM3TCNus5S4zQoltz2dyG8Zkd9KJfxmEPktJ/JbZdkNS8ABK6CvhL7KcMNqea+RrJWsc+CGmcRt1hC3Wa/ktmcR+a0l8tughN9sIr91RH4bLbthNThgPfQN0Dcabtgk782SLZKtDtwwh7jNZuI225Tc9lwivy1EftuV8JtH5LeVyG+HZTdsAgdsg74d+g7DDTvlvUuyW7LHgRvmE7fZRdxmr5LbXkDkt5vIb58SfguJ/PYQ+e237Iad4IC90PdB32+44YC8D0oOSQ47cMMi4jYHidscUXLbi4n8DhH5HVXCbwmR32Eiv2OW3XAAHHAE+lHoxww3HJf3CclJySkHblhK3OYEcZvTSm57GZHfSSK/M0r4LSfyO0Xkd9ayG46DA05DPwP9rOGGc/I+L7kguejADSuI25wnbnNJyW2vJPK7QOR3WQm/VUR+F4n8rlh2wzlwwCXol6FfMdxwVd7XJNclNxy4YTVxm2vEbW4que01RH7XifxuKeG3lsjvBpHfbctuuAoOuAn9FvTbhhvuyPuu5J7kvgM3rCNuc5e4zQMlt72eyO8ekd9DJfw2EPndJ/J7ZNkNd8ABD6A/hP7IcMNjeT+RPJU8c+CGjcRtnhC3ea7ktjcR+T0l8nuhhN9mIr9nRH4vLbvhMTjgOfQX0F8abngl79eSN5K3DtywhbjNa+I275Tc9lYivzdEfu+V8NtG5PeWyO+DZTe8Age8g/4e+gfDDR/l/UnyWfLFgRu2E7f5RNzmq5Lb3kHk95nI75sSfjuJ/L4Q+X237IaP4ICv0L9B/2644Ye8f0p+SX47cMMu4jY/idv8UXLbu4n8fhH5/VXCbw+R328ivzDF7LrhBzjgD/S/0P99A7ohrLzDScJLIhSz74a9xG3CFeNtE7GYjtveR+QXnsgvkhJ++4n8IhD5RbbshrDF/t8BEaFHgh7ZcEMUeUeVRJNEd+CGA8RtohK3iaHktg8S+UUj8ouphN8hIr/oRH6xLLshCjggBvSY0GMZbogt7ziSuJJ4DtxwmLhNHOI28ZXc9hEiv7hEfgmU8DtK5BePyC+hZTfEBgfEh54AekLDDYnknViSRJLUgRuOEbdJTNwmmZLbPk7kl4TIL7kSfieI/JIS+aWw7IZE4IBk0JNDT2G4IaW8U0lSS9I4cMNJ4japiNukVXLbp4j8UhP5pVPC7zSRXxoiv/SW3ZASHJAWejro6Q03ZJB3RkkmSWYHbjhD3CYjcZssSm77LJFfJiK/rEr4nSPyy0zkl82yGzKAA7JAzwo9m+GG7PLOIckpyeXADeeJ2+QgbpNbyW1fIPLLSeSXRwm/i0R+uYj88lp2Q3ZwQG7oeaDnNdyQT975JQUkBR244RJxm/zEbQopue3LRH4FiPwKK+F3hcivIJFfEctuyAcOKAS9MPQihhuKyttDUkxS3IEbrhK38SBuU0LJbV8j8itG5FdSCb/rRH7FifxKWXZDUXBACegloZcy3FBa3p6SMpKyDtxwg7iNJ3Gbckpu+yaRXxkiv/JK+N0i8itL5FfBshtKgwPKQS8PvYLhBi95e0t8JL4O3HCbuI03cRs/Jbd9h8jPh8jPXwm/u0R+vkR+AZbd4AUO8IPuDz3AcEOgvIMkwZIQB264R9wmiLhNqJLbvk/kF0zkV1EJvwdEfiFEfpUsuyEQHBAKvSL0SoYbKsu7iqSqpJoDNzwkblOFuE11Jbf9iMivKpFfDSX8HhP5VSPyq2nZDZXBAdWh14Be03BDLXnXltSR1HXghifEbWoTt6mn5LafEvnVIfKrr4TfMyK/ukR+DSy7oRY4oB70+tAbGG5oKO9GksaSJg7c8Jy4TSPiNk2V3PYLIr/GRH7NlPB7SeTXhMivuWU3NAQHNIXeDHpzww0t5N1S0krS2oEbXhG3aUncpo2S235N5NeKyK+tEn5viPxaE/m1s+yGFuCANtDbQm9nuKG9vDtIOko6OXDDW+I2HYjbdFZy2++I/DoS+XVRwu89kV8nIr+ult3QHhzQGXoX6F0NN3STd3dJD0lPB274QNymO3GbXkpu+yORXw8iv95K+H0i8utJ5NfHshu6gQN6Qe8NvY/hhr7y7ifpLxngwA2fidv0I24zUMltfyHy60/kN0gJv69EfgOI/AZbdkNfcMBA6IOgDzbcMETeQyXDJMMduOEbcZuhxG1GKLnt70R+w4j8Rirh94PIbziR3yjLbhgCDhgBfST0UYYbRst7jGSsZJwDN/wkbjOGuM14Jbf9i8hvLJHfBCX8fhP5jSPym2jZDaPBAeOhT4A+0XDDJHlPlkyRTHXghj/EbSYTt5mm5Lb/EvlNIfKbroRfmIi83zWVyG+GZTdMAgdMgz4d+gzDDTPlPUsyWzLHgRvCEreZRdxmrpLbDkfkN5vIb54SfuGJ/OYQ+c237IaZ4IC50OdBn2+4YYG8F0oWSRY7cEME4jYLidssUXLbEYn8FhH5LVXCLxKR32Iiv2WW3bAAHLAE+lLoyww3LJf3CslKySoHbohM3GYFcZvVSm47CpHfSiK/NUr4RSXyW0Xkt9ayG5aDA1ZDXwN9reGGdfJeL9kg2ejADdGI26wnbrNJyW1HJ/LbQOS3WQm/GER+G4n8tlh2wzpwwCbom6FvMdywVd7bJNslOxy4ISZxm23EbXYque1YRH7bifx2KeEXm8hvB5Hfbstu2AoO2Al9F/Tdhhv2yHuvZJ9kvwM3xCFus5e4zQEltx2XyG8fkd9BJfziEfntJ/I7ZNkNe8ABB6AfhH7IcMNheR+RHJUcc+CG+MRtjhC3Oa7kthMQ+R0l8juhhF9CIr9jRH4nLbvhMDjgOPQT0E8abjgl79OSM5KzDtyQiLjNaeI255TcdmIivzNEfueV8EtC5HeWyO+CZTecAgecg34e+gXDDRflfUlyWXLFgRuSEre5RNzmqpLbTkbkd5nI75oSfsmJ/K4Q+V237IaL4ICr0K9Bv2644Ya8b0puSW47cEMK4jY3idvcUXLbKYn8bhH53VXCLxWR320iv3uW3XADHHAH+l3o9ww33Jf3A8lDySMHbkhN3OYBcZvHSm47DZHfQyK/J0r4pSXye0Tk99SyG+6DAx5DfwL9qeGGZ/J+LnkheenADemI2zwnbvNKyW2nJ/J7QeT3Wgm/DER+L4n83lh2wzNwwCvor6G/MdzwVt7vJO8lHxy4ISNxm3fEbT4que1MRH7vifw+KeGXmcjvA5HfZ8tueAsO+Aj9E/TPhhu+yPur5JvkuwM3ZCFu85W4zQ8lt52VyO8bkd9PJfyyEfl9J/L7ZdkNX8ABP6D/hP7LcMPvf2/JX0mY4vbdkJ24zR/iNmGL67jtHER+f4n8winhl5PIL0xxHr/wxe264Tc44N+t/6+Hgx6++H/dEEHeESWRJJEduCEXcZuIxG2iKLnt3ER+kYj8oirhl4fILzKRXzTLbogADogCPSr0aIYboss7hiSmJJYDN+QlbhODuE1sJbedj8gvJpFfHCX88hP5xSLyi2vZDdHBAbGhx4Ee13BDPHnHlySQJHTghgLEbeITt0mk5LYLEvklIPJLrIRfISK/hER+SSy7IR44IBH0xNCTGG5IKu9kkuSSFA7cUJi4TTLiNimV3HYRIr/kRH6plPArSuSXgsgvtWU3JAUHpISeCnpqww1p5J1Wkk6S3oEbPIjbpCVuk0HJbRcj8ktH5JdRCb/iRH7pifwyWXZDGnBABugZoWcy3JBZ3lkkWSXZHLihBHGbLMRtsiu57ZJEflmJ/HIo4VeKyC8bkV9Oy27IDA7IDj0H9JyGG3LJO7ckjySvAzeUJm6Tm7hNPiW37Unkl4fIL78SfmWI/PIS+RWw7IZc4IB80PNDL2C4oaC8C0kKS4o4cENZ4jaFiNsUVXLb5Yj8ChP5eSjhV57IrwiRXzHLbigIDigK3QN6McMNxeVdQlJSUsqBGyoQtylB3Ka0ktv2IvIrSeTnqYSfN5FfKSK/MpbdUBwcUBq6J/QyhhvKyrucpLykggM3+BC3KUfcxkvJbfsS+ZUn8vNWws+PyK8CkZ+PZTeUBQd4QfeG7mO4wVfefhJ/SYADN/gTt/EjbhOo5LYDiPz8ifyClPALJPILIPILtuwGX3BAIPQg6MGGG0LkHSqpKKnkwA1BxG1CidtUVnLbwUR+FYn8qijhF0LkV4nIr6plN4SAAypDrwK9quGGavKuLqkhqenADaHEbaoTt6ml5LYrEvnVIPKrrYRfJSK/mkR+dSy7oRo4oBb02tDrGG6oK+96kvqSBg7cUJm4TT3iNg2V3HYVIr/6RH6NlPCrSuTXgMivsWU31AUHNITeCHpjww1N5N1U0kzS3IEbqhG3aUrcpoWS265O5NeMyK+lEn41iPyaE/m1suyGJuCAFtBbQm9luKG1vNtI2kraOXBDTeI2bYjbtFdy27WI/NoS+XVQwq82kV87Ir+Olt3QGhzQHnoH6B0NN3SSd2dJF0lXB26oQ9ymM3Gbbkpuuy6RXxciv+5K+NUj8utK5NfDshs6gQO6Qe8OvYfhhp7y7iXpLenjwA31idv0Im7TV8ltNyDy603k108Jv4ZEfn2I/PpbdkNPcEBf6P2g9zfcMEDeAyWDJIMduKERcZuBxG2GKLntxkR+g4j8hirh14TIbzCR3zDLbhgADhgCfSj0YYYbhst7hGSkZJQDNzQlbjOCuM1oJbfdjMhvJJHfGCX8mhP5jSLyG2vZDcPBAaOhj4E+1nDDOHmPl0yQTHTghhbEbcYTt5mk5LZbEvlNIPKbrIRfKyK/iUR+Uyy7YRw4YBL0ydCnGG6YKu9pkumSGQ7c0Jq4zTTiNjOV3HYbIr/pRH6zlPBrS+Q3g8hvtmU3TAUHzIQ+C/psww1z5D1XMk8y34Eb2hG3mUvcZoGS225P5DePyG+hEn4diPzmE/ktsuyGOeCABdAXQl9kuGGxvJdIlkqWOXBDR+I2S4jbLFdy252I/JYS+a1Qwq8zkd8yIr+Vlt2wGBywHPoK6CsNN6yS92rJGslaB27oQtxmNXGbdUpuuyuR3xoiv/VK+HUj8ltL5LfBshtWgQPWQV8PfYPhho3y3iTZLNniwA3didtsIm6zVclt9yDy20zkt00Jv55EfluI/LZbdsNGcMBW6NugbzfcsEPeOyW7JLsduKEXcZudxG32KLnt3kR+u4j89irh14fIbzeR3z7LbtgBDtgDfS/0fYYb9sv7gOSg5JADN/QlbnOAuM1hJbfdj8jvIJHfESX8+hP5HSLyO2rZDfvBAYehH4F+1HDDMXkfl5yQnHTghgHEbY4Ttzml5LYHEvmdIPI7rYTfICK/k0R+Zyy74Rg44BT009DPGG44K+9zkvOSCw7cMJi4zTniNheV3PYQIr/zRH6XlPAbSuR3gcjvsmU3nAUHXIR+Cfplww1X5H1Vck1y3YEbhhG3uUrc5oaS2x5O5HeNyO+mEn4jiPyuE/ndsuyGK+CAG9BvQr9luOG2vO9I7kruOXDDSOI2d4jb3Fdy26OI/O4S+T1Qwm80kd89Ir+Hlt1wGxxwH/oD6A8NNzyS92PJE8lTB24YQ9zmMXGbZ0pueyyR3xMiv+dK+I0j8ntK5PfCshsegQOeQX8O/YXhhpfyfiV5LXnjwA3jidu8Im7zVsltTyDye03k904Jv4lEfm+I/N5bdsNLcMBb6O+gvzfc8EHeHyWfJJ8duGEScZuPxG2+KLntyUR+n4j8virhN4XI7zOR3zfLbvgADvgC/Sv0b4Ybvsv7h+Sn5JcDN0wlbvODuM1vJbc9jcjvJ5HfHyX8phP5/SLy+2vZDd/BAb+h/4H+13BDmBJhw4SVhJOEL2HfDTOI2/z7btY2EUrouO2ZRH7hiPwiKuE3i8gvPJFfpBJ23fDv7/x/DogAPSL0SCX+64bI8o4iiSqJ5sANs4nbRCFuE13Jbc8h8otK5BdDCb+5RH7RiPxiWnZDZHBAdOgxoMc03BBL3rElcSRxHbhhHnGb2MRt4im57flEfnGI/OIr4beAyC8ukV8Cy26IBQ6IBz0+9ASGGxLKO5EksSSJAzcsJG6TiLhNUiW3vYjILzGRXzIl/BYT+SUh8ktu2Q0JwQFJoSeDntxwQwp5p5SkkqR24IYlxG1SErdJo+S2lxL5pSLyS6uE3zIiv9REfuksuyEFOCAN9LTQ0xluSC/vDJKMkkwO3LCcuE0G4jaZldz2CiK/jER+WZTwW0nkl4nIL6tlN6QHB2SGngV6VsMN2eSdXZJDktOBG1YRt8lO3CaXktteTeSXg8gvtxJ+a4j8chL55bHshmzggFzQc0PPY7ghr7zzSfJLCjhww1riNvmI2xRUctvriPzyE/kVUsJvPZFfASK/wpbdkBccUBB6IeiFDTcUkXdRiYekmAM3bCBuU5S4TXElt72RyM+DyK+EEn6biPyKEfmVtOyGIuCA4tBLQC9puKHUv2+SeErKOHDDZuI2pYnblFVy21uI/DyJ/Mop4beVyK8MkV95y24oBQ4oC70c9PKGGyrI20viLfFx4IZtxG28iNv4Krnt7UR+3kR+fkr47SDy8yHy87fshgrgAF/oftD9DTcEyDtQEiQJduCGncRtAonbhCi57V1EfkFEfqFK+O0m8gsm8qto2Q0B4IAQ6KHQKxpuqCTvypIqkqoO3LCHuE1l4jbVlNz2XiK/KkR+1ZXw20fkV5XIr4ZlN1QCB1SDXh16DcMNNeVdS1JbUseBG/YTt6lF3Kaukts+QORXm8ivnhJ+B4n86hD51bfshprggLrQ60Gvb7ihgbwbShpJGjtwwyHiNg2J2zRRctuHifwaEfk1VcLvCJFfYyK/Zpbd0AAc0AR6U+jNDDc0l3cLSUtJKwduOErcpgVxm9ZKbvsYkV9LIr82SvgdJ/JrReTX1rIbmoMDWkNvA72t4YZ28m4v6SDp6MANJ4jbtCdu00nJbZ8k8utA5NdZCb9TRH4dify6WHZDO3BAJ+idoXcx3NBV3t0k3SU9HLjhNHGbbsRteiq57TNEft2J/Hop4XeWyK8HkV9vy27oCg7oCb0X9N6GG/rIu6+kn6S/AzecI27Tl7jNACW3fZ7Irx+R30Al/C4Q+fUn8htk2Q19wAEDoA+EPshww2B5D5EMlQxz4IaLxG2GELcZruS2LxH5DSXyG6GE32Uiv2FEfiMtu2EwOGA49BHQRxpuGCXv0ZIxkrEO3HCFuM1o4jbjlNz2VSK/MUR+45Xwu0bkN5bIb4JlN4wCB4yDPh76BMMNE+U9STJZMsWBG64Tt5lE3Gaqktu+QeQ3mchvmhJ+N4n8phD5TbfshonggKnQp0GfbrhhhrxnSmZJZjtwwy3iNjOJ28xRctu3ifxmEfnNVcLvDpHfbCK/eZbdMAMcMAf6XOjzDDfMl/cCyULJIgduuEvcZgFxm8VKbvsekd9CIr8lSvjdJ/JbROS31LIb5oMDFkNfAn2p4YZl8l4uWSFZ6cAND4jbLCdus0rJbT8k8ltB5LdaCb9HRH4rifzWWHbDMnDAKuiroa8x3LBW3usk6yUbHLjhMXGbdcRtNiq57SdEfuuJ/DYp4feUyG8Dkd9my25YCw7YCH0T9M2GG7bIe6tkm2S7Azc8I26zlbjNDiW3/ZzIbxuR304l/F4Q+W0n8ttl2Q1bwAE7oO+Evstww25575Hslexz4IaXxG32ELfZr+S2XxH57SXyO6CE32siv31Efgctu2E3OGA/9APQDxpuOCTvw5IjkqMO3PCGuM1h4jbHlNz2WyK/I0R+x5Xwe0fkd5TI74RlNxwCBxyDfhz6CcMNJ+V9SnJacsaBG94TtzlF3Oasktv+QOR3msjvnBJ+H4n8zhD5nbfshpPggLPQz0E/b7jhgrwvSi5JLjtwwyfiNheJ21xRctufifwuEfldVcLvC5HfZSK/a5bdcAEccAX6VejXDDdcl/cNyU3JLQdu+Erc5gZxm9tKbvsbkd9NIr87Svh9J/K7ReR317IbroMDbkO/A/2u4YZ78r4veSB56MANP4jb3Cdu80jJbf8k8ntA5PdYCb9fRH4PifyeWHbDPXDAI+iPoT8x3PBU3s8kzyUvHLjhN3GbZ8RtXiq57T9Efs+J/F4p4feXyO8Fkd9ry254Cg54Cf0V9NeGG97I+63kneS9AzeEiUT8nz1xmw9Kbjsskd87Ir+PSviFI/J7T+T3ybIb3oADPkD/CP2T4YbP8v4i+Sr55sAN4YnbfCFu813JbUcg8vtK5PdDCb+IRH7fiPx+WnbDZ3DAd+g/oP803PBL3r///Uzy14EbIhG3+U3cJkxJHbcdmcjvD5FfWCX8ohD5/SXyC1fSrht+gQP+3fr/eljo4Ur+1w3h5R1BElESqaR9N0QlbhOhJG+byEpuOxqRX0QivyhK+EUn8otE5BfVshvCgwMiQ48CParhhmjyji6JIYnpwA0xiNtEJ24TS8ltxyTyi0HkF1sJv1hEfjGJ/OJYdkM0cEAs6LGhxzHcEFfe8STxJQkcuCE2cZt4xG0SKrntOER+8Yn8EinhF5fILwGRX2LLbogLDkgIPRH0xIYbksg7qSSZJLkDN8QjbpOUuE0KJbcdn8gvGZFfSiX8EhD5JSfyS2XZDUnAASmgp4SeynBDanmnkaSVpHPghoTEbdIQt0mv5LYTEfmlJfLLoIRfYiK/dER+GS27ITU4ID30DNAzGm7IJO/MkiySrA7ckIS4TWbiNtmU3HZSIr8sRH7ZlfBLRuSXlcgvh2U3ZAIHZIOeHXoOww055Z1LkluSx4EbkhO3yUXcJq+S205B5JebyC+fEn4pifzyEPnlt+yGnOCAvNDzQc9vuKGAvAtKCkkKO3BDKuI2BYnbFFFy26mJ/AoR+RVVwi8NkV9hIj8Py24oAA4oAr0odA/DDcXkXVxSQlLSgRvSErcpTtymlJLbTkfkV4LIr7QSfumJ/EoS+XladkMxcEAp6KWhexpuKCPvspJykvIO3JCBuE1Z4jYVlNx2RiK/ckR+Xkr4ZSLyK0/k523ZDWXAARWge0H3NtzgI29fiZ/E34EbMhO38SVuE6DktrMQ+fkR+QUq4ZeVyM+fyC/Isht8wAEB0AOhBxluCJZ3iCRUUtGBG7IRtwkhblNJyW1nJ/ILJfKrrIRfDiK/ikR+VSy7IRgcUAl6ZehVDDdUlXc1SXVJDQduyEncphpxm5pKbjsXkV91Ir9aSvjlJvKrQeRX27IbqoIDakKvBb224YY68q4rqSep78ANeYjb1CVu00DJbecl8qtH5NdQCb98RH71ifwaWXZDHXBAA+gNoTcy3NBY3k0kTSXNHLghP3GbJsRtmiu57QJEfk2J/Foo4VeQyK8ZkV9Ly25oDA5oDr0F9JaGG1rJu7WkjaStAzcUIm7TmrhNOyW3XZjIrw2RX3sl/IoQ+bUl8utg2Q2twAHtoLeH3sFwQ0d5d5J0lnRx4IaixG06EbfpquS2PYj8OhP5dVPCrxiRXxciv+6W3dARHNAVejfo3Q039JB3T0kvSW8HbihO3KYncZs+Sm67BJFfLyK/vkr4lSTy603k18+yG3qAA/pA7wu9n+GG/vIeIBkoGeTADaWI2wwgbjNYyW2XJvIbSOQ3RAk/TyK/QUR+Qy27oT84YDD0IdCHGm4YJu/hkhGSkQ7cUIa4zXDiNqOU3HZZIr8RRH6jlfArR+Q3kshvjGU3DAMHjII+GvoYww1j5T1OMl4ywYEbyhO3GUfcZqKS265A5DeeyG+SEn5eRH4TiPwmW3bDWHDAROiToE823DBF3lMl0yTTHbjBm7jNVOI2M5Tctg+R3zQiv5lK+PkS+U0n8ptl2Q1TwAEzoM+EPstww2x5z5HMlcxz4AY/4jZziNvMV3Lb/kR+c4n8FijhF0DkN4/Ib6FlN8wGB8yHvgD6QsMNi+S9WLJEstSBGwKJ2ywmbrNMyW0HEfktIfJbroRfMJHfUiK/FZbdsAgcsAz6cugrDDeslPcqyWrJGgduCCFus4q4zVoltx1K5LeayG+dEn4VifzWEPmtt+yGleCAtdDXQV9vuGGDvDdKNkk2O3BDJeI2G4nbbFFy25WJ/DYR+W1Vwq8Kkd9mIr9tlt2wARywBfpW6NsMN2yX9w7JTskuB26oStxmB3Gb3UpuuxqR304ivz1K+FUn8ttF5LfXshu2gwN2Q98Dfa/hhn3y3i85IDnowA01iNvsJ25zSMlt1yTyO0Dkd1gJv1pEfgeJ/I5YdsM+cMAh6IehHzHccFTexyTHJSccuKE2cZtjxG1OKrntOkR+x4n8TinhV5fI7wSR32nLbjgKDjgJ/RT004Ybzsj7rOSc5LwDN9QjbnOWuM0FJbddn8jvHJHfRSX8GhD5nSfyu2TZDWfAARegX4R+yXDDZXlfkVyVXHPghobEba4Qt7mu5LYbEfldJfK7oYRfYyK/a0R+Ny274TI44Dr0G9BvGm64Je/bkjuSuw7c0IS4zW3iNveU3HZTIr87RH73lfBrRuR3l8jvgWU33AIH3IN+H/oDww0P5f1I8ljyxIEbmhO3eUTc5qmS225B5PeYyO+ZEn4tifyeEPk9t+yGh+CAp9CfQX9uuOGFvF9KXkleO3BDK+I2L4nbvFFy262J/F4R+b1Vwq8Nkd9rIr93lt3wAhzwBvpb6O8MN7yX9wfJR8knB25oS9zmA3Gbz0puux2R30civy9K+LUn8vtE5PfVshvegwM+Q/8C/avhhm/y/i75IfnpwA0diNt8J27zS8ltdyTy+0Hk91sJv05Efj+J/P5YdsM3cMAv6L+h/zHc8FfeYUqFDRNWEq6UfTd0Jm7z77tZ24QvpeO2uxD5hSXyi6CEX1civ3BEfhFL2XXDX3DAv1v/X48APWKp/7ohkrwjS6JIojpwQzfiNpGJ20RTctvdifyiEPlFV8KvB5FfVCK/GJbdEAkcEA16dOgxDDfElHcsSWxJHAdu6EncJhZxm7hKbrsXkV9sIr94Svj1JvKLQ+QX37IbYoID4kKPBz2+4YYE8k4oSSRJ7MANfYjbJCRuk0TJbfcl8ktE5JdUCb9+RH6JifySWXZDAnBAEuhJoScz3JBc3ikkKSWpHLihP3GbFMRtUiu57QFEfimJ/NIo4TeQyC8VkV9ay25IDg5IDT0N9LSGG9LJO70kgySjAzcMIm6TnrhNJiW3PZjILwORX2Yl/IYQ+WUk8sti2Q3pwAGZoGeGnsVwQ1Z5Z5Nkl+Rw4IahxG2yEbfJqeS2hxH5ZSfyy6WE33AivxxEfrktuyErOCAn9FzQcxtuyCPvvJJ8kvwO3DCCuE1e4jYFlNz2SCK/fER+BZXwG0Xkl5/Ir5BlN+QBBxSAXhB6IcMNheVdRFJU4uHADaOJ2xQhblNMyW2PIfIrSuRXXAm/sUR+HkR+JSy7oTA4oBj04tBLGG4oKe9S/75L4unADeOI25QiblNGyW2PJ/IrTeRXVgm/CUR+nkR+5Sy7oSQ4oAz0stDLGW4oL+8KEi+JtwM3TCRuU4G4jY+S255E5OdF5OerhN9kIj9vIj8/y24oDw7wge4L3c9wg7+8AySBkiAHbphC3CaAuE2wktueSuQXSOQXooTfNCK/ICK/UMtu8AcHBEMPgR5quKGivCtJKkuqOHDDdOI2lYjbVFVy2zOI/CoT+VVTwm8mkV8VIr/qlt1QERxQFXo16NUNN9SQd01JLUltB26YRdymJnGbOkpuezaRXy0iv7pK+M0h8qtN5FfPshtqgAPqQK8LvZ7hhvrybiBpKGnkwA1zids0IG7TWMltzyPya0jk10QJv/lEfo2I/JpadkN9cEBj6E2gNzXc0EzezSUtJC0duGEBcZvmxG1aKbnthUR+LYj8Wivht4jIryWRXxvLbmgGDmgFvTX0NoYb2sq7naS9pIMDNywmbtOOuE1HJbe9hMivPZFfJyX8lhL5dSDy62zZDW3BAR2hd4Le2XBDF3l3lXSTdHfghmXEbboSt+mh5LaXE/l1I/LrqYTfCiK/7kR+vSy7oQs4oAf0ntB7GW7oLe8+kr6Sfg7csJK4TR/iNv2V3PYqIr++RH4DlPBbTeTXj8hvoGU39AYH9Ic+APpAww2D5D1YMkQy1IEb1hC3GUzcZpiS215L5DeEyG+4En7riPyGEvmNsOyGQeCAYdCHQx9huGGkvEdJRkvGOHDDeuI2o4jbjFVy2xuI/EYT+Y1Twm8jkd8YIr/xlt0wEhwwFvo46OMNN0yQ90TJJMlkB27YRNxmInGbKUpuezOR3yQiv6lK+G0h8ptM5DfNshsmgAOmQJ8KfZrhhunyniGZKZnlwA1bidvMIG4zW8ltbyPym0nkN0cJv+1EfrOI/OZadsN0cMBs6HOgzzXcME/e8yULJAsduGEHcZv5xG0WKbntnUR+C4j8Fivht4vIbyGR3xLLbpgHDlgEfTH0JYYblsp7mWS5ZIUDN+wmbrOMuM1KJbe9h8hvOZHfKiX89hL5rSDyW23ZDUvBASuhr4K+2nDDGnmvlayTrHfghn3EbdYSt9mg5Lb3E/mtI/LbqITfASK/9UR+myy7YQ04YAP0jdA3GW7YLO8tkq2SbQ7ccJC4zRbiNtuV3PYhIr+tRH47lPA7TOS3jchvp2U3bAYHbIe+A/pOww275L1bskey14EbjhC32U3cZp+S2z5K5LeHyG+/En7HiPz2EvkdsOyGXeCAfdD3Qz9guOGgvA9JDkuOOHDDceI2h4jbHFVy2yeI/A4T+R1Twu8kkd8RIr/jlt1wEBxwFPox6McNN5yQ90nJKclpB244RdzmJHGbM0pu+zSR3ykiv7NK+J0h8jtN5HfOshtOgAPOQD8L/ZzhhvPyviC5KLnkwA1nidtcIG5zWcltnyPyu0jkd0UJv/NEfpeI/K5adsN5cMBl6FegXzXccE3e1yU3JDcduOECcZvrxG1uKbnti0R+N4j8bivhd4nI7yaR3x3LbrgGDrgF/Tb0O4Yb7sr7nuS+5IEDN1wmbnOPuM1DJbd9hcjvPpHfIyX8rhL5PSDye2zZDXfBAQ+hP4L+2HDDE3k/lTyTPHfghmvEbZ4St3mh5LavE/k9I/J7qYTfDSK/50R+ryy74Qk44AX0l9BfGW54Le83kreSdw7ccJO4zRviNu+V3PYtIr+3RH4flPC7TeT3jsjvo2U3vAYHvIf+AfpHww2f5P1Z8kXy1YEb7hC3+Uzc5puS275L5PeFyO+7En73iPy+Evn9sOyGT+CAb9C/Q/9huOGnvH9Jfv/7uQM33Cdu84u4zV8lt/2AyO83kV+Y0jr4PSTy+0PkF7a0XTf8BAf8hf5vt//1sKX/64Zw8g4viSCJWNq+Gx4RtwlfmrdNJCW3/ZjILwKRX2Ql/J4Q+UUk8oti2Q3hwAGRoEeGHsVwQ1R5R5NEl8Rw4IanxG2iEbeJqeS2nxH5RSfyi6WE33MivxhEfrEtuyEqOCAm9FjQYxtuiCPvuJJ4kvgO3PCCuE1c4jYJlNz2SyK/eER+CZXwe0XkF5/IL5FlN8QBBySAnhB6IsMNieWdRJJUksyBG14Tt0lC3Ca5ktt+Q+SXlMgvhRJ+b4n8khH5pbTshsTggOTQU0BPabghlbxTS9JI0jpwwzviNqmJ26RTctvvifzSEPmlV8LvA5FfWiK/DJbdkAockA56eugZDDdklHcmSWZJFgdu+EjcJhNxm6xKbvsTkV9mIr9sSvh9JvLLQuSX3bIbMoIDskLPBj274YYc8s4pySXJ7cANX4jb5CRuk0fJbX8l8stF5JdXCb9vRH65ifzyWXZDDnBAHuh5oecz3JBf3gUkBSWFHLjhO3GbAsRtCiu57R9EfgWJ/Ioo4feTyK8QkV9Ry27IDw4oDL0I9KKGGzzkXUxSXFLCgRt+EbcpRtympJLb/k3kV5zIr5QSfn+I/EoQ+ZW27AYPcEBJ6KWglzbc4CnvMpKyknIO3PCXuE0Z4jblldx2mMi831WWyK+CEn5hifzKEfl5WXaDJzigPPQK0L0MN3jL20fiK/Fz4IZwxG18iNv4K7nt8ER+vkR+AUr4RSDy8yPyC7TsBm9wgD/0AOiBhhuC5B0sCZGEOnBDROI2wcRtKiq57UhEfiFEfpWU8ItM5BdK5FfZshuCwAEVoVeCXtlwQxV5V5VUk1R34IYoxG2qErepoeS2oxL5VSPyq6mEXzQiv+pEfrUsu6EKOKAG9JrQaxluqC3vOpK6knoO3BCduE0d4jb1ldx2DCK/ukR+DZTwi0nkV4/Ir6FlN9QGB9SH3gB6Q8MNjeTdWNJE0tSBG2IRt2lM3KaZktuOTeTXhMivuRJ+cYj8mhL5tbDshkbggGbQm0NvYbihpbxbSVpL2jhwQ1ziNq2I27RVctvxiPxaE/m1U8IvPpFfGyK/9pbd0BIc0BZ6O+jtDTd0kHdHSSdJZwduSEDcpiNxmy5KbjshkV8nIr+uSvglIvLrTOTXzbIbOoADukDvCr2b4Ybu8u4h6Snp5cANiYnb9CBu01vJbSch8utJ5NdHCb+kRH69iPz6WnZDd3BAb+h9oPc13NBP3v0lAyQDHbghGXGb/sRtBim57eREfgOI/AYr4ZeCyG8gkd8Qy27oBw4YBH0w9CGGG4bKe5hkuGSEAzekJG4zjLjNSCW3nYrIbziR3ygl/FIT+Y0g8htt2Q1DwQEjoY+CPtpwwxh5j5WMk4x34IY0xG3GEreZoOS20xL5jSPym6iEXzoiv/FEfpMsu2EMOGAC9InQJxlumCzvKZKpkmkO3JCeuM0U4jbTldx2BiK/qUR+M5Twy0jkN43Ib6ZlN0wGB0yHPgP6TMMNs+Q9WzJHMteBGzIRt5lN3GaektvOTOQ3h8hvvhJ+WYj85hL5LbDshlnggHnQ50NfYLhhobwXSRZLljhwQ1biNouI2yxVctvZiPwWE/ktU8IvO5HfEiK/5ZbdsBAcsBT6MujLDTeskPdKySrJagduyEHcZiVxmzVKbjsnkd8qIr+1SvjlIvJbTeS3zrIbVoAD1kBfC32d4Yb18t4g2SjZ5MANuYnbbCBus1nJbech8ttI5LdFCb+8RH6biPy2WnbDenDAZuhboG813LBN3tslOyQ7HbghH3Gb7cRtdim57fxEfjuI/HYr4VeAyG8nkd8ey27YBg7YBX039D2GG/bKe59kv+SAAzcUJG6zj7jNQSW3XYjIbz+R3yEl/AoT+R0g8jts2Q17wQEHoR+CfthwwxF5H5Uckxx34IYixG2OErc5oeS2ixL5HSPyO6mEnweR33Eiv1OW3XAEHHAC+knopww3nJb3GclZyTkHbihG3OYMcZvzSm67OJHfWSK/C0r4lSDyO0fkd9GyG06DA85DvwD9ouGGS/K+LLkiuerADSWJ21wmbnNNyW2XIvK7QuR3XQm/0kR+V4n8blh2wyVwwDXo16HfMNxwU963JLcldxy4wZO4zS3iNneV3HYZIr/bRH73lPArS+R3h8jvvmU33AQH3IV+D/p9ww0P5P1Q8kjy2IEbyhG3eUjc5omS2y5P5PeIyO+pEn4ViPweE/k9s+yGB+CAJ9CfQn9muOG5vF9IXkpeOXCDF3GbF8RtXiu5bW8iv5dEfm+U8PMh8ntF5PfWshuegwNeQ38D/a3hhnfyfi/5IPnowA2+xG3eE7f5pOS2/Yj8PhD5fVbCz5/I7yOR3xfLbngHDvgE/TP0L4Ybvsr7m+S75IcDNwQQt/lG3OanktsOJPL7TuT3Swm/ICK/H0R+vy274Ss44Cf0X9B/G274I++/kjCeYcOE9bTvhmDiNn+J24Tz1HHbIUR+YTx5/MIr4RdK5BeWyC+Cp103/AEH/Lv1//Xw0CN4/tcNEeUdSRJZEsWBGyoSt4lE3CaqktuuROQXmcgvmhJ+lYn8ohD5RbfshojggKjQo0GPbrghhrxjSmJJYjtwQxXiNjGJ28RRcttVifxiEfnFVcKvGpFfbCK/eJbdEAMcEAd6XOjxDDfEl3cCSUJJIgduqE7cJgFxm8RKbrsGkV9CIr8kSvjVJPJLROSX1LIb4oMDEkNPAj2p4YZk8k4uSSFJ6cANtYjbJCduk0rJbdcm8ktB5JdaCb86RH4pifzSWHZDMnBAKuipoacx3JBW3ukk6SUZHLihLnGbdMRtMiq57XpEfumJ/DIp4VefyC8DkV9my25ICw7ICD0T9MyGG7LIO6skmyS7Azc0IG6TlbhNDiW33ZDILxuRX04l/BoR+WUn8stl2Q1ZwAE5oOeEnstwQ25555HkleRz4IbGxG3yELfJr+S2mxD55SXyK6CEX1Miv3xEfgUtuyE3OCA/9ALQCxpuKCTvwpIikqIO3NCMuE1h4jYeSm67OZFfESK/Ykr4tSDyK0rkV9yyGwqBAzygF4Ne3HBDCXmXlJT6920O3NCSuE1J4jaeSm67FZFfKSK/Mkr4tSbyK03kV9ayG0qAAzyhl4Fe1nBDOXmXl1SQeDlwQxviNuWJ23grue22RH4ViPx8lPBrR+TnReTna9kN5cAB3tB9oPsabvCTt78kQBLowA3tidv4E7cJUnLbHYj8Aoj8gpXw60jkF0jkF2LZDX7ggCDowdBDDDeEyruipJKksgM3dCJuU5G4TRUlt92ZyK8SkV9VJfy6EPlVJvKrZtkNoeCAKtCrQq9muKG6vGtIakpqOXBDV+I2NYjb1FZy292I/GoS+dVRwq87kV8tIr+6lt1QHRxQG3od6HUNN9STd31JA0lDB27oQdymPnGbRkpuuyeRXwMiv8ZK+PUi8mtI5NfEshvqgQMaQW8MvYnhhqbybiZpLmnhwA29ids0I27TUslt9yHya07k10oJv75Efi2I/FpbdkNTcEBL6K2gtzbc0EbebSXtJO0duKEfcZu2xG06KLnt/kR+7Yj8OirhN4DIrz2RXyfLbmgDDugAvSP0ToYbOsu7i6SrpJsDNwwkbtOFuE13Jbc9iMivK5FfDyX8BhP5dSPy62nZDZ3BAd2h94De03BDL3n3lvSR9HXghiHEbXoTt+mn5LaHEvn1IfLrr4TfMCK/vkR+Ayy7oRc4oB/0/tAHGG4YKO9BksGSIQ7cMJy4zSDiNkOV3PYIIr/BRH7DlPAbSeQ3hMhvuGU3DAQHDIU+DPpwww0j5D1SMkoy2oEbRhG3GUncZoyS2x5N5DeKyG+sEn5jiPxGE/mNs+yGEeCAMdDHQh9nuGG8vCdIJkomOXDDWOI2E4jbTFZy2+OI/CYS+U1Rwm88kd8kIr+plt0wHhwwGfoU6FMNN0yT93TJDMlMB26YQNxmOnGbWUpueyKR3wwiv9lK+E0i8ptJ5DfHshumgQNmQZ8NfY7hhrnynieZL1ngwA2TidvMI26zUMltTyHym0/kt0gJv6lEfguI/BZbdsNccMBC6IugLzbcsETeSyXLJMsduGEacZulxG1WKLnt6UR+y4j8VirhN4PIbzmR3yrLblgCDlgBfSX0VYYbVst7jWStZJ0DN8wkbrOGuM16Jbc9i8hvLZHfBiX8ZhP5rSPy22jZDavBAeuhb4C+0XDDJnlvlmyRbHXghjnEbTYTt9mm5LbnEvltIfLbroTfPCK/rUR+Oyy7YRM4YBv07dB3GG7YKe9dkt2SPQ7cMJ+4zS7iNnuV3PYCIr/dRH77lPBbSOS3h8hvv2U37AQH7IW+D/p+ww0H5H1Qckhy2IEbFhG3OUjc5oiS215M5HeIyO+oEn5LiPwOE/kds+yGA+CAI9CPQj9muOG4vE9ITkpOOXDDUuI2J4jbnFZy28uI/E4S+Z1Rwm85kd8pIr+zlt1wHBxwGvoZ6GcNN5yT93nJBclFB25YQdzmPHGbS0pueyWR3wUiv8tK+K0i8rtI5HfFshvOgQMuQb8M/Yrhhqvyvia5LrnhwA2ridtcI25zU8ltryHyu07kd0sJv7VEfjeI/G5bdsNVcMBN6Leg3zbccEfedyX3JPcduGEdcZu7xG0eKLnt9UR+94j8Hirht4HI7z6R3yPLbrgDDngA/SH0R4YbHsv7ieSp5JkDN2wkbvOEuM1zJbe9icjvKZHfCyX8NhP5PSPye2nZDY/BAc+hv4D+0nDDK3m/lryRvHXghi3EbV4Tt3mn5La3Evm9IfJ7r4TfNiK/t0R+Hyy74RU44B3099A/GG74KO9Pks+SLw7csJ24zSfiNl+V3PYOIr/PRH7flPDbSeT3hcjvu2U3fAQHfIX+Dfp3ww0/5P1T8kvy24EbdhG3+Unc5o+S295N5PeLyO+vEn57iPx+E/mFKWPXDT/AAX+g/4X+7xvQDWHlHU4SXhKhjH037CVuE64Mb5uIZXTc9j4iv/BEfpGU8NtP5BeByC+yZTeELfP/DogIPRL0yIYbosg7qiSaJLoDNxwgbhOVuE0MJbd9kMgvGpFfTCX8DhH5RSfyi2XZDVHAATGgx4Qey3BDbHnHkcSVxHPghsPEbeIQt4mv5LaPEPnFJfJLoITfUSK/eER+CS27ITY4ID70BNATGm5IJO/EkiSSpA7ccIy4TWLiNsmU3PZxIr8kRH7JlfA7QeSXlMgvhWU3JAIHJIOeHHoKww0p5Z1KklqSxoEbThK3SUXcJq2S2z5F5JeayC+dEn6nifzSEPmlt+yGlOCAtNDTQU9vuCGDvDNKMkkyO3DDGeI2GYnbZFFy22eJ/DIR+WVVwu8ckV9mIr9slt2QARyQBXpW6NkMN2SXdw5JTkkuB244T9wmB3Gb3Epu+wKRX04ivzxK+F0k8stF5JfXshuygwNyQ88DPa/hhnzyzi8pICnowA2XiNvkJ25TSMltXybyK0DkV1gJvytEfgWJ/IpYdkM+cEAh6IWhFzHcUFTeHpJikuIO3HCVuI0HcZsSSm77GpFfMSK/kkr4XSfyK07kV8qyG4qCA0pALwm9lOGG0vL2lJSRlHXghhvEbTyJ25RTcts3ifzKEPmVV8LvFpFfWSK/CpbdUBocUA56eegVDDd4ydtb4iPxdeCG28RtvInb+Cm57TtEfj5Efv5K+N0l8vMl8guw7AYvcIAfdH/oAYYbAuUdJAmWhDhwwz3iNkHEbUKV3PZ9Ir9gIr+KSvg9IPILIfKrZNkNgeCAUOgVoVcy3FBZ3lUkVSXVHLjhIXGbKsRtqiu57UdEflWJ/Goo4feYyK8akV9Ny26oDA6oDr0G9JqGG2rJu7akjqSuAzc8IW5Tm7hNPSW3/ZTIrw6RX30l/J4R+dUl8mtg2Q21wAH1oNeH3sBwQ0N5N5I0ljRx4IbnxG0aEbdpquS2XxD5NSbya6aE30sivyZEfs0tu6EhOKAp9GbQmxtuaCHvlpJWktYO3PCKuE1L4jZtlNz2ayK/VkR+bZXwe0Pk15rIr51lN7QAB7SB3hZ6O8MN7eXdQdJR0smBG94St+lA3Kazktt+R+TXkcivixJ+74n8OhH5dbXshvbggM7Qu0Dvarihm7y7S3pIejpwwwfiNt2J2/RSctsfifx6EPn1VsLvE5FfTyK/Ppbd0A0c0At6b+h9DDf0lXc/SX/JAAdu+Ezcph9xm4FKbvsLkV9/Ir9BSvh9JfIbQOQ32LIb+oIDBkIfBH2w4YYh8h4qGSYZ7sAN34jbDCVuM0LJbX8n8htG5DdSCb8fRH7DifxGWXbDEHDACOgjoY8y3DBa3mMkYyXjHLjhJ3GbMcRtxiu57V9EfmOJ/CYo4febyG8ckd9Ey24YDQ4YD30C9ImGGybJe7JkimSqAzf8IW4zmbjNNCW3/ZfIbwqR33Ql/MJE4f2uqUR+Myy7YRI4YBr06dBnGG6YKe9ZktmSOQ7cEJa4zSziNnOV3HY4Ir/ZRH7zlPALT+Q3h8hvvmU3zAQHzIU+D/p8ww0L5L1Qskiy2IEbIhC3WUjcZomS245I5LeIyG+pEn6RiPwWE/kts+yGBeCAJdCXQl9muGG5vFdIVkpWOXBDZOI2K4jbrFZy21GI/FYS+a1Rwi8qkd8qIr+1lt2wHBywGvoa6GsNN6yT93rJBslGB26IRtxmPXGbTUpuOzqR3wYiv81K+MUg8ttI5LfFshvWgQM2Qd8MfYvhhq3y3ibZLtnhwA0xidtsI26zU8ltxyLy207kt0sJv9hEfjuI/HZbdsNWcMBO6Lug7zbcsEfeeyX7JPsduCEOcZu9xG0OKLntuER++4j8DirhF4/Ibz+R3yHLbtgDDjgA/SD0Q4YbDsv7iOSo5JgDN8QnbnOEuM1xJbedgMjvKJHfCSX8EhL5HSPyO2nZDYfBAcehn4B+0nDDKXmflpyRnHXghkTEbU4Ttzmn5LYTE/mdIfI7r4RfEiK/s0R+Fyy74RQ44Bz089AvGG64KO9LksuSKw7ckJS4zSXiNleV3HYyIr/LRH7XlPBLTuR3hcjvumU3XAQHXIV+Dfp1ww035H1Tckty24EbUhC3uUnc5o6S205J5HeLyO+uEn6piPxuE/nds+yGG+CAO9DvQr9nuOG+vB9IHkoeOXBDauI2D4jbPFZy22mI/B4S+T1Rwi8tkd8jIr+nlt1wHxzwGPoT6E8NNzyT93PJC8lLB25IR9zmOXGbV0puOz2R3wsiv9dK+GUg8ntJ5PfGshuegQNeQX8N/Y3hhrfyfid5L/ngwA0Zidu8I27zUcltZyLye0/k90kJv8xEfh+I/D5bdsNbcMBH6J+gfzbc8EXeXyXfJN8duCELcZuvxG1+KLntrER+34j8firhl43I7zuR3y/LbvgCDvgB/Sf0X4Ybfv97S/5KwpS174bsxG3+ELcJW1bHbecg8vtL5BdOCb+cRH5hyvL4hS9r1w2/wQH/bv1/PRz08GX/64YI8o4oiSSJ7MANuYjbRCRuE0XJbecm8otE5BdVCb88RH6RifyiWXZDBHBAFOhRoUcz3BBd3jEkMSWxHLghL3GbGMRtYiu57XxEfjGJ/OIo4ZefyC8WkV9cy26IDg6IDT0O9LiGG+LJO74kgSShAzcUIG4Tn7hNIiW3XZDILwGRX2Il/AoR+SUk8kti2Q3xwAGJoCeGnsRwQ1J5J5Mkl6Rw4IbCxG2SEbdJqeS2ixD5JSfyS6WEX1EivxREfqktuyEpOCAl9FTQUxtuSCPvtJJ0kvQO3OBB3CYtcZsMSm67GJFfOiK/jEr4FSfyS0/kl8myG9KAAzJAzwg9k+GGzPLOIskqyebADSWI22QhbpNdyW2XJPLLSuSXQwm/UkR+2Yj8clp2Q2ZwQHboOaDnNNyQS965JXkkeR24oTRxm9zEbfIpuW1PIr88RH75lfArQ+SXl8ivgGU35AIH5IOeH3oBww0F5V1IUlhSxIEbyhK3KUTcpqiS2y5H5FeYyM9DCb/yRH5FiPyKWXZDQXBAUege0IsZbigu7xKSkpJSDtxQgbhNCeI2pZXctheRX0kiP08l/LyJ/EoR+ZWx7Ibi4IDS0D2hlzHcUFbe5STlJRUcuMGHuE054jZeSm7bl8ivPJGftxJ+fkR+FYj8fCy7oSw4wAu6N3Qfww2+8vaT+EsCHLjBn7iNH3GbQCW3HUDk50/kF6SEXyCRXwCRX7BlN/iCAwKhB0EPNtwQIu9QSUVJJQduCCJuE0rcprKS2w4m8qtI5FdFCb8QIr9KRH5VLbshBBxQGXoV6FUNN1STd3VJDUlNB24IJW5TnbhNLSW3XZHIrwaRX20l/CoR+dUk8qtj2Q3VwAG1oNeGXsdwQ11515PUlzRw4IbKxG3qEbdpqOS2qxD51Sfya6SEX1UivwZEfo0tu6EuOKAh9EbQGxtuaCLvppJmkuYO3FCNuE1T4jYtlNx2dSK/ZkR+LZXwq0Hk15zIr5VlNzQBB7SA3hJ6K8MNreXdRtJW0s6BG2oSt2lD3Ka9ktuuReTXlsivgxJ+tYn82hH5dbTshtbggPbQO0DvaLihk7w7S7pIujpwQx3iNp2J23RTctt1ify6EPl1V8KvHpFfVyK/Hpbd0Akc0A16d+g9DDf0lHcvSW9JHwduqE/cphdxm75KbrsBkV9vIr9+Svg1JPLrQ+TX37IbeoID+kLvB72/4YYB8h4oGSQZ7MANjYjbDCRuM0TJbTcm8htE5DdUCb8mRH6DifyGWXbDAHDAEOhDoQ8z3DBc3iMkIyWjHLihKXGbEcRtRiu57WZEfiOJ/MYo4decyG8Ukd9Yy24YDg4YDX0M9LGGG8bJe7xkgmSiAze0IG4znrjNJCW33ZLIbwKR32Ql/FoR+U0k8pti2Q3jwAGToE+GPsVww1R5T5NMl8xw4IbWxG2mEbeZqeS22xD5TSfym6WEX1sivxlEfrMtu2EqOGAm9FnQZxtumCPvuZJ5kvkO3NCOuM1c4jYLlNx2eyK/eUR+C5Xw60DkN5/Ib5FlN8wBByyAvhD6IsMNi+W9RLJUssyBGzoSt1lC3Ga5ktvuROS3lMhvhRJ+nYn8lhH5rbTshsXggOXQV0BfabhhlbxXS9ZI1jpwQxfiNquJ26xTcttdifzWEPmtV8KvG5HfWiK/DZbdsAocsA76eugbDDdslPcmyWbJFgdu6E7cZhNxm61KbrsHkd9mIr9tSvj1JPLbQuS33bIbNoIDtkLfBn274YYd8t4p2SXZ7cANvYjb7CRus0fJbfcm8ttF5LdXCb8+RH67ifz2WXbDDnDAHuh7oe8z3LBf3gckByWHHLihL3GbA8RtDiu57X5EfgeJ/I4o4defyO8Qkd9Ry27YDw44DP0I9KOGG47J+7jkhOSkAzcMIG5znLjNKSW3PZDI7wSR32kl/AYR+Z0k8jtj2Q3HwAGnoJ+GfsZww1l5n5Ocl1xw4IbBxG3OEbe5qOS2hxD5nSfyu6SE31AivwtEfpctu+EsOOAi9EvQLxtuuCLvq5JrkusO3DCMuM1V4jY3lNz2cCK/a0R+N5XwG0Hkd53I75ZlN1wBB9yAfhP6LcMNt+V9R3JXcs+BG0YSt7lD3Oa+ktseReR3l8jvgRJ+o4n87hH5PbTshtvggPvQH0B/aLjhkbwfS55InjpwwxjiNo+J2zxTcttjifyeEPk9V8JvHJHfUyK/F5bd8Agc8Az6c+gvDDe8lPcryWvJGwduGE/c5hVxm7dKbnsCkd9rIr93SvhNJPJ7Q+T33rIbXoID3kJ/B/294YYP8v4o+ST57MANk4jbfCRu80XJbU8m8vtE5PdVCb8pRH6fify+WXbDB3DAF+hfoX8z3PBd3j8kPyW/HLhhKnGbH8Rtfiu57WlEfj+J/P4o4TedyO8Xkd9fy274Dg74Df0P9L+GG8KUCxsmrCScJHw5+26YQdzm33eztolQTsdtzyTyC0fkF1EJv1lEfuGJ/CKVs+uGf3/n/3NABOgRoUcq9183RJZ3FElUSTQHbphN3CYKcZvoSm57DpFfVCK/GEr4zSXyi0bkF9OyGyKDA6JDjwE9puGGWPKOLYkjievADfOI28QmbhNPyW3PJ/KLQ+QXXwm/BUR+cYn8Elh2QyxwQDzo8aEnMNyQUN6JJIklSRy4YSFxm0TEbZIque1FRH6JifySKeG3mMgvCZFfcstuSAgOSAo9GfTkhhtSyDulJJUktQM3LCFuk5K4TRolt72UyC8VkV9aJfyWEfmlJvJLZ9kNKcABaaCnhZ7OcEN6eWeQZJRkcuCG5cRtMhC3yazktlcQ+WUk8suihN9KIr9MRH5ZLbshPTggM/Qs0LMabsgm7+ySHJKcDtywirhNduI2uZTc9moivxxEfrmV8FtD5JeTyC+PZTdkAwfkgp4beh7DDXnlnU+SX1LAgRvWErfJR9ymoJLbXkfkl5/Ir5ASfuuJ/AoQ+RW27Ia84ICC0AtBL2y4oYi8i0o8JMUcuGEDcZuixG2KK7ntjUR+HkR+JZTw20TkV4zIr6RlNxQBBxSHXgJ6ScMNpf59k8RTUsaBGzYTtylN3KasktveQuTnSeRXTgm/rUR+ZYj8ylt2QylwQFno5aCXN9xQQd5eEm+JjwM3bCNu40XcxlfJbW8n8vMm8vNTwm8HkZ8PkZ+/ZTdUAAf4QveD7m+4IUDegZIgSbADN+wkbhNI3CZEyW3vIvILIvILVcJvN5FfMJFfRctuCAAHhEAPhV7RcEMleVeWVJFUdeCGPcRtKhO3qabktvcS+VUh8quuhN8+Ir+qRH41LLuhEjigGvTq0GsYbqgp71qS2pI6Dtywn7hNLeI2dZXc9gEiv9pEfvWU8DtI5FeHyK++ZTfUBAfUhV4Pen3DDQ3k3VDSSNLYgRsOEbdpSNymiZLbPkzk14jIr6kSfkeI/BoT+TWz7IYG4IAm0JtCb2a4obm8W0haSlo5cMNR4jYtiNu0VnLbx4j8WhL5tVHC7ziRXysiv7aW3dAcHNAaehvobQ03tJN3e0kHSUcHbjhB3KY9cZtOSm77JJFfByK/zkr4nSLy60jk18WyG9qBAzpB7wy9i+GGrvLuJuku6eHADaeJ23QjbtNTyW2fIfLrTuTXSwm/s0R+PYj8elt2Q1dwQE/ovaD3NtzQR959Jf0k/R244Rxxm77EbQYoue3zRH79iPwGKuF3gcivP5HfIMtu6AMOGAB9IPRBhhsGy3uIZKhkmAM3XCRuM4S4zXAlt32JyG8okd8IJfwuE/kNI/IbadkNg8EBw6GPgD7ScMMoeY+WjJGMdeCGK8RtRhO3Gafktq8S+Y0h8huvhN81Ir+xRH4TLLthFDhgHPTx0CcYbpgo70mSyZIpDtxwnbjNJOI2U5Xc9g0iv8lEftOU8LtJ5DeFyG+6ZTdMBAdMhT4N+nTDDTPkPVMySzLbgRtuEbeZSdxmjpLbvk3kN4vIb64SfneI/GYT+c2z7IYZ4IA50OdCn2e4Yb68F0gWShY5cMNd4jYLiNssVnLb94j8FhL5LVHC7z6R3yIiv6WW3TAfHLAY+hLoSw03LJP3cskKyUoHbnhA3GY5cZtVSm77IZHfCiK/1Ur4PSLyW0nkt8ayG5aBA1ZBXw19jeGGtfJeJ1kv2eDADY+J26wjbrNRyW0/IfJbT+S3SQm/p0R+G4j8Nlt2w1pwwEbom6BvNtywRd5bJdsk2x244Rlxm63EbXYoue3nRH7biPx2KuH3gshvO5HfLstu2AIO2AF9J/Rdhht2y3uPZK9knwM3vCRus4e4zX4lt/2KyG8vkd8BJfxeE/ntI/I7aNkNu8EB+6EfgH7QcMMheR+WHJEcdeCGN8RtDhO3Oabktt8S+R0h8juuhN87Ir+jRH4nLLvhEDjgGPTj0E8Ybjgp71OS05IzDtzwnrjNKeI2Z5Xc9gciv9NEfueU8PtI5HeGyO+8ZTecBAechX4O+nnDDRfkfVFySXLZgRs+Ebe5SNzmipLb/kzkd4nI76oSfl+I/C4T+V2z7IYL4IAr0K9Cv2a44bq8b0huSm45cMNX4jY3iNvcVnLb34j8bhL53VHC7zuR3y0iv7uW3XAdHHAb+h3odw033JP3fckDyUMHbvhB3OY+cZtHSm77J5HfAyK/x0r4/SLye0jk98SyG+6BAx5Bfwz9ieGGp/J+JnkueeHADb+J2zwjbvNSyW3/IfJ7TuT3Sgm/v0R+L4j8Xlt2w1NwwEvor6C/NtzwRt5vJe8k7x24IUxU4v/sidt8UHLbYYn83hH5fVTCLxyR33siv0+W3fAGHPAB+kfonww3fJb3F8lXyTcHbghP3OYLcZvvSm47ApHfVyK/H0r4RSTy+0bk99OyGz6DA75D/wH9p+GGX/L+/e9nkr8O3BCJuM1v4jZhyuu47chEfn+I/MIq4ReFyO8vkV+48nbd8Asc8O/W/9fDQg9X/r9uCC/vCJKIkkjl7bshKnGbCOV520RWctvRiPwiEvlFUcIvOpFfJCK/qJbdEB4cEBl6FOhRDTdEk3d0SQxJTAduiEHcJjpxm1hKbjsmkV8MIr/YSvjFIvKLSeQXx7IbooEDYkGPDT2O4Ya48o4niS9J4MANsYnbxCNuk1DJbcch8otP5JdICb+4RH4JiPwSW3ZDXHBAQuiJoCc23JBE3kklySTJHbghHnGbpMRtUii57fhEfsmI/FIq4ZeAyC85kV8qy25IAg5IAT0l9FSGG1LLO40krSSdAzckJG6ThrhNeiW3nYjILy2RXwYl/BIT+aUj8sto2Q2pwQHpoWeAntFwQyZ5Z5ZkkWR14IYkxG0yE7fJpuS2kxL5ZSHyy66EXzIiv6xEfjksuyETOCAb9OzQcxhuyCnvXJLckjwO3JCcuE0u4jZ5ldx2CiK/3ER++ZTwS0nkl4fIL79lN+QEB+SFng96fsMNBeRdUFJIUtiBG1IRtylI3KaIkttOTeRXiMivqBJ+aYj8ChP5eVh2QwFwQBHoRaF7GG4oJu/ikhKSkg7ckJa4TXHiNqWU3HY6Ir8SRH6llfBLT+RXksjP07IbioEDSkEvDd3TcEMZeZeVlJOUd+CGDMRtyhK3qaDktjMS+ZUj8vNSwi8TkV95Ij9vy24oAw6oAN0LurfhBh95+0r8JP4O3JCZuI0vcZsAJbedhcjPj8gvUAm/rER+/kR+QZbd4AMOCIAeCD3IcEOwvEMkoZKKDtyQjbhNCHGbSkpuOzuRXyiRX2Ul/HIQ+VUk8qti2Q3B4IBK0CtDr2K4oaq8q0mqS2o4cENO4jbViNvUVHLbuYj8qhP51VLCLzeRXw0iv9qW3VAVHFATei3otQ031JF3XUk9SX0HbshD3KYucZsGSm47L5FfPSK/hkr45SPyq0/k18iyG+qAAxpAbwi9keGGxvJuImkqaebADfmJ2zQhbtNcyW0XIPJrSuTXQgm/gkR+zYj8Wlp2Q2NwQHPoLaC3NNzQSt6tJW0kbR24oRBxm9bEbdopue3CRH5tiPzaK+FXhMivLZFfB8tuaAUOaAe9PfQOhhs6yruTpLOkiwM3FCVu04m4TVclt+1B5NeZyK+bEn7FiPy6EPl1t+yGjuCArtC7Qe9uuKGHvHtKekl6O3BDceI2PYnb9FFy2yWI/HoR+fVVwq8kkV9vIr9+lt3QAxzQB3pf6P0MN/SX9wDJQMkgB24oRdxmAHGbwUpuuzSR30AivyFK+HkS+Q0i8htq2Q39wQGDoQ+BPtRwwzB5D5eMkIx04IYyxG2GE7cZpeS2yxL5jSDyG62EXzkiv5FEfmMsu2EYOGAU9NHQxxhuGCvvcZLxkgkO3FCeuM044jYTldx2BSK/8UR+k5Tw8yLym0DkN9myG8aCAyZCnwR9suGGKfKeKpkmme7ADd7EbaYSt5mh5LZ9iPymEfnNVMLPl8hvOpHfLMtumAIOmAF9JvRZhhtmy3uOZK5kngM3+BG3mUPcZr6S2/Yn8ptL5LdACb8AIr95RH4LLbthNjhgPvQF0Bcablgk78WSJZKlDtwQSNxmMXGbZUpuO4jIbwmR33Il/IKJ/JYS+a2w7IZF4IBl0JdDX2G4YaW8V0lWS9Y4cEMIcZtVxG3WKrntUCK/1UR+65Twq0jkt4bIb71lN6wEB6yFvg76esMNG+S9UbJJstmBGyoRt9lI3GaLktuuTOS3ichvqxJ+VYj8NhP5bbPshg3ggC3Qt0LfZrhhu7x3SHZKdjlwQ1XiNjuI2+xWctvViPx2EvntUcKvOpHfLiK/vZbdsB0csBv6Huh7DTfsk/d+yQHJQQduqEHcZj9xm0NKbrsmkd8BIr/DSvjVIvI7SOR3xLIb9oEDDkE/DP2I4Yaj8j4mOS454cANtYnbHCNuc1LJbdch8jtO5HdKCb+6RH4niPxOW3bDUXDASeinoJ823HBG3mcl5yTnHbihHnGbs8RtLii57fpEfueI/C4q4deAyO88kd8ly244Aw64AP0i9EuGGy7L+4rkquSaAzc0JG5zhbjNdSW33YjI7yqR3w0l/BoT+V0j8rtp2Q2XwQHXod+AftNwwy1535bckdx14IYmxG1uE7e5p+S2mxL53SHyu6+EXzMiv7tEfg8su+EWOOAe9PvQHxhueCjvR5LHkicO3NCcuM0j4jZPldx2CyK/x0R+z5Twa0nk94TI77llNzwEBzyF/gz6c8MNL+T9UvJK8tqBG1oRt3lJ3OaNkttuTeT3isjvrRJ+bYj8XhP5vbPshhfggDfQ30J/Z7jhvbw/SD5KPjlwQ1viNh+I23xWctvtiPw+Evl9UcKvPZHfJyK/r5bd8B4c8Bn6F+hfDTd8k/d3yQ/JTwdu6EDc5jtxm19Kbrsjkd8PIr/fSvh1IvL7SeT3x7IbvoEDfkH/Df2P4Ya/8g5TIWyYsJJwFey7oTNxm3/fzdomfAUdt92FyC8skV8EJfy6EvmFI/KLWMGuG/6CA/7d+v96BOgRK/zXDZHkHVkSRRLVgRu6EbeJTNwmmpLb7k7kF4XIL7oSfj2I/KIS+cWw7IZI4IBo0KNDj2G4Iaa8Y0liS+I4cENP4jaxiNvEVXLbvYj8YhP5xVPCrzeRXxwiv/iW3RATHBAXejzo8Q03JJB3QkkiSWIHbuhD3CYhcZskSm67L5FfIiK/pEr49SPyS0zkl8yyGxKAA5JATwo9meGG5PJOIUkpSeXADf2J26QgbpNayW0PIPJLSeSXRgm/gUR+qYj80lp2Q3JwQGroaaCnNdyQTt7pJRkkGR24YRBxm/TEbTIpue3BRH4ZiPwyK+E3hMgvI5FfFstuSAcOyAQ9M/QshhuyyjubJLskhwM3DCVuk424TU4ltz2MyC87kV8uJfyGE/nlIPLLbdkNWcEBOaHngp7bcEMeeeeV5JPkd+CGEcRt8hK3KaDktkcS+eUj8iuohN8oIr/8RH6FLLshDzigAPSC0AsZbigs7yKSohIPB24YTdymCHGbYkpuewyRX1Eiv+JK+I0l8vMg8ith2Q2FwQHFoBeHXsJwQ0l5l/r3XRJPB24YR9ymFHGbMkpuezyRX2kiv7JK+E0g8vMk8itn2Q0lwQFloJeFXs5wQ3l5V5B4SbwduGEicZsKxG18lNz2JCI/LyI/XyX8JhP5eRP5+Vl2Q3lwgA90X+h+hhv85R0gCZQEOXDDFOI2AcRtgpXc9lQiv0AivxAl/KYR+QUR+YVadoM/OCAYegj0UMMNFeVdSVJZUsWBG6YTt6lE3KaqktueQeRXmcivmhJ+M4n8qhD5VbfshorggKrQq0GvbrihhrxrSmpJajtwwyziNjWJ29RRctuzifxqEfnVVcJvDpFfbSK/epbdUAMcUAd6Xej1DDfUl3cDSUNJIwdumEvcpgFxm8ZKbnsekV9DIr8mSvjNJ/JrROTX1LIb6oMDGkNvAr2p4YZm8m4uaSFp6cANC4jbNCdu00rJbS8k8mtB5NdaCb9FRH4tifzaWHZDM3BAK+itobcx3NBW3u0k7SUdHLhhMXGbdsRtOiq57SVEfu2J/Dop4beUyK8DkV9ny25oCw7oCL0T9M6GG7rIu6ukm6S7AzcsI27TlbhNDyW3vZzIrxuRX08l/FYQ+XUn8utl2Q1dwAE9oPeE3stwQ29595H0lfRz4IaVxG36ELfpr+S2VxH59SXyG6CE32oiv35EfgMtu6E3OKA/9AHQBxpuGCTvwZIhkqEO3LCGuM1g4jbDlNz2WiK/IUR+w5XwW0fkN5TIb4RlNwwCBwyDPhz6CMMNI+U9SjJaMsaBG9YTtxlF3GasktveQOQ3mshvnBJ+G4n8xhD5jbfshpHggLHQx0Efb7hhgrwnSiZJJjtwwybiNhOJ20xRctubifwmEflNVcJvC5HfZCK/aZbdMAEcMAX6VOjTDDdMl/cMyUzJLAdu2ErcZgZxm9lKbnsbkd9MIr85SvhtJ/KbReQ317IbpoMDZkOfA32u4YZ58p4vWSBZ6MANO4jbzCdus0jJbe8k8ltA5LdYCb9dRH4LifyWWHbDPHDAIuiLoS8x3LBU3sskyyUrHLhhN3GbZcRtViq57T1EfsuJ/FYp4beXyG8Fkd9qy25YCg5YCX0V9NWGG9bIe61knWS9AzfsI26zlrjNBiW3vZ/Ibx2R30Yl/A4Q+a0n8ttk2Q1rwAEboG+Evslww2Z5b5FslWxz4IaDxG22ELfZruS2DxH5bSXy26GE32Eiv21Efjstu2EzOGA79B3Qdxpu2CXv3ZI9kr0O3HCEuM1u4jb7lNz2USK/PUR++5XwO0bkt5fI74BlN+wCB+yDvh/6AcMNB+V9SHJYcsSBG44TtzlE3Oaokts+QeR3mMjvmBJ+J4n8jhD5HbfshoPggKPQj0E/brjhhLxPSk5JTjtwwyniNieJ25xRctunifxOEfmdVcLvDJHfaSK/c5bdcAIccAb6WejnDDecl/cFyUXJJQduOEvc5gJxm8tKbvsckd9FIr8rSvidJ/K7ROR31bIbzoMDLkO/Av2q4YZr8r4uuSG56cANF4jbXCduc0vJbV8k8rtB5HdbCb9LRH43ifzuWHbDNXDALei3od8x3HBX3vck9yUPHLjhMnGbe8RtHiq57StEfveJ/B4p4XeVyO8Bkd9jy264Cw54CP0R9MeGG57I+6nkmeS5AzdcI27zlLjNCyW3fZ3I7xmR30sl/G4Q+T0n8ntl2Q1PwAEvoL+E/spww2t5v5G8lbxz4IabxG3eELd5r+S2bxH5vSXy+6CE320iv3dEfh8tu+E1OOA99A/QPxpu+CTvz5Ivkq8O3HCHuM1n4jbflNz2XSK/L0R+35Xwu0fk95XI74dlN3wCB3yD/h36D8MNP+X9S/L7388duOE+cZtfxG3+KrntB0R+v4n8wnjp4PeQyO8PkV9YL7tu+AkO+Av9327/62G9/uuGcPIOL4kgiehl3w2PiNuE9+JtE0nJbT8m8otA5BdZCb8nRH4RifyiWHZDOHBAJOiRoUcx3BBV3tEk0SUxHLjhKXGbaMRtYiq57WdEftGJ/GIp4fecyC8GkV9sy26ICg6ICT0W9NiGG+LIO64kniS+Aze8IG4Tl7hNAiW3/ZLILx6RX0Il/F4R+cUn8ktk2Q1xwAEJoCeEnshwQ2J5J5EklSRz4IbXxG2SELdJruS23xD5JSXyS6GE31siv2REfiktuyExOCA59BTQUxpuSCXv1JI0krQO3PCOuE1q4jbplNz2eyK/NER+6ZXw+0Dkl5bIL4NlN6QCB6SDnh56BsMNGeWdSZJZksWBGz4St8lE3Carktv+ROSXmcgvmxJ+n4n8shD5ZbfshozggKzQs0HPbrghh7xzSnJJcjtwwxfiNjmJ2+RRcttfifxyEfnlVcLvG5FfbiK/fJbdkAMckAd6Xuj5DDfkl3cBSUFJIQdu+E7cpgBxm8JKbvsHkV9BIr8iSvj9JPIrRORX1LIb8oMDCkMvAr2o4QYPeReTFJeUcOCGX8RtihG3Kanktn8T+RUn8iulhN8fIr8SRH6lLbvBAxxQEnop6KUNN3jKu4ykrKScAzf8JW5ThrhNeSW3HSYa73eVJfKroIRfWCK/ckR+Xpbd4AkOKA+9AnQvww3e8vaR+Er8HLghHHEbH+I2/kpuOzyRny+RX4ASfhGI/PyI/AItu8EbHOAPPQB6oOGGIHkHS0IkoQ7cEJG4TTBxm4pKbjsSkV8IkV8lJfwiE/mFEvlVtuyGIHBAReiVoFc23FBF3lUl1STVHbghCnGbqsRtaii57ahEftWI/Goq4ReNyK86kV8ty26oAg6oAb0m9FqGG2rLu46krqSeAzdEJ25Th7hNfSW3HYPIry6RXwMl/GIS+dUj8mto2Q21wQH1oTeA3tBwQyN5N5Y0kTR14IZYxG0aE7dppuS2YxP5NSHya66EXxwiv6ZEfi0su6EROKAZ9ObQWxhuaCnvVpLWkjYO3BCXuE0r4jZtldx2PCK/1kR+7ZTwi0/k14bIr71lN7QEB7SF3g56e8MNHeTdUdJJ0tmBGxIQt+lI3KaLkttOSOTXicivqxJ+iYj8OhP5dbPshg7ggC7Qu0LvZrihu7x7SHpKejlwQ2LiNj2I2/RWcttJiPx6Evn1UcIvKZFfLyK/vpbd0B0c0Bt6H+h9DTf0k3d/yQDJQAduSEbcpj9xm0FKbjs5kd8AIr/BSvilIPIbSOQ3xLIb+oEDBkEfDH2I4Yah8h4mGS4Z4cANKYnbDCNuM1LJbaci8htO5DdKCb/URH4jiPxGW3bDUHDASOijoI823DBG3mMl4yTjHbghDXGbscRtJii57bREfuOI/CYq4ZeOyG88kd8ky24YAw6YAH0i9EmGGybLe4pkqmSaAzekJ24zhbjNdCW3nYHIbyqR3wwl/DIS+U0j8ptp2Q2TwQHToc+APtNwwyx5z5bMkcx14IZMxG1mE7eZp+S2MxP5zSHym6+EXxYiv7lEfgssu2EWOGAe9PnQFxhuWCjvRZLFkiUO3JCVuM0i4jZLldx2NiK/xUR+y5Twy07kt4TIb7llNywEByyFvgz6csMNK+S9UrJKstqBG3IQt1lJ3GaNktvOSeS3ishvrRJ+uYj8VhP5rbPshhXggDXQ10JfZ7hhvbw3SDZKNjlwQ27iNhuI22xWctt5iPw2EvltUcIvL5HfJiK/rZbdsB4csBn6FuhbDTdsk/d2yQ7JTgduyEfcZjtxm11Kbjs/kd8OIr/dSvgVIPLbSeS3x7IbtoEDdkHfDX2P4Ya98t4n2S854MANBYnb7CNuc1DJbRci8ttP5HdICb/CRH4HiPwOW3bDXnDAQeiHoB823HBE3kclxyTHHbihCHGbo8RtTii57aJEfseI/E4q4edB5HecyO+UZTccAQecgH4S+inDDaflfUZyVnLOgRuKEbc5Q9zmvJLbLk7kd5bI74ISfiWI/M4R+V207IbT4IDz0C9Av2i44ZK8L0uuSK46cENJ4jaXidtcU3LbpYj8rhD5XVfCrzSR31UivxuW3XAJHHAN+nXoNww33JT3LcltyR0HbvAkbnOLuM1dJbddhsjvNpHfPSX8yhL53SHyu2/ZDTfBAXeh34N+33DDA3k/lDySPHbghnLEbR4St3mi5LbLE/k9IvJ7qoRfBSK/x0R+zyy74QE44An0p9CfGW54Lu8XkpeSVw7c4EXc5gVxm9dKbtubyO8lkd8bJfx8iPxeEfm9teyG5+CA19DfQH9ruOGdvN9LPkg+OnCDL3Gb98RtPim5bT8ivw9Efp+V8PMn8vtI5PfFshvegQM+Qf8M/Yvhhq/y/ib5LvnhwA0BxG2+Ebf5qeS2A4n8vhP5/VLCL4jI7weR32/LbvgKDvgJ/Rf034Yb/sj7rySMd9gwYb3tuyGYuM1f4jbhvHXcdgiRXxhvHr/wSviFEvmFJfKL4G3XDX/AAf9u/X89PPQI3v91Q0R5R5JElkRx4IaKxG0iEbeJquS2KxH5RSbyi6aEX2UivyhEftEtuyEiOCAq9GjQoxtuiCHvmJJYktgO3FCFuE1M4jZxlNx2VSK/WER+cZXwq0bkF5vIL55lN8QAB8SBHhd6PMMN8eWdQJJQksiBG6oTt0lA3CaxktuuQeSXkMgviRJ+NYn8EhH5JbXshvjggMTQk0BParghmbyTS1JIUjpwQy3iNsmJ26RSctu1ifxSEPmlVsKvDpFfSiK/NJbdkAwckAp6auhpDDeklXc6SXpJBgduqEvcJh1xm4xKbrsekV96Ir9MSvjVJ/LLQOSX2bIb0oIDMkLPBD2z4YYs8s4qySbJ7sANDYjbZCVuk0PJbTck8stG5JdTCb9GRH7ZifxyWXZDFnBADug5oecy3JBb3nkkeSX5HLihMXGbPMRt8iu57SZEfnmJ/Aoo4deUyC8fkV9By27IDQ7ID70A9IKGGwrJu7CkiKSoAzc0I25TmLiNh5Lbbk7kV4TIr5gSfi2I/IoS+RW37IZC4AAP6MWgFzfcUELeJSWl/n2bAze0JG5TkriNp5LbbkXkV4rIr4wSfq2J/EoT+ZW17IYS4ABP6GWglzXcUE7e5SUVJF4O3NCGuE154jbeSm67LZFfBSI/HyX82hH5eRH5+Vp2QzlwgDd0H+i+hhv85O0vCZAEOnBDe+I2/sRtgpTcdgcivwAiv2Al/DoS+QUS+YVYdoMfOCAIejD0EMMNofKuKKkkqezADZ2I21QkblNFyW13JvKrRORXVQm/LkR+lYn8qll2Qyg4oAr0qtCrGW6oLu8akpqSWg7c0JW4TQ3iNrWV3HY3Ir+aRH51lPDrTuRXi8ivrmU3VAcH1IZeB3pdww315F1f0kDS0IEbehC3qU/cppGS2+5J5NeAyK+xEn69iPwaEvk1seyGeuCARtAbQ29iuKGpvJtJmktaOHBDb+I2zYjbtFRy232I/JoT+bVSwq8vkV8LIr/Wlt3QFBzQEnor6K0NN7SRd1tJO0l7B27oR9ymLXGbDkpuuz+RXzsiv45K+A0g8mtP5NfJshvagAM6QO8IvZPhhs7y7iLpKunmwA0Didt0IW7TXcltDyLy60rk10MJv8FEft2I/HpadkNncEB36D2g9zTc0EvevSV9JH0duGEIcZvexG36KbntoUR+fYj8+ivhN4zIry+R3wDLbugFDugHvT/0AYYbBsp7kGSwZIgDNwwnbjOIuM1QJbc9gshvMJHfMCX8RhL5DSHyG27ZDQPBAUOhD4M+3HDDCHmPlIySjHbghlHEbUYStxmj5LZHE/mNIvIbq4TfGCK/0UR+4yy7YQQ4YAz0sdDHGW4YL+8JkomSSQ7cMJa4zQTiNpOV3PY4Ir+JRH5TlPAbT+Q3ichvqmU3jAcHTIY+BfpUww3T5D1dMkMy04EbJhC3mU7cZpaS255I5DeDyG+2En6TiPxmEvnNseyGaeCAWdBnQ59juGGuvOdJ5ksWOHDDZOI284jbLFRy21OI/OYT+S1Swm8qkd8CIr/Flt0wFxywEPoi6IsNNyyR91LJMslyB26YRtxmKXGbFUpuezqR3zIiv5VK+M0g8ltO5LfKshuWgANWQF8JfZXhhtXyXiNZK1nnwA0zidusIW6zXsltzyLyW0vkt0EJv9lEfuuI/DZadsNqcMB66BugbzTcsEnemyVbJFsduGEOcZvNxG22KbntuUR+W4j8tivhN4/IbyuR3w7LbtgEDtgGfTv0HYYbdsp7l2S3ZI8DN8wnbrOLuM1eJbe9gMhvN5HfPiX8FhL57SHy22/ZDTvBAXuh74O+33DDAXkflBySHHbghkXEbQ4Stzmi5LYXE/kdIvI7qoTfEiK/w0R+xyy74QA44Aj0o9CPGW44Lu8TkpOSUw7csJS4zQniNqeV3PYyIr+TRH5nlPBbTuR3isjvrGU3HAcHnIZ+BvpZww3n5H1eckFy0YEbVhC3OU/c5pKS215J5HeByO+yEn6riPwuEvldseyGc+CAS9AvQ79iuOGqvK9JrktuOHDDauI214jb3FRy22uI/K4T+d1Swm8tkd8NIr/blt1wFRxwE/ot6LcNN9yR913JPcl9B25YR9zmLnGbB0puez2R3z0iv4dK+G0g8rtP5PfIshvugAMeQH8I/ZHhhsfyfiJ5KnnmwA0bids8IW7zXMltbyLye0rk90IJv81Efs+I/F5adsNjcMBz6C+gvzTc8EreryVvJG8duGELcZvXxG3eKbntrUR+b4j83ivht43I7y2R3wfLbngFDngH/T30D4YbPsr7k+Sz5IsDN2wnbvOJuM1XJbe9g8jvM5HfNyX8dhL5fSHy+27ZDR/BAV+hf4P+3XDDD3n/lPyS/Hbghl3EbX4St/mj5LZ3E/n9IvL7q4TfHiK/30R+YXzsuuEHOOAP9L/Q/30DuiGsvMNJwksi+Nh3w17iNuF8eNtE9NFx2/uI/MIT+UVSwm8/kV8EIr/Ilt0Q1uf/HRAReiTokQ03RJF3VEk0SXQHbjhA3CYqcZsYSm77IJFfNCK/mEr4HSLyi07kF8uyG6KAA2JAjwk9luGG2PKOI4kriefADYeJ28QhbhNfyW0fIfKLS+SXQAm/o0R+8Yj8Elp2Q2xwQHzoCaAnNNyQSN6JJUkkSR244Rhxm8TEbZIpue3jRH5JiPySK+F3gsgvKZFfCstuSAQOSAY9OfQUhhtSyjuVJLUkjQM3nCRuk4q4TVolt32KyC81kV86JfxOE/mlIfJLb9kNKcEBaaGng57ecEMGeWeUZJJkduCGM8RtMhK3yaLkts8S+WUi8suqhN85Ir/MRH7ZLLshAzggC/Ss0LMZbsgu7xySnJJcDtxwnrhNDuI2uZXc9gUiv5xEfnmU8LtI5JeLyC+vZTdkBwfkhp4Hel7DDfnknV9SQFLQgRsuEbfJT9ymkJLbvkzkV4DIr7ASfleI/AoS+RWx7IZ84IBC0AtDL2K4oai8PSTFJMUduOEqcRsP4jYllNz2NSK/YkR+JZXwu07kV5zIr5RlNxQFB5SAXhJ6KcMNpeXtKSkjKevADTeI23gStymn5LZvEvmVIfIrr4TfLSK/skR+FSy7oTQ4oBz08tArGG7wkre3xEfi68ANt4nbeBO38VNy23eI/HyI/PyV8LtL5OdL5Bdg2Q1e4AA/6P7QAww3BMo7SBIsCXHghnvEbYKI24Qque37RH7BRH4VlfB7QOQXQuRXybIbAsEBodArQq9kuKGyvKtIqkqqOXDDQ+I2VYjbVFdy24+I/KoS+dVQwu8xkV81Ir+alt1QGRxQHXoN6DUNN9SSd21JHUldB254QtymNnGbekpu+ymRXx0iv/pK+D0j8qtL5NfAshtqgQPqQa8PvYHhhobybiRpLGniwA3Pids0Im7TVMltvyDya0zk10wJv5dEfk2I/JpbdkNDcEBT6M2gNzfc0ELeLSWtJK0duOEVcZuWxG3aKLnt10R+rYj82irh94bIrzWRXzvLbmgBDmgDvS30doYb2su7g6SjpJMDN7wlbtOBuE1nJbf9jsivI5FfFyX83hP5dSLy62rZDe3BAZ2hd4He1XBDN3l3l/SQ9HTghg/EbboTt+ml5LY/Evn1IPLrrYTfJyK/nkR+fSy7oRs4oBf03tD7GG7oK+9+kv6SAQ7c8Jm4TT/iNgOV3PYXIr/+RH6DlPD7SuQ3gMhvsGU39AUHDIQ+CPpgww1D5D1UMkwy3IEbvhG3GUrcZoSS2/5O5DeMyG+kEn4/iPyGE/mNsuyGIeCAEdBHQh9luGG0vMdIxkrGOXDDT+I2Y4jbjFdy27+I/MYS+U1Qwu83kd84Ir+Jlt0wGhwwHvoE6BMNN0yS92TJFMlUB274Q9xmMnGbaUpu+y+R3xQiv+lK+IWJzvtdU4n8Zlh2wyRwwDTo06HPMNwwU96zJLMlcxy4ISxxm1nEbeYque1wRH6zifzmKeEXnshvDpHffMtumAkOmAt9HvT5hhsWyHuhZJFksQM3RCBus5C4zRIltx2RyG8Rkd9SJfwiEfktJvJbZtkNC8ABS6Avhb7McMNyea+QrJSscuCGyMRtVhC3Wa3ktqMQ+a0k8lujhF9UIr9VRH5rLbthOThgNfQ10Ncablgn7/WSDZKNDtwQjbjNeuI2m5TcdnQivw1EfpuV8ItB5LeRyG+LZTesAwdsgr4Z+hbDDVvlvU2yXbLDgRtiErfZRtxmp5LbjkXkt53Ib5cSfrGJ/HYQ+e227Iat4ICd0HdB3224YY+890r2SfY7cEMc4jZ7idscUHLbcYn89hH5HVTCLx6R334iv0OW3bAHHHAA+kHohww3HJb3EclRyTEHbohP3OYIcZvjSm47AZHfUSK/E0r4JSTyO0bkd9KyGw6DA45DPwH9pOGGU/I+LTkjOevADYmI25wmbnNOyW0nJvI7Q+R3Xgm/JER+Z4n8Llh2wylwwDno56FfMNxwUd6XJJclVxy4ISlxm0vEba4que1kRH6XifyuKeGXnMjvCpHfdctuuAgOuAr9GvTrhhtuyPum5JbktgM3pCBuc5O4zR0lt52SyO8Wkd9dJfxSEfndJvK7Z9kNN8ABd6DfhX7PcMN9eT+QPJQ8cuCG1MRtHhC3eazkttMQ+T0k8nuihF9aIr9HRH5PLbvhPjjgMfQn0J8abngm7+eSF5KXDtyQjrjNc+I2r5TcdnoivxdEfq+V8MtA5PeSyO+NZTc8Awe8gv4a+hvDDW/l/U7yXvLBgRsyErd5R9zmo5LbzkTk957I75MSfpmJ/D4Q+X227Ia34ICP0D9B/2y44Yu8v0q+Sb47cEMW4jZfidv8UHLbWYn8vhH5/VTCLxuR33civ1+W3fAFHPAD+k/ovww3/P73lvyVhPG174bsxG3+ELcJ66vjtnMQ+f0l8gunhF9OIr8wvjx+4X3tuuE3OODfrf+vh4Me3ve/bogg74iSSJLIDtyQi7hNROI2UZTcdm4iv0hEflGV8MtD5BeZyC+aZTdEAAdEgR4VejTDDdHlHUMSUxLLgRvyEreJQdwmtpLbzkfkF5PIL44SfvmJ/GIR+cW17Ibo4IDY0ONAj2u4IZ6840sSSBI6cEMB4jbxidskUnLbBYn8EhD5JVbCrxCRX0IivySW3RAPHJAIemLoSQw3JJV3MklySQoHbihM3CYZcZuUSm67CJFfciK/VEr4FSXyS0Hkl9qyG5KCA1JCTwU9teGGNPJOK0knSe/ADR7EbdISt8mg5LaLEfmlI/LLqIRfcSK/9ER+mSy7IQ04IAP0jNAzGW7ILO8skqySbA7cUIK4TRbiNtmV3HZJIr+sRH45lPArReSXjcgvp2U3ZAYHZIeeA3pOww255J1bkkeS14EbShO3yU3cJp+S2/Yk8stD5JdfCb8yRH55ifwKWHZDLnBAPuj5oRcw3FBQ3oUkhSVFHLihLHGbQsRtiiq57XJEfoWJ/DyU8CtP5FeEyK+YZTcUBAcUhe4BvZjhhuLyLiEpKSnlwA0ViNuUIG5TWsltexH5lSTy81TCz5vIrxSRXxnLbigODigN3RN6GcMNZeVdTlJeUsGBG3yI25QjbuOl5LZ9ifzKE/l5K+HnR+RXgcjPx7IbyoIDvKB7Q/cx3OArbz+JvyTAgRv8idv4EbcJVHLbAUR+/kR+QUr4BRL5BRD5BVt2gy84IBB6EPRgww0h8g6VVJRUcuCGIOI2ocRtKiu57WAiv4pEflWU8Ash8qtE5FfVshtCwAGVoVeBXtVwQzV5V5fUkNR04IZQ4jbVidvUUnLbFYn8ahD51VbCrxKRX00ivzqW3VANHFALem3odQw31JV3PUl9SQMHbqhM3KYecZuGSm67CpFffSK/Rkr4VSXya0Dk19iyG+qCAxpCbwS9seGGJvJuKmkmae7ADdWI2zQlbtNCyW1XJ/JrRuTXUgm/GkR+zYn8Wll2QxNwQAvoLaG3MtzQWt5tJG0l7Ry4oSZxmzbEbdorue1aRH5tifw6KOFXm8ivHZFfR8tuaA0OaA+9A/SOhhs6ybuzpIukqwM31CFu05m4TTclt12XyK8LkV93JfzqEfl1JfLrYdkNncAB3aB3h97DcENPefeS9Jb0ceCG+sRtehG36avkthsQ+fUm8uunhF9DIr8+RH79LbuhJzigL/R+0Psbbhgg74GSQZLBDtzQiLjNQOI2Q5TcdmMiv0FEfkOV8GtC5DeYyG+YZTcMAAcMgT4U+jDDDcPlPUIyUjLKgRuaErcZQdxmtJLbbkbkN5LIb4wSfs2J/EYR+Y217Ibh4IDR0MdAH2u4YZy8x0smSCY6cEML4jbjidtMUnLbLYn8JhD5TVbCrxWR30QivymW3TAOHDAJ+mToUww3TJX3NMl0yQwHbmhN3GYacZuZSm67DZHfdCK/WUr4tSXym0HkN9uyG6aCA2ZCnwV9tuGGOfKeK5knme/ADe2I28wlbrNAyW23J/KbR+S3UAm/DkR+84n8Fll2wxxwwALoC6EvMtywWN5LJEslyxy4oSNxmyXEbZYrue1ORH5LifxWKOHXmchvGZHfSstuWAwOWA59BfSVhhtWyXu1ZI1krQM3dCFus5q4zTolt92VyG8Nkd96Jfy6EfmtJfLbYNkNq8AB66Cvh77BcMNGeW+SbJZsceCG7sRtNhG32arktnsQ+W0m8tumhF9PIr8tRH7bLbthIzhgK/Rt0Lcbbtgh752SXZLdDtzQi7jNTuI2e5Tcdm8iv11EfnuV8OtD5LebyG+fZTfsAAfsgb4X+j7DDfvlfUByUHLIgRv6Erc5QNzmsJLb7kfkd5DI74gSfv2J/A4R+R217Ib94IDD0I9AP2q44Zi8j0tOSE46cMMA4jbHiducUnLbA4n8ThD5nVbCbxCR30kivzOW3XAMHHAK+mnoZww3nJX3Ocl5yQUHbhhM3OYccZuLSm57CJHfeSK/S0r4DSXyu0Dkd9myG86CAy5CvwT9suGGK/K+Krkmue7ADcOI21wlbnNDyW0PJ/K7RuR3Uwm/EUR+14n8bll2wxVwwA3oN6HfMtxwW953JHcl9xy4YSRxmzvEbe4rue1RRH53ifweKOE3msjvHpHfQ8tuuA0OuA/9AfSHhhseyfux5InkqQM3jCFu85i4zTMltz2WyO8Jkd9zJfzGEfk9JfJ7YdkNj8ABz6A/h/7CcMNLeb+SvJa8ceCG8cRtXhG3eavkticQ+b0m8nunhN9EIr83RH7vLbvhJTjgLfR30N8bbvgg74+ST5LPDtwwibjNR+I2X5Tc9mQiv09Efl+V8JtC5PeZyO+bZTd8AAd8gf4V+jfDDd/l/UPyU/LLgRumErf5Qdzmt5Lbnkbk95PI748SftOJ/H4R+f217Ibv4IDf0P9A/2u4IYxf2DBhJeEk4f3su2EGcZt/383aJoKfjtueSeQXjsgvohJ+s4j8whP5RfKz64Z/f+f/c0AE6BGhR/L7rxsiyzuKJKokmgM3zCZuE4W4TXQltz2HyC8qkV8MJfzmEvlFI/KLadkNkcEB0aHHgB7TcEMseceWxJHEdeCGecRtYhO3iafktucT+cUh8ouvhN8CIr+4RH4JLLshFjggHvT40BMYbkgo70SSxJIkDtywkLhNIuI2SZXc9iIiv8REfsmU8FtM5JeEyC+5ZTckBAckhZ4MenLDDSnknVKSSpLagRuWELdJSdwmjZLbXkrkl4rIL60SfsuI/FIT+aWz7IYU4IA00NNCT2e4Ib28M0gySjI5cMNy4jYZiNtkVnLbK4j8MhL5ZVHCbyWRXyYiv6yW3ZAeHJAZehboWQ03ZJN3dkkOSU4HblhF3CY7cZtcSm57NZFfDiK/3Er4rSHyy0nkl8eyG7KBA3JBzw09j+GGvPLOJ8kvKeDADWuJ2+QjblNQyW2vI/LLT+RXSAm/9UR+BYj8Clt2Q15wQEHohaAXNtxQRN5FJR6SYg7csIG4TVHiNsWV3PZGIj8PIr8SSvhtIvIrRuRX0rIbioADikMvAb2k4YZS/75J4ikp48ANm4nblCZuU1bJbW8h8vMk8iunhN9WIr8yRH7lLbuhFDigLPRy0Msbbqggby+Jt8THgRu2EbfxIm7jq+S2txP5eRP5+Snht4PIz4fIz9+yGyqAA3yh+0H3N9wQIO9ASZAk2IEbdhK3CSRuE6LktncR+QUR+YUq4bebyC+YyK+iZTcEgANCoIdCr2i4oZK8K0uqSKo6cMMe4jaVidtUU3Lbe4n8qhD5VVfCbx+RX1UivxqW3VAJHFANenXoNQw31JR3LUltSR0HbthP3KYWcZu6Sm77AJFfbSK/ekr4HSTyq0PkV9+yG2qCA+pCrwe9vuGGBvJuKGkkaezADYeI2zQkbtNEyW0fJvJrROTXVAm/I0R+jYn8mll2QwNwQBPoTaE3M9zQXN4tJC0lrRy44ShxmxbEbVorue1jRH4tifzaKOF3nMivFZFfW8tuaA4OaA29DfS2hhvaybu9pIOkowM3nCBu0564TSclt32SyK8DkV9nJfxOEfl1JPLrYtkN7cABnaB3ht7FcENXeXeTdJf0cOCG08RtuhG36ankts8Q+XUn8uulhN9ZIr8eRH69LbuhKzigJ/Re0Hsbbugj776SfpL+DtxwjrhNX+I2A5Tc9nkiv35EfgOV8LtA5NefyG+QZTf0AQcMgD4Q+iDDDYPlPUQyVDLMgRsuErcZQtxmuJLbvkTkN5TIb4QSfpeJ/IYR+Y207IbB4IDh0EdAH2m4YZS8R0vGSMY6cMMV4jajiduMU3LbV4n8xhD5jVfC7xqR31givwmW3TAKHDAO+njoEww3TJT3JMlkyRQHbrhO3GYScZupSm77BpHfZCK/aUr43STym0LkN92yGyaCA6ZCnwZ9uuGGGfKeKZklme3ADbeI28wkbjNHyW3fJvKbReQ3Vwm/O0R+s4n85ll2wwxwwBzoc6HPM9wwX94LJAslixy44S5xmwXEbRYrue17RH4LifyWKOF3n8hvEZHfUstumA8OWAx9CfSlhhuWyXu5ZIVkpQM3PCBus5y4zSolt/2QyG8Fkd9qJfweEfmtJPJbY9kNy8ABq6Cvhr7GcMNaea+TrJdscOCGx8Rt1hG32ajktp8Q+a0n8tukhN9TIr8NRH6bLbthLThgI/RN0Dcbbtgi762SbZLtDtzwjLjNVuI2O5Tc9nMiv21EfjuV8HtB5LedyG+XZTdsAQfsgL4T+i7DDbvlvUeyV7LPgRteErfZQ9xmv5LbfkXkt5fI74ASfq+J/PYR+R207Ibd4ID90A9AP2i44ZC8D0uOSI46cMMb4jaHidscU3Lbb4n8jhD5HVfC7x2R31EivxOW3XAIHHAM+nHoJww3nJT3KclpyRkHbnhP3OYUcZuzSm77A5HfaSK/c0r4fSTyO0Pkd96yG06CA85CPwf9vOGGC/K+KLkkuezADZ+I21wkbnNFyW1/JvK7ROR3VQm/L0R+l4n8rll2wwVwwBXoV6FfM9xwXd43JDcltxy44StxmxvEbW4rue1vRH43ifzuKOH3ncjvFpHfXctuuA4OuA39DvS7hhvuyfu+5IHkoQM3/CBuc5+4zSMlt/2TyO8Bkd9jJfx+Efk9JPJ7YtkN98ABj6A/hv7EcMNTeT+TPJe8cOCG38RtnhG3eanktv8Q+T0n8nulhN9fIr8XRH6vLbvhKTjgJfRX0F8bbngj77eSd5L3DtwQJgbxf/bEbT4oue2wRH7viPw+KuEXjsjvPZHfJ8tueAMO+AD9I/RPhhs+y/uL5KvkmwM3hCdu84W4zXcltx2ByO8rkd8PJfwiEvl9I/L7adkNn8EB36H/gP7TcMMvef/+9zPJXwduiETc5jdxmzD+Om47MpHfHyK/sEr4RSHy+0vkF87frht+gQP+3fr/eljo4fz/64bw8o4giSiJ5G/fDVGJ20Tw520TWcltRyPyi0jkF0UJv+hEfpGI/KJadkN4cEBk6FGgRzXcEE3e0SUxJDEduCEGcZvoxG1iKbntmER+MYj8YivhF4vILyaRXxzLbogGDogFPTb0OIYb4so7niS+JIEDN8QmbhOPuE1CJbcdh8gvPpFfIiX84hL5JSDyS2zZDXHBAQmhJ4Ke2HBDEnknlSSTJHfghnjEbZISt0mh5LbjE/klI/JLqYRfAiK/5ER+qSy7IQk4IAX0lNBTGW5ILe80krSSdA7ckJC4TRriNumV3HYiIr+0RH4ZlPBLTOSXjsgvo2U3pAYHpIeeAXpGww2Z5J1ZkkWS1YEbkhC3yUzcJpuS205K5JeFyC+7En7JiPyyEvnlsOyGTOCAbNCzQ89huCGnvHNJckvyOHBDcuI2uYjb5FVy2ymI/HIT+eVTwi8lkV8eIr/8lt2QExyQF3o+6PkNNxSQd0FJIUlhB25IRdymIHGbIkpuOzWRXyEiv6JK+KUh8itM5Odh2Q0FwAFFoBeF7mG4oZi8i0tKSEo6cENa4jbFiduUUnLb6Yj8ShD5lVbCLz2RX0kiP0/LbigGDigFvTR0T8MNZeRdVlJOUt6BGzIQtylL3KaCktvOSORXjsjPSwm/TER+5Yn8vC27oQw4oAJ0L+jehht85O0r8ZP4O3BDZuI2vsRtApTcdhYiPz8iv0Al/LIS+fkT+QVZdoMPOCAAeiD0IMMNwfIOkYRKKjpwQzbiNiHEbSopue3sRH6hRH6VlfDLQeRXkcivimU3BIMDKkGvDL2K4Yaq8q4mqS6p4cANOYnbVCNuU1PJbeci8qtO5FdLCb/cRH41iPxqW3ZDVXBATei1oNc23FBH3nUl9ST1HbghD3GbusRtGii57bxEfvWI/Boq4ZePyK8+kV8jy26oAw5oAL0h9EaGGxrLu4mkqaSZAzfkJ27ThLhNcyW3XYDIrymRXwsl/AoS+TUj8mtp2Q2NwQHNobeA3tJwQyt5t5a0kbR14IZCxG1aE7dpp+S2CxP5tSHya6+EXxEiv7ZEfh0su6EVOKAd9PbQOxhu6CjvTpLOki4O3FCUuE0n4jZdldy2B5FfZyK/bkr4FSPy60Lk192yGzqCA7pC7wa9u+GGHvLuKekl6e3ADcWJ2/QkbtNHyW2XIPLrReTXVwm/kkR+vYn8+ll2Qw9wQB/ofaH3M9zQX94DJAMlgxy4oRRxmwHEbQYrue3SRH4DifyGKOHnSeQ3iMhvqGU39AcHDIY+BPpQww3D5D1cMkIy0oEbyhC3GU7cZpSS2y5L5DeCyG+0En7liPxGEvmNseyGYeCAUdBHQx9juGGsvMdJxksmOHBDeeI244jbTFRy2xWI/MYT+U1Sws+LyG8Ckd9ky24YCw6YCH0S9MmGG6bIe6pkmmS6Azd4E7eZStxmhpLb9iHym0bkN1MJP18iv+lEfrMsu2EKOGAG9JnQZxlumC3vOZK5knkO3OBH3GYOcZv5Sm7bn8hvLpHfAiX8Aoj85hH5LbTshtnggPnQF0BfaLhhkbwXS5ZIljpwQyBxm8XEbZYpue0gIr8lRH7LlfALJvJbSuS3wrIbFoEDlkFfDn2F4YaV8l4lWS1Z48ANIcRtVhG3WavktkOJ/FYT+a1Twq8ikd8aIr/1lt2wEhywFvo66OsNN2yQ90bJJslmB26oRNxmI3GbLUpuuzKR3yYiv61K+FUh8ttM5LfNshs2gAO2QN8KfZvhhu3y3iHZKdnlwA1VidvsIG6zW8ltVyPy20nkt0cJv+pEfruI/PZadsN2cMBu6Hug7zXcsE/e+yUHJAcduKEGcZv9xG0OKbntmkR+B4j8DivhV4vI7yCR3xHLbtgHDjgE/TD0I4Ybjsr7mOS45IQDN9QmbnOMuM1JJbddh8jvOJHfKSX86hL5nSDyO23ZDUfBASehn4J+2nDDGXmflZyTnHfghnrEbc4St7mg5LbrE/mdI/K7qIRfAyK/80R+lyy74Qw44AL0i9AvGW64LO8rkquSaw7c0JC4zRXiNteV3HYjIr+rRH43lPBrTOR3jcjvpmU3XAYHXId+A/pNww235H1bckdy14EbmhC3uU3c5p6S225K5HeHyO++En7NiPzuEvk9sOyGW+CAe9DvQ39guOGhvB9JHkueOHBDc+I2j4jbPFVy2y2I/B4T+T1Twq8lkd8TIr/nlt3wEBzwFPoz6M8NN7yQ90vJK8lrB25oRdzmJXGbN0puuzWR3ysiv7dK+LUh8ntN5PfOshtegAPeQH8L/Z3hhvfy/iD5KPnkwA1tidt8IG7zWclttyPy+0jk90UJv/ZEfp+I/L5adsN7cMBn6F+gfzXc8E3e3yU/JD8duKEDcZvvxG1+KbntjkR+P4j8fivh14nI7yeR3x/LbvgGDvgF/Tf0P4Yb/so7TEDYMGEl4QLsu6EzcZt/383aJnyAjtvuQuQXlsgvghJ+XYn8whH5RQyw64a/4IB/t/6/HgF6xID/uiGSvCNLokiiOnBDN+I2kYnbRFNy292J/KIQ+UVXwq8HkV9UIr8Ylt0QCRwQDXp06DEMN8SUdyxJbEkcB27oSdwmFnGbuEpuuxeRX2wiv3hK+PUm8otD5BffshtiggPiQo8HPb7hhgTyTihJJEnswA19iNskJG6TRMlt9yXyS0Tkl1QJv35EfomJ/JJZdkMCcEAS6EmhJzPckFzeKSQpJakcuKE/cZsUxG1SK7ntAUR+KYn80ijhN5DILxWRX1rLbkgODkgNPQ30tIYb0sk7vSSDJKMDNwwibpOeuE0mJbc9mMgvA5FfZiX8hhD5ZSTyy2LZDenAAZmgZ4aexXBDVnlnk2SX5HDghqHEbbIRt8mp5LaHEfllJ/LLpYTfcCK/HER+uS27ISs4ICf0XNBzG27II++8knyS/A7cMIK4TV7iNgWU3PZIIr98RH4FlfAbReSXn8ivkGU35AEHFIBeEHohww2F5V1EUlTi4cANo4nbFCFuU0zJbY8h8itK5FdcCb+xRH4eRH4lLLuhMDigGPTi0EsYbigp71L/vkvi6cAN44jblCJuU0bJbY8n8itN5FdWCb8JRH6eRH7lLLuhJDigDPSy0MsZbigv7woSL4m3AzdMJG5TgbiNj5LbnkTk50Xk56uE32QiP28iPz/LbigPDvCB7gvdz3CDv7wDJIGSIAdumELcJoC4TbCS255K5BdI5BeihN80Ir8gIr9Qy27wBwcEQw+BHmq4oaK8K0kqS6o4cMN04jaViNtUVXLbM4j8KhP5VVPCbyaRXxUiv+qW3VARHFAVejXo1Q031JB3TUktSW0HbphF3KYmcZs6Sm57NpFfLSK/ukr4zSHyq03kV8+yG2qAA+pArwu9nuGG+vJuIGkoaeTADXOJ2zQgbtNYyW3PI/JrSOTXRAm/+UR+jYj8mlp2Q31wQGPoTaA3NdzQTN7NJS0kLR24YQFxm+bEbVopue2FRH4tiPxaK+G3iMivJZFfG8tuaAYOaAW9NfQ2hhvayrudpL2kgwM3LCZu0464TUclt72EyK89kV8nJfyWEvl1IPLrbNkNbcEBHaF3gt7ZcEMXeXeVdJN0d+CGZcRtuhK36aHktpcT+XUj8uuphN8KIr/uRH69LLuhCzigB/Se0HsZbugt7z6SvpJ+DtywkrhNH+I2/ZXc9ioiv75EfgOU8FtN5NePyG+gZTf0Bgf0hz4A+kDDDYPkPVgyRDLUgRvWELcZTNxmmJLbXkvkN4TIb7gSfuuI/IYS+Y2w7IZB4IBh0IdDH2G4YaS8R0lGS8Y4cMN64jajiNuMVXLbG4j8RhP5jVPCbyOR3xgiv/GW3TASHDAW+jjo4w03TJD3RMkkyWQHbthE3GYicZspSm57M5HfJCK/qUr4bSHym0zkN82yGyaAA6ZAnwp9muGG6fKeIZkpmeXADVuJ28wgbjNbyW1vI/KbSeQ3Rwm/7UR+s4j85lp2w3RwwGzoc6DPNdwwT97zJQskCx24YQdxm/nEbRYpue2dRH4LiPwWK+G3i8hvIZHfEstumAcOWAR9MfQlhhuWynuZZLlkhQM37CZus4y4zUolt72HyG85kd8qJfz2EvmtIPJbbdkNS8EBK6Gvgr7acMMaea+VrJOsd+CGfcRt1hK32aDktvcT+a0j8tuohN8BIr/1RH6bLLthDThgA/SN0DcZbtgs7y2SrZJtDtxwkLjNFuI225Xc9iEiv61EfjuU8DtM5LeNyG+nZTdsBgdsh74D+k7DDbvkvVuyR7LXgRuOELfZTdxmn5LbPkrkt4fIb78SfseI/PYS+R2w7IZd4IB90PdDP2C44aC8D0kOS444cMNx4jaHiNscVXLbJ4j8DhP5HVPC7ySR3xEiv+OW3XAQHHAU+jHoxw03nJD3SckpyWkHbjhF3OYkcZszSm77NJHfKSK/s0r4nSHyO03kd86yG06AA85APwv9nOGG8/K+ILkoueTADWeJ21wgbnNZyW2fI/K7SOR3RQm/80R+l4j8rlp2w3lwwGXoV6BfNdxwTd7XJTckNx244QJxm+vEbW4pue2LRH43iPxuK+F3icjvJpHfHctuuAYOuAX9NvQ7hhvuyvue5L7kgQM3XCZuc4+4zUMlt32FyO8+kd8jJfyuEvk9IPJ7bNkNd8EBD6E/gv7YcMMTeT+VPJM8d+CGa8RtnhK3eaHktq8T+T0j8nuphN8NIr/nRH6vLLvhCTjgBfSX0F8Zbngt7zeSt5J3Dtxwk7jNG+I275Xc9i0iv7dEfh+U8LtN5PeOyO+jZTe8Bge8h/4B+kfDDZ/k/VnyRfLVgRvuELf5TNzmm5Lbvkvk94XI77sSfveI/L4S+f2w7IZP4IBv0L9D/2G44ae8f0l+//u5AzfcJ27zi7jNXyW3/YDI7zeRX5hAHfweEvn9IfILG2jXDT/BAX+h/9vtfz1s4H/dEE7e4SURJBED7bvhEXGb8IG8bSIpue3HRH4RiPwiK+H3hMgvIpFfFMtuCAcOiAQ9MvQohhuiyjuaJLokhgM3PCVuE424TUwlt/2MyC86kV8sJfyeE/nFIPKLbdkNUcEBMaHHgh7bcEMceceVxJPEd+CGF8Rt4hK3SaDktl8S+cUj8kuohN8rIr/4RH6JLLshDjggAfSE0BMZbkgs7ySSpJJkDtzwmrhNEuI2yZXc9hsiv6REfimU8HtL5JeMyC+lZTckBgckh54CekrDDanknVqSRpLWgRveEbdJTdwmnZLbfk/kl4bIL70Sfh+I/NIS+WWw7IZU4IB00NNDz2C4IaO8M0kyS7I4cMNH4jaZiNtkVXLbn4j8MhP5ZVPC7zORXxYiv+yW3ZARHJAVejbo2Q035JB3TkkuSW4HbvhC3CYncZs8Sm77K5FfLiK/vEr4fSPyy03kl8+yG3KAA/JAzws9n+GG/PIuICkoKeTADd+J2xQgblNYyW3/IPIrSORXRAm/n0R+hYj8ilp2Q35wQGHoRaAXNdzgIe9ikuKSEg7c8Iu4TTHiNiWV3PZvIr/iRH6llPD7Q+RXgsivtGU3eIADSkIvBb204QZPeZeRlJWUc+CGv8RtyhC3Ka/ktsPE5P2uskR+FZTwC0vkV47Iz8uyGzzBAeWhV4DuZbjBW94+El+JnwM3hCNu40Pcxl/JbYcn8vMl8gtQwi8CkZ8fkV+gZTd4gwP8oQdADzTcECTvYEmIJNSBGyIStwkmblNRyW1HIvILIfKrpIRfZCK/UCK/ypbdEAQOqAi9EvTKhhuqyLuqpJqkugM3RCFuU5W4TQ0ltx2VyK8akV9NJfyiEflVJ/KrZdkNVcABNaDXhF7LcENtedeR1JXUc+CG6MRt6hC3qa/ktmMQ+dUl8mughF9MIr96RH4NLbuhNjigPvQG0Bsabmgk78aSJpKmDtwQi7hNY+I2zZTcdmwivyZEfs2V8ItD5NeUyK+FZTc0Agc0g94cegvDDS3l3UrSWtLGgRviErdpRdymrZLbjkfk15rIr50SfvGJ/NoQ+bW37IaW4IC20NtBb2+4oYO8O0o6STo7cEMC4jYdidt0UXLbCYn8OhH5dVXCLxGRX2civ26W3dABHNAFelfo3Qw3dJd3D0lPSS8HbkhM3KYHcZveSm47CZFfTyK/Pkr4JSXy60Xk19eyG7qDA3pD7wO9r+GGfvLuLxkgGejADcmI2/QnbjNIyW0nJ/IbQOQ3WAm/FER+A4n8hlh2Qz9wwCDog6EPMdwwVN7DJMMlIxy4ISVxm2HEbUYque1URH7DifxGKeGXmshvBJHfaMtuGAoOGAl9FPTRhhvGyHusZJxkvAM3pCFuM5a4zQQlt52WyG8ckd9EJfzSEfmNJ/KbZNkNY8ABE6BPhD7JcMNkeU+RTJVMc+CG9MRtphC3ma7ktjMQ+U0l8puhhF9GIr9pRH4zLbthMjhgOvQZ0Gcabpgl79mSOZK5DtyQibjNbOI285TcdmYivzlEfvOV8MtC5DeXyG+BZTfMAgfMgz4f+gLDDQvlvUiyWLLEgRuyErdZRNxmqZLbzkbkt5jIb5kSftmJ/JYQ+S237IaF4ICl0JdBX264YYW8V0pWSVY7cEMO4jYridusUXLbOYn8VhH5rVXCLxeR32oiv3WW3bACHLAG+lro6ww3rJf3BslGySYHbshN3GYDcZvNSm47D5HfRiK/LUr45SXy20Tkt9WyG9aDAzZD3wJ9q+GGbfLeLtkh2enADfmI22wnbrNLyW3nJ/LbQeS3Wwm/AkR+O4n89lh2wzZwwC7ou6HvMdywV977JPslBxy4oSBxm33EbQ4que1CRH77ifwOKeFXmMjvAJHfYctu2AsOOAj9EPTDhhuOyPuo5JjkuAM3FCFuc5S4zQklt12UyO8Ykd9JJfw8iPyOE/mdsuyGI+CAE9BPQj9luOG0vM9IzkrOOXBDMeI2Z4jbnFdy28WJ/M4S+V1Qwq8Ekd85Ir+Llt1wGhxwHvoF6BcNN1yS92XJFclVB24oSdzmMnGba0puuxSR3xUiv+tK+JUm8rtK5HfDshsugQOuQb8O/YbhhpvyviW5LbnjwA2exG1uEbe5q+S2yxD53Sbyu6eEX1kivztEfvctu+EmOOAu9HvQ7xtueCDvh5JHkscO3FCOuM1D4jZPlNx2eSK/R0R+T5Xwq0Dk95jI75llNzwABzyB/hT6M8MNz+X9QvJS8sqBG7yI27wgbvNayW17E/m9JPJ7o4SfD5HfKyK/t5bd8Bwc8Br6G+hvDTe8k/d7yQfJRwdu8CVu8564zSclt+1H5PeByO+zEn7+RH4fify+WHbDO3DAJ+ifoX8x3PBV3t8k3yU/HLghgLjNN+I2P5XcdiCR33civ19K+AUR+f0g8vtt2Q1fwQE/of+C/ttwwx95/5WECQobJmyQfTcEE7f5S9wmXJCO2w4h8gsTxOMXXgm/UCK/sER+EYLsuuEPOODfrf+vh4ceIei/bogo70iSyJIoDtxQkbhNJOI2UZXcdiUiv8hEftGU8KtM5BeFyC+6ZTdEBAdEhR4NenTDDTHkHVMSSxLbgRuqELeJSdwmjpLbrkrkF4vIL64SftWI/GIT+cWz7IYY4IA40ONCj2e4Ib68E0gSShI5cEN14jYJiNskVnLbNYj8EhL5JVHCryaRXyIiv6SW3RAfHJAYehLoSQ03JJN3ckkKSUoHbqhF3CY5cZtUSm67NpFfCiK/1Er41SHyS0nkl8ayG5KBA1JBTw09jeGGtPJOJ0kvyeDADXWJ26QjbpNRyW3XI/JLT+SXSQm/+kR+GYj8Mlt2Q1pwQEbomaBnNtyQRd5ZJdkk2R24oQFxm6zEbXIoue2GRH7ZiPxyKuHXiMgvO5FfLstuyAIOyAE9J/RchhtyyzuPJK8knwM3NCZuk4e4TX4lt92EyC8vkV8BJfyaEvnlI/IraNkNucEB+aEXgF7QcEMheReWFJEUdeCGZsRtChO38VBy282J/IoQ+RVTwq8FkV9RIr/ilt1QCBzgAb0Y9OKGG0rIu6Sk1L9vc+CGlsRtShK38VRy262I/EoR+ZVRwq81kV9pIr+ylt1QAhzgCb0M9LKGG8rJu7ykgsTLgRvaELcpT9zGW8lttyXyq0Dk56OEXzsiPy8iP1/LbigHDvCG7gPd13CDn7z9JQGSQAduaE/cxp+4TZCS2+5A5BdA5BeshF9HIr9AIr8Qy27wAwcEQQ+GHmK4IVTeFSWVJJUduKETcZuKxG2qKLntzkR+lYj8qirh14XIrzKRXzXLbggFB1SBXhV6NcMN1eVdQ1JTUsuBG7oSt6lB3Ka2ktvuRuRXk8ivjhJ+3Yn8ahH51bXshurggNrQ60Cva7ihnrzrSxpIGjpwQw/iNvWJ2zRScts9ifwaEPk1VsKvF5FfQyK/JpbdUA8c0Ah6Y+hNDDc0lXczSXNJCwdu6E3cphlxm5ZKbrsPkV9zIr9WSvj1JfJrQeTX2rIbmoIDWkJvBb214YY28m4raSdp78AN/YjbtCVu00HJbfcn8mtH5NdRCb8BRH7tifw6WXZDG3BAB+gdoXcy3NBZ3l0kXSXdHLhhIHGbLsRtuiu57UFEfl2J/Hoo4TeYyK8bkV9Py27oDA7oDr0H9J6GG3rJu7ekj6SvAzcMIW7Tm7hNPyW3PZTIrw+RX38l/IYR+fUl8htg2Q29wAH9oPeHPsBww0B5D5IMlgxx4IbhxG0GEbcZquS2RxD5DSbyG6aE30givyFEfsMtu2EgOGAo9GHQhxtuGCHvkZJRktEO3DCKuM1I4jZjlNz2aCK/UUR+Y5XwG0PkN5rIb5xlN4wAB4yBPhb6OMMN4+U9QTJRMsmBG8YSt5lA3GayktseR+Q3kchvihJ+44n8JhH5TbXshvHggMnQp0CfarhhmrynS2ZIZjpwwwTiNtOJ28xSctsTifxmEPnNVsJvEpHfTCK/OZbdMA0cMAv6bOhzDDfMlfc8yXzJAgdumEzcZh5xm4VKbnsKkd98Ir9FSvhNJfJbQOS32LIb5oIDFkJfBH2x4YYl8l4qWSZZ7sAN04jbLCVus0LJbU8n8ltG5LdSCb8ZRH7LifxWWXbDEnDACugroa8y3LBa3mskayXrHLhhJnGbNcRt1iu57VlEfmuJ/DYo4TebyG8dkd9Gy25YDQ5YD30D9I2GGzbJe7Nki2SrAzfMIW6zmbjNNiW3PZfIbwuR33Yl/OYR+W0l8tth2Q2bwAHboG+HvsNww05575Lsluxx4Ib5xG12EbfZq+S2FxD57Sby26eE30Iivz1Efvstu2EnOGAv9H3Q9xtuOCDvg5JDksMO3LCIuM1B4jZHlNz2YiK/Q0R+R5XwW0Lkd5jI75hlNxwABxyBfhT6McMNx+V9QnJScsqBG5YStzlB3Oa0ktteRuR3ksjvjBJ+y4n8ThH5nbXshuPggNPQz0A/a7jhnLzPSy5ILjpwwwriNueJ21xSctsrifwuEPldVsJvFZHfRSK/K5bdcA4ccAn6ZehXDDdclfc1yXXJDQduWE3c5hpxm5tKbnsNkd91Ir9bSvitJfK7QeR327IbroIDbkK/Bf224YY78r4ruSe578AN64jb3CVu80DJba8n8rtH5PdQCb8NRH73ifweWXbDHXDAA+gPoT8y3PBY3k8kTyXPHLhhI3GbJ8Rtniu57U1Efk+J/F4o4beZyO8Zkd9Ly254DA54Dv0F9JeGG17J+7XkjeStAzdsIW7zmrjNOyW3vZXI7w2R33sl/LYR+b0l8vtg2Q2vwAHvoL+H/sFww0d5f5J8lnxx4IbtxG0+Ebf5quS2dxD5fSby+6aE304ivy9Eft8tu+EjOOAr9G/Qvxtu+CHvn5Jfkt8O3LCLuM1P4jZ/lNz2biK/X0R+f5Xw20Pk95vIL0ywXTf8AAf8gf4X+r9vQDeElXc4SXhJhGD7bthL3CZcMG+biME6bnsfkV94Ir9ISvjtJ/KLQOQX2bIbwgb/vwMiQo8EPbLhhijyjiqJJonuwA0HiNtEJW4TQ8ltHyTyi0bkF1MJv0NEftGJ/GJZdkMUcEAM6DGhxzLcEFvecSRxJfEcuOEwcZs4xG3iK7ntI0R+cYn8Eijhd5TILx6RX0LLbogNDogPPQH0hIYbEsk7sSSJJKkDNxwjbpOYuE0yJbd9nMgvCZFfciX8ThD5JSXyS2HZDYnAAcmgJ4eewnBDSnmnkqSWpHHghpPEbVIRt0mr5LZPEfmlJvJLp4TfaSK/NER+6S27ISU4IC30dNDTG27IIO+MkkySzA7ccIa4TUbiNlmU3PZZIr9MRH5ZlfA7R+SXmcgvm2U3ZAAHZIGeFXo2ww3Z5Z1DklOSy4EbzhO3yUHcJreS275A5JeTyC+PEn4XifxyEfnlteyG7OCA3NDzQM9ruCGfvPNLCkgKOnDDJeI2+YnbFFJy25eJ/AoQ+RVWwu8KkV9BIr8ilt2QDxxQCHph6EUMNxSVt4ekmKS4AzdcJW7jQdymhJLbvkbkV4zIr6QSfteJ/IoT+ZWy7Iai4IAS0EtCL2W4obS8PSVlJGUduOEGcRtP4jbllNz2TSK/MkR+5ZXwu0XkV5bIr4JlN5QGB5SDXh56BcMNXvL2lvhIfB244TZxG2/iNn5KbvsOkZ8PkZ+/En53ifx8ifwCLLvBCxzgB90feoDhhkB5B0mCJSEO3HCPuE0QcZtQJbd9n8gvmMivohJ+D4j8Qoj8Kll2QyA4IBR6ReiVDDdUlncVSVVJNQdueEjcpgpxm+pKbvsRkV9VIr8aSvg9JvKrRuRX07IbKoMDqkOvAb2m4YZa8q4tqSOp68ANT4jb1CZuU0/JbT8l8qtD5FdfCb9nRH51ifwaWHZDLXBAPej1oTcw3NBQ3o0kjSVNHLjhOXGbRsRtmiq57RdEfo2J/Jop4feSyK8JkV9zy25oCA5oCr0Z9OaGG1rIu6WklaS1Aze8Im7TkrhNGyW3/ZrIrxWRX1sl/N4Q+bUm8mtn2Q0twAFtoLeF3s5wQ3t5d5B0lHRy4Ia3xG06ELfprOS23xH5dSTy66KE33siv05Efl0tu6E9OKAz9C7Quxpu6Cbv7pIekp4O3PCBuE134ja9lNz2RyK/HkR+vZXw+0Tk15PIr49lN3QDB/SC3ht6H8MNfeXdT9JfMsCBGz4Tt+lH3Gagktv+QuTXn8hvkBJ+X4n8BhD5Dbbshr7ggIHQB0EfbLhhiLyHSoZJhjtwwzfiNkOJ24xQctvfifyGEfmNVMLvB5HfcCK/UZbdMAQcMAL6SOijDDeMlvcYyVjJOAdu+EncZgxxm/FKbvsXkd9YIr8JSvj9JvIbR+Q30bIbRoMDxkOfAH2i4YZJ8p4smSKZ6sANf4jbTCZuM03Jbf8l8ptC5DddCb8wsXi/ayqR3wzLbpgEDpgGfTr0GYYbZsp7lmS2ZI4DN4QlbjOLuM1cJbcdjshvNpHfPCX8whP5zSHym2/ZDTPBAXOhz4M+33DDAnkvlCySLHbghgjEbRYSt1mi5LYjEvktIvJbqoRfJCK/xUR+yyy7YQE4YAn0pdCXGW5YLu8VkpWSVQ7cEJm4zQriNquV3HYUIr+VRH5rlPCLSuS3ishvrWU3LAcHrIa+Bvpaww3r5L1eskGy0YEbohG3WU/cZpOS245O5LeByG+zEn4xiPw2EvltseyGdeCATdA3Q99iuGGrvLdJtkt2OHBDTOI224jb7FRy27GI/LYT+e1Swi82kd8OIr/dlt2wFRywE/ou6LsNN+yR917JPsl+B26IQ9xmL3GbA0puOy6R3z4iv4NK+MUj8ttP5HfIshv2gAMOQD8I/ZDhhsPyPiI5KjnmwA3xidscIW5zXMltJyDyO0rkd0IJv4REfseI/E5adsNhcMBx6CegnzTccErepyVnJGcduCERcZvTxG3OKbntxER+Z4j8zivhl4TI7yyR3wXLbjgFDjgH/Tz0C4YbLsr7kuSy5IoDNyQlbnOJuM1VJbedjMjvMpHfNSX8khP5XSHyu27ZDRfBAVehX4N+3XDDDXnflNyS3HbghhTEbW4St7mj5LZTEvndIvK7q4RfKiK/20R+9yy74QY44A70u9DvGW64L+8HkoeSRw7ckJq4zQPiNo+V3HYaIr+HRH5PlPBLS+T3iMjvqWU33AcHPIb+BPpTww3P5P1c8kLy0oEb0hG3eU7c5pWS205P5PeCyO+1En4ZiPxeEvm9seyGZ+CAV9BfQ39juOGtvN9J3ks+OHBDRuI274jbfFRy25mI/N4T+X1Swi8zkd8HIr/Plt3wFhzwEfon6J8NN3yR91fJN8l3B27IQtzmK3GbH0puOyuR3zciv59K+GUj8vtO5PfLshu+gAN+QP8J/Zfhht//3pK/kjAh9t2QnbjNH+I2YUN03HYOIr+/RH7hlPDLSeQXJoTHL3yIXTf8Bgf8u/X/9XDQw4f81w0R5B1REkkS2YEbchG3iUjcJoqS285N5BeJyC+qEn55iPwiE/lFs+yGCOCAKNCjQo9muCG6vGNIYkpiOXBDXuI2MYjbxFZy2/mI/GIS+cVRwi8/kV8sIr+4lt0QHRwQG3oc6HENN8STd3xJAklCB24oQNwmPnGbREpuuyCRXwIiv8RK+BUi8ktI5JfEshvigQMSQU8MPYnhhqTyTiZJLknhwA2FidskI26TUsltFyHyS07kl0oJv6JEfimI/FJbdkNScEBK6KmgpzbckEbeaSXpJOkduMGDuE1a4jYZlNx2MSK/dER+GZXwK07kl57IL5NlN6QBB2SAnhF6JsMNmeWdRZJVks2BG0oQt8lC3Ca7ktsuSeSXlcgvhxJ+pYj8shH55bTshszggOzQc0DPabghl7xzS/JI8jpwQ2niNrmJ2+RTctueRH55iPzyK+FXhsgvL5FfActuyAUOyAc9P/QChhsKyruQpLCkiAM3lCVuU4i4TVElt12OyK8wkZ+HEn7lifyKEPkVs+yGguCAotA9oBcz3FBc3iUkJSWlHLihAnGbEsRtSiu5bS8iv5JEfp5K+HkT+ZUi8itj2Q3FwQGloXtCL2O4oay8y0nKSyo4cIMPcZtyxG28lNy2L5FfeSI/byX8/Ij8KhD5+Vh2Q1lwgBd0b+g+hht85e0n8ZcEOHCDP3EbP+I2gUpuO4DIz5/IL0gJv0AivwAiv2DLbvAFBwRCD4IebLghRN6hkoqSSg7cEETcJpS4TWUltx1M5FeRyK+KEn4hRH6ViPyqWnZDCDigMvQq0Ksabqgm7+qSGpKaDtwQStymOnGbWkpuuyKRXw0iv9pK+FUi8qtJ5FfHshuqgQNqQa8NvY7hhrryriepL2ngwA2VidvUI27TUMltVyHyq0/k10gJv6pEfg2I/BpbdkNdcEBD6I2gNzbc0ETeTSXNJM0duKEacZumxG1aKLnt6kR+zYj8WirhV4PIrzmRXyvLbmgCDmgBvSX0VoYbWsu7jaStpJ0DN9QkbtOGuE17Jbddi8ivLZFfByX8ahP5tSPy62jZDa3BAe2hd4De0XBDJ3l3lnSRdHXghjrEbToTt+mm5LbrEvl1IfLrroRfPSK/rkR+PSy7oRM4oBv07tB7GG7oKe9ekt6SPg7cUJ+4TS/iNn2V3HYDIr/eRH79lPBrSOTXh8ivv2U39AQH9IXeD3p/ww0D5D1QMkgy2IEbGhG3GUjcZoiS225M5DeIyG+oEn5NiPwGE/kNs+yGAeCAIdCHQh9muGG4vEdIRkpGOXBDU+I2I4jbjFZy282I/EYS+Y1Rwq85kd8oIr+xlt0wHBwwGvoY6GMNN4yT93jJBMlEB25oQdxmPHGbSUpuuyWR3wQiv8lK+LUi8ptI5DfFshvGgQMmQZ8MfYrhhqnyniaZLpnhwA2tidtMI24zU8lttyHym07kN0sJv7ZEfjOI/GZbdsNUcMBM6LOgzzbcMEfecyXzJPMduKEdcZu5xG0WKLnt9kR+84j8Firh14HIbz6R3yLLbpgDDlgAfSH0RYYbFst7iWSpZJkDN3QkbrOEuM1yJbfdichvKZHfCiX8OhP5LSPyW2nZDYvBAcuhr4C+0nDDKnmvlqyRrHXghi7EbVYTt1mn5La7EvmtIfJbr4RfNyK/tUR+Gyy7YRU4YB309dA3GG7YKO9Nks2SLQ7c0J24zSbiNluV3HYPIr/NRH7blPDrSeS3hchvu2U3bAQHbIW+Dfp2ww075L1Tskuy24EbehG32UncZo+S2+5N5LeLyG+vEn59iPx2E/nts+yGHeCAPdD3Qt9nuGG/vA9IDkoOOXBDX+I2B4jbHFZy2/2I/A4S+R1Rwq8/kd8hIr+jlt2wHxxwGPoR6EcNNxyT93HJCclJB24YQNzmOHGbU0pueyCR3wkiv9NK+A0i8jtJ5HfGshuOgQNOQT8N/YzhhrPyPic5L7ngwA2DiducI25zUcltDyHyO0/kd0kJv6FEfheI/C5bdsNZcMBF6JegXzbccEXeVyXXJNcduGEYcZurxG1uKLnt4UR+14j8birhN4LI7zqR3y3LbrgCDrgB/Sb0W4Ybbsv7juSu5J4DN4wkbnOHuM19Jbc9isjvLpHfAyX8RhP53SPye2jZDbfBAfehP4D+0HDDI3k/ljyRPHXghjHEbR4Tt3mm5LbHEvk9IfJ7roTfOCK/p0R+Lyy74RE44Bn059BfGG54Ke9XkteSNw7cMJ64zSviNm+V3PYEIr/XRH7vlPCbSOT3hsjvvWU3vAQHvIX+Dvp7ww0f5P1R8kny2YEbJhG3+Ujc5ouS255M5PeJyO+rEn5TiPw+E/l9s+yGD+CAL9C/Qv9muOG7vH9Ifkp+OXDDVOI2P4jb/FZy29OI/H4S+f1Rwm86kd8vIr+/lt3wHRzwG/of6H8NN4QJDRsmrCScJHyofTfMIG7z77tZ20QI1XHbM4n8whH5RVTCbxaRX3giv0ihdt3w7+/8fw6IAD0i9Eih/3VDZHlHkUSVRHPghtnEbaIQt4mu5LbnEPlFJfKLoYTfXCK/aER+MS27ITI4IDr0GNBjGm6IJe/YkjiSuA7cMI+4TWziNvGU3PZ8Ir84RH7xlfBbQOQXl8gvgWU3xAIHxIMeH3oCww0J5Z1IkliSxIEbFhK3SUTcJqmS215E5JeYyC+ZEn6LifySEPklt+yGhOCApNCTQU9uuCGFvFNKUklSO3DDEuI2KYnbpFFy20uJ/FIR+aVVwm8ZkV9qIr90lt2QAhyQBnpa6OkMN6SXdwZJRkkmB25YTtwmA3GbzEpuewWRX0YivyxK+K0k8stE5JfVshvSgwMyQ88CPavhhmzyzi7JIcnpwA2riNtkJ26TS8ltrybyy0Hkl1sJvzVEfjmJ/PJYdkM2cEAu6Lmh5zHckFfe+ST5JQUcuGEtcZt8xG0KKrntdUR++Yn8Cinht57IrwCRX2HLbsgLDigIvRD0woYbisi7qMRDUsyBGzYQtylK3Ka4ktveSOTnQeRXQgm/TUR+xYj8Slp2QxFwQHHoJaCXNNxQ6t83STwlZRy4YTNxm9LEbcoque0tRH6eRH7llPDbSuRXhsivvGU3lAIHlIVeDnp5ww0V5O0l8Zb4OHDDNuI2XsRtfJXc9nYiP28iPz8l/HYQ+fkQ+flbdkMFcIAvdD/o/oYbAuQdKAmSBDtww07iNoHEbUKU3PYuIr8gIr9QJfx2E/kFE/lVtOyGAHBACPRQ6BUNN1SSd2VJFUlVB27YQ9ymMnGbakpuey+RXxUiv+pK+O0j8qtK5FfDshsqgQOqQa8OvYbhhpryriWpLanjwA37idvUIm5TV8ltHyDyq03kV08Jv4NEfnWI/OpbdsP/UWMOQZp23RLtatu2bds2q1Gtstq2bdu2bdu2bRt39+CPm98Z5zkRe5AReWrwxhMrd69Be4EDWkBvCd3bcIOPvH0lfhJ/B244RNzGl7hNgJLbPkzk50fkF6iE3xEiP38ivyDLbvABBwRAD4QeZLghWN4hklBJKwduOErcJoS4TWslt32MyC+UyK+NEn7HifxaEfm1teyGYHBAa+htoLc13NBO3u0lHSQdHbjhBHGb9sRtOim57ZNEfh2I/Dor4XeKyK8jkV8Xy25oBw7oBL0z9C6GG7rKu5uku6SHAzecJm7TjbhNTyW3fYbIrzuRXy8l/M4S+fUg8utt2Q1dwQE9ofeC3ttwQx9595X0k/R34IZzxG36ErcZoOS2zxP59SPyG6iE3wUiv/5EfoMsu6EPOGAA9IHQBxluGCzvIZKhkmEO3HCRuM0Q4jbDldz2JSK/oUR+I5Twu0zkN4zIb6RlNwwGBwyHPgL6SMMNo+Q9WjJGMtaBG64QtxlN3Gacktu+SuQ3hshvvBJ+14j8xhL5TbDshlHggHHQx0OfYLhhorwnSSZLpjhww3XiNpOI20xVcts3iPwmE/lNU8LvJpHfFCK/6ZbdMBEcMBX6NOjTDTfMkPdMySzJbAduuEXcZiZxmzlKbvs2kd8sIr+5SvjdIfKbTeQ3z7IbZoAD5kCfC32e4Yb58l4gWShZ5MANd4nbLCBus1jJbd8j8ltI5LdECb/7RH6LiPyWWnbDfHDAYuhLoC813LBM3sslKyQrHbjhAXGb5cRtVim57YdEfiuI/FYr4feIyG8lkd8ay25YBg5YBX019DWGG9bKe51kvWSDAzc8Jm6zjrjNRiW3/YTIbz2R3yYl/J4S+W0g8tts2Q1rwQEboW+CvtlwwxZ5b5Vsk2x34IZnxG22ErfZoeS2nxP5bSPy26mE3wsiv+1Efrssu2ELOGAH9J3Qdxlu2C3vPZK9kn0O3PCSuM0e4jb7ldz2KyK/vUR+B5Twe03kt4/I76BlN+wGB+yHfgD6QcMNh+R9WHJEctSBG94QtzlM3OaYktt+S+R3hMjvuBJ+74j8jhL5nbDshkPggGPQj0M/YbjhpLxPSU5Lzjhww3viNqeI25xVctsfiPxOE/mdU8LvI5HfGSK/85bdcBIccBb6OejnDTdckPdFySXJZQdu+ETc5iJxmytKbvszkd8lIr+rSvh9IfK7TOR3zbIbLoADrkC/Cv2a4Ybr8r4huSm55cANX4nb3CBuc1vJbX8j8rtJ5HdHCb/vRH63iPzuWnbDdXDAbeh3oN813HBP3vclDyQPHbjhB3Gb+8RtHim57Z9Efg+I/B4r4feLyO8hkd8Ty264Bw54BP0x9CeGG57K+5nkueSFAzf8Jm7zjLjNSyW3/YfI7zmR3ysl/P4S+b0g8ntt2Q1PwQEvob+C/tpwwxt5v5W8k7x34IYwsYj/Z0/c5oOS2/Yg8ntH5PdRCb+wRH7vifw+WXbDG3DAB+gfoX8y3PBZ3l8kXyXfHLghHHGbL8Rtviu57fBEfl+J/H4o4ReByO8bkd9Py274DA74Dv0H9J+GG37J+/e/v0n+OnBDROI2v4nbhKmn47YjEfn9IfLzUMIvMpHfXyK/sPXsuuEXOODfrf+ve0APW++/bggn7/CSCJKI9ey7IQpxm/D1eNtEUnLbUYn8IhD5RVbCLxqRX0QivyiW3RAOHBAJemToUQw3RJV3NEl0SQwHbohO3CYacZuYSm47BpFfdCK/WEr4xSTyi0HkF9uyG6KCA2JCjwU9tuGGOPKOK4knie/ADbGI28QlbpNAyW3HJvKLR+SXUAm/OER+8Yn8Ell2QxxwQALoCaEnMtyQWN5JJEklyRy4IS5xmyTEbZIrue14RH5JifxSKOEXn8gvGZFfSstuSAwOSA49BfSUhhtSyTu1JI0krQM3JCBuk5q4TTolt52QyC8NkV96JfwSEfmlJfLLYNkNqcAB6aCnh57BcENGeWeSZJZkceCGxMRtMhG3yarktpMQ+WUm8sumhF9SIr8sRH7ZLbshIzggK/Rs0LMbbsgh75ySXJLcDtyQjLhNTuI2eZTcdnIiv1xEfnmV8EtB5JebyC+fZTfkAAfkgZ4Xej7DDfnlXUBSUFLIgRtSErcpQNymsJLbTkXkV5DIr4gSfqmJ/AoR+RW17Ib84IDC0ItAL2q4oZi8i0tKSEo6cEMa4jbFiduUUnLbaYn8ShD5lVbCLx2RX0kivzKW3VAMHFAKemnoZQw3lJV3OUl5SQUHbkhP3KYccZuKSm47A5FfeSK/Skr4ZSTyq0DkV9myG8qCAypCrwS9suGGKvKuKqkmqe7ADZmI21QlblNDyW1nJvKrRuRXUwm/LER+1Yn8all2QxVwQA3oNaHXMtxQW951JHUl9Ry4IStxmzrEbeorue1sRH51ifwaKOGXncivHpGfp2U31AYH1IfeALqn4YaG8m4kaSxp4sANOYjbNCJu46XktnMS+TUm8muqhF8uIr8mRH7NLLuhITjAC3pT6M0MNzSXdwtJS4m3AzfkJm7TgriNj5LbzkPk15LIz1cJv7xEft5Efn6W3dAcHOAD3Re6n+EGf3kHSAIlQQ7ckI+4TQBxm2Alt52fyC+QyC9ECb8CRH5BRH6hlt3gDw4Ihh4CPdRwQyt5t5a0kbR14IaCxG1aE7dpp+S2CxH5tSHya6+EX2Eiv7ZEfh0su6EVOKAd9PbQOxhu6CjvTpLOki4O3FCEuE0n4jZdldx2USK/zkR+3ZTwK0bk14XIr7tlN3QEB3SF3g16d8MNPeTdU9JL0tuBG4oTt+lJ3KaPktsuQeTXi8ivrxJ+JYn8ehP59bPshh7ggD7Q+0LvZ7ihv7wHSAZKBjlwQyniNgOI2wxWctulifwGEvkNUcKvDJHfICK/oZbd0B8cMBj6EOhDDTcMk/dwyQjJSAduKEvcZjhxm1FKbrsckd8IIr/RSviVJ/IbSeQ3xrIbhoEDRkEfDX2M4Yax8h4nGS+Z4MANFYjbjCNuM1HJbVck8htP5DdJCb9KRH4TiPwmW3bDWHDAROiToE823DBF3lMl0yTTHbihMnGbqcRtZii57SpEftOI/GYq4VeVyG86kd8sy26YAg6YAX0m9FmGG2bLe45krmSeAzdUI24zh7jNfCW3XZ3Iby6R3wIl/GoQ+c0j8lto2Q2zwQHzoS+AvtBwwyJ5L5YskSx14IaaxG0WE7dZpuS2axH5LSHyW66EX20iv6VEfissu2EROGAZ9OXQVxhuWCnvVZLVkjUO3FCHuM0q4jZrldx2XSK/1UR+65Twq0fkt4bIb71lN6wEB6yFvg76esMNG+S9UbJJstmBG+oTt9lI3GaLkttuQOS3ichvqxJ+nkR+m4n8tll2wwZwwBboW6FvM9ywXd47JDsluxy4oSFxmx3EbXYrue1GRH47ifz2KOHXmMhvF5HfXstu2A4O2A19D/S9hhv2yXu/5IDkoAM3NCFus5+4zSElt+1F5HeAyO+wEn5NifwOEvkdseyGfeCAQ9APQz9iuOGovI9JjktOOHBDM+I2x4jbnFRy282J/I4T+Z1Swq8Fkd8JIr/Tlt1wFBxwEvop6KcNN5yR91nJOcl5B25oSdzmLHGbC0pu25vI7xyR30Ul/HyI/M4T+V2y7IYz4IAL0C9Cv2S44bK8r0iuSq45cIMvcZsrxG2uK7ltPyK/q0R+N5Tw8yfyu0bkd9OyGy6DA65DvwH9puGGW/K+LbkjuevADQHEbW4Tt7mn5LYDifzuEPndV8IviMjvLpHfA8tuuAUOuAf9PvQHhhseyvuR5LHkiQM3BBO3eUTc5qmS2w4h8ntM5PdMCb9QIr8nRH7PLbvhITjgKfRn0J8bbngh75eSV5LXDtzQirjNS+I2b5Tcdmsiv1dEfm+V8GtD5PeayO+dZTe8AAe8gf4W+jvDDe/l/UHyUfLJgRvaErf5QNzms5Lbbkfk95HI74sSfu2J/D4R+X217Ib34IDP0L9A/2q44Zu8v0t+SH46cEMH4jbfidv8UnLbHYn8fhD5/VbCrxOR308ivz+W3fANHPAL+m/ofww3/JV3mPoeYTwkYevbd0Nn4jb/vpu1Tbj6Om67C5GfB5FfeCX8uhL5hSXyi1Dfrhv+ggP+3fr/enjoEer/1w0R5R1JElkSxYEbuhG3iUTcJqqS2+5O5BeZyC+aEn49iPyiEPlFt+yGiOCAqNCjQY9uuCGGvGNKYkliO3BDT+I2MYnbxFFy272I/GIR+cVVwq83kV9sIr94lt0QAxwQB3pc6PEMN8SXdwJJQkkiB27oQ9wmAXGbxEpuuy+RX0IivyRK+PUj8ktE5JfUshvigwMSQ08CPanhhmTyTi5JIUnpwA39idskJ26TSsltDyDyS0Hkl1oJv4FEfimJ/NJYdkMycEAq6KmhpzHckFbe6STpJRkcuGEQcZt0xG0yKrntwUR+6Yn8MinhN4TILwORX2bLbkgLDsgIPRP0zIYbssg7qySbJLsDNwwlbpOVuE0OJbc9jMgvG5FfTiX8hhP5ZSfyy2XZDVnAATmg54Sey3BDbnnnkeSV5HPghhHEbfIQt8mv5LZHEvnlJfIroITfKCK/fER+BS27ITc4ID/0AtALGm4oJO/CkiKSog7cMJq4TWHiNsWU3PYYIr8iRH7FlfAbS+RXlMivhGU3FAIHFINeHHoJww0l5V3q33dJyjhwwzjiNqWI25RVctvjifxKE/mVU8JvApFfGSK/8pbdUBIcUBZ6OejlDTdUkHdFSSVJZQdumEjcpiJxmypKbnsSkV8lIr+qSvhNJvKrTORXzbIbKoADqkCvCr2a4Ybq8q4hqSmp5cANU4jb1CBuU1vJbU8l8qtJ5FdHCb9pRH61iPzqWnZDdXBAbeh1oNc13FBP3vUlDSSeDtwwnbhNfeI2DZXc9gwivwZEfo2U8JtJ5OdJ5NfYshvqgQMaQm8EvbHhhiby9pI0lTRz4IZZxG28iNs0V3Lbs4n8mhL5tVDCbw6RXzMiv5aW3dAEHNAcegvoLQ03eMvbR+Ir8XPghrnEbXyI2/grue15RH6+RH4BSvjNJ/LzI/ILtOwGb3CAP/QA6IGGG4LkHSwJkYQ6cMMC4jbBxG1aKbnthUR+IUR+rZXwW0TkF0rk18ayG4LAAa2gt4bexnBDW3m3k7SXdHDghsXEbdoRt+mo5LaXEPm1J/LrpITfUiK/DkR+nS27oS04oCP0TtA7G27oIu+ukm6S7g7csIy4TVfiNj2U3PZyIr9uRH49lfBbQeTXncivl2U3dAEH9IDeE3ovww295d1H0lfSz4EbVhK36UPcpr+S215F5NeXyG+AEn6rifz6EfkNtOyG3uCA/tAHQB9ouGGQvAdLhkiGOnDDGuI2g4nbDFNy22uJ/IYQ+Q1Xwm8dkd9QIr8Rlt0wCBwwDPpw6CMMN4yU9yjJaMkYB25YT9xmFHGbsUpuewOR32giv3FK+G0k8htD5DfeshtGggPGQh8HfbzhhgnyniiZJJnswA2biNtMJG4zRcltbybym0TkN1UJvy1EfpOJ/KZZdsMEcMAU6FOhTzPcMF3eMyQzJbMcuGErcZsZxG1mK7ntbUR+M4n85ijht53IbxaR31zLbpgODpgNfQ70uYYb5sl7vmSBZKEDN+wgbjOfuM0iJbe9k8hvAZHfYiX8dhH5LSTyW2LZDfPAAYugL4a+xHDDUnkvkyyXrHDght3EbZYRt1mp5Lb3EPktJ/JbpYTfXiK/FUR+qy27YSk4YCX0VdBXG25YI++1knWS9Q7csI+4zVriNhuU3PZ+Ir91RH4blfA7QOS3nshvk2U3rAEHbIC+Efomww2b5b1FslWyzYEbDhK32ULcZruS2z5E5LeVyG+HEn6Hify2EfnttOyGzeCA7dB3QN9puGGXvHdL9kj2OnDDEeI2u4nb7FNy20eJ/PYQ+e1Xwu8Ykd9eIr8Dlt2wCxywD/p+6AcMNxyU9yHJYckRB244TtzmEHGbo0pu+wSR32Eiv2NK+J0k8jtC5HfcshsOggOOQj8G/bjhhhPyPik5JTntwA2niNucJG5zRsltnybyO0Xkd1YJvzNEfqeJ/M5ZdsMJcMAZ6GehnzPccF7eFyQXJZccuOEscZsLxG0uK7ntc0R+F4n8rijhd57I7xKR31XLbjgPDrgM/Qr0q4Ybrsn7uuSG5KYDN1wgbnOduM0tJbd9kcjvBpHfbSX8LhH53STyu2PZDdfAAbeg34Z+x3DDXXnfk9yXPHDghsvEbe4Rt3mo5LavEPndJ/J7pITfVSK/B0R+jy274S444CH0R9AfG254Iu+nkmeS5w7ccI24zVPiNi+U3PZ1Ir9nRH4vlfC7QeT3nMjvlWU3PAEHvID+Evorww2v5f1G8lbyzoEbbhK3eUPc5r2S275F5PeWyO+DEn63ifzeEfl9tOyG1+CA99A/QP9ouOGTvD9Lvki+OnDDHeI2n4nbfFNy23eJ/L4Q+X1Xwu8ekd9XIr8flt3wCRzwDfp36D8MN/yU9y/J739/d+CG+8RtfhG3+avkth8Q+f0m8gvTQAe/h0R+f4j8PBrYdcNPcMBf6P92+1/3aPBfN4SVdzhJeEmEBvbd8Ii4TbgGvG0iKrntx0R+4Yn8Iinh94TILwKRX2TLbggLDogIPRL0yIYbosg7qiSaJLoDNzwlbhOVuE0MJbf9jMgvGpFfTCX8nhP5RSfyi2XZDVHAATGgx4Qey3BDbHnHkcSVxHPghhfEbeIQt4mv5LZfEvnFJfJLoITfKyK/eER+CS27ITY4ID70BNATGm5IJO/EkiSSpA7c8Jq4TWLiNsmU3PYbIr8kRH7JlfB7S+SXlMgvhWU3JAIHJIOeHHoKww0p5Z1KklqSxoEb3hG3SUXcJq2S235P5JeayC+dEn4fiPzSEPmlt+yGlOCAtNDTQU9vuCGDvDNKMkkyO3DDR+I2GYnbZFFy25+I/DIR+WVVwu8zkV9mIr9slt2QARyQBXpW6NkMN2SXdw5JTkkuB274QtwmB3Gb3Epu+yuRX04ivzxK+H0j8stF5JfXshuygwNyQ88DPa/hhnzyzi8pICnowA3fidvkJ25TSMlt/yDyK0DkV1gJv59EfgWJ/IpYdkM+cEAh6IWhFzHcUFTexSTFJSUcuOEXcZtixG1KKrnt30R+xYn8Sinh94fIrwSRX2nLbigKDigJvRT00oYbysi7rKScpLwDN/wlblOWuE0FJbcdJjbvt8oR+VVUws+DyK88kV8ly24oAw6oAL0i9EqGGyrLu4qkqqSaAzeEJW5ThbhNdSW3HY7IryqRXw0l/MIT+VUj8qtp2Q2VwQHVodeAXtNwQy1515bUkdR14IYIxG1qE7epp+S2IxL51SHyq6+EXyQiv7pEfg0su6EWOKAe9PrQGxhu8JR3Q0kjSWMHbohM3KYhcZsmSm47CpFfIyI/LyX8ohL5NSbya2rZDZ7ggCbQvaA3NdzQTN7NJS0kLR24IRpxm+bEbbyV3HZ0Ir8WRH4+SvjFIPJrSeTna9kNzcAB3tB9oPsabvCTt78kQBLowA0xidv4E7cJUnLbsYj8Aoj8gpXwi03kF0jkF2LZDX7ggCDowdBDDDeEyruVpLWkjQM3xCFu04q4TVsltx2XyK81kV87JfziEfm1IfJrb9kNoeCAttDbQW9vuKGDvDtKOkk6O3BDfOI2HYnbdFFy2wmI/DoR+XVVwi8hkV9nIr9ult3QARzQBXpX6N0MN3SXdw9JT0kvB25IRNymB3Gb3kpuOzGRX08ivz5K+CUh8utF5NfXshu6gwN6Q+8Dva/hhn7y7i8ZIBnowA1Jidv0J24zSMltJyPyG0DkN1gJv+REfgOJ/IZYdkM/cMAg6IOhDzHcMFTewyTDJSMcuCEFcZthxG1GKrntlER+w4n8Rinhl4rIbwSR32jLbhgKDhgJfRT00YYbxsh7rGScZLwDN6QmbjOWuM0EJbedhshvHJHfRCX80hL5jSfym2TZDWPAAROgT4Q+yXDDZHlPkUyVTHPghnTEbaYQt5mu5LbTE/lNJfKboYRfBiK/aUR+My27YTI4YDr0GdBnGm6YJe/ZkjmSuQ7ckJG4zWziNvOU3HYmIr85RH7zlfDLTOQ3l8hvgWU3zAIHzIM+H/oCww0L5b1IsliyxIEbshC3WUTcZqmS285K5LeYyG+ZEn7ZiPyWEPktt+yGheCApdCXQV9uuGGFvFdKVklWO3BDduI2K4nbrFFy2zmI/FYR+a1Vwi8nkd9qIr91lt2wAhywBvpa6OsMN6yX9wbJRskmB27IRdxmA3GbzUpuOzeR30Yivy1K+OUh8ttE5LfVshvWgwM2Q98Cfavhhm3y3i7ZIdnpwA15idtsJ26zS8lt5yPy20Hkt1sJv/xEfjuJ/PZYdsM2cMAu6Luh7zHcsFfe+yT7JQccuKEAcZt9xG0OKrntgkR++4n8DinhV4jI7wCR32HLbtgLDjgI/RD0w4Ybjsj7qOSY5LgDNxQmbnOUuM0JJbddhMjvGJHfSSX8ihL5HSfyO2XZDUfAASegn4R+ynDDaXmfkZyVnHPghmLEbc4Qtzmv5LaLE/mdJfK7oIRfCSK/c0R+Fy274TQ44Dz0C9AvGm64JO/LkiuSqw7cUJK4zWXiNteU3HYpIr8rRH7XlfArTeR3lcjvhmU3XAIHXIN+HfoNww035X1Lcltyx4EbyhC3uUXc5q6S2y5L5HebyO+eEn7liPzuEPndt+yGm+CAu9DvQb9vuOGBvB9KHkkeO3BDeeI2D4nbPFFy2xWI/B4R+T1Vwq8ikd9jIr9nlt3wABzwBPpT6M8MNzyX9wvJS8krB26oRNzmBXGb10puuzKR30sivzdK+FUh8ntF5PfWshuegwNeQ38D/a3hhnfyfi/5IPnowA1Vidu8J27zScltVyPy+0Dk91kJv+pEfh+J/L5YdsM7cMAn6J+hfzHc8FXe3yTfJT8cuKEGcZtvxG1+KrntmkR+34n8finhV4vI7weR32/LbvgKDvgJ/Rf034Yb/sj7rySMp0cYD0/7bqhN3OYvcZuwnjpuuw6RXxhPHr9wSvjVJfLzIPIL72nXDX/AAf9u/X89HPTwnv91QwR5R5REkkR24IZ6xG0iEreJouS26xP5RSLyi6qEXwMiv8hEftEsuyECOCAK9KjQoxluiC7vGJKYklgO3OBJ3CYGcZvYSm67IZFfTCK/OEr4NSLyi0XkF9eyG6KDA2JDjwM9ruGGePKOL0kgSejADY2J28QnbpNIyW03IfJLQOSXWAk/LyK/hER+SSy7IR44IBH0xNCTGG5IKu9kkuSSFA7c0JS4TTLiNimV3HYzIr/kRH6plPBrTuSXgsgvtWU3JAUHpISeCnpqww1p5J1Wkk6S3oEbWhC3SUvcJoOS225J5JeOyC+jEn7eRH7pifwyWXZDGnBABugZoWcy3JBZ3lkkWSXZHLjBh7hNFuI22ZXcti+RX1YivxxK+PkR+WUj8stp2Q2ZwQHZoeeAntNwQy5555bkkeR14AZ/4ja5idvkU3LbAUR+eYj88ivhF0jkl5fIr4BlN+QCB+SDnh96AcMNBeVdSFJYUsSBG4KI2xQiblNUyW0HE/kVJvIrpoRfCJFfESK/4pbdUBAcUBR6MejFDTeUkHdJSal/3+bADaHEbUoStymj5LZbEfmVIvIrq4RfayK/0kR+5Sy7oQQ4oAz0stDLGW4oL+8KkoqSSg7c0Ia4TQXiNpWV3HZbIr+KRH5VlPBrR+RXicivqmU3lAcHVIZeBXpVww3V5F1dUkNS04Eb2hO3qU7cppaS2+5A5FeDyK+2En4difxqEvnVseyGauCAWtBrQ69juKGuvOtJ6ksaOHBDJ+I29YjbeCq57c5EfvWJ/Boq4deFyK8BkV8jy26oCw7whN4QeiPDDY3l3UTiJWnqwA1dids0IW7TTMltdyPy8yLya66EX3civ6ZEfi0su6ExOKAZ9ObQWxhuaClvb4mPxNeBG3oQt/EmbuOn5LZ7Evn5EPn5K+HXi8jPl8gvwLIbWoID/KD7Qw8w3BAo7yBJsCTEgRt6E7cJIm4TquS2+xD5BRP5tVLCry+RXwiRX2vLbggEB4RCbwW9teGGNvJuK2knae/ADf2I27QlbtNByW33J/JrR+TXUQm/AUR+7Yn8Oll2QxtwQAfoHaF3MtzQWd5dJF0l3Ry4YSBxmy7Ebborue1BRH5difx6KOE3mMivG5FfT8tu6AwO6A69B/Sehht6ybu3pI+krwM3DCFu05u4TT8ltz2UyK8PkV9/JfyGEfn1JfIbYNkNvcAB/aD3hz7AcMNAeQ+SDJYMceCG4cRtBhG3GarktkcQ+Q0m8humhN9IIr8hRH7DLbthIDhgKPRh0Icbbhgh75GSUZLRDtwwirjNSOI2Y5Tc9mgiv1FEfmOV8BtD5DeayG+cZTeMAAeMgT4W+jjDDePlPUEyUTLJgRvGEreZQNxmspLbHkfkN5HIb4oSfuOJ/CYR+U217Ibx4IDJ0KdAn2q4YZq8p0tmSGY6cMME4jbTidvMUnLbE4n8ZhD5zVbCbxKR30wivzmW3TANHDAL+mzocww3zJX3PMl8yQIHbphM3GYecZuFSm57CpHffCK/RUr4TSXyW0Dkt9iyG+aCAxZCXwR9seGGJfJeKlkmWe7ADdOI2ywlbrNCyW1PJ/JbRuS3Ugm/GUR+y4n8Vll2wxJwwAroK6GvMtywWt5rJGsl6xy4YSZxmzXEbdYrue1ZRH5rifw2KOE3m8hvHZHfRstuWA0OWA99A/SNhhs2yXuzZItkqwM3zCFus5m4zTYltz2XyG8Lkd92JfzmEfltJfLbYdkNm8AB26Bvh77DcMNOee+S7JbsceCG+cRtdhG32avkthcQ+e0m8tunhN9CIr89RH77LbthJzhgL/R90Pcbbjgg74OSQ5LDDtywiLjNQeI2R5Tc9mIiv0NEfkeV8FtC5HeYyO+YZTccAAccgX4U+jHDDcflfUJyUnLKgRuWErc5QdzmtJLbXkbkd5LI74wSfsuJ/E4R+Z217Ibj4IDT0M9AP2u44Zy8z0suSC46cMMK4jbnidtcUnLbK4n8LhD5XVbCbxWR30UivyuW3XAOHHAJ+mXoVww3XJX3Ncl1yQ0HblhN3OYacZubSm57DZHfdSK/W0r4rSXyu0Hkd9uyG66CA25CvwX9tuGGO/K+K7knue/ADeuI29wlbvNAyW2vJ/K7R+T3UAm/DUR+94n8Hll2wx1wwAPoD6E/MtzwWN5PJE8lzxy4YSNxmyfEbZ4rue1NRH5PifxeKOG3mcjvGZHfS8tueAwOeA79BfSXhhteyfu15I3krQM3bCFu85q4zTslt72VyO8Nkd97Jfy2Efm9JfL7YNkNr8AB76C/h/7BcMNHeX+SfJZ8ceCG7cRtPhG3+arktncQ+X0m8vumhN9OIr8vRH7fLbvhIzjgK/Rv0L8bbvgh75+SX5LfDtywi7jNT+I2f5Tc9m4iv19Efn+V8NtD5PebyC9MQ7tu+AEO+AP9L/R/34Bu8JB3WEk4SfiG9t2wl7hN2Ia8bSI01HHb+4j8whH5RVTCbz+RX3giv0iW3eDR8P8dEAF6ROiRDDdElncUSVRJNAduOEDcJgpxm+hKbvsgkV9UIr8YSvgdIvKLRuQX07IbIoMDokOPAT2m4YZY8o4tiSOJ68ANh4nbxCZuE0/JbR8h8otD5BdfCb+jRH5xifwSWHZDLHBAPOjxoScw3JBQ3okkiSVJHLjhGHGbRMRtkiq57eNEfomJ/JIp4XeCyC8JkV9yy25ICA5ICj0Z9OSGG1LIO6UklSS1AzecJG6TkrhNGiW3fYrILxWRX1ol/E4T+aUm8ktn2Q0pwAFpoKeFns5wQ3p5Z5BklGRy4IYzxG0yELfJrOS2zxL5ZSTyy6KE3zkiv0xEflktuyE9OCAz9CzQsxpuyCbv7JIckpwO3HCeuE124ja5lNz2BSK/HER+uZXwu0jkl5PIL49lN2QDB+SCnht6HsMNeeWdT5JfUsCBGy4Rt8lH3Kagktu+TOSXn8ivkBJ+V4j8ChD5FbbshrzggILQC0EvbLihiLyLSopJijtww1XiNkWJ25RQctvXiPyKEfmVVMLvOpFfcSK/UpbdUAQcUAJ6SeilDDeUlncZSVlJOQduuEHcpgxxm/JKbvsmkV9ZIr8KSvjdIvIrR+RX0bIbSoMDykOvAL2i4YZK8q4sqSKp6sANt4nbVCZuU03Jbd8h8qtC5FddCb+7RH5VifxqWHZDJXBANejVodcw3FBT3rUktSV1HLjhHnGbWsRt6iq57ftEfrWJ/Oop4feAyK8OkV99y26oCQ6oC70e9PqGGxrI21PSUNLIgRseErfxJG7TWMltPyLya0jk10QJv8dEfo2I/Lwsu6EBOKAx9CbQvQw3NJV3M0lzSQsHbnhC3KYZcZuWSm77KZFfcyI/byX8nhH5tSDy87HshqbggJbQvaH7GG7wlbefxF8S4MANz4nb+BG3CVRy2y+I/PyJ/IKU8HtJ5BdA5Bds2Q2+4IBA6EHQgw03hMg7VNJK0tqBG14RtwklbtNGyW2/JvJrReTXVgm/N0R+rYn82ll2Qwg4oA30ttDbGW5oL+8Oko6STg7c8Ja4TQfiNp2V3PY7Ir+ORH5dlPB7T+TXicivq2U3tAcHdIbeBXpXww3d5N1d0kPS04EbPhC36U7cppeS2/5I5NeDyK+3En6fiPx6Evn1seyGbuCAXtB7Q+9juKGvvPtJ+ksGOHDDZ+I2/YjbDFRy21+I/PoT+Q1Swu8rkd8AIr/Blt3QFxwwEPog6IMNNwyR91DJMMlwB274RtxmKHGbEUpu+zuR3zAiv5FK+P0g8htO5DfKshuGgANGQB8JfZThhtHyHiMZKxnnwA0/iduMIW4zXslt/yLyG0vkN0EJv99EfuOI/CZadsNocMB46BOgTzTcMEnekyVTJFMduOEPcZvJxG2mKbntv0R+U4j8pivhFyYO77emEvnNsOyGSeCAadCnQ59huGGmvGdJZkvmOHCDB3GbWcRt5iq57bBEfrOJ/OYp4ReOyG8Okd98y26YCQ6YC30e9PmGGxbIe6FkkWSxAzeEJ26zkLjNEiW3HYHIbxGR31Il/CIS+S0m8ltm2Q0LwAFLoC+Fvsxww3J5r5CslKxy4IZIxG1WELdZreS2IxP5rSTyW6OEXxQiv1VEfmstu2E5OGA19DXQ1xpuWCfv9ZINko0O3BCVuM164jablNx2NCK/DUR+m5Xwi07kt5HIb4tlN6wDB2yCvhn6FsMNW+W9TbJdssOBG2IQt9lG3GanktuOSeS3nchvlxJ+sYj8dhD57bbshq3ggJ3Qd0Hfbbhhj7z3SvZJ9jtwQ2ziNnuJ2xxQcttxiPz2EfkdVMIvLpHffiK/Q5bdsAcccAD6QeiHDDcclvcRyVHJMQduiEfc5ghxm+NKbjs+kd9RIr8TSvglIPI7RuR30rIbDoMDjkM/Af2k4YZT8j4tOSM568ANCYnbnCZuc07JbSci8jtD5HdeCb/ERH5nifwuWHbDKXDAOejnoV8w3HBR3pcklyVXHLghCXGbS8Rtriq57aREfpeJ/K4p4ZeMyO8Kkd91y264CA64Cv0a9OuGG27I+6bkluS2AzckJ25zk7jNHSW3nYLI7xaR310l/FIS+d0m8rtn2Q03wAF3oN+Ffs9ww315P5A8lDxy4IZUxG0eELd5rOS2UxP5PSTye6KEXxoiv0dEfk8tu+E+OOAx9CfQnxpueCbv55IXkpcO3JCWuM1z4javlNx2OiK/F0R+r5XwS0/k95LI741lNzwDB7yC/hr6G8MNb+X9TvJe8sGBGzIQt3lH3OajktvOSOT3nsjvkxJ+mYj8PhD5fbbshrfggI/QP0H/bLjhi7y/Sr5JvjtwQ2biNl+J2/xQcttZiPy+Efn9VMIvK5HfdyK/X5bd8AUc8AP6T+i/DDf8/veW/JWEaWTfDdmI2/whbuPRSMdtZyfy+0vkF1YJvxxEfmEa8fiFa2TXDb/BAf9u/X89LPRwjf7rhvDyjiCJKInkwA05idtEIG4TWclt5yLyi0jkF0UJv9xEfpGI/KJadkN4cEBk6FGgRzXcEE3e0SUxJDEduCEPcZvoxG1iKbntvER+MYj8Yivhl4/ILyaRXxzLbogGDogFPTb0OIYb4so7niS+JIEDN+QnbhOPuE1CJbddgMgvPpFfIiX8ChL5JSDyS2zZDXHBAQmhJ4Ke2HBDEnknlSSTJHfghkLEbZISt0mh5LYLE/klI/JLqYRfESK/5ER+qSy7IQk4IAX0lNBTGW5ILe80krSSdA7cUJS4TRriNumV3HYxIr+0RH4ZlPArTuSXjsgvo2U3pAYHpIeeAXpGww2Z5J1ZkkWS1YEbShC3yUzcJpuS2y5J5JeFyC+7En6liPyyEvnlsOyGTOCAbNCzQ89huCGnvHNJckvyOHBDaeI2uYjb5FVy22WI/HIT+eVTwq8skV8eIr/8lt2QExyQF3o+6PkNNxSQd0FJIUlhB24oR9ymIHGbIkpuuzyRXyEiv6JK+FUg8itM5FfMshsKgAOKQC8KvZjhhuLyLiEpKSnlwA0ViduUIG5TWsltVyLyK0nkV0YJv8pEfqWI/MpadkNxcEBp6GWglzXcUE7e5SUVJBUduKEKcZvyxG0qKbntqkR+FYj8KivhV43IryKRXxXLbigHDqgEvTL0KoYbqsq7mqS6pIYDN1QnblONuE1NJbddg8ivOpFfLSX8ahL51SDyq23ZDVXBATWh14Je23BDHXnXldST1HfghlrEbeoSt2mg5LZrE/nVI/LzVMKvDpFffSK/hpbdUAcc0AC6J/SGhhsaybuxpInEy4Eb6hK3aUzcpqmS265H5NeEyK+ZEn71ify8iPyaW3ZDI3BAU+jNoDc33NBC3i0l3hIfB25oQNymJXEbXyW37Unk503k56eEX0MiPx8iP3/LbmgBDvCF7gfd33BDgLwDJUGSYAduaETcJpC4TYiS225M5BdE5BeqhF8TIr9gIr9Wlt0QAA4IgR4KvZXhhtbybiNpK2nnwA1exG3aELdpr+S2mxL5tSXy66CEXzMiv3ZEfh0tu6E1OKA99A7QOxpu6CTvzpIukq4O3NCcuE1n4jbdlNx2CyK/LkR+3ZXwa0nk15XIr4dlN3QCB3SD3h16D8MNPeXdS9Jb0seBG7yJ2/QibtNXyW37EPn1JvLrp4SfL5FfHyK//pbd0BMc0Bd6P+j9DTcMkPdAySDJYAdu8CNuM5C4zRAlt+1P5DeIyG+oEn4BRH6DifyGWXbDAHDAEOhDoQ8z3DBc3iMkIyWjHLghkLjNCOI2o5XcdhCR30givzFK+AUT+Y0i8htr2Q3DwQGjoY+BPtZwwzh5j5dMkEx04IYQ4jbjidtMUnLboUR+E4j8Jivh14rIbyKR3xTLbhgHDpgEfTL0KYYbpsp7mmS6ZIYDN7QmbjONuM1MJbfdhshvOpHfLCX82hL5zSDym23ZDVPBATOhz4I+23DDHHnPlcyTzHfghnbEbeYSt1mg5LbbE/nNI/JbqIRfByK/+UR+iyy7YQ44YAH0hdAXGW5YLO8lkqWSZQ7c0JG4zRLiNsuV3HYnIr+lRH4rlPDrTOS3jMhvpWU3LAYHLIe+AvpKww2r5L1askay1oEbuhC3WU3cZp2S2+5K5LeGyG+9En7diPzWEvltsOyGVeCAddDXQ99guGGjvDdJNku2OHBDd+I2m4jbbFVy2z2I/DYT+W1Twq8nkd8WIr/tlt2wERywFfo26NsNN+yQ907JLsluB27oRdxmJ3GbPUpuuzeR3y4iv71K+PUh8ttN5LfPsht2gAP2QN8LfZ/hhv3yPiA5KDnkwA19idscIG5zWMlt9yPyO0jkd0QJv/5EfoeI/I5adsN+cMBh6EegHzXccEzexyUnJCcduGEAcZvjxG1OKbntgUR+J4j8TivhN4jI7ySR3xnLbjgGDjgF/TT0M4Ybzsr7nOS85IIDNwwmbnOOuM1FJbc9hMjvPJHfJSX8hhL5XSDyu2zZDWfBARehX4J+2XDDFXlflVyTXHfghmHEba4St7mh5LaHE/ldI/K7qYTfCCK/60R+tyy74Qo44Ab0m9BvGW64Le87kruSew7cMJK4zR3iNveV3PYoIr+7RH4PlPAbTeR3j8jvoWU33AYH3If+APpDww2P5P1Y8kTy1IEbxhC3eUzc5pmS2x5L5PeEyO+5En7jiPyeEvm9sOyGR+CAZ9CfQ39huOGlvF9JXkveOHDDeOI2r4jbvFVy2xOI/F4T+b1Twm8ikd8bIr/3lt3wEhzwFvo76O8NN3yQ90fJJ8lnB26YRNzmI3GbL0puezKR3yciv69K+E0h8vtM5PfNshs+gAO+QP8K/Zvhhu/y/iH5KfnlwA1Tidv8IG7zW8ltTyPy+0nk90cJv+lEfr+I/P5adsN3cMBv6H+g/zXcEKaxRxgPSVhJuMb23TCDuM2/72ZtE76xjtueSeQXlsgvghJ+s4j8whH5RWxs1w3//p3/zwHhoUeAHrHxf90QSd6RJVEkUR24YTZxm8jEbaIpue05RH5RiPyiK+E3l8gvKpFfDMtuiAQOiAY9OvQYhhtiyjuWJLYkjgM3zCNuE4u4TVwltz2fyC82kV88JfwWEPnFIfKLb9kNMcEBcaHHgx7fcEMCeSeUJJIkduCGhcRtEhK3SaLkthcR+SUi8kuqhN9iIr/ERH7JLLshATggCfSk0JMZbkgu7xSSlJJUDtywhLhNCuI2qZXc9lIiv5REfmmU8FtG5JeKyC+tZTckBwekhp4GelrDDenknV6SQZLRgRuWE7dJT9wmk5LbXkHkl4HIL7MSfiuJ/DIS+WWx7IZ04IBM0DNDz2K4Iau8s0myS3I4cMMq4jbZiNvkVHLbq4n8shP55VLCbw2RXw4iv9yW3ZAVHJATei7ouQ035JF3Xkk+SX4HblhL3CYvcZsCSm57HZFfPiK/gkr4rSfyy0/kV8iyG/KAAwpALwi9kOGGwvIuIikqKebADRuI2xQhblNcyW1vJPIrSuRXQgm/TUR+xYj8Slp2Q2FwQHHoJaCXNNxQ6t83ScpIyjpww2biNqWJ25RTcttbiPzKEPmVV8JvK5FfWSK/CpbdUAocUA56eegVDDdUlHclSWVJFQdu2EbcphJxm6pKbns7kV9lIr9qSvjtIPKrQuRX3bIbKoIDqkKvBr264YYa8q4pqSWp7cANO4nb1CRuU0fJbe8i8qtF5FdXCb/dRH61ifzqWXZDDXBAHeh1odcz3FBf3g0knpKGDtywh7hNA+I2jZTc9l4iP08iv8ZK+O0j8mtI5NfEshvqgwMaQW8MvYnhBi95N5U0kzR34Ib9xG2aErdpoeS2DxD5NSPya6mE30Eiv+ZEft6W3eAFDmgBvSV0b8MNPvL2lfhJ/B244RBxG1/iNgFKbvswkZ8fkV+gEn5HiPz8ifyCLLvBBxwQAD0QepDhhmB5h0hCJa0cuOEocZsQ4jatldz2MSK/UCK/Nkr4HSfya0Xk19ayG4LBAa2ht4He1nBDO3m3l3SQdHTghhPEbdoTt+mk5LZPEvl1IPLrrITfKSK/jkR+XSy7oR04oBP0ztC7GG7oKu9uku6SHg7ccJq4TTfiNj2V3PYZIr/uRH69lPA7S+TXg8ivt2U3dAUH9ITeC3pvww195N1X0k/S34EbzhG36UvcZoCS2z5P5NePyG+gEn4XiPz6E/kNsuyGPuCAAdAHQh9kuGGwvIdIhkqGOXDDReI2Q4jbDFdy25eI/IYS+Y1Qwu8ykd8wIr+Rlt0wGBwwHPoI6CMNN4yS92jJGMlYB264QtxmNHGbcUpu+yqR3xgiv/FK+F0j8htL5DfBshtGgQPGQR8PfYLhhonyniSZLJniwA3XidtMIm4zVclt3yDym0zkN00Jv5tEflOI/KZbdsNEcMBU6NOgTzfcMEPeMyWzJLMduOEWcZuZxG3mKLnt20R+s4j85irhd4fIbzaR3zzLbpgBDpgDfS70eYYb5st7gWShZJEDN9wlbrOAuM1iJbd9j8hvIZHfEiX87hP5LSLyW2rZDfPBAYuhL4G+1HDDMnkvl6yQrHTghgfEbZYTt1ml5LYfEvmtIPJbrYTfIyK/lUR+ayy7YRk4YBX01dDXGG5YK+91kvWSDQ7c8Ji4zTriNhuV3PYTIr/1RH6blPB7SuS3gchvs2U3rAUHbIS+Cfpmww1b5L1Vsk2y3YEbnhG32UrcZoeS235O5LeNyG+nEn4viPy2E/ntsuyGLeCAHdB3Qt9luGG3vPdI9kr2OXDDS+I2e4jb7Fdy26+I/PYS+R1Qwu81kd8+Ir+Dlt2wGxywH/oB6AcNNxyS92HJEclRB254Q9zmMHGbY0pu+y2R3xEiv+NK+L0j8jtK5HfCshsOgQOOQT8O/YThhpPyPiU5LTnjwA3viducIm5zVsltfyDyO03kd04Jv49EfmeI/M5bdsNJcMBZ6OegnzfccEHeFyWXJJcduOETcZuLxG2uKLntz0R+l4j8rirh94XI7zKR3zXLbrgADrgC/Sr0a4Ybrsv7huSm5JYDN3wlbnODuM1tJbf9jcjvJpHfHSX8vhP53SLyu2vZDdfBAbeh34F+13DDPXnflzyQPHTghh/Ebe4Tt3mk5LZ/Evk9IPJ7rITfLyK/h0R+Tyy74R444BH0x9CfGG54Ku9nkueSFw7c8Ju4zTPiNi+V3PYfIr/nRH6vlPD7S+T3gsjvtWU3PAUHvIT+Cvprww1v5P1W8k7y3oEb/n0067feErf5oOS2PYj83hH5fVTCLyyR33siv0+W3fAGHPAB+kfonww3fJb3F8lXyTcHbghH3OYLcZvvSm47PJHfVyK/H0r4RSDy+0bk99OyGz6DA75D/wH9p+GGX/L+/e9vkr8O3BCRuM1v4jZhmui47UhEfn+I/DyU8ItM5PeXyC9sE7tu+AUO+Hfr/+se0MM2+a8bwsk7vCSCJGIT+26IQtwmfBPeNpGU3HZUIr8IRH6RlfCLRuQXkcgvimU3hAMHRIIeGXoUww1R5R1NEl0Sw4EbohO3iUbcJqaS245B5BedyC+WEn4xifxiEPnFtuyGqOCAmNBjQY9tuCGOvONK4kniO3BDLOI2cYnbJFBy27GJ/OIR+SVUwi8OkV98Ir9Elt0QBxyQAHpC6IkMNySWdxJJUkkyB26IS9wmCXGb5EpuOx6RX1IivxRK+MUn8ktG5JfSshsSgwOSQ08BPaXhhlTyTi1JI0nrwA0JiNukJm6TTsltJyTyS0Pkl14Jv0REfmmJ/DJYdkMqcEA66OmhZzDckFHemSSZJVkcuCExcZtMxG2yKrntJER+mYn8sinhl5TILwuRX3bLbsgIDsgKPRv07IYbcsg7pySXJLcDNyQjbpOTuE0eJbednMgvF5FfXiX8UhD55Sbyy2fZDTnAAXmg54Wez3BDfnkXkBSUFHLghpTEbQoQtyms5LZTEfkVJPIrooRfaiK/QkR+RS27IT84oDD0ItCLGm4oJu/ikhKSkg7ckIa4TXHiNqWU3HZaIr8SRH6llfBLR+RXksivjGU3FAMHlIJeGnoZww1l5V1OUl5SwYEb0hO3KUfcpqKS285A5FeeyK+SEn4ZifwqEPlVtuyGsuCAitArQa9suKGKvKtKqkmqO3BDJuI2VYnb1FBy25mJ/KoR+dVUwi8LkV91Ir9alt1QBRxQA3pN6LUMN9SWdx1JXUk9B27IStymDnGb+kpuOxuRX10ivwZK+GUn8qtH5Odp2Q21wQH1oTeA7mm4oaG8G0kaS5o4cEMO4jaNiNt4KbntnER+jYn8mirhl4vIrwmRXzPLbmgIDvCC3hR6M8MNzeXdQtJS4u3ADbmJ27QgbuOj5LbzEPm1JPLzVcIvL5GfN5Gfn2U3NAcH+ED3he5nuMFf3gGSQEmQAzfkI24TQNwmWMlt5yfyCyTyC1HCrwCRXxCRX6hlN/iDA4Khh0APNdzQSt6tJW0kbR24oSBxm9bEbdopue1CRH5tiPzaK+FXmMivLZFfB8tuaAUOaAe9PfQOhhs6yruTpLOkiwM3FCFu04m4TVclt12UyK8zkV83JfyKEfl1IfLrbtkNHcEBXaF3g97dcEMPefeU9JL0duCG4sRtehK36aPktksQ+fUi8uurhF9JIr/eRH79LLuhBzigD/S+0PsZbugv7wGSgZJBDtxQirjNAOI2g5Xcdmkiv4FEfkOU8CtD5DeIyG+oZTf0BwcMhj4E+lDDDcPkPVwyQjLSgRvKErcZTtxmlJLbLkfkN4LIb7QSfuWJ/EYS+Y2x7IZh4IBR0EdDH2O4Yay8x0nGSyY4cEMF4jbjiNtMVHLbFYn8xhP5TVLCrxKR3wQiv8mW3TAWHDAR+iTokw03TJH3VMk0yXQHbqhM3GYqcZsZSm67CpHfNCK/mUr4VSXym07kN8uyG6aAA2ZAnwl9luGG2fKeI5krmefADdWI28whbjNfyW1XJ/KbS+S3QAm/GkR+84j8Flp2w2xwwHzoC6AvNNywSN6LJUskSx24oSZxm8XEbZYpue1aRH5LiPyWK+FXm8hvKZHfCstuWAQOWAZ9OfQVhhtWynuVZLVkjQM31CFus4q4zVolt12XyG81kd86JfzqEfmtIfJbb9kNK8EBa6Gvg77ecMMGeW+UbJJsduCG+sRtNhK32aLkthsQ+W0i8tuqhJ8nkd9mIr9tlt2wARywBfpW6NsMN2yX9w7JTskuB25oSNxmB3Gb3UpuuxGR304ivz1K+DUm8ttF5LfXshu2gwN2Q98Dfa/hhn3y3i85IDnowA1NiNvsJ25zSMltexH5HSDyO6yEX1Miv4NEfkcsu2EfOOAQ9MPQjxhuOCrvY5LjkhMO3NCMuM0x4jYnldx2cyK/40R+p5Twa0Hkd4LI77RlNxwFB5yEfgr6acMNZ+R9VnJOct6BG1oStzlL3OaCktv2JvI7R+R3UQk/HyK/80R+lyy74Qw44AL0i9AvGW64LO8rkquSaw7c4Evc5gpxm+tKbtuPyO8qkd8NJfz8ifyuEfndtOyGy+CA69BvQL9puOGWvG9L7kjuOnBDAHGb28Rt7im57UAivztEfveV8Asi8rtL5PfAshtugQPuQb8P/YHhhofyfiR5LHniwA3BxG0eEbd5quS2Q4j8HhP5PVPCL5TI7wmR33PLbngIDngK/Rn054YbXsj7peSV5LUDN7QibvOSuM0bJbfdmsjvFZHfWyX82hD5vSbye2fZDS/AAW+gv4X+znDDe3l/kHyUfHLghrbEbT4Qt/ms5LbbEfl9JPL7ooRfeyK/T0R+Xy274T044DP0L9C/Gm74Ju/vkh+Snw7c0IG4zXfiNr+U3HZHIr8fRH6/lfDrROT3k8jvj2U3fAMH/IL+G/ofww1/5R3GyyOMhySsl303dCZu8++7WduE89Jx212I/DyI/MIr4deVyC8skV8EL7tu+AsO+Hfr/+vhoUfw+q8bIso7kiSyJIoDN3QjbhOJuE1UJbfdncgvMpFfNCX8ehD5RSHyi27ZDRHBAVGhR4Me3XBDDHnHlMSSxHbghp7EbWISt4mj5LZ7EfnFIvKLq4RfbyK/2ER+8Sy7IQY4IA70uNDjGW6IL+8EkoSSRA7c0Ie4TQLiNomV3HZfIr+ERH5JlPDrR+SXiMgvqWU3xAcHJIaeBHpSww3J5J1ckkKS0oEb+hO3SU7cJpWS2x5A5JeCyC+1En4DifxSEvmlseyGZOCAVNBTQ09juCGtvNNJ0ksyOHDDIOI26YjbZFRy24OJ/NIT+WVSwm8IkV8GIr/Mlt2QFhyQEXom6JkNN2SRd1ZJNkl2B24YStwmK3GbHEpuexiRXzYiv5xK+A0n8stO5JfLshuygANyQM8JPZfhhtzyziPJK8nnwA0jiNvkIW6TX8ltjyTyy0vkV0AJv1FEfvmI/ApadkNucEB+6AWgFzTcUEjehSVFJEUduGE0cZvCxG2KKbntMUR+RYj8iivhN5bIryiRXwnLbigEDigGvTj0EoYbSsq71L/vkpRx4IZxxG1KEbcpq+S2xxP5lSbyK6eE3wQivzJEfuUtu6EkOKAs9HLQyxtuqCDvipJKksoO3DCRuE1F4jZVlNz2JCK/SkR+VZXwm0zkV5nIr5plN1QAB1SBXhV6NcMN1eVdQ1JTUsuBG6YQt6lB3Ka2ktueSuRXk8ivjhJ+04j8ahH51bXshurggNrQ60Cva7ihnrzrSxpIPB24YTpxm/rEbRoque0ZRH4NiPwaKeE3k8jPk8ivsWU31AMHNITeCHpjww1N5O0laSpp5sANs4jbeBG3aa7ktmcT+TUl8muhhN8cIr9mRH4tLbuhCTigOfQW0FsabvCWt4/EV+LnwA1zidv4ELfxV3Lb84j8fIn8ApTwm0/k50fkF2jZDd7gAH/oAdADDTcEyTtYEiIJdeCGBcRtgonbtFJy2wuJ/EKI/For4beIyC+UyK+NZTcEgQNaQW8NvY3hhrbybidpL+ngwA2Lidu0I27TUcltLyHya0/k10kJv6VEfh2I/DpbdkNbcEBH6J2gdzbc0EXeXSXdJN0duGEZcZuuxG16KLnt5UR+3Yj8eirht4LIrzuRXy/LbugCDugBvSf0XoYbesu7j6SvpJ8DN6wkbtOHuE1/Jbe9isivL5HfACX8VhP59SPyG2jZDb3BAf2hD4A+0HDDIHkPlgyRDHXghjXEbQYTtxmm5LbXEvkNIfIbroTfOiK/oUR+Iyy7YRA4YBj04dBHGG4YKe9RktGSMQ7csJ64zSjiNmOV3PYGIr/RRH7jlPDbSOQ3hshvvGU3jAQHjIU+Dvp4ww0T5D1RMkky2YEbNhG3mUjcZoqS295M5DeJyG+qEn5biPwmE/lNs+yGCeCAKdCnQp9muGG6vGdIZkpmOXDDVuI2M4jbzFZy29uI/GYS+c1Rwm87kd8sIr+5lt0wHRwwG/oc6HMNN8yT93zJAslCB27YQdxmPnGbRUpueyeR3wIiv8VK+O0i8ltI5LfEshvmgQMWQV8MfYnhhqXyXiZZLlnhwA27idssI26zUslt7yHyW07kt0oJv71EfiuI/FZbdsNScMBK6KugrzbcsEbeayXrJOsduGEfcZu1xG02KLnt/UR+64j8Nirhd4DIbz2R3ybLblgDDtgAfSP0TYYbNst7i2SrZJsDNxwkbrOFuM12Jbd9iMhvK5HfDiX8DhP5bSPy22nZDZvBAduh74C+03DDLnnvluyR7HXghiPEbXYTt9mn5LaPEvntIfLbr4TfMSK/vUR+Byy7YRc4YB/0/dAPGG44KO9DksOSIw7ccJy4zSHiNkeV3PYJIr/DRH7HlPA7SeR3hMjvuGU3HAQHHIV+DPpxww0n5H1Sckpy2oEbThG3OUnc5oyS2z5N5HeKyO+sEn5niPxOE/mds+yGE+CAM9DPQj9nuOG8vC9ILkouOXDDWeI2F4jbXFZy2+eI/C4S+V1Rwu88kd8lIr+rlt1wHhxwGfoV6FcNN1yT93XJDclNB264QNzmOnGbW0pu+yKR3w0iv9tK+F0i8rtJ5HfHshuugQNuQb8N/Y7hhrvyvie5L3ngwA2XidvcI27zUMltXyHyu0/k90gJv6tEfg+I/B5bdsNdcMBD6I+gPzbc8ETeTyXPJM8duOEacZunxG1eKLnt60R+z4j8Xirhd4PI7zmR3yvLbngCDngB/SX0V4YbXsv7jeSt5J0DN9wkbvOGuM17Jbd9i8jvLZHfByX8bhP5vSPy+2jZDa/BAe+hf4D+0XDDJ3l/lnyRfHXghjvEbT4Tt/mm5LbvEvl9IfL7roTfPSK/r0R+Pyy74RM44Bv079B/GG74Ke9fkt///u7ADfeJ2/wibvNXyW0/IPL7TeQXpqkOfg+J/P4Q+Xk0teuGn+CAv9D/7fa/7tH0v24IK+9wkvCSCE3tu+ERcZtwTXnbRFRy24+J/MIT+UVSwu8JkV8EIr/Ilt0QFhwQEXok6JENN0SRd1RJNEl0B254StwmKnGbGEpu+xmRXzQiv5hK+D0n8otO5BfLshuigANiQI8JPZbhhtjyjiOJK4nnwA0viNvEIW4TX8ltvyTyi0vkl0AJv1dEfvGI/BJadkNscEB86AmgJzTckEjeiSVJJEkduOE1cZvExG2SKbntN0R+SYj8kivh95bILymRXwrLbkgEDkgGPTn0FIYbUso7lSS1JI0DN7wjbpOKuE1aJbf9nsgvNZFfOiX8PhD5pSHyS2/ZDSnBAWmhp4Oe3nBDBnlnlGSSZHbgho/EbTISt8mi5LY/EfllIvLLqoTfZyK/zER+2Sy7IQM4IAv0rNCzGW7ILu8ckpySXA7c8IW4TQ7iNrmV3PZXIr+cRH55lPD7RuSXi8gvr2U3ZAcH5IaeB3peww355J1fUkBS0IEbvhO3yU/cppCS2/5B5FeAyK+wEn4/ifwKEvkVseyGfOCAQtALQy9iuKGovItJiktKOHDDL+I2xYjblFRy27+J/IoT+ZVSwu8PkV8JIr/Slt1QFBxQEnop6KUNN5SRd1lJOUl5B274S9ymLHGbCkpuO0w83m+VI/KrqISfB5FfeSK/SpbdUAYcUAF6ReiVDDdUlncVSVVJNQduCEvcpgpxm+pKbjsckV9VIr8aSviFJ/KrRuRX07IbKoMDqkOvAb2m4YZa8q4tqSOp68ANEYjb1CZuU0/JbUck8qtD5FdfCb9IRH51ifwaWHZDLXBAPej1oTcw3OAp74aSRpLGDtwQmbhNQ+I2TZTcdhQiv0ZEfl5K+EUl8mtM5NfUshs8wQFNoHtBb2q4oZm8m0taSFo6cEM04jbNidt4K7nt6ER+LYj8fJTwi0Hk15LIz9eyG5qBA7yh+0D3NdzgJ29/SYAk0IEbYhK38SduE6TktmMR+QUQ+QUr4RebyC+QyC/Eshv8wAFB0IOhhxhuCJV3K0lrSRsHbohD3KYVcZu2Sm47LpFfayK/dkr4xSPya0Pk196yG0LBAW2ht4Pe3nBDB3l3lHSSdHbghvjEbToSt+mi5LYTEPl1IvLrqoRfQiK/zkR+3Sy7oQM4oAv0rtC7GW7oLu8ekp6SXg7ckIi4TQ/iNr2V3HZiIr+eRH59lPBLQuTXi8ivr2U3dAcH9IbeB3pfww395N1fMkAy0IEbkhK36U/cZpCS205G5DeAyG+wEn7JifwGEvkNseyGfuCAQdAHQx9iuGGovIdJhktGOHBDCuI2w4jbjFRy2ymJ/IYT+Y1Swi8Vkd8IIr/Rlt0wFBwwEvoo6KMNN4yR91jJOMl4B25ITdxmLHGbCUpuOw2R3zgiv4lK+KUl8htP5DfJshvGgAMmQJ8IfZLhhsnyniKZKpnmwA3piNtMIW4zXcltpyfym0rkN0MJvwxEftOI/GZadsNkcMB06DOgzzTcMEvesyVzJHMduCEjcZvZxG3mKbntTER+c4j85ivhl5nIby6R3wLLbpgFDpgHfT70BYYbFsp7kWSxZIkDN2QhbrOIuM1SJbedlchvMZHfMiX8shH5LSHyW27ZDQvBAUuhL4O+3HDDCnmvlKySrHbghuzEbVYSt1mj5LZzEPmtIvJbq4RfTiK/1UR+6yy7YQU4YA30tdDXGW5YL+8Nko2STQ7ckIu4zQbiNpuV3HZuIr+NRH5blPDLQ+S3ichvq2U3rAcHbIa+BfpWww3b5L1dskOy04Eb8hK32U7cZpeS285H5LeDyG+3En75ifx2EvntseyGbeCAXdB3Q99juGGvvPdJ9ksOOHBDAeI2+4jbHFRy2wWJ/PYT+R1Swq8Qkd8BIr/Dlt2wFxxwEPoh6IcNNxyR91HJMclxB24oTNzmKHGbE0puuwiR3zEiv5NK+BUl8jtO5HfKshuOgANOQD8J/ZThhtPyPiM5KznnwA3FiNucIW5zXsltFyfyO0vkd0EJvxJEfueI/C5adsNpcMB56BegXzTccEnelyVXJFcduKEkcZvLxG2uKbntUkR+V4j8rivhV5rI7yqR3w3LbrgEDrgG/Tr0G4Ybbsr7luS25I4DN5QhbnOLuM1dJbddlsjvNpHfPSX8yhH53SHyu2/ZDTfBAXeh34N+33DDA3k/lDySPHbghvLEbR4St3mi5LYrEPk9IvJ7qoRfRSK/x0R+zyy74QE44An0p9CfGW54Lu8XkpeSVw7cUIm4zQviNq+V3HZlIr+XRH5vlPCrQuT3isjvrWU3PAcHvIb+Bvpbww3v5P1e8kHy0YEbqhK3eU/c5pOS265G5PeByO+zEn7Vifw+Evl9seyGd+CAT9A/Q/9iuOGrvL9Jvkt+OHBDDeI234jb/FRy2zWJ/L4T+f1Swq8Wkd8PIr/flt3wFRzwE/ov6L8NN/yR919JmGYeYTya2XdDbeI2f4nbhG2m47brEPmFacbjF04Jv7pEfh5EfuGb2XXDH3DAv1v/Xw8HPXyz/7ohgrwjSiJJIjtwQz3iNhGJ20RRctv1ifwiEflFVcKvAZFfZCK/aJbdEAEcEAV6VOjRDDdEl3cMSUxJLAdu8CRuE4O4TWwlt92QyC8mkV8cJfwaEfnFIvKLa9kN0cEBsaHHgR7XcEM8eceXJJAkdOCGxsRt4hO3SaTktpsQ+SUg8kushJ8XkV9CIr8klt0QDxyQCHpi6EkMNySVdzJJckkKB25oStwmGXGblEpuuxmRX3Iiv1RK+DUn8ktB5JfashuSggNSQk8FPbXhhjTyTitJJ0nvwA0tiNukJW6TQclttyTyS0fkl1EJP28iv/REfpksuyENOCAD9IzQMxluyCzvLJKskmwO3OBD3CYLcZvsSm7bl8gvK5FfDiX8/Ij8shH55bTshszggOzQc0DPabghl7xzS/JI8jpwgz9xm9zEbfIpue0AIr88RH75lfALJPLLS+RXwLIbcoED8kHPD72A4YaC8i4kKSwp4sANQcRtChG3KarktoOJ/AoT+RVTwi+EyK8IkV9xy24oCA4oCr0Y9OKGG0rIu6Sk1L9vc+CGUOI2JYnblFFy262I/EoR+ZVVwq81kV9pIr9ylt1QAhxQBnpZ6OUMN5SXdwVJRUklB25oQ9ymAnGbykpuuy2RX0UivypK+LUj8qtE5FfVshvKgwMqQ68Cvarhhmryri6pIanpwA3tidtUJ25TS8ltdyDyq0HkV1sJv45EfjWJ/OpYdkM1cEAt6LWh1zHcUFfe9ST1JQ0cuKETcZt6xG08ldx2ZyK/+kR+DZXw60Lk14DIr5FlN9QFB3hCbwi9keGGxvJuIvGSNHXghq7EbZoQt2mm5La7Efl5Efk1V8KvO5FfUyK/Fpbd0Bgc0Ax6c+gtDDe0lLe3xEfi68ANPYjbeBO38VNy2z2J/HyI/PyV8OtF5OdL5Bdg2Q0twQF+0P2hBxhuCJR3kCRYEuLADb2J2wQRtwlVctt9iPyCifxaKeHXl8gvhMivtWU3BIIDQqG3gt7acEMbebeVtJO0d+CGfsRt2hK36aDktvsT+bUj8uuohN8AIr/2RH6dLLuhDTigA/SO0DsZbugs7y6SrpJuDtwwkLhNF+I23ZXc9iAiv65Efj2U8BtM5NeNyK+nZTd0Bgd0h94Dek/DDb3k3VvSR9LXgRuGELfpTdymn5LbHkrk14fIr78SfsOI/PoS+Q2w7IZe4IB+0PtDH2C4YaC8B0kGS4Y4cMNw4jaDiNsMVXLbI4j8BhP5DVPCbySR3xAiv+GW3TAQHDAU+jDoww03jJD3SMkoyWgHbhhF3GYkcZsxSm57NJHfKCK/sUr4jSHyG03kN86yG0aAA8ZAHwt9nOGG8fKeIJkomeTADWOJ20wgbjNZyW2PI/KbSOQ3RQm/8UR+k4j8plp2w3hwwGToU6BPNdwwTd7TJTMkMx24YQJxm+nEbWYpue2JRH4ziPxmK+E3ichvJpHfHMtumAYOmAV9NvQ5hhvmynueZL5kgQM3TCZuM4+4zUIltz2FyG8+kd8iJfymEvktIPJbbNkNc8EBC6Evgr7YcMMSeS+VLJMsd+CGacRtlhK3WaHktqcT+S0j8luphN8MIr/lRH6rLLthCThgBfSV0FcZblgt7zWStZJ1Dtwwk7jNGuI265Xc9iwiv7VEfhuU8JtN5LeOyG+jZTesBgesh74B+kbDDZvkvVmyRbLVgRvmELfZTNxmm5Lbnkvkt4XIb7sSfvOI/LYS+e2w7IZN4IBt0LdD32G4Yae8d0l2S/Y4cMN84ja7iNvsVXLbC4j8dhP57VPCbyGR3x4iv/2W3bATHLAX+j7o+w03HJD3QckhyWEHblhE3OYgcZsjSm57MZHfISK/o0r4LSHyO0zkd8yyGw6AA45APwr9mOGG4/I+ITkpOeXADUuJ25wgbnNayW0vI/I7SeR3Rgm/5UR+p4j8zlp2w3FwwGnoZ6CfNdxwTt7nJRckFx24YQVxm/PEbS4pue2VRH4XiPwuK+G3isjvIpHfFctuOAcOuAT9MvQrhhuuyvua5LrkhgM3rCZuc424zU0lt72GyO86kd8tJfzWEvndIPK7bdkNV8EBN6Hfgn7bcMMded+V3JPcd+CGdcRt7hK3eaDkttcT+d0j8nuohN8GIr/7RH6PLLvhDjjgAfSH0B8Zbngs7yeSp5JnDtywkbjNE+I2z5Xc9iYiv6dEfi+U8NtM5PeMyO+lZTc8Bgc8h/4C+kvDDa/k/VryRvLWgRu2ELd5TdzmnZLb3krk94bI770SftuI/N4S+X2w7IZX4IB30N9D/2C44aO8P0k+S744cMN24jafiNt8VXLbO4j8PhP5fVPCbyeR3xciv++W3fARHPAV+jfo3w03/JD3T8kvyW8HbthF3OYncZs/Sm57N5HfLyK/v0r47SHy+03kF6a5XTf8AAf8gf4X+r9vQDd4yDusJJwkfHP7bthL3CZsc942EZrruO19RH7hiPwiKuG3n8gvPJFfJMtu8Gj+/w6IAD0i9EiGGyLLO4okqiSaAzccIG4ThbhNdCW3fZDILyqRXwwl/A4R+UUj8otp2Q2RwQHRoceAHtNwQyx5x5bEkcR14IbDxG1iE7eJp+S2jxD5xSHyi6+E31Eiv7hEfgksuyEWOCAe9PjQExhuSCjvRJLEkiQO3HCMuE0i4jZJldz2cSK/xER+yZTwO0Hkl4TIL7llNyQEBySFngx6csMNKeSdUpJKktqBG04St0lJ3CaNkts+ReSXisgvrRJ+p4n8UhP5pbPshhTggDTQ00JPZ7ghvbwzSDJKMjlwwxniNhmI22RWcttnifwyEvllUcLvHJFfJiK/rJbdkB4ckBl6FuhZDTdkk3d2SQ5JTgduOE/cJjtxm1xKbvsCkV8OIr/cSvhdJPLLSeSXx7IbsoEDckHPDT2P4Ya88s4nyS8p4MANl4jb5CNuU1DJbV8m8stP5FdICb8rRH4FiPwKW3ZDXnBAQeiFoBc23FBE3kUlxSTFHbjhKnGbosRtSii57WtEfsWI/Eoq4XedyK84kV8py24oAg4oAb0k9FKGG0rLu4ykrKScAzfcIG5ThrhNeSW3fZPIryyRXwUl/G4R+ZUj8qto2Q2lwQHloVeAXtFwQyV5V5ZUkVR14IbbxG0qE7eppuS27xD5VSHyq66E310iv6pEfjUsu6ESOKAa9OrQaxhuqCnvWpLakjoO3HCPuE0t4jZ1ldz2fSK/2kR+9ZTwe0DkV4fIr75lN9QEB9SFXg96fcMNDeTtKWkoaeTADQ+J23gSt2ms5LYfEfk1JPJrooTfYyK/RkR+Xpbd0AAc0Bh6E+hehhuayruZpLmkhQM3PCFu04y4TUslt/2UyK85kZ+3En7PiPxaEPn5WHZDU3BAS+je0H0MN/jK20/iLwlw4IbnxG38iNsEKrntF0R+/kR+QUr4vSTyCyDyC7bsBl9wQCD0IOjBhhtC5B0qaSVp7cANr4jbhBK3aaPktl8T+bUi8murhN8bIr/WRH7tLLshBBzQBnpb6O0MN7SXdwdJR0knB254S9ymA3Gbzkpu+x2RX0civy5K+L0n8utE5NfVshvagwM6Q+8Cvavhhm7y7i7pIenpwA0fiNt0J27TS8ltfyTy60Hk11sJv09Efj2J/PpYdkM3cEAv6L2h9zHc0Ffe/ST9JQMcuOEzcZt+xG0GKrntL0R+/Yn8Binh95XIbwCR32DLbugLDhgIfRD0wYYbhsh7qGSYZLgDN3wjbjOUuM0IJbf9nchvGJHfSCX8fhD5DSfyG2XZDUPAASOgj4Q+ynDDaHmPkYyVjHPghp/EbcYQtxmv5LZ/EfmNJfKboITfbyK/cUR+Ey27YTQ4YDz0CdAnGm6YJO/JkimSqQ7c8Ie4zWTiNtOU3PZfIr8pRH7TlfALE5/3W1OJ/GZYdsMkcMA06NOhzzDcMFPesySzJXMcuMGDuM0s4jZzldx2WCK/2UR+85TwC0fkN4fIb75lN8wEB8yFPg/6fMMNC+S9ULJIstiBG8ITt1lI3GaJktuOQOS3iMhvqRJ+EYn8FhP5LbPshgXggCXQl0JfZrhhubxXSFZKVjlwQyTiNiuI26xWctuRifxWEvmtUcIvCpHfKiK/tZbdsBwcsBr6GuhrDTesk/d6yQbJRgduiErcZj1xm01Kbjsakd8GIr/NSvhFJ/LbSOS3xbIb1oEDNkHfDH2L4Yat8t4m2S7Z4cANMYjbbCNus1PJbcck8ttO5LdLCb9YRH47iPx2W3bDVnDATui7oO823LBH3nsl+yT7HbghNnGbvcRtDii57ThEfvuI/A4q4ReXyG8/kd8hy27YAw44AP0g9EOGGw7L+4jkqOSYAzfEI25zhLjNcSW3HZ/I7yiR3wkl/BIQ+R0j8jtp2Q2HwQHHoZ+AftJwwyl5n5ackZx14IaExG1OE7c5p+S2ExH5nSHyO6+EX2Iiv7NEfhcsu+EUOOAc9PPQLxhuuCjvS5LLkisO3JCEuM0l4jZXldx2UiK/y0R+15TwS0bkd4XI77plN1wEB1yFfg36dcMNN+R9U3JLctuBG5ITt7lJ3OaOkttOQeR3i8jvrhJ+KYn8bhP53bPshhvggDvQ70K/Z7jhvrwfSB5KHjlwQyriNg+I2zxWctupifweEvk9UcIvDZHfIyK/p5bdcB8c8Bj6E+hPDTc8k/dzyQvJSwduSEvc5jlxm1dKbjsdkd8LIr/XSvilJ/J7SeT3xrIbnoEDXkF/Df2N4Ya38n4neS/54MANGYjbvCNu81HJbWck8ntP5PdJCb9MRH4fiPw+W3bDW3DAR+ifoH823PBF3l8l3yTfHbghM3Gbr8Rtfii57SxEft+I/H4q4ZeVyO87kd8vy274Ag74Af0n9F+GG37/e0v+SsK0sO+GbMRt/hC38Wih47azE/n9JfILq4RfDiK/MC14/MK1sOuG3+CAf7f+vx4WergW/3VDeHlHkESURHLghpzEbSIQt4ms5LZzEflFJPKLooRfbiK/SER+US27ITw4IDL0KNCjGm6IJu/okhiSmA7ckIe4TXTiNrGU3HZeIr8YRH6xlfDLR+QXk8gvjmU3RAMHxIIeG3ocww1x5R1PEl+SwIEb8hO3iUfcJqGS2y5A5BefyC+REn4FifwSEPkltuyGuOCAhNATQU9suCGJvJNKkkmSO3BDIeI2SYnbpFBy24WJ/JIR+aVUwq8IkV9yIr9Ult2QBByQAnpK6KkMN6SWdxpJWkk6B24oStwmDXGb9EpuuxiRX1oivwxK+BUn8ktH5JfRshtSgwPSQ88APaPhhkzyzizJIsnqwA0liNtkJm6TTcltlyTyy0Lkl10Jv1JEflmJ/HJYdkMmcEA26Nmh5zDckFPeuSS5JXkcuKE0cZtcxG3yKrntMkR+uYn88inhV5bILw+RX37LbsgJDsgLPR/0/IYbCsi7oKSQpLADN5QjblOQuE0RJbddnsivEJFfUSX8KhD5FSbyK2bZDQXAAUWgF4VezHBDcXmXkJSUlHLghorEbUoQtymt5LYrEfmVJPIro4RfZSK/UkR+ZS27oTg4oDT0MtDLGm4oJ+/ykgqSig7cUIW4TXniNpWU3HZVIr8KRH6VlfCrRuRXkcivimU3lAMHVIJeGXoVww1V5V1NUl1Sw4EbqhO3qUbcpqaS265B5FedyK+WEn41ifxqEPnVtuyGquCAmtBrQa9tuKGOvOtK6knqO3BDLeI2dYnbNFBy27WJ/OoR+Xkq4VeHyK8+kV9Dy26oAw5oAN0TekPDDY3k3VjSROLlwA11ids0Jm7TVMlt1yPya0Lk10wJv/pEfl5Efs0tu6EROKAp9GbQmxtuaCHvlhJviY8DNzQgbtOSuI2vktv2JPLzJvLzU8KvIZGfD5Gfv2U3tAAH+EL3g+5vuCFA3oGSIEmwAzc0Im4TSNwmRMltNybyCyLyC1XCrwmRXzCRXyvLbggAB4RAD4XeynBDa3m3kbSVtHPgBi/iNm2I27RXcttNifzaEvl1UMKvGZFfOyK/jpbd0Boc0B56B+gdDTd0kndnSRdJVwduaE7cpjNxm25KbrsFkV8XIr/uSvi1JPLrSuTXw7IbOoEDukHvDr2H4Yae8u4l6S3p48AN3sRtehG36avktn2I/HoT+fVTws+XyK8PkV9/y27oCQ7oC70f9P6GGwbIe6BkkGSwAzf4EbcZSNxmiJLb9ifyG0TkN1QJvwAiv8FEfsMsu2EAOGAI9KHQhxluGC7vEZKRklEO3BBI3GYEcZvRSm47iMhvJJHfGCX8gon8RhH5jbXshuHggNHQx0Afa7hhnLzHSyZIJjpwQwhxm/HEbSYpue1QIr8JRH6TlfBrReQ3kchvimU3jAMHTII+GfoUww1T5T1NMl0yw4EbWhO3mUbcZqaS225D5DedyG+WEn5tifxmEPnNtuyGqeCAmdBnQZ9tuGGOvOdK5knmO3BDO+I2c4nbLFBy2+2J/OYR+S1Uwq8Dkd98Ir9Flt0wBxywAPpC6IsMNyyW9xLJUskyB27oSNxmCXGb5UpuuxOR31IivxVK+HUm8ltG5LfSshsWgwOWQ18BfaXhhlXyXi1ZI1nrwA1diNusJm6zTsltdyXyW0Pkt14Jv25EfmuJ/DZYdsMqcMA66OuhbzDcsFHemySbJVscuKE7cZtNxG22KrntHkR+m4n8tinh15PIbwuR33bLbtgIDtgKfRv07YYbdsh7p2SXZLcDN/QibrOTuM0eJbfdm8hvF5HfXiX8+hD57Sby22fZDTvAAXug74W+z3DDfnkfkByUHHLghr7EbQ4Qtzms5Lb7EfkdJPI7ooRffyK/Q0R+Ry27YT844DD0I9CPGm44Ju/jkhOSkw7cMIC4zXHiNqeU3PZAIr8TRH6nlfAbROR3ksjvjGU3HAMHnIJ+GvoZww1n5X1Ocl5ywYEbBhO3OUfc5qKS2x5C5HeeyO+SEn5DifwuEPldtuyGs+CAi9AvQb9suOGKvK9KrkmuO3DDMOI2V4nb3FBy28OJ/K4R+d1Uwm8Ekd91Ir9blt1wBRxwA/pN6LcMN9yW9x3JXck9B24YSdzmDnGb+0puexSR310ivwdK+I0m8rtH5PfQshtugwPuQ38A/aHhhkfyfix5InnqwA1jiNs8Jm7zTMltjyXye0Lk91wJv3FEfk+J/F5YdsMjcMAz6M+hvzDc8FLerySvJW8cuGE8cZtXxG3eKrntCUR+r4n83inhN5HI7w2R33vLbngJDngL/R3094YbPsj7o+ST5LMDN0wibvORuM0XJbc9mcjvE5HfVyX8phD5fSby+2bZDR/AAV+gf4X+zXDDd3n/kPyU/HLghqnEbX4Qt/mt5LanEfn9JPL7o4TfdCK/X0R+fy274Ts44Df0P9D/Gm4I09IjjIckrCRcS/tumEHc5t93s7YJ31LHbc8k8gtL5BdBCb9ZRH7hiPwitrTrhn//zv/ngPDQI0CP2PK/bogk78iSKJKoDtwwm7hNZOI20ZTc9hwivyhEftGV8JtL5BeVyC+GZTdEAgdEgx4degzDDTHlHUsSWxLHgRvmEbeJRdwmrpLbnk/kF5vIL54SfguI/OIQ+cW37IaY4IC40ONBj2+4IYG8E0oSSRI7cMNC4jYJidskUXLbi4j8EhH5JVXCbzGRX2Iiv2SW3ZAAHJAEelLoyQw3JJd3CklKSSoHblhC3CYFcZvUSm57KZFfSiK/NEr4LSPyS0Xkl9ayG5KDA1JDTwM9reGGdPJOL8kgyejADcuJ26QnbpNJyW2vIPLLQOSXWQm/lUR+GYn8slh2QzpwQCbomaFnMdyQVd7ZJNklORy4YRVxm2zEbXIque3VRH7ZifxyKeG3hsgvB5FfbstuyAoOyAk9F/TchhvyyDuvJJ8kvwM3rCVuk5e4TQElt72OyC8fkV9BJfzWE/nlJ/IrZNkNecABBaAXhF7IcENheReRFJUUc+CGDcRtihC3Ka7ktjcS+RUl8iuhhN8mIr9iRH4lLbuhMDigOPQS0Esabij175skZSRlHbhhM3Gb0sRtyim57S1EfmWI/Mor4beVyK8skV8Fy24oBQ4oB7089AqGGyrKu5KksqSKAzdsI25TibhNVSW3vZ3IrzKRXzUl/HYQ+VUh8qtu2Q0VwQFVoVeDXt1wQw1515TUktR24IadxG1qErepo+S2dxH51SLyq6uE324iv9pEfvUsu6EGOKAO9LrQ6xluqC/vBhJPSUMHbthD3KYBcZtGSm57L5GfJ5FfYyX89hH5NSTya2LZDfXBAY2gN4bexHCDl7ybSppJmjtww37iNk2J27RQctsHiPyaEfm1VMLvIJFfcyI/b8tu8AIHtIDeErq34QYfeftK/CT+DtxwiLiNL3GbACW3fZjIz4/IL1AJvyNEfv5EfkGW3eADDgiAHgg9yHBDsLxDJKGSVg7ccJS4TQhxm9ZKbvsYkV8okV8bJfyOE/m1IvJra9kNweCA1tDbQG9ruKGdvNtLOkg6OnDDCeI27YnbdFJy2yeJ/DoQ+XVWwu8UkV9HIr8ult3QDhzQCXpn6F0MN3SVdzdJd0kPB244TdymG3Gbnkpu+wyRX3civ15K+J0l8utB5Nfbshu6ggN6Qu8Fvbfhhj7y7ivpJ+nvwA3niNv0JW4zQMltnyfy60fkN1AJvwtEfv2J/AZZdkMfcMAA6AOhDzLcMFjeQyRDJcMcuOEicZshxG2GK7ntS0R+Q4n8Rijhd5nIbxiR30jLbhgMDhgOfQT0kYYbRsl7tGSMZKwDN1whbjOauM04Jbd9lchvDJHfeCX8rhH5jSXym2DZDaPAAeOgj4c+wXDDRHlPkkyWTHHghuvEbSYRt5mq5LZvEPlNJvKbpoTfTSK/KUR+0y27YSI4YCr0adCnG26YIe+ZklmS2Q7ccIu4zUziNnOU3PZtIr9ZRH5zlfC7Q+Q3m8hvnmU3zAAHzIE+F/o8ww3z5b1AslCyyIEb7hK3WUDcZrGS275H5LeQyG+JEn73ifwWEfktteyG+eCAxdCXQF9quGGZvJdLVkhWOnDDA+I2y4nbrFJy2w+J/FYQ+a1Wwu8Rkd9KIr81lt2wDBywCvpq6GsMN6yV9zrJeskGB254TNxmHXGbjUpu+wmR33oiv01K+D0l8ttA5LfZshvWggM2Qt8EfbPhhi3y3irZJtnuwA3PiNtsJW6zQ8ltPyfy20bkt1MJvxdEftuJ/HZZdsMWcMAO6Duh7zLcsFveeyR7JfscuOElcZs9xG32K7ntV0R+e4n8Dijh95rIbx+R30HLbtgNDtgP/QD0g4YbDsn7sOSI5KgDN7whbnOYuM0xJbf9lsjvCJHfcSX83hH5HSXyO2HZDYfAAcegH4d+wnDDSXmfkpyWnHHghvfEbU4Rtzmr5LY/EPmdJvI7p4TfRyK/M0R+5y274SQ44Cz0c9DPG264IO+LkkuSyw7c8Im4zUXiNleU3PZnIr9LRH5XlfD7QuR3mcjvmmU3XAAHXIF+Ffo1ww3X5X1DclNyy4EbvhK3uUHc5raS2/5G5HeTyO+OEn7fifxuEfndteyG6+CA29DvQL9ruOGevO9LHkgeOnDDD+I294nbPFJy2z+J/B4Q+T1Wwu8Xkd9DIr8nlt1wDxzwCPpj6E8MNzyV9zPJc8kLB274TdzmGXGbl0pu+w+R33Miv1dK+P0l8ntB5PfashueggNeQn8F/bXhhjfyfit5J3nvwA1hEhD/z564zQclt+1B5PeOyO+jEn5hifzeE/l9suyGN+CAD9A/Qv9kuOGzvL9Ivkq+OXBDOOI2X4jbfFdy2+GJ/L4S+f1Qwi8Ckd83Ir+flt3wGRzwHfoP6D8NN/yS9+9/f5P8deCGiMRtfhO3CeOt47YjEfn9IfLzUMIvMpHfXyK/sN523fALHPDv1v/XPaCH9f6vG8LJO7wkgiSit303RCFuE96bt00kJbcdlcgvApFfZCX8ohH5RSTyi2LZDeHAAZGgR4YexXBDVHlHk0SXxHDghujEbaIRt4mp5LZjEPlFJ/KLpYRfTCK/GER+sS27ISo4ICb0WNBjG26II++4kniS+A7cEIu4TVziNgmU3HZsIr94RH4JlfCLQ+QXn8gvkWU3xAEHJICeEHoiww2J5Z1EklSSzIEb4hK3SULcJrmS245H5JeUyC+FEn7xifySEfmltOyGxOCA5NBTQE9puCGVvFNL0kjSOnBDAuI2qYnbpFNy2wmJ/NIQ+aVXwi8RkV9aIr8Mlt2QChyQDnp66BkMN2SUdyZJZkkWB25ITNwmE3GbrEpuOwmRX2Yiv2xK+CUl8stC5JfdshsyggOyQs8GPbvhhhzyzinJJcntwA3JiNvkJG6TR8ltJyfyy0Xkl1cJvxREfrmJ/PJZdkMOcEAe6Hmh5zPckF/eBSQFJYUcuCElcZsCxG0KK7ntVER+BYn8iijhl5rIrxCRX1HLbsgPDigMvQj0ooYbism7uKSEpKQDN6QhblOcuE0pJbedlsivBJFfaSX80hH5lSTyK2PZDcXAAaWgl4ZexnBDWXmXk5SXVHDghvTEbcoRt6mo5LYzEPmVJ/KrpIRfRiK/CkR+lS27oSw4oCL0StArG26oIu+qkmqS6g7ckIm4TVXiNjWU3HZmIr9qRH41lfDLQuRXncivlmU3VAEH1IBeE3otww215V1HUldSz4EbshK3qUPcpr6S285G5FeXyK+BEn7ZifzqEfl5WnZDbXBAfegNoHsabmgo70aSxpImDtyQg7hNI+I2XkpuOyeRX2Miv6ZK+OUi8mtC5NfMshsaggO8oDeF3sxwQ3N5t5C0lHg7cENu4jYtiNv4KLntPER+LYn8fJXwy0vk503k52fZDc3BAT7QfaH7GW7wl3eAJFAS5MAN+YjbBBC3CVZy2/mJ/AKJ/EKU8CtA5BdE5Bdq2Q3+4IBg6CHQQw03tJJ3a0kbSVsHbihI3KY1cZt2Sm67EJFfGyK/9kr4FSbya0vk18GyG1qBA9pBbw+9g+GGjvLuJOks6eLADUWI23QibtNVyW0XJfLrTOTXTQm/YkR+XYj8ult2Q0dwQFfo3aB3N9zQQ949Jb0kvR24oThxm57Ebfooue0SRH69iPz6KuFXksivN5FfP8tu6AEO6AO9L/R+hhv6y3uAZKBkkAM3lCJuM4C4zWAlt12ayG8gkd8QJfzKEPkNIvIbatkN/cEBg6EPgT7UcMMweQ+XjJCMdOCGssRthhO3GaXktssR+Y0g8huthF95Ir+RRH5jLLthGDhgFPTR0McYbhgr73GS8ZIJDtxQgbjNOOI2E5XcdkUiv/FEfpOU8KtE5DeByG+yZTeMBQdMhD4J+mTDDVPkPVUyTTLdgRsqE7eZStxmhpLbrkLkN43Ib6YSflWJ/KYT+c2y7IYp4IAZ0GdCn2W4Yba850jmSuY5cEM14jZziNvMV3Lb1Yn85hL5LVDCrwaR3zwiv4WW3TAbHDAf+gLoCw03LJL3YskSyVIHbqhJ3GYxcZtlSm67FpHfEiK/5Ur41SbyW0rkt8KyGxaBA5ZBXw59heGGlfJeJVktWePADXWI26wibrNWyW3XJfJbTeS3Tgm/ekR+a4j81lt2w0pwwFro66CvN9ywQd4bJZskmx24oT5xm43EbbYoue0GRH6biPy2KuHnSeS3mchvm2U3bAAHbIG+Ffo2ww3b5b1DslOyy4EbGhK32UHcZreS225E5LeTyG+PEn6Nifx2EfntteyG7eCA3dD3QN9ruGGfvPdLDkgOOnBDE+I2+4nbHFJy215EfgeI/A4r4deUyO8gkd8Ry27YBw44BP0w9COGG47K+5jkuOSEAzc0I25zjLjNSSW33ZzI7ziR3ykl/FoQ+Z0g8jtt2Q1HwQEnoZ+Cftpwwxl5n5Wck5x34IaWxG3OEre5oOS2vYn8zhH5XVTCz4fI7zyR3yXLbjgDDrgA/SL0S4YbLsv7iuSq5JoDN/gSt7lC3Oa6ktv2I/K7SuR3Qwk/fyK/a0R+Ny274TI44Dr0G9BvGm64Je/bkjuSuw7cEEDc5jZxm3tKbjuQyO8Okd99JfyCiPzuEvk9sOyGW+CAe9DvQ39guOGhvB9JHkueOHBDMHGbR8Rtniq57RAiv8dEfs+U8Asl8ntC5PfcshseggOeQn8G/bnhhhfyfil5JXntwA2tiNu8JG7zRslttybye0Xk91YJvzZEfq+J/N5ZdsMLcMAb6G+hvzPc8F7eHyQfJZ8cuKEtcZsPxG0+K7ntdkR+H4n8vijh157I7xOR31fLbngPDvgM/Qv0r4Ybvsn7u+SH5KcDN3QgbvOduM0vJbfdkcjvB5HfbyX8OhH5/STy+2PZDd/AAb+g/4b+x3DDX3mH8fEI4yEJ62PfDZ2J2/z7btY24Xx03HYXIj8PIr/wSvh1JfILS+QXwceuG/6CA/7d+v96eOgRfP7rhojyjiSJLIniwA3diNtEIm4TVcltdyfyi0zkF00Jvx5EflGI/KJbdkNEcEBU6NGgRzfcEEPeMSWxJLEduKEncZuYxG3iKLntXkR+sYj84irh15vILzaRXzzLbogBDogDPS70eIYb4ss7gSShJJEDN/QhbpOAuE1iJbfdl8gvIZFfEiX8+hH5JSLyS2rZDfHBAYmhJ4Ge1HBDMnknl6SQpHTghv7EbZITt0ml5LYHEPmlIPJLrYTfQCK/lER+aSy7IRk4IBX01NDTGG5IK+90kvSSDA7cMIi4TTriNhmV3PZgIr/0RH6ZlPAbQuSXgcgvs2U3pAUHZISeCXpmww1Z5J1Vkk2S3YEbhhK3yUrcJoeS2x5G5JeNyC+nEn7DifyyE/nlsuyGLOCAHNBzQs9luCG3vPNI8kryOXDDCOI2eYjb5Fdy2yOJ/PIS+RVQwm8UkV8+Ir+Clt2QGxyQH3oB6AUNNxSSd2FJEUlRB24YTdymMHGbYkpuewyRXxEiv+JK+I0l8itK5FfCshsKgQOKQS8OvYThhpLyLvXvuyRlHLhhHHGbUsRtyiq57fFEfqWJ/Mop4TeByK8MkV95y24oCQ4oC70c9PKGGyrIu6KkkqSyAzdMJG5TkbhNFSW3PYnIrxKRX1Ul/CYT+VUm8qtm2Q0VwAFVoFeFXs1wQ3V515DUlNRy4IYpxG1qELepreS2pxL51STyq6OE3zQiv1pEfnUtu6E6OKA29DrQ6xpuqCfv+pIGEk8HbphO3KY+cZuGSm57BpFfAyK/Rkr4zSTy8yTya2zZDfXAAQ2hN4Le2HBDE3l7SZpKmjlwwyziNl7EbZorue3ZRH5NifxaKOE3h8ivGZFfS8tuaAIOaA69BfSWhhu85e0j8ZX4OXDDXOI2PsRt/JXc9jwiP18ivwAl/OYT+fkR+QVadoM3OMAfegD0QMMNQfIOloRIQh24YQFxm2DiNq2U3PZCIr8QIr/WSvgtIvILJfJrY9kNQeCAVtBbQ29juKGtvNtJ2ks6OHDDYuI27YjbdFRy20uI/NoT+XVSwm8pkV8HIr/Olt3QFhzQEXon6J0NN3SRd1dJN0l3B25YRtymK3GbHkpuezmRXzciv55K+K0g8utO5NfLshu6gAN6QO8JvZfhht7y7iPpK+nnwA0ridv0IW7TX8ltryLy60vkN0AJv9VEfv2I/AZadkNvcEB/6AOgDzTcMEjegyVDJEMduGENcZvBxG2GKbnttUR+Q4j8hivht47IbyiR3wjLbhgEDhgGfTj0EYYbRsp7lGS0ZIwDN6wnbjOKuM1YJbe9gchvNJHfOCX8NhL5jSHyG2/ZDSPBAWOhj4M+3nDDBHlPlEySTHbghk3EbSYSt5mi5LY3E/lNIvKbqoTfFiK/yUR+0yy7YQI4YAr0qdCnGW6YLu8ZkpmSWQ7csJW4zQziNrOV3PY2Ir+ZRH5zlPDbTuQ3i8hvrmU3TAcHzIY+B/pcww3z5D1fskCy0IEbdhC3mU/cZpGS295J5LeAyG+xEn67iPwWEvktseyGeeCARdAXQ19iuGGpvJdJlktWOHDDbuI2y4jbrFRy23uI/JYT+a1Swm8vkd8KIr/Vlt2wFBywEvoq6KsNN6yR91rJOsl6B27YR9xmLXGbDUpuez+R3zoiv41K+B0g8ltP5LfJshvWgAM2QN8IfZPhhs3y3iLZKtnmwA0HidtsIW6zXcltHyLy20rkt0MJv8NEftuI/HZadsNmcMB26Dug7zTcsEveuyV7JHsduOEIcZvdxG32Kbnto0R+e4j89ivhd4zIby+R3wHLbtgFDtgHfT/0A4YbDsr7kOSw5IgDNxwnbnOIuM1RJbd9gsjvMJHfMSX8ThL5HSHyO27ZDQfBAUehH4N+3HDDCXmflJySnHbghlPEbU4Stzmj5LZPE/mdIvI7q4TfGSK/00R+5yy74QQ44Az0s9DPGW44L+8LkouSSw7ccJa4zQXiNpeV3PY5Ir+LRH5XlPA7T+R3icjvqmU3nAcHXIZ+BfpVww3X5H1dckNy04EbLhC3uU7c5paS275I5HeDyO+2En6XiPxuEvndseyGa+CAW9BvQ79juOGuvO9J7kseOHDDZeI294jbPFRy21eI/O4T+T1Swu8qkd8DIr/Hlt1wFxzwEPoj6I8NNzyR91PJM8lzB264RtzmKXGbF0pu+zqR3zMiv5dK+N0g8ntO5PfKshuegANeQH8J/ZXhhtfyfiN5K3nnwA03idu8IW7zXslt3yLye0vk90EJv9tEfu+I/D5adsNrcMB76B+gfzTc8EnenyVfJF8duOEOcZvPxG2+Kbntu0R+X4j8vivhd4/I7yuR3w/LbvgEDvgG/Tv0H4Ybfsr7l+T3v787cMN94ja/iNv8VXLbD4j8fhP5hfHVwe8hkd8fIj8PX7tu+AkO+Av9327/6x6+/3VDWHmHk4SXRPC174ZHxG3C+fK2iajkth8T+YUn8oukhN8TIr8IRH6RLbshLDggIvRI0CMbbogi76iSaJLoDtzwlLhNVOI2MZTc9jMiv2hEfjGV8HtO5BedyC+WZTdEAQfEgB4TeizDDbHlHUcSVxLPgRteELeJQ9wmvpLbfknkF5fIL4ESfq+I/OIR+SW07IbY4ID40BNAT2i4IZG8E0uSSJI6cMNr4jaJidskU3Lbb4j8khD5JVfC7y2RX1IivxSW3ZAIHJAMenLoKQw3pJR3KklqSRoHbnhH3CYVcZu0Sm77PZFfaiK/dEr4fSDyS0Pkl96yG1KCA9JCTwc9veGGDPLOKMkkyezADR+J22QkbpNFyW1/IvLLROSXVQm/z0R+mYn8sll2QwZwQBboWaFnM9yQXd45JDkluRy44QtxmxzEbXIrue2vRH45ifzyKOH3jcgvF5FfXstuyA4OyA09D/S8hhvyyTu/pICkoAM3fCduk5+4TSElt/2DyK8AkV9hJfx+EvkVJPIrYtkN+cABhaAXhl7EcENReReTFJeUcOCGX8RtihG3Kanktn8T+RUn8iulhN8fIr8SRH6lLbuhKDigJPRS0Esbbigj77KScpLyDtzwl7hNWeI2FZTcdpiEvN8qR+RXUQk/DyK/8kR+lSy7oQw4oAL0itArGW6oLO8qkqqSag7cEJa4TRXiNtWV3HY4Ir+qRH41lPALT+RXjcivpmU3VAYHVIdeA3pNww215F1bUkdS14EbIhC3qU3cpp6S245I5FeHyK++En6RiPzqEvk1sOyGWuCAetDrQ29guMFT3g0ljSSNHbghMnGbhsRtmii57ShEfo2I/LyU8ItK5NeYyK+pZTd4ggOaQPeC3tRwQzN5N5e0kLR04IZoxG2aE7fxVnLb0Yn8WhD5+SjhF4PIryWRn69lNzQDB3hD94Hua7jBT97+kgBJoAM3xCRu40/cJkjJbcci8gsg8gtWwi82kV8gkV+IZTf4gQOCoAdDDzHcECrvVpLWkjYO3BCHuE0r4jZtldx2XCK/1kR+7ZTwi0fk14bIr71lN4SCA9pCbwe9veGGDvLuKOkk6ezADfGJ23QkbtNFyW0nIPLrROTXVQm/hER+nYn8ull2QwdwQBfoXaF3M9zQXd49JD0lvRy4IRFxmx7EbXorue3ERH49ifz6KOGXhMivF5FfX8tu6A4O6A29D/S+hhv6ybu/ZIBkoAM3JCVu05+4zSAlt52MyG8Akd9gJfySE/kNJPIbYtkN/cABg6APhj7EcMNQeQ+TDJeMcOCGFMRthhG3GanktlMS+Q0n8hulhF8qIr8RRH6jLbthKDhgJPRR0Ecbbhgj77GScZLxDtyQmrjNWOI2E5Tcdhoiv3FEfhOV8EtL5DeeyG+SZTeMAQdMgD4R+iTDDZPlPUUyVTLNgRvSEbeZQtxmupLbTk/kN5XIb4YSfhmI/KYR+c207IbJ4IDp0GdAn2m4YZa8Z0vmSOY6cENG4jazidvMU3LbmYj85hD5zVfCLzOR31wivwWW3TALHDAP+nzoCww3LJT3IsliyRIHbshC3GYRcZulSm47K5HfYiK/ZUr4ZSPyW0Lkt9yyGxaCA5ZCXwZ9ueGGFfJeKVklWe3ADdmJ26wkbrNGyW3nIPJbReS3Vgm/nER+q4n81ll2wwpwwBroa6GvM9ywXt4bJBslmxy4IRdxmw3EbTYrue3cRH4bify2KOGXh8hvE5HfVstuWA8O2Ax9C/Sthhu2yXu7ZIdkpwM35CVus524zS4lt52PyG8Hkd9uJfzyE/ntJPLbY9kN28ABu6Dvhr7HcMNeee+T7JcccOCGAsRt9hG3OajktgsS+e0n8jukhF8hIr8DRH6HLbthLzjgIPRD0A8bbjgi76OSY5LjDtxQmLjNUeI2J5TcdhEiv2NEfieV8CtK5HecyO+UZTccAQecgH4S+inDDaflfUZyVnLOgRuKEbc5Q9zmvJLbLk7kd5bI74ISfiWI/M4R+V207IbT4IDz0C9Av2i44ZK8L0uuSK46cENJ4jaXidtcU3LbpYj8rhD5XVfCrzSR31UivxuW3XAJHHAN+nXoNww33JT3LcltyR0HbihD3OYWcZu7Sm67LJHfbSK/e0r4lSPyu0Pkd9+yG26CA+5Cvwf9vuGGB/J+KHkkeezADeWJ2zwkbvNEyW1XIPJ7ROT3VAm/ikR+j4n8nll2wwNwwBPoT6E/M9zwXN4vJC8lrxy4oRJxmxfEbV4rue3KRH4vifzeKOFXhcjvFZHfW8tueA4OeA39DfS3hhveyfu95IPkowM3VCVu8564zSclt12NyO8Dkd9nJfyqE/l9JPL7YtkN78ABn6B/hv7FcMNXeX+TfJf8cOCGGsRtvhG3+anktmsS+X0n8vulhF8tIr8fRH6/LbvhKzjgJ/Rf0H8bbvgj77+SMH4eYTz87LuhNnGbv8RtwvrpuO06RH5h/Hj8winhV5fIz4PIL7yfXTf8AQf8u/X/9XDQw/v91w0R5B1REkkS2YEb6hG3iUjcJoqS265P5BeJyC+qEn4NiPwiE/lFs+yGCOCAKNCjQo9muCG6vGNIYkpiOXCDJ3GbGMRtYiu57YZEfjGJ/OIo4deIyC8WkV9cy26IDg6IDT0O9LiGG+LJO74kgSShAzc0Jm4Tn7hNIiW33YTILwGRX2Il/LyI/BIS+SWx7IZ44IBE0BNDT2K4Iam8k0mSS1I4cENT4jbJiNukVHLbzYj8khP5pVLCrzmRXwoiv9SW3ZAUHJASeiroqQ03pJF3Wkk6SXoHbmhB3CYtcZsMSm67JZFfOiK/jEr4eRP5pSfyy2TZDWnAARmgZ4SeyXBDZnlnkWSVZHPgBh/iNlmI22RXctu+RH5ZifxyKOHnR+SXjcgvp2U3ZAYHZIeeA3pOww255J1bkkeS14Eb/Inb5CZuk0/JbQcQ+eUh8suvhF8gkV9eIr8Clt2QCxyQD3p+6AUMNxSUdyFJYUkRB24IIm5TiLhNUSW3HUzkV5jIr5gSfiFEfkWI/IpbdkNBcEBR6MWgFzfcUELeJSWl/n2bAzeEErcpSdymjJLbbkXkV4rIr6wSfq2J/EoT+ZWz7IYS4IAy0MtCL2e4oby8K0gqSio5cEMb4jYViNtUVnLbbYn8KhL5VVHCrx2RXyUiv6qW3VAeHFAZehXoVQ03VJN3dUkNSU0HbmhP3KY6cZtaSm67A5FfDSK/2kr4dSTyq0nkV8eyG6qBA2pBrw29juGGuvKuJ6kvaeDADZ2I29QjbuOp5LY7E/nVJ/JrqIRfFyK/BkR+jSy7oS44wBN6Q+iNDDc0lncTiZekqQM3dCVu04S4TTMlt92NyM+LyK+5En7difyaEvm1sOyGxuCAZtCbQ29huKGlvL0lPhJfB27oQdzGm7iNn5Lb7knk50Pk56+EXy8iP18ivwDLbmgJDvCD7g89wHBDoLyDJMGSEAdu6E3cJoi4TaiS2+5D5BdM5NdKCb++RH4hRH6tLbshEBwQCr0V9NaGG9rIu62knaS9Azf0I27TlrhNByW33Z/Irx2RX0cl/AYQ+bUn8utk2Q1twAEdoHeE3slwQ2d5d5F0lXRz4IaBxG26ELfpruS2BxH5dSXy66GE32Aiv25Efj0tu6EzOKA79B7Qexpu6CXv3pI+kr4O3DCEuE1v4jb9lNz2UCK/PkR+/ZXwG0bk15fIb4BlN/QCB/SD3h/6AMMNA+U9SDJYMsSBG4YTtxlE3GaoktseQeQ3mMhvmBJ+I4n8hhD5DbfshoHggKHQh0EfbrhhhLxHSkZJRjtwwyjiNiOJ24xRctujifxGEfmNVcJvDJHfaCK/cZbdMAIcMAb6WOjjDDeMl/cEyUTJJAduGEvcZgJxm8lKbnsckd9EIr8pSviNJ/KbROQ31bIbxoMDJkOfAn2q4YZp8p4umSGZ6cANE4jbTCduM0vJbU8k8ptB5DdbCb9JRH4zifzmWHbDNHDALOizoc8x3DBX3vMk8yULHLhhMnGbecRtFiq57SlEfvOJ/BYp4TeVyG8Bkd9iy26YCw5YCH0R9MWGG5bIe6lkmWS5AzdMI26zlLjNCiW3PZ3IbxmR30ol/GYQ+S0n8ltl2Q1LwAEroK+Evspww2p5r5Gslaxz4IaZxG3WELdZr+S2ZxH5rSXy26CE32wiv3VEfhstu2E1OGA99A3QNxpu2CTvzZItkq0O3DCHuM1m4jbblNz2XCK/LUR+25Xwm0fkt5XIb4dlN2wCB2yDvh36DsMNO+W9S7JbsseBG+YTt9lF3GavktteQOS3m8hvnxJ+C4n89hD57bfshp3ggL3Q90Hfb7jhgLwPSg5JDjtwwyLiNgeJ2xxRctuLifwOEfkdVcJvCZHfYSK/Y5bdcAAccAT6UejHDDccl/cJyUnJKQduWErc5gRxm9NKbnsZkd9JIr8zSvgtJ/I7ReR31rIbjoMDTkM/A/2s4YZz8j4vuSC56MANK4jbnCduc0nJba8k8rtA5HdZCb9VRH4XifyuWHbDOXDAJeiXoV8x3HBV3tck1yU3HLhhNXGba8Rtbiq57TVEfteJ/G4p4beWyO8Gkd9ty264Cg64Cf0W9NuGG+7I+67knuS+AzesI25zl7jNAyW3vZ7I7x6R30Ml/DYQ+d0n8ntk2Q13wAEPoD+E/shww2N5P5E8lTxz4IaNxG2eELd5ruS2NxH5PSXye6GE32Yiv2dEfi8tu+ExOOA59BfQXxpueCXv15I3krcO3LCFuM1r4jbvlNz2ViK/N0R+75Xw20bk95bI74NlN7wCB7yD/h76B8MNH+X9SfJZ8sWBG7YTt/lE3OarktveQeT3mcjvmxJ+O4n8vhD5fbfsho/ggK/Qv0H/brjhh7x/Sn5Jfjtwwy7iNj+J2/xRctu7ifx+Efn9VcJvD5HfbyK/MP523fADHPAH+l/o/74B3eAh77CScJLw/vbdsJe4TVh/3jYR/HXc9j4iv3BEfhGV8NtP5BeeyC+SZTd4+P+/AyJAjwg9kuGGyPKOIokqiebADQeI20QhbhNdyW0fJPKLSuQXQwm/Q0R+0Yj8Ylp2Q2RwQHToMaDHNNwQS96xJXEkcR244TBxm9jEbeIpue0jRH5xiPziK+F3lMgvLpFfAstuiAUOiAc9PvQEhhsSyjuRJLEkiQM3HCNuk4i4TVIlt32cyC8xkV8yJfxOEPklIfJLbtkNCcEBSaEng57ccEMKeaeUpJKkduCGk8RtUhK3SaPktk8R+aUi8kurhN9pIr/URH7pLLshBTggDfS00NMZbkgv7wySjJJMDtxwhrhNBuI2mZXc9lkiv4xEflmU8DtH5JeJyC+rZTekBwdkhp4FelbDDdnknV2SQ5LTgRvOE7fJTtwml5LbvkDkl4PIL7cSfheJ/HIS+eWx7IZs4IBc0HNDz2O4Ia+880nySwo4cMMl4jb5iNsUVHLbl4n88hP5FVLC7wqRXwEiv8KW3ZAXHFAQeiHohQ03FJF3UUkxSXEHbrhK3KYocZsSSm77GpFfMSK/kkr4XSfyK07kV8qyG4qAA0pALwm9lOGG0vIuIykrKefADTeI25QhblNeyW3fJPIrS+RXQQm/W0R+5Yj8Klp2Q2lwQHnoFaBXNNxQSd6VJVUkVR244TZxm8rEbaopue07RH5ViPyqK+F3l8ivKpFfDctuqAQOqAa9OvQahhtqyruWpLakjgM33CNuU4u4TV0lt32fyK82kV89JfweEPnVIfKrb9kNNcEBdaHXg17fcEMDeXtKGkoaOXDDQ+I2nsRtGiu57UdEfg2J/Joo4feYyK8RkZ+XZTc0AAc0ht4EupfhhqbybiZpLmnhwA1PiNs0I27TUsltPyXya07k562E3zMivxZEfj6W3dAUHNASujd0H8MNvvL2k/hLAhy44TlxGz/iNoFKbvsFkZ8/kV+QEn4vifwCiPyCLbvBFxwQCD0IerDhhhB5h0paSVo7cMMr4jahxG3aKLnt10R+rYj82irh94bIrzWRXzvLbggBB7SB3hZ6O8MN7eXdQdJR0smBG94St+lA3Kazktt+R+TXkcivixJ+74n8OhH5dbXshvbggM7Qu0Dvarihm7y7S3pIejpwwwfiNt2J2/RSctsfifx6EPn1VsLvE5FfTyK/Ppbd0A0c0At6b+h9DDf0lXc/SX/JAAdu+Ezcph9xm4FKbvsLkV9/Ir9BSvh9JfIbQOQ32LIb+oIDBkIfBH2w4YYh8h4qGSYZ7sAN34jbDCVuM0LJbX8n8htG5DdSCb8fRH7DifxGWXbDEHDACOgjoY8y3DBa3mMkYyXjHLjhJ3GbMcRtxiu57V9EfmOJ/CYo4febyG8ckd9Ey24YDQ4YD30C9ImGGybJe7JkimSqAzf8IW4zmbjNNCW3/ZfIbwqR33Ql/MIk4v3WVCK/GZbdMAkcMA36dOgzDDfMlPcsyWzJHAdu8CBuM4u4zVwltx2WyG82kd88JfzCEfnNIfKbb9kNM8EBc6HPgz7fcMMCeS+ULJIsduCG8MRtFhK3WaLktiMQ+S0i8luqhF9EIr/FRH7LLLthAThgCfSl0JcZblgu7xWSlZJVDtwQibjNCuI2q5XcdmQiv5VEfmuU8ItC5LeKyG+tZTcsBweshr4G+lrDDevkvV6yQbLRgRuiErdZT9xmk5Lbjkbkt4HIb7MSftGJ/DYS+W2x7IZ14IBN0DdD32K4Yau8t0m2S3Y4cEMM4jbbiNvsVHLbMYn8thP57VLCLxaR3w4iv92W3bAVHLAT+i7ouw037JH3Xsk+yX4HbohN3GYvcZsDSm47DpHfPiK/g0r4xSXy20/kd8iyG/aAAw5APwj9kOGGw/I+IjkqOebADfGI2xwhbnNcyW3HJ/I7SuR3Qgm/BER+x4j8Tlp2w2FwwHHoJ6CfNNxwSt6nJWckZx24ISFxm9PEbc4pue1ERH5niPzOK+GXmMjvLJHfBctuOAUOOAf9PPQLhhsuyvuS5LLkigM3JCFuc4m4zVUlt52UyO8ykd81JfySEfldIfK7btkNF8EBV6Ffg37dcMMNed+U3JLcduCG5MRtbhK3uaPktlMQ+d0i8rurhF9KIr/bRH73LLvhBjjgDvS70O8Zbrgv7weSh5JHDtyQirjNA+I2j5Xcdmoiv4dEfk+U8EtD5PeIyO+pZTfcBwc8hv4E+lPDDc/k/VzyQvLSgRvSErd5TtzmlZLbTkfk94LI77USfumJ/F4S+b2x7IZn4IBX0F9Df2O44a2830neSz44cEMG4jbviNt8VHLbGYn83hP5fVLCLxOR3wciv8+W3fAWHPAR+ifonw03fJH3V8k3yXcHbshM3OYrcZsfSm47C5HfNyK/n0r4ZSXy+07k98uyG76AA35A/wn9l+GG3//ekr+SMAH23ZCNuM0f4jYeATpuOzuR318iv7BK+OUg8gsTwOMXLsCuG36DA/7d+v96WOjhAv7rhvDyjiCJKInkwA05idtEIG4TWclt5yLyi0jkF0UJv9xEfpGI/KJadkN4cEBk6FGgRzXcEE3e0SUxJDEduCEPcZvoxG1iKbntvER+MYj8Yivhl4/ILyaRXxzLbogGDogFPTb0OIYb4so7niS+JIEDN+QnbhOPuE1CJbddgMgvPpFfIiX8ChL5JSDyS2zZDXHBAQmhJ4Ke2HBDEnknlSSTJHfghkLEbZISt0mh5LYLE/klI/JLqYRfESK/5ER+qSy7IQk4IAX0lNBTGW5ILe80krSSdA7cUJS4TRriNumV3HYxIr+0RH4ZlPArTuSXjsgvo2U3pAYHpIeeAXpGww2Z5J1ZkkWS1YEbShC3yUzcJpuS2y5J5JeFyC+7En6liPyyEvnlsOyGTOCAbNCzQ89huCGnvHNJckvyOHBDaeI2uYjb5FVy22WI/HIT+eVTwq8skV8eIr/8lt2QExyQF3o+6PkNNxSQd0FJIUlhB24oR9ymIHGbIkpuuzyRXyEiv6JK+FUg8itM5FfMshsKgAOKQC8KvZjhhuLyLiEpKSnlwA0ViduUIG5TWsltVyLyK0nkV0YJv8pEfqWI/MpadkNxcEBp6GWglzXcUE7e5SUVJBUduKEKcZvyxG0qKbntqkR+FYj8KivhV43IryKRXxXLbigHDqgEvTL0KoYbqsq7mqS6pIYDN1QnblONuE1NJbddg8ivOpFfLSX8ahL51SDyq23ZDVXBATWh14Je23BDHXnXldST1HfghlrEbeoSt2mg5LZrE/nVI/LzVMKvDpFffSK/hpbdUAcc0AC6J/SGhhsaybuxpInEy4Eb6hK3aUzcpqmS265H5NeEyK+ZEn71ify8iPyaW3ZDI3BAU+jNoDc33NBC3i0l3hIfB25oQNymJXEbXyW37Unk503k56eEX0MiPx8iP3/LbmgBDvCF7gfd33BDgLwDJUGSYAduaETcJpC4TYiS225M5BdE5BeqhF8TIr9gIr9Wlt0QAA4IgR4KvZXhhtbybiNpK2nnwA1exG3aELdpr+S2mxL5tSXy66CEXzMiv3ZEfh0tu6E1OKA99A7QOxpu6CTvzpIukq4O3NCcuE1n4jbdlNx2CyK/LkR+3ZXwa0nk15XIr4dlN3QCB3SD3h16D8MNPeXdS9Jb0seBG7yJ2/QibtNXyW37EPn1JvLrp4SfL5FfHyK//pbd0BMc0Bd6P+j9DTcMkPdAySDJYAdu8CNuM5C4zRAlt+1P5DeIyG+oEn4BRH6DifyGWXbDAHDAEOhDoQ8z3DBc3iMkIyWjHLghkLjNCOI2o5XcdhCR30givzFK+AUT+Y0i8htr2Q3DwQGjoY+BPtZwwzh5j5dMkEx04IYQ4jbjidtMUnLboUR+E4j8Jivh14rIbyKR3xTLbhgHDpgEfTL0KYYbpsp7mmS6ZIYDN7QmbjONuM1MJbfdhshvOpHfLCX82hL5zSDym23ZDVPBATOhz4I+23DDHHnPlcyTzHfghnbEbeYSt1mg5LbbE/nNI/JbqIRfByK/+UR+iyy7YQ44YAH0hdAXGW5YLO8lkqWSZQ7c0JG4zRLiNsuV3HYnIr+lRH4rlPDrTOS3jMhvpWU3LAYHLIe+AvpKww2r5L1askay1oEbuhC3WU3cZp2S2+5K5LeGyG+9En7diPzWEvltsOyGVeCAddDXQ99guGGjvDdJNku2OHBDd+I2m4jbbFVy2z2I/DYT+W1Twq8nkd8WIr/tlt2wERywFfo26NsNN+yQ907JLsluB27oRdxmJ3GbPUpuuzeR3y4iv71K+PUh8ttN5LfPsht2gAP2QN8LfZ/hhv3yPiA5KDnkwA19idscIG5zWMlt9yPyO0jkd0QJv/5EfoeI/I5adsN+cMBh6EegHzXccEzexyUnJCcduGEAcZvjxG1OKbntgUR+J4j8TivhN4jI7ySR3xnLbjgGDjgF/TT0M4Ybzsr7nOS85IIDNwwmbnOOuM1FJbc9hMjvPJHfJSX8hhL5XSDyu2zZDWfBARehX4J+2XDDFXlflVyTXHfghmHEba4St7mh5LaHE/ldI/K7qYTfCCK/60R+tyy74Qo44Ab0m9BvGW64Le87kruSew7cMJK4zR3iNveV3PYoIr+7RH4PlPAbTeR3j8jvoWU33AYH3If+APpDww2P5P1Y8kTy1IEbxhC3eUzc5pmS2x5L5PeEyO+5En7jiPyeEvm9sOyGR+CAZ9CfQ39huOGlvF9JXkveOHDDeOI2r4jbvFVy2xOI/F4T+b1Twm8ikd8bIr/3lt3wEhzwFvo76O8NN3yQ90fJJ8lnB26YRNzmI3GbL0puezKR3yciv69K+E0h8vtM5PfNshs+gAO+QP8K/Zvhhu/y/iH5KfnlwA1Tidv8IG7zW8ltTyPy+0nk90cJv+lEfr+I/P5adsN3cMBv6H+g/zXcECbQI4yHJKwkXKB9N8wgbvPvu1nbhA/UcdszifzCEvlFUMJvFpFfOCK/iIF23fDv3/n/HBAeegToEQP/64ZI8o4siSKJ6sANs4nbRCZuE03Jbc8h8otC5BddCb+5RH5RifxiWHZDJHBANOjRoccw3BBT3rEksSVxHLhhHnGbWMRt4iq57flEfrGJ/OIp4beAyC8OkV98y26ICQ6ICz0e9PiGGxLIO6EkkSSxAzcsJG6TkLhNEiW3vYjILxGRX1Il/BYT+SUm8ktm2Q0JwAFJoCeFnsxwQ3J5p5CklKRy4IYlxG1SELdJreS2lxL5pSTyS6OE3zIiv1REfmktuyE5OCA19DTQ0xpuSCfv9JIMkowO3LCcuE164jaZlNz2CiK/DER+mZXwW0nkl5HIL4tlN6QDB2SCnhl6FsMNWeWdTZJdksOBG1YRt8lG3CanktteTeSXncgvlxJ+a4j8chD55bbshqzggJzQc0HPbbghj7zzSvJJ8jtww1riNnmJ2xRQctvriPzyEfkVVMJvPZFffiK/QpbdkAccUAB6QeiFDDcUlncRSVFJMQdu2EDcpghxm+JKbnsjkV9RIr8SSvhtIvIrRuRX0rIbCoMDikMvAb2k4YZS/75JUkZS1oEbNhO3KU3cppyS295C5FeGyK+8En5bifzKEvlVsOyGUuCActDLQ69guKGivCtJKkuqOHDDNuI2lYjbVFVy29uJ/CoT+VVTwm8HkV8VIr/qlt1QERxQFXo16NUNN9SQd01JLUltB27YSdymJnGbOkpuexeRXy0iv7pK+O0m8qtN5FfPshtqgAPqQK8LvZ7hhvrybiDxlDR04IY9xG0aELdppOS29xL5eRL5NVbCbx+RX0MivyaW3VAfHNAIemPoTQw3eMm7qaSZpLkDN+wnbtOUuE0LJbd9gMivGZFfSyX8DhL5NSfy87bsBi9wQAvoLaF7G27wkbevxE/i78ANh4jb+BK3CVBy24eJ/PyI/AKV8DtC5OdP5Bdk2Q0+4IAA6IHQgww3BMs7RBIqaeXADUeJ24QQt2mt5LaPEfmFEvm1UcLvOJFfKyK/tpbdEAwOaA29DfS2hhvaybu9pIOkowM3nCBu0564TSclt32SyK8DkV9nJfxOEfl1JPLrYtkN7cABnaB3ht7FcENXeXeTdJf0cOCG08RtuhG36ankts8Q+XUn8uulhN9ZIr8eRH69LbuhKzigJ/Re0Hsbbugj776SfpL+DtxwjrhNX+I2A5Tc9nkiv35EfgOV8LtA5NefyG+QZTf0AQcMgD4Q+iDDDYPlPUQyVDLMgRsuErcZQtxmuJLbvkTkN5TIb4QSfpeJ/IYR+Y207IbB4IDh0EdAH2m4YZS8R0vGSMY6cMMV4jajiduMU3LbV4n8xhD5jVfC7xqR31givwmW3TAKHDAO+njoEww3TJT3JMlkyRQHbrhO3GYScZupSm77BpHfZCK/aUr43STym0LkN92yGyaCA6ZCnwZ9uuGGGfKeKZklme3ADbeI28wkbjNHyW3fJvKbReQ3Vwm/O0R+s4n85ll2wwxwwBzoc6HPM9wwX94LJAslixy44S5xmwXEbRYrue17RH4LifyWKOF3n8hvEZHfUstumA8OWAx9CfSlhhuWyXu5ZIVkpQM3PCBus5y4zSolt/2QyG8Fkd9qJfweEfmtJPJbY9kNy8ABq6Cvhr7GcMNaea+TrJdscOCGx8Rt1hG32ajktp8Q+a0n8tukhN9TIr8NRH6bLbthLThgI/RN0Dcbbtgi762SbZLtDtzwjLjNVuI2O5Tc9nMiv21EfjuV8HtB5LedyG+XZTdsAQfsgL4T+i7DDbvlvUeyV7LPgRteErfZQ9xmv5LbfkXkt5fI74ASfq+J/PYR+R207Ibd4ID90A9AP2i44ZC8D0uOSI46cMMb4jaHidscU3Lbb4n8jhD5HVfC7x2R31EivxOW3XAIHHAM+nHoJww3nJT3KclpyRkHbnhP3OYUcZuzSm77A5HfaSK/c0r4fSTyO0Pkd96yG06CA85CPwf9vOGGC/K+KLkkuezADZ+I21wkbnNFyW1/JvK7ROR3VQm/L0R+l4n8rll2wwVwwBXoV6FfM9xwXd43JDcltxy44StxmxvEbW4rue1vRH43ifzuKOH3ncjvFpHfXctuuA4OuA39DvS7hhvuyfu+5IHkoQM3/CBuc5+4zSMlt/2TyO8Bkd9jJfx+Efk9JPJ7YtkN98ABj6A/hv7EcMNTeT+TPJe8cOCG38RtnhG3eanktv8Q+T0n8nulhN9fIr8XRH6vLbvhKTjgJfRX0F8bbngj77eSd5L3DtwQJjHx/+yJ23xQctseRH7viPw+KuEXlsjvPZHfJ8tueAMO+AD9I/RPhhs+y/uL5KvkmwM3hCNu84W4zXcltx2eyO8rkd8PJfwiEPl9I/L7adkNn8EB36H/gP7TcMMvef/+9zfJXwduiEjc5jdxmzBBOm47EpHfHyI/DyX8IhP5/SXyCxtk1w2/wAH/bv1/3QN62KD/uiGcvMNLIkgiBtl3QxTiNuGDeNtEUnLbUYn8IhD5RVbCLxqRX0QivyiW3RAOHBAJemToUQw3RJV3NEl0SQwHbohO3CYacZuYSm47BpFfdCK/WEr4xSTyi0HkF9uyG6KCA2JCjwU9tuGGOPKOK4knie/ADbGI28QlbpNAyW3HJvKLR+SXUAm/OER+8Yn8Ell2QxxwQALoCaEnMtyQWN5JJEklyRy4IS5xmyTEbZIrue14RH5JifxSKOEXn8gvGZFfSstuSAwOSA49BfSUhhtSyTu1JI0krQM3JCBuk5q4TTolt52QyC8NkV96JfwSEfmlJfLLYNkNqcAB6aCnh57BcENGeWeSZJZkceCGxMRtMhG3yarktpMQ+WUm8sumhF9SIr8sRH7ZLbshIzggK/Rs0LMbbsgh75ySXJLcDtyQjLhNTuI2eZTcdnIiv1xEfnmV8EtB5JebyC+fZTfkAAfkgZ4Xej7DDfnlXUBSUFLIgRtSErcpQNymsJLbTkXkV5DIr4gSfqmJ/AoR+RW17Ib84IDC0ItAL2q4oZi8i0tKSEo6cEMa4jbFiduUUnLbaYn8ShD5lVbCLx2RX0kivzKW3VAMHFAKemnoZQw3lJV3OUl5SQUHbkhP3KYccZuKSm47A5FfeSK/Skr4ZSTyq0DkV9myG8qCAypCrwS9suGGKvKuKqkmqe7ADZmI21QlblNDyW1nJvKrRuRXUwm/LER+1Yn8all2QxVwQA3oNaHXMtxQW951JHUl9Ry4IStxmzrEbeorue1sRH51ifwaKOGXncivHpGfp2U31AYH1IfeALqn4YaG8m4kaSxp4sANOYjbNCJu46XktnMS+TUm8muqhF8uIr8mRH7NLLuhITjAC3pT6M0MNzSXdwtJS4m3AzfkJm7TgriNj5LbzkPk15LIz1cJv7xEft5Efn6W3dAcHOAD3Re6n+EGf3kHSAIlQQ7ckI+4TQBxm2Alt52fyC+QyC9ECb8CRH5BRH6hlt3gDw4Ihh4CPdRwQyt5t5a0kbR14IaCxG1aE7dpp+S2CxH5tSHya6+EX2Eiv7ZEfh0su6EVOKAd9PbQOxhu6CjvTpLOki4O3FCEuE0n4jZdldx2USK/zkR+3ZTwK0bk14XIr7tlN3QEB3SF3g16d8MNPeTdU9JL0tuBG4oTt+lJ3KaPktsuQeTXi8ivrxJ+JYn8ehP59bPshh7ggD7Q+0LvZ7ihv7wHSAZKBjlwQyniNgOI2wxWctulifwGEvkNUcKvDJHfICK/oZbd0B8cMBj6EOhDDTcMk/dwyQjJSAduKEvcZjhxm1FKbrsckd8IIr/RSviVJ/IbSeQ3xrIbhoEDRkEfDX2M4Yax8h4nGS+Z4MANFYjbjCNuM1HJbVck8htP5DdJCb9KRH4TiPwmW3bDWHDAROiToE823DBF3lMl0yTTHbihMnGbqcRtZii57SpEftOI/GYq4VeVyG86kd8sy26YAg6YAX0m9FmGG2bLe45krmSeAzdUI24zh7jNfCW3XZ3Iby6R3wIl/GoQ+c0j8lto2Q2zwQHzoS+AvtBwwyJ5L5YskSx14IaaxG0WE7dZpuS2axH5LSHyW66EX20iv6VEfissu2EROGAZ9OXQVxhuWCnvVZLVkjUO3FCHuM0q4jZrldx2XSK/1UR+65Twq0fkt4bIb71lN6wEB6yFvg76esMNG+S9UbJJstmBG+oTt9lI3GaLkttuQOS3ichvqxJ+nkR+m4n8tll2wwZwwBboW6FvM9ywXd47JDsluxy4oSFxmx3EbXYrue1GRH47ifz2KOHXmMhvF5HfXstu2A4O2A19D/S9hhv2yXu/5IDkoAM3NCFus5+4zSElt+1F5HeAyO+wEn5NifwOEvkdseyGfeCAQ9APQz9iuOGovI9JjktOOHBDM+I2x4jbnFRy282J/I4T+Z1Swq8Fkd8JIr/Tlt1wFBxwEvop6KcNN5yR91nJOcl5B25oSdzmLHGbC0pu25vI7xyR30Ul/HyI/M4T+V2y7IYz4IAL0C9Cv2S44bK8r0iuSq45cIMvcZsrxG2uK7ltPyK/q0R+N5Tw8yfyu0bkd9OyGy6DA65DvwH9puGGW/K+LbkjuevADQHEbW4Tt7mn5LYDifzuEPndV8IviMjvLpHfA8tuuAUOuAf9PvQHhhseyvuR5LHkiQM3BBO3eUTc5qmS2w4h8ntM5PdMCb9QIr8nRH7PLbvhITjgKfRn0J8bbngh75eSV5LXDtzQirjNS+I2b5Tcdmsiv1dEfm+V8GtD5PeayO+dZTe8AAe8gf4W+jvDDe/l/UHyUfLJgRvaErf5QNzms5Lbbkfk95HI74sSfu2J/D4R+X217Ib34IDP0L9A/2q44Zu8v0t+SH46cEMH4jbfidv8UnLbHYn8fhD5/VbCrxOR308ivz+W3fANHPAL+m/ofww3/JV3mGCPMB6SsMH23dCZuM2/72ZtEy5Yx213IfLzIPILr4RfVyK/sER+EYLtuuEvOODfrf+vh4ceIfi/bogo70iSyJIoDtzQjbhNJOI2UZXcdnciv8hEftGU8OtB5BeFyC+6ZTdEBAdEhR4NenTDDTHkHVMSSxLbgRt6EreJSdwmjpLb7kXkF4vIL64Sfr2J/GIT+cWz7IYY4IA40ONCj2e4Ib68E0gSShI5cEMf4jYJiNskVnLbfYn8EhL5JVHCrx+RXyIiv6SW3RAfHJAYehLoSQ03JJN3ckkKSUoHbuhP3CY5cZtUSm57AJFfCiK/1Er4DSTyS0nkl8ayG5KBA1JBTw09jeGGtPJOJ0kvyeDADYOI26QjbpNRyW0PJvJLT+SXSQm/IUR+GYj8Mlt2Q1pwQEbomaBnNtyQRd5ZJdkk2R24YShxm6zEbXIoue1hRH7ZiPxyKuE3nMgvO5FfLstuyAIOyAE9J/RchhtyyzuPJK8knwM3jCBuk4e4TX4ltz2SyC8vkV8BJfxGEfnlI/IraNkNucEB+aEXgF7QcEMheReWFJEUdeCG0cRtChO3KabktscQ+RUh8iuuhN9YIr+iRH4lLLuhEDigGPTi0EsYbigp71L/vktSxoEbxhG3KUXcpqyS2x5P5FeayK+cEn4TiPzKEPmVt+yGkuCAstDLQS9vuKGCvCtKKkkqO3DDROI2FYnbVFFy25OI/CoR+VVVwm8ykV9lIr9qlt1QARxQBXpV6NUMN1SXdw1JTUktB26YQtymBnGb2kpueyqRX00ivzpK+E0j8qtF5FfXshuqgwNqQ68Dva7hhnryri9pIPF04IbpxG3qE7dpqOS2ZxD5NSDya6SE30wiP08iv8aW3VAPHNAQeiPojQ03NJG3l6SppJkDN8wibuNF3Ka5ktueTeTXlMivhRJ+c4j8mhH5tbTshibggObQW0BvabjBW94+El+JnwM3zCVu40Pcxl/Jbc8j8vMl8gtQwm8+kZ8fkV+gZTd4gwP8oQdADzTcECTvYEmIJNSBGxYQtwkmbtNKyW0vJPILIfJrrYTfIiK/UCK/NpbdEAQOaAW9NfQ2hhvayrudpL2kgwM3LCZu0464TUclt72EyK89kV8nJfyWEvl1IPLrbNkNbcEBHaF3gt7ZcEMXeXeVdJN0d+CGZcRtuhK36aHktpcT+XUj8uuphN8KIr/uRH69LLuhCzigB/Se0HsZbugt7z6SvpJ+DtywkrhNH+I2/ZXc9ioiv75EfgOU8FtN5NePyG+gZTf0Bgf0hz4A+kDDDYPkPVgyRDLUgRvWELcZTNxmmJLbXkvkN4TIb7gSfuuI/IYS+Y2w7IZB4IBh0IdDH2G4YaS8R0lGS8Y4cMN64jajiNuMVXLbG4j8RhP5jVPCbyOR3xgiv/GW3TASHDAW+jjo4w03TJD3RMkkyWQHbthE3GYicZspSm57M5HfJCK/qUr4bSHym0zkN82yGyaAA6ZAnwp9muGG6fKeIZkpmeXADVuJ28wgbjNbyW1vI/KbSeQ3Rwm/7UR+s4j85lp2w3RwwGzoc6DPNdwwT97zJQskCx24YQdxm/nEbRYpue2dRH4LiPwWK+G3i8hvIZHfEstumAcOWAR9MfQlhhuWynuZZLlkhQM37CZus4y4zUolt72HyG85kd8qJfz2EvmtIPJbbdkNS8EBK6Gvgr7acMMaea+VrJOsd+CGfcRt1hK32aDktvcT+a0j8tuohN8BIr/1RH6bLLthDThgA/SN0DcZbtgs7y2SrZJtDtxwkLjNFuI225Xc9iEiv61EfjuU8DtM5LeNyG+nZTdsBgdsh74D+k7DDbvkvVuyR7LXgRuOELfZTdxmn5LbPkrkt4fIb78SfseI/PYS+R2w7IZd4IB90PdDP2C44aC8D0kOS444cMNx4jaHiNscVXLbJ4j8DhP5HVPC7ySR3xEiv+OW3XAQHHAU+jHoxw03nJD3SckpyWkHbjhF3OYkcZszSm77NJHfKSK/s0r4nSHyO03kd86yG06AA85APwv9nOGG8/K+ILkoueTADWeJ21wgbnNZyW2fI/K7SOR3RQm/80R+l4j8rlp2w3lwwGXoV6BfNdxwTd7XJTckNx244QJxm+vEbW4pue2LRH43iPxuK+F3icjvJpHfHctuuAYOuAX9NvQ7hhvuyvue5L7kgQM3XCZuc4+4zUMlt32FyO8+kd8jJfyuEvk9IPJ7bNkNd8EBD6E/gv7YcMMTeT+VPJM8d+CGa8RtnhK3eaHktq8T+T0j8nuphN8NIr/nRH6vLLvhCTjgBfSX0F8Zbngt7zeSt5J3Dtxwk7jNG+I275Xc9i0iv7dEfh+U8LtN5PeOyO+jZTe8Bge8h/4B+kfDDZ/k/VnyRfLVgRvuELf5TNzmm5Lbvkvk94XI77sSfveI/L4S+f2w7IZP4IBv0L9D/2G44ae8f0l+//u7AzfcJ27zi7jNXyW3/YDI7zeRX5gQHfweEvn9IfLzCLHrhp/ggL/Q/+32v+4R8l83hJV3OEl4SYQQ+254RNwmXAhvm4hKbvsxkV94Ir9ISvg9IfKLQOQX2bIbwoIDIkKPBD2y4YYo8o4qiSaJ7sANT4nbRCVuE0PJbT8j8otG5BdTCb/nRH7RifxiWXZDFHBADOgxoccy3BBb3nEkcSXxHLjhBXGbOMRt4iu57ZdEfnGJ/BIo4feKyC8ekV9Cy26IDQ6IDz0B9ISGGxLJO7EkiSSpAze8Jm6TmLhNMiW3/YbILwmRX3Il/N4S+SUl8kth2Q2JwAHJoCeHnsJwQ0p5p5KklqRx4IZ3xG1SEbdJq+S23xP5pSbyS6eE3wcivzREfuktuyElOCAt9HTQ0xtuyCDvjJJMkswO3PCRuE1G4jZZlNz2JyK/TER+WZXw+0zkl5nIL5tlN2QAB2SBnhV6NsMN2eWdQ5JTksuBG74Qt8lB3Ca3ktv+SuSXk8gvjxJ+34j8chH55bXshuzggNzQ80DPa7ghn7zzSwpICjpww3fiNvmJ2xRScts/iPwKEPkVVsLvJ5FfQSK/IpbdkA8cUAh6YehFDDcUlXcxSXFJCQdu+EXcphhxm5JKbvs3kV9xIr9SSvj9IfIrQeRX2rIbioIDSkIvBb204YYy8i4rKScp78ANf4nblCVuU0HJbYdJwvutckR+FZXw8yDyK0/kV8myG8qAAypArwi9kuGGyvKuIqkqqebADWGJ21QhblNdyW2HI/KrSuRXQwm/8ER+1Yj8alp2Q2VwQHXoNaDXNNxQS961JXUkdR24IQJxm9rEbeopue2IRH51iPzqK+EXicivLpFfA8tuqAUOqAe9PvQGhhs85d1Q0kjS2IEbIhO3aUjcpomS245C5NeIyM9LCb+oRH6NifyaWnaDJzigCXQv6E0NNzSTd3NJC0lLB26IRtymOXEbbyW3HZ3IrwWRn48SfjGI/FoS+fladkMzcIA3dB/ovoYb/OTtLwmQBDpwQ0ziNv7EbYKU3HYsIr8AIr9gJfxiE/kFEvmFWHaDHzggCHow9BDDDaHybiVpLWnjwA1xiNu0Im7TVsltxyXya03k104Jv3hEfm2I/NpbdkMoOKAt9HbQ2xtu6CDvjpJOks4O3BCfuE1H4jZdlNx2AiK/TkR+XZXwS0jk15nIr5tlN3QAB3SB3hV6N8MN3eXdQ9JT0suBGxIRt+lB3Ka3kttOTOTXk8ivjxJ+SYj8ehH59bXshu7ggN7Q+0Dva7ihn7z7SwZIBjpwQ1LiNv2J2wxSctvJiPwGEPkNVsIvOZHfQCK/IZbd0A8cMAj6YOhDDDcMlfcwyXDJCAduSEHcZhhxm5FKbjslkd9wIr9RSvilIvIbQeQ32rIbhoIDRkIfBX204YYx8h4rGScZ78ANqYnbjCVuM0HJbach8htH5DdRCb+0RH7jifwmWXbDGHDABOgToU8y3DBZ3lMkUyXTHLghHXGbKcRtpiu57fREflOJ/GYo4ZeByG8akd9My26YDA6YDn0G9JmGG2bJe7ZkjmSuAzdkJG4zm7jNPCW3nYnIbw6R33wl/DIT+c0l8ltg2Q2zwAHzoM+HvsBww0J5L5Islixx4IYsxG0WEbdZquS2sxL5LSbyW6aEXzYivyVEfsstu2EhOGAp9GXQlxtuWCHvlZJVktUO3JCduM1K4jZrlNx2DiK/VUR+a5Xwy0nkt5rIb51lN6wAB6yBvhb6OsMN6+W9QbJRssmBG3IRt9lA3GazktvOTeS3kchvixJ+eYj8NhH5bbXshvXggM3Qt0Dfarhhm7y3S3ZIdjpwQ17iNtuJ2+xSctv5iPx2EPntVsIvP5HfTiK/PZbdsA0csAv6buh7DDfslfc+yX7JAQduKEDcZh9xm4NKbrsgkd9+Ir9DSvgVIvI7QOR32LIb9oIDDkI/BP2w4YYj8j4qOSY57sANhYnbHCVuc0LJbRch8jtG5HdSCb+iRH7HifxOWXbDEXDACegnoZ8y3HBa3mckZyXnHLihGHGbM8Rtziu57eJEfmeJ/C4o4VeCyO8ckd9Fy244DQ44D/0C9IuGGy7J+7LkiuSqAzeUJG5zmbjNNSW3XYrI7wqR33Ul/EoT+V0l8rth2Q2XwAHXoF+HfsNww01535Lcltxx4IYyxG1uEbe5q+S2yxL53Sbyu6eEXzkivztEfvctu+EmOOAu9HvQ7xtueCDvh5JHkscO3FCeuM1D4jZPlNx2BSK/R0R+T5Xwq0jk95jI75llNzwABzyB/hT6M8MNz+X9QvJS8sqBGyoRt3lB3Oa1ktuuTOT3ksjvjRJ+VYj8XhH5vbXshufggNfQ30B/a7jhnbzfSz5IPjpwQ1XiNu+J23xSctvViPw+EPl9VsKvOpHfRyK/L5bd8A4c8An6Z+hfDDd8lfc3yXfJDwduqEHc5htxm59Kbrsmkd93Ir9fSvjVIvL7QeT327IbvoIDfkL/Bf234YY/8v4rCRPqEcYj1L4bahO3+UvcJmyojtuuQ+QXJpTHL5wSfnWJ/DyI/MKH2nXDH3DAv1v/Xw8HPXzof90QQd4RJZEkkR24oR5xm4jEbaIoue36RH6RiPyiKuHXgMgvMpFfNMtuiAAOiAI9KvRohhuiyzuGJKYklgM3eBK3iUHcJraS225I5BeTyC+OEn6NiPxiEfnFteyG6OCA2NDjQI9ruCGevONLEkgSOnBDY+I28YnbJFJy202I/BIQ+SVWws+LyC8hkV8Sy26IBw5IBD0x9CSGG5LKO5kkueT/qDGHIEGbbgmPbdu2bdu2zR60PbZt27Zt27aNe2bxx82v1lkVcRYZkdWLjjeePP0sOqUDN7QgbpOcuE0qJbfdksgvBZFfaiX8WhH5pSTyS2PZDcnAAamgp4aexnBDWnmnk6SXZHDghtbEbdIRt8mo5LbbEPmlJ/LLpIRfWyK/DER+mS27IS04ICP0TNAzG27IIu+skmyS7A7c0I64TVbiNjmU3HZ7Ir9sRH45lfDrQOSXncgvl2U3ZAEH5ICeE3ouww255Z1HkleSz4EbOhK3yUPcJr+S2+5E5JeXyK+AEn6difzyEfkVtOyG3OCA/NALQC9ouKGQvAtLikiKOnBDF+I2hYnbFFNy212J/IoQ+RVXwq8bkV9RIr8Slt1QCBxQDHpx6CUMN5SUdylJ6X/f5sAN3YnblCJuU1bJbfcg8itN5FdOCb+eRH5liPzKW3ZDSXBAWejloJc33FBB3hUllSSVHbihF3GbisRtqii57d5EfpWI/Koq4deHyK8ykV81y26oAA6oAr0q9GqGG6rLu4akpqSWAzf0JW5Tg7hNbSW37UHkV5PIr44Sfv2I/GoR+dW17Ibq4IDa0OtAr2u4oZ6860saSBo6cEN/4jb1ids0UnLbA4j8GhD5NVbCbyCRX0MivyaW3VAPHNAIemPoTQw3NJV3M0lzSQsHbvAkbtOMuE1LJbftReTXnMivlRJ+3kR+LYj8Wlt2Q1NwQEvoraC3NtzQRt5tJe0k7R24wYe4TVviNh2U3LYvkV87Ir+OSvj5Efm1J/LrZNkNbcABHaB3hN7JcENneXeRdJV0c+AGf+I2XYjbdFdy2wFEfl2J/Hoo4RdI5NeNyK+nZTd0Bgd0h94Dek/DDb3k3VvSR9LXgRuCiNv0Jm7joeS2g4n8+hD59VPCL4TIry+RX3/LbugFDvCA3g96f8MNA+Q9UOIp8XLghlDiNgOJ23grue1BRH6eRH4+SvgNJvLzIvLzteyGAeAAb+g+0H0NN/jJ218SIAl04IYhxG38idsEKbntoUR+AUR+wUr4DSPyCyTyC7HsBj9wQBD0YOghhhtC5T1IMlgyxIEbhhO3GUTcZqiS2x5B5DeYyG+YEn4jifyGEPkNt+yGUHDAUOjDoA833DBC3iMloySjHbhhFHGbkcRtxii57dFEfqOI/MYq4TeGyG80kd84y24YAQ4YA30s9HGGG8bLe4JkomSSAzeMJW4zgbjNZCW3PY7IbyKR3xQl/MYT+U0i8ptq2Q3jwQGToU+BPtVwwzR5T5fMkMx04IYJxG2mE7eZpeS2JxL5zSDym62E3yQiv5lEfnMsu2EaOGAW9NnQ5xhumCvveZL5kgUO3DCZuM084jYLldz2FCK/+UR+i5Twm0rkt4DIb7FlN8wFByyEvgj6YsMNS+S9VLJMstyBG6YRt1lK3GaFktueTuS3jMhvpRJ+M4j8lhP5rbLshiXggBXQV0JfZbhhtbzXSNZK1jlww0ziNmuI26xXctuziPzWEvltUMJvNpHfOiK/jZbdsBocsB76BugbDTdskvdmyRbJVgdumEPcZjNxm21Kbnsukd8WIr/tSvjNI/LbSuS3w7IbNoEDtkHfDn2H4Yad8t4l2S3Z48AN84nb7CJus1fJbS8g8ttN5LdPCb+FRH57iPz2W3bDTnDAXuj7oO833HBA3gclhySHHbhhEXGbg8Rtjii57cVEfoeI/I4q4beEyO8wkd8xy244AA44Av0o9GOGG47L+4TkpOSUAzcsJW5zgrjNaSW3vYzI7ySR3xkl/JYT+Z0i8jtr2Q3HwQGnoZ+BftZwwzl5n5dckFx04IYVxG3OE7e5pOS2VxL5XSDyu6yE3yoiv4tEflcsu+EcOOAS9MvQrxhuuCrva5LrkhsO3LCauM014jY3ldz2GiK/60R+t5TwW0vkd4PI77ZlN1wFB9yEfgv6bcMNd+R9V3JPct+BG9YRt7lL3OaBktteT+R3j8jvoRJ+G4j87hP5PbLshjvggAfQH0J/ZLjhsbyfSJ5Knjlww0biNk+I2zxXctubiPyeEvm9UMJvM5HfMyK/l5bd8Bgc8Bz6C+gvDTe8kvdryRvJWwdu2ELc5jVxm3dKbnsrkd8bIr/3SvhtI/J7S+T3wbIbXoED3kF/D/2D4YaP8v4k+Sz54sAN24nbfCJu81XJbe8g8vtM5PdNCb+dRH5fiPy+W3bDR3DAV+jfoH833PBD3j8lvyS/HbhhF3Gbn8Rt/ii57d1Efr+I/P4q4beHyO83kV+YHnbd8AMc8Af6X+j/vgHdEFbe4SThJRF62HfDXuI24XrwtonYQ8dt7yPyC0/kF0kJv/1EfhGI/CJbdkPYHv/vgIjQI0GPbLghiryjSqJJojtwwwHiNlGJ28RQctsHifyiEfnFVMLvEJFfdCK/WJbdEAUcEAN6TOixDDfElnccSVxJPAduOEzcJg5xm/hKbvsIkV9cIr8ESvgdJfKLR+SX0LIbYoMD4kNPAD2h4YZE8k4sSSJJ6sANx4jbJCZuk0zJbR8n8ktC5JdcCb8TRH5JifxSWHZDInBAMujJoacw3JBS3qkkqSVpHLjhJHGbVMRt0iq57VNEfqmJ/NIp4XeayC8NkV96y25ICQ5ICz0d9PSGGzLIO6MkkySzAzecIW6TkbhNFiW3fZbILxORX1Yl/M4R+WUm8stm2Q0ZwAFZoGeFns1wQ3Z555DklORy4IbzxG1yELfJreS2LxD55STyy6OE30Uiv1xEfnktuyE7OCA39DzQ8xpuyCfv/JICkoIO3HCJuE1+4jaFlNz2ZSK/AkR+hZXwu0LkV5DIr4hlN+QDBxSCXhh6EcMNReVdTFJcUsKBG64StylG3Kakktu+RuRXnMivlBJ+14n8ShD5lbbshqLggJLQS0EvbbihjLzLSspJyjtwww3iNmWJ21RQcts3ifzKEflVVMLvFpFfeSK/SpbdUAYcUAF6ReiVDDdUlncVSVVJNQduuE3cpgpxm+pKbvsOkV9VIr8aSvjdJfKrRuRX07IbKoMDqkOvAb2m4YZa8q4tqSOp68AN94jb1CZuU0/Jbd8n8qtD5FdfCb8HRH51ifwaWHZDLXBAPej1oTcw3NBQ3o0kjSVNHLjhIXGbRsRtmiq57UdEfo2J/Jop4feYyK8JkV9zy25oCA5oCr0Z9OaGG1rIu6WklaS1Azc8IW7TkrhNGyW3/ZTIrxWRX1sl/J4R+bUm8mtn2Q0twAFtoLeF3s5wQ3t5d5B0lHRy4IbnxG06ELfprOS2XxD5dSTy66KE30siv05Efl0tu6E9OKAz9C7Quxpu6Cbv7pIekp4O3PCKuE134ja9lNz2ayK/HkR+vZXwe0Pk15PIr49lN3QDB/SC3ht6H8MNfeXtIekn6e/ADW+J23gQtxmg5LbfEfn1I/IbqITfeyK//kR+npbd0BccMAD6QOiehhu85O0t8ZH4OnDDB+I23sRt/JTc9kciPx8iP38l/D4R+fkS+QVYdoMXOMAPuj/0AMMNgfIOkgRLQhy44TNxmyDiNqFKbvsLkV8wkd8gJfy+EvmFEPkNtuyGQHBAKPRB0Acbbhgi76GSYZLhDtzwjbjNUOI2I5Tc9nciv2FEfiOV8PtB5DecyG+UZTcMAQeMgD4S+ijDDaPlPUYyVjLOgRt+ErcZQ9xmvJLb/kXkN5bIb4ISfr+J/MYR+U207IbR4IDx0CdAn2i4YZK8J0umSKY6cMMf4jaTidtMU3Lbf4n8phD5TVfCL0wy3u+aSuQ3w7IbJoEDpkGfDn2G4YaZ8p4lmS2Z48ANYYnbzCJuM1fJbYcj8ptN5DdPCb/wRH5ziPzmW3bDTHDAXOjzoM833LBA3gsliySLHbghAnGbhcRtlii57YhEfouI/JYq4ReJyG8xkd8yy25YAA5YAn0p9GWGG5bLe4VkpWSVAzdEJm6zgrjNaiW3HYXIbyWR3xol/KIS+a0i8ltr2Q3LwQGroa+BvtZwwzp5r5dskGx04IZoxG3WE7fZpOS2oxP5bSDy26yEXwwiv41Eflssu2EdOGAT9M3Qtxhu2CrvbZLtkh0O3BCTuM024jY7ldx2LCK/7UR+u5Twi03kt4PIb7dlN2wFB+yEvgv6bsMNe+S9V7JPst+BG+IQt9lL3OaAktuOS+S3j8jvoBJ+8Yj89hP5HbLshj3ggAPQD0I/ZLjhsLyPSI5KjjlwQ3ziNkeI2xxXctsJiPyOEvmdUMIvIZHfMSK/k5bdcBgccBz6CegnDTeckvdpyRnJWQduSETc5jRxm3NKbjsxkd8ZIr/zSvglIfI7S+R3wbIbToEDzkE/D/2C4YaL8r4kuSy54sANSYnbXCJuc1XJbScj8rtM5HdNCb/kRH5XiPyuW3bDRXDAVejXoF833HBD3jcltyS3HbghBXGbm8Rt7ii57ZREfreI/O4q4ZeKyO82kd89y264AQ64A/0u9HuGG+7L+4HkoeSRAzekJm7zgLjNYyW3nYbI7yGR3xMl/NIS+T0i8ntq2Q33wQGPoT+B/tRwwzN5P5e8kLx04IZ0xG2eE7d5peS20xP5vSDye62EXwYiv5dEfm8su+EZOOAV9NfQ3xhueCvvd5L3kg8O3JCRuM074jYfldx2JiK/90R+n5Twy0zk94HI77NlN7wFB3yE/gn6Z8MNX+T9VfJN8t2BG7IQt/lK3OaHktvOSuT3jcjvpxJ+2Yj8vhP5/bLshi/ggB/Qf0L/Zbjh97+35K8kTE/7bshO3OYPcZuwPXXcdg4iv79EfuGU8MtJ5BemJ49f+J523fAbHPDv1v/Xw0EP3/O/bogg74iSSJLIDtyQi7hNROI2UZTcdm4iv0hEflGV8MtD5BeZyC+aZTdEAAdEgR4VejTDDdHlHUMSUxLLgRvyEreJQdwmtpLbzkfkF5PIL44SfvmJ/GIR+cW17Ibo4IDY0ONAj2u4IZ6840sSSBI6cEMB4jbxidskUnLbBYn8EhD5JVbCrxCRX0IivySW3RAPHJAIemLoSQw3JJV3MklySQoHbihM3CYZcZuUSm67CJFfciK/VEr4FSXyS0Hkl9qyG5KCA1JCTwU9teGGNPJOK0knSe/ADcWI26QlbpNByW0XJ/JLR+SXUQm/EkR+6Yn8Mll2QxpwQAboGaFnMtyQWd5ZJFkl2Ry4oSRxmyzEbbIrue1SRH5ZifxyKOFXmsgvG5FfTstuyAwOyA49B/SchhtyyTu3JI8krwM3lCFuk5u4TT4lt12WyC8PkV9+JfzKEfnlJfIrYNkNucAB+aDnh17AcENBeReSFJYUceCG8sRtChG3KarktisQ+RUm8iumhF9FIr8iRH7FLbuhIDigKPRi0Isbbigh75KSUpLSDtxQibhNSeI2ZZTcdmUiv1JEfmWV8KtC5FeayK+cZTeUAAeUgV4WejnDDeXlXUFSUVLJgRuqErepQNymspLbrkbkV5HIr4oSftWJ/CoR+VW17Iby4IDK0KtAr2q4oZq8q0tqSGo6cEMN4jbVidvUUnLbNYn8ahD51VbCrxaRX00ivzqW3VANHFALem3odQw31JV3PUl9SQMHbqhN3KYecZuGSm67DpFffSK/Rkr41SXya0Dk19iyG+qCAxpCbwS9seGGJvJuKmkmae7ADfWI2zQlbtNCyW3XJ/JrRuTXUgm/BkR+zYn8Wll2QxNwQAvoLaG3MtzQWt5tJG0l7Ry4oSFxmzbEbdorue1GRH5tifw6KOHXmMivHZFfR8tuaA0OaA+9A/SOhhs6ybuzpIukqwM3NCFu05m4TTclt92UyK8LkV93JfyaEfl1JfLrYdkNncAB3aB3h97DcENPefeS9Jb0ceCG5sRtehG36avktlsQ+fUm8vNQwq8lkV8fIr9+lt3QExzQF7oH9H6GG/rLe4BkoMTTgRtaEbcZQNzGS8lttybyG0jk562EXxsiP08iPx/LbugPDvCC7g3dx3CDr7z9JP6SAAduaEvcxo+4TaCS225H5OdP5BekhF97Ir8AIr9gy27wBQcEQg+CHmy4IUTeoZJBksEO3NCBuE0ocZshSm67I5HfICK/oUr4dSLyG0zkN8yyG0LAAUOgD4U+zHDDcHmPkIyUjHLghs7EbUYQtxmt5La7EPmNJPIbo4RfVyK/UUR+Yy27YTg4YDT0MdDHGm4YJ+/xkgmSiQ7c0I24zXjiNpOU3HZ3Ir8JRH6TlfDrQeQ3kchvimU3jAMHTII+GfoUww1T5T1NMl0yw4EbehK3mUbcZqaS2+5F5DedyG+WEn69ifxmEPnNtuyGqeCAmdBnQZ9tuGGOvOdK5knmO3BDH+I2c4nbLFBy232J/OYR+S1Uws+DyG8+kd8iy26YAw5YAH0h9EWGGxbLe4lkqWSZAzf0I26zhLjNciW33Z/IbymR3wol/AYQ+S0j8ltp2Q2LwQHLoa+AvtJwwyp5r5askax14IaBxG1WE7dZp+S2PYn81hD5rVfCz4vIby2R3wbLblgFDlgHfT30DYYbNsp7k2SzZIsDN3gTt9lE3Garktv2IfLbTOS3TQk/XyK/LUR+2y27YSM4YCv0bdC3G27YIe+dkl2S3Q7c4EfcZidxmz1KbtufyG8Xkd9eJfwCiPx2E/nts+yGHeCAPdD3Qt9nuGG/vA9IDkoOOXBDIHGbA8RtDiu57SAiv4NEfkeU8Asm8jtE5HfUshv2gwMOQz8C/ajhhmPyPi45ITnpwA0hxG2OE7c5peS2Q4n8ThD5nVbCbxCR30kivzOW3XAMHHAK+mnoZww3nJX3Ocl5yQUHbhhM3OYccZuLSm57CJHfeSK/S0r4DSXyu0Dkd9myG86CAy5CvwT9suGGK/K+Krkmue7ADcOI21wlbnNDyW0PJ/K7RuR3Uwm/EUR+14n8bll2wxVwwA3oN6HfMtxwW953JHcl9xy4YSRxmzvEbe4rue1RRH53ifweKOE3msjvHpHfQ8tuuA0OuA/9AfSHhhseyfux5InkqQM3jCFu85i4zTMltz2WyO8Jkd9zJfzGEfk9JfJ7YdkNj8ABz6A/h/7CcMNLeb+SvJa8ceCG8cRtXhG3eavkticQ+b0m8nunhN9EIr83RH7vLbvhJTjgLfR30N8bbvgg74+ST5LPDtwwibjNR+I2X5Tc9mQiv09Efl+V8JtC5PeZyO+bZTd8AAd8gf4V+jfDDd/l/UPyU/LLgRumErf5Qdzmt5Lbnkbk95PI748SftOJ/H4R+f217Ibv4IDf0P9A/2u4IUyvsGHCSsJJwvey74YZxG3+fTdrmwi9dNz2TCK/cER+EZXwm0XkF57IL1Ivu27493f+PwdEgB4ReqRe/3VDZHlHkUSVRHPghtnEbaIQt4mu5LbnEPlFJfKLoYTfXCK/aER+MS27ITI4IDr0GNBjGm6IJe/YkjiSuA7cMI+4TWziNvGU3PZ8Ir84RH7xlfBbQOQXl8gvgWU3xAIHxIMeH3oCww0J5Z1IkliSxIEbFhK3SUTcJqmS215E5JeYyC+ZEn6LifySEPklt+yGhOCApNCTQU9uuCGFvFNKUklSO3DDEuI2KYnbpFFy20uJ/FIR+aVVwm8ZkV9qIr90lt2QAhyQBnpa6OkMN6SXdwZJRkkmB25YTtwmA3GbzEpuewWRX0YivyxK+K0k8stE5JfVshvSgwMyQ88CPavhhmzyzi7JIcnpwA2riNtkJ26TS8ltrybyy0Hkl1sJvzVEfjmJ/PJYdkM2cEAu6Lmh5zHckFfe+ST5JQUcuGEtcZt8xG0KKrntdUR++Yn8Cinht57IrwCRX2HLbsgLDigIvRD0woYbisi7qKSYpLgDN2wgblOUuE0JJbe9kcivGJFfSSX8NhH5FSfyK2XZDUXAASWgl4ReynBD6X/fJCkrKefADZuJ25QhblNeyW1vIfIrS+RXQQm/rUR+5Yj8Klp2Q2lwQHnoFaBXNNxQSd6VJVUkVR24YRtxm8rEbaopue3tRH5ViPyqK+G3g8ivKpFfDctuqAQOqAa9OvQahhtqyruWpLakjgM37CRuU4u4TV0lt72LyK82kV89Jfx2E/nVIfKrb9kNNcEBdaHXg17fcEMDeTeUNJI0duCGPcRtGhK3aaLktvcS+TUi8muqhN8+Ir/GRH7NLLuhATigCfSm0JsZbmgu7xaSlpJWDtywn7hNC+I2rZXc9gEiv5ZEfm2U8DtI5NeKyK+tZTc0Bwe0ht4GelvDDe3k3V7SQdLRgRsOEbdpT9ymk5LbPkzk14HIr7MSfkeI/DoS+XWx7IZ24IBO0DtD72K4oau8u0m6S3o4cMNR4jbdiNv0VHLbx4j8uhP59VLC7ziRXw8iv96W3dAVHNATei/ovQ039JF3X4mHpJ8DN5wgbtOXuE1/Jbd9ksjPg8hvgBJ+p4j8+hH5DbTshj7ggP7QB0AfaLjBU95eEm+JjwM3nCZu40XcxlfJbZ8h8vMm8vNTwu8skZ8PkZ+/ZTd4ggN8oftB9zfcECDvQEmQJNiBG84RtwkkbhOi5LbPE/kFEfmFKuF3gcgvmMhvkGU3BIADQqCHQh9kuGGwvIdIhkqGOXDDReI2Q4jbDFdy25eI/IYS+Y1Qwu8ykd8wIr+Rlt0wGBwwHPoI6CMNN4yS92jJGMlYB264QtxmNHGbcUpu+yqR3xgiv/FK+F0j8htL5DfBshtGgQPGQR8PfYLhhonyniSZLJniwA3XidtMIm4zVclt3yDym0zkN00Jv5tEflOI/KZbdsNEcMBU6NOgTzfcMEPeMyWzJLMduOEWcZuZxG3mKLnt20R+s4j85irhd4fIbzaR3zzLbpgBDpgDfS70eYYb5st7gWShZJEDN9wlbrOAuM1iJbd9j8hvIZHfEiX87hP5LSLyW2rZDfPBAYuhL4G+1HDDMnkvl6yQrHTghgfEbZYTt1ml5LYfEvmtIPJbrYTfIyK/lUR+ayy7YRk4YBX01dDXGG5YK+91kvWSDQ7c8Ji4zTriNhuV3PYTIr/1RH6blPB7SuS3gchvs2U3rAUHbIS+Cfpmww1b5L1Vsk2y3YEbnhG32UrcZoeS235O5LeNyG+nEn4viPy2E/ntsuyGLeCAHdB3Qt9luGG3vPdI9kr2OXDDS+I2e4jb7Fdy26+I/PYS+R1Qwu81kd8+Ir+Dlt2wGxywH/oB6AcNNxyS92HJEclRB254Q9zmMHGbY0pu+y2R3xEiv+NK+L0j8jtK5HfCshsOgQOOQT8O/YThhpPyPiU5LTnjwA3viducIm5zVsltfyDyO03kd04Jv49EfmeI/M5bdsNJcMBZ6OegnzfccEHeFyWXJJcduOETcZuLxG2uKLntz0R+l4j8rirh94XI7zKR3zXLbrgADrgC/Sr0a4Ybrsv7huSm5JYDN3wlbnODuM1tJbf9jcjvJpHfHSX8vhP53SLyu2vZDdfBAbeh34F+13DDPXnflzyQPHTghh/Ebe4Tt3mk5LZ/Evk9IPJ7rITfLyK/h0R+Tyy74R444BH0x9CfGG54Ku9nkueSFw7c8Ju4zTPiNi+V3PYfIr/nRH6vlPD7S+T3gsjvtWU3PAUHvIT+Cvprww1v5P1W8k7y3oEbwiQn/s+euM0HJbcdlsjvHZHfRyX8whH5vSfy+2TZDW/AAR+gf4T+yXDDZ3l/kXyVfHPghvDEbb4Qt/mu5LYjEPl9JfL7oYRfRCK/b0R+Py274TM44Dv0H9B/Gm74Je/f/34m+evADZGI2/wmbhOmt47bjkzk94fIL6wSflGI/P4S+YXrbdcNv8AB/279fz0s9HC9/+uG8PKOIIkoidTbvhuiEreJ0Ju3TWQltx2NyC8ikV8UJfyiE/lFIvKLatkN4cEBkaFHgR7VcEM0eUeXxJDEdOCGGMRtohO3iaXktmMS+cUg8outhF8sIr+YRH5xLLshGjggFvTY0OMYbogr73iS+JIEDtwQm7hNPOI2CZXcdhwiv/hEfomU8ItL5JeAyC+xZTfEBQckhJ4IemLDDUnknVSSTJLcgRviEbdJStwmhZLbjk/kl4zIL6USfgmI/JIT+aWy7IYk4IAU0FNCT2W4IbW800jSStI5cENC4jZpiNukV3LbiYj80hL5ZVDCLzGRXzoiv4yW3ZAaHJAeegboGQ03ZJJ3ZkkWSVYHbkhC3CYzcZtsSm47KZFfFiK/7Er4JSPyy0rkl8OyGzKBA7JBzw49h+GGnPLOJcktyePADcmJ2+QibpNXyW2nIPLLTeSXTwm/lER+eYj88lt2Q05wQF7o+aDnN9xQQN4FJYUkhR24IRVxm4LEbYooue3URH6FiPyKKuGXhsivMJFfMctuKAAOKAK9KPRihhuKy7uEpKSklAM3pCVuU4K4TWklt52OyK8kkV8ZJfzSE/mVIvIra9kNxcEBpaGXgV7WcEM5eZeXVJBUdOCGDMRtyhO3qaTktjMS+VUg8qushF8mIr+KRH5VLLuhHDigEvTK0KsYbqgq72qS6pIaDtyQmbhNNeI2NZXcdhYiv+pEfrWU8MtK5FeDyK+2ZTdUBQfUhF4Lem3DDXXkXVdST1LfgRuyEbepS9ymgZLbzk7kV4/Ir6ESfjmI/OoT+TWy7IY64IAG0BtCb2S4obG8m0iaSpo5cENO4jZNiNs0V3LbuYj8mhL5tVDCLzeRXzMiv5aW3dAYHNAcegvoLQ03tJJ3a0kbSVsHbshD3KY1cZt2Sm47L5FfGyK/9kr45SPya0vk18GyG1qBA9pBbw+9g+GGjvLuJOks6eLADfmJ23QibtNVyW0XIPLrTOTXTQm/gkR+XYj8ult2Q0dwQFfo3aB3N9zQQ949Jb0kvR24oRBxm57Ebfooue3CRH69iPz6KuFXhMivN5Gfh2U39AAH9IHeF7qH4YZ+8u4vGSAZ6MANRYnb9Cdu46nktosR+Q0g8vNSwq84kd9AIj9vy27oBw7whO4F3dtwg4+8fSV+En8HbihB3MaXuE2AktsuSeTnR+QXqIRfKSI/fyK/IMtu8AEHBEAPhB5kuCFY3iGSUMkgB24oTdwmhLjNYCW3XYbIL5TIb4gSfmWJ/AYR+Q217IZgcMBg6EOgDzXcMEzewyUjJCMduKEccZvhxG1GKbnt8kR+I4j8RivhV4HIbySR3xjLbhgGDhgFfTT0MYYbxsp7nGS8ZIIDN1QkbjOOuM1EJbddichvPJHfJCX8KhP5TSDym2zZDWPBAROhT4I+2XDDFHlPlUyTTHfghirEbaYSt5mh5LarEvlNI/KbqYRfNSK/6UR+syy7YQo4YAb0mdBnGW6YLe85krmSeQ7cUJ24zRziNvOV3HYNIr+5RH4LlPCrSeQ3j8hvoWU3zAYHzIe+APpCww2L5L1YskSy1IEbahG3WUzcZpmS265N5LeEyG+5En51iPyWEvmtsOyGReCAZdCXQ19huGGlvFdJVkvWOHBDXeI2q4jbrFVy2/WI/FYT+a1Twq8+kd8aIr/1lt2wEhywFvo66OsNN2yQ90bJJslmB25oQNxmI3GbLUpuuyGR3yYiv61K+DUi8ttM5LfNshs2gAO2QN8KfZvhhu3y3iHZKdnlwA2NidvsIG6zW8ltNyHy20nkt0cJv6ZEfruI/PZadsN2cMBu6Hug7zXcsE/e+yUHJAcduKEZcZv9xG0OKbnt5kR+B4j8Divh14LI7yCR3xHLbtgHDjgE/TD0I4Ybjsr7mOS45IQDN7QkbnOMuM1JJbfdisjvOJHfKSX8WhP5nSDyO23ZDUfBASehn4J+2nDDGXmflZyTnHfghjbEbc4St7mg5LbbEvmdI/K7qIRfOyK/80R+lyy74Qw44AL0i9AvGW64LO8rkquSaw7c0J64zRXiNteV3HYHIr+rRH43lPDrSOR3jcjvpmU3XAYHXId+A/pNww235H1bckdy14EbOhG3uU3c5p6S2+5M5HeHyO++En5diPzuEvk9sOyGW+CAe9DvQ39guOGhvB9JHkueOHBDV+I2j4jbPFVy292I/B4T+T1Twq87kd8TIr/nlt3wEBzwFPoz6M8NN7yQ90vJK8lrB27oQdzmJXGbN0puuyeR3ysiv7dK+PUi8ntN5PfOshtegAPeQH8L/Z3hhvfy/iD5KPnkwA29idt8IG7zWclt9yHy+0jk90UJv75Efp+I/L5adsN7cMBn6F+gfzXc8E3e3yU/JD8duMGDuM134ja/lNx2PyK/H0R+v5Xw60/k95PI749lN3wDB/yC/hv6H8MNf+Udpk/YMGEl4frYd8MA4jb/vpu1Tfg+Om57IJFfWCK/CEr4eRL5hSPyi9jHrhv+ggP+3fr/egToEfv81w2R5B1ZEkUS1YEbvIjbRCZuE03JbXsT+UUh8ouuhJ8PkV9UIr8Ylt0QCRwQDXp06DEMN8SUdyxJbEkcB27wJW4Ti7hNXCW37UfkF5vIL54Sfv5EfnGI/OJbdkNMcEBc6PGgxzfckEDeCSWJJIkduCGAuE1C4jZJlNx2IJFfIiK/pEr4BRH5JSbyS2bZDQnAAUmgJ4WezHBDcnmnkKSUpHLghmDiNimI26RWctshRH4pifzSKOEXSuSXisgvrWU3JAcHpIaeBnpaww3p5J1ekkGS0YEbBhG3SU/cJpOS2x5M5JeByC+zEn5DiPwyEvllseyGdOCATNAzQ89iuCGrvLNJsktyOHDDUOI22Yjb5FRy28OI/LIT+eVSwm84kV8OIr/clt2QFRyQE3ou6LkNN+SRd15JPkl+B24YQdwmL3GbAkpueySRXz4iv4JK+I0i8stP5FfIshvygAMKQC8IvZDhhsLyLiIpKinmwA2jidsUIW5TXMltjyHyK0rkV0IJv7FEfsWI/EpadkNhcEBx6CWglzTcUErepf99l6SsAzeMI25TmrhNOSW3PZ7IrwyRX3kl/CYQ+ZUl8qtg2Q2lwAHloJeHXsFwQ0V5V5JUllRx4IaJxG0qEbepquS2JxH5VSbyq6aE32QivypEftUtu6EiOKAq9GrQqxtuqCHvmpJaktoO3DCFuE1N4jZ1lNz2VCK/WkR+dZXwm0bkV5vIr55lN9QAB9SBXhd6PcMN9eXdQNJQ0siBG6YTt2lA3KaxktueQeTXkMiviRJ+M4n8GhH5NbXshvrggMbQm0BvarihmbybS1pIWjpwwyziNs2J27RSctuzifxaEPm1VsJvDpFfSyK/Npbd0Awc0Ap6a+htDDe0lXc7SXtJBwdumEvcph1xm45KbnsekV97Ir9OSvjNJ/LrQOTX2bIb2oIDOkLvBL2z4YYu8u4q6Sbp7sANC4jbdCVu00PJbS8k8utG5NdTCb9FRH7difx6WXZDF3BAD+g9ofcy3NBb3n0kfSUeDtywmLhNH+I2/ZTc9hIiv75Efv2V8FtK5OdB5DfAsht6gwP6Qe8PfYDhhoHy9pR4SbwduGEZcRtP4jY+Sm57OZGfF5GfrxJ+K4j8vIn8/Cy7YSA4wAe6L3Q/ww3+8g6QBEqCHLhhJXGbAOI2wUpuexWRXyCRX4gSfquJ/IKI/EItu8EfHBAMPQR6qOGGQfIeLBkiGerADWuI2wwmbjNMyW2vJfIbQuQ3XAm/dUR+Q4n8Rlh2wyBwwDDow6GPMNwwUt6jJKMlYxy4YT1xm1HEbcYque0NRH6jifzGKeG3kchvDJHfeMtuGAkOGAt9HPTxhhsmyHuiZJJksgM3bCJuM5G4zRQlt72ZyG8Skd9UJfy2EPlNJvKbZtkNE8ABU6BPhT7NcMN0ec+QzJTMcuCGrcRtZhC3ma3ktrcR+c0k8pujhN92Ir9ZRH5zLbthOjhgNvQ50Ocabpgn7/mSBZKFDtywg7jNfOI2i5Tc9k4ivwVEfouV8NtF5LeQyG+JZTfMAwcsgr4Y+hLDDUvlvUyyXLLCgRt2E7dZRtxmpZLb3kPkt5zIb5USfnuJ/FYQ+a227Ial4ICV0FdBX224YY2810rWSdY7cMM+4jZridtsUHLb+4n81hH5bVTC7wCR33oiv02W3bAGHLAB+kbomww3bJb3FslWyTYHbjhI3GYLcZvtSm77EJHfViK/HUr4HSby20bkt9OyGzaDA7ZD3wF9p+GGXfLeLdkj2evADUeI2+wmbrNPyW0fJfLbQ+S3Xwm/Y0R+e4n8Dlh2wy5wwD7o+6EfMNxwUN6HJIclRxy44Thxm0PEbY4que0TRH6HifyOKeF3ksjvCJHfcctuOAgOOAr9GPTjhhtOyPuk5JTktAM3nCJuc5K4zRklt32ayO8Ukd9ZJfzOEPmdJvI7Z9kNJ8ABZ6CfhX7OcMN5eV+QXJRccuCGs8RtLhC3uazkts8R+V0k8ruihN95Ir9LRH5XLbvhPDjgMvQr0K8abrgm7+uSG5KbDtxwgbjNdeI2t5Tc9kUivxtEfreV8LtE5HeTyO+OZTdcAwfcgn4b+h3DDXflfU9yX/LAgRsuE7e5R9zmoZLbvkLkd5/I75ESfleJ/B4Q+T227Ia74ICH0B9Bf2y44Ym8n0qeSZ47cMM14jZPidu8UHLb14n8nhH5vVTC7waR33Miv1eW3fAEHPAC+kvorww3vJb3G8lbyTsHbrhJ3OYNcZv3Sm77FpHfWyK/D0r43Sbye0fk99GyG16DA95D/wD9o+GGT/L+LPki+erADXeI23wmbvNNyW3fJfL7QuT3XQm/e0R+X4n8flh2wydwwDfo36H/MNzwU96/JL///dyBG+4Tt/lF3Oavktt+QOT3m8gvTF8d/B4S+f0h8gvb164bfoID/kL/t9v/eti+/3VDOHmHl0SQROxr3w2PiNuE78vbJpKS235M5BeByC+yEn5PiPwiEvlFseyGcOCASNAjQ49iuCGqvKNJoktiOHDDU+I20YjbxFRy28+I/KIT+cVSwu85kV8MIr/Ylt0QFRwQE3os6LENN8SRd1xJPEl8B254QdwmLnGbBEpu+yWRXzwiv4RK+L0i8otP5JfIshvigAMSQE8IPZHhhsTyTiJJKknmwA2vidskIW6TXMltvyHyS0rkl0IJv7dEfsmI/FJadkNicEBy6CmgpzTckEreqSVpJGkduOEdcZvUxG3SKbnt90R+aYj80ivh94HILy2RXwbLbkgFDkgHPT30DIYbMso7kySzJIsDN3wkbpOJuE1WJbf9icgvM5FfNiX8PhP5ZSHyy27ZDRnBAVmhZ4Oe3XBDDnnnlOSS5Hbghi/EbXISt8mj5La/EvnlIvLLq4TfNyK/3ER++Sy7IQc4IA/0vNDzGW7IL+8CkoKSQg7c8J24TQHiNoWV3PYPIr+CRH5FlPD7SeRXiMivqGU35AcHFIZeBHpRww3F5F1cUkJS0oEbfhG3KU7cppSS2/5N5FeCyK+0En5/iPxKEvmVseyGYuCAUtBLQy9juKGsvMtJyksqOHDDX+I25YjbVFRy22FS8H5XeSK/Skr4hSXyq0DkV9myG8qCAypCrwS9suGGKvKuKqkmqe7ADeGI21QlblNDyW2HJ/KrRuRXUwm/CER+1Yn8all2QxVwQA3oNaHXMtxQW951JHUl9Ry4ISJxmzrEbeorue1IRH51ifwaKOEXmcivHpFfQ8tuqA0OqA+9AfSGhhsaybuxpImkqQM3RCFu05i4TTMltx2VyK8JkV9zJfyiEfk1JfJrYdkNjcABzaA3h97CcENLebeStJa0ceCG6MRtWhG3aavktmMQ+bUm8munhF9MIr82RH7tLbuhJTigLfR20Nsbbugg746STpLODtwQi7hNR+I2XZTcdmwiv05Efl2V8ItD5NeZyK+bZTd0AAd0gd4VejfDDd3l3UPSU9LLgRviErfpQdymt5Lbjkfk15PIr48SfvGJ/HoR+fW17Ibu4IDe0PtA72u4wUPe/ST9JQMcuCEBcZt+xG0GKrnthER+/Yn8PJXwS0TkN4DIz8uyGzzAAQOhe0L3MtzgLW8fia/Ez4EbEhO38SFu46/ktpMQ+fkS+QUo4ZeUyM+PyC/Qshu8wQH+0AOgBxpuCJJ3sCREEurADcmI2wQTtxmk5LaTE/mFEPkNVsIvBZFfKJHfEMtuCAIHDII+GPoQww1D5T1MMlwywoEbUhK3GUbcZqSS205F5DecyG+UEn6pifxGEPmNtuyGoeCAkdBHQR9tuGGMvMdKxknGO3BDGuI2Y4nbTFBy22mJ/MYR+U1Uwi8dkd94Ir9Jlt0wBhwwAfpE6JMMN0yW9xTJVMk0B25IT9xmCnGb6UpuOwOR31QivxlK+GUk8ptG5DfTshsmgwOmQ58Bfabhhlnyni2ZI5nrwA2ZiNvMJm4zT8ltZybym0PkN18JvyxEfnOJ/BZYdsMscMA86POhLzDcsFDeiySLJUscuCErcZtFxG2WKrntbER+i4n8linhl53IbwmR33LLblgIDlgKfRn05YYbVsh7pWSVZLUDN+QgbrOSuM0aJbedk8hvFZHfWiX8chH5rSbyW2fZDSvAAWugr4W+znDDenlvkGyUbHLghtzEbTYQt9ms5LbzEPltJPLbooRfXiK/TUR+Wy27YT04YDP0LdC3Gm7YJu/tkh2SnQ7ckI+4zXbiNruU3HZ+Ir8dRH67lfArQOS3k8hvj2U3bAMH7IK+G/oeww175b1Psl9ywIEbChK32Ufc5qCS2y5E5LefyO+QEn6FifwOEPkdtuyGveCAg9APQT9suOGIvI9KjkmOO3BDEeI2R4nbnFBy20WJ/I4R+Z1Uwq8Ykd9xIr9Tlt1wBBxwAvpJ6KcMN5yW9xnJWck5B24oTtzmDHGb80puuwSR31kivwtK+JUk8jtH5HfRshtOgwPOQ78A/aLhhkvyviy5IrnqwA2liNtcJm5zTcltlybyu0Lkd10JvzJEfleJ/G5YdsMlcMA16Neh3zDccFPetyS3JXccuKEscZtbxG3uKrntckR+t4n87inhV57I7w6R333LbrgJDrgL/R70+4YbHsj7oeSR5LEDN1QgbvOQuM0TJbddkcjvEZHfUyX8KhH5PSbye2bZDQ/AAU+gP4X+zHDDc3m/kLyUvHLghsrEbV4Qt3mt5LarEPm9JPJ7o4RfVSK/V0R+by274Tk44DX0N9DfGm54J+/3kg+Sjw7cUI24zXviNp+U3HZ1Ir8PRH6flfCrQeT3kcjvi2U3vAMHfIL+GfoXww1f5f1N8l3yw4EbahK3+Ubc5qeS265F5PedyO+XEn61ifx+EPn9tuyGr+CAn9B/Qf9tuOGPvP9KwniEDRPWw74b6hC3+UvcJpyHjtuuS+QXxoPHL7wSfvWI/MIS+UXwsOuGP+CAf7f+vx4eegSP/7ohorwjSSJLojhwQ33iNpGI20RVctsNiPwiE/lFU8KvIZFfFCK/6JbdEBEcEBV6NOjRDTfEkHdMSSxJbAduaETcJiZxmzhKbrsxkV8sIr+4Svg1IfKLTeQXz7IbYoAD4kCPCz2e4Yb48k4gSShJ5MANTYnbJCBuk1jJbTcj8ktI5JdECb/mRH6JiPySWnZDfHBAYuhJoCc13JBM3sklKSQpHbihBXGb5MRtUim57ZZEfimI/FIr4deKyC8lkV8ay25IBg5IBT019DSGG9LKO50kvSSDAze0Jm6TjrhNRiW33YbILz2RXyYl/NoS+WUg8sts2Q1pwQEZoWeCntlwQxZ5Z5Vkk2R34IZ2xG2yErfJoeS22xP5ZSPyy6mEXwciv+xEfrksuyELOCAH9JzQcxluyC3vPJK8knwO3NCRuE0e4jb5ldx2JyK/vER+BZTw60zkl4/Ir6BlN+QGB+SHXgB6QcMNheRdWFJEUtSBG7oQtylM3KaYktvuSuRXhMivuBJ+3Yj8ihL5lbDshkLggGLQi0MvYbihpLxLSUr/+zYHbuhO3KYUcZuySm67B5FfaSK/ckr49STyK0PkV96yG0qCA8pCLwe9vOGGCvKuKKkkqezADb2I21QkblNFyW33JvKrRORXVQm/PkR+lYn8qll2QwVwQBXoVaFXM9xQXd41JDUltRy4oS9xmxrEbWoruW0PIr+aRH51lPDrR+RXi8ivrmU3VAcH1IZeB3pdww315F1f0kDS0IEb+hO3qU/cppGS2x5A5NeAyK+xEn4DifwaEvk1seyGeuCARtAbQ29iuKGpvJtJmktaOHCDJ3GbZsRtWiq5bS8iv+ZEfq2U8PMm8mtB5NfashuaggNaQm8FvbXhhjbybitpJ2nvwA0+xG3aErfpoOS2fYn82hH5dVTCz4/Irz2RXyfLbmgDDugAvSP0ToYbOsu7i6SrpJsDN/gTt+lC3Ka7ktsOIPLrSuTXQwm/QCK/bkR+PS27oTM4oDv0HtB7Gm7oJe/ekj6Svg7cEETcpjdxGw8ltx1M5NeHyK+fEn4hRH59ifz6W3ZDL3CAB/R+0Psbbhgg74EST4mXAzeEErcZSNzGW8ltDyLy8yTy81HCbzCRnxeRn69lNwwAB3hD94Hua7jBT97+kgBJoAM3DCFu40/cJkjJbQ8l8gsg8gtWwm8YkV8gkV+IZTf4gQOCoAdDDzHcECrvQZLBkiEO3DCcuM0g4jZDldz2CCK/wUR+w5TwG0nkN4TIb7hlN4SCA4ZCHwZ9uOGGEfIeKRklGe3ADaOI24wkbjNGyW2PJvIbReQ3Vgm/MUR+o4n8xll2wwhwwBjoY6GPM9wwXt4TJBMlkxy4YSxxmwnEbSYrue1xRH4TifymKOE3nshvEpHfVMtuGA8OmAx9CvSphhumyXu6ZIZkpgM3TCBuM524zSwltz2RyG8Gkd9sJfwmEfnNJPKbY9kN08ABs6DPhj7HcMNcec+TzJcscOCGycRt5hG3WajktqcQ+c0n8lukhN9UIr8FRH6LLbthLjhgIfRF0Bcbblgi76WSZZLlDtwwjbjNUuI2K5Tc9nQiv2VEfiuV8JtB5LecyG+VZTcsAQesgL4S+irDDavlvUayVrLOgRtmErdZQ9xmvZLbnkXkt5bIb4MSfrOJ/NYR+W207IbV4ID10DdA32i4YZO8N0u2SLY6cMMc4jabidtsU3Lbc4n8thD5bVfCbx6R31Yivx2W3bAJHLAN+nboOww37JT3LsluyR4HbphP3GYXcZu9Sm57AZHfbiK/fUr4LSTy20Pkt9+yG3aCA/ZC3wd9v+GGA/I+KDkkOezADYuI2xwkbnNEyW0vJvI7ROR3VAm/JUR+h4n8jll2wwFwwBHoR6EfM9xwXN4nJCclpxy4YSlxmxPEbU4rue1lRH4nifzOKOG3nMjvFJHfWctuOA4OOA39DPSzhhvOyfu85ILkogM3rCBuc564zSUlt72SyO8Ckd9lJfxWEfldJPK7YtkN58ABl6Bfhn7FcMNVeV+TXJfccOCG1cRtrhG3uankttcQ+V0n8rulhN9aIr8bRH63LbvhKjjgJvRb0G8bbrgj77uSe5L7DtywjrjNXeI2D5Tc9noiv3tEfg+V8NtA5HefyO+RZTfcAQc8gP4Q+iPDDY/l/UTyVPLMgRs2Erd5QtzmuZLb3kTk95TI74USfpuJ/J4R+b207IbH4IDn0F9Af2m44ZW8X0veSN46cMMW4javidu8U3LbW4n83hD5vVfCbxuR31sivw+W3fAKHPAO+nvoHww3fJT3J8lnyRcHbthO3OYTcZuvSm57B5HfZyK/b0r47STy+0Lk992yGz6CA75C/wb9u+GGH/L+Kfkl+e3ADbuI2/wkbvNHyW3vJvL7ReT3Vwm/PUR+v4n8wvSz64Yf4IA/0P9C//cN6Iaw8g4nCS+J0M++G/YStwnXj7dNxH46bnsfkV94Ir9ISvjtJ/KLQOQX2bIbwvb7fwdEhB4JemTDDVHkHVUSTRLdgRsOELeJStwmhpLbPkjkF43IL6YSfoeI/KIT+cWy7IYo4IAY0GNCj2W4Iba840jiSuI5cMNh4jZxiNvEV3LbR4j84hL5JVDC7yiRXzwiv4SW3RAbHBAfegLoCQ03JJJ3YkkSSVIHbjhG3CYxcZtkSm77OJFfEiK/5Er4nSDyS0rkl8KyGxKBA5JBTw49heGGlPJOJUktSePADSeJ26QibpNWyW2fIvJLTeSXTgm/00R+aYj80lt2Q0pwQFro6aCnN9yQQd4ZJZkkmR244Qxxm4zEbbIoue2zRH6ZiPyyKuF3jsgvM5FfNstuyAAOyAI9K/RshhuyyzuHJKcklwM3nCduk4O4TW4lt32ByC8nkV8eJfwuEvnlIvLLa9kN2cEBuaHngZ7XcEM+eeeXFJAUdOCGS8Rt8hO3KaTkti8T+RUg8iushN8VIr+CRH5FLLshHzigEPTC0IsYbigq72KS4pISDtxwlbhNMeI2JZXc9jUiv+JEfqWU8LtO5FeCyK+0ZTcUBQeUhF4KemnDDWXkXVZSTlLegRtuELcpS9ymgpLbvknkV47Ir6ISfreI/MoT+VWy7IYy4IAK0CtCr2S4obK8q0iqSqo5cMNt4jZViNtUV3Lbd4j8qhL51VDC7y6RXzUiv5qW3VAZHFAdeg3oNQ031JJ3bUkdSV0HbrhH3KY2cZt6Sm77PpFfHSK/+kr4PSDyq0vk18CyG2qBA+pBrw+9geGGhvJuJGksaeLADQ+J2zQibtNUyW0/IvJrTOTXTAm/x0R+TYj8mlt2Q0NwQFPozaA3N9zQQt4tJa0krR244Qlxm5bEbdooue2nRH6tiPzaKuH3jMivNZFfO8tuaAEOaAO9LfR2hhvay7uDpKOkkwM3PCdu04G4TWclt/2CyK8jkV8XJfxeEvl1IvLratkN7cEBnaF3gd7VcEM3eXeX9JD0dOCGV8RtuhO36aXktl8T+fUg8uuthN8bIr+eRH59LLuhGzigF/Te0PsYbugrbw9JP0l/B254S9zGg7jNACW3/Y7Irx+R30Al/N4T+fUn8vO07Ia+4IAB0AdC9zTc4CVvb4mPxNeBGz4Qt/EmbuOn5LY/Evn5EPn5K+H3icjPl8gvwLIbvMABftD9oQcYbgiUd5AkWBLiwA2fidsEEbcJVXLbX4j8gon8Binh95XIL4TIb7BlNwSCA0KhD4I+2HDDEHkPlQyTDHfghm/EbYYStxmh5La/E/kNI/IbqYTfDyK/4UR+oyy7YQg4YAT0kdBHGW4YLe8xkrGScQ7c8JO4zRjiNuOV3PYvIr+xRH4TlPD7TeQ3jshvomU3jAYHjIc+AfpEww2T5D1ZMkUy1YEb/hC3mUzcZpqS2/5L5DeFyG+6En5hUvJ+11QivxmW3TAJHDAN+nToMww3zJT3LMlsyRwHbghL3GYWcZu5Sm47HJHfbCK/eUr4hSfym0PkN9+yG2aCA+ZCnwd9vuGGBfJeKFkkWezADRGI2ywkbrNEyW1HJPJbROS3VAm/SER+i4n8lll2wwJwwBLoS6EvM9ywXN4rJCslqxy4ITJxmxXEbVYrue0oRH4rifzWKOEXlchvFZHfWstuWA4OWA19DfS1hhvWyXu9ZINkowM3RCNus564zSYltx2dyG8Dkd9mJfxiEPltJPLbYtkN68ABm6Bvhr7FcMNWeW+TbJfscOCGmMRtthG32anktmMR+W0n8tulhF9sIr8dRH67LbthKzhgJ/Rd0Hcbbtgj772SfZL9DtwQh7jNXuI2B5Tcdlwiv31EfgeV8ItH5LefyO+QZTfsAQccgH4Q+iHDDYflfURyVHLMgRviE7c5QtzmuJLbTkDkd5TI74QSfgmJ/I4R+Z207IbD4IDj0E9AP2m44ZS8T0vOSM46cEMi4janiducU3LbiYn8zhD5nVfCLwmR31kivwuW3XAKHHAO+nnoFww3XJT3JcllyRUHbkhK3OYScZurSm47GZHfZSK/a0r4JSfyu0Lkd92yGy6CA65Cvwb9uuGGG/K+Kbklue3ADSmI29wkbnNHyW2nJPK7ReR3Vwm/VER+t4n87ll2ww1wwB3od6HfM9xwX94PJA8ljxy4ITVxmwfEbR4rue00RH4PifyeKOGXlsjvEZHfU8tuuA8OeAz9CfSnhhueyfu55IXkpQM3pCNu85y4zSslt52eyO8Fkd9rJfwyEPm9JPJ7Y9kNz8ABr6C/hv7GcMNbeb+TvJd8cOCGjMRt3hG3+ajktjMR+b0n8vukhF9mIr8PRH6fLbvhLTjgI/RP0D8bbvgi76+Sb5LvDtyQhbjNV+I2P5TcdlYiv29Efj+V8MtG5PedyO+XZTd8AQf8gP4T+i/DDb//vSV/JWH623dDduI2f4jbhO2v47ZzEPn9JfILp4RfTiK/MP15/ML3t+uG3+CAf7f+vx4Oevj+/3VDBHlHlESSRHbghlzEbSISt4mi5LZzE/lFIvKLqoRfHiK/yER+0Sy7IQI4IAr0qNCjGW6ILu8YkpiSWA7ckJe4TQziNrGV3HY+Ir+YRH5xlPDLT+QXi8gvrmU3RAcHxIYeB3pcww3x5B1fkkCS0IEbChC3iU/cJpGS2y5I5JeAyC+xEn6FiPwSEvklseyGeOCARNATQ09iuCGpvJNJkktSOHBDYeI2yYjbpFRy20WI/JIT+aVSwq8okV8KIr/Ult2QFByQEnoq6KkNN6SRd1pJOkl6B24oRtwmLXGbDEpuuziRXzoiv4xK+JUg8ktP5JfJshvSgAMyQM8IPZPhhszyziLJKsnmwA0lidtkIW6TXcltlyLyy0rkl0MJv9JEftmI/HJadkNmcEB26Dmg5zTckEveuSV5JHkduKEMcZvcxG3yKbntskR+eYj88ivhV47ILy+RXwHLbsgFDsgHPT/0AoYbCsq7kKSwpIgDN5QnblOIuE1RJbddgcivMJFfMSX8KhL5FSHyK27ZDQXBAUWhF4Ne3HBDCXmXlJSSlHbghkrEbUoStymj5LYrE/mVIvIrq4RfFSK/0kR+5Sy7oQQ4oAz0stDLGW4oL+8KkoqSSg7cUJW4TQXiNpWV3HY1Ir+KRH5VlPCrTuRXicivqmU3lAcHVIZeBXpVww3V5F1dUkNS04EbahC3qU7cppaS265J5FeDyK+2En61iPxqEvnVseyGauCAWtBrQ69juKGuvOtJ6ksaOHBDbeI29YjbNFRy23WI/OoT+TVSwq8ukV8DIr/Glt1QFxzQEHoj6I0NNzSRd1NJM0lzB26oR9ymKXGbFkpuuz6RXzMiv5ZK+DUg8mtO5NfKshuagANaQG8JvZXhhtbybiNpK2nnwA0Nidu0IW7TXsltNyLya0vk10EJv8ZEfu2I/DpadkNrcEB76B2gdzTc0EnenSVdJF0duKEJcZvOxG26KbntpkR+XYj8uivh14zIryuRXw/LbugEDugGvTv0HoYbesq7l6S3pI8DNzQnbtOLuE1fJbfdgsivN5GfhxJ+LYn8+hD59bPshp7ggL7QPaD3M9zQX94DJAMlng7c0Iq4zQDiNl5Kbrs1kd9AIj9vJfzaEPl5Evn5WHZDf3CAF3Rv6D6GG3zl7SfxlwQ4cENb4jZ+xG0Cldx2OyI/fyK/ICX82hP5BRD5BVt2gy84IBB6EPRgww0h8g6VDJIMduCGDsRtQonbDFFy2x2J/AYR+Q1Vwq8Tkd9gIr9hlt0QAg4YAn0o9GGGG4bLe4RkpGSUAzd0Jm4zgrjNaCW33YXIbySR3xgl/LoS+Y0i8htr2Q3DwQGjoY+BPtZwwzh5j5dMkEx04IZuxG3GE7eZpOS2uxP5TSDym6yEXw8iv4lEflMsu2EcOGAS9MnQpxhumCrvaZLpkhkO3NCTuM004jYzldx2LyK/6UR+s5Tw603kN4PIb7ZlN0wFB8yEPgv6bMMNc+Q9VzJPMt+BG/oQt5lL3GaBktvuS+Q3j8hvoRJ+HkR+84n8Fll2wxxwwALoC6EvMtywWN5LJEslyxy4oR9xmyXEbZYrue3+RH5LifxWKOE3gMhvGZHfSstuWAwOWA59BfSVhhtWyXu1ZI1krQM3DCRus5q4zTolt+1J5LeGyG+9En5eRH5rifw2WHbDKnDAOujroW8w3LBR3pskmyVbHLjBm7jNJuI2W5Xctg+R32Yiv21K+PkS+W0h8ttu2Q0bwQFboW+Dvt1www5575Tskux24AY/4jY7idvsUXLb/kR+u4j89irhF0Dkt5vIb59lN+wAB+yBvhf6PsMN++V9QHJQcsiBGwKJ2xwgbnNYyW0HEfkdJPI7ooRfMJHfISK/o5bdsB8ccBj6EehHDTcck/dxyQnJSQduCCFuc5y4zSkltx1K5HeCyO+0En6DiPxOEvmdseyGY+CAU9BPQz9juOGsvM9JzksuOHDDYOI254jbXFRy20OI/M4T+V1Swm8okd8FIr/Llt1wFhxwEfol6JcNN1yR91XJNcl1B24YRtzmKnGbG0pueziR3zUiv5tK+I0g8rtO5HfLshuugANuQL8J/ZbhhtvyviO5K7nnwA0jidvcIW5zX8ltjyLyu0vk90AJv9FEfveI/B5adsNtcMB96A+gPzTc8EjejyVPJE8duGEMcZvHxG2eKbntsUR+T4j8nivhN47I7ymR3wvLbngEDngG/Tn0F4YbXsr7leS15I0DN4wnbvOKuM1bJbc9gcjvNZHfOyX8JhL5vSHye2/ZDS/BAW+hv4P+3nDDB3l/lHySfHbghknEbT4St/mi5LYnE/l9IvL7qoTfFCK/z0R+3yy74QM44Av0r9C/GW74Lu8fkp+SXw7cMJW4zQ/iNr+V3PY0Ir+fRH5/lPCbTuT3i8jvr2U3fAcH/Ib+B/pfww1hBoQNE1YSThJ+gH03zCBu8++7WdtEGKDjtmcS+YUj8ouohN8sIr/wRH6RBth1w7+/8/85IAL0iNAjDfivGyLLO4okqiSaAzfMJm4ThbhNdCW3PYfILyqRXwwl/OYS+UUj8otp2Q2RwQHRoceAHtNwQyx5x5bEkcR14IZ5xG1iE7eJp+S25xP5xSHyi6+E3wIiv7hEfgksuyEWOCAe9PjQExhuSCjvRJLEkiQO3LCQuE0i4jZJldz2IiK/xER+yZTwW0zkl4TIL7llNyQEBySFngx6csMNKeSdUpJKktqBG5YQt0lJ3CaNktteSuSXisgvrRJ+y4j8UhP5pbPshhTggDTQ00JPZ7ghvbwzSDJKMjlww3LiNhmI22RWctsriPwyEvllUcJvJZFfJiK/rJbdkB4ckBl6FuhZDTdkk3d2SQ5JTgduWEXcJjtxm1xKbns1kV8OIr/cSvitIfLLSeSXx7IbsoEDckHPDT2P4Ya88s4nyS8p4MANa4nb5CNuU1DJba8j8stP5FdICb/1RH4FiPwKW3ZDXnBAQeiFoBc23FBE3kUlxSTFHbhhA3GbosRtSii57Y1EfsWI/Eoq4beJyK84kV8py24oAg4oAb0k9FKGG0r/+yZJWUk5B27YTNymDHGb8kpuewuRX1kivwpK+G0l8itH5FfRshtKgwPKQ68AvaLhhkryriypIqnqwA3biNtUJm5TTcltbyfyq0LkV10Jvx1EflWJ/GpYdkMlcEA16NWh1zDcUFPetSS1JXUcuGEncZtaxG3qKrntXUR+tYn86inht5vIrw6RX33LbqgJDqgLvR70+oYbGsi7oaSRpLEDN+whbtOQuE0TJbe9l8ivEZFfUyX89hH5NSbya2bZDQ3AAU2gN4XezHBDc3m3kLSUtHLghv3EbVoQt2mt5LYPEPm1JPJro4TfQSK/VkR+bS27oTk4oDX0NtDbGm5oJ+/2kg6Sjg7ccIi4TXviNp2U3PZhIr8ORH6dlfA7QuTXkcivi2U3tAMHdILeGXoXww1d5d1N0l3Sw4EbjhK36UbcpqeS2z5G5NedyK+XEn7Hifx6EPn1tuyGruCAntB7Qe9tuKGPvPtKPCT9HLjhBHGbvsRt+iu57ZNEfh5EfgOU8DtF5NePyG+gZTf0AQf0hz4A+kDDDZ7y9pJ4S3wcuOE0cRsv4ja+Sm77DJGfN5GfnxJ+Z4n8fIj8/C27wRMc4AvdD7q/4YYAeQdKgiTBDtxwjrhNIHGbECW3fZ7IL4jIL1QJvwtEfsFEfoMsuyEAHBACPRT6IMMNg+U9RDJUMsyBGy4StxlC3Ga4ktu+ROQ3lMhvhBJ+l4n8hhH5jbTshsHggOHQR0AfabhhlLxHS8ZIxjpwwxXiNqOJ24xTcttXifzGEPmNV8LvGpHfWCK/CZbdMAocMA76eOgTDDdMlPckyWTJFAduuE7cZhJxm6lKbvsGkd9kIr9pSvjdJPKbQuQ33bIbJoIDpkKfBn264YYZ8p4pmSWZ7cANt4jbzCRuM0fJbd8m8ptF5DdXCb87RH6zifzmWXbDDHDAHOhzoc8z3DBf3gskCyWLHLjhLnGbBcRtFiu57XtEfguJ/JYo4XefyG8Rkd9Sy26YDw5YDH0J9KWGG5bJe7lkhWSlAzc8IG6znLjNKiW3/ZDIbwWR32ol/B4R+a0k8ltj2Q3LwAGroK+GvsZww1p5r5Osl2xw4IbHxG3WEbfZqOS2nxD5rSfy26SE31Mivw1Efpstu2EtOGAj9E3QNxtu2CLvrZJtku0O3PCMuM1W4jY7lNz2cyK/bUR+O5Xwe0Hkt53Ib5dlN2wBB+yAvhP6LsMNu+W9R7JXss+BG14St9lD3Ga/ktt+ReS3l8jvgBJ+r4n89hH5HbTsht3ggP3QD0A/aLjhkLwPS45IjjpwwxviNoeJ2xxTcttvifyOEPkdV8LvHZHfUSK/E5bdcAgccAz6cegnDDeclPcpyWnJGQdueE/c5hRxm7NKbvsDkd9pIr9zSvh9JPI7Q+R33rIbToIDzkI/B/284YYL8r4ouSS57MANn4jbXCRuc0XJbX8m8rtE5HdVCb8vRH6XifyuWXbDBXDAFehXoV8z3HBd3jckNyW3HLjhK3GbG8Rtbiu57W9EfjeJ/O4o4fedyO8Wkd9dy264Dg64Df0O9LuGG+7J+77kgeShAzf8IG5zn7jNIyW3/ZPI7wGR32Ml/H4R+T0k8nti2Q33wAGPoD+G/sRww1N5P5M8l7xw4IbfxG2eEbd5qeS2/xD5PSfye6WE318ivxdEfq8tu+EpOOAl9FfQXxtueCPvt5J3kvcO3BAmFfF/9sRtPii57bBEfu+I/D4q4ReOyO89kd8ny254Aw74AP0j9E+GGz7L+4vkq+SbAzeEJ27zhbjNdyW3HYHI7yuR3w8l/CIS+X0j8vtp2Q2fwQHfof+A/tNwwy95//73M8lfB26IRNzmN3GbMAN13HZkIr8/RH5hlfCLQuT3l8gv3EC7bvgFDvh36//rYaGHG/hfN4SXdwRJREmkgfbdEJW4TYSBvG0iK7ntaER+EYn8oijhF53ILxKRX1TLbggPDogMPQr0qIYbosk7uiSGJKYDN8QgbhOduE0sJbcdk8gvBpFfbCX8YhH5xSTyi2PZDdHAAbGgx4Yex3BDXHnHk8SXJHDghtjEbeIRt0mo5LbjEPnFJ/JLpIRfXCK/BER+iS27IS44ICH0RNATG25IIu+kkmSS5A7cEI+4TVLiNimU3HZ8Ir9kRH4plfBLQOSXnMgvlWU3JAEHpICeEnoqww2p5Z1GklaSzoEbEhK3SUPcJr2S205E5JeWyC+DEn6JifzSEflltOyG1OCA9NAzQM9ouCGTvDNLskiyOnBDEuI2mYnbZFNy20mJ/LIQ+WVXwi8ZkV9WIr8clt2QCRyQDXp26DkMN+SUdy5JbkkeB25ITtwmF3GbvEpuOwWRX24iv3xK+KUk8stD5JffshtyggPyQs8HPb/hhgLyLigpJCnswA2piNsUJG5TRMltpybyK0TkV1QJvzREfoWJ/IpZdkMBcEAR6EWhFzPcUFzeJSQlJaUcuCEtcZsSxG1KK7ntdER+JYn8yijhl57IrxSRX1nLbigODigNvQz0soYbysm7vKSCpKIDN2QgblOeuE0lJbedkcivApFfZSX8MhH5VSTyq2LZDeXAAZWgV4ZexXBDVXlXk1SX1HDghszEbaoRt6mp5LazEPlVJ/KrpYRfViK/GkR+tS27oSo4oCb0WtBrG26oI++6knqS+g7ckI24TV3iNg2U3HZ2Ir96RH4NlfDLQeRXn8ivkWU31AEHNIDeEHojww2N5d1E0lTSzIEbchK3aULcprmS285F5NeUyK+FEn65ifyaEfm1tOyGxuCA5tBbQG9puKGVvFtL2kjaOnBDHuI2rYnbtFNy23mJ/NoQ+bVXwi8fkV9bIr8Olt3QChzQDnp76B0MN3SUdydJZ0kXB27IT9ymE3GbrkpuuwCRX2civ25K+BUk8utC5Nfdshs6ggO6Qu8Gvbvhhh7y7inpJentwA2FiNv0JG7TR8ltFyby60Xk11cJvyJEfr2J/Dwsu6EHOKAP9L7QPQw39JN3f8kAyUAHbihK3KY/cRtPJbddjMhvAJGflxJ+xYn8BhL5eVt2Qz9wgCd0L+jehht85O0r8ZP4O3BDCeI2vsRtApTcdkkiPz8iv0Al/EoR+fkT+QVZdoMPOCAAeiD0IMMNwfIOkYRKBjlwQ2niNiHEbQYrue0yRH6hRH5DlPArS+Q3iMhvqGU3BIMDBkMfAn2o4YZh8h4uGSEZ6cAN5YjbDCduM0rJbZcn8htB5DdaCb8KRH4jifzGWHbDMHDAKOijoY8x3DBW3uMk4yUTHLihInGbccRtJiq57UpEfuOJ/CYp4VeZyG8Ckd9ky24YCw6YCH0S9MmGG6bIe6pkmmS6AzdUIW4zlbjNDCW3XZXIbxqR30wl/KoR+U0n8ptl2Q1TwAEzoM+EPstww2x5z5HMlcxz4IbqxG3mELeZr+S2axD5zSXyW6CEX00iv3lEfgstu2E2OGA+9AXQFxpuWCTvxZIlkqUO3FCLuM1i4jbLlNx2bSK/JUR+y5Xwq0Pkt5TIb4VlNywCByyDvhz6CsMNK+W9SrJassaBG+oSt1lF3GatktuuR+S3mshvnRJ+9Yn81hD5rbfshpXggLXQ10Ffb7hhg7w3SjZJNjtwQwPiNhuJ22xRctsNifw2EfltVcKvEZHfZiK/bZbdsAEcsAX6VujbDDdsl/cOyU7JLgduaEzcZgdxm91KbrsJkd9OIr89Svg1JfLbReS317IbtoMDdkPfA32v4YZ98t4vOSA56MANzYjb7Cduc0jJbTcn8jtA5HdYCb8WRH4HifyOWHbDPnDAIeiHoR8x3HBU3sckxyUnHLihJXGbY8RtTiq57VZEfseJ/E4p4deayO8Ekd9py244Cg44Cf0U9NOGG87I+6zknOS8Aze0IW5zlrjNBSW33ZbI7xyR30Ul/NoR+Z0n8rtk2Q1nwAEXoF+Efslww2V5X5FclVxz4Ib2xG2uELe5ruS2OxD5XSXyu6GEX0civ2tEfjctu+EyOOA69BvQbxpuuCXv25I7krsO3NCJuM1t4jb3lNx2ZyK/O0R+95Xw60Lkd5fI74FlN9wCB9yDfh/6A8MND+X9SPJY8sSBG7oSt3lE3OapktvuRuT3mMjvmRJ+3Yn8nhD5PbfshofggKfQn0F/brjhhbxfSl5JXjtwQw/iNi+J27xRcts9ifxeEfm9VcKvF5HfayK/d5bd8AIc8Ab6W+jvDDe8l/cHyUfJJwdu6E3c5gNxm89KbrsPkd9HIr8vSvj1JfL7ROT31bIb3oMDPkP/Av2r4YZv8v4u+SH56cANHsRtvhO3+aXktvsR+f0g8vuthF9/Ir+fRH5/LLvhGzjgF/Tf0P8Ybvgr7zCeYcOElYTztO+GAcRt/n03a5vwnjpueyCRX1givwhK+HkS+YUj8ovoadcNf8EB/279fz0C9Iie/3VDJHlHlkSRRHXgBi/iNpGJ20RTctveRH5RiPyiK+HnQ+QXlcgvhmU3RAIHRIMeHXoMww0x5R1LElsSx4EbfInbxCJuE1fJbfsR+cUm8ounhJ8/kV8cIr/4lt0QExwQF3o86PENNySQd0JJIkliB24IIG6TkLhNEiW3HUjkl4jIL6kSfkFEfomJ/JJZdkMCcEAS6EmhJzPckFzeKSQpJakcuCGYuE0K4japldx2CJFfSiK/NEr4hRL5pSLyS2vZDcnBAamhp4Ge1nBDOnmnl2SQZHTghkHEbdITt8mk5LYHE/llIPLLrITfECK/jER+WSy7IR04IBP0zNCzGG7IKu9skuySHA7cMJS4TTbiNjmV3PYwIr/sRH65lPAbTuSXg8gvt2U3ZAUH5ISeC3puww155J1Xkk+S34EbRhC3yUvcpoCS2x5J5JePyK+gEn6jiPzyE/kVsuyGPOCAAtALQi9kuKGwvItIikqKOXDDaOI2RYjbFFdy22OI/IoS+ZVQwm8skV8xIr+Slt1QGBxQHHoJ6CUNN5SSd+l/3yUp68AN44jblCZuU07JbY8n8itD5FdeCb8JRH5lifwqWHZDKXBAOejloVcw3FBR3pUklSVVHLhhInGbSsRtqiq57UlEfpWJ/Kop4TeZyK8KkV91y26oCA6oCr0a9OqGG2rIu6aklqS2AzdMIW5Tk7hNHSW3PZXIrxaRX10l/KYR+dUm8qtn2Q01wAF1oNeFXs9wQ315N5A0lDRy4IbpxG0aELdprOS2ZxD5NSTya6KE30wiv0ZEfk0tu6E+OKAx9CbQmxpuaCbv5pIWkpYO3DCLuE1z4jatlNz2bCK/FkR+rZXwm0Pk15LIr41lNzQDB7SC3hp6G8MNbeXdTtJe0sGBG+YSt2lH3KajktueR+TXnsivkxJ+84n8OhD5dbbshrbggI7QO0HvbLihi7y7SrpJujtwwwLiNl2J2/RQctsLify6Efn1VMJvEZFfdyK/Xpbd0AUc0AN6T+i9DDf0lncfSV+JhwM3LCZu04e4TT8lt72EyK8vkV9/JfyWEvl5EPkNsOyG3uCAftD7Qx9guGGgvD0lXhJvB25YRtzGk7iNj5LbXk7k50Xk56uE3woiP28iPz/LbhgIDvCB7gvdz3CDv7wDJIGSIAduWEncJoC4TbCS215F5BdI5BeihN9qIr8gIr9Qy27wBwcEQw+BHmq4YZC8B0uGSIY6cMMa4jaDidsMU3Lba4n8hhD5DVfCbx2R31AivxGW3TAIHDAM+nDoIww3jJT3KMloyRgHblhP3GYUcZuxSm57A5HfaCK/cUr4bSTyG0PkN96yG0aCA8ZCHwd9vOGGCfKeKJkkmezADZuI20wkbjNFyW1vJvKbROQ3VQm/LUR+k4n8pll2wwRwwBToU6FPM9wwXd4zJDMlsxy4YStxmxnEbWYrue1tRH4zifzmKOG3nchvFpHfXMtumA4OmA19DvS5hhvmyXu+ZIFkoQM37CBuM5+4zSIlt72TyG8Bkd9iJfx2EfktJPJbYtkN88ABi6Avhr7EcMNSeS+TLJescOCG3cRtlhG3WanktvcQ+S0n8lulhN9eIr8VRH6rLbthKThgJfRV0Fcbblgj77WSdZL1Dtywj7jNWuI2G5Tc9n4iv3VEfhuV8DtA5LeeyG+TZTesAQdsgL4R+ibDDZvlvUWyVbLNgRsOErfZQtxmu5LbPkTkt5XIb4cSfoeJ/LYR+e207IbN4IDt0HdA32m4YZe8d0v2SPY6cMMR4ja7idvsU3LbR4n89hD57VfC7xiR314ivwOW3bALHLAP+n7oBww3HJT3IclhyREHbjhO3OYQcZujSm77BJHfYSK/Y0r4nSTyO0Lkd9yyGw6CA45CPwb9uOGGE/I+KTklOe3ADaeI25wkbnNGyW2fJvI7ReR3Vgm/M0R+p4n8zll2wwlwwBnoZ6GfM9xwXt4XJBcllxy44SxxmwvEbS4rue1zRH4XifyuKOF3nsjvEpHfVctuOA8OuAz9CvSrhhuuyfu65IbkpgM3XCBuc524zS0lt32RyO8Gkd9tJfwuEfndJPK7Y9kN18ABt6Dfhn7HcMNded+T3Jc8cOCGy8Rt7hG3eajktq8Q+d0n8nukhN9VIr8HRH6PLbvhLjjgIfRH0B8bbngi76eSZ5LnDtxwjbjNU+I2L5Tc9nUiv2dEfi+V8LtB5PecyO+VZTc8AQe8gP4S+ivDDa/l/UbyVvLOgRtuErd5Q9zmvZLbvkXk95bI74MSfreJ/N4R+X207IbX4ID30D9A/2i44ZO8P0u+SL46cMMd4jafidt8U3Lbd4n8vhD5fVfC7x6R31civx+W3fAJHPAN+nfoPww3/JT3L8nvfz934Ib7xG1+Ebf5q+S2HxD5/SbyC+Olg99DIr8/RH5hvey64Sc44C/0f7v9r4f1+q8bwsk7vCSCJKKXfTc8Im4T3ou3TSQlt/2YyC8CkV9kJfyeEPlFJPKLYtkN4cABkaBHhh7FcENUeUeTRJfEcOCGp8RtohG3ianktp8R+UUn8oulhN9zIr8YRH6xLbshKjggJvRY0GMbbogj77iSeJL4DtzwgrhNXOI2CZTc9ksiv3hEfgmV8HtF5BefyC+RZTfEAQckgJ4QeiLDDYnlnUSSVJLMgRteE7dJQtwmuZLbfkPkl5TIL4USfm+J/JIR+aW07IbE4IDk0FNAT2m4IZW8U0vSSNI6cMM74japidukU3Lb74n80hD5pVfC7wORX1oivwyW3ZAKHJAOenroGQw3ZJR3JklmSRYHbvhI3CYTcZusSm77E5FfZiK/bEr4fSbyy0Lkl92yGzKCA7JCzwY9u+GGHPLOKcklye3ADV+I2+QkbpNHyW1/JfLLReSXVwm/b0R+uYn88ll2Qw5wQB7oeaHnM9yQX94FJAUlhRy44TtxmwLEbQorue0fRH4FifyKKOH3k8ivEJFfUctuyA8OKAy9CPSihhuKybu4pISkpAM3/CJuU5y4TSklt/2byK8EkV9pJfz+EPmVJPIrY9kNxcABpaCXhl7GcENZeZeTlJdUcOCGv8RtyhG3qajktsOk5v2u8kR+lZTwC0vkV4HIr7JlN5QFB1SEXgl6ZcMNVeRdVVJNUt2BG8IRt6lK3KaGktsOT+RXjcivphJ+EYj8qhP51bLshirggBrQa0KvZbihtrzrSOpK6jlwQ0TiNnWI29RXctuRiPzqEvk1UMIvMpFfPSK/hpbdUBscUB96A+gNDTc0kndjSRNJUwduiELcpjFxm2ZKbjsqkV8TIr/mSvhFI/JrSuTXwrIbGoEDmkFvDr2F4YaW8m4laS1p48AN0YnbtCJu01bJbccg8mtN5NdOCb+YRH5tiPzaW3ZDS3BAW+jtoLc33NBB3h0lnSSdHbghFnGbjsRtuii57dhEfp2I/Loq4ReHyK8zkV83y27oAA7oAr0r9G6GG7rLu4ekp6SXAzfEJW7Tg7hNbyW3HY/IryeRXx8l/OIT+fUi8utr2Q3dwQG9ofeB3tdwg4e8+0n6SwY4cEMC4jb9iNsMVHLbCYn8+hP5eSrhl4jIbwCRn5dlN3iAAwZC94TuZbjBW94+El+JnwM3JCZu40Pcxl/JbSch8vMl8gtQwi8pkZ8fkV+gZTd4gwP8oQdADzTcECTvYEmIJNSBG5IRtwkmbjNIyW0nJ/ILIfIbrIRfCiK/UCK/IZbdEAQOGAR9MPQhhhuGynuYZLhkhAM3pCRuM4y4zUglt52KyG84kd8oJfxSE/mNIPIbbdkNQ8EBI6GPgj7acMMYeY+VjJOMd+CGNMRtxhK3maDkttMS+Y0j8puohF86Ir/xRH6TLLthDDhgAvSJ0CcZbpgs7ymSqZJpDtyQnrjNFOI205XcdgYiv6lEfjOU8MtI5DeNyG+mZTdMBgdMhz4D+kzDDbPkPVsyRzLXgRsyEbeZTdxmnpLbzkzkN4fIb74SflmI/OYS+S2w7IZZ4IB50OdDX2C4YaG8F0kWS5Y4cENW4jaLiNssVXLb2Yj8FhP5LVPCLzuR3xIiv+WW3bAQHLAU+jLoyw03rJD3SskqyWoHbshB3GYlcZs1Sm47J5HfKiK/tUr45SLyW03kt86yG1aAA9ZAXwt9neGG9fLeINko2eTADbmJ22wgbrNZyW3nIfLbSOS3RQm/vER+m4j8tlp2w3pwwGboW6BvNdywTd7bJTskOx24IR9xm+3EbXYpue38RH47iPx2K+FXgMhvJ5HfHstu2AYO2AV9N/Q9hhv2ynufZL/kgAM3FCRus4+4zUElt12IyG8/kd8hJfwKE/kdIPI7bNkNe8EBB6Efgn7YcMMReR+VHJMcd+CGIsRtjhK3OaHktosS+R0j8juphF8xIr/jRH6nLLvhCDjgBPST0E8Zbjgt7zOSs5JzDtxQnLjNGeI255Xcdgkiv7NEfheU8CtJ5HeOyO+iZTecBgech34B+kXDDZfkfVlyRXLVgRtKEbe5TNzmmpLbLk3kd4XI77oSfmWI/K4S+d2w7IZL4IBr0K9Dv2G44aa8b0luS+44cENZ4ja3iNvcVXLb5Yj8bhP53VPCrzyR3x0iv/uW3XATHHAX+j3o9w03PJD3Q8kjyWMHbqhA3OYhcZsnSm67IpHfIyK/p0r4VSLye0zk98yyGx6AA55Afwr9meGG5/J+IXkpeeXADZWJ27wgbvNayW1XIfJ7SeT3Rgm/qkR+r4j83lp2w3NwwGvob6C/NdzwTt7vJR8kHx24oRpxm/fEbT4pue3qRH4fiPw+K+FXg8jvI5HfF8tueAcO+AT9M/Qvhhu+yvub5LvkhwM31CRu8424zU8lt12LyO87kd8vJfxqE/n9IPL7bdkNX8EBP6H/gv7bcMMfef+VhPEOGyast3031CFu85e4TThvHbddl8gvjDePX3gl/OoR+YUl8ovgbdcNf8AB/279fz089Aje/3VDRHlHkkSWRHHghvrEbSIRt4mq5LYbEPlFJvKLpoRfQyK/KER+0S27ISI4ICr0aNCjG26IIe+YkliS2A7c0Ii4TUziNnGU3HZjIr9YRH5xlfBrQuQXm8gvnmU3xAAHxIEeF3o8ww3x5Z1AklCSyIEbmhK3SUDcJrGS225G5JeQyC+JEn7NifwSEfklteyG+OCAxNCTQE9quCGZvJNLUkhSOnBDC+I2yYnbpFJy2y2J/FIQ+aVWwq8VkV9KIr80lt2QDByQCnpq6GkMN6SVdzpJekkGB25oTdwmHXGbjEpuuw2RX3oiv0xK+LUl8stA5JfZshvSggMyQs8EPbPhhizyzirJJsnuwA3tiNtkJW6TQ8lttyfyy0bkl1MJvw5EftmJ/HJZdkMWcEAO6Dmh5zLckFveeSR5JfkcuKEjcZs8xG3yK7ntTkR+eYn8Cijh15nILx+RX0HLbsgNDsgPvQD0goYbCsm7sKSIpKgDN3QhblOYuE0xJbfdlcivCJFfcSX8uhH5FSXyK2HZDYXAAcWgF4dewnBDSXmXkpT+920O3NCduE0p4jZlldx2DyK/0kR+5ZTw60nkV4bIr7xlN5QEB5SFXg56ecMNFeRdUVJJUtmBG3oRt6lI3KaKktvuTeRXicivqhJ+fYj8KhP5VbPshgrggCrQq0KvZrihurxrSGpKajlwQ1/iNjWI29RWctseRH41ifzqKOHXj8ivFpFfXctuqA4OqA29DvS6hhvqybu+pIGkoQM39CduU5+4TSMltz2AyK8BkV9jJfwGEvk1JPJrYtkN9cABjaA3ht7EcENTeTeTNJe0cOAGT+I2zYjbtFRy215Efs2J/Fop4edN5NeCyK+1ZTc0BQe0hN4KemvDDW3k3VbSTtLegRt8iNu0JW7TQclt+xL5tSPy66iEnx+RX3siv06W3dAGHNABekfonQw3dJZ3F0lXSTcHbvAnbtOFuE13JbcdQOTXlcivhxJ+gUR+3Yj8elp2Q2dwQHfoPaD3NNzQS969JX0kfR24IYi4TW/iNh5KbjuYyK8PkV8/JfxCiPz6Evn1t+yGXuAAD+j9oPc33DBA3gMlnhIvB24IJW4zkLiNt5LbHkTk50nk56OE32AiPy8iP1/LbhgADvCG7gPd13CDn7z9JQGSQAduGELcxp+4TZCS2x5K5BdA5BeshN8wIr9AIr8Qy27wAwcEQQ+GHmK4IVTegySDJUMcuGE4cZtBxG2GKrntEUR+g4n8hinhN5LIbwiR33DLbggFBwyFPgz6cMMNI+Q9UjJKMtqBG0YRtxlJ3GaMktseTeQ3ishvrBJ+Y4j8RhP5jbPshhHggDHQx0IfZ7hhvLwnSCZKJjlww1jiNhOI20xWctvjiPwmEvlNUcJvPJHfJCK/qZbdMB4cMBn6FOhTDTdMk/d0yQzJTAdumEDcZjpxm1lKbnsikd8MIr/ZSvhNIvKbSeQ3x7IbpoEDZkGfDX2O4Ya58p4nmS9Z4MANk4nbzCNus1DJbU8h8ptP5LdICb+pRH4LiPwWW3bDXHDAQuiLoC823LBE3kslyyTLHbhhGnGbpcRtVii57elEfsuI/FYq4TeDyG85kd8qy25YAg5YAX0l9FWGG1bLe41krWSdAzfMJG6zhrjNeiW3PYvIby2R3wYl/GYT+a0j8tto2Q2rwQHroW+AvtFwwyZ5b5ZskWx14IY5xG02E7fZpuS25xL5bSHy266E3zwiv61Efjssu2ETOGAb9O3Qdxhu2CnvXZLdkj0O3DCfuM0u4jZ7ldz2AiK/3UR++5TwW0jkt4fIb79lN+wEB+yFvg/6fsMNB+R9UHJIctiBGxYRtzlI3OaIktteTOR3iMjvqBJ+S4j8DhP5HbPshgPggCPQj0I/ZrjhuLxPSE5KTjlww1LiNieI25xWctvLiPxOEvmdUcJvOZHfKSK/s5bdcBwccBr6GehnDTeck/d5yQXJRQduWEHc5jxxm0tKbnslkd8FIr/LSvitIvK7SOR3xbIbzoEDLkG/DP2K4Yar8r4muS654cANq4nbXCNuc1PJba8h8rtO5HdLCb+1RH43iPxuW3bDVXDATei3oN823HBH3ncl9yT3HbhhHXGbu8RtHii57fVEfveI/B4q4beByO8+kd8jy264Aw54AP0h9EeGGx7L+4nkqeSZAzdsJG7zhLjNcyW3vYnI7ymR3wsl/DYT+T0j8ntp2Q2PwQHPob+A/tJwwyt5v5a8kbx14IYtxG1eE7d5p+S2txL5vSHye6+E3zYiv7dEfh8su+EVOOAd9PfQPxhu+CjvT5LPki8O3LCduM0n4jZfldz2DiK/z0R+35Tw20nk94XI77tlN3wEB3yF/g36d8MNP+T9U/JL8tuBG3YRt/lJ3OaPktveTeT3i8jvrxJ+e4j8fhP5hfGx64Yf4IA/0P9C//cN6Iaw8g4nCS+J4GPfDXuJ24Tz4W0T0UfHbe8j8gtP5BdJCb/9RH4RiPwiW3ZDWJ//d0BE6JGgRzbcEEXeUSXRJNEduOEAcZuoxG1iKLntg0R+0Yj8Yirhd4jILzqRXyzLbogCDogBPSb0WIYbYss7jiSuJJ4DNxwmbhOHuE18Jbd9hMgvLpFfAiX8jhL5xSPyS2jZDbHBAfGhJ4Ce0HBDInknliSRJHXghmPEbRITt0mm5LaPE/klIfJLroTfCSK/pER+KSy7IRE4IBn05NBTGG5IKe9UktSSNA7ccJK4TSriNmmV3PYpIr/URH7plPA7TeSXhsgvvWU3pAQHpIWeDnp6ww0Z5J1RkkmS2YEbzhC3yUjcJouS2z5L5JeJyC+rEn7niPwyE/lls+yGDOCALNCzQs9muCG7vHNIckpyOXDDeeI2OYjb5FZy2xeI/HIS+eVRwu8ikV8uIr+8lt2QHRyQG3oe6HkNN+STd35JAUlBB264RNwmP3GbQkpu+zKRXwEiv8JK+F0h8itI5FfEshvygQMKQS8MvYjhhqLyLiYpLinhwA1XidsUI25TUsltXyPyK07kV0oJv+tEfiWI/EpbdkNRcEBJ6KWglzbcUEbeZSXlJOUduOEGcZuyxG0qKLntm0R+5Yj8Kirhd4vIrzyRXyXLbigDDqgAvSL0SoYbKsu7iqSqpJoDN9wmblOFuE11Jbd9h8ivKpFfDSX87hL5VSPyq2nZDZXBAdWh14Be03BDLXnXltSR1HXghnvEbWoTt6mn5LbvE/nVIfKrr4TfAyK/ukR+DSy7oRY4oB70+tAbGG5oKO9GksaSJg7c8JC4TSPiNk2V3PYjIr/GRH7NlPB7TOTXhMivuWU3NAQHNIXeDHpzww0t5N1S0krS2oEbnhC3aUncpo2S235K5NeKyK+tEn7PiPxaE/m1s+yGFuCANtDbQm9nuKG9vDtIOko6OXDDc+I2HYjbdFZy2y+I/DoS+XVRwu8lkV8nIr+ult3QHhzQGXoX6F0NN3STd3dJD0lPB254RdymO3GbXkpu+zWRXw8iv95K+L0h8utJ5NfHshu6gQN6Qe8NvY/hhr7y9pD0k/R34Ia3xG08iNsMUHLb74j8+hH5DVTC7z2RX38iP0/LbugLDhgAfSB0T8MNXvL2lvhIfB244QNxG2/iNn5KbvsjkZ8PkZ+/En6fiPx8ifwCLLvBCxzgB90feoDhhkB5B0mCJSEO3PCZuE0QcZtQJbf9hcgvmMhvkBJ+X4n8Qoj8Blt2QyA4IBT6IOiDDTcMkfdQyTDJcAdu+EbcZihxmxFKbvs7kd8wIr+RSvj9IPIbTuQ3yrIbhoADRkAfCX2U4YbR8h4jGSsZ58ANP4nbjCFuM17Jbf8i8htL5DdBCb/fRH7jiPwmWnbDaHDAeOgToE803DBJ3pMlUyRTHbjhD3GbycRtpim57b9EflOI/KYr4RcmC+93TSXym2HZDZPAAdOgT4c+w3DDTHnPksyWzHHghrDEbWYRt5mr5LbDEfnNJvKbp4RfeCK/OUR+8y27YSY4YC70edDnG25YIO+FkkWSxQ7cEIG4zULiNkuU3HZEIr9FRH5LlfCLROS3mMhvmWU3LAAHLIG+FPoyww3L5b1CslKyyoEbIhO3WUHcZrWS245C5LeSyG+NEn5RifxWEfmtteyG5eCA1dDXQF9ruGGdvNdLNkg2OnBDNOI264nbbFJy29GJ/DYQ+W1Wwi8Gkd9GIr8tlt2wDhywCfpm6FsMN2yV9zbJdskOB26ISdxmG3GbnUpuOxaR33Yiv11K+MUm8ttB5Lfbshu2ggN2Qt8Ffbfhhj3y3ivZJ9nvwA1xiNvsJW5zQMltxyXy20fkd1AJv3hEfvuJ/A5ZdsMecMAB6AehHzLccFjeRyRHJcccuCE+cZsjxG2OK7ntBER+R4n8Tijhl5DI7xiR30nLbjgMDjgO/QT0k4YbTsn7tOSM5KwDNyQibnOauM05JbedmMjvDJHfeSX8khD5nSXyu2DZDafAAeegn4d+wXDDRXlfklyWXHHghqTEbS4Rt7mq5LaTEfldJvK7poRfciK/K0R+1y274SI44Cr0a9CvG264Ie+bkluS2w7ckIK4zU3iNneU3HZKIr9bRH53lfBLReR3m8jvnmU33AAH3IF+F/o9ww335f1A8lDyyIEbUhO3eUDc5rGS205D5PeQyO+JEn5pifweEfk9teyG++CAx9CfQH9quOGZvJ9LXkheOnBDOuI2z4nbvFJy2+mJ/F4Q+b1Wwi8Dkd9LIr83lt3wDBzwCvpr6G8MN7yV9zvJe8kHB27ISNzmHXGbj0puOxOR33siv09K+GUm8vtA5PfZshveggM+Qv8E/bPhhi/y/ir5JvnuwA1ZiNt8JW7zQ8ltZyXy+0bk91MJv2xEft+J/H5ZdsMXcMAP6D+h/zLc8PvfW/JXEsbXvhuyE7f5Q9wmrK+O285B5PeXyC+cEn45ifzC+PL4hfe164bf4IB/t/6/Hg56eN//uiGCvCNKIkkiO3BDLuI2EYnbRFFy27mJ/CIR+UVVwi8PkV9kIr9olt0QARwQBXpU6NEMN0SXdwxJTEksB27IS9wmBnGb2EpuOx+RX0wivzhK+OUn8otF5BfXshuigwNiQ48DPa7hhnjyji9JIEnowA0FiNvEJ26TSMltFyTyS0Dkl1gJv0JEfgmJ/JJYdkM8cEAi6ImhJzHckFTeySTJJSkcuKEwcZtkxG1SKrntIkR+yYn8UinhV5TILwWRX2rLbkgKDkgJPRX01IYb0sg7rSSdJL0DNxQjbpOWuE0GJbddnMgvHZFfRiX8ShD5pSfyy2TZDWnAARmgZ4SeyXBDZnlnkWSVZHPghpLEbbIQt8mu5LZLEfllJfLLoYRfaSK/bER+OS27ITM4IDv0HNBzGm7IJe/ckjySvA7cUIa4TW7iNvmU3HZZIr88RH75lfArR+SXl8ivgGU35AIH5IOeH3oBww0F5V1IUlhSxIEbyhO3KUTcpqiS265A5FeYyK+YEn4VifyKEPkVt+yGguCAotCLQS9uuKGEvEtKSklKO3BDJeI2JYnblFFy25WJ/EoR+ZVVwq8KkV9pIr9ylt1QAhxQBnpZ6OUMN5SXdwVJRUklB26oStymAnGbykpuuxqRX0UivypK+FUn8qtE5FfVshvKgwMqQ68Cvarhhmryri6pIanpwA01iNtUJ25TS8lt1yTyq0HkV1sJv1pEfjWJ/OpYdkM1cEAt6LWh1zHcUFfe9ST1JQ0cuKE2cZt6xG0aKrntOkR+9Yn8GinhV5fIrwGRX2PLbqgLDmgIvRH0xoYbmsi7qaSZpLkDN9QjbtOUuE0LJbddn8ivGZFfSyX8GhD5NSfya2XZDU3AAS2gt4TeynBDa3m3kbSVtHPghobEbdoQt2mv5LYbEfm1JfLroIRfYyK/dkR+HS27oTU4oD30DtA7Gm7oJO/Oki6Srg7c0IS4TWfiNt2U3HZTIr8uRH7dlfBrRuTXlcivh2U3dAIHdIPeHXoPww095d1L0lvSx4EbmhO36UXcpq+S225B5NebyM9DCb+WRH59iPz6WXZDT3BAX+ge0PsZbugv7wGSgRJPB25oRdxmAHEbLyW33ZrIbyCRn7cSfm2I/DyJ/Hwsu6E/OMALujd0H8MNvvL2k/hLAhy4oS1xGz/iNoFKbrsdkZ8/kV+QEn7tifwCiPyCLbvBFxwQCD0IerDhhhB5h0oGSQY7cEMH4jahxG2GKLntjkR+g4j8hirh14nIbzCR3zDLbggBBwyBPhT6MMMNw+U9QjJSMsqBGzoTtxlB3Ga0ktvuQuQ3kshvjBJ+XYn8RhH5jbXshuHggNHQx0Afa7hhnLzHSyZIJjpwQzfiNuOJ20xSctvdifwmEPlNVsKvB5HfRCK/KZbdMA4cMAn6ZOhTDDdMlfc0yXTJDAdu6EncZhpxm5lKbrsXkd90Ir9ZSvj1JvKbQeQ327IbpoIDZkKfBX224YY58p4rmSeZ78ANfYjbzCVus0DJbfcl8ptH5LdQCT8PIr/5RH6LLLthDjhgAfSF0BcZblgs7yWSpZJlDtzQj7jNEuI2y5Xcdn8iv6VEfiuU8BtA5LeMyG+lZTcsBgcsh74C+krDDavkvVqyRrLWgRsGErdZTdxmnZLb9iTyW0Pkt14JPy8iv7VEfhssu2EVOGAd9PXQNxhu2CjvTZLNki0O3OBN3GYTcZutSm7bh8hvM5HfNiX8fIn8thD5bbfsho3ggK3Qt0Hfbrhhh7x3SnZJdjtwgx9xm53EbfYouW1/Ir9dRH57lfALIPLbTeS3z7IbdoAD9kDfC32f4Yb98j4gOSg55MANgcRtDhC3OazktoOI/A4S+R1Rwi+YyO8Qkd9Ry27YDw44DP0I9KOGG47J+7jkhOSkAzeEELc5TtzmlJLbDiXyO0Hkd1oJv0FEfieJ/M5YdsMxcMAp6KehnzHccFbe5yTnJRccuGEwcZtzxG0uKrntIUR+54n8LinhN5TI7wKR32XLbjgLDrgI/RL0y4Ybrsj7quSa5LoDNwwjbnOVuM0NJbc9nMjvGpHfTSX8RhD5XSfyu2XZDVfAATeg34R+y3DDbXnfkdyV3HPghpHEbe4Qt7mv5LZHEfndJfJ7oITfaCK/e0R+Dy274TY44D70B9AfGm54JO/HkieSpw7cMIa4zWPiNs+U3PZYIr8nRH7PlfAbR+T3lMjvhWU3PAIHPIP+HPoLww0v5f1K8lryxoEbxhO3eUXc5q2S255A5PeayO+dEn4TifzeEPm9t+yGl+CAt9DfQX9vuOGDvD9KPkk+O3DDJOI2H4nbfFFy25OJ/D4R+X1Vwm8Kkd9nIr9vlt3wARzwBfpX6N8MN3yX9w/JT8kvB26YStzmB3Gb30puexqR308ivz9K+E0n8vtF5PfXshu+gwN+Q/8D/a/hhjB+YcOElYSThPez74YZxG3+fTdrmwh+Om57JpFfOCK/iEr4zSLyC0/kF8nPrhv+/Z3/zwERoEeEHsnvv26ILO8okqiSaA7cMJu4TRTiNtGV3PYcIr+oRH4xlPCbS+QXjcgvpmU3RAYHRIceA3pMww2x5B1bEkcS14Eb5hG3iU3cJp6S255P5BeHyC++En4LiPziEvklsOyGWOCAeNDjQ09guCGhvBNJEkuSOHDDQuI2iYjbJFVy24uI/BIT+SVTwm8xkV8SIr/klt2QEByQFHoy6MkNN6SQd0pJKklqB25YQtwmJXGbNEpueymRXyoiv7RK+C0j8ktN5JfOshtSgAPSQE8LPZ3hhvTyziDJKMnkwA3LidtkIG6TWcltryDyy0jkl0UJv5VEfpmI/LJadkN6cEBm6FmgZzXckE3e2SU5JDkduGEVcZvsxG1yKbnt1UR+OYj8civht4bILyeRXx7LbsgGDsgFPTf0PIYb8so7nyS/pIADN6wlbpOPuE1BJbe9jsgvP5FfISX81hP5FSDyK2zZDXnBAQWhF4Je2HBDEXkXlRSTFHfghg3EbYoStymh5LY3EvkVI/IrqYTfJiK/4kR+pSy7oQg4oAT0ktBLGW4o/e+bJGUl5Ry4YTNxmzLEbcorue0tRH5lifwqKOG3lcivHJFfRctuKA0OKA+9AvSKhhsqybuypIqkqgM3bCNuU5m4TTUlt72dyK8KkV91Jfx2EPlVJfKrYdkNlcAB1aBXh17DcENNedeS1JbUceCGncRtahG3qavktncR+dUm8qunhN9uIr86RH71LbuhJjigLvR60Osbbmgg74aSRpLGDtywh7hNQ+I2TZTc9l4iv0ZEfk2V8NtH5NeYyK+ZZTc0AAc0gd4UejPDDc3l3ULSUtLKgRv2E7dpQdymtZLbPkDk15LIr40SfgeJ/FoR+bW17Ibm4IDW0NtAb2u4oZ2820s6SDo6cMMh4jbtidt0UnLbh4n8OhD5dVbC7wiRX0civy6W3dAOHNAJemfoXQw3dJV3N0l3SQ8HbjhK3KYbcZueSm77GJFfdyK/Xkr4HSfy60Hk19uyG7qCA3pC7wW9t+GGPvLuK/GQ9HPghhPEbfoSt+mv5LZPEvl5EPkNUMLvFJFfPyK/gZbd0Acc0B/6AOgDDTd4yttL4i3xceCG08RtvIjb+Cq57TNEft5Efn5K+J0l8vMh8vO37AZPcIAvdD/o/oYbAuQdKAmSBDtwwzniNoHEbUKU3PZ5Ir8gIr9QJfwuEPkFE/kNsuyGAHBACPRQ6IMMNwyW9xDJUMkwB264SNxmCHGb4Upu+xKR31AivxFK+F0m8htG5DfSshsGgwOGQx8BfaThhlHyHi0ZIxnrwA1XiNuMJm4zTsltXyXyG0PkN14Jv2tEfmOJ/CZYdsMocMA46OOhTzDcMFHekySTJVMcuOE6cZtJxG2mKrntG0R+k4n8pinhd5PIbwqR33TLbpgIDpgKfRr06YYbZsh7pmSWZLYDN9wibjOTuM0cJbd9m8hvFpHfXCX87hD5zSbym2fZDTPAAXOgz4U+z3DDfHkvkCyULHLghrvEbRYQt1ms5LbvEfktJPJbooTffSK/RUR+Sy27YT44YDH0JdCXGm5YJu/lkhWSlQ7c8IC4zXLiNquU3PZDIr8VRH6rlfB7ROS3kshvjWU3LAMHrIK+Gvoaww1r5b1Osl6ywYEbHhO3WUfcZqOS235C5LeeyG+TEn5Pifw2EPlttuyGteCAjdA3Qd9suGGLvLdKtkm2O3DDM+I2W4nb7FBy28+J/LYR+e1Uwu8Fkd92Ir9dlt2wBRywA/pO6LsMN+yW9x7JXsk+B254SdxmD3Gb/Upu+xWR314ivwNK+L0m8ttH5HfQsht2gwP2Qz8A/aDhhkPyPiw5IjnqwA1viNscJm5zTMltvyXyO0Lkd1wJv3dEfkeJ/E5YdsMhcMAx6MehnzDccFLepySnJWccuOE9cZtTxG3OKrntD0R+p4n8zinh95HI7wyR33nLbjgJDjgL/Rz084YbLsj7ouSS5LIDN3wibnORuM0VJbf9mcjvEpHfVSX8vhD5XSbyu2bZDRfAAVegX4V+zXDDdXnfkNyU3HLghq/EbW4Qt7mt5La/EfndJPK7o4TfdyK/W0R+dy274To44Db0O9DvGm64J+/7kgeShw7c8IO4zX3iNo+U3PZPIr8HRH6PlfD7ReT3kMjviWU33AMHPIL+GPoTww1P5f1M8lzywoEbfhO3eUbc5qWS2/5D5PecyO+VEn5/ifxeEPm9tuyGp+CAl9BfQX9tuOGNvN9K3kneO3BDmKzE/9kTt/mg5LbDEvm9I/L7qIRfOCK/90R+nyy74Q044AP0j9A/GW74LO8vkq+Sbw7cEJ64zRfiNt+V3HYEIr+vRH4/lPCLSOT3jcjvp2U3fAYHfIf+A/pPww2/5P37388kfx24IRJxm9/EbcL467jtyER+f4j8wirhF4XI7y+RXzh/u274BQ74d+v/62Ghh/P/rxvCyzuCJKIkkr99N0QlbhPBn7dNZCW3HY3ILyKRXxQl/KIT+UUi8otq2Q3hwQGRoUeBHtVwQzR5R5fEkMR04IYYxG2iE7eJpeS2YxL5xSDyi62EXywiv5hEfnEsuyEaOCAW9NjQ4xhuiCvveJL4kgQO3BCbuE084jYJldx2HCK/+ER+iZTwi0vkl4DIL7FlN8QFBySEngh6YsMNSeSdVJJMktyBG+IRt0lK3CaFktuOT+SXjMgvpRJ+CYj8khP5pbLshiTggBTQU0JPZbghtbzTSNJK0jlwQ0LiNmmI26RXctuJiPzSEvllUMIvMZFfOiK/jJbdkBockB56BugZDTdkkndmSRZJVgduSELcJjNxm2xKbjspkV8WIr/sSvglI/LLSuSXw7IbMoEDskHPDj2H4Yac8s4lyS3J48ANyYnb5CJuk1fJbacg8stN5JdPCb+URH55iPzyW3ZDTnBAXuj5oOc33FBA3gUlhSSFHbghFXGbgsRtiii57dREfoWI/Ioq4ZeGyK8wkV8xy24oAA4oAr0o9GKGG4rLu4SkpKSUAzekJW5TgrhNaSW3nY7IrySRXxkl/NIT+ZUi8itr2Q3FwQGloZeBXtZwQzl5l5dUkFR04IYMxG3KE7eppOS2MxL5VSDyq6yEXyYiv4pEflUsu6EcOKAS9MrQqxhuqCrvapLqkhoO3JCZuE014jY1ldx2FiK/6kR+tZTwy0rkV4PIr7ZlN1QFB9SEXgt6bcMNdeRdV1JPUt+BG7IRt6lL3KaBktvOTuRXj8ivoRJ+OYj86hP5NbLshjrggAbQG0JvZLihsbybSJpKmjlwQ07iNk2I2zRXctu5iPyaEvm1UMIvN5FfMyK/lpbd0Bgc0Bx6C+gtDTe0kndrSRtJWwduyEPcpjVxm3ZKbjsvkV8bIr/2SvjlI/JrS+TXwbIbWoED2kFvD72D4YaO8u4k6Szp4sAN+YnbdCJu01XJbRcg8utM5NdNCb+CRH5diPy6W3ZDR3BAV+jdoHc33NBD3j0lvSS9HbihEHGbnsRt+ii57cJEfr2I/Poq4VeEyK83kZ+HZTf0AAf0gd4Xuofhhn7y7i8ZIBnowA1Fidv0J27jqeS2ixH5DSDy81LCrziR30AiP2/LbugHDvCE7gXd23CDj7x9JX4SfwduKEHcxpe4TYCS2y5J5OdH5BeohF8pIj9/Ir8gy27wAQcEQA+EHmS4IVjeIZJQySAHbihN3CaEuM1gJbddhsgvlMhviBJ+ZYn8BhH5DbXshmBwwGDoQ6APNdwwTN7DJSMkIx24oRxxm+HEbUYpue3yRH4jiPxGK+FXgchvJJHfGMtuGAYOGAV9NPQxhhvGynucZLxkggM3VCRuM464zUQlt12JyG88kd8kJfwqE/lNIPKbbNkNY8EBE6FPgj7ZcMMUeU+VTJNMd+CGKsRtphK3maHktqsS+U0j8puphF81Ir/pRH6zLLthCjhgBvSZ0GcZbpgt7zmSuZJ5DtxQnbjNHOI285Xcdg0iv7lEfguU8KtJ5DePyG+hZTfMBgfMh74A+kLDDYvkvViyRLLUgRtqEbdZTNxmmZLbrk3kt4TIb7kSfnWI/JYS+a2w7IZF4IBl0JdDX2G4YaW8V0lWS9Y4cENd4jariNusVXLb9Yj8VhP5rVPCrz6R3xoiv/WW3bASHLAW+jro6w03bJD3RskmyWYHbmhA3GYjcZstSm67IZHfJiK/rUr4NSLy20zkt82yGzaAA7ZA3wp9m+GG7fLeIdkp2eXADY2J2+wgbrNbyW03IfLbSeS3Rwm/pkR+u4j89lp2w3ZwwG7oe6DvNdywT977JQckBx24oRlxm/3EbQ4pue3mRH4HiPwOK+HXgsjvIJHfEctu2AcOOAT9MPQjhhuOyvuY5LjkhAM3tCRuc4y4zUklt92KyO84kd8pJfxaE/mdIPI7bdkNR8EBJ6Gfgn7acMMZeZ+VnJOcd+CGNsRtzhK3uaDkttsS+Z0j8ruohF87Ir/zRH6XLLvhDDjgAvSL0C8Zbrgs7yuSq5JrDtzQnrjNFeI215Xcdgciv6tEfjeU8OtI5HeNyO+mZTdcBgdch34D+k3DDbfkfVtyR3LXgRs6Ebe5TdzmnpLb7kzkd4fI774Sfl2I/O4S+T2w7IZb4IB70O9Df2C44aG8H0keS544cENX4jaPiNs8VXLb3Yj8HhP5PVPCrzuR3xMiv+eW3fAQHPAU+jPozw03vJD3S8kryWsHbuhB3OYlcZs3Sm67J5HfKyK/t0r49SLye03k986yG16AA95Afwv9neGG9/L+IPko+eTADb2J23wgbvNZyW33IfL7SOT3RQm/vkR+n4j8vlp2w3twwGfoX6B/NdzwTd7fJT8kPx24wYO4zXfiNr+U3HY/Ir8fRH6/lfDrT+T3k8jvj2U3fAMH/IL+G/ofww1/5R0mIGyYsJJwAfbdMIC4zb/vZm0TPkDHbQ8k8gtL5BdBCT9PIr9wRH4RA+y64S844N+t/69HgB4x4L9uiCTvyJIokqgO3OBF3CYycZtoSm7bm8gvCpFfdCX8fIj8ohL5xbDshkjggGjQo0OPYbghprxjSWJL4jhwgy9xm1jEbeIquW0/Ir/YRH7xlPDzJ/KLQ+QX37IbYoID4kKPBz2+4YYE8k4oSSRJ7MANAcRtEhK3SaLktgOJ/BIR+SVVwi+IyC8xkV8yy25IAA5IAj0p9GSGG5LLO4UkpSSVAzcEE7dJQdwmtZLbDiHyS0nkl0YJv1Aiv1REfmktuyE5OCA19DTQ0xpuSCfv9JIMkowO3DCIuE164jaZlNz2YCK/DER+mZXwG0Lkl5HIL4tlN6QDB2SCnhl6FsMNWeWdTZJdksOBG4YSt8lG3CanktseRuSXncgvlxJ+w4n8chD55bbshqzggJzQc0HPbbghj7zzSvJJ8jtwwwjiNnmJ2xRQctsjifzyEfkVVMJvFJFffiK/QpbdkAccUAB6QeiFDDcUlncRSVFJMQduGE3cpghxm+JKbnsMkV9RIr8SSviNJfIrRuRX0rIbCoMDikMvAb2k4YZS8i7977skZR24YRxxm9LEbcopue3xRH5liPzKK+E3gcivLJFfBctuKAUOKAe9PPQKhhsqyruSpLKkigM3TCRuU4m4TVUltz2JyK8ykV81JfwmE/lVIfKrbtkNFcEBVaFXg17dcEMNedeU1JLUduCGKcRtahK3qaPktqcS+dUi8qurhN80Ir/aRH71LLuhBjigDvS60OsZbqgv7waShpJGDtwwnbhNA+I2jZXc9gwiv4ZEfk2U8JtJ5NeIyK+pZTfUBwc0ht4EelPDDc3k3VzSQtLSgRtmEbdpTtymlZLbnk3k14LIr7USfnOI/FoS+bWx7IZm4IBW0FtDb2O4oa2820naSzo4cMNc4jbtiNt0VHLb84j82hP5dVLCbz6RXwciv86W3dAWHNAReifonQ03dJF3V0k3SXcHblhA3KYrcZseSm57IZFfNyK/nkr4LSLy607k18uyG7qAA3pA7wm9l+GG3vLuI+kr8XDghsXEbfoQt+mn5LaXEPn1JfLrr4TfUiI/DyK/AZbd0Bsc0A96f+gDDDcMlLenxEvi7cANy4jbeBK38VFy28uJ/LyI/HyV8FtB5OdN5Odn2Q0DwQE+0H2h+xlu8Jd3gCRQEuTADSuJ2wQQtwlWcturiPwCifxClPBbTeQXROQXatkN/uCAYOgh0EMNNwyS92DJEMlQB25YQ9xmMHGbYUpuey2R3xAiv+FK+K0j8htK5DfCshsGgQOGQR8OfYThhpHyHiUZLRnjwA3riduMIm4zVsltbyDyG03kN04Jv41EfmOI/MZbdsNIcMBY6OOgjzfcMEHeEyWTJJMduGETcZuJxG2mKLntzUR+k4j8pirht4XIbzKR3zTLbpgADpgCfSr0aYYbpst7hmSmZJYDN2wlbjODuM1sJbe9jchvJpHfHCX8thP5zSLym2vZDdPBAbOhz4E+13DDPHnPlyyQLHTghh3EbeYTt1mk5LZ3EvktIPJbrITfLiK/hUR+Syy7YR44YBH0xdCXGG5YKu9lkuWSFQ7csJu4zTLiNiuV3PYeIr/lRH6rlPDbS+S3gshvtWU3LAUHrIS+Cvpqww1r5L1Wsk6y3oEb9hG3WUvcZoOS295P5LeOyG+jEn4HiPzWE/ltsuyGNeCADdA3Qt9kuGGzvLdItkq2OXDDQeI2W4jbbFdy24eI/LYS+e1Qwu8wkd82Ir+dlt2wGRywHfoO6DsNN+yS927JHsleB244QtxmN3GbfUpu+yiR3x4iv/1K+B0j8ttL5HfAsht2gQP2Qd8P/YDhhoPyPiQ5LDniwA3HidscIm5zVMltnyDyO0zkd0wJv5NEfkeI/I5bdsNBcMBR6MegHzfccELeJyWnJKcduOEUcZuTxG3OKLnt00R+p4j8zirhd4bI7zSR3znLbjgBDjgD/Sz0c4Ybzsv7guSi5JIDN5wlbnOBuM1lJbd9jsjvIpHfFSX8zhP5XSLyu2rZDefBAZehX4F+1XDDNXlfl9yQ3HTghgvEba4Tt7ml5LYvEvndIPK7rYTfJSK/m0R+dyy74Ro44Bb029DvGG64K+97kvuSBw7ccJm4zT3iNg+V3PYVIr/7RH6PlPC7SuT3gMjvsWU33AUHPIT+CPpjww1P5P1U8kzy3IEbrhG3eUrc5oWS275O5PeMyO+lEn43iPyeE/m9suyGJ+CAF9BfQn9luOG1vN9I3kreOXDDTeI2b4jbvFdy27eI/N4S+X1Qwu82kd87Ir+Plt3wGhzwHvoH6B8NN3yS92fJF8lXB264Q9zmM3Gbb0pu+y6R3xciv+9K+N0j8vtK5PfDshs+gQO+Qf8O/Yfhhp/y/iX5/e/nDtxwn7jNL+I2f5Xc9gMiv99EfmECdfB7SOT3h8gvbKBdN/wEB/yF/m+3//Wwgf91Qzh5h5dEkEQMtO+GR8Rtwgfytomk5LYfE/lFIPKLrITfEyK/iER+USy7IRw4IBL0yNCjGG6IKu9okuiSGA7c8JS4TTTiNjGV3PYzIr/oRH6xlPB7TuQXg8gvtmU3RAUHxIQeC3psww1x5B1XEk8S34EbXhC3iUvcJoGS235J5BePyC+hEn6viPziE/klsuyGOOCABNATQk9kuCGxvJNIkkqSOXDDa+I2SYjbJFdy22+I/JIS+aVQwu8tkV8yIr+Ult2QGByQHHoK6CkNN6SSd2pJGklaB254R9wmNXGbdEpu+z2RXxoiv/RK+H0g8ktL5JfBshtSgQPSQU8PPYPhhozyziTJLMniwA0fidtkIm6TVcltfyLyy0zkl00Jv89EflmI/LJbdkNGcEBW6NmgZzfckEPeOSW5JLkduOELcZucxG3yKLntr0R+uYj88irh943ILzeRXz7LbsgBDsgDPS/0fIYb8su7gKSgpJADN3wnblOAuE1hJbf9g8ivIJFfESX8fhL5FSLyK2rZDfnBAYWhF4Fe1HBDMXkXl5SQlHTghl/EbYoTtyml5LZ/E/mVIPIrrYTfHyK/kkR+ZSy7oRg4oBT00tDLGG4oK+9ykvKSCg7c8Je4TTniNhWV3HaYbLzfVZ7Ir5ISfmGJ/CoQ+VW27Iay4ICK0CtBr2y4oYq8q0qqSao7cEM44jZVidvUUHLb4Yn8qhH51VTCLwKRX3Uiv1qW3VAFHFADek3otQw31JZ3HUldST0HbohI3KYOcZv6Sm47EpFfXSK/Bkr4RSbyq0fk19CyG2qDA+pDbwC9oeGGRvJuLGkiaerADVGI2zQmbtNMyW1HJfJrQuTXXAm/aER+TYn8Wlh2QyNwQDPozaG3MNzQUt6tJK0lbRy4ITpxm1bEbdoque0YRH6tifzaKeEXk8ivDZFfe8tuaAkOaAu9HfT2hhs6yLujpJOkswM3xCJu05G4TRcltx2byK8TkV9XJfziEPl1JvLrZtkNHcABXaB3hd7NcEN3efeQ9JT0cuCGuMRtehC36a3ktuMR+fUk8uujhF98Ir9eRH59LbuhOzigN/Q+0PsabvCQdz9Jf8kAB25IQNymH3GbgUpuOyGRX38iP08l/BIR+Q0g8vOy7AYPcMBA6J7QvQw3eMvbR+Ir8XPghsTEbXyI2/grue0kRH6+RH4BSvglJfLzI/ILtOwGb3CAP/QA6IGGG4LkHSwJkYQ6cEMy4jbBxG0GKbnt5ER+IUR+g5XwS0HkF0rkN8SyG4LAAYOgD4Y+xHDDUHkPkwyXjHDghpTEbYYRtxmp5LZTEfkNJ/IbpYRfaiK/EUR+oy27YSg4YCT0UdBHG24YI++xknGS8Q7ckIa4zVjiNhOU3HZaIr9xRH4TlfBLR+Q3nshvkmU3jAEHTIA+Efokww2T5T1FMlUyzYEb0hO3mULcZrqS285A5DeVyG+GEn4ZifymEfnNtOyGyeCA6dBnQJ9puGGWvGdL5kjmOnBDJuI2s4nbzFNy25mJ/OYQ+c1Xwi8Lkd9cIr8Flt0wCxwwD/p86AsMNyyU9yLJYskSB27IStxmEXGbpUpuOxuR32Iiv2VK+GUn8ltC5LfcshsWggOWQl8GfbnhhhXyXilZJVntwA05iNusJG6zRslt5yTyW0Xkt1YJv1xEfquJ/NZZdsMKcMAa6GuhrzPcsF7eGyQbJZscuCE3cZsNxG02K7ntPER+G4n8tijhl5fIbxOR31bLblgPDtgMfQv0rYYbtsl7u2SHZKcDN+QjbrOduM0uJbedn8hvB5HfbiX8ChD57STy22PZDdvAAbug74a+x3DDXnnvk+yXHHDghoLEbfYRtzmo5LYLEfntJ/I7pIRfYSK/A0R+hy27YS844CD0Q9APG244Iu+jkmOS4w7cUIS4zVHiNieU3HZRIr9jRH4nlfArRuR3nMjvlGU3HAEHnIB+Evopww2n5X1GclZyzoEbihO3OUPc5ryS2y5B5HeWyO+CEn4lifzOEfldtOyG0+CA89AvQL9ouOGSvC9LrkiuOnBDKeI2l4nbXFNy26WJ/K4Q+V1Xwq8Mkd9VIr8blt1wCRxwDfp16DcMN9yU9y3JbckdB24oS9zmFnGbu0puuxyR320iv3tK+JUn8rtD5HffshtuggPuQr8H/b7hhgfyfih5JHnswA0ViNs8JG7zRMltVyTye0Tk91QJv0pEfo+J/J5ZdsMDcMAT6E+hPzPc8FzeLyQvJa8cuKEycZsXxG1eK7ntKkR+L4n83ijhV5XI7xWR31vLbngODngN/Q30t4Yb3sn7veSD5KMDN1QjbvOeuM0nJbddncjvA5HfZyX8ahD5fSTy+2LZDe/AAZ+gf4b+xXDDV3l/k3yX/HDghprEbb4Rt/mp5LZrEfl9J/L7pYRfbSK/H0R+vy274Ss44Cf0X9B/G274I++/kjBBYcOEDbLvhjrEbf4StwkXpOO26xL5hQni8QuvhF89Ir+wRH4Rguy64Q844N+t/6+Hhx4h6L9uiCjvSJLIkigO3FCfuE0k4jZRldx2AyK/yER+0ZTwa0jkF4XIL7plN0QEB0SFHg16dMMNMeQdUxJLEtuBGxoRt4lJ3CaOkttuTOQXi8gvrhJ+TYj8YhP5xbPshhjggDjQ40KPZ7ghvrwTSBJKEjlwQ1PiNgmI2yRWctvNiPwSEvklUcKvOZFfIiK/pJbdEB8ckBh6EuhJDTckk3dySQpJSgduaEHcJjlxm1RKbrslkV8KIr/USvi1IvJLSeSXxrIbkoEDUkFPDT2N4Ya08k4nSS/J4MANrYnbpCNuk1HJbbch8ktP5JdJCb+2RH4ZiPwyW3ZDWnBARuiZoGc23JBF3lkl2STZHbihHXGbrMRtcii57fZEftmI/HIq4deByC87kV8uy27IAg7IAT0n9FyGG3LLO48krySfAzd0JG6Th7hNfiW33YnILy+RXwEl/DoT+eUj8ito2Q25wQH5oReAXtBwQyF5F5YUkRR14IYuxG0KE7cppuS2uxL5FSHyK66EXzciv6JEfiUsu6EQOKAY9OLQSxhuKCnvUpLS/77NgRu6E7cpRdymrJLb7kHkV5rIr5wSfj2J/MoQ+ZW37IaS4ICy0MtBL2+4oYK8K0oqSSo7cEMv4jYVidtUUXLbvYn8KhH5VVXCrw+RX2Uiv2qW3VABHFAFelXo1Qw3VJd3DUlNSS0HbuhL3KYGcZvaSm7bg8ivJpFfHSX8+hH51SLyq2vZDdXBAbWh14Fe13BDPXnXlzSQNHTghv7EbeoTt2mk5LYHEPk1IPJrrITfQCK/hkR+TSy7oR44oBH0xtCbGG5oKu9mkuaSFg7c4Encphlxm5ZKbtuLyK85kV8rJfy8ifxaEPm1tuyGpuCAltBbQW9tuKGNvNtK2knaO3CDD3GbtsRtOii5bV8iv3ZEfh2V8PMj8mtP5NfJshvagAM6QO8IvZPhhs7y7iLpKunmwA3+xG26ELfpruS2A4j8uhL59VDCL5DIrxuRX0/LbugMDugOvQf0noYbesm7t6SPpK8DNwQRt+lN3MZDyW0HE/n1IfLrp4RfCJFfXyK//pbd0Asc4AG9H/T+hhsGyHugxFPi5cANocRtBhK38VZy24OI/DyJ/HyU8BtM5OdF5Odr2Q0DwAHe0H2g+xpu8JO3vyRAEujADUOI2/gTtwlScttDifwCiPyClfAbRuQXSOQXYtkNfuCAIOjB0EMMN4TKe5BksGSIAzcMJ24ziLjNUCW3PYLIbzCR3zAl/EYS+Q0h8htu2Q2h4ICh0IdBH264YYS8R0pGSUY7cMMo4jYjiduMUXLbo4n8RhH5jVXCbwyR32giv3GW3TACHDAG+ljo4ww3jJf3BMlEySQHbhhL3GYCcZvJSm57HJHfRCK/KUr4jSfym0TkN9WyG8aDAyZDnwJ9quGGafKeLpkhmenADROI20wnbjNLyW1PJPKbQeQ3Wwm/SUR+M4n85lh2wzRwwCzos6HPMdwwV97zJPMlCxy4YTJxm3nEbRYque0pRH7zifwWKeE3lchvAZHfYstumAsOWAh9EfTFhhuWyHupZJlkuQM3TCNus5S4zQoltz2dyG8Zkd9KJfxmEPktJ/JbZdkNS8ABK6CvhL7KcMNqea+RrJWsc+CGmcRt1hC3Wa/ktmcR+a0l8tughN9sIr91RH4bLbthNThgPfQN0Dcabtgk782SLZKtDtwwh7jNZuI225Tc9lwivy1EftuV8JtH5LeVyG+HZTdsAgdsg74d+g7DDTvlvUuyW7LHgRvmE7fZRdxmr5LbXkDkt5vIb58SfguJ/PYQ+e237Iad4IC90PdB32+44YC8D0oOSQ47cMMi4jYHidscUXLbi4n8DhH5HVXCbwmR32Eiv2OW3XAAHHAE+lHoxww3HJf3CclJySkHblhK3OYEcZvTSm57GZHfSSK/M0r4LSfyO0Xkd9ayG46DA05DPwP9rOGGc/I+L7kguejADSuI25wnbnNJyW2vJPK7QOR3WQm/VUR+F4n8rlh2wzlwwCXol6FfMdxwVd7XJNclNxy4YTVxm2vEbW4que01RH7XifxuKeG3lsjvBpHfbctuuAoOuAn9FvTbhhvuyPuu5J7kvgM3rCNuc5e4zQMlt72eyO8ekd9DJfw2EPndJ/J7ZNkNd8ABD6A/hP7IcMNjeT+RPJU8c+CGjcRtnhC3ea7ktjcR+T0l8nuhhN9mIr9nRH4vLbvhMTjgOfQX0F8abngl79eSN5K3DtywhbjNa+I275Tc9lYivzdEfu+V8NtG5PeWyO+DZTe8Age8g/4e+gfDDR/l/UnyWfLFgRu2E7f5RNzmq5Lb3kHk95nI75sSfjuJ/L4Q+X237IaP4ICv0L9B/2644Ye8f0p+SX47cMMu4jY/idv8UXLbu4n8fhH5/VXCbw+R328ivzDBdt3wAxzwB/pf6P++Ad0QVt7hJOElEYLtu2EvcZtwwbxtIgbruO19RH7hifwiKeG3n8gvApFfZMtuCBv8/w6ICD0S9MiGG6LIO6okmiS6AzccIG4TlbhNDCW3fZDILxqRX0wl/A4R+UUn8otl2Q1RwAExoMeEHstwQ2x5x5HElcRz4IbDxG3iELeJr+S2jxD5xSXyS6CE31Eiv3hEfgktuyE2OCA+9ATQExpuSCTvxJIkkqQO3HCMuE1i4jbJlNz2cSK/JER+yZXwO0Hkl5TIL4VlNyQCBySDnhx6CsMNKeWdSpJaksaBG04St0lF3Catkts+ReSXmsgvnRJ+p4n80hD5pbfshpTggLTQ00FPb7ghg7wzSjJJMjtwwxniNhmJ22RRcttnifwyEfllVcLvHJFfZiK/bJbdkAEckAV6VujZDDdkl3cOSU5JLgduOE/cJgdxm9xKbvsCkV9OIr88SvhdJPLLReSX17IbsoMDckPPAz2v4YZ88s4vKSAp6MANl4jb5CduU0jJbV8m8itA5FdYCb8rRH4FifyKWHZDPnBAIeiFoRcx3FBU3sUkxSUlHLjhKnGbYsRtSiq57WtEfsWJ/Eop4XedyK8EkV9py24oCg4oCb0U9NKGG8rIu6yknKS8AzfcIG5TlrhNBSW3fZPIrxyRX0Ul/G4R+ZUn8qtk2Q1lwAEVoFeEXslwQ2V5V5FUlVRz4IbbxG2qELepruS27xD5VSXyq6GE310iv2pEfjUtu6EyOKA69BrQaxpuqCXv2pI6kroO3HCPuE1t4jb1lNz2fSK/OkR+9ZXwe0DkV5fIr4FlN9QCB9SDXh96A8MNDeXdSNJY0sSBGx4St2lE3Kapktt+ROTXmMivmRJ+j4n8mhD5NbfshobggKbQm0FvbrihhbxbSlpJWjtwwxPiNi2J27RRcttPifxaEfm1VcLvGZFfayK/dpbd0AIc0AZ6W+jtDDe0l3cHSUdJJwdueE7cpgNxm85KbvsFkV9HIr8uSvi9JPLrROTX1bIb2oMDOkPvAr2r4YZu8u4u6SHp6cANr4jbdCdu00vJbb8m8utB5NdbCb83RH49ifz6WHZDN3BAL+i9ofcx3NBX3h6SfpL+DtzwlriNB3GbAUpu+x2RXz8iv4FK+L0n8utP5Odp2Q19wQEDoA+E7mm4wUve3hIfia8DN3wgbuNN3MZPyW1/JPLzIfLzV8LvE5GfL5FfgGU3eIED/KD7Qw8w3BAo7yBJsCTEgRs+E7cJIm4TquS2vxD5BRP5DVLC7yuRXwiR32DLbggEB4RCHwR9sOGGIfIeKhkmGe7ADd+I2wwlbjNCyW1/J/IbRuQ3Ugm/H0R+w4n8Rll2wxBwwAjoI6GPMtwwWt5jJGMl4xy44SdxmzHEbcYrue1fRH5jifwmKOH3m8hvHJHfRMtuGA0OGA99AvSJhhsmyXuyZIpkqgM3/CFuM5m4zTQlt/2XyG8Kkd90JfzCZOf9rqlEfjMsu2ESOGAa9OnQZxhumCnvWZLZkjkO3BCWuM0s4jZzldx2OCK/2UR+85TwC0/kN4fIb75lN8wEB8yFPg/6fMMNC+S9ULJIstiBGyIQt1lI3GaJktuOSOS3iMhvqRJ+kYj8FhP5LbPshgXggCXQl0JfZrhhubxXSFZKVjlwQ2TiNiuI26xWcttRiPxWEvmtUcIvKpHfKiK/tZbdsBwcsBr6GuhrDTesk/d6yQbJRgduiEbcZj1xm01Kbjs6kd8GIr/NSvjFIPLbSOS3xbIb1oEDNkHfDH2L4Yat8t4m2S7Z4cANMYnbbCNus1PJbcci8ttO5LdLCb/YRH47iPx2W3bDVnDATui7oO823LBH3nsl+yT7HbghDnGbvcRtDii57bhEfvuI/A4q4RePyG8/kd8hy27YAw44AP0g9EOGGw7L+4jkqOSYAzfEJ25zhLjNcSW3nYDI7yiR3wkl/BIS+R0j8jtp2Q2HwQHHoZ+AftJwwyl5n5ackZx14IZExG1OE7c5p+S2ExP5nSHyO6+EXxIiv7NEfhcsu+EUOOAc9PPQLxhuuCjvS5LLkisO3JCUuM0l4jZXldx2MiK/y0R+15TwS07kd4XI77plN1wEB1yFfg36dcMNN+R9U3JLctuBG1IQt7lJ3OaOkttOSeR3i8jvrhJ+qYj8bhP53bPshhvggDvQ70K/Z7jhvrwfSB5KHjlwQ2riNg+I2zxWcttpiPweEvk9UcIvLZHfIyK/p5bdcB8c8Bj6E+hPDTc8k/dzyQvJSwduSEfc5jlxm1dKbjs9kd8LIr/XSvhlIPJ7SeT3xrIbnoEDXkF/Df2N4Ya38n4neS/54MANGYnbvCNu81HJbWci8ntP5PdJCb/MRH4fiPw+W3bDW3DAR+ifoH823PBF3l8l3yTfHbghC3Gbr8Rtfii57axEft+I/H4q4ZeNyO87kd8vy274Ag74Af0n9F+GG37/e0v+SsKE2HdDduI2f4jbhA3Rcds5iPz+EvmFU8IvJ5FfmBAev/Ahdt3wGxzw79b/18NBDx/yXzdEkHdESSRJZAduyEXcJiJxmyhKbjs3kV8kIr+oSvjlIfKLTOQXzbIbIoADokCPCj2a4Ybo8o4hiSmJ5cANeYnbxCBuE1vJbecj8otJ5BdHCb/8RH6xiPziWnZDdHBAbOhxoMc13BBP3vElCSQJHbihAHGb+MRtEim57YJEfgmI/BIr4VeIyC8hkV8Sy26IBw5IBD0x9CSGG5LKO5kkuSSFAzcUJm6TjLhNSiW3XYTILzmRXyol/IoS+aUg8ktt2Q1JwQEpoaeCntpwQxp5p5Wkk6R34IZixG3SErfJoOS2ixP5pSPyy6iEXwkiv/REfpksuyENOCAD9IzQMxluyCzvLJKskmwO3FCSuE0W4jbZldx2KSK/rER+OZTwK03kl43IL6dlN2QGB2SHngN6TsMNueSdW5JHkteBG8oQt8lN3CafktsuS+SXh8gvvxJ+5Yj88hL5FbDshlzggHzQ80MvYLihoLwLSQpLijhwQ3niNoWI2xRVctsViPwKE/kVU8KvIpFfESK/4pbdUBAcUBR6MejFDTeUkHdJSSlJaQduqETcpiRxmzJKbrsykV8pIr+ySvhVIfIrTeRXzrIbSoADykAvC72c4Yby8q4gqSip5MANVYnbVCBuU1nJbVcj8qtI5FdFCb/qRH6ViPyqWnZDeXBAZehVoFc13FBN3tUlNSQ1HbihBnGb6sRtaim57ZpEfjWI/Gor4VeLyK8mkV8dy26oBg6oBb029DqGG+rKu56kvqSBAzfUJm5Tj7hNQyW3XYfIrz6RXyMl/OoS+TUg8mts2Q11wQENoTeC3thwQxN5N5U0kzR34IZ6xG2aErdpoeS26xP5NSPya6mEXwMiv+ZEfq0su6EJOKAF9JbQWxluaC3vNpK2knYO3NCQuE0b4jbtldx2IyK/tkR+HZTwa0zk147Ir6NlN7QGB7SH3gF6R8MNneTdWdJF0tWBG5oQt+lM3KabkttuSuTXhcivuxJ+zYj8uhL59bDshk7ggG7Qu0PvYbihp7x7SXpL+jhwQ3PiNr2I2/RVctstiPx6E/l5KOHXksivD5FfP8tu6AkO6AvdA3o/ww395T1AMlDi6cANrYjbDCBu46XktlsT+Q0k8vNWwq8NkZ8nkZ+PZTf0Bwd4QfeG7mO4wVfefhJ/SYADN7QlbuNH3CZQyW23I/LzJ/ILUsKvPZFfAJFfsGU3+IIDAqEHQQ823BAi71DJIMlgB27oQNwmlLjNECW33ZHIbxCR31Al/DoR+Q0m8htm2Q0h4IAh0IdCH2a4Ybi8R0hGSkY5cENn4jYjiNuMVnLbXYj8RhL5jVHCryuR3ygiv7GW3TAcHDAa+hjoYw03jJP3eMkEyUQHbuhG3GY8cZtJSm67O5HfBCK/yUr49SDym0jkN8WyG8aBAyZBnwx9iuGGqfKeJpkumeHADT2J20wjbjNTyW33IvKbTuQ3Swm/3kR+M4j8Zlt2w1RwwEzos6DPNtwwR95zJfMk8x24oQ9xm7nEbRYoue2+RH7ziPwWKuHnQeQ3n8hvkWU3zAEHLIC+EPoiww2L5b1EslSyzIEb+hG3WULcZrmS2+5P5LeUyG+FEn4DiPyWEfmttOyGxeCA5dBXQF9puGGVvFdL1kjWOnDDQOI2q4nbrFNy255EfmuI/NYr4edF5LeWyG+DZTesAgesg74e+gbDDRvlvUmyWbLFgRu8idtsIm6zVclt+xD5bSby26aEny+R3xYiv+2W3bARHLAV+jbo2w037JD3TskuyW4HbvAjbrOTuM0eJbftT+S3i8hvrxJ+AUR+u4n89ll2ww5wwB7oe6HvM9ywX94HJAclhxy4IZC4zQHiNoeV3HYQkd9BIr8jSvgFE/kdIvI7atkN+8EBh6EfgX7UcMMxeR+XnJCcdOCGEOI2x4nbnFJy26FEfieI/E4r4TeIyO8kkd8Zy244Bg44Bf009DOGG87K+5zkvOSCAzcMJm5zjrjNRSW3PYTI7zyR3yUl/IYS+V0g8rts2Q1nwQEXoV+CftlwwxV5X5Vck1x34IZhxG2uEre5oeS2hxP5XSPyu6mE3wgiv+tEfrcsu+EKOOAG9JvQbxluuC3vO5K7knsO3DCSuM0d4jb3ldz2KCK/u0R+D5TwG03kd4/I76FlN9wGB9yH/gD6Q8MNj+T9WPJE8tSBG8YQt3lM3OaZktseS+T3hMjvuRJ+44j8nhL5vbDshkfggGfQn0N/YbjhpbxfSV5L3jhww3jiNq+I27xVctsTiPxeE/m9U8JvIpHfGyK/95bd8BIc8Bb6O+jvDTd8kPdHySfJZwdumETc5iNxmy9Kbnsykd8nIr+vSvhNIfL7TOT3zbIbPoADvkD/Cv2b4Ybv8v4h+Sn55cANU4nb/CBu81vJbU8j8vtJ5PdHCb/pRH6/iPz+WnbDd3DAb+h/oP813BAmNGyYsJJwkvCh9t0wg7jNv+9mbRMhVMdtzyTyC0fkF1EJv1lEfuGJ/CKF2nXDv7/z/zkgAvSI0COF/tcNkeUdRRJVEs2BG2YTt4lC3Ca6ktueQ+QXlcgvhhJ+c4n8ohH5xbTshsjggOjQY0CPabghlrxjS+JI4jpwwzziNrGJ28RTctvzifziEPnFV8JvAZFfXCK/BJbdEAscEA96fOgJDDcklHciSWJJEgduWEjcJhFxm6RKbnsRkV9iIr9kSvgtJvJLQuSX3LIbEoIDkkJPBj254YYU8k4pSSVJ7cANS4jbpCRuk0bJbS8l8ktF5JdWCb9lRH6pifzSWXZDCnBAGuhpoacz3JBe3hkkGSWZHLhhOXGbDMRtMiu57RVEfhmJ/LIo4beSyC8TkV9Wy25IDw7IDD0L9KyGG7LJO7skhySnAzesIm6TnbhNLiW3vZrILweRX24l/NYQ+eUk8stj2Q3ZwAG5oOeGnsdwQ15555PklxRw4Ia1xG3yEbcpqOS21xH55SfyK6SE33oivwJEfoUtuyEvOKAg9ELQCxtuKCLvopJikuIO3LCBuE1R4jYllNz2RiK/YkR+JZXw20TkV5zIr5RlNxQBB5SAXhJ6KcMNpf99k6SspJwDN2wmblOGuE15Jbe9hcivLJFfBSX8thL5lSPyq2jZDaXBAeWhV4Be0XBDJXlXllSRVHXghm3EbSoTt6mm5La3E/lVIfKrroTfDiK/qkR+NSy7oRI4oBr06tBrGG6oKe9aktqSOg7csJO4TS3iNnWV3PYuIr/aRH71lPDbTeRXh8ivvmU31AQH1IVeD3p9ww0N5N1Q0kjS2IEb9hC3aUjcpomS295L5NeIyK+pEn77iPwaE/k1s+yGBuCAJtCbQm9muKG5vFtIWkpaOXDDfuI2LYjbtFZy2weI/FoS+bVRwu8gkV8rIr+2lt3QHBzQGnob6G0NN7STd3tJB0lHB244RNymPXGbTkpu+zCRXwciv85K+B0h8utI5NfFshvagQM6Qe8MvYvhhq7y7ibpLunhwA1Hidt0I27TU8ltHyPy607k10sJv+NEfj2I/HpbdkNXcEBP6L2g9zbc0EfefSUekn4O3HCCuE1f4jb9ldz2SSI/DyK/AUr4nSLy60fkN9CyG/qAA/pDHwB9oOEGT3l7SbwlPg7ccJq4jRdxG18lt32GyM+byM9PCb+zRH4+RH7+lt3gCQ7whe4H3d9wQ4C8AyVBkmAHbjhH3CaQuE2Ikts+T+QXROQXqoTfBSK/YCK/QZbdEAAOCIEeCn2Q4YbB8h4iGSoZ5sANF4nbDCFuM1zJbV8i8htK5DdCCb/LRH7DiPxGWnbDYHDAcOgjoI803DBK3qMlYyRjHbjhCnGb0cRtxim57atEfmOI/MYr4XeNyG8skd8Ey24YBQ4YB3089AmGGybKe5JksmSKAzdcJ24zibjNVCW3fYPIbzKR3zQl/G4S+U0h8ptu2Q0TwQFToU+DPt1wwwx5z5TMksx24IZbxG1mEreZo+S2bxP5zSLym6uE3x0iv9lEfvMsu2EGOGAO9LnQ5xlumC/vBZKFkkUO3HCXuM0C4jaLldz2PSK/hUR+S5Twu0/kt4jIb6llN8wHByyGvgT6UsMNy+S9XLJCstKBGx4Qt1lO3GaVktt+SOS3gshvtRJ+j4j8VhL5rbHshmXggFXQV0NfY7hhrbzXSdZLNjhww2PiNuuI22xUcttPiPzWE/ltUsLvKZHfBiK/zZbdsBYcsBH6JuibDTdskfdWyTbJdgdueEbcZitxmx1Kbvs5kd82Ir+dSvi9IPLbTuS3y7IbtoADdkDfCX2X4Ybd8t4j2SvZ58ANL4nb7CFus1/Jbb8i8ttL5HdACb/XRH77iPwOWnbDbnDAfugHoB803HBI3oclRyRHHbjhDXGbw8Rtjim57bdEfkeI/I4r4feOyO8okd8Jy244BA44Bv049BOGG07K+5TktOSMAze8J25zirjNWSW3/YHI7zSR3zkl/D4S+Z0h8jtv2Q0nwQFnoZ+Dft5wwwV5X5Rcklx24IZPxG0uEre5ouS2PxP5XSLyu6qE3xciv8tEfv9HjTkEa9p0S7RP27Zt27Zt27Zx7LZt27Zt27a77+7BHze/GmdVxB5kRNY7OPHEyt1r0Ncsu+ECOOAK9KvQrxluuC7vG5KbklsO3PCVuM0N4ja3ldz2NyK/m0R+d5Tw+07kd4vI765lN1wHB9yGfgf6XcMN9+R9X/JA8tCBG34Qt7lP3OaRktv+SeT3gMjvsRJ+v4j8HhL5PbHshnvggEfQH0N/YrjhqbyfSZ5LXjhww2/iNs+I27xUctt/iPyeE/m9UsLvL5HfCyK/15bd8BQc8BL6K+ivDTe8kfdbyTvJewduCJOd+H/2xG0+KLltDyK/d0R+H5XwC0vk957I75NlN7wBB3yA/hH6J8MNn+X9RfJV8s2BG8IRt/lC3Oa7ktsOT+T3lcjvhxJ+EYj8vhH5/bTshs/ggO/Qf0D/abjhl7x///tN8teBGyISt/lN3CaMp47bjkTk94fIz0MJv8hEfn+J/MJ62nXDL3DAv1v/X/eAHtbzv24IJ+/wkgiSiJ723RCFuE14T942kZTcdlQivwhEfpGV8ItG5BeRyC+KZTeEAwdEgh4ZehTDDVHlHU0SXRLDgRuiE7eJRtwmppLbjkHkF53IL5YSfjGJ/GIQ+cW27Iao4ICY0GNBj224IY6840riSeI7cEMs4jZxidskUHLbsYn84hH5JVTCLw6RX3wiv0SW3RAHHJAAekLoiQw3JJZ3EklSSTIHbohL3CYJcZvkSm47HpFfUiK/FEr4xSfyS0bkl9KyGxKDA5JDTwE9peGGVPJOLUkjSevADQmI26QmbpNOyW0nJPJLQ+SXXgm/RER+aYn8Mlh2QypwQDro6aFnMNyQUd6ZJJklWRy4ITFxm0zEbbIque0kRH6ZifyyKeGXlMgvC5FfdstuyAgOyAo9G/TshhtyyDunJJcktwM3JCNuk5O4TR4lt52cyC8XkV9eJfxSEPnlJvLLZ9kNOcABeaDnhZ7PcEN+eReQFJQUcuCGlMRtChC3KazktlMR+RUk8iuihF9qIr9CRH5FLbshPzigMPQi0Isabigm7+KSEpKSDtyQhrhNceI2pZTcdloivxJEfqWV8EtH5FeSyK+MZTcUAweUgl4aehnDDWXlXU5SXlLBgRvSE7cpR9ymopLbzkDkV57Ir5ISfhmJ/CoQ+VW27Iay4ICK0CtBr2y4oYq8q0qqSao7cEMm4jZVidvUUHLbmYn8qhH51VTCLwuRX3Uiv1qW3VAFHFADek3otQw31JZ3HUldST0HbshK3KYOcZv6Sm47G5FfXSK/Bkr4ZSfyq0fk19CyG2qDA+pDbwC9oeGGRvJuLGkiaerADTmI2zQmbtNMyW3nJPJrQuTXXAm/XER+TYn8Wlh2QyNwQDPozaG3MNzQUt6tJK0lbRy4ITdxm1bEbdoque08RH6tifzaKeGXl8ivDZFfe8tuaAkOaAu9HfT2hhs6yLujpJOkswM35CNu05G4TRclt52fyK8TkV9XJfwKEPl1JvLrZtkNHcABXaB3hd7NcEN3efeQ9JT0cuCGgsRtehC36a3ktgsR+fUk8uujhF9hIr9eRH59LbuhOzigN/Q+0Psabugn7/6SAZKBDtxQhLhNf+I2g5TcdlEivwFEfoOV8CtG5DeQyG+IZTf0AwcMgj4Y+hDDDUPlPUwyXDLCgRuKE7cZRtxmpJLbLkHkN5zIb5QSfiWJ/EYQ+Y227Iah4ICR0EdBH224YYy8x0rGSTwduKEUcZuxxG28lNx2aSK/cUR+3kr4lSHy8yTy87HshjHgAC/o3tB9DDf4yttP4i8JcOCGssRt/IjbBCq57XJEfv5EfkFK+JUn8gsg8gu27AZfcEAg9CDowYYbQuQdKhkvmeDADRWI24QSt5mo5LYrEvmNJ/KbpIRfJSK/CUR+ky27IQQcMBH6JOiTDTdMkfdUyTTJdAduqEzcZipxmxlKbrsKkd80Ir+ZSvhVJfKbTuQ3y7IbpoADZkCfCX2W4YbZ8p4jmSuZ58AN1YjbzCFuM1/JbVcn8ptL5LdACb8aRH7ziPwWWnbDbHDAfOgLoC803LBI3oslSyRLHbihJnGbxcRtlim57VpEfkuI/JYr4VebyG8pkd8Ky25YBA5YBn059BWGG1bKe5VktWSNAzfUIW6zirjNWiW3XZfIbzWR3zol/OoR+a0h8ltv2Q0rwQFroa+Dvt5wwwZ5b5Rskmx24Ib6xG02ErfZouS2GxD5bSLy26qEX0Miv81Eftssu2EDOGAL9K3Qtxlu2C7vHZKdkl0O3NCIuM0O4ja7ldx2YyK/nUR+e5Twa0Lkt4vIb69lN2wHB+yGvgf6XsMN++S9X3JActCBG5oSt9lP3OaQkttuRuR3gMjvsBJ+zYn8DhL5HbHshn3ggEPQD0M/YrjhqLyPSY5LTjhwQwviNseI25xUctstifyOE/mdUsKvFZHfCSK/05bdcBQccBL6KeinDTeckfdZyTnJeQduaE3c5ixxmwtKbrsNkd85Ir+LSvi1JfI7T+R3ybIbzoADLkC/CP2S4YbL8r4iuSq55sAN7YjbXCFuc13Jbbcn8rtK5HdDCb8ORH7XiPxuWnbDZXDAdeg3oN803HBL3rcldyR3HbihI3Gb28Rt7im57U5EfneI/O4r4deZyO8ukd8Dy264BQ64B/0+9AeGGx7K+5HkseSJAzd0IW7ziLjNUyW33ZXI7zGR3zMl/LoR+T0h8ntu2Q0PwQFPoT+D/txwwwt5v5S8krx24IbuxG1eErd5o+S2exD5vSLye6uEX08iv9dEfu8su+EFOOAN9LfQ3xlueC/vD5KPkk8O3NCLuM0H4jafldx2byK/j0R+X5Tw60Pk94nI76tlN7wHB3yG/gX6V8MN3+T9XfJD8tOBG/oSt/lO3OaXktvuR+T3g8jvtxJ+/Yn8fhL5/bHshm/ggF/Qf0P/Y7jhr7zDeHmE8ZCE9bLvhgHEbf59N2ubcF46bnsgkZ8HkV94JfwGEfmFJfKL4GXXDX/BAf9u/X89PPQIXv91Q0R5R5JElkRx4IbBxG0iEbeJquS2hxD5RSbyi6aE31AivyhEftEtuyEiOCAq9GjQoxtuiCHvmJJYktgO3DCMuE1M4jZxlNz2cCK/WER+cZXwG0HkF5vIL55lN8QAB8SBHhd6PMMN8eWdQJJQksiBG0YSt0lA3CaxktseReSXkMgviRJ+o4n8EhH5JbXshvjggMTQk0BParghmbyTS1JIUjpwwxjiNsmJ26RScttjifxSEPmlVsJvHJFfSiK/NJbdkAwckAp6auhpDDeklXc6SXpJBgdu8CRuk464TUYlt+1F5JeeyC+TEn7eRH4ZiPwyW3ZDWnBARuiZoGc23JBF3lkl2STZHbjBh7hNVuI2OZTcti+RXzYiv5xK+PkR+WUn8stl2Q1ZwAE5oOeEnstwQ25555HkleRz4AZ/4jZ5iNvkV3LbAUR+eYn8CijhF0jkl4/Ir6BlN+QGB+SHXgB6QcMNheRdWFJEUtSBG4KI2xQmblNMyW0HE/kVIfIrroRfCJFfUSK/EpbdUAgcUAx6ceglDDeUlHepf98lKePADaHEbUoRtymr5LbHE/mVJvIrp4TfBCK/MkR+5S27oSQ4oCz0ctDLG26oIO+KkkqSyg7cMJG4TUXiNlWU3PYkIr9KRH5VlfCbTORXmcivmmU3VAAHVIFeFXo1ww3V5V1DUlNSy4EbphC3qUHcpraS255K5FeTyK+OEn7TiPxqEfnVteyG6uCA2tDrQK9ruKGevOtLGkgaOnDDdOI29YnbNFJy2zOI/BoQ+TVWwm8mkV9DIr8mlt1QDxzQCHpj6E0MNzSVdzNJc0kLB26YRdymGXGblkpuezaRX3Miv1ZK+M0h8mtB5NfashuaggNaQm8FvbXhhjbybitpJ2nvwA1zidu0JW7TQcltzyPya0fk11EJv/lEfu2J/DpZdkMbcEAH6B2hdzLc0FneXSRdJd0cuGEBcZsuxG26K7nthUR+XYn8eijht4jIrxuRX0/LbugMDugOvQf0noYbesm7t6SPpK8DNywmbtObuE0/Jbe9hMivD5FffyX8lhL59SXyG2DZDb3AAf2g94c+wHDDQHkPkgyWDHHghmXEbQYRtxmq5LaXE/kNJvIbpoTfCiK/IUR+wy27YSA4YCj0YdCHG24YIe+RklGS0Q7csJK4zUjiNmOU3PYqIr9RRH5jlfBbTeQ3mshvnGU3jAAHjIE+Fvo4ww2e8vaSeEt8HLhhDXEbL+I2vkpuey2RnzeRn58SfuuI/HyI/Pwtu8ETHOAL3Q+6v+GGAHkHSoIkwQ7csJ64TSBxmxAlt72ByC+IyC9UCb+NRH7BRH7jLbshABwQAj0U+njDDRPkPVEySTLZgRs2EbeZSNxmipLb3kzkN4nIb6oSfluI/CYT+U2z7IYJ4IAp0KdCn2a4Ybq8Z0hmSmY5cMNW4jYziNvMVnLb24j8ZhL5zVHCbzuR3ywiv7mW3TAdHDAb+hzocw03zJP3fMkCyUIHbthB3GY+cZtFSm57J5HfAiK/xUr47SLyW0jkt8SyG+aBAxZBXwx9ieGGpfJeJlkuWeHADbuJ2ywjbrNSyW3vIfJbTuS3Sgm/vUR+K4j8Vlt2w1JwwEroq6CvNtywRt5rJesk6x24YR9xm7XEbTYoue39RH7riPw2KuF3gMhvPZHfJstuWAMO2AB9I/RNhhs2y3uLZKtkmwM3HCRus4W4zXYlt32IyG8rkd8OJfwOE/ltI/LbadkNm8EB26HvgL7TcMMuee+W7JHsdeCGI8RtdhO32afkto8S+e0h8tuvhN8xIr+9RH4HLLthFzhgH/T90A8Ybjgo70OSw5IjDtxwnLjNIeI2R5Xc9gkiv8NEfseU8DtJ5HeEyO+4ZTccBAcchX4M+nHDDSfkfVJySnLagRtOEbc5SdzmjJLbPk3kd4rI76wSfmeI/E4T+Z2z7IYT4IAz0M9CP2e44by8L0guSi45cMNZ4jYXiNtcVnLb54j8LhL5XVHC7zyR3yUiv6uW3XAeHHAZ+hXoVw03XJP3dckNyU0HbrhA3OY6cZtbSm77IpHfDSK/20r4XSLyu0nkd8eyG66BA25Bvw39juGGu/K+J7kveeDADZeJ29wjbvNQyW1fIfK7T+T3SAm/q0R+D4j8Hlt2w11wwEPoj6A/NtzwRN5PJc8kzx244Rpxm6fEbV4oue3rRH7PiPxeKuF3g8jvOZHfK8tueAIOeAH9JfRXhhtey/uN5K3knQM33CRu84a4zXslt32LyO8tkd8HJfxuE/m9I/L7aNkNr8EB76F/gP7RcMMneX+WfJF8deCGO8RtPhO3+abktu8S+X0h8vuuhN89Ir+vRH4/LLvhEzjgG/Tv0H8Ybvgp71+S3/9+d+CG+8RtfhG3+avkth8Q+f0m8gvjrYPfQyK/P0R+Ht523fATHPAX+r/d/tc9vP/rhrDyDicJL4ngbd8Nj4jbhPPmbRNRyW0/JvILT+QXSQm/J0R+EYj8Ilt2Q1hwQETokaBHNtwQRd5RJdEk0R244Slxm6jEbWIoue1nRH7RiPxiKuH3nMgvOpFfLMtuiAIOiAE9JvRYhhtiyzuOJK4kngM3vCBuE4e4TXwlt/2SyC8ukV8CJfxeEfnFI/JLaNkNscEB8aEngJ7QcEMieSeWJJEkdeCG18RtEhO3Sabktt8Q+SUh8kuuhN9bIr+kRH4pLLshETggGfTk0FMYbkgp71SS1JI0DtzwjrhNKuI2aZXc9nsiv9REfumU8PtA5JeGyC+9ZTekBAekhZ4OenrDDRnknVGSSZLZgRs+ErfJSNwmi5Lb/kTkl4nIL6sSfp+J/DIT+WWz7IYM4IAs0LNCz2a4Ibu8c0hySnI5cMMX4jY5iNvkVnLbX4n8chL55VHC7xuRXy4iv7yW3ZAdHJAbeh7oeQ035JN3fkkBSUEHbvhO3CY/cZtCSm77B5FfASK/wkr4/STyK0jkV8SyG/KBAwpBLwy9iOGGovIuJikuKeHADb+I2xQjblNSyW3/JvIrTuRXSgm/P0R+JYj8Slt2Q1FwQEnopaCXNtxQRt5lJeUk5R244S9xm7LEbSooue0wOXh/qxyRX0Ul/DyI/MoT+VWy7IYy4IAK0CtCr2S4obK8q0iqSqo5cENY4jZViNtUV3Lb4Yj8qhL51VDCLzyRXzUiv5qW3VAZHFAdeg3oNQ031JJ3bUkdSV0HbohA3KY2cZt6Sm47IpFfHSK/+kr4RSLyq0vk18CyG2qBA+pBrw+9geGGhvJuJGksaeLADZGJ2zQibtNUyW1HIfJrTOTXTAm/qER+TYj8mlt2Q0NwQFPozaA3N9zQQt4tJa0krR24IRpxm5bEbdooue3oRH6tiPzaKuEXg8ivNZFfO8tuaAEOaAO9LfR2hhvay7uDpKOkkwM3xCRu04G4TWcltx2LyK8jkV8XJfxiE/l1IvLratkN7cEBnaF3gd7VcEM3eXeX9JD0dOCGOMRtuhO36aXktuMS+fUg8uuthF88Ir+eRH59LLuhGzigF/Te0PsYbugr736S/pIBDtwQn7hNP+I2A5XcdgIiv/5EfoOU8EtI5DeAyG+wZTf0BQcMhD4I+mDDDUPkPVQyTDLcgRsSEbcZStxmhJLbTkzkN4zIb6QSfkmI/IYT+Y2y7IYh4IAR0EdCH2W4YbS8x0jGSsY5cENS4jZjiNt4KrntZER+Y4n8vJTwS07kN47Iz9uyG0aDAzyhe0H3NtzgI29fiZ/E34EbUhC38SVuE6DktlMS+fkR+QUq4ZeKyM+fyC/Isht8wAEB0AOhBxluCJZ3iCRUMt6BG1ITtwkhbjNByW2nIfILJfKbqIRfWiK/8UR+kyy7IRgcMAH6ROiTDDdMlvcUyVTJNAduSEfcZgpxm+lKbjs9kd9UIr8ZSvhlIPKbRuQ307IbJoMDpkOfAX2m4YZZ8p4tmSOZ68ANGYnbzCZuM0/JbWci8ptD5DdfCb/MRH5zifwWWHbDLHDAPOjzoS8w3LBQ3oskiyVLHLghC3GbRcRtliq57axEfouJ/JYp4ZeNyG8Jkd9yy25YCA5YCn0Z9OWGG1bIe6VklWS1AzdkJ26zkrjNGiW3nYPIbxWR31ol/HIS+a0m8ltn2Q0rwAFroK+Fvs5ww3p5b5BslGxy4IZcxG02ELfZrOS2cxP5bSTy26KEXx4iv01Eflstu2E9OGAz9C3Qtxpu2Cbv7ZIdkp0O3JCXuM124ja7lNx2PiK/HUR+u5Xwy0/kt5PIb49lN2wDB+yCvhv6HsMNe+W9T7JfcsCBGwoQt9lH3OagktsuSOS3n8jvkBJ+hYj8DhD5Hbbshr3ggIPQD0E/bLjhiLyPSo5JjjtwQ2HiNkeJ25xQcttFiPyOEfmdVMKvKJHfcSK/U5bdcAQccAL6SeinDDeclvcZyVnJOQduKEbc5gxxm/NKbrs4kd9ZIr8LSviVIPI7R+R30bIbToMDzkO/AP2i4YZL8r4suSK56sANJYnbXCZuc03JbZci8rtC5HddCb/SRH5XifxuWHbDJXDANejXod8w3HBT3rcktyV3HLihDHGbW8Rt7iq57bJEfreJ/O4p4VeOyO8Okd99y264CQ64C/0e9PuGGx7I+6HkkeSxAzeUJ27zkLjNEyW3XYHI7xGR31Ml/CoS+T0m8ntm2Q0PwAFPoD+F/sxww3N5v5C8lLxy4IZKxG1eELd5reS2KxP5vSTye6OEXxUiv1dEfm8tu+E5OOA19DfQ3xpueCfv95IPko8O3FCVuM174jaflNx2NSK/D0R+n5Xwq07k95HI74tlN7wDB3yC/hn6F8MNX+X9TfJd8sOBG2oQt/lG3OanktuuSeT3ncjvlxJ+tYj8fhD5/bbshq/ggJ/Qf0H/bbjhj7z/SsL4eITx8LHvhtrEbf4Stwnro+O26xD5hfHh8QunhF9dIj8PIr/wPnbd8Acc8O/W/9fDQQ/v8183RJB3REkkSWQHbqhH3CYicZsoSm67PpFfJCK/qEr4NSDyi0zkF82yGyKAA6JAjwo9muGG6PKOIYkpieXADQ2J28QgbhNbyW03IvKLSeQXRwm/xkR+sYj84lp2Q3RwQGzocaDHNdwQT97xJQkkCR24oQlxm/jEbRIpue2mRH4JiPwSK+HXjMgvIZFfEstuiAcOSAQ9MfQkhhuSyjuZJLkkhQM3NCduk4y4TUolt92CyC85kV8qJfxaEvmlIPJLbdkNScEBKaGngp7acEMaeaeVpJOkd+CGVsRt0hK3yaDktlsT+aUj8suohF8bIr/0RH6ZLLshDTggA/SM0DMZbsgs7yySrJJsDtzQlrhNFuI22ZXcdjsiv6xEfjmU8GtP5JeNyC+nZTdkBgdkh54Dek7DDbnknVuSR5LXgRs6ELfJTdwmn5Lb7kjkl4fIL78Sfp2I/PIS+RWw7IZc4IB80PNDL2C4oaC8C0kKS4o4cENn4jaFiNsUVXLbXYj8ChP5FVPCryuRXxEiv+KW3VAQHFAUejHoxQ03lJB3SUmpf9/mwA3diNuUJG5TRsltdyfyK0XkV1YJvx5EfqWJ/MpZdkMJcEAZ6GWhlzPcUF7eFSQVJZUcuKEncZsKxG0qK7ntXkR+FYn8qijh15vIrxKRX1XLbigPDqgMvQr0qoYbqsm7uqSGpKYDN/QhblOduE0tJbfdl8ivBpFfbSX8+hH51STyq2PZDdXAAbWg14Zex3BDXXnXk9SXNHDghv7EbeoRt2mo5LYHEPnVJ/JrpITfQCK/BkR+jS27oS44oCH0RtAbG25oIu+mkmaS5g7cMIi4TVPiNi2U3PZgIr9mRH4tlfAbQuTXnMivlWU3NAEHtIDeEnorww2t5d1G0lbSzoEbhhK3aUPcpr2S2x5G5NeWyK+DEn7DifzaEfl1tOyG1uCA9tA7QO9ouKGTvDtLuki6OnDDCOI2nYnbdFNy2yOJ/LoQ+XVXwm8UkV9XIr8elt3QCRzQDXp36D0MN/SUdy9Jb0kfB24YTdymF3GbvkpuewyRX28iv35K+I0l8utD5Nffsht6ggP6Qu8Hvb/hhgHyHigZJBnswA3jiNsMJG4zRMltexL5DSLyG6qEnxeR32Aiv2GW3TAAHDAE+lDowww3DJf3CMlIySgHbvAmbjOCuM1oJbftQ+Q3kshvjBJ+vkR+o4j8xlp2w3BwwGjoY6CPNdwwTt6eEi+JtwM3+BG38SRu46Pktv2J/LyI/HyV8Asg8vMm8vOz7IZx4AAf6L7Q/Qw3+Ms7QBIoCXLghkDiNgHEbYKV3HYQkV8gkV+IEn7BRH5BRH6hlt3gDw4Ihh4CPdRww3h5T5BMlExy4IYQ4jYTiNtMVnLboUR+E4n8pijhN57IbxKR31TLbhgPDpgMfQr0qYYbpsl7umSGZKYDN0wgbjOduM0sJbc9kchvBpHfbCX8JhH5zSTym2PZDdPAAbOgz4Y+x3DDXHnPk8yXLHDghsnEbeYRt1mo5LanEPnNJ/JbpITfVCK/BUR+iy27YS44YCH0RdAXG25YIu+lkmWS5Q7cMI24zVLiNiuU3PZ0Ir9lRH4rlfCbQeS3nMhvlWU3LAEHrIC+Evoqww2r5b1GslayzoEbZhK3WUPcZr2S255F5LeWyG+DEn6zifzWEflttOyG1eCA9dA3QN9ouGGTvDdLtki2OnDDHOI2m4nbbFNy23OJ/LYQ+W1Xwm8ekd9WIr8dlt2wCRywDfp26DsMN+yU9y7JbskeB26YT9xmF3GbvUpuewGR324iv31K+C0k8ttD5Lffsht2ggP2Qt8Hfb/hhgPyPig5JDnswA2LiNscJG5zRMltLybyO0Tkd1QJvyVEfoeJ/I5ZdsMBcMAR6EehHzPccFzeJyQnJaccuGEpcZsTxG1OK7ntZUR+J4n8zijht5zI7xSR31nLbjgODjgN/Qz0s4Ybzsn7vOSC5KIDN6wgbnOeuM0lJbe9ksjvApHfZSX8VhH5XSTyu2LZDefAAZegX4Z+xXDDVXlfk1yX3HDghtXEba4Rt7mp5LbXEPldJ/K7pYTfWiK/G0R+ty274So44Cb0W9BvG264I++7knuS+w7csI64zV3iNg+U3PZ6Ir97RH4PlfDbQOR3n8jvkWU33AEHPID+EPojww2P5f1E8lTyzIEbNhK3eULc5rmS295E5PeUyO+FEn6bifyeEfm9tOyGx+CA59BfQH9puOGVvF9L3kjeOnDDFuI2r4nbvFNy21uJ/N4Q+b1Xwm8bkd9bIr8Plt3wChzwDvp76B8MN3yU9yfJZ8kXB27YTtzmE3Gbr0pueweR32civ29K+O0k8vtC5Pfdshs+ggO+Qv8G/bvhhh/y/in5JfntwA27iNv8JG7zR8lt7yby+0Xk91cJvz1Efr+J/ML42nXDD3DAH+h/of/7BnSDh7zDSsJJwvvad8Ne4jZhfXnbRPDVcdv7iPzCEflFVMJvP5FfeCK/SJbd4OH7/w6IAD0i9EiGGyLLO4okqiSaAzccIG4ThbhNdCW3fZDILyqRXwwl/A4R+UUj8otp2Q2RwQHRoceAHtNwQyx5x5bEkcR14IbDxG1iE7eJp+S2jxD5xSHyi6+E31Eiv7hEfgksuyEWOCAe9PjQExhuSCjvRJLEkiQO3HCMuE0i4jZJldz2cSK/xER+yZTwO0Hkl4TIL7llNyQEBySFngx6csMNKeSdUpJKktqBG04St0lJ3CaNkts+ReSXisgvrRJ+p4n8UhP5pbPshhTggDTQ00JPZ7ghvbwzSDJKMjlwwxniNhmI22RWcttnifwyEvllUcLvHJFfJiK/rJbdkB4ckBl6FuhZDTdkk3d2SQ5JTgduOE/cJjtxm1xKbvsCkV8OIr/cSvhdJPLLSeSXx7IbsoEDckHPDT2P4Ya88s4nyS8p4MANl4jb5CNuU1DJbV8m8stP5FdICb8rRH4FiPwKW3ZDXnBAQeiFoBc23FBE3kUlxSTFHbjhKnGbosRtSii57WtEfsWI/Eoq4XedyK84kV8py24oAg4oAb0k9FKGG0rLu4ykrKScAzfcIG5ThrhNeSW3fZPIryyRXwUl/G4R+ZUj8qto2Q2lwQHloVeAXtFwQyV5V5ZUkVR14IbbxG0qE7eppuS27xD5VSHyq66E310iv6pEfjUsu6ESOKAa9OrQaxhuqCnvWpLakjoO3HCPuE0t4jZ1ldz2fSK/2kR+9ZTwe0DkV4fIr75lN9QEB9SFXg96fcMNDeTdUNJI0tiBGx4St2lI3KaJktt+ROTXiMivqRJ+j4n8GhP5NbPshgbggCbQm0JvZrihubxbSFpKWjlwwxPiNi2I27RWcttPifxaEvm1UcLvGZFfKyK/tpbd0Bwc0Bp6G+htDTe0k3d7SQdJRwdueE7cpj1xm05KbvsFkV8HIr/OSvi9JPLrSOTXxbIb2oEDOkHvDL2L4Yau8u4m6S7p4cANr4jbdCNu01PJbb8m8utO5NdLCb83RH49iPx6W3ZDV3BAT+i9oPc23NBH3n0l/ST9HbjhLXGbvsRtBii57XdEfv2I/AYq4feeyK8/kd8gy27oAw4YAH0g9EGGGwbLe4hkqGSYAzd8IG4zhLjNcCW3/ZHIbyiR3wgl/D4R+Q0j8htp2Q2DwQHDoY+APtJwwyh5j5aMkYx14IbPxG1GE7cZp+S2vxD5jSHy81TC7yuR31giPy/LbhgFDhgH3RO6l+EGb3n7SHwlfg7c8I24jQ9xG38lt/2dyM+XyC9ACb8fRH5+RH6Blt3gDQ7whx4APdBwQ5C8gyUhklAHbvhJ3CaYuM14Jbf9i8gvhMhvghJ+v4n8Qon8Jlp2QxA4YDz0CdAnGm6YJO/JkimSqQ7c8Ie4zWTiNtOU3PZfIr8pRH7TlfALk5P3t6YS+c2w7IZJ4IBp0KdDn2G4Yaa8Z0lmS+Y4cIMHcZtZxG3mKrntsER+s4n85inhF47Ibw6R33zLbpgJDpgLfR70+YYbFsh7oWSRZLEDN4QnbrOQuM0SJbcdgchvEZHfUiX8IhL5LSbyW2bZDQvAAUugL4W+zHDDcnmvkKyUrHLghkjEbVYQt1mt5LYjE/mtJPJbo4RfFCK/VUR+ay27YTk4YDX0NdDXGm5YJ+/1kg2SjQ7cEJW4zXriNpuU3HY0Ir8NRH6blfCLTuS3kchvi2U3rAMHbIK+GfoWww1b5b1Nsl2yw4EbYhC32UbcZqeS245J5LedyG+XEn6xiPx2EPnttuyGreCAndB3Qd9tuGGPvPdK9kn2O3BDbOI2e4nbHFBy23GI/PYR+R1Uwi8ukd9+Ir9Dlt2wBxxwAPpB6IcMNxyW9xHJUckxB26IR9zmCHGb40puOz6R31EivxNK+CUg8jtG5HfSshsOgwOOQz8B/aThhlPyPi05IznrwA0JiducJm5zTsltJyLyO0Pkd14Jv8REfmeJ/C5YdsMpcMA56OehXzDccFHelySXJVccuCEJcZtLxG2uKrntpER+l4n8rinhl4zI7wqR33XLbrgIDrgK/Rr064Ybbsj7puSW5LYDNyQnbnOTuM0dJbedgsjvFpHfXSX8UhL53Sbyu2fZDTfAAXeg34V+z3DDfXk/kDyUPHLghlTEbR4Qt3ms5LZTE/k9JPJ7ooRfGiK/R0R+Ty274T444DH0J9CfGm54Ju/nkheSlw7ckJa4zXPiNq+U3HY6Ir8XRH6vlfBLT+T3ksjvjWU3PAMHvIL+Gvobww1v5f1O8l7ywYEbMhC3eUfc5qOS285I5PeeyO+TEn6ZiPw+EPl9tuyGt+CAj9A/Qf9suOGLvL9Kvkm+O3BDZuI2X4nb/FBy21mI/L4R+f1Uwi8rkd93Ir9flt3wBRzwA/pP6L8MN/z+95b8lYTxs++GbMRt/hC38fDTcdvZifz+EvmFVcIvB5FfGD8ev3B+dt3wGxzw79b/18NCD+f3XzeEl3cESURJJAduyEncJgJxm8hKbjsXkV9EIr8oSvjlJvKLROQX1bIbwoMDIkOPAj2q4YZo8o4uiSGJ6cANeYjbRCduE0vJbecl8otB5BdbCb98RH4xifziWHZDNHBALOixoccx3BBX3vEk8SUJHLghP3GbeMRtEiq57QJEfvGJ/BIp4VeQyC8BkV9iy26ICw5ICD0R9MSGG5LIO6kkmSS5AzcUIm6TlLhNCiW3XZjILxmRX0ol/IoQ+SUn8ktl2Q1JwAEpoKeEnspwQ2p5p5GklaRz4IaixG3SELdJr+S2ixH5pSXyy6CEX3Eiv3REfhktuyE1OCA99AzQMxpuyCTvzJIskqwO3FCCuE1m4jbZlNx2SSK/LER+2ZXwK0Xkl5XIL4dlN2QCB2SDnh16DsMNOeWdS5JbkseBG0oTt8lF3CavktsuQ+SXm8gvnxJ+ZYn88hD55bfshpzggLzQ80HPb7ihgLwLSgpJCjtwQzniNgWJ2xRRctvlifwKEfkVVcKvApFfYSK/YpbdUAAcUAR6UejFDDcUl3cJSUlJKQduqEjcpgRxm9JKbrsSkV9JIr8ySvhVJvIrReRX1rIbioMDSkMvA72s4YZy8i4vqSCp6MANVYjblCduU0nJbVcl8qtA5FdZCb9qRH4VifyqWHZDOXBAJeiVoVcx3FBV3tUk1SU1HLihOnGbasRtaiq57RpEftWJ/Gop4VeTyK8GkV9ty26oCg6oCb0W9NqGG+rIu66knqS+AzfUIm5Tl7hNAyW3XZvIrx6RX0Ml/OoQ+dUn8mtk2Q11wAENoDeE3shwQ2N5N5E0lTRz4Ia6xG2aELdpruS26xH5NSXya6GEX30iv2ZEfi0tu6ExOKA59BbQWxpuaCXv1pI2krYO3NCAuE1r4jbtlNx2QyK/NkR+7ZXwa0Tk15bIr4NlN7QCB7SD3h56B8MNHeXdSdJZ0sWBGxoTt+lE3KarkttuQuTXmcivmxJ+TYn8uhD5dbfsho7ggK7Qu0Hvbrihh7x7SnpJejtwQzPiNj2J2/RRctvNifx6Efn1VcKvBZFfbyK/fpbd0AMc0Ad6X+j9DDf0l/cAyUDJIAduaEncZgBxm8FKbrsVkd9AIr8hSvi1JvIbROQ31LIb+oMDBkMfAn2o4YZh8h4uGSEZ6cANbYjbDCduM0rJbbcl8htB5DdaCb92RH4jifzGWHbDMHDAKOijoY8x3DBW3uMknhIvB25oT9xmHHEbbyW33YHIz5PIz0cJv45Efl5Efr6W3TAWHOAN3Qe6r+EGP3n7SwIkgQ7c0Im4jT9xmyAlt92ZyC+AyC9YCb8uRH6BRH4hlt3gBw4Igh4MPcRwQ6i8x0smSCY6cENX4jbjidtMUnLb3Yj8JhD5TVbCrzuR30QivymW3RAKDpgEfTL0KYYbpsp7mmS6ZIYDN/QgbjONuM1MJbfdk8hvOpHfLCX8ehH5zSDym23ZDVPBATOhz4I+23DDHHnPlcyTzHfght7EbeYSt1mg5Lb7EPnNI/JbqIRfXyK/+UR+iyy7YQ44YAH0hdAXGW5YLO8lkqWSZQ7c0I+4zRLiNsuV3HZ/Ir+lRH4rlPAbQOS3jMhvpWU3LAYHLIe+AvpKww2r5L1askay1oEbBhK3WU3cZp2S2x5E5LeGyG+9En6DifzWEvltsOyGVeCAddDXQ99guGGjvDdJNku2OHDDEOI2m4jbbFVy20OJ/DYT+W1Twm8Ykd8WIr/tlt2wERywFfo26NsNN+yQ907JLsluB24YTtxmJ3GbPUpuewSR3y4iv71K+I0k8ttN5LfPsht2gAP2QN8LfZ/hhv3yPiA5KDnkwA2jiNscIG5zWMltjybyO0jkd0QJvzFEfoeI/I5adsN+cMBh6EegHzXccEzexyUnJCcduGEscZvjxG1OKbntcUR+J4j8Tivh50nkd5LI74xlNxwDB5yCfhr6GcMNZ+V9TnJecsGBG7yI25wjbnNRyW17E/mdJ/K7pISfD5HfBSK/y5bdcBYccBH6JeiXDTdckfdVyTXJdQdu8CVuc5W4zQ0lt+1H5HeNyO+mEn7+RH7XifxuWXbDFXDADeg3od8y3HBb3nckdyX3HLghgLjNHeI295XcdiCR310ivwdK+AUR+d0j8nto2Q23wQH3oT+A/tBwwyN5P5Y8kTx14IZg4jaPids8U3LbIUR+T4j8nivhF0rk95TI74VlNzwCBzyD/hz6C8MNL+X9SvJa8saBG8YTt3lF3OatktueQOT3msjvnRJ+E4n83hD5vbfshpfggLfQ30F/b7jhg7w/Sj5JPjtwwyTiNh+J23xRctuTifw+Efl9VcJvCpHfZyK/b5bd8AEc8AX6V+jfDDd8l/cPyU/JLwdumErc5gdxm99Kbnsakd9PIr8/SvhNJ/L7ReT317IbvoMDfkP/A/2v4YYw/h5hPCRhJeH87bthBnGbf9/N2ia8v47bnknkF5bIL4ISfrOI/MIR+UX0t+uGf//O/+eA8NAjQI/o/183RJJ3ZEkUSVQHbphN3CYycZtoSm57DpFfFCK/6Er4zSXyi0rkF8OyGyKBA6JBjw49huGGmPKOJYktiePADfOI28QibhNXyW3PJ/KLTeQXTwm/BUR+cYj84lt2Q0xwQFzo8aDHN9yQQN4JJYkkiR24YSFxm4TEbZIoue1FRH6JiPySKuG3mMgvMZFfMstuSAAOSAI9KfRkhhuSyzuFJKUklQM3LCFuk4K4TWolt72UyC8lkV8aJfyWEfmlIvJLa9kNycEBqaGngZ7WcEM6eaeXZJBkdOCG5cRt0hO3yaTktlcQ+WUg8sushN9KIr+MRH5ZLLshHTggE/TM0LMYbsgq72yS7JIcDtywirhNNuI2OZXc9moiv+xEfrmU8FtD5JeDyC+3ZTdkBQfkhJ4Lem7DDXnknVeST5LfgRvWErfJS9ymgJLbXkfkl4/Ir6ASfuuJ/PIT+RWy7IY84IAC0AtCL2S4obC8i0iKSoo5cMMG4jZFiNsUV3LbG4n8ihL5lVDCbxORXzEiv5KW3VAYHFAcegnoJQ03lPr3TZIykrIO3LCZuE1p4jbllNz2FiK/MkR+5ZXw20rkV5bIr4JlN5QCB5SDXh56BcMNFeVdSVJZUsWBG7YRt6lE3KaqktveTuRXmcivmhJ+O4j8qhD5VbfshorggKrQq0GvbrihhrxrSmpJajtww07iNjWJ29RRctu7iPxqEfnVVcJvN5FfbSK/epbdUAMcUAd6Xej1DDfUl3cDSUNJIwdu2EPcpgFxm8ZKbnsvkV9DIr8mSvjtI/JrROTX1LIb6oMDGkNvAr2p4YZm8m4uaSFp6cAN+4nbNCdu00rJbR8g8mtB5NdaCb+DRH4tifzaWHZDM3BAK+itobcx3NBW3u0k7SUdHLjhEHGbdsRtOiq57cNEfu2J/Dop4XeEyK8DkV9ny25oCw7oCL0T9M6GG7rIu6ukm6S7AzccJW7TlbhNDyW3fYzIrxuRX08l/I4T+XUn8utl2Q1dwAE9oPeE3stwQ29595H0lfRz4IYTxG36ELfpr+S2TxL59SXyG6CE3ykiv35EfgMtu6E3OKA/9AHQBxpuGCTvwZIhkqEO3HCauM1g4jbDlNz2GSK/IUR+w5XwO0vkN5TIb4RlNwwCBwyDPhz6CMMNI+U9SjJaMsaBG84RtxlF3Gaskts+T+Q3mshvnBJ+F4j8xhD5eVp2w0hwwFjo46B7Gm7wkre3xEfi68ANF4nbeBO38VNy25eI/HyI/PyV8LtM5OdL5Bdg2Q1e4AA/6P7QAww3BMo7SBIsCXHghivEbYKI24Qque2rRH7BRH7jlfC7RuQXQuQ3wbIbAsEBodDHQ59guGGivCdJJkumOHDDdeI2k4jbTFVy2zeI/CYT+U1Twu8mkd8UIr/plt0wERwwFfo06NMNN8yQ90zJLMlsB264RdxmJnGbOUpu+zaR3ywiv7lK+N0h8ptN5DfPshtmgAPmQJ8LfZ7hhvnyXiBZKFnkwA13idssIG6zWMlt3yPyW0jkt0QJv/tEfouI/JZadsN8cMBi6EugLzXcsEzeyyUrJCsduOEBcZvlxG1WKbnth0R+K4j8Vivh94jIbyWR3xrLblgGDlgFfTX0NYYb1sp7nWS9ZIMDNzwmbrOOuM1GJbf9hMhvPZHfJiX8nhL5bSDy22zZDWvBARuhb4K+2XDDFnlvlWyTbHfghmfEbbYSt9mh5LafE/ltI/LbqYTfCyK/7UR+uyy7YQs4YAf0ndB3GW7YLe89kr2SfQ7c8JK4zR7iNvuV3PYrIr+9RH4HlPB7TeS3j8jvoGU37AYH7Id+APpBww2H5H1YckRy1IEb3hC3OUzc5piS235L5HeEyO+4En7viPyOEvmdsOyGQ+CAY9CPQz9huOGkvE9JTkvOOHDDe+I2p4jbnFVy2x+I/E4T+Z1Twu8jkd8ZIr/zlt1wEhxwFvo56OcNN1yQ90XJJcllB274RNzmInGbK0pu+zOR3yUiv6tK+H0h8rtM5HfNshsugAOuQL8K/ZrhhuvyviG5KbnlwA1fidvcIG5zW8ltfyPyu0nkd0cJv+9EfreI/O5adsN1cMBt6Heg3zXccE/e9yUPJA8duOEHcZv7xG0eKbntn0R+D4j8Hivh94vI7yGR3xPLbrgHDngE/TH0J4Ybnsr7meS55IUDN/wmbvOMuM1LJbf9h8jvOZHfKyX8/hL5vSDye23ZDU/BAS+hv4L+2nDDG3m/lbyTvHfghjC5iP9nT9zmg5Lb9iDye0fk91EJv7BEfu+J/D5ZdsMbcMAH6B+hfzLc8FneXyRfJd8cuCEccZsvxG2+K7nt8ER+X4n8fijhF4HI7xuR30/LbvgMDvgO/Qf0n4Ybfsn797/fJH8duCEicZvfxG3CBOi47UhEfn+I/DyU8ItM5PeXyC9sgF03/AIH/Lv1/3UP6GED/uuGcPIOL4kgiRhg3w1RiNuED+BtE0nJbUcl8otA5BdZCb9oRH4RifyiWHZDOHBAJOiRoUcx3BBV3tEk0SUxHLghOnGbaMRtYiq57RhEftGJ/GIp4ReTyC8GkV9sy26ICg6ICT0W9NiGG+LIO64kniS+AzfEIm4Tl7hNAiW3HZvILx6RX0Il/OIQ+cUn8ktk2Q1xwAEJoCeEnshwQ2J5J5EklSRz4Ia4xG2SELdJruS24xH5JSXyS6GEX3wiv2REfiktuyExOCA59BTQUxpuSCXv1JI0krQO3JCAuE1q4jbplNx2QiK/NER+6ZXwS0Tkl5bIL4NlN6QCB6SDnh56BsMNGeWdSZJZksWBGxITt8lE3CarkttOQuSXmcgvmxJ+SYn8shD5ZbfshozggKzQs0HPbrghh7xzSnJJcjtwQzLiNjmJ2+RRctvJifxyEfnlVcIvBZFfbiK/fJbdkAMckAd6Xuj5DDfkl3cBSUFJIQduSEncpgBxm8JKbjsVkV9BIr8iSvilJvIrRORX1LIb8oMDCkMvAr2o4YZi8i4uKSEp6cANaYjbFCduU0rJbacl8itB5FdaCb90RH4lifzKWHZDMXBAKeiloZcx3FBW3uUk5SUVHLghPXGbcsRtKiq57QxEfuWJ/Cop4ZeRyK8CkV9ly24oCw6oCL0S9MqGG6rIu6qkmqS6AzdkIm5TlbhNDSW3nZnIrxqRX00l/LIQ+VUn8qtl2Q1VwAE1oNeEXstwQ21515HUldRz4IasxG3qELepr+S2sxH51SXya6CEX3Yiv3pEfg0tu6E2OKA+9AbQGxpuaCTvxpImkqYO3JCDuE1j4jbNlNx2TiK/JkR+zZXwy0Xk15TIr4VlNzQCBzSD3hx6C8MNLeXdStJa0saBG3ITt2lF3KatktvOQ+TXmsivnRJ+eYn82hD5tbfshpbggLbQ20Fvb7ihg7w7SjpJOjtwQz7iNh2J23RRctv5ifw6Efl1VcKvAJFfZyK/bpbd0AEc0AV6V+jdDDd0l3cPSU9JLwduKEjcpgdxm95KbrsQkV9PIr8+SvgVJvLrReTX17IbuoMDekPvA72v4YZ+8u4vGSAZ6MANRYjb9CduM0jJbRcl8htA5DdYCb9iRH4DifyGWHZDP3DAIOiDoQ8x3DBU3sMkwyUjHLihOHGbYcRtRiq57RJEfsOJ/EYp4VeSyG8Ekd9oy24YCg4YCX0U9NGGG8bIe6xknMTTgRtKEbcZS9zGS8ltlybyG0fk562EXxkiP08iPx/LbhgDDvCC7g3dx3CDr7z9JP6SAAduKEvcxo+4TaCS2y5H5OdP5BekhF95Ir8AIr9gy27wBQcEQg+CHmy4IUTeoZLxkgkO3FCBuE0ocZuJSm67IpHfeCK/SUr4VSLym0DkN9myG0LAAROhT4I+2XDDFHlPlUyTTHfghsrEbaYSt5mh5LarEPlNI/KbqYRfVSK/6UR+syy7YQo4YAb0mdBnGW6YLe85krmSeQ7cUI24zRziNvOV3HZ1Ir+5RH4LlPCrQeQ3j8hvoWU3zAYHzIe+APpCww2L5L1YskSy1IEbahK3WUzcZpmS265F5LeEyG+5En61ifyWEvmtsOyGReCAZdCXQ19huGGlvFdJVkvWOHBDHeI2q4jbrFVy23WJ/FYT+a1Twq8ekd8aIr/1lt2wEhywFvo66OsNN2yQ90bJJslmB26oT9xmI3GbLUpuuwGR3yYiv61K+DUk8ttM5LfNshs2gAO2QN8KfZvhhu3y3iHZKdnlwA2NiNvsIG6zW8ltNyby20nkt0cJvyZEfruI/PZadsN2cMBu6Hug7zXcsE/e+yUHJAcduKEpcZv9xG0OKbntZkR+B4j8Divh15zI7yCR3xHLbtgHDjgE/TD0I4Ybjsr7mOS45IQDN7QgbnOMuM1JJbfdksjvOJHfKSX8WhH5nSDyO23ZDUfBASehn4J+2nDDGXmflZyTnHfghtbEbc4St7mg5LbbEPmdI/K7qIRfWyK/80R+lyy74Qw44AL0i9AvGW64LO8rkquSaw7c0I64zRXiNteV3HZ7Ir+rRH43lPDrQOR3jcjvpmU3XAYHXId+A/pNww235H1bckdy14EbOhK3uU3c5p6S2+5E5HeHyO++En6difzuEvk9sOyGW+CAe9DvQ39guOGhvB9JHkueOHBDF+I2j4jbPFVy212J/B4T+T1Twq8bkd8TIr/nlt3wEBzwFPoz6M8NN7yQ90vJK8lrB27oTtzmJXGbN0puuweR3ysiv7dK+PUk8ntN5PfOshtegAPeQH8L/Z3hhvfy/iD5KPnkwA29iNt8IG7zWclt9yby+0jk90UJvz5Efp+I/L5adsN7cMBn6F+gfzXc8E3e3yU/JD8duKEvcZvvxG1+KbntfkR+P4j8fivh15/I7yeR3x/LbvgGDvgF/Tf0P4Yb/so7TKBHGA9J2ED7bhhA3Obfd7O2CReo47YHEvl5EPmFV8JvEJFfWCK/CIF23fAXHPDv1v/Xw0OPEPhfN0SUdyRJZEkUB24YTNwmEnGbqEpuewiRX2Qiv2hK+A0l8otC5BfdshsiggOiQo8GPbrhhhjyjimJJYntwA3DiNvEJG4TR8ltDyfyi0XkF1cJvxFEfrGJ/OJZdkMMcEAc6HGhxzPcEF/eCSQJJYkcuGEkcZsExG0SK7ntUUR+CYn8kijhN5rILxGRX1LLbogPDkgMPQn0pIYbksk7uSSFJKUDN4whbpOcuE0qJbc9lsgvBZFfaiX8xhH5pSTyS2PZDcnAAamgp4aexnBDWnmnk6SXZHDgBk/iNumI22RUctteRH7pifwyKeHnTeSXgcgvs2U3pAUHZISeCXpmww1Z5J1Vkk2S3YEbfIjbZCVuk0PJbfsS+WUj8suphJ8fkV92Ir9clt2QBRyQA3pO6LkMN+SWdx5JXkk+B27wJ26Th7hNfiW3HUDkl5fIr4ASfoFEfvmI/ApadkNucEB+6AWgFzTcUEjehSVFJEUduCGIuE1h4jbFlNx2MJFfESK/4kr4hRD5FSXyK2HZDYXAAcWgF4dewnBDSXmX+vddkjIO3BBK3KYUcZuySm57PJFfaSK/ckr4TSDyK0PkV96yG0qCA8pCLwe9vOGGCvKuKKkkqezADROJ21QkblNFyW1PIvKrRORXVQm/yUR+lYn8qll2QwVwQBXoVaFXM9xQXd41JDUltRy4YQpxmxrEbWorue2pRH41ifzqKOE3jcivFpFfXctuqA4OqA29DvS6hhvqybu+pIGkoQM3TCduU5+4TSMltz2DyK8BkV9jJfxmEvk1JPJrYtkN9cABjaA3ht7EcENTeTeTNJe0cOCGWcRtmhG3aanktmcT+TUn8mulhN8cIr8WRH6tLbuhKTigJfRW0Fsbbmgj77aSdpL2Dtwwl7hNW+I2HZTc9jwiv3ZEfh2V8JtP5NeeyK+TZTe0AQd0gN4ReifDDZ3l3UXSVdLNgRsWELfpQtymu5LbXkjk15XIr4cSfouI/LoR+fW07IbO4IDu0HtA72m4oZe8e0v6SPo6cMNi4ja9idv0U3LbS4j8+hD59VfCbymRX18ivwGW3dALHNAPen/oAww3DJT3IMlgyRAHblhG3GYQcZuhSm57OZHfYCK/YUr4rSDyG0LkN9yyGwaCA4ZCHwZ9uOGGEfIeKRklGe3ADSuJ24wkbjNGyW2vIvIbReQ3Vgm/1UR+o4n8xll2wwhwwBjoY6GPM9zgKW8vibfEx4Eb1hC38SJu46vkttcS+XkT+fkp4beOyM+HyM/fshs8wQG+0P2g+xtuCJB3oCRIEuzADeuJ2wQStwlRctsbiPyCiPxClfDbSOQXTOQ33rIbAsABIdBDoY833DBB3hMlkySTHbhhE3GbicRtpii57c1EfpOI/KYq4beFyG8ykd80y26YAA6YAn0q9GmGG6bLe4ZkpmSWAzdsJW4zg7jNbCW3vY3IbyaR3xwl/LYT+c0i8ptr2Q3TwQGzoc+BPtdwwzx5z5cskCx04IYdxG3mE7dZpOS2dxL5LSDyW6yE3y4iv4VEfkssu2EeOGAR9MXQlxhuWCrvZZLlkhUO3LCbuM0y4jYrldz2HiK/5UR+q5Tw20vkt4LIb7VlNywFB6yEvgr6asMNa+S9VrJOst6BG/YRt1lL3GaDktveT+S3jshvoxJ+B4j81hP5bbLshjXggA3QN0LfZLhhs7y3SLZKtjlww0HiNluI22xXctuHiPy2EvntUMLvMJHfNiK/nZbdsBkcsB36Dug7DTfskvduyR7JXgduOELcZjdxm31Kbvsokd8eIr/9SvgdI/LbS+R3wLIbdoED9kHfD/2A4YaD8j4kOSw54sANx4nbHCJuc1TJbZ8g8jtM5HdMCb+TRH5HiPyOW3bDQXDAUejHoB833HBC3iclpySnHbjhFHGbk8Rtzii57dNEfqeI/M4q4XeGyO80kd85y244AQ44A/0s9HOGG87L+4LkouSSAzecJW5zgbjNZSW3fY7I7yKR3xUl/M4T+V0i8rtq2Q3nwQGXoV+BftVwwzV5X5fckNx04IYLxG2uE7e5peS2LxL53SDyu62E3yUiv5tEfncsu+EaOOAW9NvQ7xhuuCvve5L7kgcO3HCZuM094jYPldz2FSK/+0R+j5Twu0rk94DI77FlN9wFBzyE/gj6Y8MNT+T9VPJM8tyBG64Rt3lK3OaFktu+TuT3jMjvpRJ+N4j8nhP5vbLshifggBfQX0J/ZbjhtbzfSN5K3jlww03iNm+I27xXctu3iPzeEvl9UMLvNpHfOyK/j5bd8Boc8B76B+gfDTd8kvdnyRfJVwduuEPc5jNxm29Kbvsukd8XIr/vSvjdI/L7SuT3w7IbPoEDvkH/Dv2H4Yaf8v4l+f3vdwduuE/c5hdxm79KbvsBkd9vIr8wQTr4PSTy+0Pk5xFk1w0/wQF/of/b7X/dI+i/bggr73CS8JIIQfbd8Ii4Tbgg3jYRldz2YyK/8ER+kZTwe0LkF4HIL7JlN4QFB0SEHgl6ZMMNUeQdVRJNEt2BG54St4lK3CaGktt+RuQXjcgvphJ+z4n8ohP5xbLshijggBjQY0KPZbghtrzjSOJK4jlwwwviNnGI28RXctsvifziEvklUMLvFZFfPCK/hJbdEBscEB96AugJDTckkndiSRJJUgdueE3cJjFxm2RKbvsNkV8SIr/kSvi9JfJLSuSXwrIbEoEDkkFPDj2F4YaU8k4lSS1J48AN74jbpCJuk1bJbb8n8ktN5JdOCb8PRH5piPzSW3ZDSnBAWujpoKc33JBB3hklmSSZHbjhI3GbjMRtsii57U9EfpmI/LIq4feZyC8zkV82y27IAA7IAj0r9GyGG7LLO4ckpySXAzd8IW6Tg7hNbiW3/ZXILyeRXx4l/L4R+eUi8str2Q3ZwQG5oeeBntdwQz5555cUkBR04IbvxG3yE7cppOS2fxD5FSDyK6yE308iv4JEfkUsuyEfOKAQ9MLQixhuKCrvYpLikhIO3PCLuE0x4jYlldz2byK/4kR+pZTw+0PkV4LIr7RlNxQFB5SEXgp6acMNZeRdVlJOUt6BG/4StylL3KaCktsOk5v3t8oR+VVUws+DyK88kV8ly24oAw6oAL0i9EqGGyrLu4qkqqSaAzeEJW5ThbhNdSW3HY7IryqRXw0l/MIT+VUj8qtp2Q2VwQHVodeAXtNwQy1515bUkdR14IYIxG1qE7epp+S2IxL51SHyq6+EXyQiv7pEfg0su6EWOKAe9PrQGxhuaCjvRpLGkiYO3BCZuE0j4jZNldx2FCK/xkR+zZTwi0rk14TIr7llNzQEBzSF3gx6c8MNLeTdUtJK0tqBG6IRt2lJ3KaNktuOTuTXisivrRJ+MYj8WhP5tbPshhbggDbQ20JvZ7ihvbw7SDpKOjlwQ0ziNh2I23RWctuxiPw6Evl1UcIvNpFfJyK/rpbd0B4c0Bl6F+hdDTd0k3d3SQ9JTwduiEPcpjtxm15KbjsukV8PIr/eSvjFI/LrSeTXx7IbuoEDekHvDb2P4Ya+8u4n6S8Z4MAN8Ynb9CNuM1DJbScg8utP5DdICb+ERH4DiPwGW3ZDX3DAQOiDoA823DBE3kMlwyTDHbghEXGbocRtRii57cREfsOI/EYq4ZeEyG84kd8oy24YAg4YAX0k9FGGG0bLe4xkrGScAzckJW4zhriNp5LbTkbkN5bIz0sJv+REfuOI/Lwtu2E0OMATuhd0b8MNPvL2lfhJ/B24IQVxG1/iNgFKbjslkZ8fkV+gEn6piPz8ifyCLLvBBxwQAD0QepDhhmB5h0hCJeMduCE1cZsQ4jYTlNx2GiK/UCK/iUr4pSXyG0/kN8myG4LBAROgT4Q+yXDDZHlPkUyVTHPghnTEbaYQt5mu5LbTE/lNJfKboYRfBiK/aUR+My27YTI4YDr0GdBnGm6YJe/ZkjmSuQ7ckJG4zWziNvOU3HYmIr85RH7zlfDLTOQ3l8hvgWU3zAIHzIM+H/oCww0L5b1IsliyxIEbshC3WUTcZqmS285K5LeYyG+ZEn7ZiPyWEPktt+yGheCApdCXQV9uuGGFvFdKVklWO3BDduI2K4nbrFFy2zmI/FYR+a1Vwi8nkd9qIr91lt2wAhywBvpa6OsMN6yX9wbJRskmB27IRdxmA3GbzUpuOzeR30Yivy1K+OUh8ttE5LfVshvWgwM2Q98Cfavhhm3y3i7ZIdnpwA15idtsJ26zS8lt5yPy20Hkt1sJv/xEfjuJ/PZYdsM2cMAu6Luh7zHcsFfe+yT7JQccuKEAcZt9xG0OKrntgkR++4n8DinhV4jI7wCR32HLbtgLDjgI/RD0w4Ybjsj7qOSY5LgDNxQmbnOUuM0JJbddhMjvGJHfSSX8ihL5HSfyO2XZDUfAASegn4R+ynDDaXmfkZyVnHPghmLEbc4Qtzmv5LaLE/mdJfK7oIRfCSK/c0R+Fy274TQ44Dz0C9AvGm64JO/LkiuSqw7cUJK4zWXiNteU3HYpIr8rRH7XlfArTeR3lcjvhmU3XAIHXIN+HfoNww035X1Lcltyx4EbyhC3uUXc5q6S2y5L5HebyO+eEn7liPzuEPndt+yGm+CAu9DvQb9vuOGBvB9KHkkeO3BDeeI2D4nbPFFy2xWI/B4R+T1Vwq8ikd9jIr9nlt3wABzwBPpT6M8MNzyX9wvJS8krB26oRNzmBXGb10puuzKR30sivzdK+FUh8ntF5PfWshuegwNeQ38D/a3hhnfyfi/5IPnowA1Vidu8J27zScltVyPy+0Dk91kJv+pEfh+J/L5YdsM7cMAn6J+hfzHc8FXe3yTfJT8cuKEGcZtvxG1+KrntmkR+34n8finhV4vI7weR32/LbvgKDvgJ/Rf034Yb/sj7ryRMsEcYj2D7bqhN3OYvcZuwwTpuuw6RX5hgHr9wSvjVJfLzIPILH2zXDX/AAf9u/X89HPTwwf91QwR5R5REkkR24IZ6xG0iEreJouS26xP5RSLyi6qEXwMiv8hEftEsuyECOCAK9KjQoxluiC7vGJKYklgO3NCQuE0M4jaxldx2IyK/mER+cZTwa0zkF4vIL65lN0QHB8SGHgd6XMMN8eQdX5JAktCBG5oQt4lP3CaRkttuSuSXgMgvsRJ+zYj8EhL5JbHshnjggETQE0NPYrghqbyTSZJLUjhwQ3PiNsmI26RUctstiPySE/mlUsKvJZFfCiK/1JbdkBQckBJ6KuipDTekkXdaSTpJegduaEXcJi1xmwxKbrs1kV86Ir+MSvi1IfJLT+SXybIb0oADMkDPCD2T4YbM8s4iySrJ5sANbYnbZCFuk13Jbbcj8stK5JdDCb/2RH7ZiPxyWnZDZnBAdug5oOc03JBL3rkleSR5HbihA3Gb3MRt8im57Y5EfnmI/PIr4deJyC8vkV8By27IBQ7IBz0/9AKGGwrKu5CksKSIAzd0Jm5TiLhNUSW33YXIrzCRXzEl/LoS+RUh8itu2Q0FwQFFoReDXtxwQwl5l5SU+vdtDtzQjbhNSeI2ZZTcdnciv1JEfmWV8OtB5FeayK+cZTeUAAeUgV4WejnDDeXlXUFSUVLJgRt6ErepQNymspLb7kXkV5HIr4oSfr2J/CoR+VW17Iby4IDK0KtAr2q4oZq8q0tqSGo6cEMf4jbVidvUUnLbfYn8ahD51VbCrx+RX00ivzqW3VANHFALem3odQw31JV3PUl9SQMHbuhP3KYecZuGSm57AJFffSK/Rkr4DSTya0Dk19iyG+qCAxpCbwS9seGGJvJuKmkmae7ADYOI2zQlbtNCyW0PJvJrRuTXUgm/IUR+zYn8Wll2QxNwQAvoLaG3MtzQWt5tJG0l7Ry4YShxmzbEbdorue1hRH5tifw6KOE3nMivHZFfR8tuaA0OaA+9A/SOhhs6ybuzpIukqwM3jCBu05m4TTcltz2SyK8LkV93JfxGEfl1JfLrYdkNncAB3aB3h97DcENPefeS9Jb0ceCG0cRtehG36avktscQ+fUm8uunhN9YIr8+RH79LbuhJzigL/R+0Psbbhgg74GSQZLBDtwwjrjNQOI2Q5TctieR3yAiv6FK+HkR+Q0m8htm2Q0DwAFDoA+FPsxww3B5j5CMlIxy4AZv4jYjiNuMVnLbPkR+I4n8xijh50vkN4rIb6xlNwwHB4yGPgb6WMMN4+TtKfGSeDtwgx9xG0/iNj5KbtufyM+LyM9XCb8AIj9vIj8/y24YBw7wge4L3c9wg7+8AySBkiAHbggkbhNA3CZYyW0HEfkFEvmFKOEXTOQXROQXatkN/uCAYOgh0EMNN4yX9wTJRMkkB24IIW4zgbjNZCW3HUrkN5HIb4oSfuOJ/CYR+U217Ibx4IDJ0KdAn2q4YZq8p0tmSGY6cMME4jbTidvMUnLbE4n8ZhD5zVbCbxKR30wivzmW3TANHDAL+mzocww3zJX3PMl8yQIHbphM3GYecZuFSm57CpHffCK/RUr4TSXyW0Dkt9iyG+aCAxZCXwR9seGGJfJeKlkmWe7ADdOI2ywlbrNCyW1PJ/JbRuS3Ugm/GUR+y4n8Vll2wxJwwAroK6GvMtywWt5rJGsl6xy4YSZxmzXEbdYrue1ZRH5rifw2KOE3m8hvHZHfRstuWA0OWA99A/SNhhs2yXuzZItkqwM3zCFus5m4zTYltz2XyG8Lkd92JfzmEfltJfLbYdkNm8AB26Bvh77DcMNOee+S7JbsceCG+cRtdhG32avkthcQ+e0m8tunhN9CIr89RH77LbthJzhgL/R90Pcbbjgg74OSQ5LDDtywiLjNQeI2R5Tc9mIiv0NEfkeV8FtC5HeYyO+YZTccAAccgX4U+jHDDcflfUJyUnLKgRuWErc5QdzmtJLbXkbkd5LI74wSfsuJ/E4R+Z217Ibj4IDT0M9AP2u44Zy8z0suSC46cMMK4jbnidtcUnLbK4n8LhD5XVbCbxWR30UivyuW3XAOHHAJ+mXoVww3XJX3Ncl1yQ0HblhN3OYacZubSm57DZHfdSK/W0r4rSXyu0Hkd9uyG66CA25CvwX9tuGGO/K+K7knue/ADeuI29wlbvNAyW2vJ/K7R+T3UAm/DUR+94n8Hll2wx1wwAPoD6E/MtzwWN5PJE8lzxy4YSNxmyfEbZ4rue1NRH5PifxeKOG3mcjvGZHfS8tueAwOeA79BfSXhhteyfu15I3krQM3bCFu85q4zTslt72VyO8Nkd97Jfy2Efm9JfL7YNkNr8AB76C/h/7BcMNHeX+SfJZ8ceCG7cRtPhG3+arktncQ+X0m8vumhN9OIr8vRH7fLbvhIzjgK/Rv0L8bbvgh75+SX5LfDtywi7jNT+I2f5Tc9m4iv19Efn+V8NtD5PebyC9MiF03/AAH/IH+F/q/b0A3eMg7rCScJHyIfTfsJW4TNoS3TYQQHbe9j8gvHJFfRCX89hP5hSfyi2TZDR4h/++ACNAjQo9kuCGyvKNIokqiOXDDAeI2UYjbRFdy2weJ/KIS+cVQwu8QkV80Ir+Ylt0QGRwQHXoM6DENN8SSd2xJHElcB244TNwmNnGbeEpu+wiRXxwiv/hK+B0l8otL5JfAshtigQPiQY8PPYHhhoTyTiRJLEniwA3HiNskIm6TVMltHyfyS0zkl0wJvxNEfkmI/JJbdkNCcEBS6MmgJzfckELeKSWpJKkduOEkcZuUxG3SKLntU0R+qYj80irhd5rILzWRXzrLbkgBDkgDPS30dIYb0ss7gySjJJMDN5whbpOBuE1mJbd9lsgvI5FfFiX8zhH5ZSLyy2rZDenBAZmhZ4Ge1XBDNnlnl+SQ5HTghvPEbbITt8ml5LYvEPnlIPLLrYTfRSK/nER+eSy7IRs4IBf03NDzGG7IK+98kvySAg7ccIm4TT7iNgWV3PZlIr/8RH6FlPC7QuRXgMivsGU35AUHFIReCHphww1F5F1UUkxS3IEbrhK3KUrcpoSS275G5FeMyK+kEn7XifyKE/mVsuyGIuCAEtBLQi9luKG0vMtIykrKOXDDDeI2ZYjblFdy2zeJ/MoS+VVQwu8WkV85Ir+Klt1QGhxQHnoF6BUNN1SSd2VJFUlVB264TdymMnGbakpu+w6RXxUiv+pK+N0l8qtK5FfDshsqgQOqQa8OvYbhhpryriWpLanjwA33iNvUIm5TV8lt3yfyq03kV08JvwdEfnWI/OpbdkNNcEBd6PWg1zfc0EDeDSWNJI0duOEhcZuGxG2aKLntR0R+jYj8mirh95jIrzGRXzPLbmgADmgCvSn0ZoYbmsu7haSlpJUDNzwhbtOCuE1rJbf9lMivJZFfGyX8nhH5tSLya2vZDc3BAa2ht4He1nBDO3m3l3SQdHTghufEbdoTt+mk5LZfEPl1IPLrrITfSyK/jkR+XSy7oR04oBP0ztC7GG7oKu9uku6SHg7c8Iq4TTfiNj2V3PZrIr/uRH69lPB7Q+TXg8ivt2U3dAUH9ITeC3pvww195N1X0k/S34Eb3hK36UvcZoCS235H5NePyG+gEn7vifz6E/kNsuyGPuCAAdAHQh9kuGGwvIdIhkqGOXDDB+I2Q4jbDFdy2x+J/IYS+Y1Qwu8Tkd8wIr+Rlt0wGBwwHPoI6CMNN4yS92jJGMlYB274TNxmNHGbcUpu+wuR3xgiP08l/L4S+Y0l8vOy7IZR4IBx0D2hexlu8Ja3j8RX4ufADd+I2/gQt/FXctvfifx8ifwClPD7QeTnR+QXaNkN3uAAf+gB0AMNNwTJO1gSIgl14IafxG2CiduMV3Lbv4j8Qoj8Jijh95vIL5TIb6JlNwSBA8ZDnwB9ouGGSfKeLJkimerADX+I20wmbjNNyW3/JfKbQuQ3XQm/MHl4f2sqkd8My26YBA6YBn069BmGG2bKe5ZktmSOAzd4ELeZRdxmrpLbDkvkN5vIb54SfuGI/OYQ+c237IaZ4IC50OdBn2+4YYG8F0oWSRY7cEN44jYLidssUXLbEYj8FhH5LVXCLyKR32Iiv2WW3bAAHLAE+lLoyww3LJf3CslKySoHbohE3GYFcZvVSm47MpHfSiK/NUr4RSHyW0Xkt9ayG5aDA1ZDXwN9reGGdfJeL9kg2ejADVGJ26wnbrNJyW1HI/LbQOS3WQm/6ER+G4n8tlh2wzpwwCbom6FvMdywVd7bJNslOxy4IQZxm23EbXYque2YRH7bifx2KeEXi8hvB5Hfbstu2AoO2Al9F/Tdhhv2yHuvZJ9kvwM3xCZus5e4zQEltx2HyG8fkd9BJfziEvntJ/I7ZNkNe8ABB6AfhH7IcMNheR+RHJUcc+CGeMRtjhC3Oa7ktuMT+R0l8juhhF8CIr9jRH4nLbvhMDjgOPQT0E8abjgl79OSM5KzDtyQkLjNaeI255TcdiIivzNEfueV8EtM5HeWyO+CZTecAgecg34e+gXDDRflfUlyWXLFgRuSELe5RNzmqpLbTkrkd5nI75oSfsmI/K4Q+V237IaL4ICr0K9Bv2644Ya8b0puSW47cENy4jY3idvcUXLbKYj8bhH53VXCLyWR320iv3uW3XADHHAH+l3o9ww33Jf3A8lDySMHbkhF3OYBcZvHSm47NZHfQyK/J0r4pSHye0Tk99SyG+6DAx5DfwL9qeGGZ/J+LnkheenADWmJ2zwnbvNKyW2nI/J7QeT3Wgm/9ER+L4n83lh2wzNwwCvor6G/MdzwVt7vJO8lHxy4IQNxm3fEbT4que2MRH7vifw+KeGXicjvA5HfZ8tueAsO+Aj9E/TPhhu+yPur5JvkuwM3ZCZu85W4zQ8lt52FyO8bkd9PJfyyEvl9J/L7ZdkNX8ABP6D/hP7LcMPvf2/JX0mYUPtuyEbc5g9xG49QHbedncjvL5FfWCX8chD5hQnl8QsXatcNv8EB/279fz0s9HCh/3VDeHlHkESURHLghpzEbSIQt4ms5LZzEflFJPKLooRfbiK/SER+US27ITw4IDL0KNCjGm6IJu/okhiSmA7ckIe4TXTiNrGU3HZeIr8YRH6xlfDLR+QXk8gvjmU3RAMHxIIeG3ocww1x5R1PEl+SwIEb8hO3iUfcJqGS2y5A5BefyC+REn4FifwSEPkltuyGuOCAhNATQU9suCGJvJNKkkmSO3BDIeI2SYnbpFBy24WJ/JIR+aVUwq8IkV9yIr9Ult2QBByQAnpK6KkMN6SWdxpJWkk6B24oStwmDXGb9EpuuxiRX1oivwxK+BUn8ktH5JfRshtSgwPSQ88APaPhhkzyzizJIsnqwA0liNtkJm6TTcltlyTyy0Lkl10Jv1JEflmJ/HJYdkMmcEA26Nmh5zDckFPeuSS5JXkcuKE0cZtcxG3yKrntMkR+uYn88inhV5bILw+RX37LbsgJDsgLPR/0/IYbCsi7oKSQpLADN5QjblOQuE0RJbddnsivEJFfUSX8KhD5FSbyK2bZDQXAAUWgF4VezHBDcXmXkJSUlHLghorEbUoQtymt5LYrEfmVJPIro4RfZSK/UkR+ZS27oTg4oDT0MtDLGm4oJ+/ykgqSig7cUIW4TXniNpWU3HZVIr8KRH6VlfCrRuRXkcivimU3lAMHVIJeGXoVww1V5V1NUl1Sw4EbqhO3qUbcpqaS265B5FedyK+WEn41ifxqEPnVtuyGquCAmtBrQa9tuKGOvOtK6knqO3BDLeI2dYnbNFBy27WJ/OoR+TVUwq8OkV99Ir9Glt1QBxzQAHpD6I0MNzSWdxNJU0kzB26oS9ymCXGb5kpuux6RX1MivxZK+NUn8mtG5NfSshsagwOaQ28BvaXhhlbybi1pI2nrwA0NiNu0Jm7TTsltNyTya0Pk114Jv0ZEfm2J/DpYdkMrcEA76O2hdzDc0FHenSSdJV0cuKExcZtOxG26KrntJkR+nYn8uinh15TIrwuRX3fLbugIDugKvRv07oYbesi7p6SXpLcDNzQjbtOTuE0fJbfdnMivF5FfXyX8WhD59Sby62fZDT3AAX2g94Xez3BDf3kPkAyUDHLghpbEbQYQtxms5LZbEfkNJPIbooRfayK/QUR+Qy27oT84YDD0IdCHGm4YJu/hkhGSkQ7c0Ia4zXDiNqOU3HZbIr8RRH6jlfBrR+Q3kshvjGU3DAMHjII+GvoYww1j5T1O4inxcuCG9sRtxhG38VZy2x2I/DyJ/HyU8OtI5OdF5Odr2Q1jwQHe0H2g+xpu8JO3vyRAEujADZ2I2/gTtwlSctudifwCiPyClfDrQuQXSOQXYtkNfuCAIOjB0EMMN4TKe7xkgmSiAzd0JW4znrjNJCW33Y3IbwKR32Ql/LoT+U0k8pti2Q2h4IBJ0CdDn2K4Yaq8p0mmS2Y4cEMP4jbTiNvMVHLbPYn8phP5zVLCrxeR3wwiv9mW3TAVHDAT+izosw03zJH3XMk8yXwHbuhN3GYucZsFSm67D5HfPCK/hUr49SXym0/kt8iyG+aAAxZAXwh9keGGxfJeIlkqWebADf2I2ywhbrNcyW33J/JbSuS3Qgm/AUR+y4j8Vlp2w2JwwHLoK6CvNNywSt6rJWskax24YSBxm9XEbdYpue1BRH5riPzWK+E3mMhvLZHfBstuWAUOWAd9PfQNhhs2ynuTZLNkiwM3DCFus4m4zVYltz2UyG8zkd82JfyGEfltIfLbbtkNG8EBW6Fvg77dcMMOee+U7JLsduCG4cRtdhK32aPktkcQ+e0i8turhN9IIr/dRH77LLthBzhgD/S90PcZbtgv7wOSg5JDDtwwirjNAeI2h5Xc9mgiv4NEfkeU8BtD5HeIyO+oZTfsBwcchn4E+lHDDcfkfVxyQnLSgRvGErc5TtzmlJLbHkfkd4LI77QSfp5EfieJ/M5YdsMxcMAp6KehnzHccFbe5yTnJRccuMGLuM054jYXldy2N5HfeSK/S0r4+RD5XSDyu2zZDWfBARehX4J+2XDDFXlflVyTXHfgBl/iNleJ29xQctt+RH7XiPxuKuHnT+R3ncjvlmU3XAEH3IB+E/otww235X1Hcldyz4EbAojb3CFuc1/JbQcS+d0l8nughF8Qkd89Ir+Hlt1wGxxwH/oD6A8NNzyS92PJE8lTB24IJm7zmLjNMyW3HULk94TI77kSfqFEfk+J/F5YdsMjcMAz6M+hvzDc8FLerySvJW8cuGE8cZtXxG3eKrntCUR+r4n83inhN5HI7w2R33vLbngJDngL/R3094YbPsj7o+ST5LMDN0wibvORuM0XJbc9mcjvE5HfVyX8phD5fSby+2bZDR/AAV+gf4X+zXDDd3n/kPyU/HLghqnEbX4Qt/mt5LanEfn9JPL7o4TfdCK/X0R+fy274Ts44Df0P9D/Gm4IM94jjIckrCTcePtumEHc5t93s7YJP17Hbc8k8gtL5BdBCb9ZRH7hiPwijrfrhn//zv/ngPDQI0CPOP6/bogk78iSKJKoDtwwm7hNZOI20ZTc9hwivyhEftGV8JtL5BeVyC+GZTdEAgdEgx4degzDDTHlHUsSWxLHgRvmEbeJRdwmrpLbnk/kF5vIL54SfguI/OIQ+cW37IaY4IC40ONBj2+4IYG8E0oSSRI7cMNC4jYJidskUXLbi4j8EhH5JVXCbzGRX2Iiv2SW3ZAAHJAEelLoyQw3JJd3CklKSSoHblhC3CYFcZvUSm57KZFfSiK/NEr4LSPyS0Xkl9ayG5KDA1JDTwM9reGGdPJOL8kgyejADcuJ26QnbpNJyW2vIPLLQOSXWQm/lUR+GYn8slh2QzpwQCbomaFnMdyQVd7ZJNklORy4YRVxm2zEbXIque3VRH7ZifxyKeG3hsgvB5FfbstuyAoOyAk9F/TchhvyyDuvJJ8kvwM3rCVuk5e4TQElt72OyC8fkV9BJfzWE/nlJ/IrZNkNecABBaAXhF7IcENheReRFJUUc+CGDcRtihC3Ka7ktjcS+RUl8iuhhN8mIr9iRH4lLbuhMDigOPQS0Esabij175skZSRlHbhhM3Gb0sRtyim57S1EfmWI/Mor4beVyK8skV8Fy24oBQ4oB7089AqGGyrKu5KksqSKAzdsI25TibhNVSW3vZ3IrzKRXzUl/HYQ+VUh8qtu2Q0VwQFVoVeDXt1wQw1515TUktR24IadxG1qErepo+S2dxH51SLyq6uE324iv9pEfvUsu6EGOKAO9LrQ6xluqC/vBpKGkkYO3LCHuE0D4jaNldz2XiK/hkR+TZTw20fk14jIr6llN9QHBzSG3gR6U8MNzeTdXNJC0tKBG/YTt2lO3KaVkts+QOTXgsivtRJ+B4n8WhL5tbHshmbggFbQW0NvY7ihrbzbSdpLOjhwwyHiNu2I23RUctuHifzaE/l1UsLvCJFfByK/zpbd0BYc0BF6J+idDTd0kXdXSTdJdwduOErcpitxmx5KbvsYkV83Ir+eSvgdJ/LrTuTXy7IbuoADekDvCb2X4Ybe8u4j6Svp58ANJ4jb9CFu01/JbZ8k8utL5DdACb9TRH79iPwGWnZDb3BAf+gDoA803DBI3oMlQyRDHbjhNHGbwcRthim57TNEfkOI/IYr4XeWyG8okd8Iy24YBA4YBn049BGGG0bKe5RktGSMAzecI24zirjNWCW3fZ7IbzSR3zgl/C4Q+Y0h8vO07IaR4ICx0MdB9zTc4CVvb4mPxNeBGy4St/EmbuOn5LYvEfn5EPn5K+F3mcjPl8gvwLIbvMABftD9oQcYbgiUd5AkWBLiwA1XiNsEEbcJVXLbV4n8gon8xivhd43IL4TIb4JlNwSCA0Khj4c+wXDDRHlPkkyWTHHghuvEbSYRt5mq5LZvEPlNJvKbpoTfTSK/KUR+0y27YSI4YCr0adCnG26YIe+ZklmS2Q7ccIu4zUziNnOU3PZtIr9ZRH5zlfC7Q+Q3m8hvnmU3zAAHzIE+F/o8ww3z5b1AslCyyIEb7hK3WUDcZrGS275H5LeQyG+JEn73ifwWEfktteyG+eCAxdCXQF9quGGZvJdLVkhWOnDDA+I2y4nbrFJy2w+J/FYQ+a1Wwu8Rkd9KIr81lt2wDBywCvpq6GsMN6yV9zrJeskGB254TNxmHXGbjUpu+wmR33oiv01K+D0l8ttA5LfZshvWggM2Qt8EfbPhhi3y3irZJtnuwA3PiNtsJW6zQ8ltPyfy20bkt1MJvxdEftuJ/HZZdsMWcMAO6Duh7zLcsFveeyR7JfscuOElcZs9xG32K7ntV0R+e4n8Dijh95rIbx+R30HLbtgNDtgP/QD0g4YbDsn7sOSI5KgDN7whbnOYuM0xJbf9lsjvCJHfcSX83hH5HSXyO2HZDYfAAcegH4d+wnDDSXmfkpyWnHHghvfEbU4Rtzmr5LY/EPmdJvI7p4TfRyK/M0R+5y274SQ44Cz0c9DPG264IO+LkkuSyw7c8Im4zUXiNleU3PZnIr9LRH5XlfD7QuR3mcjvmmU3XAAHXIF+Ffo1ww3X5X1DclNyy4EbvhK3uUHc5raS2/5G5HeTyO+OEn7fifxuEfndteyG6+CA29DvQL9ruOGevO9LHkgeOnDDD+I294nbPFJy2z+J/B4Q+T1Wwu8Xkd9DIr8nlt1wDxzwCPpj6E8MNzyV9zPJc8kLB274TdzmGXGbl0pu+w+R33Miv1dK+P0l8ntB5PfashueggNeQn8F/bXhhjfyfit5J3nvwA1h8hL/z564zQclt+1B5PeOyO+jEn5hifzeE/l9suyGN+CAD9A/Qv9kuOGzvL9Ivkq+OXBDOOI2X4jbfFdy2+GJ/L4S+f1Qwi8Ckd83Ir+flt3wGRzwHfoP6D8NN/yS9+9/v0n+OnBDROI2v4nbhJmg47YjEfn9IfLzUMIvMpHfXyK/sBPsuuEXOODfrf+ve0APO+G/bggn7/CSCJKIE+y7IQpxm/ATeNtEUnLbUYn8IhD5RVbCLxqRX0QivyiW3RAOHBAJemToUQw3RJV3NEl0SQwHbohO3CYacZuYSm47BpFfdCK/WEr4xSTyi0HkF9uyG6KCA2JCjwU9tuGGOPKOK4knie/ADbGI28QlbpNAyW3HJvKLR+SXUAm/OER+8Yn8Ell2QxxwQALoCaEnMtyQWN5JJEklyRy4IS5xmyTEbZIrue14RH5JifxSKOEXn8gvGZFfSstuSAwOSA49BfSUhhtSyTu1JI0krQM3JCBuk5q4TTolt52QyC8NkV96JfwSEfmlJfLLYNkNqcAB6aCnh57BcENGeWeSZJZkceCGxMRtMhG3yarktpMQ+WUm8sumhF9SIr8sRH7ZLbshIzggK/Rs0LMbbsgh75ySXJLcDtyQjLhNTuI2eZTcdnIiv1xEfnmV8EtB5JebyC+fZTfkAAfkgZ4Xej7DDfnlXUBSUFLIgRtSErcpQNymsJLbTkXkV5DIr4gSfqmJ/AoR+RW17Ib84IDC0ItAL2q4oZi8i0tKSEo6cEMa4jbFiduUUnLbaYn8ShD5lVbCLx2RX0kivzKW3VAMHFAKemnoZQw3lJV3OUl5SQUHbkhP3KYccZuKSm47A5FfeSK/Skr4ZSTyq0DkV9myG8qCAypCrwS9suGGKvKuKqkmqe7ADZmI21QlblNDyW1nJvKrRuRXUwm/LER+1Yn8all2QxVwQA3oNaHXMtxQW951JHUl9Ry4IStxmzrEbeorue1sRH51ifwaKOGXncivHpFfQ8tuqA0OqA+9AfSGhhsaybuxpImkqQM35CBu05i4TTMlt52TyK8JkV9zJfxyEfk1JfJrYdkNjcABzaA3h97CcENLebeStJa0ceCG3MRtWhG3aavktvMQ+bUm8munhF9eIr82RH7tLbuhJTigLfR20Nsbbugg746STpLODtyQj7hNR+I2XZTcdn4iv05Efl2V8CtA5NeZyK+bZTd0AAd0gd4VejfDDd3l3UPSU9LLgRsKErfpQdymt5LbLkTk15PIr48SfoWJ/HoR+fW17Ibu4IDe0PtA72u4oZ+8+0sGSAY6cEMR4jb9idsMUnLbRYn8BhD5DVbCrxiR30AivyGW3dAPHDAI+mDoQww3DJX3MMlwyQgHbihO3GYYcZuRSm67BJHfcCK/UUr4lSTyG0HkN9qyG4aCA0ZCHwV9tOGGMfIeKxkn8XTghlLEbcYSt/FSctulifzGEfl5K+FXhsjPk8jPx7IbxoADvKB7Q/cx3OArbz+JvyTAgRvKErfxI24TqOS2yxH5+RP5BSnhV57IL4DIL9iyG3zBAYHQg6AHG24IkXeoZLxkggM3VCBuE0rcZqKS265I5DeeyG+SEn6ViPwmEPlNtuyGEHDAROiToE823DBF3lMl0yTTHbihMnGbqcRtZii57SpEftOI/GYq4VeVyG86kd8sy26YAg6YAX0m9FmGG2bLe45krmSeAzdUI24zh7jNfCW3XZ3Iby6R3wIl/GoQ+c0j8lto2Q2zwQHzoS+AvtBwwyJ5L5YskSx14IaaxG0WE7dZpuS2axH5LSHyW66EX20iv6VEfissu2EROGAZ9OXQVxhuWCnvVZLVkjUO3FCHuM0q4jZrldx2XSK/1UR+65Twq0fkt4bIb71lN6wEB6yFvg76esMNG+S9UbJJstmBG+oTt9lI3GaLkttuQOS3ichvqxJ+DYn8NhP5bbPshg3ggC3Qt0LfZrhhu7x3SHZKdjlwQyPiNjuI2+xWctuNifx2EvntUcKvCZHfLiK/vZbdsB0csBv6Huh7DTfsk/d+yQHJQQduaErcZj9xm0NKbrsZkd8BIr/DSvg1J/I7SOR3xLIb9oEDDkE/DP2I4Yaj8j4mOS454cANLYjbHCNuc1LJbbck8jtO5HdKCb9WRH4niPxOW3bDUXDASeinoJ823HBG3mcl5yTnHbihNXGbs8RtLii57TZEfueI/C4q4deWyO88kd8ly244Aw64AP0i9EuGGy7L+4rkquSaAze0I25zhbjNdSW33Z7I7yqR3w0l/DoQ+V0j8rtp2Q2XwQHXod+AftNwwy1535bckdx14IaOxG1uE7e5p+S2OxH53SHyu6+EX2civ7tEfg8su+EWOOAe9PvQHxhueCjvR5LHkicO3NCFuM0j4jZPldx2VyK/x0R+z5Tw60bk94TI77llNzwEBzyF/gz6c8MNL+T9UvJK8tqBG7oTt3lJ3OaNktvuQeT3isjvrRJ+PYn8XhP5vbPshhfggDfQ30J/Z7jhvbw/SD5KPjlwQy/iNh+I23xWctu9ifw+Evl9UcKvD5HfJyK/r5bd8B4c8Bn6F+hfDTd8k/d3yQ/JTwdu6Evc5jtxm19Kbrsfkd8PIr/fSvj1J/L7SeT3x7IbvoEDfkH/Df2P4Ya/8g4z0SOMhyTsRPtuGEDc5t93s7YJN1HHbQ8k8vMg8guvhN8gIr+wRH4RJtp1w19wwL9b/18PDz3CxP+6IaK8I0kiS6I4cMNg4jaRiNtEVXLbQ4j8IhP5RVPCbyiRXxQiv+iW3RARHBAVejTo0Q03xJB3TEksSWwHbhhG3CYmcZs4Sm57OJFfLCK/uEr4jSDyi03kF8+yG2KAA+JAjws9nuGG+PJOIEkoSeTADSOJ2yQgbpNYyW2PIvJLSOSXRAm/0UR+iYj8klp2Q3xwQGLoSaAnNdyQTN7JJSkkKR24YQxxm+TEbVIpue2xRH4piPxSK+E3jsgvJZFfGstuSAYOSAU9NfQ0hhvSyjudJL0kgwM3eBK3SUfcJqOS2/Yi8ktP5JdJCT9vIr8MRH6ZLbshLTggI/RM0DMbbsgi76ySbJLsDtzgQ9wmK3GbHEpu25fILxuRX04l/PyI/LIT+eWy7IYs4IAc0HNCz2W4Ibe880jySvI5cIM/cZs8xG3yK7ntACK/vER+BZTwCyTyy0fkV9CyG3KDA/JDLwC9oOGGQvIuLCkiKerADUHEbQoTtymm5LaDifyKEPkVV8IvhMivKJFfCctuKAQOKAa9OPQShhtKyrvUv++SlHHghlDiNqWI25RVctvjifxKE/mVU8JvApFfGSK/8pbdUBIcUBZ6OejlDTdUkHdFSSVJZQdumEjcpiJxmypKbnsSkV8lIr+qSvhNJvKrTORXzbIbKoADqkCvCr2a4Ybq8q4hqSmp5cANU4jb1CBuU1vJbU8l8qtJ5FdHCb9pRH61iPzqWnZDdXBAbeh1oNc13FBP3vUlDSQNHbhhOnGb+sRtGim57RlEfg2I/Bor4TeTyK8hkV8Ty26oBw5oBL0x9CaGG5rKu5mkuaSFAzfMIm7TjLhNSyW3PZvIrzmRXysl/OYQ+bUg8mtt2Q1NwQEtobeC3tpwQxt5t5W0k7R34Ia5xG3aErfpoOS25xH5tSPy66iE33wiv/ZEfp0su6ENOKAD9I7QOxlu6CzvLpKukm4O3LCAuE0X4jbdldz2QiK/rkR+PZTwW0Tk143Ir6dlN3QGB3SH3gN6T8MNveTdW9JH0teBGxYTt+lN3KafktteQuTXh8ivvxJ+S4n8+hL5DbDshl7ggH7Q+0MfYLhhoLwHSQZLhjhwwzLiNoOI2wxVctvLifwGE/kNU8JvBZHfECK/4ZbdMBAcMBT6MOjDDTeMkPdIySjJaAduWEncZiRxmzFKbnsVkd8oIr+xSvitJvIbTeQ3zrIbRoADxkAfC32c4QZPeXtJvCU+DtywhriNF3EbXyW3vZbIz5vIz08Jv3VEfj5Efv6W3eAJDvCF7gfd33BDgLwDJUGSYAduWE/cJpC4TYiS295A5BdE5BeqhN9GIr9gIr/xlt0QAA4IgR4KfbzhhgnyniiZJJnswA2biNtMJG4zRcltbybym0TkN1UJvy1EfpOJ/KZZdsMEcMAU6FOhTzPcMF3eMyQzJbMcuGErcZsZxG1mK7ntbUR+M4n85ijht53IbxaR31zLbpgODpgNfQ70uYYb5sl7vmSBZKEDN+wgbjOfuM0iJbe9k8hvAZHfYiX8dhH5LSTyW2LZDfPAAYugL4a+xHDDUnkvkyyXrHDght3EbZYRt1mp5Lb3EPktJ/JbpYTfXiK/FUR+qy27YSk4YCX0VdBXG25YI++1knWS9Q7csI+4zVriNhuU3PZ+Ir91RH4blfA7QOS3nshvk2U3rAEHbIC+Efomww2b5b1FslWyzYEbDhK32ULcZruS2z5E5LeVyG+HEn6Hify2EfnttOyGzeCA7dB3QN9puGGXvHdL9kj2OnDDEeI2u4nb7FNy20eJ/PYQ+e1Xwu8Ykd9eIr8Dlt2wCxywD/p+6AcMNxyU9yHJYckRB244TtzmEHGbo0pu+wSR32Eiv2NK+J0k8jtC5HfcshsOggOOQj8G/bjhhhPyPik5JTntwA2niNucJG5zRsltnybyO0Xkd1YJvzNEfqeJ/M5ZdsMJcMAZ6GehnzPccF7eFyQXJZccuOEscZsLxG0uK7ntc0R+F4n8rijhd57I7xKR31XLbjgPDrgM/Qr0q4Ybrsn7uuSG5KYDN1wgbnOduM0tJbd9kcjvBpHfbSX8LhH53STyu2PZDdfAAbeg34Z+x3DDXXnfk9yXPHDghsvEbe4Rt3mo5LavEPndJ/J7pITfVSK/B0R+jy274S444CH0R9AfG254Iu+nkmeS5w7ccI24zVPiNi+U3PZ1Ir9nRH4vlfC7QeT3nMjvlWU3PAEHvID+Evorww2v5f1G8lbyzoEbbhK3eUPc5r2S275F5PeWyO+DEn63ifzeEfl9tOyG1+CA99A/QP9ouOGTvD9Lvki+OnDDHeI2n4nbfFNy23eJ/L4Q+X1Xwu8ekd9XIr8flt3wCRzwDfp36D8MN/yU9y/J73+/O3DDfeI2v4jb/FVy2w+I/H4T+YWZpIPfQyK/P0R+HpPsuuEnOOAv9H+7/a97TPqvG8LKO5wkvCTCJPtueETcJtwk3jYRldz2YyK/8ER+kZTwe0LkF4HIL7JlN4QFB0SEHgl6ZMMNUeQdVRJNEt2BG54St4lK3CaGktt+RuQXjcgvphJ+z4n8ohP5xbLshijggBjQY0KPZbghtrzjSOJK4jlwwwviNnGI28RXctsvifziEvklUMLvFZFfPCK/hJbdEBscEB96AugJDTckkndiSRJJUgdueE3cJjFxm2RKbvsNkV8SIr/kSvi9JfJLSuSXwrIbEoEDkkFPDj2F4YaU8k4lSS1J48AN74jbpCJuk1bJbb8n8ktN5JdOCb8PRH5piPzSW3ZDSnBAWujpoKc33JBB3hklmSSZHbjhI3GbjMRtsii57U9EfpmI/LIq4feZyC8zkV82y27IAA7IAj0r9GyGG7LLO4ckpySXAzd8IW6Tg7hNbiW3/ZXILyeRXx4l/L4R+eUi8str2Q3ZwQG5oeeBntdwQz5555cUkBR04IbvxG3yE7cppOS2fxD5FSDyK6yE308iv4JEfkUsuyEfOKAQ9MLQixhuKCrvYpLikhIO3PCLuE0x4jYlldz2byK/4kR+pZTw+0PkV4LIr7RlNxQFB5SEXgp6acMNZeRdVlJOUt6BG/4StylL3KaCktsOk4/3t8oR+VVUws+DyK88kV8ly24oAw6oAL0i9EqGGyrLu4qkqqSaAzeEJW5ThbhNdSW3HY7IryqRXw0l/MIT+VUj8qtp2Q2VwQHVodeAXtNwQy1515bUkdR14IYIxG1qE7epp+S2IxL51SHyq6+EXyQiv7pEfg0su6EWOKAe9PrQGxhuaCjvRpLGkiYO3BCZuE0j4jZNldx2FCK/xkR+zZTwi0rk14TIr7llNzQEBzSF3gx6c8MNLeTdUtJK0tqBG6IRt2lJ3KaNktuOTuTXisivrRJ+MYj8WhP5tbPshhbggDbQ20JvZ7ihvbw7SDpKOjlwQ0ziNh2I23RWctuxiPw6Evl1UcIvNpFfJyK/rpbd0B4c0Bl6F+hdDTd0k3d3SQ9JTwduiEPcpjtxm15KbjsukV8PIr/eSvjFI/LrSeTXx7IbuoEDekHvDb2P4Ya+8u4n6S8Z4MAN8Ynb9CNuM1DJbScg8utP5DdICb+ERH4DiPwGW3ZDX3DAQOiDoA823DBE3kMlwyTDHbghEXGbocRtRii57cREfsOI/EYq4ZeEyG84kd8oy24YAg4YAX0k9FGGG0bLe4xkrGScAzckJW4zhriNp5LbTkbkN5bIz0sJv+REfuOI/Lwtu2E0OMATuhd0b8MNPvL2lfhJ/B24IQVxG1/iNgFKbjslkZ8fkV+gEn6piPz8ifyCLLvBBxwQAD0QepDhhmB5h0hCJeMduCE1cZsQ4jYTlNx2GiK/UCK/iUr4pSXyG0/kN8myG4LBAROgT4Q+yXDDZHlPkUyVTHPghnTEbaYQt5mu5LbTE/lNJfKboYRfBiK/aUR+My27YTI4YDr0GdBnGm6YJe/ZkjmSuQ7ckJG4zWziNvOU3HYmIr85RH7zlfDLTOQ3l8hvgWU3zAIHzIM+H/oCww0L5b1IsliyxIEbshC3WUTcZqmS285K5LeYyG+ZEn7ZiPyWEPktt+yGheCApdCXQV9uuGGFvFdKVklWO3BDduI2K4nbrFFy2zmI/FYR+a1Vwi8nkd9qIr91lt2wAhywBvpa6OsMN6yX9wbJRskmB27IRdxmA3GbzUpuOzeR30Yivy1K+OUh8ttE5LfVshvWgwM2Q98Cfavhhm3y3i7ZIdnpwA15idtsJ26zS8lt5yPy20Hkt1sJv/xEfjuJ/PZYdsM2cMAu6Luh7zHcsFfe+yT7JQccuKEAcZt9xG0OKrntgkR++4n8DinhV4jI7wCR32HLbtgLDjgI/RD0w4Ybjsj7qOSY5LgDNxQmbnOUuM0JJbddhMjvGJHfSSX8ihL5HSfyO2XZDUfAASegn4R+ynDDaXmfkZyVnHPghmLEbc4Qtzmv5LaLE/mdJfK7oIRfCSK/c0R+Fy274TQ44Dz0C9AvGm64JO/LkiuSqw7cUJK4zWXiNteU3HYpIr8rRH7XlfArTeR3lcjvhmU3XAIHXIN+HfoNww035X1Lcltyx4EbyhC3uUXc5q6S2y5L5HebyO+eEn7liPzuEPndt+yGm+CAu9DvQb9vuOGBvB9KHkkeO3BDeeI2D4nbPFFy2xWI/B4R+T1Vwq8ikd9jIr9nlt3wABzwBPpT6M8MNzyX9wvJS8krB26oRNzmBXGb10puuzKR30sivzdK+FUh8ntF5PfWshuegwNeQ38D/a3hhnfyfi/5IPnowA1Vidu8J27zScltVyPy+0Dk91kJv+pEfh+J/L5YdsM7cMAn6J+hfzHc8FXe3yTfJT8cuKEGcZtvxG1+KrntmkR+34n8finhV4vI7weR32/LbvgKDvgJ/Rf034Yb/sj7ryTMZI8wHpPtu6E2cZu/xG3CTtZx23WI/MJM5vELp4RfXSI/DyK/8JPtuuEPOODfrf+vh4MefvJ/3RBB3hElkSSRHbihHnGbiMRtoii57fpEfpGI/KIq4deAyC8ykV80y26IAA6IAj0q9GiGG6LLO4YkpiSWAzc0JG4Tg7hNbCW33YjILyaRXxwl/BoT+cUi8otr2Q3RwQGxoceBHtdwQzx5x5ckkCR04IYmxG3iE7dJpOS2mxL5JSDyS6yEXzMiv4REfkksuyEeOCAR9MTQkxhuSCrvZJLkkhQO3NCcuE0y4jYpldx2CyK/5ER+qZTwa0nkl4LIL7VlNyQFB6SEngp6asMNaeSdVpJOkt6BG1oRt0lL3CaDkttuTeSXjsgvoxJ+bYj80hP5ZbLshjTggAzQM0LPZLghs7yzSLJKsjlwQ1viNlmI22RXctvtiPyyEvnlUMKvPZFfNiK/nJbdkBkckB16Dug5DTfkknduSR5JXgdu6EDcJjdxm3xKbrsjkV8eIr/8Svh1IvLLS+RXwLIbcoED8kHPD72A4YaC8i4kKSwp4sANnYnbFCJuU1TJbXch8itM5FdMCb+uRH5FiPyKW3ZDQXBAUejFoBc33FBC3iUlpf59mwM3dCNuU5K4TRklt92dyK8UkV9ZJfx6EPmVJvIrZ9kNJcABZaCXhV7OcEN5eVeQVJRUcuCGnsRtKhC3qazktnsR+VUk8quihF9vIr9KRH5VLbuhPDigMvQq0Ksabqgm7+qSGpKaDtzQh7hNdeI2tZTcdl8ivxpEfrWV8OtH5FeTyK+OZTdUAwfUgl4beh3DDXXlXU9SX9LAgRv6E7epR9ymoZLbHkDkV5/Ir5ESfgOJ/BoQ+TW27Ia64ICG0BtBb2y4oYm8m0qaSZo7cMMg4jZNidu0UHLbg4n8mhH5tVTCbwiRX3Miv1aW3dAEHNACekvorQw3tJZ3G0lbSTsHbhhK3KYNcZv2Sm57GJFfWyK/Dkr4DSfya0fk19GyG1qDA9pD7wC9o+GGTvLuLOki6erADSOI23QmbtNNyW2PJPLrQuTXXQm/UUR+XYn8elh2QydwQDfo3aH3MNzQU969JL0lfRy4YTRxm17Ebfoque0xRH69ifz6KeE3lsivD5Fff8tu6AkO6Au9H/T+hhsGyHugZJBksAM3jCNuM5C4zRAlt+1J5DeIyG+oEn5eRH6DifyGWXbDAHDAEOhDoQ8z3DBc3iMkIyWjHLjBm7jNCOI2o5Xctg+R30givzFK+PkS+Y0i8htr2Q3DwQGjoY+BPtZwwzh5e0q8JN4O3OBH3MaTuI2Pktv2J/LzIvLzVcIvgMjPm8jPz7IbxoEDfKD7Qvcz3OAv7wBJoCTIgRsCidsEELcJVnLbQUR+gUR+IUr4BRP5BRH5hVp2gz84IBh6CPRQww3j5T1BMlEyyYEbQojbTCBuM1nJbYcS+U0k8puihN94Ir9JRH5TLbthPDhgMvQp0Kcabpgm7+mSGZKZDtwwgbjNdOI2s5Tc9kQivxlEfrOV8JtE5DeTyG+OZTdMAwfMgj4b+hzDDXPlPU8yX7LAgRsmE7eZR9xmoZLbnkLkN5/Ib5ESflOJ/BYQ+S227Ia54ICF0BdBX2y4YYm8l0qWSZY7cMM04jZLidusUHLb04n8lhH5rVTCbwaR33Iiv1WW3bAEHLAC+kroqww3rJb3GslayToHbphJ3GYNcZv1Sm57FpHfWiK/DUr4zSbyW0fkt9GyG1aDA9ZD3wB9o+GGTfLeLNki2erADXOI22wmbrNNyW3PJfLbQuS3XQm/eUR+W4n8dlh2wyZwwDbo26HvMNywU967JLslexy4YT5xm13EbfYque0FRH67ifz2KeG3kMhvD5Hffstu2AkO2At9H/T9hhsOyPug5JDksAM3LCJuc5C4zRElt72YyO8Qkd9RJfyWEPkdJvI7ZtkNB8ABR6AfhX7McMNxeZ+QnJSccuCGpcRtThC3Oa3ktpcR+Z0k8jujhN9yIr9TRH5nLbvhODjgNPQz0M8abjgn7/OSC5KLDtywgrjNeeI2l5Tc9koivwtEfpeV8FtF5HeRyO+KZTecAwdcgn4Z+hXDDVflfU1yXXLDgRtWE7e5RtzmppLbXkPkd53I75YSfmuJ/G4Q+d227Iar4ICb0G9Bv2244Y6870ruSe47cMM64jZ3ids8UHLb64n87hH5PVTCbwOR330iv0eW3XAHHPAA+kPojww3PJb3E8lTyTMHbthI3OYJcZvnSm57E5HfUyK/F0r4bSbye0bk99KyGx6DA55DfwH9peGGV/J+LXkjeevADVuI27wmbvNOyW1vJfJ7Q+T3Xgm/bUR+b4n8Plh2wytwwDvo76F/MNzwUd6fJJ8lXxy4YTtxm0/Ebb4que0dRH6fify+KeG3k8jvC5Hfd8tu+AgO+Ar9G/Tvhht+yPun5JfktwM37CJu85O4zR8lt72byO8Xkd9fJfz2EPn9JvILM8WuG36AA/5A/wv93zegGzzkHVYSThJ+in037CVuE3YKb5sIU3Tc9j4iv3BEfhGV8NtP5BeeyC+SZTd4TPl/B0SAHhF6JMMNkeUdRRJVEs2BGw4Qt4lC3Ca6kts+SOQXlcgvhhJ+h4j8ohH5xbTshsjggOjQY0CPabghlrxjS+JI4jpww2HiNrGJ28RTcttHiPziEPnFV8LvKJFfXCK/BJbdEAscEA96fOgJDDcklHciSWJJEgduOEbcJhFxm6RKbvs4kV9iIr9kSvidIPJLQuSX3LIbEoIDkkJPBj254YYU8k4pSSVJ7cANJ4nbpCRuk0bJbZ8i8ktF5JdWCb/TRH6pifzSWXZDCnBAGuhpoacz3JBe3hkkGSWZHLjhDHGbDMRtMiu57bNEfhmJ/LIo4XeOyC8TkV9Wy25IDw7IDD0L9KyGG7LJO7skhySnAzecJ26TnbhNLiW3fYHILweRX24l/C4S+eUk8stj2Q3ZwAG5oOeGnsdwQ15555PklxRw4IZLxG3yEbcpqOS2LxP55SfyK6SE3xUivwJEfoUtuyEvOKAg9ELQCxtuKCLvopJikuIO3HCVuE1R4jYllNz2NSK/YkR+JZXwu07kV5zIr5RlNxQBB5SAXhJ6KcMNpeVdRlJWUs6BG24QtylD3Ka8ktu+SeRXlsivghJ+t4j8yhH5VbTshtLggPLQK0CvaLihkrwrS6pIqjpww23iNpWJ21RTctt3iPyqEPlVV8LvLpFfVSK/GpbdUAkcUA16deg1DDfUlHctSW1JHQduuEfcphZxm7pKbvs+kV9tIr96Svg9IPKrQ+RX37IbaoID6kKvB72+4YYG8m4oaSRp7MAND4nbNCRu00TJbT8i8mtE5NdUCb/HRH6NifyaWXZDA3BAE+hNoTcz3NBc3i0kLSWtHLjhCXGbFsRtWiu57adEfi2J/Noo4feMyK8VkV9by25oDg5oDb0N9LaGG9rJu72kg6SjAzc8J27TnrhNJyW3/YLIrwORX2cl/F4S+XUk8uti2Q3twAGdoHeG3sVwQ1d5d5N0l/Rw4IZXxG26EbfpqeS2XxP5dSfy66WE3xsivx5Efr0tu6ErOKAn9F7Qextu6CPvvpJ+kv4O3PCWuE1f4jYDlNz2OyK/fkR+A5Xwe0/k15/Ib5BlN/QBBwyAPhD6IMMNg+U9RDJUMsyBGz4QtxlC3Ga4ktv+SOQ3lMhvhBJ+n4j8hhH5jbTshsHggOHQR0AfabhhlLxHS8ZIxjpww2fiNqOJ24xTcttfiPzGEPl5KuH3lchvLJGfl2U3jAIHjIPuCd3LcIO3vH0kvhI/B274RtzGh7iNv5Lb/k7k50vkF6CE3w8iPz8iv0DLbvAGB/hDD4AeaLghSN7BkhBJqAM3/CRuE0zcZryS2/5F5BdC5DdBCb/fRH6hRH4TLbshCBwwHvoE6BMNN0yS92TJFMlUB274Q9xmMnGbaUpu+y+R3xQiv+lK+IXJz/tbU4n8Zlh2wyRwwDTo06HPMNwwU96zJLMlcxy4wYO4zSziNnOV3HZYIr/ZRH7zlPALR+Q3h8hvvmU3zAQHzIU+D/p8ww0L5L1Qskiy2IEbwhO3WUjcZomS245A5LeIyG+pEn4RifwWE/kts+yGBeCAJdCXQl9muGG5vFdIVkpWOXBDJOI2K4jbrFZy25GJ/FYS+a1Rwi8Kkd8qIr+1lt2wHBywGvoa6GsNN6yT93rJBslGB26IStxmPXGbTUpuOxqR3wYiv81K+EUn8ttI5LfFshvWgQM2Qd8MfYvhhq3y3ibZLtnhwA0xiNtsI26zU8ltxyTy207kt0sJv1hEfjuI/HZbdsNWcMBO6Lug7zbcsEfeeyX7JPsduCE2cZu9xG0OKLntOER++4j8DirhF5fIbz+R3yHLbtgDDjgA/SD0Q4YbDsv7iOSo5JgDN8QjbnOEuM1xJbcdn8jvKJHfCSX8EhD5HSPyO2nZDYfBAcehn4B+0nDDKXmflpyRnHXghoTEbU4Ttzmn5LYTEfmdIfI7r4RfYiK/s0R+Fyy74RQ44Bz089AvGG64KO9LksuSKw7ckIS4zSXiNleV3HZSIr/LRH7XlPBLRuR3hcjvumU3XAQHXIV+Dfp1ww035H1Tckty24EbkhO3uUnc5o6S205B5HeLyO+uEn4pifxuE/nds+yGG+CAO9DvQr9nuOG+vB9IHkoeOXBDKuI2D4jbPFZy26mJ/B4S+T1Rwi8Nkd8jIr+nlt1wHxzwGPoT6E8NNzyT93PJC8lLB25IS9zmOXGbV0puOx2R3wsiv9dK+KUn8ntJ5PfGshuegQNeQX8N/Y3hhrfyfid5L/ngwA0ZiNu8I27zUcltZyTye0/k90kJv0xEfh+I/D5bdsNbcMBH6J+gfzbc8EXeXyXfJN8duCEzcZuvxG1+KLntLER+34j8firhl5XI7zuR3y/LbvgCDvgB/Sf0X4Ybfv97S/5Kwky174ZsxG3+ELfxmKrjtrMT+f0l8gurhF8OIr8wU3n8wk2164bf4IB/t/6/HhZ6uKn/dUN4eUeQRJREcuCGnMRtIhC3iazktnMR+UUk8ouihF9uIr9IRH5RLbshPDggMvQo0KMabogm7+iSGJKYDtyQh7hNdOI2sZTcdl4ivxhEfrGV8MtH5BeTyC+OZTdEAwfEgh4behzDDXHlHU8SX5LAgRvyE7eJR9wmoZLbLkDkF5/IL5ESfgWJ/BIQ+SW27Ia44ICE0BNBT2y4IYm8k0qSSZI7cEMh4jZJidukUHLbhYn8khH5pVTCrwiRX3Iiv1SW3ZAEHJACekroqQw3pJZ3GklaSToHbihK3CYNcZv0Sm67GJFfWiK/DEr4FSfyS0fkl9GyG1KDA9JDzwA9o+GGTPLOLMkiyerADSWI22QmbpNNyW2XJPLLQuSXXQm/UkR+WYn8clh2QyZwQDbo2aHnMNyQU965JLkleRy4oTRxm1zEbfIque0yRH65ifzyKeFXlsgvD5FffstuyAkOyAs9H/T8hhsKyLugpJCksAM3lCNuU5C4TRElt12eyK8QkV9RJfwqEPkVJvIrZtkNBcABRaAXhV7McENxeZeQlJSUcuCGisRtShC3Ka3ktisR+ZUk8iujhF9lIr9SRH5lLbuhODigNPQy0Msabign7/KSCpKKDtxQhbhNeeI2lZTcdlUivwpEfpWV8KtG5FeRyK+KZTeUAwdUgl4ZehXDDVXlXU1SXVLDgRuqE7epRtymppLbrkHkV53Ir5YSfjWJ/GoQ+dW27Iaq4ICa0GtBr224oY6860rqSeo7cEMt4jZ1ids0UHLbtYn86hH5NVTCrw6RX30iv0aW3VAHHNAAekPojQw3NJZ3E0lTSTMHbqhL3KYJcZvmSm67HpFfUyK/Fkr41Sfya0bk19KyGxqDA5pDbwG9peGGVvJuLWkjaevADQ2I27QmbtNOyW03JPJrQ+TXXgm/RkR+bYn8Olh2QytwQDvo7aF3MNzQUd6dJJ0lXRy4oTFxm07Ebboque0mRH6dify6KeHXlMivC5Ffd8tu6AgO6Aq9G/Tuhht6yLunpJektwM3NCNu05O4TR8lt92cyK8XkV9fJfxaEPn1JvLrZ9kNPcABfaD3hd7PcEN/eQ+QDJQMcuCGlsRtBhC3GazktlsR+Q0k8huihF9rIr9BRH5DLbuhPzhgMPQh0Icabhgm7+GSEZKRDtzQhrjNcOI2o5TcdlsivxFEfqOV8GtH5DeSyG+MZTcMAweMgj4a+hjDDWPlPU7iKfFy4Ib2xG3GEbfxVnLbHYj8PIn8fJTw60jk50Xk52vZDWPBAd7QfaD7Gm7wk7e/JEAS6MANnYjb+BO3CVJy252J/AKI/IKV8OtC5BdI5Bdi2Q1+4IAg6MHQQww3hMp7vGSCZKIDN3QlbjOeuM0kJbfdjchvApHfZCX8uhP5TSTym2LZDaHggEnQJ0OfYrhhqrynSaZLZjhwQw/iNtOI28xUcts9ifymE/nNUsKvF5HfDCK/2ZbdMBUcMBP6LOizDTfMkfdcyTzJfAdu6E3cZi5xmwVKbrsPkd88Ir+FSvj1JfKbT+S3yLIb5oADFkBfCH2R4YbF8l4iWSpZ5sAN/YjbLCFus1zJbfcn8ltK5LdCCb8BRH7LiPxWWnbDYnDAcugroK803LBK3qslayRrHbhhIHGb1cRt1im57UFEfmuI/NYr4TeYyG8tkd8Gy25YBQ5YB3099A2GGzbKe5Nks2SLAzcMIW6zibjNViW3PZTIbzOR3zYl/IYR+W0h8ttu2Q0bwQFboW+Dvt1www5575Tskux24IbhxG12ErfZo+S2RxD57SLy26uE30giv91Efvssu2EHOGAP9L3Q9xlu2C/vA5KDkkMO3DCKuM0B4jaHldz2aCK/g0R+R5TwG0Pkd4jI76hlN+wHBxyGfgT6UcMNx+R9XHJCctKBG8YStzlO3OaUktseR+R3gsjvtBJ+nkR+J4n8zlh2wzFwwCnop6GfMdxwVt7nJOclFxy4wYu4zTniNheV3LY3kd95Ir9LSvj5EPldIPK7bNkNZ8EBF6Ffgn7ZcMMVeV+VXJNcd+AGX+I2V4nb3FBy235EfteI/G4q4edP5HedyO+WZTdcAQfcgH4T+i3DDbflfUdyV3LPgRsCiNvcIW5zX8ltBxL53SXye6CEXxCR3z0iv4eW3XAbHHAf+gPoDw03PJL3Y8kTyVMHbggmbvOYuM0zJbcdQuT3hMjvuRJ+oUR+T4n8Xlh2wyNwwDPoz6G/MNzwUt6vJK8lbxy4YTxxm1fEbd4que0JRH6vifzeKeE3kcjvDZHfe8tueAkOeAv9HfT3hhs+yPuj5JPkswM3TCJu85G4zRcltz2ZyO8Tkd9XJfymEPl9JvL7ZtkNH8ABX6B/hf7NcMN3ef+Q/JT8cuCGqcRtfhC3+a3ktqcR+f0k8vujhN90Ir9fRH5/LbvhOzjgN/Q/0P8abggzzSOMhySsJNw0+26YQdzm33eztgk/TcdtzyTyC0vkF0EJv1lEfuGI/CJOs+uGf//O/+eA8NAjQI847b9uiCTvyJIokqgO3DCbuE1k4jbRlNz2HCK/KER+0ZXwm0vkF5XIL4ZlN0QCB0SDHh16DMMNMeUdSxJbEseBG+YRt4lF3CauktueT+QXm8gvnhJ+C4j84hD5xbfshpjggLjQ40GPb7ghgbwTShJJEjtww0LiNgmJ2yRRctuLiPwSEfklVcJvMZFfYiK/ZJbdkAAckAR6UujJDDckl3cKSUpJKgduWELcJgVxm9RKbnspkV9KIr80SvgtI/JLReSX1rIbkoMDUkNPAz2t4YZ08k4vySDJ6MANy4nbpCduk0nJba8g8stA5JdZCb+VRH4ZifyyWHZDOnBAJuiZoWcx3JBV3tkk2SU5HLhhFXGbbMRtciq57dVEftmJ/HIp4beGyC8HkV9uy27ICg7ICT0X9NyGG/LIO68knyS/AzesJW6Tl7hNASW3vY7ILx+RX0El/NYT+eUn8itk2Q15wAEFoBeEXshwQ2F5F5EUlRRz4IYNxG2KELcpruS2NxL5FSXyK6GE3yYiv2JEfiUtu6EwOKA49BLQSxpuKPXvmyRlJGUduGEzcZvSxG3KKbntLUR+ZYj8yivht5XIryyRXwXLbigFDigHvTz0CoYbKsq7kqSypIoDN2wjblOJuE1VJbe9ncivMpFfNSX8dhD5VSHyq27ZDRXBAVWhV4Ne3XBDDXnXlNSS1Hbghp3EbWoSt6mj5LZ3EfnVIvKrq4TfbiK/2kR+9Sy7oQY4oA70utDrGW6oL+8GkoaSRg7csIe4TQPiNo2V3PZeIr+GRH5NlPDbR+TXiMivqWU31AcHNIbeBHpTww3N5N1c0kLS0oEb9hO3aU7cppWS2z5A5NeCyK+1En4HifxaEvm1seyGZuCAVtBbQ29juKGtvNtJ2ks6OHDDIeI27YjbdFRy24eJ/NoT+XVSwu8IkV8HIr/Olt3QFhzQEXon6J0NN3SRd1dJN0l3B244StymK3GbHkpu+xiRXzciv55K+B0n8utO5NfLshu6gAN6QO8JvZfhht7y7iPpK+nnwA0niNv0IW7TX8ltnyTy60vkN0AJv1NEfv2I/AZadkNvcEB/6AOgDzTcMEjegyVDJEMduOE0cZvBxG2GKbntM0R+Q4j8hivhd5bIbyiR3wjLbhgEDhgGfTj0EYYbRsp7lGS0ZIwDN5wjbjOKuM1YJbd9nshvNJHfOCX8LhD5jSHy87TshpHggLHQx0H3NNzgJW9viY/E14EbLhK38SZu46fkti8R+fkQ+fkr4XeZyM+XyC/Ashu8wAF+0P2hBxhuCJR3kCRYEuLADVeI2wQRtwlVcttXifyCifzGK+F3jcgvhMhvgmU3BIIDQqGPhz7BcMNEeU+STJZMceCG68RtJhG3marktm8Q+U0m8pumhN9NIr8pRH7TLbthIjhgKvRp0Kcbbpgh75mSWZLZDtxwi7jNTOI2c5Tc9m0iv1lEfnOV8LtD5DebyG+eZTfMAAfMgT4X+jzDDfPlvUCyULLIgRvuErdZQNxmsZLbvkfkt5DIb4kSfveJ/BYR+S217Ib54IDF0JdAX2q4YZm8l0tWSFY6cMMD4jbLidusUnLbD4n8VhD5rVbC7xGR30oivzWW3bAMHLAK+mroaww3rJX3Osl6yQYHbnhM3GYdcZuNSm77CZHfeiK/TUr4PSXy20Dkt9myG9aCAzZC3wR9s+GGLfLeKtkm2e7ADc+I22wlbrNDyW0/J/LbRuS3Uwm/F0R+24n8dll2wxZwwA7oO6HvMtywW957JHsl+xy44SVxmz3EbfYrue1XRH57ifwOKOH3mshvH5HfQctu2A0O2A/9APSDhhsOyfuw5IjkqAM3vCFuc5i4zTElt/2WyO8Ikd9xJfzeEfkdJfI7YdkNh8ABx6Afh37CcMNJeZ+SnJacceCG98RtThG3Oavktj8Q+Z0m8junhN9HIr8zRH7nLbvhJDjgLPRz0M8bbrgg74uSS5LLDtzwibjNReI2V5Tc9mciv0tEfleV8PtC5HeZyO+aZTdcAAdcgX4V+jXDDdflfUNyU3LLgRu+Ere5QdzmtpLb/kbkd5PI744Sft+J/G4R+d217Ibr4IDb0O9Av2u44Z6870seSB46cMMP4jb3ids8UnLbP4n8HhD5PVbC7xeR30MivyeW3XAPHPAI+mPoTww3PJX3M8lzyQsHbvhN3OYZcZuXSm77D5HfcyK/V0r4/SXye0Hk99qyG56CA15CfwX9teGGN/J+K3knee/ADWEKEP/PnrjNByW37UHk947I76MSfmGJ/N4T+X2y7IY34IAP0D9C/2S44bO8v0i+Sr45cEM44jZfiNt8V3Lb4Yn8vhL5/VDCLwKR3zciv5+W3fAZHPAd+g/oPw03/JL373+/Sf46cENE4ja/iduEma7jtiMR+f0h8vNQwi8ykd9fIr+w0+264Rc44N+t/697QA87/b9uCCfv8JIIkojT7bshCnGb8NN520RScttRifwiEPlFVsIvGpFfRCK/KJbdEA4cEAl6ZOhRDDdElXc0SXRJDAduiE7cJhpxm5hKbjsGkV90Ir9YSvjFJPKLQeQX27IbooIDYkKPBT224YY48o4riSeJ78ANsYjbxCVuk0DJbccm8otH5JdQCb84RH7xifwSWXZDHHBAAugJoScy3JBY3kkkSSXJHLghLnGbJMRtkiu57XhEfkmJ/FIo4RefyC8ZkV9Ky25IDA5IDj0F9JSGG1LJO7UkjSStAzckIG6TmrhNOiW3nZDILw2RX3ol/BIR+aUl8stg2Q2pwAHpoKeHnsFwQ0Z5Z5JklmRx4IbExG0yEbfJquS2kxD5ZSbyy6aEX1IivyxEftktuyEjOCAr9GzQsxtuyCHvnJJcktwO3JCMuE1O4jZ5lNx2ciK/XER+eZXwS0Hkl5vIL59lN+QAB+SBnhd6PsMN+eVdQFJQUsiBG1IStylA3KawkttOReRXkMiviBJ+qYn8ChH5FbXshvzggMLQi0AvarihmLyLS0pISjpwQxriNsWJ25RScttpifxKEPmVVsIvHZFfSSK/MpbdUAwcUAp6aehlDDeUlXc5SXlJBQduSE/cphxxm4pKbjsDkV95Ir9KSvhlJPKrQORX2bIbyoIDKkKvBL2y4YYq8q4qqSap7sANmYjbVCVuU0PJbWcm8qtG5FdTCb8sRH7VifxqWXZDFXBADeg1odcy3FBb3nUkdSX1HLghK3GbOsRt6iu57WxEfnWJ/Boo4ZedyK8ekV9Dy26oDQ6oD70B9IaGGxrJu7GkiaSpAzfkIG7TmLhNMyW3nZPIrwmRX3Ml/HIR+TUl8mth2Q2NwAHNoDeH3sJwQ0t5t5K0lrRx4IbcxG1aEbdpq+S28xD5tSbya6eEX14ivzZEfu0tu6ElOKAt9HbQ2xtu6CDvjpJOks4O3JCPuE1H4jZdlNx2fiK/TkR+XZXwK0Dk15nIr5tlN3QAB3SB3hV6N8MN3eXdQ9JT0suBGwoSt+lB3Ka3ktsuROTXk8ivjxJ+hYn8ehH59bXshu7ggN7Q+0Dva7ihn7z7SwZIBjpwQxHiNv2J2wxScttFifwGEPkNVsKvGJHfQCK/IZbd0A8cMAj6YOhDDDcMlfcwyXDJCAduKE7cZhhxm5FKbrsEkd9wIr9RSviVJPIbQeQ32rIbhoIDRkIfBX204YYx8h4rGSfxdOCGUsRtxhK38VJy26WJ/MYR+Xkr4VeGyM+TyM/HshvGgAO8oHtD9zHc4CtvP4m/JMCBG8oSt/EjbhOo5LbLEfn5E/kFKeFXnsgvgMgv2LIbfMEBgdCDoAcbbgiRd6hkvGSCAzdUIG4TStxmopLbrkjkN57Ib5ISfpWI/CYQ+U227IYQcMBE6JOgTzbcMEXeUyXTJNMduKEycZupxG1mKLntKkR+04j8ZirhV5XIbzqR3yzLbpgCDpgBfSb0WYYbZst7jmSuZJ4DN1QjbjOHuM18JbddnchvLpHfAiX8ahD5zSPyW2jZDbPBAfOhL4C+0HDDInkvliyRLHXghprEbRYTt1mm5LZrEfktIfJbroRfbSK/pUR+Kyy7YRE4YBn05dBXGG5YKe9VktWSNQ7cUIe4zSriNmuV3HZdIr/VRH7rlPCrR+S3hshvvWU3rAQHrIW+Dvp6ww0b5L1Rskmy2YEb6hO32UjcZouS225A5LeJyG+rEn4Nifw2E/lts+yGDeCALdC3Qt9muGG7vHdIdkp2OXBDI+I2O4jb7FZy242J/HYS+e1Rwq8Jkd8uIr+9lt2wHRywG/oe6HsNN+yT937JAclBB25oStxmP3GbQ0puuxmR3wEiv8NK+DUn8jtI5HfEshv2gQMOQT8M/YjhhqPyPiY5LjnhwA0tiNscI25zUslttyTyO07kd0oJv1ZEfieI/E5bdsNRcMBJ6KegnzbccEbeZyXnJOcduKE1cZuzxG0uKLntNkR+54j8Lirh15bI7zyR3yXLbjgDDrgA/SL0S4YbLsv7iuSq5JoDN7QjbnOFuM11JbfdnsjvKpHfDSX8OhD5XSPyu2nZDZfBAdeh34B+03DDLXnfltyR3HXgho7EbW4Tt7mn5LY7EfndIfK7r4RfZyK/u0R+Dyy74RY44B70+9AfGG54KO9HkseSJw7c0IW4zSPiNk+V3HZXIr/HRH7PlPDrRuT3hMjvuWU3PAQHPIX+DPpzww0v5P1S8kry2oEbuhO3eUnc5o2S2+5B5PeKyO+tEn49ifxeE/m9s+yGF+CAN9DfQn9nuOG9vD9IPko+OXBDL+I2H4jbfFZy272J/D4S+X1Rwq8Pkd8nIr+vlt3wHhzwGfoX6F8NN3yT93fJD8lPB27oS9zmO3GbX0puux+R3w8iv99K+PUn8vtJ5PfHshu+gQN+Qf8N/Y/hhr/yDjPDI4yHJOwM+24YQNzm33eztgk3Q8dtDyTy8yDyC6+E3yAiv7BEfhFm2HXDX3DAv1v/Xw8PPcKM/7ohorwjSSJLojhww2DiNpGI20RVcttDiPwiE/lFU8JvKJFfFCK/6JbdEBEcEBV6NOjRDTfEkHdMSSxJbAduGEbcJiZxmzhKbns4kV8sIr+4SviNIPKLTeQXz7IbYoAD4kCPCz2e4Yb48k4gSShJ5MANI4nbJCBuk1jJbY8i8ktI5JdECb/RRH6JiPySWnZDfHBAYuhJoCc13JBM3sklKSQpHbhhDHGb5MRtUim57bFEfimI/FIr4TeOyC8lkV8ay25IBg5IBT019DSGG9LKO50kvSSDAzd4ErdJR9wmo5Lb9iLyS0/kl0kJP28ivwxEfpktuyEtOCAj9EzQMxtuyCLvrJJskuwO3OBD3CYrcZscSm7bl8gvG5FfTiX8/Ij8shP55bLshizggBzQc0LPZbght7zzSPJK8jlwgz9xmzzEbfIrue0AIr+8RH4FlPALJPLLR+RX0LIbcoMD8kMvAL2g4YZC8i4sKSIp6sANQcRtChO3KabktoOJ/IoQ+RVXwi+EyK8okV8Jy24oBA4oBr049BKGG0rKu9S/75KUceCGUOI2pYjblFVy2+OJ/EoT+ZVTwm8CkV8ZIr/ylt1QEhxQFno56OUNN1SQd0VJJUllB26YSNymInGbKkpuexKRXyUiv6pK+E0m8qtM5FfNshsqgAOqQK8KvZrhhuryriGpKanlwA1TiNvUIG5TW8ltTyXyq0nkV0cJv2lEfrWI/OpadkN1cEBt6HWg1zXcUE/e9SUNJA0duGE6cZv6xG0aKbntGUR+DYj8GivhN5PIryGRXxPLbqgHDmgEvTH0JoYbmsq7maS5pIUDN8wibtOMuE1LJbc9m8ivOZFfKyX85hD5tSDya23ZDU3BAS2ht4Le2nBDG3m3lbSTtHfghrnEbdoSt+mg5LbnEfm1I/LrqITffCK/9kR+nSy7oQ04oAP0jtA7GW7oLO8ukq6Sbg7csIC4TRfiNt2V3PZCIr+uRH49lPBbROTXjcivp2U3dAYHdIfeA3pPww295N1b0kfS14EbFhO36U3cpp+S215C5NeHyK+/En5Lifz6EvkNsOyGXuCAftD7Qx9guGGgvAdJBkuGOHDDMuI2g4jbDFVy28uJ/AYT+Q1Twm8Fkd8QIr/hlt0wEBwwFPow6MMNN4yQ90jJKMloB25YSdxmJHGbMUpuexWR3ygiv7FK+K0m8htN5DfOshtGgAPGQB8LfZzhBk95e0m8JT4O3LCGuI0XcRtfJbe9lsjPm8jPTwm/dUR+PkR+/pbd4AkO8IXuB93fcEOAvAMlQZJgB25YT9wmkLhNiJLb3kDkF0TkF6qE30Yiv2Aiv/GW3RAADgiBHgp9vOGGCfKeKJkkmezADZuI20wkbjNFyW1vJvKbROQ3VQm/LUR+k4n8pll2wwRwwBToU6FPM9wwXd4zJDMlsxy4YStxmxnEbWYrue1tRH4zifzmKOG3nchvFpHfXMtumA4OmA19DvS5hhvmyXu+ZIFkoQM37CBuM5+4zSIlt72TyG8Bkd9iJfx2EfktJPJbYtkN88ABi6Avhr7EcMNSeS+TLJescOCG3cRtlhG3WanktvcQ+S0n8lulhN9eIr8VRH6rLbthKThgJfRV0Fcbblgj77WSdZL1Dtywj7jNWuI2G5Tc9n4iv3VEfhuV8DtA5LeeyG+TZTesAQdsgL4R+ibDDZvlvUWyVbLNgRsOErfZQtxmu5LbPkTkt5XIb4cSfoeJ/LYR+e207IbN4IDt0HdA32m4YZe8d0v2SPY6cMMR4ja7idvsU3LbR4n89hD57VfC7xiR314ivwOW3bALHLAP+n7oBww3HJT3IclhyREHbjhO3OYQcZujSm77BJHfYSK/Y0r4nSTyO0Lkd9yyGw6CA45CPwb9uOGGE/I+KTklOe3ADaeI25wkbnNGyW2fJvI7ReR3Vgm/M0R+p4n8zll2wwlwwBnoZ6GfM9xwXt4XJBcllxy44SxxmwvEbS4rue1zRH4XifyuKOF3nsjvEpHfVctuOA8OuAz9CvSrhhuuyfu65IbkpgM3XCBuc524zS0lt32RyO8Gkd9tJfwuEfndJPK7Y9kN18ABt6Dfhn7HcMNded+T3Jc8cOCGy8Rt7hG3eajktq8Q+d0n8nukhN9VIr8HRH6PLbvhLjjgIfRH0B8bbngi76eSZ5LnDtxwjbjNU+I2L5Tc9nUiv2dEfi+V8LtB5PecyO+VZTc8AQe8gP4S+ivDDa/l/UbyVvLOgRtuErd5Q9zmvZLbvkXk95bI74MSfreJ/N4R+X207IbX4ID30D9A/2i44ZO8P0u+SL46cMMd4jafidt8U3Lbd4n8vhD5fVfC7x6R31civx+W3fAJHPAN+nfoPww3/JT3L8nvf787cMN94ja/iNv8VXLbD4j8fhP5hZmpg99DIr8/RH4eM+264Sc44C/0f7v9r3vM/K8bwso7nCS8JMJM+254RNwm3EzeNhGV3PZjIr/wRH6RlPB7QuQXgcgvsmU3hAUHRIQeCXpkww1R5B1VEk0S3YEbnhK3iUrcJoaS235G5BeNyC+mEn7PifyiE/nFsuyGKOCAGNBjQo9luCG2vONI4kriOXDDC+I2cYjbxFdy2y+J/OIS+SVQwu8VkV88Ir+Elt0QGxwQH3oC6AkNNySSd2JJEklSB254TdwmMXGbZEpu+w2RXxIiv+RK+L0l8ktK5JfCshsSgQOSQU8OPYXhhpTyTiVJLUnjwA3viNukIm6TVsltvyfyS03kl04Jvw9EfmmI/NJbdkNKcEBa6OmgpzfckEHeGSWZJJkduOEjcZuMxG2yKLntT0R+mYj8sirh95nILzORXzbLbsgADsgCPSv0bIYbsss7hySnJJcDN3whbpODuE1uJbf9lcgvJ5FfHiX8vhH55SLyy2vZDdnBAbmh54Ge13BDPnnnlxSQFHTghu/EbfITtymk5LZ/EPkVIPIrrITfTyK/gkR+RSy7IR84oBD0wtCLGG4oKu9ikuKSEg7c8Iu4TTHiNiWV3PZvIr/iRH6llPD7Q+RXgsivtGU3FAUHlIReCnppww1l5F1WUk5S3oEb/hK3KUvcpoKS2w5TkPe3yhH5VVTCz4PIrzyRXyXLbigDDqgAvSL0SoYbKsu7iqSqpJoDN4QlblOFuE11JbcdjsivKpFfDSX8whP5VSPyq2nZDZXBAdWh14Be03BDLXnXltSR1HXghgjEbWoTt6mn5LYjEvnVIfKrr4RfJCK/ukR+DSy7oRY4oB70+tAbGG5oKO9GksaSJg7cEJm4TSPiNk2V3HYUIr/GRH7NlPCLSuTXhMivuWU3NAQHNIXeDHpzww0t5N1S0krS2oEbohG3aUncpo2S245O5NeKyK+tEn4xiPxaE/m1s+yGFuCANtDbQm9nuKG9vDtIOko6OXBDTOI2HYjbdFZy27GI/DoS+XVRwi82kV8nIr+ult3QHhzQGXoX6F0NN3STd3dJD0lPB26IQ9ymO3GbXkpuOy6RXw8iv95K+MUj8utJ5NfHshu6gQN6Qe8NvY/hhr7y7ifpLxngwA3xidv0I24zUMltJyDy60/kN0gJv4REfgOI/AZbdkNfcMBA6IOgDzbcMETeQyXDJMMduCERcZuhxG1GKLntxER+w4j8Rirhl4TIbziR3yjLbhgCDhgBfST0UYYbRst7jGSsZJwDNyQlbjOGuI2nkttORuQ3lsjPSwm/5ER+44j8vC27YTQ4wBO6F3Rvww0+8vaV+En8HbghBXEbX+I2AUpuOyWRnx+RX6ASfqmI/PyJ/IIsu8EHHBAAPRB6kOGGYHmHSEIl4x24ITVxmxDiNhOU3HYaIr9QIr+JSvilJfIbT+Q3ybIbgsEBE6BPhD7JcMNkeU+RTJVMc+CGdMRtphC3ma7kttMT+U0l8puhhF8GIr9pRH4zLbthMjhgOvQZ0Gcabpgl79mSOZK5DtyQkbjNbOI285TcdiYivzlEfvOV8MtM5DeXyG+BZTfMAgfMgz4f+gLDDQvlvUiyWLLEgRuyELdZRNxmqZLbzkrkt5jIb5kSftmI/JYQ+S237IaF4ICl0JdBX264YYW8V0pWSVY7cEN24jYridusUXLbOYj8VhH5rVXCLyeR32oiv3WW3bACHLAG+lro6ww3rJf3BslGySYHbshF3GYDcZvNSm47N5HfRiK/LUr45SHy20Tkt9WyG9aDAzZD3wJ9q+GGbfLeLtkh2enADXmJ22wnbrNLyW3nI/LbQeS3Wwm//ER+O4n89lh2wzZwwC7ou6HvMdywV977JPslBxy4oQBxm33EbQ4que2CRH77ifwOKeFXiMjvAJHfYctu2AsOOAj9EPTDhhuOyPuo5JjkuAM3FCZuc5S4zQklt12EyO8Ykd9JJfyKEvkdJ/I7ZdkNR8ABJ6CfhH7KcMNpeZ+RnJWcc+CGYsRtzhC3Oa/ktosT+Z0l8rughF8JIr9zRH4XLbvhNDjgPPQL0C8abrgk78uSK5KrDtxQkrjNZeI215TcdikivytEfteV8CtN5HeVyO+GZTdcAgdcg34d+g3DDTflfUtyW3LHgRvKELe5RdzmrpLbLkvkd5vI754SfuWI/O4Q+d237Iab4IC70O9Bv2+44YG8H0oeSR47cEN54jYPids8UXLbFYj8HhH5PVXCryKR32Miv2eW3fAAHPAE+lPozww3PJf3C8lLySsHbqhE3OYFcZvXSm67MpHfSyK/N0r4VSHye0Xk99ayG56DA15DfwP9reGGd/J+L/kg+ejADVWJ27wnbvNJyW1XI/L7QOT3WQm/6kR+H4n8vlh2wztwwCfon6F/MdzwVd7fJN8lPxy4oQZxm2/EbX4que2aRH7fifx+KeFXi8jvB5Hfb8tu+AoO+An9F/Tfhhv+yPuvJMwsjzAes+y7oTZxm7/EbcLO0nHbdYj8wszi8QunhF9dIj8PIr/ws+y64Q844N+t/6+Hgx5+1n/dEEHeESWRJJEduKEecZuIxG2iKLnt+kR+kYj8oirh14DILzKRXzTLbogADogCPSr0aIYboss7hiSmJJYDNzQkbhODuE1sJbfdiMgvJpFfHCX8GhP5xSLyi2vZDdHBAbGhx4Ee13BDPHnHlySQJHTghibEbeITt0mk5LabEvklIPJLrIRfMyK/hER+SSy7IR44IBH0xNCTGG5IKu9kkuSSFA7c0Jy4TTLiNimV3HYLIr/kRH6plPBrSeSXgsgvtWU3JAUHpISeCnpqww1p5J1Wkk6S3oEbWhG3SUvcJoOS225N5JeOyC+jEn5tiPzSE/llsuyGNOCADNAzQs9kuCGzvLNIskqyOXBDW+I2WYjbZFdy2+2I/LIS+eVQwq89kV82Ir+clt2QGRyQHXoO6DkNN+SSd25JHkleB27oQNwmN3GbfEpuuyORXx4iv/xK+HUi8stL5FfAshtygQPyQc8PvYDhhoLyLiQpLCniwA2didsUIm5TVMltdyHyK0zkV0wJv65EfkWI/IpbdkNBcEBR6MWgFzfcUELeJSWl/n2bAzd0I25TkrhNGSW33Z3IrxSRX1kl/HoQ+ZUm8itn2Q0lwAFloJeFXs5wQ3l5V5BUlFRy4IaexG0qELeprOS2exH5VSTyq6KEX28iv0pEflUtu6E8OKAy9CrQqxpuqCbv6pIakpoO3NCHuE114ja1lNx2XyK/GkR+tZXw60fkV5PIr45lN1QDB9SCXht6HcMNdeVdT1Jf0sCBG/oTt6lH3KahktseQORXn8ivkRJ+A4n8GhD5NbbshrrggIbQG0FvbLihibybSppJmjtwwyDiNk2J27RQctuDifyaEfm1VMJvCJFfcyK/Vpbd0AQc0AJ6S+itDDe0lncbSVtJOwduGErcpg1xm/ZKbnsYkV9bIr8OSvgNJ/JrR+TX0bIbWoMD2kPvAL2j4YZO8u4s6SLp6sANI4jbdCZu003JbY8k8utC5NddCb9RRH5difx6WHZDJ3BAN+jdofcw3NBT3r0kvSV9HLhhNHGbXsRt+iq57TFEfr2J/Pop4TeWyK8PkV9/y27oCQ7oC70f9P6GGwbIe6BkkGSwAzeMI24zkLjNECW37UnkN4jIb6gSfl5EfoOJ/IZZdsMAcMAQ6EOhDzPcMFzeIyQjJaMcuMGbuM0I4jajldy2D5HfSCK/MUr4+RL5jSLyG2vZDcPBAaOhj4E+1nDDOHl7Srwk3g7c4EfcxpO4jY+S2/Yn8vMi8vNVwi+AyM+byM/PshvGgQN8oPtC9zPc4C/vAEmgJMiBGwKJ2wQQtwlWcttBRH6BRH4hSvgFE/kFEfmFWnaDPzggGHoI9FDDDePlPUEyUfJ/1JxTkJ7buoVj284f27Zt27Zt2zY67HR3mrFt27btnDcXu85Y83rMWfVejKoxc/HVX89413Nq5+y95jpwwwziNrOJ28xTctszifzmEPnNV8JvFpHfXCK/BZbdMAscMA/6fOgLDDcslPciyWLJEgdumE3cZhFxm6VKbnsOkd9iIr9lSvjNJfJbQuS33LIbFoIDlkJfBn254YYV8l4pWSVZ7cAN84jbrCRu46XktucT+a0i8lujhN8CIr/VRH5rLbthBTjAC/oa6GsNN6yT93rJBslGB25YSNxmPXEbbyW3vYjIbwOR3yYl/BYT+W0k8vOx7IZ14ABv6Jug+xhu8JW3n2SzxN+BG5YQt/EjbhOg5LaXEvltJvILVMJvGZGfP5FfkGU3+IIDAqAHQg8y3BAs7xDJFslWB25YTtwmhLjNNiW3vYLIbwuR33Yl/FYS+W0l8tth2Q3B4IBt0LdD32G4Yae8d0l2S/Y4cMMq4ja7iNvsVXLbq4n8dhP57VPCz4vIbw+R337LbtgJDtgLfR/0/YYbDsj7oOSQ5LADN6whbnOQuM0RJbe9lsjvEJHfUSX81hH5HSbyO2bZDQfAAUegH4V+zHDDcXmfkJyUnHLghvXEbU4Qtzmt5LY3EPmdJPI7o4TfRiK/U0R+Zy274Tg44DT0M9DPGm44J+/zkguSiw7c4E3c5jxxm0tKbnsTkd8FIr/LSvj5EPldJPK7YtkN58ABl6Bfhn7FcMNVeV+TXJfccOAGX+I214jb3FRy235EfteJ/G4p4beZyO8Gkd9ty264Cg64Cf0W9NuGG+7I+67knuS+Azf4E7e5S9zmgZLbDiDyu0fk91AJv0Aiv/tEfo8su+EOOOAB9IfQHxlueCzvJ5KnkmcO3BBE3OYJcZvnSm47mMjvKZHfCyX8Qoj8nhH5vbTshsfggOfQX0B/abjhlbxfS95I3jpwwxbiNq+J27xTcttbifzeEPm9V8JvG5HfWyK/D5bd8Aoc8A76e+gfDDd8lPcnyWfJFwdu2E7c5hNxm69KbnsHkd9nIr9vSvjtJPL7QuT33bIbPoIDvkL/Bv274YYf8v4p+SX57cANu4jb/CRu80fJbe8m8vtF5PdXCb89RH6/ifxCLbPrhh/ggD/Q/0L/9xvQDaHlHUYSVhJumX037CVuE2YZb5vwy3Tc9j4iv7BEfhGU8NtP5BeOyC+iZTeEXvb/DggPPQL0iIYbIsk7siSKJKoDNxwgbhOZuE00Jbd9kMgvCpFfdCX8DhH5RSXyi2HZDZHAAdGgR4cew3BDTHnHksSWxHHghsPEbWIRt4mr5LaPEPnFJvKLp4TfUSK/OER+8S27ISY4IC70eNDjG25IIO+EkkSSxA7ccIy4TULiNkmU3PZxIr9ERH5JlfA7QeSXmMgvmWU3JAAHJIGeFHoyww3J5Z1CklLiceCGk8RtUhC3SaXktk8R+aUk8kuthN9pIj8PkV8ay25IDg5IBT019DSGG9LKO50kvSSDAzecIW6TjrhNRiW3fZbILz2RXyYl/M4R+WUg8sts2Q1pwQEZoWeCntlwQxZ5Z5Vkk2R34IbzxG2yErfJoeS2LxD5ZSPyy6mE30Uiv+xEfrksuyELOCAH9JzQcxluyC3vPJK8knwO3HCJuE0e4jb5ldz2ZSK/vER+BZTwu0Lkl4/Ir6BlN+QGB+SHXgB6QcMNheRdWFJEUtSBG64StylM3KaYktu+RuRXhMivuBJ+14n8ihL5lbDshkLggGLQi0MvYbihpLxLSUpLyjhwww3iNqWI25RVcts3ifxKE/mVU8LvFpFfGSK/8pbdUBIcUBZ6OejlDTdUkHdFSSVJZQduuE3cpiJxmypKbvsOkV8lIr+qSvjdJfKrTORXzbIbKoADqkCvCr2a4Ybq8q4hqSmp5cAN94jb1CBuU1vJbd8n8qtJ5FdHCb8HRH61iPzqWnZDdXBAbeh1oNc13FBP3vUlDSQNHbjhIXGb+sRtGim57UdEfg2I/Bor4feYyK8hkV8Ty26oBw5oBL0x9CaGG5rKu5mkuaSFAzc8IW7TjLhNSyW3/ZTIrzmRXysl/J4R+bUg8mtt2Q1NwQEtobeC3tpwQxt5t5W0k7R34IbnxG3aErfpoOS2XxD5tSPy66iE30siv/ZEfp0su6ENOKAD9I7QOxlu6CzvLpKukm4O3PCKuE0X4jbdldz2ayK/rkR+PZTwe0Pk143Ir6dlN3QGB3SH3gN6T8MNveTdW9JH0teBG94St+lN3Kafktt+R+TXh8ivvxJ+74n8+hL5DbDshl7ggH7Q+0MfYLhhoLwHSQZLhjhwwwfiNoOI2wxVctsfifwGE/kNU8LvE5HfECK/4ZbdMBAcMBT6MOjDDTeMkPdIySjJaAdu+EzcZiRxmzFKbvsLkd8oIr+xSvh9JfIbTeQ3zrIbRoADxkAfC32c4Ybx8p4gmSiZ5MAN34jbTCBuM1nJbX8n8ptI5DdFCb8fRH6TiPymWnbDeHDAZOhToE813DBN3tMlMyQzHbjhJ3Gb6cRtZim57V9EfjOI/GYr4febyG8mkd8cy26YBg6YBX029DmGG+bKe55kvmSBAzf8IW4zj7jNQiW3/ZfIbz6R3yIl/EIV4H1rAZHfYstumAsOWAh9EfTFhhuWyHupZJlkuQM3hCZus5S4zQoltx2GyG8Zkd9KJfzCEvktJ/JbZdkNS8ABK6CvhL7KcMNqeXtJ1kjWOnBDOOI2XsRt1im57fBEfmuI/NYr4ReByG8tkd8Gy25YDQ5YB3099A2GGzbK21uySeLjwA0Ridt4E7fxVXLbkYj8NhH5+SnhF5nIz4fIb7NlN2wEB/hC94O+2XCDv7wDJIGSIAduiELcJoC4TbCS245K5BdI5BeihF80Ir8gIr8tlt3gDw4Ihh4CfYvhhq3y3ibZLtnhwA3RidtsI26zU8ltxyDy207kt0sJv5hEfjuI/HZbdsNWcMBO6Lug7zbcsEfeeyX7JPsduCEWcZu9xG0OKLnt2ER++4j8DirhF4fIbz+R3yHLbtgDDjgA/SD0Q4YbDsv7iOSo5JgDN8QlbnOEuM1xJbcdj8jvKJHfCSX84hP5HSPyO2nZDYfBAcehn4B+0nDDKXmflpyRnHXghgTEbU4Ttzmn5LYTEvmdIfI7r4RfIiK/s0R+Fyy74RQ44Bz089AvGG64KO9LksuSKw7ckJi4zSXiNleV3HYSIr/LRH7XlPBLSuR3hcjvumU3XAQHXIV+Dfp1ww035H1Tckty24EbkhG3uUnc5o6S205O5HeLyO+uEn4piPxuE/nds+yGG+CAO9DvQr9nuOG+vB9IHkoeOXBDSuI2D4jbPFZy2x4iv4dEfk+U8EtF5PeIyO+pZTfcBwc8hv4E+lPDDc/k/VzyQvLSgRtSE7d5TtzmlZLbTkPk94LI77USfmmJ/F4S+b2x7IZn4IBX0F9Df2O44a2830neSz44cEM64jbviNt8VHLb6Yn83hP5fVLCLwOR3wciv8+W3fAWHPAR+ifonw03fJH3V8k3yXcHbshI3OYrcZsfSm47E5HfNyK/n0r4ZSby+07k98uyG76AA35A/wn9l+GG3//ekr+SUMvtuyELcZs/xG1CL9dx21mJ/P4S+YVRwi8bkV+o5Tx+YZfbdcNvcMC/W/9fDwM97PL/uiGcvMNLIkgiOnBDduI24YnbRFJy2zmI/CIQ+UVWwi8nkV9EIr8olt0QDhwQCXpk6FEMN0SVdzRJdEkMB27IRdwmGnGbmEpuOzeRX3Qiv1hK+OUh8otB5BfbshuiggNiQo8FPbbhhjjyjiuJJ4nvwA15idvEJW6TQMlt5yPyi0fkl1AJv/xEfvGJ/BJZdkMccEAC6AmhJzLckFjeSSRJJckcuKEAcZskxG2SK7ntgkR+SYn8UijhV4jILxmRX0rLbkgMDkgOPQX0lIYbPPJOJUktSePADYWJ26QibpNWyW0XIfJLTeSXTgm/okR+aYj80lt2gwcckBZ6OujpDTdkkHdGSSZJZgduKEbcJiNxmyxKbrs4kV8mIr+sSviVIPLLTOSXzbIbMoADskDPCj2b4Ybs8s4hySnJ5cANJYnb5CBuk1vJbZci8stJ5JdHCb/SRH65iPzyWnZDdnBAbuh5oOc13JBP3vklBSQFHbihDHGb/MRtCim57bJEfgWI/Aor4VeOyK8gkV8Ry27IBw4oBL0w9CKGG4rKu5ikuKSEAzeUJ25TjLhNSSW3XYHIrziRXykl/CoS+ZUg8itt2Q1FwQEloZeCXtpwQxl5l5WUk5R34IZKxG3KErepoOS2KxP5lSPyq6iEXxUiv/JEfpUsu6EMOKAC9IrQKxluqCzvKpKqkmoO3FCVuE0V4jbVldx2NSK/qkR+NZTwq07kV43Ir6ZlN1QGB1SHXgN6TcMNteRdW1JHUteBG2oQt6lN3KaektuuSeRXh8ivvhJ+tYj86hL5NbDshlrggHrQ60NvYLihobwbSRpLmjhwQ23iNo2I2zRVctt1iPwaE/k1U8KvLpFfEyK/5pbd0BAc0BR6M+jNDTe0kHdLSStJawduqEfcpiVxmzZKbrs+kV8rIr+2Svg1IPJrTeTXzrIbWoAD2kBvC72d4Yb28u4g6Sjp5MANDYnbdCBu01nJbTci8utI5NdFCb/GRH6diPy6WnZDe3BAZ+hdoHc13NBN3t0lPSQ9HbihCXGb7sRteim57aZEfj2I/Hor4deMyK8nkV8fy27oBg7oBb039D6GG/rKu5+kv2SAAzc0J27Tj7jNQCW33YLIrz+R3yAl/FoS+Q0g8hts2Q19wQEDoQ+CPthwwxB5D5UMkwx34IZWxG2GErcZoeS2WxP5DSPyG6mEXxsiv+FEfqMsu2EIOGAE9JHQRxluGC3vMZKxknEO3NCWuM0Y4jbjldx2OyK/sUR+E5Twa0/kN47Ib6JlN4wGB4yHPgH6RMMNk+Q9WTJFMtWBGzoQt5lM3GaaktvuSOQ3hchvuhJ+nYj8phL5zbDshknggGnQp0OfYbhhprxnSWZL5jhwQ2fiNrOI28xVcttdiPxmE/nNU8KvK5HfHCK/+ZbdMBMcMBf6POjzDTcskPdCySLJYgdu6EbcZiFxmyVKbrs7kd8iIr+lSvj1IPJbTOS3zLIbFoADlkBfCn2Z4Ybl8l4hWSlZ5cANPYnbrCBus1rJbfci8ltJ5OelhF9vIr9VRH5rLLthOThgNXQv6GsMN6yV9zrJeskGB27oQ9xmHXGbjUpuuy+R33oiP28l/PoR+W0g8ttk2Q1rwQEboXtD32S4wUfevhI/yWYHbuhP3MaXuI2/ktseQOTnR+QXoITfQCK/zUR+gZbd4AMO8IceAD3QcEOQvIMlIZItDtwwiLhNMHGbrUpuezCRXwiR3zYl/IYQ+W0h8ttu2Q1B4ICt0LdB3264YYe8d0p2SXY7cMNQ4jY7idvsUXLbw4j8dhH57VXCbziR324iv32W3bADHLAH+l7o+ww37Jf3AclBySEHbhhB3OYAcZvDSm57JJHfQSK/I0r4jSLyO0Tkd9SyG/aDAw5DPwL9qOGGY/I+LjkhOenADaOJ2xwnbnNKyW2PIfI7QeR3Wgm/sUR+J4n8zlh2wzFwwCnop6GfMdxwVt7nJOclFxy4YRxxm3PEbS4que3xRH7nifwuKeE3gcjvApHfZctuOAsOuAj9EvTLhhuuyPuq5JrkugM3TCRuc5W4zQ0ltz2JyO8akd9NJfwmE/ldJ/K7ZdkNV8ABN6DfhH7LcMNted+R3JXcc+CGKcRt7hC3ua/ktqcS+d0l8nughN80Ir97RH4PLbvhNjjgPvQH0B8abngk78eSJ5KnDtwwnbjNY+I2z5Tc9gwivydEfs+V8JtJ5PeUyO+FZTc8Agc8g/4c+gvDDS/l/UryWvLGgRtmEbd5RdzmrZLbnk3k95rI750SfnOI/N4Q+b237IaX4IC30N9Bf2+44YO8P0o+ST47cMNc4jYfidt8UXLb84j8PhH5fVXCbz6R32civ2+W3fABHPAF+lfo3ww3fJf3D8lPyS8HblhA3OYHcZvfSm57IZHfTyK/P0r4LSLy+0Xk99eyG76DA35D/wP9r+GGUCtChwotCSMJu8K+GxYTt/n3u1nbhFuh47aXEPmFIfILr4TfUiK/sER+EVbYdcO/f87/54Bw0MNDj7Div26IKO9IksiSKA7csIy4TSTiNlGV3PZyIr/IRH7RlPBbQeQXhcgvumU3RAQHRIUeDXp0ww0x5B1TEksS24EbVhK3iUncJo6S215F5BeLyC+uEn6rifxiE/nFs+yGGOCAONDjQo9nuCG+vBNIEkoSOXCDF3GbBMRtEiu57TVEfgmJ/JIo4beWyC8RkV9Sy26IDw5IDD0J9KSGG5LJO7kkhSSlAzesI26TnLiNR8ltryfyS0Hkl0oJvw1EfimJ/FJbdkMycIAHeiroqQ03pJF3Wkk6SXoHbthI3CYtcZsMSm7bm8gvHZFfRiX8NhH5pSfyy2TZDWnAARmgZ4SeyXBDZnlnkWSVZHPgBh/iNlmI22RXctu+RH5ZifxyKOHnR+SXjcgvp2U3ZAYHZIeeA3pOww255J1bkkeS14EbNhO3yU3cJp+S2/Yn8stD5JdfCb8AIr+8RH4FLLshFzggH/T80AsYbigo70KSwpIiDtwQSNymEHGbokpuO4jIrzCRXzEl/IKJ/IoQ+RW37IaC4ICi0ItBL264ocS/3yQpJSntwA0hxG1KErcpo+S2txD5lSLyK6uE31Yiv9JEfuUsu6EEOKAM9LLQyxluKC/vCpKKkkoO3LCNuE0F4jaVldz2diK/ikR+VZTw20HkV4nIr6plN5QHB1SGXgV6VcMN1eRdXVJDUtOBG3YSt6lO3KaWktveReRXg8ivthJ+u4n8ahL51bHshmrggFrQa0OvY7ihrrzrSepLGjhwwx7iNvWI2zRUctt7ifzqE/k1UsJvH5FfAyK/xpbdUBcc0BB6I+iNDTc0kXdTSTNJcwdu2E/cpilxmxZKbvsAkV8zIr+WSvgdJPJrTuTXyrIbmoADWkBvCb2V4YbW8m4jaStp58ANh4jbtCFu017JbR8m8mtL5NdBCb8jRH7tiPw6WnZDa3BAe+gdoHc03NBJ3p0lXSRdHbjhKHGbzsRtuim57WNEfl2I/Lor4XecyK8rkV8Py27oBA7oBr079B6GG3rKu5ekt6SPAzecIG7Ti7hNXyW3fZLIrzeRXz8l/E4R+fUh8utv2Q09wQF9ofeD3t9wwwB5D5QMkgx24IbTxG0GErcZouS2zxD5DSLyG6qE31kiv8FEfsMsu2EAOGAI9KHQhxluGC7vEZKRklEO3HCOuM0I4jajldz2eSK/kUR+Y5Twu0DkN4rIb6xlNwwHB4yGPgb6WMMN4+Q9XjJBMtGBGy4StxlP3GaSktu+ROQ3gchvshJ+l4n8JhL5TbHshnHggEnQJ0OfYrhhqrynSaZLZjhwwxXiNtOI28xUcttXifymE/nNUsLvGpHfDCK/2ZbdMBUcMBP6LOizDTfMkfdcyTzJfAduuE7cZi5xmwVKbvsGkd88Ir+FSvjdJPKbT+S3yLIb5oADFkBfCH2R4YbF8l4iWSpZ5sANt4jbLCFus1zJbd8m8ltK5LdCCb87RH7LiPxWWnbDYnDAcugroK803LBK3qslXpI1Dtxwl7jNauI2a5Xc9j0iPy8iv3VK+N0n8ltD5LfeshtWgQPWQl8Hfb3hhg3y3ijxlmxy4IYHxG02ErfxUXLbD4n8vIn8fJXwe0Tkt4nIz8+yGzaAA3yg+0L3M9ywWd7+kgBJoAM3PCZu40/cJkjJbT8h8gsg8gtWwu8pkV8gkV+IZTdsBgcEQQ+GHmK4YYu8t0q2SbY7cMMz4jZbidvsUHLbz4n8thH57VTC7wWR33Yiv12W3bAFHLAD+k7ouww37Jb3HsleyT4HbnhJ3GYPcZv9Sm77FZHfXiK/A0r4vSby20fkd9CyG3aDA/ZDPwD9oOGGQ/I+LDkiOerADW+I2xwmbnNMyW2/JfI7QuR3XAm/d0R+R4n8Tlh2wyFwwDHox6GfMNxwUt6nJKclZxy44T1xm1PEbc4que0PRH6nifzOKeH3kcjvDJHfectuOAkOOAv9HPTzhhsuyPui5JLksgM3fCJuc5G4zRUlt/2ZyO8Skd9VJfy+EPldJvK7ZtkNF8ABV6BfhX7NcMN1ed+Q3JTccuCGr8RtbhC3ua3ktr8R+d0k8rujhN93Ir9bRH53LbvhOjjgNvQ70O8abrgn7/uSB5KHDtzwg7jNfeI2j5Tc9k8ivwdEfo+V8PtF5PeQyO+JZTfcAwc8gv4Y+hPDDU/l/UzyXPLCgRt+E7d5RtzmpZLb/kPk95zI75USfn+J/F4Q+b227Ian4ICX0F9Bf2244Y2830reSd47cEMoD/Hv7InbfFBy26GJ/N4R+X1Uwi8Mkd97Ir9Plt3wBhzwAfpH6J8MN3yW9xfJV8k3B24I6yH+vRJxm+9Kbjsckd9XIr8fSviFJ/L7RuT307IbPoMDvkP/Af2n4YZf8v79788kfx24IYKH+J9PiNuEWqnjtiMS+f0h8guthF8kIr+/RH5hVtp1wy9wwL9b/18PDT3Myv+6Iay8w0nCSyKstO+GyB7i/w1dydsmopLbjkLkF57IL5ISflGJ/CIQ+UW27Iaw4ICI0CNBj2y4IYq8o0qiSaI7cEM0D3Fn4jYxlNx2dCK/aER+MZXwi0HkF53IL5ZlN0QBB8SAHhN6LMMNseUdRxJXEs+BG2J6eN+KQ9wmvpLbjkXkF5fIL4ESfrGJ/OIR+SW07IbY4ID40BNAT2i4IZG8E0uSSJI6cEMcD+9biYnbJFNy23GJ/JIQ+SVXwi8ekV9SIr8Ult2QCByQDHpy6CkMN6SUt0eSSpLagRvie3jf8hC3SaPkthMQ+aUi8kurhF9CIr/URH7pLLshJTggDfS00NMZbkgv7wySjJJMDtyQyMP7VgbiNpmV3HZiIr+MRH5ZlPBLQuSXicgvq2U3pAcHZIaeBXpWww3Z5J1dkkOS04Ebknp438pO3CaXkttORuSXg8gvtxJ+yYn8chL55bHshmzggFzQc0PPY7ghr7zzSfJLCjhwQwoP71v5iNsUVHLbKYn88hP5FVLCz0PkV4DIr7BlN+QFBxSEXgh6YcMNReRdVFJMUtyBG1J5eN8qStymhJLbTk3kV4zIr6QSfmmI/IoT+ZWy7IYi4IAS0EtCL2W4obS8y0jKSso5cENaD+9bZYjblFdy2+mI/MoS+VVQwi89kV85Ir+Klt1QGhxQHnoF6BUNN1SSd2VJFUlVB27I4OF9qzJxm2pKbjsjkV8VIr/qSvhlIvKrSuRXw7IbKoEDqkGvDr2G4Yaa8q4lqS2p48ANmT28b9UiblNXyW1nIfKrTeRXTwm/rER+dYj86lt2Q01wQF3o9aDXN9zQQN4NJY0kjR24IZuH962GxG2aKLnt7ER+jYj8mirhl4PIrzGRXzPLbmgADmgCvSn0ZoYbmsu7haSlpJUDN+T08L7VgrhNayW3nYvIryWRXxsl/HIT+bUi8mtr2Q3NwQGtobeB3tZwQzt5t5d0kHR04IY8Ht632hO36aTktvMS+XUg8uushF8+Ir+ORH5dLLuhHTigE/TO0LsYbugq726S7pIeDtyQ38P7VjfiNj2V3HYBIr/uRH69lPArSOTXg8ivt2U3dAUH9ITeC3pvww195N1X0k/S34EbCnl43+pL3GaAktsuTOTXj8hvoBJ+RYj8+hP5DbLshj7ggAHQB0IfZLhhsLyHSIZKhjlwQ1EP71tDiNsMV3LbxYj8hhL5jVDCrziR3zAiv5GW3TAYHDAc+gjoIw03jJL3aMkYyVgHbijh4X1rNHGbcUpuuySR3xgiv/FK+JUi8htL5DfBshtGgQPGQR8PfYLhhonyniSZLJniwA2lPbxvTSJuM1XJbZch8ptM5DdNCb+yRH5TiPymW3bDRHDAVOjToE833DBD3jMlsySzHbihnIf3rZnEbeYoue3yRH6ziPzmKuFXgchvNpHfPMtumAEOmAN9LvR5hhvmy3uBZKFkkQM3VPTwvrWAuM1iJbddichvIZHfEiX8KhP5LSLyW2rZDfPBAYuhL4G+1HDDMnkvl6yQrHTghioe3reWE7dZpeS2qxL5rSDyW62EXzUiv5VEfl6W3bAMHLAK+mroXoYb1sh7rWSdZL0DN1T38L61lrjNBiW3XYPIbx2R30Yl/GoS+a0n8vO27IY14IAN0DdC9zbcsEnePhJfiZ8DN9Ty8L7lQ9xms5Lbrk3k50vk56+EXx0iPz8ivwDLbtgEDtgM3R96gOGGQHkHSYIlIQ7cUNfD+1YQcZstSm67HpFfMJHfViX86hP5hRD5bbPshkBwwBboW6FvM9ywXd47JDsluxy4oYGH960dxG12K7nthkR+O4n89ijh14jIbxeR317LbtgODtgNfQ/0vYYb9sl7v+SA5KADNzT28L61n7jNISW33YTI7wCR32El/JoS+R0k8jti2Q37wAGHoB+GfsRww1F5H5Mcl5xw4IZmHt63jhG3OanktpsT+R0n8julhF8LIr8TRH6nLbvhKDjgJPRT0E8bbjgj77OSc5LzDtzQ0sP71lniNheU3HYrIr9zRH4XlfBrTeR3nsjvkmU3nAEHXIB+Efolww2X5X1FclVyzYEb2nh437pC3Oa6kttuS+R3lcjvhhJ+7Yj8rhH53bTshsvggOvQb0C/abjhlrxvS+5I7jpwQ3sP71u3idvcU3LbHYj87hD53VfCryOR310ivweW3XALHHAP+n3oDww3PJT3I8ljyRMHbujk4X3rEXGbp0puuzOR32Miv2dK+HUh8ntC5PfcshseggOeQn8G/bnhhhfyfil5JXntwA1dPbxvvSRu80bJbXcj8ntF5PdWCb/uRH6vifzeWXbDC3DAG+hvob8z3PBe3h8kHyWfHLihh4f3rQ/EbT4rue2eRH4fify+KOHXi8jvE5HfV8tueA8O+Az9C/Svhhu+yfu75IfkpwM39PbwvvWduM0vJbfdh8jvB5HfbyX8+hL5/STy+2PZDd/AAb+g/4b+x3DDX3mHWhU6VGhJmFX23dDPw/vWv9/N2ibsKh233Z/ILzSRXzgl/AYQ+YUh8gu/yq4b/oID/t36/3o46OFX/dcNEeQdURJJEtmBGwZ6eN+KSNwmipLbHkTkF4nIL6oSfoOJ/CIT+UWz7IYI4IAo0KNCj2a4Ibq8Y0hiSmI5cMMQD+9bMYjbxFZy20OJ/GIS+cVRwm8YkV8sIr+4lt0QHRwQG3oc6HENN8STd3xJAklCB24Y7uF9Kz5xm0RKbnsEkV8CIr/ESviNJPJLSOSXxLIb4oEDEkFPDD2J4Yak8k4mSS5J4cANozy8byUjbpNSyW2PJvJLTuTnUcJvDJFfCiK/VJbdkBQckBK6B3oqww2p5Z1GklaSzoEbxnp430pD3Ca9ktseR+SXlsgvgxJ+44n80hH5ZbTshtTggPTQM0DPaLghk7wzS7JIsjpwwwQP71uZidtkU3LbE4n8shD5ZVfCbxKRX1YivxyW3ZAJHJANenboOQw35JR3LkluSR4Hbpjs4X0rF3GbvEpuewqRX24iv3xK+E0l8stD5JffshtyggPyQs8HPb/hhgLyLigpJCnswA3TPLxvFSRuU0TJbU8n8itE5FdUCb8ZRH6FifyKWXZDAXBAEehFoRcz3FBc3iX+/S5JKQdumOnhfasEcZvSSm57FpFfSSK/Mkr4zSbyK0XkV9ayG4qDA0pDLwO9rOGGcvIuL6kgqejADXM8vG+VJ25TScltzyXyq0DkV1kJv3lEfhWJ/KpYdkM5cEAl6JWhVzHcUFXe1STVJTUcuGG+h/etasRtaiq57QVEftWJ/Gop4beQyK8GkV9ty26oCg6oCb0W9NqGG+rIu66knqS+Azcs8vC+VZe4TQMlt72YyK8ekV9DJfyWEPnVJ/JrZNkNdcABDaA3hN7IcENjeTeRNJU0c+CGpR7et5oQt2mu5LaXEfk1JfJroYTfciK/ZkR+LS27oTE4oDn0FtBbGm5oJe/WkjaStg7csMJD/PeCErdpp+S2VxL5tSHya6+E3yoiv7ZEfh0su6EVOKAd9PbQOxhu6CjvTpLOki4O3LDaQ/z3yxG36arktr2I/DoT+XVTwm8NkV8XIr/ult3QERzQFXo36N0NN/SQd09JL0lvB25Y6yH+O5CI2/RRctvriPx6Efn1VcJvPZFfbyK/fpbd0AMc0Ad6X+j9DDf0l/cAyUDJIAdu2OAh/ns6iNsMVnLbG4n8BhL5DVHCz5vIbxCR31DLbugPDhgMfQj0oYYbhsl7uGSEZKQDN2zyEP/33sRtRim5bR8ivxFEfqOV8PMl8htJ5DfGshuGgQNGQR8NfYzhhrHyHicZL5ngwA1+HuL/JpG4zUQlt72ZyG88kd8kJfz8ifwmEPlNtuyGseCAidAnQZ9suGGKvKdKpkmmO3BDgIf4v5shbjNDyW0HEvlNI/KbqYRfEJHfdCK/WZbdMAUcMAP6TOizDDfMlvccyVzJPAduCPYQ//vXxG3mK7ntECK/uUR+C5Tw20LkN4/Ib6FlN8wGB8yHvgD6QsMNi+S9WLJEstSBG7Z6iP8dQeI2y5Tc9jYivyVEfsuV8NtO5LeUyG+FZTcsAgcsg74c+grDDSvlvUqyWuLlwA07PMT/HgtxmzVKbnsnkd9qIr+1SvjtIvLzIvJbZ9kNK8EBa6Cvhb7OcMN6eW+QbJR4O3DDbg/x/x9K3GaTktveQ+S3kcjPRwm/vUR+3kR+vpbdsB4csAm6D3Rfww1+8t4s8ZcEOHDDPg/x7+yJ2wQque39RH7+RH5BSvgdIPILIPILtuwGP3BAIPQg6MGGG0LkvUWyVbLNgRsOeoh/r0TcZruS2z5E5LeVyG+HEn6Hify2EfnttOyGEHDAdug7oO803LBL3rsleyR7HbjhiIf4n0+I2+xTcttHifz2EPntV8LvGJHfXiK/A5bdsAscsA/6fugHDDcclPchyWHJEQduOO4h/t9Q4jZHldz2CSK/w0R+x5TwO0nkd4TI77hlNxwEBxyFfgz6ccMNJ+R9UnJKctqBG055iDsTtzmj5LZPE/mdIvI7q4TfGSK/00R+5yy74QQ44Az0s9DPGW44L+8LkouSSw7ccNbD+9YF4jaXldz2OSK/i0R+V5TwO0/kd4nI76plN5wHB1yGfgX6VcMN1+R9XXJDctOBGy54eN+6TtzmlpLbvkjkd4PI77YSfpeI/G4S+d2x7IZr4IBb0G9Dv2O44a6870nuSx44cMNlD+9b94jbPFRy21eI/O4T+T1Swu8qkd8DIr/Hlt1wFxzwEPoj6I8NNzyR91PJM8lzB2645uF96ylxmxdKbvs6kd8zIr+XSvjdIPJ7TuT3yrIbnoADXkB/Cf2V4YbX8n4jeSt558ANNz28b70hbvNeyW3fIvJ7S+T3QQm/20R+74j8Plp2w2twwHvoH6B/NNzwSd6fJV8kXx244Y6H963PxG2+Kbntu0R+X4j8vivhd4/I7yuR3w/LbvgEDvgG/Tv0H4Ybfsr7l+T3vz934Ib7Ht63fhG3+avkth8Q+f0m8gu1Wge/h0R+f4j8Qq+264af4IC/0P/t9r8eevV/3RBG3mEl4SThV9t3wyMP71thV/O2iaDkth8T+YUj8ouohN8TIr/wRH6RLLshDDggAvSI0CMZbogs7yiSqJJoDtzw1MP7VhTiNtGV3PYzIr+oRH4xlPB7TuQXjcgvpmU3RAYHRIceA3pMww2x5B1bEkcS14EbXnh434pN3Caektt+SeQXh8gvvhJ+r4j84hL5JbDshljggHjQ40NPYLghobwTSRJLkjhww2sP71uJiNskVXLbb4j8EhP5JVPC7y2RXxIiv+SW3ZAQHJAUejLoyQ03pJB3SolHksqBG955eN9KSdwmtZLbfk/k5yHyS6OE3wciv1REfmktuyEFOCA19DTQ0xpuSCfv9JIMkowO3PDRw/tWeuI2mZTc9icivwxEfpmV8PtM5JeRyC+LZTekAwdkgp4ZehbDDVnlnU2SXZLDgRu+eHjfykbcJqeS2/5K5JedyC+XEn7fiPxyEPnltuyGrOCAnNBzQc9tuCGPvPNK8knyO3DDdw/vW3mJ2xRQcts/iPzyEfkVVMLvJ5FffiK/QpbdkAccUAB6QeiFDDcUlncRSVFJMQdu+OXhfasIcZviSm77N5FfUSK/Ekr4/SHyK0bkV9KyGwqDA4pDLwG9pOGGUvIuLSkjKevADX89vG+VJm5TTslth0rF+1YZIr/ySviFJvIrS+RXwbIbSoEDykEvD72C4YaK8q4kqSyp4sANYYjbVCJuU1XJbYcl8qtM5FdNCb9wRH5ViPyqW3ZDRXBAVejVoFc33FBD3jUltSS1HbghPHGbmsRt6ii57QhEfrWI/Ooq4ReRyK82kV89y26oAQ6oA70u9HqGG+rLu4GkoaSRAzdEIm7TgLhNYyW3HZnIryGRXxMl/KIQ+TUi8mtq2Q31wQGNoTeB3tRwQzN5N5e0kLR04IaoxG2aE7dppeS2oxH5tSDya62EX3Qiv5ZEfm0su6EZOKAV9NbQ2xhuaCvvdpL2kg4O3BCDuE074jYdldx2TCK/9kR+nZTwi0Xk14HIr7NlN7QFB3SE3gl6Z8MNXeTdVdJN0t2BG2ITt+lK3KaHktuOQ+TXjcivpxJ+cYn8uhP59bLshi7ggB7Qe0LvZbiht7z7SPpK+jlwQzziNn2I2/RXctvxifz6EvkNUMIvAZFfPyK/gZbd0Bsc0B/6AOgDDTcMkvdgyRDJUAduSEjcZjBxm2FKbjsRkd8QIr/hSvglJvIbSuQ3wrIbBoEDhkEfDn2E4YaR8h4lGS0Z48ANSYjbjCJuM1bJbScl8htN5DdOCb9kRH5jiPzGW3bDSHDAWOjjoI833DBB3hMlkySTHbghOXGbicRtpii57RREfpOI/KYq4ZeSyG8ykd80y26YAA6YAn0q9GmGG6bLe4ZkpmSWAzd4iNvMIG4zW8ltpyLym0nkN0cJv9REfrOI/OZadsN0cMBs6HOgzzXcME/e8yULJAsduCENcZv5xG0WKbnttER+C4j8Fivhl47IbyGR3xLLbpgHDlgEfTH0JYYblsp7mWS5ZIUDN6QnbrOMuM1KJbedgchvOZHfKiX8MhL5rSDyW23ZDUvBASuhr4K+2nCDl7zXSNZK1jlwQybiNmuI26xXctuZifzWEvltUMIvC5HfOiK/jZbd4AUOWA99A/SNhhu85b1J4iPxdeCGrMRtNhG38VNy29mI/HyI/DYr4ZedyM+XyM/fshu8wQF+0DdD9zfcECDvQEmQJNiBG3IQtwkkbhOi5LZzEvkFEfltUcIvF5FfMJHfVstuCAAHhEDfAn2r4YZt8t4u2SHZ6cANuYnbbCdus0vJbech8ttB5LdbCb+8RH47ifz2WHbDNnDALui7oe8x3LBX3vsk+yUHHLghH3GbfcRtDiq57fxEfvuJ/A4p4VeAyO8Akd9hy27YCw44CP0Q9MOGG47I+6jkmOS4AzcUJG5zlLjNCSW3XYjI7xiR30kl/AoT+R0n8jtl2Q1HwAEnoJ+Efspww2l5n5GclZxz4IYixG3OELc5r+S2ixL5nSXyu6CEXzEiv3NEfhctu+E0OOA89AvQLxpuuCTvy5IrkqsO3FCcuM1l4jbXlNx2CSK/K0R+15XwK0nkd5XI74ZlN1wCB1yDfh36DcMNN+V9S3JbcseBG0oRt7lF3OauktsuTeR3m8jvnhJ+ZYj87hD53bfshpvggLvQ70G/b7jhgbwfSh5JHjtwQ1niNg+J2zxRctvliPweEfk9VcKvPJHfYyK/Z5bd8AAc8AT6U+jPDDc8l/cLyUvJKwduqEDc5gVxm9dKbrsikd9LIr83SvhVIvJ7ReT31rIbnoMDXkN/A/2t4YZ38n4v+SD56MANlYnbvCdu80nJbVch8vtA5PdZCb+qRH4fify+WHbDO3DAJ+ifoX8x3PBV3t8k3yU/HLihGnGbb8Rtfiq57epEft+J/H4p4VeDyO8Hkd9vy274Cg74Cf0X9N+GG/7I+68klFfoUKG97LuhJnGbv8RtwnjpuO1aRH6hvHj8wirhV5vILzSRXzgvu274Aw74d+v/62Ghh/P6rxvCyzuCJKIkkgM31CFuE4G4TWQlt12XyC8ikV8UJfzqEflFIvKLatkN4cEBkaFHgR7VcEM0eUeXxJDEdOCG+sRtohO3iaXkthsQ+cUg8outhF9DIr+YRH5xLLshGjggFvTY0OMYbogr73iS+JIEDtzQiLhNPOI2CZXcdmMiv/hEfomU8GtC5JeAyC+xZTfEBQckhJ4IemLDDUnknVSSTJLcgRuaErdJStwmhZLbbkbkl4zIL6USfs2J/JIT+XksuyEJOCAF9JTQPYYbUsk7tSSNJK0DN7QgbpOauE06JbfdksgvDZFfeiX8WhH5pSXyy2DZDanAAemgp4eewXBDRnlnkmSWZHHghtbEbTIRt8mq5LbbEPllJvLLpoRfWyK/LER+2S27ISM4ICv0bNCzG27IIe+cklyS3A7c0I64TU7iNnmU3HZ7Ir9cRH55lfDrQOSXm8gvn2U35AAH5IGeF3o+ww355V1AUlBSyIEbOhK3KUDcprCS2+5E5FeQyK+IEn6difwKEfkVteyG/OCAwtCLQC9quKGYvItLSvz7bQ7c0IW4TXHiNqWU3HZXIr8SRH6llfDrRuRXksivjGU3FAMHlIJeGnoZww1l5V1OUl5SwYEbuhO3KUfcpqKS2+5B5FeeyK+SEn49ifwqEPlVtuyGsuCAitArQa9suKGKvKtKqkmqO3BDL+I2VYnb1FBy272J/KoR+dVUwq8PkV91Ir9alt1QBRxQA3pN6LUMN9SWdx1JXUk9B27oS9ymDnGb+kpuux+RX10ivwZK+PUn8qtH5NfQshtqgwPqQ28AvaHhhkbybixpImnqwA0DiNs0Jm7TTMltDyTya0Lk11wJv0FEfk2J/FpYdkMjcEAz6M2htzDc0FLerSStJW0cuGEwcZtWxG3aKrntIUR+rYn82inhN5TIrw2RX3vLbmgJDmgLvR309oYbOsi7o6STpLMDNwwjbtORuE0XJbc9nMivE5FfVyX8RhD5dSby62bZDR3AAV2gd4XezXBDd3n3kPSU9HLghpHEbXoQt+mt5LZHEfn1JPLro4TfaCK/XkR+fS27oTs4oDf0PtD7Gm7oJ+/+kgGSgQ7cMIa4TX/iNoOU3PZYIr8BRH6DlfAbR+Q3kMhviGU39AMHDII+GPoQww1D5T1MMlwywoEbxhO3GUbcZqSS255A5DecyG+UEn4TifxGEPmNtuyGoeCAkdBHQR9tuGGMvMdKxknGO3DDJOI2Y4nbTFBy25OJ/MYR+U1Uwm8Kkd94Ir9Jlt0wBhwwAfpE6JMMN0yW9xTJVMk0B26YStxmCnGb6UpuexqR31QivxlK+E0n8ptG5DfTshsmgwOmQ58Bfabhhlnyni2ZI5nrwA0ziNvMJm4zT8ltzyTym0PkN18Jv1lEfnOJ/BZYdsMscMA86POhLzDcsFDeiySLJUscuGE2cZtFxG2WKrntOUR+i4n8linhN5fIbwmR33LLblgIDlgKfRn05YYbVsh7pWSVZLUDN8wjbrOSuI2XktueT+S3ishvjRJ+C4j8VhP5rbXshhXgAC/oa6CvNdywTt7rJRskGx24YSFxm/XEbbyV3PYiIr8NRH6blPBbTOS3kcjPx7Ib1oEDvKFvgu5juMFX3n6SzRJ/B25YQtzGj7hNgJLbXkrkt5nIL1AJv2VEfv5EfkGW3eALDgiAHgg9yHBDsLxDJFskWx24YTlxmxDiNtuU3PYKIr8tRH7blfBbSeS3lchvh2U3BIMDtkHfDn2H4Yad8t4l2S3Z48ANq4jb7CJus1fJba8m8ttN5LdPCT8vIr89RH77LbthJzhgL/R90Pcbbjgg74OSQ5LDDtywhrjNQeI2R5Tc9loiv0NEfkeV8FtH5HeYyO+YZTccAAccgX4U+jHDDcflfUJyUnLKgRvWE7c5QdzmtJLb3kDkd5LI74wSfhuJ/E4R+Z217Ibj4IDT0M9AP2u44Zy8z0suSC46cIM3cZvzxG0uKbntTUR+F4j8Livh50Pkd5HI74plN5wDB1yCfhn6FcMNV+V9TXJdcsOBG3yJ21wjbnNTyW37EfldJ/K7pYTfZiK/G0R+ty274So44Cb0W9BvG264I++7knuS+w7c4E/c5i5xmwdKbjuAyO8ekd9DJfwCifzuE/k9suyGO+CAB9AfQn9kuOGxvJ9InkqeOXBDEHGbJ8Rtniu57WAiv6dEfi+U8Ash8ntG5PfSshsegwOeQ38B/aXhhlfyfi15I3nrwA1biNu8Jm7zTsltbyXye0Pk914Jv21Efm+J/D5YdsMrcMA76O+hfzDc8FHenySfJV8cuGE7cZtPxG2+KrntHUR+n4n8vinht5PI7wuR33fLbvgIDvgK/Rv074Ybfsj7p+SX5LcDN+wibvOTuM0fJbe9m8jvF5HfXyX89hD5/SbyC7XGrht+gAP+QP8L/d9vQDeElncYSVhJuDX23bCXuE2YNbxtwq/Rcdv7iPzCEvlFUMJvP5FfOCK/iJbdEHrN/zsgPPQI0CMabogk78iSKJKoDtxwgLhNZOI20ZTc9kEivyhEftGV8DtE5BeVyC+GZTdEAgdEgx4degzDDTHlHUsSWxLHgRsOE7eJRdwmrpLbPkLkF5vIL54SfkeJ/OIQ+cW37IaY4IC40ONBj2+4IYG8E0oSSRI7cMMx4jYJidskUXLbx4n8EhH5JVXC7wSRX2Iiv2SW3ZAAHJAEelLoyQw3JJd3CklKiceBG04St0lB3CaVkts+ReSXksgvtRJ+p4n8PER+aSy7ITk4IBX01NDTGG5IK+90kvSSDA7ccIa4TTriNhmV3PZZIr/0RH6ZlPA7R+SXgcgvs2U3pAUHZISeCXpmww1Z5J1Vkk2S3YEbzhO3yUrcJoeS275A5JeNyC+nEn4XifyyE/nlsuyGLOCAHNBzQs9luCG3vPNI8kryOXDDJeI2eYjb5Fdy25eJ/PIS+RVQwu8KkV8+Ir+Clt2QGxyQH3oB6AUNNxSSd2FJEUlRB264StymMHGbYkpu+xqRXxEiv+JK+F0n8itK5FfCshsKgQOKQS8OvYThhpLyLiUpLSnjwA03iNuUIm5TVslt3yTyK03kV04Jv1tEfmWI/MpbdkNJcEBZ6OWglzfcUEHeFSWVJJUduOE2cZuKxG2qKLntO0R+lYj8qirhd5fIrzKRXzXLbqgADqgCvSr0aoYbqsu7hqSmpJYDN9wjblODuE1tJbd9n8ivJpFfHSX8HhD51SLyq2vZDdXBAbWh14Fe13BDPXnXlzSQNHTghofEbeoTt2mk5LYfEfk1IPJrrITfYyK/hkR+TSy7oR44oBH0xtCbGG5oKu9mkuaSFg7c8IS4TTPiNi2V3PZTIr/mRH6tlPB7RuTXgsivtWU3NAUHtITeCnprww1t5N1W0k7S3oEbnhO3aUvcpoOS235B5NeOyK+jEn4vifzaE/l1suyGNuCADtA7Qu9kuKGzvLtIukq6OXDDK+I2XYjbdFdy26+J/LoS+fVQwu8NkV83Ir+elt3QGRzQHXoP6D0NN/SSd29JH0lfB254S9ymN3Gbfkpu+x2RXx8iv/5K+L0n8utL5DfAsht6gQP6Qe8PfYDhhoHyHiQZLBniwA0fiNsMIm4zVMltfyTyG0zkN0wJv09EfkOI/IZbdsNAcMBQ6MOgDzfcMELeIyWjJKMduOEzcZuRxG3GKLntL0R+o4j8xirh95XIbzSR3zjLbhgBDhgDfSz0cYYbxst7gmSiZJIDN3wjbjOBuM1kJbf9nchvIpHfFCX8fhD5TSLym2rZDePBAZOhT4E+1XDDNHlPl8yQzHTghp/EbaYTt5ml5LZ/EfnNIPKbrYTfbyK/mUR+cyy7YRo4YBb02dDnGG6YK+95kvmSBQ7c8Ie4zTziNguV3PZfIr/5RH6LlPALlZr3rQVEfostu2EuOGAh9EXQFxtuWCLvpZJlkuUO3BCauM1S4jYrlNx2GCK/ZUR+K5XwC0vkt5zIb5VlNywBB6yAvhL6KsMNq+XtJVkjWevADeGI23gRt1mn5LbDE/mtIfJbr4RfBCK/tUR+Gyy7YTU4YB309dA3GG7YKG9vySaJjwM3RCRu403cxlfJbUci8ttE5OenhF9kIj8fIr/Nlt2wERzgC90P+mbDDf7yDpAESoIcuCEKcZsA4jbBSm47KpFfIJFfiBJ+0Yj8goj8tlh2gz84IBh6CPQthhu2ynubZLtkhwM3RCdus424zU4ltx2DyG87kd8uJfxiEvntIPLbbdkNW8EBO6Hvgr7bcMMeee+V7JPsd+CGWMRt9hK3OaDktmMT+e0j8juohF8cIr/9RH6HLLthDzjgAPSD0A8Zbjgs7yOSo5JjDtwQl7jNEeI2x5Xcdjwiv6NEfieU8ItP5HeMyO+kZTccBgcch34C+knDDafkfVpyRnLWgRsSELc5TdzmnJLbTkjkd4bI77wSfomI/M4S+V2w7IZT4IBz0M9Dv2C44aK8L0kuS644cENi4jaXiNtcVXLbSYj8LhP5XVPCLymR3xUiv+uW3XARHHAV+jXo1w033JD3TcktyW0HbkhG3OYmcZs7Sm47OZHfLSK/u0r4pSDyu03kd8+yG26AA+5Avwv9nuGG+/J+IHkoeeTADSmJ2zwgbvNYyW17iPweEvk9UcIvFZHfIyK/p5bdcB8c8Bj6E+hPDTc8k/dzyQvJSwduSE3c5jlxm1dKbjsNkd8LIr/XSvilJfJ7SeT3xrIbnoEDXkF/Df2N4Ya38n4neS/54MAN6YjbvCNu81HJbacn8ntP5PdJCb8MRH4fiPw+W3bDW3DAR+ifoH823PBF3l8l3yTfHbghI3Gbr8Rtfii57UxEft+I/H4q4ZeZyO87kd8vy274Ag74Af0n9F+GG37/e0v+SkKtte+GLMRt/hC3Cb1Wx21nJfL7S+QXRgm/bER+odby+IVda9cNv8EB/279fz0M9LBr/+uGcPIOL4kgiejADdmJ24QnbhNJyW3nIPKLQOQXWQm/nER+EYn8olh2QzhwQCTokaFHMdwQVd7RJNElMRy4IRdxm2jEbWIque3cRH7RifxiKeGXh8gvBpFfbMtuiAoOiAk9FvTYhhviyDuuJJ4kvgM35CVuE5e4TQIlt52PyC8ekV9CJfzyE/nFJ/JLZNkNccABCaAnhJ7IcENieSeRJJUkc+CGAsRtkhC3Sa7ktgsS+SUl8kuhhF8hIr9kRH4pLbshMTggOfQU0FMabvDIO5UktSSNAzcUJm6TirhNWiW3XYTILzWRXzol/IoS+aUh8ktv2Q0ecEBa6OmgpzfckEHeGSWZJJkduKEYcZuMxG2yKLnt4kR+mYj8sirhV4LILzORXzbLbsgADsgCPSv0bIYbsss7hySnJJcDN5QkbpODuE1uJbddisgvJ5FfHiX8ShP55SLyy2vZDdnBAbmh54Ge13BDPnnnlxSQFHTghjLEbfITtymk5LbLEvkVIPIrrIRfOSK/gkR+RSy7IR84oBD0wtCLGG4oKu9ikuKSEg7cUJ64TTHiNiWV3HYFIr/iRH6llPCrSORXgsivtGU3FAUHlIReCnppww1l5F1WUk5S3oEbKhG3KUvcpoKS265M5FeOyK+iEn5ViPzKE/lVsuyGMuCACtArQq9kuKGyvKtIqkqqOXBDVeI2VYjbVFdy29WI/KoS+dVQwq86kV81Ir+alt1QGRxQHXoN6DUNN9SSd21JHUldB26oQdymNnGbekpuuyaRXx0iv/pK+NUi8qtL5NfAshtqgQPqQa8PvYHhhobybiRpLGniwA21ids0Im7TVMlt1yHya0zk10wJv7pEfk2I/JpbdkNDcEBT6M2gNzfc0ELeLSWtJK0duKEecZuWxG3aKLnt+kR+rYj82irh14DIrzWRXzvLbmgBDmgDvS30doYb2su7g6SjpJMDNzQkbtOBuE1nJbfdiMivI5FfFyX8GhP5dSLy62rZDe3BAZ2hd4He1XBDN3l3l/SQ9HTghibEbboTt+ml5LabEvn1IPLrrYRfMyK/nkR+fSy7oRs4oBf03tD7GG7oK+9+kv6SAQ7c0Jy4TT/iNgOV3HYLIr/+RH6DlPBrSeQ3gMhvsGU39AUHDIQ+CPpgww1D5D1UMkwy3IEbWhG3GUrcZoSS225N5DeMyG+kEn5tiPyGE/mNsuyGIeCAEdBHQh9luGG0vMdIxkrGOXBDW+I2Y4jbjFdy2+2I/MYS+U1Qwq89kd84Ir+Jlt0wGhwwHvoE6BMNN0yS92TJFMlUB27oQNxmMnGbaUpuuyOR3xQiv+lK+HUi8ptK5DfDshsmgQOmQZ8OfYbhhpnyniWZLZnjwA2didvMIm4zV8ltdyHym03kN08Jv65EfnOI/OZbdsNMcMBc6POgzzfcsEDeCyWLJIsduKEbcZuFxG2WKLnt7kR+i4j8lirh14PIbzGR3zLLblgADlgCfSn0ZYYblst7hWSlZJUDN/QkbrOCuM1qJbfdi8hvJZGflxJ+vYn8VhH5rbHshuXggNXQvaCvMdywVt7rJOslGxy4oQ9xm3XEbTYque2+RH7rify8lfDrR+S3gchvk2U3rAUHbITuDX2T4QYfeftK/CSbHbihP3EbX+I2/kpuewCRnx+RX4ASfgOJ/DYT+QVadoMPOMAfegD0QMMNQfIOloRItjhwwyDiNsHEbbYque3BRH4hRH7blPAbQuS3hchvu2U3BIEDtkLfBn274YYd8t4p2SXZ7cANQ4nb7CRus0fJbQ8j8ttF5LdXCb/hRH67ifz2WXbDDnDAHuh7oe8z3LBf3gckByWHHLhhBHGbA8RtDiu57ZFEfgeJ/I4o4TeKyO8Qkd9Ry27YDw44DP0I9KOGG47J+7jkhOSkAzeMJm5znLjNKSW3PYbI7wSR32kl/MYS+Z0k8jtj2Q3HwAGnoJ+GfsZww1l5n5Ocl1xw4IZxxG3OEbe5qOS2xxP5nSfyu6SE3wQivwtEfpctu+EsOOAi9EvQLxtuuCLvq5JrkusO3DCRuM1V4jY3lNz2JCK/a0R+N5Xwm0zkd53I75ZlN1wBB9yAfhP6LcMNt+V9R3JXcs+BG6YQt7lD3Oa+ktueSuR3l8jvgRJ+04j87hH5PbTshtvggPvQH0B/aLjhkbwfS55Injpww3TiNo+J2zxTctsziPyeEPk9V8JvJpHfUyK/F5bd8Agc8Az6c+gvDDe8lPcryWvJGwdumEXc5hVxm7dKbns2kd9rIr93SvjNIfJ7Q+T33rIbXoID3kJ/B/294YYP8v4o+ST57MANc4nbfCRu80XJbc8j8vtE5PdVCb/5RH6fify+WXbDB3DAF+hfoX8z3PBd3j8kPyW/HLhhAXGbH8Rtfiu57YVEfj+J/P4o4beIyO8Xkd9fy274Dg74Df0P9L+GG0KtCx0qtCSMJOw6+25YTNzm3+9mbRNunY7bXkLkF4bIL7wSfkuJ/MIS+UVYZ9cN//45/58DwkEPDz3Cuv+6IaK8I0kiS6I4cMMy4jaRiNtEVXLby4n8IhP5RVPCbwWRXxQiv+iW3RARHBAVejTo0Q03xJB3TEksSWwHblhJ3CYmcZs4Sm57FZFfLCK/uEr4rSbyi03kF8+yG2KAA+JAjws9nuGG+PJOIEkoSeTADV7EbRIQt0ms5LbXEPklJPJLooTfWiK/RER+SS27IT44IDH0JNCTGm5IJu/kkhSSlA7csI64TXLiNh4lt72eyC8FkV8qJfw2EPmlJPJLbdkNycABHuipoKc23JBG3mkl6STpHbhhI3GbtMRtMii5bW8iv3REfhmV8NtE5JeeyC+TZTekAQdkgJ4ReibDDZnlnUWSVZLNgRt8iNtkIW6TXclt+xL5ZSXyy6GEnx+RXzYiv5yW3ZAZHJAdeg7oOQ035JJ3bkkeSV4HbthM3CY3cZt8Sm7bn8gvD5FffiX8Aoj88hL5FbDshlzggHzQ80MvYLihoLwLSQpLijhwQyBxm0LEbYoque0gIr/CRH7FlPALJvIrQuRX3LIbCoIDikIvBr244YYS/36TpJSktAM3hBC3KUncpoyS295C5FeKyK+sEn5bifxKE/mVs+yGEuCAMtDLQi9nuKG8vCtIKkoqOXDDNuI2FYjbVFZy29uJ/CoS+VVRwm8HkV8lIr+qlt1QHhxQGXoV6FUNN1STd3VJDUlNB27YSdymOnGbWkpuexeRXw0iv9pK+O0m8qtJ5FfHshuqgQNqQa8NvY7hhrryriepL2ngwA17iNvUI27TUMlt7yXyq0/k10gJv31Efg2I/BpbdkNdcEBD6I2gNzbc0ETeTSXNJM0duGE/cZumxG1aKLntA0R+zYj8Wirhd5DIrzmRXyvLbmgCDmgBvSX0VoYbWsu7jaStpJ0DNxwibtOGuE17Jbd9mMivLZFfByX8jhD5tSPy62jZDa3BAe2hd4De0XBDJ3l3lnSRdHXghqPEbToTt+mm5LaPEfl1IfLrroTfcSK/rkR+PSy7oRM4oBv07tB7GG7oKe9ekt6SPg7ccIK4TS/iNn2V3PZJIr/eRH79lPA7ReTXh8ivv2U39AQH9IXeD3p/ww0D5D1QMkgy2IEbThO3GUjcZoiS2z5D5DeIyG+oEn5nifwGE/kNs+yGAeCAIdCHQh9muGG4vEdIRkpGOXDDOeI2I4jbjFZy2+eJ/EYS+Y1Rwu8Ckd8oIr+xlt0wHBwwGvoY6GMNN4yT93jJBMlEB264SNxmPHGbSUpu+xKR3wQiv8lK+F0m8ptI5DfFshvGgQMmQZ8MfYrhhqnyniaZLpnhwA1XiNtMI24zU8ltXyXym07kN0sJv2tEfjOI/GZbdsNUcMBM6LOgzzbcMEfecyXzJPMduOE6cZu5xG0WKLntG0R+84j8Firhd5PIbz6R3yLLbpgDDlgAfSH0RYYbFst7iWSpZJkDN9wibrOEuM1yJbd9m8hvKZHfCiX87hD5LSPyW2nZDYvBAcuhr4C+0nDDKnmvlnhJ1jhww13iNquJ26xVctv3iPy8iPzWKeF3n8hvDZHfestuWAUOWAt9HfT1hhs2yHujxFuyyYEbHhC32UjcxkfJbT8k8vMm8vNVwu8Rkd8mIj8/y27YAA7wge4L3c9ww2Z5+0sCJIEO3PCYuI0/cZsgJbf9hMgvgMgvWAm/p0R+gUR+IZbdsBkcEAQ9GHqI4YYt8t4q2SbZ7sANz4jbbCVus0PJbT8n8ttG5LdTCb8XRH7bifx2WXbDFnDADug7oe8y3LBb3nskeyX7HLjhJXGbPcRt9iu57VdEfnuJ/A4o4feayG8fkd9By27YDQ7YD/0A9IOGGw7J+7DkiOSoAze8IW5zmLjNMSW3/ZbI7wiR33El/N4R+R0l8jth2Q2HwAHHoB+HfsJww0l5n5Kclpxx4Ib3xG1OEbc5q+S2PxD5nSbyO6eE30civzNEfuctu+EkOOAs9HPQzxtuuCDvi5JLkssO3PCJuM1F4jZXlNz2ZyK/S0R+V5Xw+0Lkd5nI75plN1wAB1yBfhX6NcMN1+V9Q3JTcsuBG74St7lB3Oa2ktv+RuR3k8jvjhJ+34n8bhH53bXshuvggNvQ70C/a7jhnrzvSx5IHjpwww/iNveJ2zxScts/ifweEPk9VsLvF5HfQyK/J5bdcA8c8Aj6Y+hPDDc8lfczyXPJCwdu+E3c5hlxm5dKbvsPkd9zIr9XSvj9JfJ7QeT32rIbnoIDXkJ/Bf214YY38n4reSd578ANodIQ/86euM0HJbcdmsjvHZHfRyX8whD5vSfy+2TZDW/AAR+gf4T+yXDDZ3l/kXyVfHPghrDEbb4Qt/mu5LbDEfl9JfL7oYRfeCK/b0R+Py274TM44Dv0H9B/Gm74Je/f//5M8teBGyIQt/lN3CbUeh23HZHI7w+RX2gl/CIR+f0l8guz3q4bfoED/t36/3po6GHW/9cNYeUdThJeEmG9fTdEJm4Tbj1vm4hKbjsKkV94Ir9ISvhFJfKLQOQX2bIbwoIDIkKPBD2y4YYo8o4qiSaJ7sAN0YjbRCVuE0PJbUcn8otG5BdTCb8YRH7RifxiWXZDFHBADOgxoccy3BBb3nEkcSXxHLghJnGbOMRt4iu57VhEfnGJ/BIo4RebyC8ekV9Cy26IDQ6IDz0B9ISGGxLJO7EkiSSpAzfEIW6TmLhNMiW3HZfILwmRX3Il/OIR+SUl8kth2Q2JwAHJoCeHnsJwQ0p5eySpJKkduCE+cRsPcZs0Sm47AZFfKiK/tEr4JSTyS03kl86yG1KCA9JATws9neGG9PLOIMkoyeTADYmI22QgbpNZyW0nJvLLSOSXRQm/JER+mYj8slp2Q3pwQGboWaBnNdyQTd7ZJTkkOR24ISlxm+zEbXIpue1kRH45iPxyK+GXnMgvJ5FfHstuyAYOyAU9N/Q8hhvyyjufJL+kgAM3pCBuk4+4TUElt52SyC8/kV8hJfw8RH4FiPwKW3ZDXnBAQeiFoBc23FBE3kUlxSTFHbghFXGbosRtSii57dREfsWI/Eoq4ZeGyK84kV8py24oAg4oAb0k9FKGG0rLu4ykrKScAzekJW5ThrhNeSW3nY7IryyRXwUl/NIT+ZUj8qto2Q2lwQHloVeAXtFwQyV5V5ZUkVR14IYMxG0qE7eppuS2MxL5VSHyq66EXyYiv6pEfjUsu6ESOKAa9OrQaxhuqCnvWpLakjoO3JCZuE0t4jZ1ldx2FiK/2kR+9ZTwy0rkV4fIr75lN9QEB9SFXg96fcMNDeTdUNJI0tiBG7IRt2lI3KaJktvOTuTXiMivqRJ+OYj8GhP5NbPshgbggCbQm0JvZrihubxbSFpKWjlwQ07iNi2I27RWctu5iPxaEvm1UcIvN5FfKyK/tpbd0Bwc0Bp6G+htDTe0k3d7SQdJRwduyEPcpj1xm05KbjsvkV8HIr/OSvjlI/LrSOTXxbIb2oEDOkHvDL2L4Yau8u4m6S7p4cAN+YnbdCNu01PJbRcg8utO5NdLCb+CRH49iPx6W3ZDV3BAT+i9oPc23NBH3n0l/ST9HbihEHGbvsRtBii57cJEfv2I/AYq4VeEyK8/kd8gy27oAw4YAH0g9EGGGwbLe4hkqGSYAzcUJW4zhLjNcCW3XYzIbyiR3wgl/IoT+Q0j8htp2Q2DwQHDoY+APtJwwyh5j5aMkYx14IYSxG1GE7cZp+S2SxL5jSHyG6+EXykiv7FEfhMsu2EUOGAc9PHQJxhumCjvSZLJkikO3FCauM0k4jZTldx2GSK/yUR+05TwK0vkN4XIb7plN0wEB0yFPg36dMMNM+Q9UzJLMtuBG8oRt5lJ3GaOktsuT+Q3i8hvrhJ+FYj8ZhP5zbPshhnggDnQ50KfZ7hhvrwXSBZKFjlwQ0XiNguI2yxWctuViPwWEvktUcKvMpHfIiK/pZbdMB8csBj6EuhLDTcsk/dyyQrJSgduqELcZjlxm1VKbrsqkd8KIr/VSvhVI/JbSeTnZdkNy8ABq6Cvhu5luGGNvNdK1knWO3BDdeI2a4nbbFBy2zWI/NYR+W1Uwq8mkd96Ij9vy25YAw7YAH0jdG/DDZvk7SPxlfg5cEMt4jY+xG02K7nt2kR+vkR+/kr41SHy8yPyC7Dshk3ggM3Q/aEHGG4IlHeQJFgS4sANdYnbBBG32aLktusR+QUT+W1Vwq8+kV8Ikd82y24IBAdsgb4V+jbDDdvlvUOyU7LLgRsaELfZQdxmt5Lbbkjkt5PIb48Sfo2I/HYR+e217Ibt4IDd0PdA32u4YZ+890sOSA46cENj4jb7idscUnLbTYj8DhD5HVbCrymR30EivyOW3bAPHHAI+mHoRww3HJX3MclxyQkHbmhG3OYYcZuTSm67OZHfcSK/U0r4tSDyO0Hkd9qyG46CA05CPwX9tOGGM/I+KzknOe/ADS2J25wlbnNByW23IvI7R+R3UQm/1kR+54n8Lll2wxlwwAXoF6FfMtxwWd5XJFcl1xy4oQ1xmyvEba4rue22RH5XifxuKOHXjsjvGpHfTctuuAwOuA79BvSbhhtuyfu25I7krgM3tCduc5u4zT0lt92ByO8Okd99Jfw6EvndJfJ7YNkNt8AB96Dfh/7AcMNDeT+SPJY8ceCGTsRtHhG3earktjsT+T0m8numhF8XIr8nRH7PLbvhITjgKfRn0J8bbngh75eSV5LXDtzQlbjNS+I2b5Tcdjciv1dEfm+V8OtO5PeayO+dZTe8AAe8gf4W+jvDDe/l/UHyUfLJgRt6ELf5QNzms5Lb7knk95HI74sSfr2I/D4R+X217Ib34IDP0L9A/2q44Zu8v0t+SH46cENv4jbfidv8UnLbfYj8fhD5/VbCry+R308ivz+W3fANHPAL+m/ofww3/JV3qA2hQ4WWhNlg3w39iNv8+92sbcJu0HHb/Yn8QhP5hVPCbwCRXxgiv/Ab7LrhLzjg363/r4eDHn7Df90QQd4RJZEkkR24YSBxm4jEbaIoue1BRH6RiPyiKuE3mMgvMpFfNMtuiAAOiAI9KvRohhuiyzuGJKYklgM3DCFuE4O4TWwltz2UyC8mkV8cJfyGEfnFIvKLa9kN0cEBsaHHgR7XcEM8eceXJJAkdOCG4cRt4hO3SaTktkcQ+SUg8kushN9IIr+ERH5JLLshHjggEfTE0JMYbkgq72SS5JIUDtwwirhNMuI2KZXc9mgiv+REfh4l/MYQ+aUg8ktl2Q1JwQEpoXugpzLckFreaSRpJekcuGEscZs0xG3SK7ntcUR+aYn8MijhN57ILx2RX0bLbkgNDkgPPQP0jIYbMsk7sySLJKsDN0wgbpOZuE02Jbc9kcgvC5FfdiX8JhH5ZSXyy2HZDZnAAdmgZ4eew3BDTnnnkuSW5HHghsnEbXIRt8mr5LanEPnlJvLLp4TfVCK/PER++S27ISc4IC/0fNDzG24oIO+CkkKSwg7cMI24TUHiNkWU3PZ0Ir9CRH5FlfCbQeRXmMivmGU3FAAHFIFeFHoxww3F5V3i3++SlHLghpnEbUoQtymt5LZnEfmVJPIro4TfbCK/UkR+ZS27oTg4oDT0MtDLGm4oJ+/ykgqSig7cMIe4TXniNpWU3PZcIr8KRH6VlfCbR+RXkcivimU3lAMHVIJeGXoVww1V5V1NUl1Sw4Eb5hO3qUbcpqaS215A5FedyK+WEn4LifxqEPnVtuyGquCAmtBrQa9tuKGOvOtK6knqO3DDIuI2dYnbNFBy24uJ/OoR+TVUwm8JkV99Ir9Glt1QBxzQAHpD6I0MNzSWdxNJU0kzB25YStymCXGb5kpuexmRX1MivxZK+C0n8mtG5NfSshsagwOaQ28BvaXhhlbybi1pI2nrwA0riNu0Jm7TTsltryTya0Pk114Jv1VEfm2J/DpYdkMrcEA76O2hdzDc0FHenSSdJV0cuGE1cZtOxG26KrltLyK/zkR+3ZTwW0Pk14XIr7tlN3QEB3SF3g16d8MNPeTdU9JL0tuBG9YSt+lJ3KaPktteR+TXi8ivrxJ+64n8ehP59bPshh7ggD7Q+0LvZ7ihv7wHSAZKBjlwwwbiNgOI2wxWctsbifwGEvkNUcLPm8hvEJHfUMtu6A8OGAx9CPShhhuGyXu4ZIRkpAM3bCJuM5y4zSglt+1D5DeCyG+0En6+RH4jifzGWHbDMHDAKOijoY8x3DBW3uMk4yUTHLjBj7jNOOI2E5Xc9mYiv/FEfpOU8PMn8ptA5DfZshvGggMmQp8EfbLhhinyniqZJpnuwA0BxG2mEreZoeS2A4n8phH5zVTCL4jIbzqR3yzLbpgCDpgBfSb0WYYbZst7jmSuZJ4DNwQTt5lD3Ga+ktsOIfKbS+S3QAm/LUR+84j8Flp2w2xwwHzoC6AvNNywSN6LJUskSx24YStxm8XEbZYpue1tRH5LiPyWK+G3nchvKZHfCstuWAQOWAZ9OfQVhhtWynuVZLXEy4EbdhC3WUXcZo2S295J5LeayG+tEn67iPy8iPzWWXbDSnDAGuhroa8z3LBe3hskGyXeDtywm7jNBuI2m5Tc9h4iv41Efj5K+O0l8vMm8vO17Ib14IBN0H2g+xpu8JP3Zom/JMCBG/YRt9lM3CZQyW3vJ/LzJ/ILUsLvAJFfAJFfsGU3+IEDAqEHQQ823BAi7y2SrZJtDtxwkLjNFuI225Xc9iEiv61EfjuU8DtM5LeNyG+nZTeEgAO2Q98Bfafhhl3y3i3ZI9nrwA1HiNvsJm6zT8ltHyXy20Pkt18Jv2NEfnuJ/A5YdsMucMA+6PuhHzDccFDehySHJUccuOE4cZtDxG2OKrntE0R+h4n8jinhd5LI7wiR33HLbjgIDjgK/Rj044YbTsj7pOSU5LQDN5wibnOSuM0ZJbd9msjvFJHfWSX8zhD5nSbyO2fZDSfAAWegn4V+znDDeXlfkFyUXHLghrPEbS4Qt7ms5LbPEfldJPK7ooTfeSK/S0R+Vy274Tw44DL0K9CvGm64Ju/rkhuSmw7ccIG4zXXiNreU3PZFIr8bRH63lfC7ROR3k8jvjmU3XAMH3IJ+G/odww135X1Pcl/ywIEbLhO3uUfc5qGS275C5HefyO+REn5XifweEPk9tuyGu+CAh9AfQX9suOGJvJ9KnkmeO3DDNeI2T4nbvFBy29eJ/J4R+b1Uwu8Gkd9zIr9Xlt3wBBzwAvpL6K8MN7yW9xvJW8k7B264SdzmDXGb90pu+xaR31sivw9K+N0m8ntH5PfRshtegwPeQ/8A/aPhhk/y/iz5IvnqwA13iNt8Jm7zTclt3yXy+0Lk910Jv3tEfl+J/H5YdsMncMA36N+h/zDc8FPevyS///25AzfcJ27zi7jNXyW3/YDI7zeRX6iNOvg9JPL7Q+QXeqNdN/wEB/yF/m+3//XQG//rhjDyDisJJwm/0b4bHhG3CbuRt00EJbf9mMgvHJFfRCX8nhD5hSfyi2TZDWHAARGgR4QeyXBDZHlHkUSVRHPghqfEbaIQt4mu5LafEflFJfKLoYTfcyK/aER+MS27ITI4IDr0GNBjGm6IJe/YkjiSuA7c8IK4TWziNvGU3PZLIr84RH7xlfB7ReQXl8gvgWU3xAIHxIMeH3oCww0J5Z1IkliSxIEbXhO3SUTcJqmS235D5JeYyC+ZEn5vifySEPklt+yGhOCApNCTQU9uuCGFvFNKPJJUDtzwjrhNSuI2qZXc9nsiPw+RXxol/D4Q+aUi8ktr2Q0pwAGpoaeBntZwQzp5p5dkkGR04IaPxG3SE7fJpOS2PxH5ZSDyy6yE32civ4xEflksuyEdOCAT9MzQsxhuyCrvbJLskhwO3PCFuE024jY5ldz2VyK/7ER+uZTw+0bkl4PIL7dlN2QFB+SEngt6bsMNeeSdV5JPkt+BG74Tt8lL3KaAktv+QeSXj8ivoBJ+P4n88hP5FbLshjzggALQC0IvZLihsLyLSIpKijlwwy/iNkWI2xRXctu/ifyKEvmVUMLvD5FfMSK/kpbdUBgcUBx6CeglDTeUkndpSRlJWQdu+EvcpjRxm3JKbjtUWt63yhD5lVfCLzSRX1kivwqW3VAKHFAOennoFQw3VJR3JUllSRUHbghD3KYScZuqSm47LJFfZSK/akr4hSPyq0LkV92yGyqCA6pCrwa9uuGGGvKuKaklqe3ADeGJ29QkblNHyW1HIPKrReRXVwm/iER+tYn86ll2Qw1wQB3odaHXM9xQX94NJA0ljRy4IRJxmwbEbRorue3IRH4NifyaKOEXhcivEZFfU8tuqA8OaAy9CfSmhhuaybu5pIWkpQM3RCVu05y4TSsltx2NyK8FkV9rJfyiE/m1JPJrY9kNzcABraC3ht7GcENbebeTtJd0cOCGGMRt2hG36ajktmMS+bUn8uukhF8sIr8ORH6dLbuhLTigI/RO0Dsbbugi766SbpLuDtwQm7hNV+I2PZTcdhwiv25Efj2V8ItL5NedyK+XZTd0AQf0gN4Tei/DDb3l3UfSV9LPgRviEbfpQ9ymv5Lbjk/k15fIb4ASfgmI/PoR+Q207Ibe4ID+0AdAH2i4YZC8B0uGSIY6cENC4jaDidsMU3LbiYj8hhD5DVfCLzGR31AivxGW3TAIHDAM+nDoIww3jJT3KMloyRgHbkhC3GYUcZuxSm47KZHfaCK/cUr4JSPyG0PkN96yG0aCA8ZCHwd9vOGGCfKeKJkkmezADcmJ20wkbjNFyW2nIPKbROQ3VQm/lER+k4n8pll2wwRwwBToU6FPM9wwXd4zJDMlsxy4wUPcZgZxm9lKbjsVkd9MIr85SvilJvKbReQ317IbpoMDZkOfA32u4YZ58p4vWSBZ6MANaYjbzCdus0jJbacl8ltA5LdYCb90RH4LifyWWHbDPHDAIuiLoS8x3LBU3sskyyUrHLghPXGbZcRtViq57QxEfsuJ/FYp4ZeRyG8Fkd9qy25YCg5YCX0V9NWGG7zkvUayVrLOgRsyEbdZQ9xmvZLbzkzkt5bIb4MSflmI/NYR+W207AYvcMB66BugbzTc4C3vTRIfia8DN2QlbrOJuI2fktvORuTnQ+S3WQm/7ER+vkR+/pbd4A0O8IO+Gbq/4YYAeQdKgiTBDtyQg7hNIHGbECW3nZPIL4jIb4sSfrmI/IKJ/LZadkMAOCAE+hboWw03bJP3dskOyU4HbshN3GY7cZtdSm47D5HfDiK/3Ur45SXy20nkt8eyG7aBA3ZB3w19j+GGvfLeJ9kvOeDADfmI2+wjbnNQyW3nJ/LbT+R3SAm/AkR+B4j8Dlt2w15wwEHoh6AfNtxwRN5HJcckxx24oSBxm6PEbU4oue1CRH7HiPxOKuFXmMjvOJHfKctuOAIOOAH9JPRThhtOy/uM5KzknAM3FCFuc4a4zXklt12UyO8skd8FJfyKEfmdI/K7aNkNp8EB56FfgH7RcMMleV+WXJFcdeCG4sRtLhO3uabktksQ+V0h8ruuhF9JIr+rRH43LLvhEjjgGvTr0G8Ybrgp71uS25I7DtxQirjNLeI2d5Xcdmkiv9tEfveU8CtD5HeHyO++ZTfcBAfchX4P+n3DDQ/k/VDySPLYgRvKErd5SNzmiZLbLkfk94jI76kSfuWJ/B4T+T2z7IYH4IAn0J9Cf2a44bm8X0heSl45cEMF4jYviNu8VnLbFYn8XhL5vVHCrxKR3ysiv7eW3fAcHPAa+hvobw03vJP3e8kHyUcHbqhM3OY9cZtPSm67CpHfByK/z0r4VSXy+0jk98WyG96BAz5B/wz9i+GGr/L+Jvku+eHADdWI23wjbvNTyW1XJ/L7TuT3Swm/GkR+P4j8flt2w1dwwE/ov6D/NtzwR95/JaG8Q4cK7W3fDTWJ2/wlbhPGW8dt1yLyC+XN4xdWCb/aRH6hifzCedt1wx9wwL9b/18PCz2c93/dEF7eESQRJZEcuKEOcZsIxG0iK7ntukR+EYn8oijhV4/ILxKRX1TLbggPDogMPQr0qIYbosk7uiSGJKYDN9QnbhOduE0sJbfdgMgvBpFfbCX8GhL5xSTyi2PZDdHAAbGgx4Yex3BDXHnHk8SXJHDghkbEbeIRt0mo5LYbE/nFJ/JLpIRfEyK/BER+iS27IS44ICH0RNATG25IIu+kkmSS5A7c0JS4TVLiNimU3HYzIr9kRH4plfBrTuSXnMjPY9kNScABKaCnhO4x3JBK3qklaSRpHbihBXGb1MRt0im57ZZEfmmI/NIr4deKyC8tkV8Gy25IBQ5IBz099AyGGzLKO5MksySLAze0Jm6TibhNViW33YbILzORXzYl/NoS+WUh8stu2Q0ZwQFZoWeDnt1wQw5555TkkuR24IZ2xG1yErfJo+S22xP55SLyy6uEXwciv9xEfvksuyEHOCAP9LzQ8xluyC/vApKCkkIO3NCRuE0B4jaFldx2JyK/gkR+RZTw60zkV4jIr6hlN+QHBxSGXgR6UcMNxeRdXFLi329z4IYuxG2KE7cppeS2uxL5lSDyK62EXzciv5JEfmUsu6EYOKAU9NLQyxhuKCvvcpLykgoO3NCduE054jYVldx2DyK/8kR+lZTw60nkV4HIr7JlN5QFB1SEXgl6ZcMNVeRdVVJNUt2BG3oRt6lK3KaGktvuTeRXjcivphJ+fYj8qhP51bLshirggBrQa0KvZbihtrzrSOpK6jlwQ1/iNnWI29RXctv9iPzqEvk1UMKvP5FfPSK/hpbdUBscUB96A+gNDTc0kndjSRNJUwduGEDcpjFxm2ZKbnsgkV8TIr/mSvgNIvJrSuTXwrIbGoEDmkFvDr2F4YaW8m4laS1p48ANg4nbtCJu01bJbQ8h8mtN5NdOCb+hRH5tiPzaW3ZDS3BAW+jtoLc33NBB3h0lnSSdHbhhGHGbjsRtuii57eFEfp2I/Loq4TeCyK8zkV83y27oAA7oAr0r9G6GG7rLu4ekp6SXAzeMJG7Tg7hNbyW3PYrIryeRXx8l/EYT+fUi8utr2Q3dwQG9ofeB3tdwQz9595cMkAx04IYxxG36E7cZpOS2xxL5DSDyG6yE3zgiv4FEfkMsu6EfOGAQ9MHQhxhuGCrvYZLhkhEO3DCeuM0w4jYjldz2BCK/4UR+o5Twm0jkN4LIb7RlNwwFB4yEPgr6aMMNY+Q9VjJOMt6BGyYRtxlL3GaCktueTOQ3jshvohJ+U4j8xhP5TbLshjHggAnQJ0KfZLhhsrynSKZKpjlww1TiNlOI20xXctvTiPymEvnNUMJvOpHfNCK/mZbdMBkcMB36DOgzDTfMkvdsyRzJXAdumEHcZjZxm3lKbnsmkd8cIr/5SvjNIvKbS+S3wLIbZoED5kGfD32B4YaF8l4kWSxZ4sANs4nbLCJus1TJbc8h8ltM5LdMCb+5RH5LiPyWW3bDQnDAUujLoC833LBC3islqySrHbhhHnGblcRtvJTc9nwiv1VEfmuU8FtA5LeayG+tZTesAAd4QV8Dfa3hhnXyXi/ZINnowA0LidusJ27jreS2FxH5bSDy26SE32Iiv41Efj6W3bAOHOANfRN0H8MNvvL2k2yW+DtwwxLiNn7EbQKU3PZSIr/NRH6BSvgtI/LzJ/ILsuwGX3BAAPRA6EGGG4LlHSLZItnqwA3LiduEELfZpuS2VxD5bSHy266E30oiv61EfjssuyEYHLAN+nboOww37JT3LsluyR4HblhF3GYXcZu9Sm57NZHfbiK/fUr4eRH57SHy22/ZDTvBAXuh74O+33DDAXkflBySHHbghjXEbQ4Stzmi5LbXEvkdIvI7qoTfOiK/w0R+xyy74QA44Aj0o9CPGW44Lu8TkpOSUw7csJ64zQniNqeV3PYGIr+TRH5nlPDbSOR3isjvrGU3HAcHnIZ+BvpZww3n5H1eckFy0YEbvInbnCduc0nJbW8i8rtA5HdZCT8fIr+LRH5XLLvhHDjgEvTL0K8Ybrgq72uS65IbDtzgS9zmGnGbm0pu24/I7zqR3y0l/DYT+d0g8rtt2Q1XwQE3od+Cfttwwx1535Xck9x34AZ/4jZ3ids8UHLbAUR+94j8HirhF0jkd5/I75FlN9wBBzyA/hD6I8MNj+X9RPJU8syBG4KI2zwhbvNcyW0HE/k9JfJ7oYRfCJHfMyK/l5bd8Bgc8Bz6C+gvDTe8kvdryRvJWwdu2ELc5jVxm3dKbnsrkd8bIr/3SvhtI/J7S+T3wbIbXoED3kF/D/2D4YaP8v4k+Sz54sAN24nbfCJu81XJbe8g8vtM5PdNCb+dRH5fiPy+W3bDR3DAV+jfoH833PBD3j8lvyS/HbhhF3Gbn8Rt/ii57d1Efr+I/P4q4beHyO83kV+oTXbd8AMc8Af6X+j/fgO6IbS8w0jCSsJtsu+GvcRtwmzibRN+k47b3kfkF5bIL4ISfvuJ/MIR+UW07IbQm/7fAeGhR4Ae0XBDJHlHlkSRRHXghgPEbSITt4mm5LYPEvlFIfKLroTfISK/qER+MSy7IRI4IBr06NBjGG6IKe9YktiSOA7ccJi4TSziNnGV3PYRIr/YRH7xlPA7SuQXh8gvvmU3xAQHxIUeD3p8ww0J5J1QkkiS2IEbjhG3SUjcJomS2z5O5JeIyC+pEn4niPwSE/kls+yGBOCAJNCTQk9muCG5vFNIUko8DtxwkrhNCuI2qZTc9ikiv5REfqmV8DtN5Och8ktj2Q3JwQGpoKeGnsZwQ1p5p5Okl2Rw4IYzxG3SEbfJqOS2zxL5pSfyy6SE3zkivwxEfpktuyEtOCAj9EzQMxtuyCLvrJJskuwO3HCeuE1W4jY5lNz2BSK/bER+OZXwu0jkl53IL5dlN2QBB+SAnhN6LsMNueWdR5JXks+BGy4Rt8lD3Ca/ktu+TOSXl8ivgBJ+V4j88hH5FbTshtzggPzQC0AvaLihkLwLS4pIijpww1XiNoWJ2xRTctvXiPyKEPkVV8LvOpFfUSK/EpbdUAgcUAx6ceglDDeUlHcpSWlJGQduuEHcphRxm7JKbvsmkV9pIr9ySvjdIvIrQ+RX3rIbSoIDykIvB7284YYK8q4oqSSp7MANt4nbVCRuU0XJbd8h8qtE5FdVCb+7RH6VifyqWXZDBXBAFehVoVcz3FBd3jUkNSW1HLjhHnGbGsRtaiu57ftEfjWJ/Ooo4feAyK8WkV9dy26oDg6oDb0O9LqGG+rJu76kgaShAzc8JG5Tn7hNIyW3/YjIrwGRX2Ml/B4T+TUk8mti2Q31wAGNoDeG3sRwQ1N5N5M0l7Rw4IYnxG2aEbdpqeS2nxL5NSfya6WE3zMivxZEfq0tu6EpOKAl9FbQWxtuaCPvtpJ2kvYO3PCcuE1b4jYdlNz2CyK/dkR+HZXwe0nk157Ir5NlN7QBB3SA3hF6J8MNneXdRdJV0s2BG14Rt+lC3Ka7ktt+TeTXlcivhxJ+b4j8uhH59bTshs7ggO7Qe0Dvabihl7x7S/pI+jpww1viNr2J2/RTctvviPz6EPn1V8LvPZFfXyK/AZbd0Asc0A96f+gDDDcMlPcgyWDJEAdu+EDcZhBxm6FKbvsjkd9gIr9hSvh9IvIbQuQ33LIbBoIDhkIfBn244YYR8h4pGSUZ7cANn4nbjCRuM0bJbX8h8htF5DdWCb+vRH6jifzGWXbDCHDAGOhjoY8z3DBe3hMkEyWTHLjhG3GbCcRtJiu57e9EfhOJ/KYo4feDyG8Skd9Uy24YDw6YDH0K9KmGG6bJe7pkhmSmAzf8JG4znbjNLCW3/YvIbwaR32wl/H4T+c0k8ptj2Q3TwAGzoM+GPsdww1x5z5PMlyxw4IY/xG3mEbdZqOS2/xL5zSfyW6SEX6h0vG8tIPJbbNkNc8EBC6Evgr7YcMMSeS+VLJMsd+CG0MRtlhK3WaHktsMQ+S0j8luphF9YIr/lRH6rLLthCThgBfSV0FcZblgtby/JGslaB24IR9zGi7jNOiW3HZ7Ibw2R33ol/CIQ+a0l8ttg2Q2rwQHroK+HvsFww0Z5e0s2SXwcuCEicRtv4ja+Sm47EpHfJiI/PyX8IhP5+RD5bbbsho3gAF/oftA3G27wl3eAJFAS5MANUYjbBBC3CVZy21GJ/AKJ/EKU8ItG5BdE5LfFshv8wQHB0EOgbzHcsFXe2yTbJTscuCE6cZttxG12KrntGER+24n8dinhF5PIbweR327LbtgKDtgJfRf03YYb9sh7r2SfZL8DN8QibrOXuM0BJbcdm8hvH5HfQSX84hD57SfyO2TZDXvAAQegH4R+yHDDYXkfkRyVHHPghrjEbY4Qtzmu5LbjEfkdJfI7oYRffCK/Y0R+Jy274TA44Dj0E9BPGm44Je/TkjOSsw7ckIC4zWniNueU3HZCIr8zRH7nlfBLROR3lsjvgmU3nAIHnIN+HvoFww0X5X1JcllyxYEbEhO3uUTc5qqS205C5HeZyO+aEn5JifyuEPldt+yGi+CAq9CvQb9uuOGGvG9KbkluO3BDMuI2N4nb3FFy28mJ/G4R+d1Vwi8Fkd9tIr97lt1wAxxwB/pd6PcMN9yX9wPJQ8kjB25ISdzmAXGbx0pu20Pk95DI74kSfqmI/B4R+T217Ib74IDH0J9Af2q44Zm8n0teSF46cENq4jbPidu8UnLbaYj8XhD5vVbCLy2R30sivzeW3fAMHPAK+mvobww3vJX3O8l7yQcHbkhH3OYdcZuPSm47PZHfeyK/T0r4ZSDy+0Dk99myG96CAz5C/wT9s+GGL/L+Kvkm+e7ADRmJ23wlbvNDyW1nIvL7RuT3Uwm/zER+34n8fll2wxdwwA/oP6H/Mtzw+99b8lcSyse+G7IQt/lD3Ca0j47bzkrk95fIL4wSftmI/EL58PiF9bHrht/ggH+3/r8eBnpYn/+6IZy8w0siSCI6cEN24jbhidtEUnLbOYj8IhD5RVbCLyeRX0QivyiW3RAOHBAJemToUQw3RJV3NEl0SQwHbshF3CYacZuYSm47N5FfdCK/WEr45SHyi0HkF9uyG6KCA2JCjwU9tuGGOPKOK4knie/ADXmJ28QlbpNAyW3nI/KLR+SXUAm//ER+8Yn8Ell2QxxwQALoCaEnMtyQWN5JJEklyRy4oQBxmyTEbZIrue2CRH5JifxSKOFXiMgvGZFfSstuSAwOSA49BfSUhhs88k4lSS1J48ANhYnbpCJuk1bJbRch8ktN5JdOCb+iRH5piPzSW3aDBxyQFno66OkNN2SQd0ZJJklmB24oRtwmI3GbLEpuuziRXyYiv6xK+JUg8stM5JfNshsygAOyQM8KPZvhhuzyziHJKcnlwA0lidvkIG6TW8ltlyLyy0nkl0cJv9JEfrmI/PJadkN2cEBu6Hmg5zXckE/e+SUFJAUduKEMcZv8xG0KKbntskR+BYj8CivhV47IryCRXxHLbsgHDigEvTD0IoYbisq7mKS4pIQDN5QnblOMuE1JJbddgcivOJFfKSX8KhL5lSDyK23ZDUXBASWhl4Je2nBDGXmXlZSTlHfghkrEbcoSt6mg5LYrE/mVI/KrqIRfFSK/8kR+lSy7oQw4oAL0itArGW6oLO8qkqqSag7cUJW4TRXiNtWV3HY1Ir+qRH41lPCrTuRXjcivpmU3VAYHVIdeA3pNww215F1bUkdS14EbahC3qU3cpp6S265J5FeHyK++En61iPzqEvk1sOyGWuCAetDrQ29guKGhvBtJGkuaOHBDbeI2jYjbNFVy23WI/BoT+TVTwq8ukV8TIr/mlt3QEBzQFHoz6M0NN7SQd0tJK0lrB26oR9ymJXGbNkpuuz6RXysiv7ZK+DUg8mtN5NfOshtagAPaQG8LvZ3hhvby7iDpKOnkwA0Nidt0IG7TWcltNyLy60jk10UJv8ZEfp2I/LpadkN7cEBn6F2gdzXc0E3e3SU9JD0duKEJcZvuxG16KbntpkR+PYj8eivh14zIryeRXx/LbugGDugFvTf0PoYb+sq7n6S/ZIADNzQnbtOPuM1AJbfdgsivP5HfICX8WhL5DSDyG2zZDX3BAQOhD4I+2HDDEHkPlQyTDHfghlbEbYYStxmh5LZbE/kNI/IbqYRfGyK/4UR+oyy7YQg4YAT0kdBHGW4YLe8xkrGScQ7c0Ja4zRjiNuOV3HY7Ir+xRH4TlPBrT+Q3jshvomU3jAYHjIc+AfpEww2T5D1ZMkUy1YEbOhC3mUzcZpqS2+5I5DeFyG+6En6diPymEvnNsOyGSeCAadCnQ59huGGmvGdJZkvmOHBDZ+I2s4jbzFVy212I/GYT+c1Twq8rkd8cIr/5lt0wExwwF/o86PMNNyyQ90LJIsliB27oRtxmIXGbJUpuuzuR3yIiv6VK+PUg8ltM5LfMshsWgAOWQF8KfZnhhuXyXiFZKVnlwA09idusIG6zWslt9yLyW0nk56WEX28iv1VEfmssu2E5OGA1dC/oaww3rJX3Osl6yQYHbuhD3GYdcZuNSm67L5HfeiI/byX8+hH5bSDy22TZDWvBARuhe0PfZLjBR96+Ej/JZgdu6E/cxpe4jb+S2x5A5OdH5BeghN9AIr/NRH6Blt3gAw7whx4APdBwQ5C8gyUhki0O3DCIuE0wcZutSm57MJFfCJHfNiX8hhD5bSHy227ZDUHggK3Qt0Hfbrhhh7x3SnZJdjtww1DiNjuJ2+xRctvDiPx2EfntVcJvOJHfbiK/fZbdsAMcsAf6Xuj7DDfsl/cByUHJIQduGEHc5gBxm8NKbnskkd9BIr8jSviNIvI7ROR31LIb9oMDDkM/Av2o4YZj8j4uOSE56cANo4nbHCduc0rJbY8h8jtB5HdaCb+xRH4nifzOWHbDMXDAKeinoZ8x3HBW3uck5yUXHLhhHHGbc8RtLiq57fFEfueJ/C4p4TeByO8Ckd9ly244Cw64CP0S9MuGG67I+6rkmuS6AzdMJG5zlbjNDSW3PYnI7xqR300l/CYT+V0n8rtl2Q1XwAE3oN+Efstww21535Hcldxz4IYpxG3uELe5r+S2pxL53SXye6CE3zQiv3tEfg8tu+E2OOA+9AfQHxpueCTvx5InkqcO3DCduM1j4jbPlNz2DCK/J0R+z5Xwm0nk95TI74VlNzwCBzyD/hz6C8MNL+X9SvJa8saBG2YRt3lF3OatktueTeT3msjvnRJ+c4j83hD5vbfshpfggLfQ30F/b7jhg7w/Sj5JPjtww1ziNh+J23xRctvziPw+Efl9VcJvPpHfZyK/b5bd8AEc8AX6V+jfDDd8l/cPyU/JLwduWEDc5gdxm99Kbnshkd9PIr8/SvgtIvL7ReT317IbvoMDfkP/A/2v4YZQvqFDhZaEkYT1te+GxcRt/v1u1jbhfHXc9hIivzBEfuGV8FtK5BeWyC+Cr103/Pvn/H8OCAc9PPQIvv91Q0R5R5JElkRx4IZlxG0iEbeJquS2lxP5RSbyi6aE3woivyhEftEtuyEiOCAq9GjQoxtuiCHvmJJYktgO3LCSuE1M4jZxlNz2KiK/WER+cZXwW03kF5vIL55lN8QAB8SBHhd6PMMN8eWdQJJQksiBG7yI2yQgbpNYyW2vIfJLSOSXRAm/tUR+iYj8klp2Q3xwQGLoSaAnNdyQTN7JJSkkKR24YR1xm+TEbTxKbns9kV8KIr9USvhtIPJLSeSX2rIbkoEDPNBTQU9tuCGNvNNK0knSO3DDRuI2aYnbZFBy295EfumI/DIq4beJyC89kV8my25IAw7IAD0j9EyGGzLLO4skqySbAzf4ELfJQtwmu5Lb9iXyy0rkl0MJPz8iv2xEfjktuyEzOCA79BzQcxpuyCXv3JI8krwO3LCZuE1u4jb5lNy2P5FfHiK//Er4BRD55SXyK2DZDbnAAfmg54dewHBDQXkXkhSWFHHghkDiNoWI2xRVcttBRH6FifyKKeEXTORXhMivuGU3FAQHFIVeDHpxww0l/v0mSSlJaQduCCFuU5K4TRklt72FyK8UkV9ZJfy2EvmVJvIrZ9kNJcABZaCXhV7OcEN5eVeQVJRUcuCGbcRtKhC3qazktrcT+VUk8quihN8OIr9KRH5VLbuhPDigMvQq0Ksabqgm7+qSGpKaDtywk7hNdeI2tZTc9i4ivxpEfrWV8NtN5FeTyK+OZTdUAwfUgl4beh3DDXXlXU9SX9LAgRv2ELepR9ymoZLb3kvkV5/Ir5ESfvuI/BoQ+TW27Ia64ICG0BtBb2y4oYm8m0qaSZo7cMN+4jZNidu0UHLbB4j8mhH5tVTC7yCRX3Miv1aW3dAEHNACekvorQw3tJZ3G0lbSTsHbjhE3KYNcZv2Sm77MJFfWyK/Dkr4HSHya0fk19GyG1qDA9pD7wC9o+GGTvLuLOki6erADUeJ23QmbtNNyW0fI/LrQuTXXQm/40R+XYn8elh2QydwQDfo3aH3MNzQU969JL0lfRy44QRxm17Ebfoque2TRH69ifz6KeF3isivD5Fff8tu6AkO6Au9H/T+hhsGyHugZJBksAM3nCZuM5C4zRAlt32GyG8Qkd9QJfzOEvkNJvIbZtkNA8ABQ6APhT7McMNweY+QjJSMcuCGc8RtRhC3Ga3kts8T+Y0k8hujhN8FIr9RRH5jLbthODhgNPQx0Mcabhgn7/GSCZKJDtxwkbjNeOI2k5Tc9iUivwlEfpOV8LtM5DeRyG+KZTeMAwdMgj4Z+hTDDVPlPU0yXTLDgRuuELeZRtxmppLbvkrkN53Ib5YSfteI/GYQ+c227Iap4ICZ0GdBn224YY6850rmSeY7cMN14jZzidssUHLbN4j85hH5LVTC7yaR33wiv0WW3TAHHLAA+kLoiww3LJb3EslSyTIHbrhF3GYJcZvlSm77NpHfUiK/FUr43SHyW0bkt9KyGxaDA5ZDXwF9peGGVfJeLfGSrHHghrvEbVYTt1mr5LbvEfl5EfmtU8LvPpHfGiK/9ZbdsAocsBb6OujrDTdskPdGibdkkwM3PCBus5G4jY+S235I5OdN5OerhN8jIr9NRH5+lt2wARzgA90Xup/hhs3y9pcESAIduOExcRt/4jZBSm77CZFfAJFfsBJ+T4n8Aon8Qiy7YTM4IAh6MPQQww1b5L1Vsk2y3YEbnhG32UrcZoeS235O5LeNyG+nEn4viPy2E/ntsuyGLeCAHdB3Qt9luGG3vPdI9kr2OXDDS+I2e4jb7Fdy26+I/PYS+R1Qwu81kd8+Ir+Dlt2wGxywH/oB6AcNNxyS92HJEclRB254Q9zmMHGbY0pu+y2R3xEiv+NK+L0j8jtK5HfCshsOgQOOQT8O/YThhpPyPiU5LTnjwA3viducIm5zVsltfyDyO03kd04Jv49EfmeI/M5bdsNJcMBZ6OegnzfccEHeFyWXJJcduOETcZuLxG2uKLntz0R+l4j8rirh94XI7zKR3zXLbrgADrgC/Sr0a4Ybrsv7huSm5JYDN3wlbnODuM1tJbf9jcjvJpHfHSX8vhP53SLyu2vZDdfBAbeh34F+13DDPXnflzyQPHTghh/Ebe4Tt3mk5LZ/Evk9IPJ7rITfLyK/h0R+Tyy74R444BH0x9CfGG54Ku9nkueSFw7c8Ju4zTPiNi+V3PYfIr/nRH6vlPD7S+T3gsjvtWU3PAUHvIT+Cvprww1v5P1W8k7y3oEbQqUn/p09cZsPSm47NJHfOyK/j0r4hSHye0/k98myG96AAz5A/wj9k+GGz/L+Ivkq+ebADWGJ23whbvNdyW2HI/L7SuT3Qwm/8ER+34j8flp2w2dwwHfoP6D/NNzwS96///2Z5K8DN0QgbvObuE0oPx23HZHI7w+RX2gl/CIR+f0l8gvjZ9cNv8AB/279fz009DB+/3VDWHmHk4SXRPCz74bIxG3C+fG2iajktqMQ+YUn8oukhF9UIr8IRH6RLbshLDggIvRI0CMbbogi76iSaJLoDtwQjbhNVOI2MZTcdnQiv2hEfjGV8ItB5BedyC+WZTdEAQfEgB4TeizDDbHlHUcSVxLPgRtiEreJQ9wmvpLbjkXkF5fIL4ESfrGJ/OIR+SW07IbY4ID40BNAT2i4IZG8E0uSSJI6cEMc4jaJidskU3LbcYn8khD5JVfCLx6RX1IivxSW3ZAIHJAMenLoKQw3pJS3R5JKktqBG+ITt/EQt0mj5LYTEPmlIvJLq4RfQiK/1ER+6Sy7ISU4IA30tNDTGW5IL+8MkoySTA7ckIi4TQbiNpmV3HZiIr+MRH5ZlPBLQuSXicgvq2U3pAcHZIaeBXpWww3Z5J1dkkOS04EbkhK3yU7cJpeS205G5JeDyC+3En7JifxyEvnlseyGbOCAXNBzQ89juCGvvPNJ8ksKOHBDCuI2+YjbFFRy2ymJ/PIT+RVSws9D5FeAyK+wZTfkBQcUhF4IemHDDUXkXVRSTFLcgRtSEbcpStymhJLbTk3kV4zIr6QSfmmI/IoT+ZWy7IYi4IAS0EtCL2W4obS8y0jKSso5cENa4jZliNuUV3Lb6Yj8yhL5VVDCLz2RXzkiv4qW3VAaHFAeegXoFQ03VJJ3ZUkVSVUHbshA3KYycZtqSm47I5FfFSK/6kr4ZSLyq0rkV8OyGyqBA6pBrw69huGGmvKuJaktqePADZmJ29QiblNXyW1nIfKrTeRXTwm/rER+dYj86lt2Q01wQF3o9aDXN9zQQN4NJY0kjR24IRtxm4bEbZooue3sRH6NiPyaKuGXg8ivMZFfM8tuaAAOaAK9KfRmhhuay7uFpKWklQM35CRu04K4TWslt52LyK8lkV8bJfxyE/m1IvJra9kNzcEBraG3gd7WcEM7ebeXdJB0dOCGPMRt2hO36aTktvMS+XUg8uushF8+Ir+ORH5dLLuhHTigE/TO0LsYbugq726S7pIeDtyQn7hNN+I2PZXcdgEiv+5Efr2U8CtI5NeDyK+3ZTd0BQf0hN4Lem/DDX3k3VfST9LfgRsKEbfpS9xmgJLbLkzk14/Ib6ASfkWI/PoT+Q2y7IY+4IAB0AdCH2S4YbC8h0iGSoY5cENR4jZDiNsMV3LbxYj8hhL5jVDCrziR3zAiv5GW3TAYHDAc+gjoIw03jJL3aMkYyVgHbihB3GY0cZtxSm67JJHfGCK/8Ur4lSLyG0vkN8GyG0aBA8ZBHw99guGGifKeJJksmeLADaWJ20wibjNVyW2XIfKbTOQ3TQm/skR+U4j8plt2w0RwwFTo06BPN9wwQ94zJbMksx24oRxxm5nEbeYoue3yRH6ziPzmKuFXgchvNpHfPMtumAEOmAN9LvR5hhvmy3uBZKFkkQM3VCRus4C4zWIlt12JyG8hkd8SJfwqE/ktIvJbatkN88EBi6Evgb7UcMMyeS+XrJCsdOCGKsRtlhO3WaXktqsS+a0g8luthF81Ir+VRH5elt2wDBywCvpq6F6GG9bIe61knWS9AzdUJ26zlrjNBiW3XYPIbx2R30Yl/GoS+a0n8vO27IY14IAN0DdC9zbcsEnePhJfiZ8DN9QibuND3GazktuuTeTnS+Tnr4RfHSI/PyK/AMtu2AQO2AzdH3qA4YZAeQdJgiUhDtxQl7hNEHGbLUpuux6RXzCR31Yl/OoT+YUQ+W2z7IZAcMAW6FuhbzPcsF3eOyQ7JbscuKEBcZsdxG12K7nthkR+O4n89ijh14jIbxeR317LbtgODtgNfQ/0vYYb9sl7v+SA5KADNzQmbrOfuM0hJbfdhMjvAJHfYSX8mhL5HSTyO2LZDfvAAYegH4Z+xHDDUXkfkxyXnHDghmbEbY4Rtzmp5LabE/kdJ/I7pYRfCyK/E0R+py274Sg44CT0U9BPG244I++zknOS8w7c0JK4zVniNheU3HYrIr9zRH4XlfBrTeR3nsjvkmU3nAEHXIB+Efolww2X5X1FclVyzYEb2hC3uULc5rqS225L5HeVyO+GEn7tiPyuEfndtOyGy+CA69BvQL9puOGWvG9L7kjuOnBDe+I2t4nb3FNy2x2I/O4Q+d1Xwq8jkd9dIr8Hlt1wCxxwD/p96A8MNzyU9yPJY8kTB27oRNzmEXGbp0puuzOR32Miv2dK+HUh8ntC5PfcshseggOeQn8G/bnhhhfyfil5JXntwA1didu8JG7zRsltdyPye0Xk91YJv+5Efq+J/N5ZdsMLcMAb6G+hvzPc8F7eHyQfJZ8cuKEHcZsPxG0+K7ntnkR+H4n8vijh14vI7xOR31fLbngPDvgM/Qv0r4Ybvsn7u+SH5KcDN/QmbvOduM0vJbfdh8jvB5HfbyX8+hL5/STy+2PZDd/AAb+g/4b+x3DDX3mH2hw6VGhJmM323dCPuM2/383aJuxmHbfdn8gvNJFfOCX8BhD5hSHyC7/Zrhv+ggP+3fr/ejjo4Tf/1w0R5B1REkkS2YEbBhK3iUjcJoqS2x5E5BeJyC+qEn6DifwiE/lFs+yGCOCAKNCjQo9muCG6vGNIYkpiOXDDEOI2MYjbxFZy20OJ/GIS+cVRwm8YkV8sIr+4lt0QHRwQG3oc6HENN8STd3xJAklCB24YTtwmPnGbREpuewSRXwIiv8RK+I0k8ktI5JfEshvigQMSQU8MPYnhhqTyTiZJLknhwA2jiNskI26TUsltjybyS07k51HCbwyRXwoiv1SW3ZAUHJASugd6KsMNqeWdRpJWks6BG8YSt0lD3Ca9ktseR+SXlsgvgxJ+44n80hH5ZbTshtTggPTQM0DPaLghk7wzS7JIsjpwwwTiNpmJ22RTctsTifyyEPllV8JvEpFfViK/HJbdkAkckA16dug5DDfklHcuSW5JHgdumEzcJhdxm7xKbnsKkV9uIr98SvhNJfLLQ+SX37IbcoID8kLPBz2/4YYC8i4oKSQp7MAN04jbFCRuU0TJbU8n8itE5FdUCb8ZRH6FifyKWXZDAXBAEehFoRcz3FBc3iX+/S5JKQdumEncpgRxm9JKbnsWkV9JIr8ySvjNJvIrReRX1rIbioMDSkMvA72s4YZy8i4vqSCp6MANc4jblCduU0nJbc8l8qtA5FdZCb95RH4VifyqWHZDOXBAJeiVoVcx3FBV3tUk1SU1HLhhPnGbasRtaiq57QVEftWJ/Gop4beQyK8GkV9ty26oCg6oCb0W9NqGG+rIu66knqS+AzcsIm5Tl7hNAyW3vZjIrx6RX0Ml/JYQ+dUn8mtk2Q11wAENoDeE3shwQ2N5N5E0lTRz4IalxG2aELdpruS2lxH5NSXya6GE33Iiv2ZEfi0tu6ExOKA59BbQWxpuaCXv1pI2krYO3LCCuE1r4jbtlNz2SiK/NkR+7ZXwW0Xk15bIr4NlN7QCB7SD3h56B8MNHeXdSdJZ0sWBG1YTt+lE3Karktv2IvLrTOTXTQm/NUR+XYj8ult2Q0dwQFfo3aB3N9zQQ949Jb0kvR24YS1xm57Ebfooue11RH69iPz6KuG3nsivN5FfP8tu6AEO6AO9L/R+hhv6y3uAZKBkkAM3bCBuM4C4zWAlt72RyG8gkd8QJfy8ifwGEfkNteyG/uCAwdCHQB9quGGYvIdLRkhGOnDDJuI2w4nbjFJy2z5EfiOI/EYr4edL5DeSyG+MZTcMAweMgj4a+hjDDWPlPU4yXjLBgRv8iNuMI24zUcltbybyG0/kN0kJP38ivwlEfpMtu2EsOGAi9EnQJxtumCLvqZJpkukO3BBA3GYqcZsZSm47kMhvGpHfTCX8goj8phP5zbLshinggBnQZ0KfZbhhtrznSOZK5jlwQzBxmznEbeYrue0QIr+5RH4LlPDbQuQ3j8hvoWU3zAYHzIe+APpCww2L5L1YskSy1IEbthK3WUzcZpmS295G5LeEyG+5En7bifyWEvmtsOyGReCAZdCXQ19huGGlvFdJVku8HLhhB3GbVcRt1ii57Z1EfquJ/NYq4beLyM+LyG+dZTesBAesgb4W+jrDDevlvUGyUeLtwA27idtsIG6zSclt7yHy20jk56OE314iP28iP1/LblgPDtgE3Qe6r+EGP3lvlvhLAhy4YR9xm83EbQKV3PZ+Ij9/Ir8gJfwOEPkFEPkFW3aDHzggEHoQ9GDDDSHy3iLZKtnmwA0HidtsIW6zXcltHyLy20rkt0MJv8NEftuI/HZadkMIOGA79B3Qdxpu2CXv3ZI9kr0O3HCEuM1u4jb7lNz2USK/PUR++5XwO0bkt5fI74BlN+wCB+yDvh/6AcMNB+V9SHJYcsSBG44TtzlE3Oaokts+QeR3mMjvmBJ+J4n8jhD5HbfshoPggKPQj0E/brjhhLxPSk5JTjtwwyniNieJ25xRctunifxOEfmdVcLvDJHfaSK/c5bdcAIccAb6WejnDDecl/cFyUXJJQduOEvc5gJxm8tKbvsckd9FIr8rSvidJ/K7ROR31bIbzoMDLkO/Av2q4YZr8r4uuSG56cANF4jbXCduc0vJbV8k8rtB5HdbCb9LRH43ifzuWHbDNXDALei3od8x3HBX3vck9yUPHLjhMnGbe8RtHiq57StEfveJ/B4p4XeVyO8Bkd9jy264Cw54CP0R9MeGG57I+6nkmeS5AzdcI27zlLjNCyW3fZ3I7xmR30sl/G4Q+T0n8ntl2Q1PwAEvoL+E/spww2t5v5G8lbxz4IabxG3eELd5r+S2bxH5vSXy+6CE320iv3dEfh8tu+E1OOA99A/QPxpu+CTvz5Ivkq8O3HCHuM1n4jbflNz2XSK/L0R+35Xwu0fk95XI74dlN3wCB3yD/h36D8MNP+X9S/L73587cMN94ja/iNv8VXLbD4j8fhP5hfLXwe8hkd8fIr/Q/nbd8BMc8Bf6v93+10P7/9cNYeQdVhJOEt7fvhseEbcJ68/bJoKS235M5BeOyC+iEn5PiPzCE/lFsuyGMOCACNAjQo9kuCGyvKNIokqiOXDDU+I2UYjbRFdy28+I/KIS+cVQwu85kV80Ir+Ylt0QGRwQHXoM6DENN8SSd2xJHElcB254QdwmNnGbeEpu+yWRXxwiv/hK+L0i8otL5JfAshtigQPiQY8PPYHhhoTyTiRJLEniwA2vidskIm6TVMltvyHyS0zkl0wJv7dEfkmI/JJbdkNCcEBS6MmgJzfckELeKSUeSSoHbnhH3CYlcZvUSm77PZGfh8gvjRJ+H4j8UhH5pbXshhTggNTQ00BPa7ghnbzTSzJIMjpww0fiNumJ22RSctufiPwyEPllVsLvM5FfRiK/LJbdkA4ckAl6ZuhZDDdklXc2SXZJDgdu+ELcJhtxm5xKbvsrkV92Ir9cSvh9I/LLQeSX27IbsoIDckLPBT234YY88s4rySfJ78AN34nb5CVuU0DJbf8g8stH5FdQCb+fRH75ifwKWXZDHnBAAegFoRcy3FBY3kUkRSXFHLjhF3GbIsRtiiu57d9EfkWJ/Eoo4feHyK8YkV9Jy24oDA4oDr0E9JKGG0rJu7SkjKSsAzf8JW5TmrhNOSW3HSoD71tliPzKK+EXmsivLJFfBctuKAUOKAe9PPQKhhsqyruSpLKkigM3hCFuU4m4TVUltx2WyK8ykV81JfzCEflVIfKrbtkNFcEBVaFXg17dcEMNedeU1JLUduCG8MRtahK3qaPktiMQ+dUi8qurhF9EIr/aRH71LLuhBjigDvS60OsZbqgv7waShpJGDtwQibhNA+I2jZXcdmQiv4ZEfk2U8ItC5NeIyK+pZTfUBwc0ht4EelPDDc3k3VzSQtLSgRuiErdpTtymlZLbjkbk14LIr7USftGJ/FoS+bWx7IZm4IBW0FtDb2O4oa2820naSzo4cEMM4jbtiNt0VHLbMYn82hP5dVLCLxaRXwciv86W3dAWHNAReifonQ03dJF3V0k3SXcHbohN3KYrcZseSm47DpFfNyK/nkr4xSXy607k18uyG7qAA3pA7wm9l+GG3vLuI+kr6efADfGI2/QhbtNfyW3HJ/LrS+Q3QAm/BER+/Yj8Blp2Q29wQH/oA6APNNwwSN6DJUMkQx24ISFxm8HEbYYpue1ERH5DiPyGK+GXmMhvKJHfCMtuGAQOGAZ9OPQRhhtGynuUZLRkjAM3JCFuM4q4zVglt52UyG80kd84JfySEfmNIfIbb9kNI8EBY6GPgz7ecMMEeU+UTJJMduCG5MRtJhK3maLktlMQ+U0i8puqhF9KIr/JRH7TLLthAjhgCvSp0KcZbpgu7xmSmZJZDtzgIW4zg7jNbCW3nYrIbyaR3xwl/FIT+c0i8ptr2Q3TwQGzoc+BPtdwwzx5z5cskCx04IY0xG3mE7dZpOS20xL5LSDyW6yEXzoiv4VEfkssu2EeOGAR9MXQlxhuWCrvZZLlkhUO3JCeuM0y4jYrldx2BiK/5UR+q5Twy0jkt4LIb7VlNywFB6yEvgr6asMNXvJeI1krWefADZmI26whbrNeyW1nJvJbS+S3QQm/LER+64j8Nlp2gxc4YD30DdA3Gm7wlvcmiY/E14EbshK32UTcxk/JbWcj8vMh8tushF92Ij9fIj9/y27wBgf4Qd8M3d9wQ4C8AyVBkmAHbshB3CaQuE2IktvOSeQXROS3RQm/XER+wUR+Wy27IQAcEAJ9C/Sthhu2yXu7ZIdkpwM35CZus524zS4lt52HyG8Hkd9uJfzyEvntJPLbY9kN28ABu6Dvhr7HcMNeee+T7JcccOCGfMRt9hG3OajktvMT+e0n8jukhF8BIr8DRH6HLbthLzjgIPRD0A8bbjgi76OSY5LjDtxQkLjNUeI2J5TcdiEiv2NEfieV8CtM5HecyO+UZTccAQecgH4S+inDDaflfUZyVnLOgRuKELc5Q9zmvJLbLkrkd5bI74ISfsWI/M4R+V207IbT4IDz0C9Av2i44ZK8L0uuSK46cENx4jaXidtcU3LbJYj8rhD5XVfCrySR31UivxuW3XAJHHAN+nXoNww33JT3LcltyR0HbihF3OYWcZu7Sm67NJHfbSK/e0r4lSHyu0Pkd9+yG26CA+5Cvwf9vuGGB/J+KHkkeezADWWJ2zwkbvNEyW2XI/J7ROT3VAm/8kR+j4n8nll2wwNwwBPoT6E/M9zwXN4vJC8lrxy4oQJxmxfEbV4rue2KRH4vifzeKOFXicjvFZHfW8tueA4OeA39DfS3hhveyfu95IPkowM3VCZu8564zSclt12FyO8Dkd9nJfyqEvl9JPL7YtkN78ABn6B/hv7FcMNXeX+TfJf8cOCGasRtvhG3+anktqsT+X0n8vulhF8NIr8fRH6/LbvhKzjgJ/Rf0H8bbvgj77+SUAGhQ4UOsO+GmsRt/hK3CROg47ZrEfmFCuDxC6uEX20iv9BEfuEC7LrhDzjg363/r4eFHi7gv24IL+8IkoiSSA7cUIe4TQTiNpGV3HZdIr+IRH5RlPCrR+QXicgvqmU3hAcHRIYeBXpUww3R5B1dEkMS04Eb6hO3iU7cJpaS225A5BeDyC+2En4NifxiEvnFseyGaOCAWNBjQ49juCGuvONJ4ksSOHBDI+I28YjbJFRy242J/OIT+SVSwq8JkV8CIr/Elt0QFxyQEHoi6IkNNySRd1JJMklyB25oStwmKXGbFEpuuxmRXzIiv5RK+DUn8ktO5Oex7IYk4IAU0FNC9xhuSCXv1JI0krQO3NCCuE1q4jbplNx2SyK/NER+6ZXwa0Xkl5bIL4NlN6QCB6SDnh56BsMNGeWdSZJZksWBG1oTt8lE3CarkttuQ+SXmcgvmxJ+bYn8shD5ZbfshozggKzQs0HPbrghh7xzSnJJcjtwQzviNjmJ2+RRctvtifxyEfnlVcKvA5FfbiK/fJbdkAMckAd6Xuj5DDfkl3cBSUFJIQdu6EjcpgBxm8JKbrsTkV9BIr8iSvh1JvIrRORX1LIb8oMDCkMvAr2o4YZi8i4uKfHvtzlwQxfiNsWJ25RScttdifxKEPmVVsKvG5FfSSK/MpbdUAwcUAp6aehlDDeUlXc5SXlJBQdu6E7cphxxm4pKbrsHkV95Ir9KSvj1JPKrQORX2bIbyoIDKkKvBL2y4YYq8q4qqSap7sANvYjbVCVuU0PJbfcm8qtG5FdTCb8+RH7VifxqWXZDFXBADeg1odcy3FBb3nUkdSX1HLihL3GbOsRt6iu57X5EfnWJ/Boo4defyK8ekV9Dy26oDQ6oD70B9IaGGxrJu7GkiaSpAzcMIG7TmLhNMyW3PZDIrwmRX3Ml/AYR+TUl8mth2Q2NwAHNoDeH3sJwQ0t5t5K0lrRx4IbBxG1aEbdpq+S2hxD5tSbya6eE31AivzZEfu0tu6ElOKAt9HbQ2xtu6CDvjpJOks4O3DCMuE1H4jZdlNz2cCK/TkR+XZXwG0Hk15nIr5tlN3QAB3SB3hV6N8MN3eXdQ9JT0suBG0YSt+lB3Ka3ktseReTXk8ivjxJ+o4n8ehH59bXshu7ggN7Q+0Dva7ihn7z7SwZIBjpwwxjiNv2J2wxScttjifwGEPkNVsJvHJHfQCK/IZbd0A8cMAj6YOhDDDcMlfcwyXDJCAduGE/cZhhxm5FKbnsCkd9wIr9RSvhNJPIbQeQ32rIbhoIDRkIfBX204YYx8h4rGScZ78ANk4jbjCVuM0HJbU8m8htH5DdRCb8pRH7jifwmWXbDGHDABOgToU8y3DBZ3lMkUyXTHLhhKnGbKcRtpiu57WlEflOJ/GYo4TedyG8akd9My26YDA6YDn0G9JmGG2bJe7ZkjmSuAzfMIG4zm7jNPCW3PZPIbw6R33wl/GYR+c0l8ltg2Q2zwAHzoM+HvsBww0J5L5Islixx4IbZxG0WEbdZquS25xD5LSbyW6aE31wivyVEfsstu2EhOGAp9GXQlxtuWCHvlZJVktUO3DCPuM1K4jZeSm57PpHfKiK/NUr4LSDyW03kt9ayG1aAA7ygr4G+1nDDOnmvl2yQbHTghoXEbdYTt/FWctuLiPw2EPltUsJvMZHfRiI/H8tuWAcO8Ia+CbqP4QZfeftJNkv8HbhhCXEbP+I2AUpueymR32Yiv0Al/JYR+fkT+QVZdoMvOCAAeiD0IMMNwfIOkWyRbHXghuXEbUKI22xTctsriPy2EPltV8JvJZHfViK/HZbdEAwO2AZ9O/Qdhht2ynuXZLdkjwM3rCJus4u4zV4lt72ayG83kd8+Jfy8iPz2EPntt+yGneCAvdD3Qd9vuOGAvA9KDkkOO3DDGuI2B4nbHFFy22uJ/A4R+R1Vwm8dkd9hIr9jlt1wABxwBPpR6McMNxyX9wnJSckpB25YT9zmBHGb00puewOR30kivzNK+G0k8jtF5HfWshuOgwNOQz8D/azhhnPyPi+5ILnowA3exG3OE7e5pOS2NxH5XSDyu6yEnw+R30UivyuW3XAOHHAJ+mXoVww3XJX3Ncl1yQ0HbvAlbnONuM1NJbftR+R3ncjvlhJ+m4n8bhD53bbshqvggJvQb0G/bbjhjrzvSu5J7jtwgz9xm7vEbR4oue0AIr97RH4PlfALJPK7T+T3yLIb7oADHkB/CP2R4YbH8n4ieSp55sANQcRtnhC3ea7ktoOJ/J4S+b1Qwi+EyO8Zkd9Ly254DA54Dv0F9JeGG17J+7XkjeStAzdsIW7zmrjNOyW3vZXI7w2R33sl/LYR+b0l8vtg2Q2vwAHvoL+H/sFww0d5f5J8lnxx4IbtxG0+Ebf5quS2dxD5fSby+6aE304ivy9Eft8tu+EjOOAr9G/Qvxtu+CHvn5Jfkt8O3LCLuM1P4jZ/lNz2biK/X0R+f5Xw20Pk95vIL1SgXTf8AAf8gf4X+r/fgG4ILe8wkrCScIH23bCXuE2YQN424QN13PY+Ir+wRH4RlPDbT+QXjsgvomU3hA78fweEhx4BekTDDZHkHVkSRRLVgRsOELeJTNwmmpLbPkjkF4XIL7oSfoeI/KIS+cWw7IZI4IBo0KNDj2G4Iaa8Y0liS+I4cMNh4jaxiNvEVXLbR4j8YhP5xVPC7yiRXxwiv/iW3RATHBAXejzo8Q03JJB3QkkiSWIHbjhG3CYhcZskSm77OJFfIiK/pEr4nSDyS0zkl8yyGxKAA5JATwo9meGG5PJOIUkp8Thww0niNimI26RSctuniPxSEvmlVsLvNJGfh8gvjWU3JAcHpIKeGnoaww1p5Z1Okl6SwYEbzhC3SUfcJqOS2z5L5JeeyC+TEn7niPwyEPlltuyGtOCAjNAzQc9suCGLvLNKskmyO3DDeeI2WYnb5FBy2xeI/LIR+eVUwu8ikV92Ir9clt2QBRyQA3pO6LkMN+SWdx5JXkk+B264RNwmD3Gb/Epu+zKRX14ivwJK+F0h8stH5FfQshtygwPyQy8AvaDhhkLyLiwpIinqwA1XidsUJm5TTMltXyPyK0LkV1wJv+tEfkWJ/EpYdkMhcEAx6MWhlzDcUFLepSSlJWUcuOEGcZtSxG3KKrntm0R+pYn8yinhd4vIrwyRX3nLbigJDigLvRz08oYbKsi7oqSSpLIDN9wmblORuE0VJbd9h8ivEpFfVSX87hL5VSbyq2bZDRXAAVWgV4VezXBDdXnXkNSU1HLghnvEbWoQt6mt5LbvE/nVJPKro4TfAyK/WkR+dS27oTo4oDb0OtDrGm6oJ+/6kgaShg7c8JC4TX3iNo2U3PYjIr8GRH6NlfB7TOTXkMiviWU31AMHNILeGHoTww1N5d1M0lzSwoEbnhC3aUbcpqWS235K5NecyK+VEn7PiPxaEPm1tuyGpuCAltBbQW9tuKGNvNtK2knaO3DDc+I2bYnbdFBy2y+I/NoR+XVUwu8lkV97Ir9Olt3QBhzQAXpH6J0MN3SWdxdJV0k3B254RdymC3Gb7kpu+zWRX1civx5K+L0h8utG5NfTshs6gwO6Q+8Bvafhhl7y7i3pI+nrwA1vidv0Jm7TT8ltvyPy60Pk118Jv/dEfn2J/AZYdkMvcEA/6P2hDzDcMFDegySDJUMcuOEDcZtBxG2GKrntj0R+g4n8hinh94nIbwiR33DLbhgIDhgKfRj04YYbRsh7pGSUZLQDN3wmbjOSuM0YJbf9hchvFJHfWCX8vhL5jSbyG2fZDSPAAWOgj4U+znDDeHlPkEyUTHLghm/EbSYQt5ms5La/E/lNJPKbooTfDyK/SUR+Uy27YTw4YDL0KdCnGm6YJu/pkhmSmQ7c8JO4zXTiNrOU3PYvIr8ZRH6zlfD7TeQ3k8hvjmU3TAMHzII+G/ocww1z5T1PMl+ywIEb/hC3mUfcZqGS2/5L5DefyG+REn6hCvK+tYDIb7FlN8wFByyEvgj6YsMNS+S9VLJMstyBG0ITt1lK3GaFktsOQ+S3jMhvpRJ+YYn8lhP5rbLshiXggBXQV0JfZbhhtby9JGskax24IRxxGy/iNuuU3HZ4Ir81RH7rlfCLQOS3lshvg2U3rAYHrIO+HvoGww0b5e0t2STxceCGiMRtvInb+Cq57UhEfpuI/PyU8ItM5OdD5LfZshs2ggN8oftB32y4wV/eAZJASZADN0QhbhNA3CZYyW1HJfILJPILUcIvGpFfEJHfFstu8AcHBEMPgb7FcMNWeW+TbJfscOCG6MRtthG32anktmMQ+W0n8tulhF9MIr8dRH67LbthKzhgJ/Rd0Hcbbtgj772SfZL9DtwQi7jNXuI2B5Tcdmwiv31EfgeV8ItD5LefyO+QZTfsAQccgH4Q+iHDDYflfURyVHLMgRviErc5QtzmuJLbjkfkd5TI74QSfvGJ/I4R+Z207IbD4IDj0E9AP2m44ZS8T0vOSM46cEMC4janiducU3LbCYn8zhD5nVfCLxGR31kivwuW3XAKHHAO+nnoFww3XJT3JcllyRUHbkhM3OYScZurSm47CZHfZSK/a0r4JSXyu0Lkd92yGy6CA65Cvwb9uuGGG/K+Kbklue3ADcmI29wkbnNHyW0nJ/K7ReR3Vwm/FER+t4n87ll2ww1wwB3od6HfM9xwX94PJA8ljxy4ISVxmwfEbR4ruW0Pkd9DIr8nSvilIvJ7ROT31LIb7oMDHkN/Av2p4YZn8n4ueSF56cANqYnbPCdu80rJbach8ntB5PdaCb+0RH4vifzeWHbDM3DAK+ivob8x3PBW3u8k7yUfHLghHXGbd8RtPiq57fREfu+J/D4p4ZeByO8Dkd9ny254Cw74CP0T9M+GG77I+6vkm+S7AzdkJG7zlbjNDyW3nYnI7xuR308l/DIT+X0n8vtl2Q1fwAE/oP+E/stww+9/b8lfSagg+27IQtzmD3Gb0EE6bjsrkd9fIr8wSvhlI/ILFcTjFzbIrht+gwP+3fr/ehjoYYP+64Zw8g4viSCJ6MAN2YnbhCduE0nJbecg8otA5BdZCb+cRH4RifyiWHZDOHBAJOiRoUcx3BBV3tEk0SUxHLghF3GbaMRtYiq57dxEftGJ/GIp4ZeHyC8GkV9sy26ICg6ICT0W9NiGG+LIO64kniS+AzfkJW4Tl7hNAiW3nY/ILx6RX0Il/PIT+cUn8ktk2Q1xwAEJoCeEnshwQ2J5J5EklSRz4IYCxG2SELdJruS2CxL5JSXyS6GEXyEiv2REfiktuyExOCA59BTQUxpu8Mg7lSS1JI0DNxQmbpOKuE1aJbddhMgvNZFfOiX8ihL5pSHyS2/ZDR5wQFro6aCnN9yQQd4ZJZkkmR24oRhxm4zEbbIoue3iRH6ZiPyyKuFXgsgvM5FfNstuyAAOyAI9K/RshhuyyzuHJKcklwM3lCRuk4O4TW4lt12KyC8nkV8eJfxKE/nlIvLLa9kN2cEBuaHngZ7XcEM+eeeXFJAUdOCGMsRt8hO3KaTktssS+RUg8iushF85Ir+CRH5FLLshHzigEPTC0IsYbigq72KS4pISDtxQnrhNMeI2JZXcdgUiv+JEfqWU8KtI5FeCyK+0ZTcUBQeUhF4KemnDDWXkXVZSTlLegRsqEbcpS9ymgpLbrkzkV47Ir6ISflWI/MoT+VWy7IYy4IAK0CtCr2S4obK8q0iqSqo5cENV4jZViNtUV3Lb1Yj8qhL51VDCrzqRXzUiv5qW3VAZHFAdeg3oNQ031JJ3bUkdSV0HbqhB3KY2cZt6Sm67JpFfHSK/+kr41SLyq0vk18CyG2qBA+pBrw+9geGGhvJuJGksaeLADbWJ2zQibtNUyW3XIfJrTOTXTAm/ukR+TYj8mlt2Q0NwQFPozaA3N9zQQt4tJa0krR24oR5xm5bEbdooue36RH6tiPzaKuHXgMivNZFfO8tuaAEOaAO9LfR2hhvay7uDpKOkkwM3NCRu04G4TWclt92IyK8jkV8XJfwaE/l1IvLratkN7cEBnaF3gd7VcEM3eXeX9JD0dOCGJsRtuhO36aXktpsS+fUg8uuthF8zIr+eRH59LLuhGzigF/Te0PsYbugr736S/pIBDtzQnLhNP+I2A5Xcdgsiv/5EfoOU8GtJ5DeAyG+wZTf0BQcMhD4I+mDDDUPkPVQyTDLcgRtaEbcZStxmhJLbbk3kN4zIb6QSfm2I/IYT+Y2y7IYh4IAR0EdCH2W4YbS8x0jGSsY5cENb4jZjiNuMV3Lb7Yj8xhL5TVDCrz2R3zgiv4mW3TAaHDAe+gToEw03TJL3ZMkUyVQHbuhA3GYycZtpSm67I5HfFCK/6Ur4dSLym0rkN8OyGyaBA6ZBnw59huGGmfKeJZktmePADZ2J28wibjNXyW13IfKbTeQ3Twm/rkR+c4j85lt2w0xwwFzo86DPN9ywQN4LJYskix24oRtxm4XEbZYoue3uRH6LiPyWKuHXg8hvMZHfMstuWAAOWAJ9KfRlhhuWy3uFZKVklQM39CRus4K4zWolt92LyG8lkZ+XEn69ifxWEfmtseyG5eCA1dC9oK8x3LBW3usk6yUbHLihD3GbdcRtNiq57b5EfuuJ/LyV8OtH5LeByG+TZTesBQdshO4NfZPhBh95+0r8JJsduKE/cRtf4jb+Sm57AJGfH5FfgBJ+A4n8NhP5BVp2gw84wB96APRAww1B8g6WhEi2OHDDIOI2wcRttiq57cFEfiFEftuU8BtC5LeFyG+7ZTcEgQO2Qt8Gfbvhhh3y3inZJdntwA1DidvsJG6zR8ltDyPy20Xkt1cJv+FEfruJ/PZZdsMOcMAe6Huh7zPcsF/eByQHJYccuGEEcZsDxG0OK7ntkUR+B4n8jijhN4rI7xCR31HLbtgPDjgM/Qj0o4Ybjsn7uOSE5KQDN4wmbnOcuM0pJbc9hsjvBJHfaSX8xhL5nSTyO2PZDcfAAaegn4Z+xnDDWXmfk5yXXHDghnHEbc4Rt7mo5LbHE/mdJ/K7pITfBCK/C0R+ly274Sw44CL0S9AvG264Iu+rkmuS6w7cMJG4zVXiNjeU3PYkIr9rRH43lfCbTOR3ncjvlmU3XAEH3IB+E/otww235X1Hcldyz4EbphC3uUPc5r6S255K5HeXyO+BEn7TiPzuEfk9tOyG2+CA+9AfQH9ouOGRvB9LnkieOnDDdOI2j4nbPFNy2zOI/J4Q+T1Xwm8mkd9TIr8Xlt3wCBzwDPpz6C8MN7yU9yvJa8kbB26YRdzmFXGbt0puezaR32siv3dK+M0h8ntD5PfeshteggPeQn8H/b3hhg/y/ij5JPnswA1zidt8JG7zRcltzyPy+0Tk91UJv/lEfp+J/L5ZdsMHcMAX6F+hfzPc8F3ePyQ/Jb8cuGEBcZsfxG1+K7nthUR+P4n8/ijht4jI7xeR31/LbvgODvgN/Q/0v4YbQgWHDhVaEkYSNti+GxYTt/n3u1nbhAvWcdtLiPzCEPmFV8JvKZFfWCK/CMF23fDvn/P/OSAc9PDQIwT/1w0R5R1JElkSxYEblhG3iUTcJqqS215O5BeZyC+aEn4riPyiEPlFt+yGiOCAqNCjQY9uuCGGvGNKYkliO3DDSuI2MYnbxFFy26uI/GIR+cVVwm81kV9sIr94lt0QAxwQB3pc6PEMN8SXdwJJQkkiB27wIm6TgLhNYiW3vYbILyGRXxIl/NYS+SUi8ktq2Q3xwQGJoSeBntRwQzJ5J5ekkKR04IZ1xG2SE7fxKLnt9UR+KYj8Uinht4HILyWRX2rLbkgGDvBATwU9teGGNPJOK0knSe/ADRuJ26QlbpNByW17E/mlI/LLqITfJiK/9ER+mSy7IQ04IAP0jNAzGW7ILO8skqySbA7c4EPcJgtxm+xKbtuXyC8rkV8OJfz8iPyyEfnltOyGzOCA7NBzQM9puCGXvHNL8kjyOnDDZuI2uYnb5FNy2/5EfnmI/PIr4RdA5JeXyK+AZTfkAgfkg54fegHDDQXlXUhSWFLEgRsCidsUIm5TVMltBxH5FSbyK6aEXzCRXxEiv+KW3VAQHFAUejHoxQ03lPj3mySlJKUduCGEuE1J4jZllNz2FiK/UkR+ZZXw20rkV5rIr5xlN5QAB5SBXhZ6OcMN5eVdQVJRUsmBG7YRt6lA3KayktveTuRXkcivihJ+O4j8KhH5VbXshvLggMrQq0CvarihmryrS2pIajpww07iNtWJ29RSctu7iPxqEPnVVsJvN5FfTSK/OpbdUA0cUAt6beh1DDfUlXc9SX1JAwdu2EPcph5xm4ZKbnsvkV99Ir9GSvjtI/JrQOTX2LIb6oIDGkJvBL2x4YYm8m4qaSZp7sAN+4nbNCVu00LJbR8g8mtG5NdSCb+DRH7NifxaWXZDE3BAC+gtobcy3NBa3m0kbSXtHLjhEHGbNsRt2iu57cNEfm2J/Doo4XeEyK8dkV9Hy25oDQ5oD70D9I6GGzrJu7Oki6SrAzccJW7TmbhNNyW3fYzIrwuRX3cl/I4T+XUl8uth2Q2dwAHdoHeH3sNwQ09595L0lvRx4IYTxG16Ebfpq+S2TxL59Sby66eE3ykivz5Efv0tu6EnOKAv9H7Q+xtuGCDvgZJBksEO3HCauM1A4jZDlNz2GSK/QUR+Q5XwO0vkN5jIb5hlNwwABwyBPhT6MMMNw+U9QjJSMsqBG84RtxlB3Ga0kts+T+Q3kshvjBJ+F4j8RhH5jbXshuHggNHQx0Afa7hhnLzHSyZIJjpww0XiNuOJ20xSctuXiPwmEPlNVsLvMpHfRCK/KZbdMA4cMAn6ZOhTDDdMlfc0yXTJDAduuELcZhpxm5lKbvsqkd90Ir9ZSvhdI/KbQeQ327IbpoIDZkKfBX224YY58p4rmSeZ78AN14nbzCVus0DJbd8g8ptH5LdQCb+bRH7zifwWWXbDHHDAAugLoS8y3LBY3kskSyXLHLjhFnGbJcRtliu57dtEfkuJ/FYo4XeHyG8Zkd9Ky25YDA5YDn0F9JWGG1bJe7XES7LGgRvuErdZTdxmrZLbvkfk50Xkt04Jv/tEfmuI/NZbdsMqcMBa6OugrzfcsEHeGyXekk0O3PCAuM1G4jY+Sm77IZGfN5GfrxJ+j4j8NhH5+Vl2wwZwgA90X+h+hhs2y9tfEiAJdOCGx8Rt/InbBCm57SdEfgFEfsFK+D0l8gsk8gux7IbN4IAg6MHQQww3bJH3Vsk2yXYHbnhG3GYrcZsdSm77OZHfNiK/nUr4vSDy207kt8uyG7aAA3ZA3wl9l+GG3fLeI9kr2efADS+J2+whbrNfyW2/IvLbS+R3QAm/10R++4j8Dlp2w25wwH7oB6AfNNxwSN6HJUckRx244Q1xm8PEbY4pue23RH5HiPyOK+H3jsjvKJHfCctuOAQOOAb9OPQThhtOyvuU5LTkjAM3vCduc4q4zVklt/2ByO80kd85Jfw+EvmdIfI7b9kNJ8EBZ6Gfg37ecMMFeV+UXJJcduCGT8RtLhK3uaLktj8T+V0i8ruqhN8XIr/LRH7XLLvhAjjgCvSr0K8Zbrgu7xuSm5JbDtzwlbjNDeI2t5Xc9jciv5tEfneU8PtO5HeLyO+uZTdcBwfchn4H+l3DDffkfV/yQPLQgRt+ELe5T9zmkZLb/knk94DI77ESfr+I/B4S+T2x7IZ74IBH0B9Df2K44am8n0meS144cMNv4jbPiNu8VHLbf4j8nhP5vVLC7y+R3wsiv9eW3fAUHPAS+ivorw03vJH3W8k7yXsHbghViPh39sRtPii57dBEfu+I/D4q4ReGyO89kd8ny254Aw74AP0j9E+GGz7L+4vkq+SbAzeEJW7zhbjNdyW3HY7I7yuR3w8l/MIT+X0j8vtp2Q2fwQHfof+A/tNwwy95//73Z5K/DtwQgbjNb+I2oUJ03HZEIr8/RH6hlfCLROT3l8gvTIhdN/wCB/y79f/10NDDhPzXDWHlHU4SXhIhxL4bIhO3CRfC2yaiktuOQuQXnsgvkhJ+UYn8IhD5RbbshrDggIjQI0GPbLghiryjSqJJojtwQzTiNlGJ28RQctvRifyiEfnFVMIvBpFfdCK/WJbdEAUcEAN6TOixDDfElnccSVxJPAduiEncJg5xm/hKbjsWkV9cIr8ESvjFJvKLR+SX0LIbYoMD4kNPAD2h4YZE8k4sSSJJ6sANcYjbJCZuk0zJbccl8ktC5JdcCb94RH5JifxSWHZDInBAMujJoacw3JBS3h5JKklqB26IT9zGQ9wmjZLbTkDkl4rIL60SfgmJ/FIT+aWz7IaU4IA00NNCT2e4Ib28M0gySjI5cEMi4jYZiNtkVnLbiYn8MhL5ZVHCLwmRXyYiv6yW3ZAeHJAZehboWQ03ZJN3dkkOSU4HbkhK3CY7cZtcSm47GZFfDiK/3Er4JSfyy0nkl8eyG7KBA3JBzw09j+GGvPLOJ8kvKeDADSmI2+QjblNQyW2nJPLLT+RXSAk/D5FfASK/wpbdkBccUBB6IeiFDTcUkXdRSTFJcQduSEXcpihxmxJKbjs1kV8xIr+SSvilIfIrTuRXyrIbioADSkAvCb2U4YbS8i4jKSsp58ANaYnblCFuU17Jbacj8itL5FdBCb//o8Ycgvz+viYc27Zt27Zt27Zt27YzRjjBzMS2bTvvyeJfb//uuu+tOouu6juLb33q6ZNnkUxEfhWJ/KpYdkM5cEAl6JWhVzHcUFXe1STVJTUcuCEzcZtqxG1qKrntLER+1Yn8ainhl5XIrwaRX23LbqgKDqgJvRb02oYb6si7rqSepL4DN2QjblOXuE0DJbedncivHpFfQyX8chD51Sfya2TZDXXAAQ2gN4TeyHBDY3k3kTSVNHPghpzEbZoQt2mu5LZzEfk1JfJroYRfbiK/ZkR+LS27oTE4oDn0FtBbGm5oJe/WkjaStg7ckIe4TWviNu2U3HZeIr82RH7tlfDLR+TXlsivg2U3tAIHtIPeHnoHww0d5d1J0lnSxYEb8hO36UTcpquS2y5A5NeZyK+bEn4Fify6EPl1t+yGjuCArtC7Qe9uuKGHvHtKekl6O3BDIeI2PYnb9FFy24WJ/HoR+fVVwq8IkV9vIr9+lt3QAxzQB3pf6P0MN/SX9wDJQMkgB24oStxmAHGbwUpuuxiR30AivyFK+BUn8htE5DfUshv6gwMGQx8CfajhhmHyHi4ZIRnpwA0liNsMJ24zSsltlyTyG0HkN1oJv1JEfiOJ/MZYdsMwcMAo6KOhjzHcMFbe4yTjJRMcuKE0cZtxxG0mKrntMkR+44n8JinhV5bIbwKR32TLbhgLDpgIfRL0yYYbpsh7qmSaZLoDN5QjbjOVuM0MJbddnshvGpHfTCX8KhD5TSfym2XZDVPAATOgz4Q+y3DDbHnPkcyVzHPghorEbeYQt5mv5LYrEfnNJfJboIRfZSK/eUR+Cy27YTY4YD70BdAXGm5YJO/FkiWSpQ7cUIW4zWLiNsuU3HZVIr8lRH7LlfCrRuS3lMhvhWU3LAIHLIO+HPoKww0r5b1KslqyxoEbqhO3WUXcZq2S265B5LeayG+dEn41ifzWEPmtt+yGleCAtdDXQV9vuGGDvDdKNkk2O3BDLeI2G4nbbFFy27WJ/DYR+W1Vwq8Okd9mIr9tlt2wARywBfpW6NsMN2yX9w7JTskuB26oS9xmB3Gb3Upuux6R304ivz1K+NUn8ttF5LfXshu2gwN2Q98Dfa/hhn3y3i85IDnowA0NiNvsJ27joeS2GxL5HSDy81TCrxGR30EiPy/LbtgHDvCA7gndy3CDt7x9JL4SPwduaEzcxoe4jb+S225C5OdL5BeghF9TIj8/Ir9Ay27wBgf4Qw+AHmi44ZC8D0uOSI46cEMz4jaHidscU3LbzYn8jhD5HVfCrwWR31EivyDLbjgEDjgG/Tj0IMMNJ+R9UnJKctqBG1oStzlJ3CZYyW23IvI7ReQXooRfayK/00R+oZbdcAIcEAw9BHqo4YYz8j4rOSc578ANbYjbnCVuc0HJbbcl8jtH5HdRCb92RH7nifwuWXbDGXDABegXoV8y3HBZ3lckVyXXHLihPXGbK8Rtriu57Q5EfleJ/G4o4deRyO8akd9Ny264DA64Dv0G9JuGG27J+7bkjuSuAzd0Im5zm7jNPSW33ZnI7w6R330l/LoQ+d0l8ntg2Q23wAH3oN+H/sBww0N5P5I8ljxx4IauxG0eEbd5quS2uxH5PSbye6aEX3civydEfs8tu+EhOOAp9GfQnxtueCHvl5JXktcO3NCDuM1L4jZvlNx2TyK/V0R+b5Xw60Xk95rI751lN7wAB7yB/hb6O8MN7+X9QfJR8smBG3oTt/lA3OazktvuQ+T3kcjvixJ+fYn8PhH5fbXshvfggM/Qv0D/arjhm7y/S35IfjpwQz/iNt+J2/xSctv9ifx+EPn9VsJvAJHfTyK/P5bd8A0c8Av6b+h/DDf8lXcYj7BhwkrCedh3w0DiNv++m7VNeA8dtz2IyC8skV8EJfwGE/mFI/KL6GHXDX/BAf9u/X89AvSIHv91QyR5R5ZEkUR14IYhxG0iE7eJpuS2hxL5RSHyi66E3zAiv6hEfjEsuyESOCAa9OjQYxhuiCnvWJLYkjgO3DCcuE0s4jZxldz2CCK/2ER+8ZTwG0nkF4fIL75lN8QEB8SFHg96fMMNCeSdUJJIktiBG0YRt0lI3CaJktseTeSXiMgvqRJ+Y4j8EhP5JbPshgTggCTQk0JPZrghubxTSFJKUjlww1jiNimI26RWctvjiPxSEvmlUcJvPJFfKiK/tJbdkBwckBp6GuhpDTekk3d6SQZJRgdumEDcJj1xm0xKbnsikV8GIr/MSvhNIvLLSOSXxbIb0oEDMkHPDD2L4Yas8s4myS7J4cANk4nbZCNuk1PJbU8h8stO5JdLCb+pRH45iPxyW3ZDVnBATui5oOc23JBH3nkl+ST5HbhhGnGbvMRtCii57elEfvmI/Aoq4TeDyC8/kV8hy27IAw4oAL0g9EKGGwrLu4ikqKSYAzfMJG5ThLhNcSW3PYvIryiRXwkl/GYT+RUj8itp2Q2FwQHFoZeAXtJwQyl5l/73XZKyDtwwh7hNaeI25ZTc9lwivzJEfuWV8JtH5FeWyK+CZTeUAgeUg14eegXDDRXlXUlSWVLFgRvmE7epRNymqpLbXkDkV5nIr5oSfguJ/KoQ+VW37IaK4ICq0KtBr264oYa8a0pqSWo7cMMi4jY1idvUUXLbi4n8ahH51VXCbwmRX20iv3qW3VADHFAHel3o9Qw31Jd3A0lDSSMHblhK3KYBcZvGSm57GZFfQyK/Jkr4LSfya0Tk19SyG+qDAxpDbwK9qeGGZvJuLmkhaenADSuI2zQnbtNKyW2vJPJrQeTXWgm/VUR+LYn82lh2QzNwQCvoraG3MdzQVt7tJO0lHRy4YTVxm3bEbToque01RH7tifw6KeG3lsivA5FfZ8tuaAsO6Ai9E/TOhhu6yLurpJukuwM3rCNu05W4TQ8lt72eyK8bkV9PJfw2EPl1J/LrZdkNXcABPaD3hN7LcENvefeR9JX0c+CGjcRt+hC36a/ktjcR+fUl8hughN9mIr9+RH4DLbuhNzigP/QB0Acabhgk78GSIZKhDtywhbjNYOI2w5Tc9lYivyFEfsOV8NtG5DeUyG+EZTcMAgcMgz4c+gjDDSPlPUoyWjLGgRu2E7cZRdxmrJLb3kHkN5rIb5wSfjuJ/MYQ+Y237IaR4ICx0MdBH2+4YYK8J0omSSY7cMMu4jYTidtMUXLbu4n8JhH5TVXCbw+R32Qiv2mW3TABHDAF+lTo0ww3TJf3DMlMySwHbthL3GYGcZvZSm57H5HfTCK/OUr47Sfym0XkN9eyG6aDA2ZDnwN9ruGGefKeL1kgWejADQeI28wnbrNIyW0fJPJbQOS3WAk/DyK/hUR+Syy7YR44YBH0xdCXGG5YKu9lkuWSFQ7c4EncZhlxm5VKbtuLyG85kd8qJfy8ifxWEPmttuyGpeCAldBXQV9tuGGNvNdK1knWO3CDD3GbtcRtNii5bV8iv3VEfhuV8PMj8ltP5LfJshvWgAM2QN8IfZPhhs3y3iLZKtnmwA3+xG22ELfZruS2A4j8thL57VDCL5DIbxuR307LbtgMDtgOfQf0nYYbdsl7t2SPZK8DNxwibrObuM0+Jbd9mMhvD5HffiX8jhD57SXyO2DZDbvAAfug74d+wHDDQXl7SDwlXg7ccJS4jQdxG28lt32MyM+TyM9HCb/jRH5eRH6+lt1wEBzgDd0Huq/hBj95+0sCJIEO3BBE3MafuM0hJbd9gsgvgMjvsBJ+J4n8Aon8jlh2gx844BD0w9CPGG44Ku9jkuOSIAduOEXc5hhxmxNKbvs0kd9xIr+TSvgFE/kFEfmdsuyGo+CAE9BPQj9luOG0vIMlIZJQB24IIW4TTNzmjJLbDiXyCyHyO6uE3xkiv1Aiv3OW3XAaHHAG+lno5ww3nJf3BclFySUHbjhL3OYCcZvLSm77HJHfRSK/K0r4nSfyu0Tkd9WyG86DAy5DvwL9quGGa/K+LrkhuenADReI21wnbnNLyW1fJPK7QeR3Wwm/S0R+N4n87lh2wzVwwC3ot6HfMdxwV973JPclDxy44TJxm3vEbR4que0rRH73ifweKeF3lcjvAZHfY8tuuAsOeAj9EfTHhhueyPup5JnkuQM3XCNu85S4zQslt32dyO8Zkd9LJfxuEPk9J/J7ZdkNT8ABL6C/hP7KcMNreb+RvJW8c+CGm8Rt3hC3ea/ktm8R+b0l8vughN9tIr93RH4fLbvhNTjgPfQP0D8abvgk78+SL5KvDtxwh7jNZ+I235Tc9l0ivy9Eft+V8LtH5PeVyO+HZTd8Agd8g/4d+g/DDT/l/Uvy+9/fHbjhPnGbX8Rt/iq57QdEfr+J/MJ46uD3kMjvD5FfWE+7bvgJDvgL/d9u/+thPf/rhnDyDi+JIInoad8Nj4jbhPfkbRNJyW0/JvKLQOQXWQm/J0R+EYn8olh2QzhwQCTokaFHMdwQVd7RJNElMRy44Slxm2jEbWIque1nRH7RifxiKeH3nMgvBpFfbMtuiAoOiAk9FvTYhhviyDuuJJ4kvgM3vCBuE5e4TQIlt/2SyC8ekV9CJfxeEfnFJ/JLZNkNccABCaAnhJ7IcENieSeRJJUkc+CG18RtkhC3Sa7ktt8Q+SUl8kuhhN9bIr9kRH4pLbshMTggOfQU0FMabkgl79SSNJK0DtzwjrhNauI26ZTc9nsivzREfumV8PtA5JeWyC+DZTekAgekg54eegbDDRnlnUmSWZLFgRs+ErfJRNwmq5Lb/kTkl5nIL5sSfp+J/LIQ+WW37IaM4ICs0LNBz264IYe8c0pySXI7cMMX4jY5idvkUXLbX4n8chH55VXC7xuRX24iv3yW3ZADHJAHel7o+Qw35Jd3AUlBSSEHbvhO3KYAcZvCSm77B5FfQSK/Ikr4/STyK0TkV9SyG/KDAwpDLwK9qOGGYvIuLikhKenADb+I2xQnblNKyW3/JvIrQeRXWgm/P0R+JYn8ylh2QzFwQCnopaGXMdxQVt7lJOUlFRy44S9xm3LEbSoque0wxXi/VZ7Ir5ISfmGJ/CoQ+VW27Iay4ICK0CtBr2y4oYq8q0qqSao7cEM44jZVidvUUHLb4Yn8qhH51VTCLwKRX3Uiv1qW3VAFHFADek3otQw31JZ3HUldST0HbohI3KYOcZv6Sm47EpFfXSK/Bkr4RSbyq0fk19CyG2qDA+pDbwC9oeGGRvJuLGkiaerADVGI2zQmbtNMyW1HJfJrQuTXXAm/aER+TYn8Wlh2QyNwQDPozaG3MNzQUt6tJK0lbRy4ITpxm1bEbdoque0YRH6tifzaKeEXk8ivDZFfe8tuaAkOaAu9HfT2hhs6yLujpJOkswM3xCJu05G4TRcltx2byK8TkV9XJfziEPl1JvLrZtkNHcABXaB3hd7NcEN3efeQ9JT0cuCGuMRtehC36a3ktuMR+fUk8uujhF98Ir9eRH59LbuhOzigN/Q+0Psabugn7/6SAZKBDtyQgLhNf+I2g5TcdkIivwFEfoOV8EtE5DeQyG+IZTf0AwcMgj4Y+hDDDUPlPUwyXDLCgRsSE7cZRtxmpJLbTkLkN5zIb5QSfkmJ/EYQ+Y227Iah4ICR0EdBH224YYy8x0rGScY7cEMy4jZjidtMUHLbyYn8xhH5TVTCLwWR33giv0mW3TAGHDAB+kTokww3TJb3FMlUyTQHbkhJ3GYKcZvpSm47FZHfVCK/GUr4pSbym0bkN9OyGyaDA6ZDnwF9puGGWfKeLZkjmevADWmI28wmbjNPyW2nJfKbQ+Q3Xwm/dER+c4n8Flh2wyxwwDzo86EvMNywUN6LJIslSxy4IT1xm0XEbZYque0MRH6LifyWKeGXkchvCZHfcstuWAgOWAp9GfTlhhtWyHulZJVktQM3ZCJus5K4zRolt52ZyG8Vkd9aJfyyEPmtJvJbZ9kNK8ABa6Cvhb7OcMN6eW+QbJRscuCGrMRtNhC32azktrMR+W0k8tuihF92Ir9NRH5bLbthPThgM/Qt0Lcabtgm7+2SHZKdDtyQg7jNduI2u5Tcdk4ivx1EfruV8MtF5LeTyG+PZTdsAwfsgr4b+h7DDXvlvU+yX3LAgRtyE7fZR9zmoJLbzkPkt5/Iz0MJv7xEfgeI/Dwtu2EvOOAgdA/onoYbvOTtLfGR+DpwQz7iNt7EbfyU3HZ+Ij8fIj9/JfwKEPn5EvkFWHaDFzjAD7o/9ADDDYHyPiQ5LDniwA0FidscIm5zVMltFyLyO0zkd0wJv8JEfkeI/I5bdkMgOOAo9GPQjxtuCJL3CclJySkHbihC3OYEcZvTSm67KJHfSSK/YCX8ihH5nSLyC7HshiBwwGnowdBDDDeEyvuM5KzknAM3FCduc4a4zXklt12CyO8skd8FJfxKEvmdI/K7aNkNoeCA89AvQL9ouOGSvC9LrkiuOnBDKeI2l4nbXFNy26WJ/K4Q+V1Xwq8Mkd9VIr8blt1wCRxwDfp16DcMN9yU9y3JbckdB24oS9zmFnGbu0puuxyR320iv3tK+JUn8rtD5HffshtuggPuQr8H/b7hhgfyfih5JHnswA0ViNs8JG7zRMltVyTye0Tk91QJv0pEfo+J/J5ZdsMDcMAT6E+hPzPc8FzeLyQvJa8cuKEycZsXxG1eK7ntKkR+L4n83ijhV5XI7xWR31vLbngODngN/Q30t4Yb3sn7veSD5KMDN1QjbvOeuM0nJbddncjvA5HfZyX8ahD5fSTy+2LZDe/AAZ+gf4b+xXDDV3l/k3yX/HDghprEbb4Rt/mp5LZrEfl9J/L7pYRfbSK/H0R+vy274Ss44Cf0X9B/G274I++/kjBeYcOE9bLvhjrEbf4StwnnpeO26xL5hfHi8QuvhF89Ir+wRH4RvOy64Q844N+t/6+Hhx7B679uiCjvSJLIkigO3FCfuE0k4jZRldx2AyK/yER+0ZTwa0jkF4XIL7plN0QEB0SFHg16dMMNMeQdUxJLEtuBGxoRt4lJ3CaOkttuTOQXi8gvrhJ+TYj8YhP5xbPshhjggDjQ40KPZ7ghvrwTSBJKEjlwQ1PiNgmI2yRWctvNiPwSEvklUcKvOZFfIiK/pJbdEB8ckBh6EuhJDTckk3dySQpJSgduaEHcJjlxm1RKbrslkV8KIr/USvi1IvJLSeSXxrIbkoEDUkFPDT2N4Ya08k4nSS/J4MANrYnbpCNuk1HJbbch8ktP5JdJCb+2RH4ZiPwyW3ZDWnBARuiZoGc23JBF3lkl2STZHbihHXGbrMRtcii57fZEftmI/HIq4deByC87kV8uy27IAg7IAT0n9FyGG3LLO48krySfAzd0JG6Th7hNfiW33YnILy+RXwEl/DoT+eUj8ito2Q25wQH5oReAXtBwQyF5F5YUkRR14IYuxG0KE7cppuS2uxL5FSHyK66EXzciv6JEfiUsu6EQOKAY9OLQSxhuKCnvUpLS/77NgRu6E7cpRdymrJLb7kHkV5rIr5wSfj2J/MoQ+ZW37IaS4ICy0MtBL2+4oYK8K0oqSSo7cEMv4jYVidtUUXLbvYn8KhH5VVXCrw+RX2Uiv2qW3VABHFAFelXo1Qw3VJd3DUlNSS0HbuhL3KYGcZvaSm67H5FfTSK/Okr49Sfyq0XkV9eyG6qDA2pDrwO9ruGGevKuL2kgaejADQOI29QnbtNIyW0PJPJrQOTXWAm/QUR+DYn8mlh2Qz1wQCPojaE3MdzQVN7NJM0lLRy4YTBxm2bEbVoque0hRH7NifxaKeE3lMivBZFfa8tuaAoOaAm9FfTWhhvayLutpJ2kvQM3DCNu05a4TQcltz2cyK8dkV9HJfxGEPm1J/LrZNkNbcABHaB3hN7JcENneXeRdJV0c+CGkcRtuhC36a7ktkcR+XUl8uuhhN9oIr9uRH49LbuhMzigO/Qe0Hsabugl796SPpK+DtwwhrhNb+I2/ZTc9lgivz5Efv2V8BtH5NeXyG+AZTf0Agf0g94f+gDDDQPlPUgyWDLEgRvGE7cZRNxmqJLbnkDkN5jIb5gSfhOJ/IYQ+Q237IaB4ICh0IdBH264YYS8R0pGSUY7cMMk4jYjiduMUXLbk4n8RhH5jVXCbwqR32giv3GW3TACHDAG+ljo4ww3jJf3BMlEySQHbphK3GYCcZvJSm57GpHfRCK/KUr4TSfym0TkN9WyG8aDAyZDnwJ9quGGafKeLpkhmenADTOI20wnbjNLyW3PJPKbQeQ3Wwm/WUR+M4n85lh2wzRwwCzos6HPMdwwV97zJPMlCxy4YTZxm3nEbRYque05RH7zifwWKeE3l8hvAZHfYstumAsOWAh9EfTFhhuWyHupZJlkuQM3zCNus5S4zQoltz2fyG8Zkd9KJfwWEPktJ/JbZdkNS8ABK6CvhL7KcMNqea+RrJWsc+CGhcRt1hC3Wa/kthcR+a0l8tughN9iIr91RH4bLbthNThgPfQN0Dcabtgk782SLZKtDtywhLjNZuI225Tc9lIivy1EftuV8FtG5LeVyG+HZTdsAgdsg74d+g7DDTvlvUuyW7LHgRuWE7fZRdxmr5LbXkHkt5vIb58SfiuJ/PYQ+e237Iad4IC90PdB32+44YC8D0o8JJ4O3LCKuM1B4jZeSm57NZGfB5GftxJ+a4j8PIn8fCy74QA4wAu6N3Qfww2+8vaT+EsCHLhhLXEbP+I2gUpuex2Rnz+R3yEl/NYT+QUQ+R227AZfcEAg9EPQDxtuOCLvo5JjkuMO3LCBuM1R4jZBSm57I5HfMSK/E0r4bSLyO07kd9KyG46AA4Kgn4B+0nDDKXmflgRLQhy4YTNxm9PEbUKV3PYWIr9gIr8zSvhtJfILIfI7a9kNp8ABodDPQD9ruOGcvM9LLkguOnDDNuI254nbXFJy29uJ/C4Q+V1Wwm8Hkd9FIr8rlt1wDhxwCfpl6FcMN1yV9zXJdckNB27YSdzmGnGbm0puexeR33Uiv1tK+O0m8rtB5HfbshuuggNuQr8F/bbhhjvyviu5J7nvwA17iNvcJW7zQMlt7yXyu0fk91AJv31EfveJ/B5ZdsMdcMAD6A+hPzLc8FjeTyRPJc8cuGE/cZsnxG2eK7ntA0R+T4n8Xijhd5DI7xmR30vLbngMDngO/QX0l4YbXsn7teSN5K0DN3gQt3lN3Oadktv2JPJ7Q+T3Xgk/LyK/t0R+Hyy74RU44B3099A/GG74KO9Pks+SLw7c4E3c5hNxm69KbtuHyO8zkd83Jfx8ify+EPl9t+yGj+CAr9C/Qf9uuOGHvH9Kfkl+O3CDH3Gbn8Rt/ii5bX8iv19Efn+V8Asg8vtN5BfG264bfoAD/kD/C/3fN6Abwso7nCS8JIK3fTcEErcJ583bJqK3jts+ROQXnsgvkhJ+h4n8IhD5RbbshrDe/++AiNAjQY9suCGKvKNKokmiO3DDEeI2UYnbxFBy20eJ/KIR+cVUwu8YkV90Ir9Ylt0QBRwQA3pM6LEMN8SWdxxJXEk8B244TtwmDnGb+EpuO4jILy6RXwIl/E4Q+cUj8kto2Q2xwQHxoSeAntBwQyJ5J5YkkSR14IaTxG0SE7dJpuS2TxH5JSHyS66E32kiv6REfiksuyEROCAZ9OTQUxhuSCnvVJLUkjQO3BBM3CYVcZu0Sm47hMgvNZFfOiX8Qon80hD5pbfshpTggLTQ00FPb7ghg7wzSjJJMjtwwxniNhmJ22RRcttnifwyEfllVcLvHJFfZiK/bJbdkAEckAV6VujZDDdkl3cOSU5JLgduOE/cJgdxm9xKbvsCkV9OIr88SvhdJPLLReSX17IbsoMDckPPAz2v4YZ88s4vKSAp6MANl4jb5CduU0jJbV8m8itA5FdYCb8rRH4FifyKWHZDPnBAIeiFoRcx3FBU3sUkxSUlHLjhKnGbYsRtSiq57WtEfsWJ/Eop4XedyK8EkV9py24oCg4oCb0U9NKGG8rIu6yknKS8AzfcIG5TlrhNBSW3fZPIrxyRX0Ul/G4R+ZUn8qtk2Q1lwAEVoFeEXslwQ2V5V5FUlVRz4IbbxG2qELepruS27xD5VSXyq6GE310iv2pEfjUtu6EyOKA69BrQaxpuqCXv2pI6kroO3HCPuE1t4jb1lNz2fSK/OkR+9ZXwe0DkV5fIr4FlN9QCB9SDXh96A8MNDeXdSNJY0sSBGx4St2lE3Kapktt+ROTXmMivmRJ+j4n8mhD5NbfshobggKbQm0FvbrihhbxbSlpJWjtwwxPiNi2J27RRcttPifxaEfm1VcLvGZFfayK/dpbd0AIc0AZ6W+jtDDe0l3cHSUdJJwdueE7cpgNxm85KbvsFkV9HIr8uSvi9JPLrROTX1bIb2oMDOkPvAr2r4YZu8u4u6SHp6cANr4jbdCdu00vJbb8m8utB5NdbCb83RH49ifz6WHZDN3BAL+i9ofcx3NBX3v0k/SUDHLjhLXGbfsRtBiq57XdEfv2J/AYp4feeyG8Akd9gy27oCw4YCH0Q9MGGG4bIe6hkmGS4Azd8IG4zlLjNCCW3/ZHIbxiR30gl/D4R+Q0n8htl2Q1DwAEjoI+EPspww2h5j5GMlYxz4IbPxG3GELcZr+S2vxD5jSXym6CE31civ3FEfhMtu2E0OGA89AnQJxpumCTvyZIpkqkO3PCNuM1k4jbTlNz2dyK/KUR+05Xw+0HkN5XIb4ZlN0wCB0yDPh36DMMNM+U9SzJbMseBG34St5lF3Gauktv+ReQ3m8hvnhJ+v4n85hD5zbfshpnggLnQ50Gfb7hhgbwXShZJFjtwwx/iNguJ2yxRctt/ifwWEfktVcIvTHHeby0m8ltm2Q0LwAFLoC+Fvsxww3J5r5CslKxy4IawxG1WELdZreS2wxH5rSTyW6OEX3giv1VEfmstu2E5OGA19DXQ1xpuWCfv9ZINko0O3BCBuM164jablNx2RCK/DUR+m5Xwi0Tkt5HIb4tlN6wDB2yCvhn6FsMNW+W9TbJdssOBGyITt9lG3GanktuOQuS3nchvlxJ+UYn8dhD57bbshq3ggJ3Qd0Hfbbhhj7z3SvZJ9jtwQzTiNnuJ2xxQctvRifz2EfkdVMIvBpHffiI/D8tu2AMOOAD9IHQPww2e8vaSeEt8HLghJnEbL+I2vkpuOxaRnzeRn58SfrGJ/HyI/Pwtu8ETHOAL3Q+6v+GGAHkHSg5JDjtwQxziNoHEbY4oue24RH6HiPyOKuEXj8jvMJHfMctuCAAHHIF+FPoxww3H5R0kOSE56cAN8YnbBBG3OaXkthMQ+Z0g8juthF9CIr+TRH7Blt1wHBxwCvpp6MGGG0LkHSo5IznrwA2JiNuEErc5p+S2ExP5nSHyO6+EXxIiv7NEfhcsuyEEHHAO+nnoFww3XJT3JcllyRUHbkhK3OYScZurSm47GZHfZSK/a0r4JSfyu0Lkd92yGy6CA65Cvwb9uuGGG/K+Kbklue3ADSmI29wkbnNHyW2nJPK7ReR3Vwm/VER+t4n87ll2ww1wwB3od6HfM9xwX94PJA8ljxy4ITVxmwfEbR4rue00RH4PifyeKOGXlsjvEZHfU8tuuA8OeAz9CfSnhhueyfu55IXkpQM3pCNu85y4zSslt52eyO8Fkd9rJfwyEPm9JPJ7Y9kNz8ABr6C/hv7GcMNbeb+TvJd8cOCGjMRt3hG3+ajktjMR+b0n8vukhF9mIr8PRH6fLbvhLTjgI/RP0D8bbvgi76+Sb5LvDtyQhbjNV+I2P5TcdlYiv29Efj+V8MtG5PedyO+XZTd8AQf8gP4T+i/DDb//vSV/JWF87LshO3GbP8RtwvrouO0cRH5/ifzCKeGXk8gvjA+PX3gfu274DQ74d+v/6+Ggh/f5rxsiyDuiJJIksgM35CJuE5G4TRQlt52byC8SkV9UJfzyEPlFJvKLZtkNEcABUaBHhR7NcEN0eceQxJTEcuCGvMRtYhC3ia3ktvMR+cUk8oujhF9+Ir9YRH5xLbshOjggNvQ40OMabogn7/iSBJKEDtxQgLhNfOI2iZTcdkEivwREfomV8CtE5JeQyC+JZTfEAwckgp4YehLDDUnlnUySXJLCgRsKE7dJRtwmpZLbLkLkl5zIL5USfkWJ/FIQ+aW27Iak4ICU0FNBT224IY2800rSSdI7cEMx4jZpidtkUHLbxYn80hH5ZVTCrwSRX3oiv0yW3ZAGHJABekbomQw3ZJZ3FklWSTYHbihJ3CYLcZvsSm67FJFfViK/HEr4lSbyy0bkl9OyGzKDA7JDzwE9p+GGXPLOLckjyevADWWI2+QmbpNPyW2XJfLLQ+SXXwm/ckR+eYn8Clh2Qy5wQD7o+aEXMNxQUN6FJIUlRRy4oTxxm0LEbYoque0KRH6FifyKKeFXkcivCJFfcctuKAgOKAq9GPTihhtKyLukpJSktAM3VCJuU5K4TRklt12ZyK8UkV9ZJfyqEPmVJvIrZ9kNJcABZaCXhV7OcEN5eVeQVJRUcuCGqsRtKhC3qazktqsR+VUk8quihF91Ir9KRH5VLbuhPDigMvQq0Ksabqgm7+qSGpKaDtxQg7hNdeI2tZTcdk0ivxpEfrWV8KtF5FeTyK+OZTdUAwfUgl4beh3DDXXlXU9SX9LAgRtqE7epR9ymoZLbrkPkV5/Ir5ESfnWJ/BoQ+TW27Ia64ICG0BtBb2y4oYm8m0qaSZo7cEM94jZNidu0UHLb9Yn8mhH5tVTCrwGRX3Miv1aW3dAEHNACekvorQw3tJZ3G0lbSTsHbmhI3KYNcZv2Sm67EZFfWyK/Dkr4NSbya0fk19GyG1qDA9pD7wC9o+GGTvLuLOki6erADU2I23QmbtNNyW03JfLrQuTXXQm/ZkR+XYn8elh2QydwQDfo3aH3MNzQU969JL0lfRy4oTlxm17Ebfoque0WRH69ifz6KeHXksivD5Fff8tu6AkO6Au9H/T+hhsGyHugZJBksAM3tCJuM5C4zRAlt92ayG8Qkd9QJfzaEPkNJvIbZtkNA8ABQ6APhT7McMNweY+QjJSMcuCGtsRtRhC3Ga3kttsR+Y0k8hujhF97Ir9RRH5jLbthODhgNPQx0Mcabhgn7/GSCZKJDtzQgbjNeOI2k5TcdkcivwlEfpOV8OtE5DeRyG+KZTeMAwdMgj4Z+hTDDVPlPU0yXTLDgRs6E7eZRtxmppLb7kLkN53Ib5YSfl2J/GYQ+c227Iap4ICZ0GdBn224YY6850rmSeY7cEM34jZzidssUHLb3Yn85hH5LVTCrweR33wiv0WW3TAHHLAA+kLoiww3LJb3EslSyTIHbuhJ3GYJcZvlSm67F5HfUiK/FUr49SbyW0bkt9KyGxaDA5ZDXwF9peGGVfJeLVkjWevADX2I26wmbrNOyW33JfJbQ+S3Xgm/fkR+a4n8Nlh2wypwwDro66FvMNywUd6bJJslWxy4oT9xm03EbbYque0BRH6bify2KeE3kMhvC5Hfdstu2AgO2Ap9G/Tthht2yHunZJdktwM3DCJus5O4zR4ltz2YyG8Xkd9eJfyGEPntJvLbZ9kNO8ABe6Dvhb7PcMN+eR+QHJR4OHDDUOI2B4jbeCq57WFEfgeJ/LyU8BtO5OdB5Odt2Q37wQGe0L2gextu8JG3r8RP4u/ADSOI2/gStwlQctsjifz8iPwClfAbReTnT+R3yLIbfMABAdADoR8y3HBY3kckRyXHHLhhNHGbI8Rtjiu57TFEfkeJ/IKU8BtL5HeMyO+EZTccBgcchx4E/YThhpPyPiU5LQl24IZxxG1OEbcJUXLb44n8ThP5hSrhN4HIL5jI74xlN5wEB4RAD4V+xnDDWXmfk5yXXHDghonEbc4Rt7mo5LYnEfmdJ/K7pITfZCK/C0R+ly274Sw44CL0S9AvG264Iu+rkmuS6w7cMIW4zVXiNjeU3PZUIr9rRH43lfCbRuR3ncjvlmU3XAEH3IB+E/otww235X1Hcldyz4EbphO3uUPc5r6S255B5HeXyO+BEn4zifzuEfk9tOyG2+CA+9AfQH9ouOGRvB9LnkieOnDDLOI2j4nbPFNy27OJ/J4Q+T1Xwm8Okd9TIr8Xlt3wCBzwDPpz6C8MN7yU9yvJa8kbB26YS9zmFXGbt0puex6R32siv3dK+M0n8ntD5PfeshteggPeQn8H/b3hhg/y/ij5JPnswA0LiNt8JG7zRcltLyTy+0Tk91UJv0VEfp+J/L5ZdsMHcMAX6F+hfzPc8F3ePyQ/Jb8cuGExcZsfxG1+K7ntJUR+P4n8/ijht5TI7xeR31/LbvgODvgN/Q/0v4YbwviGDRNWEk4S3te+G5YRt/n33axtIvjquO3lRH7hiPwiKuG3gsgvPJFfJF+7bvj37/x/DogAPSL0SL7/dUNkeUeRRJVEc+CGlcRtohC3ia7ktlcR+UUl8ouhhN9qIr9oRH4xLbshMjggOvQY0GMabogl79iSOJK4DtywhrhNbOI28ZTc9loivzhEfvGV8FtH5BeXyC+BZTfEAgfEgx4fegLDDQnlnUiSWJLEgRvWE7dJRNwmqZLb3kDkl5jIL5kSfhuJ/JIQ+SW37IaE4ICk0JNBT264IYW8U0pSSVI7cMMm4jYpidukUXLbm4n8UhH5pVXCbwuRX2oiv3SW3ZACHJAGelro6Qw3pJd3BklGSSYHbthK3CYDcZvMSm57G5FfRiK/LEr4bSfyy0Tkl9WyG9KDAzJDzwI9q+GGbPLOLskhyenADTuI22QnbpNLyW3vJPLLQeSXWwm/XUR+OYn88lh2QzZwQC7ouaHnMdyQV975JPklBRy4YTdxm3zEbQoque09RH75ifwKKeG3l8ivAJFfYctuyAsOKAi9EPTChhuKyLuopJikuAM37CNuU5S4TQklt72fyK8YkV9JJfwOEPkVJ/IrZdkNRcABJaCXhF7KcEPpf98kKSsp58ANB4nblCFuU17JbXsQ+ZUl8qughJ8nkV85Ir+Klt1QGhxQHnoF6BUNN1SSd2VJFUlVB27wIm5TmbhNNSW37U3kV4XIr7oSfj5EflWJ/GpYdkMlcEA16NWh1zDcUFPetSS1JXUcuMGXuE0t4jZ1ldy2H5FfbSK/ekr4+RP51SHyq2/ZDTXBAXWh14Ne33BDA3k3lDSSNHbghgDiNg2J2zRRctuBRH6NiPyaKuF3iMivMZFfM8tuaAAOaAK9KfRmhhuay7uFpKWklQM3HCZu04K4TWslt32EyK8lkV8bJfyOEvm1IvJra9kNzcEBraG3gd7WcEM7ebeXdJB0dOCGY8Rt2hO36aTkto8T+XUg8uushF8QkV9HIr8ult3QDhzQCXpn6F0MN3SVdzdJd0kPB244QdymG3Gbnkpu+ySRX3civ15K+J0i8utB5Nfbshu6ggN6Qu8Fvbfhhj7y7ivpJ+nvwA2nidv0JW4zQMltBxP59SPyG6iEXwiRX38iv0GW3dAHHDAA+kDogww3DJb3EMlQyTAHbgglbjOEuM1wJbd9hshvKJHfCCX8zhL5DSPyG2nZDYPBAcOhj4A+0nDDKHmPloyRjHXghnPEbUYTtxmn5LbPE/mNIfIbr4TfBSK/sUR+Eyy7YRQ4YBz08dAnGG6YKO9JksmSKQ7ccJG4zSTiNlOV3PYlIr/JRH7TlPC7TOQ3hchvumU3TAQHTIU+Dfp0ww0z5D1TMksy24EbrhC3mUncZo6S275K5DeLyG+uEn7XiPxmE/nNs+yGGeCAOdDnQp9nuGG+vBdIFkoWOXDDdeI2C4jbLFZy2zeI/BYS+S1Rwu8mkd8iIr+llt0wHxywGPoS6EsNNyyT93LJCslKB264RdxmOXGbVUpu+zaR3woiv9VK+N0h8ltJ5LfGshuWgQNWQV8NfY3hhrXyXidZL9ngwA13idusI26zUclt3yPyW0/kt0kJv/tEfhuI/DZbdsNacMBG6JugbzbcsEXeWyXbJNsduOEBcZutxG12KLnth0R+24j8dirh94jIbzuR3y7LbtgCDtgBfSf0XYYbdst7j2SvZJ8DNzwmbrOHuM1+Jbf9hMhvL5HfASX8nhL57SPyO2jZDbvBAfuhH4B+0HCDh7w9JV4SbwdueEbcxpO4jY+S235O5OdF5OerhN8LIj9vIj8/y27wAAf4QPeF7me4wV/eAZJAySEHbnhJ3CaAuM1hJbf9isgvkMjviBJ+r4n8DhH5HbXsBn9wwGHoR6AfNdxwTN7HJUGSEw7c8Ia4zXHiNieV3PZbIr8gIr9TSvi9I/I7QeR32rIbjoEDTkI/Bf204YZgeYdIQiVnHLjhPXGbEOI2Z5Xc9gciv1Aiv3NK+H0k8jtD5HfeshuCwQFnoZ+Dft5wwwV5X5Rcklx24IZPxG0uEre5ouS2PxP5XSLyu6qE3xciv8tEftcsu+ECOOAK9KvQrxluuC7vG5KbklsO3PCVuM0N4ja3ldz2NyK/m0R+d5Tw+07kd4vI765lN1wHB9yGfgf6XcMN9+R9X/JA8tCBG34Qt7lP3OaRktv+SeT3gMjvsRJ+v4j8HhL5PbHshnvggEfQH0N/YrjhqbyfSZ5LXjhww2/iNs+I27xUctt/iPyeE/m9UsLvL5HfCyK/15bd8BQc8BL6K+ivDTe8kfdbyTvJewduCFOC+H/2xG0+KLntsER+74j8PirhF47I7z2R3yfLbngDDvgA/SP0T4YbPsv7i+Sr5JsDN4QnbvOFuM13JbcdgcjvK5HfDyX8IhL5fSPy+2nZDZ/BAd+h/4D+03DDL3n//vc3yV8HbohE3OY3cZswfjpuOzKR3x8iv7BK+EUh8vtL5BfOz64bfoED/t36/3pY6OH8/uuG8PKOIIkoieRn3w1RidtE8ONtE1nJbUcj8otI5BdFCb/oRH6RiPyiWnZDeHBAZOhRoEc13BBN3tElMSQxHbghBnGb6MRtYim57ZhEfjGI/GIr4ReLyC8mkV8cy26IBg6IBT029DiGG+LKO54kviSBAzfEJm4Tj7hNQiW3HYfILz6RXyIl/OIS+SUg8kts2Q1xwQEJoSeCnthwQxJ5J5UkkyR34IZ4xG2SErdJoeS24xP5JSPyS6mEXwIiv+REfqksuyEJOCAF9JTQUxluSC3vNJK0knQO3JCQuE0a4jbpldx2IiK/tER+GZTwS0zkl47IL6NlN6QGB6SHngF6RsMNmeSdWZJFktWBG5IQt8lM3CabkttOSuSXhcgvuxJ+yYj8shL55bDshkzggGzQs0PPYbghp7xzSXJL8jhwQ3LiNrmI2+RVctspiPxyE/nlU8IvJZFfHiK//JbdkBMckBd6Puj5DTcUkHdBSSFJYQduSEXcpiBxmyJKbjs1kV8hIr+iSvilIfIrTORXzLIbCoADikAvCr2Y4Ybi8i4hKSkp5cANaYnblCBuU1rJbacj8itJ5FdGCb/0RH6liPzKWnZDcXBAaehloJc13FBO3uUlFSQVHbghA3Gb8sRtKim57YxEfhWI/Cor4ZeJyK8ikV8Vy24oBw6oBL0y9CqGG6rKu5qkuqSGAzdkJm5TjbhNTSW3nYXIrzqRXy0l/LIS+dUg8qtt2Q1VwQE1odeCXttwQx1515XUk9R34IZsxG3qErdpoOS2sxP51SPya6iEXw4iv/pEfo0su6EOOKAB9IbQGxluaCzvJpKmkmYO3JCTuE0T4jbNldx2LiK/pkR+LZTwy03k14zIr6VlNzQGBzSH3gJ6S8MNreTdWtJG0taBG/IQt2lN3KadktvOS+TXhsivvRJ++Yj82hL5dbDshlbggHbQ20PvYLiho7w7STpLujhwQ37iNp2I23RVctsFiPw6E/l1U8KvIJFfFyK/7pbd0BEc0BV6N+jdDTf0kHdPSS9JbwduKETcpidxmz5KbrswkV8vIr++SvgVIfLrTeTXz7IbeoAD+kDvC72f4Yb+8h4gGSgZ5MANRYnbDCBuM1jJbRcj8htI5DdECb/iRH6DiPyGWnZDf3DAYOhDoA813DBM3sMlIyQjHbihBHGb4cRtRim57ZJEfiOI/EYr4VeKyG8kkd8Yy24YBg4YBX009DGGG8bKe5xkvGSCAzeUJm4zjrjNRCW3XYbIbzyR3yQl/MoS+U0g8pts2Q1jwQEToU+CPtlwwxR5T5VMk0x34IZyxG2mEreZoeS2yxP5TSPym6mEXwUiv+lEfrMsu2EKOGAG9JnQZxlumC3vOZK5knkO3FCRuM0c4jbzldx2JSK/uUR+C5Twq0zkN4/Ib6FlN8wGB8yHvgD6QsMNi+S9WLJEstSBG6oQt1lM3GaZktuuSuS3hMhvuRJ+1Yj8lhL5rbDshkXggGXQl0NfYbhhpbxXSVZL1jhwQ3XiNquI26xVcts1iPxWE/mtU8KvJpHfGiK/9ZbdsBIcsBb6OujrDTdskPdGySbJZgduqEXcZiNxmy1Kbrs2kd8mIr+tSvjVIfLbTOS3zbIbNoADtkDfCn2b4Ybt8t4h2SnZ5cANdYnb7CBus1vJbdcj8ttJ5LdHCb/6RH67iPz2WnbDdnDAbuh7oO813LBP3vslByQHHbihAXGb/cRtPJTcdkMivwNEfp5K+DUi8jtI5Odl2Q37wAEe0D2hexlu8Ja3j8RX4ufADY2J2/gQt/FXcttNiPx8ifwClPBrSuTnR+QXaNkN3uAAf+gB0AMNNxyS92HJEclRB25oRtzmMHGbY0puuzmR3xEiv+NK+LUg8jtK5Bdk2Q2HwAHHoB+HHmS44YS8T0pOSU47cENL4jYnidsEK7ntVkR+p4j8QpTwa03kd5rIL9SyG06AA4Khh0APNdxwRt5nJeck5x24oQ1xm7PEbS4oue22RH7niPwuKuHXjsjvPJHfJctuOAMOuAD9IvRLhhsuy/uK5KrkmgM3tCduc4W4zXUlt92ByO8qkd8NJfw6EvldI/K7adkNl8EB16HfgH7TcMMted+W3JHcdeCGTsRtbhO3uafktjsT+d0h8ruvhF8XIr+7RH4PLLvhFjjgHvT70B8Ybngo70eSx5InDtzQlbjNI+I2T5Xcdjciv8dEfs+U8OtO5PeEyO+5ZTc8BAc8hf4M+nPDDS/k/VLySvLagRt6ELd5SdzmjZLb7knk94rI760Sfr2I/F4T+b2z7IYX4IA30N9Cf2e44b28P0g+Sj45cENv4jYfiNt8VnLbfYj8PhL5fVHCry+R3yciv6+W3fAeHPAZ+hfoXw03fJP3d8kPyU8HbuhH3OY7cZtfSm67P5HfDyK/30r4DSDy+0nk98eyG76BA35B/w39j+GGv/IO4x82TFhJOH/7bhhI3Obfd7O2Ce+v47YHEfmFJfKLoITfYCK/cER+Ef3tuuEvOODfrf+vR4Ae0f+/bogk78iSKJKoDtwwhLhNZOI20ZTc9lAivyhEftGV8BtG5BeVyC+GZTdEAgdEgx4degzDDTHlHUsSWxLHgRuGE7eJRdwmrpLbHkHkF5vIL54SfiOJ/OIQ+cW37IaY4IC40ONBj2+4IYG8E0oSSRI7cMMo4jYJidskUXLbo4n8EhH5JVXCbwyRX2Iiv2SW3ZAAHJAEelLoyQw3JJd3CklKSSoHbhhL3CYFcZvUSm57HJFfSiK/NEr4jSfyS0Xkl9ayG5KDA1JDTwM9reGGdPJOL8kgyejADROI26QnbpNJyW1PJPLLQOSXWQm/SUR+GYn8slh2QzpwQCbomaFnMdyQVd7ZJNklORy4YTJxm2zEbXIque0pRH7ZifxyKeE3lcgvB5FfbstuyAoOyAk9F/TchhvyyDuvJJ8kvwM3TCNuk5e4TQEltz2dyC8fkV9BJfxmEPnlJ/IrZNkNecABBaAXhF7IcENheReRFJUUc+CGmcRtihC3Ka7ktmcR+RUl8iuhhN9sIr9iRH4lLbuhMDigOPQS0Esabigl79L/vktS1oEb5hC3KU3cppyS255L5FeGyK+8En7ziPzKEvlVsOyGUuCActDLQ69guKGivCtJKkuqOHDDfOI2lYjbVFVy2wuI/CoT+VVTwm8hkV8VIr/qlt1QERxQFXo16NUNN9SQd01JLUltB25YRNymJnGbOkpuezGRXy0iv7pK+C0h8qtN5FfPshtqgAPqQK8LvZ7hhvrybiBpKGnkwA1Lids0IG7TWMltLyPya0jk10QJv+VEfo2I/JpadkN9cEBj6E2gNzXc0EzezSUtJC0duGEFcZvmxG1aKbntlUR+LYj8Wivht4rIryWRXxvLbmgGDmgFvTX0NoYb2sq7naS9pIMDN6wmbtOOuE1HJbe9hsivPZFfJyX81hL5dSDy62zZDW3BAR2hd4Le2XBDF3l3lXSTdHfghnXEbboSt+mh5LbXE/l1I/LrqYTfBiK/7kR+vSy7oQs4oAf0ntB7GW7oLe8+kr6Sfg7csJG4TR/iNv2V3PYmIr++RH4DlPDbTOTXj8hvoGU39AYH9Ic+APpAww2D5D1YMkQy1IEbthC3GUzcZpiS295K5DeEyG+4En7biPyGEvmNsOyGQeCAYdCHQx9huGGkvEdJRkvGOHDDduI2o4jbjFVy2zuI/EYT+Y1Twm8nkd8YIr/xlt0wEhwwFvo46OMNN0yQ90TJJMlkB27YRdxmInGbKUpuezeR3yQiv6lK+O0h8ptM5DfNshsmgAOmQJ8KfZrhhunyniGZKZnlwA17idvMIG4zW8lt7yPym0nkN0cJv/1EfrOI/OZadsN0cMBs6HOgzzXcME/e8yULJAsduOEAcZv5xG0WKbntg0R+C4j8Fivh50Hkt5DIb4llN8wDByyCvhj6EsMNS+W9TLJcssKBGzyJ2ywjbrNSyW17EfktJ/JbpYSfN5HfCiK/1ZbdsBQcsBL6KuirDTeskfdayTrJegdu8CFus5a4zQYlt+1L5LeOyG+jEn5+RH7rifw2WXbDGnDABugboW8y3LBZ3lskWyXbHLjBn7jNFuI225XcdgCR31Yivx1K+AUS+W0j8ttp2Q2bwQHboe+AvtNwwy5575bskex14IZDxG12E7fZp+S2DxP57SHy26+E3xEiv71Efgcsu2EXOGAf9P3QDxhuOChvD4mnxMuBG44St/EgbuOt5LaPEfl5Evn5KOF3nMjPi8jP17IbDoIDvKH7QPc13OAnb39JgCTQgRuCiNv4E7c5pOS2TxD5BRD5HVbC7ySRXyCR3xHLbvADBxyCfhj6EcMNR+V9THJcEuTADaeI2xwjbnNCyW2fJvI7TuR3Ugm/YCK/ICK/U5bdcBQccAL6SeinDDeclnewJEQS6sANIcRtgonbnFFy26FEfiFEfmeV8DtD5BdK5HfOshtOgwPOQD8L/ZzhhvPyviC5KLnkwA1nidtcIG5zWcltnyPyu0jkd0UJv/NEfpeI/K5adsN5cMBl6FegXzXccE3e1yU3JDcduOECcZvrxG1uKbnti0R+N4j8bivhd4nI7yaR3x3LbrgGDrgF/Tb0O4Yb7sr7nuS+5IEDN1wmbnOPuM1DJbd9hcjvPpHfIyX8rhL5PSDye2zZDXfBAQ+hP4L+2HDDE3k/lTyTPHfghmvEbZ4St3mh5LavE/k9I/J7qYTfDSK/50R+ryy74Qk44AX0l9BfGW54Le83kreSdw7ccJO4zRviNu+V3PYtIr+3RH4flPC7TeT3jsjvo2U3vAYHvIf+AfpHww2f5P1Z8kXy1YEb7hC3+Uzc5puS275L5PeFyO+7En73iPy+Evn9sOyGT+CAb9C/Q/9huOGnvH9Jfv/7uwM33Cdu84u4zV8lt/2AyO83kV+YAB38HhL5/SHyCxtg1w0/wQF/of/b7X89bMB/3RBO3uElESQRA+y74RFxm/ABvG0iKbntx0R+EYj8Iivh94TILyKRXxTLbggHDogEPTL0KIYboso7miS6JIYDNzwlbhONuE1MJbf9jMgvOpFfLCX8nhP5xSDyi23ZDVHBATGhx4Ie23BDHHnHlcSTxHfghhfEbeISt0mg5LZfEvnFI/JLqITfKyK/+ER+iSy7IQ44IAH0hNATGW5ILO8kkqSSZA7c8Jq4TRLiNsmV3PYbIr+kRH4plPB7S+SXjMgvpWU3JAYHJIeeAnpKww2p5J1akkaS1oEb3hG3SU3cJp2S235P5JeGyC+9En4fiPzSEvllsOyGVOCAdNDTQ89guCGjvDNJMkuyOHDDR+I2mYjbZFVy25+I/DIT+WVTwu8zkV8WIr/slt2QERyQFXo26NkNN+SQd05JLkluB274QtwmJ3GbPEpu+yuRXy4iv7xK+H0j8stN5JfPshtygAPyQM8LPZ/hhvzyLiApKCnkwA3fidsUIG5TWMlt/yDyK0jkV0QJv59EfoWI/IpadkN+cEBh6EWgFzXcUEzexSUlJCUduOEXcZvixG1KKbnt30R+JYj8Sivh94fIrySRXxnLbigGDigFvTT0MoYbysq7nKS8pIIDN/wlblOOuE1FJbcdpiTvt8oT+VVSwi8skV8FIr/Klt1QFhxQEXol6JUNN1SRd1VJNUl1B24IR9ymKnGbGkpuOzyRXzUiv5pK+EUg8qtO5FfLshuqgANqQK8JvZbhhtryriOpK6nnwA0RidvUIW5TX8ltRyLyq0vk10AJv8hEfvWI/BpadkNtcEB96A2gNzTc0EjejSVNJE0duCEKcZvGxG2aKbntqER+TYj8mivhF43IrymRXwvLbmgEDmgGvTn0FoYbWsq7laS1pI0DN0QnbtOKuE1bJbcdg8ivNZFfOyX8YhL5tSHya2/ZDS3BAW2ht4Pe3nBDB3l3lHSSdHbghljEbToSt+mi5LZjE/l1IvLrqoRfHCK/zkR+3Sy7oQM4oAv0rtC7GW7oLu8ekp6SXg7cEJe4TQ/iNr2V3HY8Ir+eRH59lPCLT+TXi8ivr2U3dAcH9IbeB3pfww395N1fMkAy0IEbEhC36U/cZpCS205I5DeAyG+wEn6JiPwGEvkNseyGfuCAQdAHQx9iuGGovIdJhktGOHBDYuI2w4jbjFRy20mI/IYT+Y1Swi8pkd8IIr/Rlt0wFBwwEvoo6KMNN4yR91jJOMl4B25IRtxmLHGbCUpuOzmR3zgiv4lK+KUg8htP5DfJshvGgAMmQJ8IfZLhhsnyniKZKpnmwA0pidtMIW4zXcltpyLym0rkN0MJv9REftOI/GZadsNkcMB06DOgzzTcMEvesyVzJHMduCENcZvZxG3mKbnttER+c4j85ivhl47Iby6R3wLLbpgFDpgHfT70BYYbFsp7kWSxZIkDN6QnbrOIuM1SJbedgchvMZHfMiX8MhL5LSHyW27ZDQvBAUuhL4O+3HDDCnmvlKySrHbghkzEbVYSt1mj5LYzE/mtIvJbq4RfFiK/1UR+6yy7YQU4YA30tdDXGW5YL+8Nko2STQ7ckJW4zQbiNpuV3HY2Ir+NRH5blPDLTuS3ichvq2U3rAcHbIa+BfpWww3b5L1dskOy04EbchC32U7cZpeS285J5LeDyG+3En65iPx2EvntseyGbeCAXdB3Q99juGGvvPdJ9ksOOHBDbuI2+4jbHFRy23mI/PYT+Xko4ZeXyO8AkZ+nZTfsBQcchO4B3dNwg5e8vSU+El8HbshH3MabuI2fktvOT+TnQ+Tnr4RfASI/XyK/AMtu8AIH+EH3hx5guCFQ3ockhyVHHLihIHGbQ8Rtjiq57UJEfoeJ/I4p4VeYyO8Ikd9xy24IBAcchX4M+nHDDUHyPiE5KTnlwA1FiNucIG5zWsltFyXyO0nkF6yEXzEiv1NEfiGW3RAEDjgNPRh6iOGGUHmfkZyVnHPghuLEbc4Qtzmv5LZLEPmdJfK7oIRfSSK/c0R+Fy27IRQccB76BegXDTdckvdlyRXJVQduKEXc5jJxm2tKbrs0kd8VIr/rSviVIfK7SuR3w7IbLoEDrkG/Dv2G4Yab8r4luS2548ANZYnb3CJuc1fJbZcj8rtN5HdPCb/yRH53iPzuW3bDTXDAXej3oN833PBA3g8ljySPHbihAnGbh8Rtnii57YpEfo+I/J4q4VeJyO8xkd8zy254AA54Av0p9GeGG57L+4XkpeSVAzdUJm7zgrjNayW3XYXI7yWR3xsl/KoS+b0i8ntr2Q3PwQGvob+B/tZwwzt5v5d8kHx04IZqxG3eE7f5pOS2qxP5fSDy+6yEXw0iv49Efl8su+EdOOAT9M/Qvxhu+Crvb5Lvkh8O3FCTuM034jY/ldx2LSK/70R+v5Twq03k94PI77dlN3wFB/yE/gv6b8MNf+T9VxImMGyYsIH23VCHuM1f4jbhAnXcdl0ivzCBPH7hlfCrR+QXlsgvQqBdN/wBB/y79f/18NAjBP7XDRHlHUkSWRLFgRvqE7eJRNwmqpLbbkDkF5nIL5oSfg2J/KIQ+UW37IaI4ICo0KNBj264IYa8Y0piSWI7cEMj4jYxidvEUXLbjYn8YhH5xVXCrwmRX2wiv3iW3RADHBAHelzo8Qw3xJd3AklCSSIHbmhK3CYBcZvESm67GZFfQiK/JEr4NSfyS0Tkl9SyG+KDAxJDTwI9qeGGZPJOLkkhSenADS2I2yQnbpNKyW23JPJLQeSXWgm/VkR+KYn80lh2QzJwQCroqaGnMdyQVt7pJOklGRy4oTVxm3TEbTIque02RH7pifwyKeHXlsgvA5FfZstuSAsOyAg9E/TMhhuyyDurJJskuwM3tCNuk5W4TQ4lt92eyC8bkV9OJfw6EPllJ/LLZdkNWcABOaDnhJ7LcENueeeR5JXkc+CGjsRt8hC3ya/ktjsR+eUl8iughF9nIr98RH4FLbshNzggP/QC0Asabigk78KSIpKiDtzQhbhNYeI2xZTcdlcivyJEfsWV8OtG5FeUyK+EZTcUAgcUg14cegnDDSXlXUpS+t+3OXBDd+I2pYjblFVy2z2I/EoT+ZVTwq8nkV8ZIr/ylt1QEhxQFno56OUNN1SQd0VJJUllB27oRdymInGbKkpuuzeRXyUiv6pK+PUh8qtM5FfNshsqgAOqQK8KvZrhhuryriGpKanlwA19idvUIG5TW8lt9yPyq0nkV0cJv/5EfrWI/OpadkN1cEBt6HWg1zXcUE/e9SUNJA0duGEAcZv6xG0aKbntgUR+DYj8GivhN4jIryGRXxPLbqgHDmgEvTH0JoYbmsq7maS5pIUDNwwmbtOMuE1LJbc9hMivOZFfKyX8hhL5tSDya23ZDU3BAS2ht4Le2nBDG3m3lbSTtHfghmHEbdoSt+mg5LaHE/m1I/LrqITfCCK/9kR+nSy7oQ04oAP0jtA7GW7oLO8ukq6Sbg7cMJK4TRfiNt2V3PYoIr+uRH49lPAbTeTXjcivp2U3dAYHdIfeA3pPww295N1b0kfS14EbxhC36U3cpp+S2x5L5NeHyK+/En7jiPz6EvkNsOyGXuCAftD7Qx9guGGgvAdJBkuGOHDDeOI2g4jbDFVy2xOI/AYT+Q1Twm8ikd8QIr/hlt0wEBwwFPow6MMNN4yQ90jJKMloB26YRNxmJHGbMUpuezKR3ygiv7FK+E0h8htN5DfOshtGgAPGQB8LfZzhhvHyniCZKJnkwA1TidtMIG4zWcltTyPym0jkN0UJv+lEfpOI/KZadsN4cMBk6FOgTzXcME3e0yUzJDMduGEGcZvpxG1mKbntmUR+M4j8ZivhN4vIbyaR3xzLbpgGDpgFfTb0OYYb5sp7nmS+ZIEDN8wmbjOPuM1CJbc9h8hvPpHfIiX85hL5LSDyW2zZDXPBAQuhL4K+2HDDEnkvlSyTLHfghnnEbZYSt1mh5LbnE/ktI/JbqYTfAiK/5UR+qyy7YQk4YAX0ldBXGW5YLe81krWSdQ7csJC4zRriNuuV3PYiIr+1RH4blPBbTOS3jshvo2U3rAYHrIe+AfpGww2b5L1ZskWy1YEblhC32UzcZpuS215K5LeFyG+7En7LiPy2EvntsOyGTeCAbdC3Q99huGGnvHdJdkv2OHDDcuI2u4jb7FVy2yuI/HYT+e1Twm8lkd8eIr/9lt2wExywF/o+6PsNNxyQ90GJh8TTgRtWEbc5SNzGS8ltryby8yDy81bCbw2RnyeRn49lNxwAB3hB94buY7jBV95+En9JgAM3rCVu40fcJlDJba8j8vMn8jukhN96Ir8AIr/Dlt3gCw4IhH4I+mHDDUfkfVRyTHLcgRs2ELc5StwmSMltbyTyO0bkd0IJv01EfseJ/E5adsMRcEAQ9BPQTxpuOCXv05JgSYgDN2wmbnOauE2oktveQuQXTOR3Rgm/rUR+IUR+Zy274RQ4IBT6GehnDTeck/d5yQXJRQdu2Ebc5jxxm0tKbns7kd8FIr/LSvjtIPK7SOR3xbIbzoEDLkG/DP2K4Yar8r4muS654cANO4nbXCNuc1PJbe8i8rtO5HdLCb/dRH43iPxuW3bDVXDATei3oN823HBH3ncl9yT3HbhhD3Gbu8RtHii57b1EfveI/B4q4bePyO8+kd8jy264Aw54AP0h9EeGGx7L+4nkqeSZAzfsJ27zhLjNcyW3fYDI7ymR3wsl/A4S+T0j8ntp2Q2PwQHPob+A/tJwwyt5v5a8kbx14AYP4javidu8U3LbnkR+b4j83ivh50Xk95bI74NlN7wCB7yD/h76B8MNH+X9SfJZ8sWBG7yJ23wibvNVyW37EPl9JvL7poSfL5HfFyK/75bd8BEc8BX6N+jfDTf8kPdPyS/Jbwdu8CNu85O4zR8lt+1P5PeLyO+vEn4BRH6/ifzCHLLrhh/ggD/Q/0L/9w3ohrDyDicJL4lwyL4bAonbhDvE2ybiIR23fYjILzyRXyQl/A4T+UUg8ots2Q1hD/2/AyJCjwQ9suGGKPKOKokmie7ADUeI20QlbhNDyW0fJfKLRuQXUwm/Y0R+0Yn8Yll2QxRwQAzoMaHHMtwQW95xJHEl8Ry44ThxmzjEbeIrue0gIr+4RH4JlPA7QeQXj8gvoWU3xAYHxIeeAHpCww2J5J1YkkSS1IEbThK3SUzcJpmS2z5F5JeEyC+5En6nifySEvmlsOyGROCAZNCTQ09huCGlvFNJUkvSOHBDMHGbVMRt0iq57RAiv9REfumU8Asl8ktD5JfeshtSggPSQk8HPb3hhgzyzijJJMnswA1niNtkJG6TRcltnyXyy0Tkl1UJv3NEfpmJ/LJZdkMGcEAW6FmhZzPckF3eOSQ5JbkcuOE8cZscxG1yK7ntC0R+OYn88ijhd5HILxeRX17LbsgODsgNPQ/0vIYb8sk7v6SApKADN1wibpOfuE0hJbd9mcivAJFfYSX8rhD5FSTyK2LZDfnAAYWgF4ZexHBDUXkXkxSXlHDghqvEbYoRtymp5LavEfkVJ/IrpYTfdSK/EkR+pS27oSg4oCT0UtBLG24oI++yknKS8g7ccIO4TVniNhWU3PZNIr9yRH4VlfC7ReRXnsivkmU3lAEHVIBeEXolww2V5V1FUlVSzYEbbhO3qULcprqS275D5FeVyK+GEn53ifyqEfnVtOyGyuCA6tBrQK9puKGWvGtL6kjqOnDDPeI2tYnb1FNy2/eJ/OoQ+dVXwu8BkV9dIr8Glt1QCxxQD3p96A0MNzSUdyNJY0kTB254SNymEXGbpkpu+xGRX2Miv2ZK+D0m8mtC5NfcshsaggOaQm8GvbnhhhbybilpJWntwA1PiNu0JG7TRsltPyXya0Xk11YJv2dEfq2J/NpZdkMLcEAb6G2htzPc0F7eHSQdJZ0cuOE5cZsOxG06K7ntF0R+HYn8uijh95LIrxORX1fLbmgPDugMvQv0roYbusm7u6SHpKcDN7wibtOduE0vJbf9msivB5FfbyX83hD59STy62PZDd3AAb2g94bex3BDX3n3k/SXDHDghrfEbfoRtxmo5LbfEfn1J/IbpITfeyK/AUR+gy27oS84YCD0QdAHG24YIu+hkmGS4Q7c8IG4zVDiNiOU3PZHIr9hRH4jlfD7ROQ3nMhvlGU3DAEHjIA+Evooww2j5T1GMlYyzoEbPhO3GUPcZryS2/5C5DeWyG+CEn5fifzGEflNtOyG0eCA8dAnQJ9ouGGSvCdLpkimOnDDN+I2k4nbTFNy29+J/KYQ+U1Xwu8Hkd9UIr8Zlt0wCRwwDfp06DMMN8yU9yzJbMkcB274SdxmFnGbuUpu+xeR32wiv3lK+P0m8ptD5DffshtmggPmQp8Hfb7hhgXyXihZJFnswA1/iNssJG6zRMlt/yXyW0Tkt1QJvzCleL+1mMhvmWU3LAAHLIG+FPoyww3L5b1CslKyyoEbwhK3WUHcZrWS2w5H5LeSyG+NEn7hifxWEfmtteyG5eCA1dDXQF9ruGGdvNdLNkg2OnBDBOI264nbbFJy2xGJ/DYQ+W1Wwi8Skd9GIr8tlt2wDhywCfpm6FsMN2yV9zbJdskOB26ITNxmG3GbnUpuOwqR33Yiv11K+EUl8ttB5Lfbshu2ggN2Qt8Ffbfhhj3y3ivZJ9nvwA3RiNvsJW5zQMltRyfy20fkd1AJvxhEfvuJ/Dwsu2EPOOAA9IPQPQw3eMrbS+It8XHghpjEbbyI2/gque1YRH7eRH5+SvjFJvLzIfLzt+wGT3CAL3Q/6P6GGwLkHSg5JDnswA1xiNsEErc5ouS24xL5HSLyO6qEXzwiv8NEfscsuyEAHHAE+lHoxww3HJd3kOSE5KQDN8QnbhNE3OaUkttOQOR3gsjvtBJ+CYn8ThL5BVt2w3FwwCnop6EHG24IkXeo5IzkrAM3JCJuE0rc5pyS205M5HeGyO+8En5JiPzOEvldsOyGEHDAOejnoV8w3HBR3pcklyVXHLghKXGbS8Rtriq57WREfpeJ/K4p4ZecyO8Kkd91y264CA64Cv0a9OuGG27I+6bkluS2AzekIG5zk7jNHSW3nZLI7xaR310l/FIR+d0m8rtn2Q03wAF3oN+Ffs9ww315P5A8lDxy4IbUxG0eELd5rOS20xD5PSTye6KEX1oiv0dEfk8tu+E+OOAx9CfQnxpueCbv55IXkpcO3JCOuM1z4javlNx2eiK/F0R+r5Xwy0Dk95LI741lNzwDB7yC/hr6G8MNb+X9TvJe8sGBGzISt3lH3OajktvOROT3nsjvkxJ+mYn8PhD5fbbshrfggI/QP0H/bLjhi7y/Sr5JvjtwQxbiNl+J2/xQcttZify+Efn9VMIvG5HfdyK/X5bd8AUc8AP6T+i/DDf8/veW/JWEOWzfDdmJ2/whbhP2sI7bzkHk95fIL5wSfjmJ/MIc5vELf9iuG36DA/7d+v96OOjhD//XDRHkHVESSRLZgRtyEbeJSNwmipLbzk3kF4nIL6oSfnmI/CIT+UWz7IYI4IAo0KNCj2a4Ibq8Y0hiSmI5cENe4jYxiNvEVnLb+Yj8YhL5xVHCLz+RXywiv7iW3RAdHBAbehzocQ03xJN3fEkCSUIHbihA3CY+cZtESm67IJFfAiK/xEr4FSLyS0jkl8SyG+KBAxJBTww9ieGGpPJOJkkuSeHADYWJ2yQjbpNSyW0XIfJLTuSXSgm/okR+KYj8Ult2Q1JwQEroqaCnNtyQRt5pJekk6R24oRhxm7TEbTIoue3iRH7piPwyKuFXgsgvPZFfJstuSAMOyAA9I/RMhhsyyzuLJKskmwM3lCRuk4W4TXYlt12KyC8rkV8OJfxKE/llI/LLadkNmcEB2aHngJ7TcEMueeeW5JHkdeCGMsRtchO3yafktssS+eUh8suvhF85Ir+8RH4FLLshFzggH/T80AsYbigo70KSwpIiDtxQnrhNIeI2RZXcdgUiv8JEfsWU8KtI5FeEyK+4ZTcUBAcUhV4MenHDDSXkXVJSSlLagRsqEbcpSdymjJLbrkzkV4rIr6wSflWI/EoT+ZWz7IYS4IAy0MtCL2e4oby8K0gqSio5cENV4jYViNtUVnLb1Yj8KhL5VVHCrzqRXyUiv6qW3VAeHFAZehXoVQ03VJN3dUkNSU0HbqhB3KY6cZtaSm67JpFfDSK/2kr41SLyq0nkV8eyG6qBA2pBrw29juGGuvKuJ6kvaeDADbWJ29QjbtNQyW3XIfKrT+TXSAm/ukR+DYj8Glt2Q11wQEPojaA3NtzQRN5NJc0kzR24oR5xm6bEbVooue36RH7NiPxaKuHXgMivOZFfK8tuaAIOaAG9JfRWhhtay7uNpK2knQM3NCRu04a4TXslt92IyK8tkV8HJfwaE/m1I/LraNkNrcEB7aF3gN7RcEMneXeWdJF0deCGJsRtOhO36abktpsS+XUh8uuuhF8zIr+uRH49LLuhEzigG/Tu0HsYbugp716S3pI+DtzQnLhNL+I2fZXcdgsiv95Efv2U8GtJ5NeHyK+/ZTf0BAf0hd4Pen/DDQPkPVAySDLYgRtaEbcZSNxmiJLbbk3kN4jIb6gSfm2I/AYT+Q2z7IYB4IAh0IdCH2a4Ybi8R0hGSkY5cENb4jYjiNuMVnLb7Yj8RhL5jVHCrz2R3ygiv7GW3TAcHDAa+hjoYw03jJP3eMkEyUQHbuhA3GY8cZtJSm67I5HfBCK/yUr4dSLym0jkN8WyG8aBAyZBnwx9iuGGqfKeJpkumeHADZ2J20wjbjNTyW13IfKbTuQ3Swm/rkR+M4j8Zlt2w1RwwEzos6DPNtwwR95zJfMk8x24oRtxm7nEbRYoue3uRH7ziPwWKuHXg8hvPpHfIstumAMOWAB9IfRFhhsWy3uJZKlkmQM39CRus4S4zXIlt92LyG8pkd8KJfx6E/ktI/JbadkNi8EBy6GvgL7ScMMqea+WrJGsdeCGPsRtVhO3WafktvsS+a0h8luvhF8/Ir+1RH4bLLthFThgHfT10DcYbtgo702SzZItDtzQn7jNJuI2W5Xc9gAiv81EftuU8BtI5LeFyG+7ZTdsBAdshb4N+nbDDTvkvVOyS7LbgRsGEbfZSdxmj5LbHkzkt4vIb68SfkOI/HYT+e2z7IYd4IA90PdC32e4Yb+8D0gOSjwcuGEocZsDxG08ldz2MCK/g0R+Xkr4DSfy8yDy87bshv3gAE/oXtC9DTf4yNtX4ifxd+CGEcRtfInbBCi57ZFEfn5EfoFK+I0i8vMn8jtk2Q0+4IAA6IHQDxluOCzvI5KjkmMO3DCauM0R4jbHldz2GCK/o0R+QUr4jSXyO0bkd8KyGw6DA45DD4J+wnDDSXmfkpyWBDtwwzjiNqeI24Qoue3xRH6nifxClfCbQOQXTOR3xrIbToIDQqCHQj9juOGsvM9JzksuOHDDROI254jbXFRy25OI/M4T+V1Swm8ykd8FIr/Llt1wFhxwEfol6JcNN1yR91XJNcl1B26YQtzmKnGbG0pueyqR3zUiv5tK+E0j8rtO5HfLshuugANuQL8J/ZbhhtvyviO5K7nnwA3TidvcIW5zX8ltzyDyu0vk90AJv5lEfveI/B5adsNtcMB96A+gPzTc8EjejyVPJE8duGEWcZvHxG2eKbnt2UR+T4j8nivhN4fI7ymR3wvLbngEDngG/Tn0F4YbXsr7leS15I0DN8wlbvOKuM1bJbc9j8jvNZHfOyX85hP5vSHye2/ZDS/BAW+hv4P+3nDDB3l/lHySfHbghgXEbT4St/mi5LYXEvl9IvL7qoTfIiK/z0R+3yy74QM44Av0r9C/GW74Lu8fkp+SXw7csJi4zQ/iNr+V3PYSIr+fRH5/lPBbSuT3i8jvr2U3fAcH/Ib+B/pfww1hjoQNE1YSThL+iH03LCNu8++7WdtEOKLjtpcT+YUj8ouohN8KIr/wRH6Rjth1w79/5/9zQAToEaFHOvJfN0SWdxRJVEk0B25YSdwmCnGb6EpuexWRX1QivxhK+K0m8otG5BfTshsigwOiQ48BPabhhljyji2JI4nrwA1riNvEJm4TT8ltryXyi0PkF18Jv3VEfnGJ/BJYdkMscEA86PGhJzDckFDeiSSJJUkcuGE9cZtExG2SKrntDUR+iYn8kinht5HILwmRX3LLbkgIDkgKPRn05IYbUsg7pSSVJLUDN2wibpOSuE0aJbe9mcgvFZFfWiX8thD5pSbyS2fZDSnAAWmgp4WeznBDenlnkGSUZHLghq3EbTIQt8ms5La3EfllJPLLooTfdiK/TER+WS27IT04IDP0LNCzGm7IJu/skhySnA7csIO4TXbiNrmU3PZOIr8cRH65lfDbReSXk8gvj2U3ZAMH5IKeG3oeww155Z1Pkl9SwIEbdhO3yUfcpqCS295D5JefyK+QEn57ifwKEPkVtuyGvOCAgtALQS9suKGIvItKikmKO3DDPuI2RYnblFBy2/uJ/IoR+ZVUwu8AkV9xIr9Slt1QBBxQAnpJ6KUMN5T+902SspJyDtxwkLhNGeI25ZXctgeRX1kivwpK+HkS+ZUj8qto2Q2lwQHloVeAXtFwQyV5V5ZUkVR14AYv4jaVidtUU3Lb3kR+VYj8qivh50PkV5XIr4ZlN1QCB1SDXh16DcMNNeVdS1JbUseBG3yJ29QiblNXyW37EfnVJvKrp4SfP5FfHSK/+pbdUBMcUBd6Pej1DTc0kHdDSSNJYwduCCBu05C4TRMltx1I5NeIyK+pEn6HiPwaE/k1s+yGBuCAJtCbQm9muKG5vFtIWkpaOXDDYeI2LYjbtFZy20eI/FoS+bVRwu8okV8rIr+2lt3QHBzQGnob6G0NN7STd3tJB0lHB244RtymPXGbTkpu+ziRXwciv85K+AUR+XUk8uti2Q3twAGdoHeG3sVwQ1d5d5N0l/Rw4IYTxG26EbfpqeS2TxL5dSfy66WE3ykivx5Efr0tu6ErOKAn9F7Qextu6CPvvpJ+kv4O3HCauE1f4jYDlNx2MJFfPyK/gUr4hRD59SfyG2TZDX3AAQOgD4Q+yHDDYHkPkQyVDHPghlDiNkOI2wxXcttniPyGEvmNUMLvLJHfMCK/kZbdMBgcMBz6COgjDTeMkvdoyRjJWAduOEfcZjRxm3FKbvs8kd8YIr/xSvhdIPIbS+Q3wbIbRoEDxkEfD32C4YaJ8p4kmSyZ4sANF4nbTCJuM1XJbV8i8ptM5DdNCb/LRH5TiPymW3bDRHDAVOjToE833DBD3jMlsySzHbjhCnGbmcRt5ii57atEfrOI/OYq4XeNyG82kd88y26YAQ6YA30u9HmGG+bLe4FkoWSRAzdcJ26zgLjNYiW3fYPIbyGR3xIl/G4S+S0i8ltq2Q3zwQGLoS+BvtRwwzJ5L5eskKx04IZbxG2WE7dZpeS2bxP5rSDyW62E3x0iv5VEfmssu2EZOGAV9NXQ1xhuWCvvdZL1kg0O3HCXuM064jYbldz2PSK/9UR+m5Twu0/kt4HIb7NlN6wFB2yEvgn6ZsMNW+S9VbJNst2BGx4Qt9lK3GaHktt+SOS3jchvpxJ+j4j8thP57bLshi3ggB3Qd0LfZbhht7z3SPZK9jlww2PiNnuI2+xXcttPiPz2EvkdUMLvKZHfPiK/g5bdsBscsB/6AegHDTd4yNtT4iXxduCGZ8RtPInb+Ci57edEfl5Efr5K+L0g8vMm8vOz7AYPcIAPdF/ofoYb/OUdIAmUHHLghpfEbQKI2xxWctuviPwCifyOKOH3msjvEJHfUctu8AcHHIZ+BPpRww3H5H1cEiQ54cANb4jbHCduc1LJbb8l8gsi8julhN87Ir8TRH6nLbvhGDjgJPRT0E8bbgiWd4gkVHLGgRveE7cJIW5zVsltfyDyCyXyO6eE30civzNEfuctuyEYHHAW+jno5w03XJD3RcklyWUHbvhE3OYicZsrSm77M5HfJSK/q0r4fSHyu0zkd82yGy6AA65Avwr9muGG6/K+IbkpueXADV+J29wgbnNbyW1/I/K7SeR3Rwm/70R+t4j87lp2w3VwwG3od6DfNdxwT973JQ8kDx244Qdxm/vEbR4pue2fRH4PiPweK+H3i8jvIZHfE8tuuAcOeAT9MfQnhhueyvuZ5LnkhQM3/CZu84y4zUslt/2HyO85kd8rJfz+Evm9IPJ7bdkNT8EBL6G/gv7acMMbeb+VvJO8d+CGMKWJ/2dP3OaDktsOS+T3jsjvoxJ+4Yj83hP5fbLshjfggA/QP0L/ZLjhs7y/SL5KvjlwQ3jiNl+I23xXctsRiPy+Evn9UMIvIpHfNyK/n5bd8Bkc8B36D+g/DTf8kvfvf3+T/HXghkjEbX4TtwlzVMdtRyby+0PkF1YJvyhEfn+J/MIdteuGX+CAf7f+vx4Werij/3VDeHlHkESURDpq3w1RidtEOMrbJrKS245G5BeRyC+KEn7RifwiEflFteyG8OCAyNCjQI9quCGavKNLYkhiOnBDDOI20YnbxFJy2zGJ/GIQ+cVWwi8WkV9MIr84lt0QDRwQC3ps6HEMN8SVdzxJfEkCB26ITdwmHnGbhEpuOw6RX3wiv0RK+MUl8ktA5JfYshviggMSQk8EPbHhhiTyTipJJknuwA3xiNskJW6TQsltxyfyS0bkl1IJvwREfsmJ/FJZdkMScEAK6CmhpzLckFreaSRpJekcuCEhcZs0xG3SK7ntRER+aYn8Mijhl5jILx2RX0bLbkgNDkgPPQP0jIYbMsk7sySLJKsDNyQhbpOZuE02JbedlMgvC5FfdiX8khH5ZSXyy2HZDZnAAdmgZ4eew3BDTnnnkuSW5HHghuTEbXIRt8mr5LZTEPnlJvLLp4RfSiK/PER++S27ISc4IC/0fNDzG24oIO+CkkKSwg7ckIq4TUHiNkWU3HZqIr9CRH5FlfBLQ+RXmMivmGU3FAAHFIFeFHoxww3F5V1CUlJSyoEb0hK3KUHcprSS205H5FeSyK+MEn7pifxKEfmVteyG4uCA0tDLQC9ruKGcvMtLKkgqOnBDBuI25YnbVFJy2xmJ/CoQ+VVWwi8TkV9FIr8qlt1QDhxQCXpl6FUMN1SVdzVJdUkNB27ITNymGnGbmkpuOwuRX3Uiv1pK+GUl8qtB5FfbshuqggNqQq8FvbbhhjryriupJ6nvwA3ZiNvUJW7TQMltZyfyq0fk11AJvxxEfvWJ/BpZdkMdcEAD6A2hNzLc0FjeTSRNJc0cuCEncZsmxG2aK7ntXER+TYn8Wijhl5vIrxmRX0vLbmgMDmgOvQX0loYbWsm7taSNpK0DN+QhbtOauE07Jbedl8ivDZFfeyX88hH5tSXy62DZDa3AAe2gt4fewXBDR3l3knSWdHHghvzEbToRt+mq5LYLEPl1JvLrpoRfQSK/LkR+3S27oSM4oCv0btC7G27oIe+ekl6S3g7cUIi4TU/iNn2U3HZhIr9eRH59lfArQuTXm8ivn2U39AAH9IHeF3o/ww395T1AMlAyyIEbihK3GUDcZrCS2y5G5DeQyG+IEn7FifwGEfkNteyG/uCAwdCHQB9quGGYvIdLRkhGOnBDCeI2w4nbjFJy2yWJ/EYQ+Y1Wwq8Ukd9IIr8xlt0wDBwwCvpo6GMMN4yV9zjJeMkEB24oTdxmHHGbiUpuuwyR33giv0lK+JUl8ptA5DfZshvGggMmQp8EfbLhhinyniqZJpnuwA3liNtMJW4zQ8ltlyfym0bkN1MJvwpEftOJ/GZZdsMUcMAM6DOhzzLcMFvecyRzJfMcuKEicZs5xG3mK7ntSkR+c4n8FijhV5nIbx6R30LLbpgNDpgPfQH0hYYbFsl7sWSJZKkDN1QhbrOYuM0yJbddlchvCZHfciX8qhH5LSXyW2HZDYvAAcugL4e+wnDDSnmvkqyWrHHghurEbVYRt1mr5LZrEPmtJvJbp4RfTSK/NUR+6y27YSU4YC30ddDXG27YIO+Nkk2SzQ7cUIu4zUbiNluU3HZtIr9NRH5blfCrQ+S3mchvm2U3bAAHbIG+Ffo2ww3b5b1DslOyy4Eb6hK32UHcZreS265H5LeTyG+PEn71ifx2EfntteyG7eCA3dD3QN9ruGGfvPdLDkgOOnBDA+I2+4nbeCi57YZEfgeI/DyV8GtE5HeQyM/Lshv2gQM8oHtC9zLc4C1vH4mvxM+BGxoTt/EhbuOv5LabEPn5EvkFKOHXlMjPj8gv0LIbvMEB/tADoAcabjgk78OSI5KjDtzQjLjNYeI2x5TcdnMivyNEfseV8GtB5HeUyC/IshsOgQOOQT8OPchwwwl5n5Sckpx24IaWxG1OErcJVnLbrYj8ThH5hSjh15rI7zSRX6hlN5wABwRDD4EearjhjLzPSs5JzjtwQxviNmeJ21xQctttifzOEfldVMKvHZHfeSK/S5bdcAYccAH6ReiXDDdclvcVyVXJNQduaE/c5gpxm+tKbrsDkd9VIr8bSvh1JPK7RuR307IbLoMDrkO/Af2m4YZb8r4tuSO568ANnYjb3CZuc0/JbXcm8rtD5HdfCb8uRH53ifweWHbDLXDAPej3oT8w3PBQ3o8kjyVPHLihK3GbR8Rtniq57W5Efo+J/J4p4dedyO8Jkd9zy254CA54Cv0Z9OeGG17I+6XkleS1Azf0IG7zkrjNGyW33ZPI7xWR31sl/HoR+b0m8ntn2Q0vwAFvoL+F/s5ww3t5f5B8lHxy4IbexG0+ELf5rOS2+xD5fSTy+6KEX18iv09Efl8tu+E9OOAz9C/Qvxpu+Cbv75Ifkp8O3NCPuM134ja/lNx2fyK/H0R+v5XwG0Dk95PI749lN3wDB/yC/hv6H8MNf+Ud5ljYMGEl4Y7Zd8NA4jb/vpu1TfhjOm57EJFfWCK/CEr4DSbyC0fkF/GYXTf8BQf8u/X/9QjQIx77rxsiyTuyJIokqgM3DCFuE5m4TTQltz2UyC8KkV90JfyGEflFJfKLYdkNkcAB0aBHhx7DcENMeceSxJbEceCG4cRtYhG3iavktkcQ+cUm8ounhN9IIr84RH7xLbshJjggLvR40OMbbkgg74SSRJLEDtwwirhNQuI2SZTc9mgiv0REfkmV8BtD5JeYyC+ZZTckAAckgZ4UejLDDcnlnUKSUpLKgRvGErdJQdwmtZLbHkfkl5LIL40SfuOJ/FIR+aW17Ibk4IDU0NNAT2u4IZ2800sySDI6cMME4jbpidtkUnLbE4n8MhD5ZVbCbxKRX0YivyyW3ZAOHJAJemboWQw3ZJV3Nkl2SQ4HbphM3CYbcZucSm57CpFfdiK/XEr4TSXyy0Hkl9uyG7KCA3JCzwU9t+GGPPLOK8knye/ADdOI2+QlblNAyW1PJ/LLR+RXUAm/GUR++Yn8Cll2Qx5wQAHoBaEXMtxQWN5FJEUlxRy4YSZxmyLEbYorue1ZRH5FifxKKOE3m8ivGJFfSctuKAwOKA69BPSShhtKybv0v++SlHXghjnEbUoTtymn5LbnEvmVIfIrr4TfPCK/skR+FSy7oRQ4oBz08tArGG6oKO9KksqSKg7cMJ+4TSXiNlWV3PYCIr/KRH7VlPBbSORXhcivumU3VAQHVIVeDXp1ww015F1TUktS24EbFhG3qUncpo6S215M5FeLyK+uEn5LiPxqE/nVs+yGGuCAOtDrQq9nuKG+vBtIGkoaOXDDUuI2DYjbNFZy28uI/BoS+TVRwm85kV8jIr+mlt1QHxzQGHoT6E0NNzSTd3NJC0lLB25YQdymOXGbVkpueyWRXwsiv9ZK+K0i8mtJ5NfGshuagQNaQW8NvY3hhrbybidpL+ngwA2ridu0I27TUcltryHya0/k10kJv7VEfh2I/DpbdkNbcEBH6J2gdzbc0EXeXSXdJN0duGEdcZuuxG16KLnt9UR+3Yj8eirht4HIrzuRXy/LbugCDugBvSf0XoYbesu7j6SvpJ8DN2wkbtOHuE1/Jbe9icivL5HfACX8NhP59SPyG2jZDb3BAf2hD4A+0HDDIHkPlgyRDHXghi3EbQYTtxmm5La3EvkNIfIbroTfNiK/oUR+Iyy7YRA4YBj04dBHGG4YKe9RktGSMQ7csJ24zSjiNmOV3PYOIr/RRH7jlPDbSeQ3hshvvGU3jAQHjIU+Dvp4ww0T5D1RMkky2YEbdhG3mUjcZoqS295N5DeJyG+qEn57iPwmE/lNs+yGCeCAKdCnQp9muGG6vGdIZkpmOXDDXuI2M4jbzFZy2/uI/GYS+c1Rwm8/kd8sIr+5lt0wHRwwG/oc6HMNN8yT93zJAslCB244QNxmPnGbRUpu+yCR3wIiv8VK+HkQ+S0k8lti2Q3zwAGLoC+GvsRww1J5L5Msl6xw4AZP4jbLiNusVHLbXkR+y4n8Vinh503kt4LIb7VlNywFB6yEvgr6asMNa+S9VrJOst6BG3yI26wlbrNByW37EvmtI/LbqISfH5HfeiK/TZbdsAYcsAH6RuibDDdslvcWyVbJNgdu8Cdus4W4zXYltx1A5LeVyG+HEn6BRH7biPx2WnbDZnDAdug7oO803LBL3rsleyR7HbjhEHGb3cRt9im57cNEfnuI/PYr4XeEyG8vkd8By27YBQ7YB30/9AOGGw7K20PiKfFy4IajxG08iNt4K7ntY0R+nkR+Pkr4HSfy8yLy87XshoPgAG/oPtB9DTf4ydtfEiAJdOCGIOI2/sRtDim57RNEfgFEfoeV8DtJ5BdI5HfEshv8wAGHoB+GfsRww1F5H5MclwQ5cMMp4jbHiNucUHLbp4n8jhP5nVTCL5jIL4jI75RlNxwFB5yAfhL6KcMNp+UdLAmRhDpwQwhxm2DiNmeU3HYokV8Ikd9ZJfzOEPmFEvmds+yG0+CAM9DPQj9nuOG8vC9ILkouOXDDWeI2F4jbXFZy2+eI/C4S+V1Rwu88kd8lIr+rlt1wHhxwGfoV6FcNN1yT93XJDclNB264QNzmOnGbW0pu+yKR3w0iv9tK+F0i8rtJ5HfHshuugQNuQb8N/Y7hhrvyvie5L3ngwA2XidvcI27zUMltXyHyu0/k90gJv6tEfg+I/B5bdsNdcMBD6I+gPzbc8ETeTyXPJM8duOEacZunxG1eKLnt60R+z4j8Xirhd4PI7zmR3yvLbngCDngB/SX0V4YbXsv7jeSt5J0DN9wkbvOGuM17Jbd9i8jvLZHfByX8bhP5vSPy+2jZDa/BAe+hf4D+0XDDJ3l/lnyRfHXghjvEbT4Tt/mm5LbvEvl9IfL7roTfPSK/r0R+Pyy74RM44Bv079B/GG74Ke9fkt///u7ADfeJ2/wibvNXyW0/IPL7TeQX5rgOfg+J/P4Q+YU9btcNP8EBf6H/2+1/Pezx/7ohnLzDSyJIIh6374ZHxG3CH+dtE0nJbT8m8otA5BdZCb8nRH4RifyiWHZDOHBAJOiRoUcx3BBV3tEk0SUxHLjhKXGbaMRtYiq57WdEftGJ/GIp4fecyC8GkV9sy26ICg6ICT0W9NiGG+LIO64kniS+Aze8IG4Tl7hNAiW3/ZLILx6RX0Il/F4R+cUn8ktk2Q1xwAEJoCeEnshwQ2J5J5EklSRz4IbXxG2SELdJruS23xD5JSXyS6GE31siv2REfiktuyExOCA59BTQUxpuSCXv1JI0krQO3PCOuE1q4jbplNz2eyK/NER+6ZXw+0Dkl5bIL4NlN6QCB6SDnh56BsMNGeWdSZJZksWBGz4St8lE3Carktv+ROSXmcgvmxJ+n4n8shD5ZbfshozggKzQs0HPbrghh7xzSnJJcjtwwxfiNjmJ2+RRcttfifxyEfnlVcLvG5FfbiK/fJbdkAMckAd6Xuj5DDfkl3cBSUFJIQdu+E7cpgBxm8JKbvsHkV9BIr8iSvj9JPIrRORX1LIb8oMDCkMvAr2o4YZi8i4uKSEp6cANv4jbFCduU0rJbf8m8itB5FdaCb8/RH4lifzKWHZDMXBAKeiloZcx3FBW3uUk5SUVHLjhL3GbcsRtKiq57X8/xPqt8kR+lZTwC0vkV4HIr7JlN5QFB1SEXgl6ZcMNVeRdVVJNUt2BG8IRt6lK3KaGktsOT+RXjcivphJ+EYj8qhP51bLshirggBrQa0KvZbihtrzrSOpK6jlwQ0TiNnWI29RXctuRiPzqEvk1UMIvMpFfPSK/hpbdUBscUB96A+gNDTc0kndjSRNJUwduiELcpjFxm2ZKbjsqkV8TIr/mSvhFI/JrSuTXwrIbGoEDmkFvDr2F4YaW8m4laS1p48AN0YnbtCJu01bJbccg8mtN5NdOCb+YRH5tiPzaW3ZDS3BAW+jtoLc33NBB3h0lnSSdHbghFnGbjsRtuii57dhEfp2I/Loq4ReHyK8zkV83y27oAA7oAr0r9G6GG7rLu4ekp6SXAzfEJW7Tg7hNbyW3HY/IryeRXx8l/OIT+fUi8utr2Q3dwQG9ofeB3tdwQz9595cMkAx04IYExG36E7cZpOS2ExL5DSDyG6yEXyIiv4FEfkMsu6EfOGAQ9MHQhxhuGCrvYZLhkhEO3JCYuM0w4jYjldx2EiK/4UR+o5TwS0rkN4LIb7RlNwwFB4yEPgr6aMMNY+Q9VjJOMt6BG5IRtxlL3GaCkttOTuQ3jshvohJ+KYj8xhP5TbLshjHggAnQJ0KfZLhhsrynSKZKpjlwQ0riNlOI20xXctupiPymEvnNUMIvNZHfNCK/mZbdMBkcMB36DOgzDTfMkvdsyRzJXAduSEPcZjZxm3lKbjstkd8cIr/5SvilI/KbS+S3wLIbZoED5kGfD32B4YaF8l4kWSxZ4sAN6YnbLCJus1TJbWcg8ltM5LdMCb+MRH5LiPyWW3bDQnDAUujLoC833LBC3islqySrHbghE3GblcRt1ii57cxEfquI/NYq4ZeFyG81kd86y25YAQ5YA30t9HWGG9bLe4Nko2STAzdkJW6zgbjNZiW3nY3IbyOR3xYl/LIT+W0i8ttq2Q3rwQGboW+BvtVwwzZ5b5fskOx04IYcxG22E7fZpeS2cxL57SDy262EXy4iv51Efnssu2EbOGAX9N3Q9xhu2CvvfZL9kgMO3JCbuM0+4jYHldx2HiK//UR+Hkr45SXyO0Dk52nZDXvBAQehe0D3NNzgJW9viY/E14Eb8hG38SZu46fktvMT+fkQ+fkr4VeAyM+XyC/Ashu8wAF+0P2hBxhuCJT3IclhyREHbihI3OYQcZujSm67EJHfYSK/Y0r4FSbyO0Lkd9yyGwLBAUehH4N+3HBDkLxPSE5KTjlwQxHiNieI25xWcttFifxOEvkFK+FXjMjvFJFfiGU3BIEDTkMPhh5iuCFU3mckZyXnHLihOHGbM8Rtziu57RJEfmeJ/C4o4VeSyO8ckd9Fy24IBQech34B+kXDDZfkfVlyRXLVgRtKEbe5TNzmmpLbLk3kd4XI77oSfmWI/K4S+d2w7IZL4IBr0K9Dv2G44aa8b0luS+44cENZ4ja3iNvcVXLb5Yj8bhP53VPCrzyR3x0iv/uW3XATHHAX+j3o9w03PJD3Q8kjyWMHbqhA3OYhcZsnSm67IpHfIyK/p0r4VSLye0zk98yyGx6AA55Afwr9meGG5/J+IXkpeeXADZWJ27wgbvNayW1XIfJ7SeT3Rgm/qkR+r4j83lp2w3NwwGvob6C/NdzwTt7vJR8kHx24oRpxm/fEbT4pue3qRH4fiPw+K+FXg8jvI5HfF8tueAcO+AT9M/Qvhhu+yvub5LvkhwM31CRu8424zU8lt12LyO87kd8vJfxqE/n9IPL7bdkNX8EBP6H/gv7bcMMfef+VhAkKGyZskH031CFu85e4TbggHbddl8gvTBCPX3gl/OoR+YUl8osQZNcNf8AB/279fz089AhB/3VDRHlHkkSWRHHghvrEbSIRt4mq5LYbEPlFJvKLpoRfQyK/KER+0S27ISI4ICr0aNCjG26IIe+YkliS2A7c0Ii4TUziNnGU3HZjIr9YRH5xlfBrQuQXm8gvnmU3xAAHxIEeF3o8ww3x5Z1AklCSyIEbmhK3SUDcJrGS225G5JeQyC+JEn7NifwSEfklteyG+OCAxNCTQE9quCGZvJNLUkhSOnBDC+I2yYnbpFJy2y2J/FIQ+aVWwq8VkV9KIr80lt2QDByQCnpq6GkMN6SVdzpJekkGB25oTdwmHXGbjEpuuw2RX3oiv0xK+LUl8stA5JfZshvSggMyQs8EPbPhhizyzirJJsnuwA3tiNtkJW6TQ8lttyfyy0bkl1MJvw5EftmJ/HJZdkMWcEAO6Dmh5zLckFveeSR5JfkcuKEjcZs8xG3yK7ntTkR+eYn8Cijh15nILx+RX0HLbsgNDsgPvQD0goYbCsm7sKSIpKgDN3QhblOYuE0xJbfdlcivCJFfcSX8uhH5FSXyK2HZDYXAAcWgF4dewnBDSXmXkpT+920O3NCduE0p4jZlldx2DyK/0kR+5ZTw60nkV4bIr7xlN5QEB5SFXg56ecMNFeRdUVJJUtmBG3oRt6lI3KaKktvuTeRXicivqhJ+fYj8KhP5VbPshgrggCrQq0KvZrihurxrSGpKajlwQ1/iNjWI29RWctv9iPxqEvnVUcKvP5FfLSK/upbdUB0cUBt6Heh1DTfUk3d9SQNJQwduGEDcpj5xm0ZKbnsgkV8DIr/GSvgNIvJrSOTXxLIb6oEDGkFvDL2J4Yam8m4maS5p4cANg4nbNCNu01LJbQ8h8mtO5NdKCb+hRH4tiPxaW3ZDU3BAS+itoLc23NBG3m0l7STtHbhhGHGbtsRtOii57eFEfu2I/Doq4TeCyK89kV8ny25oAw7oAL0j9E6GGzrLu4ukq6SbAzeMJG7ThbhNdyW3PYrIryuRXw8l/EYT+XUj8utp2Q2dwQHdofeA3tNwQy9595b0kfR14IYxxG16E7fpp+S2xxL59SHy66+E3zgiv75EfgMsu6EXOKAf9P7QBxhuGCjvQZLBkiEO3DCeuM0g4jZDldz2BCK/wUR+w5Twm0jkN4TIb7hlNwwEBwyFPgz6cMMNI+Q9UjJKMtqBGyYRtxlJ3GaMktueTOQ3ishvrBJ+U4j8RhP5jbPshhHggDHQx0IfZ7hhvLwnSCZKJjlww1TiNhOI20xWctvTiPwmEvlNUcJvOpHfJCK/qZbdMB4cMBn6FOhTDTdMk/d0yQzJTAdumEHcZjpxm1lKbnsmkd8MIr/ZSvjNIvKbSeQ3x7IbpoEDZkGfDX2O4Ya58p4nmS9Z4MANs4nbzCNus1DJbc8h8ptP5LdICb+5RH4LiPwWW3bDXHDAQuiLoC823LBE3kslyyTLHbhhHnGbpcRtVii57flEfsuI/FYq4beAyG85kd8qy25YAg5YAX0l9FWGG1bLe41krWSdAzcsJG6zhrjNeiW3vYjIby2R3wYl/BYT+a0j8tto2Q2rwQHroW+AvtFwwyZ5b5ZskWx14IYlxG02E7fZpuS2lxL5bSHy266E3zIiv61Efjssu2ETOGAb9O3Qdxhu2CnvXZLdkj0O3LCcuM0u4jZ7ldz2CiK/3UR++5TwW0nkt4fIb79lN+wEB+yFvg/6fsMNB+R9UOIh8XTghlXEbQ4St/FScturifw8iPy8lfBbQ+TnSeTnY9kNB8ABXtC9ofsYbvCVt5/EXxLgwA1ridv4EbcJVHLb64j8/In8Dinht57IL4DI77BlN/iCAwKhH4J+2HDDEXkflRyTHHfghg3EbY4StwlSctsbifyOEfmdUMJvE5HfcSK/k5bdcAQcEAT9BPSThhtOyfu0JFgS4sANm4nbnCZuE6rktrcQ+QUT+Z1Rwm8rkV8Ikd9Zy244BQ4IhX4G+lnDDefkfV5yQXLRgRu2Ebc5T9zmkpLb3k7kd4HI77ISfjuI/C4S+V2x7IZz4IBL0C9Dv2K44aq8r0muS244cMNO4jbXiNvcVHLbu4j8rhP53VLCbzeR3w0iv9uW3XAVHHAT+i3otw033JH3Xck9yX0HbthD3OYucZsHSm57L5HfPSK/h0r47SPyu0/k98iyG+6AAx5Afwj9keGGx/J+InkqeebADfuJ2zwhbvNcyW0fIPJ7SuT3Qgm/g0R+z4j8Xlp2w2NwwHPoL6C/NNzwSt6vJW8kbx24wYO4zWviNu+U3LYnkd8bIr/3Svh5Efm9JfL7YNkNr8AB76C/h/7BcMNHeX+SfJZ8ceAGb+I2n4jbfFVy2z5Efp+J/L4p4edL5PeFyO+7ZTd8BAd8hf4N+nfDDT/k/VPyS/LbgRv8iNv8JG7zR8lt+xP5/SLy+6uEXwCR328ivzAn7LrhBzjgD/S/0P99A7ohrLzDScJLIpyw74ZA4jbhTvC2iXhCx20fIvILT+QXSQm/w0R+EYj8Ilt2Q9gT/++AiNAjQY9suCGKvKNKokmiO3DDEeI2UYnbxFBy20eJ/KIR+cVUwu8YkV90Ir9Ylt0QBRwQA3pM6LEMN8SWdxxJXEk8B244TtwmDnGb+EpuO4jILy6RXwIl/E4Q+cUj8kto2Q2xwQHxoSeAntBwQyJ5J5YkkSR14IaTxG0SE7dJpuS2TxH5JSHyS66E32kiv6REfiksuyEROCAZ9OTQUxhuSCnvVJLUkjQO3BBM3CYVcZu0Sm47hMgvNZFfOiX8Qon80hD5pbfshpTggLTQ00FPb7ghg7wzSjJJMjtwwxniNhmJ22RRcttnifwyEfllVcLvHJFfZiK/bJbdkAEckAV6VujZDDdkl3cOSU5JLgduOE/cJgdxm9xKbvsCkV9OIr88SvhdJPLLReSX17IbsoMDckPPAz2v4YZ88s4vKSAp6MANl4jb5CduU0jJbV8m8itA5FdYCb8rRH4FifyKWHZDPnBAIeiFoRcx3FBU3sUkxSUlHLjhKnGbYsRtSiq57WtEfsWJ/Eop4XedyK8EkV9py24oCg4oCb0U9NKGG8rIu6yknKS8AzfcIG5TlrhNBSW3fZPIrxyRX0Ul/G4R+ZUn8qtk2Q1lwAEVoFeEXslwQ2V5V5FUlVRz4IbbxG2qELepruS27xD5VSXyq6GE310iv2pEfjUtu6EyOKA69BrQaxpuqCXv2pI6kroO3HCPuE1t4jb1lNz2fSK/OkR+9ZXwe0DkV5fIr4FlN9QCB9SDXh96A8MNDeXdSNJY0sSBGx4St2lE3Kapktt+ROTXmMivmRJ+j4n8mhD5NbfshobggKbQm0FvbrihhbxbSlpJWjtwwxPiNi2J27RRcttPifxaEfm1VcLvGZFfayK/dpbd0AIc0AZ6W+jtDDe0l3cHSUdJJwdueE7cpgNxm85KbvsFkV9HIr8uSvi9JPLrROTX1bIb2oMDOkPvAr2r4YZu8u4u6SHp6cANr4jbdCdu00vJbb8m8utB5NdbCb83RH49ifz6WHZDN3BAL+i9ofcx3NBX3v0k/SUDHLjhLXGbfsRtBiq57XdEfv2J/AYp4feeyG8Akd9gy27oCw4YCH0Q9MGGG4bIe6hkmGS4Azd8IG4zlLjNCCW3/ZHIbxiR30gl/D4R+Q0n8htl2Q1DwAEjoI+EPspww2h5j5GMlYxz4IbPxG3GELcZr+S2vxD5jSXym6CE31civ3FEfhMtu2E0OGA89AnQJxpumCTvyZIpkqkO3PCNuM1k4jbTlNz2dyK/KUR+05Xw+0HkN5XIb4ZlN0wCB0yDPh36DMMNM+U9SzJbMseBG34St5lF3Gauktv+ReQ3m8hvnhJ+v4n85hD5zbfshpnggLnQ50Gfb7hhgbwXShZJFjtwwx/iNguJ2yxRctt/ifwWEfktVcIvTFneby0m8ltm2Q0LwAFLoC+Fvsxww3J5r5CslKxy4IawxG1WELdZreS2wxH5rSTyW6OEX3giv1VEfmstu2E5OGA19DXQ1xpuWCfv9ZINko0O3BCBuM164jablNx2RCK/DUR+m5Xwi0Tkt5HIb4tlN6wDB2yCvhn6FsMNW+W9TbJdssOBGyITt9lG3GanktuOQuS3nchvlxJ+UYn8dhD57bbshq3ggJ3Qd0Hfbbhhj7z3SvZJ9jtwQzTiNnuJ2xxQctvRifz2EfkdVMIvBpHffiI/D8tu2AMOOAD9IHQPww2e8vaSeEt8HLghJnEbL+I2vkpuOxaRnzeRn58SfrGJ/HyI/Pwtu8ETHOAL3Q+6v+GGAHkHSg5JDjtwQxziNoHEbY4oue24RH6HiPyOKuEXj8jvMJHfMctuCAAHHIF+FPoxww3H5R0kOSE56cAN8YnbBBG3OaXkthMQ+Z0g8juthF9CIr+TRH7Blt1wHBxwCvpp6MGGG0LkHSo5IznrwA2JiNuEErc5p+S2ExP5nSHyO6+EXxIiv7NEfhcsuyEEHHAO+nnoFww3XJT3JcllyRUHbkhK3OYScZurSm47GZHfZSK/a0r4JSfyu0Lkd92yGy6CA65Cvwb9uuGGG/K+Kbklue3ADSmI29wkbnNHyW2nJPK7ReR3Vwm/VER+t4n87ll2ww1wwB3od6HfM9xwX94PJA8ljxy4ITVxmwfEbR4rue00RH4PifyeKOGXlsjvEZHfU8tuuA8OeAz9CfSnhhueyfu55IXkpQM3pCNu85y4zSslt52eyO8Fkd9rJfwyEPm9JPJ7Y9kNz8ABr6C/hv7GcMNbeb+TvJd8cOCGjMRt3hG3+ajktjMR+b0n8vukhF9mIr8PRH6fLbvhLTjgI/RP0D8bbvgi76+Sb5LvDtyQhbjNV+I2P5TcdlYiv29Efj+V8MtG5PedyO+XZTd8AQf8gP4T+i/DDb//vSV/JWFO2ndDduI2f4jbhD2p47ZzEPn9JfILp4RfTiK/MCd5/MKftOuG3+CAf7f+vx4OeviT/3VDBHlHlESSRHbghlzEbSISt4mi5LZzE/lFIvKLqoRfHiK/yER+0Sy7IQI4IAr0qNCjGW6ILu8YkpiSWA7ckJe4TQziNrGV3HY+Ir+YRH5xlPDLT+QXi8gvrmU3RAcHxIYeB3pcww3x5B1fkkCS0IEbChC3iU/cJpGS2y5I5JeAyC+xEn6FiPwSEvklseyGeOCARNATQ09iuCGpvJNJkktSOHBDYeI2yYjbpFRy20WI/JIT+aVSwq8okV8KIr/Ult2QFByQEnoq6KkNN6SRd1pJOkl6B24oRtwmLXGbDEpuuziRXzoiv4xK+JUg8ktP5JfJshvSgAMyQM8IPZPhhszyziLJKsnmwA0lidtkIW6TXcltlyLyy0rkl0MJv9JEftmI/HJadkNmcEB26Dmg5zTckEveuSV5JHkduKEMcZvcxG3yKbntskR+eYj88ivhV47ILy+RXwHLbsgFDsgHPT/0AoYbCsq7kKSwpIgDN5QnblOIuE1RJbddgcivMJFfMSX8KhL5FSHyK27ZDQXBAUWhF4Ne3HBDCXmXlJSSlHbghkrEbUoStymj5LYrE/mVIvIrq4RfFSK/0kR+5Sy7oQQ4oAz0stDLGW4oL+8KkoqSSg7cUJW4TQXiNpWV3HY1Ir+KRH5VlPCrTuRXicivqmU3lAcHVIZeBXpVww3V5F1dUkNS04EbahC3qU7cppaS265J5FeDyK+2En61iPxqEvnVseyGauCAWtBrQ69juKGuvOtJ6ksaOHBDbeI29YjbNFRy23WI/OoT+TVSwq8ukV8DIr/Glt1QFxzQEHoj6I0NNzSRd1NJM0lzB26oR9ymKXGbFkpuuz6RXzMiv5ZK+DUg8mtO5NfKshuagANaQG8JvZXhhtbybiNpK2nnwA0Nidu0IW7TXsltNyLya0vk10EJv8ZEfu2I/DpadkNrcEB76B2gdzTc0EnenSVdJF0duKEJcZvOxG26KbntpkR+XYj8uivh14zIryuRXw/LbugEDugGvTv0HoYbesq7l6S3pI8DNzQnbtOLuE1fJbfdgsivN5FfPyX8WhL59SHy62/ZDT3BAX2h94Pe33DDAHkPlAySDHbghlbEbQYStxmi5LZbE/kNIvIbqoRfGyK/wUR+wyy7YQA4YAj0odCHGW4YLu8RkpGSUQ7c0Ja4zQjiNqOV3HY7Ir+RRH5jlPBrT+Q3ishvrGU3DAcHjIY+BvpYww3j5D1eMkEy0YEbOhC3GU/cZpKS2+5I5DeByG+yEn6diPwmEvlNseyGceCASdAnQ59iuGGqvKdJpktmOHBDZ+I204jbzFRy212I/KYT+c1Swq8rkd8MIr/Zlt0wFRwwE/os6LMNN8yR91zJPMl8B27oRtxmLnGbBUpuuzuR3zwiv4VK+PUg8ptP5LfIshvmgAMWQF8IfZHhhsXyXiJZKlnmwA09idssIW6zXMlt9yLyW0rkt0IJv95EfsuI/FZadsNicMBy6CugrzTcsEreqyVrJGsduKEPcZvVxG3WKbntvkR+a4j81ivh14/Iby2R3wbLblgFDlgHfT30DYYbNsp7k2SzZIsDN/QnbrOJuM1WJbc9gMhvM5HfNiX8BhL5bSHy227ZDRvBAVuhb4O+3XDDDnnvlOyS7HbghkHEbXYSt9mj5LYHE/ntIvLbq4TfECK/3UR++yy7YQc4YA/0vdD3GW7YL+8DkoMSDwduGErc5gBxG08ltz2MyO8gkZ+XEn7Difw8iPy8LbthPzjAE7oXdG/DDT7y9pX4SfwduGEEcRtf4jYBSm57JJGfH5FfoBJ+o4j8/In8Dll2gw84IAB6IPRDhhsOy/uI5KjkmAM3jCZuc4S4zXEltz2GyO8okV+QEn5jifyOEfmdsOyGw+CA49CDoJ8w3HBS3qckpyXBDtwwjrjNKeI2IUpuezyR32kiv1Al/CYQ+QUT+Z2x7IaT4IAQ6KHQzxhuOCvvc5LzkgsO3DCRuM054jYXldz2JCK/80R+l5Twm0zkd4HI77JlN5wFB1yEfgn6ZcMNV+R9VXJNct2BG6YQt7lK3OaGktueSuR3jcjvphJ+04j8rhP53bLshivggBvQb0K/ZbjhtrzvSO5K7jlww3TiNneI29xXctsziPzuEvk9UMJvJpHfPSK/h5bdcBsccB/6A+gPDTc8kvdjyRPJUwdumEXc5jFxm2dKbns2kd8TIr/nSvjNIfJ7SuT3wrIbHoEDnkF/Dv2F4YaX8n4leS1548ANc4nbvCJu81bJbc8j8ntN5PdOCb/5RH5viPzeW3bDS3DAW+jvoL833PBB3h8lnySfHbhhAXGbj8Rtvii57YVEfp+I/L4q4beIyO8zkd83y274AA74Av0r9G+GG77L+4fkp+SXAzcsJm7zg7jNbyW3vYTI7yeR3x8l/JYS+f0i8vtr2Q3fwQG/of+B/tdwQ5hTYcOElYSThD9l3w3LiNv8+27WNhFO6bjt5UR+4Yj8Iirht4LILzyRX6RTdt3w79/5/xwQAXpE6JFO/dcNkeUdRRJVEs2BG1YSt4lC3Ca6ktteReQXlcgvhhJ+q4n8ohH5xbTshsjggOjQY0CPabghlrxjS+JI4jpwwxriNrGJ28RTcttrifziEPnFV8JvHZFfXCK/BJbdEAscEA96fOgJDDcklHciSWJJEgduWE/cJhFxm6RKbnsDkV9iIr9kSvhtJPJLQuSX3LIbEoIDkkJPBj254YYU8k4pSSVJ7cANm4jbpCRuk0bJbW8m8ktF5JdWCb8tRH6pifzSWXZDCnBAGuhpoacz3JBe3hkkGSWZHLhhK3GbDMRtMiu57W1EfhmJ/LIo4bedyC8TkV9Wy25IDw7IDD0L9KyGG7LJO7skhySnAzfsIG6TnbhNLiW3vZPILweRX24l/HYR+eUk8stj2Q3ZwAG5oOeGnsdwQ15555PklxRw4IbdxG3yEbcpqOS29xD55SfyK6SE314ivwJEfoUtuyEvOKAg9ELQCxtuKCLvopJikuIO3LCPuE1R4jYllNz2fiK/YkR+JZXwO0DkV5zIr5RlNxQBB5SAXhJ6KcMNpf99k6SspJwDNxwkblOGuE15JbftQeRXlsivghJ+nkR+5Yj8Klp2Q2lwQHnoFaBXNNxQSd6VJVUkVR24wYu4TWXiNtWU3LY3kV8VIr/qSvj5EPlVJfKrYdkNlcAB1aBXh17DcENNedeS1JbUceAGX+I2tYjb1FVy235EfrWJ/Oop4edP5FeHyK++ZTfUBAfUhV4Pen3DDQ3k3VDSSNLYgRsCiNs0JG7TRMltBxL5NSLya6qE3yEiv8ZEfs0su6EBOKAJ9KbQmxluaC7vFpKWklYO3HCYuE0L4jatldz2ESK/lkR+bZTwO0rk14rIr61lNzQHB7SG3gZ6W8MN7eTdXtJB0tGBG44Rt2lP3KaTkts+TuTXgcivsxJ+QUR+HYn8ulh2QztwQCfonaF3MdzQVd7dJN0lPRy44QRxm27EbXoque2TRH7difx6KeF3isivB5Ffb8tu6AoO6Am9F/Tehhv6yLuvpJ+kvwM3nCZu05e4zQAltx1M5NePyG+gEn4hRH79ifwGWXZDH3DAAOgDoQ8y3DBY3kMkQyXDHLghlLjNEOI2w5Xc9hkiv6FEfiOU8DtL5DeMyG+kZTcMBgcMhz4C+kjDDaPkPVoyRjLWgRvOEbcZTdxmnJLbPk/kN4bIb7wSfheI/MYS+U2w7IZR4IBx0MdDn2C4YaK8J0kmS6Y4cMNF4jaTiNtMVXLbl4j8JhP5TVPC7zKR3xQiv+mW3TARHDAV+jTo0w03zJD3TMksyWwHbrhC3GYmcZs5Sm77KpHfLCK/uUr4XSPym03kN8+yG2aAA+ZAnwt9nuGG+fJeIFkoWeTADdeJ2ywgbrNYyW3fIPJbSOS3RAm/m0R+i4j8llp2w3xwwGLoS6AvNdywTN7LJSskKx244RZxm+XEbVYpue3bRH4riPxWK+F3h8hvJZHfGstuWAYOWAV9NfQ1hhvWynudZL1kgwM33CVus464zUYlt32PyG89kd8mJfzuE/ltIPLbbNkNa8EBG6Fvgr7ZcMMWeW+VbJNsd+CGB8RtthK32aHkth8S+W0j8tuphN8jIr/tRH67LLthCzhgB/Sd0HcZbtgt7z2SvZJ9DtzwmLjNHuI2+5Xc9hMiv71EfgeU8HtK5LePyO+gZTfsBgfsh34A+kHDDR7y9pR4SbwduOEZcRtP4jY+Sm77OZGfF5GfrxJ+L4j8vIn8/Cy7wQMc4APdF7qf4QZ/eQdIAiWHHLjhJXGbAOI2h5Xc9isiv0AivyNK+L0m8jtE5HfUshv8wQGHoR+BftRwwzF5H5cESU44cMMb4jbHiducVHLbb4n8goj8Tinh947I7wSR32nLbjgGDjgJ/RT004YbguUdIgmVnHHghvfEbUKI25xVctsfiPxCifzOKeH3kcjvDJHfectuCAYHnIV+Dvp5ww0X5H1Rckly2YEbPhG3uUjc5oqS2/5M5HeJyO+qEn5fiPwuE/lds+yGC+CAK9CvQr9muOG6vG9IbkpuOXDDV+I2N4jb3FZy29+I/G4S+d1Rwu87kd8tIr+7lt1wHRxwG/od6HcNN9yT933JA8lDB274QdzmPnGbR0pu+yeR3wMiv8dK+P0i8ntI5PfEshvugQMeQX8M/YnhhqfyfiZ5LnnhwA2/ids8I27zUslt/yHye07k90oJv79Efi+I/F5bdsNTcMBL6K+gvzbc8EbebyXvJO8duCFMOeL/2RO3+aDktsMS+b0j8vuohF84Ir/3RH6fLLvhDTjgA/SP0D8Zbvgs7y+Sr5JvDtwQnrjNF+I235XcdgQiv69Efj+U8ItI5PeNyO+nZTd8Bgd8h/4D+k/DDb/k/fvf3yR/HbghEnGb38RtwpzWcduRifz+EPmFVcIvCpHfXyK/cKftuuEXOODfrf+vh4Ue7vR/3RBe3hEkESWRTtt3Q1TiNhFO87aJrOS2oxH5RSTyi6KEX3Qiv0hEflEtuyE8OCAy9CjQoxpuiCbv6JIYkpgO3BCDuE104jaxlNx2TCK/GER+sZXwi0XkF5PIL45lN0QDB8SCHht6HMMNceUdTxJfksCBG2ITt4lH3CahktuOQ+QXn8gvkRJ+cYn8EhD5JbbshrjggITQE0FPbLghibyTSpJJkjtwQzziNkmJ26RQctvxifySEfmlVMIvAZFfciK/VJbdkAQckAJ6SuipDDeklncaSVpJOgduSEjcJg1xm/RKbjsRkV9aIr8MSvglJvJLR+SX0bIbUoMD0kPPAD2j4YZM8s4sySLJ6sANSYjbZCZuk03JbScl8stC5JddCb9kRH5ZifxyWHZDJnBANujZoecw3JBT3rkkuSV5HLghOXGbXMRt8iq57RREfrmJ/PIp4ZeSyC8PkV9+y27ICQ7ICz0f9PyGGwrIu6CkkKSwAzekIm5TkLhNESW3nZrIrxCRX1El/NIQ+RUm8itm2Q0FwAFFoBeFXsxwQ3F5l5CUlJRy4Ia0xG1KELcpreS20xH5lSTyK6OEX3oiv1JEfmUtu6E4OKA09DLQyxpuKCfv8pIKkooO3JCBuE154jaVlNx2RiK/CkR+lZXwy0TkV5HIr4plN5QDB1SCXhl6FcMNVeVdTVJdUsOBGzITt6lG3KamktvOQuRXncivlhJ+WYn8ahD51bbshqrggJrQa0GvbbihjrzrSupJ6jtwQzbiNnWJ2zRQctvZifzqEfk1VMIvB5FffSK/RpbdUAcc0AB6Q+iNDDc0lncTSVNJMwduyEncpglxm+ZKbjsXkV9TIr8WSvjlJvJrRuTX0rIbGoMDmkNvAb2l4YZW8m4taSNp68ANeYjbtCZu007Jbecl8mtD5NdeCb98RH5tifw6WHZDK3BAO+jtoXcw3NBR3p0knSVdHLghP3GbTsRtuiq57QJEfp2J/Lop4VeQyK8LkV93y27oCA7oCr0b9O6GG3rIu6ekl6S3AzcUIm7Tk7hNHyW3XZjIrxeRX18l/IoQ+fUm8utn2Q09wAF9oPeF3s9wQ395D5AMlAxy4IaixG0GELcZrOS2ixH5DSTyG6KEX3Eiv0FEfkMtu6E/OGAw9CHQhxpuGCbv4ZIRkpEO3FCCuM1w4jajlNx2SSK/EUR+o5XwK0XkN5LIb4xlNwwDB4yCPhr6GMMNY+U9TjJeMsGBG0oTtxlH3GaiktsuQ+Q3nshvkhJ+ZYn8JhD5TbbshrHggInQJ0GfbLhhirynSqZJpjtwQzniNlOJ28xQctvlifymEfnNVMKvApHfdCK/WZbdMAUcMAP6TOizDDfMlvccyVzJPAduqEjcZg5xm/lKbrsSkd9cIr8FSvhVJvKbR+S30LIbZoMD5kNfAH2h4YZF8l4sWSJZ6sANVYjbLCZus0zJbVcl8ltC5LdcCb9qRH5LifxWWHbDInDAMujLoa8w3LBS3qskqyVrHLihOnGbVcRt1iq57RpEfquJ/NYp4VeTyG8Nkd96y25YCQ5YC30d9PWGGzbIe6Nkk2SzAzfUIm6zkbjNFiW3XZvIbxOR31Yl/OoQ+W0m8ttm2Q0bwAFboG+Fvs1ww3Z575DslOxy4Ia6xG12ELfZreS26xH57STy26OEX30iv11Efnstu2E7OGA39D3Q9xpu2Cfv/ZIDkoMO3NCAuM1+4jYeSm67IZHfASI/TyX8GhH5HSTy87Lshn3gAA/ontC9DDd4y9tH4ivxc+CGxsRtfIjb+Cu57SZEfr5EfgFK+DUl8vMj8gu07AZvcIA/9ADogYYbDsn7sOSI5KgDNzQjbnOYuM0xJbfdnMjvCJHfcSX8WhD5HSXyC7LshkPggGPQj0MPMtxwQt4nJackpx24oSVxm5PEbYKV3HYrIr9TRH4hSvi1JvI7TeQXatkNJ8ABwdBDoIcabjgj77OSc5LzDtzQhrjNWeI2F5Tcdlsiv3NEfheV8GtH5HeeyO+SZTecAQdcgH4R+iXDDZflfUVyVXLNgRvaE7e5QtzmupLb7kDkd5XI74YSfh2J/K4R+d207IbL4IDr0G9Av2m44Za8b0vuSO46cEMn4ja3idvcU3LbnYn87hD53VfCrwuR310ivweW3XALHHAP+n3oDww3PJT3I8ljyRMHbuhK3OYRcZunSm67G5HfYyK/Z0r4dSfye0Lk99yyGx6CA55Cfwb9ueGGF/J+KXklee3ADT2I27wkbvNGyW33JPJ7ReT3Vgm/XkR+r4n83ll2wwtwwBvob6G/M9zwXt4fJB8lnxy4oTdxmw/EbT4rue0+RH4fify+KOHXl8jvE5HfV8tueA8O+Az9C/Svhhu+yfu75IfkpwM39CNu8524zS8lt92fyO8Hkd9vJfwGEPn9JPL7Y9kN38ABv6D/hv7HcMNfeYcJDhsmrCRcsH03DCRu8++7WduED9Zx24OI/MIS+UVQwm8wkV84Ir+IwXbd8Bcc8O/W/9cjQI8Y/F83RJJ3ZEkUSVQHbhhC3CYycZtoSm57KJFfFCK/6Er4DSPyi0rkF8OyGyKBA6JBjw49huGGmPKOJYktiePADcOJ28QibhNXyW2PIPKLTeQXTwm/kUR+cYj84lt2Q0xwQFzo8aDHN9yQQN4JJYkkiR24YRRxm4TEbZIoue3RRH6JiPySKuE3hsgvMZFfMstuSAAOSAI9KfRkhhuSyzuFJKUklQM3jCVuk4K4TWoltz2OyC8lkV8aJfzGE/mlIvJLa9kNycEBqaGngZ7WcEM6eaeXZJBkdOCGCcRt0hO3yaTkticS+WUg8sushN8kIr+MRH5ZLLshHTggE/TM0LMYbsgq72yS7JIcDtwwmbhNNuI2OZXc9hQiv+xEfrmU8JtK5JeDyC+3ZTdkBQfkhJ4Lem7DDXnknVeST5LfgRumEbfJS9ymgJLbnk7kl4/Ir6ASfjOI/PIT+RWy7IY84IAC0AtCL2S4obC8i0iKSoo5cMNM4jZFiNsUV3Lbs4j8ihL5lVDCbzaRXzEiv5KW3VAYHFAcegnoJQ03lJJ36X/fJSnrwA1ziNuUJm5TTsltzyXyK0PkV14Jv3lEfmWJ/CpYdkMpcEA56OWhVzDcUFHelSSVJVUcuGE+cZtKxG2qKrntBUR+lYn8qinht5DIrwqRX3XLbqgIDqgKvRr06oYbasi7pqSWpLYDNywiblOTuE0dJbe9mMivFpFfXSX8lhD51Sbyq2fZDTXAAXWg14Vez3BDfXk3kDSUNHLghqXEbRoQt2ms5LaXEfk1JPJrooTfciK/RkR+TS27oT44oDH0JtCbGm5oJu/mkhaSlg7csIK4TXPiNq2U3PZKIr8WRH6tlfBbReTXksivjWU3NAMHtILeGnobww1t5d1O0l7SwYEbVhO3aUfcpqOS215D5NeeyK+TEn5rifw6EPl1tuyGtuCAjtA7Qe9suKGLvLtKukm6O3DDOuI2XYnb9FBy2+uJ/LoR+fVUwm8DkV93Ir9elt3QBRzQA3pP6L0MN/SWdx9JX0k/B27YSNymD3Gb/kpuexORX18ivwFK+G0m8utH5DfQsht6gwP6Qx8AfaDhhkHyHiwZIhnqwA1biNsMJm4zTMltbyXyG0LkN1wJv21EfkOJ/EZYdsMgcMAw6MOhjzDcMFLeoySjJWMcuGE7cZtRxG3GKrntHUR+o4n8xinht5PIbwyR33jLbhgJDhgLfRz08YYbJsh7omSSZLIDN+wibjORuM0UJbe9m8hvEpHfVCX89hD5TSbym2bZDRPAAVOgT4U+zXDDdHnPkMyUzHLghr3EbWYQt5mt5Lb3EfnNJPKbo4TffiK/WUR+cy27YTo4YDb0OdDnGm6YJ+/5kgWShQ7ccIC4zXziNouU3PZBIr8FRH6LlfDzIPJbSOS3xLIb5oEDFkFfDH2J4Yal8l4mWS5Z4cANnsRtlhG3Wanktr2I/JYT+a1Sws+byG8Fkd9qy25YCg5YCX0V9NWGG9bIe61knWS9Azf4ELdZS9xmg5Lb9iXyW0fkt1EJPz8iv/VEfpssu2ENOGAD9I3QNxlu2CzvLZKtkm0O3OBP3GYLcZvtSm47gMhvK5HfDiX8Aon8thH57bTshs3ggO3Qd0Dfabhhl7x3S/ZI9jpwwyHiNruJ2+xTctuHifz2EPntV8LvCJHfXiK/A5bdsAscsA/6fugHDDcclLeHxFPi5cANR4nbeBC38VZy28eI/DyJ/HyU8DtO5OdF5Odr2Q0HwQHe0H2g+xpu8JO3vyRAEujADUHEbfyJ2xxSctsniPwCiPwOK+F3ksgvkMjviGU3+IEDDkE/DP2I4Yaj8j4mOS4JcuCGU8RtjhG3OaHktk8T+R0n8juphF8wkV8Qkd8py244Cg44Af0k9FOGG07LO1gSIgl14IYQ4jbBxG3OKLntUCK/ECK/s0r4nSHyCyXyO2fZDafBAWegn4V+znDDeXlfkFyUXHLghrPEbS4Qt7ms5LbPEfldJPK7ooTfeSK/S0R+Vy274Tw44DL0K9CvGm64Ju/rkhuSmw7ccIG4zXXiNreU3PZFIr8bRH63lfC7ROR3k8jvjmU3XAMH3IJ+G/odww135X1Pcl/ywIEbLhO3uUfc5qGS275C5HefyO+REn5XifweEPk9tuyGu+CAh9AfQX9suOGJvJ9KnkmeO3DDNeI2T4nbvFBy29eJ/J4R+b1Uwu8Gkd9zIr9Xlt3wBBzwAvpL6K8MN7yW9xvJW8k7B264SdzmDXGb90pu+xaR31sivw9K+N0m8ntH5PfRshtegwPeQ/8A/aPhhk/y/iz5IvnqwA13iNt8Jm7zTclt3yXy+0Lk910Jv3tEfl+J/H5YdsMncMA36N+h/zDc8FPevyS///3dgRvuE7f5Rdzmr5LbfkDk95vIL0yIDn4Pifz+EPmFDbHrhp/ggL/Q/+32vx425L9uCCfv8JIIkogh9t3wiLhN+BDeNpGU3PZjIr8IRH6RlfB7QuQXkcgvimU3hAMHRIIeGXoUww1R5R1NEl0Sw4EbnhK3iUbcJqaS235G5BedyC+WEn7PifxiEPnFtuyGqOCAmNBjQY9tuCGOvONK4kniO3DDC+I2cYnbJFBy2y+J/OIR+SVUwu8VkV98Ir9Elt0QBxyQAHpC6IkMNySWdxJJUkkyB254TdwmCXGb5Epu+w2RX1IivxRK+L0l8ktG5JfSshsSgwOSQ08BPaXhhlTyTi1JI0nrwA3viNukJm6TTsltvyfyS0Pkl14Jvw9EfmmJ/DJYdkMqcEA66OmhZzDckFHemSSZJVkcuOEjcZtMxG2yKrntT0R+mYn8sinh95nILwuRX3bLbsgIDsgKPRv07IYbcsg7pySXJLcDN3whbpOTuE0eJbf9lcgvF5FfXiX8vhH55Sbyy2fZDTnAAXmg54Wez3BDfnkXkBSUFHLghu/EbQoQtyms5LZ/EPkVJPIrooTfTyK/QkR+RS27IT84oDD0ItCLGm4oJu/ikhKSkg7c8Iu4TXHiNqWU3PZvIr8SRH6llfD7Q+RXksivjGU3FAMHlIJeGnoZww1l5V1OUl5SwYEb/hK3KUfcpqKS2w5Tnvdb5Yn8KinhF5bIrwKRX2XLbigLDqgIvRL0yoYbqsi7qqSapLoDN4QjblOVuE0NJbcdnsivGpFfTSX8IhD5VSfyq2XZDVXAATWg14Rey3BDbXnXkdSV1HPghojEbeoQt6mv5LYjEfnVJfJroIRfZCK/ekR+DS27oTY4oD70BtAbGm5oJO/GkiaSpg7cEIW4TWPiNs2U3HZUIr8mRH7NlfCLRuTXlMivhWU3NAIHNIPeHHoLww0t5d1K0lrSxoEbohO3aUXcpq2S245B5NeayK+dEn4xifzaEPm1t+yGluCAttDbQW9vuKGDvDtKOkk6O3BDLOI2HYnbdFFy27GJ/DoR+XVVwi8OkV9nIr9ult3QARzQBXpX6N0MN3SXdw9JT0kvB26IS9ymB3Gb3kpuOx6RX08ivz5K+MUn8utF5NfXshu6gwN6Q+8Dva/hhn7y7i8ZIBnowA0JiNv0J24zSMltJyTyG0DkN1gJv0REfgOJ/IZYdkM/cMAg6IOhDzHcMFTewyTDJSMcuCExcZthxG1GKrntJER+w4n8Rinhl5TIbwSR32jLbhgKDhgJfRT00YYbxsh7rGScZLwDNyQjbjOWuM0EJbednMhvHJHfRCX8UhD5jSfym2TZDWPAAROgT4Q+yXDDZHlPkUyVTHPghpTEbaYQt5mu5LZTEflNJfKboYRfaiK/aUR+My27YTI4YDr0GdBnGm6YJe/ZkjmSuQ7ckIa4zWziNvOU3HZaIr85RH7zlfBLR+Q3l8hvgWU3zAIHzIM+H/oCww0L5b1IsliyxIEb0hO3WUTcZqmS285A5LeYyG+ZEn4ZifyWEPktt+yGheCApdCXQV9uuGGFvFdKVklWO3BDJuI2K4nbrFFy25mJ/FYR+a1Vwi8Lkd9qIr91lt2wAhywBvpa6OsMN6yX9wbJRskmB27IStxmA3GbzUpuOxuR30Yivy1K+GUn8ttE5LfVshvWgwM2Q98Cfavhhm3y3i7ZIdnpwA05iNtsJ26zS8lt5yTy20Hkt1sJv1xEfjuJ/PZYdsM2cMAu6Luh7zHcsFfe+yT7JQccuCE3cZt9xG0OKrntPER++4n8PJTwy0vkd4DIz9OyG/aCAw5C94DuabjBS97eEh+JrwM35CNu403cxk/Jbecn8vMh8vNXwq8AkZ8vkV+AZTd4gQP8oPtDDzDcECjvQ5LDkiMO3FCQuM0h4jZHldx2ISK/w0R+x5TwK0zkd4TI77hlNwSCA45CPwb9uOGGIHmfkJyUnHLghiLEbU4Qtzmt5LaLEvmdJPILVsKvGJHfKSK/EMtuCAIHnIYeDD3EcEOovM9IzkrOOXBDceI2Z4jbnFdy2yWI/M4S+V1Qwq8kkd85Ir+Llt0QCg44D/0C9IuGGy7J+7LkiuSqAzeUIm5zmbjNNSW3XZrI7wqR33Ul/MoQ+V0l8rth2Q2XwAHXoF+HfsNww01535Lcltxx4IayxG1uEbe5q+S2yxH53Sbyu6eEX3kivztEfvctu+EmOOAu9HvQ7xtueCDvh5JHkscO3FCBuM1D4jZPlNx2RSK/R0R+T5Xwq0Tk95jI75llNzwABzyB/hT6M8MNz+X9QvJS8sqBGyoTt3lB3Oa1ktuuQuT3ksjvjRJ+VYn8XhH5vbXshufggNfQ30B/a7jhnbzfSz5IPjpwQzXiNu+J23xSctvVifw+EPl9VsKvBpHfRyK/L5bd8A4c8An6Z+hfDDd8lfc3yXfJDwduqEnc5htxm59KbrsWkd93Ir9fSvjVJvL7QeT327IbvoIDfkL/Bf234YY/8v4rCRMaNkzYUPtuqEPc5i9xm3ChOm67LpFfmFAev/BK+NUj8gtL5Bch1K4b/oAD/t36/3p46BFC/+uGiPKOJIksieLADfWJ20QibhNVyW03IPKLTOQXTQm/hkR+UYj8olt2Q0RwQFTo0aBHN9wQQ94xJbEksR24oRFxm5jEbeIoue3GRH6xiPziKuHXhMgvNpFfPMtuiAEOiAM9LvR4hhviyzuBJKEkkQM3NCVuk4C4TWIlt92MyC8hkV8SJfyaE/klIvJLatkN8cEBiaEngZ7UcEMyeSeXpJCkdOCGFsRtkhO3SaXktlsS+aUg8kuthF8rIr+URH5pLLshGTggFfTU0NMYbkgr73SS9JIMDtzQmrhNOuI2GZXcdhsiv/REfpmU8GtL5JeByC+zZTekBQdkhJ4JembDDVnknVWSTZLdgRvaEbfJStwmh5Lbbk/kl43IL6cSfh2I/LIT+eWy7IYs4IAc0HNCz2W4Ibe880jySvI5cENH4jZ5iNvkV3LbnYj88hL5FVDCrzORXz4iv4KW3ZAbHJAfegHoBQ03FJJ3YUkRSVEHbuhC3KYwcZtiSm67K5FfESK/4kr4dSPyK0rkV8KyGwqBA4pBLw69hOGGkvIuJSn979scuKE7cZtSxG3KKrntHkR+pYn8yinh15PIrwyRX3nLbigJDigLvRz08oYbKsi7oqSSpLIDN/QiblORuE0VJbfdm8ivEpFfVSX8+hD5VSbyq2bZDRXAAVWgV4VezXBDdXnXkNSU1HLghr7EbWoQt6mt5Lb7EfnVJPKro4RffyK/WkR+dS27oTo4oDb0OtDrGm6oJ+/6kgaShg7cMIC4TX3iNo2U3PZAIr8GRH6NlfAbROTXkMiviWU31AMHNILeGHoTww1N5d1M0lzSwoEbBhO3aUbcpqWS2x5C5NecyK+VEn5DifxaEPm1tuyGpuCAltBbQW9tuKGNvNtK2knaO3DDMOI2bYnbdFBy28OJ/NoR+XVUwm8EkV97Ir9Olt3QBhzQAXpH6J0MN3SWdxdJV0k3B24YSdymC3Gb7kpuexSRX1civx5K+I0m8utG5NfTshs6gwO6Q+8Bvafhhl7y7i3pI+nrwA1jiNv0Jm7TT8ltjyXy60Pk118Jv3FEfn2J/AZYdkMvcEA/6P2hDzDcMFDegySDJUMcuGE8cZtBxG2GKrntCUR+g4n8hinhN5HIbwiR33DLbhgIDhgKfRj04YYbRsh7pGSUZLQDN0wibjOSuM0YJbc9mchvFJHfWCX8phD5jSbyG2fZDSPAAWOgj4U+znDDeHlPkEyUTHLghqnEbSYQt5ms5LanEflNJPKbooTfdCK/SUR+Uy27YTw4YDL0KdCnGm6YJu/pkhmSmQ7cMIO4zXTiNrOU3PZMIr8ZRH6zlfCbReQ3k8hvjmU3TAMHzII+G/ocww1z5T1PMl+ywIEbZhO3mUfcZqGS255D5DefyG+REn5zifwWEPkttuyGueCAhdAXQV9suGGJvJdKlkmWO3DDPOI2S4nbrFBy2/OJ/JYR+a1Uwm8Bkd9yIr9Vlt2wBBywAvpK6KsMN6yW9xrJWsk6B25YSNxmDXGb9UpuexGR31oivw1K+C0m8ltH5LfRshtWgwPWQ98AfaPhhk3y3izZItnqwA1LiNtsJm6zTcltLyXy20Lkt10Jv2VEfluJ/HZYdsMmcMA26Nuh7zDcsFPeuyS7JXscuGE5cZtdxG32KrntFUR+u4n89inht5LIbw+R337LbtgJDtgLfR/0/YYbDsj7oMRD4unADauI2xwkbuOl5LZXE/l5EPl5K+G3hsjPk8jPx7IbDoADvKB7Q/cx3OArbz+JvyTAgRvWErfxI24TqOS21xH5+RP5HVLCbz2RXwCR32HLbvAFBwRCPwT9sOGGI/I+KjkmOe7ADRuI2xwlbhOk5LY3EvkdI/I7oYTfJiK/40R+Jy274Qg4IAj6CegnDTeckvdpSbAkxIEbNhO3OU3cJlTJbW8h8gsm8jujhN9WIr8QIr+zlt1wChwQCv0M9LOGG87J+7zkguSiAzdsI25znrjNJSW3vZ3I7wKR32Ul/HYQ+V0k8rti2Q3nwAGXoF+GfsVww1V5X5Ncl9xw4IadxG2uEbe5qeS2dxH5XSfyu6WE324ivxtEfrctu+EqOOAm9FvQbxtuuCPvu5J7kvsO3LCHuM1d4jYPlNz2XiK/e0R+D5Xw20fkd5/I75FlN9wBBzyA/hD6I8MNj+X9RPJU8syBG/YTt3lC3Oa5kts+QOT3lMjvhRJ+B4n8nhH5vbTshsfggOfQX0B/abjhlbxfS95I3jpwgwdxm9fEbd4puW1PIr83RH7vlfDzIvJ7S+T3wbIbXoED3kF/D/2D4YaP8v4k+Sz54sAN3sRtPhG3+arktn2I/D4T+X1Tws+XyO8Lkd93y274CA74Cv0b9O+GG37I+6fkl+S3Azf4Ebf5Sdzmj5Lb9ify+0Xk91cJvwAiv99EfmHO2HXDD3DAH+h/of/7BnRDWHn/HzXmECRo0y3hsW3btm3btm3btm3btj09ants+55Z/HHzq3VWRZxFRmT1ouONJ08/iw4nCS+JcMu+G04Ttwl3i7dNxFs6bvsMkV94Ir9ISvidJfKLQOQX2bIbwt76fwdEhB4JemTDDVHkHVUSTRLdgRvOEbeJStwmhpLbPk/kF43IL6YSfheI/KIT+cWy7IYo4IAY0GNCj2W4Iba840jiSuI5cMNF4jZxiNvEV3Lbl4j84hL5JVDC7zKRXzwiv4SW3RAbHBAfegLoCQ03JJJ3YkkSSVIHbrhC3CYxcZtkSm77KpFfEiK/5Er4XSPyS0rkl8KyGxKBA5JBTw49heGGlPJOJUktSePADdeJ26QibpNWyW3fIPJLTeSXTgm/m0R+aYj80lt2Q0pwQFro6aCnN9yQQd4ZJZkkmR244RZxm4zEbbIoue3bRH6ZiPyyKuF3h8gvM5FfNstuyAAOyAI9K/RshhuyyzuHJKcklwM33CVuk4O4TW4lt32PyC8nkV8eJfzuE/nlIvLLa9kN2cEBuaHngZ7XcEM+eeeXFJAUdOAGD+I2+YnbFFJy2w+I/AoQ+RVWwu8hkV9BIr8ilt2QDxxQCHph6EUMNxSVdzFJcUkJB254RNymGHGbkkpu+zGRX3Eiv1JK+D0h8itB5FfashuKggNKQi8FvbThhjLyLispJynvwA2exG3KErepoOS2vYj8yhH5VVTCz5vIrzyRXyXLbigDDqgAvSL0SoYbKsu7iqSqpJoDN/gQt6lC3Ka6ktv2JfKrSuRXQwk/PyK/akR+NS27oTI4oDr0GtBrGm6oJe/akjqSug7c4E/cpjZxm3pKbjuAyK8OkV99JfwCifzqEvk1sOyGWuCAetDrQ29guKGhvBtJGkuaOHBDEHGbRsRtmiq57WAiv8ZEfs2U8Ash8mtC5NfcshsaggOaQm8GvbnhhhbybilpJWntwA2hxG1aErdpo+S2nxL5tSLya6uE3zMiv9ZEfu0su6EFOKAN9LbQ2xluaC/vDpKOkk4O3PCcuE0H4jadldz2CyK/jkR+XZTwe0nk14nIr6tlN7QHB3SG3gV6V8MN3eTdXdJD0tOBG14Rt+lO3KaXktt+TeTXg8ivtxJ+b4j8ehL59bHshm7ggF7Qe0PvY7ihr7z7SfpLBjhww1viNv2I2wxUctvviPz6E/kNUsLvPZHfACK/wZbd0BccMBD6IOiDDTcMkfdQyTDJcAdu+EDcZihxmxFKbvsjkd8wIr+RSvh9IvIbTuQ3yrIbhoADRkAfCX2U4YbR8h4jGSsZ58ANn4nbjCFuM17JbX8h8htL5DdBCb+vRH7jiPwmWnbDaHDAeOgToE803DBJ3pMlUyRTHbjhG3GbycRtpim57e9EflOI/KYr4feDyG8qkd8My26YBA6YBn069BmGG2bKe5ZktmSOAzf8JG4zi7jNXCW3/YvIbzaR3zwl/H4T+c0h8ptv2Q0zwQFzoc+DPt9wwwJ5L5Qskix24IY/xG0WErdZouS2/xL5LSLyW6qEX5gKvN+1mMhvmWU3LAAHLIG+FPoyww3L5b1CslKyyoEbwhK3WUHcZrWS2w5H5LeSyG+NEn7hifxWEfmtteyG5eCA1dDXQF9ruGGdvNdLNkg2OnBDBOI264nbbFJy2xGJ/DYQ+W1Wwi8Skd9GIr8tlt2wDhywCfpm6FsMN2yV9zbJdskOB26ITNxmG3GbnUpuOwqR33Yiv11K+EUl8ttB5Lfbshu2ggN2Qt8Ffbfhhj3y3ivZJ9nvwA3RiNvsJW5zQMltRyfy20fkd1AJvxhEfvuJ/A5ZdsMecMAB6AehHzLccFjeRyRHJcccuCEmcZsjxG2OK7ntWER+R4n8TijhF5vI7xiR30nLbjgMDjgO/QT0k4YbTsn7tOSM5KwDN8QhbnOauM05Jbcdl8jvDJHfeSX84hH5nSXyu2DZDafAAeegn4d+wXDDRXlfklyWXHHghvjEbS4Rt7mq5LYTEPldJvK7poRfQiK/K0R+1y274SI44Cr0a9CvG264Ie+bkluS2w7ckIi4zU3iNneU3HZiIr9bRH53lfBLQuR3m8jvnmU33AAH3IF+F/o9ww335e0heSB56MANSYnbeBC3eaTktpMR+T0g8nushF9yIr+HRH5PLLvhPjjgEfTH0J8YbvCUt5fEW+LjwA0piNt4EbfxVXLbKYn8vIn8/JTwS0Xk50Pk52/ZDZ7gAF/oftD9DTcEyDtQEiQJduCG1MRtAonbhCi57TREfkFEfqFK+KUl8gsm8ntq2Q0B4IAQ6KHQnxpueCbv55IXkpcO3JCOuM1z4javlNx2eiK/F0R+r5Xwy0Dk95LI741lNzwDB7yC/hr6G8MNb+X9TvJe8sGBGzISt3lH3OajktvOROT3nsjvkxJ+mYn8PhD5fbbshrfggI/QP0H/bLjhi7y/Sr5JvjtwQxbiNl+J2/xQcttZify+Efn9VMIvG5HfdyK/X5bd8AUc8AP6T+i/DDf8/veW/JWEuW3fDdmJ2/whbhP2to7bzkHk95fIL5wSfjmJ/MLc5vELf9uuG36DA/7d+v96OOjhb//XDRHkHVESSRLZgRtyEbeJSNwmipLbzk3kF4nIL6oSfnmI/CIT+UWz7IYI4IAo0KNCj2a4Ibq8Y0hiSmI5cENe4jYxiNvEVnLb+Yj8YhL5xVHCLz+RXywiv7iW3RAdHBAbehzocQ03xJN3fEkCSUIHbihA3CY+cZtESm67IJFfAiK/xEr4FSLyS0jkl8SyG+KBAxJBTww9ieGGpPJOJkkuSeHADYWJ2yQjbpNSyW0XIfJLTuSXSgm/okR+KYj8Ult2Q1JwQEroqaCnNtyQRt5pJekk6R24oRhxm7TEbTIoue3iRH7piPwyKuFXgsgvPZFfJstuSAMOyAA9I/RMhhsyyzuLJKskmwM3lCRuk4W4TXYlt12KyC8rkV8OJfxKE/llI/LLadkNmcEB2aHngJ7TcEMueeeW5JHkdeCGMsRtchO3yafktssS+eUh8suvhF85Ir+8RH4FLLshFzggH/T80AsYbigo70KSwpIiDtxQnrhNIeI2RZXcdgUiv8JEfsWU8KtI5FeEyK+4ZTcUBAcUhV4MenHDDSXkXVJSSlLagRsqEbcpSdymjJLbrkzkV4rIr6wSflWI/EoT+ZWz7IYS4IAy0MtCL2e4oby8K0gqSio5cENV4jYViNtUVnLb1Yj8KhL5VVHCrzqRXyUiv6qW3VAeHFAZehXoVQ03VJN3dUkNSU0HbqhB3KY6cZtaSm67JpFfDSK/2kr41SLyq0nkV8eyG6qBA2pBrw29juGGuvKuJ6kvaeDADbWJ29QjbtNQyW3XIfKrT+TXSAm/ukR+DYj8Glt2Q11wQEPojaA3NtzQRN5NJc0kzR24oR5xm6bEbVooue36RH7NiPxaKuHXgMivOZFfK8tuaAIOaAG9JfRWhhtay7uNpK2knQM3NCRu04a4TXslt92IyK8tkV8HJfwaE/m1I/LraNkNrcEB7aF3gN7RcEMneXeWdJF0deCGJsRtOhO36abktpsS+XUh8uuuhF8zIr+uRH49LLuhEzigG/Tu0HsYbugp716S3pI+DtzQnLhNL+I2fZXcdgsiv95Efv2U8GtJ5NeHyK+/ZTf0BAf0hd4Pen/DDQPkPVAySDLYgRtaEbcZSNxmiJLbbk3kN4jIb6gSfm2I/AYT+Q2z7IYB4IAh0IdCH2a4Ybi8R0hGSkY5cENb4jYjiNuMVnLb7Yj8RhL5jVHCrz2R3ygiv7GW3TAcHDAa+hjoYw03jJP3eMkEyUQHbuhA3GY8cZtJSm67I5HfBCK/yUr4dSLym0jkN8WyG8aBAyZBnwx9iuGGqfKeJpkumeHADZ2J20wjbjNTyW13IfKbTuQ3Swm/rkR+M4j8Zlt2w1RwwEzos6DPNtwwR95zJfMk8x24oRtxm7nEbRYoue3uRH7ziPwWKuHXg8hvPpHfIstumAMOWAB9IfRFhhsWy3uJZKlkmQM39CRus4S4zXIlt92LyG8pkd8KJfx6E/ktI/JbadkNi8EBy6GvgL7ScMMqea+WrJGsdeCGPsRtVhO3WafktvsS+a0h8luvhF8/Ir+1RH4bLLthFThgHfT10DcYbtgo702SzZItDtzQn7jNJuI2W5Xc9gAiv81EftuU8BtI5LeFyG+7ZTdsBAdshb4N+nbDDTvkvVOyS7LbgRsGEbfZSdxmj5LbHkzkt4vIb68SfkOI/HYT+e2z7IYd4IA90PdC32e4Yb+8D0gOSg45cMNQ4jYHiNscVnLbw4j8DhL5HVHCbziR3yEiv6OW3bAfHHAY+hHoRw03HJP3cckJyUkHbhhB3OY4cZtTSm57JJHfCSK/00r4jSLyO0nkd8ayG46BA05BPw39jOGGs/I+JzkvueDADaOJ25wjbnNRyW2PIfI7T+R3SQm/sUR+F4j8Llt2w1lwwEXol6BfNtxwRd5XJdck1x24YRxxm6vEbW4oue3xRH7XiPxuKuE3gcjvOpHfLctuuAIOuAH9JvRbhhtuy/uO5K7kngM3TCRuc4e4zX0ltz2JyO8ukZ+HEn6TifzuEfk9sOyG2+CA+9A9oD8w3PBQ3o8kjyVPHLhhCnGbR8RtPJXc9lQiv8dEfl5K+E0j8ntC5Odt2Q0PwQGe0L2gextu8JG3r8RP4u/ADdOJ2/gStwlQctsziPz8iPwClfCbSeTnT+QXZNkNPuCAAOiB0IMMNwTLO0QSKnnqwA2ziNuEELd5puS2ZxP5hRL5PVfCbw6R31MivxeW3RAMDngG/Tn0F4YbXsr7leS15I0DN8wlbvOKuM1bJbc9j8jvNZHfOyX85hP5vSHye2/ZDS/BAW+hv4P+3nDDB3l/lHySfHbghgXEbT4St/mi5LYXEvl9IvL7qoTfIiK/z0R+3yy74QM44Av0r9C/GW74Lu8fkp+SXw7csJi4zQ/iNr+V3PYSIr+fRH5/lPBbSuT3i8jvr2U3fAcH/Ib+B/pfww1h7oQNE1YSThL+jn03LCNu8++7WdtEuKPjtpcT+YUj8ouohN8KIr/wRH6R7th1w7+/8/85IAL0iNAj3fmvGyLLO4okqiSaAzesJG4ThbhNdCW3vYrILyqRXwwl/FYT+UUj8otp2Q2RwQHRoceAHtNwQyx5x5bEkcR14IY1xG1iE7eJp+S21xL5xSHyi6+E3zoiv7hEfgksuyEWOCAe9PjQExhuSCjvRJLEkiQO3LCeuE0i4jZJldz2BiK/xER+yZTw20jkl4TIL7llNyQEBySFngx6csMNKeSdUpJKktqBGzYRt0lJ3CaNktveTOSXisgvrRJ+W4j8UhP5pbPshhTggDTQ00JPZ7ghvbwzSDJKMjlww1biNhmI22RWctvbiPwyEvllUcJvO5FfJiK/rJbdkB4ckBl6FuhZDTdkk3d2SQ5JTgdu2EHcJjtxm1xKbnsnkV8OIr/cSvjtIvLLSeSXx7IbsoEDckHPDT2P4Ya88s4nyS8p4MANu4nb5CNuU1DJbe8h8stP5FdICb+9RH4FiPwKW3ZDXnBAQeiFoBc23FBE3kUlxSTFHbhhH3GbosRtSii57f1EfsWI/Eoq4XeAyK84kV8py24oAg4oAb0k9FKGG0r/+yZJWUk5B244SNymDHGb8kpu+xCRX1kivwpK+B0m8itH5FfRshtKgwPKQ68AvaLhhkryriypIqnqwA1HiNtUJm5TTcltHyXyq0LkV10Jv2NEflWJ/GpYdkMlcEA16NWh1zDcUFPetSS1JXUcuOE4cZtaxG3qKrntE0R+tYn86inhd5LIrw6RX33LbqgJDqgLvR70+oYbGsi7oaSRpLEDN5wibtOQuE0TJbd9msivEZFfUyX8zhD5NSbya2bZDQ3AAU2gN4XezHBDc3m3kLSUtHLghrPEbVoQt2mt5LbPEfm1JPJro4TfeSK/VkR+bS27oTk4oDX0NtDbGm5oJ+/2kg6Sjg7ccIG4TXviNp2U3PZFIr8ORH6dlfC7ROTXkcivi2U3tAMHdILeGXoXww1d5d1N0l3Sw4EbLhO36UbcpqeS275C5NedyK+XEn5Xifx6EPn1tuyGruCAntB7Qe9tuKGPvPtK+kn6O3DDNeI2fYnbDFBy29eJ/PoR+Q1Uwu8GkV9/Ir9Blt3QBxwwAPpA6IMMNwyW9xDJUMkwB264SdxmCHGb4Upu+xaR31AivxFK+N0m8htG5DfSshsGgwOGQx8BfaThhlHyHi0ZIxnrwA13iNuMJm4zTslt3yXyG0PkN14Jv3tEfmOJ/CZYdsMocMA46OOhTzDcMFHekySTJVMcuOE+cZtJxG2mKrltDyK/yUR+05Twe0DkN4XIb7plN0wEB0yFPg36dMMNM+Q9UzJLMtuBGx4St5lJ3GaOktt+ROQ3i8hvrhJ+j4n8ZhP5zbPshhnggDnQ50KfZ7hhvrwXSBZKFjlwwxPiNguI2yxWctueRH4LifyWKOHnReS3iMhvqWU3zAcHLIa+BPpSww3L5L1cskKy0oEbvInbLCdus0rJbfsQ+a0g8luthJ8vkd9KIr81lt2wDBywCvpq6GsMN6yV9zrJeskGB27wI26zjrjNRiW37U/kt57Ib5MSfgFEfhuI/DZbdsNacMBG6JugbzbcsEXeWyXbJNsduCGQuM1W4jY7lNx2EJHfNiK/nUr4BRP5bSfy22XZDVvAATug74S+y3DDbnnvkeyV7HPghhDiNnuI2+xXctuhRH57ifwOKOH3lMhvH5HfQctu2A0O2A/9APSDhhsOyfuw5IjkqAM3PCNuc5i4zTElt/2cyO8Ikd9xJfxeEPkdJfI7YdkNh8ABx6Afh37CcMNJeZ+SnJacceCGl8RtThG3Oavktl8R+Z0m8junhN9rIr8zRH7nLbvhJDjgLPRz0M8bbrgg74uSS5LLDtzwhrjNReI2V5Tc9lsiv0tEfleV8HtH5HeZyO+aZTdcAAdcgX4V+jXDDdflfUNyU3LLgRveE7e5QdzmtpLb/kDkd5PI744Sfh+J/G4R+d217Ibr4IDb0O9Av2u44Z6870s8JA8cuOETcZv7xG0eKrntz0R+HkR+j5Tw+0Lk94DI77FlN9wDBzyE/gj6Y8MNT+TtKfGSeDtww1fiNp7EbXyU3PY3Ij8vIj9fJfy+E/l5E/n5WXbDE3CAD3Rf6H6GG/zlHSAJlAQ5cMMP4jYBxG2Cldz2TyK/QCK/ECX8fhH5BRH5hVp2gz84IBh6CPRQww1P5f1M8lzywoEbfhO3eUbc5qWS2/5D5PecyO+VEn5/ifxeEPm9tuyGp+CAl9BfQX9tuOGNvN9K3kneO3BDmIrE/9kTt/mg5LbDEvm9I/L7qIRfOCK/90R+nyy74Q044AP0j9A/GW74LO8vkq+Sbw7cEJ64zRfiNt+V3HYEIr+vRH4/lPCLSOT3jcjvp2U3fAYHfIf+A/pPww2/5P37388kfx24IRJxm9/EbcLc1XHbkYn8/hD5hVXCLwqR318iv3B37brhFzjg363/r4eFHu7uf90QXt4RJBElke7ad0NU4jYR7vK2iazktqMR+UUk8ouihF90Ir9IRH5RLbshPDggMvQo0KMabogm7+iSGJKYDtwQg7hNdOI2sZTcdkwivxhEfrGV8ItF5BeTyC+OZTdEAwfEgh4behzDDXHlHU8SX5LAgRtiE7eJR9wmoZLbjkPkF5/IL5ESfnGJ/BIQ+SW27Ia44ICE0BNBT2y4IYm8k0qSSZI7cEM84jZJidukUHLb8Yn8khH5pVTCLwGRX3Iiv1SW3ZAEHJACekroqQw3pJZ3GklaSToHbkhI3CYNcZv0Sm47EZFfWiK/DEr4JSbyS0fkl9GyG1KDA9JDzwA9o+GGTPLOLMkiyerADUmI22QmbpNNyW0nJfLLQuSXXQm/ZER+WYn8clh2QyZwQDbo2aHnMNyQU965JLkleRy4ITlxm1zEbfIque0URH65ifzyKeGXksgvD5FffstuyAkOyAs9H/T8hhsKyLugpJCksAM3pCJuU5C4TRElt52ayK8QkV9RJfzSEPkVJvIrZtkNBcABRaAXhV7McENxeZeQlJSUcuCGtMRtShC3Ka3kttMR+ZUk8iujhF96Ir9SRH5lLbuhODigNPQy0Msabign7/KSCpKKDtyQgbhNeeI2lZTcdkYivwpEfpWV8MtE5FeRyK+KZTeUAwdUgl4ZehXDDVXlXU1SXVLDgRsyE7epRtymppLbzkLkV53Ir5YSflmJ/GoQ+dW27Iaq4ICa0GtBr224oY6860rqSeo7cEM24jZ1ids0UHLb2Yn86hH5NVTCLweRX30iv0aW3VAHHNAAekPojQw3NJZ3E0lTSTMHbshJ3KYJcZvmSm47F5FfUyK/Fkr45Sbya0bk19KyGxqDA5pDbwG9peGGVvJuLWkjaevADXmI27QmbtNOyW3nJfJrQ+TXXgm/fER+bYn8Olh2QytwQDvo7aF3MNzQUd6dJJ0lXRy4IT9xm07Ebboque0CRH6dify6KeFXkMivC5Ffd8tu6AgO6Aq9G/Tuhht6yLunpJektwM3FCJu05O4TR8lt12YyK8XkV9fJfyKEPn1JvLrZ9kNPcABfaD3hd7PcEN/eQ+QDJQMcuCGosRtBhC3GazktosR+Q0k8huihF9xIr9BRH5DLbuhPzhgMPQh0Icabhgm7+GSEZKRDtxQgrjNcOI2o5TcdkkivxFEfqOV8CtF5DeSyG+MZTcMAweMgj4a+hjDDWPlPU4yXjLBgRtKE7cZR9xmopLbLkPkN57Ib5ISfmWJ/CYQ+U227Iax4ICJ0CdBn2y4YYq8p0qmSaY7cEM54jZTidvMUHLb5Yn8phH5zVTCrwKR33Qiv1mW3TAFHDAD+kzosww3zJb3HMlcyTwHbqhI3GYOcZv5Sm67EpHfXCK/BUr4VSbym0fkt9CyG2aDA+ZDXwB9oeGGRfJeLFkiWerADVWI2ywmbrNMyW1XJfJbQuS3XAm/akR+S4n8Vlh2wyJwwDLoy6GvMNywUt6rJKslaxy4oTpxm1XEbdYque0aRH6rifzWKeFXk8hvDZHfestuWAkOWAt9HfT1hhs2yHujZJNkswM31CJus5G4zRYlt12byG8Tkd9WJfzqEPltJvLbZtkNG8ABW6Bvhb7NcMN2ee+Q7JTscuCGusRtdhC32a3ktusR+e0k8tujhF99Ir9dRH57LbthOzhgN/Q90Pcabtgn7/2SA5KDDtzQgLjNfuI2h5TcdkMivwNEfoeV8GtE5HeQyO+IZTfsAwccgn4Y+hHDDUflfUxyXHLCgRsaE7c5RtzmpJLbbkLkd5zI75QSfk2J/E4Q+Z227Iaj4ICT0E9BP2244Yy8z0rOSc47cEMz4jZnidtcUHLbzYn8zhH5XVTCrwWR33kiv0uW3XAGHHAB+kXolww3XJb3FclVyTUHbmhJ3OYKcZvrSm67FZHfVSK/G0r4tSbyu0bkd9OyGy6DA65DvwH9puGGW/K+LbkjuevADW2I29wmbnNPyW23JfK7Q+R3Xwm/dkR+d4n8PCy74RY44B70+9A9DDc8kPdDySPJYwduaE/c5iFxmydKbrsDkd8jIj9PJfw6Evk9JvLzsuyGB+CAJ9A9oXsZbvCWt4/EV+LnwA2diNv4ELfxV3LbnYn8fIn8ApTw60Lk50fkF2jZDd7gAH/oAdADDTcEyTtYEiIJdeCGrsRtgonbPFVy292I/EKI/J4p4dedyC+UyO+5ZTcEgQOeQn8G/bnhhhfyfil5JXntwA09iNu8JG7zRslt9yTye0Xk91YJv15Efq+J/N5ZdsMLcMAb6G+hvzPc8F7eHyQfJZ8cuKE3cZsPxG0+K7ntPkR+H4n8vijh15fI7xOR31fLbngPDvgM/Qv0r4Ybvsn7u+SH5KcDN/QjbvOduM0vJbfdn8jvB5HfbyX8BhD5/STy+2PZDd/AAb+g/4b+x3DDX3mHuRc2TFhJuHv23TCQuM2/72ZtE/6ejtseROQXlsgvghJ+g4n8whH5Rbxn1w1/wQH/bv1/PQL0iPf+64ZI8o4siSKJ6sANQ4jbRCZuE03JbQ8l8otC5BddCb9hRH5RifxiWHZDJHBANOjRoccw3BBT3rEksSVxHLhhOHGbWMRt4iq57RFEfrGJ/OIp4TeSyC8OkV98y26ICQ6ICz0e9PiGGxLIO6EkkSSxAzeMIm6TkLhNEiW3PZrILxGRX1Il/MYQ+SUm8ktm2Q0JwAFJoCeFnsxwQ3J5p5CklKRy4IaxxG1SELdJreS2xxH5pSTyS6OE33giv1REfmktuyE5OCA19DTQ0xpuSCfv9JIMkowO3DCBuE164jaZlNz2RCK/DER+mZXwm0Tkl5HIL4tlN6QDB2SCnhl6FsMNWeWdTZJdksOBGyYTt8lG3CanktueQuSXncgvlxJ+U4n8chD55bbshqzggJzQc0HPbbghj7zzSvJJ8jtwwzTiNnmJ2xRQctvTifzyEfkVVMJvBpFffiK/QpbdkAccUAB6QeiFDDcUlncRSVFJMQdumEncpghxm+JKbnsWkV9RIr8SSvjNJvIrRuRX0rIbCoMDikMvAb2k4YZS8i7977skZR24YQ5xm9LEbcopue25RH5liPzKK+E3j8ivLJFfBctuKAUOKAe9PPQKhhsqyruSpLKkigM3zCduU4m4TVUlt72AyK8ykV81JfwWEvlVIfKrbtkNFcEBVaFXg17dcEMNedeU1JLUduCGRcRtahK3qaPkthcT+dUi8qurhN8SIr/aRH71LLuhBjigDvS60OsZbqgv7waShpJGDtywlLhNA+I2jZXc9jIiv4ZEfk2U8FtO5NeIyK+pZTfUBwc0ht4EelPDDc3k3VzSQtLSgRtWELdpTtymlZLbXknk14LIr7USfquI/FoS+bWx7IZm4IBW0FtDb2O4oa2820naSzo4cMNq4jbtiNt0VHLba4j82hP5dVLCby2RXwciv86W3dAWHNAReifonQ03dJF3V0k3SXcHblhH3KYrcZseSm57PZFfNyK/nkr4bSDy607k18uyG7qAA3pA7wm9l+GG3vLuI+kr6efADRuJ2/QhbtNfyW1vIvLrS+Q3QAm/zUR+/Yj8Blp2Q29wQH/oA6APNNwwSN6DJUMkQx24YQtxm8HEbYYpue2tRH5DiPyGK+G3jchvKJHfCMtuGAQOGAZ9OPQRhhtGynuUZLRkjAM3bCduM4q4zVglt72DyG80kd84Jfx2EvmNIfIbb9kNI8EBY6GPgz7ecMMEeU+UTJJMduCGXcRtJhK3maLktncT+U0i8puqhN8eIr/JRH7TLLthAjhgCvSp0KcZbpgu7xmSmZJZDtywl7jNDOI2s5Xc9j4iv5lEfnOU8NtP5DeLyG+uZTdMBwfMhj4H+lzDDfPkPV+yQLLQgRsOELeZT9xmkZLbPkjkt4DIb7ESfoeI/BYS+S2x7IZ54IBF0BdDX2K4Yam8l0mWS1Y4cMNh4jbLiNusVHLbR4j8lhP5rVLC7yiR3woiv9WW3bAUHLAS+iroqw03rJH3Wsk6yXoHbjhG3GYtcZsNSm77OJHfOiK/jUr4nSDyW0/kt8myG9aAAzZA3wh9k+GGzfLeItkq2ebADSeJ22whbrNdyW2fIvLbSuS3Qwm/00R+24j8dlp2w2ZwwHboO6DvNNywS967JXskex244Qxxm93EbfYpue2zRH57iPz2K+F3jshvL5HfActu2AUO2Ad9P/QDhhsOyvuQ5LDkiAM3nCduc4i4zVElt32ByO8wkd8xJfwuEvkdIfI7btkNB8EBR6Efg37ccMMJeZ+UnJKcduCGS8RtThK3OaPkti8T+Z0i8jurhN8VIr/TRH7nLLvhBDjgDPSz0M8Zbjgv7wuSi5JLDtxwlbjNBeI2l5Xc9jUiv4tEfleU8LtO5HeJyO+qZTecBwdchn4F+lXDDdfkfV1yQ3LTgRtuELe5TtzmlpLbvknkd4PI77YSfreI/G4S+d2x7IZr4IBb0G9Dv2O44a6870nuSzwcuOE2cZt7xG0eKLntO0R+94n8Hirhd5fIz4PI75FlN9wFBzyA/hD6I8MNj+X9ROIp8XLghnvEbZ4Qt/FWctv3ifw8ifx8lPDzIPLzIvLzteyGx+AAb+g+0H0NN/jJ218SIAl04IYHxG38idsEKbnth0R+AUR+wUr4PSLyCyTyC7HsBj9wQBD0YOghhhtC5f1U8kzy3IEbHhO3eUrc5oWS235C5PeMyO+lEn6eRH7PifxeWXZDKDjgBfSX0F8Zbngt7zeSt5J3DtzgRdzmDXGb90pu25vI7y2R3wcl/HyI/N4R+X207IbX4ID30D9A/2i44ZO8P0u+SL46cIMvcZvPxG2+KbltPyK/L0R+35Xw8yfy+0rk98OyGz6BA75B/w79h+GGn/L+Jfn97+cO3BBA3OYXcZu/Sm47kMjvN5FfmPs6+AUR+f0h8gt7364bfoID/kL/t9v/etj7/3VDOHmHl0SQRLxv3w3BxG3C3+dtE0nJbYcQ+UUg8oushF8okV9EIr8olt0QDhwQCXpk6FEMN0SVdzRJdEkMB254StwmGnGbmEpu+xmRX3Qiv1hK+D0n8otB5BfbshuiggNiQo8FPbbhhjjyjiuJJ4nvwA0viNvEJW6TQMltvyTyi0fkl1AJv1dEfvGJ/BJZdkMccEAC6AmhJzLckFjeSSRJJckcuOE1cZskxG2SK7ntN0R+SYn8Uijh95bILxmRX0rLbkgMDkgOPQX0lIYbUsk7tSSNJK0DN7wjbpOauE06Jbf9nsgvDZFfeiX8PhD5pSXyy2DZDanAAemgp4eewXBDRnlnkmSWZHHgho/EbTIRt8mq5LY/EfllJvLLpoTfZyK/LER+2S27ISM4ICv0bNCzG27IIe+cklyS3A7c8IW4TU7iNnmU3PZXIr9cRH55lfD7RuSXm8gvn2U35AAH5IGeF3o+ww355V1AUlBSyIEbvhO3KUDcprCS2/5B5FeQyK+IEn4/ifwKEfkVteyG/OCAwtCLQC9quKGYvItLSkhKOnDDL+I2xYnblFJy27+J/EoQ+ZVWwu8PkV9JIr8ylt1QDBxQCnpp6GUMN5SVdzlJeUkFB274S9ymHHGbikpuO0wl3u8qT+RXSQm/sER+FYj8Klt2Q1lwQEXolaBXNtxQRd5VJdUk1R24IRxxm6rEbWooue3wRH7ViPxqKuEXgcivOpFfLctuqAIOqAG9JvRahhtqy7uOpK6kngM3RCRuU4e4TX0ltx2JyK8ukV8DJfwiE/nVI/JraNkNtcEB9aE3gN7QcEMjeTeWNJE0deCGKMRtGhO3aabktqMS+TUh8muuhF80Ir+mRH4tLLuhETigGfTm0FsYbmgp71aS1pI2DtwQnbhNK+I2bZXcdgwiv9ZEfu2U8ItJ5NeGyK+9ZTe0BAe0hd4OenvDDR3k3VHSSdLZgRtiEbfpSNymi5Lbjk3k14nIr6sSfnGI/DoT+XWz7IYO4IAu0LtC72a4obu8e0h6Sno5cENc4jY9iNv0VnLb8Yj8ehL59VHCLz6RXy8iv76W3dAdHNAbeh/ofQ039JN3f8kAyUAHbkhA3KY/cZtBSm47IZHfACK/wUr4JSLyG0jkN8SyG/qBAwZBHwx9iOGGofIeJhkuGeHADYmJ2wwjbjNSyW0nIfIbTuQ3Sgm/pER+I4j8Rlt2w1BwwEjoo6CPNtwwRt5jJeMk4x24IRlxm7HEbSYoue3kRH7jiPwmKuGXgshvPJHfJMtuGAMOmAB9IvRJhhsmy3uKZKpkmgM3pCRuM4W4zXQlt52KyG8qkd8MJfxSE/lNI/KbadkNk8EB06HPgD7TcMMsec+WzJHMdeCGNMRtZhO3mafkttMS+c0h8puvhF86Ir+5RH4LLLthFjhgHvT50BcYblgo70WSxZIlDtyQnrjNIuI2S5XcdgYiv8VEfsuU8MtI5LeEyG+5ZTcsBAcshb4M+nLDDSvkvVKySrLagRsyEbdZSdxmjZLbzkzkt4rIb60SflmI/FYT+a2z7IYV4IA10NdCX2e4Yb28N0g2SjY5cENW4jYbiNtsVnLb2Yj8NhL5bVHCLzuR3yYiv62W3bAeHLAZ+hboWw03bJP3dskOyU4HbshB3GY7cZtdSm47J5HfDiK/3Ur45SLy20nkt8eyG7aBA3ZB3w19j+GGvfLeJ9kvOeDADbmJ2+wjbnNQyW3nIfLbT+R3SAm/vER+B4j8Dlt2w15wwEHoh6AfNtxwRN5HJcckxx24IR9xm6PEbU4oue38RH7HiPxOKuFXgMjvOJHfKctuOAIOOAH9JPRThhtOy/uM5KzknAM3FCRuc4a4zXklt12IyO8skd8FJfwKE/mdI/K7aNkNp8EB56FfgH7RcMMleV+WXJFcdeCGIsRtLhO3uabktosS+V0h8ruuhF8xIr+rRH43LLvhEjjgGvTr0G8Ybrgp71uS25I7DtxQnLjNLeI2d5Xcdgkiv9tEfveU8CtJ5HeHyO++ZTfcBAfchX4P+n3DDR7yfiB5KHnkwA2liNs8IG7zWMltlybye0jk90QJvzJEfo+I/Dwtu8EDHPAY+hPonoYbvOTtLfGR+DpwQ1niNt7EbfyU3HY5Ij8fIj9/JfzKE/n5EvkFWHaDFzjAD7o/9ADDDYHyDpIES0IcuKECcZsg4jahSm67IpFfMJHfUyX8KhH5hRD5PbPshkBwQCj0p9CfGW54Lu8XkpeSVw7cUJm4zQviNq+V3HYVIr+XRH5vlPCrSuT3isjvrWU3PAcHvIb+Bvpbww3v5P1e8kHy0YEbqhG3eU/c5pOS265O5PeByO+zEn41iPw+Evl9seyGd+CAT9A/Q/9iuOGrvL9Jvkt+OHBDTeI234jb/FRy27WI/L4T+f1Swq82kd8PIr/flt3wFRzwE/ov6L8NN/yR919JGI+wYcJ62HdDHeI2f4nbhPPQcdt1ifzCePD4hVfCrx6RX1givwgedt3wBxzw79b/18NDj+DxXzdElHckSWRJFAduqE/cJhJxm6hKbrsBkV9kIr9oSvg1JPKLQuQX3bIbIoIDokKPBj264YYY8o4piSWJ7cANjYjbxCRuE0fJbTcm8otF5BdXCb8mRH6xifziWXZDDHBAHOhxoccz3BBf3gkkCSWJHLihKXGbBMRtEiu57WZEfgmJ/JIo4decyC8RkV9Sy26IDw5IDD0J9KSGG5LJO7kkhSSlAze0IG6TnLhNKiW33ZLILwWRX2ol/FoR+aUk8ktj2Q3JwAGpoKeGnsZwQ1p5p5Okl2Rw4IbWxG3SEbfJqOS22xD5pSfyy6SEX1sivwxEfpktuyEtOCAj9EzQMxtuyCLvrJJskuwO3NCOuE1W4jY5lNx2eyK/bER+OZXw60Dkl53IL5dlN2QBB+SAnhN6LsMNueWdR5JXks+BGzoSt8lD3Ca/ktvuROSXl8ivgBJ+nYn88hH5FbTshtzggPzQC0AvaLihkLwLS4pIijpwQxfiNoWJ2xRTcttdifyKEPkVV8KvG5FfUSK/EpbdUAgcUAx6ceglDDeUlHcpSel/3+bADd2J25QiblNWyW33IPIrTeRXTgm/nkR+ZYj8ylt2Q0lwQFno5aCXN9xQQd4VJZUklR24oRdxm4rEbaooue3eRH6ViPyqKuHXh8ivMpFfNctuqAAOqAK9KvRqhhuqy7uGpKaklgM39CVuU4O4TW0lt92PyK8mkV8dJfz6E/nVIvKra9kN1cEBtaHXgV7XcEM9edeXNJA0dOCGAcRt6hO3aaTktgcS+TUg8mushN8gIr+GRH5NLLuhHjigEfTG0JsYbmgq72aS5pIWDtwwmLhNM+I2LZXc9hAiv+ZEfq2U8BtK5NeCyK+1ZTc0BQe0hN4KemvDDW3k3VbSTtLegRuGEbdpS9ymg5LbHk7k147Ir6MSfiOI/NoT+XWy7IY24IAO0DtC72S4obO8u0i6Sro5cMNI4jZdiNt0V3Lbo4j8uhL59VDCbzSRXzciv56W3dAZHNAdeg/oPQ039JJ3b0kfSV8HbhhD3KY3cZt+Sm57LJFfHyK//kr4jSPy60vkN8CyG3qBA/pB7w99gOGGgfIeJBksGeLADeOJ2wwibjNUyW1PIPIbTOQ3TAm/iUR+Q4j8hlt2w0BwwFDow6APN9wwQt4jJaMkox24YRJxm5HEbcYoue3JRH6jiPzGKuE3hchvNJHfOMtuGAEOGAN9LPRxhhvGy3uCZKJkkgM3TCVuM4G4zWQltz2NyG8ikd8UJfymE/lNIvKbatkN48EBk6FPgT7VcMM0eU+XzJDMdOCGGcRtphO3maXktmcS+c0g8puthN8sIr+ZRH5zLLthGjhgFvTZ0OcYbpgr73mS+ZIFDtwwm7jNPOI2C5Xc9hwiv/lEfouU8JtL5LeAyG+xZTfMBQcshL4I+mLDDUvkvVSyTLLcgRvmEbdZStxmhZLbnk/kt4zIb6USfguI/JYT+a2y7IYl4IAV0FdCX2W4YbW810jWStY5cMNC4jZriNusV3Lbi4j81hL5bVDCbzGR3zoiv42W3bAaHLAe+gboGw03bJL3ZskWyVYHblhC3GYzcZttSm57KZHfFiK/7Ur4LSPy20rkt8OyGzaBA7ZB3w59h+GGnfLeJdkt2ePADcuJ2+wibrNXyW2vIPLbTeS3Twm/lUR+e4j89lt2w05wwF7o+6DvN9xwQN4HJYckhx24YRVxm4PEbY4oue3VRH6HiPyOKuG3hsjvMJHfMctuOAAOOAL9KPRjhhuOy/uE5KTklAM3rCVuc4K4zWklt72OyO8kkd8ZJfzWE/mdIvI7a9kNx8EBp6GfgX7WcMM5eZ+XXJBcdOCGDcRtzhO3uaTktjcS+V0g8rushN8mIr+LRH5XLLvhHDjgEvTL0K8Ybrgq72uS65IbDtywmbjNNeI2N5Xc9hYiv+tEfreU8NtK5HeDyO+2ZTdcBQfchH4L+m3DDXfkfVdyT3LfgRu2Ebe5S9zGQ8ltbyfyu0fk90AJvx1EfveJ/B5adsMdcIAH9AfQHxpueCTvx5InEk8HbthJ3OYxcRsvJbe9i8jvCZGftxJ+u4n8PIn8fCy74RE4wAu6N3Qfww2+8vaT+EsCHLhhD3EbP+I2gUpuey+Rnz+RX5ASfvuI/AKI/IItu8EXHBAIPQh6sOGGEHmHSp5Knjlww37iNqHEbZ4rue0DRH5PifxeKOF3kMjvGZHfS8tuCAEHPIf+AvpLww2v5P1a8kby1oEbDhG3eU3c5p2S2z5M5PeGyO+9En5HiPzeEvl9sOyGV+CAd9DfQ/9guOGjvD9JPku+OHDDUeI2n4jbfFVy28eI/D4T+X1Twu84kd8XIr/vlt3wERzwFfo36N8NN/yQ90/JL8lvB244QdzmJ3GbP0pu+ySR3y8iv79K+J0i8vtN5BfmgV03/AAH/IH+F/q/b0A3hJV3OEl4SYQH9t1wmrhNuAe8bSI+0HHbZ4j8whP5RVLC7yyRXwQiv8iW3RD2wf87ICL0SNAjG26IIu+okmiS6A7ccI64TVTiNjGU3PZ5Ir9oRH4xlfC7QOQXncgvlmU3RAEHxIAeE3osww2x5R1HElcSz4EbLhK3iUPcJr6S275E5BeXyC+BEn6XifziEfkltOyG2OCA+NATQE9ouCGRvBNLkkiSOnDDFeI2iYnbJFNy21eJ/JIQ+SVXwu8akV9SIr8Ult2QCByQDHpy6CkMN6SUdypJakkaB264TtwmFXGbtEpu+waRX2oiv3RK+N0k8ktD5JfeshtSggPSQk8HPb3hhgzyzijJJMnswA23iNtkJG6TRclt3ybyy0Tkl1UJvztEfpmJ/LJZdkMGcEAW6FmhZzPckF3eOSQ5JbkcuOEucZscxG1yK7nte0R+OYn88ijhd5/ILxeRX17LbsgODsgNPQ/0vIYb8sk7v6SApKADN3gQt8lP3KaQktt+QORXgMivsBJ+D4n8ChL5FbHshnzggELQC0MvYrihqLyLSYpLSjhwwyPiNsWI25RUctuPifyKE/mVUsLvCZFfCSK/0pbdUBQcUBJ6KeilDTeUkXdZSTlJeQdu8CRuU5a4TQUlt+1F5FeOyK+iEn7eRH7lifwqWXZDGXBABegVoVcy3FBZ3lUkVSXVHLjBh7hNFeI21ZXcti+RX1UivxpK+PkR+VUj8qtp2Q2VwQHVodeAXtNwQy1515bUkdR14AZ/4ja1idvUU3LbAUR+dYj86ivhF0jkV5fIr4FlN9QCB9SDXh96A8MNDeXdSNJY0sSBG4KI2zQibtNUyW0HE/k1JvJrpoRfCJFfEyK/5pbd0BAc0BR6M+jNDTe0kHdLSStJawduCCVu05K4TRslt/2UyK8VkV9bJfyeEfm1JvJrZ9kNLcABbaC3hd7OcEN7eXeQdJR0cuCG58RtOhC36azktl8Q+XUk8uuihN9LIr9ORH5dLbuhPTigM/Qu0Lsabugm7+6SHpKeDtzwirhNd+I2vZTc9msivx5Efr2V8HtD5NeTyK+PZTd0Awf0gt4beh/DDX3l3U/SXzLAgRveErfpR9xmoJLbfkfk15/Ib5ASfu+J/AYQ+Q227Ia+4ICB0AdBH2y4YYi8h0qGSYY7cMMH4jZDiduMUHLbH4n8hhH5jVTC7xOR33Aiv1GW3TAEHDAC+kjooww3jJb3GMlYyTgHbvhM3GYMcZvxSm77C5HfWCK/CUr4fSXyG0fkN9GyG0aDA8ZDnwB9ouGGSfKeLJkimerADd+I20wmbjNNyW1/J/KbQuQ3XQm/H0R+U4n8Zlh2wyRwwDTo06HPMNwwU96zJLMlcxy44Sdxm1nEbeYque1fRH6zifzmKeH3m8hvDpHffMtumAkOmAt9HvT5hhsWyHuhZJFksQM3/CFus5C4zRIlt/2XyG8Rkd9SJfzCVOb9rsVEfsssu2EBOGAJ9KXQlxluWC7vFZKVklUO3BCWuM0K4jarldx2OCK/lUR+a5TwC0/kt4rIb61lNywHB6yGvgb6WsMN6+S9XrJBstGBGyIQt1lP3GaTktuOSOS3gchvsxJ+kYj8NhL5bbHshnXggE3QN0PfYrhhq7y3SbZLdjhwQ2TiNtuI2+xUcttRiPy2E/ntUsIvKpHfDiK/3ZbdsBUcsBP6Lui7DTfskfdeyT7JfgduiEbcZi9xmwNKbjs6kd8+Ir+DSvjFIPLbT+R3yLIb9oADDkA/CP2Q4YbD8j4iOSo55sANMYnbHCFuc1zJbcci8jtK5HdCCb/YRH7HiPxOWnbDYXDAcegnoJ803HBK3qclZyRnHbghDnGb08Rtzim57bhEfmeI/M4r4RePyO8skd8Fy244BQ44B/089AuGGy7K+5LksuSKAzfEJ25zibjNVSW3nYDI7zKR3zUl/BIS+V0h8rtu2Q0XwQFXoV+Dft1www1535Tcktx24IZExG1uEre5o+S2ExP53SLyu6uEXxIiv9tEfvcsu+EGOOAO9LvQ7xluuC9vD8kDyUMHbkhK3MaDuM0jJbedjMjvAZHfYyX8khP5PSTye2LZDffBAY+gP4b+xHCDp7y9JN4SHwduSEHcxou4ja+S205J5OdN5OenhF8qIj8fIj9/y27wBAf4QveD7m+4IUDegZIgSbADN6QmbhNI3CZEyW2nIfILIvILVcIvLZFfMJHfU8tuCAAHhEAPhf7UcMMzeT+XvJC8dOCGdMRtnhO3eaXkttMT+b0g8nuthF8GIr+XRH5vLLvhGTjgFfTX0N8Ybngr73eS95IPDtyQkbjNO+I2H5XcdiYiv/dEfp+U8MtM5PeByO+zZTe8BQd8hP4J+mfDDV/k/VXyTfLdgRuyELf5Stzmh5Lbzkrk943I76cSftmI/L4T+f2y7IYv4IAf0H9C/2W44fe/t+SvJMxD+27ITtzmD3GbsA913HYOIr+/RH7hlPDLSeQX5iGPX/iHdt3wGxzw79b/18NBD//wv26IIO+IkkiSyA7ckIu4TUTiNlGU3HZuIr9IRH5RlfDLQ+QXmcgvmmU3RAAHRIEeFXo0ww3R5R1DElMSy4Eb8hK3iUHcJraS285H5BeTyC+OEn75ifxiEfnFteyG6OCA2NDjQI9ruCGevONLEkgSOnBDAeI28YnbJFJy2wWJ/BIQ+SVWwq8QkV9CIr8klt0QDxyQCHpi6EkMNySVdzJJckkKB24oTNwmGXGblEpuuwiRX3Iiv1RK+BUl8ktB5JfashuSggNSQk8FPbXhhjTyTitJJ0nvwA3FiNukJW6TQcltFyfyS0fkl1EJvxJEfumJ/DJZdkMacEAG6BmhZzLckFneWSRZJdkcuKEkcZssxG2yK7ntUkR+WYn8cijhV5rILxuRX07LbsgMDsgOPQf0nIYbcsk7tySPJK8DN5QhbpObuE0+JbddlsgvD5FffiX8yhH55SXyK2DZDbnAAfmg54dewHBDQXkXkhSWFHHghvLEbQoRtymq5LYrEPkVJvIrpoRfRSK/IkR+xS27oSA4oCj0YtCLG24oIe+SklKS0g7cUIm4TUniNmWU3HZlIr9SRH5llfCrQuRXmsivnGU3lAAHlIFeFno5ww3l5V1BUlFSyYEbqhK3qUDcprKS265G5FeRyK+KEn7VifwqEflVteyG8uCAytCrQK9quKGavKtLakhqOnBDDeI21Ynb1FJy2zWJ/GoQ+dVWwq8WkV9NIr86lt1QDRxQC3pt6HUMN9SVdz1JfUkDB26oTdymHnGbhkpuuw6RX30iv0ZK+NUl8mtA5NfYshvqggMaQm8EvbHhhibybippJmnuwA31iNs0JW7TQslt1yfya0bk11IJvwZEfs2J/FpZdkMTcEAL6C2htzLc0FrebSRtJe0cuKEhcZs2xG3aK7ntRkR+bYn8Oijh15jIrx2RX0fLbmgNDmgPvQP0joYbOsm7s6SLpKsDNzQhbtOZuE03JbfdlMivC5FfdyX8mhH5dSXy62HZDZ3AAd2gd4few3BDT3n3kvSW9HHghubEbXoRt+mr5LZbEPn1JvLrp4RfSyK/PkR+/S27oSc4oC/0ftD7G24YIO+BkkGSwQ7c0Iq4zUDiNkOU3HZrIr9BRH5DlfBrQ+Q3mMhvmGU3DAAHDIE+FPowww3D5T1CMlIyyoEb2hK3GUHcZrSS225H5DeSyG+MEn7tifxGEfmNteyG4eCA0dDHQB9ruGGcvMdLJkgmOnBDB+I244nbTFJy2x2J/CYQ+U1Wwq8Tkd9EIr8plt0wDhwwCfpk6FMMN0yV9zTJdMkMB27oTNxmGnGbmUpuuwuR33Qiv1lK+HUl8ptB5DfbshumggNmQp8FfbbhhjnyniuZJ5nvwA3diNvMJW6zQMltdyfym0fkt1AJvx5EfvOJ/BZZdsMccMAC6AuhLzLcsFjeSyRLJcscuKEncZslxG2WK7ntXkR+S4n8Vijh15vIbxmR30rLblgMDlgOfQX0lYYbVsl7tWSNZK0DN/QhbrOauM06Jbfdl8hvDZHfeiX8+hH5rSXy22DZDavAAeugr4e+wXDDRnlvkmyWbHHghv7EbTYRt9mq5LYHEPltJvLbpoTfQCK/LUR+2y27YSM4YCv0bdC3G27YIe+dkl2S3Q7cMIi4zU7iNnuU3PZgIr9dRH57lfAbQuS3m8hvn2U37AAH7IG+F/o+ww375X1AclByyIEbhhK3OUDc5rCS2x5G5HeQyO+IEn7DifwOEfkdteyG/eCAw9CPQD9quOGYvI9LTkhOOnDDCOI2x4nbnFJy2yOJ/E4Q+Z1Wwm8Ukd9JIr8zlt1wDBxwCvpp6GcMN5yV9znJeckFB24YTdzmHHGbi0puewyR33kiv0tK+I0l8rtA5HfZshvOggMuQr8E/bLhhivyviq5JrnuwA3jiNtcJW5zQ8ltjyfyu0bkd1MJvwlEfteJ/G5ZdsMVcMAN6Deh3zLccFvedyR3JfccuGEicZs7xG3uK7ntSUR+d4n8PJTwm0zkd4/I74FlN9wGB9yH7gH9geGGh/J+JHkseeLADVOI2zwibuOp5LanEvk9JvLzUsJvGpHfEyI/b8tueAgO8ITuBd3bcIOPvH0lfhJ/B26YTtzGl7hNgJLbnkHk50fkF6iE30wiP38ivyDLbvABBwRAD4QeZLghWN4hklDJUwdumEXcJoS4zTMltz2byC+UyO+5En5ziPyeEvm9sOyGYHDAM+jPob8w3PBS3q8kryVvHLhhLnGbV8Rt3iq57XlEfq+J/N4p4TefyO8Nkd97y254CQ54C/0d9PeGGz7I+6Pkk+SzAzcsIG7zkbjNFyW3vZDI7xOR31cl/BYR+X0m8vtm2Q0fwAFfoH+F/s1ww3d5/5D8lPxy4IbFxG1+ELf5reS2lxD5/STy+6OE31Iiv19Efn8tu+E7OOA39D/Q/xpuCPMobJiwknCS8I/su2EZcZt/383aJsIjHbe9nMgvHJFfRCX8VhD5hSfyi/TIrhv+/Z3/zwERoEeEHunRf90QWd5RJFEl0Ry4YSVxmyjEbaIrue1VRH5RifxiKOG3msgvGpFfTMtuiAwOiA49BvSYhhtiyTu2JI4krgM3rCFuE5u4TTwlt72WyC8OkV98JfzWEfnFJfJLYNkNscAB8aDHh57AcENCeSeSJJYkceCG9cRtEhG3SarktjcQ+SUm8kumhN9GIr8kRH7JLbshITggKfRk0JMbbkgh75SSVJLUDtywibhNSuI2aZTc9mYiv1REfmmV8NtC5JeayC+dZTekAAekgZ4WejrDDenlnUGSUZLJgRu2ErfJQNwms5Lb3kbkl5HIL4sSftuJ/DIR+WW17Ib04IDM0LNAz2q4IZu8s0tySHI6cMMO4jbZidvkUnLbO4n8chD55VbCbxeRX04ivzyW3ZANHJALem7oeQw35JV3Pkl+SQEHbthN3CYfcZuCSm57D5FffiK/Qkr47SXyK0DkV9iyG/KCAwpCLwS9sOGGIvIuKikmKe7ADfuI2xQlblNCyW3vJ/IrRuRXUgm/A0R+xYn8Sll2QxFwQAnoJaGXMtxQ+t83ScpKyjlww0HiNmWI25RXctuHiPzKEvlVUMLvMJFfOSK/ipbdUBocUB56BegVDTdUkndlSRVJVQduOELcpjJxm2pKbvsokV8VIr/qSvgdI/KrSuRXw7IbKoEDqkGvDr2G4Yaa8q4lqS2p48ANx4nb1CJuU1fJbZ8g8qtN5FdPCb+TRH51iPzqW3ZDTXBAXej1oNc33NBA3g0ljSSNHbjhFHGbhsRtmii57dNEfo2I/Joq4XeGyK8xkV8zy25oAA5oAr0p9GaGG5rLu4WkpaSVAzecJW7TgrhNayW3fY7IryWRXxsl/M4T+bUi8mtr2Q3NwQGtobeB3tZwQzt5t5d0kHR04IYLxG3aE7fppOS2LxL5dSDy66yE3yUiv45Efl0su6EdOKAT9M7Quxhu6CrvbpLukh4O3HCZuE034jY9ldz2FSK/7kR+vZTwu0rk14PIr7dlN3QFB/SE3gt6b8MNfeTdV9JP0t+BG64Rt+lL3GaAktu+TuTXj8hvoBJ+N4j8+hP5DbLshj7ggAHQB0IfZLhhsLyHSIZKhjlww03iNkOI2wxXctu3iPyGEvmNUMLvNpHfMCK/kZbdMBgcMBz6COgjDTeMkvdoyRjJWAduuEPcZjRxm3FKbvsukd8YIr/xSvjdI/IbS+Q3wbIbRoEDxkEfD32C4YaJ8p4kmSyZ4sAN94nbTCJuM1XJbXsQ+U0m8pumhN8DIr8pRH7TLbthIjhgKvRp0Kcbbpgh75mSWZLZDtzwkLjNTOI2c5Tc9iMiv1lEfnOV8HtM5DebyG+eZTfMAAfMgT4X+jzDDfPlvUCyULLIgRueELdZQNxmsZLb9iTyW0jkt0QJPy8iv0VEfkstu2E+OGAx9CXQlxpuWCbv5ZIVkpUO3OBN3GY5cZtVSm7bh8hvBZHfaiX8fIn8VhL5rbHshmXggFXQV0NfY7hhrbzXSdZLNjhwgx9xm3XEbTYquW1/Ir/1RH6blPALIPLbQOS32bIb1oIDNkLfBH2z4YYt8t4q2SbZ7sANgcRtthK32aHktoOI/LYR+e1Uwi+YyG87kd8uy27YAg7YAX0n9F2GG3bLe49kr2SfAzeEELfZQ9xmv5LbDiXy20vkd0AJv6dEfvuI/A5adsNucMB+6AegHzTccEjehyVHJEcduOEZcZvDxG2OKbnt50R+R4j8jivh94LI7yiR3wnLbjgEDjgG/Tj0E4YbTsr7lOS05IwDN7wkbnOKuM1ZJbf9isjvNJHfOSX8XhP5nSHyO2/ZDSfBAWehn4N+3nDDBXlflFySXHbghjfEbS4St7mi5LbfEvldIvK7qoTfOyK/y0R+1yy74QI44Ar0q9CvGW64Lu8bkpuSWw7c8J64zQ3iNreV3PYHIr+bRH53lPD7SOR3i8jvrmU3XAcH3IZ+B/pdww335H1f4iF54MANn4jb3Cdu81DJbX8m8vMg8nukhN8XIr8HRH6PLbvhHjjgIfRH0B8bbngib0+Jl8TbgRu+ErfxJG7jo+S2vxH5eRH5+Srh953Iz5vIz8+yG56AA3yg+0L3M9zgL+8ASaAkyIEbfhC3CSBuE6zktn8S+QUS+YUo4feLyC+IyC/Ushv8wQHB0EOghxpueCrvZ5LnkhcO3PCbuM0z4jYvldz2HyK/50R+r5Tw+0vk94LI77VlNzwFB7yE/gr6a8MNb+T9VvJO8t6BG8JUIf7PnrjNByW3HZbI7x2R30cl/MIR+b0n8vtk2Q1vwAEfoH+E/slww2d5f5F8lXxz4IbwxG2+ELf5ruS2IxD5fSXy+6GEX0Qiv29Efj8tu+EzOOA79B/Qfxpu+CXv3/9+JvnrwA2RiNv8Jm4T5rGO245M5PeHyC+sEn5RiPz+EvmFe2zXDb/AAf9u/X89LPRwj//rhvDyjiCJKIn02L4bohK3ifCYt01kJbcdjcgvIpFfFCX8ohP5RSLyi2rZDeHBAZGhR4Ee1XBDNHlHl8SQxHTghhjEbaITt4ml5LZjEvnFIPKLrYRfLCK/mER+cSy7IRo4IBb02NDjGG6IK+94kviSBA7cEJu4TTziNgmV3HYcIr/4RH6JlPCLS+SXgMgvsWU3xAUHJISeCHpiww1J5J1UkkyS3IEb4hG3SUrcJoWS245P5JeMyC+lEn4JiPySE/mlsuyGJOCAFNBTQk9luCG1vNNI0krSOXBDQuI2aYjbpFdy24mI/NIS+WVQwi8xkV86Ir+Mlt2QGhyQHnoG6BkNN2SSd2ZJFklWB25IQtwmM3GbbEpuOymRXxYiv+xK+CUj8stK5JfDshsygQOyQc8OPYfhhpzyziXJLcnjwA3JidvkIm6TV8ltpyDyy03kl08Jv5REfnmI/PJbdkNOcEBe6Pmg5zfcUEDeBSWFJIUduCEVcZuCxG2KKLnt1ER+hYj8iirhl4bIrzCRXzHLbigADigCvSj0YoYbisu7hKSkpJQDN6QlblOCuE1pJbedjsivJJFfGSX80hP5lSLyK2vZDcXBAaWhl4Fe1nBDOXmXl1SQVHTghgzEbcoTt6mk5LYzEvlVIPKrrIRfJiK/ikR+VSy7oRw4oBL0ytCrGG6oKu9qkuqSGg7ckJm4TTXiNjWV3HYWIr/qRH61lPDLSuRXg8ivtmU3VAUH1IReC3ptww115F1XUk9S34EbshG3qUvcpoGS285O5FePyK+hEn45iPzqE/k1suyGOuCABtAbQm9kuKGxvJtImkqaOXBDTuI2TYjbNFdy27mI/JoS+bVQwi83kV8zIr+Wlt3QGBzQHHoL6C0NN7SSd2tJG0lbB27IQ9ymNXGbdkpuOy+RXxsiv/ZK+OUj8mtL5NfBshtagQPaQW8PvYPhho7y7iTpLOniwA35idt0Im7TVcltFyDy60zk100Jv4JEfl2I/LpbdkNHcEBX6N2gdzfc0EPePSW9JL0duKEQcZuexG36KLntwkR+vYj8+irhV4TIrzeRXz/LbugBDugDvS/0foYb+st7gGSgZJADNxQlbjOAuM1gJbddjMhvIJHfECX8ihP5DSLyG2rZDf3BAYOhD4E+1HDDMHkPl4yQjHTghhLEbYYTtxml5LZLEvmNIPIbrYRfKSK/kUR+Yyy7YRg4YBT00dDHGG4YK+9xkvGSCQ7cUJq4zTjiNhOV3HYZIr/xRH6TlPArS+Q3gchvsmU3jAUHTIQ+Cfpkww1T5D1VMk0y3YEbyhG3mUrcZoaS2y5P5DeNyG+mEn4ViPymE/nNsuyGKeCAGdBnQp9luGG2vOdI5krmOXBDReI2c4jbzFdy25WI/OYS+S1Qwq8ykd88Ir+Flt0wGxwwH/oC6AsNNyyS92LJEslSB26oQtxmMXGbZUpuuyqR3xIiv+VK+FUj8ltK5LfCshsWgQOWQV8OfYXhhpXyXiVZLVnjwA3VidusIm6zVslt1yDyW03kt04Jv5pEfmuI/NZbdsNKcMBa6OugrzfcsEHeGyWbJJsduKEWcZuNxG22KLnt2kR+m4j8tirhV4fIbzOR3zbLbtgADtgCfSv0bYYbtst7h2SnZJcDN9QlbrODuM1uJbddj8hvJ5HfHiX86hP57SLy22vZDdvBAbuh74G+13DDPnnvlxyQHHTghgbEbfYTtzmk5LYbEvkdIPI7rIRfIyK/g0R+Ryy7YR844BD0w9CPGG44Ku9jkuOSEw7c0Ji4zTHiNieV3HYTIr/jRH6nlPBrSuR3gsjvtGU3HAUHnIR+Cvppww1n5H1Wck5y3oEbmhG3OUvc5oKS225O5HeOyO+iEn4tiPzOE/ldsuyGM+CAC9AvQr9kuOGyvK9IrkquOXBDS+I2V4jbXFdy262I/K4S+d1Qwq81kd81Ir+blt1wGRxwHfoN6DcNN9yS923JHcldB25oQ9zmNnGbe0puuy2R3x0iv/tK+LUj8rtL5Odh2Q23wAH3oN+H7mG44YG8H0oeSR47cEN74jYPids8UXLbHYj8HhH5eSrh15HI7zGRn5dlNzwABzyB7gndy3CDt7x9JL4SPwdu6ETcxoe4jb+S2+5M5OdL5BeghF8XIj8/Ir9Ay27wBgf4Qw+AHmi4IUjewZIQSagDN3QlbhNM3OapktvuRuQXQuT3TAm/7kR+oUR+zy27IQgc8BT6M+jPDTe8kPdLySvJawdu6EHc5iVxmzdKbrsnkd8rIr+3Svj1IvJ7TeT3zrIbXoAD3kB/C/2d4Yb38v4g+Sj55MANvYnbfCBu81nJbfch8vtI5PdFCb++RH6fiPy+WnbDe3DAZ+hfoH813PBN3t8lPyQ/HbihH3Gb78Rtfim57f5Efj+I/H4r4TeAyO8nkd8fy274Bg74Bf039D+GG/7KO8yTsGHCSsI9se+GgcRt/n03a5vwT3Tc9iAiv7BEfhGU8BtM5BeOyC/iE7tu+AsO+Hfr/+sRoEd88l83RJJ3ZEkUSVQHbhhC3CYycZtoSm57KJFfFCK/6Er4DSPyi0rkF8OyGyKBA6JBjw49huGGmPKOJYktiePADcOJ28QibhNXyW2PIPKLTeQXTwm/kUR+cYj84lt2Q0xwQFzo8aDHN9yQQN4JJYkkiR24YRRxm4TEbZIoue3RRH6JiPySKuE3hsgvMZFfMstuSAAOSAI9KfRkhhuSyzuFJKUklQM3jCVuk4K4TWoltz2OyC8lkV8aJfzGE/mlIvJLa9kNycEBqaGngZ7WcEM6eaeXZJBkdOCGCcRt0hO3yaTkticS+WUg8sushN8kIr+MRH5ZLLshHTggE/TM0LMYbsgq72yS7JIcDtwwmbhNNuI2OZXc9hQiv+xEfrmU8JtK5JeDyC+3ZTdkBQfkhJ4Lem7DDXnknVeST5LfgRumEbfJS9ymgJLbnk7kl4/Ir6ASfjOI/PIT+RWy7IY84IAC0AtCL2S4obC8i0iKSoo5cMNM4jZFiNsUV3Lbs4j8ihL5lVDCbzaRXzEiv5KW3VAYHFAcegnoJQ03lJJ36X/fJSnrwA1ziNuUJm5TTsltzyXyK0PkV14Jv3lEfmWJ/CpYdkMpcEA56OWhVzDcUFHelSSVJVUcuGE+cZtKxG2qKrntBUR+lYn8qinht5DIrwqRX3XLbqgIDqgKvRr06oYbasi7pqSWpLYDNywiblOTuE0dJbe9mMivFpFfXSX8lhD51Sbyq2fZDTXAAXWg14Vez3BDfXk3kDSUNHLghqXEbRoQt2ms5LaXEfk1JPJrooTfciK/RkR+TS27oT44oDH0JtCbGm5oJu/mkhaSlg7csIK4TXPiNq2U3PZKIr8WRH6tlfBbReTXksivjWU3NAMHtILeGnobww1t5d1O0l7SwYEbVhO3aUfcpqOS215D5NeeyK+TEn5rifw6EPl1tuyGtuCAjtA7Qe9suKGLvLtKukm6O3DDOuI2XYnb9FBy2+uJ/LoR+fVUwm8DkV93Ir9elt3QBRzQA3pP6L0MN/SWdx9JX0k/B27YSNymD3Gb/kpuexORX18ivwFK+G0m8utH5DfQsht6gwP6Qx8AfaDhhkHyHiwZIhnqwA1biNsMJm4zTMltbyXyG0LkN1wJv21EfkOJ/EZYdsMgcMAw6MOhjzDcMFLeoySjJWMcuGE7cZtRxG3GKrntHUR+o4n8xinht5PIbwyR33jLbhgJDhgLfRz08YYbJsh7omSSZLIDN+wibjORuM0UJbe9m8hvEpHfVCX89hD5TSbym2bZDRPAAVOgT4U+zXDDdHnPkMyUzHLghr3EbWYQt5mt5Lb3EfnNJPKbo4TffiK/WUR+cy27YTo4YDb0OdDnGm6YJ+/5kgWShQ7ccIC4zXziNouU3PZBIr8FRH6LlfA7ROS3kMhviWU3zAMHLIK+GPoSww1L5b1MslyywoEbDhO3WUbcZqWS2z5C5LecyG+VEn5HifxWEPmttuyGpeCAldBXQV9tuGGNvNdK1knWO3DDMeI2a4nbbFBy28eJ/NYR+W1Uwu8Ekd96Ir9Nlt2wBhywAfpG6JsMN2yW9xbJVsk2B244SdxmC3Gb7Upu+xSR31Yivx1K+J0m8ttG5LfTshs2gwO2Q98Bfafhhl3y3i3ZI9nrwA1niNvsJm6zT8ltnyXy20Pkt18Jv3NEfnuJ/A5YdsMucMA+6PuhHzDccFDehySHJUccuOE8cZtDxG2OKrntC0R+h4n8jinhd5HI7wiR33HLbjgIDjgK/Rj044YbTsj7pOSU5LQDN1wibnOSuM0ZJbd9mcjvFJHfWSX8rhD5nSbyO2fZDSfAAWegn4V+znDDeXlfkFyUXHLghqvEbS4Qt7ms5LavEfldJPK7ooTfdSK/S0R+Vy274Tw44DL0K9CvGm64Ju/rkhuSmw7ccIO4zXXiNreU3PZNIr8bRH63lfC7ReR3k8jvjmU3XAMH3IJ+G/odww135X1Pcl/i4cANt4nb3CNu80DJbd8h8rtP5PdQCb+7RH4eRH6PLLvhLjjgAfSH0B8Zbngs7ycST4mXAzfcI27zhLiNt5Lbvk/k50nk56OEnweRnxeRn69lNzwGB3hD94Hua7jBT97+kgBJoAM3PCBu40/cJkjJbT8k8gsg8gtWwu8RkV8gkV+IZTf4gQOCoAdDDzHcECrvp5JnkucO3PCYuM1T4jYvlNz2EyK/Z0R+L5Xw8yTye07k98qyG0LBAS+gv4T+ynDDa3m/kbyVvHPgBi/iNm+I27xXctveRH5vifw+KOHnQ+T3jsjvo2U3vAYHvIf+AfpHww2f5P1Z8kXy1YEbfInbfCZu803JbfsR+X0h8vuuhJ8/kd9XIr8flt3wCRzwDfp36D8MN/yU9y/J738/d+CGAOI2v4jb/FVy24FEfr+J/MJ46uAXROT3h8gvrKddN/wEB/yF/m+3//Wwnv91Qzh5h5dEkET0tO+GYOI24T1520RSctshRH4RiPwiK+EXSuQXkcgvimU3hAMHRIIeGXoUww1R5R1NEl0Sw4EbnhK3iUbcJqaS235G5BedyC+WEn7PifxiEPnFtuyGqOCAmNBjQY9tuCGOvONK4kniO3DDC+I2cYnbJFBy2y+J/OIR+SVUwu8VkV98Ir9Elt0QBxyQAHpC6IkMNySWdxJJUkkyB254TdwmCXGb5Epu+w2RX1IivxRK+L0l8ktG5JfSshsSgwOSQ08BPaXhhlTyTi1JI0nrwA3viNukJm6TTsltvyfyS0Pkl14Jvw9EfmmJ/DJYdkMqcEA66OmhZzDckFHemSSZJVkcuOEjcZtMxG2yKrntT0R+mYn8sinh95nILwuRX3bLbsgIDsgKPRv07IYbcsg7pySXJLcDN3whbpOTuE0eJbf9lcgvF5FfXiX8vhH55Sbyy2fZDTnAAXmg54Wez3BDfnkXkBSUFHLghu/EbQoQtyms5LZ/EPkVJPIrooTfTyK/QkR+RS27IT84oDD0ItCLGm4oJu/ikhKSkg7c8Iu4TXHiNqWU3PZvIr8SRH6llfD7Q+RXksivjGU3FAMHlIJeGnoZww1l5V1OUl5SwYEb/hK3KUfcpqKS2w5Tlfe7yhP5VVLCLyyRXwUiv8qW3VAWHFAReiXolQ03VJF3VUk1SXUHbghH3KYqcZsaSm47PJFfNSK/mkr4RSDyq07kV8uyG6qAA2pArwm9luGG2vKuI6krqefADRGJ29QhblNfyW1HIvKrS+TXQAm/yER+9Yj8Glp2Q21wQH3oDaA3NNzQSN6NJU0kTR24IQpxm8bEbZopue2oRH5NiPyaK+EXjcivKZFfC8tuaAQOaAa9OfQWhhtayruVpLWkjQM3RCdu04q4TVsltx2DyK81kV87JfxiEvm1IfJrb9kNLcEBbaG3g97ecEMHeXeUdJJ0duCGWMRtOhK36aLktmMT+XUi8uuqhF8cIr/ORH7dLLuhAzigC/Su0LsZbugu7x6SnpJeDtwQl7hND+I2vZXcdjwiv55Efn2U8ItP5NeLyK+vZTd0Bwf0ht4Hel/DDf3k3V8yQDLQgRsSELfpT9xmkJLbTkjkN4DIb7ASfomI/AYS+Q2x7IZ+4IBB0AdDH2K4Yai8h0mGS0Y4cENi4jbDiNuMVHLbSYj8hhP5jVLCLymR3wgiv9GW3TAUHDAS+ijoow03jJH3WMk4yXgHbkhG3GYscZsJSm47OZHfOCK/iUr4pSDyG0/kN8myG8aAAyZAnwh9kuGGyfKeIpkqmebADSmJ20whbjNdyW2nIvKbSuQ3Qwm/1ER+04j8Zlp2w2RwwHToM6DPNNwwS96zJXMkcx24IQ1xm9nEbeYpue20RH5ziPzmK+GXjshvLpHfAstumAUOmAd9PvQFhhsWynuRZLFkiQM3pCdus4i4zVIlt52ByG8xkd8yJfwyEvktIfJbbtkNC8EBS6Evg77ccMMKea+UrJKsduCGTMRtVhK3WaPktjMT+a0i8lurhF8WIr/VRH7rLLthBThgDfS10NcZblgv7w2SjZJNDtyQlbjNBuI2m5XcdjYiv41EfluU8MtO5LeJyG+rZTesBwdshr4F+lbDDdvkvV2yQ7LTgRtyELfZTtxml5Lbzknkt4PIb7cSfrmI/HYS+e2x7IZt4IBd0HdD32O4Ya+890n2Sw44cENu4jb7iNscVHLbeYj89hP5HVLCLy+R3wEiv8OW3bAXHHAQ+iHohw03HJH3UckxyXEHbshH3OYocZsTSm47P5HfMSK/k0r4FSDyO07kd8qyG46AA05APwn9lOGG0/I+IzkrOefADQWJ25whbnNeyW0XIvI7S+R3QQm/wkR+54j8Llp2w2lwwHnoF6BfNNxwSd6XJVckVx24oQhxm8vEba4pue2iRH5XiPyuK+FXjMjvKpHfDctuuAQOuAb9OvQbhhtuyvuW5LbkjgM3FCduc4u4zV0lt12CyO82kd89JfxKEvndIfK7b9kNN8EBd6Hfg37fcIOHvB9IHkoeOXBDKeI2D4jbPFZy26WJ/B4S+T1Rwq8Mkd8jIj9Py27wAAc8hv4EuqfhBi95e0t8JL4O3FCWuI03cRs/JbddjsjPh8jPXwm/8kR+vkR+AZbd4AUO8IPuDz3AcEOgvIMkwZIQB26oQNwmiLhNqJLbrkjkF0zk91QJv0pEfiFEfs8suyEQHBAK/Sn0Z4Ybnsv7heSl5JUDN1QmbvOCuM1rJbddhcjvJZHfGyX8qhL5vSLye2vZDc/BAa+hv4H+1nDDO3m/l3yQfHTghmrEbd4Tt/mk5LarE/l9IPL7rIRfDSK/j0R+Xyy74R044BP0z9C/GG74Ku9vku+SHw7cUJO4zTfiNj+V3HYtIr/vRH6/lPCrTeT3g8jvt2U3fAUH/IT+C/pvww1/5P1XEsYrbJiwXvbdUIe4zV/iNuG8dNx2XSK/MF48fuGV8KtH5BeWyC+Cl103/AEH/Lv1//Xw0CN4/dcNEeUdSRJZEsWBG+oTt4lE3CaqkttuQOQXmcgvmhJ+DYn8ohD5RbfshojggKjQo0GPbrghhrxjSmJJYjtwQyPiNjGJ28RRctuNifxiEfnFVcKvCZFfbCK/eJbdEAMcEAd6XOjxDDfEl3cCSUJJIgduaErcJgFxm8RKbrsZkV9CIr8kSvg1J/JLROSX1LIb4oMDEkNPAj2p4YZk8k4uSSFJ6cANLYjbJCduk0rJbbck8ktB5JdaCb9WRH4pifzSWHZDMnBAKuipoacx3JBW3ukk6SUZHLihNXGbdMRtMiq57TZEfumJ/DIp4deWyC8DkV9my25ICw7ICD0T9MyGG7LIO6skmyS7Aze0I26TlbhNDiW33Z7ILxuRX04l/DoQ+WUn8stl2Q1ZwAE5oOeEnstwQ25555HkleRz4IaOxG3yELfJr+S2OxH55SXyK6CEX2civ3xEfgUtuyE3OCA/9ALQCxpuKCTvwpIikqIO3NCFuE1h4jbFlNx2VyK/IkR+xZXw60bkV5TIr4RlNxQCBxSDXhx6CcMNJeVdSlL637c5cEN34jaliNuUVXLbPYj8ShP5lVPCryeRXxkiv/KW3VASHFAWejno5Q03VJB3RUklSWUHbuhF3KYicZsqSm67N5FfJSK/qkr49SHyq0zkV82yGyqAA6pArwq9muGG6vKuIakpqeXADX2J29QgblNbyW33I/KrSeRXRwm//kR+tYj86lp2Q3VwQG3odaDXNdxQT971JQ0kDR24YQBxm/rEbRopue2BRH4NiPwaK+E3iMivIZFfE8tuqAcOaAS9MfQmhhuayruZpLmkhQM3DCZu04y4TUsltz2EyK85kV8rJfyGEvm1IPJrbdkNTcEBLaG3gt7acEMbebeVtJO0d+CGYcRt2hK36aDktocT+bUj8uuohN8IIr/2RH6dLLuhDTigA/SO0DsZbugs7y6SrpJuDtwwkrhNF+I23ZXc9igiv65Efj2U8BtN5NeNyK+nZTd0Bgd0h94Dek/DDb3k3VvSR9LXgRvGELfpTdymn5LbHkvk14fIr78SfuOI/PoS+Q2w7IZe4IB+0PtDH2C4YaC8B0kGS4Y4cMN44jaDiNsMVXLbE4j8BhP5DVPCbyKR3xAiv+GW3TAQHDAU+jDoww03jJD3SMkoyWgHbphE3GYkcZsxSm57MpHfKCK/sUr4TSHyG03kN86yG0aAA8ZAHwt9nOGG8fKeIJkomeTADVOJ20wgbjNZyW1PI/KbSOQ3RQm/6UR+k4j8plp2w3hwwGToU6BPNdwwTd7TJTMkMx24YQZxm+nEbWYpue2ZRH4ziPxmK+E3i8hvJpHfHMtumAYOmAV9NvQ5hhvmynueZL5kgQM3zCZuM4+4zUIltz2HyG8+kd8iJfzmEvktIPJbbNkNc8EBC6Evgr7YcMMSeS+VLJMsd+CGecRtlhK3WaHktucT+S0j8luphN8CIr/lRH6rLLthCThgBfSV0FcZblgt7zWStZJ1DtywkLjNGuI265Xc9iIiv7VEfhuU8FtM5LeOyG+jZTesBgesh74B+kbDDZvkvVmyRbLVgRuWELfZTNxmm5LbXkrkt4XIb7sSfsuI/LYS+e2w7IZN4IBt0LdD32G4Yae8d0l2S/Y4cMNy4ja7iNvsVXLbK4j8dhP57VPCbyWR3x4iv/2W3bATHLAX+j7o+w03HJD3QckhyWEHblhF3OYgcZsjSm57NZHfISK/o0r4rSHyO0zkd8yyGw6AA45APwr9mOGG4/I+ITkpOeXADWuJ25wgbnNayW2vI/I7SeR3Rgm/9UR+p4j8zlp2w3FwwGnoZ6CfNdxwTt7nJRckFx24YQNxm/PEbS4pue2NRH4XiPwuK+G3icjvIpHfFctuOAcOuAT9MvQrhhuuyvua5LrkhgM3bCZuc424zU0lt72FyO86kd8tJfy2EvndIPK7bdkNV8EBN6Hfgn7bcMMded+V3JPcd+CGbcRt7hK38VBy29uJ/O4R+T1Qwm8Hkd99Ir+Hlt1wBxzgAf0B9IeGGx7J+7HkicTTgRt2Erd5TNzGS8lt7yLye0Lk562E324iP08iPx/LbngEDvCC7g3dx3CDr7z9JP6SAAdu2EPcxo+4TaCS295L5OdP5BekhN8+Ir8AIr9gy27wBQcEQg+CHmy4IUTeoZKnkmcO3LCfuE0ocZvnSm77AJHfUyK/F0r4HSTye0bk99KyG0LAAc+hv4D+0nDDK3m/lryRvHXghkPEbV4Tt3mn5LYPE/m9IfJ7r4TfESK/t0R+Hyy74RU44B3099A/GG74KO9Pks+SLw7ccJS4zSfiNl+V3PYxIr/PRH7flPA7TuT3hcjvu2U3fAQHfIX+Dfp3ww0/5P1T8kvy24EbThC3+Unc5o+S2z5J5PeLyO+vEn6niPx+E/mF8bbrhh/ggD/Q/0L/9w3ohrDyDicJL4ngbd8Np4nbhPPmbRPRW8dtnyHyC0/kF0kJv7NEfhGI/CJbdkNY7/93QETokaBHNtwQRd5RJdEk0R244Rxxm6jEbWIoue3zRH7RiPxiKuF3gcgvOpFfLMtuiAIOiAE9JvRYhhtiyzuOJK4kngM3XCRuE4e4TXwlt32JyC8ukV8CJfwuE/nFI/JLaNkNscEB8aEngJ7QcEMieSeWJJEkdeCGK8RtEhO3Sabktq8S+SUh8kuuhN81Ir+kRH4pLLshETggGfTk0FMYbkgp71SS1JI0DtxwnbhNKuI2aZXc9g0iv9REfumU8LtJ5JeGyC+9ZTekBAekhZ4OenrDDRnknVGSSZLZgRtuEbfJSNwmi5Lbvk3kl4nIL6sSfneI/DIT+WWz7IYM4IAs0LNCz2a4Ibu8c0hySnI5cMNd4jY5iNvkVnLb94j8chL55VHC7z6RXy4iv7yW3ZAdHJAbeh7oeQ035JN3fkkBSUEHbvAgbpOfuE0hJbf9gMivAJFfYSX8HhL5FSTyK2LZDfnAAYWgF4ZexHBDUXkXkxSXlHDghkfEbYoRtymp5LYfE/kVJ/IrpYTfEyK/EkR+pS27oSg4oCT0UtBLG24oI++yknKS8g7c4EncpixxmwpKbtuLyK8ckV9FJfy8ifzKE/lVsuyGMuCACtArQq9kuKGyvKtIqkqqOXCDD3GbKsRtqiu5bV8iv6pEfjWU8PMj8qtG5FfTshsqgwOqQ68Bvabhhlryri2pI6nrwA3+xG1qE7epp+S2A4j86hD51VfCL5DIry6RXwPLbqgFDqgHvT70BoYbGsq7kaSxpIkDNwQRt2lE3KapktsOJvJrTOTXTAm/ECK/JkR+zS27oSE4oCn0ZtCbG25oIe+WklaS1g7cEErcpiVxmzZKbvspkV8rIr+2Svg9I/JrTeTXzrIbWoAD2kBvC72d4Yb28u4g6Sjp5MANz4nbdCBu01nJbb8g8utI5NdFCb+XRH6diPy6WnZDe3BAZ+hdoHc13NBN3t0lPSQ9HbjhFXGb7sRteim57ddEfj2I/Hor4feGyK8nkV8fy27oBg7oBb039D6GG/rKu5+kv2SAAze8JW7Tj7jNQCW3/Y7Irz+R3yAl/N4T+Q0g8hts2Q19wQEDoQ+CPthwwxB5D5UMkwx34IYPxG2GErcZoeS2PxL5DSPyG6mE3yciv+FEfqMsu2EIOGAE9JHQRxluGC3vMZKxknEO3PCZuM0Y4jbjldz2FyK/sUR+E5Tw+0rkN47Ib6JlN4wGB4yHPgH6RMMNk+Q9WTJFMtWBG74Rt5lM3Gaaktv+TuQ3hchvuhJ+P4j8phL5zbDshknggGnQp0OfYbhhprxnSWZL5jhww0/iNrOI28xVctu/iPxmE/nNU8LvN5HfHCK/+ZbdMBMcMBf6POjzDTcskPdCySLJYgdu+EPcZiFxmyVKbvsvkd8iIr+lSviFqcb7XYuJ/JZZdsMCcMAS6EuhLzPcsFzeKyQrJascuCEscZsVxG1WK7ntcER+K4n81ijhF57IbxWR31rLblgODlgNfQ30tYYb1sl7vWSDZKMDN0QgbrOeuM0mJbcdkchvA5HfZiX8IhH5bSTy22LZDevAAZugb4a+xXDDVnlvk2yX7HDghsjEbbYRt9mp5LajEPltJ/LbpYRfVCK/HUR+uy27YSs4YCf0XdB3G27YI++9kn2S/Q7cEI24zV7iNgeU3HZ0Ir99RH4HlfCLQeS3n8jvkGU37AEHHIB+EPohww2H5X1EclRyzIEbYhK3OULc5riS245F5HeUyO+EEn6xifyOEfmdtOyGw+CA49BPQD9puOGUvE9LzkjOOnBDHOI2p4nbnFNy23GJ/M4Q+Z1Xwi8ekd9ZIr8Llt1wChxwDvp56BcMN1yU9yXJZckVB26IT9zmEnGbq0puOwGR32Uiv2tK+CUk8rtC5HfdshsuggOuQr8G/brhhhvyvim5JbntwA2JiNvcJG5zR8ltJybyu0Xkd1cJvyREfreJ/O5ZdsMNcMAd6Heh3zPccF/eHpIHkocO3JCUuI0HcZtHSm47GZHfAyK/x0r4JSfye0jk98SyG+6DAx5Bfwz9ieEGT3l7SbwlPg7ckIK4jRdxG18lt52SyM+byM9PCb9URH4+RH7+lt3gCQ7whe4H3d9wQ4C8AyVBkmAHbkhN3CaQuE2IkttOQ+QXROQXqoRfWiK/YCK/p5bdEAAOCIEeCv2p4YZn8n4ueSF56cAN6YjbPCdu80rJbacn8ntB5PdaCb8MRH4vifzeWHbDM3DAK+ivob8x3PBW3u8k7yUfHLghI3Gbd8RtPiq57UxEfu+J/D4p4ZeZyO8Dkd9ny254Cw74CP0T9M+GG77I+6vkm+S7AzdkIW7zlbjNDyW3nZXI7xuR308l/LIR+X0n8vtl2Q1fwAE/oP+E/stww+9/b8lfSRgf+27ITtzmD3GbsD46bjsHkd9fIr9wSvjlJPIL48PjF97Hrht+gwP+3fr/ejjo4X3+64YI8o4oiSSJ7MANuYjbRCRuE0XJbecm8otE5BdVCb88RH6RifyiWXZDBHBAFOhRoUcz3BBd3jEkMSWxHLghL3GbGMRtYiu57XxEfjGJ/OIo4ZefyC8WkV9cy26IDg6IDT0O9LiGG+LJO74kgSShAzcUIG4Tn7hNIiW3XZDILwGRX2Il/AoR+SUk8kti2Q3xwAGJoCeGnsRwQ1J5J5Mkl6Rw4IbCxG2SEbdJqeS2ixD5JSfyS6WEX1EivxREfqktuyEpOCAl9FTQUxtuSCPvtJJ0kvQO3FCMuE1a4jYZlNx2cSK/dER+GZXwK0Hkl57IL5NlN6QBB2SAnhF6JsMNmeWdRZJVks2BG0oSt8lC3Ca7ktsuReSXlcgvhxJ+pYn8shH55bTshszggOzQc0DPabghl7xzS/JI8jpwQxniNrmJ2+RTcttlifzyEPnlV8KvHJFfXiK/ApbdkAsckA96fugFDDcUlHchSWFJEQduKE/cphBxm6JKbrsCkV9hIr9iSvhVJPIrQuRX3LIbCoIDikIvBr244YYS8i4pKSUp7cANlYjblCRuU0bJbVcm8itF5FdWCb8qRH6lifzKWXZDCXBAGehloZcz3FBe3hUkFSWVHLihKnGbCsRtKiu57WpEfhWJ/Koo4VedyK8SkV9Vy24oDw6oDL0K9KqGG6rJu7qkhqSmAzfUIG5TnbhNLSW3XZPIrwaRX20l/GoR+dUk8qtj2Q3VwAG1oNeGXsdwQ11515PUlzRw4IbaxG3qEbdpqOS26xD51Sfya6SEX10ivwZEfo0tu6EuOKAh9EbQGxtuaCLvppJmkuYO3FCPuE1T4jYtlNx2fSK/ZkR+LZXwa0Dk15zIr5VlNzQBB7SA3hJ6K8MNreXdRtJW0s6BGxoSt2lD3Ka9kttuROTXlsivgxJ+jYn82hH5dbTshtbggPbQO0DvaLihk7w7S7pIujpwQxPiNp2J23RTcttNify6EPl1V8KvGZFfVyK/Hpbd0Akc0A16d+g9DDf0lHcvSW9JHwduaE7cphdxm75KbrsFkV9vIr9+Svi1JPLrQ+TX37IbeoID+kLvB72/4YYB8h4oGSQZ7MANrYjbDCRuM0TJbbcm8htE5DdUCb82RH6DifyGWXbDAHDAEOhDoQ8z3DBc3iMkIyWjHLihLXGbEcRtRiu57XZEfiOJ/MYo4deeyG8Ukd9Yy24YDg4YDX0M9LGGG8bJe7xkgmSiAzd0IG4znrjNJCW33ZHIbwKR32Ql/DoR+U0k8pti2Q3jwAGToE+GPsVww1R5T5NMl8xw4IbOxG2mEbeZqeS2uxD5TSfym6WEX1civxlEfrMtu2EqOGAm9FnQZxtumCPvuZJ5kvkO3NCNuM1c4jYLlNx2dyK/eUR+C5Xw60HkN5/Ib5FlN8wBByyAvhD6IsMNi+W9RLJUssyBG3oSt1lC3Ga5ktvuReS3lMhvhRJ+vYn8lhH5rbTshsXggOXQV0BfabhhlbxXS9ZI1jpwQx/iNquJ26xTctt9ifzWEPmtV8KvH5HfWiK/DZbdsAocsA76eugbDDdslPcmyWbJFgdu6E/cZhNxm61KbnsAkd9mIr9tSvgNJPLbQuS33bIbNoIDtkLfBn274YYd8t4p2SXZ7cANg4jb7CRus0fJbQ8m8ttF5LdXCb8hRH67ifz2WXbDDnDAHuh7oe8z3LBf3gckByWHHLhhKHGbA8RtDiu57WFEfgeJ/I4o4TecyO8Qkd9Ry27YDw44DP0I9KOGG47J+7jkhOSkAzeMIG5znLjNKSW3PZLI7wSR32kl/EYR+Z0k8jtj2Q3HwAGnoJ+GfsZww1l5n5Ocl1xw4IbRxG3OEbe5qOS2xxD5nSfyu6SE31givwtEfpctu+EsOOAi9EvQLxtuuCLvq5JrkusO3DCOuM1V4jY3lNz2eCK/a0R+N5Xwm0Dkd53I75ZlN1wBB9yAfhP6LcMNt+V9R3JXcs+BGyYSt7lD3Oa+ktueROR3l8jPQwm/yUR+94j8Hlh2w21wwH3oHtAfGG54KO9HkseSJw7cMIW4zSPiNp5Kbnsqkd9jIj8vJfymEfk9IfLztuyGh+AAT+he0L0NN/jI21fiJ/F34IbpxG18idsEKLntGUR+fkR+gUr4zSTy8yfyC7LsBh9wQAD0QOhBhhuC5R0iCZU8deCGWcRtQojbPFNy27OJ/EKJ/J4r4TeHyO8pkd8Ly24IBgc8g/4c+gvDDS/l/UryWvLGgRvmErd5RdzmrZLbnkfk95rI750SfvOJ/N4Q+b237IaX4IC30N9Bf2+44YO8P0o+ST47cMMC4jYfidt8UXLbC4n8PhH5fVXCbxGR32civ2+W3fABHPAF+lfo3ww3fJf3D8lPyS8HblhM3OYHcZvfSm57CZHfTyK/P0r4LSXy+0Xk99eyG76DA35D/wP9r+GGML5hw4SVhJOE97XvhmXEbf59N2ubCL46bns5kV84Ir+ISvitIPILT+QXydeuG/79nf/PARGgR4Qeyfe/bogs7yiSqJJoDtywkrhNFOI20ZXc9ioiv6hEfjGU8FtN5BeNyC+mZTdEBgdEhx4DekzDDbHkHVsSRxLXgRvWELeJTdwmnpLbXkvkF4fIL74SfuuI/OIS+SWw7IZY4IB40ONDT2C4IaG8E0kSS5I4cMN64jaJiNskVXLbG4j8EhP5JVPCbyORXxIiv+SW3ZAQHJAUejLoyQ03pJB3SkkqSWoHbthE3CYlcZs0Sm57M5FfKiK/tEr4bSHyS03kl86yG1KAA9JATws9neGG9PLOIMkoyeTADVuJ22QgbpNZyW1vI/LLSOSXRQm/7UR+mYj8slp2Q3pwQGboWaBnNdyQTd7ZJTkkOR24YQdxm+zEbXIpue2dRH45iPxyK+G3i8gvJ5FfHstuyAYOyAU9N/Q8hhvyyjufJL+kgAM37CZuk4+4TUElt72HyC8/kV8hJfz2EvkVIPIrbNkNecEBBaEXgl7YcEMReReVFJMUd+CGfcRtihK3KaHktvcT+RUj8iuphN8BIr/iRH6lLLuhCDigBPSS0EsZbij975skZSXlHLjhIHGbMsRtyiu57UNEfmWJ/Coo4XeYyK8ckV9Fy24oDQ4oD70C9IqGGyrJu7KkiqSqAzccIW5TmbhNNSW3fZTIrwqRX3Ul/I4R+VUl8qth2Q2VwAHVoFeHXsNwQ01515LUltRx4IbjxG1qEbepq+S2TxD51Sbyq6eE30kivzpEfvUtu6EmOKAu9HrQ6xtuaCDvhpJGksYO3HCKuE1D4jZNlNz2aSK/RkR+TZXwO0Pk15jIr5llNzQABzSB3hR6M8MNzeXdQtJS0sqBG84St2lB3Ka1kts+R+TXksivjRJ+54n8WhH5tbXshubggNbQ20Bva7ihnbzbSzpIOjpwwwXiNu2J23RSctsXifw6EPl1VsLvEpFfRyK/Lpbd0A4c0Al6Z+hdDDd0lXc3SXdJDwduuEzcphtxm55KbvsKkV93Ir9eSvhdJfLrQeTX27IbuoIDekLvBb234YY+8u4r6Sfp78AN14jb9CVuM0DJbV8n8utH5DdQCb8bRH79ifwGWXZDH3DAAOgDoQ8y3DBY3kMkQyXDHLjhJnGbIcRthiu57VtEfkOJ/EYo4XebyG8Ykd9Iy24YDA4YDn0E9JGGG0bJe7RkjGSsAzfcIW4zmrjNOCW3fZfIbwyR33gl/O4R+Y0l8ptg2Q2jwAHjoI+HPsFww0R5T5JMlkxx4Ib7xG0mEbeZquS2PYj8JhP5TVPC7wGR3xQiv+mW3TARHDAV+jTo0w03zJD3TMksyWwHbnhI3GYmcZs5Sm77EZHfLCK/uUr4PSbym03kN8+yG2aAA+ZAnwt9nuGG+fJeIFkoWeTADU+I2ywgbrNYyW17EvktJPJbooSfF5HfIiK/pZbdMB8csBj6EuhLDTcsk/dyyQrJSgdu8CZus5y4zSolt+1D5LeCyG+1En6+RH4rifzWWHbDMnDAKuiroa8x3LBW3usk6yUbHLjBj7jNOuI2G5Xctj+R33oiv01K+AUQ+W0g8tts2Q1rwQEboW+CvtlwwxZ5b5Vsk2x34IZA4jZbidvsUHLbQUR+24j8dirhF0zkt53Ib5dlN2wBB+yAvhP6LsMNu+W9R7JXss+BG0KI2+whbrNfyW2HEvntJfI7oITfUyK/fUR+By27YTc4YD/0A9APGm44JO/DkiOSow7c8Iy4zWHiNseU3PZzIr8jRH7HlfB7QeR3lMjvhGU3HAIHHIN+HPoJww0n5X1KclpyxoEbXhK3OUXc5qyS235F5HeayO+cEn6vifzOEPmdt+yGk+CAs9DPQT9vuOGCvC9KLkkuO3DDG+I2F4nbXFFy22+J/C4R+V1Vwu8dkd9lIr9rlt1wARxwBfpV6NcMN1yX9w3JTcktB254T9zmBnGb20pu+wOR300ivztK+H0k8rtF5HfXshuugwNuQ78D/a7hhnvyvi/xkDxw4IZPxG3uE7d5qOS2PxP5eRD5PVLC7wuR3wMiv8eW3XAPHPAQ+iPojw03PJG3p8RL4u3ADV+J23gSt/FRctvfiPy8iPx8lfD7TuTnTeTnZ9kNT8ABPtB9ofsZbvCXd4AkUBLkwA0/iNsEELcJVnLbP4n8Aon8QpTw+0XkF0TkF2rZDf7ggGDoIdBDDTc8lfczyXPJCwdu+E3c5hlxm5dKbvsPkd9zIr9XSvj9JfJ7QeT32rIbnoIDXkJ/Bf214YY38n4reSd578ANYaoT/2dP3OaDktsOS+T3jsjvoxJ+4Yj83hP5fbLshjfggA/QP0L/ZLjhs7y/SL5KvjlwQ3jiNl+I23xXctsRiPy+Evn9UMIvIpHfNyK/n5bd8Bkc8B36D+g/DTf8kvfvfz+T/HXghkjEbX4Ttwnjp+O2IxP5/SHyC6uEXxQiv79EfuH87LrhFzjg363/r4eFHs7vv24IL+8IkoiSSH723RCVuE0EP942kZXcdjQiv4hEflGU8ItO5BeJyC+qZTeEBwdEhh4FelTDDdHkHV0SQxLTgRtiELeJTtwmlpLbjknkF4PIL7YSfrGI/GIS+cWx7IZo4IBY0GNDj2O4Ia6840niSxI4cENs4jbxiNskVHLbcYj84hP5JVLCLy6RXwIiv8SW3RAXHJAQeiLoiQ03JJF3UkkySXIHbohH3CYpcZsUSm47PpFfMiK/lEr4JSDyS07kl8qyG5KAA1JATwk9leGG1PJOI0krSefADQmJ26QhbpNeyW0nIvJLS+SXQQm/xER+6Yj8Mlp2Q2pwQHroGaBnNNyQSd6ZJVkkWR24IQlxm8zEbbIpue2kRH5ZiPyyK+GXjMgvK5FfDstuyAQOyAY9O/QchhtyyjuXJLckjwM3JCduk4u4TV4lt52CyC83kV8+JfxSEvnlIfLLb9kNOcEBeaHng57fcEMBeReUFJIUduCGVMRtChK3KaLktlMT+RUi8iuqhF8aIr/CRH7FLLuhADigCPSi0IsZbigu7xKSkpJSDtyQlrhNCeI2pZXcdjoiv5JEfmWU8EtP5FeKyK+sZTcUBweUhl4GelnDDeXkXV5SQVLRgRsyELcpT9ymkpLbzkjkV4HIr7ISfpmI/CoS+VWx7IZy4IBK0CtDr2K4oaq8q0mqS2o4cENm4jbViNvUVHLbWYj8qhP51VLCLyuRXw0iv9qW3VAVHFATei3otQ031JF3XUk9SX0HbshG3KYucZsGSm47O5FfPSK/hkr45SDyq0/k18iyG+qAAxpAbwi9keGGxvJuImkqaebADTmJ2zQhbtNcyW3nIvJrSuTXQgm/3ER+zYj8Wlp2Q2NwQHPoLaC3NNzQSt6tJW0kbR24IQ9xm9bEbdopue28RH5tiPzaK+GXj8ivLZFfB8tuaAUOaAe9PfQOhhs6yruTpLOkiwM35Cdu04m4TVclt12AyK8zkV83JfwKEvl1IfLrbtkNHcEBXaF3g97dcEMPefeU9JL0duCGQsRtehK36aPktgsT+fUi8uurhF8RIr/eRH79LLuhBzigD/S+0PsZbugv7wGSgZJBDtxQlLjNAOI2g5XcdjEiv4FEfkOU8CtO5DeIyG+oZTf0BwcMhj4E+lDDDcPkPVwyQjLSgRtKELcZTtxmlJLbLknkN4LIb7QSfqWI/EYS+Y2x7IZh4IBR0EdDH2O4Yay8x0nGSyY4cENp4jbjiNtMVHLbZYj8xhP5TVLCryyR3wQiv8mW3TAWHDAR+iTokw03TJH3VMk0yXQHbihH3GYqcZsZSm67PJHfNCK/mUr4VSDym07kN8uyG6aAA2ZAnwl9luGG2fKeI5krmefADRWJ28whbjNfyW1XIvKbS+S3QAm/ykR+84j8Flp2w2xwwHzoC6AvNNywSN6LJUskSx24oQpxm8XEbZYpue2qRH5LiPyWK+FXjchvKZHfCstuWAQOWAZ9OfQVhhtWynuVZLVkjQM3VCdus4q4zVolt12DyG81kd86JfxqEvmtIfJbb9kNK8EBa6Gvg77ecMMGeW+UbJJsduCGWsRtNhK32aLktmsT+W0i8tuqhF8dIr/NRH7bLLthAzhgC/St0LcZbtgu7x2SnZJdDtxQl7jNDuI2u5Xcdj0iv51EfnuU8KtP5LeLyG+vZTdsBwfshr4H+l7DDfvkvV9yQHLQgRsaELfZT9zmkJLbbkjkd4DI77ASfo2I/A4S+R2x7IZ94IBD0A9DP2K44ai8j0mOS044cENj4jbHiNucVHLbTYj8jhP5nVLCrymR3wkiv9OW3XAUHHAS+inopw03nJH3Wck5yXkHbmhG3OYscZsLSm67OZHfOSK/i0r4tSDyO0/kd8myG86AAy5Avwj9kuGGy/K+IrkquebADS2J21whbnNdyW23IvK7SuR3Qwm/1kR+14j8blp2w2VwwHXoN6DfNNxwS963JXckdx24oQ1xm9vEbe4pue22RH53iPzuK+HXjsjvLpGfh2U33AIH3IN+H7qH4YYH8n4oeSR57MAN7YnbPCRu80TJbXcg8ntE5OephF9HIr/HRH5elt3wABzwBLondC/DDd7y9pH4SvwcuKETcRsf4jb+Sm67M5GfL5FfgBJ+XYj8/Ij8Ai27wRsc4A89AHqg4YYgeQdLQiShDtzQlbhNMHGbp0puuxuRXwiR3zMl/LoT+YUS+T237IYgcMBT6M+gPzfc8ELeLyWvJK8duKEHcZuXxG3eKLntnkR+r4j83irh14vI7zWR3zvLbngBDngD/S30d4Yb3sv7g+Sj5JMDN/QmbvOBuM1nJbfdh8jvI5HfFyX8+hL5fSLy+2rZDe/BAZ+hf4H+1XDDN3l/l/yQ/HTghn7Ebb4Tt/ml5Lb7E/n9IPL7rYTfACK/n0R+fyy74Rs44Bf039D/GG74K+8w/mHDhJWE87fvhoHEbf59N2ub8P46bnsQkV9YIr8ISvgNJvILR+QX0d+uG/6CA/7d+v96BOgR/f/rhkjyjiyJIonqwA1DiNtEJm4TTcltDyXyi0LkF10Jv2FEflGJ/GJYdkMkcEA06NGhxzDcEFPesSSxJXEcuGE4cZtYxG3iKrntEUR+sYn84inhN5LILw6RX3zLbogJDogLPR70+IYbEsg7oSSRJLEDN4wibpOQuE0SJbc9msgvEZFfUiX8xhD5JSbyS2bZDQnAAUmgJ4WezHBDcnmnkKSUpHLghrHEbVIQt0mt5LbHEfmlJPJLo4TfeCK/VER+aS27ITk4IDX0NNDTGm5IJ+/0kgySjA7cMIG4TXriNpmU3PZEIr8MRH6ZlfCbROSXkcgvi2U3pAMHZIKeGXoWww1Z5Z1Nkl2Sw4EbJhO3yUbcJqeS255C5JedyC+XEn5TifxyEPnltuyGrOCAnNBzQc9tuCGPvPNK8knyO3DDNOI2eYnbFFBy29OJ/PIR+RVUwm8GkV9+Ir9Clt2QBxxQAHpB6IUMNxSWdxFJUUkxB26YSdymCHGb4kpuexaRX1EivxJK+M0m8itG5FfSshsKgwOKQy8BvaThhlLyLv3vuyRlHbhhDnGb0sRtyim57blEfmWI/Mor4TePyK8skV8Fy24oBQ4oB7089AqGGyrKu5KksqSKAzfMJ25TibhNVSW3vYDIrzKRXzUl/BYS+VUh8qtu2Q0VwQFVoVeDXt1wQw1515TUktR24IZFxG1qErepo+S2FxP51SLyq6uE3xIiv9pEfvUsu6EGOKAO9LrQ6xluqC/vBpKGkkYO3LCUuE0D4jaNldz2MiK/hkR+TZTwW07k14jIr6llN9QHBzSG3gR6U8MNzeTdXNJC0tKBG1YQt2lO3KaVktteSeTXgsivtRJ+q4j8WhL5tbHshmbggFbQW0NvY7ihrbzbSdpLOjhww2riNu2I23RUcttriPzaE/l1UsJvLZFfByK/zpbd0BYc0BF6J+idDTd0kXdXSTdJdwduWEfcpitxmx5Kbns9kV83Ir+eSvhtIPLrTuTXy7IbuoADekDvCb2X4Ybe8u4j6Svp58ANG4nb9CFu01/JbW8i8utL5DdACb/NRH79iPwGWnZDb3BAf+gDoA803DBI3oMlQyRDHbhhC3GbwcRthim57a1EfkOI/IYr4beNyG8okd8Iy24YBA4YBn049BGGG0bKe5RktGSMAzdsJ24zirjNWCW3vYPIbzSR3zgl/HYS+Y0h8htv2Q0jwQFjoY+DPt5wwwR5T5RMkkx24IZdxG0mEreZouS2dxP5TSLym6qE3x4iv8lEftMsu2ECOGAK9KnQpxlumC7vGZKZklkO3LCXuM0M4jazldz2PiK/mUR+c5Tw20/kN4vIb65lN0wHB8yGPgf6XMMN8+Q9X7JAstCBGw4Qt5lP3GaRkts+SOS3gMhvsRJ+h4j8FhL5LbHshnnggEXQF0NfYrhhqbyXSZZLVjhww2HiNsuI26xUcttHiPyWE/mtUsLvKJHfCiK/1ZbdsBQcsBL6KuirDTeskfdayTrJegduOEbcZi1xmw1Kbvs4kd86Ir+NSvidIPJbT+S3ybIb1oADNkDfCH2T4YbN8t4i2SrZ5sANJ4nbbCFus13JbZ8i8ttK5LdDCb/TRH7biPx2WnbDZnDAdug7oO803LBL3rsleyR7HbjhDHGb3cRt9im57bNEfnuI/PYr4XeOyG8vkd8By27YBQ7YB30/9AOGGw7K+5DksOSIAzecJ25ziLjNUSW3fYHI7zCR3zEl/C4S+R0h8jtu2Q0HwQFHoR+Dftxwwwl5n5Sckpx24IZLxG1OErc5o+S2LxP5nSLyO6uE3xUiv9NEfucsu+EEOOAM9LPQzxluOC/vC5KLkksO3HCVuM0F4jaXldz2NSK/i0R+V5Twu07kd4nI76plN5wHB1yGfgX6VcMN1+R9XXJDctOBG24Qt7lO3OaWktu+SeR3g8jvthJ+t4j8bhL53bHshmvggFvQb0O/Y7jhrrzvSe5LPBy44TZxm3vEbR4oue07RH73ifweKuF3l8jPg8jvkWU33AUHPID+EPojww2P5f1E4inxcuCGe8RtnhC38VZy2/eJ/DyJ/HyU8PMg8vMi8vO17IbH4ABv6D7QfQ03+MnbXxIgCXTghgfEbfyJ2wQpue2HRH4BRH7BSvg9IvILJPILsewGP3BAEPRg6CGGG0Ll/VTyTPLcgRseE7d5StzmhZLbfkLk94zI76USfp5Efs+J/F5ZdkMoOOAF9JfQXxlueC3vN5K3kncO3OBF3OYNcZv3Sm7bm8jvLZHfByX8fIj83hH5fbTshtfggPfQP0D/aLjhk7w/S75Ivjpwgy9xm8/Ebb4puW0/Ir8vRH7flfDzJ/L7SuT3w7IbPoEDvkH/Dv2H4Yaf8v4l+f3v5w7cEEDc5hdxm79KbjuQyO83kV+YAB38goj8/hD5hQ2w64af4IC/0P/t9r8eNuC/bggn7/CSCJKIAfbdEEzcJnwAb5tISm47hMgvApFfZCX8Qon8IhL5RbHshnDggEjQI0OPYrghqryjSaJLYjhww1PiNtGI28RUctvPiPyiE/nFUsLvOZFfDCK/2JbdEBUcEBN6LOixDTfEkXdcSTxJfAdueEHcJi5xmwRKbvslkV88Ir+ESvi9IvKLT+SXyLIb4oADEkBPCD2R4YbE8k4iSSpJ5sANr4nbJCFuk1zJbb8h8ktK5JdCCb+3RH7JiPxSWnZDYnBAcugpoKc03JBK3qklaSRpHbjhHXGb1MRt0im57fdEfmmI/NIr4feByC8tkV8Gy25IBQ5IBz099AyGGzLKO5MksySLAzd8JG6TibhNViW3/YnILzORXzYl/D4T+WUh8stu2Q0ZwQFZoWeDnt1wQw5555TkkuR24IYvxG1yErfJo+S2vxL55SLyy6uE3zciv9xEfvksuyEHOCAP9LzQ8xluyC/vApKCkkIO3PCduE0B4jaFldz2DyK/gkR+RZTw+0nkV4jIr6hlN+QHBxSGXgR6UcMNxeRdXFJCUtKBG34RtylO3KaUktv+TeRXgsivtBJ+f4j8ShL5lbHshmLggFLQS0MvY7ihrLzLScpLKjhww1/iNuWI21RUctthavB+V3kiv0pK+IUl8qtA5FfZshvKggMqQq8EvbLhhiryriqpJqnuwA3hiNtUJW5TQ8lthyfyq0bkV1MJvwhEftWJ/GpZdkMVcEAN6DWh1zLcUFvedSR1JfUcuCEicZs6xG3qK7ntSER+dYn8GijhF5nIrx6RX0PLbqgNDqgPvQH0hoYbGsm7saSJpKkDN0QhbtOYuE0zJbcdlcivCZFfcyX8ohH5NSXya2HZDY3AAc2gN4fewnBDS3m3krSWtHHghujEbVoRt2mr5LZjEPm1JvJrp4RfTCK/NkR+7S27oSU4oC30dtDbG27oIO+Okk6Szg7cEIu4TUfiNl2U3HZsIr9ORH5dlfCLQ+TXmcivm2U3dAAHdIHeFXo3ww3d5d1D0lPSy4Eb4hK36UHcpreS245H5NeTyK+PEn7xifx6Efn1teyG7uCA3tD7QO9ruKGfvPtLBkgGOnBDAuI2/YnbDFJy2wmJ/AYQ+Q1Wwi8Rkd9AIr8hlt3QDxwwCPpg6EMMNwyV9zDJcMkIB25ITNxmGHGbkUpuOwmR33Aiv1FK+CUl8htB5DfashuGggNGQh8FfbThhjHyHisZJxnvwA3JiNuMJW4zQcltJyfyG0fkN1EJvxREfuOJ/CZZdsMYcMAE6BOhTzLcMFneUyRTJdMcuCElcZspxG2mK7ntVER+U4n8Zijhl5rIbxqR30zLbpgMDpgOfQb0mYYbZsl7tmSOZK4DN6QhbjObuM08JbedlshvDpHffCX80hH5zSXyW2DZDbPAAfOgz4e+wHDDQnkvkiyWLHHghvTEbRYRt1mq5LYzEPktJvJbpoRfRiK/JUR+yy27YSE4YCn0ZdCXG25YIe+VklWS1Q7ckIm4zUriNmuU3HZmIr9VRH5rlfDLQuS3mshvnWU3rAAHrIG+Fvo6ww3r5b1BslGyyYEbshK32UDcZrOS285G5LeRyG+LEn7Zifw2EfltteyG9eCAzdC3QN9quGGbvLdLdkh2OnBDDuI224nb7FJy2zmJ/HYQ+e1Wwi8Xkd9OIr89lt2wDRywC/pu6HsMN+yV9z7JfskBB27ITdxmH3Gbg0puOw+R334iv0NK+OUl8jtA5HfYshv2ggMOQj8E/bDhhiPyPio5JjnuwA35iNscJW5zQslt5yfyO0bkd1IJvwJEfseJ/E5ZdsMRcMAJ6CehnzLccFreZyRnJeccuKEgcZszxG3OK7ntQkR+Z4n8LijhV5jI7xyR30XLbjgNDjgP/QL0i4YbLsn7suSK5KoDNxQhbnOZuM01JbddlMjvCpHfdSX8ihH5XSXyu2HZDZfAAdegX4d+w3DDTXnfktyW3HHghuLEbW4Rt7mr5LZLEPndJvK7p4RfSSK/O0R+9y274SY44C70e9DvG27wkPcDyUPJIwduKEXc5gFxm8dKbrs0kd9DIr8nSviVIfJ7ROTnadkNHuCAx9CfQPc03OAlb2+Jj8TXgRvKErfxJm7jp+S2yxH5+RD5+SvhV57Iz5fIL8CyG7zAAX7Q/aEHGG4IlHeQJFgS4sANFYjbBBG3CVVy2xWJ/IKJ/J4q4VeJyC+EyO+ZZTcEggNCoT+F/sxww3N5v5C8lLxy4IbKxG1eELd5reS2qxD5vSTye6OEX1Uiv1dEfm8tu+E5OOA19DfQ3xpueCfv95IPko8O3FCNuM174jaflNx2dSK/D0R+n5Xwq0Hk95HI74tlN7wDB3yC/hn6F8MNX+X9TfJd8sOBG2oSt/lG3OanktuuReT3ncjvlxJ+tYn8fhD5/bbshq/ggJ/Qf0H/bbjhj7z/SsIEhg0TNtC+G+oQt/lL3CZcoI7brkvkFyaQxy+8En71iPzCEvlFCLTrhj/ggH+3/r8eHnqEwP+6IaK8I0kiS6I4cEN94jaRiNtEVXLbDYj8IhP5RVPCryGRXxQiv+iW3RARHBAVejTo0Q03xJB3TEksSWwHbmhE3CYmcZs4Sm67MZFfLCK/uEr4NSHyi03kF8+yG2KAA+JAjws9nuGG+PJOIEkoSeTADU2J2yQgbpNYyW03I/JLSOSXRAm/5kR+iYj8klp2Q3xwQGLoSaAnNdyQTN7JJSkkKR24oQVxm+TEbVIpue2WRH4piPxSK+HXisgvJZFfGstuSAYOSAU9NfQ0hhvSyjudJL0kgwM3tCZuk464TUYlt92GyC89kV8mJfzaEvllIPLLbNkNacEBGaFngp7ZcEMWeWeVZJNkd+CGdsRtshK3yaHkttsT+WUj8suphF8HIr/sRH65LLshCzggB/Sc0HMZbsgt7zySvJJ8DtzQkbhNHuI2+ZXcdiciv7xEfgWU8OtM5JePyK+gZTfkBgfkh14AekHDDYXkXVhSRFLUgRu6ELcpTNymmJLb7krkV4TIr7gSft2I/IoS+ZWw7IZC4IBi0ItDL2G4oaS8S0lK//s2B27oTtymFHGbskpuuweRX2kiv3JK+PUk8itD5FfeshtKggPKQi8HvbzhhgryriipJKnswA29iNtUJG5TRclt9ybyq0TkV1UJvz5EfpWJ/KpZdkMFcEAV6FWhVzPcUF3eNSQ1JbUcuKEvcZsaxG1qK7ntfkR+NYn86ijh15/IrxaRX13LbqgODqgNvQ70uoYb6sm7vqSBpKEDNwwgblOfuE0jJbc9kMivAZFfYyX8BhH5NSTya2LZDfXAAY2gN4bexHBDU3k3kzSXtHDghsHEbZoRt2mp5LaHEPk1J/JrpYTfUCK/FkR+rS27oSk4oCX0VtBbG25oI++2knaS9g7cMIy4TVviNh2U3PZwIr92RH4dlfAbQeTXnsivk2U3tAEHdIDeEXonww2d5d1F0lXSzYEbRhK36ULcpruS2x5F5NeVyK+HEn6jify6Efn1tOyGzuCA7tB7QO9puKGXvHtL+kj6OnDDGOI2vYnb9FNy22OJ/PoQ+fVXwm8ckV9fIr8Blt3QCxzQD3p/6AMMNwyU9yDJYMkQB24YT9xmEHGboUpuewKR32Aiv2FK+E0k8htC5DfcshsGggOGQh8GfbjhhhHyHikZJRntwA2TiNuMJG4zRsltTybyG0XkN1YJvylEfqOJ/MZZdsMIcMAY6GOhjzPcMF7eEyQTJZMcuGEqcZsJxG0mK7ntaUR+E4n8pijhN53IbxKR31TLbhgPDpgMfQr0qYYbpsl7umSGZKYDN8wgbjOduM0sJbc9k8hvBpHfbCX8ZhH5zSTym2PZDdPAAbOgz4Y+x3DDXHnPk8yXLHDghtnEbeYRt1mo5LbnEPnNJ/JbpITfXCK/BUR+iy27YS44YCH0RdAXG25YIu+lkmWS5Q7cMI+4zVLiNiuU3PZ8Ir9lRH4rlfBbQOS3nMhvlWU3LAEHrIC+Evoqww2r5b1GslayzoEbFhK3WUPcZr2S215E5LeWyG+DEn6LifzWEflttOyG1eCA9dA3QN9ouGGTvDdLtki2OnDDEuI2m4nbbFNy20uJ/LYQ+W1Xwm8Zkd9WIr8dlt2wCRywDfp26DsMN+yU9y7JbskeB25YTtxmF3GbvUpuewWR324iv31K+K0k8ttD5Lffsht2ggP2Qt8Hfb/hhgPyPig5JDnswA2riNscJG5zRMltrybyO0Tkd1QJvzVEfoeJ/I5ZdsMBcMAR6EehHzPccFzeJyQnJaccuGEtcZsTxG1OK7ntdUR+J4n8zijht57I7xSR31nLbjgODjgN/Qz0s4Ybzsn7vOSC5KIDN2wgbnOeuM0lJbe9kcjvApHfZSX8NhH5XSTyu2LZDefAAZegX4Z+xXDDVXlfk1yX3HDghs3Eba4Rt7mp5La3EPldJ/K7pYTfViK/G0R+ty274So44Cb0W9BvG264I++7knuS+w7csI24zV3iNh5Kbns7kd89Ir8HSvjtIPK7T+T30LIb7oADPKA/gP7QcMMjeT+WPJF4OnDDTuI2j4nbeCm57V1Efk+I/LyV8NtN5OdJ5Odj2Q2PwAFe0L2h+xhu8JW3n8RfEuDADXuI2/gRtwlUctt7ifz8ifyClPDbR+QXQOQXbNkNvuCAQOhB0IMNN4TIO1TyVPLMgRv2E7cJJW7zXMltHyDye0rk90IJv4NEfs+I/F5adkMIOOA59BfQXxpueCXv15I3krcO3HCIuM1r4jbvlNz2YSK/N0R+75XwO0Lk95bI74NlN7wCB7yD/h76B8MNH+X9SfJZ8sWBG44St/lE3Oarkts+RuT3mcjvmxJ+x4n8vhD5fbfsho/ggK/Qv0H/brjhh7x/Sn5JfjtwwwniNj+J2/xRctsnifx+Efn9VcLvFJHfbyK/MEF23fADHPAH+l/o/74B3RBW3uEk4SURguy74TRxm3BBvG0iBum47TNEfuGJ/CIp4XeWyC8CkV9ky24IG/T/DogIPRL0yIYbosg7qiSaJLoDN5wjbhOVuE0MJbd9nsgvGpFfTCX8LhD5RSfyi2XZDVHAATGgx4Qey3BDbHnHkcSVxHPghovEbeIQt4mv5LYvEfnFJfJLoITfZSK/eER+CS27ITY4ID70BNATGm5IJO/EkiSSpA7ccIW4TWLiNsmU3PZVIr8kRH7JlfC7RuSXlMgvhWU3JAIHJIOeHHoKww0p5Z1KklqSxoEbrhO3SUXcJq2S275B5JeayC+dEn43ifzSEPmlt+yGlOCAtNDTQU9vuCGDvDNKMkkyO3DDLeI2GYnbZFFy27eJ/DIR+WVVwu8OkV9mIr9slt2QARyQBXpW6NkMN2SXdw5JTkkuB264S9wmB3Gb3Epu+x6RX04ivzxK+N0n8stF5JfXshuygwNyQ88DPa/hhnzyzi8pICnowA0exG3yE7cppOS2HxD5FSDyK6yE30Miv4JEfkUsuyEfOKAQ9MLQixhuKCrvYpLikhIO3PCIuE0x4jYlldz2YyK/4kR+pZTwe0LkV4LIr7RlNxQFB5SEXgp6acMNZeRdVlJOUt6BGzyJ25QlblNByW17EfmVI/KrqISfN5FfeSK/SpbdUAYcUAF6ReiVDDdUlncVSVVJNQdu8CFuU4W4TXUlt+1L5FeVyK+GEn5+RH7ViPxqWnZDZXBAdeg1oNc03FBL3rUldSR1HbjBn7hNbeI29ZTcdgCRXx0iv/pK+AUS+dUl8mtg2Q21wAH1oNeH3sBwQ0N5N5I0ljRx4IYg4jaNiNs0VXLbwUR+jYn8minhF0Lk14TIr7llNzQEBzSF3gx6c8MNLeTdUtJK0tqBG0KJ27QkbtNGyW0/JfJrReTXVgm/Z0R+rYn82ll2QwtwQBvobaG3M9zQXt4dJB0lnRy44Tlxmw7EbTorue0XRH4dify6KOH3ksivE5FfV8tuaA8O6Ay9C/Suhhu6ybu7pIekpwM3vCJu0524TS8lt/2ayK8HkV9vJfzeEPn1JPLrY9kN3cABvaD3ht7HcENfefeT9JcMcOCGt8Rt+hG3Gajktt8R+fUn8hukhN97Ir8BRH6DLbuhLzhgIPRB0Acbbhgi76GSYZLhDtzwgbjNUOI2I5Tc9kciv2FEfiOV8PtE5DecyG+UZTcMAQeMgD4S+ijDDaPlPUYyVjLOgRs+E7cZQ9xmvJLb/kLkN5bIb4ISfl+J/MYR+U207IbR4IDx0CdAn2i4YZK8J0umSKY6cMM34jaTidtMU3Lb34n8phD5TVfC7weR31QivxmW3TAJHDAN+nToMww3zJT3LMlsyRwHbvhJ3GYWcZu5Sm77F5HfbCK/eUr4/Sbym0PkN9+yG2aCA+ZCnwd9vuGGBfJeKFkkWezADX+I2ywkbrNEyW3/JfJbROS3VAm/MDV5v2sxkd8yy25YAA5YAn0p9GWGG5bLe4VkpWSVAzeEJW6zgrjNaiW3HY7IbyWR3xol/MIT+a0i8ltr2Q3LwQGroa+BvtZwwzp5r5dskGx04IYIxG3WE7fZpOS2IxL5bSDy26yEXyQiv41Eflssu2EdOGAT9M3Qtxhu2CrvbZLtkh0O3BCZuM024jY7ldx2FCK/7UR+u5Twi0rkt4PIb7dlN2wFB+yEvgv6bsMNe+S9V7JPst+BG6IRt9lL3OaAktuOTuS3j8jvoBJ+MYj89hP5HbLshj3ggAPQD0I/ZLjhsLyPSI5KjjlwQ0ziNkeI2xxXctuxiPyOEvmdUMIvNpHfMSK/k5bdcBgccBz6CegnDTeckvdpyRnJWQduiEPc5jRxm3NKbjsukd8ZIr/zSvjFI/I7S+R3wbIbToEDzkE/D/2C4YaL8r4kuSy54sAN8YnbXCJuc1XJbScg8rtM5HdNCb+ERH5XiPyuW3bDRXDAVejXoF833HBD3jcltyS3HbghEXGbm8Rt7ii57cREfreI/O4q4ZeEyO82kd89y264AQ64A/0u9HuGG+7L20PyQPLQgRuSErfxIG7zSMltJyPye0Dk91gJv+REfg+J/J5YdsN9cMAj6I+hPzHc4ClvL4m3xMeBG1IQt/EibuOr5LZTEvl5E/n5KeGXisjPh8jP37IbPMEBvtD9oPsbbgiQd6AkSBLswA2pidsEErcJUXLbaYj8goj8QpXwS0vkF0zk99SyGwLAASHQQ6E/NdzwTN7PJS8kLx24IR1xm+fEbV4pue30RH4viPxeK+GXgcjvJZHfG8tueAYOeAX9NfQ3hhveyvud5L3kgwM3ZCRu8464zUclt52JyO89kd8nJfwyE/l9IPL7bNkNb8EBH6F/gv7ZcMMXeX+VfJN8d+CGLMRtvhK3+aHktrMS+X0j8vuphF82Ir/vRH6/LLvhCzjgB/Sf0H8Zbvj97y35KwkTbN8N2Ynb/CFuEzZYx23nIPL7S+QXTgm/nER+YYJ5/MIH23XDb3DAv1v/Xw8HPXzwf90QQd4RJZEkkR24IRdxm4jEbaIoue3cRH6RiPyiKuGXh8gvMpFfNMtuiAAOiAI9KvRohhuiyzuGJKYklgM35CVuE4O4TWwlt52PyC8mkV8cJfzyE/nFIvKLa9kN0cEBsaHHgR7XcEM8eceXJJAkdOCGAsRt4hO3SaTktgsS+SUg8kushF8hIr+ERH5JLLshHjggEfTE0JMYbkgq72SS5JIUDtxQmLhNMuI2KZXcdhEiv+REfqmU8CtK5JeCyC+1ZTckBQekhJ4KemrDDWnknVaSTpLegRuKEbdJS9wmg5LbLk7kl47IL6MSfiWI/NIT+WWy7IY04IAM0DNCz2S4IbO8s0iySrI5cENJ4jZZiNtkV3LbpYj8shL55VDCrzSRXzYiv5yW3ZAZHJAdeg7oOQ035JJ3bkkeSV4HbihD3CY3cZt8Sm67LJFfHiK//Er4lSPyy0vkV8CyG3KBA/JBzw+9gOGGgvIuJCksKeLADeWJ2xQiblNUyW1XIPIrTORXTAm/ikR+RYj8ilt2Q0FwQFHoxaAXN9xQQt4lJaUkpR24oRJxm5LEbcooue3KRH6liPzKKuFXhcivNJFfOctuKAEOKAO9LPRyhhvKy7uCpKKkkgM3VCVuU4G4TWUlt12NyK8ikV8VJfyqE/lVIvKratkN5cEBlaFXgV7VcEM1eVeX1JDUdOCGGsRtqhO3qaXktmsS+dUg8quthF8tIr+aRH51LLuhGjigFvTa0OsYbqgr73qS+pIGDtxQm7hNPeI2DZXcdh0iv/pEfo2U8KtL5NeAyK+xZTfUBQc0hN4IemPDDU3k3VTSTNLcgRvqEbdpStymhZLbrk/k14zIr6USfg2I/JoT+bWy7IYm4IAW0FtCb2W4obW820jaSto5cEND4jZtiNu0V3LbjYj82hL5dVDCrzGRXzsiv46W3dAaHNAeegfoHQ03dJJ3Z0kXSVcHbmhC3KYzcZtuSm67KZFfFyK/7kr4NSPy60rk18OyGzqBA7pB7w69h+GGnvLuJekt6ePADc2J2/QibtNXyW23IPLrTeTXTwm/lkR+fYj8+lt2Q09wQF/o/aD3N9wwQN4DJYMkgx24oRVxm4HEbYYoue3WRH6DiPyGKuHXhshvMJHfMMtuGAAOGAJ9KPRhhhuGy3uEZKRklAM3tCVuM4K4zWglt92OyG8kkd8YJfzaE/mNIvIba9kNw8EBo6GPgT7WcMM4eY+XTJBMdOCGDsRtxhO3maTktjsS+U0g8pushF8nIr+JRH5TLLthHDhgEvTJ0KcYbpgq72mS6ZIZDtzQmbjNNOI2M5Xcdhciv+lEfrOU8OtK5DeDyG+2ZTdMBQfMhD4L+mzDDXPkPVcyTzLfgRu6EbeZS9xmgZLb7k7kN4/Ib6ESfj2I/OYT+S2y7IY54IAF0BdCX2S4YbG8l0iWSpY5cENP4jZLiNssV3LbvYj8lhL5rVDCrzeR3zIiv5WW3bAYHLAc+groKw03rJL3askayVoHbuhD3GY1cZt1Sm67L5HfGiK/9Ur49SPyW0vkt8GyG1aBA9ZBXw99g+GGjfLeJNks2eLADf2J22wibrNVyW0PIPLbTOS3TQm/gUR+W4j8tlt2w0ZwwFbo26BvN9ywQ947Jbskux24YRBxm53EbfYoue3BRH67iPz2KuE3hMhvN5HfPstu2AEO2AN9L/R9hhv2y/uA5KDkkAM3DCVuc4C4zWEltz2MyO8gkd8RJfyGE/kdIvI7atkN+8EBh6EfgX7UcMMxeR+XnJCcdOCGEcRtjhO3OaXktkcS+Z0g8juthN8oIr+TRH5nLLvhGDjgFPTT0M8Ybjgr73OS85ILDtwwmrjNOeI2F5Xc9hgiv/NEfpeU8BtL5HeByO+yZTecBQdchH4J+mXDDVfkfVVyTXLdgRvGEbe5StzmhpLbHk/kd43I76YSfhOI/K4T+d2y7IYr4IAb0G9Cv2W44ba870juSu45cMNE4jZ3iNvcV3Lbk4j87hL5eSjhN5nI7x6R3wPLbrgNDrgP3QP6A8MND+X9SPJY8sSBG6YQt3lE3MZTyW1PJfJ7TOTnpYTfNCK/J0R+3pbd8BAc4AndC7q34QYfeftK/CT+DtwwnbiNL3GbACW3PYPIz4/IL1AJv5lEfv5EfkGW3eADDgiAHgg9yHBDsLxDJKGSpw7cMIu4TQhxm2dKbns2kV8okd9zJfzmEPk9JfJ7YdkNweCAZ9CfQ39huOGlvF9JXkveOHDDXOI2r4jbvFVy2/OI/F4T+b1Twm8+kd8bIr/3lt3wEhzwFvo76O8NN3yQ90fJJ8lnB25YQNzmI3GbL0pueyGR3yciv69K+C0i8vtM5PfNshs+gAO+QP8K/Zvhhu/y/iH5KfnlwA2Lidv8IG7zW8ltLyHy+0nk90cJv6VEfr+I/P5adsN3cMBv6H+g/zXcECYkbJiwknCS8CH23bCMuM2/72ZtEyFEx20vJ/ILR+QXUQm/FUR+4Yn8IoXYdcO/v/P/OSAC9IjQI4X81w2R5R1FElUSzYEbVhK3iULcJrqS215F5BeVyC+GEn6rifyiEfnFtOyGyOCA6NBjQI9puCGWvGNL4kjiOnDDGuI2sYnbxFNy22uJ/OIQ+cVXwm8dkV9cIr8Elt0QCxwQD3p86AkMNySUdyJJYkkSB25YT9wmEXGbpEpuewORX2Iiv2RK+G0k8ktC5JfcshsSggOSQk8GPbnhhhTyTilJJUntwA2biNukJG6TRsltbybyS0Xkl1YJvy1EfqmJ/NJZdkMKcEAa6GmhpzPckF7eGSQZJZkcuGErcZsMxG0yK7ntbUR+GYn8sijht53ILxORX1bLbkgPDsgMPQv0rIYbssk7uySHJKcDN+wgbpOduE0uJbe9k8gvB5FfbiX8dhH55STyy2PZDdnAAbmg54aex3BDXnnnk+SXFHDght3EbfIRtymo5Lb3EPnlJ/IrpITfXiK/AkR+hS27IS84oCD0QtALG24oIu+ikmKS4g7csI+4TVHiNiWU3PZ+Ir9iRH4llfA7QORXnMivlGU3FAEHlIBeEnopww2l/32TpKyknAM3HCRuU4a4TXklt32IyK8skV8FJfwOE/mVI/KraNkNpcEB5aFXgF7RcEMleVeWVJFUdeCGI8RtKhO3qabkto8S+VUh8quuhN8xIr+qRH41LLuhEjigGvTq0GsYbqgp71qS2pI6DtxwnLhNLeI2dZXc9gkiv9pEfvWU8DtJ5FeHyK++ZTfUBAfUhV4Pen3DDQ3k3VDSSNLYgRtOEbdpSNymiZLbPk3k14jIr6kSfmeI/BoT+TWz7IYG4IAm0JtCb2a4obm8W0haSlo5cMNZ4jYtiNu0VnLb54j8WhL5tVHC7zyRXysiv7aW3dAcHNAaehvobQ03tJN3e0kHSUcHbrhA3KY9cZtOSm77IpFfByK/zkr4XSLy60jk18WyG9qBAzpB7wy9i+GGrvLuJuku6eHADZeJ23QjbtNTyW1fIfLrTuTXSwm/q0R+PYj8elt2Q1dwQE/ovaD3NtzQR959Jf0k/R244Rpxm77EbQYoue3rRH79iPwGKuF3g8ivP5HfIMtu6AMOGAB9IPRBhhsGy3uIZKhkmAM33CRuM4S4zXAlt32LyG8okd8IJfxuE/kNI/IbadkNg8EBw6GPgD7ScMMoeY+WjJGMdeCGO8RtRhO3Gafktu8S+Y0h8huvhN89Ir+xRH4TLLthFDhgHPTx0CcYbpgo70mSyZIpDtxwn7jNJOI2U5XctgeR32Qiv2lK+D0g8ptC5DfdshsmggOmQp8GfbrhhhnynimZJZntwA0PidvMJG4zR8ltPyLym0XkN1cJv8dEfrOJ/OZZdsMMcMAc6HOhzzPcMF/eCyQLJYscuOEJcZsFxG0WK7ltTyK/hUR+S5Tw8yLyW0Tkt9SyG+aDAxZDXwJ9qeGGZfJeLlkhWenADd7EbZYTt1ml5LZ9iPxWEPmtVsLPl8hvJZHfGstuWAYOWAV9NfQ1hhvWynudZL1kgwM3+BG3WUfcZqOS2/Yn8ltP5LdJCb8AIr8NRH6bLbthLThgI/RN0Dcbbtgi762SbZLtDtwQSNxmK3GbHUpuO4jIbxuR304l/IKJ/LYT+e2y7IYt4IAd0HdC32W4Ybe890j2SvY5cEMIcZs9xG32K7ntUCK/vUR+B5Twe0rkt4/I76BlN+wGB+yHfgD6QcMNh+R9WHJEctSBG54RtzlM3OaYktt+TuR3hMjvuBJ+L4j8jhL5nbDshkPggGPQj0M/YbjhpLxPSU5Lzjhww0viNqeI25xVctuviPxOE/mdU8LvNZHfGSK/85bdcBIccBb6OejnDTdckPdFySXJZQdueEPc5iJxmytKbvstkd8lIr+rSvi9I/K7TOR3zbIbLoADrkC/Cv2a4Ybr8r4huSm55cAN74nb3CBuc1vJbX8g8rtJ5HdHCb+PRH63iPzuWnbDdXDAbeh3oN813HBP3vclHpIHDtzwibjNfeI2D5Xc9mciPw8iv0dK+H0h8ntA5PfYshvugQMeQn8E/bHhhify9pR4SbwduOErcRtP4jY+Sm77G5GfF5GfrxJ+34n8vIn8/Cy74Qk4wAe6L3Q/ww3+8g6QBEqCHLjhB3GbAOI2wUpu+yeRXyCRX4gSfr+I/IKI/EItu8EfHBAMPQR6qOGGp/J+JnkueeHADb+J2zwjbvNSyW3/IfJ7TuT3Sgm/v0R+L4j8Xlt2w1NwwEvor6C/NtzwRt5vJe8k7x24IUwt4v/sidt8UHLbYYn83hH5fVTCLxyR33siv0+W3fAGHPAB+kfonww3fJb3F8lXyTcHbghP3OYLcZvvSm47ApHfVyK/H0r4RSTy+0bk99OyGz6DA75D/wH9p+GGX/L+/e9nkr8O3BCJuM1v4jZhQnXcdmQivz9EfmGV8ItC5PeXyC9cqF03/AIH/Lv1//Ww0MOF/tcN4eUdQRJREinUvhuiEreJEMrbJrKS245G5BeRyC+KEn7RifwiEflFteyG8OCAyNCjQI9quCGavKNLYkhiOnBDDOI20YnbxFJy2zGJ/GIQ+cVWwi8WkV9MIr84lt0QDRwQC3ps6HEMN8SVdzxJfEkCB26ITdwmHnGbhEpuOw6RX3wiv0RK+MUl8ktA5JfYshviggMSQk8EPbHhhiTyTipJJknuwA3xiNskJW6TQsltxyfyS0bkl1IJvwREfsmJ/FJZdkMScEAK6CmhpzLckFreaSRpJekcuCEhcZs0xG3SK7ntRER+aYn8Mijhl5jILx2RX0bLbkgNDkgPPQP0jIYbMsk7sySLJKsDNyQhbpOZuE02JbedlMgvC5FfdiX8khH5ZSXyy2HZDZnAAdmgZ4eew3BDTnnnkuSW5HHghuTEbXIRt8mr5LZTEPnlJvLLp4RfSiK/PER++S27ISc4IC/0fNDzG24oIO+CkkKSwg7ckIq4TUHiNkWU3HZqIr9CRH5FlfBLQ+RXmMivmGU3FAAHFIFeFHoxww3F5V1CUlJSyoEb0hK3KUHcprSS205H5FeSyK+MEn7pifxKEfmVteyG4uCA0tDLQC9ruKGcvMtLKkgqOnBDBuI25YnbVFJy2xmJ/CoQ+VVWwi8TkV9FIr8qlt1QDhxQCXpl6FUMN1SVdzVJdUkNB27ITNymGnGbmkpuOwuRX3Uiv1pK+GUl8qtB5FfbshuqggNqQq8FvbbhhjryriupJ6nvwA3ZiNvUJW7TQMltZyfyq0fk11AJvxxEfvWJ/BpZdkMdcEAD6A2hNzLc0FjeTSRNJc0cuCEncZsmxG2aK7ntXER+TYn8Wijhl5vIrxmRX0vLbmgMDmgOvQX0loYbWsm7taSNpK0DN+QhbtOauE07Jbedl8ivDZFfeyX88hH5tSXy62DZDa3AAe2gt4fewXBDR3l3knSWdHHghvzEbToRt+mq5LYLEPl1JvLrpoRfQSK/LkR+3S27oSM4oCv0btC7G27oIe+ekl6S3g7cUIi4TU/iNn2U3HZhIr9eRH59lfArQuTXm8ivn2U39AAH9IHeF3o/ww395T1AMlAyyIEbihK3GUDcZrCS2y5G5DeQyG+IEn7FifwGEfkNteyG/uCAwdCHQB9quGGYvIdLRkhGOnBDCeI2w4nbjFJy2yWJ/EYQ+Y1Wwq8Ukd9IIr8xlt0wDBwwCvpo6GMMN4yV9zjJeMkEB24oTdxmHHGbiUpuuwyR33giv0lK+JUl8ptA5DfZshvGggMmQp8EfbLhhinyniqZJpnuwA3liNtMJW4zQ8ltlyfym0bkN1MJvwpEftOJ/GZZdsMUcMAM6DOhzzLcMFvecyRzJfMcuKEicZs5xG3mK7ntSkR+c4n8FijhV5nIbx6R30LLbpgNDpgPfQH0hYYbFsl7sWSJZKkDN1QhbrOYuM0yJbddlchvCZHfciX8qhH5LSXyW2HZDYvAAcugL4e+wnDDSnmvkqyWrHHghurEbVYRt1mr5LZrEPmtJvJbp4RfTSK/NUR+6y27YSU4YC30ddDXG27YIO+Nkk2SzQ7cUIu4zUbiNluU3HZtIr9NRH5blfCrQ+S3mchvm2U3bAAHbIG+Ffo2ww3b5b1DslOyy4Eb6hK32UHcZreS265H5LeTyG+PEn71ifx2EfntteyG7eCA3dD3QN9ruGGfvPdLDkgOOnBDA+I2+4nbHFJy2w2J/A4Q+R1Wwq8Rkd9BIr8jlt2wDxxwCPph6EcMNxyV9zHJcckJB25oTNzmGHGbk0puuwmR33Eiv/+jxhyC/P6+Jhzbtm3btm3btm3btm3btpPxZCaaYCbzniz+9fbvrvveqrPoqr6z+Nannj55FjmlhF9TIr8TRH6nLbvhKDjgJPRT0E8bbjgj77OSc5LzDtzQjLjNWeI2F5TcdnMiv3NEfheV8GtB5HeeyO+SZTecAQdcgH4R+iXDDZflfUVyVXLNgRtaEre5QtzmupLbbkXkd5XI74YSfq2J/K4R+d207IbL4IDr0G9Av2m44Za8b0vuSO46cEMb4ja3idvcU3LbbYn87hD53VfCrx2R310ivweW3XALHHAP+n3oDww3PJT3I8ljyRMHbmhP3OYRcZunSm67A5HfYyK/Z0r4dSTye0Lk99yyGx6CA55Cfwb9ueGGF/J+KXklee3ADZ2I27wkbvNGyW13JvJ7ReT3Vgm/LkR+r4n83ll2wwtwwBvob6G/M9zwXt4fJB8lnxy4oStxmw/EbTyU3HY3Ir+PRH6eSvh1J/L7ROTnZdkN78EBHtA9oXsZbvCWt4/EV+LnwA09iNv4ELfxV3LbPYn8fIn8Pivh14vIz4/IL8CyG7zBAf7QP0MPMNwQKO8vkq+Sbw7c0Ju4zRfiNt+V3HYfIr+vRH4/lPDrS+T3jcgvyLIbAsEB36H/gB5kuOGnvH9Jfkv+OHBDP+I2v4jbBCu57f5Efr+J/EKU8BtA5PeHyO+vZTf8BAcEQw+B/tdwQ6i8w3iEDRNWEs7DvhsGErf5992sbcJ76LjtQUR+YYn8IijhN5jILxyRX0QPu24IBQf8u/X/9QjQI3r81w2R5B1ZEkUS1YEbhhC3iUzcJpqS2x5K5BeFyC+6En7DiPyiEvnFsOyGSOCAaNCjQ49huCGmvGNJYkviOHDDcOI2sYjbxFVy2yOI/GIT+cVTwm8kkV8cIr/4lt0QExwQF3o86PENNySQd0JJIkliB24YRdwmIXGbJEpuezSRXyIiv6RK+I0h8ktM5JfMshsSgAOSQE8KPZnhhuTyTiFJKUnlwA1jidukIG6TWsltjyPyS0nkl0YJv/FEfqmI/NJadkNycEBq6GmgpzXckE7e6SUZJBkduGECcZv0xG0yKbntiUR+GYj8MivhN4nILyORXxbLbkgHDsgEPTP0LIYbsso7myS7JIcDN0wmbpONuE1OJbc9hcgvO5FfLiX8phL55SDyy23ZDVnBATmh54Ke23BDHnnnleST5HfghmnEbfIStymg5LanE/nlI/IrqITfDCK//ER+hSy7IQ84oAD0gtALGW4oLO8ikqKSYg7cMJO4TRHiNsWV3PYsIr+iRH4llPCbTeRXjMivpGU3FAYHFIdeAnpJww2l5F3633dJyjpwwxziNqWJ25RTcttzifzKEPmVV8JvHpFfWSK/CpbdUAocUA56eegVDDdUlHclSWVJFQdumE/cphJxm6pKbnsBkV9lIr9qSvgtJPKrQuRX3bIbKoIDqkKvBr264YYa8q4pqSWp7cANi4jb1CRuU0fJbS8m8qtF5FdXCb8lRH61ifzqWXZDDXBAHeh1odcz3FBf3g0kDSWNHLhhKXGbBsRtGiu57WVEfg2J/Joo4becyK8RkV9Ty26oDw5oDL0J9KaGG5rJu7mkhaSlAzesIG7TnLhNKyW3vZLIrwWRX2sl/FYR+bUk8mtj2Q3NwAGtoLeG3sZwQ1t5t5O0l3Rw4IbVxG3aEbfpqOS21xD5tSfy66SE31oivw5Efp0tu6EtOKAj9E7QOxtu6CLvrpJuku4O3LCOuE1X4jY9lNz2eiK/bkR+PZXw20Dk153Ir5dlN3QBB/SA3hN6L8MNveXdR9JX0s+BGzYSt+lD3Ka/ktveROTXl8hvgBJ+m4n8+hH5DbTsht7ggP7QB0AfaLhhkLwHS4ZIhjpwwxbiNoOJ2wxTcttbifyGEPkNV8JvG5HfUCK/EZbdMAgcMAz6cOgjDDeMlPcoyWjJGAdu2E7cZhRxm7FKbnsHkd9oIr9xSvjtJPIbQ+Q33rIbRoIDxkIfB3284YYJ8p4omSSZ7MANu4jbTCRuM0XJbe8m8ptE5DdVCb89RH6TifymWXbDBHDAFOhToU8z3DBd3jMkMyWzHLhhL3GbGcRtZiu57X1EfjOJ/OYo4befyG8Wkd9cy26YDg6YDX0O9LmGG+bJe75kgWShAzccIG4zn7jNIiW3fZDIbwGR32Il/A4R+S0k8lti2Q3zwAGLoC+GvsRww1J5L5Msl6xw4IbDxG2WEbdZqeS2jxD5LSfyW6WE31EivxVEfqstu2EpOGAl9FXQVxtuWCPvtZJ1kvUO3HCMuM1a4jYblNz2cSK/dUR+G5XwO0Hkt57Ib5NlN6wBB2yAvhH6JsMNm+W9RbJVss2BG04St9lC3Ga7kts+ReS3lchvhxJ+p4n8thH57bTshs3ggO3Qd0Dfabhhl7x3S/ZI9jpwwxniNruJ2+xTcttnifz2EPntV8LvHJHfXiK/A5bdsAscsA/6fugHDDcclPchyWHJEQduOE/c5hBxm6NKbvsCkd9hIr9jSvhdJPI7QuR33LIbDoIDjkI/Bv244YYT8j4pOSU57cANl4jbnCRuc0bJbV8m8jtF5HdWCb8rRH6nifzOWXbDCXDAGehnoZ8z3HBe3hckFyWXHLjhKnGbC8RtLiu57WtEfheJ/K4o4XedyO8Skd9Vy244Dw64DP0K9KuGG67J+7rkhuSmAzfcIG5znbjNLSW3fZPI7waR320l/G4R+d0k8rtj2Q3XwAG3oN+Gfsdww11535Pclzxw4IbbxG3uEbd5qOS27xD53Sfye6SE310ivwdEfo8tu+EuOOAh9EfQHxtueCLvp5JnkucO3HCPuM1T4jYvlNz2fSK/Z0R+L5Xwe0Dk95zI75VlNzwBB7yA/hL6K8MNr+X9RvJW8s6BGx4St3lD3Oa9ktt+ROT3lsjvgxJ+j4n83hH5fbTshtfggPfQP0D/aLjhk7w9JJ4SLwdueELcxoO4jbeS235K5OdJ5OejhN8zIj8vIj9fy274BA7whu4D3ddwg5+8/SWfJQEO3PCcuI0/cZtAJbf9gsjvM5HfFyX8XhL5BRD5fbXsBj9wQCD0L9C/Gm74Ju/vkh+SIAdueEXc5jtxm59Kbvs1kd8PIr9fSvi9IfILIvL7bdkN38ABP6H/gv7bcMMfeQdLQv793YEb3hK3CSZuE6rktt8R+YUQ+YXx1MHvPZHfXyK/sJ523fAHHBAK/d9u/+thPf/rhnDyDi+JIInoad8NH4jbhPfkbRNJyW1/JPKLQOQXWQm/T0R+EYn8olh2QzhwQCTokaFHMdwQVd7RJNElMRy4wYO4TTTiNjGV3LYnkV90Ir9YSvh5EfnFIPKLbdkNUcEBMaHHgh7bcEMceceVxJPEd+AGb+I2cYnbJFBy2z5EfvGI/BIq4edL5BefyC+RZTfEAQckgJ4QeiLDDYnlnUSSVJLMgRv8iNskIW6TXMlt+xP5JSXyS6GE32civ2REfiktuyExOCA59BTQUxpuSCXv1JI0krQO3BBA3CY1cZt0Sm47kMgvDZFfeiX8vhD5pSXyy2DZDanAAemgp4eewXBDRnlnkmSWZHHghq/EbTIRt8mq5La/EfllJvLLpoTfdyK/LER+2S27ISM4ICv0bNCzG27IIe+cklyS3A7c8IO4TU7iNnmU3HYQkV8uIr+8Svj9JPLLTeSXz7IbcoAD8kDPCz2f4Yb88i4gKSgp5MANv4jbFCBuU1jJbf8m8itI5FdECb8/RH6FiPyKWnZDfnBAYehFoBc13FBM3sUlJSQlHbghmLhNceI2pZTcdgiRXwkiv9JK+P0l8itJ5FfGshuKgQNKQS8NvYzhhrLyLicpL6ngwA2hxG3KEbepqOS2w9Tm/VZ5Ir9KSviFJfKrQORX2bIbyoIDKkKvBL2y4YYq8q4qqSap7sAN4YjbVCVuU0PJbYcn8qtG5FdTCb8IRH7VifxqWXZDFXBADeg1odcy3FBb3nUkdSX1HLghInGbOsRt6iu57UhEfnWJ/Boo4ReZyK8ekV9Dy26oDQ6oD70B9IaGGxrJu7GkiaSpAzdEIW7TmLhNMyW3HZXIrwmRX3Ml/KIR+TUl8mth2Q2NwAHNoDeH3sJwQ0t5t5K0lrRx4IboxG1aEbdpq+S2YxD5tSbya6eEX0wivzZEfu0tu6ElOKAt9HbQ2xtu6CDvjpJOks4O3BCLuE1H4jZdlNx2bCK/TkR+XZXwi0Pk15nIr5tlN3QAB3SB3hV6N8MN3eXdQ9JT0suBG+ISt+lB3Ka3ktuOR+TXk8ivjxJ+8Yn8ehH59bXshu7ggN7Q+0Dva7ihn7z7SwZIBjpwQwLiNv2J2wxSctsJifwGEPkNVsIvEZHfQCK/IZbd0A8cMAj6YOhDDDcMlfcwyXDJCAduSEzcZhhxm5FKbjsJkd9wIr9RSvglJfIbQeQ32rIbhoIDRkIfBX204YYx8h4rGScZ78ANyYjbjCVuM0HJbScn8htH5DdRCb8URH7jifwmWXbDGHDABOgToU8y3DBZ3lMkUyXTHLghJXGbKcRtpiu57VREflOJ/GYo4ZeayG8akd9My26YDA6YDn0G9JmGG2bJe7ZkjmSuAzekIW4zm7jNPCW3nZbIbw6R33wl/NIR+c0l8ltg2Q2zwAHzoM+HvsBww0J5L5Islixx4Ib0xG0WEbdZquS2MxD5LSbyW6aEX0YivyVEfsstu2EhOGAp9GXQlxtuWCHvlZJVktUO3JCJuM1K4jZrlNx2ZiK/VUR+a5Xwy0Lkt5rIb51lN6wAB6yBvhb6OsMN6+W9QbJRssmBG7ISt9lA3GazktvORuS3kchvixJ+2Yn8NhH5bbXshvXggM3Qt0Dfarhhm7y3S3ZIdjpwQw7iNtuJ2+xScts5ifx2EPntVsIvF5HfTiK/PZbdsA0csAv6buh7DDfslfc+yX7JAQduyE3cZh9xm4NKbjsPkd9+Ir9DSvjlJfI7QOR32LIb9oIDDkI/BP2w4YYj8j4qOSY57sAN+YjbHCVuc0LJbecn8jtG5HdSCb8CRH7HifxOWXbDEXDACegnoZ8y3HBa3mckZyXnHLihIHGbM8Rtziu57UJEfmeJ/C4o4VeYyO8ckd9Fy244DQ44D/0C9IuGGy7J+7LkiuSqAzcUIW5zmbjNNSW3XZTI7wqR33Ul/IoR+V0l8rth2Q2XwAHXoF+HfsNww01535Lcltxx4IbixG1uEbe5q+S2SxD53Sbyu6eEX0kivztEfvctu+EmOOAu9HvQ7xtueCDvh5JHkscO3FCKuM1D4jZPlNx2aSK/R0R+T5XwK0Pk95jI75llNzwABzyB/hT6M8MNz+X9QvJS8sqBG8oSt3lB3Oa1ktsuR+T3ksjvjRJ+5Yn8XhH5vbXshufggNfQ30B/a7jhnbzfSz5IPjpwQwXiNu+J23xSctsVifw+EPl5KOFXicjvI5Gfp2U3vAMHfILuAd3TcIOXvL0lPhJfB26oTNzGm7iNn5LbrkLk50Pk56+EX1UiP18iv8+W3eAFDvCD7g/9s+GGAHkHSr5IvjpwQzXiNoHEbb4pue3qRH5fiPy+K+FXg8jvK5HfD8tuCAAHfIP+HfoPww1B8v4p+SX57cANNYnb/CRu80fJbdci8vtF5BeshF9tIr/fRH4hlt0QBA74Az0Yeojhhr/yDpWE8QobJqyXfTfUIW4TStwmnJeO265L5BfGi8cvvBJ+9Yj8whL5RfCy64a/4IB/t/6/Hh56BK//uiGivCNJIkuiOHBDfeI2kYjbRFVy2w2I/CIT+UVTwq8hkV8UIr/olt0QERwQFXo06NENN8SQd0xJLElsB25oRNwmJnGbOEpuuzGRXywiv7hK+DUh8otN5BfPshtigAPiQI8LPZ7hhvjyTiBJKEnkwA1NidskIG6TWMltNyPyS0jkl0QJv+ZEfomI/JJadkN8cEBi6EmgJzXckEzeySUpJCkduKEFcZvkxG1SKbntlkR+KYj8Uivh14rILyWRXxrLbkgGDkgFPTX0NIYb0so7nSS9JIMDN7QmbpOOuE1GJbfdhsgvPZFfJiX82hL5ZSDyy2zZDWnBARmhZ4Ke2XBDFnlnlWSTZHfghnbEbbISt8mh5LbbE/llI/LLqYRfByK/7ER+uSy7IQs4IAf0nNBzGW7ILe88krySfA7c0JG4TR7iNvmV3HYnIr+8RH4FlPDrTOSXj8ivoGU35AYH5IdeAHpBww2F5F1YUkRS1IEbuhC3KUzcppiS2+5K5FeEyK+4En7diPyKEvmVsOyGQuCAYtCLQy9huKGkvEtJSv/7Ngdu6E7cphRxm7JKbrsHkV9pIr9ySvj1JPIrQ+RX3rIbSoIDykIvB7284YYK8q4oqSSp7MANvYjbVCRuU0XJbfcm8qtE5FdVCb8+RH6VifyqWXZDBXBAFehVoVcz3FBd3jUkNSW1HLihL3GbGsRtaiu57X5EfjWJ/Ooo4defyK8WkV9dy26oDg6oDb0O9LqGG+rJu76kgaShAzcMIG5Tn7hNIyW3PZDIrwGRX2Ml/AYR+TUk8mti2Q31wAGNoDeG3sRwQ1N5N5M0l7Rw4IbBxG2aEbdpqeS2hxD5NSfya6WE31AivxZEfq0tu6EpOKAl9FbQWxtuaCPvtpJ2kvYO3DCMuE1b4jYdlNz2cCK/dkR+HZXwG0Hk157Ir5NlN7QBB3SA3hF6J8MNneXdRdJV0s2BG0YSt+lC3Ka7ktseReTXlcivhxJ+o4n8uhH59bTshs7ggO7Qe0Dvabihl7x7S/pI+jpwwxjiNr2J2/RTcttjifz6EPn1V8JvHJFfXyK/AZbd0Asc0A96f+gDDDcMlPcgyWDJEAduGE/cZhBxm6FKbnsCkd9gIr9hSvhNJPIbQuQ33LIbBoIDhkIfBn244YYR8h4pGSUZ7cANk4jbjCRuM0bJbU8m8htF5DdWCb8pRH6jifzGWXbDCHDAGOhjoY8z3DBe3hMkEyWTHLhhKnGbCcRtJiu57WlEfhOJ/KYo4TedyG8Skd9Uy24YDw6YDH0K9KmGG6bJe7pkhmSmAzfMIG4znbjNLCW3PZPIbwaR32wl/GYR+c0k8ptj2Q3TwAGzoM+GPsdww1x5z5PMlyxw4IbZxG3mEbdZqOS25xD5zSfyW6SE31wivwVEfostu2EuOGAh9EXQFxtuWCLvpZJlkuUO3DCPuM1S4jYrlNz2fCK/ZUR+K5XwW0Dkt5zIb5VlNywBB6yAvhL6KsMNq+W9RrJWss6BGxYSt1lD3Ga9ktteROS3lshvgxJ+i4n81hH5bbTshtXggPXQN0DfaLhhk7w3S7ZItjpwwxLiNpuJ22xTcttLify2EPltV8JvGZHfViK/HZbdsAkcsA36dug7DDfslPcuyW7JHgduWE7cZhdxm71KbnsFkd9uIr99SvitJPLbQ+S337IbdoID9kLfB32/4YYD8j4oOSQ57MANq4jbHCRuc0TJba8m8jtE5HdUCb81RH6HifyOWXbDAXDAEehHoR8z3HBc3ickJyWnHLhhLXGbE8RtTiu57XVEfieJ/M4o4beeyO8Ukd9Zy244Dg44Df0M9LOGG87J+7zkguSiAzdsIG5znrjNJSW3vZHI7wKR32Ul/DYR+V0k8rti2Q3nwAGXoF+GfsVww1V5X5Ncl9xw4IbNxG2uEbe5qeS2txD5XSfyu6WE31YivxtEfrctu+EqOOAm9FvQbxtuuCPvu5J7kvsO3LCNuM1d4jYPlNz2diK/e0R+D5Xw20Hkd5/I75FlN9wBBzyA/hD6I8MNj+X9RPJU8syBG3YSt3lC3Oa5ktveReT3lMjvhRJ+u4n8nhH5vbTshsfggOfQX0B/abjhlbxfS95I3jpwwx7iNq+J27xTctt7ifzeEPm9V8JvH5HfWyK/D5bd8Aoc8A76e+gfDDd8lPcniYfE04Eb9hO3+UTcxkvJbR8g8vMg8vNWwu8gkZ8nkZ+PZTd8BAd4QfeG7mO4wVfefhJ/yWcHbjhE3MaPuE2Akts+TOTnT+QXqITfESK/z0R+Xyy7wRccEAA9EPoXww1f5f1N8l3yw4EbjhK3+UbcJkjJbR8j8vtO5PdTCb/jRH4/iPx+WXbDV3BAEPSf0H8Zbvgt7z+SYEmIAzecIG7zh7jNXyW3fZLIL5jIL1QJv1NEfiFEfmG87brhNzjgL/RQ6P++Ad0QVt7hJOElEbztu+E0cZtw3rxtInrruO0zRH7hifwiKeF3lsgvApFfZMtuCOv9/w6ICD0S9MiGG6LIO6okmiS6AzecI24TlbhNDCW3fZ7ILxqRX0wl/C4Q+UUn8otl2Q1RwAExoMeEHstwQ2x5x5HElcRz4IaLxG3iELeJr+S2LxH5xSXyS6CE32Uiv3hEfgktuyE2OCA+9ATQExpuSCTvxJIkkqQO3HCFuE1i4jbJlNz2VSK/JER+yZXwu0bkl5TIL4VlNyQCBySDnhx6CsMNKeWdSpJaksaBG64Tt0lF3Catktu+QeSXmsgvnRJ+N4n80hD5pbfshpTggLTQ00FPb7ghg7wzSjJJMjtwwy3iNhmJ22RRctu3ifwyEfllVcLvDpFfZiK/bJbdkAEckAV6VujZDDdkl3cOSU5JLgduuEvcJgdxm9xKbvsekV9OIr88SvjdJ/LLReSX17IbsoMDckPPAz2v4YZ88s4vKSAp6MAND4jb5CduU0jJbT8k8itA5FdYCb9HRH4FifyKWHZDPnBAIeiFoRcx3FBU3sUkxSUlHLjhMXGbYsRtSiq57SdEfsWJ/Eop4feUyK8EkV9py24oCg4oCb0U9NKGG8rIu6yknKS8Azc8I25TlrhNBSW3/ZzIrxyRX0Ul/F4Q+ZUn8qtk2Q1lwAEVoFeEXslwQ2V5V5FUlVRz4IaXxG2qELepruS2XxH5VSXyq6GE32siv2pEfjUtu6EyOKA69BrQaxpuqCXv2pI6kroO3PCGuE1t4jb1lNz2WyK/OkR+9ZXwe0fkV5fIr4FlN9QCB9SDXh96A8MNDeXdSNJY0sSBG94Tt2lE3Kapktv+QOTXmMivmRJ+H4n8mhD5NbfshobggKbQm0FvbrihhbxbSlpJWjtwwyfiNi2J27RRctseRH6tiPzaKuHnSeTXmsivnWU3tAAHtIHeFno7ww3t5d1B0lHSyYEbvIjbdCBu01nJbXsT+XUk8uuihJ8PkV8nIr+ult3QHhzQGXoX6F0NN3STd3dJD0lPB27wJW7TnbhNLyW37Ufk14PIr7cSfv5Efj2J/PpYdkM3cEAv6L2h9zHc0Ffe/ST9JQMcuOEzcZt+xG0GKrntACK//kR+g5TwCyTyG0DkN9iyG/qCAwZCHwR9sOGGIfIeKhkmGe7ADV+I2wwlbjNCyW1/JfIbRuQ3Ugm/b0R+w4n8Rll2wxBwwAjoI6GPMtwwWt5jJGMl4xy44TtxmzHEbcYrue0fRH5jifwmKOEXROQ3jshvomU3jAYHjIc+AfpEww2T5D1ZMkUy1YEbfhK3mUzcZpqS2/5F5DeFyG+6En6/ifymEvnNsOyGSeCAadCnQ59huGGmvGdJZkvmOHDDH+I2s4jbzFVy28FEfrOJ/OYp4RdC5DeHyG++ZTfMBAfMhT4P+nzDDQvkvVCySLLYgRv+ErdZSNxmiZLbDiXyW0Tkt1QJvzB1eL+1mMhvmWU3LAAHLIG+FPoyww3L5b1CslKyyoEbwhK3WUHcZrWS2w5H5LeSyG+NEn7hifxWEfmtteyG5eCA1dDXQF9ruGGdvNdLNkg2OnBDBOI264nbbFJy2xGJ/DYQ+W1Wwi8Skd9GIr8tlt2wDhywCfpm6FsMN2yV9zbJdskOB26ITNxmG3GbnUpuOwqR33Yiv11K+EUl8ttB5Lfbshu2ggN2Qt8Ffbfhhj3y3ivZJ9nvwA3RiNvsJW5zQMltRyfy20fkd1AJvxhEfvuJ/A5ZdsMecMAB6AehHzLccFjeRyRHJcccuCEmcZsjxG2OK7ntWER+R4n8TijhF5vI7xiR30nLbjgMDjgO/QT0k4YbTsn7tOSM5KwDN8QhbnOauM05Jbcdl8jvDJHfeSX84hH5nSXyu2DZDafAAeegn4d+wXDDRXlfklyWXHHghvjEbS4Rt7mq5LYTEPldJvK7poRfQiK/K0R+1y274SI44Cr0a9CvG264Ie+bkluS2w7ckIi4zU3iNneU3HZiIr9bRH53lfBLQuR3m8jvnmU33AAH3IF+F/o9ww335f1A8lDyyIEbkhK3eUDc5rGS205G5PeQyO+JEn7JifweEfk9teyG++CAx9CfQH9quOGZvJ9LXkheOnBDCuI2z4nbvFJy2ymJ/F4Q+b1Wwi8Vkd9LIr83lt3wDBzwCvpr6G8MN7yV9zvJe8kHB25ITdzmHXGbj0puOw2R33siv09K+KUl8vtA5Odh2Q1vwQEfoX+C7mG4wVPeXhJviY8DN6QjbuNF3MZXyW2nJ/LzJvLzU8IvA5GfD5Gfv2U3eIIDfKH7Qfc33PBZ3gGSQMkXB27ISNwmgLjNVyW3nYnIL5DI75sSfpmJ/L4Q+X237IbP4ICv0L9B/2644Ye8gyQ/Jb8cuCELcZsg4ja/ldx2ViK/n0R+f5Twy0bk94vIL9iyG36AA35D/wM92HBDyL+3JFQSxse+G7ITt/lL3Casj47bzkHkF0rkF04Jv5xEfmF8ePzC+9h1Qwg44N+t/6+Hgx7e579uiCDviJJIksgO3JCLuE1E4jZRlNx2biK/SER+UZXwy0PkF5nIL5plN0QAB0SBHhV6NMMN0eUdQxJTEsuBG/ISt4lB3Ca2ktvOR+QXk8gvjhJ++Yn8YhH5xbXshujggNjQ40CPa7ghnrzjSxJIEjpwQwHiNvGJ2yRSctsFifwSEPklVsKvEJFfQiK/JJbdEA8ckAh6YuhJDDcklXcySXJJCgduKEzcJhlxm5RKbrsIkV9yIr9USvgVJfJLQeSX2rIbkoIDUkJPBT214YY08k4rSSdJ78ANxYjbpCVuk0HJbRcn8ktH5JdRCb8SRH7pifwyWXZDGnBABugZoWcy3JBZ3lkkWSXZHLihJHGbLMRtsiu57VJEflmJ/HIo4VeayC8bkV9Oy27IDA7IDj0H9JyGG3LJO7ckjySvAzeUIW6Tm7hNPiW3XZbILw+RX34l/MoR+eUl8itg2Q25wAH5oOeHXsBwQ0F5F5IUlhRx4IbyxG0KEbcpquS2KxD5FSbyK6aEX0UivyJEfsUtu6EgOKAo9GLQixtuKCHvkpJSktIO3FCJuE1J4jZllNx2ZSK/UkR+ZZXwq0LkV5rIr5xlN5QAB5SBXhZ6OcMN5eVdQVJRUsmBG6oSt6lA3KayktuuRuRXkcivihJ+1Yn8KhH5VbXshvLggMrQq0CvarihmryrS2pIajpwQw3iNtWJ29RScts1ifxqEPnVVsKvFpFfTSK/OpbdUA0cUAt6beh1DDfUlXc9SX1JAwduqE3cph5xm4ZKbrsOkV99Ir9GSvjVJfJrQOTX2LIb6oIDGkJvBL2x4YYm8m4qaSZp7sAN9YjbNCVu00LJbdcn8mtG5NdSCb8GRH7NifxaWXZDE3BAC+gtobcy3NBa3m0kbSXtHLihIXGbNsRt2iu57UZEfm2J/Doo4deYyK8dkV9Hy25oDQ5oD70D9I6GGzrJu7Oki6SrAzc0IW7TmbhNNyW33ZTIrwuRX3cl/JoR+XUl8uth2Q2dwAHdoHeH3sNwQ09595L0lvRx4IbmxG16Ebfpq+S2WxD59Sby66eEX0sivz5Efv0tu6EnOKAv9H7Q+xtuGCDvgZJBksEO3NCKuM1A4jZDlNx2ayK/QUR+Q5Xwa0PkN5jIb5hlNwwABwyBPhT6MMMNw+U9QjJSMsqBG9oStxlB3Ga0kttuR+Q3kshvjBJ+7Yn8RhH5jbXshuHggNHQx0Afa7hhnLzHSyZIJjpwQwfiNuOJ20xSctsdifwmEPlNVsKvE5HfRCK/KZbdMA4cMAn6ZOhTDDdMlfc0yXTJDAdu6EzcZhpxm5lKbrsLkd90Ir9ZSvh1JfKbQeQ327IbpoIDZkKfBX224YY58p4rmSeZ78AN3YjbzCVus0DJbXcn8ptH5LdQCb8eRH7zifwWWXbDHHDAAugLoS8y3LBY3kskSyXLHLihJ3GbJcRtliu57V5EfkuJ/FYo4debyG8Zkd9Ky25YDA5YDn0F9JWGG1bJe7VkjWStAzf0IW6zmrjNOiW33ZfIbw2R33ol/PoR+a0l8ttg2Q2rwAHroK+HvsFww0Z5b5Jslmxx4Ib+xG02EbfZquS2BxD5bSby26aE30Aivy1Eftstu2EjOGAr9G3Qtxtu2CHvnZJdkt0O3DCIuM1O4jZ7lNz2YCK/XUR+e5XwG0Lkt5vIb59lN+wAB+yBvhf6PsMN++V9QHJQcsiBG4YStzlA3OawktseRuR3kMjviBJ+w4n8DhH5HbXshv3ggMPQj0A/arjhmLyPS05ITjpwwwjiNseJ25xSctsjifxOEPmdVsJvFJHfSSK/M5bdcAwccAr6aehnDDeclfc5yXnJBQduGE3c5hxxm4tKbnsMkd95Ir9LSviNJfK7QOR32bIbzoIDLkK/BP2y4YYr8r4quSa57sAN44jbXCVuc0PJbY8n8rtG5HdTCb8JRH7XifxuWXbDFXDADeg3od8y3HBb3nckdyX3HLhhInGbO8Rt7iu57UlEfneJ/B4o4TeZyO8ekd9Dy264DQ64D/0B9IeGGx7J+7HkieSpAzdMIW7zmLjNMyW3PZXI7wmR33Ml/KYR+T0l8nth2Q2PwAHPoD+H/sJww0t5v5K8lrxx4IbpxG1eEbd5q+S2ZxD5vSbye6eE30wivzdEfu8tu+ElOOAt9HfQ3xtu+CDvj5JPEg8HbphF3OYjcRtPJbc9m8jvE5GflxJ+c4j8PIj8vC274QM4wBO6F3Rvww0+8vaV+En8HbhhLnEbX+I2n5Xc9jwiPz8ivwAl/OYT+fkT+QVadoMPOOAz9ADogYYbvsj7q+Sb5LsDNywgbvOVuM0PJbe9kMjvG5FfkBJ+i4j8vhP5/bTshi/ggB/Qg6D/NNzwS96/JX8kwQ7csJi4zW/iNiFKbnsJkd8fIr+/SvgtJfILJvILteyGX+CAEOh/oYcabgjjGzZMWEk4SXhf+25YRtzm33eztongq+O2lxP5hSPyi6iE3woiv/BEfpF87brh37/z/zkgAvSI0CP5/tcNkeUdRRJVEs2BG1YSt4lC3Ca6ktteReQXlcgvhhJ+q4n8ohH5xbTshsjggOjQY0CPabghlrxjS+JI4jpwwxriNrGJ28RTcttrifziEPnFV8JvHZFfXCK/BJbdEAscEA96fOgJDDcklHciSWJJEgduWE/cJhFxm6RKbnsDkV9iIr9kSvhtJPJLQuSX3LIbEoIDkkJPBj254YYU8k4pSSVJ7cANm4jbpCRuk0bJbW8m8ktF5JdWCb8tRH6pifzSWXZDCnBAGuhpoacz3JBe3hkkGSWZHLhhK3GbDMRtMiu57W1EfhmJ/LIo4bedyC8TkV9Wy25IDw7IDD0L9KyGG7LJO7skhySnAzfsIG6TnbhNLiW3vZPILweRX24l/HYR+eUk8stj2Q3ZwAG5oOeGnsdwQ15555PklxRw4IbdxG3yEbcpqOS29xD55SfyK6SE314ivwJEfoUtuyEvOKAg9ELQCxtuKCLvopJikuIO3LCPuE1R4jYllNz2fiK/YkR+JZXwO0DkV5zIr5RlNxQBB5SAXhJ6KcMNpf99k6SspJwDNxwkblOGuE15Jbd9iMivLJFfBSX8DhP5lSPyq2jZDaXBAeWhV4Be0XBDJXlXllSRVHXghiPEbSoTt6mm5LaPEvlVIfKrroTfMSK/qkR+NSy7oRI4oBr06tBrGG6oKe9aktqSOg7ccJy4TS3iNnWV3PYJIr/aRH71lPA7SeRXh8ivvmU31AQH1IVeD3p9ww0N5N1Q0kjS2IEbThG3aUjcpomS2z5N5NeIyK+pEn5niPwaE/k1s+yGBuCAJtCbQm9muKG5vFtIWkpaOXDDWeI2LYjbtFZy2+eI/FoS+bVRwu88kV8rIr+2lt3QHBzQGnob6G0NN7STd3tJB0lHB264QNymPXGbTkpu+yKRXwciv85K+F0i8utI5NfFshvagQM6Qe8MvYvhhq7y7ibpLunhwA2Xidt0I27TU8ltXyHy607k10sJv6tEfj2I/HpbdkNXcEBP6L2g9zbc0EfefSX9JP0duOEacZu+xG0GKLnt60R+/Yj8Birhd4PIrz+R3yDLbugDDhgAfSD0QYYbBst7iGSoZJgDN9wkbjOEuM1wJbd9i8hvKJHfCCX8bhP5DSPyG2nZDYPBAcOhj4A+0nDDKHmPloyRjHXghjvEbUYTtxmn5LbvEvmNIfIbr4TfPSK/sUR+Eyy7YRQ4YBz08dAnGG6YKO9JksmSKQ7ccJ+4zSTiNlOV3PYDIr/JRH7TlPB7SOQ3hchvumU3TAQHTIU+Dfp0ww0z5D1TMksy24EbHhG3mUncZo6S235M5DeLyG+uEn5PiPxmE/nNs+yGGeCAOdDnQp9nuGG+vBdIFkoWOXDDU+I2C4jbLFZy28+I/BYS+S1Rwu85kd8iIr+llt0wHxywGPoS6EsNNyyT93LJCslKB254QdxmOXGbVUpu+yWR3woiv9VK+L0i8ltJ5LfGshuWgQNWQV8NfY3hhrXyXidZL9ngwA2vidusI26zUcltvyHyW0/kt0kJv7dEfhuI/DZbdsNacMBG6JugbzbcsEXeWyXbJNsduOEdcZutxG12KLnt90R+24j8dirh94HIbzuR3y7LbtgCDtgBfSf0XYYbdst7j2SvZJ8DN3wkbrOHuM1+Jbf9ichvL5HfASX8PIj89hH5HbTsht3ggP3QD0A/aLjhkLwPS45Ijjpwgydxm8PEbY4puW0vIr8jRH7HlfDzJvI7SuR3wrIbDoEDjkE/Dv2E4YaT8j4lOS0548ANPsRtThG3Oavktn2J/E4T+Z1Tws+PyO8Mkd95y244CQ44C/0c9POGGy7I+6LkkuSyAzf4E7e5SNzmipLb/kzkd4nI76oSfgFEfpeJ/K5ZdsMFcMAV6FehXzPccF3eNyQ3JbccuCGQuM0N4ja3ldz2FyK/m0R+d5Tw+0rkd4vI765lN1wHB9yGfgf6XcMN9+R9X/JA8tCBG74Rt7lP3OaRktv+TuT3gMjvsRJ+P4j8HhL5PbHshnvggEfQH0N/YrjhqbyfSZ5LXjhwQxBxm2fEbV4que2fRH7PifxeKeH3i8jvBZHfa8tueAoOeAn9FfTXhhveyPut5J3kvQM3/CZu85a4zQclt/2HyO8dkd9HJfyCifzeE/l9suyGN+CAD9A/Qv9kuMFD3p4SL4m3AzeEELfxJG7jo+S2/xL5eRH5+SrhF0rk503k52fZDR7gAB/ovtD9DDf4y/uzJEAS6MANYeoS/8+euM0XJbcdlsgvgMjvqxJ+4Yj8Aon8vll2gz844Av0r9C/GW74Lu8fkiDJTwduCE/c5gdxm19KbjsCkV8Qkd9vJfwiEvn9JPL7Y9kN38EBv6D/hv7HcEOwvEP+/U0S6sANkYjbhBC3CeOn47YjE/n9JfILq4RfFCK/UCK/cH523RAMDvh36//rYaGH8/uvG8LLO4IkoiSSn303RCVuE8GPt01kJbcdjcgvIpFfFCX8ohP5RSLyi2rZDeHBAZGhR4Ee1XBDNHlHl8SQxHTghhjEbaITt4ml5LZjEvnFIPKLrYRfLCK/mER+cSy7IRo4IBb02NDjGG6IK+94kviSBA7cEJu4TTziNgmV3HYcIr/4RH6JlPCLS+SXgMgvsWU3xAUHJISeCHpiww1J5J1UkkyS3IEb4hG3SUrcJoWS245P5JeMyC+lEn4JiPySE/mlsuyGJOCAFNBTQk9luCG1vNNI0krSOXBDQuI2aYjbpFdy24mI/NIS+WVQwi8xkV86Ir+Mlt2QGhyQHnoG6BkNN2SSd2ZJFklWB25IQtwmM3GbbEpuOymRXxYiv+xK+CUj8stK5JfDshsygQOyQc8OPYfhhpzyziXJLcnjwA3JidvkIm6TV8ltpyDyy03kl08Jv5REfnmI/PJbdkNOcEBe6Pmg5zfcUEDeBSWFJIUduCEVcZuCxG2KKLnt1ER+hYj8iirhl4bIrzCRXzHLbigADigCvSj0YoYbisu7hKSkpJQDN6QlblOCuE1pJbedjsivJJFfGSX80hP5lSLyK2vZDcXBAaWhl4Fe1nBDOXmXl1SQVHTghgzEbcoTt6mk5LYzEvlVIPKrrIRfJiK/ikR+VSy7oRw4oBL0ytCrGG6oKu9qkuqSGg7ckJm4TTXiNjWV3HYWIr/qRH61lPDLSuRXg8ivtmU3VAUH1IReC3ptww115F1XUk9S34EbshG3qUvcpoGS285O5FePyK+hEn45iPzqE/k1suyGOuCABtAbQm9kuKGxvJtImkqaOXBDTuI2TYjbNFdy27mI/JoS+bVQwi83kV8zIr+Wlt3QGBzQHHoL6C0NN7SSd2tJG0lbB27IQ9ymNXGbdkpuOy+RXxsiv/ZK+OUj8mtL5NfBshtagQPaQW8PvYPhho7y7iTpLOniwA35idt0Im7TVcltFyDy60zk100Jv4JEfl2I/LpbdkNHcEBX6N2gdzfc0EPePSW9JL0duKEQcZuexG36KLntwkR+vYj8+irhV4TIrzeRXz/LbugBDugDvS/0foYb+st7gGSgZJADNxQlbjOAuM1gJbddjMhvIJHfECX8ihP5DSLyG2rZDf3BAYOhD4E+1HDDMHkPl4yQjHTghhLEbYYTtxml5LZLEvmNIPIbrYRfKSK/kUR+Yyy7YRg4YBT00dDHGG4YK+9xkvGSCQ7cUJq4zTjiNhOV3HYZIr/xRH6TlPArS+Q3gchvsmU3jAUHTIQ+Cfpkww1T5D1VMk0y3YEbyhG3mUrcZoaS2y5P5DeNyG+mEn4ViPymE/nNsuyGKeCAGdBnQp9luGG2vOdI5krmOXBDReI2c4jbzFdy25WI/OYS+S1Qwq8ykd88Ir+Flt0wGxwwH/oC6AsNNyyS92LJEslSB26oQtxmMXGbZUpuuyqR3xIiv+VK+FUj8ltK5LfCshsWgQOWQV8OfYXhhpXyXiVZLVnjwA3VidusIm6zVslt1yDyW03kt04Jv5pEfmuI/NZbdsNKcMBa6OugrzfcsEHeGyWbJJsduKEWcZuNxG22KLnt2kR+m4j8tirhV4fIbzOR3zbLbtgADtgCfSv0bYYbtst7h2SnZJcDN9QlbrODuM1uJbddj8hvJ5HfHiX86hP57SLy22vZDdvBAbuh74G+13DDPnnvlxyQHHTghgbEbfYTtzmk5LYbEvkdIPI7rIRfIyK/g0R+Ryy7YR844BD0w9CPGG44Ku9jkuOSEw7c0Ji4zTHiNieV3HYTIr/jRH6nlPBrSuR3gsjvtGU3HAUHnIR+Cvppww1n5H1Wck5y3oEbmhG3OUvc5oKS225O5HeOyO+iEn4tiPzOE/ldsuyGM+CAC9AvQr9kuOGyvK9IrkquOXBDS+I2V4jbXFdy262I/K4S+d1Qwq81kd81Ir+blt1wGRxwHfoN6DcNN9yS923JHcldB25oQ9zmNnGbe0puuy2R3x0iv/tK+LUj8rtL5PfAshtugQPuQb8P/YHhhofyfiR5LHniwA3tids8Im7zVMltdyDye0zk90wJv45Efk+I/J5bdsNDcMBT6M+gPzfc8ELeLyWvJK8duKETcZuXxG3eKLntzkR+r4j83irh14XI7zWR3zvLbngBDngD/S30d4Yb3sv7g+Sj5JMDN3QlbvOBuI2HktvuRuT3kcjPUwm/7kR+n4j8vCy74T04wAO6J3Qvww3e8vaR+Er8HLihB3EbH+I2/kpuuyeRny+R32cl/HoR+fkR+QVYdoM3OMAf+mfoAYYbAuX9RfJV8s2BG3oTt/lC3Oa7ktvuQ+T3lcjvhxJ+fYn8vhH5BVl2QyA44Dv0H9CDDDf8lPcvyW/JHwdu6Efc5hdxm2Alt92fyO83kV+IEn4DiPz+EPn9teyGn+CAYOgh0P8abgiVdxj/sGHCSsL523fDQOI2/76btU14fx23PYjILyyRXwQl/AYT+YUj8ovob9cNoeCAf7f+vx4BekT//7ohkrwjS6JIojpwwxDiNpGJ20RTcttDifyiEPlFV8JvGJFfVCK/GJbdEAkcEA16dOgxDDfElHcsSWxJHAduGE7cJhZxm7hKbnsEkV9sIr94SviNJPKLQ+QX37IbYoID4kKPBz2+4YYE8k4oSSRJ7MANo4jbJCRuk0TJbY8m8ktE5JdUCb8xRH6JifySWXZDAnBAEuhJoScz3JBc3ikkKSWpHLhhLHGbFMRtUiu57XFEfimJ/NIo4TeeyC8VkV9ay25IDg5IDT0N9LSGG9LJO70kgySjAzdMIG6TnrhNJiW3PZHILwORX2Yl/CYR+WUk8sti2Q3pwAGZoGeGnsVwQ1Z5Z5Nkl+Rw4IbJxG2yEbfJqeS2pxD5ZSfyy6WE31QivxxEfrktuyErOCAn9FzQcxtuyCPvvJJ8kvwO3DCNuE1e4jYFlNz2dCK/fER+BZXwm0Hkl5/Ir5BlN+QBBxSAXhB6IcMNheVdRFJUUsyBG2YStylC3Ka4ktueReRXlMivhBJ+s4n8ihH5lbTshsLggOLQS0AvabihlLxL//suSVkHbphD3KY0cZtySm57LpFfGSK/8kr4zSPyK0vkV8GyG0qBA8pBLw+9guGGivKuJKksqeLADfOJ21QiblNVyW0vIPKrTORXTQm/hUR+VYj8qlt2Q0VwQFXo1aBXN9xQQ941JbUktR24YRFxm5rEbeooue3FRH61iPzqKuG3hMivNpFfPctuqAEOqAO9LvR6hhvqy7uBpKGkkQM3LCVu04C4TWMlt72MyK8hkV8TJfyWE/k1IvJratkN9cEBjaE3gd7UcEMzeTeXtJC0dOCGFcRtmhO3aaXktlcS+bUg8muthN8qIr+WRH5tLLuhGTigFfTW0NsYbmgr73aS9pIODtywmrhNO+I2HZXc9hoiv/ZEfp2U8FtL5NeByK+zZTe0BQd0hN4JemfDDV3k3VXSTdLdgRvWEbfpStymh5LbXk/k143Ir6cSfhuI/LoT+fWy7IYu4IAe0HtC72W4obe8+0j6Svo5cMNG4jZ9iNv0V3Lbm4j8+hL5DVDCbzORXz8iv4GW3dAbHNAf+gDoAw03DJL3YMkQyVAHbthC3GYwcZthSm57K5HfECK/4Ur4bSPyG0rkN8KyGwaBA4ZBHw59hOGGkfIeJRktGePADduJ24wibjNWyW3vIPIbTeQ3Tgm/nUR+Y4j8xlt2w0hwwFjo46CPN9wwQd4TJZMkkx24YRdxm4nEbaYoue3dRH6TiPymKuG3h8hvMpHfNMtumAAOmAJ9KvRphhumy3uGZKZklgM37CVuM4O4zWwlt72PyG8mkd8cJfz2E/nNIvKba9kN08EBs6HPgT7XcMM8ec+XLJAsdOCGA8Rt5hO3WaTktg8S+S0g8lushN8hIr+FRH5LLLthHjhgEfTF0JcYblgq72WS5ZIVDtxwmLjNMuI2K5Xc9hEiv+VEfquU8DtK5LeCyG+1ZTcsBQeshL4K+mrDDWvkvVayTrLegRuOEbdZS9xmg5LbPk7kt47Ib6MSfieI/NYT+W2y7IY14IAN0DdC32S4YbO8t0i2SrY5cMNJ4jZbiNtsV3Lbp4j8thL57VDC7zSR3zYiv52W3bAZHLAd+g7oOw037JL3bskeyV4HbjhD3GY3cZt9Sm77LJHfHiK//Ur4nSPy20vkd8CyG3aBA/ZB3w/9gOGGg/I+JDksOeLADeeJ2xwibnNUyW1fIPI7TOR3TAm/i0R+R4j8jlt2w0FwwFHox6AfN9xwQt4nJackpx244RJxm5PEbc4oue3LRH6niPzOKuF3hcjvNJHfOctuOAEOOAP9LPRzhhvOy/uC5KLkkgM3XCVuc4G4zWUlt32NyO8ikd8VJfyuE/ldIvK7atkN58EBl6FfgX7VcMM1eV+X3JDcdOCGG8RtrhO3uaXktm8S+d0g8ruthN8tIr+bRH53LLvhGjjgFvTb0O8Ybrgr73uS+5IHDtxwm7jNPeI2D5Xc9h0iv/tEfo+U8LtL5PeAyO+xZTfcBQc8hP4I+mPDDU/k/VTyTPLcgRvuEbd5StzmhZLbvk/k94zI76USfg+I/J4T+b2y7IYn4IAX0F9Cf2W44bW830jeSt45cMND4jZviNu8V3Lbj4j83hL5fVDC7zGR3zsiv4+W3fAaHPAe+gfoHw03fJK3h8RT4uXADU+I23gQt/FWcttPifw8ifx8lPB7RuTnReTna9kNn8AB3tB9oPsabvCTt7/ksyTAgRueE7fxJ24TqOS2XxD5fSby+6KE30sivwAiv6+W3eAHDgiE/gX6V8MN3+T9XfJDEuTADa+I23wnbvNTyW2/JvL7QeT3Swm/N0R+QUR+vy274Rs44Cf0X9B/G274I+9gSci/vztww1viNsHEbUKV3PY7Ir8QIr8wn3Xwe0/k95fIL+xnu274Aw4Ihf5vt//1sJ//64Zw8g4viSCJ+Nm+Gz4Qtwn/mbdNJCW3/ZHILwKRX2Ql/D4R+UUk8oti2Q3hwAGRoEeGHsVwQ1R5R5NEl8Rw4AYP4jbRiNvEVHLbnkR+0Yn8Yinh50XkF4PIL7ZlN0QFB8SEHgt6bMMNceQdVxJPEt+BG7yJ28QlbpNAyW37EPnFI/JLqISfL5FffCK/RJbdEAcckAB6QuiJDDcklncSSVJJMgdu8CNuk4S4TXIlt+1P5JeUyC+FEn6fifySEfmltOyGxOCA5NBTQE9puCGVvFNL0kjSOnBDAHGb1MRt0im57UAivzREfumV8PtC5JeWyC+DZTekAgekg54eegbDDRnlnUmSWZLFgRu+ErfJRNwmq5Lb/kbkl5nIL5sSft+J/LIQ+WW37IaM4ICs0LNBz264IYe8c0pySXI7cMMP4jY5idvkUXLbQUR+uYj88irh95PILzeRXz7LbsgBDsgDPS/0fIYb8su7gKSgpJADN/wiblOAuE1hJbf9m8ivIJFfESX8/hD5FSLyK2rZDfnBAYWhF4Fe1HBDMXkXl5SQlHTghmDiNsWJ25RSctshRH4liPxKK+H3l8ivJJFfGctuKAYOKAW9NPQyhhvKyrucpLykggM3hBK3KUfcpqKS2w5Tj/db5Yn8KinhF5bIrwKRX2XLbigLDqgIvRL0yoYbqsi7qqSapLoDN4QjblOVuE0NJbcdnsivGpFfTSX8IhD5VSfyq2XZDVXAATWg14Rey3BDbXnXkdSV1HPghojEbeoQt6mv5LYjEfnVJfJroIRfZCK/ekR+DS27oTY4oD70BtAbGm5oJO/GkiaSpg7cEIW4TWPiNs2U3HZUIr8mRH7NlfCLRuTXlMivhWU3NAIHNIPeHHoLww0t5d1K0lrSxoEbohO3aUXcpq2S245B5NeayK+dEn4xifzaEPm1t+yGluCAttDbQW9vuKGDvDtKOkk6O3BDLOI2HYnbdFFy27GJ/DoR+XVVwi8OkV9nIr9ult3QARzQBXpX6N0MN3SXdw9JT0kvB26IS9ymB3Gb3kpuOx6RX08ivz5K+MUn8utF5NfXshu6gwN6Q+8Dva/hhn7y7i8ZIBnowA0JiNv0J24zSMltJyTyG0DkN1gJv0REfgOJ/IZYdkM/cMAg6IOhDzHcMFTewyTDJSMcuCExcZthxG1GKrntJER+w4n8Rinhl5TIbwSR32jLbhgKDhgJfRT00YYbxsh7rGScZLwDNyQjbjOWuM0EJbednMhvHJHfRCX8UhD5jSfym2TZDWPAAROgT4Q+yXDDZHlPkUyVTHPghpTEbaYQt5mu5LZTEflNJfKboYRfaiK/aUR+My27YTI4YDr0GdBnGm6YJe/ZkjmSuQ7ckIa4zWziNvOU3HZaIr85RH7zlfBLR+Q3l8hvgWU3zAIHzIM+H/oCww0L5b1IsliyxIEb0hO3WUTcZqmS285A5LeYyG+ZEn4ZifyWEPktt+yGheCApdCXQV9uuGGFvFdKVklWO3BDJuI2K4nbrFFy25mJ/FYR+a1Vwi8Lkd9qIr91lt2wAhywBvpa6OsMN6yX9wbJRskmB27IStxmA3GbzUpuOxuR30Yivy1K+GUn8ttE5LfVshvWgwM2Q98Cfavhhm3y3i7ZIdnpwA05iNtsJ26zS8lt5yTy20Hkt1sJv1xEfjuJ/PZYdsM2cMAu6Luh7zHcsFfe+yT7JQccuCE3cZt9xG0OKrntPER++4n8Dinhl5fI7wCR32HLbtgLDjgI/RD0w4Ybjsj7qOSY5LgDN+QjbnOUuM0JJbedn8jvGJHfSSX8ChD5HSfyO2XZDUfAASegn4R+ynDDaXmfkZyVnHPghoLEbc4Qtzmv5LYLEfmdJfK7oIRfYSK/c0R+Fy274TQ44Dz0C9AvGm64JO/LkiuSqw7cUIS4zWXiNteU3HZRIr8rRH7XlfArRuR3lcjvhmU3XAIHXIN+HfoNww035X1Lcltyx4EbihO3uUXc5q6S2y5B5HebyO+eEn4lifzuEPndt+yGm+CAu9DvQb9vuOGBvB9KHkkeO3BDKeI2D4nbPFFy26WJ/B4R+T1Vwq8Mkd9jIr9nlt3wABzwBPpT6M8MNzyX9wvJS8krB24oS9zmBXGb10puuxyR30sivzdK+JUn8ntF5PfWshuegwNeQ38D/a3hhnfyfi/5IPnowA0ViNu8J27zScltVyTy+0Dk56GEXyUiv49Efp6W3fAOHPAJugd0T8MNXvL2lvhIfB24oTJxG2/iNn5KbrsKkZ8PkZ+/En5Vifx8ifw+W3aDFzjAD7o/9M+GGwLkHSj5IvnqwA3ViNsEErf5puS2qxP5fSHy+66EXw0iv69Efj8suyEAHPAN+nfoPww3BMn7p+SX5LcDN9QkbvOTuM0fJbddi8jvF5FfsBJ+tYn8fhP5hVh2QxA44A/0YOghhhv+yjtUEiYgbJiwAfbdUIe4TShxm3ABOm67LpFfmAAev/BK+NUj8gtL5BchwK4b/oID/t36/3p46BEC/uuGiPKOJIksieLADfWJ20QibhNVyW03IPKLTOQXTQm/hkR+UYj8olt2Q0RwQFTo0aBHN9wQQ94xJbEksR24oRFxm5jEbeIoue3GRH6xiPziKuHXhMgvNpFfPMtuiAEOiAM9LvR4hhviyzuBJKEkkQM3NCVuk4C4TWIlt92MyC8hkV8SJfyaE/klIvJLatkN8cEBiaEngZ7UcEMyeSeXpJCkdOCGFsRtkhO3SaXktlsS+aUg8kuthF8rIr+URH5pLLshGTggFfTU0NMYbkgr73SS9JIMDtzQmrhNOuI2GZXcdhsiv/REfpmU8GtL5JeByC+zZTekBQdkhJ4JembDDVnknVWSTZLdgRvaEbfJStwmh5Lbbk/kl43IL6cSfh2I/LIT+eWy7IYs4IAc0HNCz2W4Ibe880jySvI5cENH4jZ5iNvkV3LbnYj88hL5FVDCrzORXz4iv4KW3ZAbHJAfegHoBQ03FJJ3YUkRSVEHbuhC3KYwcZtiSm67K5FfESK/4kr4dSPyK0rkV8KyGwqBA4pBLw69hOGGkvIuJSn979scuKE7cZtSxG3KKrntHkR+pYn8yinh15PIrwyRX3nLbigJDigLvRz08oYbKsi7oqSSpLIDN/QiblORuE0VJbfdm8ivEpFfVSX8+hD5VSbyq2bZDRXAAVWgV4VezXBDdXnXkNSU1HLghr7EbWoQt6mt5Lb7EfnVJPKro4RffyK/WkR+dS27oTo4oDb0OtDrGm6oJ+/6kgaShg7cMIC4TX3iNo2U3PZAIr8GRH6NlfAbROTXkMiviWU31AMHNILeGHoTww1N5d1M0lzSwoEbBhO3aUbcpqWS2x5C5NecyK+VEn5DifxaEPm1tuyGpuCAltBbQW9tuKGNvNtK2knaO3DDMOI2bYnbdFBy28OJ/NoR+XVUwm8EkV97Ir9Olt3QBhzQAXpH6J0MN3SWdxdJV0k3B24YSdymC3Gb7kpuexSRX1civx5K+I0m8utG5NfTshs6gwO6Q+8Bvafhhl7y7i3pI+nrwA1jiNv0Jm7TT8ltjyXy60Pk118Jv3FEfn2J/AZYdkMvcEA/6P2hDzDcMFDegySDJUMcuGE8cZtBxG2GKrntCUR+g4n8hinhN5HIbwiR33DLbhgIDhgKfRj04YYbRsh7pGSUZLQDN0wibjOSuM0YJbc9mchvFJHfWCX8phD5jSbyG2fZDSPAAWOgj4U+znDDeHlPkEyUTHLghqnEbSYQt5ms5LanEflNJPKbooTfdCK/SUR+Uy27YTw4YDL0KdCnGm6YJu/pkhmSmQ7cMIO4zXTiNrOU3PZMIr8ZRH6zlfCbReQ3k8hvjmU3TAMHzII+G/ocww1z5T1PMl+ywIEbZhO3mUfcZqGS255D5DefyG+REn5zifwWEPkttuyGueCAhdAXQV9suGGJvJdKlkmWO3DDPOI2S4nbrFBy2/OJ/JYR+a1Uwm8Bkd9yIr9Vlt2wBBywAvpK6KsMN6yW9xrJWsk6B25YSNxmDXGb9UpuexGR31oivw1K+C0m8ltH5LfRshtWgwPWQ98AfaPhhk3y3izZItnqwA1LiNtsJm6zTcltLyXy20Lkt10Jv2VEfluJ/HZYdsMmcMA26Nuh7zDcsFPeuyS7JXscuGE5cZtdxG32KrntFUR+u4n89inht5LIbw+R337LbtgJDtgLfR/0/YYbDsj7oOSQ5LADN6wibnOQuM0RJbe9msjvEJHfUSX81hD5HSbyO2bZDQfAAUegH4V+zHDDcXmfkJyUnHLghrXEbU4Qtzmt5LbXEfmdJPI7o4TfeiK/U0R+Zy274Tg44DT0M9DPGm44J+/zkguSiw7csIG4zXniNpeU3PZGIr8LRH6XlfDbROR3kcjvimU3nAMHXIJ+GfoVww1X5X1Ncl1yw4EbNhO3uUbc5qaS295C5HedyO+WEn5bifxuEPndtuyGq+CAm9BvQb9tuOGOvO9K7knuO3DDNuI2d4nbPFBy29uJ/O4R+T1Uwm8Hkd99Ir9Hlt1wBxzwAPpD6I8MNzyW9xPJU8kzB27YSdzmCXGb50puexeR31MivxdK+O0m8ntG5PfSshsegwOeQ38B/aXhhlfyfi15I3nrwA17iNu8Jm7zTslt7yXye0Pk914Jv31Efm+J/D5YdsMrcMA76O+hfzDc8FHenyQeEk8HbthP3OYTcRsvJbd9gMjPg8jPWwm/g0R+nkR+Ppbd8BEc4AXdG7qP4QZfeftJ/CWfHbjhEHEbP+I2AUpu+zCRnz+RX6ASfkeI/D4T+X2x7AZfcEAA9EDoXww3fJX3N8l3yQ8HbjhK3OYbcZsgJbd9jMjvO5HfTyX8jhP5/SDy+2XZDV/BAUHQf0L/Zbjht7z/SIIlIQ7ccIK4zR/iNn+V3PZJIr9gIr9QJfxOEfmFEPmFCbTrht/ggL/QQ6H/+wZ0Q1h5h5OEl0QItO+G08RtwgXytokYqOO2zxD5hSfyi6SE31kivwhEfpEtuyFs4P87ICL0SNAjG26IIu+okmiS6A7ccI64TVTiNjGU3PZ5Ir9oRH4xlfC7QOQXncgvlmU3RAEHxIAeE3osww2x5R1HElcSz4EbLhK3iUPcJr6S275E5BeXyC+BEn6XifziEfkltOyG2OCA+NATQE9ouCGRvBNLkkiSOnDDFeI2iYnbJFNy21eJ/JIQ+SVXwu8akV9SIr8Ult2QCByQDHpy6CkMN6SUdypJakkaB264TtwmFXGbtEpu+waRX2oiv3RK+N0k8ktD5JfeshtSggPSQk8HPb3hhgzyzijJJMnswA23iNtkJG6TRclt3ybyy0Tkl1UJvztEfpmJ/LJZdkMGcEAW6FmhZzPckF3eOSQ5JbkcuOEucZscxG1yK7nte0R+OYn88ijhd5/ILxeRX17LbsgODsgNPQ/0vIYb8sk7v6SApKADNzwgbpOfuE0hJbf9kMivAJFfYSX8HhH5FSTyK2LZDfnAAYWgF4ZexHBDUXkXkxSXlHDghsfEbYoRtymp5LafEPkVJ/IrpYTfUyK/EkR+pS27oSg4oCT0UtBLG24oI++yknKS8g7c8Iy4TVniNhWU3PZzIr9yRH4VlfB7QeRXnsivkmU3lAEHVIBeEXolww2V5V1FUlVSzYEbXhK3qULcprqS235F5FeVyK+GEn6vifyqEfnVtOyGyuCA6tBrQK9puKGWvGtL6kjqOnDDG+I2tYnb1FNy22+J/OoQ+dVXwu8dkV9dIr8Glt1QCxxQD3p96A0MNzSUdyNJY0kTB254T9ymEXGbpkpu+wORX2Miv2ZK+H0k8mtC5NfcshsaggOaQm8GvbnhhhbybilpJWntwA2fiNu0JG7TRsltexD5tSLya6uEnyeRX2siv3aW3dACHNAGelvo7Qw3tJd3B0lHSScHbvAibtOBuE1nJbftTeTXkcivixJ+PkR+nYj8ulp2Q3twQGfoXaB3NdzQTd7dJT0kPR24wZe4TXfiNr2U3LYfkV8PIr/eSvj5E/n1JPLrY9kN3cABvaD3ht7HcENfefeT9JcMcOCGz8Rt+hG3GajktgOI/PoT+Q1Swi+QyG8Akd9gy27oCw4YCH0Q9MGGG4bIe6hkmGS4Azd8IW4zlLjNCCW3/ZXIbxiR30gl/L4R+Q0n8htl2Q1DwAEjoI+EPspww2h5j5GMlYxz4IbvxG3GELcZr+S2fxD5jSXym6CEXxCR3zgiv4mW3TAaHDAe+gToEw03TJL3ZMkUyVQHbvhJ3GYycZtpSm77F5HfFCK/6Ur4/Sbym0rkN8OyGyaBA6ZBnw59huGGmfKeJZktmePADX+I28wibjNXyW0HE/nNJvKbp4RfCJHfHCK/+ZbdMBMcMBf6POjzDTcskPdCySLJYgdu+EvcZiFxmyVKbjuUyG8Rkd9SJfzC1Of91mIiv2WW3bAAHLAE+lLoyww3LJf3CslKySoHbghL3GYFcZvVSm47HJHfSiK/NUr4hSfyW0Xkt9ayG5aDA1ZDXwN9reGGdfJeL9kg2ejADRGI26wnbrNJyW1HJPLbQOS3WQm/SER+G4n8tlh2wzpwwCbom6FvMdywVd7bJNslOxy4ITJxm23EbXYque0oRH7bifx2KeEXlchvB5Hfbstu2AoO2Al9F/Tdhhv2yHuvZJ9kvwM3RCNus5e4zQEltx2dyG8fkd9BJfxiEPntJ/I7ZNkNe8ABB6AfhH7IcMNheR+RHJUcc+CGmMRtjhC3Oa7ktmMR+R0l8juhhF9sIr9jRH4nLbvhMDjgOPQT0E8abjgl79OSM5KzDtwQh7jNaeI255TcdlwivzNEfueV8ItH5HeWyO+CZTecAgecg34e+gXDDRflfUlyWXLFgRviE7e5RNzmqpLbTkDkd5nI75oSfgmJ/K4Q+V237IaL4ICr0K9Bv2644Ya8b0puSW47cEMi4jY3idvcUXLbiYn8bhH53VXCLwmR320iv3uW3XADHHAH+l3o9ww33Jf3A8lDySMHbkhK3OYBcZvHSm47GZHfQyK/J0r4JSfye0Tk99SyG+6DAx5DfwL9qeGGZ/J+LnkheenADSmI2zwnbvNKyW2nJPJ7QeT3Wgm/VER+L4n83lh2wzNwwCvor6G/MdzwVt7vJO8lHxy4ITVxm3fEbT4que00RH7vifw+KeGXlsjvA5Gfh2U3vAUHfIT+CbqH4QZPeXtJvCU+DtyQjriNF3EbXyW3nZ7Iz5vIz08JvwxEfj5Efv6W3eAJDvCF7gfd33DDZ3kHSAIlXxy4ISNxmwDiNl+V3HYmIr9AIr9vSvhlJvL7QuT33bIbPoMDvkL/Bv274YYf8g6S/JT8cuCGLMRtgojb/FZy21mJ/H4S+f1Rwi8bkd8vIr9gy274AQ74Df0P9GDDDSH/3pJQSZgv9t2QnbjNX+I2Yb/ouO0cRH6hRH7hlPDLSeQX5guPX/gvdt0QAg74d+v/6+Ggh//yXzdEkHdESSRJZAduyEXcJiJxmyhKbjs3kV8kIr+oSvjlIfKLTOQXzbIbIoADokCPCj2a4Ybo8o4hiSmJ5cANeYnbxCBuE1vJbecj8otJ5BdHCb/8RH6xiPziWnZDdHBAbOhxoMc13BBP3vElCSQJHbihAHGb+MRtEim57YJEfgmI/BIr4VeIyC8hkV8Sy26IBw5IBD0x9CSGG5LKO5kkuSSFAzcUJm6TjLhNSiW3XYTILzmRXyol/IoS+aUg8ktt2Q1JwQEpoaeCntpwQxp5p5Wkk6R34IZixG3SErfJoOS2ixP5pSPyy6iEXwkiv/REfpksuyENOCAD9IzQMxluyCzvLJKskmwO3FCSuE0W4jbZldx2KSK/rER+OZTwK03kl43IL6dlN2QGB2SHngN6TsMNueSdW5JHkteBG8oQt8lN3CafktsuS+SXh8gvvxJ+5Yj88hL5FbDshlzggHzQ80MvYLihoLwLSQpLijhwQ3niNoWI2xRVctsViPwKE/kVU8KvIpFfESK/4pbdUBAcUBR6MejFDTeUkHdJSSlJaQduqETcpiRxmzJKbrsykV8pIr+ySvhVIfIrTeRXzrIbSoADykAvC72c4Yby8q4gqSip5MANVYnbVCBuU1nJbVcj8qtI5FdFCb/qRH6ViPyqWnZDeXBAZehVoFc13FBN3tUlNSQ1HbihBnGb6sRtaim57ZpEfjWI/Gor4VeLyK8mkV8dy26oBg6oBb029DqGG+rKu56kvqSBAzfUJm5Tj7hNQyW3XYfIrz6RXyMl/OoS+TUg8mts2Q11wQENoTeC3thwQxN5N5U0kzR34IZ6xG2aErdpoeS26xP5NSPya6mEXwMiv+ZEfq0su6EJOKAF9JbQWxluaC3vNpK2knYO3NCQuE0b4jbtldx2IyK/tkR+HZTwa0zk147Ir6NlN7QGB7SH3gF6R8MNneTdWdJF0tWBG5oQt+lM3KabkttuSuTXhcivuxJ+zYj8uhL59bDshk7ggG7Qu0PvYbihp7x7SXpL+jhwQ3PiNr2I2/RVctstiPx6E/n1U8KvJZFfHyK//pbd0BMc0Bd6P+j9DTcMkPdAySDJYAduaEXcZiBxmyFKbrs1kd8gIr+hSvi1IfIbTOQ3zLIbBoADhkAfCn2Y4Ybh8h4hGSkZ5cANbYnbjCBuM1rJbbcj8htJ5DdGCb/2RH6jiPzGWnbDcHDAaOhjoI813DBO3uMlEyQTHbihA3Gb8cRtJim57Y5EfhOI/CYr4deJyG8ikd8Uy24YBw6YBH0y9CmGG6bKe5pkumSGAzd0Jm4zjbjNTCW33YXIbzqR3ywl/LoS+c0g8ptt2Q1TwQEzoc+CPttwwxx5z5XMk8x34IZuxG3mErdZoOS2uxP5zSPyW6iEXw8iv/lEfossu2EOOGAB9IXQFxluWCzvJZKlkmUO3NCTuM0S4jbLldx2LyK/pUR+K5Tw603kt4zIb6VlNywGByyHvgL6SsMNq+S9WrJGstaBG/oQt1lN3GadktvuS+S3hshvvRJ+/Yj81hL5bbDshlXggHXQ10PfYLhho7w3STZLtjhwQ3/iNpuI22xVctsDiPw2E/ltU8JvIJHfFiK/7ZbdsBEcsBX6NujbDTfskPdOyS7JbgduGETcZidxmz1Kbnswkd8uIr+9SvgNIfLbTeS3z7IbdoAD9kDfC32f4Yb98j4gOSg55MANQ4nbHCBuc1jJbQ8j8jtI5HdECb/hRH6HiPyOWnbDfnDAYehHoB813HBM3sclJyQnHbhhBHGb48RtTim57ZFEfieI/E4r4TeKyO8kkd8Zy244Bg44Bf009DOGG87K+5zkvOSCAzeMJm5zjrjNRSW3PYbI7zyR3yUl/MYS+V0g8rts2Q1nwQEXoV+CftlwwxV5X5Vck1x34IZxxG2uEre5oeS2xxP5XSPyu6mE3wQiv+tEfrcsu+EKOOAG9JvQbxluuC3vO5K7knsO3DCRuM0d4jb3ldz2JCK/u0R+D5Twm0zkd4/I76FlN9wGB9yH/gD6Q8MNj+T9WPJE8tSBG6YQt3lM3OaZktueSuT3hMjvuRJ+04j8nhL5vbDshkfggGfQn0N/YbjhpbxfSV5L3jhww3TiNq+I27xVctsziPxeE/m9U8JvJpHfGyK/95bd8BIc8Bb6O+jvDTd8kPdHySeJhwM3zCJu85G4jaeS255N5PeJyM9LCb85RH4eRH7elt3wARzgCd0LurfhBh95+0r8JP4O3DCXuI0vcZvPSm57HpGfH5FfgBJ+84n8/In8Ai27wQcc8Bl6APRAww1f5P1V8k3y3YEbFhC3+Urc5oeS215I5PeNyC9ICb9FRH7fifx+WnbDF3DAD+hB0H8abvgl79+SP5JgB25YTNzmN3GbECW3vYTI7w+R318l/JYS+QUT+YVadsMvcEAI9L/QQw03hPkaNkxYSThJ+K/23bCMuM2/72ZtE+GrjtteTuQXjsgvohJ+K4j8whP5Rfpq1w3//p3/zwERoEeEHunrf90QWd5RJFEl0Ry4YSVxmyjEbaIrue1VRH5RifxiKOG3msgvGpFfTMtuiAwOiA49BvSYhhtiyTu2JI4krgM3rCFuE5u4TTwlt72WyC8OkV98JfzWEfnFJfJLYNkNscAB8aDHh57AcENCeSeSJJYkceCG9cRtEhG3SarktjcQ+SUm8kumhN9GIr8kRH7JLbshITggKfRk0JMbbkgh75SSVJLUDtywibhNSuI2aZTc9mYiv1REfmmV8NtC5JeayC+dZTekAAekgZ4WejrDDenlnUGSUZLJgRu2ErfJQNwms5Lb3kbkl5HIL4sSftuJ/DIR+WW17Ib04IDM0LNAz2q4IZu8s0tySHI6cMMO4jbZidvkUnLbO4n8chD55VbCbxeRX04ivzyW3ZANHJALem7oeQw35JV3Pkl+SQEHbthN3CYfcZuCSm57D5FffiK/Qkr47SXyK0DkV9iyG/KCAwpCLwS9sOGGIvIuKikmKe7ADfuI2xQlblNCyW3vJ/IrRuRXUgm/A0R+xYn8Sll2QxFwQAnoJaGXMtxQ+t83ScpKyjlww0HiNmWI25RXctuHiPzKEvlVUMLvMJFfOSK/ipbdUBocUB56BegVDTdUkndlSRVJVQduOELcpjJxm2pKbvsokV8VIr/qSvgdI/KrSuRXw7IbKoEDqkGvDr2G4Yaa8q4lqS2p48ANx4nb1CJuU1fJbZ8g8qtN5FdPCb+TRH51iPzqW3ZDTXBAXej1oNc33NBA3g0ljSSNHbjhFHGbhsRtmii57dNEfo2I/Joq4XeGyK8xkV8zy25oAA5oAr0p9GaGG5rLu4WkpaSVAzecJW7TgrhNayW3fY7IryWRXxsl/M4T+bUi8mtr2Q3NwQGtobeB3tZwQzt5t5d0kHR04IYLxG3aE7fppOS2LxL5dSDy66yE3yUiv45Efl0su6EdOKAT9M7Quxhu6CrvbpLukh4O3HCZuE034jY9ldz2FSK/7kR+vZTwu0rk14PIr7dlN3QFB/SE3gt6b8MNfeTdV9JP0t+BG64Rt+lL3GaAktu+TuTXj8hvoBJ+N4j8+hP5DbLshj7ggAHQB0IfZLhhsLyHSIZKhjlww03iNkOI2wxXctu3iPyGEvmNUMLvNpHfMCK/kZbdMBgcMBz6COgjDTeMkvdoyRjJWAduuEPcZjRxm3FKbvsukd8YIr/xSvjdI/IbS+Q3wbIbRoEDxkEfD32C4YaJ8p4kmSyZ4sAN94nbTCJuM1XJbT8g8ptM5DdNCb+HRH5TiPymW3bDRHDAVOjToE833DBD3jMlsySzHbjhEXGbmcRt5ii57cdEfrOI/OYq4feEyG82kd88y26YAQ6YA30u9HmGG+bLe4FkoWSRAzc8JW6zgLjNYiW3/YzIbyGR3xIl/J4T+S0i8ltq2Q3zwQGLoS+BvtRwwzJ5L5eskKx04IYXxG2WE7dZpeS2XxL5rSDyW62E3ysiv5VEfmssu2EZOGAV9NXQ1xhuWCvvdZL1kg0O3PCauM064jYbldz2GyK/9UR+m5Twe0vkt4HIb7NlN6wFB2yEvgn6ZsMNW+S9VbJNst2BG94Rt9lK3GaHktt+T+S3jchvpxJ+H4j8thP57bLshi3ggB3Qd0LfZbhht7z3SPZK9jlww0fiNnuI2+xXctufiPz2EvkdUMLPg8hvH5HfQctu2A0O2A/9APSDhhsOyfuw5IjkqAM3eBK3OUzc5piS2/Yi8jtC5HdcCT9vIr+jRH4nLLvhEDjgGPTj0E8Ybjgp71OS05IzDtzgQ9zmFHGbs0pu25fI7zSR3zkl/PyI/M4Q+Z237IaT4ICz0M9BP2+44YK8L0ouSS47cIM/cZuLxG2uKLntz0R+l4j8rirhF0Dkd5nI75plN1wAB1yBfhX6NcMN1+V9Q3JTcsuBGwKJ29wgbnNbyW1/IfK7SeR3Rwm/r0R+t4j87lp2w3VwwG3od6DfNdxwT973JQ8kDx244Rtxm/vEbR4pue3vRH4PiPweK+H3g8jvIZHfE8tuuAcOeAT9MfQnhhueyvuZ5LnkhQM3BBG3eUbc5qWS2/5J5PecyO+VEn6/iPxeEPm9tuyGp+CAl9BfQX9tuOGNvN9K3kneO3DDb+I2b4nbfFBy23+I/N4R+X1Uwi+YyO89kd8ny254Aw74AP0j9E+GGzzk7Snxkng7cEMIcRtP4jY+Sm77L5GfF5GfrxJ+oUR+3kR+fpbd4AEO8IHuC93PcIO/vD9LAiSBDtwQpgHx/+yJ23xRctthifwCiPy+KuEXjsgvkMjvm2U3+IMDvkD/Cv2b4Ybv8v4hCZL8dOCG8MRtfhC3+aXktiMQ+QUR+f1Wwi8ikd9PIr8/lt3wHRzwC/pv6H8MNwTLO+Tf3yShDtwQibhNCHGbMN903HZkIr+/RH5hlfCLQuQXSuQX7ptdNwSDA/7d+v96WOjhvv3XDeHlHUESURLpm303RCVuE+Ebb5vISm47GpFfRCK/KEr4RSfyi0TkF9WyG8KDAyJDjwI9quGGaPKOLokhienADTGI20QnbhNLyW3HJPKLQeQXWwm/WER+MYn84lh2QzRwQCzosaHHMdwQV97xJPElCRy4ITZxm3jEbRIque04RH7xifwSKeEXl8gvAZFfYstuiAsOSAg9EfTEhhuSyDupJJkkuQM3xCNuk5S4TQoltx2fyC8ZkV9KJfwSEPklJ/JLZdkNScABKaCnhJ7KcENqeaeRpJWkc+CGhMRt0hC3Sa/kthMR+aUl8sughF9iIr90RH4ZLbshNTggPfQM0DMabsgk78ySLJKsDtyQhLhNZuI22ZTcdlIivyxEftmV8EtG5JeVyC+HZTdkAgdkg54deg7DDTnlnUuSW5LHgRuSE7fJRdwmr5LbTkHkl5vIL58SfimJ/PIQ+eW37Iac4IC80PNBz2+4oYC8C0oKSQo7cEMq4jYFidsUUXLbqYn8ChH5FVXCLw2RX2Eiv2KW3VAAHFAEelHoxQw3FJd3CUlJSSkHbkhL3KYEcZvSSm47HZFfSSK/Mkr4pSfyK0XkV9ayG4qDA0pDLwO9rOGGcvIuL6kgqejADRmI25QnblNJyW1nJPKrQORXWQm/TER+FYn8qlh2QzlwQCXolaFXMdxQVd7VJNUlNRy4ITNxm2rEbWoque0sRH7VifxqKeGXlcivBpFfbctuqAoOqAm9FvTahhvqyLuupJ6kvgM3ZCNuU5e4TQMlt52dyK8ekV9DJfxyEPnVJ/JrZNkNdcABDaA3hN7IcENjeTeRNJU0c+CGnMRtmhC3aa7ktnMR+TUl8muhhF9uIr9mRH4tLbuhMTigOfQW0Fsabmgl79aSNpK2DtyQh7hNa+I27ZTcdl4ivzZEfu2V8MtH5NeWyK+DZTe0Age0g94eegfDDR3l3UnSWdLFgRvyE7fpRNymq5LbLkDk15nIr5sSfgWJ/LoQ+XW37IaO4ICu0LtB7264oYe8e0p6SXo7cEMh4jY9idv0UXLbhYn8ehH59VXCrwiRX28iv36W3dADHNAHel/o/Qw39Jf3AMlAySAHbihK3GYAcZvBSm67GJHfQCK/IUr4FSfyG0TkN9SyG/qDAwZDHwJ9qOGGYfIeLhkhGenADSWI2wwnbjNKyW2XJPIbQeQ3Wgm/UkR+I4n8xlh2wzBwwCjoo6GPMdwwVt7jJOMlExy4oTRxm3HEbSYque0yRH7jifwmKeFXlshvApHfZMtuGAsOmAh9EvTJhhumyHuqZJpkugM3lCNuM5W4zQwlt12eyG8akd9MJfwqEPlNJ/KbZdkNU8ABM6DPhD7LcMNsec+RzJXMc+CGisRt5hC3ma/ktisR+c0l8lughF9lIr95RH4LLbthNjhgPvQF0Bcablgk78WSJZKlDtxQhbjNYuI2y5TcdlUivyVEfsuV8KtG5LeUyG+FZTcsAgcsg74c+grDDSvlvUqyWrLGgRuqE7dZRdxmrZLbrkHkt5rIb50SfjWJ/NYQ+a237IaV4IC10NdBX2+4YYO8N0o2STY7cEMt4jYbidtsUXLbtYn8NhH5bVXCrw6R32Yiv22W3bABHLAF+lbo2ww3bJf3DslOyS4HbqhL3GYHcZvdSm67HpHfTiK/PUr41Sfy20Xkt9eyG7aDA3ZD3wN9r+GGffLeLzkgOejADQ2I2+wnbnNIyW03JPI7QOR3WAm/RkR+B4n8jlh2wz5wwCHoh6EfMdxwVN7HJMclJxy4oTFxm2PEbU4que0mRH7HifxOKeHXlMjvBJHfactuOAoOOAn9FPTThhvOyPus5JzkvAM3NCNuc5a4zQUlt92cyO8ckd9FJfxaEPmdJ/K7ZNkNZ8ABF6BfhH7JcMNleV+RXJVcc+CGlsRtrhC3ua7ktlsR+V0l8ruhhF9rIr9rRH43LbvhMjjgOvQb0G8abrgl79uSO5K7DtzQhrjNbeI295TcdlsivztEfveV8GtH5HeXyO+BZTfcAgfcg34f+gPDDQ/l/UjyWPLEgRvaE7d5RNzmqZLb7kDk95jI75kSfh2J/J4Q+T237IaH4ICn0J9Bf2644YW8X0peSV47cEMn4jYvidu8UXLbnYn8XhH5vVXCrwuR32siv3eW3fACHPAG+lvo7ww3vJf3B8lHyScHbuhK3OYDcRsPJbfdjcjvI5GfpxJ+3Yn8PhH5eVl2w3twgAd0T+hehhu85e0j8ZX4OXBDD+I2PsRt/JXcdk8iP18iv89K+PUi8vMj8guw7AZvcIA/9M/QAww3BMr7i+Sr5JsDN/QmbvOFuM13Jbfdh8jvK5HfDyX8+hL5fSPyC7LshkBwwHfoP6AHGW74Ke9fkt+SPw7c0I+4zS/iNsFKbrs/kd9vIr8QJfwGEPn9IfL7a9kNP8EBwdBDoP813BAq7zDfw4YJKwn33b4bBhK3+ffdrG3Cf9dx24OI/MIS+UVQwm8wkV84Ir+I3+26IRQc8O/W/9cjQI/4/b9uiCTvyJIokqgO3DCEuE1k4jbRlNz2UCK/KER+0ZXwG0bkF5XIL4ZlN0QCB0SDHh16DMMNMeUdSxJbEseBG4YTt4lF3CauktseQeQXm8gvnhJ+I4n84hD5xbfshpjggLjQ40GPb7ghgbwTShJJEjtwwyjiNgmJ2yRRctujifwSEfklVcJvDJFfYiK/ZJbdkAAckAR6UujJDDckl3cKSUpJKgduGEvcJgVxm9RKbnsckV9KIr80SviNJ/JLReSX1rIbkoMDUkNPAz2t4YZ08k4vySDJ6MANE4jbpCduk0nJbU8k8stA5JdZCb9JRH4ZifyyWHZDOnBAJuiZoWcx3JBV3tkk2SU5HLhhMnGbbMRtciq57SlEftmJ/HIp4TeVyC8HkV9uy27ICg7ICT0X9NyGG/LIO68knyS/AzdMI26Tl7hNASW3PZ3ILx+RX0El/GYQ+eUn8itk2Q15wAEFoBeEXshwQ2F5F5EUlRRz4IaZxG2KELcpruS2ZxH5FSXyK6GE32wiv2JEfiUtu6EwOKA49BLQSxpuKCXv0v++S1LWgRvmELcpTdymnJLbnkvkV4bIr7wSfvOI/MoS+VWw7IZS4IBy0MtDr2C4oaK8K0kqS6o4cMN84jaViNtUVXLbC4j8KhP5VVPCbyGRXxUiv+qW3VARHFAVejXo1Q031JB3TUktSW0HblhE3KYmcZs6Sm57MZFfLSK/ukr4LSHyq03kV8+yG2qAA+pArwu9nuGG+vJuIGkoaeTADUuJ2zQgbtNYyW0vI/JrSOTXRAm/5UR+jYj8mlp2Q31wQGPoTaA3NdzQTN7NJS0kLR24YQVxm+bEbVopue2VRH4tiPxaK+G3isivJZFfG8tuaAYOaAW9NfQ2hhvayrudpL2kgwM3rCZu0464TUclt72GyK89kV8nJfzWEvl1IPLrbNkNbcEBHaF3gt7ZcEMXeXeVdJN0d+CGdcRtuhK36aHkttcT+XUj8uuphN8GIr/uRH69LLuhCzigB/Se0HsZbugt7z6SvpJ+DtywkbhNH+I2/ZXc9iYiv75EfgOU8NtM5NePyG+gZTf0Bgf0hz4A+kDDDYPkPVgyRDLUgRu2ELcZTNxmmJLb3krkN4TIb7gSftuI/IYS+Y2w7IZB4IBh0IdDH2G4YaS8R0lGS8Y4cMN24jajiNuMVXLbO4j8RhP5jVPCbyeR3xgiv/GW3TASHDAW+jjo4w03TJD3RMkkyWQHbthF3GYicZspSm57N5HfJCK/qUr47SHym0zkN82yGyaAA6ZAnwp9muGG6fKeIZkpmeXADXuJ28wgbjNbyW3vI/KbSeQ3Rwm//UR+s4j85lp2w3RwwGzoc6DPNdwwT97zJQskCx244QBxm/nEbRYpue2DRH4LiPwWK+F3iMhvIZHfEstumAcOWAR9MfQlhhuWynuZZLlkhQM3HCZus4y4zUolt32EyG85kd8qJfyOEvmtIPJbbdkNS8EBK6Gvgr7acMMaea+VrJOsd+CGY8Rt1hK32aDkto8T+a0j8tuohN8JIr/1RH6bLLthDThgA/SN0DcZbtgs7y2SrZJtDtxwkrjNFuI225Xc9ikiv61EfjuU8DtN5LeNyG+nZTdsBgdsh74D+k7DDbvkvVuyR7LXgRvOELfZTdxmn5LbPkvkt4fIb78SfueI/PYS+R2w7IZd4IB90PdDP2C44aC8D0kOS444cMN54jaHiNscVXLbF4j8DhP5HVPC7yKR3xEiv+OW3XAQHHAU+jHoxw03nJD3SckpyWkHbrhE3OYkcZszSm77MpHfKSK/s0r4XSHyO03kd86yG06AA85APwv9nOGG8/K+ILkoueTADVeJ21wgbnNZyW1fI/K7SOR3RQm/60R+l4j8rlp2w3lwwGXoV6BfNdxwTd7XJTckNx244QZxm+vEbW4pue2bRH43iPxuK+F3i8jvJpHfHctuuAYOuAX9NvQ7hhvuyvue5L7kgQM33CZuc4+4zUMlt32HyO8+kd8jJfzuEvk9IPJ7bNkNd8EBD6E/gv7YcMMTeT+VPJM8d+CGe8RtnhK3eaHktu8T+T0j8nuphN8DIr/nRH6vLLvhCTjgBfSX0F8Zbngt7zeSt5J3DtzwkLjNG+I275Xc9iMiv7dEfh+U8HtM5PeOyO+jZTe8Bge8h/4B+kfDDZ/k7SHxlHg5cMMT4jYexG28ldz2UyI/TyI/HyX8nhH5eRH5+Vp2wydwgDd0H+i+hhv85O0v+SwJcOCG58Rt/InbBCq57RdEfp+J/L4o4feSyC+AyO+rZTf4gQMCoX+B/tVwwzd5f5f8kAQ5cMMr4jbfidv8VHLbr4n8fhD5/VLC7w2RXxCR32/LbvgGDvgJ/Rf034Yb/sg7WBLy7+8O3PCWuE0wcZtQJbf9jsgvhMgvzA8d/N4T+f0l8gv7w64b/oADQqH/2+1/PeyP/7ohnLzDSyJIIv6w74YPxG3C/+BtE0nJbX8k8otA5BdZCb9PRH4RifyiWHZDOHBAJOiRoUcx3BBV3tEk0SUxHLjBg7hNNOI2MZXctieRX3Qiv1hK+HkR+cUg8ott2Q1RwQExoceCHttwQxx5x5XEk8R34AZv4jZxidskUHLbPkR+8Yj8Eirh50vkF5/IL5FlN8QBBySAnhB6IsMNieWdRJJUksyBG/yI2yQhbpNcyW37E/klJfJLoYTfZyK/ZER+KS27ITE4IDn0FNBTGm5IJe/UkjSStA7cEEDcJjVxm3RKbjuQyC8NkV96Jfy+EPmlJfLLYNkNqcAB6aCnh57BcENGeWeSZJZkceCGr8RtMhG3yarktr8R+WUm8sumhN93Ir8sRH7ZLbshIzggK/Rs0LMbbsgh75ySXJLcDtzwg7hNTuI2eZTcdhCRXy4iv7xK+P0k8stN5JfPshtygAPyQM8LPZ/hhvzyLiApKCnkwA2/iNsUIG5TWMlt/ybyK0jkV0QJvz9EfoWI/IpadkN+cEBh6EWgFzXcUEzexSUlJCUduCGYuE1x4jallNx2CJFfCSK/0kr4/SXyK0nkV8ayG4qBA0pBLw29jOGGsvIuJykvqeDADaHEbcoRt6mo5LbDNOT9Vnkiv0pK+IUl8qtA5FfZshvKggMqQq8EvbLhhiryriqpJqnuwA3hiNtUJW5TQ8lthyfyq0bkV1MJvwhEftWJ/GpZdkMVcEAN6DWh1zLcUFvedSR1JfUcuCEicZs6xG3qK7ntSER+dYn8GijhF5nIrx6RX0PLbqgNDqgPvQH0hoYbGsm7saSJpKkDN0QhbtOYuE0zJbcdlcivCZFfcyX8ohH5NSXya2HZDY3AAc2gN4fewnBDS3m3krSWtHHghujEbVoRt2mr5LZjEPm1JvJrp4RfTCK/NkR+7S27oSU4oC30dtDbG27oIO+Okk6Szg7cEIu4TUfiNl2U3HZsIr9ORH5dlfCLQ+TXmcivm2U3dAAHdIHeFXo3ww3d5d1D0lPSy4Eb4hK36UHcpreS245H5NeTyK+PEn7xifx6Efn1teyG7uCA3tD7QO9ruKGfvPtLBkgGOnBDAuI2/YnbDFJy2wmJ/AYQ+Q1Wwi8Rkd9AIr8hlt3QDxwwCPpg6EMMNwyV9zDJcMkIB25ITNxmGHGbkUpuOwmR33Aiv1FK+CUl8htB5DfashuGggNGQh8FfbThhjHyHisZJxnvwA3JiNuMJW4zQcltJyfyG0fkN1EJvxREfuOJ/CZZdsMYcMAE6BOhTzLcMFneUyRTJdMcuCElcZspxG2mK7ntVER+U4n8Zijhl5rIbxqR30zLbpgMDpgOfQb0mYYbZsl7tmSOZK4DN6QhbjObuM08JbedlshvDpHffCX80hH5zSXyW2DZDbPAAfOgz4e+wHDDQnkvkiyWLHHghvTEbRYRt1mq5LYzEPktJvJbpoRfRiK/JUR+yy27YSE4YCn0ZdCXG25YIe+VklWS1Q7ckIm4zUriNmuU3HZmIr9VRH5rlfDLQuS3mshvnWU3rAAHrIG+Fvo6ww3r5b1BslGyyYEbshK32UDcZrOS285G5LeRyG+LEn7Zifw2EfltteyG9eCAzdC3QN9quGGbvLdLdkh2OnBDDuI224nb7FJy2zmJ/HYQ+e1Wwi8Xkd9OIr89lt2wDRywC/pu6HsMN+yV9z7JfskBB27ITdxmH3Gbg0puOw+R334iv0NK+OUl8jtA5HfYshv2ggMOQj8E/bDhhiPyPio5JjnuwA35iNscJW5zQslt5yfyO0bkd1IJvwJEfseJ/E5ZdsMRcMAJ6CehnzLccFreZyRnJeccuKEgcZszxG3OK7ntQkR+Z4n8LijhV5jI7xyR30XLbjgNDjgP/QL0i4YbLsn7suSK5KoDNxQhbnOZuM01JbddlMjvCpHfdSX8ihH5XSXyu2HZDZfAAdegX4d+w3DDTXnfktyW3HHghuLEbW4Rt7mr5LZLEPndJvK7p4RfSSK/O0R+9y274SY44C70e9DvG254IO+HkkeSxw7cUIq4zUPiNk+U3HZpIr9HRH5PlfArQ+T3mMjvmWU3PAAHPIH+FPozww3P5f1C8lLyyoEbyhK3eUHc5rWS2y5H5PeSyO+NEn7lifxeEfm9teyG5+CA19DfQH9ruOGdvN9LPkg+OnBDBeI274nbfFJy2xWJ/D4Q+Xko4VeJyO8jkZ+nZTe8Awd8gu4B3dNwg5e8vSU+El8HbqhM3MabuI2fktuuQuTnQ+Tnr4RfVSI/XyK/z5bd4AUO8IPuD/2z4YYAeQdKvki+OnBDNeI2gcRtvim57epEfl+I/L4r4VeDyO8rkd8Py24IAAd8g/4d+g/DDUHy/in5JfntwA01idv8JG7zR8lt1yLy+0XkF6yEX20iv99EfiGW3RAEDvgDPRh6iOGGv/IOlYQJChsmbJB9N9QhbhNK3CZckI7brkvkFyaIxy+8En71iPzCEvlFCLLrhr/ggH+3/r8eHnqEoP+6IaK8I0kiS6I4cEN94jaRiNtEVXLbDYj8IhP5RVPCryGRXxQiv+iW3RARHBAVejTo0Q03xJB3TEksSWwHbmhE3CYmcZs4Sm67MZFfLCK/uEr4NSHyi03kF8+yG2KAA+JAjws9nuGG+PJOIEkoSeTADU2J2yQgbpNYyW03I/JLSOSXRAm/5kR+iYj8klp2Q3xwQGLoSaAnNdyQTN7JJSkkKR24oQVxm+TEbVIpue2WRH4piPxSK+HXisgvJZFfGstuSAYOSAU9NfQ0hhvSyjudJL0kgwM3tCZuk464TUYlt92GyC89kV8mJfzaEvllIPLLbNkNacEBGaFngp7ZcEMWeWeVZJNkd+CGdsRtshK3yaHkttsT+WUj8suphF8HIr/sRH65LLshCzggB/Sc0HMZbsgt7zySvJJ8DtzQkbhNHuI2+ZXcdiciv7xEfgWU8OtM5JePyK+gZTfkBgfkh14AekHDDYXkXVhSRFLUgRu6ELcpTNymmJLb7krkV4TIr7gSft2I/IoS+ZWw7IZC4IBi0ItDL2G4oaS8S0lK//s2B27oTtymFHGbskpuuweRX2kiv3JK+PUk8itD5FfeshtKggPKQi8HvbzhhgryriipJKnswA29iNtUJG5TRclt9ybyq0TkV1UJvz5EfpWJ/KpZdkMFcEAV6FWhVzPcUF3eNSQ1JbUcuKEvcZsaxG1qK7ntfkR+NYn86ijh15/IrxaRX13LbqgODqgNvQ70uoYb6sm7vqSBpKEDNwwgblOfuE0jJbc9kMivAZFfYyX8BhH5NSTya2LZDfXAAY2gN4bexHBDU3k3kzSXtHDghsHEbZoRt2mp5LaHEPk1J/JrpYTfUCK/FkR+rS27oSk4oCX0VtBbG25oI++2knaS9g7cMIy4TVviNh2U3PZwIr92RH4dlfAbQeTXnsivk2U3tAEHdIDeEXonww2d5d1F0lXSzYEbRhK36ULcpruS2x5F5NeVyK+HEn6jify6Efn1tOyGzuCA7tB7QO9puKGXvHtL+kj6OnDDGOI2vYnb9FNy22OJ/PoQ+fVXwm8ckV9fIr8Blt3QCxzQD3p/6AMMNwyU9yDJYMkQB24YT9xmEHGboUpuewKR32Aiv2FK+E0k8htC5DfcshsGggOGQh8GfbjhhhHyHikZJRntwA2TiNuMJG4zRsltTybyG0XkN1YJvylEfqOJ/MZZdsMIcMAY6GOhjzPcMF7eEyQTJZMcuGEqcZsJxG0mK7ntaUR+E4n8pijhN53IbxKR31TLbhgPDpgMfQr0qYYbpsl7umSGZKYDN8wgbjOduM0sJbc9k8hvBpHfbCX8ZhH5zSTym2PZDdPAAbOgz4Y+x3DDXHnPk8yXLHDghtnEbeYRt1mo5LbnEPnNJ/JbpITfXCK/BUR+iy27YS44YCH0RdAXG25YIu+lkmWS5Q7cMI+4zVLiNiuU3PZ8Ir9lRH4rlfBbQOS3nMhvlWU3LAEHrIC+Evoqww2r5b1GslayzoEbFhK3WUPcZr2S215E5LeWyG+DEn6LifzWEflttOyG1eCA9dA3QN9ouGGTvDdLtki2OnDDEuI2m4nbbFNy20uJ/LYQ+W1Xwm8Zkd9WIr8dlt2wCRywDfp26DsMN+yU9y7JbskeB25YTtxmF3GbvUpuewWR324iv31K+K0k8ttD5Lffsht2ggP2Qt8Hfb/hhgPyPig5JDnswA2riNscJG5zRMltrybyO0Tkd1QJvzVEfoeJ/I5ZdsMBcMAR6EehHzPccFzeJyQnJaccuGEtcZsTxG1OK7ntdUR+J4n8zijht57I7xSR31nLbjgODjgN/Qz0s4Ybzsn7vOSC5KIDN2wgbnOeuM0lJbe9kcjvApHfZSX8NhH5XSTyu2LZDefAAZegX4Z+xXDDVXlfk1yX3HDghs3Eba4Rt7mp5La3EPldJ/K7pYTfViK/G0R+ty274So44Cb0W9BvG264I++7knuS+w7csI24zV3iNg+U3PZ2Ir97RH4PlfDbQeR3n8jvkWU33AEHPID+EPojww2P5f1E8lTyzIEbdhK3eULc5rmS295F5PeUyO+FEn67ifyeEfm9tOyGx+CA59BfQH9puOGVvF9L3kjeOnDDHuI2r4nbvFNy23uJ/N4Q+b1Xwm8fkd9bIr8Plt3wChzwDvp76B8MN3yU9yeJh8TTgRv2E7f5RNzGS8ltHyDy8yDy81bC7yCRnyeRn49lN3wEB3hB94buY7jBV95+En/JZwduOETcxo+4TYCS2z5M5OdP5BeohN8RIr/PRH5fLLvBFxwQAD0Q+hfDDV/l/U3yXfLDgRuOErf5RtwmSMltHyPy+07k91MJv+NEfj+I/H5ZdsNXcEAQ9J/Qfxlu+C3vP5JgSYgDN5wgbvOHuM1fJbd9ksgvmMgvVAm/U0R+IUR+YX7adcNvcMBf6KHQ/30DuiGsvMNJwksi/LTvhtPEbcL95G0T8aeO2z5D5BeeyC+SEn5nifwiEPlFtuyGsD//3wERoUeCHtlwQxR5R5VEk0R34IZzxG2iEreJoeS2zxP5RSPyi6mE3wUiv+hEfrEsuyEKOCAG9JjQYxluiC3vOJK4kngO3HCRuE0c4jbxldz2JSK/uER+CZTwu0zkF4/IL6FlN8QGB8SHngB6QsMNieSdWJJEktSBG64Qt0lM3CaZktu+SuSXhMgvuRJ+14j8khL5pbDshkTggGTQk0NPYbghpbxTSVJL0jhww3XiNqmI26RVcts3iPxSE/mlU8LvJpFfGiK/9JbdkBIckBZ6OujpDTdkkHdGSSZJZgduuEXcJiNxmyxKbvs2kV8mIr+sSvjdIfLLTOSXzbIbMoADskDPCj2b4Ybs8s4hySnJ5cANd4nb5CBuk1vJbd8j8stJ5JdHCb/7RH65iPzyWnZDdnBAbuh5oOc13JBP3vklBSQFHbjhAXGb/MRtCim57YdEfgWI/Aor4feIyK8gkV8Ry27IBw4oBL0w9CKGG4rKu5ikuKSEAzc8Jm5TjLhNSSW3/YTIrziRXykl/J4S+ZUg8itt2Q1FwQEloZeCXtpwQxl5l5WUk5R34IZnxG3KErepoOS2nxP5lSPyq6iE3wsiv/JEfpUsu6EMOKAC9IrQKxluqCzvKpKqkmoO3PCSuE0V4jbVldz2KyK/qkR+NZTwe03kV43Ir6ZlN1QGB1SHXgN6TcMNteRdW1JHUteBG94Qt6lN3Kaektt+S+RXh8ivvhJ+74j86hL5NbDshlrggHrQ60NvYLihobwbSRpLmjhww3viNo2I2zRVctsfiPwaE/k1U8LvI5FfEyK/5pbd0BAc0BR6M+jNDTe0kHdLSStJawdu+ETcpiVxmzZKbtuDyK8VkV9bJfw8ifxaE/m1s+yGFuCANtDbQm9nuKG9vDtIOko6OXCDF3GbDsRtOiu5bW8iv45Efl2U8PMh8utE5NfVshvagwM6Q+8Cvavhhm7y7i7pIenpwA2+xG26E7fppeS2/Yj8ehD59VbCz5/IryeRXx/LbugGDugFvTf0PoYb+sq7n6S/ZIADN3wmbtOPuM1AJbcdQOTXn8hvkBJ+gUR+A4j8Blt2Q19wwEDog6APNtwwRN5DJcMkwx244Qtxm6HEbUYoue2vRH7DiPxGKuH3jchvOJHfKMtuGAIOGAF9JPRRhhtGy3uMZKxknAM3fCduM4a4zXglt/2DyG8skd8EJfyCiPzGEflNtOyG0eCA8dAnQJ9ouGGSvCdLpkimOnDDT+I2k4nbTFNy27+I/KYQ+U1Xwu83kd9UIr8Zlt0wCRwwDfp06DMMN8yU9yzJbMkcB274Q9xmFnGbuUpuO5jIbzaR3zwl/EKI/OYQ+c237IaZ4IC50OdBn2+4YYG8F0oWSRY7cMNf4jYLidssUXLboUR+i4j8lirhF6YR77cWE/kts+yGBeCAJdCXQl9muGG5vFdIVkpWOXBDWOI2K4jbrFZy2+GI/FYS+a1Rwi88kd8qIr+1lt2wHBywGvoa6GsNN6yT93rJBslGB26IQNxmPXGbTUpuOyKR3wYiv81K+EUi8ttI5LfFshvWgQM2Qd8MfYvhhq3y3ibZLtnhwA2RidtsI26zU8ltRyHy207kt0sJv6hEfjuI/HZbdsNWcMBO6Lug7zbcsEfeeyX7JPsduCEacZu9xG0OKLnt6ER++4j8DirhF4PIbz+R3yHLbtgDDjgA/SD0Q4YbDsv7iOSo5JgDN8QkbnOEuM1xJbcdi8jvKJHfCSX8YhP5HSPyO2nZDYfBAcehn4B+0nDDKXmflpyRnHXghjjEbU4Ttzmn5LbjEvmdIfI7r4RfPCK/s0R+Fyy74RQ44Bz089AvGG64KO9LksuSKw7cEJ+4zSXiNleV3HYCIr/LRH7XlPBLSOR3hcjvumU3XAQHXIV+Dfp1ww035H1Tckty24EbEhG3uUnc5o6S205M5HeLyO+uEn5JiPxuE/nds+yGG+CAO9DvQr9nuOG+vB9IHkoeOXBDUuI2D4jbPFZy28mI/B4S+T1Rwi85kd8jIr+nlt1wHxzwGPoT6E8NNzyT93PJC8lLB25IQdzmOXGbV0puOyWR3wsiv9dK+KUi8ntJ5PfGshuegQNeQX8N/Y3hhrfyfid5L/ngwA2pidu8I27zUcltpyHye0/k90kJv7REfh+I/Dwsu+EtOOAj9E/QPQw3eMrbS+It8XHghnTEbbyI2/gque30RH7eRH5+SvhlIPLzIfLzt+wGT3CAL3Q/6P6GGz7LO0ASKPniwA0ZidsEELf5quS2MxH5BRL5fVPCLzOR3xciv++W3fAZHPAV+jfo3w03/JB3kOSn5JcDN2QhbhNE3Oa3ktvOSuT3k8jvjxJ+2Yj8fhH5BVt2ww9wwG/of6AHG24I+feWhErC/LLvhuzEbf4Stwn7S8dt5yDyCyXyC6eEX04ivzC/ePzC/7LrhhBwwL9b/18PBz38r/+6IYK8I0oiSSI7cEMu4jYRidtEUXLbuYn8IhH5RVXCLw+RX2Qiv2iW3RABHBAFelTo0Qw3RJd3DElMSSwHbshL3CYGcZvYSm47H5FfTCK/OEr45Sfyi0XkF9eyG6KDA2JDjwM9ruGGePKOL0kgSejADQWI28QnbpNIyW0XJPJLQOSXWAm/QkR+CYn8klh2QzxwQCLoiaEnMdyQVN7JJMklKRy4oTBxm2TEbVIque0iRH7JifxSKeFXlMgvBZFfastuSAoOSAk9FfTUhhvSyDutJJ0kvQM3FCNuk5a4TQYlt12cyC8dkV9GJfxKEPmlJ/LLZNkNacABGaBnhJ7JcENmeWeRZJVkc+CGksRtshC3ya7ktksR+WUl8suhhF9pIr9sRH45LbshMzggO/Qc0HMabsgl79ySPJK8DtxQhrhNbuI2+ZTcdlkivzxEfvmV8CtH5JeXyK+AZTfkAgfkg54fegHDDQXlXUhSWFLEgRvKE7cpRNymqJLbrkDkV5jIr5gSfhWJ/IoQ+RW37IaC4ICi0ItBL264oYS8S0pKSUo7cEMl4jYliduUUXLblYn8ShH5lVXCrwqRX2kiv3KW3VACHFAGelno5Qw3lJd3BUlFSSUHbqhK3KYCcZvKSm67GpFfRSK/Kkr4VSfyq0TkV9WyG8qDAypDrwK9quGGavKuLqkhqenADTWI21QnblNLyW3XJPKrQeRXWwm/WkR+NYn86lh2QzVwQC3otaHXMdxQV971JPUlDRy4oTZxm3rEbRoque06RH71ifwaKeFXl8ivAZFfY8tuqAsOaAi9EfTGhhuayLuppJmkuQM31CNu05S4TQslt12fyK8ZkV9LJfwaEPk1J/JrZdkNTcABLaC3hN7KcENrebeRtJW0c+CGhsRt2hC3aa/kthsR+bUl8uughF9jIr92RH4dLbuhNTigPfQO0Dsabugk786SLpKuDtzQhLhNZ+I23ZTcdlMivy5Eft2V8GtG5NeVyK+HZTd0Agd0g94deg/DDT3l3UvSW9LHgRuaE7fpRdymr5LbbkHk15vIr58Sfi2J/PoQ+fW37Iae4IC+0PtB72+4YYC8B0oGSQY7cEMr4jYDidsMUXLbrYn8BhH5DVXCrw2R32Aiv2GW3TAAHDAE+lDowww3DJf3CMlIySgHbmhL3GYEcZvRSm67HZHfSCK/MUr4tSfyG0XkN9ayG4aDA0ZDHwN9rOGGcfIeL5kgmejADR2I24wnbjNJyW13JPKbQOQ3WQm/TkR+E4n8plh2wzhwwCTok6FPMdwwVd7TJNMlMxy4oTNxm2nEbWYque0uRH7TifxmKeHXlchvBpHfbMtumAoOmAl9FvTZhhvmyHuuZJ5kvgM3dCNuM5e4zQIlt92dyG8ekd9CJfx6EPnNJ/JbZNkNc8ABC6AvhL7IcMNieS+RLJUsc+CGnsRtlhC3Wa7ktnsR+S0l8luhhF9vIr9lRH4rLbthMThgOfQV0Fcablgl79WSNZK1DtzQh7jNauI265Tcdl8ivzVEfuuV8OtH5LeWyG+DZTesAgesg74e+gbDDRvlvUmyWbLFgRv6E7fZRNxmq5LbHkDkt5nIb5sSfgOJ/LYQ+W237IaN4ICt0LdB3264YYe8d0p2SXY7cMMg4jY7idvsUXLbg4n8dhH57VXCbwiR324iv32W3bADHLAH+l7o+ww37Jf3AclBySEHbhhK3OYAcZvDSm57GJHfQSK/I0r4DSfyO0Tkd9SyG/aDAw5DPwL9qOGGY/I+LjkhOenADSOI2xwnbnNKyW2PJPI7QeR3Wgm/UUR+J4n8zlh2wzFwwCnop6GfMdxwVt7nJOclFxy4YTRxm3PEbS4que0xRH7nifwuKeE3lsjvApHfZctuOAsOuAj9EvTLhhuuyPuq5JrkugM3jCNuc5W4zQ0ltz2eyO8akd9NJfwmEPldJ/K7ZdkNV8ABN6DfhH7LcMNted+R3JXcc+CGicRt7hC3ua/kticR+d0l8nughN9kIr97RH4PLbvhNjjgPvQH0B8abngk78eSJ5KnDtwwhbjNY+I2z5Tc9lQivydEfs+V8JtG5PeUyO+FZTc8Agc8g/4c+gvDDS/l/UryWvLGgRumE7d5RdzmrZLbnkHk95rI750SfjOJ/N4Q+b237IaX4IC30N9Bf2+44YO8P0o+STwcuGEWcZuPxG08ldz2bCK/T0R+Xkr4zSHy8yDy87bshg/gAE/oXtC9DTf4yNtX4ifxd+CGucRtfInbfFZy2/OI/PyI/AKU8JtP5OdP5Bdo2Q0+4IDP0AOgBxpu+CLvr5Jvku8O3LCAuM1X4jY/lNz2QiK/b0R+QUr4LSLy+07k99OyG76AA35AD4L+03DDL3n/lvyRBDtww2LiNr+J24Qoue0lRH5/iPz+KuG3lMgvmMgv1LIbfoEDQqD/hR5quCHM77BhwkrCScL/tu+GZcRt/n03a5sIv3Xc9nIiv3BEfhGV8FtB5BeeyC/Sb7tu+Pfv/H8OiAA9IvRIv//rhsjyjiKJKonmwA0ridtEIW4TXcltryLyi0rkF0MJv9VEftGI/GJadkNkcEB06DGgxzTcEEvesSVxJHEduGENcZvYxG3iKbnttUR+cYj84ivht47ILy6RXwLLbogFDogHPT70BIYbEso7kSSxJIkDN6wnbpOIuE1SJbe9gcgvMZFfMiX8NhL5JSHyS27ZDQnBAUmhJ4Oe3HBDCnmnlKSSpHbghk3EbVISt0mj5LY3E/mlIvJLq4TfFiK/1ER+6Sy7IQU4IA30tNDTGW5IL+8MkoySTA7csJW4TQbiNpmV3PY2Ir+MRH5ZlPDbTuSXicgvq2U3pAcHZIaeBXpWww3Z5J1dkkOS04EbdhC3yU7cJpeS295J5JeDyC+3En67iPxyEvnlseyGbOCAXNBzQ89juCGvvPNJ8ksKOHDDbuI2+YjbFFRy23uI/PIT+RVSwm8vkV8BIr/Clt2QFxxQEHoh6IUNNxSRd1FJMUlxB27YR9ymKHGbEkpuez+RXzEiv5JK+B0g8itO5FfKshuKgANKQC8JvZThhtL/vklSVlLOgRsOErcpQ9ymvJLbPkTkV5bIr4ISfoeJ/MoR+VW07IbS4IDy0CtAr2i4oZK8K0uqSKo6cMMR4jaVidtUU3LbR4n8qhD5VVfC7xiRX1UivxqW3VAJHFANenXoNQw31JR3LUltSR0HbjhO3KYWcZu6Sm77BJFfbSK/ekr4nSTyq0PkV9+yG2qCA+pCrwe9vuGGBvJuKGkkaezADaeI2zQkbtNEyW2fJvJrROTXVAm/M0R+jYn8mll2QwNwQBPoTaE3M9zQXN4tJC0lrRy44SxxmxbEbVorue1zRH4tifzaKOF3nsivFZFfW8tuaA4OaA29DfS2hhvaybu9pIOkowM3XCBu0564TSclt32RyK8DkV9nJfwuEfl1JPLrYtkN7cABnaB3ht7FcENXeXeTdJf0cOCGy8RtuhG36anktq8Q+XUn8uulhN9VIr8eRH69LbuhKzigJ/Re0Hsbbugj776SfpL+DtxwjbhNX+I2A5Tc9nUiv35EfgOV8LtB5NefyG+QZTf0AQcMgD4Q+iDDDYPlPUQyVDLMgRtuErcZQtxmuJLbvkXkN5TIb4QSfreJ/IYR+Y207IbB4IDh0EdAH2m4YZS8R0vGSMY6cMMd4jajiduMU3Lbd4n8xhD5jVfC7x6R31givwmW3TAKHDAO+njoEww3TJT3JMlkyRQHbrhP3GYScZupSm77AZHfZCK/aUr4PSTym0LkN92yGyaCA6ZCnwZ9uuGGGfKeKZklme3ADY+I28wkbjNHyW0/JvKbReQ3Vwm/J0R+s4n85ll2wwxwwBzoc6HPM9wwX94LJAslixy44SlxmwXEbRYrue1nRH4LifyWKOH3nMhvEZHfUstumA8OWAx9CfSlhhuWyXu5ZIVkpQM3vCBus5y4zSolt/2SyG8Fkd9qJfxeEfmtJPJbY9kNy8ABq6Cvhr7GcMNaea+TrJdscOCG18Rt1hG32ajktt8Q+a0n8tukhN9bIr8NRH6bLbthLThgI/RN0Dcbbtgi762SbZLtDtzwjrjNVuI2O5Tc9nsiv21EfjuV8PtA5LedyG+XZTdsAQfsgL4T+i7DDbvlvUeyV7LPgRs+ErfZQ9xmv5Lb/kTkt5fI74ASfh5EfvuI/A5adsNucMB+6AegHzTccEjehyVHJEcduMGTuM1h4jbHlNy2F5HfESK/40r4eRP5HSXyO2HZDYfAAcegH4d+wnDDSXmfkpyWnHHgBh/iNqeI25xVctu+RH6nifzOKeHnR+R3hsjvvGU3nAQHnIV+Dvp5ww0X5H1Rckly2YEb/InbXCRuc0XJbX8m8rtE5HdVCb8AIr/LRH7XLLvhAjjgCvSr0K8Zbrgu7xuSm5JbDtwQSNzmBnGb20pu+wuR300ivztK+H0l8rtF5HfXshuugwNuQ78D/a7hhnvyvi95IHnowA3fiNvcJ27zSMltfyfye0Dk91gJvx9Efg+J/J5YdsM9cMAj6I+hPzHc8FTezyTPJS8cuCGIuM0z4jYvldz2TyK/50R+r5Tw+0Xk94LI77VlNzwFB7yE/gr6a8MNb+T9VvJO8t6BG34Tt3lL3OaDktv+Q+T3jsjvoxJ+wUR+74n8Pll2wxtwwAfoH6F/MtzgIW9PiZfE24EbQojbeBK38VFy23+J/LyI/HyV8Asl8vMm8vOz7AYPcIAPdF/ofoYb/OX9WRIgCXTghjCNif9nT9zmi5LbDkvkF0Dk91UJv3BEfoFEft8su8EfHPAF+lfo3ww3fJf3D0mQ5KcDN4QnbvODuM0vJbcdgcgviMjvtxJ+EYn8fhL5/bHshu/ggF/Qf0P/Y7ghWN4h//4mCXXghkjEbUKI24T5o+O2IxP5/SXyC6uEXxQiv1Aiv3B/7LohGBzw79b/18NCD/fnv24IL+8IkoiSSH/suyEqcZsIf3jbRFZy29GI/CIS+UVRwi86kV8kIr+olt0QHhwQGXoU6FENN0STd3RJDElMB26IQdwmOnGbWEpuOyaRXwwiv9hK+MUi8otJ5BfHshuigQNiQY8NPY7hhrjyjieJL0ngwA2xidvEI26TUMltxyHyi0/kl0gJv7hEfgmI/BJbdkNccEBC6ImgJzbckETeSSXJJMkduCEecZukxG1SKLnt+ER+yYj8Uirhl4DILzmRXyrLbkgCDkgBPSX0VIYbUss7jSStJJ0DNyQkbpOGuE16JbediMgvLZFfBiX8EhP5pSPyy2jZDanBAemhZ4Ce0XBDJnlnlmSRZHXghiTEbTITt8mm5LaTEvllIfLLroRfMiK/rER+OSy7IRM4IBv07NBzGG7IKe9cktySPA7ckJy4TS7iNnmV3HYKIr/cRH75lPBLSeSXh8gvv2U35AQH5IWeD3p+ww0F5F1QUkhS2IEbUhG3KUjcpoiS205N5FeIyK+oEn5piPwKE/kVs+yGAuCAItCLQi9muKG4vEtISkpKOXBDWuI2JYjblFZy2+mI/EoS+ZVRwi89kV8pIr+ylt1QHBxQGnoZ6GUNN5STd3lJBUlFB27IQNymPHGbSkpuOyORXwUiv8pK+GUi8qtI5FfFshvKgQMqQa8MvYrhhqryriapLqnhwA2ZidtUI25TU8ltZyHyq07kV0sJv6xEfjWI/GpbdkNVcEBN6LWg1zbcUEfedSX1JPUduCEbcZu6xG0aKLnt7ER+9Yj8Girhl4PIrz6RXyPLbqgDDmgAvSH0RoYbGsu7iaSppJkDN+QkbtOEuE1zJbedi8ivKZFfCyX8chP5NSPya2nZDY3BAc2ht4De0nBDK3m3lrSRtHXghjzEbVoTt2mn5LbzEvm1IfJrr4RfPiK/tkR+HSy7oRU4oB309tA7GG7oKO9Oks6SLg7ckJ+4TSfiNl2V3HYBIr/ORH7dlPArSOTXhcivu2U3dAQHdIXeDXp3ww095N1T0kvS24EbChG36Uncpo+S2y5M5NeLyK+vEn5FiPx6E/n1s+yGHuCAPtD7Qu9nuKG/vAdIBkoGOXBDUeI2A4jbDFZy28WI/AYS+Q1Rwq84kd8gIr+hlt3QHxwwGPoQ6EMNNwyT93DJCMlIB24oQdxmOHGbUUpuuySR3wgiv9FK+JUi8htJ5DfGshuGgQNGQR8NfYzhhrHyHicZL5ngwA2liduMI24zUcltlyHyG0/kN0kJv7JEfhOI/CZbdsNYcMBE6JOgTzbcMEXeUyXTJNMduKEccZupxG1mKLnt8kR+04j8ZirhV4HIbzqR3yzLbpgCDpgBfSb0WYYbZst7jmSuZJ4DN1QkbjOHuM18JbddichvLpHfAiX8KhP5zSPyW2jZDbPBAfOhL4C+0HDDInkvliyRLHXghirEbRYTt1mm5LarEvktIfJbroRfNSK/pUR+Kyy7YRE4YBn05dBXGG5YKe9VktWSNQ7cUJ24zSriNmuV3HYNIr/VRH7rlPCrSeS3hshvvWU3rAQHrIW+Dvp6ww0b5L1Rskmy2YEbahG32UjcZouS265N5LeJyG+rEn51iPw2E/lts+yGDeCALdC3Qt9muGG7vHdIdkp2OXBDXeI2O4jb7FZy2/WI/HYS+e1Rwq8+kd8uIr+9lt2wHRywG/oe6HsNN+yT937JAclBB25oQNxmP3GbQ0puuyGR3wEiv8NK+DUi8jtI5HfEshv2gQMOQT8M/YjhhqPyPiY5LjnhwA2NidscI25zUsltNyHyO07kd0oJv6ZEfieI/E5bdsNRcMBJ6KegnzbccEbeZyXnJOcduKEZcZuzxG0uKLnt5kR+54j8Lirh14LI7zyR3yXLbjgDDrgA/SL0S4YbLsv7iuSq5JoDN7QkbnOFuM11JbfdisjvKpHfDSX8WhP5XSPyu2nZDZfBAdeh34B+03DDLXnfltyR3HXghjbEbW4Tt7mn5LbbEvndIfK7r4RfOyK/u0R+Dyy74RY44B70+9AfGG54KO9HkseSJw7c0J64zSPiNk+V3HYHIr/HRH7PlPDrSOT3hMjvuWU3PAQHPIX+DPpzww0v5P1S8kry2oEbOhG3eUnc5o2S2+5M5PeKyO+tEn5diPxeE/m9s+yGF+CAN9DfQn9nuOG9vD9IPko+OXBDV+I2H4jbeCi57W5Efh+J/DyV8OtO5PeJyM/LshvegwM8oHtC9zLc4C1vH4mvxM+BG3oQt/EhbuOv5LZ7Evn5Evl9VsKvF5GfH5FfgGU3eIMD/KF/hh5guCFQ3l8kXyXfHLihN3GbL8Rtviu57T5Efl+J/H4o4deXyO8bkV+QZTcEggO+Q/8BPchww095/5L8lvxx4IZ+xG1+EbcJVnLb/Yn8fhP5hSjhN4DI7w+R31/LbvgJDgiGHgL9r+GGUHmHCQ4bJqwkXLB9NwwkbvPvu1nbhA/WcduDiPzCEvlFUMJvMJFfOCK/iMF23RAKDvh36//rEaBHDP6vGyLJO7IkiiSqAzcMIW4TmbhNNCW3PZTILwqRX3Ql/IYR+UUl8oth2Q2RwAHRoEeHHsNwQ0x5x5LElsRx4IbhxG1iEbeJq+S2RxD5xSbyi6eE30givzhEfvEtuyEmOCAu9HjQ4xtuSCDvhJJEksQO3DCKuE1C4jZJlNz2aCK/RER+SZXwG0Pkl5jIL5llNyQABySBnhR6MsMNyeWdQpJSksqBG8YSt0lB3Ca1ktseR+SXksgvjRJ+44n8UhH5pbXshuTggNTQ00BPa7ghnbzTSzJIMjpwwwTiNumJ22RSctsTifwyEPllVsJvEpFfRiK/LJbdkA4ckAl6ZuhZDDdklXc2SXZJDgdumEzcJhtxm5xKbnsKkV92Ir9cSvhNJfLLQeSX27IbsoIDckLPBT234YY88s4rySfJ78AN04jb5CVuU0DJbU8n8stH5FdQCb8ZRH75ifwKWXZDHnBAAegFoRcy3FBY3kUkRSXFHLhhJnGbIsRtiiu57VlEfkWJ/Eoo4TebyK8YkV9Jy24oDA4oDr0E9JKGG0rJu/S/75KUdeCGOcRtShO3KafktucS+ZUh8iuvhN88Ir+yRH4VLLuhFDigHPTy0CsYbqgo70qSypIqDtwwn7hNJeI2VZXc9gIiv8pEftWU8FtI5FeFyK+6ZTdUBAdUhV4NenXDDTXkXVNSS1LbgRsWEbepSdymjpLbXkzkV4vIr64SfkuI/GoT+dWz7IYa4IA60OtCr2e4ob68G0gaSho5cMNS4jYNiNs0VnLby4j8GhL5NVHCbzmRXyMiv6aW3VAfHNAYehPoTQ03NJN3c0kLSUsHblhB3KY5cZtWSm57JZFfCyK/1kr4rSLya0nk18ayG5qBA1pBbw29jeGGtvJuJ2kv6eDADauJ27QjbtNRyW2vIfJrT+TXSQm/tUR+HYj8Olt2Q1twQEfonaB3NtzQRd5dJd0k3R24YR1xm67EbXooue31RH7diPx6KuG3gcivO5FfL8tu6AIO6AG9J/Rehht6y7uPpK+knwM3bCRu04e4TX8lt72JyK8vkd8AJfw2E/n1I/IbaNkNvcEB/aEPgD7QcMMgeQ+WDJEMdeCGLcRtBhO3GabktrcS+Q0h8huuhN82Ir+hRH4jLLthEDhgGPTh0EcYbhgp71GS0ZIxDtywnbjNKOI2Y5Xc9g4iv9FEfuOU8NtJ5DeGyG+8ZTeMBAeMhT4O+njDDRPkPVEySTLZgRt2EbeZSNxmipLb3k3kN4nIb6oSfnuI/CYT+U2z7IYJ4IAp0KdCn2a4Ybq8Z0hmSmY5cMNe4jYziNvMVnLb+4j8ZhL5zVHCbz+R3ywiv7mW3TAdHDAb+hzocw03zJP3fMkCyUIHbjhA3GY+cZtFSm77IJHfAiK/xUr4HSLyW0jkt8SyG+aBAxZBXwx9ieGGpfJeJlkuWeHADYeJ2ywjbrNSyW0fIfJbTuS3Sgm/o0R+K4j8Vlt2w1JwwEroq6CvNtywRt5rJesk6x244Rhxm7XEbTYoue3jRH7riPw2KuF3gshvPZHfJstuWAMO2AB9I/RNhhs2y3uLZKtkmwM3nCRus4W4zXYlt32KyG8rkd8OJfxOE/ltI/LbadkNm8EB26HvgL7TcMMuee+W7JHsdeCGM8RtdhO32afkts8S+e0h8tuvhN85Ir+9RH4HLLthFzhgH/T90A8Ybjgo70OSw5IjDtxwnrjNIeI2R5Xc9gUiv8NEfseU8LtI5HeEyO+4ZTccBAcchX4M+nHDDSfkfVJySnLagRsuEbc5SdzmjJLbvkzkd4rI76wSfleI/E4T+Z2z7IYT4IAz0M9CP2e44by8L0guSi45cMNV4jYXiNtcVnLb14j8LhL5XVHC7zqR3yUiv6uW3XAeHHAZ+hXoVw03XJP3dckNyU0HbrhB3OY6cZtbSm77JpHfDSK/20r43SLyu0nkd8eyG66BA25Bvw39juGGu/K+J7kveeDADbeJ29wjbvNQyW3fIfK7T+T3SAm/u0R+D4j8Hlt2w11wwEPoj6A/NtzwRN5PJc8kzx244R5xm6fEbV4oue37RH7PiPxeKuH3gMjvOZHfK8tueAIOeAH9JfRXhhtey/uN5K3knQM3PCRu84a4zXslt/2IyO8tkd8HJfweE/m9I/L7aNkNr8EB76F/gP7RcMMneXtIPCVeDtzwhLiNB3EbbyW3/ZTIz5PIz0cJv2dEfl5Efr6W3fAJHOAN3Qe6r+EGP3n7Sz5LAhy44TlxG3/iNoFKbvsFkd9nIr8vSvi9JPILIPL7atkNfuCAQOhfoH813PBN3t8lPyRBDtzwirjNd+I2P5Xc9msivx9Efr+U8HtD5BdE5Pfbshu+gQN+Qv8F/bfhhj/yDpaE/Pu7Aze8JW4TTNwmVMltvyPyCyHyCxOig997Ir+/RH5hQ+y64Q84IBT6v93+18OG/NcN4eQdXhJBEjHEvhs+ELcJH8LbJpKS2/5I5BeByC+yEn6fiPwiEvlFseyGcOCASNAjQ49iuCGqvKNJoktiOHCDB3GbaMRtYiq5bU8iv+hEfrGU8PMi8otB5BfbshuiggNiQo8FPbbhhjjyjiuJJ4nvwA3exG3iErdJoOS2fYj84hH5JVTCz5fILz6RXyLLbogDDkgAPSH0RIYbEss7iSSpJJkDN/gRt0lC3Ca5ktv2J/JLSuSXQgm/z0R+yYj8Ulp2Q2JwQHLoKaCnNNyQSt6pJWkkaR24IYC4TWriNumU3HYgkV8aIr/0Svh9IfJLS+SXwbIbUoED0kFPDz2D4YaM8s4kySzJ4sANX4nbZCJuk1XJbX8j8stM5JdNCb/vRH5ZiPyyW3ZDRnBAVujZoGc33JBD3jkluSS5HbjhB3GbnMRt8ii57SAiv1xEfnmV8PtJ5JebyC+fZTfkAAfkgZ4Xej7DDfnlXUBSUFLIgRt+EbcpQNymsJLb/k3kV5DIr4gSfn+I/AoR+RW17Ib84IDC0ItAL2q4oZi8i0tKSEo6cEMwcZvixG1KKbntECK/EkR+pZXw+0vkV5LIr4xlNxQDB5SCXhp6GcMNZeVdTlJeUsGBG0KJ25QjblNRyW2HacL7rfJEfpWU8AtL5FeByK+yZTeUBQdUhF4JemXDDVXkXVVSTVLdgRvCEbepStymhpLbDk/kV43Ir6YSfhGI/KoT+dWy7IYq4IAa0GtCr2W4oba860jqSuo5cENE4jZ1iNvUV3LbkYj86hL5NVDCLzKRXz0iv4aW3VAbHFAfegPoDQ03NJJ3Y0kTSVMHbohC3KYxcZtmSm47KpFfEyK/5kr4RSPya0rk18KyGxqBA5pBbw69heGGlvJuJWktaePADdGJ27QibtNWyW3HIPJrTeTXTgm/mER+bYj82lt2Q0twQFvo7aC3N9zQQd4dJZ0knR24IRZxm47Ebbooue3YRH6diPy6KuEXh8ivM5FfN8tu6AAO6AK9K/Ruhhu6y7uHpKeklwM3xCVu04O4TW8ltx2PyK8nkV8fJfziE/n1IvLra9kN3cEBvaH3gd7XcEM/efeXDJAMdOCGBMRt+hO3GaTkthMS+Q0g8hushF8iIr+BRH5DLLuhHzhgEPTB0IcYbhgq72GS4ZIRDtyQmLjNMOI2I5XcdhIiv+FEfqOU8EtK5DeCyG+0ZTcMBQeMhD4K+mjDDWPkPVYyTjLegRuSEbcZS9xmgpLbTk7kN47Ib6ISfimI/MYT+U2y7IYx4IAJ0CdCn2S4YbK8p0imSqY5cENK4jZTiNtMV3LbqYj8phL5zVDCLzWR3zQiv5mW3TAZHDAd+gzoMw03zJL3bMkcyVwHbkhD3GY2cZt5Sm47LZHfHCK/+Ur4pSPym0vkt8CyG2aBA+ZBnw99geGGhfJeJFksWeLADemJ2ywibrNUyW1nIPJbTOS3TAm/jER+S4j8llt2w0JwwFLoy6AvN9ywQt4rJaskqx24IRNxm5XEbdYoue3MRH6riPzWKuGXhchvNZHfOstuWAEOWAN9LfR1hhvWy3uDZKNkkwM3ZCVus4G4zWYlt52NyG8jkd8WJfyyE/ltIvLbatkN68EBm6Fvgb7VcMM2eW+X7JDsdOCGHMRtthO32aXktnMS+e0g8tuthF8uIr+dRH57LLthGzhgF/Td0PcYbtgr732S/ZIDDtyQm7jNPuI2B5Xcdh4iv/1EfoeU8MtL5HeAyO+wZTfsBQcchH4I+mHDDUfkfVRyTHLcgRvyEbc5StzmhJLbzk/kd4zI76QSfgWI/I4T+Z2y7IYj4IAT0E9CP2W44bS8z0jOSs45cENB4jZniNucV3LbhYj8zhL5XVDCrzCR3zkiv4uW3XAaHHAe+gXoFw03XJL3ZckVyVUHbihC3OYycZtrSm67KJHfFSK/60r4FSPyu0rkd8OyGy6BA65Bvw79huGGm/K+JbktuePADcWJ29wibnNXyW2XIPK7TeR3Twm/kkR+d4j87lt2w01wwF3o96DfN9zwQN4PJY8kjx24oRRxm4fEbZ4oue3SRH6PiPyeKuFXhsjvMZHfM8tueAAOeAL9KfRnhhuey/uF5KXklQM3lCVu84K4zWslt12OyO8lkd8bJfzKE/m9IvJ7a9kNz8EBr6G/gf7WcMM7eb+XfJB8dOCGCsRt3hO3+aTktisS+X0g8vNQwq8Skd9HIj9Py254Bw74BN0DuqfhBi95e0t8JL4O3FCZuI03cRs/JbddhcjPh8jPXwm/qkR+vkR+ny27wQsc4AfdH/pnww0B8g6UfJF8deCGasRtAonbfFNy29WJ/L4Q+X1Xwq8Gkd9XIr8flt0QAA74Bv079B+GG4Lk/VPyS/LbgRtqErf5Sdzmj5LbrkXk94vIL1gJv9pEfr+J/EIsuyEIHPAHejD0EMMNf+UdKgnzN2yYsH/tu6EOcZtQ4jbh/uq47bpEfmH+8viFV8KvHpFfWCK/CH/tuuEvOODfrf+vh4ce4e9/3RBR3pEkkSVRHLihPnGbSMRtoiq57QZEfpGJ/KIp4deQyC8KkV90y26ICA6ICj0a9OiGG2LIO6YkliS2Azc0Im4Tk7hNHCW33ZjILxaRX1wl/JoQ+cUm8otn2Q0xwAFxoMeFHs9wQ3x5J5AklCRy4IamxG0SELdJrOS2mxH5JSTyS6KEX3Miv0REfkktuyE+OCAx9CTQkxpuSCbv5JIUkpQO3NCCuE1y4japlNx2SyK/FER+qZXwa0Xkl5LIL41lNyQDB6SCnhp6GsMNaeWdTpJeksGBG1oTt0lH3CajkttuQ+SXnsgvkxJ+bYn8MhD5ZbbshrTggIzQM0HPbLghi7yzSrJJsjtwQzviNlmJ2+RQctvtifyyEfnlVMKvA5FfdiK/XJbdkAUckAN6Tui5DDfklnceSV5JPgdu6EjcJg9xm/xKbrsTkV9eIr8CSvh1JvLLR+RX0LIbcoMD8kMvAL2g4YZC8i4sKSIp6sANXYjbFCZuU0zJbXcl8itC5FdcCb9uRH5FifxKWHZDIXBAMejFoZcw3FBS3qUkpf99mwM3dCduU4q4TVklt92DyK80kV85Jfx6EvmVIfIrb9kNJcEBZaGXg17ecEMFeVeUVJJUduCGXsRtKhK3qaLktnsT+VUi8quqhF8fIr/KRH7VLLuhAjigCvSq0KsZbqgu7xqSmpJaDtzQl7hNDeI2tZXcdj8iv5pEfnWU8OtP5FeLyK+uZTdUBwfUhl4Hel3DDfXkXV/SQNLQgRsGELepT9ymkZLbHkjk14DIr7ESfoOI/BoS+TWx7IZ64IBG0BtDb2K4oam8m0maS1o4cMNg4jbNiNu0VHLbQ4j8mhP5tVLCbyiRXwsiv9aW3dAUHNASeivorQ03tJF3W0k7SXsHbhhG3KYtcZsOSm57OJFfOyK/jkr4jSDya0/k18myG9qAAzpA7wi9k+GGzvLuIukq6ebADSOJ23QhbtNdyW2PIvLrSuTXQwm/0UR+3Yj8elp2Q2dwQHfoPaD3NNzQS969JX0kfR24YQxxm97Ebfopue2xRH59iPz6K+E3jsivL5HfAMtu6AUO6Ae9P/QBhhsGynuQZLBkiAM3jCduM4i4zVAltz2ByG8wkd8wJfwmEvkNIfIbbtkNA8EBQ6EPgz7ccMMIeY+UjJKMduCGScRtRhK3GaPkticT+Y0i8hurhN8UIr/RRH7jLLthBDhgDPSx0McZbhgv7wmSiZJJDtwwlbjNBOI2k5Xc9jQiv4lEflOU8JtO5DeJyG+qZTeMBwdMhj4F+lTDDdPkPV0yQzLTgRtmELeZTtxmlpLbnknkN4PIb7YSfrOI/GYS+c2x7IZp4IBZ0GdDn2O4Ya6850nmSxY4cMNs4jbziNssVHLbc4j85hP5LVLCby6R3wIiv8WW3TAXHLAQ+iLoiw03LJH3UskyyXIHbphH3GYpcZsVSm57PpHfMiK/lUr4LSDyW07kt8qyG5aAA1ZAXwl9leGG1fJeI1krWefADQuJ26whbrNeyW0vIvJbS+S3QQm/xUR+64j8Nlp2w2pwwHroG6BvNNywSd6bJVskWx24YQlxm83EbbYpue2lRH5biPy2K+G3jMhvK5HfDstu2AQO2AZ9O/Qdhht2ynuXZLdkjwM3LCdus4u4zV4lt72CyG83kd8+JfxWEvntIfLbb9kNO8EBe6Hvg77fcMMBeR+UHJIcduCGVcRtDhK3OaLktlcT+R0i8juqhN8aIr/DRH7HLLvhADjgCPSj0I8Zbjgu7xOSk5JTDtywlrjNCeI2p5Xc9joiv5NEfmeU8FtP5HeKyO+sZTccBwechn4G+lnDDefkfV5yQXLRgRs2ELc5T9zmkpLb3kjkd4HI77ISfpuI/C4S+V2x7IZz4IBL0C9Dv2K44aq8r0muS244cMNm4jbXiNvcVHLbW4j8rhP53VLCbyuR3w0iv9uW3XAVHHAT+i3otw033JH3Xck9yX0HbthG3OYucZsHSm57O5HfPSK/h0r47SDyu0/k98iyG+6AAx5Afwj9keGGx/J+InkqeebADTuJ2zwhbvNcyW3vIvJ7SuT3Qgm/3UR+z4j8Xlp2w2NwwHPoL6C/NNzwSt6vJW8kbx24YQ9xm9fEbd4pue29RH5viPzeK+G3j8jvLZHfB8tueAUOeAf9PfQPhhs+yvuTxEPi6cAN+4nbfCJu46Xktg8Q+XkQ+Xkr4XeQyM+TyM/Hshs+ggO8oHtD9zHc4CtvP4m/5LMDNxwibuNH3CZAyW0fJvLzJ/ILVMLvCJHfZyK/L5bd4AsOCIAeCP2L4Yav8v4m+S754cANR4nbfCNuE6Tkto8R+X0n8vuphN9xIr8fRH6/LLvhKzggCPpP6L8MN/yW9x9JsCTEgRtOELf5Q9zmr5LbPknkF0zkF6qE3ykivxAivzChdt3wGxzwF3oo9H/fgG4IK+9wkvCSCKH23XCauE24UN42EUN13PYZIr/wRH6RlPA7S+QXgcgvsmU3hA39fwdEhB4JemTDDVHkHVUSTRLdgRvOEbeJStwmhpLbPk/kF43IL6YSfheI/KIT+cWy7IYo4IAY0GNCj2W4Iba840jiSuI5cMNF4jZxiNvEV3Lbl4j84hL5JVDC7zKRXzwiv4SW3RAbHBAfegLoCQ03JJJ3YkkSSVIHbrhC3CYxcZtkSm77KpFfEiK/5Er4XSPyS0rkl8KyGxKBA5JBTw49heGGlPJOJUktSePADdeJ26QibpNWyW3fIPJLTeSXTgm/m0R+aYj80lt2Q0pwQFro6aCnN9yQQd4ZJZkkmR244RZxm4zEbbIoue3bRH6ZiPyyKuF3h8gvM5FfNstuyAAOyAI9K/RshhuyyzuHJKcklwM33CVuk4O4TW4lt32PyC8nkV8eJfzuE/nlIvLLa9kN2cEBuaHngZ7XcEM+eeeXFJAUdOCGB8Rt8hO3KaTkth8S+RUg8iushN8jIr+CRH5FLLshHzigEPTC0IsYbigq72KS4pISDtzwmLhNMeI2JZXc9hMiv+JEfqWU8HtK5FeCyK+0ZTcUBQeUhF4KemnDDWXkXVZSTlLegRueEbcpS9ymgpLbfk7kV47Ir6ISfi+I/MoT+VWy7IYy4IAK0CtCr2S4obK8q0iqSqo5cMNL4jZViNtUV3Lbr4j8qhL51VDC7zWRXzUiv5qW3VAZHFAdeg3oNQ031JJ3bUkdSV0HbnhD3KY2cZt6Sm77LZFfHSK/+kr4vSPyq0vk18CyG2qBA+pBrw+9geGGhvJuJGksaeLADe+J2zQibtNUyW1/IPJrTOTXTAm/j0R+TYj8mlt2Q0NwQFPozaA3N9zQQt4tJa0krR244RNxm5bEbdoouW0PIr9WRH5tlfDzJPJrTeTXzrIbWoAD2kBvC72d4Yb28u4g6Sjp5MANXsRtOhC36azktr2J/DoS+XVRws+HyK8TkV9Xy25oDw7oDL0L9K6GG7rJu7ukh6SnAzf4ErfpTtyml5Lb9iPy60Hk11sJP38iv55Efn0su6EbOKAX9N7Q+xhu6CvvfpL+kgEO3PCZuE0/4jYDldx2AJFffyK/QUr4BRL5DSDyG2zZDX3BAQOhD4I++P+oecdgv7OtCzfZyQ53sL1j27ZtW//Ytm3btm3btm3byZ2pul3vOKvutzvWqpofRtVYOXV+tc8zZj9dndPdhhu6ybu7pIekpwM3fCBu0524TS8lt/2RyK8HkV9vJfw+Efn1JPLrY9kN3cABvaD3ht7HcENfefeT9JcMcOCGz8Rt+hG3Gajktr8Q+fUn8hukhN9XIr8BRH6DLbuhLzhgIPRB0Acbbhgi76GSYZLhDtzwjbjNUOI2I5Tc9nciv2FEfiOV8PtB5DecyG+UZTcMAQeMgD4S+ijDDaPlPUYyVjLOgRt+ErcZQ9xmvJLb/kXkN5bIb4ISfr+J/MYR+U207IbR4IDx0CdAn2i4YZK8J0umSKY6cMMf4jaTidtMU3Lbf4n8phD5TVfCL1QN3remEvnNsOyGSeCAadCnQ59huGGmvGdJZkvmOHBDaOI2s4jbzFVy215EfrOJ/OYp4ReGyG8Okd98y26YCQ6YC30e9PmGGxbIe6FkkWSxAzeEJW6zkLjNEiW37U3kt4jIb6kSfuGI/BYT+S2z7IYF4IAl0JdCX2a4Ybm8V0hWSlY5cEN44jYriNusVnLbEYj8VhL5rVHCLyKR3yoiv7WW3bAcHLAa+hroaw03rJP3eskGyUYHbohE3GY9cZtNSm47MpHfBiK/zUr4+RD5bSTy22LZDevAAZugb4a+xXDDVnlvk2yX7HDghijEbbYRt9mp5LajEvltJ/LbpYRfNCK/HUR+uy27YSs4YCf0XdB3G27YI++9kn2S/Q7cEJ24zV7iNgeU3LYvkd8+Ir+DSvj5EfntJ/I7ZNkNe8ABB6AfhH7IcMNheR+RHJUcc+AGf+I2R4jbHFdy2wFEfkeJ/E4o4RdI5HeMyO+kZTccBgcch34C+knDDafkfVpyRnLWgRuCiNucJm5zTsltBxP5nSHyO6+EXwiR31kivwuW3XAKHHAO+nnoFww3XJT3JcllyRUHbohB3OYScZurSm47JpHfZSK/a0r4xSLyu0Lkd92yGy6CA65Cvwb9uuGGG/K+Kbklue3ADbGJ29wkbnNHyW3HIfK7ReR3Vwm/uER+t4n87ll2ww1wwB3od6HfM9xwX94PJA8ljxy4IR5xmwfEbR4rue34RH4PifyeKOGXgMjvEZHfU8tuuA8OeAz9CfSnhhueyfu55IXkpQM3JCRu85y4zSslt52IyO8Fkd9rJfwSE/m9JPJ7Y9kNz8ABr6C/hv7GcMNbeb+TvJd8cOCGJMRt3hG3+ajktpMS+b0n8vukhF8yIr8PRH6fLbvhLTjgI/RP0D8bbvgi76+Sb5LvDtyQnLjNV+I2P5Tcdgoiv29Efj+V8EtJ5PedyO+XZTd8AQf8gP4T+i/DDb//vSV///77T72suyEVcZs/xG1Cy/921jY2+aUm8vtL5OelhF8aIr9Q8L/5/y+/MER+/19u+A0O+Hfr/3Uv6GH+3/7ffy+svL0l4SThHbghLXEbb+I2EZTcdjoiv3BEfhGV8EtP5BeeyC+SZTeEBQdEgB4ReiTDDZHl7SOJIonqwA0ZiNv4ELeJpuS2MxL5RSHyi66EXyYiv6hEfr6W3RAZHBANenTovoYb/OTtLwmQBDpwQ2biNv7EbYKU3HYWIr8AIr9gJfyyEvkFEvmFWHaDHzggCHow9BDDDTHkHVMSSxLbgRuyEbeJSdwmjpLbzk7kF4vIL64SfjmI/GIT+cWz7IYY4IA40ONCj2e4Ib68E0gSShI5cENO4jYJiNskVnLbuYj8EhL5JVHCLzeRXyIiv6SW3RAfHJAYehLoSQ03JJN3ckkKSUoHbshD3CY5cZtUSm47L5FfCiK/1Er45SPyS0nkl8ayG5KBA1JBTw09jeGGtPJOJ0kvyeDADfmJ26QjbpNRyW0XIPJLT+SXSQm/gkR+GYj8Mlt2Q1pwQEbomaBnNtyQRd5ZJdkk2R24oRBxm6zEbXIoue3CRH7ZiPxyKuFXhMgvO5FfLstuyAIOyAE9J/RchhtyyzuPJK8knwM3FCVuk4e4TX4lt12MyC8vkV8BJfyKE/nlI/IraNkNucEB+aEXgF7QcEMheReWFJEUdeCGEsRtChO3KabktksS+RUh8iuuhF8pIr+iRH4lLLuhEDigGPTi0EsYbigp71KS0pIyDtxQmrhNKeI2ZZXcdhkiv9JEfuWU8CtL5FeGyK+8ZTeUBAeUhV4OennDDRXkXVFSSVLZgRvKEbepSNymipLbLk/kV4nIr6oSfhWI/CoT+VWz7IYK4IAq0KtCr2a4obq8a0hqSmo5cENF4jY1iNvUVnLblYj8ahL51VHCrzKRXy0iv7qW3VAdHFAbeh3odQ031JO3R1Jf0sCBG6oQt/EQt2mo5LarEvnVJ/JrpIRfNSK/BkR+jS27oR44oCH0RtAbG25oIu+mkmaS5g7cUJ24TVPiNi2U3HYNIr9mRH4tlfCrSeTXnMivlWU3NAEHtIDeEnorww2t5d1G0lbSzoEbahG3aUPcpr2S265N5NeWyK+DEn51iPzaEfl1tOyG1uCA9tA7QO9ouKGTvDtLuki6OnBDXeI2nYnbdFNy2/WI/LoQ+XVXws9D5NeVyK+HZTd0Agd0g94deg/DDT3l3UvSW9LHgRvqE7fpRdymr5LbbkDk15vIr58Sfg2J/PoQ+fW37Iae4IC+0PtB72+4YYC8B0oGSQY7cEMj4jYDidsMUXLbjYn8BhH5DVXCrwmR32Aiv2GW3TAAHDAE+lDowww3DJf3CMlIySgHbmhK3GYEcZvRSm67GZHfSCK/MUr4NSfyG0XkN9ayG4aDA0ZDHwN9rOGGcfIeL5kgmejADS2I24wnbjNJyW23JPKbQOQ3WQm/VkR+E4n8plh2wzhwwCTok6FPMdwwVd7TJNMlMxy4oTVxm2nEbWYque02RH7TifxmKeHXlshvBpHfbMtumAoOmAl9FvTZhhvmyHuuZJ5kvgM3tCNuM5e4zQIlt92eyG8ekd9CJfw6EPnNJ/JbZNkNc8ABC6AvhL7IcMNieS+RLJUsc+CGjsRtlhC3Wa7ktjsR+S0l8luhhF9nIr9lRH4rLbthMThgOfQV0Fcablgl79WSNZK1DtzQhbjNauI265TcdlcivzVEfuuV8OtG5LeWyG+DZTesAgesg74e+gbDDRvlvUmyWbLFgRu6E7fZRNxmq5Lb7kHkt5nIb5sSfj2J/LYQ+W237IaN4ICt0LdB3264YYe8d0p2SXY7cEMv4jY7idvsUXLbvYn8dhH57VXCrw+R324iv32W3bADHLAH+l7o+ww37Jf3AclBySEHbuhL3OYAcZvDSm67H5HfQSK/I0r49SfyO0Tkd9SyG/aDAw5DPwL9qOGGY/I+LjkhOenADQOI2xwnbnNKyW0PJPI7QeR3Wgm/QUR+J4n8zlh2wzFwwCnop6GfMdxwVt7nJOclFxy4YTBxm3PEbS4que0hRH7nifwuKeE3lMjvApHfZctuOAsOuAj9EvTLhhuuyPuq5JrkugM3DCNuc5W4zQ0ltz2cyO8akd9NJfxGEPldJ/K7ZdkNV8ABN6DfhH7LcMNted+R3JXcc+CGkcRt7hC3ua/ktkcR+d0l8nughN9oIr97RH4PLbvhNjjgPvQH0B8abngk78eSJ5KnDtwwhrjNY+I2z5Tc9lgivydEfs+V8BtH5PeUyO+FZTc8Agc8g/4c+gvDDS/l/UryWvLGgRvGE7d5RdzmrZLbnkDk95rI750SfhOJ/N4Q+b237IaX4IC30N9Bf2+44YO8P0o+ST47cMMk4jYfidt8UXLbk4n8PhH5fVXCbwqR32civ2+W3fABHPAF+lfo3ww3fJf3D8lPyS8HbphK3OYHcZvfSm57GpHfTyK/P0r4TSfy+0Xk99eyG76DA35D/wP9r+GGUKG9QoWWeEnChLbvhhnEbf793KxtwobWcdszify8iPy8lfCbReQXhsgvXGi7bvj3x/l/DggL3Rt6uND/64bw8o4giSiJ5MANs4nbRCBuE1nJbc8h8otI5OejhN9cIr9IRH5RLLshPDggMnQf6FEMN0SVdzRJdImvAzfMI24TjbiNn5Lbnk/kF53Iz18JvwVEfr5EfgGW3RAVHOAH3R96gOGGQHkHSYIlIQ7csJC4TRBxmxhKbnsRkV8wkV9MJfwWE/mFEPnFsuyGQHBADOgxoccy3BBb3nEkcSXxHLhhCXGbOMRt4iu57aVEfnGJ/BIo4beMyC8ekV9Cy26IDQ6IDz0B9ISGGxLJO7EkiSSpAzcsJ26TmLhNMiW3vYLILwmRX3Il/FYS+SUl8kth2Q2JwAHJoCeHnsJwQ0p5p5KklqRx4IZVxG1SEbdJq+S2VxP5pSbyS6eE3xoivzREfuktuyElOCAt9HTQ0xtuyCDvjJJMkswO3LCWuE1G4jZZlNz2OiK/TER+WZXwW0/kl5nIL5tlN2QAB2SBnhV6NsMN2eWdQ5JTksuBGzYQt8lB3Ca3ktveSOSXk8gvjxJ+m4j8chH55bXshuzggNzQ80DPa7gh37+fSVJAUtCBGzYTt8lP3KaQktveQuRXgMivsBJ+W4n8ChL5FbHshnzggELQC0MvYrihqLyLSYpLSjhwwzbiNsWI25RUctvbifyKE/mVUsJvB5FfCSK/0pbdUBQcUBJ6KeilDTeUkXdZSTlJeQdu2EncpixxmwpKbnsXkV85Ir+KSvjtJvIrT+RXybIbyoADKkCvCL2S4YbK8q4iqSqp5sANe4jbVCFuU13Jbe8l8qtK5FdDCb99RH7ViPxqWnZDZXBAdeg1oNc03FBL3rUldSR1HbhhP3Gb2sRt6im57QNEfnWI/DxK+B0k8qtL5FffshtqgQPqQfdAr2+4oYG8G0oaSRo7cMMh4jYNids0UXLbh4n8GhH5NVXC7wiRX2Miv2aW3dAAHNAEelPozQw3NJd3C0lLSSsHbjhK3KYFcZvWSm77GJFfSyK/Nkr4HSfya0Xk19ayG5qDA1pDbwO9reGGdvJuL+kg6ejADSeI27QnbtNJyW2fJPLrQOTXWQm/U0R+HYn8ulh2QztwQCfonaF3MdzQVd7dJN0lPRy44TRxm27EbXoque0zRH7difx6KeF3lsivB5Ffb8tu6AoO6Am9F/Tehhv6yLuvpJ+kvwM3nCNu05e4zQAlt32eyK8fkd9AJfwuEPn1J/IbZNkNfcABA6APhD7IcMNgeQ+RDJUMc+CGi8RthhC3Ga7kti8R+Q0l8huhhN9lIr9hRH4jLbthMDhgOPQR0Ecabhgl79GSMZKxDtxwhbjNaOI245Tc9lUivzFEfuOV8LtG5DeWyG+CZTeMAgeMgz4e+gTDDRPlPUkyWTLFgRuuE7eZRNxmqpLbvkHkN5nIb5oSfjeJ/KYQ+U237IaJ4ICp0KdBn264YYa8Z0pmSWY7cMMt4jYzidvMUXLbt4n8ZhH5zVXC7w6R32wiv3mW3TADHDAH+lzo8ww3zJf3AslCySIHbrhL3GYBcZvFSm77HpHfQiK/JUr43SfyW0Tkt9SyG+aDAxZDXwJ9qeGGZfJeLlkhWenADQ+I2ywnbrNKyW0/JPJbQeS3Wgm/R0R+K4n81lh2wzJwwCroq6GvMdywVt7rJOslGxy44TFxm3XEbTYque0nRH7rifw2KeH3lMhvA5HfZstuWAsO2Ah9E/TNhhu2yHurZJtkuwM3PCNus5W4zQ4lt/2cyG8bkd9OJfxeEPltJ/LbZdkNW8ABO6DvhL7LcMNuee+R7JXsc+CGl8Rt9hC32a/ktl8R+e0l8jughN9rIr99RH4HLbthNzhgP/QD0A8abjgk78OSI5KjDtzwhrjNYeI2x5Tc9lsivyNEfseV8HtH5HeUyO+EZTccAgccg34c+gnDDSflfUpyWnLGgRveE7c5RdzmrJLb/kDkd5rI75wSfh+J/M4Q+Z237IaT4ICz0M9BP2+44YK8L0ouSS47cMMn4jYXidtcUXLbn4n8LhH5XVXC7wuR32Uiv2uW3XABHHAF+lXo1ww3XJf3DclNyS0HbvhK3OYGcZvbSm77G5HfTSK/O0r4fSfyu0Xkd9eyG66DA25DvwP9ruGGe/K+L3kgeejADT+I29wnbvNIyW3/JPJ7QOT3WAm/X0R+D4n8nlh2wz1wwCPoj6E/MdzwVN7PJM8lLxy44Tdxm2fEbV4que0/RH7PifxeKeH3l8jvBZHfa8tueAoOeAn9FfTXhhveyPut5J3kvQM3hKpJ/D174jYflNx2aCK/d0R+H5Xw8yLye0/k98myG96AAz5A/wj9k+GGz/L+Ivkq+ebADWGI23whbvNdyW2HJfL7SuT3Qwk/byK/b0R+Py274TM44Dv0H9B/Gm74Je/f/35N8teBG8IRt/lN3CaUl47bDk/k94fIL7QSfhGI/P4S+Xl52XXDL3DAv1v/r4eG7uX1v24II++wEm9JOC/7bohI3CasF2+b8EpuOxKRnzeRXwQl/CIT+YUj8oto2Q1hwAHhoUeAHtFwQyR5R5b4SKI4cIMPcZvIxG2iKrntKER+PkR+0ZTwi0rkF4XIL7plN0QCB0SFHg16dMMNvvL2k/hLAhy4IRpxGz/iNoFKbjs6kZ8/kV+QEn6+RH4BRH7Blt3gCw4IhB4EPdhwQ4i8Y0hiSmI5cIMfcZsYxG1iK7ltfyK/mER+cZTwCyDyi0XkF9eyG0LAAbGhx4Ee13BDPHnHlySQJHTghkDiNvGJ2yRScttBRH4JiPwSK+EXTOSXkMgviWU3xAMHJIKeGHoSww1J5Z1MklySwoEbQojbJCNuk1LJbccg8ktO5JdKCb+YRH4piPxSW3ZDUnBASuipoKc23JBG3mkl6STpHbghFnGbtMRtMii57dhEfumI/DIq4ReHyC89kV8my25IAw7IAD0j9EyGGzLLO4skqySbAzfEJW6ThbhNdiW3HY/ILyuRXw4l/OIT+WUj8stp2Q2ZwQHZoeeAntNwQy5555bkkeR14IYExG1yE7fJp+S2ExL55SHyy6+EXyIiv7xEfgUsuyEXOCAf9PzQCxhuKCjvQpLCkiIO3JCYuE0h4jZFldx2EiK/wkR+xZTwS0rkV4TIr7hlNxQEBxSFXgx6ccMNJeRdUlJKUtqBG5IRtylJ3KaMkttOTuRXisivrBJ+KYj8ShP5lbPshhLggDLQy0IvZ7ihvLwrSCpKKjlwQ0riNhWI21RWctupiPwqEvlVUcIvNZFfJSK/qpbdUB4cUBl6FehVDTdUk3d1SQ1JTQduSEPcpjpxm1pKbjstkV8NIr/aSvilI/KrSeRXx7IbqoEDakGvDb2O4Ya68q4n8UjqO3BDeuI29YjbNFBy2xmI/DxEfg2V8MtI5FefyK+RZTfUBQc0gN4QeiPDDY3l3UTSVNLMgRsyEbdpQtymuZLbzkzk15TIr4USflmI/JoR+bW07IbG4IDm0FtAb2m4oZW8W0vaSNo6cENW4jatidu0U3Lb2Yj82hD5tVfCLzuRX1sivw6W3dAKHNAOenvoHQw3dJR3J0lnSRcHbshB3KYTcZuuSm47J5FfZyK/bkr45SLy60Lk192yGzqCA7pC7wa9u+GGHvLuKekl6e3ADbmJ2/QkbtNHyW3nIfLrReTXVwm/vER+vYn8+ll2Qw9wQB/ofaH3M9zQX94DJAMlgxy4IR9xmwHEbQYrue38RH4DifyGKOFXgMhvEJHfUMtu6A8OGAx9CPShhhuGyXu4ZIRkpAM3FCRuM5y4zSglt12IyG8Ekd9oJfwKE/mNJPIbY9kNw8ABo6CPhj7GcMNYeY+TjJdMcOCGIsRtxhG3majktosS+Y0n8pukhF8xIr8JRH6TLbthLDhgIvRJ0Ccbbpgi76mSaZLpDtxQnLjNVOI2M5Tcdgkiv2lEfjOV8CtJ5DedyG+WZTdMAQfMgD4T+izDDbPlPUcyVzLPgRtKEbeZQ9xmvpLbLk3kN5fIb4ESfmWI/OYR+S207IbZ4ID50BdAX2i4YZG8F0uWSJY6cENZ4jaLidssU3Lb5Yj8lhD5LVfCrzyR31IivxWW3bAIHLAM+nLoKww3rJT3KslqyRoHbqhA3GYVcZu1Sm67IpHfaiK/dUr4VSLyW0Pkt96yG1aCA9ZCXwd9veGGDfLeKNkk2ezADZWJ22wkbrNFyW1XIfLbROS3VQm/qkR+m4n8tll2wwZwwBboW6FvM9ywXd47JDsluxy4oRpxmx3EbXYrue3qRH47ifz2KOFXg8hvF5HfXstu2A4O2A19D/S9hhv2yXu/5IDkoAM31CRus5+4zSElt12LyO8Akd9hJfxqE/kdJPI7YtkN+8ABh6Afhn7EcMNReR+THJeccOCGOsRtjhG3OanktusS+R0n8julhF89Ir8TRH6nLbvhKDjgJPRT0E8bbjgj77OSc5LzDtzgIW5zlrjNBSW3XZ/I7xyR30Ul/BoQ+Z0n8rtk2Q1nwAEXoF+Efslww2V5X5FclVxz4IaGxG2uELe5ruS2GxH5XSXyu6GEX2Miv2tEfjctu+EyOOA69BvQbxpuuCXv25I7krsO3NCEuM1t4jb3lNx2UyK/O0R+95Xwa0bkd5fI74FlN9wCB9yDfh/6A8MND+X9SPJY8sSBG5oTt3lE3OapkttuQeT3mMjvmRJ+LYn8nhD5PbfshofggKfQn0F/brjhhbxfSl5JXjtwQyviNi+J27xRctutifxeEfm9VcKvDZHfayK/d5bd8AIc8Ab6W+jvDDe8l/cHyUfJJwduaEvc5gNxm89Kbrsdkd9HIr8vSvi1J/L7ROT31bIb3oMDPkP/Av2r4YZv8v4u+SH56cANHYjbfCdu80vJbXck8vtB5PdbCb9ORH4/ifz+WHbDN3DAL+i/of8x3PBX3qHCeIUKLfEKY98NnYnb/Pu5WduECaPjtrsQ+YUm8gurhF9XIj8vIj/vMHbd8Bcc8O/W/+thoXuH+V83hJN3eEkESUQHbuhG3CY8cZtISm67O5FfBCK/yEr49SDyi0jk52PZDeHAAZGgR4buY7ghiryjSqJJojtwQ0/iNlGJ2/gque1eRH7RiPz8lPDrTeQXncjP37IbooADfKH7Qfc33BAg70BJkCTYgRv6ELcJJG4TouS2+xL5BRH5xVDCrx+RXzCRX0zLbggAB4RAjwE9puGGWPKOLYkjievADf2J28QmbhNPyW0PIPKLQ+QXXwm/gUR+cYn8Elh2QyxwQDzo8aEnMNyQUN6JJIklSRy4YRBxm0TEbZIque3BRH6JifySKeE3hMgvCZFfcstuSAgOSAo9GfTkhhtSyDulJJUktQM3DCVuk5K4TRoltz2MyC8VkV9aJfyGE/mlJvJLZ9kNKcABaaCnhZ7OcEN6eWeQZJRkcuCGEcRtMhC3yazktkcS+WUk8suihN8oIr9MRH5ZLbshPTggM/Qs0LMabsgm7+ySHJKcDtwwmrhNduI2uZTc9hgivxxEfrmV8BtL5JeTyC+PZTdkAwfkgp4beh7DDXnlne/fzyUp4MAN44jb5CNuU1DJbY8n8stP5FdICb8JRH4FiPwKW3ZDXnBAQeiFoBc23FBE3kUlxSTFHbhhInGbosRtSii57UlEfsWI/Eoq4TeZyK84kV8py24oAg4oAb0k9FKGG0rLu4ykrKScAzdMIW5ThrhNeSW3PZXIryyRXwUl/KYR+ZUj8qto2Q2lwQHloVeAXtFwQyV5V5ZUkVR14IbpxG0qE7eppuS2ZxD5VSHyq66E30wiv6pEfjUsu6ESOKAa9OrQaxhuqCnvWpLakjoO3DCLuE0t4jZ1ldz2bCK/2kR+9ZTwm0PkV4fIz2PZDTXBAXWh14PuMdxQX94NJA0ljRy4YS5xmwbEbRorue15RH4NifyaKOE3n8ivEZFfU8tuqA8OaAy9CfSmhhuaybu5pIWkpQM3LCBu05y4TSslt72QyK8FkV9rJfwWEfm1JPJrY9kNzcABraC3ht7GcENbebeTtJd0cOCGxcRt2hG36ajktpcQ+bUn8uukhN9SIr8ORH6dLbuhLTigI/RO0Dsbbugi766SbpLuDtywjLhNV+I2PZTc9nIiv25Efj2V8FtB5NedyK+XZTd0AQf0gN4Tei/DDb3l3UfSV9LPgRtWErfpQ9ymv5LbXkXk15fIb4ASfquJ/PoR+Q207Ibe4ID+0AdAH2i4YZC8B0uGSIY6cMMa4jaDidsMU3Lba4n8hhD5DVfCbx2R31AivxGW3TAIHDAM+nDoIww3jJT3KMloyRgHblhP3GYUcZuxSm57A5HfaCK/cUr4bSTyG0PkN96yG0aCA8ZCHwd9vOGGCfKeKJkkmezADZuI20wkbjNFyW1vJvKbROQ3VQm/LUR+k4n8pll2wwRwwBToU6FPM9wwXd4zJDMlsxy4YStxmxnEbWYrue1tRH4zifzmKOG3nchvFpHfXMtumA4OmA19DvS5hhvmyXu+ZIFkoQM37CBuM5+4zSIlt72TyG8Bkd9iJfx2EfktJPJbYtkN88ABi6Avhr7EcMNSeS+TLJescOCG3cRtlhG3WanktvcQ+S0n8lulhN9eIr8VRH6rLbthKThgJfRV0Fcbblgj77WSdZL1Dtywj7jNWuI2G5Tc9n4iv3VEfhuV8DtA5LeeyG+TZTesAQdsgL4R+ibDDZvlvUWyVbLNgRsOErfZQtxmu5LbPkTkt5XIb4cSfoeJ/LYR+e207IbN4IDt0HdA32m4YZe8d0v2SPY6cMMR4ja7idvsU3LbR4n89hD57VfC7xiR314ivwOW3bALHLAP+n7oBww3HJT3IclhyREHbjhO3OYQcZujSm77BJHfYSK/Y0r4nSTyO0Lkd9yyGw6CA45CPwb9uOGGE/I+KTklOe3ADaeI25wkbnNGyW2fJvI7ReR3Vgm/M0R+p4n8zll2wwlwwBnoZ6GfM9xwXt4XJBcllxy44SxxmwvEbS4rue1zRH4XifyuKOF3nsjvEpHfVctuOA8OuAz9CvSrhhuuyfu65IbkpgM3XCBuc524zS0lt32RyO8Gkd9tJfwuEfndJPK7Y9kN18ABt6Dfhn7HcMNded+T3Jc8cOCGy8Rt7hG3eajktq8Q+d0n8nukhN9VIr8HRH6PLbvhLjjgIfRH0B8bbngi76eSZ5LnDtxwjbjNU+I2L5Tc9nUiv2dEfi+V8LtB5PecyO+VZTc8AQe8gP4S+ivDDa/l/UbyVvLOgRtuErd5Q9zmvZLbvkXk95bI74MSfreJ/N4R+X207IbX4ID30D9A/2i44ZO8P0u+SL46cMMd4jafidt8U3Lbd4n8vhD5fVfC7x6R31civx+W3fAJHPAN+nfoPww3/JT3L8nvf7/uwA33idv8Im7zV8ltPyDy+03kFyqsDn4Pifz+EPmFDmvXDT/BAX+h/9vtvx467P+6wUveYSRhJd5h7bvhEXGbMGF524RTctuPifzCEvmFV8LvCZGfN5FfBMtu8AIHhIMeHnoEww0R5R1JElni48ANT4nbRCJuE0XJbT8j8otM5BdVCb/nRH4+RH7RLLshIjggCvSo0KMZbogub1+Jn8TfgRteELfxJW4ToOS2XxL5+RH5BSrh94rIz5/IL8iyG6KDAwKgB0IPMtwQLO8QSQxJTAdueE3cJoS4TSwlt/2GyC8GkV9sJfzeEvnFJPKLY9kNweCAWNBjQ49juCGuvONJ4ksSOHDDO+I28YjbJFRy2++J/OIT+SVSwu8DkV8CIr/Elt0QFxyQEHoi6IkNNySRd1JJMklyB274SNwmKXGbFEpu+xORXzIiv5RK+H0m8ktO5JfKshuSgANSQE8JPZXhhtTyTiNJK0nnwA1fiNukIW6TXsltfyXyS0vkl0EJv29EfumI/DJadkNqcEB66BmgZzTckEnemSVZJFkduOE7cZvMxG2yKbntH0R+WYj8sivh95PILyuRXw7LbsgEDsgGPTv0HIYbcso7lyS3JI8DN/wibpOLuE1eJbf9m8gvN5FfPiX8/hD55SHyy2/ZDTnBAXmh54Oe33BDAXkXlBSSFHbghr/EbQoStymi5LZD1eJ9qxCRX1El/EIT+RUm8itm2Q0FwAFFoBeFXsxwQ3F5l5CUlJRy4AYv4jYliNuUVnLbYYj8ShL5lVHCLyyRXykiv7KW3VAcHFAaehnoZQ03lJN3eUkFSUUHbvAmblOeuE0lJbcdjsivApFfZSX8whP5VSTyq2LZDeXAAZWgV4ZexXBDVXlXk1SX1HDghgjEbaoRt6mp5LYjEvlVJ/KrpYRfJCK/GkR+tS27oSo4oCb0WtBrG26oI++6knoSjwM3RCZuU5e4TX0lt+1D5FePyK+BEn5RiPw8RH4NLbuhDjigPvQG0Bsabmgk78aSJpKmDtwQlbhNY+I2zZTcdjQivyZEfs2V8ItO5NeUyK+FZTc0Agc0g94cegvDDS3l3UrSWtLGgRt8idu0Im7TVslt+xH5tSbya6eEnz+RXxsiv/aW3dASHNAWejvo7Q03dJB3R0knSWcHbgggbtORuE0XJbcdSOTXicivqxJ+QUR+nYn8ull2QwdwQBfoXaF3M9zQXd49JD0lvRy4IZi4TQ/iNr2V3HYIkV9PIr8+SvjFIPLrReTX17IbuoMDekPvA72v4YZ+8u4vGSAZ6MANMYnb9CduM0jJbcci8htA5DdYCb/YRH4DifyGWHZDP3DAIOiDoQ8x3DBU3sMkwyUjHLghDnGbYcRtRiq57bhEfsOJ/EYp4RePyG8Ekd9oy24YCg4YCX0U9NGGG8bIe6xknGS8AzfEJ24zlrjNBCW3nYDIbxyR30Ql/BIS+Y0n8ptk2Q1jwAEToE+EPslww2R5T5FMlUxz4IZExG2mELeZruS2ExP5TSXym6GEXxIiv2lEfjMtu2EyOGA69BnQZxpumCXv2ZI5krkO3JCUuM1s4jbzlNx2MiK/OUR+85XwS07kN5fIb4FlN8wCB8yDPh/6AsMNC+W9SLJYssSBG1IQt1lE3GapkttOSeS3mMhvmRJ+qYj8lhD5LbfshoXggKXQl0FfbrhhhbxXSlZJVjtwQ2riNiuJ26xRcttpiPxWEfmtVcIvLZHfaiK/dZbdsAIcsAb6WujrDDesl/cGyUbJJgduSEfcZgNxm81Kbjs9kd9GIr8tSvhlIPLbROS31bIb1oMDNkPfAn2r4YZt8t4u2SHZ6cANGYnbbCdus0vJbWci8ttB5LdbCb/MRH47ifz2WHbDNnDALui7oe8x3LBX3vsk+yUHHLghC3GbfcRtDiq57axEfvuJ/A4p4ZeNyO8Akd9hy27YCw44CP0Q9MOGG47I+6jkmOS4AzdkJ25zlLjNCSW3nYPI7xiR30kl/HIS+R0n8jtl2Q1HwAEnoJ+Efspww2l5n5GclZxz4IZcxG3OELc5r+S2cxP5nSXyu6CEXx4iv3NEfhctu+E0OOA89AvQLxpuuCTvy5IrkqsO3JCXuM1l4jbXlNx2PiK/K0R+15Xwy0/kd5XI74ZlN1wCB1yDfh36DcMNN+V9S3JbcseBGwoQt7lF3OauktsuSOR3m8jvnhJ+hYj87hD53bfshpvggLvQ70G/b7jhgbwfSh5JHjtwQ2HiNg+J2zxRcttFiPweEfk9VcKvKJHfYyK/Z5bd8AAc8AT6U+jPDDc8l/cLyUvJKwduKEbc5gVxm9dKbrs4kd9LIr83SviVIPJ7ReT31rIbnoMDXkN/A/2t4YZ38n4v+SD56MANJYnbvCdu80nJbZci8vtA5PdZCb/SRH4fify+WHbDO3DAJ+ifoX8x3PBV3t8k3yU/HLihDHGbb8Rtfiq57bJEft+J/H4p4VeOyO8Hkd9vy274Cg74Cf0X9N+GG/7I+68klLdXqNDe9t1QnrjNX+I2Xt46brsCkV8obx6/MEr4VSTyC03kF9bbrhv+gAP+3fp/PQz0sN7/6wZveYeThJdEcOCGSsRtwhG3iajktisT+YUn8oukhF8VIr8IRH6RLbvBGxwQEXok6JENN/jIO4okqiSaAzdUJW4ThbhNdCW3XY3ILyqRn68SftWJ/KIR+flZdoMPOCA6dF/ofoYb/OUdIAmUBDlwQw3iNgHEbYKV3HZNIr9AIr8QJfxqEfkFEfnFsOwGf3BAMPQQ6DEMN8SUdyxJbEkcB26oTdwmFnGbuEpuuw6RX2wiv3hK+NUl8otD5BffshtiggPiQo8HPb7hhgTyTihJJEnswA31iNskJG6TRMlte4j8EhH5JVXCrz6RX2Iiv2SW3ZAAHJAEelLoyQw3JJd3CklKSSoHbmhA3CYFcZvUSm67IZFfSiK/NEr4NSLyS0Xkl9ayG5KDA1JDTwM9reGGdPJOL8kgyejADY2J26QnbpNJyW03IfLLQOSXWQm/pkR+GYn8slh2QzpwQCbomaFnMdyQVd7ZJNklORy4oRlxm2zEbXIque3mRH7ZifxyKeHXgsgvB5FfbstuyAoOyAk9F/TchhvyyDuvJN+/n82BG1oSt8lL3KaAkttuReSXj8ivoBJ+rYn88hP5FbLshjzggALQC0IvZLihsLyLSIpKijlwQxviNkWI2xRXctttifyKEvmVUMKvHZFfMSK/kpbdUBgcUBx6CeglDTeUkndpSRlJWQduaE/cpjRxm3JKbrsDkV8ZIr/ySvh1JPIrS+RXwbIbSoEDykEvD72C4YaK8q4kqSyp4sANnYjbVCJuU1XJbXcm8qtM5FdNCb8uRH5ViPyqW3ZDRXBAVejVoFc33FBD3jUltSS1HbihK3GbmsRt6ii57W5EfrWI/Ooq4dedyK82kV89y26oAQ6oA70u9HqGGzzyri9pIGnowA09iNvUJ27TSMlt9yTya0Dk11gJv15Efg2J/JpYdoMHHNAIemPoTQw3NJV3M0lzSQsHbuhN3KYZcZuWSm67D5FfcyK/Vkr49SXya0Hk19qyG5qCA1pCbwW9teGGNvJuK2knae/ADf2I27QlbtNByW33J/JrR+TXUQm/AUR+7Yn8Oll2QxtwQAfoHaF3MtzQWd5dJF0l3Ry4YSBxmy7Ebborue1BRH5difx6KOE3mMivG5FfT8tu6AwO6A69B/Sehht6ybu3pI+krwM3DCFu05u4TT8ltz2UyK8PkV9/JfyGEfn1JfIbYNkNvcAB/aD3hz7AcMNAeQ+SDJYMceCG4cRtBhG3GarktkcQ+Q0m8humhN9IIr8hRH7DLbthIDhgKPRh0Icbbhgh75GSUZLRDtwwirjNSOI2Y5Tc9mgiv1FEfmOV8BtD5DeayG+cZTeMAAeMgT4W+jjDDePlPUEyUTLJgRvGEreZQNxmspLbHkfkN5HIb4oSfuOJ/CYR+U217Ibx4IDJ0KdAn2q4YZq8p0tmSGY6cMME4jbTidvMUnLbE4n8ZhD5zVbCbxKR30wivzmW3TANHDAL+mzocww3zJX3PMl8yQIHbphM3GYecZuFSm57CpHffCK/RUr4TSXyW0Dkt9iyG+aCAxZCXwR9seGGJfJeKlkmWe7ADdOI2ywlbrNCyW1PJ/JbRuS3Ugm/GUR+y4n8Vll2wxJwwAroK6GvMtywWt5rJGsl6xy4YSZxmzXEbdYrue1ZRH5rifw2KOE3m8hvHZHfRstuWA0OWA99A/SNhhs2yXuzZItkqwM3zCFus5m4zTYltz2XyG8Lkd92JfzmEfltJfLbYdkNm8AB26Bvh77DcMNOee+S7JbsceCG+cRtdhG32avkthcQ+e0m8tunhN9CIr89RH77LbthJzhgL/R90Pcbbjgg74OSQ5LDDtywiLjNQeI2R5Tc9mIiv0NEfkeV8FtC5HeYyO+YZTccAAccgX4U+jHDDcflfUJyUnLKgRuWErc5QdzmtJLbXkbkd5LI74wSfsuJ/E4R+Z217Ibj4IDT0M9AP2u44Zy8z0suSC46cMMK4jbnidtcUnLbK4n8LhD5XVbCbxWR30UivyuW3XAOHHAJ+mXoVww3XJX3Ncl1yQ0HblhN3OYacZubSm57DZHfdSK/W0r4rSXyu0Hkd9uyG66CA25CvwX9tuGGO/K+K7knue/ADeuI29wlbvNAyW2vJ/K7R+T3UAm/DUR+94n8Hll2wx1wwAPoD6E/MtzwWN5PJE8lzxy4YSNxmyfEbZ4rue1NRH5PifxeKOG3mcjvGZHfS8tueAwOeA79BfSXhhteyfu15I3krQM3bCFu85q4zTslt72VyO8Nkd97Jfy2Efm9JfL7YNkNr8AB76C/h/7BcMNHeX+SfJZ8ceCG7cRtPhG3+arktncQ+X0m8vumhN9OIr8vRH7fLbvhIzjgK/Rv0L8bbvgh75+SX5LfDtywi7jNT+I2f5Tc9m4iv19Efn+V8NtD5PebyC9UOLtu+AEO+AP9L/R/PwO6IbS8vSRhJGHD2XfDXuI2XuF423iH03Hb+4j8whD5hVPCbz+RX1giv/CW3RA63P85wBt6OOjhDTdEkHdESSRJZAduOEDcJiJxGx8lt32QyC8SkV8UJfwOEflFJvKLatkNEcABPtCjQI9quCGavKNLfCV+DtxwmLhNdOI2/kpu+wiRny+RX4ASfkeJ/PyI/AItuyEaOMAfegD0QMMNQfIOloRIYjhwwzHiNsHEbWIque3jRH4hRH6xlPA7QeQXg8gvtmU3BIEDYkKPBT224YY48o4riSeJ78ANJ4nbxCVuk0DJbZ8i8otH5JdQCb/TRH7xifwSWXZDHHBAAugJoScy3JBY3kkkSSXJHLjhDHGbJMRtkiu57bNEfkmJ/FIo4XeOyC8ZkV9Ky25IDA5IDj0F9JSGG1LJO7UkjSStAzecJ26TmrhNOiW3fYHILw2RX3ol/C4S+aUl8stg2Q2pwAHpoKeHnsFwQ0Z5Z5JklmRx4IZLxG0yEbfJquS2LxP5ZSbyy6aE3xUivyxEftktuyEjOCAr9GzQsxtuyCHvnJJcktwO3HCVuE1O4jZ5lNz2NSK/XER+eZXwu07kl5vIL59lN+QAB+SBnhd6PsMN+eVdQFJQUsiBG24QtylA3Kawktu+SeRXkMiviBJ+t4j8ChH5FbXshvzggMLQi0AvarihmLyLS0pISjpww23iNsWJ25RSctt3iPxKEPmVVsLvLpFfSSK/MpbdUAwcUAp6aehlDDeUlXc5SXlJBQduuEfcphxxm4pKbvs+kV95Ir9KSvg9IPKrQORX2bIbyoIDKkKvBL2y4YYq8q4qqSap7sAND4nbVCVuU0PJbT8i8qtG5FdTCb/HRH7VifxqWXZDFXBADeg1odcy3FBb3nUkdSX1HLjhCXGbOsRtPEpu+ymRX10iv/pK+D0j8qtH5NfAshtqgwM80OtDb2C4oaG8G0kaS5o4cMNz4jaNiNs0VXLbL4j8GhP5NVPC7yWRXxMiv+aW3dAQHNAUejPozQ03tJB3S0krSWsHbnhF3KYlcZs2Sm77NZFfKyK/tkr4vSHya03k186yG1qAA9pAbwu9neGG9vLuIOko6eTADW+J23QgbtNZyW2/I/LrSOTXRQm/90R+nYj8ulp2Q3twQGfoXaB3NdzQTd7dJT0kPR244QNxm+7EbXopue2PRH49iPx6K+H3icivJ5FfH8tu6AYO6AW9N/Q+hhv6yrufpL9kgAM3fCZu04+4zUAlt/2FyK8/kd8gJfy+EvkNIPIbbNkNfcEBA6EPgj7YcMMQeQ+VDJMMd+CGb8RthhK3GaHktr8T+Q0j8huphN8PIr/hRH6jLLthCDhgBPSR0EcZbhgt7zGSsZJxDtzwk7jNGOI245Xc9i8iv7FEfhOU8PtN5DeOyG+iZTeMBgeMhz4B+kTDDZPkPVkyRTLVgRv+ELeZTNxmmpLb/kvkN4XIb7oSfqFq8741lchvhmU3TAIHTIM+HfoMww0z5T1LMlsyx4EbQhO3mUXcZq6S2/Yi8ptN5DdPCb8wRH5ziPzmW3bDTHDAXOjzoM833LBA3gsliySLHbghLHGbhcRtlii5bW8iv0VEfkuV8AtH5LeYyG+ZZTcsAAcsgb4U+jLDDcvlvUKyUrLKgRvCE7dZQdxmtZLbjkDkt5LIb40SfhGJ/FYR+a217Ibl4IDV0NdAX2u4YZ2810s2SDY6cEMk4jbridtsUnLbkYn8NhD5bVbCz4fIbyOR3xbLblgHDtgEfTP0LYYbtsp7m2S7ZIcDN0QhbrONuM1OJbcdlchvO5HfLiX8ohH57SDy223ZDVvBATuh74K+23DDHnnvleyT7HfghujEbfYStzmg5LZ9ifz2EfkdVMLPj8hvP5HfIctu2AMOOAD9IPRDhhsOy/uI5KjkmAM3+BO3OULc5riS2w4g8jtK5HdCCb9AIr9jRH4nLbvhMDjgOPQT0E8abjgl79OSM5KzDtwQRNzmNHGbc0puO5jI7wyR33kl/EKI/M4S+V2w7IZT4IBz0M9Dv2C44aK8L0kuS644cEMM4jaXiNtcVXLbMYn8LhP5XVPCLxaR3xUiv+uW3XARHHAV+jXo1w033JD3TcktyW0HbohN3OYmcZs7Sm47DpHfLSK/u0r4xSXyu03kd8+yG26AA+5Avwv9nuGG+/J+IHkoeeTADfGI2zwgbvNYyW3HJ/J7SOT3RAm/BER+j4j8nlp2w31wwGPoT6A/NdzwTN7PJS8kLx24ISFxm+fEbV4pue1ERH4viPxeK+GXmMjvJZHfG8tueAYOeAX9NfQ3hhveyvud5L3kgwM3JCFu8464zUclt52UyO89kd8nJfySEfl9IPL7bNkNb8EBH6F/gv7ZcMMXeX+VfJN8d+CG5MRtvhK3+aHktlMQ+X0j8vuphF9KIr/vRH6/LLvhCzjgB/Sf0H8Zbvj97y35KwkV3r4bUhG3+UPcJnR4HbedmsjvL5GflxJ+aYj8QoXn8QsT3q4bfoMD/t36f90Lepjw/+uGsPL2loSThHfghrTEbbyJ20RQctvpiPzCEflFVMIvPZFfeCK/SJbdEBYcEAF6ROiRDDdElrePJIokqgM3ZCBu40PcJpqS285I5BeFyC+6En6ZiPyiEvn5WnZDZHBANOjRofsabvCTt78kQBLowA2Zidv4E7cJUnLbWYj8Aoj8gpXwy0rkF0jkF2LZDX7ggCDowdBDDDfEkHdMSSxJbAduyEbcJiZxmzhKbjs7kV8sIr+4SvjlIPKLTeQXz7IbYoAD4kCPCz2e4Yb48k4gSShJ5MANOYnbJCBuk1jJbeci8ktI5JdECb/cRH6JiPySWnZDfHBAYuhJoCc13JBM3sklKSQpHbghD3Gb5MRtUim57bxEfimI/FIr4ZePyC8lkV8ay25IBg5IBT019DSGG9LKO50kvSSDAzfkJ26TjrhNRiW3XYDILz2RXyYl/AoS+WUg8sts2Q1pwQEZoWeCntlwQxZ5Z5Vkk2R34IZCxG2yErfJoeS2CxP5ZSPyy6mEXxEiv+xEfrksuyELOCAH9JzQcxluyC3vPJK8knwO3FCUuE0e4jb5ldx2MSK/vER+BZTwK07kl4/Ir6BlN+QGB+SHXgB6QcMNheRdWFJEUtSBG0oQtylM3KaYktsuSeRXhMivuBJ+pYj8ihL5lbDshkLggGLQi0MvYbihpLxLSUpLyjhwQ2niNqWI25RVcttliPxKE/mVU8KvLJFfGSK/8pbdUBIcUBZ6OejlDTdUkHdFSSVJZQduKEfcpiJxmypKbrs8kV8lIr+qSvhVIPKrTORXzbIbKoADqkCvCr2a4Ybq8q4hqSmp5cANFYnb1CBuU1vJbVci8qtJ5FdHCb/KRH61iPzqWnZDdXBAbeh1oNc13FBP3h5JfUkDB26oQtzGQ9ymoZLbrkrkV5/Ir5ESftWI/BoQ+TW27IZ64ICG0BtBb2y4oYm8m0qaSZo7cEN14jZNidu0UHLbNYj8mhH5tVTCryaRX3Miv1aW3dAEHNACekvorQw3tJZ3G0lbSTsHbqhF3KYNcZv2Sm67NpFfWyK/Dkr41SHya0fk19GyG1qDA9pD7wC9o+GGTvLuLOki6erADXWJ23QmbtNNyW3XI/LrQuTXXQk/D5FfVyK/Hpbd0Akc0A16d+g9DDf0lHcvSW9JHwduqE/cphdxm75KbrsBkV9vIr9+Svg1JPLrQ+TX37IbeoID+kLvB72/4YYB8h4oGSQZ7MANjYjbDCRuM0TJbTcm8htE5DdUCb8mRH6DifyGWXbDAHDAEOhDoQ8z3DBc3iMkIyWjHLihKXGbEcRtRiu57WZEfiOJ/MYo4decyG8Ukd9Yy24YDg4YDX0M9LGGG8bJe7xkgmSiAze0IG4znrjNJCW33ZLIbwKR32Ql/FoR+U0k8pti2Q3jwAGToE+GPsVww1R5T5NMl8xw4IbWxG2mEbeZqeS22xD5TSfym6WEX1sivxlEfrMtu2EqOGAm9FnQZxtumCPvuZJ5kvkO3NCOuM1c4jYLlNx2eyK/eUR+C5Xw60DkN5/Ib5FlN8wBByyAvhD6IsMNi+W9RLJUssyBGzoSt1lC3Ga5ktvuROS3lMhvhRJ+nYn8lhH5rbTshsXggOXQV0BfabhhlbxXS9ZI1jpwQxfiNquJ26xTcttdifzWEPmtV8KvG5HfWiK/DZbdsAocsA76eugbDDdslPcmyWbJFgdu6E7cZhNxm61KbrsHkd9mIr9tSvj1JPLbQuS33bIbNoIDtkLfBn274YYd8t4p2SXZ7cANvYjb7CRus0fJbfcm8ttF5LdXCb8+RH67ifz2WXbDDnDAHuh7oe8z3LBf3gckByWHHLihL3GbA8RtDiu57X5EfgeJ/I4o4defyO8Qkd9Ry27YDw44DP0I9KOGG47J+7jkhOSkAzcMIG5znLjNKSW3PZDI7wSR32kl/AYR+Z0k8jtj2Q3HwAGnoJ+GfsZww1l5n5Ocl1xw4IbBxG3OEbe5qOS2hxD5nSfyu6SE31AivwtEfpctu+EsOOAi9EvQLxtuuCLvq5JrkusO3DCMuM1V4jY3lNz2cCK/a0R+N5XwG0Hkd53I75ZlN1wBB9yAfhP6LcMNt+V9R3JXcs+BG0YSt7lD3Oa+ktseReR3l8jvgRJ+o4n87hH5PbTshtvggPvQH0B/aLjhkbwfS55InjpwwxjiNo+J2zxTcttjifyeEPk9V8JvHJHfUyK/F5bd8Agc8Az6c+gvDDe8lPcryWvJGwduGE/c5hVxm7dKbnsCkd9rIr93SvhNJPJ7Q+T33rIbXoID3kJ/B/294YYP8v4o+ST57MANk4jbfCRu80XJbU8m8vtE5PdVCb8pRH6fify+WXbDB3DAF+hfoX8z3PBd3j8kPyW/HLhhKnGbH8Rtfiu57WlEfj+J/P4o4TedyO8Xkd9fy274Dg74Df0P9L+GG0JF8AoVWuIlCRPBvhtmELf593OztgkbQcdtzyTy8yLy81bCbxaRXxgiv3AR7Lrh3x/n/zkgLHRv6OEi/K8bwss7giSiJJIDN8wmbhOBuE1kJbc9h8gvIpGfjxJ+c4n8IhH5RbHshvDggMjQfaBHMdwQVd7RJNElvg7cMI+4TTTiNn5Kbns+kV90Ij9/JfwWEPn5EvkFWHZDVHCAH3R/6AGGGwLlHSQJloQ4cMNC4jZBxG1iKLntRUR+wUR+MZXwW0zkF0LkF8uyGwLBATGgx4Qey3BDbHnHkcSVxHPghiXEbeIQt4mv5LaXEvnFJfJLoITfMiK/eER+CS27ITY4ID70BNATGm5IJO/EkiSSpA7csJy4TWLiNsmU3PYKIr8kRH7JlfBbSeSXlMgvhWU3JAIHJIOeHHoKww0p5Z1KklqSxoEbVhG3SUXcJq2S215N5JeayC+dEn5riPzSEPmlt+yGlOCAtNDTQU9vuCGDvDNKMkkyO3DDWuI2GYnbZFFy2+uI/DIR+WVVwm89kV9mIr9slt2QARyQBXpW6NkMN2SXdw5JTkkuB27YQNwmB3Gb3EpueyORX04ivzxK+G0i8stF5JfXshuygwNyQ88DPa/hhnz/fiZJAUlBB27YTNwmP3GbQkpuewuRXwEiv8JK+G0l8itI5FfEshvygQMKQS8MvYjhhqLyLiYpLinhwA3biNsUI25TUsltbyfyK07kV0oJvx1EfiWI/EpbdkNRcEBJ6KWglzbcUEbeZSXlJOUduGEncZuyxG0qKLntXUR+5Yj8Kirht5vIrzyRXyXLbigDDqgAvSL0SoYbKsu7iqSqpJoDN+whblOFuE11Jbe9l8ivKpFfDSX89hH5VSPyq2nZDZXBAdWh14Be03BDLXnXltSR1HXghv3EbWoTt6mn5LYPEPnVIfLzKOF3kMivLpFffctuqAUOqAfdA72+4YYG8m4oaSRp7MANh4jbNCRu00TJbR8m8mtE5NdUCb8jRH6NifyaWXZDA3BAE+hNoTcz3NBc3i0kLSWtHLjhKHGbFsRtWiu57WNEfi2J/Noo4XecyK8VkV9by25oDg5oDb0N9LaGG9rJu72kg6SjAzecIG7TnrhNJyW3fZLIrwORX2cl/E4R+XUk8uti2Q3twAGdoHeG3sVwQ1d5d5N0l/Rw4IbTxG26EbfpqeS2zxD5dSfy66WE31kivx5Efr0tu6ErOKAn9F7Qextu6CPvvpJ+kv4O3HCOuE1f4jYDlNz2eSK/fkR+A5Xwu0Dk15/Ib5BlN/QBBwyAPhD6IMMNg+U9RDJUMsyBGy4StxlC3Ga4ktu+ROQ3lMhvhBJ+l4n8hhH5jbTshsHggOHQR0AfabhhlLxHS8ZIxjpwwxXiNqOJ24xTcttXifzGEPmNV8LvGpHfWCK/CZbdMAocMA76eOgTDDdMlPckyWTJFAduuE7cZhJxm6lKbvsGkd9kIr9pSvjdJPKbQuQ33bIbJoIDpkKfBn264YYZ8p4pmSWZ7cANt4jbzCRuM0fJbd8m8ptF5DdXCb87RH6zifzmWXbDDHDAHOhzoc8z3DBf3gskCyWLHLjhLnGbBcRtFiu57XtEfguJ/JYo4XefyG8Rkd9Sy26YDw5YDH0J9KWGG5bJe7lkhWSlAzc8IG6znLjNKiW3/ZDIbwWR32ol/B4R+a0k8ltj2Q3LwAGroK+GvsZww1p5r5Osl2xw4IbHxG3WEbfZqOS2nxD5rSfy26SE31Mivw1Efpstu2EtOGAj9E3QNxtu2CLvrZJtku0O3PCMuM1W4jY7lNz2cyK/bUR+O5Xwe0Hkt53Ib5dlN2wBB+yAvhP6LsMNu+W9R7JXss+BG14St9lD3Ga/ktt+ReS3l8jvgBJ+r4n89hH5HbTsht3ggP3QD0A/aLjhkLwPS45IjjpwwxviNoeJ2xxTcttvifyOEPkdV8LvHZHfUSK/E5bdcAgccAz6cegnDDeclPcpyWnJGQdueE/c5hRxm7NKbvsDkd9pIr9zSvh9JPI7Q+R33rIbToIDzkI/B/284YYL8r4ouSS57MANn4jbXCRuc0XJbX8m8rtE5HdVCb8vRH6XifyuWXbDBXDAFehXoV8z3HBd3jckNyW3HLjhK3GbG8Rtbiu57W9EfjeJ/O4o4fedyO8Wkd9dy264Dg64Df0O9LuGG+7J+77kgeShAzf8IG5zn7jNIyW3/ZPI7wGR32Ml/H4R+T0k8nti2Q33wAGPoD+G/sRww1N5P5M8l7xw4IbfxG2eEbd5qeS2/xD5PSfye6WE318ivxdEfq8tu+EpOOAl9FfQXxtueCPvt5J3kvcO3BCqDvH37InbfFBy26GJ/N4R+X1Uws+LyO89kd8ny254Aw74AP0j9E+GGz7L+4vkq+SbAzeEIW7zhbjNdyW3HZbI7yuR3w8l/LyJ/L4R+f207IbP4IDv0H9A/2m44Ze8f//7NclfB24IR9zmN3GbUBF13HZ4Ir8/RH6hlfCLQOT3l8jPK6JdN/wCB/y79f96aOheEf/XDWHkHVbiLQkX0b4bIhK3CRuRt014JbcdicjPm8gvghJ+kYn8whH5RbTshjDggPDQI0CPaLghkrwjS3wkURy4wYe4TWTiNlGV3HYUIj8fIr9oSvhFJfKLQuQX3bIbIoEDokKPBj264QZfeftJ/CUBDtwQjbiNH3GbQCW3HZ3Iz5/IL0gJP18ivwAiv2DLbvAFBwRCD4IebLghRN4xJDElsRy4wY+4TQziNrGV3LY/kV9MIr84SvgFEPnFIvKLa9kNIeCA2NDjQI9ruCGevONLEkgSOnBDIHGb+MRtEim57SAivwREfomV8Asm8ktI5JfEshvigQMSQU8MPYnhhqTyTiZJLknhwA0hxG2SEbdJqeS2YxD5JSfyS6WEX0wivxREfqktuyEpOCAl9FTQUxtuSCPvtJJ0kvQO3BCLuE1a4jYZlNx2bCK/dER+GZXwi0Pkl57IL5NlN6QBB2SAnhF6JsMNmeWdRZJVks2BG+ISt8lC3Ca7ktuOR+SXlcgvhxJ+8Yn8shH55bTshszggOzQc0DPabghl7xzS/JI8jpwQwLiNrmJ2+RTctsJifzyEPnlV8IvEZFfXiK/ApbdkAsckA96fugFDDcUlHchSWFJEQduSEzcphBxm6JKbjsJkV9hIr9iSvglJfIrQuRX3LIbCoIDikIvBr244YYS8i4pKSUp7cANyYjblCRuU0bJbScn8itF5FdWCb8URH6lifzKWXZDCXBAGehloZcz3FBe3hUkFSWVHLghJXGbCsRtKiu57VREfhWJ/Koo4ZeayK8SkV9Vy24oDw6oDL0K9KqGG6rJu7qkhqSmAzekIW5TnbhNLSW3nZbIrwaRX20l/NIR+dUk8qtj2Q3VwAG1oNeGXsdwQ11515N4JPUduCE9cZt6xG0aKLntDER+HiK/hkr4ZSTyq0/k18iyG+qCAxpAbwi9keGGxvJuImkqaebADZmI2zQhbtNcyW1nJvJrSuTXQgm/LER+zYj8Wlp2Q2NwQHPoLaC3NNzQSt6tJW0kbR24IStxm9bEbdopue1sRH5tiPzaK+GXncivLZFfB8tuaAUOaAe9PfQOhhs6yruTpLOkiwM35CBu04m4TVclt52TyK8zkV83JfxyEfl1IfLrbtkNHcEBXaF3g97dcEMPefeU9JL0duCG3MRtehK36aPktvMQ+fUi8uurhF9eIr/eRH79LLuhBzigD/S+0PsZbugv7wGSgZJBDtyQj7jNAOI2g5Xcdn4iv4FEfkOU8CtA5DeIyG+oZTf0BwcMhj4E+lDDDcPkPVwyQjLSgRsKErcZTtxmlJLbLkTkN4LIb7QSfoWJ/EYS+Y2x7IZh4IBR0EdDH2O4Yay8x0nGSyY4cEMR4jbjiNtMVHLbRYn8xhP5TVLCrxiR3wQiv8mW3TAWHDAR+iTokw03TJH3VMk0yXQHbihO3GYqcZsZSm67BJHfNCK/mUr4lSTym07kN8uyG6aAA2ZAnwl9luGG2fKeI5krmefADaWI28whbjNfyW2XJvKbS+S3QAm/MkR+84j8Flp2w2xwwHzoC6AvNNywSN6LJUskSx24oSxxm8XEbZYpue1yRH5LiPyWK+FXnshvKZHfCstuWAQOWAZ9OfQVhhtWynuVZLVkjQM3VCBus4q4zVolt12RyG81kd86JfwqEfmtIfJbb9kNK8EBa6Gvg77ecMMGeW+UbJJsduCGysRtNhK32aLktqsQ+W0i8tuqhF9VIr/NRH7bLLthAzhgC/St0LcZbtgu7x2SnZJdDtxQjbjNDuI2u5XcdnUiv51EfnuU8KtB5LeLyG+vZTdsBwfshr4H+l7DDfvkvV9yQHLQgRtqErfZT9zmkJLbrkXkd4DI77ASfrWJ/A4S+R2x7IZ94IBD0A9DP2K44ai8j0mOS044cEMd4jbHiNucVHLbdYn8jhP5nVLCrx6R3wkiv9OW3XAUHHAS+inopw03nJH3Wck5yXkHbvAQtzlL3OaCktuuT+R3jsjvohJ+DYj8zhP5XbLshjPggAvQL0K/ZLjhsryvSK5KrjlwQ0PiNleI21xXctuNiPyuEvndUMKvMZHfNSK/m5bdcBkccB36Deg3DTfckvdtyR3JXQduaELc5jZxm3tKbrspkd8dIr/7Svg1I/K7S+T3wLIbboED7kG/D/2B4YaH8n4keSx54sANzYnbPCJu81TJbbcg8ntM5PdMCb+WRH5PiPyeW3bDQ3DAU+jPoD833PBC3i8lrySvHbihFXGbl8Rt3ii57dZEfq+I/N4q4deGyO81kd87y254AQ54A/0t9HeGG97L+4Pko+STAze0JW7zgbjNZyW33Y7I7yOR3xcl/NoT+X0i8vtq2Q3vwQGfoX+B/tVwwzd5f5f8kPx04IYOxG2+E7f5peS2OxL5/SDy+62EXyciv59Efn8su+EbOOAX9N/Q/xhu+CvvUJG8QoWWeEWy74bOxG3+/dysbcJE0nHbXYj8QhP5hVXCryuRnxeRn3cku274Cw74d+v/9bDQvSP9rxvCyTu8JIIkogM3dCNuE564TSQlt92dyC8CkV9kJfx6EPlFJPLzseyGcOCASNAjQ/cx3BBF3lEl0STRHbihJ3GbqMRtfJXcdi8iv2hEfn5K+PUm8otO5Odv2Q1RwAG+0P2g+xtuCJB3oCRIEuzADX2I2wQStwlRctt9ifyCiPxiKOHXj8gvmMgvpmU3BIADQqDHgB7TcEMseceWxJHEdeCG/sRtYhO3iafktgcQ+cUh8ouvhN9AIr+4RH4JLLshFjggHvT40BMYbkgo70SSxJIkDtwwiLhNIuI2SZXc9mAiv8REfsmU8BtC5JeEyC+5ZTckBAckhZ4MenLDDSnknVKSSpLagRuGErdJSdwmjZLbHkbkl4rIL60SfsOJ/FIT+aWz7IYU4IA00NNCT2e4Ib28M0gySjI5cMMI4jYZiNtkVnLbI4n8MhL5ZVHCbxSRXyYiv6yW3ZAeHJAZehboWQ03ZJN3dkkOSU4HbhhN3CY7cZtcSm57DJFfDiK/3Er4jSXyy0nkl8eyG7KBA3JBzw09j+GGvPLO9+/nkhRw4IZxxG3yEbcpqOS2xxP55SfyK6SE3wQivwJEfoUtuyEvOKAg9ELQCxtuKCLvopJikuIO3DCRuE1R4jYllNz2JCK/YkR+JZXwm0zkV5zIr5RlNxQBB5SAXhJ6KcMNpeVdRlJWUs6BG6YQtylD3Ka8ktueSuRXlsivghJ+04j8yhH5VbTshtLggPLQK0CvaLihkrwrS6pIqjpww3TiNpWJ21RTctsziPyqEPlVV8JvJpFfVSK/GpbdUAkcUA16deg1DDfUlHctSW1JHQdumEXcphZxm7pKbns2kV9tIr96SvjNIfKrQ+TnseyGmuCAutDrQfcYbqgv7waShpJGDtwwl7hNA+I2jZXc9jwiv4ZEfk2U8JtP5NeIyK+pZTfUBwc0ht4EelPDDc3k3VzSQtLSgRsWELdpTtymlZLbXkjk14LIr7USfouI/FoS+bWx7IZm4IBW0FtDb2O4oa2820naSzo4cMNi4jbtiNt0VHLbS4j82hP5dVLCbymRXwciv86W3dAWHNAReifonQ03dJF3V0k3SXcHblhG3KYrcZseSm57OZFfNyK/nkr4rSDy607k18uyG7qAA3pA7wm9l+GG3vLuI+kr6efADSuJ2/QhbtNfyW2vIvLrS+Q3QAm/1UR+/Yj8Blp2Q29wQH/oA6APNNwwSN6DJUMkQx24YQ1xm8HEbYYpue21RH5DiPyGK+G3jshvKJHfCMtuGAQOGAZ9OPQRhhtGynuUZLRkjAM3rCduM4q4zVglt72ByG80kd84Jfw2EvmNIfIbb9kNI8EBY6GPgz7ecMMEeU+UTJJMduCGTcRtJhK3maLktjcT+U0i8puqhN8WIr/JRH7TLLthAjhgCvSp0KcZbpgu7xmSmZJZDtywlbjNDOI2s5Xc9jYiv5lEfnOU8NtO5DeLyG+uZTdMBwfMhj4H+lzDDfPkPV+yQLLQgRt2ELeZT9xmkZLb3knkt4DIb7ESfruI/BYS+S2x7IZ54IBF0BdDX2K4Yam8l0mWS1Y4cMNu4jbLiNusVHLbe4j8lhP5rVLCby+R3woiv9WW3bAUHLAS+iroqw03rJH3Wsk6yXoHbthH3GYtcZsNSm57P5HfOiK/jUr4HSDyW0/kt8myG9aAAzZA3wh9k+GGzfLeItkq2ebADQeJ22whbrNdyW0fIvLbSuS3Qwm/w0R+24j8dlp2w2ZwwHboO6DvNNywS967JXskex244Qhxm93EbfYpue2jRH57iPz2K+F3jMhvL5HfActu2AUO2Ad9P/QDhhsOyvuQ5LDkiAM3HCduc4i4zVElt32CyO8wkd8xJfxOEvkdIfI7btkNB8EBR6Efg37ccMMJeZ+UnJKcduCGU8RtThK3OaPktk8T+Z0i8jurhN8ZIr/TRH7nLLvhBDjgDPSz0M8Zbjgv7wuSi5JLDtxwlrjNBeI2l5Xc9jkiv4tEfleU8DtP5HeJyO+qZTecBwdchn4F+lXDDdfkfV1yQ3LTgRsuELe5TtzmlpLbvkjkd4PI77YSfpeI/G4S+d2x7IZr4IBb0G9Dv2O44a6870nuSx44cMNl4jb3iNs8VHLbV4j87hP5PVLC7yqR3wMiv8eW3XAXHPAQ+iPojw03PJH3U8kzyXMHbrhG3OYpcZsXSm77OpHfMyK/l0r43SDye07k98qyG56AA15Afwn9leGG1/J+I3kreefADTeJ27whbvNeyW3fIvJ7S+T3QQm/20R+74j8Plp2w2twwHvoH6B/NNzwSd6fJV8kXx244Q5xm8/Ebb4pue27RH5fiPy+K+F3j8jvK5HfD8tu+AQO+Ab9O/Qfhht+yvuX5Pe/X3fghvvEbX4Rt/mr5LYfEPn9JvILFVkHv4dEfn+I/EJHtuuGn+CAv9D/7fZfDx35f93gJe8wkrAS78j23fCIuE2YyLxtwim57cdEfmGJ/MIr4feEyM+byC+CZTd4gQPCQQ8PPYLhhojyjiSJLPFx4IanxG0iEbeJouS2nxH5RSbyi6qE33MiPx8iv2iW3RARHBAFelTo0Qw3RJe3r8RP4u/ADS+I2/gStwlQctsvifz8iPwClfB7ReTnT+QXZNkN0cEBAdADoQcZbgiWd4gkhiSmAze8Jm4TQtwmlpLbfkPkF4PIL7YSfm+J/GIS+cWx7IZgcEAs6LGhxzHcEFfe8STxJQkcuOEdcZt4xG0SKrnt90R+8Yn8Einh94HILwGRX2LLbogLDkgIPRH0xIYbksg7qSSZJLkDN3wkbpOUuE0KJbf9icgvGZFfSiX8PhP5JSfyS2XZDUnAASmgp4SeynBDanmnkaSVpHPghi/EbdIQt0mv5La/EvmlJfLLoITfNyK/dER+GS27ITU4ID30DNAzGm7IJO/MkiySrA7c8J24TWbiNtmU3PYPIr8sRH7ZlfD7SeSXlcgvh2U3ZAIHZIOeHXoOww055Z1LkluSx4EbfhG3yUXcJq+S2/5N5JebyC+fEn5/iPzyEPnlt+yGnOCAvNDzQc9vuKGAvAtKCkkKO3DDX+I2BYnbFFFy26Hq8r5ViMivqBJ+oYn8ChP5FbPshgLggCLQi0IvZrihuLxLSEpKSjlwgxdxmxLEbUorue0wRH4lifzKKOEXlsivFJFfWctuKA4OKA29DPSyhhvKybu8pIKkogM3eBO3KU/cppKS2w5H5FeByK+yEn7hifwqEvlVseyGcuCAStArQ69iuKGqvKtJqktqOHBDBOI21Yjb1FRy2xGJ/KoT+dVSwi8SkV8NIr/alt1QFRxQE3ot6LUNN9SRd11JPYnHgRsiE7epS9ymvpLb9iHyq0fk10AJvyhEfh4iv4aW3VAHHFAfegPoDQ03NJJ3Y0kTSVMHbohK3KYxcZtmSm47GpFfEyK/5kr4RSfya0rk18KyGxqBA5pBbw69heGGlvJuJWktaePADb7EbVoRt2mr5Lb9iPxaE/m1U8LPn8ivDZFfe8tuaAkOaAu9HfT2hhs6yLujpJOkswM3BBC36UjcpouS2w4k8utE5NdVCb8gIr/ORH7dLLuhAzigC/Su0LsZbugu7x6SnpJeDtwQTNymB3Gb3kpuO4TIryeRXx8l/GIQ+fUi8utr2Q3dwQG9ofeB3tdwQz9595cMkAx04IaYxG36E7cZpOS2YxH5DSDyG6yEX2wiv4FEfkMsu6EfOGAQ9MHQhxhuGCrvYZLhkhEO3BCHuM0w4jYjldx2XCK/4UR+o5Twi0fkN4LIb7RlNwwFB4yEPgr6aMMNY+Q9VjJOMt6BG+ITtxlL3GaCkttOQOQ3jshvohJ+CYn8xhP5TbLshjHggAnQJ0KfZLhhsrynSKZKpjlwQyLiNlOI20xXctuJifymEvnNUMIvCZHfNCK/mZbdMBkcMB36DOgzDTfMkvdsyRzJXAduSErcZjZxm3lKbjsZkd8cIr/5SvglJ/KbS+S3wLIbZoED5kGfD32B4YaF8l4kWSxZ4sANKYjbLCJus1TJback8ltM5LdMCb9URH5LiPyWW3bDQnDAUujLoC833LBC3islqySrHbghNXGblcRt1ii57TREfquI/NYq4ZeWyG81kd86y25YAQ5YA30t9HWGG9bLe4Nko2STAzekI26zgbjNZiW3nZ7IbyOR3xYl/DIQ+W0i8ttq2Q3rwQGboW+BvtVwwzZ5b5fskOx04IaMxG22E7fZpeS2MxH57SDy262EX2Yiv51Efnssu2EbOGAX9N3Q9xhu2CvvfZL9kgMO3JCFuM0+4jYHldx2ViK//UR+h5Twy0bkd4DI77BlN+wFBxyEfgj6YcMNR+R9VHJMctyBG7ITtzlK3OaEktvOQeR3jMjvpBJ+OYn8jhP5nbLshiPggBPQT0I/ZbjhtLzPSM5KzjlwQy7iNmeI25xXctu5ifzOEvldUMIvD5HfOSK/i5bdcBoccB76BegXDTdckvdlyRXJVQduyEvc5jJxm2tKbjsfkd8VIr/rSvjlJ/K7SuR3w7IbLoEDrkG/Dv2G4Yab8r4luS2548ANBYjb3CJuc1fJbRck8rtN5HdPCb9CRH53iPzuW3bDTXDAXej3oN833PBA3g8ljySPHbihMHGbh8Rtnii57SJEfo+I/J4q4VeUyO8xkd8zy254AA54Av0p9GeGG57L+4XkpeSVAzcUI27zgrjNayW3XZzI7yWR3xsl/EoQ+b0i8ntr2Q3PwQGvob+B/tZwwzt5v5d8kHx04IaSxG3eE7f5pOS2SxH5fSDy+6yEX2kiv49Efl8su+EdOOAT9M/Qvxhu+Crvb5Lvkh8O3FCGuM034jY/ldx2WSK/70R+v5TwK0fk94PI77dlN3wFB/yE/gv6b8MNf+T9VxLKxytUaB/7bihP3OYvcRsvHx23XYHIL5QPj18YJfwqEvmFJvIL62PXDX/AAf9u/b8eBnpYn/91g7e8w0nCSyI4cEMl4jbhiNtEVHLblYn8whP5RVLCrwqRXwQiv8iW3eANDogIPRL0yIYbfOQdRRJVEs2BG6oSt4lC3Ca6ktuuRuQXlcjPVwm/6kR+0Yj8/Cy7wQccEB26L3Q/ww3+8g6QBEqCHLihBnGbAOI2wUpuuyaRXyCRX4gSfrWI/IKI/GJYdoM/OCAYegj0GIYbYso7liS2JI4DN9QmbhOLuE1cJbddh8gvNpFfPCX86hL5xSHyi2/ZDTHBAXGhx4Me33BDAnknlCSSJHbghnrEbRISt0mi5LY9RH6JiPySKuFXn8gvMZFfMstuSAAOSAI9KfRkhhuSyzuFJKUklQM3NCBuk4K4TWolt92QyC8lkV8aJfwaEfmlIvJLa9kNycEBqaGngZ7WcEM6eaeXZJBkdOCGxsRt0hO3yaTktpsQ+WUg8sushF9TIr+MRH5ZLLshHTggE/TM0LMYbsgq72yS7JIcDtzQjLhNNuI2OZXcdnMiv+xEfrmU8GtB5JeDyC+3ZTdkBQfkhJ4Lem7DDXnknVeS79/P5sANLYnb5CVuU0DJbbci8stH5FdQCb/WRH75ifwKWXZDHnBAAegFoRcy3FBY3kUkRSXFHLihDXGbIsRtiiu57bZEfkWJ/Eoo4deOyK8YkV9Jy24oDA4oDr0E9JKGG0rJu7SkjKSsAze0J25TmrhNOSW33YHIrwyRX3kl/DoS+ZUl8qtg2Q2lwAHloJeHXsFwQ0V5V5JUllRx4IZOxG0qEbepquS2OxP5VSbyq6aEXxcivypEftUtu6EiOKAq9GrQqxtuqCHvmpJaktoO3NCVuE1N4jZ1lNx2NyK/WkR+dZXw607kV5vIr55lN9QAB9SBXhd6PcMNHnnXlzSQNHTghh7EbeoTt2mk5LZ7Evk1IPJrrIRfLyK/hkR+TSy7wQMOaAS9MfQmhhuayruZpLmkhQM39CZu04y4TUslt92HyK85kV8rJfz6Evm1IPJrbdkNTcEBLaG3gt7acEMbebeVtJO0d+CGfsRt2hK36aDktvsT+bUj8uuohN8AIr/2RH6dLLuhDTigA/SO0DsZbugs7y6SrpJuDtwwkLhNF+I23ZXc9iAiv65Efj2U8BtM5NeNyK+nZTd0Bgd0h94Dek/DDb3k3VvSR9LXgRuGELfpTdymn5LbHkrk14fIr78SfsOI/PoS+Q2w7IZe4IB+0PtDH2C4YaC8B0kGS4Y4cMNw4jaDiNsMVXLbI4j8BhP5DVPCbySR3xAiv+GW3TAQHDAU+jDoww03jJD3SMkoyWgHbhhF3GYkcZsxSm57NJHfKCK/sUr4jSHyG03kN86yG0aAA8ZAHwt9nOGG8fKeIJkomeTADWOJ20wgbjNZyW2PI/KbSOQ3RQm/8UR+k4j8plp2w3hwwGToU6BPNdwwTd7TJTMkMx24YQJxm+nEbWYpue2JRH4ziPxmK+E3ichvJpHfHMtumAYOmAV9NvQ5hhvmynueZL5kgQM3TCZuM4+4zUIltz2FyG8+kd8iJfymEvktIPJbbNkNc8EBC6Evgr7YcMMSeS+VLJMsd+CGacRtlhK3WaHktqcT+S0j8luphN8MIr/lRH6rLLthCThgBfSV0FcZblgt7zWStZJ1Dtwwk7jNGuI265Xc9iwiv7VEfhuU8JtN5LeOyG+jZTesBgesh74B+kbDDZvkvVmyRbLVgRvmELfZTNxmm5Lbnkvkt4XIb7sSfvOI/LYS+e2w7IZN4IBt0LdD32G4Yae8d0l2S/Y4cMN84ja7iNvsVXLbC4j8dhP57VPCbyGR3x4iv/2W3bATHLAX+j7o+w03HJD3QckhyWEHblhE3OYgcZsjSm57MZHfISK/o0r4LSHyO0zkd8yyGw6AA45APwr9mOGG4/I+ITkpOeXADUuJ25wgbnNayW0vI/I7SeR3Rgm/5UR+p4j8zlp2w3FwwGnoZ6CfNdxwTt7nJRckFx24YQVxm/PEbS4pue2VRH4XiPwuK+G3isjvIpHfFctuOAcOuAT9MvQrhhuuyvua5LrkhgM3rCZuc424zU0lt72GyO86kd8tJfzWEvndIPK7bdkNV8EBN6Hfgn7bcMMded+V3JPcd+CGdcRt7hK3eaDkttcT+d0j8nuohN8GIr/7RH6PLLvhDjjgAfSH0B8Zbngs7yeSp5JnDtywkbjNE+I2z5Xc9iYiv6dEfi+U8NtM5PeMyO+lZTc8Bgc8h/4C+kvDDa/k/VryRvLWgRu2ELd5TdzmnZLb3krk94bI770SftuI/N4S+X2w7IZX4IB30N9D/2C44aO8P0k+S744cMN24jafiNt8VXLbO4j8PhP5fVPCbyeR3xciv++W3fARHPAV+jfo3w03/JD3T8kvyW8HbthF3OYncZs/Sm57N5HfLyK/v0r47SHy+03kFyqKXTf8AAf8gf4X+r+fAd0QWt5ekjCSsFHsu2EvcRuvKLxtvKPouO19RH5hiPzCKeG3n8gvLJFfeMtuCB3l/xzgDT0c9PCGGyLIO6IkkiSyAzccIG4TkbiNj5LbPkjkF4nIL4oSfoeI/CIT+UW17IYI4AAf6FGgRzXcEE3e0SW+Ej8HbjhM3CY6cRt/Jbd9hMjPl8gvQAm/o0R+fkR+gZbdEA0c4A89AHqg4YYgeQdLQiQxHLjhGHGbYOI2MZXc9nEivxAiv1hK+J0g8otB5BfbshuCwAExoceCHttwQxx5x5XEk8R34IaTxG3iErdJoOS2TxH5xSPyS6iE32kiv/hEfoksuyEOOCAB9ITQExluSCzvJJKkkmQO3HCGuE0S4jbJldz2WSK/pER+KZTwO0fkl4zIL6VlNyQGBySHngJ6SsMNqeSdWpJGktaBG84Tt0lN3Cadktu+QOSXhsgvvRJ+F4n80hL5ZbDshlTggHTQ00PPYLgho7wzSTJLsjhwwyXiNpmI22RVctuXifwyE/llU8LvCpFfFiK/7JbdkBEckBV6NujZDTfkkHdOSS5JbgduuErcJidxmzxKbvsakV8uIr+8SvhdJ/LLTeSXz7IbcoAD8kDPCz2f4Yb88i4gKSgp5MANN4jbFCBuU1jJbd8k8itI5FdECb9bRH6FiPyKWnZDfnBAYehFoBc13FBM3sUlJSQlHbjhNnGb4sRtSim57TtEfiWI/Eor4XeXyK8kkV8Zy24oBg4oBb009DKGG8rKu5ykvKSCAzfcI25TjrhNRSW3fZ/IrzyRXyUl/B4Q+VUg8qts2Q1lwQEVoVeCXtlwQxV5V5VUk1R34IaHxG2qErepoeS2HxH5VSPyq6mE32Miv+pEfrUsu6EKOKAG9JrQaxluqC3vOpK6knoO3PCEuE0d4jYeJbf9lMivLpFffSX8nhH51SPya2DZDbXBAR7o9aE3MNzQUN6NJI0lTRy44Tlxm0bEbZoque0XRH6NifyaKeH3ksivCZFfc8tuaAgOaAq9GfTmhhtayLulpJWktQM3vCJu05K4TRslt/2ayK8VkV9bJfzeEPm1JvJrZ9kNLcABbaC3hd7OcEN7eXeQdJR0cuCGt8RtOhC36azktt8R+XUk8uuihN97Ir9ORH5dLbuhPTigM/Qu0Lsabugm7+6SHpKeDtzwgbhNd+I2vZTc9kcivx5Efr2V8PtE5NeTyK+PZTd0Awf0gt4beh/DDX3l3U/SXzLAgRs+E7fpR9xmoJLb/kLk15/Ib5ASfl+J/AYQ+Q227Ia+4ICB0AdBH2y4YYi8h0qGSYY7cMM34jZDiduMUHLb34n8hhH5jVTC7weR33Aiv1GW3TAEHDAC+kjooww3jJb3GMlYyTgHbvhJ3GYMcZvxSm77F5HfWCK/CUr4/SbyG0fkN9GyG0aDA8ZDnwB9ouGGSfKeLJkimerADX+I20wmbjNNyW3/JfKbQuQ3XQm/UPV435pK5DfDshsmgQOmQZ8OfYbhhpnyniWZLZnjwA2hidvMIm4zV8ltexH5zSbym6eEXxgivzlEfvMtu2EmOGAu9HnQ5xtuWCDvhZJFksUO3BCWuM1C4jZLlNy2N5HfIiK/pUr4hSPyW0zkt8yyGxaAA5ZAXwp9meGG5fJeIVkpWeXADeGJ26wgbrNayW1HIPJbSeS3Rgm/iER+q4j81lp2w3JwwGroa6CvNdywTt7rJRskGx24IRJxm/XEbTYpue3IRH4biPw2K+HnQ+S3kchvi2U3rAMHbIK+GfoWww1b5b1Nsl2yw4EbohC32UbcZqeS245K5LedyG+XEn7RiPx2EPnttuyGreCAndB3Qd9tuGGPvPdK9kn2O3BDdOI2e4nbHFBy275EfvuI/A4q4edH5LefyO+QZTfsAQccgH4Q+iHDDYflfURyVHLMgRv8idscIW5zXMltBxD5HSXyO6GEXyCR3zEiv5OW3XAYHHAc+gnoJw03nJL3ackZyVkHbggibnOauM05JbcdTOR3hsjvvBJ+IUR+Z4n8Llh2wylwwDno56FfMNxwUd6XJJclVxy4IQZxm0vEba4que2YRH6XifyuKeEXi8jvCpHfdctuuAgOuAr9GvTrhhtuyPum5JbktgM3xCZuc5O4zR0ltx2HyO8Wkd9dJfziEvndJvK7Z9kNN8ABd6DfhX7PcMN9eT+QPJQ8cuCGeMRtHhC3eazktuMT+T0k8nuihF8CIr9HRH5PLbvhPjjgMfQn0J8abngm7+eSF5KXDtyQkLjNc+I2r5TcdiIivxdEfq+V8EtM5PeSyO+NZTc8Awe8gv4a+hvDDW/l/U7yXvLBgRuSELd5R9zmo5LbTkrk957I75MSfsmI/D4Q+X227Ia34ICP0D9B/2y44Yu8v0q+Sb47cENy4jZfidv8UHLbKYj8vhH5/VTCLyWR33civ1+W3fAFHPAD+k/ovww3/P73lvyVhIpq3w2piNv8IW4TOqqO205N5PeXyM9LCb80RH6hovL4hYlq1w2/wQH/bv2/7gU9TNT/dUNYeXtLwknCO3BDWuI23sRtIii57XREfuGI/CIq4ZeeyC88kV8ky24ICw6IAD0i9EiGGyLL20cSRRLVgRsyELfxIW4TTcltZyTyi0LkF10Jv0xEflGJ/HwtuyEyOCAa9OjQfQ03+MnbXxIgCXTghszEbfyJ2wQpue0sRH4BRH7BSvhlJfILJPILsewGP3BAEPRg6CGGG2LIO6YkliS2AzdkI24Tk7hNHCW3nZ3ILxaRX1wl/HIQ+cUm8otn2Q0xwAFxoMeFHs9wQ3x5J5AklCRy4IacxG0SELdJrOS2cxH5JSTyS6KEX24iv0REfkktuyE+OCAx9CTQkxpuSCbv5JIUkpQO3JCHuE1y4japlNx2XiK/FER+qZXwy0fkl5LIL41lNyQDB6SCnhp6GsMNaeWdTpJeksGBG/ITt0lH3CajktsuQOSXnsgvkxJ+BYn8MhD5ZbbshrTggIzQM0HPbLghi7yzSrJJsjtwQyHiNlmJ2+RQctuFifyyEfnlVMKvCJFfdiK/XJbdkAUckAN6Tui5DDfklnceSV5JPgduKErcJg9xm/xKbrsYkV9eIr8CSvgVJ/LLR+RX0LIbcoMD8kMvAL2g4YZC8i4sKSIp6sANJYjbFCZuU0zJbZck8itC5FdcCb9SRH5FifxKWHZDIXBAMejFoZcw3FBS3qUkpSVlHLihNHGbUsRtyiq57TJEfqWJ/Mop4VeWyK8MkV95y24oCQ4oC70c9PKGGyrIu6KkkqSyAzeUI25TkbhNFSW3XZ7IrxKRX1Ul/CoQ+VUm8qtm2Q0VwAFVoFeFXs1wQ3V515DUlNRy4IaKxG1qELepreS2KxH51STyq6OEX2Uiv1pEfnUtu6E6OKA29DrQ6xpuqCdvj6S+pIEDN1QhbuMhbtNQyW1XJfKrT+TXSAm/akR+DYj8Glt2Qz1wQEPojaA3NtzQRN5NJc0kzR24oTpxm6bEbVooue0aRH7NiPxaKuFXk8ivOZFfK8tuaAIOaAG9JfRWhhtay7uNpK2knQM31CJu04a4TXslt12byK8tkV8HJfzqEPm1I/LraNkNrcEB7aF3gN7RcEMneXeWdJF0deCGusRtOhO36abktusR+XUh8uuuhJ+HyK8rkV8Py27oBA7oBr079B6GG3rKu5ekt6SPAzfUJ27Ti7hNXyW33YDIrzeRXz8l/BoS+fUh8utv2Q09wQF9ofeD3t9wwwB5D5QMkgx24IZGxG0GErcZouS2GxP5DSLyG6qEXxMiv8FEfsMsu2EAOGAI9KHQhxluGC7vEZKRklEO3NCUuM0I4jajldx2MyK/kUR+Y5Twa07kN4rIb6xlNwwHB4yGPgb6WMMN4+Q9XjJBMtGBG1oQtxlP3GaSkttuSeQ3gchvshJ+rYj8JhL5TbHshnHggEnQJ0OfYrhhqrynSaZLZjhwQ2viNtOI28xUctttiPymE/nNUsKvLZHfDCK/2ZbdMBUcMBP6LOizDTfMkfdcyTzJfAduaEfcZi5xmwVKbrs9kd88Ir+FSvh1IPKbT+S3yLIb5oADFkBfCH2R4YbF8l4iWSpZ5sANHYnbLCFus1zJbXci8ltK5LdCCb/ORH7LiPxWWnbDYnDAcugroK803LBK3qslayRrHbihC3Gb1cRt1im57a5EfmuI/NYr4deNyG8tkd8Gy25YBQ5YB3099A2GGzbKe5Nks2SLAzd0J26zibjNViW33YPIbzOR3zYl/HoS+W0h8ttu2Q0bwQFboW+Dvt1www5575Tskux24IZexG12ErfZo+S2exP57SLy26uEXx8iv91Efvssu2EHOGAP9L3Q9xlu2C/vA5KDkkMO3NCXuM0B4jaHldx2PyK/g0R+R5Tw60/kd4jI76hlN+wHBxyGfgT6UcMNx+R9XHJCctKBGwYQtzlO3OaUktseSOR3gsjvtBJ+g4j8ThL5nbHshmPggFPQT0M/Y7jhrLzPSc5LLjhww2DiNueI21xUcttDiPzOE/ldUsJvKJHfBSK/y5bdcBYccBH6JeiXDTdckfdVyTXJdQduGEbc5ipxmxtKbns4kd81Ir+bSviNIPK7TuR3y7IbroADbkC/Cf2W4Ybb8r4juSu558ANI4nb3CFuc1/JbY8i8rtL5PdACb/RRH73iPweWnbDbXDAfegPoD803PBI3o8lTyRPHbhhDHGbx8Rtnim57bFEfk+I/J4r4TeOyO8pkd8Ly254BA54Bv059BeGG17K+5XkteSNAzeMJ27zirjNWyW3PYHI7zWR3zsl/CYS+b0h8ntv2Q0vwQFvob+D/t5wwwd5f5R8knx24IZJxG0+Erf5ouS2JxP5fSLy+6qE3xQiv89Eft8su+EDOOAL9K/Qvxlu+C7vH5Kfkl8O3DCVuM0P4ja/ldz2NCK/n0R+f5Twm07k94vI769lN3wHB/yG/gf6X8MNoaJ5hQot8ZKEiWbfDTOI2/z7uVnbhI2m47ZnEvl5Efl5K+E3i8gvDJFfuGh23fDvj/P/HBAWujf0cNH+1w3h5R1BElESyYEbZhO3iUDcJrKS255D5BeRyM9HCb+5RH6RiPyiWHZDeHBAZOg+0KMYbogq72iS6BJfB26YR9wmGnEbPyW3PZ/ILzqRn78SfguI/HyJ/AIsuyEqOMAPuj/0AMMNgfIOkgRLQhy4YSFxmyDiNjGU3PYiIr9gIr+YSvgtJvILIfKLZdkNgeCAGNBjQo9luCG2vONI4kriOXDDEuI2cYjbxFdy20uJ/OIS+SVQwm8ZkV88Ir+Elt0QGxwQH3oC6AkNNySSd2JJEklSB25YTtwmMXGbZEpuewWRXxIiv+RK+K0k8ktK5JfCshsSgQOSQU8OPYXhhpTyTiVJLUnjwA2riNukIm6TVsltrybyS03kl04JvzVEfmmI/NJbdkNKcEBa6OmgpzfckEHeGSWZJJkduGEtcZuMxG2yKLntdUR+mYj8sirht57ILzORXzbLbsgADsgCPSv0bIYbsss7hySnJJcDN2wgbpODuE1uJbe9kcgvJ5FfHiX8NhH55SLyy2vZDdnBAbmh54Ge13BDvn8/k6SApKADN2wmbpOfuE0hJbe9hcivAJFfYSX8thL5FSTyK2LZDfnAAYWgF4ZexHBDUXkXkxSXlHDghm3EbYoRtymp5La3E/kVJ/IrpYTfDiK/EkR+pS27oSg4oCT0UtBLG24oI++yknKS8g7csJO4TVniNhWU3PYuIr9yRH4VlfDbTeRXnsivkmU3lAEHVIBeEXolww2V5V1FUlVSzYEb9hC3qULcprqS295L5FeVyK+GEn77iPyqEfnVtOyGyuCA6tBrQK9puKGWvGtL6kjqOnDDfuI2tYnb1FNy2weI/OoQ+XmU8DtI5FeXyK++ZTfUAgfUg+6BXt9wQwN5N5Q0kjR24IZDxG0aErdpouS2DxP5NSLya6qE3xEiv8ZEfs0su6EBOKAJ9KbQmxluaC7vFpKWklYO3HCUuE0L4jatldz2MSK/lkR+bZTwO07k14rIr61lNzQHB7SG3gZ6W8MN7eTdXtJB0tGBG04Qt2lP3KaTkts+SeTXgcivsxJ+p4j8OhL5dbHshnbggE7QO0PvYrihq7y7SbpLejhww2niNt2I2/RUcttniPy6E/n1UsLvLJFfDyK/3pbd0BUc0BN6L+i9DTf0kXdfST9JfwduOEfcpi9xmwFKbvs8kV8/Ir+BSvhdIPLrT+Q3yLIb+oADBkAfCH2Q4YbB8h4iGSoZ5sANF4nbDCFuM1zJbV8i8htK5DdCCb/LRH7DiPxGWnbDYHDAcOgjoI803DBK3qMlYyRjHbjhCnGb0cRtxim57atEfmOI/MYr4XeNyG8skd8Ey24YBQ4YB3089AmGGybKe5JksmSKAzdcJ24zibjNVCW3fYPIbzKR3zQl/G4S+U0h8ptu2Q0TwQFToU+DPt1wwwx5z5TMksx24IZbxG1mEreZo+S2bxP5zSLym6uE3x0iv9lEfvMsu2EGOGAO9LnQ5xlumC/vBZKFkkUO3HCXuM0C4jaLldz2PSK/hUR+S5Twu0/kt4jIb6llN8wHByyGvgT6UsMNy+S9XLJCstKBGx4Qt1lO3GaVktt+SOS3gshvtRJ+j4j8VhL5rbHshmXggFXQV0NfY7hhrbzXSdZLNjhww2PiNuuI22xUcttPiPzWE/ltUsLvKZHfBiK/zZbdsBYcsBH6JuibDTdskfdWyTbJdgdueEbcZitxmx1Kbvs5kd82Ir+dSvi9IPLbTuS3y7IbtoADdkDfCX2X4Ybd8t4j2SvZ58ANL4nb7CFus1/Jbb8i8ttL5HdACb/XRH77iPwOWnbDbnDAfugHoB803HBI3oclRyRHHbjhDXGbw8Rtjim57bdEfkeI/I4r4feOyO8okd8Jy244BA44Bv049BOGG07K+5TktOSMAze8J25zirjNWSW3/YHI7zSR3zkl/D4S+Z0h8jtv2Q0nwQFnoZ+Dft5wwwV5X5Rcklx24IZPxG0uEre5ouS2PxP5XSLyu6qE3xciv8tEftcsu+ECOOAK9KvQrxluuC7vG5KbklsO3PCVuM0N4ja3ldz2NyK/m0R+d5Tw+07kd4vI765lN1wHB9yGfgf6XcMN9+R9X/JA8tCBG34Qt7lP3OaRktv+SeT3gMjvsRJ+v4j8HhL5PbHshnvggEfQH0N/YrjhqbyfSZ5LXjhww2/iNs+I27xUctt/iPyeE/m9UsLvL5HfCyK/15bd8BQc8BL6K+ivDTe8kfdbyTvJewduCOUh/p49cZsPSm47NJHfOyK/j0r4eRH5vSfy+2TZDW/AAR+gf4T+yXDDZ3l/kXyVfHPghjAe4u8rEbf5ruS2wxL5fSXy+6GEnzeR3zciv5+W3fAZHPAd+g/oPw03/JL373+/JvnrwA3hPMS/PiFuEyq6jtsOT+T3h8gvtBJ+EYj8/hL5eUW364Zf4IB/t/5fDw3dK/r/uiGMvMNKvCXhott3Q0QP8c+h0XnbhFdy25GI/LyJ/CIo4ReZyC8ckV9Ey24IAw4IDz0C9IiGGyLJO7LERxLFgRt8PMSdidtEVXLbUYj8fIj8oinhF5XILwqRX3TLbogEDogKPRr06IYbfOXtJ/GXBDhwQzQP71t+xG0Cldx2dCI/fyK/ICX8fIn8Aoj8gi27wRccEAg9CHqw4YYQeceQxJTEcuAGPw/vWzGI28RWctv+RH4xifziKOEXQOQXi8gvrmU3hIADYkOPAz2u4YZ48o4vSSBJ6MANgR7et+ITt0mk5LaDiPwSEPklVsIvmMgvIZFfEstuiAcOSAQ9MfQkhhuSyjuZJLkkhQM3hHh430pG3CalktuOQeSXnMgvlRJ+MYn8UhD5pbbshqTggJTQU0FPbbghjbzTStJJ0jtwQywP71tpidtkUHLbsYn80hH5ZVTCLw6RX3oiv0yW3ZAGHJABekbomQw3ZJZ3FklWSTYHbojr4X0rC3Gb7EpuOx6RX1YivxxK+MUn8stG5JfTshsygwOyQ88BPafhhlzyzi3JI8nrwA0JPLxv5SZuk0/JbSck8stD5JdfCb9ERH55ifwKWHZDLnBAPuj5oRcw3FBQ3oUkhSVFHLghsYf3rULEbYoque0kRH6FifyKKeGXlMivCJFfcctuKAgOKAq9GPTihhtKyLukpJSktAM3JPPwvlWSuE0ZJbednMivFJFfWSX8UhD5lSbyK2fZDSXAAWWgl4VeznBDeXlXkFSUVHLghpQe3rcqELeprOS2UxH5VSTyq6KEX2oiv0pEflUtu6E8OKAy9CrQqxpuqCbv6pIakpoO3JDGw/tWdeI2tZTcdloivxpEfrWV8EtH5FeTyK+OZTdUAwfUgl4beh3DDXXlXU/ikdR34Ib0Ht636hG3aaDktjMQ+XmI/Boq4ZeRyK8+kV8jy26oCw5oAL0h9EaGGxrLu4mkqaSZAzdk8vC+1YS4TXMlt52ZyK8pkV8LJfyyEPk1I/JradkNjcEBzaG3gN7ScEMrebeWtJG0deCGrB7et1oTt2mn5LazEfm1IfJrr4RfdiK/tkR+HSy7oRU4oB309tA7GG7oKO9Oks6SLg7ckMPD+1Yn4jZdldx2TiK/zkR+3ZTwy0Xk14XIr7tlN3QEB3SF3g16d8MNPeTdU9JL0tuBG3J7eN/qSdymj5LbzkPk14vIr68SfnmJ/HoT+fWz7IYe4IA+0PtC72e4ob+8B0gGSgY5cEM+D+9bA4jbDFZy2/mJ/AYS+Q1Rwq8Akd8gIr+hlt3QHxwwGPoQ6EMNNwyT93DJCMlIB24o6OF9azhxm1FKbrsQkd8IIr/RSvgVJvIbSeQ3xrIbhoEDRkEfDX2M4Yax8h4nGS+Z4MANRTy8b40jbjNRyW0XJfIbT+Q3SQm/YkR+E4j8Jlt2w1hwwETok6BPNtwwRd5TJdMk0x24obiH962pxG1mKLntEkR+04j8ZirhV5LIbzqR3yzLbpgCDpgBfSb0WYYbZst7jmSuZJ4DN5Ty8L41h7jNfCW3XZrIby6R3wIl/MoQ+c0j8lto2Q2zwQHzoS+AvtBwwyJ5L5YskSx14IayHt63FhO3WabktssR+S0h8luuhF95Ir+lRH4rLLthEThgGfTl0FcYblgp71WS1ZI1DtxQwcP71iriNmuV3HZFIr/VRH7rlPCrROS3hshvvWU3rAQHrIW+Dvp6ww0b5L1Rskmy2YEbKnt439pI3GaLktuuQuS3ichvqxJ+VYn8NhP5bbPshg3ggC3Qt0LfZrhhu7x3SHZKdjlwQzUP71s7iNvsVnLb1Yn8dhL57VHCrwaR3y4iv72W3bAdHLAb+h7oew037JP3fskByUEHbqjp4X1rP3GbQ0puuxaR3wEiv8NK+NUm8jtI5HfEshv2gQMOQT8M/YjhhqPyPiY5LjnhwA11PLxvHSNuc1LJbdcl8jtO5HdKCb96RH4niPxOW3bDUXDASeinoJ823HBG3mcl5yTnHbjB4+F96yxxmwtKbrs+kd85Ir+LSvg1IPI7T+R3ybIbzoADLkC/CP2S4YbL8r4iuSq55sANDT28b10hbnNdyW03IvK7SuR3Qwm/xkR+14j8blp2w2VwwHXoN6DfNNxwS963JXckdx24oYmH963bxG3uKbntpkR+d4j87ivh14zI7y6R3wPLbrgFDrgH/T70B4YbHsr7keSx5IkDNzT38L71iLjNUyW33YLI7zGR3zMl/FoS+T0h8ntu2Q0PwQFPoT+D/txwwwt5v5S8krx24IZWHt63XhK3eaPktlsT+b0i8nurhF8bIr/XRH7vLLvhBTjgDfS30N8Zbngv7w+Sj5JPDtzQ1sP71gfiNp+V3HY7Ir+PRH5flPBrT+T3icjvq2U3vAcHfIb+BfpXww3f5P1d8kPy04EbOnh43/pO3OaXktvuSOT3g8jvtxJ+nYj8fhL5/bHshm/ggF/Qf0P/Y7jhr7xD+XqFCi3x8rXvhs4e3rf+/dysbcL46rjtLkR+oYn8wirh15XIz4vIz9vXrhv+ggP+3fp/PSx0b9//dUM4eYeXRJBEdOCGbh7et8ITt4mk5La7E/lFIPKLrIRfDyK/iER+PpbdEA4cEAl6ZOg+hhuiyDuqJJokugM39PTwvhWVuI2vktvuReQXjcjPTwm/3kR+0Yn8/C27IQo4wBe6H3R/ww0B8g6UBEmCHbihj4f3rUDiNiFKbrsvkV8QkV8MJfz6EfkFE/nFtOyGAHBACPQY0GMabogl79iSOJK4DtzQ38P7VmziNvGU3PYAIr84RH7xlfAbSOQXl8gvgWU3xAIHxIMeH3oCww0J5Z1IkliSxIEbBnl430pE3CapktseTOSXmMgvmRJ+Q4j8khD5JbfshoTggKTQk0FPbrghhbxTSlJJUjtww1AP71spidukUXLbw4j8UhH5pVXCbziRX2oiv3SW3ZACHJAGelro6Qw3pJd3BklGSSYHbhjh4X0rA3GbzEpueySRX0YivyxK+I0i8stE5JfVshvSgwMyQ88CPavhhmzyzi7JIcnpwA2jPbxvZSduk0vJbY8h8stB5JdbCb+xRH45ifzyWHZDNnBALui5oecx3JBX3vn+/VySAg7cMM7D+1Y+4jYFldz2eCK//ER+hZTwm0DkV4DIr7BlN+QFBxSEXgh6YcMNReRdVFJMUtyBGyZ6eN8qStymhJLbnkTkV4zIr6QSfpOJ/IoT+ZWy7IYi4IAS0EtCL2W4obS8y0jKSso5cMMUD+9bZYjblFdy21OJ/MoS+VVQwm8akV85Ir+Klt1QGhxQHnoF6BUNN1SSd2VJFUlVB26Y7uF9qzJxm2pKbnsGkV8VIr/qSvjNJPKrSuRXw7IbKoEDqkGvDr2G4Yaa8q4lqS2p48ANszy8b9UiblNXyW3PJvKrTeRXTwm/OUR+dYj8PJbdUBMcUBd6Pegeww315d1A0lDSyIEb5nqI/15Q4jaNldz2PCK/hkR+TZTwm0/k14jIr6llN9QHBzSG3gR6U8MNzeTdXNJC0tKBGxZ4iP9+OeI2rZTc9kIivxZEfq2V8FtE5NeSyK+NZTc0Awe0gt4aehvDDW3l3U7SXtLBgRsWe4j/DiTiNh2V3PYSIr/2RH6dlPBbSuTXgcivs2U3tAUHdITeCXpnww1d5N1V0k3S3YEblnmI/54O4jY9lNz2ciK/bkR+PZXwW0Hk153Ir5dlN3QBB/SA3hN6L8MNveXdR9JX0s+BG1Z6iP+8N3Gb/kpuexWRX18ivwFK+K0m8utH5DfQsht6gwP6Qx8AfaDhhkHyHiwZIhnqwA1rPMR/JpG4zTAlt72WyG8Ikd9wJfzWEfkNJfIbYdkNg8ABw6APhz7CcMNIeY+SjJaMceCG9R7iPzdD3GasktveQOQ3mshvnBJ+G4n8xhD5jbfshpHggLHQx0Efb7hhgrwnSiZJJjtwwyYP8e+/Jm4zRcltbybym0TkN1UJvy1EfpOJ/KZZdsMEcMAU6FOhTzPcMF3eMyQzJbMcuGGrh/j3CBK3ma3ktrcR+c0k8pujhN92Ir9ZRH5zLbthOjhgNvQ50Ocabpgn7/mSBZKFDtyww0P8+1iI2yxScts7ifwWEPktVsJvF5HfQiK/JZbdMA8csAj6YuhLDDcslfcyyXLJCgdu2O0h/v+hxG1WKrntPUR+y4n8Vinht5fIbwWR32rLblgKDlgJfRX01YYb1sh7rWSdZL0DN+zzEH/PnrjNBiW3vZ/Ibx2R30Yl/A4Q+a0n8ttk2Q1rwAEboG+Evslww2Z5b5FslWxz4IaDHuLvKxG32a7ktg8R+W0l8tuhhN9hIr9tRH47LbthMzhgO/Qd0Hcabtgl792SPZK9DtxwxEP86xPiNvuU3PZRIr89RH77lfA7RuS3l8jvgGU37AIH7IO+H/oBww0H5X1IclhyxIEbjnuIfw4lbnNUyW2fIPI7TOR3TAm/k0R+R4j8jlt2w0FwwFHox6AfN9xwQt4nJackpx244ZSHuDNxmzNKbvs0kd8pIr+zSvidIfI7TeR3zrIbToADzkA/C/2c4Ybz8r4guSi55MANZz28b10gbnNZyW2fI/K7SOR3RQm/80R+l4j8rlp2w3lwwGXoV6BfNdxwTd7XJTckNx244YKH963rxG1uKbnti0R+N4j8bivhd4nI7yaR3x3LbrgGDrgF/Tb0O4Yb7sr7nuS+5IEDN1z28L51j7jNQyW3fYXI7z6R3yMl/K4S+T0g8nts2Q13wQEPoT+C/thwwxN5P5U8kzx34IZrHt63nhK3eaHktq8T+T0j8nuphN8NIr/nRH6vLLvhCTjgBfSX0F8Zbngt7zeSt5J3Dtxw08P71hviNu+V3PYtIr+3RH4flPC7TeT3jsjvo2U3vAYHvIf+AfpHww2f5P1Z8kXy1YEb7nh43/pM3Oabktu+S+T3hcjvuxJ+94j8vhL5/bDshk/ggG/Qv0P/Ybjhp7x/SX7/+3UHbrjv4X3rF3Gbv0pu+wGR328iv1B+Ovg9JPL7Q+QX2s+uG36CA/5C/7fbfz203/+6wUveYSRhJd5+9t3wyMP7Vhg/3jbhlNz2YyK/sER+4ZXwe0Lk503kF8GyG7zAAeGgh4cewXBDRHlHkkSW+Dhww1MP71uRiNtEUXLbz4j8IhP5RVXC7zmRnw+RXzTLbogIDogCPSr0aIYbosvbV+In8Xfghhce3rd8idsEKLntl0R+fkR+gUr4vSLy8yfyC7LshujggADogdCDDDcEyztEEkMS04EbXnt43wohbhNLyW2/IfKLQeQXWwm/t0R+MYn84lh2QzA4IBb02NDjGG6IK+94kviSBA7c8M7D+1Y84jYJldz2eyK/+ER+iZTw+0Dkl4DIL7FlN8QFBySEngh6YsMNSeSdVJJMktyBGz56eN9KStwmhZLb/kTkl4zIL6USfp+J/JIT+aWy7IYk4IAU0FNCT2W4IbW800jSStI5cMMXD+9baYjbpFdy21+J/NIS+WVQwu8bkV86Ir+Mlt2QGhyQHnoG6BkNN2SSd2ZJFklWB2747uF9KzNxm2xKbvsHkV8WIr/sSvj9JPLLSuSXw7IbMoEDskHPDj2H4Yac8s4lyS3J48ANvzy8b+UibpNXyW3/JvLLTeSXTwm/P0R+eYj88lt2Q05wQF7o+aDnN9xQQN4FJYUkhR244a+H962CxG2KKLntUPV53ypE5FdUCb/QRH6FifyKWXZDAXBAEehFoRcz3FBc3iUkJSWlHLjBi7hNCeI2pZXcdhgiv5JEfmWU8AtL5FeKyK+sZTcUBweUhl4GelnDDeXkXV5SQVLRgRu8iduUJ25TSclthyPyq0DkV1kJv/BEfhWJ/KpYdkM5cEAl6JWhVzHcUFXe1STVJTUcuCECcZtqxG1qKrntiER+1Yn8ainhF4nIrwaRX23LbqgKDqgJvRb02oYb6si7rqSexOPADZGJ29QlblNfyW37EPnVI/JroIRfFCI/D5FfQ8tuqAMOqA+9AfSGhhsaybuxpImkqQM3RCVu05i4TTMltx2NyK8JkV9zJfyiE/k1JfJrYdkNjcABzaA3h97CcENLebeStJa0ceAGX+I2rYjbtFVy235Efq2J/Nop4edP5NeGyK+9ZTe0BAe0hd4OenvDDR3k3VHSSdLZgRsCiNt0JG7TRcltBxL5dSLy66qEXxCRX2civ26W3dABHNAFelfo3Qw3dJd3D0lPSS8HbggmbtODuE1vJbcdQuTXk8ivjxJ+MYj8ehH59bXshu7ggN7Q+0Dva7ihn7z7SwZIBjpwQ0ziNv2J2wxSctuxiPwGEPkNVsIvNpHfQCK/IZbd0A8cMAj6YOhDDDcMlfcwyXDJCAduiEPcZhhxm5FKbjsukd9wIr9RSvjFI/IbQeQ32rIbhoIDRkIfBX204YYx8h4rGScZ78AN8evzvjWWuM0EJbedgMhvHJHfRCX8EhL5jSfym2TZDWPAAROgT4Q+yXDDZHlPkUyVTHPghkTEbaYQt5mu5LYTE/lNJfKboYRfEiK/aUR+My27YTI4YDr0GdBnGm6YJe/ZkjmSuQ7ckJS4zWziNvOU3HYyIr85RH7zlfBLTuQ3l8hvgWU3zAIHzIM+H/oCww0L5b1IsliyxIEbUhC3WUTcZqmS205J5LeYyG+ZEn6piPyWEPktt+yGheCApdCXQV9uuGGFvFdKVklWO3BDauI2K4nbrFFy22mI/FYR+a1Vwi8tkd9qIr91lt2wAhywBvpa6OsMN6yX9wbJRskmB25IR9xmA3GbzUpuOz2R30Yivy1K+GUg8ttE5LfVshvWgwM2Q98Cfavhhm3y3i7ZIdnpwA0ZidtsJ26zS8ltZyLy20Hkt1sJv8xEfjuJ/PZYdsM2cMAu6Luh7zHcsFfe+yT7JQccuCELcZt9xG0OKrntrER++4n8Dinhl43I7wCR32HLbtgLDjgI/RD0w4Ybjsj7qOSY5LgDN2QnbnOUuM0JJbedg8jvGJHfSSX8chL5HSfyO2XZDUfAASegn4R+ynDDaXmfkZyVnHPghlzEbc4Qtzmv5LZzE/mdJfK7oIRfHiK/c0R+Fy274TQ44Dz0C9AvGm64JO/LkiuSqw7ckJe4zWXiNteU3HY+Ir8rRH7XlfDLT+R3lcjvhmU3XAIHXIN+HfoNww035X1Lcltyx4EbChC3uUXc5q6S2y5I5HebyO+eEn6FiPzuEPndt+yGm+CAu9DvQb9vuOGBvB9KHkkeO3BDYeI2D4nbPFFy20WI/B4R+T1Vwq8okd9jIr9nlt3wABzwBPpT6M8MNzyX9wvJS8krB24oRtzmBXGb10puuziR30sivzdK+JUg8ntF5PfWshuegwNeQ38D/a3hhnfyfi/5IPnowA0lidu8J27zScltlyLy+0Dk91kJv9JEfh+J/L5YdsM7cMAn6J+hfzHc8FXe3yTfJT8cuKEMcZtvxG1+KrntskR+34n8finhV47I7weR32/LbvgKDvgJ/Rf034Yb/sj7rySUv1eo0P723VCeuM1f4jZe/jpuuwKRXyh/Hr8wSvhVJPILTeQX1t+uG/6AA/7d+n89DPSw/v/rBm95h5OEl0Rw4IZKxG3CEbeJqOS2KxP5hSfyi6SEXxUivwhEfpEtu8EbHBAReiTokQ03+Mg7iiSqJJoDN1QlbhOFuE10JbddjcgvKpGfrxJ+1Yn8ohH5+Vl2gw84IDp0X+h+hhv85R0gCZQEOXBDDeI2AcRtgpXcdk0iv0AivxAl/GoR+QUR+cWw7AZ/cEAw9BDoMQw3xJR3LElsSRwHbqhN3CYWcZu4Sm67DpFfbCK/eEr41SXyi0PkF9+yG2KCA+JCjwc9vuGGBPJOKEkkSezADfWI2yQkbpNEyW17iPwSEfklVcKvPpFfYiK/ZJbdkAAckAR6UujJDDckl3cKSUpJKgduaEDcJgVxm9RKbrshkV9KIr80Svg1IvJLReSX1rIbkoMDUkNPAz2t4YZ08k4vySDJ6MANjYnbpCduk0nJbTch8stA5JdZCb+mRH4ZifyyWHZDOnBAJuiZoWcx3JBV3tkk2SU5HLihGXGbbMRtciq57eZEftmJ/HIp4deCyC8HkV9uy27ICg7ICT0X9NyGG/LIO68k37+fzYEbWhK3yUvcpoCS225F5JePyK+gEn6tifzyE/kVsuyGPOCAAtALQi9kuKGwvItIikqKOXBDG+I2RYjbFFdy222J/IoS+ZVQwq8dkV8xIr+Slt1QGBxQHHoJ6CUNN5SSd2lJGUlZB25oT9ymNHGbckpuuwORXxkiv/JK+HUk8itL5FfBshtKgQPKQS8PvYLhhoryriSpLKniwA2diNtUIm5TVcltdybyq0zkV00Jvy5EflWI/KpbdkNFcEBV6NWgVzfcUEPeNSW1JLUduKErcZuaxG3qKLntbkR+tYj86irh153IrzaRXz3LbqgBDqgDvS70eoYbPPKuL2kgaejADT2I29QnbtNIyW33JPJrQOTXWAm/XkR+DYn8mlh2gwcc0Ah6Y+hNDDc0lXczSXNJCwdu6E3cphlxm5ZKbrsPkV9zIr9WSvj1JfJrQeTX2rIbmoIDWkJvBb214YY28m4raSdp78AN/YjbtCVu00HJbfcn8mtH5NdRCb8BRH7tifw6WXZDG3BAB+gdoXcy3NBZ3l0kXSXdHLhhIHGbLsRtuiu57UFEfl2J/Hoo4TeYyK8bkV9Py27oDA7oDr0H9J6GG3rJu7ekj6SvAzcMIW7Tm7hNPyW3PZTIrw+RX38l/IYR+fUl8htg2Q29wAH9oPeHPsBww0B5D5IMlgxx4IbhxG0GEbcZquS2RxD5DSbyG6aE30givyFEfsMtu2EgOGAo9GHQhxtuGCHvkZJRktEO3DCKuM1I4jZjlNz2aCK/UUR+Y5XwG0PkN5rIb5xlN4wAB4yBPhb6OMMN4+U9QTJRMsmBG8YSt5lA3GayktseR+Q3kchvihJ+44n8JhH5TbXshvHggMnQp0CfarhhmrynS2ZIZjpwwwTiNtOJ28xSctsTifxmEPnNVsJvEpHfTCK/OZbdMA0cMAv6bOhzDDfMlfc8yXzJAgdumEzcZh5xm4VKbnsKkd98Ir9FSvhNJfJbQOS32LIb5oIDFkJfBH2x4YYl8l4qWSZZ7sAN04jbLCVus0LJbU8n8ltG5LdSCb8ZRH7LifxWWXbDEnDACugroa8y3LBa3mskayXrHLhhJnGbNcRt1iu57VlEfmuJ/DYo4TebyG8dkd9Gy25YDQ5YD30D9I2GGzbJe7Nki2SrAzfMIW6zmbjNNiW3PZfIbwuR33Yl/OYR+W0l8tth2Q2bwAHboG+HvsNww05575Lsluxx4Ib5xG12EbfZq+S2FxD57Sby26eE30Iivz1Efvstu2EnOGAv9H3Q9xtuOCDvg5JDksMO3LCIuM1B4jZHlNz2YiK/Q0R+R5XwW0Lkd5jI75hlNxwABxyBfhT6McMNx+V9QnJScsqBG5YStzlB3Oa0ktteRuR3ksjvjBJ+y4n8ThH5nbXshuPggNPQz0A/a7jhnLzPSy5ILjpwwwriNueJ21xSctsrifwuEPldVsJvFZHfRSK/K5bdcA4ccAn6ZehXDDdclfc1yXXJDQduWE3c5hpxm5tKbnsNkd91Ir9bSvitJfK7QeR327IbroIDbkK/Bf224YY78r4ruSe578AN64jb3CVu80DJba8n8rtH5PdQCb8NRH73ifweWXbDHXDAA+gPoT8y3PBY3k8kTyXPHLhhI3GbJ8Rtniu57U1Efk+J/F4o4beZyO8Zkd9Ly254DA54Dv0F9JeGG17J+7XkjeStAzdsIW7zmrjNOyW3vZXI7w2R33sl/LYR+b0l8vtg2Q2vwAHvoL+H/sFww0d5f5J8lnxx4IbtxG0+Ebf5quS2dxD5fSby+6aE304ivy9Eft8tu+EjOOAr9G/Qvxtu+CHvn5Jfkt8O3LCLuM1P4jZ/lNz2biK/X0R+f5Xw20Pk95vIL1SAXTf8AAf8gf4X+r+fAd0QWt5ekjCSsAH23bCXuI1XAG8b7wAdt72PyC8MkV84Jfz2E/mFJfILb9kNoQP+zwHe0MNBD2+4IYK8I0oiSSI7cMMB4jYRidv4KLntg0R+kYj8oijhd4jILzKRX1TLbogADvCBHgV6VMMN0eQdXeIr8XPghsPEbaITt/FXcttHiPx8ifwClPA7SuTnR+QXaNkN0cAB/tADoAcabgiSd7AkRBLDgRuOEbcJJm4TU8ltHyfyCyHyi6WE3wkivxhEfrEtuyEIHBATeizosQ03xJF3XEk8SXwHbjhJ3CYucZsESm77FJFfPCK/hEr4nSbyi0/kl8iyG+KAAxJATwg9keGGxPJOIkkqSebADWeI2yQhbpNcyW2fJfJLSuSXQgm/c0R+yYj8Ulp2Q2JwQHLoKaCnNNyQSt6pJWkkaR244Txxm9TEbdIpue0LRH5piPzSK+F3kcgvLZFfBstuSAUOSAc9PfQMhhsyyjuTJLMkiwM3XCJuk4m4TVYlt32ZyC8zkV82JfyuEPllIfLLbtkNGcEBWaFng57dcEMOeeeU5JLkduCGq8RtchK3yaPktq8R+eUi8surhN91Ir/cRH75LLshBzggD/S80PMZbsgv7wKSgpJCDtxwg7hNAeI2hZXc9k0iv4JEfkWU8LtF5FeIyK+oZTfkBwcUhl4EelHDDcXkXVxSQlLSgRtuE7cpTtymlJLbvkPkV4LIr7QSfneJ/EoS+ZWx7IZi4IBS0EtDL2O4oay8y0nKSyo4cMM94jbliNtUVHLb94n8yhP5VVLC7wGRXwUiv8qW3VAWHFAReiXolQ03VJF3VUk1SXUHbnhI3KYqcZsaSm77EZFfNSK/mkr4PSbyq07kV8uyG6qAA2pArwm9luGG2vKuI6krqefADU+I29QhbuNRcttPifzqEvnVV8LvGZFfPSK/BpbdUBsc4IFeH3oDww0N5d1I0ljSxIEbnhO3aUTcpqmS235B5NeYyK+ZEn4vifyaEPk1t+yGhuCAptCbQW9uuKGFvFtKWklaO3DDK+I2LYnbtFFy26+J/FoR+bVVwu8NkV9rIr92lt3QAhzQBnpb6O0MN7SXdwdJR0knB254S9ymA3Gbzkpu+x2RX0civy5K+L0n8utE5NfVshvagwM6Q+8Cvavhhm7y7i7pIenpwA0fiNt0J27TS8ltfyTy60Hk11sJv09Efj2J/PpYdkM3cEAv6L2h9zHc0Ffe/ST9JQMcuOEzcZt+xG0GKrntL0R+/Yn8Binh95XIbwCR32DLbugLDhgIfRD0wYYbhsh7qGSYZLgDN3wjbjOUuM0IJbf9nchvGJHfSCX8fhD5DSfyG2XZDUPAASOgj4Q+ynDDaHmPkYyVjHPghp/EbcYQtxmv5LZ/EfmNJfKboITfbyK/cUR+Ey27YTQ4YDz0CdAnGm6YJO/JkimSqQ7c8Ie4zWTiNtOU3PZfIr8pRH7TlfAL1YD3ralEfjMsu2ESOGAa9OnQZxhumCnvWZLZkjkO3BCauM0s4jZzldy2F5HfbCK/eUr4hSHym0PkN9+yG2aCA+ZCnwd9vuGGBfJeKFkkWezADWGJ2ywkbrNEyW17E/ktIvJbqoRfOCK/xUR+yyy7YQE4YAn0pdCXGW5YLu8VkpWSVQ7cEJ64zQriNquV3HYEIr+VRH5rlPCLSOS3ishvrWU3LAcHrIa+Bvpaww3r5L1eskGy0YEbIhG3WU/cZpOS245M5LeByG+zEn4+RH4bify2WHbDOnDAJuiboW8x3LBV3tsk2yU7HLghCnGbbcRtdiq57ahEftuJ/HYp4ReNyG8Hkd9uy27YCg7YCX0X9N2GG/bIe69kn2S/AzdEJ26zl7jNASW37Uvkt4/I76ASfn5EfvuJ/A5ZdsMecMAB6AehHzLccFjeRyRHJcccuMGfuM0R4jbHldx2AJHfUSK/E0r4BRL5HSPyO2nZDYfBAcehn4B+0nDDKXmflpyRnHXghiDiNqeJ25xTctvBRH5niPzOK+EXQuR3lsjvgmU3nAIHnIN+HvoFww0X5X1JcllyxYEbYhC3uUTc5qqS245J5HeZyO+aEn6xiPyuEPldt+yGi+CAq9CvQb9uuOGGvG9KbkluO3BDbOI2N4nb3FFy23GI/G4R+d1Vwi8ukd9tIr97lt1wAxxwB/pd6PcMN9yX9wPJQ8kjB26IR9zmAXGbx0puOz6R30MivydK+CUg8ntE5PfUshvugwMeQ38C/anhhmfyfi55IXnpwA0Jids8J27zSsltJyLye0Hk91oJv8REfi+J/N5YdsMzcMAr6K+hvzHc8Fbe7yTvJR8cuCEJcZt3xG0+KrntpER+74n8Pinhl4zI7wOR32fLbngLDvgI/RP0z4Ybvsj7q+Sb5LsDNyQnbvOVuM0PJbedgsjvG5HfTyX8UhL5fSfy+2XZDV/AAT+g/4T+y3DD739vyV9JqED7bkhF3OYPcZvQgTpuOzWR318iPy8l/NIQ+YUK5PELE2jXDb/BAf9u/b/uBT1M4P+6Iay8vSXhJOEduCEtcRtv4jYRlNx2OiK/cER+EZXwS0/kF57IL5JlN4QFB0SAHhF6JMMNkeXtI4kiierADRmI2/gQt4mm5LYzEvlFIfKLroRfJiK/qER+vpbdEBkcEA16dOi+hhv85O0vCZAEOnBDZuI2/sRtgpTcdhYivwAiv2Al/LIS+QUS+YVYdoMfOCAIejD0EMMNMeQdUxJLEtuBG7IRt4lJ3CaOktvOTuQXi8gvrhJ+OYj8YhP5xbPshhjggDjQ40KPZ7ghvrwTSBJKEjlwQ07iNgmI2yRWctu5iPwSEvklUcIvN5FfIiK/pJbdEB8ckBh6EuhJDTckk3dySQpJSgduyEPcJjlxm1RKbjsvkV8KIr/USvjlI/JLSeSXxrIbkoEDUkFPDT2N4Ya08k4nSS/J4MAN+YnbpCNuk1HJbRcg8ktP5JdJCb+CRH4ZiPwyW3ZDWnBARuiZoGc23JBF3lkl2STZHbihEHGbrMRtcii57cJEftmI/HIq4VeEyC87kV8uy27IAg7IAT0n9FyGG3LLO48krySfAzcUJW6Th7hNfiW3XYzILy+RXwEl/IoT+eUj8ito2Q25wQH5oReAXtBwQyF5F5YUkRR14IYSxG0KE7cppuS2SxL5FSHyK66EXykiv6JEfiUsu6EQOKAY9OLQSxhuKCnvUpLSkjIO3FCauE0p4jZlldx2GSK/0kR+5ZTwK0vkV4bIr7xlN5QEB5SFXg56ecMNFeRdUVJJUtmBG8oRt6lI3KaKktsuT+RXicivqhJ+FYj8KhP5VbPshgrggCrQq0KvZrihurxrSGpKajlwQ0XiNjWI29RWctuViPxqEvnVUcKvMpFfLSK/upbdUB0cUBt6Heh1DTfUk7dHUl/SwIEbqhC38RC3aajktqsS+dUn8mukhF81Ir8GRH6NLbuhHjigIfRG0Bsbbmgi76aSZpLmDtxQnbhNU+I2LZTcdg0iv2ZEfi2V8KtJ5NecyK+VZTc0AQe0gN4SeivDDa3l3UbSVtLOgRtqEbdpQ9ymvZLbrk3k15bIr4MSfnWI/NoR+XW07IbW4ID20DtA72i4oZO8O0u6SLo6cENd4jadidt0U3Lb9Yj8uhD5dVfCz0Pk15XIr4dlN3QCB3SD3h16D8MNPeXdS9Jb0seBG+oTt+lF3KavkttuQOTXm8ivnxJ+DYn8+hD59bfshp7ggL7Q+0Hvb7hhgLwHSgZJBjtwQyPiNgOJ2wxRctuNifwGEfkNVcKvCZHfYCK/YZbdMAAcMAT6UOjDDDcMl/cIyUjJKAduaErcZgRxm9FKbrsZkd9IIr8xSvg1J/IbReQ31rIbhoMDRkMfA32s4YZx8h4vmSCZ6MANLYjbjCduM0nJbbck8ptA5DdZCb9WRH4TifymWHbDOHDAJOiToU8x3DBV3tMk0yUzHLihNXGbacRtZiq57TZEftOJ/GYp4deWyG8Gkd9sy26YCg6YCX0W9NmGG+bIe65knmS+Aze0I24zl7jNAiW33Z7Ibx6R30Il/DoQ+c0n8ltk2Q1zwAELoC+Evshww2J5L5EslSxz4IaOxG2WELdZruS2OxH5LSXyW6GEX2civ2VEfistu2ExOGA59BXQVxpuWCXv1ZI1krUO3NCFuM1q4jbrlNx2VyK/NUR+65Xw60bkt5bIb4NlN6wCB6yDvh76BsMNG+W9SbJZssWBG7oTt9lE3GarktvuQeS3mchvmxJ+PYn8thD5bbfsho3ggK3Qt0Hfbrhhh7x3SnZJdjtwQy/iNjuJ2+xRctu9ifx2EfntVcKvD5HfbiK/fZbdsAMcsAf6Xuj7DDfsl/cByUHJIQdu6Evc5gBxm8NKbrsfkd9BIr8jSvj1J/I7ROR31LIb9oMDDkM/Av2o4YZj8j4uOSE56cANA4jbHCduc0rJbQ8k8jtB5HdaCb9BRH4nifzOWHbDMXDAKeinoZ8x3HBW3uck5yUXHLhhMHGbc8RtLiq57SFEfueJ/C4p4TeUyO8Ckd9ly244Cw64CP0S9MuGG67I+6rkmuS6AzcMI25zlbjNDSW3PZzI7xqR300l/EYQ+V0n8rtl2Q1XwAE3oN+Efstww21535Hcldxz4IaRxG3uELe5r+S2RxH53SXye6CE32giv3tEfg8tu+E2OOA+9AfQHxpueCTvx5InkqcO3DCGuM1j4jbPlNz2WCK/J0R+z5XwG0fk95TI74VlNzwCBzyD/hz6C8MNL+X9SvJa8saBG8YTt3lF3OatktueQOT3msjvnRJ+E4n83hD5vbfshpfggLfQ30F/b7jhg7w/Sj5JPjtwwyTiNh+J23xRctuTifw+Efl9VcJvCpHfZyK/b5bd8AEc8AX6V+jfDDd8l/cPyU/JLwdumErc5gdxm99Kbnsakd9PIr8/SvhNJ/L7ReT317IbvoMDfkP/A/2v4YZQQV6hQku8JGGC7LthBnGbfz83a5uwQTpueyaRnxeRn7cSfrOI/MIQ+YULsuuGf3+c/+eAsNC9oYcL+l83hJd3BElESSQHbphN3CYCcZvISm57DpFfRCI/HyX85hL5RSLyi2LZDeHBAZGh+0CPYrghqryjSaJLfB24YR5xm2jEbfyU3PZ8Ir/oRH7+SvgtIPLzJfILsOyGqOAAP+j+0AMMNwTKO0gSLAlx4IaFxG2CiNvEUHLbi4j8gon8Yirht5jIL4TIL5ZlNwSCA2JAjwk9luGG2PKOI4kriefADUuI28QhbhNfyW0vJfKLS+SXQAm/ZUR+8Yj8Elp2Q2xwQHzoCaAnNNyQSN6JJUkkSR24YTlxm8TEbZIpue0VRH5JiPySK+G3ksgvKZFfCstuSAQOSAY9OfQUhhtSyjuVJLUkjQM3rCJuk4q4TVolt72ayC81kV86JfzWEPmlIfJLb9kNKcEBaaGng57ecEMGeWeUZJJkduCGtcRtMhK3yaLkttcR+WUi8suqhN96Ir/MRH7ZLLshAzggC/Ss0LMZbsgu7xySnJJcDtywgbhNDuI2uZXc9kYiv5xEfnmU8NtE5JeLyC+vZTdkBwfkhp4Hel7DDfn+/UySApKCDtywmbhNfuI2hZTc9hYivwJEfoWV8NtK5FeQyK+IZTfkAwcUgl4YehHDDUXlXUxSXFLCgRu2EbcpRtympJLb3k7kV5zIr5QSfjuI/EoQ+ZW27Iai4ICS0EtBL224oYy8y0rKSco7cMNO4jZlidtUUHLbu4j8yhH5VVTCbzeRX3kiv0qW3VAGHFABekXolQw3VJZ3FUlVSTUHbthD3KYKcZvqSm57L5FfVSK/Gkr47SPyq0bkV9OyGyqDA6pDrwG9puGGWvKuLakjqevADfuJ29QmblNPyW0fIPKrQ+TnUcLvIJFfXSK/+pbdUAscUA+6B3p9ww0N5N1Q0kjS2IEbDhG3aUjcpomS2z5M5NeIyK+pEn5HiPwaE/k1s+yGBuCAJtCbQm9muKG5vFtIWkpaOXDDUeI2LYjbtFZy28eI/FoS+bVRwu84kV8rIr+2lt3QHBzQGnob6G0NN7STd3tJB0lHB244QdymPXGbTkpu+ySRXwciv85K+J0i8utI5NfFshvagQM6Qe8MvYvhhq7y7ibpLunhwA2nidt0I27TU8ltnyHy607k10sJv7NEfj2I/HpbdkNXcEBP6L2g9zbc0EfefSX9JP0duOEccZu+xG0GKLnt80R+/Yj8Birhd4HIrz+R3yDLbugDDhgAfSD0QYYbBst7iGSoZJgDN1wkbjOEuM1wJbd9ichvKJHfCCX8LhP5DSPyG2nZDYPBAcOhj4A+0nDDKHmPloyRjHXghivEbUYTtxmn5LavEvmNIfIbr4TfNSK/sUR+Eyy7YRQ4YBz08dAnGG6YKO9JksmSKQ7ccJ24zSTiNlOV3PYNIr/JRH7TlPC7SeQ3hchvumU3TAQHTIU+Dfp0ww0z5D1TMksy24EbbhG3mUncZo6S275N5DeLyG+uEn53iPxmE/nNs+yGGeCAOdDnQp9nuGG+vBdIFkoWOXDDXeI2C4jbLFZy2/eI/BYS+S1Rwu8+kd8iIr+llt0wHxywGPoS6EsNNyyT93LJCslKB254QNxmOXGbVUpu+yGR3woiv9VK+D0i8ltJ5LfGshuWgQNWQV8NfY3hhrXyXidZL9ngwA2PidusI26zUcltPyHyW0/kt0kJv6dEfhuI/DZbdsNacMBG6JugbzbcsEXeWyXbJNsduOEZcZutxG12KLnt50R+24j8dirh94LIbzuR3y7LbtgCDtgBfSf0XYYbdst7j2SvZJ8DN7wkbrOHuM1+Jbf9ishvL5HfASX8XhP57SPyO2jZDbvBAfuhH4B+0HDDIXkflhyRHHXghjfEbQ4Ttzmm5LbfEvkdIfI7roTfOyK/o0R+Jyy74RA44Bj049BPGG44Ke9TktOSMw7c8J64zSniNmeV3PYHIr/TRH7nlPD7SOR3hsjvvGU3nAQHnIV+Dvp5ww0X5H1Rckly2YEbPhG3uUjc5oqS2/5M5HeJyO+qEn5fiPwuE/lds+yGC+CAK9CvQr9muOG6vG9IbkpuOXDDV+I2N4jb3FZy29+I/G4S+d1Rwu87kd8tIr+7lt1wHRxwG/od6HcNN9yT933JA8lDB274QdzmPnGbR0pu+yeR3wMiv8dK+P0i8ntI5PfEshvugQMeQX8M/YnhhqfyfiZ5LnnhwA2/ids8I27zUslt/yHye07k90oJv79Efi+I/F5bdsNTcMBL6K+gvzbc8EbebyXvJO8duCFUQ+Lv2RO3+aDktkMT+b0j8vuohJ8Xkd97Ir9Plt3wBhzwAfpH6J8MN3yW9xfJV8k3B24IQ9zmC3Gb70puOyyR31civx9K+HkT+X0j8vtp2Q2fwQHfof+A/tNwwy95//73a5K/DtwQjrjNb+I2oYJ13HZ4Ir8/RH6hlfCLQOT3l8jPK9iuG36BA/7d+n89NHSv4P91Qxh5h5V4S8IF23dDROI2YYN524RXctuRiPy8ifwiKOEXmcgvHJFfRMtuCAMOCA89AvSIhhsiyTuyxEcSxYEbfIjbRCZuE1XJbUch8vMh8oumhF9UIr8oRH7RLbshEjggKvRo0KMbbvCVt5/EXxLgwA3RiNv4EbcJVHLb0Yn8/In8gpTw8yXyCyDyC7bsBl9wQCD0IOjBhhtC5B1DElMSy4Eb/IjbxCBuE1vJbfsT+cUk8oujhF8AkV8sIr+4lt0QAg6IDT0O9LiGG+LJO74kgSShAzcEEreJT9wmkZLbDiLyS0Dkl1gJv2Aiv4REfkksuyEeOCAR9MTQkxhuSCrvZJLkkhQO3BBC3CYZcZuUSm47BpFfciK/VEr4xSTyS0Hkl9qyG5KCA1JCTwU9teGGNPJOK0knSe/ADbGI26QlbpNByW3HJvJLR+SXUQm/OER+6Yn8Mll2QxpwQAboGaFnMtyQWd5ZJFkl2Ry4IS5xmyzEbbIrue14RH5ZifxyKOEXn8gvG5FfTstuyAwOyA49B/SchhtyyTu3JI8krwM3JCBuk5u4TT4lt52QyC8PkV9+JfwSEfnlJfIrYNkNucAB+aDnh17AcENBeReSFJYUceCGxMRtChG3KarktpMQ+RUm8iumhF9SIr8iRH7FLbuhIDigKPRi0Isbbigh75KSUpLSDtyQjLhNSeI2ZZTcdnIiv1JEfmWV8EtB5FeayK+cZTeUAAeUgV4WejnDDeXlXUFSUVLJgRtSErepQNymspLbTkXkV5HIr4oSfqmJ/CoR+VW17Iby4IDK0KtAr2q4oZq8q0tqSGo6cEMa4jbVidvUUnLbaYn8ahD51VbCLx2RX00ivzqW3VANHFALem3odQw31JV3PYlHUt+BG9ITt6lH3KaBktvOQOTnIfJrqIRfRiK/+kR+jSy7oS44oAH0htAbGW5oLO8mkqaSZg7ckIm4TRPiNs2V3HZmIr+mRH4tlPDLQuTXjMivpWU3NAYHNIfeAnpLww2t5N1a0kbS1oEbshK3aU3cpp2S285G5NeGyK+9En7ZifzaEvl1sOyGVuCAdtDbQ+9guKGjvDtJOku6OHBDDuI2nYjbdFVy2zmJ/DoT+XVTwi8XkV8XIr/ult3QERzQFXo36N0NN/SQd09JL0lvB27ITdymJ3GbPkpuOw+RXy8iv75K+OUl8utN5NfPsht6gAP6QO8LvZ/hhv7yHiAZKBnkwA35iNsMIG4zWMlt5yfyG0jkN0QJvwJEfoOI/IZadkN/cMBg6EOgDzXcMEzewyUjJCMduKEgcZvhxG1GKbntQkR+I4j8RivhV5jIbySR3xjLbhgGDhgFfTT0MYYbxsp7nGS8ZIIDNxQhbjOOuM1EJbddlMhvPJHfJCX8ihH5TSDym2zZDWPBAROhT4I+2XDDFHlPlUyTTHfghuLEbaYSt5mh5LZLEPlNI/KbqYRfSSK/6UR+syy7YQo4YAb0mdBnGW6YLe85krmSeQ7cUIq4zRziNvOV3HZpIr+5RH4LlPArQ+Q3j8hvoWU3zAYHzIe+APpCww2L5L1YskSy1IEbyhK3WUzcZpmS2y5H5LeEyG+5En7lifyWEvmtsOyGReCAZdCXQ19huGGlvFdJVkvWOHBDBeI2q4jbrFVy2xWJ/FYT+a1Twq8Skd8aIr/1lt2wEhywFvo66OsNN2yQ90bJJslmB26oTNxmI3GbLUpuuwqR3yYiv61K+FUl8ttM5LfNshs2gAO2QN8KfZvhhu3y3iHZKdnlwA3ViNvsIG6zW8ltVyfy20nkt0cJvxpEfruI/PZadsN2cMBu6Hug7zXcsE/e+yUHJAcduKEmcZv9xG0OKbntWkR+B4j8DivhV5vI7yCR3xHLbtgHDjgE/TD0I4Ybjsr7mOS45IQDN9QhbnOMuM1JJbddl8jvOJHfKSX86hH5nSDyO23ZDUfBASehn4J+2nDDGXmflZyTnHfgBg9xm7PEbS4oue36RH7niPwuKuHXgMjvPJHfJctuOAMOuAD9IvRLhhsuy/uK5KrkmgM3NCRuc4W4zXUlt92IyO8qkd8NJfwaE/ldI/K7adkNl8EB16HfgH7TcMMted+W3JHcdeCGJsRtbhO3uafktpsS+d0h8ruvhF8zIr+7RH4PLLvhFjjgHvT70B8Ybngo70eSx5InDtzQnLjNI+I2T5Xcdgsiv8dEfs+U8GtJ5PeEyO+5ZTc8BAc8hf4M+nPDDS/k/VLySvLagRtaEbd5SdzmjZLbbk3k94rI760Sfm2I/F4T+b2z7IYX4IA30N9Cf2e44b28P0g+Sj45cENb4jYfiNt8VnLb7Yj8PhL5fVHCrz2R3yciv6+W3fAeHPAZ+hfoXw03fJP3d8kPyU8HbuhA3OY7cZtfSm67I5HfDyK/30r4dSLy+0nk98eyG76BA35B/w39j+GGv/IOFeIVKrTEK8S+GzoTt/n3c7O2CROi47a7EPmFJvILq4RfVyI/LyI/7xC7bvgLDvh36//1sNC9Q/7XDeHkHV4SQRLRgRu6EbcJT9wmkpLb7k7kF4HIL7ISfj2I/CIS+flYdkM4cEAk6JGh+xhuiCLvqJJokugO3NCTuE1U4ja+Sm67F5FfNCI/PyX8ehP5RSfy87fshijgAF/oftD9DTcEyDtQEiQJduCGPsRtAonbhCi57b5EfkFEfjGU8OtH5BdM5BfTshsCwAEh0GNAj2m4IZa8Y0viSOI6cEN/4jaxidvEU3LbA4j84hD5xVfCbyCRX1wivwSW3RALHBAPenzoCQw3JJR3IkliSRIHbhhE3CYRcZukSm57MJFfYiK/ZEr4DSHyS0Lkl9yyGxKCA5JCTwY9ueGGFPJOKUklSf3/UGMOQX5/XxNOJrY1wcyE45nYtm3btm3btm3btm3byXuy+Nfbv7vue6vOoqv6zuJbn3r65FnEgRuGErfxJ24TpOS2hxH5BRD5BSvhN5zIL5DIL8SyG/zAAUHQg6GHGG4IlXd6SQZJRgduGEHcJj1xm0xKbnskkV8GIr/MSviNIvLLSOSXxbIbQsEBmaBnhp7FcENWeWeTZJfkcOCG0cRtshG3yanktscQ+WUn8sulhN9YIr8cRH65LbshKzggJ/Rc0HMbbsgj77z/vkuS34EbxhG3yUvcpoCS2x5P5JePyK+gEn4TiPzyE/kVsuyGPOCAAtALQi9kuKGwvItIikqKOXDDROI2RYjbFFdy25OI/IoS+ZVQwm8ykV8xIr+Slt1QGBxQHHoJ6CUNN5SSd2lJGUlZB26YQtymNHGbckpueyqRXxkiv/JK+E0j8itL5FfBshtKgQPKQS8PvYLhhoryriSpLKniwA3TidtUIm5TVcltzyDyq0zkV00Jv5lEflWI/KpbdkNFcEBV6NWgVzfcUEPeNSW1JLUduGEWcZuaxG3qKLnt2UR+tYj86irhN4fIrzaRXz3LbqgBDqgDvS70eoYb6su7gaShpJEDN8wlbtOAuE1jJbc9j8ivIZFfEyX85hP5NSLya2rZDfXBAY2hN4He1HBDM3k3l7SQtHTghgXEbZoTt2ml5LYXEvm1IPJrrYTfIiK/lkR+bSy7oRk4oBX01tDbGG5oK+92kvaSDg7csJi4TTviNh2V3PYSIr/2RH6dlPBbSuTXgcivs2U3tAUHdITeCXpnww1d5N1V0k3S3YEblhG36UrcpoeS215O5NeNyK+nEn4riPy6E/n1suyGLuCAHtB7Qu9luKG3vPtI+kr6OXDDSuI2fYjb9Fdy26uI/PoS+Q1Qwm81kV8/Ir+Blt3QGxzQH/oA6AMNNwyS92DJEMlQB25YQ9xmMHGbYUpuey2R3xAiv+FK+K0j8htK5DfCshsGgQOGQR8OfYThhpHyHiUZLRnjwA3riduMIm4zVsltbyDyG03kN04Jv41EfmOI/MZbdsNIcMBY6OOgjzfcMEHeEyWTJJMduGETcZuJxG2mKLntzUR+k4j8pirht4XIbzKR3zTLbpgADpgCfSr0aYYbpst7hmSmZJYDN2wlbjODuM1sJbe9jchvJpHfHCX8thP5zSLym2vZDdPBAbOhz4E+13DDPHnPlyyQLHTghh3EbeYTt1mk5LZ3EvktIPJbrITfLiK/hUR+Syy7YR44YBH0xdCXGG5YKu9lkuWSFQ7csJu4zTLiNiuV3PYeIr/lRH6rlPDbS+S3gshvtWU3LAUHrIS+Cvpqww1r5L1Wsk6y3oEb9hG3WUvcZoOS295P5LeOyG+jEn4HiPzWE/ltsuyGNeCADdA3Qt9kuGGzvLdItkq2OXDDQeI2W4jbbFdy24eI/LYS+e1Qwu8wkd82Ir+dlt2wGRywHfoO6DsNN+yS927JHsleB244QtxmN3GbfUpu+yiR3x4iv/1K+B0j8ttL5HfAsht2gQP2Qd8P/YDhhoPyPiQ5LDniwA3HidscIm5zVMltnyDyO0zkd0wJv5NEfkeI/I5bdsNBcMBR6MegHzfccELeJyWnJKcduOEUcZuTxG3OKLnt00R+p4j8zirhd4bI7zSR3znLbjgBDjgD/Sz0c4Ybzsv7guSi5JIDN5wlbnOBuM1lJbd9jsjvIpHfFSX8zhP5XSLyu2rZDefBAZehX4F+1XDDNXlfl9yQ3HTghgvEba4Tt7ml5LYvEvndIPK7rYTfJSK/m0R+dyy74Ro44Bb029DvGG64K+97kvuSBw7ccJm4zT3iNg+V3PYVIr/7RH6PlPC7SuT3gMjvsWU33AUHPIT+CPpjww1P5P1U8kzy3IEbrhG3eUrc5oWS275O5PeMyO+lEn43iPyeE/m9suyGJ+CAF9BfQn9luOG1vN9I3kreOXDDTeI2b4jbvFdy27eI/N4S+X1Qwu82kd87Ir+Plt3wGhzwHvoH6B8NN3yS92fJF8lXB264Q9zmM3Gbb0pu+y6R3xciv+9K+N0j8vtK5PfDshs+gQO+Qf8O/Yfhhp/y/iX5/e/vDtxwn7jNL+I2f5Xc9gMiv99EfmGS6OD3kMjvD5Ff2CR23fATHPAX+r/d/tfDJvmvGzzkHU4SXhIhiX03PCJuEy4Jb5uISm77MZFfeCK/SEr4PSHyi0DkF9myGzzAARGhR4Ie2XBDFHlHlUSTRHfghqfEbaISt4mh5LafEflFI/KLqYTfcyK/6ER+sSy7IQo4IAb0mNBjGW6ILe84kriSeA7c8IK4TRziNvGV3PZLIr+4RH4JlPB7ReQXj8gvoWU3xAYHxIeeAHpCww2J5J1YkkTi6cANr4nbJCZuk1TJbb8h8ktC5JdMCb+3RH6eRH7JLbshETggKfRk0JMbbkghby+Jt8THgRveEbfxIm6TUsltvyfy8ybyS6WE3wciPx8iv9SW3ZACHJASeiroqQ03pJF3Wkk6ia8DN3wkbpOWuI2fktv+ROSXjsjPXwm/z0R+vkR+AZbdkAYc4AfdH3qA4YZAeQdJgiUhDtzwhbhNEHGbUCW3/ZXIL5jIL70Sft+I/EKI/DJYdkMgOCAUenroGQw3ZJR3JklmSRYHbvhO3CYTcZusSm77B5FfZiK/bEr4/STyy0Lkl92yGzKCA7JCzwY9u+GGHPLOKcklye3ADb+I2+QkbpNHyW3/JvLLReSXVwm/P0R+uYn88ll2Qw5wQB7oeaHnM9yQX94FJAUlhRy44S9xmwLEbQorue0wjXi/VZDIr4gSfmGJ/AoR+RW17Ib84IDC0ItAL2q4oZi8i0tKSEo6cIMHcZvixG1KKbntcER+JYj8SivhF57IrySRXxnLbigGDigFvTT0MoYbysq7nKS8pIIDN0QgblOOuE1FJbcdkcivPJFfJSX8IhH5VSDyq2zZDWXBARWhV4Je2XBDFXlXlVSTVHfghsjEbaoSt6mh5LajEPlVI/KrqYRfVCK/6kR+tSy7oQo4oAb0mtBrGW6oLe86krqSeg7cEI24TR3iNvWV3HZ0Ir+6RH4NlPCLQeRXj8ivoWU31AYH1IfeAHpDww2N5N1Y0kTS1IEbYhK3aUzcppmS245F5NeEyK+5En6xifyaEvm1sOyGRuCAZtCbQ29huKGlvFtJWkvaOHBDHOI2rYjbtFVy23GJ/FoT+bVTwi8ekV8bIr/2lt3QEhzQFno76O0NN3SQd0dJJ0lnB26IT9ymI3GbLkpuOwGRXyciv65K+CUk8utM5NfNshs6gAO6QO8KvZvhhu7y7iHpKenlwA2JiNv0IG7TW8ltJyby60nk10cJvyREfr2I/PpadkN3cEBv6H2g9zXc0E/e/SUDJAMduMGTuE1/4jaDlNx2UiK/AUR+g5XwS0bkN5DIb4hlN/QDBwyCPhj6EMMNQ+U9TDJcMsKBG5ITtxlG3GakkttOQeQ3nMhvlBJ+XkR+I4j8Rlt2w1BwwEjoo6CPNtwwRt5jJeMk4x24wZu4zVjiNhOU3LYPkd84Ir+JSvilJPIbT+Q3ybIbxoADJkCfCH2S4YbJ8p4imSqZ5sANqYjbTCFuM13Jbacm8ptK5DdDCb80RH7TiPxmWnbDZHDAdOgzoM803DBL3rMlcyRzHbghLXGb2cRt5im57XREfnOI/OYr4edL5DeXyG+BZTfMAgfMgz4f+gLDDQvlvUiyWLLEgRv8iNssIm6zVMlt+xP5LSbyW6aEXwCR3xIiv+WW3bAQHLAU+jLoyw03rJD3SskqyWoHbggkbrOSuM0aJbcdROS3ishvrRJ+wUR+q4n81ll2wwpwwBroa6GvM9ywXt4bJBslmxy4IYS4zQbiNpuV3HYokd9GIr8tSvilJ/LbROS31bIb1oMDNkPfAn2r4YZt8t4u2SHZ6cANGYjbbCdus0vJbWck8ttB5LdbCb9MRH47ifz2WHbDNnDALui7oe8x3LBX3vsk+yUHHLghM3GbfcRtDiq57SxEfvuJ/A4p4ZeVyO8Akd9hy27YCw44CP0Q9MOGG47I+6jkmOS4AzdkI25zlLjNCSW3nZ3I7xiR30kl/HIQ+R0n8jtl2Q1HwAEnoJ+Efspww2l5n5GclZxz4IacxG3OELc5r+S2cxH5nSXyu6CEX24iv3NEfhctu+E0OOA89AvQLxpuuCTvy5IrkqsO3JCHuM1l4jbXlNx2XiK/K0R+15Xwy0fkd5XI74ZlN1wCB1yDfh36DcMNN+V9S3JbcseBG/ITt7lF3OauktsuQOR3m8jvnhJ+BYn87hD53bfshpvggLvQ70G/b7jhgbwfSh5JHjtwQyHiNg+J2zxRctuFifweEfk9VcKvCJHfYyK/Z5bd8AAc8AT6U+jPDDc8l/cLyUvJKwduKErc5gVxm9dKbrsYkd9LIr83SvgVJ/J7ReT31rIbnoMDXkN/A/2t4YZ38n4v+SD56MANJYjbvCdu80nJbZck8vtA5PdZCb9SRH4fify+WHbDO3DAJ+ifoX8x3PBV3t8k3yU/HLihNHGbb8Rtfiq57TJEft+J/H4p4VeWyO8Hkd9vy274Cg74Cf0X9N+GG/7I+68kjKdHmLCe9t1QjrjNX+I2Hp46brs8kV8YTx6/cEr4VSDyC0vkF97Trhv+gAP+3fr/ejjo4T3/64YI8o4oiSSJ7MANFYnbRCRuE0XJbVci8otE5BdVCb/KRH6RifyiWXZDBHBAFOhRoUcz3BBd3jEkMSWxHLihCnGbGMRtYiu57apEfjGJ/OIo4VeNyC8WkV9cy26IDg6IDT0O9LiGG+LJO74kgSShAzdUJ24Tn7hNIiW3XYPILwGRX2Il/GoS+SUk8kti2Q3xwAGJoCeGnsRwg6e8k0qSSZI7cEMt4jZJidukUHLbtYn8khH5eSnhV4fILzmRn7dlN3iCA1JA94LubbjBR94pJakkqR24oS5xm5TEbdIoue16RH6piPzSKuFXn8gvNZFfOstu8AEHpIGeFno6ww2+8vaT+EsCHLihAXEbP+I2gUpuuyGRnz+RX5ASfo2I/AKI/IItu8EXHBAIPQh6sOGGEHmHStJLMjhwQ2PiNqHEbTIque0mRH7pifwyKeHXlMgvA5FfZstuCAEHZISeCXpmww1Z5J1Vkk2S3YEbmhG3yUrcJoeS225O5JeNyC+nEn4tiPyyE/nlsuyGLOCAHNBzQs9luCG3vPNI8v77NgduaEncJg9xm/xKbrsVkV9eIr8CSvi1JvLLR+RX0LIbcoMD8kMvAL2g4YZC8i4sKSIp6sANbYjbFCZuU0zJbbcl8itC5FdcCb92RH5FifxKWHZDIXBAMejFoZcw3FBS3qUkpSVlHLihPXGbUsRtyiq57Q5EfqWJ/Mop4deRyK8MkV95y24oCQ4oC70c9PKGGyrIu6KkkqSyAzd0Im5TkbhNFSW33ZnIrxKRX1Ul/LoQ+VUm8qtm2Q0VwAFVoFeFXs1wQ3V515DUlNRy4IauxG1qELepreS2uxH51STyq6OEX3civ1pEfnUtu6E6OKA29DrQ6xpuqCfv+pIGkoYO3NCDuE194jaNlNx2TyK/BkR+jZXw60Xk15DIr4llN9QDBzSC3hh6E8MNTeXdTNJc0sKBG3oTt2lG3KalktvuQ+TXnMivlRJ+fYn8WhD5tbbshqbggJbQW0FvbbihjbzbStpJ2jtwQz/iNm2J23RQctv9ifzaEfl1VMJvAJFfeyK/Tpbd0AYc0AF6R+idDDd0lncXSVdJNwduGEjcpgtxm+5KbnsQkV9XIr8eSvgNJvLrRuTX07IbOoMDukPvAb2n4YZe8u4t6SPp68ANQ4jb9CZu00/JbQ8l8utD5NdfCb9hRH59ifwGWHZDL3BAP+j9oQ8w3DBQ3oMkgyVDHLhhOHGbQcRthiq57RFEfoOJ/IYp4TeSyG8Ikd9wy24YCA4YCn0Y9OGGG0bIe6RklGS0AzeMIm4zkrjNGCW3PZrIbxSR31gl/MYQ+Y0m8htn2Q0jwAFjoI+FPs5ww3h5T5BMlExy4IaxxG0mELeZrOS2xxH5TSTym6KE33giv0lEflMtu2E8OGAy9CnQpxpumCbv6ZIZkpkO3DCBuM104jazlNz2RCK/GUR+s5Xwm0TkN5PIb45lN0wDB8yCPhv6HMMNc+U9TzJfssCBGyYTt5lH3GahktueQuQ3n8hvkRJ+U4n8FhD5LbbshrnggIXQF0FfbLhhibyXSpZJljtwwzTiNkuJ26xQctvTifyWEfmtVMJvBpHfciK/VZbdsAQcsAL6SuirDDeslvcayVrJOgdumEncZg1xm/VKbnsWkd9aIr8NSvjNJvJbR+S30bIbVoMD1kPfAH2j4YZN8t4s2SLZ6sANc4jbbCZus03Jbc8l8ttC5LddCb95RH5bifx2WHbDJnDANujboe8w3LBT3rskuyV7HLhhPnGbXcRt9iq57QVEfruJ/PYp4beQyG8Pkd9+y27YCQ7YC30f9P2GGw7I+6DkkOSwAzcsIm5zkLjNESW3vZjI7xCR31El/JYQ+R0m8jtm2Q0HwAFHoB+Ffsxww3F5n5CclJxy4IalxG1OELc5reS2lxH5nSTyO6OE33Iiv1NEfmctu+E4OOA09DPQzxpuOCfv85ILkosO3LCCuM154jaXlNz2SiK/C0R+l5XwW0Xkd5HI74plN5wDB1yCfhn6FcMNV+V9TXJdcsOBG1YTt7lG3OamktteQ+R3ncjvlhJ+a4n8bhD53bbshqvggJvQb0G/bbjhjrzvSu5J7jtwwzriNneJ2zxQctvrifzuEfk9VMJvA5HffSK/R5bdcAcc8AD6Q+iPDDc8lvcTyVPJMwdu2Ejc5glxm+dKbnsTkd9TIr8XSvhtJvJ7RuT30rIbHoMDnkN/Af2l4YZX8n4teSN568ANW4jbvCZu807JbW8l8ntD5PdeCb9tRH5vifw+WHbDK3DAO+jvoX8w3PBR3p8knyVfHLhhO3GbT8Rtviq57R1Efp+J/L4p4beTyO8Lkd93y274CA74Cv0b9O+GG37I+6fkl+S3AzfsIm7zk7jNHyW3vZvI7xeR318l/PYQ+f0m8guT1K4bfoAD/kD/C/3fN6AbwsrbQxJOEj6pfTfsJW7jkZS3TYSkOm57H5FfOCK/iEr47SfyC0/kF8myG8Im/X8HRIAeEXokww2R5R1FElUSzYEbDhC3iULcJrqS2z5I5BeVyC+GEn6HiPyiEfnFtOyGyOCA6NBjQI9puCGWvGNL4kjiOnDDYeI2sYnbxFNy20eI/OIQ+cVXwu8okV9cIr8Elt0QCxwQD3p86AkMNySUdyJJYkkSB244RtwmEXEbTyW3fZzILzGRX1Il/E4Q+SUh8ktm2Q0JwQGe0JNCT2a4Ibm8U0i8JN4O3HCSuE0K4jY+Sm77FJGfF5FfSiX8ThP5eRP5pbLshuTgAB/oKaGnMtyQWt5pJGkl6Ry44QxxmzTEbXyV3PZZIr+0RH5+SvidI/JLR+Tnb9kNqcEBvtD9oPsbbgiQd6AkSBLswA3nidsEErcJUXLbF4j8goj8QpXwu0jkF0zkl96yGwLAASHQQ6GnN9yQQd4ZJZkkmR244RJxm4zEbbIoue3LRH6ZiPyyKuF3hcgvM5FfNstuyAAOyAI9K/RshhuyyzuHJKcklwM3XCVuk4O4TW4lt32NyC8nkV8eJfyuE/nlIvLLa9kN2cEBuaHngZ7XcEM+eeeXFJAUdOCGG8Rt8hO3KaTktm8S+RUg8iushN8tIr+CRH5FLLshHzigEPTC0IsYbigq72KS4pISDtxwm7hNMeI2JZXc9h0iv+JEfqWU8LtL5FeCyK+0ZTcUBQeUhF4KemnDDWXkXVZSTlLegRvuEbcpS9ymgpLbvk/kV47Ir6ISfg+I/MoT+VWy7IYy4IAK0CtCr2S4obK8q0iqSqo5cMND4jZViNtUV3Lbj4j8qhL51VDC7zGRXzUiv5qW3VAZHFAdeg3oNQ031JJ3bUkdSV0HbnhC3KY2cZt6Sm77KZFfHSK/+kr4PSPyq0vk18CyG2qBA+pBrw+9geGGhvJuJGksaeLADc+J2zQibtNUyW2/IPJrTOTXTAm/l0R+TYj8mlt2Q0NwQFPozaA3N9zQQt4tJa0krR244RVxm5bEbdooue3XRH6tiPzaKuH3hsivNZFfO8tuaAEOaAO9LfR2hhvay7uDpKOkkwM3vCVu04G4TWclt/2OyK8jkV8XJfzeE/l1IvLratkN7cEBnaF3gd7VcEM3eXeX9JD0dOCGD8RtuhO36aXktj8S+fUg8uuthN8nIr+eRH59LLuhGzigF/Te0PsYbugr736S/pIBDtzwmbhNP+I2A5Xc9hciv/5EfoOU8PtK5DeAyG+wZTf0BQcMhD4I+mDDDUPkPVQyTDLcgRu+EbcZStxmhJLb/k7kN4zIb6QSfj+I/IYT+Y2y7IYh4IAR0EdCH2W4YbS8x0jGSsY5cMNP4jZjiNuMV3Lbv4j8xhL5TVDC7zeR3zgiv4mW3TAaHDAe+gToEw03TJL3ZMkUyVQHbvhD3GYycZtpSm77L5HfFCK/6Ur4hWnM+62pRH4zLLthEjhgGvTp0GcYbpgp71mS2ZI5DtwQlrjNLOI2c5XctgeR32wiv3lK+IUj8ptD5DffshtmggPmQp8Hfb7hhgXyXihZJFnswA3hidssJG6zRMltRyDyW0Tkt1QJv4hEfouJ/JZZdsMCcMAS6EuhLzPcsFzeKyQrJascuCEScZsVxG1WK7ntyER+K4n81ijhF4XIbxWR31rLblgODlgNfQ30tYYb1sl7vWSDZKMDN0QlbrOeuM0mJbcdjchvA5HfZiX8ohP5bSTy22LZDevAAZugb4a+xXDDVnlvk2yX7HDghhjEbbYRt9mp5LZjEvltJ/LbpYRfLCK/HUR+uy27YSs4YCf0XdB3G27YI++9kn2S/Q7cEJu4zV7iNgeU3HYcIr99RH4HlfCLS+S3n8jvkGU37AEHHIB+EPohww2H5X1EclRyzIEb4hG3OULc5riS245P5HeUyO+EEn4JiPyOEfmdtOyGw+CA49BPQD9puOGUvE9LzkjOOnBDQuI2p4nbnFNy24mI/M4Q+Z1Xwi8xkd9ZIr8Llt1wChxwDvp56BcMN1yU9yXJZckVB25IQtzmEnGbq0pu25PI7zKR3zUl/JIS+V0h8rtu2Q0XwQFXoV+Dft1www1535Tcktx24IZkxG1uEre5o+S2kxP53SLyu6uEXwoiv9tEfvcsu+EGOOAO9LvQ7xluuC/vB5KHkkcO3OBF3OYBcZvHSm7bm8jvIZHfEyX8fIj8HhH5PbXshvvggMfQn0B/arjhmbyfS15IXjpwQ0riNs+J27xSctupiPxeEPm9VsIvNZHfSyK/N5bd8Awc8Ar6a+hvDDe8lfc7yXvJBwduSEPc5h1xm49Kbjstkd97Ir9PSvilI/L7QOT32bIb3oIDPkL/BP2z4YYv8v4q+Sb57sANvsRtvhK3+aHktv2I/L4R+f1Uws+fyO87kd8vy274Ag74Af0n9F+GG37/e0v+SsIks++GAOI2f4jbhE2m47YDifz+Evl5KOEXROQXJhmPX7hkdt3wGxzw79b/1z2gh0v2XzeEl3cESURJJAduCCZuE4G4TWQltx1C5BeRyC+KEn6hRH6RiPyiWnZDeHBAZOhRoEc13BBN3tElMSQxHbghPXGb6MRtYim57QxEfjGI/GIr4ZeRyC8mkV8cy26IBg6IBT029DiGG+LKO54kviSBAzdkIm4Tj7hNQiW3nZnILz6RXyIl/LIQ+SUg8kts2Q1xwQEJoSeCnthwQxJ5e0qSSpI5cENW4jaexG2SK7ntbER+SYn8Uijhl53ILxmRn5dlNyQBBySHngK6l+EGb3n7SFJKUjlwQw7iNj7EbVIrue2cRH4pifzSKOGXi8gvFZFfWstu8AYHpIaeBnpaww3p5O0r8ZP4O3BDbuI2vsRtApTcdh4iPz8iv0Al/PIS+fkT+QVZdkM6cEAA9EDoQYYbguUdIgmVpHfghnzEbUKI22RQctv5ifxCifwyKuFXgMgvPZFfJstuCAYHZICeEXomww2Z5Z1FklWSzYEbChK3yULcJruS2y5E5JeVyC+HEn6FifyyEfnltOyGzOCA7NBzQM9puCGXvHNL8kjyOnBDEeI2uYnb5FNy20WJ/PIQ+eVXwq8YkV9eIr8Clt2QCxyQD3p+6AUMNxSUdyFJYUkRB24oTtymEHGbokpuuwSRX2Eiv2JK+JUk8itC5FfcshsKggOKQi8GvbjhhhLyLikpJSntwA2liNuUJG5TRsltlybyK0XkV1YJvzJEfqWJ/MpZdkMJcEAZ6GWhlzPcUF7eFSQVJZUcuKEscZsKxG0qK7ntckR+FYn8qijhV57IrxKRX1XLbigPDqgMvQr0qoYbqsm7uqSGpKYDN1QgblOduE0tJbddkcivBpFfbSX8KhH51STyq2PZDdXAAbWg14Zex3BDXXnXk9SXNHDghsrEbeoRt2mo5LarEPnVJ/JrpIRfVSK/BkR+jS27oS44oCH0RtAbG25oIu+mkmaS5g7cUI24TVPiNi2U3HZ1Ir9mRH4tlfCrQeTXnMivlWU3NAEHtIDeEnorww2t5d1G0lbSzoEbahK3aUPcpr2S265F5NeWyK+DEn61ifzaEfl1tOyG1uCA9tA7QO9ouKGTvDtLuki6OnBDHeI2nYnbdFNy23WJ/LoQ+XVXwq8ekV9XIr8elt3QCRzQDXp36D0MN/SUdy9Jb0kfB26oT9ymF3GbvkpuuwGRX28iv35K+DUk8utD5Nffsht6ggP6Qu8Hvb/hhgHyHigZJBnswA2NiNsMJG4zRMltNybyG0TkN1QJvyZEfoOJ/IZZdsMAcMAQ6EOhDzPcMFzeIyQjJaMcuKEpcZsRxG1GK7ntZkR+I4n8xijh15zIbxSR31jLbhgODhgNfQz0sYYbxsl7vGSCZKIDN7QgbjOeuM0kJbfdkshvApHfZCX8WhH5TSTym2LZDePAAZOgT4Y+xXDDVHlPk0yXzHDghtbEbaYRt5mp5LbbEPlNJ/KbpYRfWyK/GUR+sy27YSo4YCb0WdBnG26YI++5knmS+Q7c0I64zVziNguU3HZ7Ir95RH4LlfDrQOQ3n8hvkWU3zAEHLIC+EPoiww2L5b1EslSyzIEbOhK3WULcZrmS2+5E5LeUyG+FEn6difyWEfmttOyGxeCA5dBXQF9puGGVvFdL1kjWOnBDF+I2q4nbrFNy212J/NYQ+a1Xwq8bkd9aIr8Nlt2wChywDvp66BsMN2yU9ybJZskWB27oTtxmE3GbrUpuuweR32Yiv21K+PUk8ttC5Lfdshs2ggO2Qt8Gfbvhhh3y3inZJdntwA29iNvsJG6zR8lt9yby20Xkt1cJvz5EfruJ/PZZdsMOcMAe6Huh7zPcsF/eByQHJYccuKEvcZsDxG0OK7ntfkR+B4n8jijh15/I7xCR31HLbtgPDjgM/Qj0o4Ybjsn7uOSE5KQDNwwgbnOcuM0pJbc9kMjvBJHfaSX8BhH5nSTyO2PZDcfAAaegn4Z+xnDDWXmfk5yXXHDghsHEbc4Rt7mo5LaHEPmdJ/K7pITfUCK/C0R+ly274Sw44CL0S9AvG264Iu+rkmuS6w7cMIy4zVXiNjeU3PZwIr9rRH43lfAbQeR3ncjvlmU3XAEH3IB+E/otww235X1Hcldyz4EbRhK3uUPc5r6S2x5F5HeXyO+BEn6jifzuEfk9tOyG2+CA+9AfQH9ouOGRvB9LnkieOnDDGOI2j4nbPFNy22OJ/J4Q+T1Xwm8ckd9TIr8Xlt3wCBzwDPpz6C8MN7yU9yvJa8kbB24YT9zmFXGbt0puewKR32siv3dK+E0k8ntD5PfeshteggPeQn8H/b3hhg/y/ij5JPnswA2TiNt8JG7zRcltTyby+0Tk91UJvylEfp+J/L5ZdsMHcMAX6F+hfzPc8F3ePyQ/Jb8cuGEqcZsfxG1+K7ntaUR+P4n8/ijhN53I7xeR31/LbvgODvgN/Q/0v4YbwiT3CBNW4iEJl9y+G2YQt/n33axtwifXcdszifw8iPwiKOE3i8gvHJFfxOR23fDv3/n/HBAeegToEZP/1w2R5B1ZEkUS1YEbZhO3iUzcJpqS255D5BeFyC+6En5zifyiEvnFsOyGSOCAaNCjQ49huCGmvGNJYkviOHDDPOI2sYjbxFVy2/OJ/GIT+cVTwm8BkV8cIr/4lt0QExwQF3o86PENNySQd0JJIkliB25YSNwmIXGbJEpuexGRXyIiP08l/BYT+SUm8ktq2Q0JwAFJoHtCT2q4IZm8k0tSSLwcuGEJcZvkxG28ldz2UiK/FER+Pkr4LSPy8yLyS2nZDcnAAd7QfaCnNNyQSt6pJWkkaR24YTlxm9TEbdIpue0VRH5piPx8lfBbSeSXlsjPz7IbUoED0kH3he5nuMFf3gGSQEmQAzesIm4TQNwmWMltrybyCyTyC1HCbw2RXxCRX6hlN/iDA4Khh0APNdyQXt4ZJBklmRy4YS1xmwzEbTIrue11RH4ZifyyKOG3nsgvE5FfVstuSA8OyAw9C/SshhuyyTu7JIckpwM3bCBuk524TS4lt72RyC8HkV9uJfw2EfnlJPLLY9kN2cABuaDnhp7HcEPef98kyS8p4MANm4nb5CNuU1DJbW8h8stP5FdICb+tRH4FiPwKW3ZDXnBAQeiFoBc23FBE3kUlxSTFHbhhG3GbosRtSii57e1EfsWI/Eoq4beDyK84kV8py24oAg4oAb0k9FKGG0rLu4ykrKScAzfsJG5ThrhNeSW3vYvIryyRXwUl/HYT+ZUj8qto2Q2lwQHloVeAXtFwQyV5V5ZUkVR14IY9xG0qE7eppuS29xL5VSHyq66E3z4iv6pEfjUsu6ESOKAa9OrQaxhuqCnvWpLakjoO3LCfuE0t4jZ1ldz2ASK/2kR+9ZTwO0jkV4fIr75lN9QEB9SFXg96fcMNDeTdUNJI0tiBGw4Rt2lI3KaJkts+TOTXiMivqRJ+R4j8GhP5NbPshgbggCbQm0JvZrihubxbSFpKWjlww1HiNi2I27RWctvHiPxaEvm1UcLvOJFfKyK/tpbd0Bwc0Bp6G+htDTe0k3d7SQdJRwduOEHcpj1xm05KbvskkV8HIr/OSvidIvLrSOTXxbIb2oEDOkHvDL2L4Yau8u4m6S7p4cANp4nbdCNu01PJbZ8h8utO5NdLCb+zRH49iPx6W3ZDV3BAT+i9oPc23NBH3n0l/ST9HbjhHHGbvsRtBii57fNEfv2I/AYq4XeByK8/kd8gy27oAw4YAH0g9EGGGwbLe4hkqGSYAzdcJG4zhLjNcCW3fYnIbyiR3wgl/C4T+Q0j8htp2Q2DwQHDoY+APtJwwyh5j5aMkYx14IYrxG1GE7cZp+S2rxL5jSHyG6+E3zUiv7FEfhMsu2EUOGAc9PHQJxhumCjvSZLJkikO3HCduM0k4jZTldz2DSK/yUR+05Twu0nkN4XIb7plN0wEB0yFPg36dMMNM+Q9UzJLMtuBG24Rt5lJ3GaOktu+TeQ3i8hvrhJ+d4j8ZhP5zbPshhnggDnQ50KfZ7hhvrwXSBZKFjlww13iNguI2yxWctv3iPwWEvktUcLvPpHfIiK/pZbdMB8csBj6EuhLDTcsk/dyyQrJSgdueEDcZjlxm1VKbvshkd8KIr/VSvg9IvJbSeS3xrIbloEDVkFfDX2N4Ya18l4nWS/Z4MANj4nbrCNus1HJbT8h8ltP5LdJCb+nRH4biPw2W3bDWnDARuiboG823LBF3lsl2yTbHbjhGXGbrcRtdii57edEftuI/HYq4feCyG87kd8uy27YAg7YAX0n9F2GG3bLe49kr2SfAze8JG6zh7jNfiW3/YrIby+R3wEl/F4T+e0j8jto2Q27wQH7oR+AftBwwyF5H5YckRx14IY3xG0OE7c5puS23xL5HSHyO66E3zsiv6NEficsu+EQOOAY9OPQTxhuOCnvU5LTkjMO3PCeuM0p4jZnldz2ByK/00R+55Tw+0jkd4bI77xlN5wEB5yFfg76ecMNF+R9UXJJctmBGz4Rt7lI3OaKktv+TOR3icjvqhJ+X4j8LhP5XbPshgvggCvQr0K/ZrjhurxvSG5Kbjlww1fiNjeI29xWctvfiPxuEvndUcLvO5HfLSK/u5bdcB0ccBv6Heh3DTfck/d9yQPJQwdu+EHc5j5xm0dKbvsnkd8DIr/HSvj9IvJ7SOT3xLIb7oEDHkF/DP2J4Yan8n4meS554cANv4nbPCNu81LJbf8h8ntO5PdKCb+/RH4viPxeW3bDU3DAS+ivoL823PBG3m8l7yTvHbghTBPi/9kTt/mg5LbDEvm9I/L7qISfB5HfeyK/T5bd8AYc8AH6R+ifDDd8lvcXyVfJNwduCEfc5gtxm+9Kbjs8kd9XIr8fSvhFIPL7RuT307IbPoMDvkP/Af2n4YZf8v7972+Svw7cEJG4zW/iNmFS6LjtSER+f4j8wirhF5nI7y+Rn0cKu274BQ74d+v/62Ghe6T4rxvCyTu8JIIkYgr7bohC3CZ8Ct42kZTcdlQivwhEfpGV8ItG5BeRyC+KZTeEAwdEgh4ZehTDDVHlHU0SXRLDgRuiE7eJRtwmppLbjkHkF53IL5YSfjGJ/GIQ+cW27Iao4ICY0GNBj224IY6840riSeI7cEMs4jZxidskUHLbsYn84hH5JVTCLw6RX3wiv0SW3RAHHJAAekLoiQw3JJZ3EomnJKkDN8QlbpOEuE0yJbcdj8jPk8gvuRJ+8Yn8khL5pbDshsTggGTQk0NPYbjBS97eEh9JSgduSEDcxpu4TSolt52QyM+HyC+1En6JiPxSEvmlsewGL3BAKuipoacx3JBW3ukkvhI/B25ITNwmHXEbfyW3nYTIz5fIL0AJP08iPz8iv0DLbkgLDvCHHgA90HBDkLyDJSGSUAduSErcJpi4TXolt52MyC+EyC+DEn7JifxCifwyWnZDEDggPfQM0DMabsgk78ySLJKsDtyQgrhNZuI22ZTctheRXxYiv+xK+HkT+WUl8sth2Q2ZwAHZoGeHnsNwQ05555LkluRx4AYf4ja5iNvkVXLbKYn8chP55VPCLxWRXx4iv/yW3ZATHJAXej7o+Q03FJB3QUkhSWEHbkhN3KYgcZsiSm47DZFfISK/okr4pSXyK0zkV8yyGwqAA4pALwq9mOGG4vIuISkpKeXADemI25QgblNayW37EvmVJPIro4SfH5FfKSK/spbdUBwcUBp6GehlDTeUk3d5SQVJRQdu8CduU564TSUltx1A5FeByK+yEn6BRH4VifyqWHZDOXBAJeiVoVcx3FBV3tUk1SU1HLghiLhNNeI2NZXcdjCRX3Uiv1pK+IUQ+dUg8qtt2Q1VwQE1odeCXttwQx1515XUk9R34IZQ4jZ1ids0UHLb6Yn86hH5NVTCLwORX30iv0aW3VAHHNAAekPojQw3NJZ3E0lTSTMHbshI3KYJcZvmSm47E5FfUyK/Fkr4ZSbya0bk19KyGxqDA5pDbwG9peGGVvJuLWkjaevADVmI27QmbtNOyW1nJfJrQ+TXXgm/bER+bYn8Olh2QytwQDvo7aF3MNzQUd6dJJ0lXRy4ITtxm07Ebboque0cRH6dify6KeGXk8ivC5Ffd8tu6AgO6Aq9G/Tuhht6yLunpJektwM35CJu05O4TR8lt52byK8XkV9fJfzyEPn1JvLrZ9kNPcABfaD3hd7PcEN/eQ+QDJQMcuCGvMRtBhC3GazktvMR+Q0k8huihF9+Ir9BRH5DLbuhPzhgMPQh0Icabhgm7+GSEZKRDtxQgLjNcOI2o5TcdkEivxFEfqOV8CtE5DeSyG+MZTcMAweMgj4a+hjDDWPlPU4yXjLBgRsKE7cZR9xmopLbLkLkN57Ib5ISfkWJ/CYQ+U227Iax4ICJ0CdBn2y4YYq8p0qmSaY7cEMx4jZTidvMUHLbxYn8phH5zVTCrwSR33Qiv1mW3TAFHDAD+kzosww3zJb3HMlcyTwHbihJ3GYOcZv5Sm67FJHfXCK/BUr4lSbym0fkt9CyG2aDA+ZDXwB9oeGGRfJeLFkiWerADWWI2ywmbrNMyW2XJfJbQuS3XAm/ckR+S4n8Vlh2wyJwwDLoy6GvMNywUt6rJKslaxy4oTxxm1XEbdYque0KRH6rifzWKeFXkchvDZHfestuWAkOWAt9HfT1hhs2yHujZJNkswM3VCJus5G4zRYlt12ZyG8Tkd9WJfyqEPltJvLbZtkNG8ABW6Bvhb7NcMN2ee+Q7JTscuCGqsRtdhC32a3ktqsR+e0k8tujhF91Ir9dRH57LbthOzhgN/Q90Pcabtgn7/2SA5KDDtxQg7jNfuI2h5Tcdk0ivwNEfoeV8KtF5HeQyO+IZTfsAwccgn4Y+hHDDUflfUxyXHLCgRtqE7c5RtzmpJLbrkPkd5zI75QSfnWJ/E4Q+Z227Iaj4ICT0E9BP2244Yy8z0rOSc47cEM94jZnidtcUHLb9Yn8zhH5XVTCrwGR33kiv0uW3XAGHHAB+kXolww3XJb3FclVyTUHbmhI3OYKcZvrSm67EZHfVSK/G0r4NSbyu0bkd9OyGy6DA65DvwH9puGGW/K+LbkjuevADU2I29wmbnNPyW03JfK7Q+R3Xwm/ZkR+d4n8Hlh2wy1wwD3o96E/MNzwUN6PJI8lTxy4oTlxm0fEbZ4que0WRH6PifyeKeHXksjvCZHfc8tueAgOeAr9GfTnhhteyPul5JXktQM3tCJu85K4zRslt92ayO8Vkd9bJfzaEPm9JvJ7Z9kNL8ABb6C/hf7OcMN7eX+QfJR8cuCGtsRtPhC3+azkttsR+X0k8vuihF97Ir9PRH5fLbvhPTjgM/Qv0L8abvgm7++SH5KfDtzQgbjNd+I2v5Tcdkcivx9Efr+V8OtE5PeTyO+PZTd8Awf8gv4b+h/DDX/lHcbLI0xYiYeXfTd0Jm7z77tZ24Tz0nHbXYj8whL5hVfCryuRnweRXwQvu274Cw74d+v/6+GhR/D6rxsiyjuSJLIkigM3dCNuE4m4TVQlt92dyC8ykV80Jfx6EPlFIfKLbtkNEcEBUaFHgx7dcEMMeceUxJLEduCGnsRtYhK3iaPktnsR+cUi8ourhF9vIr/YRH7xLLshBjggDvS40OMZbogv7wSShJJEDtzQh7hNAuI2iZXcdl8iv4REfkmU8OtH5JeIyM/TshvigwMSQ08C3dNwQ1J5J5Mkl6Rw4Ib+xG2SEbfxUnLbA4j8khP5eSvhN5DILwWRn49lNyQFB3hB94buY7ghpbxTSVJL0jhwwyDiNqmI26RVctuDifxSE/mlU8JvCJFfGiI/X8tuSAkOSAs9HXRfww1+8vaXBEgCHbhhKHEbf+I2QUpuexiRXwCRX7ASfsOJ/AKJ/EIsu8EPHBAEPRh6iOGGUHmnl2SQZHTghhHEbdITt8mk5LZHEvllIPLLrITfKCK/jER+WSy7IRQckAl6ZuhZDDdklXc2SXZJDgduGE3cJhtxm5xKbnsMkV92Ir9cSviNJfLLQeSX27IbsoIDckLPBT234YY88s7777sk+R24YRxxm7zEbQooue3xRH75iPwKKuE3gcgvP5FfIctuyAMOKAC9IPRChhsKy7uIpKikmAM3TCRuU4S4TXEltz2JyK8okV8JJfwmE/kVI/IradkNhcEBxaGXgF7ScEMpeZeWlJGUdeCGKcRtShO3KafktqcS+ZUh8iuvhN80Ir+yRH4VLLuhFDigHPTy0CsYbqgo70qSypIqDtwwnbhNJeI2VZXc9gwiv8pEftWU8JtJ5FeFyK+6ZTdUBAdUhV4NenXDDTXkXVNSS1LbgRtmEbepSdymjpLbnk3kV4vIr64SfnOI/GoT+dWz7IYa4IA60OtCr2e4ob68G0gaSho5cMNc4jYNiNs0VnLb84j8GhL5NVHCbz6RXyMiv6aW3VAfHNAYehPoTQ03NJN3c0kLSUsHblhA3KY5cZtWSm57IZFfCyK/1kr4LSLya0nk18ayG5qBA1pBbw29jeGGtvJuJ2kv6eDADYuJ27QjbtNRyW0vIfJrT+TXSQm/pUR+HYj8Olt2Q1twQEfonaB3NtzQRd5dJd0k3R24YRlxm67EbXooue3lRH7diPx6KuG3gsivO5FfL8tu6AIO6AG9J/Rehht6y7uPpK+knwM3rCRu04e4TX8lt72KyK8vkd8AJfxWE/n1I/IbaNkNvcEB/aEPgD7QcMMgeQ+WDJEMdeCGNcRtBhO3GabkttcS+Q0h8huuhN86Ir+hRH4jLLthEDhgGPTh0EcYbhgp71GS0ZIxDtywnrjNKOI2Y5Xc9gYiv9FEfuOU8NtI5DeGyG+8ZTeMBAeMhT4O+njDDRPkPVEySTLZgRs2EbeZSNxmipLb3kzkN4nIb6oSfluI/CYT+U2z7IYJ4IAp0KdCn2a4Ybq8Z0hmSmY5cMNW4jYziNvMVnLb24j8ZhL5zVHCbzuR3ywiv7mW3TAdHDAb+hzocw03zJP3fMkCyUIHbthB3GY+cZtFSm57J5HfAiK/xUr47SLyW0jkt8SyG+aBAxZBXwx9ieGGpfJeJlkuWeHADbuJ2ywjbrNSyW3vIfJbTuS3Sgm/vUR+K4j8Vlt2w1JwwEroq6CvNtywRt5rJesk6x24YR9xm7XEbTYoue39RH7riPw2KuF3gMhvPZHfJstuWAMO2AB9I/RNhhs2y3uLZKtkmwM3HCRus4W4zXYlt32IyG8rkd8OJfwOE/ltI/LbadkNm8EB26HvgL7TcMMuee+W7JHsdeCGI8RtdhO32afkto8S+e0h8tuvhN8xIr+9RH4HLLthFzhgH/T90A8Ybjgo70OSw5IjDtxwnLjNIeI2R5Xc9gkiv8NEfseU8DtJ5HeEyO+4ZTccBAcchX4M+nHDDSfkfVJySnLagRtOEbc5SdzmjJLbPk3kd4rI76wSfmeI/E4T+Z2z7IYT4IAz0M9CP2e44by8L0guSi45cMNZ4jYXiNtcVnLb54j8LhL5XVHC7zyR3yUiv6uW3XAeHHAZ+hXoVw03XJP3dckNyU0HbrhA3OY6cZtbSm77IpHfDSK/20r4XSLyu0nkd8eyG66BA25Bvw39juGGu/K+J7kveeDADZeJ29wjbvNQyW1fIfK7T+T3SAm/q0R+D4j8Hlt2w11wwEPoj6A/NtzwRN5PJc8kzx244Rpxm6fEbV4oue3rRH7PiPxeKuF3g8jvOZHfK8tueAIOeAH9JfRXhhtey/uN5K3knQM33CRu84a4zXslt32LyO8tkd8HJfxuE/m9I/L7aNkNr8EB76F/gP7RcMMneX+WfJF8deCGO8RtPhO3+abktu8S+X0h8vuuhN89Ir+vRH4/LLvhEzjgG/Tv0H8Ybvgp71+S3//+7sAN94nb/CJu81fJbT8g8vtN5BfGWwe/h0R+f4j8wnrbdcNPcMBf6P92+18P6/1fN3jIO5wkvCSCt303PCJuE86bt01EJbf9mMgvPJFfJCX8nhD5RSDyi2zZDR7ggIjQI0GPbLghiryjSqJJojtww1PiNlGJ28RQctvPiPyiEfnFVMLvOZFfdCK/WJbdEAUcEAN6TOixDDfElnccSVxJPAdueEHcJg5xm/hKbvslkV9cIr8ESvi9IvKLR+SX0LIbYoMD4kNPAD2h4YZE8k4sSSLxdOCG18RtEhO3Sarktt8Q+SUh8kumhN9bIj9PIr/klt2QCByQFHoy6MkNN6SQt5fEW+LjwA3viNt4EbdJqeS23xP5eRP5pVLC7wORnw+RX2rLbkgBDkgJPRX01IYb0sg7rSSdxNeBGz4St0lL3MZPyW1/IvJLR+Tnr4TfZyI/XyK/AMtuSAMO8IPuDz3AcEOgvIMkwZIQB274QtwmiLhNqJLb/krkF0zkl14Jv29EfiFEfhksuyEQHBAKPT30DIYbMso7kySzJIsDN3wnbpOJuE1WJbf9g8gvM5FfNiX8fhL5ZSHyy27ZDRnBAVmhZ4Oe3XBDDnnnlOSS5Hbghl/EbXISt8mj5LZ/E/nlIvLLq4TfHyK/3ER++Sy7IQc4IA/0vNDzGW7IL+8CkoKSQg7c8Je4TQHiNoWV3HaYprzfKkjkV0QJv7BEfoWI/IpadkN+cEBh6EWgFzXcUEzexSUlJCUduMGDuE1x4jallNx2OCK/EkR+pZXwC0/kV5LIr4xlNxQDB5SCXhp6GcMNZeVdTlJeUsGBGyIQtylH3KaiktuOSORXnsivkhJ+kYj8KhD5VbbshrLggIrQK0GvbLihiryrSqpJqjtwQ2TiNlWJ29RQcttRiPyqEfnVVMIvKpFfdSK/WpbdUAUcUAN6Tei1DDfUlncdSV1JPQduiEbcpg5xm/pKbjs6kV9dIr8GSvjFIPKrR+TX0LIbaoMD6kNvAL2h4YZG8m4saSJp6sANMYnbNCZu00zJbcci8mtC5NdcCb/YRH5NifxaWHZDI3BAM+jNobcw3NBS3q0krSVtHLghDnGbVsRt2iq57bhEfq2J/Nop4RePyK8NkV97y25oCQ5oC70d9PaGGzrIu6Okk6SzAzfEJ27TkbhNFyW3nYDIrxORX1cl/BIS+XUm8utm2Q0dwAFdoHeF3s1wQ3d595D0lPRy4IZExG16ELfpreS2ExP59STy66OEXxIiv15Efn0tu6E7OKA39D7Q+xpu6Cfv/pIBkoEO3OBJ3KY/cZtBSm47KZHfACK/wUr4JSPyG0jkN8SyG/qBAwZBHwx9iOGGofIeJhkuGeHADcmJ2wwjbjNSyW2nIPIbTuQ3Sgk/LyK/EUR+oy27YSg4YCT0UdBHG24YI++xknGS8Q7c4E3cZixxmwlKbtuHyG8ckd9EJfxSEvmNJ/KbZNkNY8ABE6BPhD7JcMNkeU+RTJVMc+CGVMRtphC3ma7ktlMT+U0l8puhhF8aIr9pRH4zLbthMjhgOvQZ0Gcabpgl79mSOZK5DtyQlrjNbOI285TcdjoivzlEfvOV8PMl8ptL5LfAshtmgQPmQZ8PfYHhhoXyXiRZLFniwA1+xG0WEbdZquS2/Yn8FhP5LVPCL4DIbwmR33LLblgIDlgKfRn05YYbVsh7pWSVZLUDNwQSt1lJ3GaNktsOIvJbReS3Vgm/YCK/1UR+6yy7YQU4YA30tdDXGW5YL+8Nko2STQ7cEELcZgNxm81KbjuUyG8jkd8WJfzSE/ltIvLbatkN68EBm6Fvgb7VcMM2eW+X7JDsdOCGDMRtthO32aXktjMS+e0g8tuthF8mIr+dRH57LLthGzhgF/Td0PcYbtgr732S/ZIDDtyQmbjNPuI2B5XcdhYiv/1EfoeU8MtK5HeAyO+wZTfsBQcchH4I+mHDDUfkfVRyTHLcgRuyEbc5StzmhJLbzk7kd4zI76QSfjmI/I4T+Z2y7IYj4IAT0E9CP2W44bS8z0jOSs45cENO4jZniNucV3LbuYj8zhL5XVDCLzeR3zkiv4uW3XAaHHAe+gXoFw03XJL3ZckVyVUHbshD3OYycZtrSm47L5HfFSK/60r45SPyu0rkd8OyGy6BA65Bvw79huGGm/K+JbktuePADfmJ29wibnNXyW0XIPK7TeR3Twm/gkR+d4j87lt2w01wwF3o96DfN9zwQN4PJY8kjx24oRBxm4fEbZ4oue3CRH6PiPyeKuFXhMjvMZHfM8tueAAOeAL9KfRnhhuey/uF5KXklQM3FCVu84K4zWslt12MyO8lkd8bJfyKE/m9IvJ7a9kNz8EBr6G/gf7WcMM7eb+XfJB8dOCGEsRt3hO3+aTktksS+X0g8vushF8pIr+PRH5fLLvhHTjgE/TP0L8Ybvgq72+S75IfDtxQmrjNN+I2P5Xcdhkiv+9Efr+U8CtL5PeDyO+3ZTd8BQf8hP4L+m/DDX/k/VcSxscjTFgf+24oR9zmL3EbDx8dt12eyC+MD49fOCX8KhD5hSXyC+9j1w1/wAH/bv1/PRz08D7/dUMEeUeURJJEduCGisRtIhK3iaLktisR+UUi8ouqhF9lIr/IRH7RLLshAjggCvSo0KMZbogu7xiSmJJYDtxQhbhNDOI2sZXcdlUiv5hEfnGU8KtG5BeLyC+uZTdEBwfEhh4HelzDDfHkHV+SQJLQgRuqE7eJT9wmkZLbrkHkl4DIL7ESfjWJ/BIS+SWx7IZ44IBE0BNDT2K4wVPeSSXJJMkduKEWcZukxG1SKLnt2kR+yYj8vJTwq0Pkl5zIz9uyGzzBASmge0H3NtzgI++UklSS1A7cUJe4TUriNmmU3HY9Ir9URH5plfCrT+SXmsgvnWU3+IAD0kBPCz2d4QZfeftJ/CUBDtzQgLiNH3GbQCW33ZDIz5/IL0gJv0ZEfgFEfsGW3eALDgiEHgQ92HBDiLxDJeklGRy4oTFxm1DiNhmV3HYTIr/0RH6ZlPBrSuSXgcgvs2U3hIADMkLPBD2z4YYs8s4qySbJ7sANzYjbZCVuk0PJbTcn8stG5JdTCb8WRH7ZifxyWXZDFnBADug5oecy3JBb3nkkef99mwM3tCRuk4e4TX4lt92KyC8vkV8BJfxaE/nlI/IraNkNucEB+aEXgF7QcEMheReWFJEUdeCGNsRtChO3KabkttsS+RUh8iuuhF87Ir+iRH4lLLuhEDigGPTi0EsYbigp71KS0pIyDtzQnrhNKeI2ZZXcdgciv9JEfuWU8OtI5FeGyK+8ZTeUBAeUhV4OennDDRXkXVFSSVLZgRs6EbepSNymipLb7kzkV4nIr6oSfl2I/CoT+VWz7IYK4IAq0KtCr2a4obq8a0hqSmo5cENX4jY1iNvUVnLb3Yj8ahL51VHCrzuRXy0iv7qW3VAdHFAbeh3odQ031JN3fUkDSUMHbuhB3KY+cZtGSm67J5FfAyK/xkr49SLya0jk18SyG+qBAxpBbwy9ieGGpvJuJmkuaeHADb2J2zQjbtNSyW33IfJrTuTXSgm/vkR+LYj8Wlt2Q1NwQEvoraC3NtzQRt5tJe0k7R24oR9xm7bEbTooue3+RH7tiPw6KuE3gMivPZFfJ8tuaAMO6AC9I/ROhhs6y7uLpKukmwM3DCRu04W4TXcltz2IyK8rkV8PJfwGE/l1I/LradkNncEB3aH3gN7TcEMvefeW9JH0deCGIcRtehO36afktocS+fUh8uuvhN8wIr++RH4DLLuhFzigH/T+0AcYbhgo70GSwZIhDtwwnLjNIOI2Q5Xc9ggiv8FEfsOU8BtJ5DeEyG+4ZTcMBAcMhT4M+nDDDSPkPVIySjLagRtGEbcZSdxmjJLbHk3kN4rIb6wSfmOI/EYT+Y2z7IYR4IAx0MdCH2e4Yby8J0gmSiY5cMNY4jYTiNtMVnLb44j8JhL5TVHCbzyR3yQiv6mW3TAeHDAZ+hToUw03TJP3dMkMyUwHbphA3GY6cZtZSm57IpHfDCK/2Ur4TSLym0nkN8eyG6aBA2ZBnw19juGGufKeJ5kvWeDADZOJ28wjbrNQyW1PIfKbT+S3SAm/qUR+C4j8Flt2w1xwwELoi6AvNtywRN5LJcskyx24YRpxm6XEbVYoue3pRH7LiPxWKuE3g8hvOZHfKstuWAIOWAF9JfRVhhtWy3uNZK1knQM3zCRus4a4zXoltz2LyG8tkd8GJfxmE/mtI/LbaNkNq8EB66FvgL7RcMMmeW+WbJFsdeCGOcRtNhO32abktucS+W0h8tuuhN88Ir+tRH47LLthEzhgG/Tt0HcYbtgp712S3ZI9Dtwwn7jNLuI2e5Xc9gIiv91EfvuU8FtI5LeHyG+/ZTfsBAfshb4P+n7DDQfkfVBySHLYgRsWEbc5SNzmiJLbXkzkd4jI76gSfkuI/A4T+R2z7IYD4IAj0I9CP2a44bi8T0hOSk45cMNS4jYniNucVnLby4j8ThL5nVHCbzmR3ykiv7OW3XAcHHAa+hnoZw03nJP3eckFyUUHblhB3OY8cZtLSm57JZHfBSK/y0r4rSLyu0jkd8WyG86BAy5Bvwz9iuGGq/K+JrkuueHADauJ21wjbnNTyW2vIfK7TuR3Swm/tUR+N4j8blt2w1VwwE3ot6DfNtxwR953Jfck9x24YR1xm7vEbR4oue31RH73iPweKuG3gcjvPpHfI8tuuAMOeAD9IfRHhhsey/uJ5KnkmQM3bCRu84S4zXMlt72JyO8pkd8LJfw2E/k9I/J7adkNj8EBz6G/gP7ScMMreb+WvJG8deCGLcRtXhO3eafktrcS+b0h8nuvhN82Ir+3RH4fLLvhFTjgHfT30D8Ybvgo70+Sz5IvDtywnbjNJ+I2X5Xc9g4iv89Eft+U8NtJ5PeFyO+7ZTd8BAd8hf4N+nfDDT/k/VPyS/LbgRt2Ebf5Sdzmj5Lb3k3k94vI768SfnuI/H4T+YVJadcNP8ABf6D/hf7vG9ANYeXtIQknCZ/Svhv2ErfxSMnbJkJKHbe9j8gvHJFfRCX89hP5hSfyi2TZDWFT/r8DIkCPCD2S4YbI8o4iiSqJ5sANB4jbRCFuE13JbR8k8otK5BdDCb9DRH7RiPxiWnZDZHBAdOgxoMc03BBL3rElcSRxHbjhMHGb2MRt4im57SNEfnGI/OIr4XeUyC8ukV8Cy26IBQ6IBz0+9ASGGxLKO5EksSSJAzccI26TiLiNp5LbPk7kl5jIL6kSfieI/JIQ+SWz7IaE4ABP6EmhJzPckFzeKSReEm8HbjhJ3CYFcRsfJbd9isjPi8gvpRJ+p4n8vIn8Ull2Q3JwgA/0lNBTGW5ILe80krSSdA7ccIa4TRriNr5KbvsskV9aIj8/JfzOEfmlI/Lzt+yG1OAAX+h+0P0NNwTIO1ASJAl24IbzxG0CiduEKLntC0R+QUR+oUr4XSTyCybyS2/ZDQHggBDoodDTG27IIO+MkkySzA7ccIm4TUbiNlmU3PZlIr9MRH5ZlfC7QuSXmcgvm2U3ZAAHZIGeFXo2ww3Z5Z1DklOSy4EbrhK3yUHcJreS275G5JeTyC+PEn7XifxyEfnlteyG7OCA3NDzQM9ruCGfvPNLCkgKOnDDDeI2+YnbFFJy2zeJ/AoQ+RVWwu8WkV9BIr8ilt2QDxxQCHph6EUMNxSVdzFJcUkJB264TdymGHGbkkpu+w6RX3Eiv1JK+N0l8itB5FfashuKggNKQi8FvbThhjLyLispJynvwA33iNuUJW5TQclt3yfyK0fkV1EJvwdEfuWJ/CpZdkMZcEAF6BWhVzLcUFneVSRVJdUcuOEhcZsqxG2qK7ntR0R+VYn8aijh95jIrxqRX03LbqgMDqgOvQb0moYbasm7tqSOpK4DNzwhblObuE09Jbf9lMivDpFffSX8nhH51SXya2DZDbXAAfWg14fewHBDQ3k3kjSWNHHghufEbRoRt2mq5LZfEPk1JvJrpoTfSyK/JkR+zS27oSE4oCn0ZtCbG25oIe+WklaS1g7c8Iq4TUviNm2U3PZrIr9WRH5tlfB7Q+TXmsivnWU3tAAHtIHeFno7ww3t5d1B0lHSyYEb3hK36UDcprOS235H5NeRyK+LEn7vifw6Efl1teyG9uCAztC7QO9quKGbvLtLekh6OnDDB+I23Ynb9FJy2x+J/HoQ+fVWwu8TkV9PIr8+lt3QDRzQC3pv6H0MN/SVdz9Jf8kAB274TNymH3GbgUpu+wuRX38iv0FK+H0l8htA5DfYshv6ggMGQh8EfbDhhiHyHioZJhnuwA3fiNsMJW4zQsltfyfyG0bkN1IJvx9EfsOJ/EZZdsMQcMAI6COhjzLcMFreYyRjJeMcuOEncZsxxG3GK7ntX0R+Y4n8Jijh95vIbxyR30TLbhgNDhgPfQL0iYYbJsl7smSKZKoDN/whbjOZuM00Jbf9l8hvCpHfdCX8wjTj/dZUIr8Zlt0wCRwwDfp06DMMN8yU9yzJbMkcB24IS9xmFnGbuUpu24PIbzaR3zwl/MIR+c0h8ptv2Q0zwQFzoc+DPt9wwwJ5L5Qskix24IbwxG0WErdZouS2IxD5LSLyW6qEX0Qiv8VEfsssu2EBOGAJ9KXQlxluWC7vFZKVklUO3BCJuM0K4jarldx2ZCK/lUR+a5Twi0Lkt4rIb61lNywHB6yGvgb6WsMN6+S9XrJBstGBG6ISt1lP3GaTktuORuS3gchvsxJ+0Yn8NhL5bbHshnXggE3QN0PfYrhhq7y3SbZLdjhwQwziNtuI2+xUctsxify2E/ntUsIvFpHfDiK/3ZbdsBUcsBP6Lui7DTfskfdeyT7JfgduiE3cZi9xmwNKbjsOkd8+Ir+DSvjFJfLbT+R3yLIb9oADDkA/CP2Q4YbD8j4iOSo55sAN8YjbHCFuc1zJbccn8jtK5HdCCb8ERH7HiPxOWnbDYXDAcegnoJ803HBK3qclZyRnHbghIXGb08Rtzim57UREfmeI/M4r4ZeYyO8skd8Fy244BQ44B/089AuGGy7K+5LksuSKAzckIW5zibjNVSW37Unkd5nI75oSfkmJ/K4Q+V237IaL4ICr0K9Bv2644Ya8b0puSW47cEMy4jY3idvcUXLbyYn8bhH53VXCLwWR320iv3uW3XADHHAH+l3o9ww33Jf3A8lDySMHbvAibvOAuM1jJbftTeT3kMjviRJ+PkR+j4j8nlp2w31wwGPoT6A/NdzwTN7PJS8kLx24ISVxm+fEbV4pue1URH4viPxeK+GXmsjvJZHfG8tueAYOeAX9NfQ3hhveyvud5L3kgwM3pCFu8464zUclt52WyO89kd8nJfzSEfl9IPL7bNkNb8EBH6F/gv7ZcMMXeX+VfJN8d+AGX+I2X4nb/FBy235Eft+I/H4q4edP5PedyO+XZTd8AQf8gP4T+i/DDb//vSV/JWFS2XdDAHGbP8RtwqbScduBRH5/ifw8lPALIvILk4rHL1wqu274DQ74d+v/6x7Qw6X6rxvCyzuCJKIkkgM3BBO3iUDcJrKS2w4h8otI5BdFCb9QIr9IRH5RLbshPDggMvQo0KMabogm7+iSGJKYDtyQnrhNdOI2sZTcdgYivxhEfrGV8MtI5BeTyC+OZTdEAwfEgh4behzDDXHlHU8SX5LAgRsyEbeJR9wmoZLbzkzkF5/IL5ESflmI/BIQ+SW27Ia44ICE0BNBT2y4IYm8PSVJJckcuCErcRtP4jbJldx2NiK/pER+KZTwy07kl4zIz8uyG5KAA5JDTwHdy3CDt7x9JCklqRy4IQdxGx/iNqmV3HZOIr+URH5plPDLReSXisgvrWU3eIMDUkNPAz2t4YZ08vaV+En8HbghN3EbX+I2AUpuOw+Rnx+RX6ASfnmJ/PyJ/IIsuyEdOCAAeiD0IMMNwfIOkYRK0jtwQz7iNiHEbTIoue38RH6hRH4ZlfArQOSXnsgvk2U3BIMDMkDPCD2T4YbM8s4iySrJ5sANBYnbZCFuk13JbRci8stK5JdDCb/CRH7ZiPxyWnZDZnBAdug5oOc03JBL3rkleSR5HbihCHGb3MRt8im57aJEfnmI/PIr4VeMyC8vkV8By27IBQ7IBz0/9AKGGwrKu5CksKSIAzcUJ25TiLhNUSW3XYLIrzCRXzEl/EoS+RUh8itu2Q0FwQFFoReDXtxwQwl5l5SUkpR24IZSxG1KErcpo+S2SxP5lSLyK6uEXxkiv9JEfuUsu6EEOKAM9LLQyxluKC/vCpKKkkoO3FCWuE0F4jaVldx2OSK/ikR+VZTwK0/kV4nIr6plN5QHB1SGXgV6VcMN1eRdXVJDUtOBGyoQt6lO3KaWktuuSORXg8ivthJ+lYj8ahL51bHshmrggFrQa0OvY7ihrrzrSepLGjhwQ2XiNvWI2zRUcttViPzqE/k1UsKvKpFfAyK/xpbdUBcc0BB6I+iNDTc0kXdTSTNJcwduqEbcpilxmxZKbrs6kV8zIr+WSvjVIPJrTuTXyrIbmoADWkBvCb2V4YbW8m4jaStp58ANNYnbtCFu017Jbdci8mtL5NdBCb/aRH7tiPw6WnZDa3BAe+gdoHc03NBJ3p0lXSRdHbihDnGbzsRtuim57bpEfl2I/Lor4VePyK8rkV8Py27oBA7oBr079B6GG3rKu5ekt6SPAzfUJ27Ti7hNXyW33YDIrzeRXz8l/BoS+fUh8utv2Q09wQF9ofeD3t9wwwB5D5QMkgx24IZGxG0GErcZouS2GxP5DSLyG6qEXxMiv8FEfsMsu2EAOGAI9KHQhxluGC7vEZKRklEO3NCUuM0I4jajldx2MyK/kUR+Y5Twa07kN4rIb6xlNwwHB4yGPgb6WMMN4+Q9XjJBMtGBG1oQtxlP3GaSkttuSeQ3gchvshJ+rYj8JhL5TbHshnHggEnQJ0OfYrhhqrynSaZLZjhwQ2viNtOI28xUctttiPymE/nNUsKvLZHfDCK/2ZbdMBUcMBP6LOizDTfMkfdcyTzJfAduaEfcZi5xmwVKbrs9kd88Ir+FSvh1IPKbT+S3yLIb5oADFkBfCH2R4YbF8l4iWSpZ5sANHYnbLCFus1zJbXci8ltK5LdCCb/ORH7LiPxWWnbDYnDAcugroK803LBK3qslayRrHbihC3Gb1cRt1im57a5EfmuI/NYr4deNyG8tkd8Gy25YBQ5YB3099A2GGzbKe5Nks2SLAzd0J26zibjNViW33YPIbzOR3zYl/HoS+W0h8ttu2Q0bwQFboW+Dvt1www5575Tskux24IZexG12ErfZo+S2exP57SLy26uEXx8iv91Efvssu2EHOGAP9L3Q9xlu2C/vA5KDkkMO3NCXuM0B4jaHldx2PyK/g0R+R5Tw60/kd4jI76hlN+wHBxyGfgT6UcMNx+R9XHJCctKBGwYQtzlO3OaUktseSOR3gsjvtBJ+g4j8ThL5nbHshmPggFPQT0M/Y7jhrLzPSc5LLjhww2DiNueI21xUcttDiPzOE/ldUsJvKJHfBSK/y5bdcBYccBH6JeiXDTdckfdVyTXJdQduGEbc5ipxmxtKbns4kd81Ir+bSviNIPK7TuR3y7IbroADbkC/Cf2W4Ybb8r4juSu558ANI4nb3CFuc1/JbY8i8rtL5PdACb/RRH73iPweWnbDbXDAfegPoD803PBI3o8lTyRPHbhhDHGbx8Rtnim57bFEfk+I/J4r4TeOyO8pkd8Ly254BA54Bv059BeGG17K+5XkteSNAzeMJ27zirjNWyW3PYHI7zWR3zsl/CYS+b0h8ntv2Q0vwQFvob+D/t5wwwd5f5R8knx24IZJxG0+Erf5ouS2JxP5fSLy+6qE3xQiv89Eft8su+EDOOAL9K/Qvxlu+C7vH5Kfkl8O3DCVuM0P4ja/ldz2NCK/n0R+f5Twm07k94vI769lN3wHB/yG/gf6X8MNYVJ7hAkr8ZCES23fDTOI2/z7btY24VPruO2ZRH4eRH4RlPCbReQXjsgvYmq7bvj37/x/DggPPQL0iKn/64ZI8o4siSKJ6sANs4nbRCZuE03Jbc8h8otC5BddCb+5RH5RifxiWHZDJHBANOjRoccw3BBT3rEksSVxHLhhHnGbWMRt4iq57flEfrGJ/OIp4beAyC8OkV98y26ICQ6ICz0e9PiGGxLIO6EkkSSxAzcsJG6TkLhNEiW3vYjILxGRn6cSfouJ/BIT+SW17IYE4IAk0D2hJzXckEzeySUpJF4O3LCEuE1y4jbeSm57KZFfCiI/HyX8lhH5eRH5pbTshmTgAG/oPtBTGm5IJe/UkjSStA7csJy4TWriNumU3PYKIr80RH6+SvitJPJLS+TnZ9kNqcAB6aD7Qvcz3OAv7wBJoCTIgRtWEbcJIG4TrOS2VxP5BRL5hSjht4bIL4jIL9SyG/zBAcHQQ6CHGm5IL+8MkoySTA7csJa4TQbiNpmV3PY6Ir+MRH5ZlPBbT+SXicgvq2U3pAcHZIaeBXpWww3Z5J1dkkOS04EbNhC3yU7cJpeS295I5JeDyC+3En6biPxyEvnlseyGbOCAXNBzQ89juCHvv2+S5JcUcOCGzcRt8hG3KajktrcQ+eUn8iukhN9WIr8CRH6FLbshLzigIPRC0Asbbigi76KSYpLiDtywjbhNUeI2JZTc9nYiv2JEfiWV8NtB5FecyK+UZTcUAQeUgF4SeinDDaXlXUZSVlLOgRt2ErcpQ9ymvJLb3kXkV5bIr4ISfruJ/MoR+VW07IbS4IDy0CtAr2i4oZK8K0uqSKo6cMMe4jaVidtUU3Lbe4n8qhD5VVfCbx+RX1UivxqW3VAJHFANenXoNQw31JR3LUltSR0HbthP3KYWcZu6Sm77AJFfbSK/ekr4HSTyq0PkV9+yG2qCA+pCrwe9vuGGBvJuKGkkaezADYeI2zQkbtNEyW0fJvJrROTXVAm/I0R+jYn8mll2QwNwQBPoTaE3M9zQXN4tJC0lrRy44ShxmxbEbVorue1jRH4tifzaKOF3nMivFZFfW8tuaA4OaA29DfS2hhvaybu9pIOkowM3nCBu0564TSclt32SyK8DkV9nJfxOEfl1JPLrYtkN7cABnaB3ht7FcENXeXeTdJf0cOCG08RtuhG36ankts8Q+XUn8uulhN9ZIr8eRH69LbuhKzigJ/Re0Hsbbugj776SfpL+DtxwjrhNX+I2A5Tc9nkiv35EfgOV8LtA5NefyG+QZTf0AQcMgD4Q+iDDDYPlPUQyVDLMgRsuErcZQtxmuJLbvkTkN5TIb4QSfpeJ/IYR+Y207IbB4IDh0EdAH2m4YZS8R0vGSMY6cMMV4jajiduMU3LbV4n8xhD5jVfC7xqR31givwmW3TAKHDAO+njoEww3TJT3JMlkyRQHbrhO3GYScZupSm77BpHfZCK/aUr43STym0LkN92yGyaCA6ZCnwZ9uuGGGfKeKZklme3ADbeI28wkbjNHyW3fJvKbReQ3Vwm/O0R+s4n85ll2wwxwwBzoc6HPM9wwX94LJAslixy44S5xmwXEbRYrue17RH4LifyWKOF3n8hvEZHfUstumA8OWAx9CfSlhhuWyXu5ZIVkpQM3PCBus5y4zSolt/2QyG8Fkd9qJfweEfmtJPJbY9kNy8ABq6Cvhr7GcMNaea+TrJdscOCGx8Rt1hG32ajktp8Q+a0n8tukhN9TIr8NRH6bLbthLThgI/RN0Dcbbtgi762SbZLtDtzwjLjNVuI2O5Tc9nMiv21EfjuV8HtB5LedyG+XZTdsAQfsgL4T+i7DDbvlvUeyV7LPgRteErfZQ9xmv5LbfkXkt5fI74ASfq+J/PYR+R207Ibd4ID90A9AP2i44ZC8D0uOSI46cMMb4jaHidscU3Lbb4n8jhD5HVfC7x2R31EivxOW3XAIHHAM+nHoJww3nJT3KclpyRkHbnhP3OYUcZuzSm77A5HfaSK/c0r4fSTyO0Pkd96yG06CA85CPwf9vOGGC/K+KLkkuezADZ+I21wkbnNFyW1/JvK7ROR3VQm/L0R+l4n8rll2wwVwwBXoV6FfM9xwXd43JDcltxy44StxmxvEbW4rue1vRH43ifzuKOH3ncjvFpHfXctuuA4OuA39DvS7hhvuyfu+5IHkoQM3/CBuc5+4zSMlt/2TyO8Bkd9jJfx+Efk9JPJ7YtkN98ABj6A/hv7EcMNTeT+TPJe8cOCG38RtnhG3eanktv8Q+T0n8nulhN9fIr8XRH6vLbvhKTjgJfRX0F8bbngj77eSd5L3DtwQpjnx/+yJ23xQctthifzeEfl9VMLPg8jvPZHfJ8tueAMO+AD9I/RPhhs+y/uL5KvkmwM3hCNu84W4zXcltx2eyO8rkd8PJfwiEPl9I/L7adkNn8EB36H/gP7TcMMvef/+9zfJXwduiEjc5jdxmzBpdNx2JCK/P0R+YZXwi0zk95fIzyONXTf8Agf8u/X/9bDQPdL81w3h5B1eEkESMY19N0QhbhM+DW+bSEpuOyqRXwQiv8hK+EUj8otI5BfFshvCgQMiQY8MPYrhhqjyjiaJLonhwA3RidtEI24TU8ltxyDyi07kF0sJv5hEfjGI/GJbdkNUcEBM6LGgxzbcEEfecSXxJPEduCEWcZu4xG0SKLnt2ER+8Yj8EirhF4fILz6RXyLLbogDDkgAPSH0RIYbEss7icRTktSBG+ISt0lC3CaZktuOR+TnSeSXXAm/+ER+SYn8Ulh2Q2JwQDLoyaGnMNzgJW9viY8kpQM3JCBu403cJpWS205I5OdD5JdaCb9ERH4pifzSWHaDFzggFfTU0NMYbkgr73QSX4mfAzckJm6TjriNv5LbTkLk50vkF6CEnyeRnx+RX6BlN6QFB/hDD4AeaLghSN7BkhBJqAM3JCVuE0zcJr2S205G5BdC5JdBCb/kRH6hRH4ZLbshCByQHnoG6BkNN2SSd2ZJFklWB25IQdwmM3GbbEpu24vILwuRX3Yl/LyJ/LIS+eWw7IZM4IBs0LNDz2G4Iae8c0lyS/I4cIMPcZtcxG3yKrntlER+uYn88inhl4rILw+RX37LbsgJDsgLPR/0/IYbCsi7oKSQpLADN6QmblOQuE0RJbedhsivEJFfUSX80hL5FSbyK2bZDQXAAUWgF4VezHBDcXmXkJSUlHLghnTEbUoQtymt5LZ9ifxKEvmVUcLPj8ivFJFfWctuKA4OKA29DPSyhhvKybu8pIKkogM3+BO3KU/cppKS2w4g8qtA5FdZCb9AIr+KRH5VLLuhHDigEvTK0KsYbqgq72qS6pIaDtwQRNymGnGbmkpuO5jIrzqRXy0l/EKI/GoQ+dW27Iaq4ICa0GtBr224oY6860rqSeo7cEMocZu6xG0aKLnt9ER+9Yj8Girhl4HIrz6RXyPLbqgDDmgAvSH0RoYbGsu7iaSppJkDN2QkbtOEuE1zJbedicivKZFfCyX8MhP5NSPya2nZDY3BAc2ht4De0nBDK3m3lrSRtHXghizEbVoTt2mn5LazEvm1IfJrr4RfNiK/tkR+HSy7oRU4oB309tA7GG7oKO9Oks6SLg7ckJ24TSfiNl2V3HYOIr/ORH7dlPDLSeTXhcivu2U3dAQHdIXeDXp3ww095N1T0kvS24EbchG36Uncpo+S285N5NeLyK+vEn55iPx6E/n1s+yGHuCAPtD7Qu9nuKG/vAdIBkoGOXBDXuI2A4jbDFZy2/mI/AYS+Q1Rwi8/kd8gIr+hlt3QHxwwGPoQ6EMNNwyT93DJCMlIB24oQNxmOHGbUUpuuyCR3wgiv9FK+BUi8htJ5DfGshuGgQNGQR8NfYzhhrHyHicZL5ngwA2FiduMI24zUcltFyHyG0/kN0kJv6JEfhOI/CZbdsNYcMBE6JOgTzbcMEXeUyXTJNMduKEYcZupxG1mKLnt4kR+04j8ZirhV4LIbzqR3yzLbpgCDpgBfSb0WYYbZst7jmSuZJ4DN5QkbjOHuM18JbddishvLpHfAiX8ShP5zSPyW2jZDbPBAfOhL4C+0HDDInkvliyRLHXghjLEbRYTt1mm5LbLEvktIfJbroRfOSK/pUR+Kyy7YRE4YBn05dBXGG5YKe9VktWSNQ7cUJ64zSriNmuV3HYFIr/VRH7rlPCrSOS3hshvvWU3rAQHrIW+Dvp6ww0b5L1Rskmy2YEbKhG32UjcZouS265M5LeJyG+rEn5ViPw2E/lts+yGDeCALdC3Qt9muGG7vHdIdkp2OXBDVeI2O4jb7FZy29WI/HYS+e1Rwq86kd8uIr+9lt2wHRywG/oe6HsNN+yT937JAclBB26oQdxmP3GbQ0puuyaR3wEiv8NK+NUi8jtI5HfEshv2gQMOQT8M/YjhhqPyPiY5LjnhwA21idscI25zUslt1yHyO07kd0oJv7pEfieI/E5bdsNRcMBJ6KegnzbccEbeZyXnJOcduKEecZuzxG0uKLnt+kR+54j8Lirh14DI7zyR3yXLbjgDDrgA/SL0S4YbLsv7iuSq5JoDNzQkbnOFuM11JbfdiMjvKpHfDSX8GhP5XSPyu2nZDZfBAdeh34B+03DDLXnfltyR3HXghibEbW4Tt7mn5LabEvndIfK7r4RfMyK/u0R+Dyy74RY44B70+9AfGG54KO9HkseSJw7c0Jy4zSPiNk+V3HYLIr/HRH7PlPBrSeT3hMjvuWU3PAQHPIX+DPpzww0v5P1S8kry2oEbWhG3eUnc5o2S225N5PeKyO+tEn5tiPxeE/m9s+yGF+CAN9DfQn9nuOG9vD9IPko+OXBDW+I2H4jbfFZy2+2I/D4S+X1Rwq89kd8nIr+vlt3wHhzwGfoX6F8NN3yT93fJD8lPB27oQNzmO3GbX0puuyOR3w8iv99K+HUi8vtJ5PfHshu+gQN+Qf8N/Y/hhr/yDpPWI0xYiUda+27oTNzm33eztgmXVsdtdyHyC0vkF14Jv65Efh5EfhHS2nXDX3DAv1v/Xw8PPULa/7ohorwjSSJLojhwQzfiNpGI20RVctvdifwiE/lFU8KvB5FfFCK/6JbdEBEcEBV6NOjRDTfEkHdMSSxJbAdu6EncJiZxmzhKbrsXkV8sIr+4Svj1JvKLTeQXz7IbYoAD4kCPCz2e4Yb48k4gSShJ5MANfYjbJCBuk1jJbfcl8ktI5JdECb9+RH6JiPw8LbshPjggMfQk0D0NNySVdzJJckkKB27oT9wmGXEbLyW3PYDILzmRn7cSfgOJ/FIQ+flYdkNScIAXdG/oPoYbUso7lSS1JI0DNwwibpOKuE1aJbc9mMgvNZFfOiX8hhD5pSHy87XshpTggLTQ00H3NdzgJ29/SYAk0IEbhhK38SduE6TktocR+QUQ+QUr4TecyC+QyC/Eshv8wAFB0IOhhxhuCJV3ekkGSUYHbhhB3CY9cZtMSm57JJFfBiK/zEr4jSLyy0jkl8WyG0LBAZmgZ4aexXBDVnlnk2SX5HDghtHEbbIRt8mp5LbHEPllJ/LLpYTfWCK/HER+uS27ISs4ICf0XNBzG27II++8/75Lkt+BG8YRt8lL3KaAktseT+SXj8ivoBJ+E4j88hP5FbLshjzggALQC0IvZLihsLyLSIpKijlww0TiNkWI2xRXctuTiPyKEvmVUMJvMpFfMSK/kpbdUBgcUBx6CeglDTeUkndpSRlJWQdumELcpjRxm3JKbnsqkV8ZIr/ySvhNI/IrS+RXwbIbSoEDykEvD72C4YaK8q4kqSyp4sAN04nbVCJuU1XJbc8g8qtM5FdNCb+ZRH5ViPyqW3ZDRXBAVejVoFc33FBD3jUltSS1HbhhFnGbmsRt6ii57dlEfrWI/Ooq4TeHyK82kV89y26oAQ6oA70u9HqGG+rLu4GkoaSRAzfMJW7TgLhNYyW3PY/IryGRXxMl/OYT+TUi8mtq2Q31wQGNoTeB3tRwQzN5N5e0kLR04IYFxG2aE7dppeS2FxL5tSDya62E3yIiv5ZEfm0su6EZOKAV9NbQ2xhuaCvvdpL2kg4O3LCYuE074jYdldz2EiK/9kR+nZTwW0rk14HIr7NlN7QFB3SE3gl6Z8MNXeTdVdJN0t2BG5YRt+lK3KaHktteTuTXjcivpxJ+K4j8uhP59bLshi7ggB7Qe0LvZbiht7z7SPpK+jlww0riNn2I2/RXcturiPz6EvkNUMJvNZFfPyK/gZbd0Bsc0B/6AOgDDTcMkvdgyRDJUAduWEPcZjBxm2FKbnstkd8QIr/hSvitI/IbSuQ3wrIbBoEDhkEfDn2E4YaR8h4lGS0Z48AN64nbjCJuM1bJbW8g8htN5DdOCb+NRH5jiPzGW3bDSHDAWOjjoI833DBB3hMlkySTHbhhE3GbicRtpii57c1EfpOI/KYq4beFyG8ykd80y26YAA6YAn0q9GmGG6bLe4ZkpmSWAzdsJW4zg7jNbCW3vY3IbyaR3xwl/LYT+c0i8ptr2Q3TwQGzoc+BPtdwwzx5z5cskCx04IYdxG3mE7dZpOS2dxL5LSDyW6yE3y4iv4VEfkssu2EeOGAR9MXQlxhuWCrvZZLlkhUO3LCbuM0y4jYrldz2HiK/5UR+q5Tw20vkt4LIb7VlNywFB6yEvgr6asMNa+S9VrJOst6BG/YRt1lL3GaDktveT+S3jshvoxJ+B4j81hP5bbLshjXggA3QN0LfZLhhs7y3SLZKtjlww0HiNluI22xXctuHiPy2EvntUMLvMJHfNiK/nZbdsBkcsB36Dug7DTfskvduyR7JXgduOELcZjdxm31Kbvsokd8eIr/9SvgdI/LbS+R3wLIbdoED9kHfD/2A4YaD8j4kOSw54sANx4nbHCJuc1TJbZ8g8jtM5HdMCb+TRH5HiPyOW3bDQXDAUejHoB833HBC3iclpySnHbjhFHGbk8Rtzii57dNEfqeI/M4q4XeGyO80kd85y244AQ44A/0s9HOGG87L+4LkouSSAzecJW5zgbjNZSW3fY7I7yKR3xUl/M4T+V0i8rtq2Q3nwQGXoV+BftVwwzV5X5fckNx04IYLxG2uE7e5peS2LxL53SDyu62E3yUiv5tEfncsu+EaOOAW9NvQ7xhuuCvve5L7kgcO3HCZuM094jYPldz2FSK/+0R+j5Twu0rk94DI77FlN9wFBzyE/gj6Y8MNT+T9VPJM8tyBG64Rt3lK3OaFktu+TuT3jMjvpRJ+N4j8nhP5vbLshifggBfQX0J/ZbjhtbzfSN5K3jlww03iNm+I27xXctu3iPzeEvl9UMLvNpHfOyK/j5bd8Boc8B76B+gfDTd8kvdnyRfJVwduuEPc5jNxm29Kbvsukd8XIr/vSvjdI/L7SuT3w7IbPoEDvkH/Dv2H4Yaf8v4l+f3v7w7ccJ+4zS/iNn+V3PYDIr/fRH5h0ung95DI7w+RX9h0dt3wExzwF/q/3f7Xw6b7rxs85B1OEl4SIZ19NzwibhMuHW+biEpu+zGRX3giv0hK+D0h8otA5BfZshs8wAERoUeCHtlwQxR5R5VEk0R34IanxG2iEreJoeS2nxH5RSPyi6mE33Miv+hEfrEsuyEKOCAG9JjQYxluiC3vOJK4kngO3PCCuE0c4jbxldz2SyK/uER+CZTwe0XkF4/IL6FlN8QGB8SHngB6QsMNieSdWJJE4unADa+J2yQmbpNUyW2/IfJLQuSXTAm/t0R+nkR+yS27IRE4ICn0ZNCTG25IIW8vibfEx4Eb3hG38SJuk1LJbb8n8vMm8kulhN8HIj8fIr/Ult2QAhyQEnoq6KkNN6SRd1pJOomvAzd8JG6TlriNn5Lb/kTkl47Iz18Jv89Efr5EfgGW3ZAGHOAH3R96gOGGQHkHSYIlIQ7c8IW4TRBxm1Alt/2VyC+YyC+9En7fiPxCiPwyWHZDIDggFHp66BkMN2SUdyZJZkkWB274TtwmE3GbrEpu+weRX2Yiv2xK+P0k8stC5JfdshsyggOyQs8GPbvhhhzyzinJJcntwA2/iNvkJG6TR8lt/ybyy0Xkl1cJvz9EfrmJ/PJZdkMOcEAe6Hmh5zPckF/eBSQFJYUcuOEvcZsCxG0KK7ntMC14v1WQyK+IEn5hifwKEfkVteyG/OCAwtCLQC9quKGYvItLSkhKOnCDB3Gb4sRtSim57XBEfiWI/Eor4ReeyK8kkV8Zy24oBg4oBb009DKGG8rKu5ykvKSCAzdEIG5TjrhNRSW3HZHIrzyRXyUl/CIR+VUg8qts2Q1lwQEVoVeCXtlwQxV5V5VUk1R34IbIxG2qErepoeS2oxD5VSPyq6mEX1Qiv+pEfrUsu6EKOKAG9JrQaxluqC3vOpK6knoO3BCNuE0d4jb1ldx2dCK/ukR+DZTwi0HkV4/Ir6FlN9QGB9SH3gB6Q8MNjeTdWNJE0tSBG2ISt2lM3KaZktuOReTXhMivuRJ+sYn8mhL5tbDshkbggGbQm0NvYbihpbxbSVpL2jhwQxziNq2I27RVcttxifxaE/m1U8IvHpFfGyK/9pbd0BIc0BZ6O+jtDTd0kHdHSSdJZwduiE/cpiNxmy5KbjsBkV8nIr+uSvglJPLrTOTXzbIbOoADukDvCr2b4Ybu8u4h6Snp5cANiYjb9CBu01vJbScm8utJ5NdHCb8kRH69iPz6WnZDd3BAb+h9oPc13NBP3v0lAyQDHbjBk7hNf+I2g5TcdlIivwFEfoOV8EtG5DeQyG+IZTf0AwcMgj4Y+hDDDUPlPUwyXDLCgRuSE7cZRtxmpJLbTkHkN5zIb5QSfl5EfiOI/EZbdsNQcMBI6KOgjzbcMEbeYyXjJOMduMGbuM1Y4jYTlNy2D5HfOCK/iUr4pSTyG0/kN8myG8aAAyZAnwh9kuGGyfKeIpkqmebADamI20whbjNdyW2nJvKbSuQ3Qwm/NER+04j8Zlp2w2RwwHToM6DPNNwwS96zJXMkcx24IS1xm9nEbeYpue10RH5ziPzmK+HnS+Q3l8hvgWU3zAIHzIM+H/oCww0L5b1IsliyxIEb/IjbLCJus1TJbfsT+S0m8lumhF8Akd8SIr/llt2wEBywFPoy6MsNN6yQ90rJKslqB24IJG6zkrjNGiW3HUTkt4rIb60SfsFEfquJ/NZZdsMKcMAa6GuhrzPcsF7eGyQbJZscuCGEuM0G4jabldx2KJHfRiK/LUr4pSfy20Tkt9WyG9aDAzZD3wJ9q+GGbfLeLtkh2enADRmI22wnbrNLyW1nJPLbQeS3Wwm/TER+O4n89lh2wzZwwC7ou6HvMdywV977JPslBxy4ITNxm33EbQ4que0sRH77ifwOKeGXlcjvAJHfYctu2AsOOAj9EPTDhhuOyPuo5JjkuAM3ZCNuc5S4zQklt52dyO8Ykd9JJfxyEPkdJ/I7ZdkNR8ABJ6CfhH7KcMNpeZ+RnJWcc+CGnMRtzhC3Oa/ktnMR+Z0l8rughF9uIr9zRH4XLbvhNDjgPPQL0C8abrgk78uSK5KrDtyQh7jNZeI215Tcdl4ivytEfteV8MtH5HeVyO+GZTdcAgdcg34d+g3DDTflfUtyW3LHgRvyE7e5RdzmrpLbLkDkd5vI754SfgWJ/O4Q+d237Iab4IC70O9Bv2+44YG8H0oeSR47cEMh4jYPids8UXLbhYn8HhH5PVXCrwiR32Miv2eW3fAAHPAE+lPozww3PJf3C8lLySsHbihK3OYFcZvXSm67GJHfSyK/N0r4FSfye0Xk99ayG56DA15DfwP9reGGd/J+L/kg+ejADSWI27wnbvNJyW2XJPL7QOT3WQm/UkR+H4n8vlh2wztwwCfon6F/MdzwVd7fJN8lPxy4oTRxm2/EbX4que0yRH7fifx+KeFXlsjvB5Hfb8tu+AoO+An9F/Tfhhv+yPuvJIyvR5iwvvbdUI64zV/iNh6+Om67PJFfGF8ev3BK+FUg8gtL5Bfe164b/oAD/t36/3o46OF9/+uGCPKOKIkkiezADRWJ20QkbhNFyW1XIvKLROQXVQm/ykR+kYn8oll2QwRwQBToUaFHM9wQXd4xJDElsRy4oQpxmxjEbWIrue2qRH4xifziKOFXjcgvFpFfXMtuiA4OiA09DvS4hhviyTu+JIEkoQM3VCduE5+4TSIlt12DyC8BkV9iJfxqEvklJPJLYtkN8cABiaAnhp7EcIOnvJNKkkmSO3BDLeI2SYnbpFBy27WJ/JIR+Xkp4VeHyC85kZ+3ZTd4ggNSQPeC7m24wUfeKSWpJKkduKEucZuUxG3SKLntekR+qYj80irhV5/ILzWRXzrLbvABB6SBnhZ6OsMNvvL2k/hLAhy4oQFxGz/iNoFKbrshkZ8/kV+QEn6NiPwCiPyCLbvBFxwQCD0IerDhhhB5h0rSSzI4cENj4jahxG0yKrntJkR+6Yn8Minh15TILwORX2bLbggBB2SEngl6ZsMNWeSdVZJNkt2BG5oRt8lK3CaHkttuTuSXjcgvpxJ+LYj8shP55bLshizggBzQc0LPZbght7zzSPL++zYHbmhJ3CYPcZv8Sm67FZFfXiK/Akr4tSbyy0fkV9CyG3KDA/JDLwC9oOGGQvIuLCkiKerADW2I2xQmblNMyW23JfIrQuRXXAm/dkR+RYn8Slh2QyFwQDHoxaGXMNxQUt6lJKUlZRy4oT1xm1LEbcoque0ORH6lifzKKeHXkcivDJFfectuKAkOKAu9HPTyhhsqyLuipJKksgM3dCJuU5G4TRUlt92ZyK8SkV9VJfy6EPlVJvKrZtkNFcABVaBXhV7NcEN1edeQ1JTUcuCGrsRtahC3qa3ktrsR+dUk8qujhF93Ir9aRH51LbuhOjigNvQ60Osabqgn7/qSBpKGDtzQg7hNfeI2jZTcdk8ivwZEfo2V8OtF5NeQyK+JZTfUAwc0gt4YehPDDU3l3UzSXNLCgRt6E7dpRtympZLb7kPk15zIr5USfn2J/FoQ+bW27Iam4ICW0FtBb224oY2820raSdo7cEM/4jZtidt0UHLb/Yn82hH5dVTCbwCRX3siv06W3dAGHNABekfonQw3dJZ3F0lXSTcHbhhI3KYLcZvuSm57EJFfVyK/Hkr4DSby60bk19OyGzqDA7pD7wG9p+GGXvLuLekj6evADUOI2/QmbtNPyW0PJfLrQ+TXXwm/YUR+fYn8Blh2Qy9wQD/o/aEPMNwwUN6DJIMlQxy4YThxm0HEbYYque0RRH6DifyGKeE3kshvCJHfcMtuGAgOGAp9GPThhhtGyHukZJRktAM3jCJuM5K4zRgltz2ayG8Ukd9YJfzGEPmNJvIbZ9kNI8ABY6CPhT7OcMN4eU+QTJRMcuCGscRtJhC3mazktscR+U0k8puihN94Ir9JRH5TLbthPDhgMvQp0Kcabpgm7+mSGZKZDtwwgbjNdOI2s5Tc9kQivxlEfrOV8JtE5DeTyG+OZTdMAwfMgj4b+hzDDXPlPU8yX7LAgRsmE7eZR9xmoZLbnkLkN5/Ib5ESflOJ/BYQ+S227Ia54ICF0BdBX2y4YYm8l0qWSZY7cMM04jZLidusUHLb04n8lhH5rVTCbwaR33Iiv1WW3bAEHLAC+kroqww3rJb3GslayToHbphJ3GYNcZv1Sm57FpHfWiK/DUr4zSbyW0fkt9GyG1aDA9ZD3wB9o+GGTfLeLNki2erADXOI22wmbrNNyW3PJfLbQuS3XQm/eUR+W4n8dlh2wyZwwDbo26HvMNywU967JLslexy4YT5xm13EbfYque0FRH67ifz2KeG3kMhvD5Hffstu2AkO2At9H/T9hhsOyPug5JDksAM3LCJuc5C4zRElt72YyO8Qkd9RJfyWEPkdJvI7ZtkNB8ABR6AfhX7McMNxeZ+QnJSccuCGpcRtThC3Oa3ktpcR+Z0k8jujhN9yIr9TRH5nLbvhODjgNPQz0M8abjgn7/OSC5KLDtywgrjNeeI2l5Tc9koivwtEfpeV8FtF5HeRyO+KZTecAwdcgn4Z+hXDDVflfU1yXXLDgRtWE7e5RtzmppLbXkPkd53I75YSfmuJ/G4Q+d227Iar4ICb0G9Bv2244Y6870ruSe47cMM64jZ3ids8UHLb64n87hH5PVTCbwOR330iv0eW3XAHHPAA+kPojww3PJb3E8lTyTMHbthI3OYJcZvnSm57E5HfUyK/F0r4bSbye0bk99KyGx6DA55DfwH9peGGV/J+LXkjeevADVuI27wmbvNOyW1vJfJ7Q+T3Xgm/bUR+b4n8Plh2wytwwDvo76F/MNzwUd6fJJ8lXxy4YTtxm0/Ebb4que0dRH6fify+KeG3k8jvC5Hfd8tu+AgO+Ar9G/Tvhht+yPun5JfktwM37CJu85O4zR8lt72byO8Xkd9fJfz2EPn9JvIL42fXDT/AAX+g/4X+7xvQDWHl7SEJJwnvZ98Ne4nbePjxtongp+O29xH5hSPyi6iE334iv/BEfpEsuyGs3/87IAL0iNAjGW6ILO8okqiSaA7ccIC4TRTiNtGV3PZBIr+oRH4xlPA7ROQXjcgvpmU3RAYHRIceA3pMww2x5B1bEkcS14EbDhO3iU3cJp6S2z5C5BeHyC++En5HifziEvklsOyGWOCAeNDjQ09guCGhvBNJEkuSOHDDMeI2iYjbeCq57eNEfomJ/JIq4XeCyC8JkV8yy25ICA7whJ4UejLDDcnlnULiJfF24IaTxG1SELfxUXLbp4j8vIj8Uirhd5rIz5vIL5VlNyQHB/hATwk9leGG1PJOI0krSefADWeI26QhbuOr5LbPEvmlJfLzU8LvHJFfOiI/f8tuSA0O8IXuB93fcEOAvAMlQZJgB244T9wmkLhNiJLbvkDkF0TkF6qE30Uiv2Aiv/SW3RAADgiBHgo9veGGDPLOKMkkyezADZeI22QkbpNFyW1fJvLLROSXVQm/K0R+mYn8sll2QwZwQBboWaFnM9yQXd45JDkluRy44SpxmxzEbXIrue1rRH45ifzyKOF3ncgvF5FfXstuyA4OyA09D/S8hhvyyTu/pICkoAM33CBuk5+4TSElt32TyK8AkV9hJfxuEfkVJPIrYtkN+cABhaAXhl7EcENReReTFJeUcOCG28RtihG3Kanktu8Q+RUn8iulhN9dIr8SRH6lLbuhKDigJPRS0Esbbigj77KScpLyDtxwj7hNWeI2FZTc9n0iv3JEfhWV8HtA5FeeyK+SZTeUAQdUgF4ReiXDDZXlXUVSVVLNgRseErepQtymupLbfkTkV5XIr4YSfo+J/KoR+dW07IbK4IDq0GtAr2m4oZa8a0vqSOo6cMMT4ja1idvUU3LbT4n86hD51VfC7xmRX10ivwaW3VALHFAPen3oDQw3NJR3I0ljSRMHbnhO3KYRcZumSm77BZFfYyK/Zkr4vSTya0Lk19yyGxqCA5pCbwa9ueGGFvJuKWklae3ADa+I27QkbtNGyW2/JvJrReTXVgm/N0R+rYn82ll2QwtwQBvobaG3M9zQXt4dJB0lnRy44S1xmw7EbTorue13RH4dify6KOH3nsivE5FfV8tuaA8O6Ay9C/Suhhu6ybu7pIekpwM3fCBu0524TS8lt/2RyK8HkV9vJfw+Efn1JPLrY9kN3cABvaD3ht7HcENfefeT9JcMcOCGz8Rt+hG3Gajktr8Q+fUn8hukhN9XIr8BRH6DLbuhLzhgIPRB0Acbbhgi76GSYZLhDtzwjbjNUOI2I5Tc9nciv2FEfiOV8PtB5DecyG+UZTcMAQeMgD4S+ijDDaPlPUYyVjLOgRt+ErcZQ9xmvJLb/kXkN5bIb4ISfr+J/MYR+U207IbR4IDx0CdAn2i4YZK8J0umSKY6cMMf4jaTidtMU3Lbf4n8phD5TVfCL0xL3m9NJfKbYdkNk8AB06BPhz7DcMNMec+SzJbMceCGsMRtZhG3mavktj2I/GYT+c1Twi8ckd8cIr/5lt0wExwwF/o86PMNNyyQ90LJIsliB24IT9xmIXGbJUpuOwKR3yIiv6VK+EUk8ltM5LfMshsWgAOWQF8KfZnhhuXyXiFZKVnlwA2RiNusIG6zWsltRybyW0nkt0YJvyhEfquI/NZadsNycMBq6GugrzXcsE7e6yUbJBsduCEqcZv1xG02KbntaER+G4j8NivhF53IbyOR3xbLblgHDtgEfTP0LYYbtsp7m2S7ZIcDN8QgbrONuM1OJbcdk8hvO5HfLiX8YhH57SDy223ZDVvBATuh74K+23DDHnnvleyT7HfghtjEbfYStzmg5LbjEPntI/I7qIRfXCK//UR+hyy7YQ844AD0g9APGW44LO8jkqOSYw7cEI+4zRHiNseV3HZ8Ir+jRH4nlPBLQOR3jMjvpGU3HAYHHId+AvpJww2n5H1ackZy1oEbEhK3OU3c5pyS205E5HeGyO+8En6JifzOEvldsOyGU+CAc9DPQ79guOGivC9JLkuuOHBDEuI2l4jbXFVy255EfpeJ/K4p4ZeUyO8Kkd91y264CA64Cv0a9OuGG27I+6bkluS2AzckI25zk7jNHSW3nZzI7xaR310l/FIQ+d0m8rtn2Q03wAF3oN+Ffs9ww315P5A8lDxy4AYv4jYPiNs8VnLb3kR+D4n8nijh50Pk94jI76llN9wHBzyG/gT6U8MNz+T9XPJC8tKBG1ISt3lO3OaVkttOReT3gsjvtRJ+qYn8XhL5vbHshmfggFfQX0N/Y7jhrbzfSd5LPjhwQxriNu+I23xUcttpifzeE/l9UsIvHZHfByK/z5bd8BYc8BH6J+ifDTd8kfdXyTfJdwdu8CVu85W4zQ8lt+1H5PeNyO+nEn7+RH7fifx+WXbDF3DAD+g/of8y3PD731vyVxLG374bAojb/CFuE9Zfx20HEvn9JfLzUMIviMgvjD+PXzh/u274DQ74d+v/6x7Qw/n/1w3h5R1BElESyYEbgonbRCBuE1nJbYcQ+UUk8ouihF8okV8kIr+olt0QHhwQGXoU6FENN0STd3RJDElMB25IT9wmOnGbWEpuOwORXwwiv9hK+GUk8otJ5BfHshuigQNiQY8NPY7hhrjyjieJL0ngwA2ZiNvEI26TUMltZybyi0/kl0gJvyxEfgmI/BJbdkNccEBC6ImgJzbckETenpKkkmQO3JCVuI0ncZvkSm47G5FfUiK/FEr4ZSfyS0bk52XZDUnAAcmhp4DuZbjBW94+kpSSVA7ckIO4jQ9xm9RKbjsnkV9KIr80SvjlIvJLReSX1rIbvMEBqaGngZ7WcEM6eftK/CT+DtyQm7iNL3GbACW3nYfIz4/IL1AJv7xEfv5EfkGW3ZAOHBAAPRB6kOGGYHmHSEIl6R24IR9xmxDiNhmU3HZ+Ir9QIr+MSvgVIPJLT+SXybIbgsEBGaBnhJ7JcENmeWeRZJVkc+CGgsRtshC3ya7ktgsR+WUl8suhhF9hIr9sRH45LbshMzggO/Qc0HMabsgl79ySPJK8DtxQhLhNbuI2+ZTcdlEivzxEfvmV8CtG5JeXyK+AZTfkAgfkg54fegHDDQXlXUhSWFLEgRuKE7cpRNymqJLbLkHkV5jIr5gSfiWJ/IoQ+RW37IaC4ICi0ItBL264oYS8S0pKSUo7cEMp4jYliduUUXLbpYn8ShH5lVXCrwyRX2kiv3KW3VACHFAGelno5Qw3lJd3BUlFSSUHbihL3KYCcZvKSm67HJFfRSK/Kkr4lSfyq0TkV9WyG8qDAypDrwK9quGGavKuLqkhqenADRWI21QnblNLyW1XJPKrQeRXWwm/SkR+NYn86lh2QzVwQC3otaHXMdxQV971JPUlDRy4oTJxm3rEbRoque0qRH71ifwaKeFXlcivAZFfY8tuqAsOaAi9EfTGhhuayLuppJmkuQM3VCNu05S4TQslt12dyK8ZkV9LJfxqEPk1J/JrZdkNTcABLaC3hN7KcENrebeRtJW0c+CGmsRt2hC3aa/ktmsR+bUl8uughF9tIr92RH4dLbuhNTigPfQO0Dsabugk786SLpKuDtxQh7hNZ+I23ZTcdl0ivy5Eft2V8KtH5NeVyK+HZTd0Agd0g94deg/DDT3l3UvSW9LHgRvqE7fpRdymr5LbbkDk15vIr58Sfg2J/PoQ+fW37Iae4IC+0PtB72+4YYC8B0oGSQY7cEMj4jYDidsMUXLbjYn8BhH5DVXCrwmR32Aiv2GW3TAAHDAE+lDowww3DJf3CMlIySgHbmhK3GYEcZvRSm67GZHfSCK/MUr4NSfyG0XkN9ayG4aDA0ZDHwN9rOGGcfIeL5kgmejADS2I24wnbjNJyW23JPKbQOQ3WQm/VkR+E4n8plh2wzhwwCTok6FPMdwwVd7TJNMlMxy4oTVxm2nEbWYque02RH7TifxmKeHXlshvBpHfbMtumAoOmAl9FvTZhhvmyHuuZJ5kvgM3tCNuM5e4zQIlt92eyG8ekd9CJfw6EPnNJ/JbZNkNc8ABC6AvhL7IcMNieS+RLJUsc+CGjsRtlhC3Wa7ktjsR+S0l8luhhF9nIr9lRH4rLbthMThgOfQV0Fcablgl79WSNZK1DtzQhbjNauI265TcdlcivzVEfuuV8OtG5LeWyG+DZTesAgesg74e+gbDDRvlvUmyWbLFgRu6E7fZRNxmq5Lb7kHkt5nIb5sSfj2J/LYQ+W237IaN4ICt0LdB3264YYe8d0p2SXY7cEMv4jY7idvsUXLbvYn8dhH57VXCrw+R324iv32W3bADHLAH+l7o+ww37Jf3AclBySEHbuhL3OYAcZvDSm67H5HfQSK/I0r49SfyO0Tkd9SyG/aDAw5DPwL9qOGGY/I+LjkhOenADQOI2xwnbnNKyW0PJPI7QeR3Wgm/QUR+J4n8zlh2wzFwwCnop6GfMdxwVt7nJOclFxy4YTBxm3PEbS4que0hRH7nifwuKeE3lMjvApHfZctuOAsOuAj9EvTLhhuuyPuq5JrkugM3DCNuc5W4zQ0ltz2cyO8akd9NJfxGEPldJ/K7ZdkNV8ABN6DfhH7LcMNted+R3JXcc+CGkcRt7hC3ua/ktkcR+d0l8nughN9oIr97RH4PLbvhNjjgPvQH0B8abngk78eSJ5KnDtwwhrjNY+I2z5Tc9lgivydEfs+V8BtH5PeUyO+FZTc8Agc8g/4c+gvDDS/l/UryWvLGgRvGE7d5RdzmrZLbnkDk95rI750SfhOJ/N4Q+b237IaX4IC30N9Bf2+44YO8P0o+ST47cMMk4jYfidt8UXLbk4n8PhH5fVXCbwqR32civ2+W3fABHPAF+lfo3ww3fJf3D8lPyS8HbphK3OYHcZvfSm57GpHfTyK/P0r4TSfy+0Xk99eyG76DA35D/wP9r+GGMAEeYcJKPCThAuy7YQZxm3/fzdomfICO255J5OdB5BdBCb9ZRH7hiPwiBth1w79/5/9zQHjoEaBHDPivGyLJO7IkiiSqAzfMJm4TmbhNNCW3PYfILwqRX3Ql/OYS+UUl8oth2Q2RwAHRoEeHHsNwQ0x5x5LElsRx4IZ5xG1iEbeJq+S25xP5xSbyi6eE3wIivzhEfvEtuyEmOCAu9HjQ4xtuSCDvhJJEksQO3LCQuE1C4jZJlNz2IiK/RER+nkr4LSbyS0zkl9SyGxKAA5JA94Se1HBDMnknl6SQeDlwwxLiNsmJ23grue2lRH4piPx8lPBbRuTnReSX0rIbkoEDvKH7QE9puCGVvFNL0kjSOnDDcuI2qYnbpFNy2yuI/NIQ+fkq4beSyC8tkZ+fZTekAgekg+4L3c9wg7+8AySBkiAHblhF3CaAuE2wktteTeQXSOQXooTfGiK/ICK/UMtu8AcHBEMPgR5quCG9vDNIMkoyOXDDWuI2GYjbZFZy2+uI/DIS+WVRwm89kV8mIr+slt2QHhyQGXoW6FkNN2STd3ZJDklOB27YQNwmO3GbXEpueyORXw4iv9xK+G0i8stJ5JfHshuygQNyQc8NPY/hhrz/vkmSX1LAgRs2E7fJR9ymoJLb3kLkl5/Ir5ASfluJ/AoQ+RW27Ia84ICC0AtBL2y4oYi8i0qKSYo7cMM24jZFiduUUHLb24n8ihH5lVTCbweRX3Eiv1KW3VAEHFACeknopQw3lJZ3GUlZSTkHbthJ3KYMcZvySm57F5FfWSK/Ckr47SbyK0fkV9GyG0qDA8pDrwC9ouGGSvKuLKkiqerADXuI21QmblNNyW3vJfKrQuRXXQm/fUR+VYn8alh2QyVwQDXo1aHXMNxQU961JLUldRy4YT9xm1rEbeoque0DRH61ifzqKeF3kMivDpFffctuqAkOqAu9HvT6hhsayLuhpJGksQM3HCJu05C4TRMlt32YyK8RkV9TJfyOEPk1JvJrZtkNDcABTaA3hd7McENzebeQtJS0cuCGo8RtWhC3aa3kto8R+bUk8mujhN9xIr9WRH5tLbuhOTigNfQ20Nsabmgn7/aSDpKODtxwgrhNe+I2nZTc9kkivw5Efp2V8DtF5NeRyK+LZTe0Awd0gt4ZehfDDV3l3U3SXdLDgRtOE7fpRtymp5LbPkPk153Ir5cSfmeJ/HoQ+fW27Iau4ICe0HtB7224oY+8+0r6Sfo7cMM54jZ9idsMUHLb54n8+hH5DVTC7wKRX38iv0GW3dAHHDAA+kDogww3DJb3EMlQyTAHbrhI3GYIcZvhSm77EpHfUCK/EUr4XSbyG0bkN9KyGwaDA4ZDHwF9pOGGUfIeLRkjGevADVeI24wmbjNOyW1fJfIbQ+Q3Xgm/a0R+Y4n8Jlh2wyhwwDjo46FPMNwwUd6TJJMlUxy44Tpxm0nEbaYque0bRH6TifymKeF3k8hvCpHfdMtumAgOmAp9GvTphhtmyHumZJZktgM33CJuM5O4zRwlt32byG8Wkd9cJfzuEPnNJvKbZ9kNM8ABc6DPhT7PcMN8eS+QLJQscuCGu8RtFhC3Wazktu8R+S0k8luihN99Ir9FRH5LLbthPjhgMfQl0Jcablgm7+WSFZKVDtzwgLjNcuI2q5Tc9kMivxVEfquV8HtE5LeSyG+NZTcsAwesgr4a+hrDDWvlvU6yXrLBgRseE7dZR9xmo5LbfkLkt57Ib5MSfk+J/DYQ+W227Ia14ICN0DdB32y4YYu8t0q2SbY7cMMz4jZbidvsUHLbz4n8thH57VTC7wWR33Yiv12W3bAFHLAD+k7ouww37Jb3HsleyT4HbnhJ3GYPcZv9Sm77FZHfXiK/A0r4vSby20fkd9CyG3aDA/ZDPwD9oOGGQ/I+LDkiOerADW+I2xwmbnNMyW2/JfI7QuR3XAm/d0R+R4n8Tlh2wyFwwDHox6GfMNxwUt6nJKclZxy44T1xm1PEbc4que0PRH6nifzOKeH3kcjvDJHfectuOAkOOAv9HPTzhhsuyPui5JLksgM3fCJuc5G4zRUlt/2ZyO8Skd9VJfy+EPldJvK7ZtkNF8ABV6BfhX7NcMN1ed+Q3JTccuCGr8RtbhC3ua3ktr8R+d0k8rujhN93Ir9bRH53LbvhOjjgNvQ70O8abrgn7/uSB5KHDtzwg7jNfeI2j5Tc9k8ivwdEfo+V8PtF5PeQyO+JZTfcAwc8gv4Y+hPDDU/l/UzyXPLCgRt+E7d5RtzmpZLb/kPk95zI75USfn+J/F4Q+b227Ian4ICX0F9Bf2244Y2830reSd47cEOYVsT/sydu80HJbYcl8ntH5PdRCT8PIr/3RH6fLLvhDTjgA/SP0D8Zbvgs7y+Sr5JvDtwQjrjNF+I235Xcdngiv69Efj+U8ItA5PeNyO+nZTd8Bgd8h/4D+k/DDb/k/fvf3yR/HbghInGb38RtwgTquO1IRH5/iPzCKuEXmcjvL5GfR6BdN/wCB/y79f/1sNA9Av/rhnDyDi+JIIkYaN8NUYjbhA/kbRNJyW1HJfKLQOQXWQm/aER+EYn8olh2QzhwQCTokaFHMdwQVd7RJNElMRy4ITpxm2jEbWIque0YRH7RifxiKeEXk8gvBpFfbMtuiAoOiAk9FvTYhhviyDuuJJ4kvgM3xCJuE5e4TQIltx2byC8ekV9CJfziEPnFJ/JLZNkNccABCaAnhJ7IcENieSeReEqSOnBDXOI2SYjbJFNy2/GI/DyJ/JIr4RefyC8pkV8Ky25IDA5IBj059BSGG7zk7S3xkaR04IYExG28idukUnLbCYn8fIj8Uivhl4jILyWRXxrLbvACB6SCnhp6GsMNaeWdTuIr8XPghsTEbdIRt/FXcttJiPx8ifwClPDzJPLzI/ILtOyGtOAAf+gB0AMNNwTJO1gSIgl14IakxG2CidukV3LbyYj8Qoj8Mijhl5zIL5TIL6NlNwSBA9JDzwA9o+GGTPLOLMkiyerADSmI22QmbpNNyW17EfllIfLLroSfN5FfViK/HJbdkAkckA16dug5DDfklHcuSW5JHgdu8CFuk4u4TV4lt52SyC83kV8+JfxSEfnlIfLLb9kNOcEBeaHng57fcEMBeReUFJIUduCG1MRtChK3KaLkttMQ+RUi8iuqhF9aIr/CRH7FLLuhADigCPSi0IsZbigu7xKSkpJSDtyQjrhNCeI2pZXcti+RX0kivzJK+PkR+ZUi8itr2Q3FwQGloZeBXtZwQzl5l5dUkFR04AZ/4jblidtUUnLbAUR+FYj8KivhF0jkV5HIr4plN5QDB1SCXhl6FcMNVeVdTVJdUsOBG4KI21QjblNTyW0HE/lVJ/KrpYRfCJFfDSK/2pbdUBUcUBN6Lei1DTfUkXddST1JfQduCCVuU5e4TQMlt52eyK8ekV9DJfwyEPnVJ/JrZNkNdcABDaA3hN7IcENjeTeRNJU0c+CGjMRtmhC3aa7ktjMR+TUl8muhhF9mIr9mRH4tLbuhMTigOfQW0Fsabmgl79aSNpK2DtyQhbhNa+I27ZTcdlYivzZEfu2V8MtG5NeWyK+DZTe0Age0g94eegfDDR3l3UnSWdLFgRuyE7fpRNymq5LbzkHk15nIr5sSfjmJ/LoQ+XW37IaO4ICu0LtB7264oYe8e0p6SXo7cEMu4jY9idv0UXLbuYn8ehH59VXCLw+RX28iv36W3dADHNAHel/o/Qw39Jf3AMlAySAHbshL3GYAcZvBSm47H5HfQCK/IUr45SfyG0TkN9SyG/qDAwZDHwJ9qOGGYfIeLhkhGenADQWI2wwnbjNKyW0XJPIbQeQ3Wgm/QkR+I4n8xlh2wzBwwCjoo6GPMdwwVt7jJOMlExy4oTBxm3HEbSYque0iRH7jifwmKeFXlMhvApHfZMtuGAsOmAh9EvTJhhumyHuqZJpkugM3FCNuM5W4zQwlt12cyG8akd9MJfxKEPlNJ/KbZdkNU8ABM6DPhD7LcMNsec+RzJXMc+CGksRt5hC3ma/ktksR+c0l8lughF9pIr95RH4LLbthNjhgPvQF0Bcablgk78WSJZKlDtxQhrjNYuI2y5TcdlkivyVEfsuV8CtH5LeUyG+FZTcsAgcsg74c+grDDSvlvUqyWrLGgRvKE7dZRdxmrZLbrkDkt5rIb50SfhWJ/NYQ+a237IaV4IC10NdBX2+4YYO8N0o2STY7cEMl4jYbidtsUXLblYn8NhH5bVXCrwqR32Yiv22W3bABHLAF+lbo2ww3bJf3DslOyS4HbqhK3GYHcZvdSm67GpHfTiK/PUr4VSfy20Xkt9eyG7aDA3ZD3wN9r+GGffLeLzkgOejADTWI2+wnbnNIyW3XJPI7QOR3WAm/WkR+B4n8jlh2wz5wwCHoh6EfMdxwVN7HJMclJxy4oTZxm2PEbU4que06RH7HifxOKeFXl8jvBJHfactuOAoOOAn9FPTThhvOyPus5JzkvAM31CNuc5a4zQUlt12fyO8ckd9FJfwaEPmdJ/K7ZNkNZ8ABF6BfhH7JcMNleV+RXJVcc+CGhsRtrhC3ua7kthsR+V0l8ruhhF9jIr9rRH43LbvhMjjgOvQb0G8abrgl79uSO5K7DtzQhLjNbeI295TcdlMivztEfveV8GtG5HeXyO+BZTfcAgfcg34f+gPDDQ/l/UjyWPLEgRuaE7d5RNzmqZLbbkHk95jI75kSfi2J/J4Q+T237IaH4ICn0J9Bf2644YW8X0peSV47cEMr4jYvidu8UXLbrYn8XhH5vVXCrw2R32siv3eW3fACHPAG+lvo7ww3vJf3B8lHyScHbmhL3OYDcZvPSm67HZHfRyK/L0r4tSfy+0Tk99WyG96DAz5D/wL9q+GGb/L+Lvkh+enADR2I23wnbvNLyW13JPL7QeT3Wwm/TkR+P4n8/lh2wzdwwC/ov6H/MdzwV95hgjzChJV4BNl3Q2fiNv++m7VNuCAdt92FyC8skV94Jfy6Evl5EPlFCLLrhr/ggH+3/r8eHnqEoP+6IaK8I0kiS6I4cEM34jaRiNtEVXLb3Yn8IhP5RVPCrweRXxQiv+iW3RARHBAVejTo0Q03xJB3TEksSWwHbuhJ3CYmcZs4Sm67F5FfLCK/uEr49Sbyi03kF8+yG2KAA+JAjws9nuGG+PJOIEkoSeTADX2I2yQgbpNYyW33JfJLSOSXRAm/fkR+iYj8PC27IT44IDH0JNA9DTcklXcySXJJCgdu6E/cJhlxGy8ltz2AyC85kZ+3En4DifxSEPn5WHZDUnCAF3Rv6D6GG1LKO5UktSSNAzcMIm6TirhNWiW3PZjILzWRXzol/IYQ+aUh8vO17IaU4IC00NNB9zXc4Cdvf0mAJNCBG4YSt/EnbhOk5LaHEfkFEPkFK+E3nMgvkMgvxLIb/MABQdCDoYcYbgiVd3pJBklGB24YQdwmPXGbTEpueySRXwYiv8xK+I0i8stI5JfFshtCwQGZoGeGnsVwQ1Z5Z5Nkl+Rw4IbRxG2yEbfJqeS2xxD5ZSfyy6WE31givxxEfrktuyErOCAn9FzQcxtuyCPvvP++S5LfgRvGEbfJS9ymgJLbHk/kl4/Ir6ASfhOI/PIT+RWy7IY84IAC0AtCL2S4obC8i0iKSoo5cMNE4jZFiNsUV3Lbk4j8ihL5lVDCbzKRXzEiv5KW3VAYHFAcegnoJQ03lJJ3aUkZSVkHbphC3KY0cZtySm57KpFfGSK/8kr4TSPyK0vkV8GyG0qBA8pBLw+9guGGivKuJKksqeLADdOJ21QiblNVyW3PIPKrTORXTQm/mUR+VYj8qlt2Q0VwQFXo1aBXN9xQQ941JbUktR24YRZxm5rEbeooue3ZRH61iPzqKuE3h8ivNpFfPctuqAEOqAO9LvR6hhvqy7uBpKGkkQM3zCVu04C4TWMltz2PyK8hkV8TJfzmE/k1IvJratkN9cEBjaE3gd7UcEMzeTeXtJC0dOCGBcRtmhO3aaXkthcS+bUg8muthN8iIr+WRH5tLLuhGTigFfTW0NsYbmgr73aS9pIODtywmLhNO+I2HZXc9hIiv/ZEfp2U8FtK5NeByK+zZTe0BQd0hN4JemfDDV3k3VXSTdLdgRuWEbfpStymh5LbXk7k143Ir6cSfiuI/LoT+fWy7IYu4IAe0HtC72W4obe8+0j6Svo5cMNK4jZ9iNv0V3Lbq4j8+hL5DVDCbzWRXz8iv4GW3dAbHNAf+gDoAw03DJL3YMkQyVAHblhD3GYwcZthSm57LZHfECK/4Ur4rSPyG0rkN8KyGwaBA4ZBHw59hOGGkfIeJRktGePADeuJ24wibjNWyW1vIPIbTeQ3Tgm/jUR+Y4j8xlt2w0hwwFjo46CPN9wwQd4TJZMkkx24YRNxm4nEbaYoue3NRH6TiPymKuG3hchvMpHfNMtumAAOmAJ9KvRphhumy3uGZKZklgM3bCVuM4O4zWwlt72NyG8mkd8cJfy2E/nNIvKba9kN08EBs6HPgT7XcMM8ec+XLJAsdOCGHcRt5hO3WaTktncS+S0g8lushN8uIr+FRH5LLLthHjhgEfTF0JcYblgq72WS5ZIVDtywm7jNMuI2K5Xc9h4iv+VEfquU8NtL5LeCyG+1ZTcsBQeshL4K+mrDDWvkvVayTrLegRv2EbdZS9xmg5Lb3k/kt47Ib6MSfgeI/NYT+W2y7IY14IAN0DdC32S4YbO8t0i2SrY5cMNB4jZbiNtsV3Lbh4j8thL57VDC7zCR3zYiv52W3bAZHLAd+g7oOw037JL3bskeyV4HbjhC3GY3cZt9Sm77KJHfHiK//Ur4HSPy20vkd8CyG3aBA/ZB3w/9gOGGg/I+JDksOeLADceJ2xwibnNUyW2fIPI7TOR3TAm/k0R+R4j8jlt2w0FwwFHox6AfN9xwQt4nJackpx244RRxm5PEbc4oue3TRH6niPzOKuF3hsjvNJHfOctuOAEOOAP9LPRzhhvOy/uC5KLkkgM3nCVuc4G4zWUlt32OyO8ikd8VJfzOE/ldIvK7atkN58EBl6FfgX7VcMM1eV+X3JDcdOCGC8RtrhO3uaXkti8S+d0g8ruthN8lIr+bRH53LLvhGjjgFvTb0O8Ybrgr73uS+5IHDtxwmbjNPeI2D5Xc9hUiv/tEfo+U8LtK5PeAyO+xZTfcBQc8hP4I+mPDDU/k/VTyTPLcgRuuEbd5StzmhZLbvk7k94zI76USfjeI/J4T+b2y7IYn4IAX0F9Cf2W44bW830jeSt45cMNN4jZviNu8V3Lbt4j83hL5fVDC7zaR3zsiv4+W3fAaHPAe+gfoHw03fJL3Z8kXyVcHbrhD3OYzcZtvSm77LpHfFyK/70r43SPy+0rk98OyGz6BA75B/w79h+GGn/L+Jfn97+8O3HCfuM0v4jZ/ldz2AyK/30R+YYJ18HtI5PeHyC9ssF03/AQH/IX+b7f/9bDB/3WDh7zDScJLIgTbd8Mj4jbhgnnbRFRy24+J/MIT+UVSwu8JkV8EIr/Ilt3gAQ6ICD0S9MiGG6LIO6okmiS6Azc8JW4TlbhNDCW3/YzILxqRX0wl/J4T+UUn8otl2Q1RwAExoMeEHstwQ2x5x5HElcRz4IYXxG3iELeJr+S2XxL5xSXyS6CE3ysiv3hEfgktuyE2OCA+9ATQExpuSCTvxJIkEk8HbnhN3CYxcZukSm77DZFfEiK/ZEr4vSXy8yTyS27ZDYnAAUmhJ4Oe3HBDCnl7SbwlPg7c8I64jRdxm5RKbvs9kZ83kV8qJfw+EPn5EPmltuyGFOCAlNBTQU9tuCGNvNNK0kl8HbjhI3GbtMRt/JTc9iciv3REfv5K+H0m8vMl8guw7IY04AA/6P7QAww3BMo7SBIsCXHghi/EbYKI24Qque2vRH7BRH7plfD7RuQXQuSXwbIbAsEBodDTQ89guCGjvDNJMkuyOHDDd+I2mYjbZFVy2z+I/DIT+WVTwu8nkV8WIr/slt2QERyQFXo26NkNN+SQd05JLkluB274RdwmJ3GbPEpu+zeRXy4iv7xK+P0h8stN5JfPshtygAPyQM8LPZ/hhvzyLiApKCnkwA1/idsUIG5TWMlth2nN+62CRH5FlPALS+RXiMivqGU35AcHFIZeBHpRww3F5F1cUkJS0oEbPIjbFCduU0rJbYcj8itB5FdaCb/wRH4lifzKWHZDMXBAKeiloZcx3FBW3uUk5SUVHLghAnGbcsRtKiq57YhEfuWJ/Cop4ReJyK8CkV9ly24oCw6oCL0S9MqGG6rIu6qkmqS6AzdEJm5TlbhNDSW3HYXIrxqRX00l/KIS+VUn8qtl2Q1VwAE1oNeEXstwQ21515HUldRz4IZoxG3qELepr+S2oxP51SXya6CEXwwiv3pEfg0tu6E2OKA+9AbQGxpuaCTvxpImkqYO3BCTuE1j4jbNlNx2LCK/JkR+zZXwi03k15TIr4VlNzQCBzSD3hx6C8MNLeXdStJa0saBG+IQt2lF3KatktuOS+TXmsivnRJ+8Yj82hD5tbfshpbggLbQ20Fvb7ihg7w7SjpJOjtwQ3ziNh2J23RRctsJiPw6Efl1VcIvIZFfZyK/bpbd0AEc0AV6V+jdDDd0l3cPSU9JLwduSETcpgdxm95KbjsxkV9PIr8+SvglIfLrReTX17IbuoMDekPvA72v4YZ+8u4vGSAZ6MANnsRt+hO3GaTktpMS+Q0g8hushF8yIr+BRH5DLLuhHzhgEPTB0IcYbhgq72GS4ZIRDtyQnLjNMOI2I5Xcdgoiv+FEfqOU8PMi8htB5DfashuGggNGQh8FfbThhjHyHisZJxnvwA3exG3GEreZoOS2fYj8xhH5TVTCLyWR33giv0mW3TAGHDAB+kTokww3TJb3FMlUyTQHbkhF3GYKcZvpSm47NZHfVCK/GUr4pSHym0bkN9OyGyaDA6ZDnwF9puGGWfKeLZkjmevADWmJ28wmbjNPyW2nI/KbQ+Q3Xwk/XyK/uUR+Cyy7YRY4YB70+dAXGG5YKO9FksWSJQ7c4EfcZhFxm6VKbtufyG8xkd8yJfwCiPyWEPktt+yGheCApdCXQV9uuGGFvFdKVklWO3BDIHGblcRt1ii57SAiv1VEfmuV8Asm8ltN5LfOshtWgAPWQF8LfZ3hhvXy3iDZKNnkwA0hxG02ELfZrOS2Q4n8NhL5bVHCLz2R3yYiv62W3bAeHLAZ+hboWw03bJP3dskOyU4HbshA3GY7cZtdSm47I5HfDiK/3Ur4ZSLy20nkt8eyG7aBA3ZB3w19j+GGvfLeJ9kvOeDADZmJ2+wjbnNQyW1nIfLbT+R3SAm/rER+B4j8Dlt2w15wwEHoh6AfNtxwRN5HJcckxx24IRtxm6PEbU4oue3sRH7HiPxOKuGXg8jvOJHfKctuOAIOOAH9JPRThhtOy/uM5KzknAM35CRuc4a4zXklt52LyO8skd8FJfxyE/mdI/K7aNkNp8EB56FfgH7RcMMleV+WXJFcdeCGPMRtLhO3uabktvMS+V0h8ruuhF8+Ir+rRH43LLvhEjjgGvTr0G8Ybrgp71uS25I7DtyQn7jNLeI2d5XcdgEiv9tEfveU8CtI5HeHyO++ZTfcBAfchX4P+n3DDQ/k/VDySPLYgRsKEbd5SNzmiZLbLkzk94jI76kSfkWI/B4T+T2z7IYH4IAn0J9Cf2a44bm8X0heSl45cENR4jYviNu8VnLbxYj8XhL5vVHCrziR3ysiv7eW3fAcHPAa+hvobw03vJP3e8kHyUcHbihB3OY9cZtPSm67JJHfByK/z0r4lSLy+0jk98WyG96BAz5B/wz9i+GGr/L+Jvku+eHADaWJ23wjbvNTyW2XIfL7TuT3Swm/skR+P4j8flt2w1dwwE/ov6D/NtzwR95/JWFCPMKEDbHvhnLEbf4St/EI0XHb5Yn8woTw+IVTwq8CkV9YIr/wIXbd8Acc8O/W/9fDQQ8f8l83RJB3REkkSWQHbqhI3CYicZsoSm67EpFfJCK/qEr4VSbyi0zkF82yGyKAA6JAjwo9muGG6PKOIYkpieXADVWI28QgbhNbyW1XJfKLSeQXRwm/akR+sYj84lp2Q3RwQGzocaDHNdwQT97xJQkkCR24oTpxm/jEbRIpue0aRH4JiPwSK+FXk8gvIZFfEstuiAcOSAQ9MfQkhhs85Z1UkkyS3IEbahG3SUrcJoWS265N5JeMyM9LCb86RH7Jify8LbvBExyQAroXdG/DDT7yTilJJUntwA11idukJG6TRslt1yPyS0Xkl1YJv/pEfqmJ/NJZdoMPOCAN9LTQ0xlu8JW3n8RfEuDADQ2I2/gRtwlUctsNifz8ifyClPBrROQXQOQXbNkNvuCAQOhB0IMNN4TIO1SSXpLBgRsaE7cJJW6TUcltNyHyS0/kl0kJv6ZEfhmI/DJbdkMIOCAj9EzQMxtuyCLvrJJskuwO3NCMuE1W4jY5lNx2cyK/bER+OZXwa0Hkl53IL5dlN2QBB+SAnhN6LsMNueWdR5L337c5cENL4jZ5iNvkV3LbrYj88hL5FVDCrzWRXz4iv4KW3ZAbHJAfegHoBQ03FJJ3YUkRSVEHbmhD3KYwcZtiSm67LZFfESK/4kr4tSPyK0rkV8KyGwqBA4pBLw69hOGGkvIuJSktKePADe2J25QiblNWyW13IPIrTeRXTgm/jkR+ZYj8ylt2Q0lwQFno5aCXN9xQQd4VJZUklR24oRNxm4rEbaooue3ORH6ViPyqKuHXhcivMpFfNctuqAAOqAK9KvRqhhuqy7uGpKaklgM3dCVuU4O4TW0lt92NyK8mkV8dJfy6E/nVIvKra9kN1cEBtaHXgV7XcEM9edeXNJA0dOCGHsRt6hO3aaTktnsS+TUg8mushF8vIr+GRH5NLLuhHjigEfTG0JsYbmgq72aS5pIWDtzQm7hNM+I2LZXcdh8iv+ZEfq2U8OtL5NeCyK+1ZTc0BQe0hN4KemvDDW3k3VbSTtLegRv6EbdpS9ymg5Lb7k/k147Ir6MSfgOI/NoT+XWy7IY24IAO0DtC72S4obO8u0i6Sro5cMNA4jZdiNt0V3Lbg4j8uhL59VDCbzCRXzciv56W3dAZHNAdeg/oPQ039JJ3b0kfSV8HbhhC3KY3cZt+Sm57KJFfHyK//kr4DSPy60vkN8CyG3qBA/pB7w99gOGGgfIeJBksGeLADcOJ2wwibjNUyW2PIPIbTOQ3TAm/kUR+Q4j8hlt2w0BwwFDow6APN9wwQt4jJaMkox24YRRxm5HEbcYoue3RRH6jiPzGKuE3hshvNJHfOMtuGAEOGAN9LPRxhhvGy3uCZKJkkgM3jCVuM4G4zWQltz2OyG8ikd8UJfzGE/lNIvKbatkN48EBk6FPgT7VcMM0eU+XzJDMdOCGCcRtphO3maXkticS+c0g8puthN8kIr+ZRH5zLLthGjhgFvTZ0OcYbpgr73mS+ZIFDtwwmbjNPOI2C5Xc9hQiv/lEfouU8JtK5LeAyG+xZTfMBQcshL4I+mLDDUvkvVSyTLLcgRumEbdZStxmhZLbnk7kt4zIb6USfjOI/JYT+a2y7IYl4IAV0FdCX2W4YbW810jWStY5cMNM4jZriNusV3Lbs4j81hL5bVDCbzaR3zoiv42W3bAaHLAe+gboGw03bJL3ZskWyVYHbphD3GYzcZttSm57LpHfFiK/7Ur4zSPy20rkt8OyGzaBA7ZB3w59h+GGnfLeJdkt2ePADfOJ2+wibrNXyW0vIPLbTeS3Twm/hUR+e4j89lt2w05wwF7o+6DvN9xwQN4HJYckhx24YRFxm4PEbY4oue3FRH6HiPyOKuG3hMjvMJHfMctuOAAOOAL9KPRjhhuOy/uE5KTklAM3LCVuc4K4zWklt72MyO8kkd8ZJfyWE/mdIvI7a9kNx8EBp6GfgX7WcMM5eZ+XXJBcdOCGFcRtzhO3uaTktlcS+V0g8rushN8qIr+LRH5XLLvhHDjgEvTL0K8Ybrgq72uS65IbDtywmrjNNeI2N5Xc9hoiv+tEfreU8FtL5HeDyO+2ZTdcBQfchH4L+m3DDXfkfVdyT3LfgRvWEbe5S9zmgZLbXk/kd4/I76ESfhuI/O4T+T2y7IY74IAH0B9Cf2S44bG8n0ieSp45cMNG4jZPiNs8V3Lbm4j8nhL5vVDCbzOR3zMiv5eW3fAYHPAc+gvoLw03vJL3a8kbyVsHbthC3OY1cZt3Sm57K5HfGyK/90r4bSPye0vk98GyG16BA95Bfw/9g+GGj/L+JPks+eLADduJ23wibvNVyW3vIPL7TOT3TQm/nUR+X4j8vlt2w0dwwFfo36B/N9zwQ94/Jb8kvx24YRdxm5/Ebf4oue3dRH6/iPz+KuG3h8jvN5FfmFC7bvgBDvgD/S/0f9+Abggrbw9JOEn4UPtu2EvcxiOUt02EUB23vY/ILxyRX0Ql/PYT+YUn8otk2Q1hQ//fARGgR4QeyXBDZHlHkUSVRHPghgPEbaIQt4mu5LYPEvlFJfKLoYTfISK/aER+MS27ITI4IDr0GNBjGm6IJe/YkjiSuA7ccJi4TWziNvGU3PYRIr84RH7xlfA7SuQXl8gvgWU3xAIHxIMeH3oCww0J5Z1IkliSxIEbjhG3SUTcxlPJbR8n8ktM5JdUCb8TRH5JiPySWXZDQnCAJ/Sk0JMZbkgu7xQSL4m3AzecJG6TgriNj5LbPkXk50Xkl1IJv9NEft5EfqksuyE5OMAHekroqQw3pJZ3GklaSToHbjhD3CYNcRtfJbd9lsgvLZGfnxJ+54j80hH5+Vt2Q2pwgC90P+j+hhsC5B0oCZIEO3DDeeI2gcRtQpTc9gUivyAiv1Al/C4S+QUT+aW37IYAcEAI9FDo6Q03ZJB3RkkmSWYHbrhE3CYjcZssSm77MpFfJiK/rEr4XSHyy0zkl82yGzKAA7JAzwo9m+GG7PLOIckpyeXADVeJ2+QgbpNbyW1fI/LLSeSXRwm/60R+uYj88lp2Q3ZwQG7oeaDnNdyQT975JQUkBR244QZxm/zEbQopue2bRH4FiPwKK+F3i8ivIJFfEctuyAcOKAS9MPQihhuKyruYpLikhAM33CZuU4y4TUklt32HyK84kV8pJfzuEvmVIPIrbdkNRcEBJaGXgl7acEMZeZeVlJOUd+CGe8RtyhK3qaDktu8T+ZUj8quohN8DIr/yRH6VLLuhDDigAvSK0CsZbqgs7yqSqpJqDtzwkLhNFeI21ZXc9iMiv6pEfjWU8HtM5FeNyK+mZTdUBgdUh14Dek3DDbXkXVtSR1LXgRueELepTdymnpLbfkrkV4fIr74Sfs+I/OoS+TWw7IZa4IB60OtDb2C4oaG8G0kaS5o4cMNz4jaNiNs0VXLbL4j8GhP5NVPC7yWRXxMiv+aW3dAQHNAUejPozQ03tJB3S0krSWsHbnhF3KYlcZs2Sm77NZFfKyK/tkr4vSHya03k186yG1qAA9pAbwu9neGG9vLuIOko6eTADW+J23QgbtNZyW2/I/LrSOTXRQm/90R+nYj8ulp2Q3twQGfoXaB3NdzQTd7dJT0kPR244QNxm+7EbXopue2PRH49iPx6K+H3icivJ5FfH8tu6AYO6AW9N/Q+hhv6yrufpL9kgAM3fCZu04+4zUAlt/2FyK8/kd8gJfy+EvkNIPIbbNkNfcEBA6EPgj7YcMMQeQ+VDJMMd+CGb8RthhK3GaHktr8T+Q0j8huphN8PIr/hRH6jLLthCDhgBPSR0EcZbhgt7zGSsZJxDtzwk7jNGOI245Xc9i8iv7FEfhOU8PtN5DeOyG+iZTeMBgeMhz4B+kTDDZPkPVkyRTLVgRv+ELeZTNxmmpLb/kvkN4XIb7oSfmHa8H5rKpHfDMtumAQOmAZ9OvQZhhtmynuWZLZkjgM3hCVuM4u4zVwlt+1B5DebyG+eEn7hiPzmEPnNt+yGmeCAudDnQZ9vuGGBvBdKFkkWO3BDeOI2C4nbLFFy2xGI/BYR+S1Vwi8ikd9iIr9llt2wABywBPpS6MsMNyyX9wrJSskqB26IRNxmBXGb1UpuOzKR30oivzVK+EUh8ltF5LfWshuWgwNWQ18Dfa3hhnXyXi/ZINnowA1RidusJ26zScltRyPy20Dkt1kJv+hEfhuJ/LZYdsM6cMAm6JuhbzHcsFXe2yTbJTscuCEGcZttxG12KrntmER+24n8dinhF4vIbweR327LbtgKDtgJfRf03YYb9sh7r2SfZL8DN8QmbrOXuM0BJbcdh8hvH5HfQSX84hL57SfyO2TZDXvAAQegH4R+yHDDYXkfkRyVHHPghnjEbY4Qtzmu5LbjE/kdJfI7oYRfAiK/Y0R+Jy274TA44Dj0E9BPGm44Je/TkjOSsw7ckJC4zWniNueU3HYiIr8zRH7nlfBLTOR3lsjvgmU3nAIHnIN+HvoFww0X5X1JcllyxYEbkhC3uUTc5qqS2/Yk8rtM5HdNCb+kRH5XiPyuW3bDRXDAVejXoF833HBD3jcltyS3HbghGXGbm8Rt7ii57eREfreI/O4q4ZeCyO82kd89y264AQ64A/0u9HuGG+7L+4HkoeSRAzd4Ebd5QNzmsZLb9ibye0jk90QJPx8iv0dEfk//j5q7iK0rjZaGnTjMzOSY2THbcWLHjsPMzIwOszHMzMzMzMzMzMzM9O9c/Vfa90y/qqOuwZLq7UF6n2etLrV60ORuuG/qgMem/MSUn1p0wzPj/dyYF8a8tEI32AF38xy4m1cit20P9HsB9Hst4ucA9HsJ9HtD7oZnpg54ZcqvTfmNRTe8Nd7vjHlvzAcrdIMjcDfvgLv5KHLbTkC/90C/TyJ+zkC/D0C/z+RueGvqgI+m/MmUP1t0wxfj/dWYb8Z8t0I3uAB38xW4mx8it+0K9PsG9Psp4ucG9PsO9PtF7oYvpg74Yco/TfmXRTf8/vc25q8xSXz43eAO3M0f4G6S+mjctgfQ7y/Qz0bEzxPol8QH55fMh9sNv00d8O/W/zfbmHIyn//bDcmNdwpjUhqTygrd4AXcTQrgblKL3LY30C8l0C+NiF8RoF8qoF9acjckN3VAalNOY8ppLbohnfFOb0wGYzJaoRt8gLtJD9xNJpHb9gX6ZQD6ZRbx8wP6ZQT6ZSF3QzpTB2Qy5cymnMWiG7Ia72zGZDcmhxW6wR+4m2zA3eQUue0AoF92oF8uEb9AoF8OoF9ucjdkNXVATlPOZcq5Lbohj/HOa0w+Y/JboRuCgLvJC9xNAZHbDgb65QP6FRTxCwH65Qf6FSJ3Qx5TBxQw5YKmXMiiG2yNd2Fj7Iyxt0I3FAXupjBwNw4itx0K9LMD+jmK+BUD+tkD/ZzI3WBr6gAHU3Y0ZSeLbnA23i7GuBrjZoVuKA7cjQtwN+4itx0G9HMF+nmI+IUD/dyAfp7kbnA2dYC7KXuYsqdFN3gZb29jihjjY4VuKAHcjTdwN74itx0B9CsC9PMT8YsE+vkA/fzJ3eBl6gBfU/YzZX+Lbggw3oHGBBkTbIVuKAncTSBwNyEitx0F9AsC+hUV8SsF9AsG+oWSuyHA1AEhplzUlEMtuqGY8S5uTJgx4VbohtLA3RQH7qaEyG2XAfqFAf0iRPzKAv3CgX6R5G4oZuqAEqYcYcqRFt1Q0nhHGVPKmNJW6IZywN1EAXdTRuS2ywP9SgH9yor4VQD6lQb6lSN3Q0lTB5Qx5bKmXM6iG8ob7wrGVDSmkhW6oSJwNxWAu6ksctuVgH4VgX5VRPwqA/0qAf2qkruhvKkDKptyFVOuatEN1Yx3dWNqGFPTCt1QBbib6sDd1BK57apAvxpAv9oiftWAfjWBfnXI3VDN1AG1TLm2Kdex6Ia6xrueMfWNaWCFbqgO3E094G4aitx2DaBffaBfIxG/mkC/BkC/xuRuqGvqgIam3MiUG1t0QxPj3dSYZsY0t0I31ALupilwNy1Ebrs20K8Z0K+liF8doF9zoF8rcjc0MXVAC1NuacqtLLqhtfFuY0xbY9pZoRvqAnfTBrib9iK3XQ/o1xbo10HErz7Qrx3QryO5G1qbOqC9KXcw5Y4W3dDJeHc2JtqYLlbohgbA3XQG7qaryG03BPpFA/26ifg1Avp1Afp1J3dDJ1MHdDXlbqbc3aIbehjvnsb0Mqa3FbqhMXA3PYG76SNy202Afr2Afn1F/JoC/XoD/fqRu6GHqQP6mHJfU+5n0Q39jfcAY2KMibVCNzQD7mYAcDdxIrfdHOgXA/SLF/FrAfSLBfolkLuhv6kD4kw53pQTLLoh0XgPNGaQMYOt0A0tgbsZCNzNEJHbbgX0GwT0Gyri1xroNxjoN4zcDYmmDhhiykNNeZhFNww33iOMGWnMKCt0QxvgbkYAdzNa5LbbAv1GAv3GiPi1A/qNAvqNJXfDcFMHjDblMaY81qIbxhnv8cZMMGaiFbqhPXA344G7mSRy2x2AfhOAfpNF/DoC/SYC/aaQu2GcqQMmmfJkU55i0Q1Tjfc0Y6YbM8MK3dAJuJtpwN3MFLntzkC/6UC/WSJ+0UC/GUC/2eRumGrqgJmmPMuUZ1t0wxzjPdeYecbMt0I3dAHuZi5wNwtEbrsr0G8e0G+hiF83oN98oN8icjfMMXXAAlNeaMqLLLphsfFeYsxSY5ZZoRu6A3ezBLib5SK33QPotxTot0LEryfQbxnQbyW5GxabOmC5Ka8w5ZUW3bDKeK82Zo0xa63QDb2Au1kN3M06kdvuDfRbA/RbL+LXB+i3Fui3gdwNq0wdsM6U15vyBotu2Gi8Nxmz2ZgtVuiGvsDdbALuZqvIbfcD+m0G+m0T8esP9NsC9NtO7oaNpg7YasrbTHm7RTfsMN47jdllzG4rdMMA4G52AnezR+S2Y4B+u4B+e0X8YoF+u4F++8jdsMPUAXtMea8p77Pohv3G+4AxB405ZIVuiAPu5gBwN4dFbjse6HcQ6HdExC8B6HcI6HeU3A37TR1w2JSPmPJRi244ZryPG3PCmJNW6IZE4G6OA3dzSuS2BwL9TgD9Tov4DQL6nQT6nSF3wzFTB5wy5dOmfMaiG84a73PGnDfmghW6YTBwN+eAu7kocttDgH7ngX6XRPyGAv0uAP0uk7vhrKkDLpryJVO+bNENV4z3VWOuGXPdCt0wDLibq8Dd3BC57eFAv2tAv5sifiOAfteBfrfI3XDF1AE3TPmmKd+y6IbbxvuOMXeNuWeFbhgJ3M0d4G7ui9z2KKDfXaDfAxG/0UC/e0C/h+RuuG3qgPum/MCUH1p0wyPj/diYJ8Y8tUI3jAHu5jFwN89Ebnss0O8J0O+5iN84oN9ToN8Lcjc8MnXAM1N+bsovLLrhpfF+ZcxrY95YoRvGA3fzCribtyK3PQHo9xro907EbyLQ7w3Q7z25G16aOuCtKb8z5fcW3fDBeH805pMxn63QDZOAu/kI3M0XkdueDPT7BPT7KuI3Bej3Gej3jdwNH0wd8MWUv5ryN4tu+G68fxjz05hfVuiGqcDd/ADu5rfIbU8D+v0E+v0R8ZsO9PsF9PtL7obvpg74bcp/TPmvRTck8bVJktQYG2OS+fK7YQZwN/++G7Wb5L4atz0T6GcD9Esh4jcL6JcM6JfSl9sN//45/98OSG7KKUw5pe//7YZUxju1MWmMSWuFbpgN3E1q4G7Sidz2HKBfGqBfehG/uUC/tEC/DORuSGXqgHSmnN6UM1h0Q0bjncmYzMZksUI3zAPuJhNwN1lFbns+0C8z0C+biN8CoF8WoF92cjdkNHVAVlPOZsrZLbohh/HOaUwuY3JboRsWAneTE7ibPCK3vQjolwvol1fEbzHQLzfQLx+5G3KYOiCPKec15XwW3ZDfeBcwpqAxhazQDUuAuykA3I2tyG0vBfoVBPoVFvFbBvQrBPSzI3dDflMH2JpyYVO2s+gGe+PtYIyjMU5W6IblwN04AHfjLHLbK4B+jkA/FxG/lUA/J6CfK7kb7E0d4GzKLqbsatENbsbb3RgPYzyt0A2rgLtxB+7GS+S2VwP9PIB+3iJ+a4B+nkC/IuRucDN1gJcpe5tyEYtu8DHevsb4GeNvhW5YC9yNL3A3ASK3vQ7o5wf0CxTxWw/08wf6BZG7wcfUAQGmHGjKQRbdEGy8Q4wpakyoFbphA3A3IcDdFBO57Y1Av6JAv+IifpuAfqFAvzByNwSbOqCYKRc35TCLbgj/903GRBgTaYVu2AzcTQngbkqK3PYWoF8E0C9KxG8r0C8S6FeK3A3hpg4oacpRplzKohtKG+8yxpQ1ppwVumEbcDdlgLspL3Lb24F+ZYF+FUT8dgD9ygH9KpK7obSpA8qbcgVTrmjRDZWMd2VjqhhT1QrdsBO4m8rA3VQTue1dQL8qQL/qIn67gX5VgX41yN1QydQB1Uy5uinXsOiGmsa7ljG1jaljhW7YA9xNLeBu6orc9l6gX22gXz0Rv31AvzpAv/rkbqhp6oC6plzPlOtbdEMD493QmEbGNLZCN+wH7qYhcDdNRG77ANCvEdCvqYjfQaBfY6BfM3I3NDB1QBNTbmrKzSy6obnxbmFMS2NaWaEbDgF30wK4m9Yit30Y6NcS6NdGxO8I0K8V0K8tuRuamzqgtSm3MeW2Ft3Qzni3N6aDMR2t0A1HgbtpD9xNJ5HbPgb06wD06yzidxzo1xHoF03uhnamDuhkyp1NOdqiG7oY767GdDOmuxW64QRwN12Bu+khctsngX7dgH49RfxOAf26A/16kbuhi6kDephyT1PuZdENvY13H2P6GtPPCt1wGribPsDd9Be57TNAv75AvwEifmeBfv2AfjHkbuht6oD+pjzAlGMsuiHWeMcZE29MghW64RxwN3HA3SSK3PZ5oF880G+giN8FoF8C0G8QuRtiTR2QaMoDTXmQRTcMNt5DjBlqzDArdMNF4G6GAHczXOS2LwH9hgL9Roj4XQb6DQP6jSR3w2BTBww35RGmPNKiG0YZ79HGjDFmrBW64QpwN6OBuxkncttXgX5jgH7jRfyuAf3GAv0mkLthlKkDxpnyeFOeYNENE433JGMmGzPFCt1wHbibScDdTBW57RtAv8lAv2kifjeBflOAftPJ3TDR1AFTTXmaKU+36IYZxnumMbOMmW2FbrgF3M1M4G7miNz2baDfLKDfXBG/O0C/2UC/eeRumGHqgDmmPNeU51l0w3zjvcCYhcYsskI33AXuZgFwN4tFbvse0G8h0G+JiN99oN8ioN9ScjfMN3XAYlNeYspLLbphmfFebswKY1ZaoRseAHezHLibVSK3/RDotwLot1rE7xHQbyXQbw25G5aZOmCVKa825TUW3bDWeK8zZr0xG6zQDY+Bu1kH3M1Gkdt+AvRbD/TbJOL3FOi3Aei3mdwNa00dsNGUN5nyZotu2GK8txqzzZjtVuiGZ8DdbAXuZofIbT8H+m0D+u0U8XsB9NsO9NtF7oYtpg7YYco7TXmXRTfsNt57jNlrzD4rdMNL4G72AHezX+S2XwH99gL9Doj4vQb67QP6HSR3w25TB+w35QOmfNCiGw4Z78PGHDHmqBW64Q1wN4eBuzkmcttvgX5HgH7HRfzeAf2OAv1OkLvhkKkDjpnycVM+YdENJ433KWNOG3PGCt3wHribU8DdnBW57Q9Av9NAv3Mifh+BfmeAfufJ3XDS1AFnTfmcKZ+36IYLxvuiMZeMuWyFbvgE3M1F4G6uiNz2Z6DfJaDfVRG/L0C/y0C/a+RuuGDqgCumfNWUr1l0w3XjfcOYm8bcskI3fAXu5gZwN7dFbvsb0O8m0O+OiN93oN8toN9dcjdcN3XAbVO+Y8p3LbrhnvG+b8wDYx5aoRt+AHdzH7ibRyK3/RPo9wDo91jE7xfQ7yHQ7wm5G+6ZOuCRKT825ScW3fDUeD8z5rkxL6zQDb+Bu3kG3M1Lkdv+A/R7DvR7JeL3F+j3Auj3mtwNT00d8NKUX5nya4tueGO83xrzzpj3VuiGJNHA/2YP3M0HkdtOCvR7B/T7KOJnA/R7D/T7RO6GN6YO+GDKH035k0U3fDbeX4z5asw3K3RDMuBuvgB3813ktpMD/b4C/X6I+KUA+n0D+v0kd8NnUwd8N+UfpvzToht+Ge/f//6aMX+t0A0pgbv5DdxNEj+N204F9PsD9Esq4pca6PcX6Gfjx+2GX6YO+Hfr/5uTmrKN3//thmTGO7kxKYxJ6cfvhjTA3ST3w+0mlchtpwX6pQD6pRbxSwf0Swn0S0PuhmSmDkhlyqlNOY1FN6Q13umMSW9MBit0Q3rgbtIBd5NR5LYzAP3SA/0yifhlBPplAPplJndDWlMHZDTlTKac2aIbshjvrMZkMya7FbohE3A3WYG7ySFy25mBftmAfjlF/LIA/bID/XKRuyGLqQNymHJOU85l0Q25jXceY/Iak88K3ZAVuJs8wN3kF7ntbEC/vEC/AiJ+2YF++YB+BcndkNvUAflNuYApF7TohkLG29aYwsbYWaEbcgB3Ywvcjb3IbecE+hUG+jmI+OUC+tkB/RzJ3VDI1AH2puxgyo4W3eBkvJ2NcTHG1QrdkBu4G2fgbtxEbjsP0M8F6Ocu4pcX6OcK9PMgd4OTqQPcTNndlD0susHTeHsZ421MESt0Qz7gbryAu/ERue38QD9voJ+viF8BoF8RoJ8fuRs8TR3gY8q+puxn0Q3+xjvAmEBjgqzQDQWBuwkA7iZY5LYLAf0CgX4hIn62QL8goF9Rcjf4mzog2JRDTLmoRTeEGu9ixhQ3JswK3VAYuJtiwN2Ei9y2HdCvONCvhIifPdAvDOgXQe6GUFMHhJtyCVOOsOiGSONd0pgoY0pZoRscgLspCdxNaZHbdgT6RQH9yoj4OQH9SgH9ypK7IdLUAaVNuYwpl7XohnLGu7wxFYypaIVucAbupjxwN5VEbtsF6FcB6FdZxM8V6FcR6FeF3A3lTB1QyZQrm3IVi26oaryrGVPdmBpW6AY34G6qAXdTU+S23YF+1YF+tUT8PIB+NYB+tcndUNXUATVNuZYp17bohjrGu64x9Yypb4Vu8ATupi5wNw1EbtsL6FcP6NdQxM8b6Fcf6NeI3A11TB3QwJQbmnIji25obLybGNPUmGZW6IYiwN00Ae6mucht+wD9mgL9Woj4+QL9mgH9WpK7obGpA5qbcgtTbmnRDa2Md2tj2hjT1grd4AfcTWvgbtqJ3LY/0K8N0K+9iF8A0K8t0K8DuRtamTqgnSm3N+UOFt3Q0Xh3MqazMdFW6IZA4G46AXfTReS2g4B+nYF+XUX8goF+0UC/buRu6GjqgC6m3NWUu1l0Q3fj3cOYnsb0skI3hAB30wO4m94it10U6NcT6NdHxC8U6NcL6NeX3A3dTR3Q25T7mHJfi27oZ7z7GzPAmBgrdEMx4G76A3cTK3LbxYF+A4B+cSJ+YUC/GKBfPLkb+pk6INaU40w53qIbEox3ojEDjRlkhW4IB+4mEbibwSK3XQLoNxDoN0TELwLoNwjoN5TcDQmmDhhsykNMeahFNwwz3sONGWHMSCt0QyRwN8OBuxklctslgX4jgH6jRfyigH4jgX5jyN0wzNQBo0x5tCmPseiGscZ7nDHjjZlghW4oBdzNOOBuJorcdmmg33ig3yQRvzJAvwlAv8nkbhhr6oCJpjzJlCdbdMMU4z3VmGnGTLdCN5QF7mYqcDczRG67HNBvGtBvpohfeaDfdKDfLHI3TDF1wAxTnmnKsyy6YbbxnmPMXGPmWaEbKgB3Mwe4m/kit10R6DcX6LdAxK8S0G8e0G8huRtmmzpgvikvMOWFFt2wyHgvNmaJMUut0A2VgbtZDNzNMpHbrgL0WwL0Wy7iVxXotxTot4LcDYtMHbDMlJeb8gqLblhpvFcZs9qYNVbohmrA3awC7matyG1XB/qtBvqtE/GrAfRbA/RbT+6GlaYOWGvK60x5vUU3bDDeG43ZZMxmK3RDTeBuNgJ3s0XktmsB/TYB/baK+NUG+m0G+m0jd8MGUwdsMeWtprzNohu2G+8dxuw0ZpcVuqEOcDc7gLvZLXLbdYF+O4F+e0T86gH9dgH99pK7YbupA3ab8h5T3mvRDfuM935jDhhz0ArdUB+4m/3A3RwSue0GQL8DQL/DIn4NgX4HgX5HyN2wz9QBh0z5sCkfseiGo8b7mDHHjTlhhW5oBNzNMeBuTorcdmOg33Gg3ykRvyZAvxNAv9Pkbjhq6oCTpnzKlE9bdMMZ433WmHPGnLdCNzQF7uYscDcXRG67GdDvHNDvoohfc6DfeaDfJXI3nDF1wAVTvmjKlyy64bLxvmLMVWOuWaEbWgB3cwW4m+sit90S6HcV6HdDxK8V0O8a0O8muRsumzrguinfMOWbFt1wy3jfNuaOMXet0A2tgbu5DdzNPZHbbgP0uwP0uy/i1xbodxfo94DcDbdMHXDPlO+b8gOLbnhovB8Z89iYJ1bohnbA3TwC7uapyG23B/o9Bvo9E/HrAPR7AvR7Tu6Gh6YOeGrKz0z5uUU3vDDeL415ZcxrK3RDR+BuXgJ380bktjsB/V4B/d6K+HUG+r0G+r0jd8MLUwe8MeW3pvzOohveG+8Pxnw05pMVuiEauJsPwN18FrntLkC/j0C/LyJ+XYF+n4B+X8nd8N7UAZ9N+Yspf7Xohm/G+7sxP4z5aYVu6AbczXfgbn6J3HZ3oN8PoN9vEb8eQL+fQL8/5G74ZuqAX6b825T/WHTDX+OdxN8mSVJjbPz53dATuJt/343aTTJ/jdvuBfRLCvRLLuLXG+hnA/RL4c/thr+mDvh36/+bk5tyCv//2w0pjXcqY1Ibk8YK3dAHuJtUwN2kFbntvkC/1EC/dCJ+/YB+aYB+6cndkNLUAWlNOZ0pp7fohgzGO6MxmYzJbIVu6A/cTUbgbrKI3PYAoF8moF9WEb8YoF9moF82cjdkMHVAFlPOasrZLLohu/HOYUxOY3JZoRtigbvJAdxNbpHbjgP65QT65RHxiwf65QL65SV3Q3ZTB+Q25TymnNeiG/IZ7/zGFDCmoBW6IQG4m/zA3RQSue1EoF8BoJ+tiN9AoF9BoF9hcjfkM3VAIVO2NeXCFt1gZ7ztjXEwxtEK3TAIuBt74G6cRG57MNDPAejnLOI3BOjnCPRzIXeDnakDnEzZ2ZRdLLrB1Xi7GeNujIcVumEocDduwN14itz2MKCfO9DPS8RvONDPA+jnTe4GV1MHeJqylyl7W3RDEePtY4yvMX5W6IYRwN34AHfjL3LbI4F+vkC/ABG/UUA/P6BfILkbipg6wN+UA0w50KIbgox3sDEhxhS1QjeMBu4mGLibUJHbHgP0CwH6FRPxGwv0Kwr0K07uhiBTB4SacjFTLm7RDWHGO/zfdxkTYYVuGAfcTThwN5Eitz0e6FcC6FdSxG8C0C8C6BdF7oYwUwdEmnJJU46y6IZSxru0MWWMKWuFbpgI3E1p4G7Kidz2JKBfGaBfeRG/yUC/skC/CuRuKGXqgHKmXN6UK1h0Q0XjXcmYysZUsUI3TAHuphJwN1VFbnsq0K8y0K+aiN80oF8VoF91cjdUNHVAVVOuZsrVLbqhhvGuaUwtY2pboRumA3dTE7ibOiK3PQPoVwvoV1fEbybQrzbQrx65G2qYOqCOKdc15XoW3VDfeDcwpqExjazQDbOAu2kA3E1jkdueDfRrCPRrIuI3B+jXCOjXlNwN9U0d0NiUm5hyU4tuaGa8mxvTwpiWVuiGucDdNAfuppXIbc8D+rUA+rUW8ZsP9GsJ9GtD7oZmpg5oZcqtTbmNRTe0Nd7tjGlvTAcrdMMC4G7aAXfTUeS2FwL92gP9Oon4LQL6dQD6dSZ3Q1tTB3Q05U6m3NmiG6KNdxdjuhrTzQrdsBi4my7A3XQXue0lQL+uQL8eIn5LgX7dgH49yd0QbeqA7qbcw5R7WnRDL+Pd25g+xvS1QjcsA+6mN3A3/URueznQrw/Qr7+I3wqgX1+g3wByN/QydUA/U+5vygMsuiHGeMcaE2dMvBW6YSVwN7HA3SSI3PYqoF8c0C9RxG810C8e6DeQ3A0xpg5IMOVEUx5o0Q2DjPdgY4YYM9QK3bAGuJvBwN0ME7nttUC/IUC/4SJ+64B+Q4F+I8jdMMjUAcNMebgpj7DohpHGe5Qxo40ZY4VuWA/czSjgbsaK3PYGoN9ooN84Eb+NQL8xQL/x5G4YaeqAsaY8zpTHW3TDBOM90ZhJxky2QjdsAu5mInA3U0RuezPQbxLQb6qI3xag32Sg3zRyN0wwdcAUU55qytMsumG68Z5hzExjZlmhG7YCdzMDuJvZIre9Deg3E+g3R8RvO9BvFtBvLrkbpps6YLYpzzHluRbdMM94zzdmgTELrdANO4C7mQ/czSKR294J9FsA9Fss4rcL6LcQ6LeE3A3zTB2wyJQXm/ISi25YaryXGbPcmBVW6IbdwN0sA+5mpcht7wH6LQf6rRLx2wv0WwH0W03uhqWmDlhpyqtMebVFN6wx3muNWWfMeit0wz7gbtYCd7NB5Lb3A/3WAf02ivgdAPqtB/ptInfDGlMHbDDljaa8yaIbNhvvLcZsNWabFbrhIHA3W4C72S5y24eAfluBfjtE/A4D/bYB/XaSu2GzqQO2m/IOU95p0Q27jPduY/YYs9cK3XAEuJvdwN3sE7nto0C/PUC//SJ+x4B+e4F+B8jdsMvUAftMeb8pH7DohoPG+5Axh405YoVuOA7czSHgbo6K3PYJoN9hoN8xEb+TQL8jQL/j5G44aOqAo6Z8zJSPW3TDCeN90phTxpy2QjecAu7mJHA3Z0Ru+zTQ7xTQ76yI3xmg32mg3zlyN5wwdcAZUz5ryucsuuG88b5gzEVjLlmhG84Cd3MBuJvLIrd9Duh3Eeh3RcTvPNDvEtDvKrkbzps64LIpXzHlqxbdcM14XzfmhjE3rdANF4C7uQ7czS2R274I9LsB9Lst4ncJ6HcT6HeH3A3XTB1wy5Rvm/Idi264a7zvGXPfmAdW6IbLwN3cA+7mochtXwH63Qf6PRLxuwr0ewD0e0zuhrumDnhoyo9M+bFFNzwx3k+NeWbMcyt0wzXgbp4Cd/NC5LavA/2eAf1eivjdAPo9B/q9InfDE1MHvDDll6b8yqIbXhvvN8a8NeadFbrhJnA3b4C7eS9y27eAfm+Bfh9E/G4D/d4B/T6Su+G1qQPem/IHU/5o0Q2fjPdnY74Y89UK3XAHuJvPwN18E7ntu0C/L0C/7yJ+94B+X4F+P8jd8MnUAd9M+bsp/7Dohp/G+5cxv//9dSt0w33gbn4Bd/NX5LYfAP1+A/2SBGj4PQT6/QH6JQ3gdsNPUwf8NeV/e/vfnDTg/3aDjfFOZkxyY1IE8LvhEXA3yQJwu0kpctuPgX7JgX6pRPyeAP1SAP1Sk7vBxtQBKU05lSmntuiGNMY7rTHpjElvhW54CtxNWuBuMojc9jOgXzqgX0YRv+dAv/RAv0zkbkhj6oAMppzRlDNZdENm453FmKzGZLNCN7wA7iYLcDfZRW77JdAvK9Avh4jfK6BfNqBfTnI3ZDZ1QHZTzmHKOS26IZfxzm1MHmPyWqEbXgN3kxu4m3wit/0G6JcH6JdfxO8t0C8v0K8AuRtymTognynnN+UCFt1Q0HgXMsbWmMJW6IZ3wN0UAu7GTuS23wP9bIF+9iJ+H4B+hYF+DuRuKGjqADtTtjdlB4tucDTeTsY4G+NihW74CNyNE3A3riK3/Qno5wz0cxPx+wz0cwH6uZO7wdHUAa6m7GbK7hbd4GG8PY3xMsbbCt3wBbgbT+Buiojc9legnxfQz0fE7xvQzxvo50vuBg9TBxQxZR9T9rXoBj/j7W9MgDGBVuiG78Dd+AN3EyRy2z+AfgFAv2ARv59Av0CgXwi5G/xMHRBkysGmHGLRDUWNd6gxxYwpbuqGpOCdhP7/fx/LP/f/1TQMfJPo3/3v+8IIvzv8P/67/31fOOF3l/iP/+7/+T7C7474j//uf98XQfjdkf/x3/3v+yIJv7vkf/x3//u+koTfHfUf/93/vi+K8LtL/cd/97/vK0X43aX/47/73/eVJvzuMv/x353ENsn//PuaDfjPTWqLMyz7Hzf851eWYGgDNCwnYFiOYJgMaFhewLA8wTA50LCCgGEFgmEKoGFFAcOKBMOUQMNKAoaVCIapgIaVBQwrEwxTAw2rCBhWIRimARpWFTCsSjBMCzSsJmBYjWCYDmhYXcCwOsEwPdCwhoBhDYJhBqBhTQHDmgTDjEDDWgKGtQiGmYCGtQUMaxMMMwMN6wgY1iEYZgEa1hUwrEswzAo0rCdgWI9gmA1oWF/AsD7BMDvQsIGAYQOCYQ6gYUMBw4YEw5xAw0YCho0IhrmAho0FDBsTDHMDDZsIGDYhGOYBGjYVMGxKMMwLNGwmYNiMYJgPaNhcwLA5wTA/0LCFgGELgmEBoGFLAcOWBMOCQMNWAoatCIaFgIatBQxbEwxtgYZtBAzbEAwLAw3bChi2JRjaAQ3bCRi2IxjaAw3bCxi2Jxg6AA07CBh2IBg6Ag07Chh2JBg6AQ07CRh2Ihg6Aw07Cxh2Jhi6AA2jBQyjCYauQMMuAoZdCIZuQMOuAoZdCYbuQMNuAobdCIYeQMPuAobdCYaeQMMeAoY9CIZeQMOeAoY9CYbeQMNeAoa9CIZFgIa9BQx7Ewx9gIZ9BAz7EAx9gYZ9BQz7Egz9gIb9BAz7EQz9gYb9BQz7EwwDgIYDBAwHEAwDgYYxAoYxBMMgoGGsgGEswTAYaBgnYBhHMAwBGsYLGMYTDIsCDRMEDBMIhqFAw0QBw0SCYTGg4UABw4EEw+JAw0EChoMIhmFAw8EChoMJhuFAwyEChkMIhiWAhkMFDIcSDCOAhsMEDIcRDCOBhsMFDIcTDEsCDUcIGI4gGEYBDUcKGI4kGJYCGo4SMBxFMCwNNBwtYDiaYFgGaDhGwHAMwbAs0HCsgOFYgmE5oOE4AcNxBMPyQMPxAobjCYYVgIYTBAwnEAwrAg0nChhOJBhWAhpOEjCcRDCsDDScLGA4mWBYBWg4RcBwCsGwKtBwqoDhVIJhNaDhNAHDaQTD6kDD6QKG0wmGNYCGMwQMZxAMawINZwoYziQY1gIazhIwnEUwrA00nC1gOJtgWAdoOEfAcA7BsC7QcK6A4VyCYT2g4TwBw3kEw/pAw/kChvMJhg2AhgsEDBcQDBsCDRcKGC4kGDYCGi4SMFxEMGwMNFwsYLiYYNgEaLhEwHAJwbAp0HCpgOFSgmEzoOEyAcNlBMPmQMPlAobLCYYtgIYrBAxXEAxbAg1XChiuJBi2AhquEjBcRTBsDTRcLWC4mmDYBmi4RsBwDcGwLdBwrYDhWoJhO6DhOgHDdQTD9kDD9QKG6wmGHYCGGwQMNxAMOwINNwoYbiQYdgIabhIw3EQw7Aw03CxguJlgGA003CJguIVg2AVouFXAcCvBsCvQcJuA4TaCYTeg4XYBw+0Ew+5Awx0ChjsIhj2AhjsFDHcSDHsCDXcJGO4iGPYCGu4WMNxNMOwNNNwjYLiHYNgHaLhXwHAvwbAv0HCfgOE+gmE/oOF+AcP9BMP+QMMDAoYHCIYDgIYHBQwPEgxjgIaHBAwPEQxjgYaHBQwPEwzjgIZHBAyPEAzjgYZHBQyPEgwTgIbHBAyPEQwTgYbHBQyPEwwHAg1PCBieIBgOAhqeFDA8STAcDDQ8JWB4imA4BGh4WsDwNMFwKNDwjIDhGYLhMKDhWQHDswTD4UDDcwKG5wiGI4CG5wUMzxMMRwINLwgYXiAYjgIaXhQwvEgwHA00vCRgeIlgOAZoeFnA8DLBcCzQ8IqA4RWC4Tig4VUBw6sEw/FAw2sChtcIhhOAhtcFDK8TDCcCDW8IGN4gGE4CGt4UMLxJMJwMNLwlYHiLYDgFaHhbwPA2wXAq0PCOgOEdguE0oOFdAcO7BMPpQMN7Aob3CIYzgIb3BQzvEwxnAg0fCBg+IBjOAho+FDB8SDCcDTR8JGD4iGA4B2j4WMDwMcFwLtDwiYDhE4LhPKDhUwHDpwTD+UDDZwKGzwiGC4CGzwUMnxMMFwINXwgYviAYLgIavhQwfEkwXAw0fCVg+IpguARo+FrA8DXBcCnQ8I2A4RuC4TKg4VsBw7cEw+VAw3cChu8IhiuAhu8FDN8TDFcCDT8IGH4gGK4CGn4UMPxIMFwNNPwkYPiJYLgGaPhZwPAzwXAt0PCLgOEXguE6oOFXAcOvBMP1QMNvAobfCIYbgIbfBQy/Eww3Ag1/CBj+IBhuAhr+FDD8STDcDDT8JWD4i2C4BWj4W8DwN8FwK9Dwj4DhH4LhNqDhXwHDvwTD7UDDJIH/fcN/34g23AE0TCpgmJRguBNoaCNgaEMw3AU0TCZgmIxguBtomFzAMDnBcA/QMIWAYQqC4V6gYUoBw5QEw31Aw1QChqkIhvuBhqkFDFMTDA8ADdMIGKYhGB4EGqYVMExLMDwENEwnYJiOYHgYaJhewDA9wfAI0DCDgGEGguFRoGFGAcOMBMNjQMNMAoaZCIbHgYaZBQwzEwxPAA2zCBhmIRieBBpmFTDMSjA8BTTMJmCYjWB4GmiYXcAwO8HwDNAwh4BhDoLhWaBhTgHDnATDc0DDXAKGuQiG54GGuQUMcxMMLwAN8wgY5iEYXgQa5hUwzEswvAQ0zCdgmI9geBlomF/AMD/B8ArQsICAYQGC4VWgYUEBw4IEw2tAw0IChoUIhteBhrYChrYEwxtAw8IChoUJhjeBhnYChnYEw1tAQ3sBQ3uC4W2goYOAoQPB8A7Q0FHA0JFgeBdo6CRg6EQwvAc0dBYwdCYY3gcauggYuhAMHwANXQUMXQmGD4GGbgKGbgTDR0BDdwFDd4LhY6Chh4ChB8HwCdDQU8DQk2D4FGjoJWDoRTB8BjT0FjD0Jhg+BxoWETAsQjB8ATT0ETD0IRi+BBr6Chj6EgxfAQ39BAz9CIavgYb+Aob+BMM3QMMAAcMAguFboGGggGEgwfAd0DBIwDCIYPgeaBgsYBhMMPwANAwRMAwhGH4EGhYVMCxKMPwENAwVMAwlGH4GGhYTMCxGMPwCNCwuYFicYPgVaBgmYBhGMPwGNAwXMAwnGH4HGpYQMCxBMPwBNIwQMIwgGP4EGkYKGEYSDH8BDUsKGJYkGP4GGkYJGEYRDP8ADUsJGJYiGP4FGpYWMCxNMExSGGdYRsCwDMEwKdCwrIBhWYKhDdCwnIBhOYJhMqBheQHD8gTD5EDDCgKGFQiGKYCGFQUMKxIMUwINKwkYViIYpgIaVhYwrEwwTA00rCJgWIVgmAZoWFXAsCrBMC3QsJqAYTWCYTqgYXUBw+oEw/RAwxoChjUIhhmAhjUFDGsSDDMCDWsJGNYiGGYCGtYWMKxNMMwMNKwjYFiHYJgFaFhXwLAuwTAr0LCegGE9gmE2oGF9AcP6BMPsQMMGAoYNCIY5gIYNBQwbEgxzAg0bCRg2IhjmAho2FjBsTDDMDTRsImDYhGCYB2jYVMCwKcEwL9CwmYBhM4JhPqBhcwHD5gTD/EDDFgKGLQiGBYCGLQUMWxIMCwINWwkYtiIYFgIathYwbE0wtAUathEwbEMwLAw0bCtg2JZgaAc0bCdg2I5gaA80bC9g2J5g6AA07CBg2IFg6Ag07Chg2JFg6AQ07CRg2Ilg6Aw07Cxg2Jlg6AI0jBYwjCYYugINuwgYdiEYugENuwoYdiUYugMNuwkYdiMYegANuwsYdicYegINewgY9iAYegENewoY9iQYegMNewkY9iIYFgEa9hYw7E0w9AEa9hEw7EMw9AUa9hUw7Esw9AMa9hMw7Ecw9Aca9hcw7E8wDAAaDhAwHEAwDAQaxggYxhAMg4CGsQKGsQTDYKBhnIBhHMEwBGgYL2AYTzAsCjRMEDBMIBiGAg0TBQwTCYbFgIYDBQwHEgyLAw0HCRgOIhiGAQ0HCxgOJhiGAw2HCBgOIRiWABoOFTAcSjCMABoOEzAcRjCMBBoOFzAcTjAsCTQcIWA4gmAYBTQcKWA4kmBYCmg4SsBwFMGwNNBwtIDhaIJhGaDhGAHDMQTDskDDsQKGYwmG5YCG4wQMxxEMywMNxwsYjicYVgAaThAwnEAwrAg0nChgOJFgWAloOEnAcBLBsDLQcLKA4WSCYRWg4RQBwykEw6pAw6kChlMJhtWAhtMEDKcRDKsDDacLGE4nGNYAGs4QMJxBMKwJNJwpYDiTYFgLaDhLwHAWwbA20HC2gOFsgmEdoOEcAcM5BMO6QMO5AoZzCYb1gIbzBAznEQzrAw3nCxjOJxg2ABouEDBcQDBsCDRcKGC4kGDYCGi4SMBwEcGwMdBwsYDhYoJhE6DhEgHDJQTDpkDDpQKGSwmGzYCGywQMlxEMmwMNlwsYLicYtgAarhAwXEEwbAk0XClguJJg2ApouErAcBXBsDXQcLWA4WqCYRug4RoBwzUEw7ZAw7UChmsJhu2AhusEDNcRDNsDDdcLGK4nGHYAGm4QMNxAMOwINNwoYLiRYNgJaLhJwHATwbAz0HCzgOFmgmE00HCLgOEWgmEXoOFWAcOtBMOuQMNtAobbCIbdgIbbBQy3Ewy7Aw13CBjuIBj2ABruFDDcSTDsCTTcJWC4i2DYC2i4W8BwN8GwN9Bwj4DhHoJhH6DhXgHDvQTDvkDDfQKG+wiG/YCG+wUM9xMM+wMNDwgYHiAYDgAaHhQwPEgwjAEaHhIwPEQwjAUaHhYwPEwwjAMaHhEwPEIwjAcaHhUwPEowTAAaHhMwPEYwTAQaHhcwPE4wHAg0PCFgeIJgOAhoeFLA8CTBcDDQ8JSA4SmC4RCg4WkBw9MEw6FAwzMChmcIhsOAhmcFDM8SDIcDDc8JGJ4jGI4AGp4XMDxPMBwJNLwgYHiBYDgKaHhRwPAiwXA00PCSgOElguEYoOFlAcPLBMOxQMMrAoZXCIbjgIZXBQyvEgzHAw2vCRheIxhOABpeFzC8TjCcCDS8IWB4g2A4CWh4U8DwJsFwMtDwloDhLYLhFKDhbQHD2wTDqUDDOwKGdwiG04CGdwUM7xIMpwMN7wkY3iMYzgAa3hcwvE8wnAk0fCBg+IBgOAto+FDA8CHBcDbQ8JGA4SOC4Ryg4WMBw8cEw7lAwycChk8IhvOAhk8FDJ8SDOcDDZ8JGD4jGC4AGj4XMHxOMFwINHwhYPiCYLgIaPhSwPAlwXAx0PCVgOErguESoOFrAcPXBMOlQMM3AoZvCIbLgIZvBQzfEgyXAw3fCRi+IxiuABq+FzB8TzBcCTT8IGD4gWC4Cmj4UcDwI8FwNdDwk4DhJ4LhGqDhZwHDzwTDtUDDLwKGXwiG64CGXwUMvxIM1wMNvwkYfiMYbgAafhcw/E4w3Ag0/CFg+INguAlo+FPA8CfBcDPQ8JeA4S+C4Rag4W8Bw98Ew61Awz8Chn8IhtuAhn8FDP8SDLcDDZME/fcN/30j2nAH0DCpgGFSguFOoKGNgKENwXAX0DCZgGEyguFuoGFyAcPkBMM9QMMUAoYpCIZ7gYYpBQxTEgz3AQ1TCRimIhjuBxqmFjBMTTA8ADRMI2CYhmB4EGiYVsAwLcHwENAwnYBhOoLhYaBhegHD9ATDI0DDDAKGGQiGR4GGGQUMMxIMjwENMwkYZiIYHgcaZhYwzEwwPAE0zCJgmIVgeBJomFXAMCvB8BTQMJuAYTaC4WmgYXYBw+wEwzNAwxwChjkIhmeBhjkFDHMSDM8BDXMJGOYiGJ4HGuYWMMxNMLwANMwjYJiHYHgRaJhXwDAvwfAS0DCfgGE+guFloGF+AcP8BMMrQMMCAoYFCIZXgYYFBQwLEgyvAQ0LCRgWIhheBxraChjaEgxvAA0LCxgWJhjeBBraCRjaEQxvAQ3tBQztCYa3gYYOAoYOBMM7QENHAUNHguFdoKGTgKETwfAe0NBZwNCZYHgfaOgiYOhCMHwANHQVMHQlGD4EGroJGLoRDB8BDd0FDN0Jho+Bhh4Chh4EwydAQ08BQ0+C4VOgoZeAoRfB8BnQ0FvA0Jtg+BxoWETAsAjB8AXQ0EfA0Idg+BJo6Ctg6EswfAU09BMw9CMYvgYa+gsY+hMM3wANAwQMAwiGb4GGgQKGgQTDd0DDIAHDIILhe6BhsIBhMMHwA9AwRMAwhGD4EWhYVMCwKMHwE9AwVMAwlGD4GWhYTMCwGMHwC9CwuIBhcYLhV6BhmIBhGMHwG9AwXMAwnGD4HWhYQsCwBMHwB9AwQsAwgmD4E2gYKWAYSTD8BTQsKWBYkmD4G2gYJWAYRTD8AzQsJWBYimD4F2hYWsCwNMEwiR3OsIyAYRmCYVKgYVkBw7IEQxugYTkBw3IEw2RAw/IChuUJhsmBhhUEDCsQDFMADSsKGFYkGKYEGlYSMKxEMEwFNKwsYFiZYJgaaFhFwLAKwTAN0LCqgGFVgmFaoGE1AcNqBMN0QMPqAobVCYbpgYY1BAxrEAwzAA1rChjWJBhmBBrWEjCsRTDMBDSsLWBYm2CYGWhYR8CwDsEwC9CwroBhXYJhVqBhPQHDegTDbEDD+gKG9QmG2YGGDQQMGxAMcwANGwoYNiQY5gQaNhIwbEQwzAU0bCxg2JhgmBto2ETAsAnBMA/QsKmAYVOCYV6gYTMBw2YEw3xAw+YChs0JhvmBhi0EDFsQDAsADVsKGLYkGBYEGrYSMGxFMCwENGwtYNiaYGgLNGwjYNiGYFgYaNhWwLAtwdAOaNhOwLAdwdAeaNhewLA9wdABaNhBwLADwdARaNhRwLAjwdAJaNhJwLATwdAZaNhZwLAzwdAFaBgtYBhNMHQFGnYRMOxCMHQDGnYVMOxKMHQHGnYTMOxGMPQAGnYXMOxOMPQEGvYQMOxBMPQCGvYUMOxJMPQGGvYSMOxFMCwCNOwtYNibYOgDNOwjYNiHYOgLNOwrYNiXYOgHNOwnYNiPYOgPNOwvYNifYBgANBwgYDiAYBgINIwRMIwhGAYBDWMFDGMJhsFAwzgBwziCYQjQMF7AMJ5gWBRomCBgmEAwDAUaJgoYJhIMiwENBwoYDiQYFgcaDhIwHEQwDAMaDhYwHEwwDAcaDhEwHEIwLAE0HCpgOJRgGAE0HCZgOIxgGAk0HC5gOJxgWBJoOELAcATBMApoOFLAcCTBsBTQcJSA4SiCYWmg4WgBw9EEwzJAwzEChmMIhmWBhmMFDMcSDMsBDccJGI4jGJYHGo4XMBxPMKwANJwgYDiBYFgRaDhRwHAiwbAS0HCSgOEkgmFloOFkAcPJBMMqQMMpAoZTCIZVgYZTBQynEgyrAQ2nCRhOIxhWBxpOFzCcTjCsATScIWA4g2BYE2g4U8BwJsGwFtBwloDhLIJhbaDhbAHD2QTDOkDDOQKGcwiGdYGGcwUM5xIM6wEN5wkYziMY1gcazhcwnE8wbAA0XCBguIBg2BBouFDAcCHBsBHQcJGA4SKCYWOg4WIBw8UEwyZAwyUChksIhk2BhksFDJcSDJsBDZcJGC4jGDYHGi4XMFxOMGwBNFwhYLiCYNgSaLhSwHAlwbAV0HCVgOEqgmFroOFqAcPVBMM2QMM1AoZrCIZtgYZrBQzXEgzbAQ3XCRiuIxi2BxquFzBcTzDsADTcIGC4gWDYEWi4UcBwI8GwE9Bwk4DhJoJhZ6DhZgHDzQTDaKDhFgHDLQTDLkDDrQKGWwmGXYGG2wQMtxEMuwENtwsYbicYdgca7hAw3EEw7AE03ClguJNg2BNouEvAcBfBsBfQcLeA4W6CYW+g4R4Bwz0Ewz5Aw70ChnsJhn2BhvsEDPcRDPsBDfcLGO4nGPYHGh4QMDxAMBwANDwoYHiQYBgDNDwkYHiIYBgLNDwsYHiYYBgHNDwiYHiEYBgPNDwqYHiUYJgANDwmYHiMYJgINDwuYHicYDgQaHhCwPAEwXAQ0PCkgOFJguFgoOEpAcNTBMMhQMPTAoanCYZDgYZnBAzPEAyHAQ3PChieJRgOBxqeEzA8RzAcATQ8L2B4nmA4Emh4QcDwAsFwFNDwooDhRYLhaKDhJQHDSwTDMUDDywKGlwmGY4GGVwQMrxAMxwENrwoYXiUYjgcaXhMwvEYwnAA0vC5geJ1gOBFoeEPA8AbBcBLQ8KaA4U2C4WSg4S0Bw1sEwylAw9sChrcJhlOBhncEDO8QDKcBDe8KGN4lGE4HGt4TMLxHMJwBNLwvYHifYDgTaPhAwPABwXAW0PChgOFDguFsoOEjAcNHBMM5QMPHAoaPCYZzgYZPBAyfEAznAQ2fChg+JRjOBxo+EzB8RjBcADR8LmD4nGC4EGj4QsDwBcFwEdDwpYDhS4LhYqDhKwHDVwTDJUDD1wKGrwmGS4GGbwQM3xAMlwEN3woYviUYLgcavhMwfEcwXAE0fC9g+J5guBJo+EHA8APBcBXQ8KOA4UeC4Wqg4ScBw08EwzVAw88Chp8JhmuBhl8EDL8QDNcBDb8KGH4lGK4HGn4TMPxGMNwANPwuYPidYLgRaPhDwPAHwXAT0PCngOFPguFmoOEvAcNfBMMtQMPfAoa/CYZbgYZ/BAz/EAy3AQ3/Chj+JRhuBxomCf7vG/77RrThDqBhUgHDpATDnUBDGwFDG4LhLqBhMgHDZATD3UDD5AKGyQmGe4CGKQQMUxAM9wINUwoYpiQY7gMaphIwTEUw3A80TC1gmJpgeABomEbAMA3B8CDQMK2AYVqC4SGgYToBw3QEw8NAw/QChukJhkeAhhkEDDMQDI8CDTMKGGYkGB4DGmYSMMxEMDwONMwsYJiZYHgCaJhFwDALwfAk0DCrgGFWguEpoGE2AcNsBMPTQMPsAobZCYZngIY5BAxzEAzPAg1zChjmJBieAxrmEjDMRTA8DzTMLWCYm2B4AWiYR8AwD8HwItAwr4BhXoLhJaBhPgHDfATDy0DD/AKG+QmGV4CGBQQMCxAMrwINCwoYFiQYXgMaFhIwLEQwvA40tBUwtCUY3gAaFhYwLEwwvAk0tBMwtCMY3gIa2gsY2hMMbwMNHQQMHQiGd4CGjgKGjgTDu0BDJwFDJ4LhPaChs4ChM8HwPtDQRcDQhWD4AGjoKmDoSjB8CDR0EzB0Ixg+Ahq6Cxi6EwwfAw09BAw9CIZPgIaeAoaeBMOnQEMvAUMvguEzoKG3gKE3wfA50LCIgGERguELoKGPgKEPwfAl0NBXwNCXYPgKaOgnYOhHMHwNNPQXMPQnGL4BGgYIGAYQDN8CDQMFDAMJhu+AhkEChkEEw/dAw2ABw2CC4QegYYiAYQjB8CPQsKiAYVGC4SegYaiAYSjB8DPQsJiAYTGC4RegYXEBw+IEw69AwzABwzCC4TegYbiAYTjB8DvQsISAYQmC4Q+gYYSAYQTB8CfQMFLAMJJg+AtoWFLAsCTB8DfQMErAMIpg+AdoWErAsBTB8C/QsLSAYWmCYRJ7nGEZAcMyBMOkQMOyAoZlCYY2QMNyAoblCIbJgIblBQzLEwyTAw0rCBhWIBimABpWFDCsSDBMCTSsJGBYiWCYCmhYWcCwMsEwNdCwioBhFYJhGqBhVQHDqgTDtEDDagKG1QiG6YCG1QUMqxMM0wMNawgY1iAYZgAa1hQwrEkwzAg0rCVgWItgmAloWFvAsDbBMDPQsI6AYR2CYRagYV0Bw7oEw6xAw3oChvUIhtmAhvUFDOsTDLMDDRsIGDYgGOYAGjYUMGxIMMwJNGwkYNiIYJgLaNhYwLAxwTA30LCJgGETgmEeoGFTAcOmBMO8QMNmAobNCIb5gIbNBQybEwzzAw1bCBi2IBgWABq2FDBsSTAsCDRsJWDYimBYCGjYWsCwNcHQFmjYRsCwDcGwMNCwrYBhW4KhHdCwnYBhO4KhPdCwvYBhe4KhA9Cwg4BhB4KhI9Cwo4BhR4KhE9Cwk4BhJ4KhM9Cws4BhZ4KhC9AwWsAwmmDoCjTsImDYhWDoBjTsKmDYlWDoDjTsJmDYjWDoATTsLmDYnWDoCTTsIWDYg2DoBTTsKWDYk2DoDTTsJWDYi2BYBGjYW8CwN8HQB2jYR8CwD8HQF2jYV8CwL8HQD2jYT8CwH8HQH2jYX8CwP8EwAGg4QMBwAMEwEGgYI2AYQzAMAhrGChjGEgyDgYZxAoZxBMMQoGG8gGE8wbAo0DBBwDCBYBgKNEwUMEwkGBYDGg4UMBxIMCwONBwkYDiIYBgGNBwsYDiYYBgONBwiYDiEYFgCaDhUwHAowTACaDhMwHAYwTASaDhcwHA4wbAk0HCEgOEIgmEU0HCkgOFIgmEpoOEoAcNRBMPSQMPRAoajCYZlgIZjBAzHEAzLAg3HChiOJRiWAxqOEzAcRzAsDzQcL2A4nmBYAWg4QcBwAsGwItBwooDhRIJhJaDhJAHDSQTDykDDyQKGkwmGVYCGUwQMpxAMqwINpwoYTiUYVgMaThMwnEYwrA40nC5gOJ1gWANoOEPAcAbBsCbQcKaA4UyCYS2g4SwBw1kEw9pAw9kChrMJhnWAhnMEDOcQDOsCDecKGM4lGNYDGs4TMJxHMKwPNJwvYDifYNgAaLhAwHABwbAh0HChgOFCgmEjoOEiAcNFBMPGQMPFAoaLCYZNgIZLBAyXEAybAg2XChguJRg2AxouEzBcRjBsDjRcLmC4nGDYAmi4QsBwBcGwJdBwpYDhSoJhK6DhKgHDVQTD1kDD1QKGqwmGbYCGawQM1xAM2wIN1woYriUYtgMarhMwXEcwbA80XC9guJ5g2AFouEHAcAPBsCPQcKOA4UaCYSeg4SYBw00Ew85Aw80ChpsJhtFAwy0ChlsIhl2AhlsFDLcSDLsCDbcJGG4jGHYDGm4XMNxOMOwONNwhYLiDYNgDaLhTwHAnwbAn0HCXgOEugmEvoOFuAcPdBMPeQMM9AoZ7CIZ9gIZ7BQz3Egz7Ag33CRjuIxj2AxruFzDcTzDsDzQ8IGB4gGA4AGh4UMDwIMEwBmh4SMDwEMEwFmh4WMDwMMEwDmh4RMDwCMEwHmh4VMDwKMEwAWh4TMDwGMEwEWh4XMDwOMFwINDwhIDhCYLhIKDhSQHDkwTDwUDDUwKGpwiGQ4CGpwUMTxMMhwINzwgYniEYDgManhUwPEswHA40PCdgeI5gOAJoeF7A8DzBcCTQ8IKA4QWC4Sig4UUBw4sEw9FAw0sChpcIhmOAhpcFDC8TDMcCDa8IGF4hGI4DGl4VMLxKMBwPNLwmYHiNYDgBaHhdwPA6wXAi0PCGgOENguEkoOFNAcObBMPJQMNbAoa3CIZTgIa3BQxvEwynAg3vCBjeIRhOAxreFTC8SzCcDjS8J2B4j2A4A2h4X8DwPsFwJtDwgYDhA4LhLKDhQwHDhwTD2UDDRwKGjwiGc4CGjwUMHxMM5wINnwgYPiEYzgMaPhUwfEownA80fCZg+IxguABo+FzA8DnBcCHQ8IWA4QuC4SKg4UsBw5cEw8VAw1cChq8IhkuAhq8FDF8TDJcCDd8IGL4hGC4DGr4VMHxLMFwONHwnYPiOYLgCaPhewPA9wXAl0PCDgOEHguEqoOFHAcOPBMPVQMNPAoafCIZrgIafBQw/EwzXAg2/CBh+IRiuAxp+FTD8SjBcDzT8JmD4jWC4AWj4XcDwO8FwI9Dwh4DhD4LhJqDhTwHDnwTDzUDDXwKGvwiGW4CGvwUMfxMMtwIN/wgY/iEYbgMa/hUw/Esw3A40TBLy3zf8941owx1Aw6QChkkJhjuBhjYChjYEw11Aw2QChskIhruBhskFDJMTDPcADVMIGKYgGO4FGqYUMExJMNwHNEwlYJiKYLgfaJhawDA1wfAA0DCNgGEaguFBoGFaAcO0BMNDQMN0AobpCIaHgYbpBQzTEwyPAA0zCBhmIBgeBRpmFDDMSDA8BjTMJGCYiWB4HGiYWcAwM8HwBNAwi4BhFoLhSaBhVgHDrATDU0DDbAKG2QiGp4GG2QUMsxMMzwANcwgY5iAYngUa5hQwzEkwPAc0zCVgmItgeB5omFvAMDfB8ALQMI+AYR6C4UWgYV4Bw7wEw0tAw3wChvkIhpeBhvkFDPMTDK8ADQsIGBYgGF4FGhYUMCxIMLwGNCwkYFiIYHgdaGgrYGhLMLwBNCwsYFiYYHgTaGgnYGhHMLwFNLQXMLQnGN4GGjoIGDoQDO8ADR0FDB0JhneBhk4Chk4Ew3tAQ2cBQ2eC4X2goYuAoQvB8AHQ0FXA0JVg+BBo6CZg6EYwfAQ0dBcwdCcYPgYaeggYehAMnwANPQUMPQmGT4GGXgKGXgTDZ0BDbwFDb4Lhc6BhEQHDIgTDF0BDHwFDH4LhS6Chr4ChL8HwFdDQT8DQj2D4GmjoL2DoTzB8AzQMEDAMIBi+BRoGChgGEgzfAQ2DBAyDCIbvgYbBAobBBMMPQMMQAcMQguFHoGFRAcOiBMNPQMNQAcNQguFnoGExAcNiBMMvQMPiAobFCYZfgYZhAoZhBMNvQMNwAcNwguF3oGEJAcMSBMMfQMMIAcMIguFPoGGkgGEkwfAX0LCkgGFJguFvoGGUgGEUwfAP0LCUgGEpguFfoGFpAcPSBMMkDjjDMgKGZQiGSYGGZQUMyxIMbYCG5QQMyxEMkwENywsYlicYJgcaVhAwrEAwTAE0rChgWJFgmBJoWEnAsBLBMBXQsLKAYWWCYWqgYRUBwyoEwzRAw6oChlUJhmmBhtUEDKsRDNMBDasLGFYnGKYHGtYQMKxBMMwANKwpYFiTYJgRaFhLwLAWwTAT0LC2gGFtgmFmoGEdAcM6BMMsQMO6AoZ1CYZZgYb1BAzrEQyzAQ3rCxjWJxhmBxo2EDBsQDDMATRsKGDYkGCYE2jYSMCwEcEwF9CwsYBhY4JhbqBhEwHDJgTDPEDDpgKGTQmGeYGGzQQMmxEM8wENmwsYNicY5gcathAwbEEwLAA0bClg2JJgWBBo2ErAsBXBsBDQsLWAYWuCoS3QsI2AYRuCYWGgYVsBw7YEQzugYTsBw3YEQ3ugYXsBw/YEQwegYQcBww4EQ0egYUcBw44EQyegYScBw04EQ2egYWcBw84EQxegYbSAYTTB0BVo2EXAsAvB0A1o2FXAsCvB0B1o2E3AsBvB0ANo2F3AsDvB0BNo2EPAsAfB0Ato2FPAsCfB0Bto2EvAsBfBsAjQsLeAYW+CoQ/QsI+AYR+CoS/QsK+AYV+CoR/QsJ+AYT+CoT/QsL+AYX+CYQDQcICA4QCCYSDQMEbAMIZgGAQ0jBUwjCUYBgMN4wQM4wiGIUDDeAHDeIJhUaBhgoBhAsEwFGiYKGCYSDAsBjQcKGA4kGBYHGg4SMBwEMEwDGg4WMBwMMEwHGg4RMBwCMGwBNBwqIDhUIJhBNBwmIDhMIJhJNBwuIDhcIJhSaDhCAHDEQTDKKDhSAHDkQTDUkDDUQKGowiGpYGGowUMRxMMywANxwgYjiEYlgUajhUwHEswLAc0HCdgOI5gWB5oOF7AcDzBsALQcIKA4QSCYUWg4UQBw4kEw0pAw0kChpMIhpWBhpMFDCcTDKsADacIGE4hGFYFGk4VMJxKMKwGNJwmYDiNYFgdaDhdwHA6wbAG0HCGgOEMgmFNoOFMAcOZBMNaQMNZAoazCIa1gYazBQxnEwzrAA3nCBjOIRjWBRrOFTCcSzCsBzScJ2A4j2BYH2g4X8BwPsGwAdBwgYDhAoJhQ6DhQgHDhQTDRkDDRQKGiwiGjYGGiwUMFxMMmwANlwgYLiEYNgUaLhUwXEowbAY0XCZguIxg2BxouFzAcDnBsAXQcIWA4QqCYUug4UoBw5UEw1ZAw1UChqsIhq2BhqsFDFcTDNsADdcIGK4hGLYFGq4VMFxLMGwHNFwnYLiOYNgeaLhewHA9wbAD0HCDgOEGgmFHoOFGAcONBMNOQMNNAoabCIadgYabBQw3EwyjgYZbBAy3EAy7AA23ChhuJRh2BRpuEzDcRjDsBjTcLmC4nWDYHWi4Q8BwB8GwB9Bwp4DhToJhT6DhLgHDXQTDXkDD3QKGuwmGvYGGewQM9xAM+wAN9woY7iUY9gUa7hMw3Ecw7Ac03C9guJ9g2B9oeEDA8ADBcADQ8KCA4UGCYQzQ8JCA4SGCYSzQ8LCA4WGCYRzQ8IiA4RGCYTzQ8KiA4VGCYQLQ8JiA4TGCYSLQ8LiA4XGC4UCg4QkBwxMEw0FAw5MChicJhoOBhqcEDE8RDIcADU8LGJ4mGA4FGp4RMDxDMBwGNDwrYHiWYDgcaHhOwPAcwXAE0PC8gOF5guFIoOEFAcMLBMNRQMOLAoYXCYajgYaXBAwvEQzHAA0vCxheJhiOBRpeETC8QjAcBzS8KmB4lWA4Hmh4TcDwGsFwAtDwuoDhdYLhRKDhDQHDGwTDSUDDmwKGNwmGk4GGtwQMbxEMpwANbwsY3iYYTgUa3hEwvEMwnAY0vCtgeJdgOB1oeE/A8B7BcAbQ8L6A4X2C4Uyg4QMBwwcEw1lAw4cChg8JhrOBho8EDB8RDOcADR8LGD4mGM4FGj4RMHxCMJwHNHwqYPiUYDgfaPhMwPAZwXAB0PC5gOFzguFCoOELAcMXBMNFQMOXAoYvCYaLgYavBAxfEQyXAA1fCxi+JhguBRq+ETB8QzBcBjR8K2D4lmC4HGj4TsDwHcFwBdDwvYDhe4LhSqDhBwHDDwTDVUDDjwKGHwmGq4GGnwQMPxEM1wANPwsYfiYYrgUafhEw/EIwXAc0/Cpg+JVguB5o+E3A8BvBcAPQ8LuA4XeC4Uag4Q8Bwx8Ew01Aw58Chj8JhpuBhr8EDH8RDLcADX8LGP4mGG4FGv4RMPxDMNwGNPwrYPiXYLgdaJik6H/f8N83og13AA2TChgmJRjuBBraCBjaEAx3AQ2TCRgmIxjuBhomFzBMTjDcAzRMIWCYgmC4F2iYUsAwJcFwH9AwlYBhKoLhfqBhagHD1ATDA0DDNAKGaQiGB4GGaQUM0xIMDwEN0wkYpiMYHgYaphcwTE8wPAI0zCBgmIFgeBRomFHAMCPB8BjQMJOAYSaC4XGgYWYBw8wEwxNAwywChlkIhieBhlkFDLMSDE8BDbMJGGYjGJ4GGmYXMMxOMDwDNMwhYJiDYHgWaJhTwDAnwfAc0DCXgGEuguF5oGFuAcPcBMMLQMM8AoZ5CIYXgYZ5BQzzEgwvAQ3zCRjmIxheBhrmFzDMTzC8AjQsIGBYgGB4FWhYUMCwIMHwGtCwkIBhIYLhdaChrYChLcHwBtCwsIBhYYLhTaChnYChHcHwFtDQXsDQnmB4G2joIGDoQDC8AzR0FDB0JBjeBRo6CRg6EQzvAQ2dBQydCYb3gYYuAoYuBMMHQENXAUNXguFDoKGbgKEbwfAR0NBdwNCdYPgYaOghYOhBMHwCNPQUMPQkGD4FGnoJGHoRDJ8BDb0FDL0Jhs+BhkUEDIsQDF8ADX0EDH0Ihi+Bhr4Chr4Ew1dAQz8BQz+C4Wugob+AoT/B8A3QMEDAMIBg+BZoGChgGEgwfAc0DBIwDCIYvgcaBgsYBhMMPwANQwQMQwiGH4GGRQUMixIMPwENQwUMQwmGn4GGxQQMixEMvwANiwsYFicYfgUahgkYhhEMvwENwwUMwwmG34GGJQQMSxAMfwANIwQMIwiGP4GGkQKGkQTDX0DDkgKGJQmGv4GGUQKGUQTDP0DDUgKGpQiGf4GGpQUMSxMMkzjiDMsIGJYhGCYFGpYVMCxLMLQBGpYTMCxHMEwGNCwvYFieYJgcaFhBwLACwTAF0LCigGFFgmFKoGElAcNKBMNUQMPKAoaVCYapgYZVBAyrEAzTAA2rChhWJRimBRpWEzCsRjBMBzSsLmBYnWCYHmhYQ8CwBsEwA9CwpoBhTYJhRqBhLQHDWgTDTEDD2gKGtQmGmYGGdQQM6xAMswAN6woY1iUYZgUa1hMwrEcwzAY0rC9gWJ9gmB1o2EDAsAHBMAfQsKGAYUOCYU6gYSMBw0YEw1xAw8YCho0JhrmBhk0EDJsQDPMADZsKGDYlGOYFGjYTMGxGMMwHNGwuYNicYJgfaNhCwLAFwbAA0LClgGFLgmFBoGErAcNWBMNCQMPWAoatCYa2QMM2AoZtCIaFgYZtBQzbEgztgIbtBAzbEQztgYbtBQzbEwwdgIYdBAw7EAwdgYYdBQw7EgydgIadBAw7EQydgYadBQw7EwxdgIbRAobRBENXoGEXAcMuBEM3oGFXAcOuBEN3oGE3AcNuBEMPoGF3AcPuBENPoGEPAcMeBEMvoGFPAcOeBENvoGEvAcNeBMMiQMPeAoa9CYY+QMM+AoZ9CIa+QMO+AoZ9CYZ+QMN+Aob9CIb+QMP+Aob9CYYBQMMBAoYDCIaBQMMYAcMYgmEQ0DBWwDCWYBgMNIwTMIwjGIYADeMFDOMJhkWBhgkChgkEw1CgYaKAYSLBsBjQcKCA4UCCYXGg4SABw0EEwzCg4WABw8EEw3Cg4RABwyEEwxJAw6EChkMJhhFAw2EChsMIhpFAw+EChsMJhiWBhiMEDEcQDKOAhiMFDEcSDEsBDUcJGI4iGJYGGo4WMBxNMCwDNBwjYDiGYFgWaDhWwHAswbAc0HCcgOE4gmF5oOF4AcPxBMMKQMMJAoYTCIYVgYYTBQwnEgwrAQ0nCRhOIhhWBhpOFjCcTDCsAjScImA4hWBYFWg4VcBwKsGwGtBwmoDhNIJhdaDhdAHD6QTDGkDDGQKGMwiGNYGGMwUMZxIMawENZwkYziIY1gYazhYwnE0wrAM0nCNgOIdgWBdoOFfAcC7BsB7QcJ6A4TyCYX2g4XwBw/kEwwZAwwUChgsIhg2BhgsFDBcSDBsBDRcJGC4iGDYGGi4WMFxMMGwCNFwiYLiEYNgUaLhUwHApwbAZ0HCZgOEygmFzoOFyAcPlBMMWQMMVAoYrCIYtgYYrBQxXEgxbAQ1XCRiuIhi2BhquFjBcTTBsAzRcI2C4hmDYFmi4VsBwLcGwHdBwnYDhOoJhe6DhegHD9QTDDkDDDQKGGwiGHYGGGwUMNxIMOwENNwkYbiIYdgYabhYw3EwwjAYabhEw3EIw7AI03CpguJVg2BVouE3AcBvBsBvQcLuA4XaCYXeg4Q4Bwx0Ewx5Aw50ChjsJhj2BhrsEDHcRDHsBDXcLGO4mGPYGGu4RMNxDMOwDNNwrYLiXYNgXaLhPwHAfwbAf0HC/gOF+gmF/oOEBAcMDBMMBQMODAoYHCYYxQMNDAoaHCIaxQMPDAoaHCYZxQMMjAoZHCIbxQMOjAoZHCYYJQMNjAobHCIaJQMPjAobHCYYDgYYnBAxPEAwHAQ1PChieJBgOBhqeEjA8RTAcAjQ8LWB4mmA4FGh4RsDwDMFwGNDwrIDhWYLhcKDhOQHDcwTDEUDD8wKG5wmGI4GGFwQMLxAMRwENLwoYXiQYjgYaXhIwvEQwHAM0vCxgeJlgOBZoeEXA8ArBcBzQ8KqA4VWC4Xig4TUBw2sEwwlAw+sChtcJhhOBhjcEDG8QDCcBDW8KGN4kGE4GGt4SMLxFMJwCNLwtYHibYDgVaHhHwPAOwXAa0PCugOFdguF0oOE9AcN7BMMZQMP7Aob3CYYzgYYPBAwfEAxnAQ0fChg+JBjOBho+EjB8RDCcAzR8LGD4mGA4F2j4RMDwCcFwHtDwqYDhU4LhfKDhMwHDZwTDBUDD5wKGzwmGC4GGLwQMXxAMFwENXwoYviQYLgYavhIwfEUwXAI0fC1g+JpguBRo+EbA8A3BcBnQ8K2A4VuC4XKg4TsBw3cEwxVAw/cChu8JhiuBhh8EDD8QDFcBDT8KGH4kGK4GGn4SMPxEMFwDNPwsYPiZYLgWaPhFwPALwXAd0PCrgOFXguF6oOE3AcNvBMMNQMPvAobfCYYbgYY/BAx/EAw3AQ1/Chj+JBhuBhr+EjD8RTDcAjT8LWD4m2C4FWj4R8DwD8FwG9Dwr4DhX4LhdqBhktD/vuG/b0Qb7gAaJhUwTEow3Ak0tBEwtCEY7gIaJhMwTEYw3A00TC5gmJxguAdomELAMAXBcC/QMKWAYUqC4T6gYSoBw1QEw/1Aw9QChqkJhgeAhmkEDNMQDA8CDdMKGKYlGB4CGqYTMExHMDwMNEwvYJieYHgEaJhBwDADwfAo0DCjgGFGguExoGEmAcNMBMPjQMPMAoaZCYYngIZZBAyzEAxPAg2zChhmJRieAhpmEzDMRjA8DTTMLmCYnWB4BmiYQ8AwB8HwLNAwp4BhToLhOaBhLgHDXATD80DD3AKGuQmGF4CGeQQM8xAMLwIN8woY5iUYXgIa5hMwzEcwvAw0zC9gmJ9geAVoWEDAsADB8CrQsKCAYUGC4TWgYSEBw0IEw+tAQ1sBQ1uC4Q2gYWEBw8IEw5tAQzsBQzuC4S2gob2AoT3B8DbQ0EHA0IFgeAdo6Chg6EgwvAs0dBIwdCIY3gMaOgsYOhMM7wMNXQQMXQiGD4CGrgKGrgTDh0BDNwFDN4LhI6Chu4ChO8HwMdDQQ8DQg2D4BGjoKWDoSTB8CjT0EjD0Ihg+Axp6Cxh6EwyfAw2LCBgWIRi+ABr6CBj6EAxfAg19BQx9CYavgIZ+AoZ+BMPXQEN/AUN/guEboGGAgGEAwfAt0DBQwDCQYPgOaBgkYBhEMHwPNAwWMAwmGH4AGoYIGIYQDD8CDYsKGBYlGH4CGoYKGIYSDD8DDYsJGBYjGH4BGhYXMCxOMPwKNAwTMAwjGH4DGoYLGIYTDL8DDUsIGJYgGP4AGkYIGEYQDH8CDSMFDCMJhr+AhiUFDEsSDH8DDaMEDKMIhn+AhqUEDEsRDP8CDUsLGJYmGCZxwhmWETAsQzBMCjQsK2BYlmBoAzQsJ2BYjmCYDGhYXsCwPMEwOdCwgoBhBYJhCqBhRQHDigTDlEDDSgKGlQiGqYCGlQUMKxMMUwMNqwgYViEYpgEaVhUwrEowTAs0rCZgWI1gmA5oWF3AsDrBMD3QsIaAYQ2CYQagYU0Bw5oEw4xAw1oChrUIhpmAhrUFDGsTDDMDDesIGNYhGGYBGtYVMKxLMMwKNKwnYFiPYJgNaFhfwLA+wTA70LCBgGEDgmEOoGFDAcOGBMOcQMNGAoaNCIa5gIaNBQwbEwxzAw2bCBg2IRjmARo2FTBsSjDMCzRsJmDYjGCYD2jYXMCwOcEwP9CwhYBhC4JhAaBhSwHDlgTDgkDDVgKGrQiGhYCGrQUMWxMMbYGGbQQM2xAMCwMN2woYtiUY2gEN2wkYtiMY2gMN2wsYticYOgANOwgYdiAYOgINOwoYdiQYOgENOwkYdiIYOgMNOwsYdiYYugANowUMowmGrkDDLgKGXQiGbkDDrgKGXQmG7kDDbgKG3QiGHkDD7gKG3QmGnkDDHgKGPQiGXkDDngKGPQmG3kDDXgKGvQiGRYCGvQUMexMMfYCGfQQM+xAMfYGGfQUM+xIM/YCG/QQM+xEM/YGG/QUM+xMMA4CGAwQMBxAMA4GGMQKGMQTDIKBhrIBhLMEwGGgYJ2AYRzAMARrGCxjGEwyLAg0TBAwTCIahQMNEAcNEgmExoOFAAcOBBMPiQMNBAoaDCIZhQMPBAoaDCYbhQMMhAoZDCIYlgIZDBQyHEgwjgIbDBAyHEQwjgYbDBQyHEwxLAg1HCBiOIBhGAQ1HChiOJBiWAhqOEjAcRTAsDTQcLWA4mmBYBmg4RsBwDMGwLNBwrIDhWIJhOaDhOAHDcQTD8kDD8QKG4wmGFYCGEwQMJxAMKwINJwoYTiQYVgIaThIwnEQwrAw0nCxgOJlgWAVoOEXAcArBsCrQcKqA4VSCYTWg4TQBw2kEw+pAw+kChtMJhjWAhjMEDGcQDGsCDWcKGM4kGNYCGs4SMJxFMKwNNJwtYDibYFgHaDhHwHAOwbAu0HCugOFcgmE9oOE8AcN5BMP6QMP5AobzCYYNgIYLBAwXEAwbAg0XChguJBg2AhouEjBcRDBsDDRcLGC4mGDYBGi4RMBwCcGwKdBwqYDhUoJhM6DhMgHDZQTD5kDD5QKGywmGLYCGKwQMVxAMWwINVwoYriQYtgIarhIwXEUwbA00XC1guJpg2AZouEbAcA3BsC3QcK2A4VqCYTug4ToBw3UEw/ZAw/UChusJhh2AhhsEDDcQDDsCDTcKGG4kGHYCGm4SMNxEMOwMNNwsYLiZYBgNNNwiYLiFYNgFaLhVwHArwbAr0HCbgOE2gmE3oOF2AcPtBMPuQMMdAoY7CIY9gIY7BQx3Egx7Ag13CRjuIhj2AhruFjDcTTDsDTTcI2C4h2DYB2i4V8BwL8GwL9Bwn4DhPoJhP6DhfgHD/QTD/kDDAwKGBwiGA4CGBwUMDxIMY4CGhwQMDxEMY4GGhwUMDxMM44CGRwQMjxAM44GGRwUMjxIME4CGxwQMjxEME4GGxwUMjxMMBwINTwgYniAYDgIanhQwPEkwHAw0PCVgeIpgOARoeFrA8DTBcCjQ8IyA4RmC4TCg4VkBw7MEw+FAw3MChucIhiOAhucFDM8TDEcCDS8IGF4gGI4CGl4UMLxIMBwNNLwkYHiJYDgGaHhZwPAywXAs0PCKgOEVguE4oOFVAcOrBMPxQMNrAobXCIYTgIbXBQyvEwwnAg1vCBjeIBhOAhreFDC8STCcDDS8JWB4i2A4BWh4W8DwNsFwKtDwjoDhHYLhNKDhXQHDuwTD6UDDewKG9wiGM4CG9wUM7xMMZwINHwgYPiAYzgIaPhQwfEgwnA00fCRg+IhgOAdo+FjA8DHBcC7Q8ImA4ROC4Tyg4VMBw6cEw/lAw2cChs8IhguAhs8FDJ8TDBcCDV8IGL4gGC4CGr4UMHxJMFwMNHwlYPiKYLgEaPhawPA1wXAp0PCNgOEbguEyoOFbAcO3BMPlQMN3AobvCIYrgIbvBQzfEwxXAg0/CBh+IBiuAhp+FDD8SDBcDTT8JGD4iWC4Bmj4WcDwM8FwLdDwi4DhF4LhOqDhVwHDrwTD9UDDbwKG3wiGG4CG3wUMvxMMNwINfwgY/iAYbgIa/hQw/Ekw3Aw0/CVg+ItguAVo+FvA8DfBcCvQ8I+A4R+C4Tag4V8Bw78Ew+1AwyTF/vuG/74RbbgDaJhUwDApwXAn0NBGwNCGYLgLaJhMwDAZwXA30DC5gGFyguEeoGEKAcMUBMO9QMOUAoYpCYb7gIapBAxTEQz3Aw1TCximJhgeABqmETBMQzA8CDRMK2CYlmB4CGiYTsAwHcHwMNAwvYBheoLhEaBhBgHDDATDo0DDjAKGGQmGx4CGmQQMMxEMjwMNMwsYZiYYngAaZhEwzEIwPAk0zCpgmJVgeApomE3AMBvB8DTQMLuAYXaC4RmgYQ4BwxwEw7NAw5wChjkJhueAhrkEDHMRDM8DDXMLGOYmGF4AGuYRMMxDMLwINMwrYJiXYHgJaJhPwDAfwfAy0DC/gGF+guEVoGEBAcMCBMOrQMOCAoYFCYbXgIaFBAwLEQyvAw1tBQxtCYY3gIaFBQwLEwxvAg3tBAztCIa3gIb2Aob2BMPbQEMHAUMHguEdoKGjgKEjwfAu0NBJwNCJYHgPaOgsYOhMMLwPNHQRMHQhGD4AGroKGLoSDB8CDd0EDN0Iho+Ahu4Chu4Ew8dAQw8BQw+C4ROgoaeAoSfB8CnQ0EvA0Itg+Axo6C1g6E0wfA40LCJgWIRg+AJo6CNg6EMwfAk09BUw9CUYvgIa+gkY+hEMXwMN/QUM/QmGb4CGAQKGAQTDt0DDQAHDQILhO6BhkIBhEMHwPdAwWMAwmGD4AWgYImAYQjD8CDQsKmBYlGD4CWgYKmAYSjD8DDQsJmBYjGD4BWhYXMCwOMHwK9AwTMAwjGD4DWgYLmAYTjD8DjQsIWBYgmD4A2gYIWAYQTD8CTSMFDCMJBj+AhqWFDAsSTD8DTSMEjCMIhj+ARqWEjAsRTD8CzQsLWBYmmCYxBlnWEbAsAzBMCnQsKyAYVmCoQ3QsJyAYTmCYTKgYXkBw/IEw+RAwwoChhUIhimAhhUFDCsSDFMCDSsJGFYiGKYCGlYWMKxMMEwNNKwiYFiFYJgGaFhVwLAqwTAt0LCagGE1gmE6oGF1AcPqBMP0QMMaAoY1CIYZgIY1BQxrEgwzAg1rCRjWIhhmAhrWFjCsTTDMDDSsI2BYh2CYBWhYV8CwLsEwK9CwnoBhPYJhNqBhfQHD+gTD7EDDBgKGDQiGOYCGDQUMGxIMcwINGwkYNiIY5gIaNhYwbEwwzA00bCJg2IRgmAdo2FTAsCnBMC/QsJmAYTOCYT6gYXMBw+YEw/xAwxYChi0IhgWAhi0FDFsSDAsCDVsJGLYiGBYCGrYWMGxNMLQFGrYRMGxDMCwMNGwrYNiWYGgHNGwnYNiOYGgPNGwvYNieYOgANOwgYNiBYOgINOwoYNiRYOgENOwkYNiJYOgMNOwsYNiZYOgCNIwWMIwmGLoCDbsIGHYhGLoBDbsKGHYlGLoDDbsJGHYjGHoADbsLGHYnGHoCDXsIGPYgGHoBDXsKGPYkGHoDDXsJGPYiGBYBGvYWMOxNMPQBGvYRMOxDMPQFGvYVMOxLMPQDGvYTMOxHMPQHGvYXMOxPMAwAGg4QMBxAMAwEGsYIGMYQDIOAhrEChrEEw2CgYZyAYRzBMARoGC9gGE8wLAo0TBAwTCAYhgINEwUMEwmGxYCGAwUMBxIMiwMNBwkYDiIYhgENBwsYDiYYhgMNhwgYDiEYlgAaDhUwHEowjAAaDhMwHEYwjAQaDhcwHE4wLAk0HCFgOIJgGAU0HClgOJJgWApoOErAcBTBsDTQcLSA4WiCYRmg4RgBwzEEw7JAw7EChmMJhuWAhuMEDMcRDMsDDccLGI4nGFYAGk4QMJxAMKwINJwoYDiRYFgJaDhJwHASwbAy0HCygOFkgmEVoOEUAcMpBMOqQMOpAoZTCYbVgIbTBAynEQyrAw2nCxhOJxjWABrOEDCcQTCsCTScKWA4k2BYC2g4S8BwFsGwNtBwtoDhbIJhHaDhHAHDOQTDukDDuQKGcwmG9YCG8wQM5xEM6wMN5wsYzicYNgAaLhAwXEAwbAg0XChguJBg2AhouEjAcBHBsDHQcLGA4WKCYROg4RIBwyUEw6ZAw6UChksJhs2AhssEDJcRDJsDDZcLGC4nGLYAGq4QMFxBMGwJNFwpYLiSYNgKaLhKwHAVwbA10HC1gOFqgmEboOEaAcM1BMO2QMO1AoZrCYbtgIbrBAzXEQzbAw3XCxiuJxh2ABpuEDDcQDDsCDTcKGC4kWDYCWi4ScBwE8GwM9Bws4DhZoJhNNBwi4DhFoJhF6DhVgHDrQTDrkDDbQKG2wiG3YCG2wUMtxMMuwMNdwgY7iAY9gAa7hQw3Ekw7Ak03CVguItg2AtouFvAcDfBsDfQcI+A4R6CYR+g4V4Bw70Ew75Aw30ChvsIhv2AhvsFDPcTDPsDDQ8IGB4gGA4AGh4UMDxIMIwBGh4SMDxEMIwFGh4WMDxMMIwDGh4RMDxCMIwHGh4VMDxKMEwAGh4TMDxGMEwEGh4XMDxOMBwINDwhYHiCYDgIaHhSwPAkwXAw0PCUgOEpguEQoOFpAcPTBMOhQMMzAoZnCIbDgIZnBQzPEgyHAw3PCRieIxiOABqeFzA8TzAcCTS8IGB4gWA4Cmh4UcDwIsFwNNDwkoDhJYLhGKDhZQHDywTDsUDDKwKGVwiG44CGVwUMrxIMxwMNrwkYXiMYTgAaXhcwvE4wnAg0vCFgeINgOAloeFPA8CbBcDLQ8JaA4S2C4RSg4W0Bw9sEw6lAwzsChncIhtOAhncFDO8SDKcDDe8JGN4jGM4AGt4XMLxPMJwJNHwgYPiAYDgLaPhQwPAhwXA20PCRgOEjguEcoOFjAcPHBMO5QMMnAoZPCIbzgIZPBQyfEgznAw2fCRg+IxguABo+FzB8TjBcCDR8IWD4gmC4CGj4UsDwJcFwMdDwlYDhK4LhEqDhawHD1wTDpUDDNwKGbwiGy4CGbwUM3xIMlwMN3wkYviMYrgAavhcwfE8wXAk0/CBg+IFguApo+FHA8CPBcDXQ8JOA4SeC4Rqg4WcBw88Ew7VAwy8Chl8IhuuAhl8FDL8SDNcDDb8JGH4jGG4AGn4XMPxOMNwINPwhYPiDYLgJaPhTwPAnwXAz0PCXgOEvguEWoOFvAcPfBMOtQMM/AoZ/CIbbgIZ/BQz/Egy3Aw2TFP/vG/77RrThDqBhUgHDpATDnUBDGwFDG4LhLqBhMgHDZATD3UDD5AKGyQmGe4CGKQQMUxAM9wINUwoYpiQY7gMaphIwTEUw3A80TC1gmJpgeABomEbAMA3B8CDQMK2AYVqC4SGgYToBw3QEw8NAw/QChukJhkeAhhkEDDMQDI8CDTMKGGYkGB4DGmYSMMxEMDwONMwsYJiZYHgCaJhFwDALwfAk0DCrgGFWguEpoGE2AcNsBMPTQMPsAobZCYZngIY5BAxzEAzPAg1zChjmJBieAxrmEjDMRTA8DzTMLWCYm2B4AWiYR8AwD8HwItAwr4BhXoLhJaBhPgHDfATDy0DD/AKG+QmGV4CGBQQMCxAMrwINCwoYFiQYXgMaFhIwLEQwvA40tBUwtCUY3gAaFhYwLEwwvAk0tBMwtCMY3gIa2gsY2hMMbwMNHQQMHQiGd4CGjgKGjgTDu0BDJwFDJ4LhPaChs4ChM8HwPtDQRcDQhWD4AGjoKmDoSjB8CDR0EzB0Ixg+Ahq6Cxi6EwwfAw09BAw9CIZPgIaeAoaeBMOnQEMvAUMvguEzoKG3gKE3wfA50LCIgGERguELoKGPgKEPwfAl0NBXwNCXYPgKaOgnYOhHMHwNNPQXMPQnGL4BGgYIGAYQDN8CDQMFDAMJhu+AhkEChkEEw/dAw2ABw2CC4QegYYiAYQjB8CPQsKiAYVGC4SegYaiAYSjB8DPQsJiAYTGC4RegYXEBw+IEw69AwzABwzCC4TegYbiAYTjB8DvQsISAYQmC4Q+gYYSAYQTB8CfQMFLAMJJg+AtoWFLAsCTB8DfQMErAMIpg+AdoWOo/bpjEJUmS//n/mYL/3KQuOMPSAndYmnCHNkDDMgKGZQiGyYCGZQUMyxIMkwMNywkYliMYpgAalhcwLE8wTAk0rCBgWIFgmApoWFHAsCLBMDXQsJKAYSWCYRqgYWUBw8oEw7RAwyoChlUIhumAhlUFDKsSDNMDDasJGFYjGGYAGlYXMKxOMMwINKwhYFiDYJgJaFhTwLAmwTAz0LCWgGEtgmEWoGFtAcPaBMOsQMM6AoZ1CIbZgIZ1BQzrEgyzAw3rCRjWIxjmABrWFzCsTzDMCTRsIGDYgGCYC2jYUMCwIcEwN9CwkYBhI4JhHqBhYwHDxgTDvEDDJgKGTQiG+YCGTQUMmxIM8wMNmwkYNiMYFgAaNhcwbE4wLAg0bCFg2IJgWAho2FLAsCXB0BZo2ErAsBXBsDDQsLWAYWuCoR3QsI2AYRuCoT3QsK2AYVuCoQPQsJ2AYTuCoSPQsL2AYXuCoRPQsIOAYQeCoTPQsKOAYUeCoQvQsJOAYSeCoSvQsLOAYWeCoRvQMFrAMJpg6A407CJg2IVg6AE07Cpg2JVg6Ak07CZg2I1g6AU07C5g2J1g6A007CFg2INgWARo2FPAsCfB0Ado2EvAsBfB0Bdo2FvAsDfB0A9o2EfAsA/B0B9o2FfAsC/BMABo2E/AsB/BMBBo2F/AsD/BMAhoOEDAcADBMBhoGCNgGEMwDAEaxgoYxhIMiwIN4wQM4wiGoUDDeAHDeIJhMaBhgoBhAsGwONAwUcAwkWAYBjQcKGA4kGAYDjQcJGA4iGBYAmg4WMBwMMEwAmg4RMBwCMEwEmg4VMBwKMGwJNBwmIDhMIJhFNBwuIDhcIJhKaDhCAHDEQTD0kDDkQKGIwmGZYCGowQMRxEMywINRwsYjiYYlgMajhEwHEMwLA80HCtgOJZgWAFoOE7AcBzBsCLQcLyA4XiCYSWg4QQBwwkEw8pAw4kChhMJhlWAhpMEDCcRDKsCDScLGE4mGFYDGk4RMJxCMKwONJwqYDiVYFgDaDhNwHAawbAm0HC6gOF0gmEtoOEMAcMZBMPaQMOZAoYzCYZ1gIazBAxnEQzrAg1nCxjOJhjWAxrOETCcQzCsDzScK2A4l2DYAGg4T8BwHsGwIdBwvoDhfIJhI6DhAgHDBQTDxkDDhQKGCwmGTYCGiwQMFxEMmwINFwsYLiYYNgMaLhEwXEIwbA40XCpguJRg2AJouEzAcBnBsCXQcLmA4XKCYSug4QoBwxUEw9ZAw5UChisJhm2AhqsEDFcRDNsCDVcLGK4mGLYDGq4RMFxDMGwPNFwrYLiWYNgBaLhOwHAdwbAj0HC9gOF6gmEnoOEGAcMNBMPOQMONAoYbCYbRQMNNAoabCIZdgIabBQw3Ewy7Ag23CBhuIRh2AxpuFTDcSjDsDjTcJmC4jWDYA2i4XcBwO8GwJ9Bwh4DhDoJhL6DhTgHDnQTD3kDDXQKGuwiGfYCGuwUMdxMM+wIN9wgY7iEY9gMa7hUw3Esw7A803CdguI9gOABouF/AcD/BMAZoeEDA8ADBMBZoeFDA8CDBMA5oeEjA8BDBMB5oeFjA8DDBMAFoeETA8AjBMBFoeFTA8CjBcCDQ8JiA4TGC4SCg4XEBw+MEw8FAwxMChicIhkOAhicFDE8SDIcCDU8JGJ4iGA4DGp4WMDxNMBwONDwjYHiGYDgCaHhWwPAswXAk0PCcgOE5guEooOF5AcPzBMPRQMMLAoYXCIZjgIYXBQwvEgzHAg0vCRheIhiOAxpeFjC8TDAcDzS8ImB4hWA4AWh4VcDwKsFwItDwmoDhNYLhJKDhdQHD6wTDyUDDGwKGNwiGU4CGNwUMbxIMpwINbwkY3iIYTgMa3hYwvE0wnA40vCNgeIdgOANoeFfA8C7BcCbQ8J6A4T2C4Syg4X0Bw/sEw9lAwwcChg8IhnOAhg8FDB8SDOcCDR8JGD4iGM4DGj4WMHxMMJwPNHwiYPiEYLgAaPhUwPApwXAh0PCZgOEzguEioOFzAcPnBMPFQMMXAoYvCIZLgIYvBQxfEgyXAg1fCRi+IhguAxq+FjB8TTBcDjR8I2D4hmC4Amj4VsDwLcFwJdDwnYDhO4LhKqDhewHD9wTD1UDDDwKGHwiGa4CGHwUMPxIM1wINPwkYfiIYrgMafhYw/EwwXA80/CJg+IVguAFo+FXA8CvBcCPQ8JuA4TeC4Sag4XcBw+8Ew81Awx8Chj8IhluAhj8FDH8SDLcCDX8JGP4iGG4DGv4WMPxNMNwONPwjYPiHYLgDaPhXwPAvwXAn0DBJ2H/f8N83og13AQ2TChgmJRjuBhraCBjaEAz3AA2TCRgmIxjuBRomFzBMTjDcBzRMIWCYgmC4H2iYUsAwJcHwANAwlYBhKoLhQaBhagHD1ATDQ0DDNAKGaQiGh4GGaQUM0xIMjwAN0wkYpiMYHgUaphcwTE8wPAY0zCBgmIFgeBxomFHAMCPB8ATQMJOAYSaC4UmgYWYBw8wEw1NAwywChlkIhqeBhlkFDLMSDM8ADbMJGGYjGJ4FGmYXMMxOMDwHNMwhYJiDYHgeaJhTwDAnwfAC0DCXgGEuguFFoGFuAcPcBMNLQMM8AoZ5CIaXgYZ5BQzzEgyvAA3zCRjmIxheBRrmFzDMTzC8BjQsIGBYgGB4HWhYUMCwIMHwBtCwkIBhIYLhTaChrYChLcHwFtCwsIBhYYLhbaChnYChHcHwDtDQXsDQnmB4F2joIGDoQDC8BzR0FDB0JBjeBxo6CRg6EQwfAA2dBQydCYYPgYYuAoYuBMNHQENXAUNXguFjoKGbgKEbwfAJ0NBdwNCdYPgUaOghYOhBMHwGNPQUMPQkGD4HGnoJGHoRDF8ADb0FDL0Jhi+BhkUEDIsQDF8BDX0EDH0Ihq+Bhr4Chr4EwzdAQz8BQz+C4Vugob+AoT/B8B3QMEDAMIBg+B5oGChgGEgw/AA0DBIwDCIYfgQaBgsYBhMMPwENQwQMQwiGn4GGRQUMixIMvwANQwUMQwmGX4GGxQQMixEMvwENiwsYFicYfgcahgkYhhEMfwANwwUMwwmGP4GGJQQMSxAMfwENIwQMIwiGv4GGkQKGkQTDP0DDkgKGJQmGf4GGUQKGUQTDJK44w1IChqUIhkmBhqUFDEsTDG2AhmUEDMsQDJMBDcsKGJYlGCYHGpYTMCxHMEwBNCwvYFieYJgSaFhBwLACwTAV0LCigGFFgmFqoGElAcNKBMM0QMPKAoaVCYZpgYZVBAyrEAzTAQ2rChhWJRimBxpWEzCsRjDMADSsLmBYnWCYEWhYQ8CwBsEwE9CwpoBhTYJhZqBhLQHDWgTDLEDD2gKGtQmGWYGGdQQM6xAMswEN6woY1iUYZgca1hMwrEcwzAE0rC9gWJ9gmBNo2EDAsAHBMBfQsKGAYUOCYW6gYSMBw0YEwzxAw8YCho0JhnmBhk0EDJsQDPMBDZsKGDYlGOYHGjYTMGxGMCwANGwuYNicYFgQaNhCwLAFwbAQ0LClgGFLgqEt0LCVgGErgmFhoGFrAcPWBEM7oGEbAcM2BEN7oGFbAcO2BEMHoGE7AcN2BENHoGF7AcP2BEMnoGEHAcMOBENnoGFHAcOOBEMXoGEnAcNOBENXoGFnAcPOBEM3oGG0gGE0wdAdaNhFwLALwdADaNhVwLArwdATaNhNwLAbwdALaNhdwLA7wdAbaNhDwLAHwbAI0LCngGFPgqEP0LCXgGEvgqEv0LC3gGFvgqEf0LCPgGEfgqE/0LCvgGFfgmEA0LCfgGE/gmEg0LC/gGF/gmEQ0HCAgOEAgmEw0DBGwDCGYBgCNIwVMIwlGBYFGsYJGMYRDEOBhvEChvEEw2JAwwQBwwSCYXGgYaKAYSLBMAxoOFDAcCDBMBxoOEjAcBDBsATQcLCA4WCCYQTQcIiA4RCCYSTQcKiA4VCCYUmg4TABw2EEwyig4XABw+EEw1JAwxEChiMIhqWBhiMFDEcSDMsADUcJGI4iGJYFGo4WMBxNMCwHNBwjYDiGYFgeaDhWwHAswbAC0HCcgOE4gmFFoOF4AcPxBMNKQMMJAoYTCIaVgYYTBQwnEgyrAA0nCRhOIhhWBRpOFjCcTDCsBjScImA4hWBYHWg4VcBwKsGwBtBwmoDhNIJhTaDhdAHD6QTDWkDDGQKGMwiGtYGGMwUMZxIM6wANZwkYziIY1gUazhYwnE0wrAc0nCNgOIdgWB9oOFfAcC7BsAHQcJ6A4TyCYUOg4XwBw/kEw0ZAwwUChgsIho2BhgsFDBcSDJsADRcJGC4iGDYFGi4WMFxMMGwGNFwiYLiEYNgcaLhUwHApwbAF0HCZgOEygmFLoOFyAcPlBMNWQMMVAoYrCIatgYYrBQxXEgzbAA1XCRiuIhi2BRquFjBcTTBsBzRcI2C4hmDYHmi4VsBwLcGwA9BwnYDhOoJhR6DhegHD9QTDTkDDDQKGGwiGnYGGGwUMNxIMo4GGmwQMNxEMuwANNwsYbiYYdgUabhEw3EIw7AY03CpguJVg2B1ouE3AcBvBsAfQcLuA4XaCYU+g4Q4Bwx0Ew15Aw50ChjsJhr2BhrsEDHcRDPsADXcLGO4mGPYFGu4RMNxDMOwHNNwrYLiXYNgfaLhPwHAfwXAA0HC/gOF+gmEM0PCAgOEBgmEs0PCggOFBgmEc0PCQgOEhgmE80PCwgOFhgmEC0PCIgOERgmEi0PCogOFRguFAoOExAcNjBMNBQMPjAobHCYaDgYYnBAxPEAyHAA1PChieJBgOBRqeEjA8RTAcBjQ8LWB4mmA4HGh4RsDwDMFwBNDwrIDhWYLhSKDhOQHDcwTDUUDD8wKG5wmGo4GGFwQMLxAMxwANLwoYXiQYjgUaXhIwvEQwHAc0vCxgeJlgOB5oeEXA8ArBcALQ8KqA4VWC4USg4TUBw2sEw0lAw+sChtcJhpOBhjcEDG8QDKcADW8KGN4kGE4FGt4SMLxFMJwGNLwtYHibYDgdaHhHwPAOwXAG0PCugOFdguFMoOE9AcN7BMNZQMP7Aob3CYazgYYPBAwfEAznAA0fChg+JBjOBRo+EjB8RDCcBzR8LGD4mGA4H2j4RMDwCcFwAdDwqYDhU4LhQqDhMwHDZwTDRUDD5wKGzwmGi4GGLwQMXxAMlwANXwoYviQYLgUavhIwfEUwXAY0fC1g+JpguBxo+EbA8A3BcAXQ8K2A4VuC4Uqg4TsBw3cEw1VAw/cChu8JhquBhh8EDD8QDNcADT8KGH4kGK4FGn4SMPxEMFwHNPwsYPiZYLgeaPhFwPALwXAD0PCrgOFXguFGoOE3AcNvBMNNQMPvAobfCYabgYY/BAx/EAy3AA1/Chj+JBhuBRr+EjD8RTDcBjT8LWD4m2C4HWj4R8DwD8FwB9Dwr4DhX4LhTqBhkvD/vuG/b0Qb7gIaJhUwTEow3A00tBEwtCEY7gEaJhMwTEYw3As0TC5gmJxguA9omELAMAXBcD/QMKWAYUqC4QGgYSoBw1QEw4NAw9QChqkJhoeAhmkEDNMQDA8DDdMKGKYlGB4BGqYTMExHMDwKNEwvYJieYHgMaJhBwDADwfA40DCjgGFGguEJoGEmAcNMBMOTQMPMAoaZCYangIZZBAyzEAxPAw2zChhmJRieARpmEzDMRjA8CzTMLmCYnWB4DmiYQ8AwB8HwPNAwp4BhToLhBaBhLgHDXATDi0DD3AKGuQmGl4CGeQQM8xAMLwMN8woY5iUYXgEa5hMwzEcwvAo0zC9gmJ9geA1oWEDAsADB8DrQsKCAYUGC4Q2gYSEBw0IEw5tAQ1sBQ1uC4S2gYWEBw8IEw9tAQzsBQzuC4R2gob2AoT3B8C7Q0EHA0IFgeA9o6Chg6EgwvA80dBIwdCIYPgAaOgsYOhMMHwINXQQMXQiGj4CGrgKGrgTDx0BDNwFDN4LhE6Chu4ChO8HwKdDQQ8DQg2D4DGjoKWDoSTB8DjT0EjD0Ihi+ABp6Cxh6EwxfAg2LCBgWIRi+Ahr6CBj6EAxfAw19BQx9CYZvgIZ+AoZ+BMO3QEN/AUN/guE7oGGAgGEAwfA90DBQwDCQYPgBaBgkYBhEMPwINAwWMAwmGH4CGoYIGIYQDD8DDYsKGBYlGH4BGoYKGIYSDL8CDYsJGBYjGH4DGhYXMCxOMPwONAwTMAwjGP4AGoYLGIYTDH8CDUsIGJYgGP4CGkYIGEYQDH8DDSMFDCMJhn+AhiUFDEsSDP8CDaMEDKMIhknccIalBAxLEQyTAg1LCxiWJhjaAA3LCBiWIRgmAxqWFTAsSzBMDjQsJ2BYjmCYAmhYXsCwPMEwJdCwgoBhBYJhKqBhRQHDigTD1EDDSgKGlQiGaYCGlQUMKxMM0wINqwgYViEYpgMaVhUwrEowTA80rCZgWI1gmAFoWF3AsDrBMCPQsIaAYQ2CYSagYU0Bw5oEw8xAw1oChrUIhlmAhrUFDGsTDLMCDesIGNYhGGYDGtYVMKxLMMwONKwnYFiPYJgDaFhfwLA+wTAn0LCBgGEDgmEuoGFDAcOGBMPcQMNGAoaNCIZ5gIaNBQwbEwzzAg2bCBg2IRjmAxo2FTBsSjDMDzRsJmDYjGBYAGjYXMCwOcGwINCwhYBhC4JhIaBhSwHDlgRDW6BhKwHDVgTDwkDD1gKGrQmGdkDDNgKGbQiG9kDDtgKGbQmGDkDDdgKG7QiGjkDD9gKG7QmGTkDDDgKGHQiGzkDDjgKGHQmGLkDDTgKGnQiGrkDDzgKGnQmGbkDDaAHDaIKhO9Cwi4BhF4KhB9Cwq4BhV4KhJ9Cwm4BhN4KhF9Cwu4Bhd4KhN9Cwh4BhD4JhEaBhTwHDngRDH6BhLwHDXgRDX6BhbwHD3gRDP6BhHwHDPgRDf6BhXwHDvgTDAKBhPwHDfgTDQKBhfwHD/gTDIKDhAAHDAQTDYKBhjIBhDMEwBGgYK2AYSzAsCjSMEzCMIxiGAg3jBQzjCYbFgIYJAoYJBMPiQMNEAcNEgmEY0HCggOFAgmE40HCQgOEggmEJoOFgAcPBBMMIoOEQAcMhBMNIoOFQAcOhBMOSQMNhAobDCIZRQMPhAobDCYalgIYjBAxHEAxLAw1HChiOJBiWARqOEjAcRTAsCzQcLWA4mmBYDmg4RsBwDMGwPNBwrIDhWIJhBaDhOAHDcQTDikDD8QKG4wmGlYCGEwQMJxAMKwMNJwoYTiQYVgEaThIwnEQwrAo0nCxgOJlgWA1oOEXAcArBsDrQcKqA4VSCYQ2g4TQBw2kEw5pAw+kChtMJhrWAhjMEDGcQDGsDDWcKGM4kGNYBGs4SMJxFMKwLNJwtYDibYFgPaDhHwHAOwbA+0HCugOFcgmEDoOE8AcN5BMOGQMP5AobzCYaNgIYLBAwXEAwbAw0XChguJBg2ARouEjBcRDBsCjRcLGC4mGDYDGi4RMBwCcGwOdBwqYDhUoJhC6DhMgHDZQTDlkDD5QKGywmGrYCGKwQMVxAMWwMNVwoYriQYtgEarhIwXEUwbAs0XC1guJpg2A5ouEbAcA3BsD3QcK2A4VqCYQeg4ToBw3UEw45Aw/UChusJhp2AhhsEDDcQDDsDDTcKGG4kGEYDDTcJGG4iGHYBGm4WMNxMMOwKNNwiYLiFYNgNaLhVwHArwbA70HCbgOE2gmEPoOF2AcPtBMOeQMMdAoY7CIa9gIY7BQx3Egx7Aw13CRjuIhj2ARruFjDcTTDsCzTcI2C4h2DYD2i4V8BwL8GwP9Bwn4DhPoLhAKDhfgHD/QTDGKDhAQHDAwTDWKDhQQHDgwTDOKDhIQHDQwTDeKDhYQHDwwTDBKDhEQHDIwTDRKDhUQHDowTDgUDDYwKGxwiGg4CGxwUMjxMMBwMNTwgYniAYDgEanhQwPEkwHAo0PCVgeIpgOAxoeFrA8DTBcDjQ8IyA4RmC4Qig4VkBw7MEw5FAw3MChucIhqOAhucFDM8TDEcDDS8IGF4gGI4BGl4UMLxIMBwLNLwkYHiJYDgOaHhZwPAywXA80PCKgOEVguEEoOFVAcOrBMOJQMNrAobXCIaTgIbXBQyvEwwnAw1vCBjeIBhOARreFDC8STCcCjS8JWB4i2A4DWh4W8DwNsFwOtDwjoDhHYLhDKDhXQHDuwTDmUDDewKG9wiGs4CG9wUM7xMMZwMNHwgYPiAYzgEaPhQwfEgwnAs0fCRg+IhgOA9o+FjA8DHBcD7Q8ImA4ROC4QKg4VMBw6cEw4VAw2cChs8IhouAhs8FDJ8TDBcDDV8IGL4gGC4BGr4UMHxJMFwKNHwlYPiKYLgMaPhawPA1wXA50PCNgOEbguEKoOFbAcO3BMOVQMN3AobvCIargIbvBQzfEwxXAw0/CBh+IBiuARp+FDD8SDBcCzT8JGD4iWC4Dmj4WcDwM8FwPdDwi4DhF4LhBqDhVwHDrwTDjUDDbwKG3wiGm4CG3wUMvxMMNwMNfwgY/iAYbgEa/hQw/Ekw3Ao0/CVg+ItguA1o+FvA8DfBcDvQ8I+A4R+C4Q6g4V8Bw78Ew51AwyQl/vuG/74RbbgLaJhUwDApwXA30NBGwNCGYLgHaJhMwDAZwXAv0DC5gGFyguE+oGEKAcMUBMP9QMOUAoYpCYYHgIapBAxTEQwPAg1TCximJhgeAhqmETBMQzA8DDRMK2CYlmB4BGiYTsAwHcHwKNAwvYBheoLhMaBhBgHDDATD40DDjAKGGQmGJ4CGmQQMMxEMTwINMwsYZiYYngIaZhEwzEIwPA00zCpgmJVgeAZomE3AMBvB8CzQMLuAYXaC4TmgYQ4BwxwEw/NAw5wChjkJhheAhrkEDHMRDC8CDXMLGOYmGF4CGuYRMMxDMLwMNMwrYJiXYHgFaJhPwDAfwfAq0DC/gGF+guE1oGEBAcMCBMPrQMOCAoYFCYY3gIaFBAwLEQxvAg1tBQxtCYa3gIaFBQwLEwxvAw3tBAztCIZ3gIb2Aob2BMO7QEMHAUMHguE9oKGjgKEjwfA+0NBJwNCJYPgAaOgsYOhMMHwINHQRMHQhGD4CGroKGLoSDB8DDd0EDN0Ihk+Ahu4Chu4Ew6dAQw8BQw+C4TOgoaeAoSfB8DnQ0EvA0Itg+AJo6C1g6E0wfAk0LCJgWIRg+Apo6CNg6EMwfA009BUw9CUYvgEa+gkY+hEM3wIN/QUM/QmG74CGAQKGAQTD90DDQAHDQILhB6BhkIBhEMHwI9AwWMAwmGD4CWgYImAYQjD8DDQsKmBYlGD4BWgYKmAYSjD8CjQsJmBYjGD4DWhYXMCwOMHwO9AwTMAwjGD4A2gYLmAYTjD8CTQsIWBYgmD4C2gYIWAYQTD8DTSMFDCMJBj+ARqWFDAsSTD8CzSMEjCMIhgmcccZlhIwLEUwTAo0LC1gWJpgaAM0LCNgWIZgmAxoWFbAsCzBMDnQsJyAYTmCYQqgYXkBw/IEw5RAwwoChhUIhqmAhhUFDCsSDFMDDSsJGFYiGKYBGlYWMKxMMEwLNKwiYFiFYJgOaFhVwLAqwTA90LCagGE1gmEGoGF1AcPqBMOMQMMaAoY1CIaZgIY1BQxrEgwzAw1rCRjWIhhmARrWFjCsTTDMCjSsI2BYh2CYDWhYV8CwLsEwO9CwnoBhPYJhDqBhfQHD+gTDnEDDBgKGDQiGuYCGDQUMGxIMcwMNGwkYNiIY5gEaNhYwbEwwzAs0bCJg2IRgmA9o2FTAsCnBMD/QsJmAYTOCYQGgYXMBw+YEw4JAwxYChi0IhoWAhi0FDFsSDG2Bhq0EDFsRDAsDDVsLGLYmGNoBDdsIGLYhGNoDDdsKGLYlGDoADdsJGLYjGDoCDdsLGLYnGDoBDTsIGHYgGDoDDTsKGHYkGLoADTsJGHYiGLoCDTsLGHYmGLoBDaMFDKMJhu5Awy4Chl0Ihh5Aw64Chl0Jhp5Aw24Cht0Ihl5Aw+4Cht0Jht5Awx4Chj0IhkWAhj0FDHsSDH2Ahr0EDHsRDH2Bhr0FDHsTDP2Ahn0EDPsQDP2Bhn0FDPsSDAOAhv0EDPsRDAOBhv0FDPsTDIOAhgMEDAcQDIOBhjEChjEEwxCgYayAYSzBsCjQME7AMI5gGAo0jBcwjCcYFgMaJggYJhAMiwMNEwUMEwmGYUDDgQKGAwmG4UDDQQKGgwiGJYCGgwUMBxMMI4CGQwQMhxAMI4GGQwUMhxIMSwINhwkYDiMYRgENhwsYDicYlgIajhAwHEEwLA00HClgOJJgWAZoOErAcBTBsCzQcLSA4WiCYTmg4RgBwzEEw/JAw7EChmMJhhWAhuMEDMcRDCsCDccLGI4nGFYCGk4QMJxAMKwMNJwoYDiRYFgFaDhJwHASwbAq0HCygOFkgmE1oOEUAcMpBMPqQMOpAoZTCYY1gIbTBAynEQxrAg2nCxhOJxjWAhrOEDCcQTCsDTScKWA4k2BYB2g4S8BwFsGwLtBwtoDhbIJhPaDhHAHDOQTD+kDDuQKGcwmGDYCG8wQM5xEMGwIN5wsYzicYNgIaLhAwXEAwbAw0XChguJBg2ARouEjAcBHBsCnQcLGA4WKCYTOg4RIBwyUEw+ZAw6UChksJhi2AhssEDJcRDFsCDZcLGC4nGLYCGq4QMFxBMGwNNFwpYLiSYNgGaLhKwHAVwbAt0HC1gOFqgmE7oOEaAcM1BMP2QMO1AoZrCYYdgIbrBAzXEQw7Ag3XCxiuJxh2AhpuEDDcQDDsDDTcKGC4kWAYDTTcJGC4iWDYBWi4WcBwM8GwK9Bwi4DhFoJhN6DhVgHDrQTD7kDDbQKG2wiGPYCG2wUMtxMMewINdwgY7iAY9gIa7hQw3Ekw7A003CVguItg2AdouFvAcDfBsC/QcI+A4R6CYT+g4V4Bw70Ew/5Aw30ChvsIhgOAhvsFDPcTDGOAhgcEDA8QDGOBhgcFDA8SDOOAhocEDA8RDOOBhocFDA8TDBOAhkcEDI8QDBOBhkcFDI8SDAcCDY8JGB4jGA4CGh4XMDxOMBwMNDwhYHiCYDgEaHhSwPAkwXAo0PCUgOEpguEwoOFpAcPTBMPhQMMzAoZnCIYjgIZnBQzPEgxHAg3PCRieIxiOAhqeFzA8TzAcDTS8IGB4gWA4Bmh4UcDwIsFwLNDwkoDhJYLhOKDhZQHDywTD8UDDKwKGVwiGE4CGVwUMrxIMJwINrwkYXiMYTgIaXhcwvE4wnAw0vCFgeINgOAVoeFPA8CbBcCrQ8JaA4S2C4TSg4W0Bw9sEw+lAwzsChncIhjOAhncFDO8SDGcCDe8JGN4jGM4CGt4XMLxPMJwNNHwgYPiAYDgHaPhQwPAhwXAu0PCRgOEjguE8oOFjAcPHBMP5QMMnAoZPCIYLgIZPBQyfEgwXAg2fCRg+IxguAho+FzB8TjBcDDR8IWD4gmC4BGj4UsDwJcFwKdDwlYDhK4LhMqDhawHD1wTD5UDDNwKGbwiGK4CGbwUM3xIMVwIN3wkYviMYrgIavhcwfE8wXA00/CBg+IFguAZo+FHA8CPBcC3Q8JOA4SeC4Tqg4WcBw88Ew/VAwy8Chl8IhhuAhl8FDL8SDDcCDb8JGH4jGG4CGn4XMPxOMNwMNPwhYPiDYLgFaPhTwPAnwXAr0PCXgOEvguE2oOFvAcPfBMPtQMM/AoZ/CIY7gIZ/BQz/Egx3Ag2TRPz3Df99I9pwF9AwqYBhUoLhbqChjYChDcFwD9AwmYBhMoLhXqBhcgHD5ATDfUDDFAKGKQiG+4GGKQUMUxIMDwANUwkYpiIYHgQaphYwTE0wPAQ0TCNgmIZgeBhomFbAMC3B8AjQMJ2AYTqC4VGgYXoBw/QEw2NAwwwChhkIhseBhhkFDDMSDE8ADTMJGGYiGJ4EGmYWMMxMMDwFNMwiYJiFYHgaaJhVwDArwfAM0DCbgGE2guFZoGF2AcPsBMNzQMMcAoY5CIbngYY5BQxzEgwvAA1zCRjmIhheBBrmFjDMTTC8BDTMI2CYh2B4GWiYV8AwL8HwCtAwn4BhPoLhVaBhfgHD/ATDa0DDAgKGBQiG14GGBQUMCxIMbwANCwkYFiIY3gQa2goY2hIMbwENCwsYFiYY3gYa2gkY2hEM7wAN7QUM7QmGd4GGDgKGDgTDe0BDRwFDR4LhfaChk4ChE8HwAdDQWcDQmWD4EGjoImDoQjB8BDR0FTB0JRg+Bhq6CRi6EQyfAA3dBQzdCYZPgYYeAoYeBMNnQENPAUNPguFzoKGXgKEXwfAF0NBbwNCbYPgSaFhEwLAIwfAV0NBHwNCHYPgaaOgrYOhLMHwDNPQTMPQjGL4FGvoLGPoTDN8BDQMEDAMIhu+BhoEChoEEww9AwyABwyCC4UegYbCAYTDB8BPQMETAMIRg+BloWFTAsCjB8AvQMFTAMJRg+BVoWEzAsBjB8BvQsLiAYXGC4XegYZiAYRjB8AfQMFzAMJxg+BNoWELAsATB8BfQMELAMIJg+BtoGClgGEkw/AM0LClgWJJg+BdoGCVgGEUwTOKBMywlYFiKYJgUaFhawLA0wdAGaFhGwLAMwTAZ0LCsgGFZgmFyoGE5AcNyBMMUQMPyAoblCYYpgYYVBAwrEAxTAQ0rChhWJBimBhpWEjCsRDBMAzSsLGBYmWCYFmhYRcCwCsEwHdCwqoBhVYJheqBhNQHDagTDDEDD6gKG1QmGGYGGNQQMaxAMMwENawoY1iQYZgYa1hIwrEUwzAI0rC1gWJtgmBVoWEfAsA7BMBvQsK6AYV2CYXagYT0Bw3oEwxxAw/oChvUJhjmBhg0EDBsQDHMBDRsKGDYkGOYGGjYSMGxEMMwDNGwsYNiYYJgXaNhEwLAJwTAf0LCpgGFTgmF+oGEzAcNmBMMCQMPmAobNCYYFgYYtBAxbEAwLAQ1bChi2JBjaAg1bCRi2IhgWBhq2FjBsTTC0Axq2ETBsQzC0Bxq2FTBsSzB0ABq2EzBsRzB0BBq2FzBsTzB0Ahp2EDDsQDB0Bhp2FDDsSDB0ARp2EjDsRDB0BRp2FjDsTDB0AxpGCxhGEwzdgYZdBAy7EAw9gIZdBQy7Egw9gYbdBAy7EQy9gIbdBQy7Ewy9gYY9BAx7EAyLAA17Chj2JBj6AA17CRj2Ihj6Ag17Cxj2Jhj6AQ37CBj2IRj6Aw37Chj2JRgGAA37CRj2IxgGAg37Cxj2JxgGAQ0HCBgOIBgGAw1jBAxjCIYhQMNYAcNYgmFRoGGcgGEcwTAUaBgvYBhPMCwGNEwQMEwgGBYHGiYKGCYSDMOAhgMFDAcSDMOBhoMEDAcRDEsADQcLGA4mGEYADYcIGA4hGEYCDYcKGA4lGJYEGg4TMBxGMIwCGg4XMBxOMCwFNBwhYDiCYFgaaDhSwHAkwbAM0HCUgOEogmFZoOFoAcPRBMNyQMMxAoZjCIblgYZjBQzHEgwrAA3HCRiOIxhWBBqOFzAcTzCsBDScIGA4gWBYGWg4UcBwIsGwCtBwkoDhJIJhVaDhZAHDyQTDakDDKQKGUwiG1YGGUwUMpxIMawANpwkYTiMY1gQaThcwnE4wrAU0nCFgOINgWBtoOFPAcCbBsA7QcJaA4SyCYV2g4WwBw9kEw3pAwzkChnMIhvWBhnMFDOcSDBsADecJGM4jGDYEGs4XMJxPMGwENFwgYLiAYNgYaLhQwHAhwbAJ0HCRgOEigmFToOFiAcPFBMNmQMMlAoZLCIbNgYZLBQyXEgxbAA2XCRguIxi2BBouFzBcTjBsBTRcIWC4gmDYGmi4UsBwJcGwDdBwlYDhKoJhW6DhagHD1QTDdkDDNQKGawiG7YGGawUM1xIMOwAN1wkYriMYdgQarhcwXE8w7AQ03CBguIFg2BlouFHAcCPBMBpouEnAcBPBsAvQcLOA4WaCYVeg4RYBwy0Ew25Aw60ChlsJht2BhtsEDLcRDHsADbcLGG4nGPYEGu4QMNxBMOwFNNwpYLiTYNgbaLhLwHAXwbAP0HC3gOFugmFfoOEeAcM9BMN+QMO9AoZ7CYb9gYb7BAz3EQwHAA33CxjuJxjGAA0PCBgeIBjGAg0PChgeJBjGAQ0PCRgeIhjGAw0PCxgeJhgmAA2PCBgeIRgmAg2PChgeJRgOBBoeEzA8RjAcBDQ8LmB4nGA4GGh4QsDwBMFwCNDwpIDhSYLhUKDhKQHDUwTDYUDD0wKGpwmGw4GGZwQMzxAMRwANzwoYniUYjgQanhMwPEcwHAU0PC9geJ5gOBpoeEHA8ALBcAzQ8KKA4UWC4Vig4SUBw0sEw3FAw8sChpcJhuOBhlcEDK8QDCcADa8KGF4lGE4EGl4TMLxGMJwENLwuYHidYDgZaHhDwPAGwXAK0PCmgOFNguFUoOEtAcNbBMNpQMPbAoa3CYbTgYZ3BAzvEAxnAA3vChjeJRjOBBreEzC8RzCcBTS8L2B4n2A4G2j4QMDwAcFwDtDwoYDhQ4LhXKDhIwHDRwTDeUDDxwKGjwmG84GGTwQMnxAMFwANnwoYPiUYLgQaPhMwfEYwXAQ0fC5g+JxguBho+ELA8AXBcAnQ8KWA4UuC4VKg4SsBw1cEw2VAw9cChq8JhsuBhm8EDN8QDFcADd8KGL4lGK4EGr4TMHxHMFwFNHwvYPieYLgaaPhBwPADwXAN0PCjgOFHguFaoOEnAcNPBMN1QMPPAoafCYbrgYZfBAy/EAw3AA2/Chh+JRhuBBp+EzD8RjDcBDT8LmD4nWC4GWj4Q8DwB8FwC9Dwp4DhT4LhVqDhLwHDXwTDbUDD3wKGvwmG24GGfwQM/xAMdwAN/woY/iUY7gQaJon87xv++0a04S6gYVIBw6QEw91AQxsBQxuC4R6gYTIBw2QEw71Aw+QChskJhvuAhikEDFMQDPcDDVMKGKYkGB4AGqYSMExFMDwINEwtYJiaYHgIaJhGwDANwfAw0DCtgGFaguERoGE6AcN0BMOjQMP0AobpCYbHgIYZBAwzEAyPAw0zChhmJBieABpmEjDMRDA8CTTMLGCYmWB4CmiYRcAwC8HwNNAwq4BhVoLhGaBhNgHDbATDs0DD7AKG2QmG54CGOQQMcxAMzwMNcwoY5iQYXgAa5hIwzEUwvAg0zC1gmJtgeAlomEfAMA/B8DLQMK+AYV6C4RWgYT4Bw3wEw6tAw/wChvkJhteAhgUEDAsQDK8DDQsKGBYkGN4AGhYSMCxEMLwJNLQVMLQlGN4CGhYWMCxMMLwNNLQTMLQjGN4BGtoLGNoTDO8CDR0EDB0IhveAho4Cho4Ew/tAQycBQyeC4QOgobOAoTPB8CHQ0EXA0IVg+Aho6Cpg6EowfAw0dBMwdCMYPgEaugsYuhMMnwINPQQMPQiGz4CGngKGngTD50BDLwFDL4LhC6Cht4ChN8HwJdCwiIBhEYLhK6Chj4ChD8HwNdDQV8DQl2D4BmjoJ2DoRzB8CzT0FzD0Jxi+AxoGCBgGEAzfAw0DBQwDCYYfgIZBAoZBBMOPQMNgAcNgguEnoGGIgGEIwfAz0LCogGFRguEXoGGogGEowfAr0LCYgGExguE3oGFxAcPiBMPvQMMwAcMwguEPoGG4gGE4wfAn0LCEgGEJguEvoGGEgGEEwfA30DBSwDCSYPgHaFhSwLAkwfAv0DBKwDCKYJjEE2dYSsCwFMEwKdCwtIBhaYKhDdCwjIBhGYJhMqBhWQHDsgTD5EDDcgKG5QiGKYCG5QUMyxMMUwINKwgYViAYpgIaVhQwrEgwTA00rCRgWIlgmAZoWFnAsDLBMC3QsIqAYRWCYTqgYVUBw6oEw/RAw2oChtUIhhmAhtUFDKsTDDMCDWsIGNYgGGYCGtYUMKxJMMwMNKwlYFiLYJgFaFhbwLA2wTAr0LCOgGEdgmE2oGFdAcO6BMPsQMN6Aob1CIY5gIb1BQzrEwxzAg0bCBg2IBjmAho2FDBsSDDMDTRsJGDYiGCYB2jYWMCwMcEwL9CwiYBhE4JhPqBhUwHDpgTD/EDDZgKGzQiGBYCGzQUMmxMMCwINWwgYtiAYFgIathQwbEkwtAUathIwbEUwLAw0bC1g2JpgaAc0bCNg2IZgaA80bCtg2JZg6AA0bCdg2I5g6Ag0bC9g2J5g6AQ07CBg2IFg6Aw07Chg2JFg6AI07CRg2Ilg6Ao07Cxg2Jlg6AY0jBYwjCYYugMNuwgYdiEYegANuwoYdiUYegINuwkYdiMYegENuwsYdicYegMNewgY9iAYFgEa9hQw7Ekw9AEa9hIw7EUw9AUa9hYw7E0w9AMa9hEw7EMw9Aca9hUw7EswDAAa9hMw7EcwDAQa9hcw7E8wDAIaDhAwHEAwDAYaxggYxhAMQ4CGsQKGsQTDokDDOAHDOIJhKNAwXsAwnmBYDGiYIGCYQDAsDjRMFDBMJBiGAQ0HChgOJBiGAw0HCRgOIhiWABoOFjAcTDCMABoOETAcQjCMBBoOFTAcSjAsCTQcJmA4jGAYBTQcLmA4nGBYCmg4QsBwBMGwNNBwpIDhSIJhGaDhKAHDUQTDskDD0QKGowmG5YCGYwQMxxAMywMNxwoYjiUYVgAajhMwHEcwrAg0HC9gOJ5gWAloOEHAcALBsDLQcKKA4USCYRWg4SQBw0kEw6pAw8kChpMJhtWAhlMEDKcQDKsDDacKGE4lGNYAGk4TMJxGMKwJNJwuYDidYFgLaDhDwHAGwbA20HCmgOFMgmEdoOEsAcNZBMO6QMPZAoazCYb1gIZzBAznEAzrAw3nChjOJRg2ABrOEzCcRzBsCDScL2A4n2DYCGi4QMBwAcGwMdBwoYDhQoJhE6DhIgHDRQTDpkDDxQKGiwmGzYCGSwQMlxAMmwMNlwoYLiUYtgAaLhMwXEYwbAk0XC5guJxg2ApouELAcAXBsDXQcKWA4UqCYRug4SoBw1UEw7ZAw9UChqsJhu2AhmsEDNcQDNsDDdcKGK4lGHYAGq4TMFxHMOwINFwvYLieYNgJaLhBwHADwbAz0HCjgOFGgmE00HCTgOEmgmEXoOFmAcPNBMOuQMMtAoZbCIbdgIZbBQy3Egy7Aw23CRhuIxj2ABpuFzDcTjDsCTTcIWC4g2DYC2i4U8BwJ8GwN9Bwl4DhLoJhH6DhbgHD3QTDvkDDPQKGewiG/YCGewUM9xIM+wMN9wkY7iMYDgAa7hcw3E8wjAEaHhAwPEAwjAUaHhQwPEgwjAMaHhIwPEQwjAcaHhYwPEwwTAAaHhEwPEIwTAQaHhUwPEowHAg0PCZgeIxgOAhoeFzA8DjBcDDQ8ISA4QmC4RCg4UkBw5MEw6FAw1MChqcIhsOAhqcFDE8TDIcDDc8IGJ4hGI4AGp4VMDxLMBwJNDwnYHiOYDgKaHhewPA8wXA00PCCgOEFguEYoOFFAcOLBMOxQMNLAoaXCIbjgIaXBQwvEwzHAw2vCBheIRhOABpeFTC8SjCcCDS8JmB4jWA4CWh4XcDwOsFwMtDwhoDhDYLhFKDhTQHDmwTDqUDDWwKGtwiG04CGtwUMbxMMpwMN7wgY3iEYzgAa3hUwvEswnAk0vCdgeI9gOAtoeF/A8D7BcDbQ8IGA4QOC4Ryg4UMBw4cEw7lAw0cCho8IhvOAho8FDB8TDOcDDZ8IGD4hGC4AGj4VMHxKMFwINHwmYPiMYLgIaPhcwPA5wXAx0PCFgOELguESoOFLAcOXBMOlQMNXAoavCIbLgIavBQxfEwyXAw3fCBi+IRiuABq+FTB8SzBcCTR8J2D4jmC4Cmj4XsDwPcFwNdDwg4DhB4LhGqDhRwHDjwTDtUDDTwKGnwiG64CGnwUMPxMM1wMNvwgYfiEYbgAafhUw/Eow3Ag0/CZg+I1guAlo+F3A8DvBcDPQ8IeA4Q+C4Rag4U8Bw58Ew61Aw18Chr8IhtuAhr8FDH8TDLcDDf8IGP4hGO4AGv4VMPxLMNwJNExS8r9v+O8b0Ya7gIZJBQyTEgx3Aw1tBAxtCIZ7gIbJBAyTEQz3Ag2TCxgmJxjuAxqmEDBMQTDcDzRMKWCYkmB4AGiYSsAwFcHwINAwtYBhaoLhIaBhGgHDNATDw0DDtAKGaQmGR4CG6QQM0xEMjwIN0wsYpicYHgMaZhAwzEAwPA40zChgmJFgeAJomEnAMBPB8CTQMLOAYWaC4SmgYRYBwywEw9NAw6wChlkJhmeAhtkEDLMRDM8CDbMLGGYnGJ4DGuYQMMxBMDwPNMwpYJiTYHgBaJhLwDAXwfAi0DC3gGFuguEloGEeAcM8BMPLQMO8AoZ5CYZXgIb5BAzzEQyvAg3zCxjmJxheAxoWEDAsQDC8DjQsKGBYkGB4A2hYSMCwEMHwJtDQVsDQlmB4C2hYWMCwMMHwNtDQTsDQjmB4B2hoL2BoTzC8CzR0EDB0IBjeAxo6Chg6EgzvAw2dBAydCIYPgIbOAobOBMOHQEMXAUMXguEjoKGrgKErwfAx0NBNwNCNYPgEaOguYOhOMHwKNPQQMPQgGD4DGnoKGHoSDJ8DDb0EDL0Ihi+Aht4Cht4Ew5dAwyIChkUIhq+Ahj4Chj4Ew9dAQ18BQ1+C4RugoZ+AoR/B8C3Q0F/A0J9g+A5oGCBgGEAwfA80DBQwDCQYfgAaBgkYBhEMPwINgwUMgwmGn4CGIQKGIQTDz0DDogKGRQmGX4CGoQKGoQTDr0DDYgKGxQiG34CGxQUMixMMvwMNwwQMwwiGP4CG4QKG4QTDn0DDEgKGJQiGv4CGEQKGEQTD30DDSAHDSILhH6BhSQHDkgTDv0DDKAHDKIJhEi+cYSkBw1IEw6RAw9IChqUJhjZAwzIChmUIhsmAhmUFDMsSDJMDDcsJGJYjGKYAGpYXMCxPMEwJNKwgYFiBYJgKaFhRwLAiwTA10LCSgGElgmEaoGFlAcPKBMO0QMMqAoZVCIbpgIZVBQyrEgzTAw2rCRhWIxhmABpWFzCsTjDMCDSsIWBYg2CYCWhYU8CwJsEwM9CwloBhLYJhFqBhbQHD2gTDrEDDOgKGdQiG2YCGdQUM6xIMswMN6wkY1iMY5gAa1hcwrE8wzAk0bCBg2IBgmAto2FDAsCHBMDfQsJGAYSOCYR6gYWMBw8YEw7xAwyYChk0IhvmAhk0FDJsSDPMDDZsJGDYjGBYAGjYXMGxOMCwINGwhYNiCYFgIaNhSwLAlwdAWaNhKwLAVwbAw0LC1gGFrgqEd0LCNgGEbgqE90LCtgGFbgqED0LCdgGE7gqEj0LC9gGF7gqET0LCDgGEHgqEz0LCjgGFHgqEL0LCTgGEngqEr0LCzgGFngqEb0DBawDCaYOgONOwiYNiFYOgBNOwqYNiVYOgJNOwmYNiNYOgFNOwuYNidYOgNNOwhYNiDYFgEaNhTwLAnwdAHaNhLwLAXwdAXaNhbwLA3wdAPaNhHwLAPwdAfaNhXwLAvwTAAaNhPwLAfwTAQaNhfwLA/wTAIaDhAwHAAwTAYaBgjYBhDMAwBGsYKGMYSDIsCDeMEDOMIhqFAw3gBw3iCYTGgYYKAYQLBsDjQMFHAMJFgGAY0HChgOJBgGA40HCRgOIhgWAJoOFjAcDDBMAJoOETAcAjBMBJoOFTAcCjBsCTQcJiA4TCCYRTQcLiA4XCCYSmg4QgBwxEEw9JAw5EChiMJhmWAhqMEDEcRDMsCDUcLGI4mGJYDGo4RMBxDMCwPNBwrYDiWYFgBaDhOwHAcwbAi0HC8gOF4gmEloOEEAcMJBMPKQMOJAoYTCYZVgIaTBAwnEQyrAg0nCxhOJhhWAxpOETCcQjCsDjScKmA4lWBYA2g4TcBwGsGwJtBwuoDhdIJhLaDhDAHDGQTD2kDDmQKGMwmGdYCGswQMZxEM6wINZwsYziYY1gMazhEwnEMwrA80nCtgOJdg2ABoOE/AcB7BsCHQcL6A4XyCYSOg4QIBwwUEw8ZAw4UChgsJhk2AhosEDBcRDJsCDRcLGC4mGDYDGi4RMFxCMGwONFwqYLiUYNgCaLhMwHAZwbAl0HC5gOFygmEroOEKAcMVBMPWQMOVAoYrCYZtgIarBAxXEQzbAg1XCxiuJhi2AxquETBcQzBsDzRcK2C4lmDYAWi4TsBwHcGwI9BwvYDheoJhJ6DhBgHDDQTDzkDDjQKGGwmG0UDDTQKGmwiGXYCGmwUMNxMMuwINtwgYbiEYdgMabhUw3Eow7A403CZguI1g2ANouF3AcDvBsCfQcIeA4Q6CYS+g4U4Bw50Ew95Aw10ChrsIhn2AhrsFDHcTDPsCDfcIGO4hGPYDGu4VMNxLMOwPNNwnYLiPYDgAaLhfwHA/wTAGaHhAwPAAwTAWaHhQwPAgwTAOaHhIwPAQwTAeaHhYwPAwwTABaHhEwPAIwTARaHhUwPAowXAg0PCYgOExguEgoOFxAcPjBMPBQMMTAoYnCIZDgIYnBQxPEgyHAg1PCRieIhgOAxqeFjA8TTAcDjQ8I2B4hmA4Amh4VsDwLMFwJNDwnIDhOYLhKKDheQHD8wTD0UDDCwKGFwiGY4CGFwUMLxIMxwINLwkYXiIYjgMaXhYwvEwwHA80vCJgeIVgOAFoeFXA8CrBcCLQ8JqA4TWC4SSg4XUBw+sEw8lAwxsChjcIhlOAhjcFDG8SDKcCDW8JGN4iGE4DGt4WMLxNMJwONLwjYHiHYDgDaHhXwPAuwXAm0PCegOE9guEsoOF9AcP7BMPZQMMHAoYPCIZzgIYPBQwfEgznAg0fCRg+IhjOAxo+FjB8TDCcDzR8ImD4hGC4AGj4VMDwKcFwIdDwmYDhM4LhIqDhcwHD5wTDxUDDFwKGLwiGS4CGLwUMXxIMlwINXwkYviIYLgMavhYwfE0wXA40fCNg+IZguAJo+FbA8C3BcCXQ8J2A4TuC4Sqg4XsBw/cEw9VAww8Chh8IhmuAhh8FDD8SDNcCDT8JGH4iGK4DGn4WMPxMMFwPNPwiYPiFYLgBaPhVwPArwXAj0PCbgOE3guEmoOF3AcPvBMPNQMMfAoY/CIZbgIY/BQx/Egy3Ag1/CRj+IhhuAxr+FjD8TTDcDjT8I2D4h2C4A2j4V8DwL8FwJ9AwSdR/3/DfN6INdwENkwoYJiUY7gYa2ggY2hAM9wANkwkYJiMY7gUaJhcwTE4w3Ac0TCFgmIJguB9omFLAMCXB8ADQMJWAYSqC4UGgYWoBw9QEw0NAwzQChmkIhoeBhmkFDNMSDI8ADdMJGKYjGB4FGqYXMExPMDwGNMwgYJiBYHgcaJhRwDAjwfAE0DCTgGEmguFJoGFmAcPMBMNTQMMsAoZZCIangYZZBQyzEgzPAA2zCRhmIxieBRpmFzDMTjA8BzTMIWCYg2B4HmiYU8AwJ8HwAtAwl4BhLoLhRaBhbgHD3ATDS0DDPAKGeQiGl4GGeQUM8xIMrwAN8wkY5iMYXgUa5hcwzE8wvAY0LCBgWIBgeB1oWFDAsCDB8AbQsJCAYSGC4U2goa2AoS3B8BbQsLCAYWGC4W2goZ2AoR3B8A7Q0F7A0J5geBdo6CBg6EAwvAc0dBQwdCQY3gcaOgkYOhEMHwANnQUMnQmGD4GGLgKGLgTDR0BDVwFDV4LhY6Chm4ChG8HwCdDQXcDQnWD4FGjoIWDoQTB8BjT0FDD0JBg+Bxp6CRh6EQxfAA29BQy9CYYvgYZFBAyLEAxfAQ19BAx9CIavgYa+Aoa+BMM3QEM/AUM/guFboKG/gKE/wfAd0DBAwDCAYPgeaBgoYBhIMPwANAwSMAwiGH4EGgYLGAYTDD8BDUMEDEMIhp+BhkUFDIsSDL8ADUMFDEMJhl+BhsUEDIsRDL8BDYsLGBYnGH4HGoYJGIYRDH8ADcMFDMMJhj+BhiUEDEsQDH8BDSMEDCMIhr+BhpEChpEEwz9Aw5IChiUJhn+BhlEChlEEwyTeOMNSAoalCIZJgYalBQxLEwxtgIZlBAzLEAyTAQ3LChiWJRgmBxqWEzAsRzBMATQsL2BYnmCYEmhYQcCwAsEwFdCwooBhRYJhaqBhJQHDSgTDNEDDygKGlQmGaYGGVQQMqxAM0wENqwoYViUYpgcaVhMwrEYwzAA0rC5gWJ1gmBFoWEPAsAbBMBPQsKaAYU2CYWagYS0Bw1oEwyxAw9oChrUJhlmBhnUEDOsQDLMBDesKGNYlGGYHGtYTMKxHMMwBNKwvYFifYJgTaNhAwLABwTAX0LChgGFDgmFuoGEjAcNGBMM8QMPGAoaNCYZ5gYZNBAybEAzzAQ2bChg2JRjmBxo2EzBsRjAsADRsLmDYnGBYEGjYQsCwBcGwENCwpYBhS4KhLdCwlYBhK4JhYaBhawHD1gRDO6BhGwHDNgRDe6BhWwHDtgRDB6BhOwHDdgRDR6BhewHD9gRDJ6BhBwHDDgRDZ6BhRwHDjgRDF6BhJwHDTgRDV6BhZwHDzgRDN6BhtIBhNMHQHWjYRcCwC8HQA2jYVcCwK8HQE2jYTcCwG8HQC2jYXcCwO8HQG2jYQ8CwB8GwCNCwp4BhT4KhD9Cwl4BhL4KhL9Cwt4Bhb4KhH9Cwj4BhH4KhP9Cwr4BhX4JhANCwn4BhP4JhINCwv4Bhf4JhENBwgIDhAIJhMNAwRsAwhmAYAjSMFTCMJRgWBRrGCRjGEQxDgYbxAobxBMNiQMMEAcMEgmFxoGGigGEiwTAMaDhQwHAgwTAcaDhIwHAQwbAE0HCwgOFggmEE0HCIgOEQgmEk0HCogOFQgmFJoOEwAcNhBMMooOFwAcPhBMNSQMMRAoYjCIalgYYjBQxHEgzLAA1HCRiOIhiWBRqOFjAcTTAsBzQcI2A4hmBYHmg4VsBwLMGwAtBwnIDhOIJhRaDheAHD8QTDSkDDCQKGEwiGlYGGEwUMJxIMqwANJwkYTiIYVgUaThYwnEwwrAY0nCJgOIVgWB1oOFXAcCrBsAbQcJqA4TSCYU2g4XQBw+kEw1pAwxkChjMIhrWBhjMFDGcSDOsADWcJGM4iGNYFGs4WMJxNMKwHNJwjYDiHYFgfaDhXwHAuwbAB0HCegOE8gmFDoOF8AcP5BMNGQMMFAoYLCIaNgYYLBQwXEgybAA0XCRguIhg2BRouFjBcTDBsBjRcImC4hGDYHGi4VMBwKcGwBdBwmYDhMoJhS6DhcgHD5QTDVkDDFQKGKwiGrYGGKwUMVxIM2wANVwkYriIYtgUarhYwXE0wbAc0XCNguIZg2B5ouFbAcC3BsAPQcJ2A4TqCYUeg4XoBw/UEw05Aww0ChhsIhp2BhhsFDDcSDKOBhpsEDDcRDLsADTcLGG4mGHYFGm4RMNxCMOwGNNwqYLiVYNgdaLhNwHAbwbAH0HC7gOF2gmFPoOEOAcMdBMNeQMOdAoY7CYa9gYa7BAx3EQz7AA13CxjuJhj2BRruETDcQzDsBzTcK2C4l2DYH2i4T8BwH8FwANBwv4DhfoJhDNDwgIDhAYJhLNDwoIDhQYJhHNDwkIDhIYJhPNDwsIDhYYJhAtDwiIDhEYJhItDwqIDhUYLhQKDhMQHDYwTDQUDD4wKGxwmGg4GGJwQMTxAMhwANTwoYniQYDgUanhIwPEUwHAY0PC1geJpgOBxoeEbA8AzBcATQ8KyA4VmC4Uig4TkBw3MEw1FAw/MChucJhqOBhhcEDC8QDMcADS8KGF4kGI4FGl4SMLxEMBwHNLwsYHiZYDgeaHhFwPAKwXAC0PCqgOFVguFEoOE1AcNrBMNJQMPrAobXCYaTgYY3BAxvEAynAA1vChjeJBhOBRreEjC8RTCcBjS8LWB4m2A4HWh4R8DwDsFwBtDwroDhXYLhTKDhPQHDewTDWUDD+wKG9wmGs4GGDwQMHxAM5wANHwoYPiQYzgUaPhIwfEQwnAc0fCxg+JhgOB9o+ETA8AnBcAHQ8KmA4VOC4UKg4TMBw2cEw0VAw+cChs8JhouBhi8EDF8QDJcADV8KGL4kGC4FGr4SMHxFMFwGNHwtYPiaYLgcaPhGwPANwXAF0PCtgOFbguFKoOE7AcN3BMNVQMP3AobvCYargYYfBAw/EAzXAA0/Chh+JBiuBRp+EjD8RDBcBzT8LGD4mWC4Hmj4RcDwC8FwA9Dwq4DhV4LhRqDhNwHDbwTDTUDD7wKG3wmGm4GGPwQMfxAMtwANfwoY/iQYbgUa/hIw/EUw3AY0/C1g+JtguB1o+EfA8A/BcAfQ8K+A4V+C4U6gYZJS/33Df9+INtwFNEwqYJiUYLgbaGgjYGhDMNwDNEwmYJiMYLgXaJhcwDA5wXAf0DCFgGEKguF+oGFKAcOUBMMDQMNUAoapCIYHgYapBQxTEwwPAQ3TCBimIRgeBhqmFTBMSzA8AjRMJ2CYjmB4FGiYXsAwPcHwGNAwg4BhBoLhcaBhRgHDjATDE0DDTAKGmQiGJ4GGmQUMMxMMTwENswgYZiEYngYaZhUwzEowPAM0zCZgmI1geBZomF3AMDvB8BzQMIeAYQ6C4XmgYU4Bw5wEwwtAw1wChrkIhheBhrkFDHMTDC8BDfMIGOYhGF4GGuYVMMxLMLwCNMwnYJiPYHgVaJhfwDA/wfAa0LCAgGEBguF1oGFBAcOCBMMbQMNCAoaFCIY3gYa2Aoa2BMNbQMPCAoaFCYa3gYZ2AoZ2BMM7QEN7AUN7guFdoKGDgKEDwfAe0NBRwNCRYHgfaOgkYOhEMHwANHQWMHQmGD4EGroIGLoQDB8BDV0FDF0Jho+Bhm4Chm4EwydAQ3cBQ3eC4VOgoYeAoQfB8BnQ0FPA0JNg+Bxo6CVg6EUwfAE09BYw9CYYvgQaFhEwLEIwfAU09BEw9CEYvgYa+goY+hIM3wAN/QQM/QiGb4GG/gKG/gTDd0DDAAHDAILhe6BhoIBhIMHwA9AwSMAwiGD4EWgYLGAYTDD8BDQMETAMIRh+BhoWFTAsSjD8AjQMFTAMJRh+BRoWEzAsRjD8BjQsLmBYnGD4HWgYJmAYRjD8ATQMFzAMJxj+BBqWEDAsQTD8BTSMEDCMIBj+BhpGChhGEgz/AA1L/scNkwQnSfI//x9J8J+bNBhnGCVwh1GEO7QBGpYSMCxFMEwGNCwtYFiaYJgcaFhGwLAMwTAF0LCsgGFZgmFKoGE5AcNyBMNUQMPyAoblCYapgYYVBAwrEAzTAA0rChhWJBimBRpWEjCsRDBMBzSsLGBYmWCYHmhYRcCwCsEwA9CwqoBhVYJhRqBhNQHDagTDTEDD6gKG1QmGmYGGNQQMaxAMswANawoY1iQYZgUa1hIwrEUwzAY0rC1gWJtgmB1oWEfAsA7BMAfQsK6AYV2CYU6gYT0Bw3oEw1xAw/oChvUJhrmBhg0EDBsQDPMADRsKGDYkGOYFGjYSMGxEMMwHNGwsYNiYYJgfaNhEwLAJwbAA0LCpgGFTgmFBoGEzAcNmBMNCQMPmAobNCYa2QMMWAoYtCIaFgYYtBQxbEgztgIatBAxbEQztgYatBQxbEwwdgIZtBAzbEAwdgYZtBQzbEgydgIbtBAzbEQydgYbtBQzbEwxdgIYdBAw7EAxdgYYdBQw7EgzdgIadBAw7EQzdgYadBQw7Eww9gIbRAobRBENPoGEXAcMuBEMvoGFXAcOuBENvoGE3AcNuBMMiQMPuAobdCYY+QMMeAoY9CIa+QMOeAoY9CYZ+QMNeAoa9CIb+QMPeAoa9CYYBQMM+AoZ9CIaBQMO+AoZ9CYZBQMN+Aob9CIbBQMP+Aob9CYYhQMMBAoYDCIZFgYYxAoYxBMNQoGGsgGEswbAY0DBOwDCOYFgcaBgvYBhPMAwDGiYIGCYQDMOBhokChokEwxJAw4EChgMJhhFAw0EChoMIhpFAw8EChoMJhiWBhkMEDIcQDKOAhkMFDIcSDEsBDYcJGA4jGJYGGg4XMBxOMCwDNBwhYDiCYFgWaDhSwHAkwbAc0HCUgOEogmF5oOFoAcPRBMMKQMMxAoZjCIYVgYZjBQzHEgwrAQ3HCRiOIxhWBhqOFzAcTzCsAjScIGA4gWBYFWg4UcBwIsGwGtBwkoDhJIJhdaDhZAHDyQTDGkDDKQKGUwiGNYGGUwUMpxIMawENpwkYTiMY1gYaThcwnE4wrAM0nCFgOINgWBdoOFPAcCbBsB7QcJaA4SyCYX2g4WwBw9kEwwZAwzkChnMIhg2BhnMFDOcSDBsBDecJGM4jGDYGGs4XMJxPMGwCNFwgYLiAYNgUaLhQwHAhwbAZ0HCRgOEigmFzoOFiAcPFBMMWQMMlAoZLCIYtgYZLBQyXEgxbAQ2XCRguIxi2BhouFzBcTjBsAzRcIWC4gmDYFmi4UsBwJcGwHdBwlYDhKoJhe6DhagHD1QTDDkDDNQKGawiGHYGGawUM1xIMOwEN1wkYriMYdgYarhcwXE8wjAYabhAw3EAw7AI03ChguJFg2BVouEnAcBPBsBvQcLOA4WaCYXeg4RYBwy0Ewx5Aw60ChlsJhj2BhtsEDLcRDHsBDbcLGG4nGPYGGu4QMNxBMOwDNNwpYLiTYNgXaLhLwHAXwbAf0HC3gOFugmF/oOEeAcM9BMMBQMO9AoZ7CYYxQMN9Aob7CIaxQMP9Aob7CYZxQMMDAoYHCIbxQMODAoYHCYYJQMNDAoaHCIaJQMP/j5p72gGE0ZYt/Ldt27Zt27Zt27Zt27Zt27bdfbLOM4xKdr1AZeTLvJ5HDAyPCAwHgYZHDQyPCgwHg4bHDAyPCQyHgIbHDQyPCwyHgoYnDAxPCAyHgYYnDQxPCgyHg4anDAxPCQxHgIanDQxPCwxHgoZnDAzPCAxHgYZnDQzPCgxHg4bnDAzPCQzHgIbnDQzPCwzHgoYXDAwvCAzHgYYXDQwvCgzHg4aXDAwvCQwngIaXDQwvCwwngoZXDAyvCAwngYZXDQyvCgwng4bXDAyvCQyngIbXDQyvCwyngoY3DAxvCAyngYY3DQxvCgyng4a3DAxvCQxngIa3DQxvCwxngoZ3DAzvCAxngYZ3DQzvCgxng4b3DAzvCQzngIb3DQzvCwzngoYPDAwfCAzngYYPDQwfCgzng4aPDAwfCQwXgIaPDQwfCwwXgoZPDAyfCAwXgYZPDQyfCgwXg4bPDAyfCQyXgIbPDQyfCwyXgoYvDAxfCAyXgYYvDQxfCgyXg4avDAxfCQxXgIavDQxfCwxXgoZvDAzfCAxXgYZvDQzfCgxXg4bvDAzfCQzXgIbvDQzfCwzXgoYfDAw/CAzXgYYfDQw/CgzXg4afDAw/CQw3gIafDQw/Cww3goZfDAy/CAw3gYZfDQy/Cgw3g4bfDAy/CQy3gIbfDQy/Cwy3goY/DAx/CAy3gYY/DQx/Cgy3g4a/DAx/CQx3gIa/DQx/Cwx3goZ/DAz/CAx3gYZ/DQz/Cgx3g4b/DAz/CQz3gIb/Ff2/b/i/RtpwL2gYwMAwgMBwH2gY0MAwoMBwP2gYyMAwkMDwAGgY2MAwsMDwIGgYxMAwiMDwEGgY1MAwqMDwMGgYzMAwmMDwCGgY3MAwuMDwKGgYwsAwhMDwGGgY0sAwpMDwOGgYysAwlMDwBGgY2sAwtMDwJGgYxsAwjMDwFGgY1sAwrMDwNGgYzsAwnMDwDGgY3sAwvMDwLGgYwcAwgsDwHGgY0cAwosDwPGgYycAwksDwAmgY2cAwssDwImgYxcAwisDwEmgY1cAwqsDwMmgYzcAwmsDwCmgY3cAwusDwKmgYw8AwhsDwGmgY08AwpsDwOmgYy8AwlsDwBmgY28AwtsDwJmgYx8AwjsDwFmgY18AwrsDwNmgYz8AwnsDwDmgY38AwvsDwLmiYwMAwgcDwHmiY0MAwocDwPmiYyMAwkcDwAWiY2MAwscDwIWiYxMAwicDwEWiY1MAwqcDwMWiYzMAwmcDwCWiY3MAwucDwKWiYwsAwhcDwGWiY0sAwpcDwOWiYysAwlcDwBWiY2sAwtcDwJWiYxsAwjcDwFWiY1sAwrcDwNWiYzsAwncDwDWiY3sAwvcDwLWiYwcAwg8DwHWiY0cAwo8DwPWiYycAwk8DwA2iY2cAws8DwI2iYxcAwi8DwE2iY1cAwq8DwM2iYzcAwm8DwC2iY3cAwu8DwK2iYw8Awh8DwG2iY08Awp8DwO2iYy8Awl8DwB2iY28Awt8DwJ2iYx8Awj8DwF2iY18Awr8DwN2iYz8Awn8DwD2iY38Awv8DwL2hYwMCwgMDwH2hY0MCwoMDwvxycYSEDw0ICwwCgYWEDw8ICw4CgYREDwyICw0CgYVEDw6ICw8CgYTEDw2ICwyCgYXEDw+ICw6CgYQkDwxICw2CgYUkDw5ICw+CgYSkDw1ICwxCgYWkDw9ICw5CgYRkDwzICw1CgYVkDw7ICw9CgYTkDw3ICwzCgYXkDw/ICw7CgYQUDwwoCw3CgYUUDw4oCw/CgYSUDw0oCwwigYWUDw8oCw4igYRUDwyoCw0igYVUDw6oCw8igYTUDw2oCwyigYXUDw+oCw6igYQ0DwxoCw2igYU0Dw5oCw+igYS0Dw1oCwxigYW0Dw9oCw5igYR0DwzoCw1igYV0Dw7oCw9igYT0Dw3oCwzigYX0Dw/oCw7igYQMDwwYCw3igYUMDw4YCw/igYSMDw0YCwwSgYWMDw8YCw4SgYRMDwyYCw0SgYVMDw6YCw8SgYTMDw2YCwySgYXMDw+YCw6SgYQsDwxYCw2SgYUsDw5YCw+SgYSsDw1YCwxSgYWsDw9YCw5SgYRsDwzYCw1SgYVsDw7YCw9SgYTsDw3YCwzSgYXsDw/YCw7SgYQcDww4Cw3SgYUcDw44Cw/SgYScDw04CwwygYWcDw84Cw4ygYRcDwy4Cw0ygYVcDw64Cw8ygYTcDw24CwyygYXcDw+4Cw6ygYQ8Dwx4Cw2ygYU8Dw54Cw+ygYS8Dw14CwxygYW8Dw94Cw5ygYR8Dwz4Cw1ygYV8Dw74Cw9ygYT8Dw34CwzygYX8Dw/4Cw7yg4QADwwECw3yg4UADw4ECw/yg4SADw0ECwwKg4WADw8ECw4Kg4RADwyECw0Kg4VADw6ECw8Kg4TADw2ECwyKg4XADw+ECw6Kg4QgDwxECw2Kg4UgDw5ECw+Kg4SgDw1ECwxKg4WgDw9ECw5Kg4RgDwzECw1Kg4VgDw7ECw9Kg4TgDw3ECwzKg4XgDw/ECw7Kg4QQDwwkCw3Kg4UQDw4kCw/Kg4SQDw0kCwwqg4WQDw8kCw4qg4RQDwykCw0qg4VQDw6kCw8qg4TQDw2kCwyqg4XQDw+kCw6qg4QwDwxkCw2qg4UwDw5kCw+qg4SwDw1kCwxqg4WwDw9kCw5qg4RwDwzkCw1qg4VwDw7kCw9qg4TwDw3kCwzqg4XwDw/kCw7qg4QIDwwUCw3qg4UIDw4UCw/qg4SIDw0UCwwag4WIDw8UCw4ag4RIDwyUCw0ag4VIDw6UCw8ag4TIDw2UCwyag4XIDw+UCw6ag4QoDwxUCw2ag4UoDw5UCw+ag4SoDw1UCwxag4WoDw9UCw5ag4RoDwzUCw1ag4VoDw7UCw9ag4ToDw3UCwzag4XoDw/UCw7ag4QYDww0Cw3ag4UYDw40Cw/ag4SYDw00Cww6g4WYDw80Cw46g4RYDwy0Cw06g4VYDw60Cw86g4TYDw20Cwy6g4XYDw+0Cw66g4Q4Dwx0Cw26g4U4Dw50Cw+6g4S4Dw10Cwx6g4W4Dw90Cw56g4R4Dwz0Cw16g4V4Dw70Cw96g4T4Dw30Cwz6g4X4Dw/0Cw76g4QEDwwMCw36g4UEDw4MCw/6g4SEDw0MCwwGg4WEDw8MCw4Gg4REDwyMCw0Gg4VEDw6MCw8Gg4TEDw2MCwyGg4XEDw+MCw6Gg4QkDwxMCw2Gg4UkDw5MCw+Gg4SkDw1MCwxGg4WkDw9MCw5Gg4RkDwzMCw1Gg4VkDw7MCw9Gg4TkDw3MCwzGg4XkDw/MCw7Gg4QUDwwsCw3Gg4UUDw4sCw/Gg4SUDw0sCwwmg4WUDw8sCw4mg4RUDwysCw0mg4VUDw6sCw8mg4TUDw2sCwymg4XUDw+sCw6mg4Q0DwxsCw2mg4U0Dw5sCw+mg4S0Dw1sCwxmg4W0Dw9sCw5mg4R0DwzsCw1mg4V0Dw7sCw9mg4T0Dw3sCwzmg4X0Dw/sCw7mg4QMDwwcCw3mg4UMDw4cCw/mg4SMDw0cCwwWg4WMDw8cCw4Wg4RMDwycCw0Wg4VMDw6cCw8Wg4TMDw2cCwyWg4XMDw+cCw6Wg4QsDwxcCw2Wg4UsDw5cCw+Wg4SsDw1cCwxWg4WsDw9cCw5Wg4RsDwzcCw1Wg4VsDw7cCw9Wg4TsDw3cCwzWg4XsDw/cCw7Wg4QcDww8Cw3Wg4UcDw48Cw/Wg4ScDw08Cww2g4WcDw88Cw42g4RcDwy8Cw02g4VcDw68Cw82g4TcDw28Cwy2g4XcDw+8Cw62g4Q8Dwx8Cw22g4U8Dw58Cw+2g4S8Dw18Cwx2g4W8Dw98Cw52g4R8Dwz8Cw12g4V8Dw78Cw92g4T8Dw38Cwz2g4X/F/u8b/q+RNtwLGgYwMAwgMNwHGgY0MAwoMNwPGgYyMAwkMDwAGgY2MAwsMDwIGgYxMAwiMDwEGgY1MAwqMDwMGgYzMAwmMDwCGgY3MAwuMDwKGoYwMAwhMDwGGoY0MAwpMDwOGoYyMAwlMDwBGoY2MAwtMDwJGoYxMAwjMDwFGoY1MAwrMDwNGoYzMAwnMDwDGoY3MAwvMDwLGkYwMIwgMDwHGkY0MIwoMDwPGkYyMIwkMLwAGkY2MIwsMLwIGkYxMIwiMLwEGkY1MIwqMLwMGkYzMIwmMLwCGkY3MIwuMLwKGsYwMIwhMLwGGsY0MIwpMLwOGsYyMIwlMLwBGsY2MIwtMLwJGsYxMIwjMLwFGsY1MIwrMLwNGsYzMIwnMLwDGsY3MIwvMLwLGiYwMEwgMLwHGiY0MEwoMLwPGiYyMEwkMHwAGiY2MEwsMHwIGiYxMEwiMHwEGiY1MEwqMHwMGiYzMEwmMHwCGiY3MEwuMHwKGqYwMEwhMHwGGqY0MEwpMHwOGqYyMEwlMHwBGqY2MEwtMHwJGqYxMEwjMHwFGqY1MEwrMHwNGqYzMEwnMHwDGqY3MEwvMHwLGmYwMMwgMHwHGmY0MMwoMHwPGmYyMMwkMPwAGmY2MMwsMPwIGmYxMMwiMPwEGmY1MMwqMPwMGmYzMMwmMPwCGmY3MMwuMPwKGuYwMMwhMPwGGuY0MMwpMPwOGuYyMMwlMPwBGuY2MMwtMPwJGuYxMMwjMPwFGuY1MMwrMPwNGuYzMMwnMPwDGuY3MMwvMPwLGhYwMCwgMPwHGhY0MCwoMPwvJ2dYyMCwkMAwAGhY2MCwsMAwIGhYxMCwiMAwEGhY1MCwqMAwMGhYzMCwmMAwCGhY3MCwuMAwKGhYwsCwhMAwGGhY0sCwpMAwOGhYysCwlMAwBGhY2sCwtMAwJGhYxsCwjMAwFGhY1sCwrMAwNGhYzsCwnMAwDGhY3sCwvMAwLGhYwcCwgsAwHGhY0cCwosAwPGhYycCwksAwAmhY2cCwssAwImhYxcCwisAwEmhY1cCwqsAwMmhYzcCwmsAwCmhY3cCwusAwKmhYw8CwhsAwGmhY08CwpsAwOmhYy8CwlsAwBmhY28CwtsAwJmhYx8CwjsAwFmhY18CwrsAwNmhYz8CwnsAwDmhY38CwvsAwLmjYwMCwgcAwHmjY0MCwocAwPmjYyMCwkcAwAWjY2MCwscAwIWjYxMCwicAwEWjY1MCwqcAwMWjYzMCwmcAwCWjY3MCwucAwKWjYwsCwhcAwGWjY0sCwpcAwOWjYysCwlcAwBWjY2sCwtcAwJWjYxsCwjcAwFWjY1sCwrcAwNWjYzsCwncAwDWjY3sCwvcAwLWjYwcCwg8AwHWjY0cCwo8AwPWjYycCwk8AwA2jY2cCws8AwI2jYxcCwi8AwE2jY1cCwq8AwM2jYzcCwm8AwC2jY3cCwu8AwK2jYw8Cwh8AwG2jY08Cwp8AwO2jYy8Cwl8AwB2jY28Cwt8AwJ2jYx8Cwj8AwF2jY18Cwr8AwN2jYz8Cwn8AwD2jY38Cwv8AwL2g4wMBwgMAwH2g40MBwoMAwP2g4yMBwkMCwAGg42MBwsMCwIGg4xMBwiMCwEGg41MBwqMCwMGg4zMBwmMCwCGg43MBwuMCwKGg4wsBwhMCwGGg40sBwpMCwOGg4ysBwlMCwBGg42sBwtMCwJGg4xsBwjMCwFGg41sBwrMCwNGg4zsBwnMCwDGg43sBwvMCwLGg4wcBwgsCwHGg40cBwosCwPGg4ycBwksCwAmg42cBwssCwImg4xcBwisCwEmg41cBwqsCwMmg4zcBwmsCwCmg43cBwusCwKmg4w8BwhsCwGmg408BwpsCwOmg4y8BwlsCwBmg428BwtsCwJmg4x8BwjsCwFmg418BwrsCwNmg4z8BwnsCwDmg438BwvsCwLmi4wMBwgcCwHmi40MBwocCwPmi4yMBwkcCwAWi42MBwscCwIWi4xMBwicCwEWi41MBwqcCwMWi4zMBwmcCwCWi43MBwucCwKWi4wsBwhcCwGWi40sBwpcCwOWi4ysBwlcCwBWi42sBwtcCwJWi4xsBwjcCwFWi41sBwrcCwNWi4zsBwncCwDWi43sBwvcCwLWi4wcBwg8CwHWi40cBwo8CwPWi4ycBwk8CwA2i42cBws8CwI2i4xcBwi8CwE2i41cBwq8CwM2i4zcBwm8CwC2i43cBwu8CwK2i4w8Bwh8CwG2i408Bwp8CwO2i4y8Bwl8CwB2i428Bwt8CwJ2i4x8Bwj8CwF2i418Bwr8CwN2i4z8Bwn8CwD2i438Bwv8CwL2h4wMDwgMCwH2h40MDwoMCwP2h4yMDwkMBwAGh42MDwsMBwIGh4xMDwiMBwEGh41MDwqMBwMGh4zMDwmMBwCGh43MDwuMBwKGh4wsDwhMBwGGh40sDwpMBwOGh4ysDwlMBwBGh42sDwtMBwJGh4xsDwjMBwFGh41sDwrMBwNGh4zsDwnMBwDGh43sDwvMBwLGh4wcDwgsBwHGh40cDwosBwPGh4ycDwksBwAmh42cDwssBwImh4xcDwisBwEmh41cDwqsBwMmh4zcDwmsBwCmh43cDwusBwKmh4w8DwhsBwGmh408DwpsBwOmh4y8DwlsBwBmh428DwtsBwJmh4x8DwjsBwFmh418DwrsBwNmh4z8DwnsBwDmh438DwvsBwLmj4wMDwgcBwHmj40MDwocBwPmj4yMDwkcBwAWj42MDwscBwIWj4xMDwicBwEWj41MDwqcBwMWj4zMDwmcBwCWj43MDwucBwKWj4wsDwhcBwGWj40sDwpcBwOWj4ysDwlcBwBWj42sDwtcBwJWj4xsDwjcBwFWj41sDwrcBwNWj4zsDwncBwDWj43sDwvcBwLWj4wcDwg8BwHWj40cDwo8BwPWj4ycDwk8BwA2j42cDws8BwI2j4xcDwi8BwE2j41cDwq8BwM2j4zcDwm8BwC2j43cDwu8BwK2j4w8Dwh8BwG2j408Dwp8BwO2j4y8Dwl8BwB2j428Dwt8BwJ2j4x8Dwj8BwF2j418Dwr8BwN2j4z8Dwn8BwD2j4X/H/+4b/a6QN94KGAQwMAwgM94GGAQ0MAwoM94OGgQwMAwkMD4CGgQ0MAwsMD4KGQQwMgwgMD4GGQQ0MgwoMD4OGwQwMgwkMj4CGwQ0MgwsMj4KGIQwMQwgMj4GGIQ0MQwoMj4OGoQwMQwkMT4CGoQ0MQwsMT4KGYQwMwwgMT4GGYQ0MwwoMT4OG4QwMwwkMz4CG4Q0MwwsMz4KGEQwMIwgMz4GGEQ0MIwoMz4OGkQwMIwkML4CGkQ0MIwsML4KGUQwMowgML4GGUQ0MowoML4OG0QwMowkMr4CG0Q0MowsMr4KGMQwMYwgMr4GGMQ0MYwoMr4OGsQwMYwkMb4CGsQ0MYwsMb4KGcQwM4wgMb4GGcQ0M4woMb4OG8QwM4wkM74CG8Q0M4wsM74KGCQwMEwgM74GGCQ0MEwoM74OGiQwMEwkMH4CGiQ0MEwsMH4KGSQwMkwgMH4GGSQ0MkwoMH4OGyQwMkwkMn4CGyQ0MkwsMn4KGKQwMUwgMn4GGKQ0MUwoMn4OGqQwMUwkMX4CGqQ0MUwsMX4KGaQwM0wgMX4GGaQ0M0woMX4OG6QwM0wkM34CG6Q0M0wsM34KGGQwMMwgM34GGGQ0MMwoM34OGmQwMMwkMP4CGmQ0MMwsMP4KGWQwMswgMP4GGWQ0MswoMP4OG2QwMswkMv4CG2Q0MswsMv4KGOQwMcwgMv4GGOQ0McwoMv4OGuQwMcwkMf4CGuQ0McwsMf4KGeQwM8wgMf4GGeQ0M8woMf4OG+QwM8wkM/4CG+Q0M8wsM/4KGBQwMCwgM/4GGBQ0MCwoM/8vFGRYyMCwkMAwAGhY2MCwsMAwIGhYxMCwiMAwEGhY1MCwqMAwMGhYzMCwmMAwCGhY3MCwuMAwKGpYwMCwhMAwGGpY0MCwpMAwOGpYyMCwlMAwBGpY2MCwtMAwJGpYxMCwjMAwFGpY1MCwrMAwNGpYzMCwnMAwDGpY3MCwvMAwLGlYwMKwgMAwHGlY0MKwoMAwPGlYyMKwkMIwAGlY2MKwsMIwIGlYxMKwiMIwEGlY1MKwqMIwMGlYzMKwmMIwCGlY3MKwuMIwKGtYwMKwhMIwGGtY0MKwpMIwOGtYyMKwlMIwBGtY2MKwtMIwJGtYxMKwjMIwFGtY1MKwrMIwNGtYzMKwnMIwDGtY3MKwvMIwLGjYwMGwgMIwHGjY0MGwoMIwPGjYyMGwkMEwAGjY2MGwsMEwIGjYxMGwiMEwEGjY1MGwqMEwMGjYzMGwmMEwCGjY3MGwuMEwKGrYwMGwhMEwGGrY0MGwpMEwOGrYyMGwlMEwBGrY2MGwtMEwJGrYxMGwjMEwFGrY1MGwrMEwNGrYzMGwnMEwDGrY3MGwvMEwLGnYwMOwgMEwHGnY0MOwoMEwPGnYyMOwkMMwAGnY2MOwsMMwIGnYxMOwiMMwEGnY1MOwqMMwMGnYzMOwmMMwCGnY3MOwuMMwKGvYwMOwhMMwGGvY0MOwpMMwOGvYyMOwlMMwBGvY2MOwtMMwJGvYxMOwjMMwFGvY1MOwrMMwNGvYzMOwnMMwDGvY3MOwvMMwLGg4wMBwgMMwHGg40MBwoMMwPGg4yMBwkMCwAGg42MBwsMCwIGg4xMBwiMCwEGg41MBwqMCwMGg4zMBwmMCwCGg43MBwuMCwKGo4wMBwhMCwGGo40MBwpMCwOGo4yMBwlMCwBGo42MBwtMCwJGo4xMBwjMCwFGo41MBwrMCwNGo4zMBwnMCwDGo43MBwvMCwLGk4wMJwgMCwHGk40MJwoMCwPGk4yMJwkMKwAGk42MJwsMKwIGk4xMJwiMKwEGk41MJwqMKwMGk4zMJwmMKwCGk43MJwuMKwKGs4wMJwhMKwGGs40MJwpMKwOGs4yMJwlMKwBGs42MJwtMKwJGs4xMJwjMKwFGs41MJwrMKwNGs4zMJwnMKwDGs43MJwvMKwLGi4wMFwgMKwHGi40MFwoMKwPGi4yMFwkMGwAGi42MFwsMGwIGi4xMFwiMGwEGi41MFwqMGwMGi4zMFwmMGwCGi43MFwuMGwKGq4wMFwhMGwGGq40MFwpMGwOGq4yMFwlMGwBGq42MFwtMGwJGq4xMFwjMGwFGq41MFwrMGwNGq4zMFwnMGwDGq43MFwvMGwLGm4wMNwgMGwHGm40MNwoMGwPGm4yMNwkMOwAGm42MNwsMOwIGm4xMNwiMOwEGm41MNwqMOwMGm4zMNwmMOwCGm43MNwuMOwKGu4wMNwhMOwGGu40MNwpMOwOGu4yMNwlMOwBGu42MNwtMOwJGu4xMNwjMOwFGu41MNwrMOwNGu4zMNwnMOwDGu43MNwvMOwLGh4wMDwgMOwHGh40MDwoMOwPGh4yMDwkMBwAGh42MDwsMBwIGh4xMDwiMBwEGh41MDwqMBwMGh4zMDwmMBwCGh43MDwuMBwKGp4wMDwhMBwGGp40MDwpMBwOGp4yMDwlMBwBGp42MDwtMBwJGp4xMDwjMBwFGp41MDwrMBwNGp4zMDwnMBwDGp43MDwvMBwLGl4wMLwgMBwHGl40MLwoMBwPGl4yMLwkMJwAGl42MLwsMJwIGl4xMLwiMJwEGl41MLwqMJwMGl4zMLwmMJwCGl43MLwuMJwKGt4wMLwhMJwGGt40MLwpMJwOGt4yMLwlMJwBGt42MLwtMJwJGt4xMLwjMJwFGt41MLwrMJwNGt4zMLwnMJwDGt43MLwvMJwLGj4wMHwgMJwHGj40MHwoMJwPGj4yMHwkMFwAGj42MHwsMFwIGj4xMHwiMFwEGj41MHwqMFwMGj4zMHwmMFwCGj43MHwuMFwKGr4wMHwhMFwGGr40MHwpMFwOGr4yMHwlMFwBGr42MHwtMFwJGr4xMHwjMFwFGr41MHwrMFwNGr4zMHwnMFwDGr43MHwvMFwLGn4wMPwgMFwHGn40MPwoMFwPGn4yMPwkMNwAGn42MPwsMNwIGn4xMPwiMNwEGn41MPwqMNwMGn4zMPwmMNwCGn43MPwuMNwKGv4wMPwhMNwGGv40MPwpMNwOGv4yMPwlMNwBGv42MPwtMNwJGv4xMPwjMNwFGv41MPwrMNwNGv4zMPwnMNwDGv5X4v++4f8aacO9oGEAA8MAAsN9oGFAA8OAAsP9oGEgA8NAAsMDoGFgA8PAAsODoGEQA8MgAsNDoGFQA8OgAsPDoGEwA8NgAsMjoGFwA8PgAsOjoGEIA8MQAsNjoGFIA8OQAsPjoGEoA8NQAsMToGFoA8PQAsOToGEYA8MwAsNToGFYA8OwAsPToGE4A8NwAsMzoGF4A8PwAsOzoGEEA8MIAsNzoGFEA8OIAsPzoGEkA8NIAsMLoGFkA8PIAsOLoGEUA8MoAsNLoGFUA8OoAsPLoGE0A8NoAsMroGF0A8PoAsOroGEMA8MYAsNroGFMA8OYAsProGEsA8NYAsMboGFsA8PYAsOboGEcA8M4AsNboGFcA8O4AsPboGE8A8N4AsM7oGF8A8P4AsO7oGECA8MEAsN7oGFCA8OEAsP7oGEiA8NEAsMHoGFiA8PEAsOHoGESA8MkAsNHoGFSA8OkAsPHoGEyA8NkAsMnoGFyA8PkAsOnoGEKA8MUAsNnoGFKA8OUAsPnoGEqA8NUAsMXoGFqA8PUAsOXoGEaA8M0AsNXoGFaA8O0AsPXoGE6A8N0AsM3oGF6A8P0AsO3oGEGA8MMAsN3oGFGA8OMAsP3oGEmA8NMAsMPoGFmA8PMAsOPoGEWA8MsAsNPoGFWA8OsAsPPoGE2A8NsAsMvoGF2A8PsAsOvoGEOA8McAsNvoGFOA8OcAsPvoGEuA8NcAsMfoGFuA8PcAsOfoGEeA8M8AsNfoGFeA8O8AsPfoGE+A8N8AsM/oGF+A8P8AsO/oGEBA8MCAsN/oGFBA8OCAsP/cnOGhQwMCwkMA4CGhQ0MCwsMA4KGRQwMiwgMA4GGRQ0MiwoMA4OGxQwMiwkMg4CGxQ0MiwsMg4KGJQwMSwgMg4GGJQ0MSwoMg4OGpQwMSwkMQ4CGpQ0MSwsMQ4KGZQwMywgMQ4GGZQ0MywoMQ4OG5QwMywkMw4CG5Q0MywsMw4KGFQwMKwgMw4GGFQ0MKwoMw4OGlQwMKwkMI4CGlQ0MKwsMI4KGVQwMqwgMI4GGVQ0MqwoMI4OG1QwMqwkMo4CG1Q0MqwsMo4KGNQwMawgMo4GGNQ0MawoMo4OGtQwMawkMY4CGtQ0MawsMY4KGdQwM6wgMY4GGdQ0M6woMY4OG9QwM6wkM44CG9Q0M6wsM44KGDQwMGwgM44GGDQ0MGwoM44OGjQwMGwkME4CGjQ0MGwsME4KGTQwMmwgME4GGTQ0MmwoME4OGzQwMmwkMk4CGzQ0MmwsMk4KGLQwMWwgMk4GGLQ0MWwoMk4OGrQwMWwkMU4CGrQ0MWwsMU4KGbQwM2wgMU4GGbQ0M2woMU4OG7QwM2wkM04CG7Q0M2wsM04KGHQwMOwgM04GGHQ0MOwoM04OGnQwMOwkMM4CGnQ0MOwsMM4KGXQwMuwgMM4GGXQ0MuwoMM4OG3QwMuwkMs4CG3Q0MuwsMs4KGPQwMewgMs4GGPQ0MewoMs4OGvQwMewkMc4CGvQ0MewsMc4KGfQwM+wgMc4GGfQ0M+woMc4OG/QwM+wkM84CG/Q0M+wsM84KGAwwMBwgM84GGAw0MBwoM84OGgwwMBwkMC4CGgw0MBwsMC4KGQwwMhwgMC4GGQw0MhwoMC4OGwwwMhwkMi4CGww0MhwsMi4KGIwwMRwgMi4GGIw0MRwoMi4OGowwMRwkMS4CGow0MRwsMS4KGYwwMxwgMS4GGYw0MxwoMS4OG4wwMxwkMy4CG4w0MxwsMy4KGEwwMJwgMy4GGEw0MJwoMy4OGkwwMJwkMK4CGkw0MJwsMK4KGUwwMpwgMK4GGUw0MpwoMK4OG0wwMpwkMq4CG0w0MpwsMq4KGMwwMZwgMq4GGMw0MZwoMq4OGswwMZwkMa4CGsw0MZwsMa4KGcwwM5wgMa4GGcw0M5woMa4OG8wwM5wkM64CG8w0M5wsM64KGCwwMFwgM64GGCw0MFwoM64OGiwwMFwkMG4CGiw0MFwsMG4KGSwwMlwgMG4GGSw0MlwoMG4OGywwMlwkMm4CGyw0MlwsMm4KGKwwMVwgMm4GGKw0MVwoMm4OGqwwMVwkMW4CGqw0MVwsMW4KGawwM1wgMW4GGaw0M1woMW4OG6wwM1wkM24CG6w0M1wsM24KGGwwMNwgM24GGGw0MNwoM24OGmwwMNwkMO4CGmw0MNwsMO4KGWwwMtwgMO4GGWw0MtwoMO4OG2wwMtwkMu4CG2w0MtwsMu4KGOwwMdwgMu4GGOw0MdwoMu4OGuwwMdwkMe4CGuw0MdwsMe4KGewwM9wgMe4GGew0M9woMe4OG+wwM9wkM+4CG+w0M9wsM+4KGBwwMDwgM+4GGBw0MDwoM+4OGhwwMDwkMB4CGhw0MDwsMB4KGRwwMjwgMB4GGRw0MjwoMB4OGxwwMjwkMh4CGxw0MjwsMh4KGJwwMTwgMh4GGJw0MTwoMh4OGpwwMTwkMR4CGpw0MTwsMR4KGZwwMzwgMR4GGZw0MzwoMR4OG5wwMzwkMx4CG5w0MzwsMx4KGFwwMLwgMx4GGFw0MLwoMx4OGlwwMLwkMJ4CGlw0MLwsMJ4KGVwwMrwgMJ4GGVw0MrwoMJ4OG1wwMrwkMp4CG1w0MrwsMp4KGNwwMbwgMp4GGNw0MbwoMp4OGtwwMbwkMZ4CGtw0MbwsMZ4KGdwwM7wgMZ4GGdw0M7woMZ4OG9wwM7wkM54CG9w0M7wsM54KGDwwMHwgM54GGDw0MHwoM54OGjwwMHwkMF4CGjw0MHwsMF4KGTwwMnwgMF4GGTw0MnwoMF4OGzwwMnwkMl4CGzw0MnwsMl4KGLwwMXwgMl4GGLw0MXwoMl4OGrwwMXwkMV4CGrw0MXwsMV4KGbwwM3wgMV4GGbw0M3woMV4OG7wwM3wkM14CG7w0M3wsM14KGHwwMPwgM14GGHw0MPwoM14OGnwwMPwkMN4CGnw0MPwsMN4KGXwwMvwgMN4GGXw0MvwoMN4OG3wwMvwkMt4CG3w0MvwsMt4KGPwwMfwgMt4GGPw0MfwoMt4OGvwwMfwkMd4CGvw0MfwsMd4KGfwwM/wgMd4GGfw0M/woMd4OG/wwM/wkM94CG/5X8v2/4v0bacC9oGMDAMIDAcB9oGNDAMKDAcD9oGMjAMJDA8ABoGNjAMLDA8CBoGMTAMIjA8BBoGNTAMKjA8DBoGMzAMJjA8AhoGNzAMLjA8ChoGMLAMITA8BhoGNLAMKTA8DhoGMrAMJTA8ARoGNrAMLTA8CRoGMbAMIzA8BRoGNbAMKzA8DRoGM7AMJzA8AxoGN7AMLzA8CxoGMHAMILA8BxoGNHAMKLA8DxoGMnAMJLA8AJoGNnAMLLA8CJoGMXAMIrA8BJoGNXAMKrA8DJoGM3AMJrA8ApoGN3AMLrA8CpoGMPAMIbA8BpoGNPAMKbA8DpoGMvAMJbA8AZoGNvAMLbA8CZoGMfAMI7A8BZoGNfAMK7A8DZoGM/AMJ7A8A5oGN/AML7A8C5omMDAMIHA8B5omNDAMKHA8D5omMjAMJHA8AFomNjAMLHA8CFomMTAMInA8BFomNTAMKnA8DFomMzAMJnA8AlomNzAMLnA8ClomMLAMIXA8BlomNLAMKXA8DlomMrAMJXA8AVomNrAMLXA8CVomMbAMI3A8BVomNbAMK3A8DVomM7AMJ3A8A1omN7AML3A8C1omMHAMIPA8B1omNHAMKPA8D1omMnAMJPA8ANomNnAMLPA8CNomMXAMIvA8BNomNXAMKvA8DNomM3AMJvA8AtomN3AMLvA8CtomMPAMIfA8BtomNPAMKfA8DtomMvAMJfA8AdomNvAMLfA8CdomMfAMI/A8BdomNfAMK/A8DdomM/AMJ/A8A9omN/AML/A8C9oWMDAsIDA8B9oWNDAsKDA8L88nGEhA8NCAsMAoGFhA8PCAsOAoGERA8MiAsNAoGFRA8OiAsPAoGExA8NiAsMgoGFxA8PiAsOgoGEJA8MSAsNgoGFJA8OSAsPgoGEpA8NSAsMQoGFpA8PSAsOQoGEZA8MyAsNQoGFZA8OyAsPQoGE5A8NyAsMwoGF5A8PyAsOwoGEFA8MKAsNwoGFFA8OKAsPwoGElA8NKAsMIoGFlA8PKAsOIoGEVA8MqAsNIoGFVA8OqAsPIoGE1A8NqAsMooGF1A8PqAsOooGENA8MaAsNooGFNA8OaAsPooGEtA8NaAsMYoGFtA8PaAsOYoGEdA8M6AsNYoGFdA8O6AsPYoGE9A8N6AsM4oGF9A8P6AsO4oGEDA8MGAsN4oGFDA8OGAsP4oGEjA8NGAsMEoGFjA8PGAsOEoGETA8MmAsNEoGFTA8OmAsPEoGEzA8NmAsMkoGFzA8PmAsOkoGELA8MWAsNkoGFLA8OWAsPkoGErA8NWAsMUoGFrA8PWAsOUoGEbA8M2AsNUoGFbA8O2AsPUoGE7A8N2AsM0oGF7A8P2AsO0oGEHA8MOAsN0oGFHA8OOAsP0oGEnA8NOAsMMoGFnA8POAsOMoGEXA8MuAsNMoGFXA8OuAsPMoGE3A8NuAsMsoGF3A8PuAsOsoGEPA8MeAsNsoGFPA8OeAsPsoGEvA8NeAsMcoGFvA8PeAsOcoGEfA8M+AsNcoGFfA8O+AsPcoGE/A8N+AsM8oGF/A8P+AsO8oOEAA8MBAsN8oOFAA8OBAsP8oOEgA8NBAsMCoOFgA8PBAsOCoOEQA8MhAsNCoOFQA8OhAsPCoOEwA8NhAsMioOFwA8PhAsOioOEIA8MRAsNioOFIA8ORAsPioOEoA8NRAsMSoOFoA8PRAsOSoOEYA8MxAsNSoOFYA8OxAsPSoOE4A8NxAsMyoOF4A8PxAsOyoOEEA8MJAsNyoOFEA8OJAsPyoOEkA8NJAsMKoOFkA8PJAsOKoOEUA8MpAsNKoOFUA8OpAsPKoOE0A8NpAsMqoOF0A8PpAsOqoOEMA8MZAsNqoOFMA8OZAsPqoOEsA8NZAsMaoOFsA8PZAsOaoOEcA8M5AsNaoOFcA8O5AsPaoOE8A8N5AsM6oOF8A8P5AsO6oOECA8MFAsN6oOFCA8OFAsP6oOEiA8NFAsMGoOFiA8PFAsOGoOESA8MlAsNGoOFSA8OlAsPGoOEyA8NlAsMmoOFyA8PlAsOmoOEKA8MVAsNmoOFKA8OVAsPmoOEqA8NVAsMWoOFqA8PVAsOWoOEaA8M1AsNWoOFaA8O1AsPWoOE6A8N1AsM2oOF6A8P1AsO2oOEGA8MNAsN2oOFGA8ONAsP2oOEmA8NNAsMOoOFmA8PNAsOOoOEWA8MtAsNOoOFWA8OtAsPOoOE2A8NtAsMuoOF2A8PtAsOuoOEOA8MdAsNuoOFOA8OdAsPuoOEuA8NdAsMeoOFuA8PdAsOeoOEeA8M9AsNeoOFeA8O9AsPeoOE+A8N9AsM+oOF+A8P9AsO+oOEBA8MDAsN+oOFBA8ODAsP+oOEhA8NDAsMBoOFhA8PDAsOBoOERA8MjAsNBoOFRA8OjAsPBoOExA8NjAsMhoOFxA8PjAsOhoOEJA8MTAsNhoOFJA8OTAsPhoOEpA8NTAsMRoOFpA8PTAsORoOEZA8MzAsNRoOFZA8OzAsPRoOE5A8NzAsMxoOF5A8PzAsOxoOEFA8MLAsNxoOFFA8OLAsPxoOElA8NLAsMJoOFlA8PLAsOJoOEVA8MrAsNJoOFVA8OrAsPJoOE1A8NrAsMpoOF1A8PrAsOpoOENA8MbAsNpoOFNA8ObAsPpoOEtA8NbAsMZoOFtA8PbAsOZoOEdA8M7AsNZoOFdA8O7AsPZoOE9A8N7AsM5oOF9A8P7AsO5oOEDA8MHAsN5oOFDA8OHAsP5oOEjA8NHAsMFoOFjA8PHAsOFoOETA8MnAsNFoOFTA8OnAsPFoOEzA8NnAsMloOFzA8PnAsOloOELA8MXAsNloOFLA8OXAsPloOErA8NXAsMVoOFrA8PXAsOVoOEbA8M3AsNVoOFbA8O3AsPVoOE7A8N3AsM1oOF7A8P3AsO1oOEHA8MPAsN1oOFHA8OPAsP1oOEnA8NPAsMNoOFnA8PPAsONoOEXA8MvAsNNoOFXA8OvAsPNoOE3A8NvAsMtoOF3A8PvAsOtoOEPA8MfAsNtoOFPA8OfAsPtoOEvA8NfAsMdoOFvA8PfAsOdoOEfA8M/AsNdoOFfA8O/AsPdoOE/A8N/AsM9oOF/pf7vG/6vkTbcCxoGMDAMIDDcBxoGNDAMKDDcDxoGMjAMJDA8ABoGNjAMLDA8CBoGMTAMIjA8BBoGNTAMKjA8DBoGMzAMJjA8AhoGNzAMLjA8ChqGMDAMITA8BhqGNDAMKTA8DhqGMjAMJTA8ARqGNjAMLTA8CRqGMTAMIzA8BRqGNTAMKzA8DRqGMzAMJzA8AxqGNzAMLzA8CxpGMDCMIDA8BxpGNDCMKDA8DxpGMjCMJDC8ABpGNjCMLDC8CBpGMTCMIjC8BBpGNTCMKjC8DBpGMzCMJjC8AhpGNzCMLjC8ChrGMDCMITC8BhrGNDCMKTC8DhrGMjCMJTC8ARrGNjCMLTC8CRrGMTCMIzC8BRrGNTCMKzC8DRrGMzCMJzC8AxrGNzCMLzC8CxomMDBMIDC8BxomNDBMKDC8DxomMjBMJDB8ABomNjBMLDB8CBomMTBMIjB8BBomNTBMKjB8DBomMzBMJjB8AhomNzBMLjB8ChqmMDBMITB8BhqmNDBMKTB8DhqmMjBMJTB8ARqmNjBMLTB8CRqmMTBMIzB8BRqmNTBMKzB8DRqmMzBMJzB8AxqmNzBMLzB8CxpmMDDMIDB8BxpmNDDMKDB8DxpmMjDMJDD8ABpmNjDMLDD8CBpmMTDMIjD8BBpmNTDMKjD8DBpmMzDMJjD8AhpmNzDMLjD8ChrmMDDMITD8BhrmNDDMKTD8DhrmMjDMJTD8ARrmNjDMLTD8CRrmMTDMIzD8BRrmNTDMKzD8DRrmMzDMJzD8AxrmNzDMLzD8CxoWMDAsIDD8BxoWNDAsKDD8Ly9nWMjAsJDAMABoWNjAsLDAMCBoWMTAsIjAMBBoWNTAsKjAMDBoWMzAsJjAMAhoWNzAsLjAMChoWMLAsITAMBhoWNLAsKTAMDhoWMrAsJTAMARoWNrAsLTAMCRoWMbAsIzAMBRoWNbAsKzAMDRoWM7AsJzAMAxoWN7AsLzAMCxoWMHAsILAMBxoWNHAsKLAMDxoWMnAsJLAMAJoWNnAsLLAMCJoWMXAsIrAMBJoWNXAsKrAMDJoWM3AsJrAMApoWN3AsLrAMCpoWMPAsIbAMBpoWNPAsKbAMDpoWMvAsJbAMAZoWNvAsLbAMCZoWMfAsI7AMBZoWNfAsK7AMDZoWM/AsJ7AMA5oWN/AsL7AMC5o2MDAsIHAMB5o2NDAsKHAMD5o2MjAsJHAMAFo2NjAsLHAMCFo2MTAsInAMBFo2NTAsKnAMDFo2MzAsJnAMAlo2NzAsLnAMClo2MLAsIXAMBlo2NLAsKXAMDlo2MrAsJXAMAVo2NrAsLXAMCVo2MbAsI3AMBVo2NbAsK3AMDVo2M7AsJ3AMA1o2N7AsL3AMC1o2MHAsIPAMB1o2NHAsKPAMD1o2MnAsJPAMANo2NnAsLPAMCNo2MXAsIvAMBNo2NXAsKvAMDNo2M3AsJvAMAto2N3AsLvAMCto2MPAsIfAMBto2NPAsKfAMDto2MvAsJfAMAdo2NvAsLfAMCdo2MfAsI/AMBdo2NfAsK/AMDdo2M/AsJ/AMA9o2N/AsL/AMC9oOMDAcIDAMB9oONDAcKDAMD9oOMjAcJDAsABoONjAcLDAsCBoOMTAcIjAsBBoONTAcKjAsDBoOMzAcJjAsAhoONzAcLjAsChoOMLAcITAsBhoONLAcKTAsDhoOMrAcJTAsARoONrAcLTAsCRoOMbAcIzAsBRoONbAcKzAsDRoOM7AcJzAsAxoON7AcLzAsCxoOMHAcILAsBxoONHAcKLAsDxoOMnAcJLAsAJoONnAcLLAsCJoOMXAcIrAsBJoONXAcKrAsDJoOM3AcJrAsApoON3AcLrAsCpoOMPAcIbAsBpoONPAcKbAsDpoOMvAcJbAsAZoONvAcLbAsCZoOMfAcI7AsBZoONfAcK7AsDZoOM/AcJ7AsA5oON/AcL7AsC5ouMDAcIHAsB5ouNDAcKHAsD5ouMjAcJHAsAFouNjAcLHAsCFouMTAcInAsBFouNTAcKnAsDFouMzAcJnAsAlouNzAcLnAsClouMLAcIXAsBlouNLAcKXAsDlouMrAcJXAsAVouNrAcLXAsCVouMbAcI3AsBVouNbAcK3AsDVouM7AcJ3AsA1ouN7AcL3AsC1ouMHAcIPAsB1ouNHAcKPAsD1ouMnAcJPAsANouNnAcLPAsCNouMXAcIvAsBNouNXAcKvAsDNouM3AcJvAsAtouN3AcLvAsCtouMPAcIfAsBtouNPAcKfAsDtouMvAcJfAsAdouNvAcLfAsCdouMfAcI/AsBdouNfAcK/AsDdouM/AcJ/AsA9ouN/AcL/AsC9oeMDA8IDAsB9oeNDA8KDAsD9oeMjA8JDAcABoeNjA8LDAcCBoeMTA8IjAcBBoeNTA8KjAcDBoeMzA8JjAcAhoeNzA8LjAcChoeMLA8ITAcBhoeNLA8KTAcDhoeMrA8JTAcARoeNrA8LTAcCRoeMbA8IzAcBRoeNbA8KzAcDRoeM7A8JzAcAxoeN7A8LzAcCxoeMHA8ILAcBxoeNHA8KLAcDxoeMnA8JLAcAJoeNnA8LLAcCJoeMXA8IrAcBJoeNXA8KrAcDJoeM3A8JrAcApoeN3A8LrAcCpoeMPA8IbAcBpoeNPA8KbAcDpoeMvA8JbAcAZoeNvA8LbAcCZoeMfA8I7AcBZoeNfA8K7AcDZoeM/A8J7AcA5oeN/A8L7AcC5o+MDA8IHAcB5o+NDA8KHAcD5o+MjA8JHAcAFo+NjA8LHAcCFo+MTA8InAcBFo+NTA8KnAcDFo+MzA8JnAcAlo+NzA8LnAcClo+MLA8IXAcBlo+NLA8KXAcDlo+MrA8JXAcAVo+NrA8LXAcCVo+MbA8I3AcBVo+NbA8K3AcDVo+M7A8J3AcA1o+N7A8L3AcC1o+MHA8IPAcB1o+NHA8KPAcD1o+MnA8JPAcANo+NnA8LPAcCNo+MXA8IvAcBNo+NXA8KvAcDNo+M3A8JvAcAto+N3A8LvAcCto+MPA8IfAcBto+NPA8KfAcDto+MvA8JfAcAdo+NvA8LfAcCdo+MfA8I/AcBdo+NfA8K/AcDdo+M/A8J/AcA9o+F/p//uG/2ukDfeChgEMDAMIDPeBhgENDAMKDPeDhoEMDAMJDA+AhoENDAMLDA+ChkEMDIMIDA+BhkENDIMKDA+DhsEMDIMJDI+AhsENDIMLDI+ChiEMDEMIDI+BhiENDEMKDI+DhqEMDEMJDE+AhqENDEMLDE+ChmEMDMMIDE+BhmENDMMKDE+DhuEMDMMJDM+AhuENDMMLDM+ChhEMDCMIDM+BhhENDCMKDM+DhpEMDCMJDC+AhpENDCMLDC+ChlEMDKMIDC+BhlENDKMKDC+DhtEMDKMJDK+AhtENDKMLDK+ChjEMDGMIDK+BhjENDGMKDK+DhrEMDGMJDG+AhrENDGMLDG+ChnEMDOMIDG+BhnENDOMKDG+DhvEMDOMJDO+AhvENDOMLDO+ChgkMDBMIDO+BhgkNDBMKDO+DhokMDBMJDB+AhokNDBMLDB+ChkkMDJMIDB+BhkkNDJMKDB+DhskMDJMJDJ+AhskNDJMLDJ+ChikMDFMIDJ+BhikNDFMKDJ+DhqkMDFMJDF+AhqkNDFMLDF+ChmkMDNMIDF+BhmkNDNMKDF+DhukMDNMJDN+AhukNDNMLDN+ChhkMDDMIDN+BhhkNDDMKDN+DhpkMDDMJDD+AhpkNDDMLDD+ChlkMDLMIDD+BhlkNDLMKDD+DhtkMDLMJDL+AhtkNDLMLDL+ChjkMDHMIDL+BhjkNDHMKDL+DhrkMDHMJDH+AhrkNDHMLDH+ChnkMDPMIDH+BhnkNDPMKDH+DhvkMDPMJDP+AhvkNDPMLDP+ChgUMDAsIDP+BhgUNDAsKDP/LxxkWMjAsJDAMABoWNjAsLDAMCBoWMTAsIjAMBBoWNTAsKjAMDBoWMzAsJjAMAhoWNzAsLjAMChqWMDAsITAMBhqWNDAsKTAMDhqWMjAsJTAMARqWNjAsLTAMCRqWMTAsIzAMBRqWNTAsKzAMDRqWMzAsJzAMAxqWNzAsLzAMCxpWMDCsIDAMBxpWNDCsKDAMDxpWMjCsJDCMABpWNjCsLDCMCBpWMTCsIjCMBBpWNTCsKjCMDBpWMzCsJjCMAhpWNzCsLjCMChrWMDCsITCMBhrWNDCsKTCMDhrWMjCsJTCMARrWNjCsLTCMCRrWMTCsIzCMBRrWNTCsKzCMDRrWMzCsJzCMAxrWNzCsLzCMCxo2MDBsIDCMBxo2NDBsKDCMDxo2MjBsJDBMABo2NjBsLDBMCBo2MTBsIjBMBBo2NTBsKjBMDBo2MzBsJjBMAho2NzBsLjBMChq2MDBsITBMBhq2NDBsKTBMDhq2MjBsJTBMARq2NjBsLTBMCRq2MTBsIzBMBRq2NTBsKzBMDRq2MzBsJzBMAxq2NzBsLzBMCxp2MDDsIDBMBxp2NDDsKDBMDxp2MjDsJDDMABp2NjDsLDDMCBp2MTDsIjDMBBp2NTDsKjDMDBp2MzDsJjDMAhp2NzDsLjDMChr2MDDsITDMBhr2NDDsKTDMDhr2MjDsJTDMARr2NjDsLTDMCRr2MTDsIzDMBRr2NTDsKzDMDRr2MzDsJzDMAxr2NzDsLzDMCxoOMDAcIDDMBxoONDAcKDDMDxoOMjAcJDAsABoONjAcLDAsCBoOMTAcIjAsBBoONTAcKjAsDBoOMzAcJjAsAhoONzAcLjAsChqOMDAcITAsBhqONDAcKTAsDhqOMjAcJTAsARqONjAcLTAsCRqOMTAcIzAsBRqONTAcKzAsDRqOMzAcJzAsAxqONzAcLzAsCxpOMDCcIDAsBxpONDCcKDAsDxpOMjCcJDCsABpONjCcLDCsCBpOMTCcIjCsBBpONTCcKjCsDBpOMzCcJjCsAhpONzCcLjCsChrOMDCcITCsBhrONDCcKTCsDhrOMjCcJTCsARrONjCcLTCsCRrOMTCcIzCsBRrONTCcKzCsDRrOMzCcJzCsAxrONzCcLzCsCxouMDBcIDCsBxouNDBcKDCsDxouMjBcJDBsABouNjBcLDBsCBouMTBcIjBsBBouNTBcKjBsDBouMzBcJjBsAhouNzBcLjBsChquMDBcITBsBhquNDBcKTBsDhquMjBcJTBsARquNjBcLTBsCRquMTBcIzBsBRquNTBcKzBsDRquMzBcJzBsAxquNzBcLzBsCxpuMDDcIDBsBxpuNDDcKDBsDxpuMjDcJDDsABpuNjDcLDDsCBpuMTDcIjDsBBpuNTDcKjDsDBpuMzDcJjDsAhpuNzDcLjDsChruMDDcITDsBhruNDDcKTDsDhruMjDcJTDsARruNjDcLTDsCRruMTDcIzDsBRruNTDcKzDsDRruMzDcJzDsAxruNzDcLzDsCxoeMDA8IDDsBxoeNDA8KDDsDxoeMjA8JDAcABoeNjA8LDAcCBoeMTA8IjAcBBoeNTA8KjAcDBoeMzA8JjAcAhoeNzA8LjAcChqeMDA8ITAcBhqeNDA8KTAcDhqeMjA8JTAcARqeNjA8LTAcCRqeMTA8IzAcBRqeNTA8KzAcDRqeMzA8JzAcAxqeNzA8LzAcCxpeMDC8IDAcBxpeNDC8KDAcDxpeMjC8JDCcABpeNjC8LDCcCBpeMTC8IjCcBBpeNTC8KjCcDBpeMzC8JjCcAhpeNzC8LjCcChreMDC8ITCcBhreNDC8KTCcDhreMjC8JTCcARreNjC8LTCcCRreMTC8IzCcBRreNTC8KzCcDRreMzC8JzCcAxreNzC8LzCcCxo+MDB8IDCcBxo+NDB8KDCcDxo+MjB8JDBcABo+NjB8LDBcCBo+MTB8IjBcBBo+NTB8KjBcDBo+MzB8JjBcAho+NzB8LjBcChq+MDB8ITBcBhq+NDB8KTBcDhq+MjB8JTBcARq+NjB8LTBcCRq+MTB8IzBcBRq+NTB8KzBcDRq+MzB8JzBcAxq+NzB8LzBcCxp+MDD8IDBcBxp+NDD8KDBcDxp+MjD8JDDcABp+NjD8LDDcCBp+MTD8IjDcBBp+NTD8KjDcDBp+MzD8JjDcAhp+NzD8LjDcChr+MDD8ITDcBhr+NDD8KTDcDhr+MjD8JTDcARr+NjD8LTDcCRr+MTD8IzDcBRr+NTD8KzDcDRr+MzD8JzDcAxr+V+b/vuH/GmnDvaBhAAPDAALDfaBhQAPDgALD/aBhIAPDQALDA6BhYAPDwALDg6BhEAPDIALDQ6BhUAPDoALDw6BhMAPDYALDI6BhcAPD4ALDo6BhCAPDEALDY6BhSAPDkALD46BhKAPDUALDE6BhaAPD0ALDk6BhGAPDMALDU6BhWAPDsALD06BhOAPDcALDM6BheAPD8ALDs6BhBAPDCALDc6BhRAPDiALD86BhJAPDSALDC6BhZAPDyALDi6BhFAPDKALDS6BhVAPDqALDy6BhNAPDaALDK6BhdAPD6ALDq6BhDAPDGALDa6BhTAPDmALD66BhLAPDWALDG6BhbAPD2ALDm6BhHAPDOALDW6BhXAPDuALD26BhPAPDeALDO6BhfAPD+ALDu6BhAgPDBALDe6BhQgPDhALD+6BhIgPDRALDB6BhYgPDxALDh6BhEgPDJALDR6BhUgPDpALDx6BhMgPDZALDJ6BhcgPD5ALDp6BhCgPDFALDZ6BhSgPDlALD56BhKgPDVALDF6BhagPD1ALDl6BhGgPDNALDV6BhWgPDtALD16BhOgPDdALDN6BhegPD9ALDt6BhBgPDDALDd6BhRgPDjALD96BhJgPDTALDD6BhZgPDzALDj6BhFgPDLALDT6BhVgPDrALDz6BhNgPDbALDL6BhdgPD7ALDr6BhDgPDHALDb6BhTgPDnALD76BhLgPDXALDH6BhbgPD3ALDn6BhHgPDPALDX6BhXgPDvALD36BhPgPDfALDP6BhfgPD/ALDv6Bhgf/jhv/b+P//++DdAP9xhgUN7rCg4A4DgoaFDAwLCQwDgYaFDQwLCwwDg4ZFDAyLCAyDgIZFDQyLCgyDgobFDAyLCQyDgYbFDQyLCwyDg4YlDAxLCAxDgIYlDQxLCgxDgoalDAxLCQxDgYalDQxLCwxDg4ZlDAzLCAzDgIZlDQzLCgzDgoblDAzLCQzDgYblDQzLCwzDg4YVDAwrCAwjgIYVDQwrCgwjgoaVDAwrCQwjgYaVDQwrCwwjg4ZVDAyrCAyjgIZVDQyrCgyjgobVDAyrCQyjgYbVDQyrCwyjg4Y1DAxrCAxjgIY1DQxrCgxjgoa1DAxrCQxjgYa1DQxrCwxjg4Z1DAzrCAzjgIZ1DQzrCgzjgob1DAzrCQzjgYb1DQzrCwzjg4YNDAwbCAwTgIYNDQwbCgwTgoaNDAwbCQwTgYaNDQwbCwwTg4ZNDAybCAyTgIZNDQybCgyTgobNDAybCQyTgYbNDQybCwyTg4YtDAxbCAxTgIYtDQxbCgxTgoatDAxbCQxTgYatDQxbCwxTg4ZtDAzbCAzTgIZtDQzbCgzTgobtDAzbCQzTgYbtDQzbCwzTg4YdDAw7CAwzgIYdDQw7CgwzgoadDAw7CQwzgYadDQw7Cwwzg4ZdDAy7CAyzgIZdDQy7CgyzgobdDAy7CQyzgYbdDQy7Cwyzg4Y9DAx7CAxzgIY9DQx7Cgxzgoa9DAx7CQxzgYa9DQx7Cwxzg4Z9DAz7CAzzgIZ9DQz7Cgzzgob9DAz7CQzzgYb9DQz7Cwzzg4YDDAwHCAwLgIYDDQwHCgwLgoaDDAwHCQwLgYaDDQwHCwwLg4ZDDAyHCAyLgIZDDQyHCgyLgobDDAyHCQyLgYbDDQyHCwyLg4YjDAxHCAxLgIYjDQxHCgxLgoajDAxHCQxLgYajDQxHCwxLg4ZjDAzHCAzLgIZjDQzHCgzLgobjDAzHCQzLgYbjDQzHCwzLg4YTDAwnCAwrgIYTDQwnCgwrgoaTDAwnCQwrgYaTDQwnCwwrg4ZTDAynCAyrgIZTDQynCgyrgobTDAynCQyrgYbTDQynCwyrg4YzDAxnCAxrgIYzDQxnCgxrgoazDAxnCQxrgYazDQxnCwxrg4ZzDAznCAzrgIZzDQznCgzrgobzDAznCQzrgYbzDQznCwzrg4YLDAwXCAwbgIYLDQwXCgwbgoaLDAwXCQwbgYaLDQwXCwwbg4ZLDAyXCAybgIZLDQyXCgybgobLDAyXCQybgYbLDQyXCwybg4YrDAxXCAxbgIYrDQxXCgxbgoarDAxXCQxbgYarDQxXCwxbg4ZrDAzXCAzbgIZrDQzXCgzbgobrDAzXCQzbgYbrDQzXCwzbg4YbDAw3CAw7gIYbDQw3Cgw7goabDAw3CQw7gYabDQw3Cww7g4ZbDAy3CAy7gIZbDQy3Cgy7gobbDAy3CQy7gYbbDQy3Cwy7g4Y7DAx3CAx7gIY7DQx3Cgx7goa7DAx3CQx7gYa7DQx3Cwx7g4Z7DAz3CAz7gIZ7DQz3Cgz7gob7DAz3CQz7gYb7DQz3Cwz7g4YHDAwPCAwHgIYHDQwPCgwHgoaHDAwPCQwHgYaHDQwPCwwH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MTBsIjBMAho2NTBsKjBMCho2MzBsJjBMBho2NzBsLjBMDhq2MDBsITBMARq2NDBsKTBMCRq2MjBsJTBMBRq2NjBsLTBMDRq2MTBsIzBMAxq2NTBsKzBMCxq2MzBsJzBMBxq2NzBsLzBMDxp2MDDsIDDMABp2NDDsKDDMCBp2MjDsJDDMBBp2NjDsLDDMDBp2MTDsIjDMAhp2NTDsKjDMChp2MzDsJjDMBhp2NzDsLjDMDhr2MDDsITDMARr2NDDsKTDMCRr2MjDsJTDMBRr2NjDsLTDMDRr2MTDsIzDMAxr2NTDsKzDMCxr2MzDsJzDMBxr2NzDsLzDMDxoOMDAcIDAsABoONDAcKDAsCBoOMjAcJDAsBBoONjAcLDAsDBoOMTAcIjAsAhoONTAcKjAsChoOMzAcJjAsBhoONzAcLjAsDhqOMDAcITAsARqONDAcKTAsCRqOMjAcJTAsBRqONjAcLTAsDRqOMTAcIzAsAxqONTAcKzAsCxqOMzAcJzAsBxqONzAcLzAsDxpOMDCcIDCsABpONDCcKDCsCBpOMjCcJDCsBBpONjCcLDCsDBpOMTCcIjCsAhpONTCcKjCsChpOMzCcJjCsBhpONzCcLjCsDhrOMDCcITCsARrONDCcKTCsCRrOMjCcJTCsBRrONjCcLTCsDRrOMTCcIzCsAxrONTCcKzCsCxrOMzCcJzCsBxrONzCcLzCsDxouMDBcIDBsABouNDBcKDBsCBouMjBcJDBsBBouNjBcLDBsDBouMTBcIjBsAhouNTBcKjBsChouMzBcJjBsBhouNzBcLjBsDhquMDBcITBsARquNDBcKTBsCRquMjBcJTBsBRquNjBcLTBsDRquMTBcIzBsAxquNTBcKzBsCxquMzBcJzBsBxquNzBcLzBsDxpuMDDcIDDsABpuNDDcKDDsCBpuMjDcJDDsBBpuNjDcLDDsDBpuMTDcIjDsAhpuNTDcKjDsChpuMzDcJjDsBhpuNzDcLjDsDhruMDDcITDsARruNDDcKTDsCRruMjDcJTDsBRruNjDcLTDsDRruMTDcIzDsAxruNTDcKzDsCxruMzDcJzDsBxruNzDcLzDsDxoeMDA8IDAcABoeNDA8KDAcCBoeMjA8JDAcBBoeNjA8LDAcDBoeMTA8IjAcAhoeNTA8KjAcChoeMzA8JjAcBhoeNzA8LjAcDhqe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QMPxBobjBYYVQcMJBoYTBIaVQMOJBoYTBYaVQcNJBoaTBIZVQMPJBoaTBYZVQcMpBoZTBIbVQMOpBoZTBYbVQcNpBobTBIY1QMPpBobTBYY1QcMZBoYzBIa1QMOZBoYzBYa1QcNZBoazBIZ1QMPZBoazBYZ1QcM5BoZzBIb1QMO5BoZzBYb1QcN5BobzBIYNQMP5BobzBYYNQcMFBoYLBIaNQMOFBoYLBYaNQcNFBoaLBIZNQMPFBoaLBYZNQcMlBoZLBIbNQMOlBoZLBYbNQcNlBobLBIYtQMPlBobLBYYtQcMVBoYrBIatQMOVBoYrBYatQcNVBoarBIZtQMPVBoarBYZtQcM1BoZrBIbtQMO1BoZrBYbtQcN1BobrBIYdQMP1BobrBYYdQcMNBoYbBIadQMONBoYbBYadQcNNBoabBIZdQMPNBoabBYZdQcMtBoZbBIbdQMOtBoZbBYbdQcNtBobbBIY9QMPtBobbBYY9QcMdBoY7BIa9QMOdBoY7BYa9QcNdBoa7BIZ9QMPdBoa7BYZ9QcM9BoZ7BIb9QMO9BoZ7BYb9QcN9Bob7BIYDQMP9Bob7BYYDQcMDBoYHBIaDQMODBoYHBYaDQcNDBoaHBIZDQMPDBoaHBYZDQcMjBoZHBIbDQMOjBoZHBYbDQcNjBobHBIYjQMPjBobHBYYjQcMTBoYnBIajQMOTBoYnBYajQcNTBoanBIZjQMPTBoanBYZjQcMzBoZnBIbjQMOzBoZnBYbjQcNzBobnBIYTQMPzBobnBYYTQcMLBoYXBIaTQMOLBoYXBYaTQcNLBoaXBIZTQMPLBoaXBYZTQcMrBoZXBIbTQMOrBoZXBYbTQcNrBobXBIYzQMPrBobXBYYzQcMbBoY3BIazQMObBoY3BYazQcNbBoa3BIZzQMPbBoa3BYZzQcM7BoZ3BIbzQMO7BoZ3BYbzQcN7Bob3BIYLQMP7Bob3BYYLQcMHBoYPBIaLQMOHBoYPBYaLQcNHBoaPBIZLQMPHBoaPBYZLQcMnBoZPBIbLQMOnBoZPBYbLQcNnBobPBIYrQMPnBobPBYYrQcMXBoYvBIarQMOXBoYvBYarQcNXBoavBIZrQMPXBoavBYZrQcM3BoZvBIbrQMO3BoZvBYbrQcN3BobvBIYbQMP3BobvBYYbQcMPBoYfBIabQMOPBoYfBYabQcNPBoafBIZb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DeMZGMYTGD4ADeMbGMYXGD4EDRMYGCYQGD4CDRMaGCYUGD4GDRMZGCYSGD4BDRMbGCYWGD4FDZMYGCYRGD4DDZMaGCYVGD4HDZMZGCYTGL4ADZMbGCYXGL4EDVMYGKYQGL4CDVMaGKYUGL4GDVMZGKYSGL4BDVMbGKYWGL4FDdMYGKYRGL4DDdMaGKYVGL4HDdMZGKYTGH4ADdMbGKYXGH4EDTMYGGYQGH4CDTMaGGYUGH4GDTMZGGYSGH4BDTMbGGYWGH4FDbMYGGYRGH4DDbMaGGYVGH4HDbMZGGYTGP4ADbMbGGYXGP4EDXMYGOYQGP4CDXMaGOYUGP4GDXMZGOYSGP4BDXMbGOYWGP4FDfMYGOYRGP4DDfMaGOYVGP5XkDPMZ2CYT2AYADTMb2CYX2AYEDQsYGBYQGAYCDQsaGBYUGAYGDQsZGBYSGAYBDQsbGBYWGAYFDQsYmBYRGAYDDQsamBYVGAYHDQsZmBYTGAYAjQsbmBYXGAYEjQsYWBYQmAYCjQsaWBYUmAYGjQsZWBYSmAYBjQsbWBYWmAYFjQsY2BYRmAYDjQsa2BYVmAYHjQsZ2BYTmAYATQsb2BYXmAYETSsYGBYQWAYCTSsaGBYUWAYGTSsZGBYSWAYBTSsbGBYWWAYFTSsYmBYRWAYDTSsamBYVWAYHTSsZmBYTWAYAzSsbmBYXWAYEzSsYWBYQ2AYCzSsaWBYU2AYGzSsZWBYS2AYBzSsbWBYW2AYFzSsY2BYR2AYDzSsa2BYV2AYHzSsZ2BYT2CYADSsb2BYX2CYEDRsYGDYQGCYCDRsaGDYUGCYGDRsZGDYSGCYBDRsbGDYWGCYFDRsYmDYRGCYDDRsamDYVGCYHDRsZmDYTGCYAjRsbmDYXGCYEjRsYWDYQmCYCjRsaWDYUmCYGjRsZWDYSmCYBjRsbWDYWmCYFjRsY2DYRmCYDjRsa2DYVmCYHjRsZ2DYTmCYATRsb2DYXmCYETTsYGDYQWCYCTTsaGDYUWCYGTTsZGDYSWCYBTTsbGDYWWCYFTTsYmDYRWCYDTTsamDYVWCYHTTsZmDYTWCYAzTsbmDYXWCYEzTsYWDYQ2CYCzTsaWDYU2CYGzTsZWDYS2CYBzTsbWDYW2CYFzTsY2DYR2CYDzTsa2DYV2CYHzTsZ2DYT2BYADTsb2DYX2BYEDQcYGA4QGBYCDQcaGA4UGBYGDQcZGA4SGBYBDQcbGA4WGBYFDQcYmA4RGBYDDQcamA4VGBYHDQcZmA4TGBYAjQcbmA4XGBYEjQcYWA4QmBYCjQcaWA4UmBYGjQcZWA4SmBYBjQcbWA4WmBYFjQcY2A4RmBYDjQca2A4VmBYHjQcZ2A4TmBYATQcb2A4XmBYETScYGA4QWBYCTScaGA4UWBYGTScZGA4SWBYBTScbGA4WWBYFTScYmA4RWBYDTScamA4VWBYHTScZmA4TWBYAzScbmA4XWBYEzScYWA4Q2BYCzScaWA4U2BYGzScZWA4S2BYBzScbWA4W2BYFzScY2A4R2BYDzSca2A4V2BYHzScZ2A4T2DYADScb2A4X2DYEDRcYGC4QGDYCDRcaGC4UGDYGDRcZGC4SGDYBDRcbGC4WGDYFDRcYmC4RGDYDDRcamC4VGDYHDRcZmC4TGDYAjRcbmC4XGDYEjRcYWC4QmDYCjRcaWC4UmDYGjRcZWC4SmDYBjRcbWC4WmDYFjRcY2C4RmDYDjRca2C4VmDYHjRcZ2C4TmDYATRcb2C4XmDYETTcYGC4QWDYCTTcaGC4UWDYGTTcZGC4SWDYBTTcbGC4WWDYFTTcYmC4RWDYDTTcamC4VWDYHTTcZmC4TWDYAzTcbmC4XWDYEzTcYWC4Q2DYCzTcaWC4U2DYGzTcZWC4S2DYBzTcbWC4W2DYFzTcY2C4R2DYDzTca2C4V2DYHzTcZ2C4T2A4ADTcb2C4X2A4EDQ8YGB4QGA4CDQ8aGB4UGA4GDQ8ZGB4SGA4BDQ8bGB4WGA4FDQ8YmB4RGA4DDQ8amB4VGA4HDQ8ZmB4TGA4AjQ8bmB4XGA4EjQ8YWB4QmA4CjQ8aWB4UmA4GjQ8ZWB4SmA4BjQ8bWB4WmA4FjQ8Y2B4RmA4DjQ8a2B4VmA4HjQ8Z2B4TmA4ATQ8b2B4XmA4ETS8YGB4QWA4CTS8aGB4UWA4GTS8ZGB4SWA4BTS8bGB4WWA4FTS8YmB4RWA4DTS8amB4VWA4HTS8ZmB4TWA4AzS8bmB4XWA4EzS8YWB4Q2A4CzS8aWB4U2A4GzS8ZWB4S2A4BzS8bWB4W2A4FzS8Y2B4R2A4DzS8a2B4V2A4HzS8Z2B4T2C4ADS8b2B4X2C4EDR8YGD4QGC4CDR8aGD4UGC4GDR8ZGD4SGC4BDR8bGD4WGC4FDR8YmD4RGC4DDR8amD4VGC4HDR8ZmD4TGC4AjR8bmD4XGC4EjR8YWD4QmC4CjR8aWD4UmC4GjR8ZWD4SmC4BjR8bWD4WmC4FjR8Y2D4RmC4DjR8a2D4VmC4HjR8Z2D4TmC4ATR8b2D4XmC4ETT8YGD4QWC4CTT8aGD4UWC4GTT8ZGD4SWC4BTT8bGD4WWC4FTT8YmD4RWC4DTT8amD4VWC4HTT8ZmD4TWC4AzT8bmD4XWC4EzT8YWD4Q2C4CzT8aWD4U2C4GzT8ZWD4S2C4BzT8bWD4W2C4FzT8Y2D4R2C4DzT8a2D4V2C4HzT8Z2D4T2B4ADT8r/r/fcP/NdKGB0HDAAaGAQSGh0DDgAaGAQWGh0HDQAaGgQSGR0DDwAaGgQWGR0HDIAaGQQSGx0DDoAaGQQWGx0HDYAaGwQSGJ0DD4AaGwQWGJ0HDEAaGIQSGp0DDkAaGIQWGp0HDUAaGoQSGZ0DD0AaGoQWGZ0HDMAaGYQSG50DDsAaGYQWG50HDcAaG4QSGF0DD8AaG4QWGF0HDCAaGEQSGl0DDiAaGEQWGl0HDSAaGkQSGV0DDyAaGkQWGV0HDKAaGUQSG10DDqAaGUQWG10HDaAaG0QSGN0DD6AaG0QWGN0HDGAaGMQSGt0DDmAaGMQWGt0HDWAaGsQSGd0DD2AaGsQWGd0HDOAaGcQSG90DDuAaGcQWG90HDeAaG8QSGD0DD+AaG8QWGD0HDBAaGCQSGj0DDhAaGCQWGj0HDRAaGiQSGT0DDxAaGiQWGT0HDJAaGSQSGz0DDpAaGSQWGz0HDZAaGyQSGL0DD5AaGyQWGL0HDFAaGKQSGr0DDlAaGKQWGr0HDVAaGqQSGb0DD1AaGqQWGb0HDNAaGaQSG70DDtAaGaQWG70HDdAaG6QSGH0DD9AaG6QWGH0HDDAaGGQSGn0DDjAaGGQWGn0HDTAaGmQSGX0DDzAaGmQWGX0HDLAaGWQSG30DDrAaGWQWG30HDbAaG2QSGP0DD7AaG2QWGP0HDHAaGOQSGv0DDnAaGOQWGv0HDXAaGuQSGf0DD3AaGuQWGf0HDPAaGeQSG/0DDvAaGeQWG/xXiDPMZGOYTGAYADfMbGOYXGAYEDQsYGBYQGAYCDQsaGBYUGAYGDQsZGBYSGAYBDQsbGBYWGAYFDYsYGBYRGAYDDYsaGBYVGAYHDYsZGBYTGIYADYsbGBYXGIYEDUsYGJYQGIYCDUsaGJYUGIYGDUsZGJYSGIYBDUsbGJYWGIYFDcsYGJYRGIYDDcsaGJYVGIYHDcsZGJYTGEYADcsbGJYXGEYEDSsYGFYQGEYCDSsaGFYUGEYGDSsZGFYSGEYBDSsbGFYWGEYFDasYGFYRGEYDDasaGFYVGEYHDasZGFYTGMYADasbGFYXGMYEDWsYGNYQGMYCDWsaGNYUGMYGDWsZGNYSGMYBDWsbGNYWGMYFDesYGNYRGMYDDesaGNYVGMYHDesZGNYTGCYADesbGNYXGCYEDRsYGDYQGCYCDRsaGDYUGCYGDRsZGDYSGCYBDRsbGDYWGCYFDZsYGDYRGCYDDZsaGDYVGCYHDZsZGDYTGKYADZsbGDYXGKYEDVsYGLYQGKYCDVsaGLYUGKYGDVsZGLYSGKYBDVsbGLYWGKYFDdsYGLYRGKYDDdsaGLYVGKYHDdsZGLYTGGYADdsbGLYXGGYEDTsYGHYQGGYCDTsaGHYUGGYGDTsZGHYSGGYBDTsbGHYWGGYFDbsYGHYRGGYDDbsaGHYVGGYHDbsZGHYTGOYADbsbGHYXGOYEDXsYGPYQGOYCDXsaGPYUGOYGDXsZGPYSGOYBDXsbGPYWGOYFDfsYGPYRGOYDDfsaGPYVGOYHDfsZGPYTGBYADfsbGPYXGBYEDQcYGA4QGBYCDQcaGA4UGBYGDQcZGA4SGBYBDQcbGA4WGBYFDYcYGA4RGBYDDYcaGA4VGBYHDYcZGA4TGJYADYcbGA4XGJYEDUcYGI4QGJYCDUcaGI4UGJYGDUcZGI4SGJYBDUcbGI4WGJYFDccYGI4RGJYDDccaGI4VGJYHDccZGI4TGFYADccbGI4XGFYEDScYGE4QGFYCDScaGE4UGFYGDScZGE4SGFYBDScbGE4WGFYFDacYGE4RGFYDDacaGE4VGFYHDacZGE4TGNYADacbGE4XGNYEDWcYGM4QGNYCDWcaGM4UGNYGDWcZGM4SGNYBDWcbGM4WGNYFDecYGM4RGNYDDecaGM4VGNYHDecZGM4TGDYADecbGM4XGDYEDRcYGC4QGDYCDRcaGC4UGDYGDRcZGC4SGDYBDRcbGC4WGDYFDZcYGC4RGDYDDZcaGC4VGDYHDZcZGC4TGLYADZcbGC4XGLYEDVcYGK4QGLYCDVcaGK4UGLYGDVcZGK4SGLYBDVcbGK4WGLYFDdcYGK4RGLYDDdca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2UDDrgaGXQWG2UHDbgaG3QSGOUDD7gaG3QWGOUHDHgaGPQSGuUDDngaGPQWGuUHDXgaGvQSGeUDD3gaGvQWGeUHDPgaGfQSG+UDDvgaGfQWG+UHDfgaG/QSGBUDD/gaG/QWGBUHDAQaGAwSGhUDDgQaGAwWGhUHDQQaGgwSGRUDDwQaGgwWGRUHDIQaGQwSGxUDDoQaGQwWGxUHDYQaGwwSGJUDD4QaGwwWGJUHDEQaGIwSGpUDDkQaGIwWGpUHDUQaGowSGZUDD0QaGowWGZUHDMQaGYwSG5UDDsQaGYwWG5UHDcQaG4wSGFUDD8QaG4wWGFUHDCQaGEwSGlUDDiQaGEwWGlUHDSQaGkwSGVUDDyQaGkwWGVUHDKQaGUwSG1UDDqQaGUwWG1UHDaQaG0wSGNUDD6QaG0wWGNUHDGQaGMwSGtUDDmQaGMwWGtUHDWQaGswSGdUDD2QaGswWGdUHDOQaGcwSG9UDDuQaGcwWG9UHDeQaG8wSGDUDD+QaG8wWGDUHDBQaGCwSGjUDDhQaGCwWGjUHDRQaGiwSGTUDDxQaGiwWGTUHDJQaGSwSGzUDDpQaGSwWGzUHDZQaGywSGLUDD5QaGywWGLUHDFQaGKwSGrUDDlQaGKwWGrUHDVQaGqwSGbUDD1QaGqwWGbUHDNQaGawSG7UDDtQaGawWG7UHDdQaG6wSGHUDD9QaG6wWGHUHDDQaGGwSGnUDDjQaGGwWGnUHDTQaGmwSGXUDDzQaGmwWGXUHDLQaGWwSG3UDDrQaGWwWG3UHDbQaG2wSGPUDD7QaG2wWGPUHDHQaGOwSGvUDDnQaGOwWGvUHDXQaGuwSGfUDD3QaGuwWGfUHDPQaGewSG/UDDvQaGewWG/UHDfQaG+wSGA0DD/QaG+wWGA0HDAwaGBwSGg0DDgwaGBwWGg0HDQwaGhwSGQ0DDwwaGhwWGQ0HDIwaGRwSGw0DDowaGRwWGw0HDYwaGxwSGI0DD4waGxwWGI0HDEwaGJwSGo0DDkwaGJwWGo0HDUwaGpwSGY0DD0waGpwWGY0HDMwaGZwSG40DDswaGZwWG40HDcwaG5wSGE0DD8waG5wWGE0HD/0fNPwSB0nVdlO57bNu2bdu2bdu2bdu2bdu27XNu/dW83Roz4puN7O4Y64lckZGdfcHA8ILAcBJoeNHA8KLAcDJoeMnA8JLAcApoeNnA8LLAcCpoeMXA8IrAcBpoeNXA8KrAcDpoeM3A8JrAcAZoeN3A8LrAcCZoeMPA8IbAcBZoeNPA8KbAcDZoeMvA8JbAcA5oeNvA8LbAcC5oeMfA8I7AcB5oeNfA8K7AcD5oeM/A8J7AcAFoeN/A8L7AcCFo+MDA8IHAcBFo+NDA8KHAcDFo+MjA8JHAcAlo+NjA8LHAcClo+MTA8InAcBlo+NTA8KnAcDlo+MzA8JnAcAVo+NzA8LnAcCVo+MLA8IXAcBVo+NLA8KXAcDVo+MrA8JXAcA1o+NrA8LXAcC1o+MbA8I3AcB1o+NbA8K3AcD1o+M7A8J3AcANo+N7A8L3AcCNo+MHA8IPAcBNo+NHA8KPAcDNo+MnA8JPAcAto+NnA8LPAcCto+MXA8IvAcBto+NXA8KvAcDto+M3A8JvAcAdo+N3A8LvAcCdo+MPA8IfAcBdo+NPA8KfAcDdo+MvA8JfAcA9o+NvA8LfAcC9o+MfA8I/AcB9o+NfA8K/AcD9o+M/A8J/A8ABo+F/N/33D/2ukDQ+ChgEMDAMIDA+BhgENDAMKDA+DhoEMDAMJDI+AhoENDAMLDI+ChkEMDIMIDI+BhkENDIMKDI+DhsEMDIMJDE+AhsENDIMLDE+ChiEMDEMIDE+BhiENDEMKDE+DhqEMDEMJDM+AhqENDEMLDM+ChmEMDMMIDM+BhmENDMMKDM+DhuEMDMMJDC+AhuENDMMLDC+ChhEMDCMIDC+BhhENDCMKDC+DhpEMDCMJDK+AhpENDCMLDK+ChlEMDKMIDK+BhlENDKMKDK+DhtEMDKMJDG+AhtENDKMLDG+ChjEMDGMIDG+BhjENDGMKDG+DhrEMDGMJDO+AhrENDGMLDO+ChnEMDOMIDO+BhnENDOMKDO+DhvEMDOMJDB+AhvENDOMLDB+ChgkMDBMIDB+BhgkNDBMKDB+DhokMDBMJDJ+AhokNDBMLDJ+ChkkMDJMIDJ+BhkkNDJMKDJ+DhskMDJMJDF+AhskNDJMLDF+ChikMDFMIDF+BhikNDFMKDF+DhqkMDFMJDN+AhqkNDFMLDN+ChmkMDNMIDN+BhmkNDNMKDN+DhukMDNMJDD+AhukNDNMLDD+ChhkMDDMIDD+BhhkNDDMKDD+DhpkMDDMJDL+AhpkNDDMLDL+ChlkMDLMIDL+BhlkNDLMKDL+DhtkMDLMJDH+AhtkNDLMLDH+ChjkMDHMIDH+BhjkNDHMKDH+DhrkMDHMJDP+AhrkNDHMLDP+ChnkMDPMIDP+BhnkNDPMKDP8rwhnmMzDMJzAMABrmNzDMLzAMCBoWMDAsIDAMBBoWNDAsKDAMDBoWMjAsJDAMAhoWNjAsLDAMChoWMTAsIjAMBhoWNTAsKjAMDhoWMzAsJjAMARoWNzAsLjAMCRqWMDAsITAMBRqWNDAsKTAMDRqWMjAsJTAMAxqWNjAsLTAMCxqWMTAsIzAMBxqWNTAsKzAMDxqWMzAsJzCMABqWNzAsLzCMCBpWMDCsIDCMBBpWNDCsKDCMDBpWMjCsJDCMAhpWNjCsLDCMChpWMTCsIjCMBhpWNTCsKjCMDhpWMzCsJjCMARpWNzCsLjCMCRrWMDCsITCMBRrWNDCsKTCMDRrWMjCsJTCMAxrWNjCsLTCMCxrWMTCsIzCMBxrWNTCsKzCMDxrWMzCsJzBMABrWNzCsLzBMCBo2MDBsIDBMBBo2NDBsKDBMDBo2MjBsJDBMAho2NjBsLDBMCho2MTBsIjBMBho2NTBsKjBMDho2MzBsJjBMARo2NzBsLjBMCRq2MDBsITBMBRq2NDBsKTBMDRq2MjBsJTBMAxq2NjBsLTBMCxq2MTBsIzBMBxq2NTBsKzBMDxq2MzBsJzDMABq2NzBsLzDMCBp2MDDsIDDMBBp2NDDsKDDMDBp2MjDsJDDMAhp2NjDsLDDMChp2MTDsIjDMBhp2NTDsKjDMDhp2MzDsJjDMARp2NzDsLjDMCRr2MDDsITDMBRr2NDDsKTDMDRr2MjDsJTDMAxr2NjDsLTDMCxr2MTDsIzDMBxr2NTDsKzDMDxr2MzDsJzAsABr2NzDsLzAsCBoOMDAcIDAsBBoONDAcKDAsDBoOMjAcJDAsAhoONjAcLDAsChoOMTAcIjAsBhoONTAcKjAsDhoOMzAcJjAsARoONzAcLjAsCRqOMDAcITAsBRqONDAcKTAsDRqOMjAcJTAsAxqONjAcLTAsCxqOMTAcIzAsBxqONTAcKzAsDxqOMzAcJzCsABqONzAcLzCsCBpOMDCcIDCsBBpONDCcKDCsDBpOMjCcJDCsAhpONjCcLDCsChpOMTCcIjCsBhpONTCcKjCsDhpOMzCcJjCsARpONzCcLjCsCRrOMDCcITCsBRrONDCcKTCsDRrOMjCcJTCsAxrONjCcLTCsCxrOMTCcIzCsBxrONTCcKzCsDxrOMzCcJzBsABrONzCcLzBsCBouMDBcIDBsBBouNDBcKDBsDBouMjBcJDBsAhouNjBcLDBsChouMTBcIjBsBhouNTBcKjBsDhouMzBcJjBsARouNzBcLjBsCRquMDBcITBsBRquNDBcKTBsDRquMjBcJTBsAxquNjBcLTBsCxquMTBcIzBsBxquNTBcKzBsDxquMzBcJzDsABquNzBcLzDsCBpuMDDcIDDsBBpuNDDcKDDsDBpuMjDcJDDsAhpuNjDcLDDsChpuMTDcIjDsBhpuNTDcKjDsDhpuMzDcJjDsARpuNzDcLjDsCRruMDDcITDsBRruNDDcKTDsDRruMjDcJTDsAxruNjDcLTDsCxruMTDcIzDsBxruNTDcKzDsDxruMzDcJzAcABruNzDcLzAcCBoeMDA8IDAcBBoeNDA8KDAcDBoeMjA8JDAcAhoeNjA8LDAcChoeMTA8IjAcBhoeNTA8KjAcDhoeMzA8JjAcARoeNzA8LjAcCRqeMDA8ITAcBRqeNDA8KTAcDRqeMjA8JTAcAxqeNjA8LTAcCxqeMTA8IzAcBxqeNTA8KzAcDxqeMzA8JzCcABqeNzA8LzCcCBpeMDC8IDCcBBpeNDC8KDCcDBpeMjC8JDCcAhpeNjC8LDCcChpeMTC8IjCcBhpeNTC8KjCcDhpeMzC8JjCcARpeNzC8LjCcCRreMDC8ITCcBRreNDC8KTCcDRreMjC8JTCcAxreNjC8LTCcCxreMTC8IzCcBxreNTC8KzCcDxreMzC8JzBcABreNzC8LzBcCBo+MDB8IDBcBBo+NDB8KDBcDBo+MjB8JDBcAho+NjB8LDBcCho+MTB8IjBcBho+NTB8KjBcDho+MzB8JjBcARo+NzB8LjBcCRq+MDB8ITBcBRq+NDB8KTBcDRq+MjB8JTBcAxq+NjB8LTBcCxq+MTB8IzBcBxq+NTB8KzBcDxq+MzB8JzDcABq+NzB8LzDcCBp+MDD8IDDcBBp+NDD8KDDcDBp+MjD8JDDcAhp+NjD8LDDcChp+MTD8IjDcBhp+NTD8KjDcDhp+MzD8JjDcARp+NzD8LjDcCRr+MDD8ITDcBRr+NDD8KTDcDRr+MjD8JTDcAxr+NjD8LTDcCxr+MTD8IzDcBxr+NTD8KzDcDxr+MzD8JzA8ABr+V+t/3/D/GmnDg6BhAAPDAALDQ6BhQAPDgALDw6BhIAPDQALDI6BhYAPDwALDo6BhEAPDIALDY6BhUAPDoALD46BhMAPDYALDE6BhcAPD4ALDk6BhCAPDEALDU6BhSAPDkALD06BhKAPDUALDM6BhaAPD0ALDs6BhGAPDMALDc6BhWAPDsALD86BhOAPDcALDC6BheAPD8ALDi6BhBAPDCALDS6BhRAPDiALDy6BhJAPDSALDK6BhZAPDyALDq6BhFAPDKALDa6BhVAPDqALD66BhNAPDaALDG6BhdAPD6ALDm6BhDAPDGALDW6BhTAPDmALD26BhLAPDWALDO6BhbAPD2ALDu6BhHAPDOALDe6BhXAPDuALD+6BhPAPDeALDB6BhfAPD+ALDh6BhAgPDBALDR6BhQgPDhALDx6BhIgPDRALDJ6BhYgPDxALDp6BhEgPDJALDZ6BhUgPDpALD56BhMgPDZALDF6BhcgPD5ALDl6BhCgPDFALDV6BhSgPDlALD16BhKgPDVALDN6BhagPD1ALDt6BhGgPDNALDd6BhWgPDtALD96BhOgPDdALDD6BhegPD9ALDj6BhBgPDDALDT6BhRgPDjALDz6BhJgPDTALDL6BhZgPDzALDr6BhFgPDLALDb6BhVgPDrALD76BhNgPDbALDH6BhdgPD7ALDn6BhDgPDHALDX6BhTgPDnALD36BhLgPDXALDP6BhbgPD3ALDv6BhHgPDPALDf6BhXgPDvALD/4pyhvkMDPMJDAOAhvkNDPMLDAOChgUMDAsIDAOBhgUNDAsKDAODhoUMDAsJDIOAhoUNDAsLDIOChkUMDIsIDIOBhkUNDIsKDIODhsUMDIsJDEOAhsUNDIsLDEOChiUMDEsIDEOBhiUNDEsKDEODhqUMDEsJDMOAhqUNDEsLDMOChmUMDMsIDMOBhmUNDMsKDMODhuUMDMsJDCOAhuUNDMsLDCOChhUMDCsIDCOBhhUNDCsKDCODhpUMDCsJDKOAhpUNDCsLDKOChlUMDKsIDKOBhlUNDKsKDKODhtUMDKsJDGOAhtUNDKsLDGOChjUMDGsIDGOBhjUNDGsKDGODhrUMDGsJDOOAhrUNDGsLDOOChnUMDOsIDOOBhnUNDOsKDOODhvUMDOsJDBOAhvUNDOsLDBOChg0MDBsIDBOBhg0NDBsKDBODho0MDBsJDJOAho0NDBsLDJOChk0MDJsIDJOBhk0NDJsKDJODhs0MDJsJDFOAhs0NDJsLDFOChi0MDFsIDFOBhi0NDFsKDFODhq0MDFsJDNOAhq0NDFsLDNOChm0MDNsIDNOBhm0NDNsKDNODhu0MDNsJDDOAhu0NDNsLDDOChh0MDDsIDDOBhh0NDDsKDDODhp0MDDsJDLOAhp0NDDsLDLOChl0MDLsIDLOBhl0NDLsKDLODht0MDLsJDHOAht0NDLsLDHOChj0MDHsIDHOBhj0NDHsKDHODhr0MDHsJDPOAhr0NDHsLDPOChn0MDPsIDPOBhn0NDPsKDPODhv0MDPsJDAuAhv0NDPsLDAuChgMMDAcIDAuBhgMNDAcKDAuDhoMMDAcJDIuAhoMNDAcLDIuChkMMDIcIDIuBhkMNDIcKDIuDhsMMDIcJDEuAhsMNDIcLDEuChiMMDEcIDEuBhiMNDEcKDEuDhqMMDEcJDMuAhqMNDEcLDMuChmMMDMcIDMuBhmMNDMcKDMuDhuMMDMcJDCuAhuMNDMcLDCuChhMMDCcIDCuBhhMNDCcKDCuDhpMMDCcJDKuAhpMNDCcLDKuChlMMDKcIDKuBhlMNDKcKDKuDhtMMDKcJDGuAhtMNDKcLDGuChjMMDGcIDGuBhjMNDGcKDGuDhrMMDGcJDOuAhrMNDGcLDOuChnMMDOcIDOuBhnMNDOcKDOuDhvMMDOcJDBuAhvMNDOcLDBuChgsMDBcIDBuBhgsNDBcKDBuDhosMDBcJDJuAhosNDBcLDJuChksMDJcIDJuBhksNDJcKDJuDhssMDJcJDFuAhssNDJcLDFuChisMDFcIDFuBhisNDFcKDFuDhqsMDFcJDNuAhqsNDFcLDNuChmsMDNcIDNuBhmsNDNcKDNuDhusMDNcJDDuAhusNDNcLDDuChhsMDDcIDDuBhhsNDDcKDDuDhpsMDDcJDLuAhpsNDDcLDLuChlsMDLcIDLuBhlsNDLcKDLuDhtsMDLcJDHuAhtsNDLcLDHuChjsMDHcIDHuBhjsNDHcKDHuDhrsMDHcJDPuAhrsNDHcLDPuChnsMDPcIDPuBhnsNDPcKDPuDhvsMDPcJDAeAhvsNDPcLDAeChgcMDA8IDAeBhgcNDA8KDAeDhocMDA8JDIeAhocNDA8LDIeChkcMDI8IDIeBhkcNDI8KDIeDhscM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LAQaDjQwHCgwLAwaDjIwHCQwLAIaDjYwHCwwLAoaDjEwHCIwLAYaDjUwHCowLA4aDjMwHCYwLAEaDjcwHC4wLAkajjAwHCEwLAUajjQwHCkwLA0ajjIwHCUwLAMajjYwHC0wLAsajjEwHCMwLAcajjUwHCswLA8ajjMwHCcwrAAajjcwHC8wrAgaTjAwnCAwrAQaTjQwnCgwrAwaTjIwnCQwrAIaTjYwnCwwrAoaTjEwnCIwrAYaTjUwnCowrA4aTjMwnCYwrAEaTjcwnC4wrAkazjAwnCEwrAUazjQwnCkwrA0azjIwnCUwrAMazjYwnC0wrAsazjEwnCMwrAcazjUwnCswrA8azjMwnCcwbAAazjcwnC8wbAgaLjAwXCAwbAQaLjQwXCgwbAwaLjIwXCQwbAIaLjYwXCwwbAoaLjEwXCIwbAYaLjUwXCowbA4aLjMwXCYwbAEaLjcwXC4wbAkarjAwXCEwbAUarjQwXCkwbA0arjIwXCUwbAMarjYwXC0wbAsarjEwXCMwbAcarjUwXCswbA8arjMwXCcw7AAarjcwXC8w7AgabjAw3CAw7AQabjQw3Cgw7AwabjIw3CQw7AIabjYw3Cww7AoabjEw3CIw7AYabjUw3Cow7A4abjMw3CYw7AEabjcw3C4w7Aka7jAw3CEw7AUa7jQw3Ckw7A0a7jIw3CUw7AMa7jYw3C0w7Asa7jEw3CMw7Aca7jUw3Csw7A8a7jMw3CcwHAAa7jcw3C8wHAgaHjAwPCAwHAQaHjQwPCgwHAwaHjIwPCQwHAIaHjYwPCwwHAoaHjEwPCIwHAYaHjUwPCowHA4aHjMwPCYwHAEaHjcwPC4wHAkanjAwPCEwHAUanjQwPCkwHA0anjIwPCUwHAManjYwPC0wHAsanjEwPCMwHAcanjUwPCswHA8anjMwPCcwnAAanjcwPC8wnAgaXjAwvCAwnAQaXjQwvCgwnAwaXjIwvCQwnAIaXjYwvCwwnAoaXjEwvCIwnAYaXjUwvCownA4aXjMwvCYwnAEaXjcwvC4wnAka3jAwvCEwnAUa3jQwvCkwnA0a3jIwvCUwnAMa3jYwvC0wnAsa3jEwvCMwnAca3jUwvCswnA8a3jMwvCcwXAAa3jcwvC8wXAgaPjAwfCAwXAQaPjQwfCgwXAwaPjIwfCQwXAIaPjYwfCwwXAoaPjEwfCIwXAYaPjUwfCowXA4aPjMwfCYwXAEaPjcwfC4wXAkavjAwfCEwXAUavjQwfCkwXA0avjIwfCUwXAMavjYwfC0wXAsavjEwfCMwXAcavjUwfCswXA8avjMwfCcw3AAavjcwfC8w3AgafjAw/CAw3AQafjQw/Cgw3AwafjIw/CQw3AIafjYw/Cww3AoafjEw/CIw3AYafjUw/Cow3A4afjMw/CYw3AEafjcw/C4w3Aka/jAw/CEw3AUa/jQw/Ckw3A0a/jIw/CUw3AMa/jYw/C0w3Asa/jEw/CMw3Aca/jUw/Csw3A8a/jMw/CcwPAAa/lfvf9/w/xppw4OgYQADwwACw0OgYUADw4ACw8OgYSADw0ACwyOgYWADw8ACw6OgYRADwyACw2OgYVADw6ACw+OgYTADw2ACwxOgYXADw+ACw5OgYQgDwxACw1OgYUgDw5ACw9OgYSgDw1ACwzOgYWgDw9ACw7OgYRgDwzACw3OgYVgDw7ACw/OgYTgDw3ACwwugYXgDw/ACw4ugYQQDwwgCw0ugYUQDw4gCw8ugYSQDw0gCwyugYWQDw8gCw6ugYRQDwygCw2ugYVQDw6gCw+ugYTQDw2gCwxugYXQDw+gCw5ugYQwDwxgCw1ugYUwDw5gCw9ugYSwDw1gCwzugYWwDw9gCw7ugYRwDwzgCw3ugYVwDw7gCw/ugYTwDw3gCwwegYXwDw/gCw4egYQIDwwQCw0egYUIDw4QCw8egYSIDw0QCwyegYWIDw8QCw6egYRIDwyQCw2egYVIDw6QCw+egYTIDw2QCwxegYXIDw+QCw5egYQoDwxQCw1egYUoDw5QCw9egYSoDw1QCwzegYWoDw9QCw7egYRoDwzQCw3egYVoDw7QCw/egYToDw3QCww+gYXoDw/QCw4+gYQYDwwwCw0+gYUYDw4wCw8+gYSYDw0wCwy+gYWYDw8wCw6+gYRYDwywCw2+gYVYDw6wCw++gYTYDw2wCwx+gYXYDw+wCw5+gYQ4DwxwCw1+gYU4Dw5wCw9+gYS4Dw1wCwz+gYW4Dw9wCw7+gYR4DwzwCw3+gYV4Dw7wCw/9Kcob5DAzzCQwDgIb5DQzzCwwDgoYFDAwLCAwDgYYFDQwLCgwDg4aFDAwLCQyDgIaFDQwLCwyDgoZFDAyLCAyDgYZFDQyLCgyDg4bFDAyLCQxDgIbFDQyLCwxDgoYlDAxLCAxDgYYlDQxLCgxDg4alDAxLCQzDgIalDQxLCwzDgoZlDAzLCAzDgYZlDQzLCgzDg4blDAzLCQwjgIblDQzLCwwjgoYVDAwrCAwjgYYVDQwrCgwjg4aVDAwrCQyjgIaVDQwrCwyjgoZVDAyrCAyjgYZVDQyrCgyjg4bVDAyrCQxjgIbVDQyrCwxjgoY1DAxrCAxjgYY1DQxrCgxjg4a1DAxrCQzjgIa1DQxrCwzjgoZ1DAzrCAzjgYZ1DQzrCgzjg4b1DAzrCQwTgIb1DQzrCwwTgoYNDAwbCAwTgYYNDQwbCgwTg4aNDAwbCQyTgIaNDQwbCwyTgoZNDAybCAyTgYZNDQybCgyTg4bNDAybCQxTgIbNDQybCwxTgoYtDAxbCAxTgYYtDQxbCgxTg4atDAxbCQzTgIatDQxbCwzTgoZtDAzbCAzTgYZtDQzbCgzTg4btDAzbCQwzgIbtDQzbCwwzgoYdDAw7CAwzgYYdDQw7Cgwzg4adDAw7CQyzgIadDQw7CwyzgoZdDAy7CAyzgYZdDQy7Cgyzg4bdDAy7CQxzgIbdDQy7CwxzgoY9DAx7CAxzgYY9DQx7Cgxzg4a9DAx7CQzzgIa9DQx7CwzzgoZ9DAz7CAzzgYZ9DQz7Cgzzg4b9DAz7CQwLgIb9DQz7CwwLgoYDDAwHCAwLgYYDDQwHCgwLg4aDDAwHCQyLgIaDDQwHCwyLgoZDDAyHCAyLgYZDDQyHCgyLg4bDDAyHCQxLgIbDDQyHCwxLgoYjDAxHCAxLgYYjDQxHCgxLg4ajDAxHCQzLgIajDQxHCwzLgoZjDAzHCAzLgYZjDQzHCgzLg4bjDAzHCQwrgIbjDQzHCwwrgoYTDAwnCAwrgYYTDQwnCgwrg4aTDAwnCQyrgIaTDQwnCwyrgoZTDAynCAyrgYZTDQynCgyrg4bTDAynCQxrgIbTDQynCwxrgoYzDAxnCAxrgYYzDQxnCgxrg4azDAxnCQzrgIazDQxnCwzrgoZzDAznCAzrgYZzDQznCgzrg4bzDAznCQwbgIbzDQznCwwbgoYLDAwXCAwbgYYLDQwXCgwbg4aLDAwXCQybgIaLDQwXCwybgoZLDAyXCAybgYZLDQyXCgybg4bLDAyXCQxbgIbLDQyXCwxbgoYrDAxXCAxbgYYrDQxXCgxbg4arDAxXCQzbgIarDQxXCwzbgoZr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DYcYGA4RGJYADYcaGA4VGJYEDYcZGA4TGJYCDYcbGA4XGJYGDUcYGI4QGJYBDUcaGI4UGJYFDUcZGI4SGJYDDUcbGI4WGJYHDccYGI4RGFYADccaGI4VGFYEDccZGI4TGFYCDccbGI4XGFYGDScYGE4QGFYBDScaGE4UGFYFDScZGE4SGFYDDScbGE4WGFYHDacYGE4RGNYADacaGE4VGNYEDacZGE4TGNYCDacbGE4XGNYGDWcYGM4QGNYBDWcaGM4UGNYFDWcZGM4SGNYDDWcbGM4WGNYHDecYGM4RGDYADecaGM4VGDYEDecZGM4TGDYCDecbGM4XGDYGDRcYGC4QGDYBDRcaGC4UGDYFDRcZGC4SGDYDDRcbGC4WGDYHDZcYGC4RGLYADZcaGC4VGLYEDZcZGC4TGLYCDZcbGC4XGLYGDVcYGK4QGLYBDVcaGK4UGLYFDVcZGK4SGLYDDVcbGK4WGLYHDdcYGK4RGHYADdcaGK4VGHYEDdcZGK4TGHYCDdcbGK4XGHYGDTcYGG4QGHYBDTcaGG4UGHYFDTcZGG4SGHYDDTcbGG4WGHYHDbcYGG4RGPYADbcaGG4VGPYEDbcZGG4TGPYCDbcbGG4XGPYGDXcYGO4QGPYBDXcaGO4UGPYFDXcZGO4SGPYDDXcbGO4WGPYHDfcYGO4RGA4ADfcaGO4VGA4EDfcZGO4TGA4CDfcbGO4XGA4GDQ8YGB4QGA4BDQ8aGB4UGA4FDQ8ZGB4SGA4DDQ8bGB4WGA4HDY8YGB4RGI4ADY8aGB4VGI4EDY8ZGB4TGI4CDY8bGB4XGI4GDU8YGJ4QGI4BDU8aGJ4UGI4FDU8ZGJ4SGI4DDU8bGJ4WGI4HDc8YGJ4RGE4ADc8aGJ4VGE4EDc8ZGJ4TGE4CDc8bGJ4XGE4GDS8YGF4QGE4BDS8aGF4UGE4FDS8ZGF4SGE4DDS8bGF4WGE4HDa8YGF4RGM4ADa8aGF4VGM4EDa8ZGF4TGM4CDa8bGF4XGM4GDW8YGN4QGM4BDW8aGN4UGM4FDW8ZGN4SGM4DDW8bGN4WGM4HDe8YGN4RGC4ADe8aGN4VGC4EDe8ZGN4TGC4CDe8bGN4XGC4GDR8YGD4QGC4BDR8aGD4UGC4FDR8ZGD4SGC4DDR8bGD4WGC4HDZ8YGD4RGK4ADZ8aGD4VGK4EDZ8ZGD4TGK4CDZ8bGD4XGK4GDV8YGL4QGK4BDV8aGL4UGK4FDV8ZGL4SGK4DDV8bGL4WGK4HDd8YGL4RGG4ADd8aGL4VGG4EDd8ZGL4TGG4CDd8bGL4XGG4GDT8YGH4QGG4BDT8aGH4UGG4FDT8ZGH4SGG4DDT8bGH4WGG4HDb8YGH4RGO4ADb8aGH4VGO4EDb8ZGH4TGO4CDb8bGH4XGO4GDX8YGP4QGO4BDX8aGP4UGO4FDX8ZGP4SGO4DDX8bGP4WGO4HDf8YGP4RGB4ADf8aGP4VGB4EDf8ZGP4TGB4CDf9r+r9v+H+NtOFh0DCAgWEAgeER0DCggWFAgeFR0DCQgWEggeEx0DCwgWFggeFx0DCIgWEQgeEJ0DCogWFQgeFJ0DCYgWEwgeEp0DC4gWFwgeFp0DCEgWEIgeEZ0DCkgWFIgeFZ0DCUgWEogeE50DC0gWFogeF50DCMgWEYgeEF0DCsgWFYgeFF0DCcgWE4geEl0DC8gWF4geFl0DCCgWEEgeEV0DCigWFEgeFV0DCSgWEkgeE10DCygWFkgeF10DCKgWEUgeEN0DCqgWFUgeFN0DCagWE0geEt0DC6gWF0geFt0DCGgWEMgeEd0DCmgWFMgeFd0DCWgWEsgeE90DC2gWFsgeF90DCOgWEcgeED0DCugWFcgeFD0DCegWE8geEj0DC+gWF8geFj0DCBgWECgeET0DChgWFCgeFT0DCRgWEigeEz0DCxgWFigeFz0DCJgWESgeEL0DCpgWFSgeFL0DCZgWEygeEr0DC5gWFygeFr0DCFgWEKgeEb0DClgWFKgeFb0DCVgWEqgeE70DC1gWFqgeF70DCNgWEageEH0DCtgWFageFH0DCdgWE6geEn0DC9gWF6geFn0DCDgWEGgeEX0DCjgWFGgeFX0DCTgWEmgeE30DCzgWFmgeF30DCLgWEWgeEP0DCrgWFWgeFP0DCbgWE2geEv0DC7gWF2geFv0DCHgWEOgeEf0DCngWFOgeFf0DCXgWEugeE/0DC3gWFugeF/FTjDPAaGeQSGAUDDvAaGeQWGAUHDfAaG+QSGgUDD/AaG+QWGgUHDAgaGBQSGQUDDggaGBQWGQUHDQgaGhQSGwUDDwgaGhQWGwUHDIgaGRQSGIUDDogaGRQWGIUHDYgaGxQSGoUDD4gaGxQWGoUHDEgaGJQSGYUDDkgaGJQWGYUHDUgaGpQSG4UDD0gaGpQWG4UHDMgaGZQSGEUDDsgaGZQWGEUHDcgaG5QSGkUDD8gaG5QWGkUHDCgaGFQSGUUDDigaGFQWGUUHDSgaGlQSG0UDDygaGlQWG0UHDKgaGVQSGMUDDqgaGVQWGMUHDagaG1QSGsUDD6gaG1QWGsUHDGgaGNQSGcUDDmgaGNQWGcUHDWgaGtQSG8UDD2gaGtQWG8UHDOgaGdQSGCUDDugaGdQWGCUHDegaG9QSGiUDD+gaG9QWGiUHDBgaGDQSGSUDDhgaGDQWGSUHDRgaGjQSGyUDDxgaGjQWGyUHDJgaGTQSGKUDDpgaGTQWGKUHDZgaGzQSGqUDD5gaGzQWGqUHDFgaGLQSGaUDDlgaGLQWGaUHDVgaGrQSG6UDD1gaGrQWG6UHDNgaGbQSGGUDDtgaGbQWGGUHDdgaG7QSGmUDD9gaG7QWGmUHDDgaGHQSGWUDDjgaGHQWGWUHDTgaGnQSG2UDDzgaGnQWG2UHDLgaGXQSGOUDDrgaGXQWGOUHDbgaG3QSGuUDD7gaG3QWGuUHDHgaGPQSGeUDDngaGPQWGeUHDXgaGvQSG+UDD3gaGvQWG+UHDPgaGfQSGBUDDvgaGfQWGBUHDfgaG/QSGhUDD/gaG/QWGhUHDAQaGAwSGRUDDgQaGAwWGRUHDQQaGgwSGxUDDwQaGgwWGxUHDIQaGQwSGJUDDoQaGQwWGJUHDYQaGwwSGpUDD4QaGwwWGpUHDEQaGIwSGZUDDkQaGIwWGZUHDUQaGowSG5UDD0QaGowWG5UHDMQaGYwSGFUDDsQaGYwWGFUHDcQaG4wSGlUDD8QaG4wWGlUHDCQaGEwSGVUDDiQaGEwWGVUHDSQaGkwSG1UDDyQaGkwWG1UHDKQaGUwSGNUDDqQaGUwWGNUHDaQaG0wSGtUDD6QaG0wWGtUHDGQaGMwSGdUDDmQaGMwWGdUHDWQaGswSG9UDD2QaGswWG9UHDOQaGcwSGDUDDuQaGcwWGDUHDeQaG8wSGjUDD+QaG8wWGjUHDBQaGCwSGTUDDhQaGCwWGTUHDRQaGiwSGzUDDxQaGiwWGzUHDJQaGSwSGLUDDpQaGSwWGLUHDZQaGywSGrUDD5QaGywWGrUHDFQaGKwSGbUDDlQaGKwWGbUHDVQaGqwSG7UDD1QaGqwWG7UHDNQaGawSGHUDDtQaGawWGHUHDdQaG6wSGnUDD9QaG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BQ1bGRi2EhimAw1bGxi2FhimBw3bGBi2ERhmAA3bGhi2FRhmBA3bGRi2ExhmAg3bGxi2FxhmBg07GBh2EBhmAQ07Ghh2FBhmBQ07GRh2EhhmAw07Gxh2FhhmBw27GBh2ERjmAA27Ghh2FRjmBA27GRh2ExjmAg27Gxh2FxjmBg17GBj2EBjmAQ17Ghj2FBjmBQ17GRj2EhjmAw17Gxj2FhjmBw37GBj2ERgWAA37Ghj2FRgWBA37GRj2ExgWAg37Gxj2FxgWBg0HGBgOEBgWAQ0HGhgOFBgWBQ0HGRgOEhgWAw0HGxgOFhgWBw2HGBgOERiWAA2HGhgOFRiWBA2HGRgOExiWAg2HGxgOFxiWBg1HGBiOEBiWAQ1HGhiOFBiWBQ1HGRiOEhiWAw1HGxiOFhiWBw3HGBiOERhWAA3HGhiOFRhWBA3HGRiOExhWAg3HGxiOFxhWBg0nGBhOEBhWAQ0nGhhOFBhWBQ0nGRhOEhhWAw0nGxhOFhhWBw2nGBhOERjWAA2nGhhOFRjWBA2nGRhOExjWAg2nGxhOFxjWBg1nGBjOEBjWAQ1nGhjOFBjWBQ1nGRjOEhjWAw1nGxjOFhjWBw3nGBjOERg2AA3nGhjOFRg2BA3nGRjOExg2Ag3nGxjOFxg2Bg0XGBguEBg2AQ0XGhguFBg2BQ0XGRguEhg2Aw0XGxguFhg2Bw2XGBguERi2AA2XGhguFRi2BA2XGRguExi2Ag2XGxguFxi2Bg1XGBiuEBi2AQ1XGhiuFBi2BQ1XGRiuEhi2Aw1XGxiuFhi2Bw3XGBiuERh2AA3XGhiuFRh2BA3XGRiuExh2Ag3XGxiuFxh2Bg03GBhuEBh2AQ03GhhuFBh2BQ03GRhuEhh2Aw03GxhuFhh2Bw23GBhuERj2AA23GhhuFRj2BA23GRhuExj2Ag23GxhuFxj2Bg13GBjuEBj2AQ13GhjuFBj2BQ13GRjuEhj2Aw13GxjuFhj2Bw33GBjuERgOAA33GhjuFRgOBA33GRjuExgOAg33GxjuFxgOBg0PGBgeEBgOAQ0PGhgeFBgOBQ0PGRgeEhgOAw0PGxgeFhgOBw2PGBgeERiOAA2PGhgeFRiOBA2PGRgeExiOAg2PGxgeFxiOBg1PGBieEBiOAQ1PGhieFBiOBQ1PGRieEhiOAw1PGxieFhiOBw3PGBieERhOAA3PGhieFRhO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hlMFhjVBw2kGhtMEhrVAw+kGhtMFhrVBwxkGhjMEhnVAw5kGhjMFhnVBw1kGhrMEhvVAw9kGhrMFhvVBwzkGhnMEhg1Aw7kGhnMFhg1Bw3kGhvMEho1Aw/kGhvMFho1BwwUGhgsEhk1Aw4UGhgsFhk1Bw0UGhosEhs1Aw8UGhosFhs1BwyUGhksEhi1Aw6UGhksFhi1Bw2UGhssEhq1Aw+UGhssFhq1BwxUGhisEhm1Aw5UGhisFhm1Bw1UGhqsEhu1Aw9UGhqsFhu1BwzUGhmsEhh1Aw7UGhmsFhh1Bw3UGhusEhp1Aw/UGhusFhp1Bww0GhhsEhl1Aw40GhhsFhl1Bw00GhpsEht1Aw80GhpsFht1Bwy0GhlsEhj1Aw60GhlsFhj1Bw20GhtsEhr1Aw+0GhtsFhr1Bwx0GhjsEhn1Aw50GhjsFhn1Bw10GhrsEhv1Aw90GhrsFhv1Bwz0GhnsEhgNAw70GhnsFhgNBw30GhvsEhoNAw/0GhvsFhoNBwwMGhgcEhkNAw4MGhgcFhkNBw0MGhocEhsNAw8MGhocFhsNBwyMGhkcEhiNAw6MGhkcFhiNBw2MGhscEhqNAw+MGhscFhqNBwxMGhicEhmNAw5MGhicFhmNBw1MGhqcEhuNAw9MGhqcFhuNBwzMGhmcEhhNAw7MGhmcFhhNBw3MGhucEhpNAw/MGhucFhpNBwwsGhhcEhlNAw4sGhhcFhlNBw0sGhpcEhtNAw8sGhpcFhtNBwysGhlcEhjNAw6sGhlcFhjNBw2sGhtcEhrNAw+sGhtcFhrNBwxsGhjcEhnNAw5sGhjcFhnNBw1sGhrcEhvNAw9sGhrcFhvNBwzsGhncEhgtAw7sGhncFhgtBw3sGhvcEhotAw/sGhvcFhotBwwcGhg8EhktAw4cGhg8FhktBw0cGho8EhstAw8cGho8FhstBwycGhk8EhitAw6cGhk8FhitBw2cGhs8EhqtAw+cGhs8FhqtBwxcGhi8EhmtAw5cGhi8FhmtBw1cGhq8EhutAw9cGhq8FhutBwzcGhm8EhhtAw7cGhm8FhhtBw3cGhu8EhptAw/cGhu8FhptBww8Ghh8EhltAw48Ghh8FhltBw08Ghp8EhttAw88Ghp8FhttBwy8Ghl8EhjtAw68Ghl8FhjtBw28Ght8EhrtAw+8Ght8FhrtBwx8Ghj8EhntAw58G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YDhCYFgGNBxpYDhSYFgWNBxlYDhKYFgONBxtYDhaYFgeNBxjYDhGYFgBNBxrYDhWYFgRNBxnYDhOYFgJNBxvYDheYFgZNJxgYDhBYFgFNJxoYDhRYFgVNJxkYDhJYFgNNJxsYDhZYFgdNJxiYDhFYFgDNJxqYDhVYFgTNJxmYDhNYFgLNJxuYDhdYFgbNJxhYDhDYFgHNJxpYDhTYFgXNJxlYDhLYFgPNJxtYDhbYFgfNJxjYDhHYNgANJxrYDhXYNgQNJxnYDhPYNgINJxvYDhfYNgYNFxgYLhAYNgENFxoYLhQYNgUNFxkYLhIYNgMNFxsYLhYYNgcNFxiYLhEYNgCNFxqYLhUYNgSNFxmYLhMYNgKNFxuYLhcYNgaNFxhYLhCYNgGNFxpYLhSYNgWNFxlYLhKYNgONFxtYLhaYNgeNFxjYLhGYNgBNFxrYLhWYNgRNFxnYLhOYNgJNFxvYLheYNgZNNxgYLhBYNgFNNxoYLhRYNgVNNxkYLhJYNgNNNxsYLhZYNgdNNxiYLhFYNgDNNxqYLhVYNgTNNxmYLhNYNgLNNxuYLhdYNgbNNxhYLhDYNgHNNxpYLhTYNgXNNxlYLhLYNgPNNxtYLhbYNgfNNxjYLhHYDgANNxrYLhXYDgQNNxnYLhPYDgINNxvYLhfYDgYNDxgYHhAYDgENDxoYHhQYDgUNDxkYHhIYDgMNDxsYHhYYDgcNDxiYHhEYDgCNDxqYHhUYDgSNDxmYHhMYDgKNDxuYHhcYDgaNDxhYHhCYDgGNDxpYHhSYDgWNDxlYHhKYDgONDxtYHhaYDgeNDxjYHhGYDgBNDxrYHhWYDgRNDxnYHhOYDgJNDxvYHheYDgZNLxgYHhBYDgFNLxoYHhRYDgVNLxkYHhJYDgNNLxsYHhZYDgdNLxiYHhFYDgDNLxqYHhVYDgTNLxmYHhNYDgLNLxuYHhdYDgbNLxhYHhDYDgHNLxpYHhTYDgXNLxlYHhLYDgPNLxtYHhbYDgfNLxjYHhHYLgANLxrYHhXYLgQNLxnYHhPYLgINLxvYHhfYLgYNHxgYPhAYLgENHxoYPhQYLgUNHxkYPhIYLgMNHxsYPhYYLgcNHxiYPhEYLgCNHxqYPhUYLgSNHxmYPhMYLgKNHxuYPhcYLgaNHxhYPhCYLgGNHxpYPhSYLgWNHxlYPhKYLgONHxtYPhaYLgeNHxjYPhGYLgBNHxrYPhWYLgRNHxnYPhOYLgJNHxvYPheYLgZNPxgYPhBYLgFNPxoYPhRYLgVNPxkYPhJYLgNNPxsYPhZYLgdNPxiYPhFYLgDNPxqYPhVYLgTNPxmYPhNYLgLNPxuYPhdYLgbNPxhYPhDYLgHNPxpYPhTYLgXNPxlYPhLYLgPNPxtYPhbYLgfNPxjYPhHYHgANPxrYPhXYHgQNPxnYPhPYHgINPyvzf++4f810oaHQcMABoYBBIZHQMOABoYBBYZHQcNABoaBBIbHQMPABoaBBYbHQcMgBoZBBIYnQMOgBoZBBYYnQcNgBobBBIanQMPgBobBBYanQcMQBoYhBIZnQMOQBoYhBYZnQcNQBoahBIbnQMPQBoahBYbnQcMwBoZhBIYXQMOwBoZhBYYXQcNwBobhBIaXQMPwBobhBYaXQcMIBoYRBIZXQMOIBoYRBYZXQcNIBoaRBIbXQMPIBoaRBYbXQcMoBoZRBIY3QMOoBoZRBYY3QcNoBobRBIa3QMPoBobRBYa3QcMYBoYxBIZ3QMOYBoYxBYZ3QcNYBoaxBIb3QMPYBoaxBYb3QcM4BoZxBIYPQMO4BoZxBYYPQcN4BobxBIaPQMP4BobxBYaPQcMEBoYJBIZPQMOEBoYJBYZPQcNEBoaJBIbPQMPEBoaJBYbPQcMkBoZJBIYvQMOkBoZJBYYvQcNkBobJBIavQMPkBobJBYavQcMUBoYpBIZvQMOUBoYpBYZvQcNUBoapBIbvQMPUBoapBYbvQcM0BoZpBIYfQMO0BoZpBYYfQcN0BobpBIafQMP0BobpBYafQcMMBoYZBIZfQMOMBoYZBYZfQcNMBoaZBIbfQMPMBoaZBYbfQcMsBoZZBIY/QMOsBoZZBYY/QcNsBobZBIa/QMPsBobZBYa/QcMcBob5qvCG/4JxhjkNDIvkERgm4wxzGRjmEOzyH3CXc/+PGxb7fwz/7/n/P/f/69x5uLkzKOb+L/x///2/d0zB5wYIzxnmNdi/vIL9Cwga5nP4lgoMA4GG+Q0M8wsMA4OGBQwMCwgMg4CGBQ0MCwoMg4KGhQwMCwkMg4GGhQ0MCwsMg4OGRRz+zwSGIUDDogaGRQWGIUHDYgaGxQSGoUDD4gaGxQWGoUHDEgaGJQSGYUDDkgaGJQWGYUHDUgaGpQSG4UDD0gaGpQWG4UHDMgaGZQSGEUDDsgaGZQWGEUHDcgaG5QSGkUDD8gaG5QWGkUHDCgaGFQSGUUDDigaGFQWGUUHDSgaGlQSG0UDDygaGlQWG0UHDKgaGVQSGMUDDqgaGVQWGMUHDagaG1QSGsUDD6gaG1QWGsUHDGgaGNQSGcUDDmgaGNQWGcUHDWgaGtQSG8UDD2gaGtQWG8UHDOgaGdQSGCUDDugaGdQWGCUHDegaG9QSGiUDD+gaG9QWGiUHDBgaGDQSGSUDDhgaGDQWGSUHDRgaGjQSGyUDDxgaGjQWGyUHDJgaGTQSGKUDDpgaGTQWGKUHDZgaGzQSGqUDD5gaGzQWGqUHDFgaGLQSGaUDDlgaGLQWGaUHDVgaGrQSG6UDD1gaGrQWG6UHDNgaGbQSGGUDDtgaGbQWGGUHDdgaG7QSGmUDD9gaG7QWGmUHDDgaGHQSGWUDDjgaGHQWGWUHDTgaGnQSG2UDDzgaGnQWG2UHDLgaGXQSGOUDDrgaGXQWGOUHDbgaG3QSGuUDD7gaG3QWGuUHDHgaGPQSGeUDDngaGPQWGeUHDXgaGvQSG+UDD3gaGvQWG+UHDPgaGfQSGBUDDvgaGfQWGBUHDfgaG/QSGhUDD/gaG/QWGhUHDAQaGAwSGRUDDgQaGAwWGRUHDQQaGgwSGxUDDwQaGgwWGxUHDIQaGQwSGJUDDoQaGQwWGJUHDYQaGwwSGpUDD4QaGwwWGpUHDEQaGIwSGZUDDkQaGIwWGZUHDUQaGowSG5UDD0QaGowWG5UHDMQaGYwSGFUDDsQaGYwWGFUHDcQaG4wSGlUDD8QaG4wWGlUHDCQaGEwSGVUDDiQaGEwWGVUHDSQaGkwSG1UDDyQaGkwWG1UHDKQaGUwSGNUDDqQaGUwWGNUHDaQaG0wSGtUDD6QaG0wWGtUHDGQaGMwSGdUDDmQaGMwWGdUHDWQaGswSG9UDD2QaGswWG9UHDOQaGcwSGDUDDuQaGcwWGDUHDeQaG8wSGjUDD+QaG8wWGjUHDBQaGCwSGTUDDhQaGCwWGTUHDRQaGiwSGzUDDxQaGiwWGzUHDJQaGSwSGLUDDpQaGSwWGLUHDZQaGywSGrUDD5QaGywWGrUHDFQaGKwSGbUDDlQaGKwWGbUHDVQaGqwSG7UDD1QaGqwWG7UHDNQaGawSGHUDDtQaGawWGHUHDdQaG6wSGnUDD9QaG6wWGnUHDDQaGGwSGXUDD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TjAwnCAwrAIaTjQwnCgwrAoaTjIwnCQwrAYaTjYwnCwwrA4aTjEwnCIwrAEaTjUwnCowrAkaTjMwnCYwrAUaTjcwnC4wrA0azjAwnCEwrAMazjQwnCkwrAsazjIwnCUwrAcazjYwnC0wrA8azjEwnCMwbAAazjUwnCswbAgazjMwnCcwbAQazjcwnC8wbAwaLjAwXCAwbAIaLjQwXCgwbAoaLjIwXCQwbAYaLjYwXCwwbA4aLjEwXCIwbAEaLjUwXCowbAkaLjMwXCYwbAUaLjcwXC4wbA0arjAwXCEwbAMarjQwXCkwbAsarjIwXCUwbAcarjYwXC0wbA8arjEwXCMw7AAarjUwXCsw7AgarjMwXCcw7AQarjcwXC8w7AwabjAw3CAw7AIabjQw3Cgw7AoabjIw3CQw7AYabjYw3Cww7A4abjEw3CIw7AEabjUw3Cow7AkabjMw3CYw7AUabjcw3C4w7A0a7jAw3CEw7AMa7jQw3Ckw7Asa7jIw3CUw7Aca7jYw3C0w7A8a7jEw3CMwHAAa7jUw3CswHAga7jMw3CcwHAQa7jcw3C8wHAwaHjAwPCAwHAIaHjQwPCgwHAoaHjIwPCQwHAYaHjYwPCwwHA4aHjEwPCIwHAEaHjUwPCowHAkaHjMwPCYwHAUaHjcwPC4wHA0anjAwPCEwHAManjQwPCkwHAsanjIwPCUwHAcanjYwPC0wHA8anjEwPCMwnAAanjUwPCswnAganjMwPCcwnAQanjcwPC8wnAwaXjAwvCAwnAIaXjQwvCgwnAoaXjIwvCQwnAYaXjYwvCwwnA4aXjEwvCIwnAEaXjUwvCownAkaXjMwvCYwnAUaXjcwvC4wnA0a3jAwvCEwnAMa3jQwvCkwnAsa3jIwvCUwnAca3jYwvC0wnA8a3jEwvCMwXAAa3jUwvCswXAga3jMwvCcwXAQa3jcwvC8wXAwaPjAwfCAwXAIaPjQwfCgwXAoaPjIwfCQwXAYaPjYwfCwwXA4aPjEwfCIwXAEaPjUwfCowXAkaPjMwfCYwXAUaPjcwfC4wXA0avjAwfCEwXAMavjQwfCkwXAsavjIwfCUwXAcavjYwfC0wXA8avjEwfCMw3AAavjUwfCsw3AgavjMwfCcw3AQavjcwfC8w3AwafjAw/CAw3AIafjQw/Cgw3AoafjIw/CQw3AYafjYw/Cww3A4afjEw/CIw3AEafjUw/Cow3AkafjMw/CYw3AUafjcw/C4w3A0a/jAw/CEw3AMa/jQw/Ckw3Asa/jIw/CUw3Aca/jYw/C0w3A8a/jEw/CMwPAAa/jUw/CswPAga/tPhv2/4v0ba8BBoGMDAMIDA8DBoGNDAMKDA8AhoGMjAMJDA8ChoGNjAMLDA8BhoGMTAMIjA8DhoGNTAMKjA8ARoGMzAMJjA8CRoGNzAMLjA8BRoGMLAMITA8DRoGNLAMKTA8AxoGMrAMJTA8CxoGNrAMLTA8BxoGMbAMIzA8DxoGNbAMKzA8AJoGM7AMJzA8CJoGN7AMLzA8BJoGMHAMILA8DJoGNHAMKLA8ApoGMnAMJLA8CpoGNnAMLLA8BpoGMXAMIrA8DpoGNXAMKrA8AZoGM3AMJrA8CZoGN3AMLrA8BZoGMPAMIbA8DZoGNPAMKbA8A5oGMvAMJbA8C5oGNvAMLbA8B5oGMfAMI7A8D5oGNfAMK7A8AFoGM/AMJ7A8CFoGN/AML7A8BFomMDAMIHA8DFomNDAMKHA8AlomMjAMJHA8ClomNjAMLHA8BlomMTAMInA8DlomNTAMKnA8AVomMzAMJnA8CVomNzAMLnA8BVomMLAMIXA8DVomNLAMKXA8A1omMrAMJXA8C1omNrAMLXA8B1omMbAMI3A8D1omNbAMK3A8ANomM7AMJ3A8CNomN7AML3A8BNomMHAMIPA8DNomNHAMKPA8AtomMnAMJPA8CtomNnAMLPA8BtomMXAMIvA8DtomNXAMKvA8AdomM3AMJvA8CdomN3AMLvA8BdomMPAMIfA8DdomNPAMKfA8A9o+K+B4b8Cw7+gYS4Dw1wCw3+icIa5DQxzCwwDgIZ5DAzzCAwDgoZ5DQzzCgwDgYb5DAzzCQwDg4b5DQzzCwyDgIYFDAwLCAyDgoYFDQwLCgyDgYaFDAwLCQyDg4aFDQwLCwxDgIZFDAyLCAxDgoZFDQyLCgxDgYbFDAyLCQxDg4bFDQyLCwzDgIYlDAxLCAzDgoYlDQxLCgzDgYalDAxLCQzDg4alDQxLCwwjgIZlDAzLCAwjgoZlDQzLCgwjgYblDAzLCQwjg4blDQzLCwyjgIYVDAwrCAyjgoYVDQwrCgyjgYaVDAwrCQyjg4aVDQwrCwxjgIZVDAyrCAxjgoZVDQyrCgxjgYbVDAyrCQxjg4bVDQyrCwzjgIY1DAxrCAzjgoY1DQxrCgzjgYa1DAxrCQzjg4a1DQxrCwwTgIZ1DAzrCAwTgoZ1DQzrCgwTgYb1DAzrCQwTg4b1DQzrCwyTgIYNDAwbCAyTgoYNDQwbCgyTgYaNDAwbCQyTg4aNDQwbCwxTgIZNDAybCAxTgoZNDQybCgxTgYbNDAybCQxTg4bNDQybCwzTgIYtDAxbCAzTgoYtDQxbCgzTgYatDAxbCQzTg4atDQxbCwwzgIZtDAzbCAwzgoZtDQzbCgwzgYbtDAzbCQwzg4btDQzbCwyzgIYdDAw7CAyzgoYdDQw7CgyzgYadDAw7CQyzg4adDQw7CwxzgIZdDAy7CAxzgoZdDQy7Cgz/BQ27GRh2ExjmAg27Gxh2FxjmBg17GBj2EBjmAQ17Ghj2FBjmBQ17GRj2EhjmAw17Gxj2FhjmBw37GBj2ERgWAA37Ghj2FRgWBA37GRj2ExgWAg37Gxj2FxgWBg0HGBgOEBgWAQ0HGhgOFBgWBQ0HGRgOEhgWAw0HGxgOFhgWBw2HGBgOERiWAA2HGhgOFRiWBA2HGRgOExiWAg2HGxgOFxiWBg1HGBiOEBiWAQ1HGhiOFBiWBQ1HGRiOEhiWAw1HGxiOFhiWBw3HGBiOERhWAA3HGhiOFRhWBA3HGRiOExhWAg3HGxiOFxhWBg0nGBhOEBhWAQ0nGhhOFBhWBQ0nGRhOEhhWAw0nGxhOFhhWBw2nGBhOERjWAA2nGhhOFRjWBA2nGRhOExjWAg2nGxhOFxjWBg1nGBjOEBjWAQ1nGhjOFBjWBQ1nGRjOEhjWAw1nGxjOFhjWBw3nGBjOERg2AA3nGhjOFRg2BA3nGRjOExg2Ag3nGxjOFxg2Bg0XGBguEBg2AQ0XGhguFBg2BQ0XGRguEhg2Aw0XGxguFhg2Bw2XGBguERi2AA2XGhguFRi2BA2XGRguExi2Ag2XGxguFxi2Bg1XGBiuEBi2AQ1XGhiuFBi2BQ1XGRiuEhi2Aw1XGxiuFhi2Bw3XGBiuERh2AA3XGhiuFRh2BA3XGRiuExh2Ag3XGxiuFxh2Bg03GBhuEBh2AQ03GhhuFBh2BQ03GRhuEhh2Aw03GxhuFhh2Bw23GBhuERj2AA23GhhuFRj2BA23GRhuExj2Ag23GxhuFxj2Bg13GBjuEBj2AQ13GhjuFBj2BQ13GRjuEhj2Aw13GxjuFhj2Bw33GBjuERgOAA33GhjuFRgOBA33GRjuExgOAg33GxjuFxgOBg0PGBgeEBgOAQ0PGhgeFBgOBQ0PGRgeEhgOAw0PGxgeFhgOBw2PGBgeERiOAA2PGhgeFRiOBA2PGRgeExiOAg2PGxgeFxiOBg1PGBieEBiOAQ1PGhieFBiOBQ1PGRieEhiOAw1PGxieFhiOBw3PGBieERhOAA3PGhieFRhOBA3PGRieExhOAg3PGxieFxhOBg0vGBheEBhOAQ0vGhheFBhOBQ0vGRheEhhOAw0vGxheFhhOBw2vGBheERjOAA2vGhheFRjOBA2vGRheExjOAg2vGxheFxjOBg1vGBjeEBjOAQ1vGhjeFBjOBQ1vGRjeEhjOAw1vGxjeFhjOBw3vGBjeERguAA3vGhjeFRguBA3vGRjeExguAg3vGxjeFxguBg0fGBg+EBguAQ0fGhg+FBguBQ0fGRg+EhguAw0fGxg+FhguBw2fGBg+ERiuAA2fGhg+FRiuBA2fGRg+ExiuAg2fGxg+FxiuBg1fGBi+EBiuAQ1fGhi+FBiuBQ1fGRi+EhiuAw1fGxi+FhiuBw3fGBi+ERhuAA3fGhi+FRhuBA3fGRi+ExhuAg3fGxi+FxhuBg0/GBh+EBhuAQ0/Ghh+FBhuBQ0/GRh+EhhuAw0/Gxh+FhhuBw2/GBh+ERjuAA2/Ghh+FRjuBA2/GRh+ExjuAg2/Gxh+FxjuBg1/GBj+EBjuAQ1/Ghj+FBjuBQ1/GRj+EhjuAw1/Gxj+FhjuBw3/GBj+ERgeAA3/Ghj+FRgeBA3/6fjfN/xfI214CDQMYGAYQGB4GDQMaGAYUGB4BDQMZGAYSGB4FDQMbGAYWGB4DDQMYmAYRGB4HDQMamAYVGB4AjQMZmAYTGB4EjQMbmAYXGB4CjQMYWAYQmB4GjQMaWAYUmB4BjQMZWAYSmB4FjQMbWAYWmB4DjQMY2AYRmB4HjQMa2AYVmB4ATQMZ2AYTmB4ETQMb2AYXmB4CTSMYGAYQWB4GTSMaGAYUWB4BTSMZGAYSWB4FTSMbGAYWWB4DTSMYmAYRWB4HTSMamAYVWB4AzSMZmAYTWB4EzSMbmAYXWB4CzSMYWAYQ2B4GzSMaWAYU2B4BzSMZWAYS2B4FzSMbWAYW2B4DzSMY2AYR2B4HzSMa2AYV2D4ADSMZ2AYT2D4EDSMb2AYX2D4CDRMYGCYQGD4GDRMaGCYUGD4BDRMZGCYSGD4FDRMbGCYWGD4DDRMYmCYRGD4HDRMamCYVGD4AjRMZmCYTGD4EjRMbmCYXGD4CjRMYWCYQmD4GjRMaWCYUmD4BjRMZWCYSmD4FjRMbWCYWmD4DjRMY2CYRmD4HjRMa2CYVmD4ATRMZ2CYTmD4ETRMb2CYXmD4CTTMYGCYQWD4GTTMaGCYUWD4BTTMZGCYSWD4FTTMbGCYWWD4DTTMYmCYRWD4HTTMamCYVWD4AzTMZmCYTWD4EzTMbmCYXWD4CzTMYWCYQ2D4GzTMaWCYU2D4BzT818DwX4HhX9Awl4FhLoHhP1E5w9wGhrkFhgFAwzwGhnkEhgFBw7wGhnkFhoFAw3wGhvkEhoFBw/wGhvkFhkFAwwIGhgUEhkFBw4IGhgUFhsFAw0IGhoUEhsFBw8IGhoUFhiFAwyIGhkUEhiFBw6IGhkUFhqFAw2IGhsUEhqFBw+IGhsUFhmFAwxIGhiUEhmFBw5IGhiUFhuFAw1IGhqUEhuFBw9IGhqUFhhFAwzIGhmUEhhFBw7IGhmUFhpFAw3IGhuUEhpFBw/IGhuUFhlFAwwoGhhUEhlFBw4oGhhUFhtFAw0oGhpUEhtFBw8oGhpUFhjFAwyoGhlUEhjFBw6oGhlUFhrFAw2oGhtUEhrFBw+oGhtUFhnFAwxoGhjUEhnFBw5oGhjUFhvFAw1oGhrUEhvFBw9oGhrUFhglAwzoGhnUEhglBw7oGhnUFholAw3oGhvUEholBw/oGhvUFhklAwwYGhg0EhklBw4YGhg0FhslAw0YGho0EhslBw8YGho0FhilAwyYGhk0EhilBw6YGhk0FhqlAw2YGhs0EhqlBw+YGhs0FhmlAwxYGhi0EhmlBw5YGhi0FhulAw1YGhq0EhulBw9YGhq0FhhlAwzYGhm0EhhlBw7YGhm0FhplAw3YGhu0EhplBw/YGhu0FhllAww4Ghh0EhllBw44Ghh0FhtlAw04Ghp0EhtlBw84Ghp0FhjlAwy4Ghl0EhjlBw64Ghl0Fhv+Cht0MDLsJDHOBht0NDLsLDHODhj0MDHsIDPOAhj0NDHsKDPOChr0MDHsJDPOBhr0NDHsLDPODhn0MDPsIDAuAhn0NDPsKDAuChv0MDPsJDAuBhv0NDPsLDAuDhgMMDAcIDIuAhgMNDAcKDIuChoMMDAcJDIuBhoMNDAcLDIuDhkMMDIcIDEuAhkMNDIcKDEuChsMMDIcJDEuBhsMNDIcLDEuDhiMMDEcIDMuAhiMNDEcKDMuChqMMDEcJDMuBhqMNDEcLDMuDhmMMDMcIDCuAhmMNDMcKDCuChuMMDMcJDCuBhuMNDMcLDCuDhhMMDCcIDKuAhhMNDCcKDKuChpMMDCcJDKuBhpMNDCcLDKuDhlMMDKcIDGuAhlMNDKcKDGuChtMMDKcJDGuBhtMNDKcLDGuDhjMMDGcIDOuAhjMNDGcKDOuChrMMDGcJDOuBhrMNDGcLDOuDhnMMDOcIDBuAhnMNDOcKDBuChvMMDOcJDBuBhvMNDOcLDBuDhgsMDBcIDJuAhgsNDBcKDJuChosMDBcJDJuBhosNDBcLDJuDhksMDJcIDFuAhksNDJcKDFuChssMDJcJDFuBhssNDJcLDFuDhisMDFcIDNuAhisNDFcKDNuChqsMDFcJDNuBhqsNDFcLDNuDhmsMDNcIDDuAhmsNDNcKDDuChusMDNcJDDuBhusNDNcLDDuDhhsMDDcIDLuAhhsNDDcKDLuChpsMDDcJDLuBhpsNDDcLDLuDhlsMDLcIDHuAhlsNDLcKDHuChtsMDLcJDHuBhtsNDLcLDHuDhjsMDHcIDPuAhjsNDHcKDPuChrsMDHcJDPuBhrsNDHcLDPuDhnsMDPcIDAeAhnsNDPcKDAeChvsMDPcJDAeBhvsNDPcLDAeDhgcMDA8IDIeAhgcNDA8KDIeChocMDA8JDIeBhocNDA8LDIeDhkcMDI8IDEeAhkcNDI8KDEeChscMDI8JDEeBhscNDI8LDEeDhicMDE8IDMeAhicNDE8KDMeChqcMDE8JDMeBhqcNDE8LDMeDhmcMDM8IDCeAhmcNDM8KDCeChucMDM8JDCeBhucNDM8LDCeDhhcMDC8IDKeAhhcNDC8KDKeChpcMDC8JDKeBhpcNDC8LDKeDhlcMDK8IDGeAhlcNDK8KDGeChtcMDK8JDGeBhtcNDK8LDGeDhjcMDG8IDOeAhjcNDG8KDOeChrcMDG8JDOeBhrcNDG8LDOeDhncMDO8IDBeAhncNDO8KDBeChvcMDO8JDBeBhvcNDO8LDBeDhg8MDB8IDJeAhg8NDB8KDJeCho8MDB8JDJeBho8NDB8LDJeDhk8MDJ8IDFeAhk8NDJ8KDFeChs8MDJ8JDFeB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hsMEhoVAw+EGhsMFhoVBwxEGhiMEhkVAw5EGhiMFhkVBw1EGhqMEhsVAw9EGhqMFhsVBwzEGhmMEhiVAw7EGhmMFhiVBw3EGhuMEhqVAw/EGhuMFhqVBwwkGhhMEhmVAw4kGhhMFhmVBw0kGhpMEhuVAw8kGhpMFhuVBwykGhlMEhhVAw6kGhlMFhhVBw2kGhtMEhpVAw+kGhtMFhpVBwxkGhjMEhlVAw5kGhjMFhlVBw1kGhrMEhtVAw9kGhrMFhtVBwzkGhnMEhjVAw7kGhnMFhjVBw3kGhvMEhrVAw/kGhvMFhrVBwwUGhgsEhnVAw4UGhgsFhnVBw0UGhosEhvVAw8UGhosFhvVBwyUGhksEhg1Aw6UGhksFhg1Bw2UGhssEho1Aw+UGhssFho1BwxUGhisEhk1Aw5UGhisFhk1Bw1UGhqsEhs1Aw9UGhqsFhs1BwzUGhmsEhi1Aw7UGhmsFhi1Bw3UGhusEhq1Aw/UGhusFhq1Bww0GhhsEhm1Aw40GhhsFhm1Bw00GhpsEhu1Aw80GhpsFhu1Bwy0GhlsEhh1Aw60GhlsFhh1Bw20GhtsEhp1Aw+0GhtsFhp1Bwx0GhjsEhl1Aw50GhjsFhl1Bw10GhrsEht1Aw90GhrsFht1Bwz0GhnsEhj1Aw70GhnsFhj1Bw30GhvsEhr1Aw/0GhvsFhr1BwwMGhgcEhn1Aw4MGhgcFhn1Bw0MGhocEhv1Aw8MGhocFhv1BwyMGhkcEhgNAw6MGhkcFhgNBw2MGhscEhoNAw+MGhscFhoNBwxMGhicEhkNAw5MGhicFhkNBw1MGhqcEhsNAw9MGhqcFhsNBwzMGhmcEhiNAw7MGhmcFhiNBw3MGhucEhqNAw/MGhucFhqNBwwsGhhcEhmNAw4sGhhcFhmNBw0sGhpcEhuNAw8sGhpcFhuNBwysGhlcEhhNAw6sGhlcFhhNBw2sGhtcEhpNAw+sGhtcFhpNBwxsGhjcEhlNAw5sGhjcFhlNBw1sGhrcEhtNAw9sGhrcFhtNBwzsGhncEhjNAw7sGhncFhjNBw3sGhvcEhrNAw/sGhvcFhrNBwwcGhg8EhnNAw4cGhg8FhnNBw0cGho8EhvNAw8cGho8FhvNBwycGhk8EhgtAw6cGhk8FhgtBw2cGhs8EhotAw+cGhs8FhotBwxcGhi8EhktAw5cGhi8FhktBw1cG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MTBsIzBMCRq2NTBsKzBMBRq2MzBsJzBMDRq2NzBsLzBMAxp2MDDsIDBMCxp2NDDsKDBMBxp2MjDsJDBMDxp2NjDsLDDMABp2MTDsIjDMCBp2NTDsKjDMBBp2MzDsJjDMDBp2NzDsLjDMAhr2MDDsITDMChr2NDDsKTDMBhr2MjDsJTDMDhr2NjDsLTDMARr2MTDsIzDMCRr2NTDsKzD8FzTsZ2DYT2CYCzTsb2DYX2CYGzQcYGA4QGCYBzQcaGA4UGCYFzQcZGA4SGCYDzQcbGA4WGCYHzQcYmA4RGBYADQcamA4VGBYEDQcZmA4TGBYCDQcbmA4XGBYGDQcYWA4QmBYBDQcaWA4UmBYFDQcZWA4SmBYDDQcbWA4WmBYHDQcY2A4RmBYAjQca2A4VmBYEjQcZ2A4TmBYCjQcb2A4XmBYGjScYGA4QWBYBjScaGA4UWBYFjScZGA4SWBYDjScbGA4WWBYHjScYmA4RWBYATScamA4VWBYETScZmA4TWBYCTScbmA4XWBYGTScYWA4Q2BYBTScaWA4U2BYFTScZWA4S2BYDTScbWA4W2BYHTScY2A4R2BYAzSca2A4V2BYEzScZ2A4T2BYCzScb2A4X2BYGzRcYGC4QGBYBzRcaGC4UGBYFzRcZGC4SGBYDzRcbGC4WGBYHzRcYmC4RGDYADRcamC4VGDYEDRcZmC4TGDYCDRcbmC4XGDYGDRcYWC4QmDYBDRcaWC4UmDYFDRcZWC4SmDYDDRcbWC4WmDYHDRcY2C4RmDYAjRca2C4VmDYEjRcZ2C4TmDYCjRcb2C4XmDYGjTcYGC4QWDYBjTcaGC4UWDYFjTcZGC4SWDYDjTcbGC4WWDYHjTcYmC4RWDYATTcamC4VWDYETTcZmC4TWDYCTTcbmC4XWDYGTTcYWC4Q2DYBTTcaWC4U2DYFTTcZWC4S2DYDTTcbWC4W2DYHTTcY2C4R2DYAzTca2C4V2DYEzTcZ2C4T2DYCzTcb2C4X2DYGzQ8YGB4QGDYBzQ8aGB4UGDYFzQ8ZGB4SGDYDzQ8bGB4WGDYHzQ8YmB4RGA4ADQ8amB4VGA4EDQ8ZmB4TGA4CDQ8bmB4XGA4GDQ8YWB4QmA4BDQ8aWB4UmA4FDQ8ZWB4SmA4DDQ8bWB4WmA4HDQ8Y2B4RmA4AjQ8a2B4VmA4EjQ8Z2B4TmA4CjQ8b2B4XmA4GjS8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UmBYHDQcZWA4SmBYAjQcbWA4WmBYEjQcY2A4RmBYCjQca2A4VmBYGjQcZ2A4TmBYBjQcb2A4XmBYFjScYGA4QWBYDjScaGA4UWBYHjScZGA4SWBYATScbGA4WWBYETScYmA4RWBYCTScamA4VWBYGTScZmA4TWBYBTScbmA4XWBYFTScYWA4Q2BYDTScaWA4U2BYHTScZWA4S2BYAzScbWA4W2BYEzScY2A4R2BYCzSca2A4V2BYGzScZ2A4T2BYBzScb2A4X2BYFzRcYGC4QGBYDzRcaGC4UGBYHzRcZGC4SGDYADRcbGC4WGDYEDRcYmC4RGDYCDRcamC4VGDYGDRcZmC4TGDYBDRcbmC4XGDYFDRcYWC4QmDYDDRcaWC4UmDYHDRcZWC4SmDYAjRcbWC4WmDYEjRcY2C4RmDYCjRca2C4VmDYGjRcZ2C4TmDYBjRcb2C4XmDYFjTcYGC4QWDYDjTcaGC4UWDYHjTcZGC4SWDYATTcbGC4WWDYETTcYmC4RWDYCTTcamC4VWDYGTTcZmC4TWDYBTTcbmC4XWDYFTTcYWC4Q2DYDTTcaWC4U2DYHTTcZWC4S2DYAzTcbWC4W2DYEzTcY2C4R2DYCzTca2C4V2DYGzTcZ2C4T2DYBzTcb2C4X2DYFzQ8YGB4QGDYDzQ8aGB4UGDYHzQ8ZGB4SGA4ADQ8bGB4WGA4EDQ8YmB4RGA4CDQ8amB4VGA4GDQ8ZmB4TGA4BDQ8bmB4XGA4FDQ8YWB4QmA4DDQ8aWB4UmA4HDQ8ZWB4SmA4AjQ8bWB4WmA4EjQ8Y2B4RmA4CjQ8a2B4VmA4GjQ8Z2B4TmA4BjQ8b2B4XmA4FjS8YGB4QWA4DjS8aGB4UWA4HjS8ZGB4SWA4ATS8bGB4WWA4ETS8YmB4RWA4CTS8amB4VWA4GTS8ZmB4TWA4BTS8bmB4XWA4FTS8YWB4Q2A4DTS8aWB4U2A4HTS8ZWB4S2A4AzS8bWB4W2A4EzS8Y2B4R2A4CzS8a2B4V2A4GzS8Z2B4T2A4BzS8b2B4X2A4FzR8YGD4QGA4DzR8aGD4UGA4HzR8ZGD4SGC4ADR8bGD4WGC4EDR8YmD4RGC4CDR8amD4VGC4GDR8ZmD4TGC4BDR8bmD4XGC4FDR8YWD4QmC4DDR8aWD4UmC4HDR8ZWD4SmC4AjR8bWD4WmC4EjR8Y2D4RmC4CjR8a2D4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hgUEhv9Aw4IGhgUFhv9l4QwLGRgWEhgGAA0LGxgWFhgGBA2LGBgWERgGAg2LGhgWFRgGBg2LGRgWExgGAQ2LGxgWFxgGBQ1LGBiWEBgGAw1LGhiWFBgGBw1LGRiWEhiGAA1LGxiWFhiGBA3LGBiWERiGAg3LGhiWFRiGBg3LGRiWExiGAQ3LGxiWFxiGBQ0rGBhWEBiGAw0rGhhWFBiGBw0rGRhWEhhGAA0rGxhWFhhGBA2rGBhWERhGAg2rGhhWFRhGBg2rGRhWExhGAQ2rGxhWFxhGBQ1rGBjWEBhGAw1rGhjWFBhGBw1rGRjWEhjGAA1rGxjWFhjGBA3rGBjWERjGAg3rGhjWFRjGBg3rGRjWExjGAQ3rGxjWFxjGBQ0bGBg2EBjGAw0bGhg2FBjGBw0bGRg2EhgmAA0bGxg2FhgmBA2bGBg2ERgmAg2bGhg2FRgmBg2bGRg2ExgmAQ2bGxg2FxgmBQ1bGBi2EBgmAw1bGhi2FBgmBw1bGRi2EhimAA1bGxi2FhimBA3bGBi2ERimAg3bGhi2FRimBg3bGRi2EximAQ3bGxi2FximBQ07GBh2EBimAw07Ghh2FBimBw07GRh2EhhmAA07Gxh2FhhmBA27GBh2ERhmAg27Ghh2FRhmBg27GRh2ExhmAQ27Gxh2FxhmBQ17GBj2EBhmAw17Ghj2FBhmBw17GRj2EhjmAA17Gxj2FhjmBA37GBj2ERjmAg37Ghj2FRjmBg37GRj2ExjmAQ37Gxj2FxjmBQ0HGBgOEBjmAw0HGhgOFBjmBw0HGRgOEhgWAA0HGxgOFhgWBA2HGBgOERgWAg2HGhgOFRgWBg2HGRgOExgWAQ2HGxgOFxgWBQ1HGBiOEBgWAw1HGhiOFBgWBw1HGRiOEhiWAA1HGxiOFhiWBA3HGBiOERiWAg3HGhiOFRiWBg3HGRiOExiWAQ3HGxiOFxiWBQ0nGBhOEBiWAw0nGhhOFBiWBw0nGRhOEhhWAA0nGxhOFhhWBA2nGBhOERhWAg2nGhhOFRhWBg2nGRhOExhWAQ2nGxhOFxhWBQ1nGBjOEBhWAw1nGhjOFBhWBw1nGRjOEhjWAA1nGxjOFhjWBA3nGBjOERjWAg3nGhjOFRjWBg3nGRjOExjWAQ3nGxjOFxjWBQ0XGBguEBjWAw0XGhguFBjWBw0XGRguEhg2AA0XGxguFhg2BA2X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hilBwzYGhm0EhqlAw7YGhm0FhqlBw3YGhu0EhmlAw/YGhu0FhmlBww4Ghh0EhulAw44Ghh0FhulBw04Ghp0EhhlAw84Ghp0FhhlBwy4Ghl0EhplAw64Ghl0FhplBw24Ght0EhllAw+4Ght0FhllBwx4Ghj0EhtlAw54Ghj0FhtlBw14Ghr0EhjlAw94Ghr0FhjlBwz4Ghn0EhrlAw74Ghn0FhrlBw34Ghv0EhnlAw/4Ghv0FhnlBwwEGhgMEhvlAw4EGhgMFhvlBw0EGhoMEhgVAw8EGhoMFhgVBwyEGhkMEhoVAw6EGhkMFhoVBw2EGhsMEhkVAw+EGhsMFhkVBwxEGhiMEhsVAw5EGhiMFhsVBw1EGhqMEhiVAw9EGhqMFhiVBwzEGhmMEhqVAw7EGhmMFhqVBw3EGhuMEhmVAw/EGhuMFhmVBwwkGhhMEhuVAw4kGhhMFhuVBw0kGhpMEhhVAw8kGhpMFhhVBwykGhlMEhpVAw6kGhlMFhpVBw2kGhtMEhlVAw+kGhtMFhlVBwxkGhjMEhtVAw5kGhjMFhtVBw1kGhrMEhjVAw9kGhrMFhjVBwzkGhnMEhrVAw7kGhnMFhrVBw3kGhvMEhnVAw/kGhvMFhnVBwwUGhgsEhvVAw4UGhgsFhvVBw0UGhosEhg1Aw8UGhosFhg1BwyUGhksEho1Aw6UGhksFho1Bw2UGhssEhk1Aw+UGhssFhk1BwxUGhisEhs1Aw5UGhisFhs1Bw1UGhqsEhi1Aw9UGhqsFhi1BwzUGhmsEhq1Aw7UGhmsFhq1Bw3UGhusEhm1Aw/UGhusFhm1Bww0GhhsEhu1Aw40GhhsFhu1Bw00GhpsEhh1Aw80GhpsFhh1Bwy0GhlsEhp1Aw60GhlsFhp1Bw20GhtsEhl1Aw+0GhtsFhl1Bwx0GhjsEht1Aw50GhjsFht1Bw10GhrsEhj1Aw90GhrsFhj1Bwz0GhnsEhr1Aw70GhnsFhr1Bw30GhvsEhn1Aw/0GhvsFhn1BwwMGhgcEhv1Aw4MGhgcFhv1Bw0MGhocEhgNAw8MGhocFhgNBwyMGhkcEhoNAw6MGhkcFhoNBw2MGhscEhkNAw+MGhscFhkNBwxMGhicEhsNAw5MGhicFhsNBw1MGhqcEhiNAw9MGhqcFhiNBwzMGhmcEhqNAw7MGhmcFhqNBw3MGhucEhmNAw/MGhucF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jjQwHCkwLAkajjIwHCUwLAUajjYwHC0wLA0ajjEwHCMwLAMajjUwHCswLAsajjMwHCcwLAcajjcwHC8wLA8aTjAwnCAwrAAaTjQwnCgwrAgaTjIwnCQwrAQaTjYwnCwwrAwaTjEwnCIwrAIaTjUwnCowrAoaTjMwnCYwrAYaTjcwnC4wrA4azjAwnCEwrAEazjQwnCkwrAkazjIwnCUwrAUazjYwnC0wrA0azjEwnCMwrAMazjUwnCswrAsazjMwnCcwrAcazjcwnC8wrA8aLjAwXCAwbAAaLjQwXCgwbAgaLjIwXCQwbAQaLjYwXCwwbAwaLjEwXCIwbAIaLjUwXCowbAoaLjMwXCYwbAYaLjcwXC4wbA4arjAwXCEwbAEarjQwXCkwbAkarjIwXCUwbAUarjYwXC0wbA0arjEwXCMwbAMarjUwXCswbAsarjMwXCcwbAcarjcwXC8wbA8abjAw3CAw7AAabjQw3Cgw7AgabjIw3CQw7AQabjYw3Cww7AwabjEw3CIw7AIabjUw3Cow7AoabjMw3CYw7AYabjcw3C4w7A4a7jAw3CEw7AEa7jQw3Ckw7Aka7jIw3CUw7AUa7jYw3C0w7A0a7jEw3CMw7AMa7jUw3Csw7Asa7jMw3Ccw7Aca7jcw3C8w7A8aHjAwPCAwHAAaHjQwPCgwHAgaHjIwPCQwHAQaHjYwPCwwHAwaHjEwPCIwHAIaHjUwPCowHAoaHjMwPCYwHAYaHjcwPC4wHA4anjAwPCEwHAEanjQwPCkwHAkanjIwPCUwHAUanjYwPC0wHA0anjEwPCMwHAManjUwPCswHAsanjMwPCcwHAcanjcwPC8wHA8aXjAwvCAwnAAaXjQwvCgwnAgaXjIwvCQwnAQaXjYwvCwwnAwaXjEwvCIwnAIaXjUwvCownAoaXjMwvCYwnAYaXjcwvC4wnA4a3jAwvCEwnAEa3jQwvCkwnAka3jIwvCUwnAUa3jYwvC0wnA0a3jEwvCMwnAMa3jUwvCswnAsa3jMwvCcwnAca3jcwvC8wnA8aPjAwfCAwXAAaPjQwfCgwXAgaPjIwfCQwXAQaPjYwfCwwXAwaPjEwfCIwXAIaPjUwfCowXAoaPjMwfCYwXAYaPjcwfC4wXA4avjAwfCEwXAEavjQwfCkwXAkavjIwfCUwXAUavjYwfC0wXA0avjEwfCMwXAMavjUwfCswXAsavjMwfCcwXAcavjcwfC8wXA8afjAw/CAw3AAafjQw/Cgw3AgafjIw/CQw3AQafjYw/Cww3AwafjEw/CIw3AIafjUw/Cow3AoafjMw/CYw3AYafjcw/C4w3A4a/jAw/CEw3AEa/jQw/Ckw3Aka/jIw/CUw3AUa/jYw/C0w3A0a/jEw/CMw3AMa/jUw/Csw3Asa/jMw/Ccw3Aca/jfsf9/w/xppw/2gYQADwwACwwOgYUADw4ACw4OgYSADw0ACw0OgYWADw8ACw8OgYRADwyACwyOgYVADw6ACw6OgYTADw2ACw2OgYXADw+ACw+OgYQgDwxACwxOgYUgDw5ACw5OgYSgDw1ACw1OgYWgDw9ACw9OgYRgDwzACwzOgYVgDw7ACw7OgYTgDw3ACw3OgYXgDw/ACw/OgYQQDwwgCwwugYUQDw4gCw4ugYSQDw0gCw0ugYWQDw8gCw8ugYRQDwygCwyugYVQDw6gCw6ugYTQDw2gCw2ugYXQDw+gCw+ugYQwDwxgCwxugYUwDw5gCw5ugYSwDw1gCw1ugYWwDw9gCw9ugYRwDwzgCwzugYVwDw7gCw7ugYTwDw3gCw3ugYXwDw/gCw/ugYQIDwwQCwwegYUIDw4QCw4egYSIDw0QCw0egYWIDw8QCw8egYRIDwyQCwyegYVIDw6QCw6egYTIDw2QCw2egYXIDw+QCw+egYQoDwxQCwxegYUoDw5QCw5egYSoDw1QCw1egYWoDw9QCw9egYRoDwzQCwzegYVoDw7QCw7egYToDw3QCw3egYXoDw/QCw/egYQYDwwwCww+gYUYDw4wCw4+gYSYDw0wCw0+gYWYDw8wCw8+gYRYDwywCwy+gYVYDw6wCw6+gYTYDw2wCw2+gYXYDw+wCw++gYQ4DwxwCwx+gYU4Dw5wCw5+gYS4Dw1wCw1+gYW4Dw9wCw9+gYR4DwzwCwz+gYV4Dw7wCw7+gYT4Dw3wCw3+gYX4Dw/wCw/9CcoYFDAwLCAwDgIYFDQwLCgwDgoaFDAwLCQwDgYaFDQwLCwwDg4ZFDAyLCAyDgIZFDQyLCgyDgobFDAyLCQyDgYbFDQyLCwyDg4YlDAxLCAxDgIYlDQxLCgxDgoalDAxLCQxDgYalDQxLCwxDg4ZlDAzLCAzDgIZlDQzLCgzDgoblDAzLCQzDgYblDQzLCwzDg4YVDAwrCAwjgIYVDQwrCgwjgoaVDAwrCQwjgYaVDQwrCwwjg4ZVDAyrCAyjgIZVDQyrCgyjgobVDAyrCQyjgYbVDQyrCwyjg4Y1DAxrCAxjgIY1DQxrCgxjgoa1DAxrCQxjgYa1DQxrCwxjg4Z1DAzrCAzjgIZ1DQzrCgzjgob1DAzrCQzjgYb1DQzrCwzjg4YNDAwbCAwTgIYNDQwbCgwTgoaNDAwbCQwTgYaNDQwbCwwTg4ZNDAybCAyTgIZNDQybCgyTgobNDAybCQyTgYbNDQybCwyTg4YtDAxbCAxTgIYtDQxbCgxTgoatDAxbCQxTgYatDQxbCwxTg4ZtDAzbCAzTgIZtDQzbCgzTgobtDAzbCQzTgYbtDQzbCwzTg4YdDAw7CAwzgIYdDQw7CgwzgoadDAw7CQwzgYadDQw7Cwwzg4ZdDAy7CAyzgIZdDQy7CgyzgobdDAy7CQyzgYbdDQy7Cwyzg4Y9DAx7CAxzgIY9DQx7Cgxzgoa9DAx7CQxzgYa9DQx7Cwxzg4Z9DAz7CAzzgIZ9DQz7Cgzzgob9DAz7CQzzgYb9DQz7Cwzzg4YDDAwHCAwLgIYDDQwHCgwLgoaDDAwHCQwLgYaDDQwHCwwLg4ZDDAyHCAyLgIZDDQyHCgyLgobDDAyHCQyLgYbDDQyHCwyLg4YjDAxHCAxLgIYjDQxHCgxLgoajDAxHCQxLgYajDQxHCwxLg4ZjDAzHCAzLgIZjDQzHCgzLgobjDAzHCQzLgYbjDQzHCwzLg4YTDAwnCAwrgIYTDQwnCgwrgoaTDAwnCQwrgYaTDQwnCwwrg4ZTDAynCAyrgIZTDQynCgyrgobTDAynCQyrgYbTDQynCwyrg4YzDAxnCAxrgIYzDQxnCgxrgoazDAxnCQxrgYazDQxnCwxrg4ZzDAznCAzrgIZzDQznCgzrgobzDAznCQzrgYbzDQznCwzrg4YLDAwXCAwbgIYLDQwXCgwbgoaLDAwXCQwbgYaLDQwXCwwbg4ZLDAyXCAybgIZLDQyXCgybgobLDAyXCQybgYbLDQyXCwybg4YrDAxXCAxbgIYrDQxXCgxbgoarDAxXCQxbgYarDQxXCwxbg4ZrDAzXCAzbgIZrDQzXCgzbgobrDAzXCQzbgYbrDQzXCwzbg4YbDAw3CAw7gIYbDQw3Cgw7goabDAw3CQw7gYabDQw3Cww7g4ZbDAy3CAy7gIZbDQy3Cgy7gobbDAy3CQy7gYbbDQy3Cwy7g4Y7DAx3CAx7gIY7DQx3Cgx7goa7DAx3CQx7gYa7DQx3Cwx7g4Z7DAz3CAz7gIZ7DQz3Cgz7gob7DAz3CQz7gYb7DQz3Cwz7g4YHDAwPCAwHgIYHDQwPCgwHgoaHDAwPCQwHgYaHDQwPCwwHg4ZHDAyPCAyHgIZHDQyPCgyHgobHDAyPCQyHgYbHDQyPCwyHg4YnDAxPCAxHgIYnDQxPCgxHgoanDAxPCQxHgYanDQxPCwxHg4ZnDAzPCAzHgIZnDQzPCgzHgobnDAzPCQzHgYbnDQzPCwzHg4YXDAwvCAwngIYXDQwvCgwngoaXDAwvCQwngYaXDQwvCwwng4ZXDAyvCAyngIZXDQyvCgyngobXDAyvCQyngYbXDQyvCwyng4Y3DAxvCAxngIY3DQxvCgxngoa3DAxvCQxngYa3DQxvCwxng4Z3DAzvCAzngIZ3DQzvCgzngob3DAzvCQzngYb3DQzvCwzng4YPDAwfCAwXgIYPDQwfCgwXgoaPDAwfCQwXgYaPDQwfCwwXg4ZPDAyfCAyXgIZPDQyfCgyXgobPDAyfCQyXgYbPDQyfCwyXg4YvDAxfCAxXgIYvDQxfCgxXgoavDAxfCQxXgYavDQxfCwxXg4ZvDAzfCAzXgIZvDQzfCgzXgobvDAzfCQzXgYbvDQzfCwzXg4YfDAw/CAw3gIYfDQw/Cgw3goafDAw/CQw3gYafDQw/Cww3g4ZfDAy/CAy3gIZfDQy/Cgy3gobfDAy/CQy3gYbfDQy/Cwy3g4Y/DAx/CAx3gIY/DQx/Cgx3goa/DAx/CQx3gYa/DQx/Cwx3g4Z/DAz/CAz3gIZ/DQz/Cgz3gob/DAz/CQz3gYb/Df/fN/y/RtpwP2gYwMAwgMDwAGgY0MAwoMDwIGgYyMAwkMDwEGgY2MAwsMDwMGgYxMAwiMDwCGgY1MAwqMDwKGgYzMAwmMDwGGgY3MAwuMDwOGgYwsAwhMDwBGgY0sAwpMDwJGgYysAwlMDwFGgY2sAwtMDwNGgYxsAwjMDwDGgY1sAwrMDwLGgYzsAwnMDwHGgY3sAwvMDwPGgYwcAwgsDwAmgY0cAwosDwImgYycAwksDwEmgY2cAwssDwMmgYxcAwisDwCmgY1cAwqsDwKmgYzcAwmsDwGmgY3cAwusDwOmgYw8AwhsDwBmgY08AwpsDwJmgYy8AwlsDwFmgY28AwtsDwNmgYx8AwjsDwDmgY18AwrsDwLmgYz8AwnsDwHmgY38AwvsDwPmiYwMAwgcDwAWiY0MAwocDwIWiYyMAwkcDwEWiY2MAwscDwMWiYxMAwicDwCWiY1MAwqcDwKWiYzMAwmcDwGWiY3MAwucDwOWiYwsAwhcDwBWiY0sAwpcDwJWiYysAwlcDwFWiY2sAwtcDwNWiYxsAwjcDwDWiY1sAwrcDwLWiYzsAwncDwHWiY3sAwvcDwPWiYwcAwg8DwA2iY0cAwo8DwI2iYycAwk8DwE2iY2cAws8DwM2iYxcAwi8DwC2iY1cAwq8DwK2iYzcAwm8DwG2iY3cAwu8DwO2iYw8Awh8DwB2iY08Awp8DwJ2iYy8Awl8DwF2iY28Awt8DwN2iYx8Awj8DwD2iY18Awr8DwL2iYz8Awn8DwH2iY38Awv8Dwv1CcYQEDwwICwwCgYUEDw4ICw4CgYSEDw0ICw0CgYWEDw8ICw8CgYREDwyICwyCgYVEDw6ICw6CgYTEDw2ICw2CgYXEDw+ICw+CgYQkDwxICwxCgYUkDw5ICw5CgYSkDw1ICw1CgYWkDw9ICw9CgYRkDwzICwzCgYVkDw7ICw7CgYTkDw3ICw3CgYXkDw/ICw/CgYQUDwwoCwwigYUUDw4oCw4igYSUDw0oCw0igYWUDw8oCw8igYRUDwyoCwyigYVUDw6oCw6igYTUDw2oCw2igYXUDw+oCw+igYQ0DwxoCwxigYU0Dw5oCw5igYS0Dw1oCw1igYW0Dw9oCw9igYR0DwzoCwzigYV0Dw7oCw7igYT0Dw3oCw3igYX0Dw/oCw/igYQMDwwYCwwSgYUMDw4YCw4SgYSMDw0YCw0SgYWMDw8YCw8SgYRMDwyYCwySgYVMDw6YCw6SgYTMDw2YCw2SgYXMDw+YCw+SgYQsDwxYCwxSgYUsDw5YCw5SgYSsDw1YCw1SgYWsDw9YCw9SgYRsDwzYCwzSgYVsDw7YCw7SgYTsDw3YCw3SgYXsDw/YCw/SgYQcDww4CwwygYUcDw44Cw4ygYScDw04Cw0ygYWcDw84Cw8ygYRcDwy4CwyygYVcDw64Cw6ygYTcDw24Cw2ygYXcDw+4Cw+ygYQ8Dwx4CwxygYU8Dw54Cw5ygYS8Dw14Cw1ygYW8Dw94Cw9ygYR8Dwz4CwzygYV8Dw74Cw7ygYT8Dw34Cw3ygYX8Dw/4Cw/yg4QADwwECwwKg4UADw4ECw4Kg4SADw0ECw0Kg4WADw8ECw8Kg4RADwyECwyKg4VADw6ECw6Kg4TADw2ECw2Kg4XADw+ECw+Kg4QgDwxECwxKg4UgDw5ECw5Kg4SgDw1ECw1Kg4WgDw9ECw9Kg4RgDwzECwzKg4VgDw7ECw7Kg4TgDw3ECw3Kg4XgDw/ECw/Kg4QQDwwkCwwqg4UQDw4kCw4qg4SQDw0kCw0qg4WQDw8kCw8qg4RQDwykCwyqg4VQDw6kCw6qg4TQDw2kCw2qg4XQDw+kCw+qg4QwDwxkCwxqg4UwDw5kCw5qg4SwDw1kCw1qg4WwDw9kCw9qg4RwDwzkCwzqg4VwDw7kCw7qg4TwDw3kCw3qg4XwDw/kCw/qg4QIDwwUCwwag4UIDw4UCw4ag4SIDw0UCw0ag4WIDw8UCw8ag4RIDwyUCwyag4VIDw6UCw6ag4TIDw2UCw2ag4XIDw+UCw+ag4QoDwxUCwxag4UoDw5UCw5ag4SoDw1UCw1ag4WoDw9UCw9ag4RoDwzUCwzag4VoDw7UCw7ag4ToDw3UCw3ag4XoDw/UCw/ag4QYDww0Cww6g4UYDw40Cw46g4SYDw00Cw06g4WYDw80Cw86g4RYDwy0Cwy6g4VYDw60Cw66g4TYDw20Cw26g4XYDw+0Cw+6g4Q4Dwx0Cwx6g4U4Dw50Cw56g4S4Dw10Cw16g4W4Dw90Cw96g4R4Dwz0Cwz6g4V4Dw70Cw76g4T4Dw30Cw36g4X4Dw/0Cw/6g4QEDwwMCwwGg4UEDw4MCw4Gg4SEDw0MCw0Gg4WEDw8MCw8Gg4REDwyMCwyGg4VEDw6MCw6Gg4TEDw2MCw2Gg4XEDw+MCw+Gg4QkDwxMCwxGg4UkDw5MCw5Gg4SkDw1MCw1Gg4WkDw9MCw9Gg4RkDwzMCwzGg4VkDw7MCw7Gg4TkDw3MCw3Gg4XkDw/MCw/Gg4QUDwwsCwwmg4UUDw4sCw4mg4SUDw0sCw0mg4WUDw8sCw8mg4RUDwysCwymg4VUDw6sCw6mg4TUDw2sCw2mg4XUDw+sCw+mg4Q0DwxsCwxmg4U0Dw5sCw5mg4S0Dw1sCw1mg4W0Dw9sCw9mg4R0DwzsCwzmg4V0Dw7sCw7mg4T0Dw3sCw3mg4X0Dw/sCw/mg4QMDwwcCwwWg4UMDw4cCw4Wg4SMDw0cCw0Wg4WMDw8cCw8Wg4RMDwycCwyWg4VMDw6cCw6Wg4TMDw2cCw2Wg4XMDw+cCw+Wg4QsDwxcCwxWg4UsDw5cCw5Wg4SsDw1cCw1Wg4WsDw9cCw9Wg4RsDwzcCwzWg4VsDw7cCw7Wg4TsDw3cCw3Wg4XsDw/cCw/Wg4QcDww8Cww2g4UcDw48Cw42g4ScDw08Cw02g4WcDw88Cw82g4RcDwy8Cwy2g4VcDw68Cw62g4TcDw28Cw22g4XcDw+8Cw+2g4Q8Dwx8Cwx2g4U8Dw58Cw52g4S8Dw18Cw12g4W8Dw98Cw92g4R8Dwz8Cwz2g4V8Dw78Cw72g4T8Dw38Cw32g4X8j/vcN/6+RNtwPGgYwMAwgMDwAGgY0MAwoMDwIGgYyMAwkMDwEGgY2MAwsMDwMGgYxMAwiMDwCGgY1MAwqMDwKGgYzMAwmMDwGGgY3MAwuMDwOGoYwMAwhMDwBGoY0MAwpMDwJGoYyMAwlMDwFGoY2MAwtMDwNGoYxMAwjMDwDGoY1MAwrMDwLGoYzMAwnMDwHGoY3MAwvMDwPGkYwMIwgMLwAGkY0MIwoMLwIGkYyMIwkMLwEGkY2MIwsMLwMGkYxMIwiMLwCGkY1MIwqMLwKGkYzMIwmMLwGGkY3MIwuMLwOGsYwMIwhMLwBGsY0MIwpMLwJGsYyMIwlMLwFGsY2MIwtMLwNGsYxMIwjMLwDGsY1MIwrMLwLGsYzMIwnMLwHGsY3MIwvMLwPGiYwMEwgMHwAGiY0MEwoMHwIGiYyMEwkMHwEGiY2MEwsMHwMGiYxMEwiMHwCGiY1MEwqMHwKGiYzMEwmMHwGGiY3MEwuMHwOGqYwMEwhMHwBGqY0MEwpMHwJGqYyMEwlMHwFGqY2MEwtMHwNGqYxMEwjMHwDGqY1MEwrMHwLGqYzMEwnMHwHGqY3MEwvMHwPGmYwMMwgMPwAGmY0MMwoMPwIGmYyMMwkMPwEGmY2MMwsMPwMGmYxMMwiMPwCGmY1MMwqMPwKGmYzMMwmMPwGGmY3MMwuMPwOGuYwMMwhMPwBGuY0MMwpMPwJGuYyMMwlMPwFGuY2MMwtMPwNGuYxMMwjMPwDGuY1MMwrMPwLGuYzMMwnMPwHGuY3MMwvMPwvNGdYwMCwgMAwAGhY0MCwoMAwIGhYyMCwkMAwEGhY2MCwsMAwMGhYxMCwiMAwCGhY1MCwqMAwKGhYzMCwmMAwGGhY3MCwuMAwOGhYwsCwhMAwBGhY0sCwpMAwJGhYysCwlMAwFGhY2sCwtMAwNGhYxsCwjMAwDGhY1sCwrMAwLGhYzsCwnMAwHGhY3sCwvMAwPGhYwcCwgsAwAmhY0cCwosAwImhYycCwksAwEmhY2cCwssAwMmhYxcCwisAwCmhY1cCwqsAwKmhYzcCwmsAwGmhY3cCwusAwOmhYw8CwhsAwBmhY08CwpsAwJmhYy8CwlsAwFmhY28CwtsAwNmhYx8CwjsAwDmhY18CwrsAwLmhYz8CwnsAwHmhY38CwvsAwPmjYwMCwgcAwAWjY0MCwocAwIWjYyMCwkcAwEWjY2MCwscAwMWjYxMCwicAwCWjY1MCwqcAwKWjYzMCwmcAwGWjY3MCwucAwOWjYwsCwhcAwBWjY0sCwpcAwJWjYysCwlcAwFWjY2sCwtcAwNWjYxsCwjcAwDWjY1sCwrcAwLWjYzsCwncAwHWjY3sCwvcAwPWjYwcCwg8AwA2jY0cCwo8AwI2jYycCwk8AwE2jY2cCws8AwM2jYxcCwi8AwC2jY1cCwq8AwK2jYzcCwm8AwG2jY3cCwu8AwO2jYw8Cwh8AwB2jY08Cwp8AwJ2jYy8Cwl8AwF2jY28Cwt8AwN2jYx8Cwj8AwD2jY18Cwr8AwL2jYz8Cwn8AwH2jY38Cwv8AwP2g4wMBwgMCwAGg40MBwoMCwIGg4yMBwkMCwEGg42MBwsMCwMGg4xMBwiMCwCGg41MBwqMCwKGg4zMBwmMCwGGg43MBwuMCwOGg4wsBwhMCwBGg40sBwpMCwJGg4ysBwlMCwFGg42sBwtMCwNGg4xsBwjMCwDGg41sBwrMCwLGg4zsBwnMCwHGg43sBwvMCwPGg4wcBwgsCwAmg40cBwosCwImg4ycBwksCwEmg42cBwssCwMmg4xcBwisCwCmg41cBwqsCwKmg4zcBwmsCwGmg43cBwusCwOmg4w8BwhsCwBmg408BwpsCwJmg4y8BwlsCwFmg428BwtsCwNmg4x8BwjsCwDmg418BwrsCwLmg4z8BwnsCwHmg438BwvsCwPmi4wMBwgcCwAWi40MBwocCwIWi4yMBwkcCwEWi42MBwscCwMWi4xMBwicCwCWi41MBwqcCwKWi4zMBwmcCwGWi43MBwucCwOWi4wsBwhcCwBWi40sBwpcCwJWi4ysBwlcCwFWi42sBwtcCwNWi4xsBwjcCwDWi41sBwrcCwLWi4zsBwncCwHWi43sBwvcCwPWi4wcBwg8CwA2i40cBwo8CwI2i4ycBwk8CwE2i42cBws8CwM2i4xcBwi8CwC2i41cBwq8CwK2i4zcBwm8CwG2i43cBwu8CwO2i4w8Bwh8CwB2i408Bwp8CwJ2i4y8Bwl8CwF2i428Bwt8CwN2i4x8Bwj8CwD2i418Bwr8CwL2i4z8Bwn8CwH2i438Bwv8CwP2h4wMDwgMBwAGh40MDwoMBwIGh4yMDwkMBwEGh42MDwsMBwMGh4xMDwiMBwCGh41MDwqMBwKGh4zMDwmMBwGGh43MDwuMBwOGh4wsDwhMBwBGh40sDwpMBwJGh4ysDwlMBwFGh42sDwtMBwNGh4xsDwjMBwDGh41sDwrMBwLGh4zsDwnMBwHGh43sDwvMBwPGh4wcDwgsBwAmh40cDwosBwImh4ycDwksBwEmh42cDwssBwMmh4xcDwisBwCmh41cDwqsBwKmh4zcDwmsBwGmh43cDwusBwOmh4w8DwhsBwBmh408DwpsBwJmh4y8DwlsBwFmh428DwtsBwNmh4x8DwjsBwDmh418DwrsBwLmh4z8DwnsBwHmh438DwvsBwPmj4wMDwgcBwAWj40MDwocBwIWj4yMDwkcBwEWj42MDwscBwMWj4xMDwicBwCWj41MDwqcBwKWj4zMDwmcBwGWj43MDwucBwOWj4wsDwhcBwBWj40sDwpcBwJWj4ysDwlcBwFWj42sDwtcBwNWj4xsDwjcBwDWj41sDwrcBwLWj4zsDwncBwHWj43sDwvcBwPWj4wcDwg8BwA2j40cDwo8BwI2j4ycDwk8BwE2j42cDws8BwM2j4xcDwi8BwC2j41cDwq8BwK2j4zcDwm8BwG2j43cDwu8BwO2j4w8Dwh8BwB2j408Dwp8BwJ2j4y8Dwl8BwF2j428Dwt8BwN2j4x8Dwj8BwD2j418Dwr8BwL2j4z8Dwn8BwH2j438j/fcP/a6QN94OGAQwMAwgMD4CGAQ0MAwoMD4KGgQwMAwkMD4GGgQ0MAwsMD4OGQQwMgwgMj4CGQQ0MgwoMj4KGwQwMgwkMj4GGwQ0MgwsMj4OGIQwMQwgMT4CGIQ0MQwoMT4KGoQwMQwkMT4GGoQ0MQwsMT4OGYQwMwwgMz4CGYQ0MwwoMz4KG4QwMwwkMz4GG4Q0MwwsMz4OGEQwMIwgML4CGEQ0MIwoML4KGkQwMIwkML4GGkQ0MIwsML4OGUQwMowgMr4CGUQ0MowoMr4KG0QwMowkMr4GG0Q0MowsMr4OGMQwMYwgMb4CGMQ0MYwoMb4KGsQwMYwkMb4GGsQ0MYwsMb4OGcQwM4wgM74CGcQ0M4woM74KG8QwM4wkM74GG8Q0M4wsM74OGCQwMEwgMH4CGCQ0MEwoMH4KGiQwMEwkMH4GGiQ0MEwsMH4OGSQwMkwgMn4CGSQ0MkwoMn4KGyQwMkwkMn4GGyQ0MkwsMn4OGKQwMUwgMX4CGKQ0MUwoMX4KGqQwMUwkMX4GGqQ0MUwsMX4OGaQwM0wgM34CGaQ0M0woM34KG6QwM0wkM34GG6Q0M0wsM34OGGQwMMwgMP4CGGQ0MMwoMP4KGmQwMMwkMP4GGmQ0MMwsMP4OGWQwMswgMv4CGWQ0MswoMv4KG2QwMswkMv4GG2Q0MswsMv4OGOQwMcwgMf4CGOQ0McwoMf4KGuQwMcwkMf4GGuQ0McwsMf4OGeQwM8wgM/4CGeQ0M8woM/4KG+QwM8wkM/4GG+Q0M8wsM/wvDGRYwMCwgMAwAGhY0MCwoMAwIGhYyMCwkMAwEGhY2MCwsMAwMGhYxMCwiMAwCGhY1MCwqMAwKGhYzMCwmMAwGGhY3MCwuMAwOGpYwMCwhMAwBGpY0MCwpMAwJGpYyMCwlMAwFGpY2MCwtMAwNGpYxMCwjMAwDGpY1MCwrMAwLGpYzMCwnMAwHGpY3MCwvMAwPGlYwMKwgMIwAGlY0MKwoMIwIGlYyMKwkMIwEGlY2MKwsMIwMGlYxMKwiMIwCGlY1MKwqMIwKGlYzMKwmMIwGGlY3MKwuMIwOGtYwMKwhMIwBGtY0MKwpMIwJGtYyMKwlMIwFGtY2MKwtMIwNGtYxMKwjMIwDGtY1MKwrMIwLGtYzMKwnMIwHGtY3MKwvMIwPGjYwMGwgMEwAGjY0MGwoMEwIGjYyMGwkMEwEGjY2MGwsMEwMGjYxMGwiMEwCGjY1MGwqMEwKGjYzMGwmMEwGGjY3MGwuMEwOGrYwMGwhMEwBGrY0MGwpMEwJGrYyMGwlMEwFGrY2MGwtMEwNGrYxMGwjMEwDGrY1MGwrMEwLGrYzMGwnMEwHGrY3MGwvMEwPGnYwMOwgMMwAGnY0MOwoMMwIGnYyMOwkMMwEGnY2MOwsMMwMGnYxMOwiMMwCGnY1MOwqMMwKGnYzMOwmMMwGGnY3MOwuMMwOGvYwMOwhMMwBGvY0MOwpMMwJGvYyMOwlMMwFGvY2MOwtMMwNGvYxMOwjMMwDGvY1MOwrMMwLGvYzMOwnMMwHGvY3MOwvMMwPGg4wMBwgMCwAGg40MBwoMCwIGg4yMBwkMCwEGg42MBwsMCwMGg4xMBwiMCwCGg41MBwqMCwKGg4zMBwmMCwGGg43MBwuMCwOGo4wMBwhMCwBGo40MBwpMCwJGo4yMBwlMCwFGo42MBwtMCwNGo4xMBwjMCwDGo41MBwrMCwLGo4zMBwnMCwHGo43MBwvMCwPGk4wMJwgMKwAGk40MJwoMKwIGk4yMJwkMKwEGk42MJwsMKwMGk4xMJwiMKwCGk41MJwqMKwKGk4zMJwmMKwGGk43MJwuMKwOGs4wMJwhMKwBGs40MJwpMKwJGs4yMJwlMKwFGs42MJwtMKwNGs4xMJwjMKwDGs41MJwrMKwLGs4zMJwnMKwHGs43MJwvMKwPGi4wMFwgMGwAGi40MFwoMGwIGi4yMFwkMGwEGi42MFwsMGwMGi4xMFwiMGwCGi41MFwqMGwKGi4zMFwmMGwGGi43MFwuMGwOGq4wMFwhMGwBGq40MFwpMGwJGq4yMFwlMGwFGq42MFwtMGwNGq4xMFwjMGwDGq41MFwrMGwLGq4zMFwnMGwHGq43MFwvMGwPGm4wMNwgMOwAGm40MNwoMOwIGm4yMNwkMOwEGm42MNwsMOwMGm4xMNwiMOwCGm41MNwqMOwKGm4zMNwmMOwGGm43MNwuMOwOGu4wMNwhMOwBGu40MNwpMOwJGu4yMNwlMOwFGu42MNwtMOwNGu4xMNwjMOwDGu41MNwrMOwLGu4zMNwnMOwHGu43MNwvMOwPGh4wMDwgMBwAGh40MDwoMBwIGh4yMDwkMBwEGh42MDwsMBwMGh4xMDwiMBwCGh41MDwqMBwKGh4zMDwmMBwGGh43MDwuMBwOGp4wMDwhMBwBGp40MDwpMBwJGp4yMDwlMBwFGp42MDwtMBwNGp4xMDwjMBwDGp41MDwrMBwLGp4zMDwnMBwHGp43MDwvMBwPGl4wMLwgMJwAGl40MLwoMJwIGl4yMLwkMJwEGl42MLwsMJwMGl4xMLwiMJwCGl41MLwqMJwKGl4zMLwmMJwGGl43MLwuMJwOGt4wMLwhMJwBGt40MLwpMJwJGt4yMLwlMJwFGt42MLwtMJwNGt4xMLwjMJwDGt41MLwrMJwLGt4zMLwnMJwHGt43MLwvMJwPGj4wMHwgMFwAGj40MHwoMFwIGj4yMHwkMFwEGj42MHwsMFwMGj4xMHwiMFwCGj41MHwqMFwKGj4zMHwmMFwGGj43MHwuMFwOGr4wMHwhMFwBGr40MHwpMFwJGr4yMHwlMFwFGr42MHwtMFwNGr4xMHwjMFwDGr41MHwrMFwLGr4zMHwnMFwHGr43MHwvMFwPGn4wMPwgMNwAGn40MPwoMNwIGn4yMPwkMNwEGn42MPwsMNwMGn4xMPwiMNwCGn41MPwqMNwKGn4zMPwmMNwGGn43MPwuMNwOGv4wMPwhMNwBGv40MPwpMNwJGv4yMPwlMNwFGv42MPwtMNwNGv4xMPwjMNwDGv41MPwrMNwLGv4zMPwnMNwHGv436n/f8P8aacP9oGEAA8MAAsMDoGFAA8OAAsODoGEgA8NAAsNDoGFgA8PAAsPDoGEQA8MgAsMjoGFQA8OgAsOjoGEwA8NgAsNjoGFwA8PgAsPjoGEIA8MQAsMToGFIA8OQAsOToGEoA8NQAsNToGFoA8PQAsPToGEYA8MwAsMzoGFYA8OwAsOzoGE4A8NwAsNzoGF4A8PwAsPzoGEEA8MIAsMLoGFEA8OIAsOLoGEkA8NIAsNLoGFkA8PIAsPLoGEUA8MoAsMroGFUA8OoAsOroGE0A8NoAsNroGF0A8PoAsProGEMA8MYAsMboGFMA8OYAsOboGEsA8NYAsNboGFsA8PYAsPboGEcA8M4AsM7oGFcA8O4AsO7oGE8A8N4AsN7oGF8A8P4AsP7oGECA8MEAsMHoGFCA8OEAsOHoGEiA8NEAsNHoGFiA8PEAsPHoGESA8MkAsMnoGFSA8OkAsOnoGEyA8NkAsNnoGFyA8PkAsPnoGEKA8MUAsMXoGFKA8OUAsOXoGEqA8NUAsNXoGFqA8PUAsPXoGEaA8M0AsM3oGFaA8O0AsO3oGE6A8N0AsN3oGF6A8P0AsP3oGEGA8MMAsMPoGFGA8OMAsOPoGEmA8NMAsNPoGFmA8PMAsPPoGEWA8MsAsMvoGFWA8OsAsOvoGE2A8NsAsNvoGF2A8PsAsPvoGEOA8McAsMfoGFOA8OcAsOfoGEuA8NcAsNfoGFuA8PcAsPfoGEeA8M8AsM/oGFeA8O8AsO/oGE+A8N8AsN/oGF+A8P8AsP/wnKGBQwMCwgMA4CGBQ0MCwoMA4KGhQwMCwkMA4GGhQ0MCwsMA4OGRQwMiwgMg4CGRQ0MiwoMg4KGxQwMiwkMg4GGxQ0MiwsMg4OGJQwMSwgMQ4CGJQ0MSwoMQ4KGpQwMSwkMQ4GGpQ0MSwsMQ4OGZQwMywgMw4CGZQ0MywoMw4KG5QwMywkMw4GG5Q0MywsMw4OGFQwMKwgMI4CGFQ0MKwoMI4KGlQwMKwkMI4GGlQ0MKwsMI4OGVQwMqwgMo4CGVQ0MqwoMo4KG1QwMqwkMo4GG1Q0MqwsMo4OGNQwMawgMY4CGNQ0MawoMY4KGtQwMawkMY4GGtQ0MawsMY4OGdQwM6wgM44CGdQ0M6woM44KG9QwM6wkM44GG9Q0M6wsM44OGDQwMGwgME4CGDQ0MGwoME4KGjQwMGwkME4GGjQ0MGwsME4OGTQwMmwgMk4CGTQ0MmwoMk4KGzQwMmwkMk4GGzQ0MmwsMk4OGLQwMWwgMU4CGLQ0MWwoMU4KGrQwMWwkMU4GGrQ0MWwsMU4OGbQwM2wgM04CGbQ0M2woM04KG7QwM2wkM04GG7Q0M2wsM04OGHQwMOwgMM4CGHQ0MOwoMM4KGnQwMOwkMM4GGnQ0MOwsMM4OGXQwMuwgMs4CGXQ0MuwoMs4KG3QwMuwkMs4GG3Q0MuwsMs4OGPQwMewgMc4CGPQ0MewoMc4KGvQwMewkMc4GGvQ0MewsMc4OGfQwM+wgM84CGfQ0M+woM84KG/QwM+wkM84GG/Q0M+wsM84OGAwwMBwgMC4CGAw0MBwoMC4KGgwwMBwkMC4GGgw0MBwsMC4OGQwwMhwgMi4CGQw0MhwoMi4KGwwwMhwkMi4GGww0MhwsMi4OGIwwMRwgMS4CGIw0MRwoMS4KGowwMRwkMS4GGow0MRwsMS4OGYwwMxwgMy4CGYw0MxwoMy4KG4wwMxwkMy4GG4w0MxwsMy4OGEwwMJwgMK4CGEw0MJwoMK4KGkwwMJwkMK4GGkw0MJwsMK4OGUwwMpwgMq4CGUw0MpwoMq4KG0wwMpwkMq4GG0w0MpwsMq4OGMwwMZwgMa4CGMw0MZwoMa4KGswwMZwkMa4GGsw0MZwsMa4OGcwwM5wgM64CGcw0M5woM64KG8wwM5wkM64GG8w0M5wsM64OGCwwMFwgMG4CGCw0MFwoMG4KGiwwMFwkMG4GGiw0MFwsMG4OGSwwMlwgMm4CGSw0MlwoMm4KGywwMlwkMm4GGyw0MlwsMm4OGKwwMVwgMW4CGKw0MVwoMW4KGqwwMVwkMW4GGqw0MVwsMW4OGawwM1wgM24CGaw0M1woM24KG6wwM1wkM24GG6w0M1wsM24OGGwwMNwgMO4CGGw0MNwoMO4KGmwwMNwkMO4GGmw0MNwsMO4OGWwwMtwgMu4CGWw0MtwoMu4KG2wwMtwkMu4GG2w0MtwsMu4OGOwwMdwgMe4CGOw0MdwoMe4KGuwwMdwkMe4GGuw0MdwsMe4OGewwM9wgM+4CGew0M9woM+4KG+wwM9wkM+4GG+w0M9wsM+4OGBwwMDwgMB4CGBw0MDwoMB4KGhwwMDwkMB4GGhw0MDwsMB4OGRwwMjwgMh4CGRw0MjwoMh4KGxwwMjwkMh4GGxw0MjwsMh4OGJwwMTwgMR4CGJw0MTwoMR4KGpwwMTwkMR4GGpw0MTwsMR4OGZwwMzwgMx4CGZw0MzwoMx4KG5wwMzwkMx4GG5w0MzwsMx4OGFwwMLwgMJ4CGFw0MLwoMJ4KGlwwMLwkMJ4GGlw0MLwsMJ4OGVwwMrwgMp4CGVw0MrwoMp4KG1wwMrwkMp4GG1w0MrwsMp4OGNwwMbwgMZ4CGNw0MbwoMZ4KGtwwMbwkMZ4GGtw0MbwsMZ4OGdwwM7wgM54CGdw0M7woM54KG9wwM7wkM54GG9w0M7wsM54OGDwwMHwgMF4CGDw0MHwoMF4KGjwwMHwkMF4GGjw0MHwsMF4OGTwwMnwgMl4CGTw0MnwoMl4KGzwwMnwkMl4GGzw0MnwsMl4OGLwwMXwgMV4CGLw0MXwoMV4KGrwwMXwkMV4GGrw0MXwsMV4OGbwwM3wgM14CGbw0M3woM14KG7wwM3wkM14GG7w0M3wsM14OGHwwMPwgMN4CGHw0MPwoMN4KGnwwMPwkMN4GGnw0MPwsMN4OGXwwMvwgMt4CGXw0MvwoMt4KG3wwMvwkMt4GG3w0MvwsMt4OGPwwMfwgMd4CGPw0MfwoMd4KGvwwMfwkMd4GGvw0MfwsMd4OGfwwM/wgM94CGfw0M/woM94KG/wwM/wkM94GG/43+3zf8v0bacD9oGMDAMIDA8ABoGNDAMKDA8CBoGMjAMJDA8BBoGNjAMLDA8DBoGMTAMIjA8AhoGNTAMKjA8ChoGMzAMJjA8BhoGNzAMLjA8DhoGMLAMITA8ARoGNLAMKTA8CRoGMrAMJTA8BRoGNrAMLTA8DRoGMbAMIzA8AxoGNbAMKzA8CxoGM7AMJzA8BxoGN7AMLzA8DxoGMHAMILA8AJoGNHAMKLA8CJoGMnAMJLA8BJoGNnAMLLA8DJoGMXAMIrA8ApoGNXAMKrA8CpoGM3AMJrA8BpoGN3AMLrA8DpoGMPAMIbA8AZoGNPAMKbA8CZoGMvAMJbA8BZoGNvAMLbA8DZoGMfAMI7A8A5oGNfAMK7A8C5oGM/AMJ7A8B5oGN/AML7A8D5omMDAMIHA8AFomNDAMKHA8CFomMjAMJHA8BFomNjAMLHA8DFomMTAMInA8AlomNTAMKnA8ClomMzAMJnA8BlomNzAMLnA8DlomMLAMIXA8AVomNLAMKXA8CVomMrAMJXA8BVomNrAMLXA8DVomMbAMI3A8A1omNbAMK3A8C1omM7AMJ3A8B1omN7AML3A8D1omMHAMIPA8ANomNHAMKPA8CNomMnAMJPA8BNomNnAMLPA8DNomMXAMIvA8AtomNXAMKvA8CtomM3AMJvA8BtomN3AMLvA8DtomMPAMIfA8AdomNPAMKfA8CdomMvAMJfA8BdomNvAMLfA8DdomMfAMI/A8A9omNfAMK/A8C9omM/AMJ/A8B9omN/AML/A8L9wnGEBA8MCAsMAoGFBA8OCAsOAoGEhA8NCAsNAoGFhA8PCAsPAoGERA8MiAsMgoGFRA8OiAsOgoGExA8NiAsNgoGFxA8PiAsPgoGEJA8MSAsMQoGFJA8OSAsOQoGEpA8NSAsNQoGFpA8PSAsPQoGEZA8MyAsMwoGFZA8OyAsOwoGE5A8NyAsNwoGF5A8PyAsPwoGEFA8MKAsMIoGFFA8OKAsOIoGElA8NKAsNIoGFlA8PKAsPIoGEVA8MqAsMooGFVA8OqAsOooGE1A8NqAsNooGF1A8PqAsPooGENA8MaAsMYoGFNA8OaAsOYoGEtA8NaAsNYoGFtA8PaAsPYoGEdA8M6AsM4oGFdA8O6AsO4oGE9A8N6AsN4oGF9A8P6AsP4oGEDA8MGAsMEoGFDA8OGAsOEoGEjA8NGAsNEoGFjA8PGAsPEoGETA8MmAsMkoGFTA8OmAsOkoGEzA8NmAsNkoGFzA8PmAsPkoGELA8MWAsMUoGFLA8OWAsOUoGErA8NWAsNUoGFrA8PWAsPUoGEbA8M2AsM0oGFbA8O2AsO0oGE7A8N2AsN0oGF7A8P2AsP0oGEHA8MOAsMMoGFHA8OOAsOMoGEnA8NOAsNMoGFnA8POAsPMoGEXA8MuAsMsoGFXA8OuAsOsoGE3A8NuAsNsoGF3A8PuAsPsoGEPA8MeAsMcoGFPA8OeAsOcoGEvA8NeAsNcoGFvA8PeAsPcoGEfA8M+AsM8oGFfA8O+AsO8oGE/A8N+AsN8oGF/A8P+AsP8oOEAA8MBAsMCoOFAA8OBAsOCoOEgA8NBAsNCoOFgA8PBAsPCoOEQA8MhAsMioOFQA8OhAsOioOEwA8NhAsNioOFwA8PhAsPioOEIA8MRAsMSoOFIA8ORAsOSoOEoA8NRAsNSoOFoA8PRAsPSoOEYA8MxAsMyoOFYA8OxAsOyoOE4A8NxAsNyoOF4A8PxAsPyoOEEA8MJAsMKoOFEA8OJAsOKoOEkA8NJAsNKoOFkA8PJAsPKoOEUA8MpAsMqoOFUA8OpAsOqoOE0A8NpAsNqoOF0A8PpAsPqoOEMA8MZAsMaoOFMA8OZAsOaoOEsA8NZAsNaoOFsA8PZAsPaoOEcA8M5AsM6oOFcA8O5AsO6oOE8A8N5AsN6oOF8A8P5AsP6oOECA8MFAsMGoOFCA8OFAsOGoOEiA8NFAsNGoOFiA8PFAsPGoOESA8MlAsMmoOFSA8OlAsOmoOEyA8NlAsNmoOFyA8PlAsPmoOEKA8MVAsMWoOFKA8OVAsOWoOEqA8NVAsNWoOFqA8PVAsPWoOEaA8M1AsM2oOFaA8O1AsO2oOE6A8N1AsN2oOF6A8P1AsP2oOEGA8MNAsMOoOFGA8ONAsOOoOEmA8NNAsNOoOFmA8PNAsPOoOEWA8MtAsMuoOFWA8OtAsOuoOE2A8NtAsNuoOF2A8PtAsPuoOEOA8MdAsMeoOFOA8OdAsOeoOEuA8NdAsNeoOFuA8PdAsPeoOEeA8M9AsM+oOFeA8O9AsO+oOE+A8N9AsN+oOF+A8P9AsP+oOEBA8MDAsMBoOFBA8ODAsOBoOEhA8NDAsNBoOFhA8PDAsPBoOERA8MjAsMhoOFRA8OjAsOhoOExA8NjAsNhoOFxA8PjAsPhoOEJA8MTAsMRoOFJA8OTAsORoOEpA8NTAsNRoOFpA8PTAsPRoOEZA8MzAsMxoOFZA8OzAsOxoOE5A8NzAsNxoOF5A8PzAsPxoOEFA8MLAsMJoOFFA8OLAsOJoOElA8NLAsNJoOFlA8PLAsPJoOEVA8MrAsMpoOFVA8OrAsOpoOE1A8NrAsNpoOF1A8PrAsPpoOENA8MbAsMZoOFNA8ObAsOZoOEtA8NbAsNZoOFtA8PbAsPZoOEdA8M7AsM5oOFdA8O7AsO5oOE9A8N7AsN5oOF9A8P7AsP5oOEDA8MHAsMFoOFDA8OHAsOFoOEjA8NHAsNFoOFjA8PHAsPFoOETA8MnAsMloOFTA8OnAsOloOEzA8NnAsNloOFzA8PnAsPloOELA8MXAsMVoOFLA8OXAsOVoOErA8NXAsNVoOFrA8PXAsPVoOEbA8M3AsM1oOFbA8O3AsO1oOE7A8N3AsN1oOF7A8P3AsP1oOEHA8MPAsMNoOFHA8OPAsONoOEnA8NPAsNNoOFnA8PPAsPNoOEXA8MvAsMtoOFXA8OvAsOtoOE3A8NvAsNtoOF3A8PvAsPtoOEPA8MfAsMdoOFPA8OfAsOdoOEvA8NfAsNdoOFvA8PfAsPdoOEfA8M/AsM9oOFfA8O/AsO9oOE/A8N/AsN9oOF/Y/73Df+vkTbcDxoGMDAMIDA8ABoGNDAMKDA8CBoGMjAMJDA8BBoGNjAMLDA8DBoGMTAMIjA8AhoGNTAMKjA8ChoGMzAMJjA8BhoGNzAMLjA8DhqGMDAMITA8ARqGNDAMKTA8CRqGMjAMJTA8BRqGNjAMLTA8DRqGMTAMIzA8AxqGNTAMKzA8CxqGMzAMJzA8BxqGNzAMLzA8DxpGMDCMIDC8ABpGNDCMKDC8CBpGMjCMJDC8BBpGNjCMLDC8DBpGMTCMIjC8AhpGNTCMKjC8ChpGMzCMJjC8BhpGNzCMLjC8DhrGMDCMITC8ARrGNDCMKTC8CRrGMjCMJTC8BRrGNjCMLTC8DRrGMTCMIzC8AxrGNTCMKzC8CxrGMzCMJzC8BxrGNzCMLzC8DxomMDBMIDB8ABomNDBMKDB8CBomMjBMJDB8BBomNjBMLDB8DBomMTBMIjB8AhomNTBMKjB8ChomMzBMJjB8BhomNzBMLjB8DhqmMDBMITB8ARqmNDBMKTB8CRqmMjBMJTB8BRqmNjBMLTB8DRqmMTBMIzB8AxqmNTBMKzB8CxqmMzBMJzB8BxqmNzBMLzB8DxpmMDDMIDD8ABpmNDDMKDD8CBpmMjDMJDD8BBpmNjDMLDD8DBpmMTDMIjD8AhpmNTDMKjD8ChpmMzDMJjD8BhpmNzDMLjD8DhrmMDDMITD8ARrmNDDMKTD8CRrmMjDMJTD8BRrmNjDMLTD8DRrmMTDMIzD8AxrmNTDMKzD8Cxrm+x83/Fvtv//+/980+O6/apxhfoMd5hfs8L/qnGEBA8MCAsMAoGFBA8OCAsOAoGEhA8NCAsNAoGFhA8PCAsPAoGERA8MiAsMgoGFRA8OiAsOgoGExA8NiAsNgoGFxA8PiAsPgoGEJA8MSAsMQoGFJA8OSAsOQoGEpA8NSAsNQoGFpA8PSAsPQoGEZA8MyAsMwoGFZA8OyAsOwoGE5A8NyAsNwoGF5A8PyAsPwoGEFA8MKAsMIoGFFA8OKAsOIoGElA8NKAsNIoGFlA8PKAsPIoGEVA8MqAsMooGFVA8OqAsOooGE1A8NqAsNooGF1A8PqAsPooGENA8MaAsMYoGFNA8OaAsOYoGEtA8NaAsNYoGFtA8PaAsPYoGEdA8M6AsM4oGFdA8O6AsO4oGE9A8N6AsN4oGF9A8P6AsP4oGEDA8MGAsMEoGFDA8OGAsOEoGEjA8NGAsNEoGFjA8PGAsPEoGETA8MmAsMkoGFTA8OmAsOkoGEzA8NmAsNkoGFzA8PmAsPkoGELA8MWAsMUoGFLA8OWAsOUoGErA8NWAsNUoGFrA8PWAsPUoGEbA8M2AsM0oGFbA8O2AsO0oGE7A8N2AsN0oGF7A8P2AsP0oGEHA8MOAsMMoGFHA8OOAsOMoGEnA8NOAsNMoGFnA8POAsPMoGEXA8MuAsMsoGFXA8OuAsOsoGE3A8NuAsNsoGF3A8PuAsPsoGEPA8MeAsMcoGFPA8OeAsOcoGEvA8NeAsNcoGFvA8PeAsPcoGEfA8M+AsM8oGFfA8O+AsO8oGE/A8N+AsN8oGF/A8P+AsP8oOEAA8MBAsMCoOFAA8OBAsOCoOEgA8NBAsNCoOFgA8PBAsPCoOEQA8MhAsMioOFQA8OhAsOioOEwA8NhAsNioOFwA8PhAsPioOEIA8MRAsMSoOFIA8ORAsOSoOEoA8NRAsNSoOFoA8PRAsPSoOEYA8MxAsMyoOFYA8OxAsOyoOE4A8NxAsNyoOF4A8PxAsPyoOEEA8MJAsMKoOFEA8OJAsOKoOEkA8NJAsNKoOFkA8PJAsPKoOEUA8MpAsMqoOFUA8OpAsOqoOE0A8NpAsNqoOF0A8PpAsPqoOEMA8MZAsMaoOFMA8OZAsOaoOEsA8NZAsNaoOFsA8PZAsPaoOEcA8M5AsM6oOFcA8O5AsO6oOE8A8N5AsN6oOF8A8P5AsP6oOECA8MFAsMGoOFCA8OFAsOGoOEiA8NFAsNGoOFiA8PFAsPGoOESA8MlAsMmoOFSA8OlAsOmoOEyA8NlAsNmoOFyA8PlAsPmoOEKA8MVAsMWoOFKA8OVAsOWoOEqA8NVAsNWoOFqA8PVAsPWoOEaA8M1AsM2oOFaA8O1AsO2oOE6A8N1AsN2oOF6A8P1AsP2oOEGA8MNAsMOoOFGA8ONAsOOoOEmA8NNAsNOoOFmA8PNAsPOoOEWA8MtAsMuoOFWA8OtAsOuoOE2A8NtAsNuoOF2A8PtAsPuoOEOA8MdAsMeoOFOA8OdAsOeoOEuA8NdAsNeoOFuA8PdAsPeoOEeA8M9AsM+oOFeA8O9AsO+oOE+A8N9AsN+oOF+A8P9AsP+oOEBA8MDAsMBoOFBA8ODAsOBoOEhA8NDAsNBoOFhA8PDAsPBoOERA8MjAsMhoOFRA8OjAsOhoOExA8NjAsNhoOFxA8PjAsPhoOEJA8MTAsMRoOFJA8OTAsORoOEpA8NTAsNRoOFpA8PTAsPRoOEZA8MzAsMxoOFZA8OzAsOxoOE5A8NzAsNxoOF5A8PzAsPxoOEFA8MLAsMJoOFFA8OLAsOJoOElA8NLAsNJoOFlA8PLAsPJoOEVA8MrAsMpoOFVA8OrAsOpoOE1A8NrAsNpoOF1A8PrAsPpoOENA8MbAsMZoOFNA8ObAsOZoOEtA8NbAsNZoOFtA8PbAsPZoOEdA8M7AsM5oOFdA8O7AsO5oOE9A8N7AsN5oOF9A8P7AsP5oOEDA8MHAsMFoOFDA8OHAsOFoOEjA8NHAsNFoOFjA8PHAsPFoOETA8MnAsMloOFTA8OnAsOloOEzA8NnAsNloOFzA8PnAsPloOELA8MXAsMVoOFLA8OXAsOVoOErA8NXAsNVoOFrA8PXAsPVoOEbA8M3AsM1oOFbA8O3AsO1oOE7A8N3AsN1oOF7A8P3AsP1oOEHA8MPAsMNoOFHA8OPAsONoOEnA8NPAsNNoOFnA8PPAsPNoOEXA8MvAsMtoOFXA8OvAsOtoOE3A8NvAsNtoOF3A8PvAsPtoOEPA8MfAsMdoOFPA8OfAsOdoOEvA8NfAsNdoOFvA8PfAsPdoOEfA8M/AsM9oOFfA8O/AsO9oOE/A8N/AsN9oOF/Y//3Df+vkTbcDxoGMDAMIDA8ABoGNDAMKDA8CBoGMjAMJDA8BBoGNjAMLDA8DBoGMTAMIjA8AhoGNTAMKjA8ChoGMzAMJjA8BhoGNzAMLjA8DhqGMDAMITA8ARqGNDAMKTA8CRqGMjAMJTA8BRqGNjAMLTA8DRqGMTAMIzA8AxqGNTAMKzA8CxqGMzAMJzA8BxqGNzAMLzA8DxpGMDCMIDC8ABpGNDCMKDC8CBpGMjCMJDC8BBpGNjCMLDC8DBpGMTCMIjC8AhpGNTCMKjC8ChpGMzCMJjC8BhpGNzCMLjC8DhrGMDCMITC8ARrGNDCMKTC8CRrGMjCMJTC8BRrGNjCMLTC8DRrGMTCMIzC8AxrGNTCMKzC8CxrGMzCMJzC8BxrGNzCMLzC8DxomMDBMIDB8ABomNDBMKDB8CBomMjBMJDB8BBomNjBMLDB8DBomMTBMIjB8AhomNTBMKjB8ChomMzBMJjB8BhomNzBMLjB8DhqmMDBMITB8ARqmNDBMKTB8CRqmMjBMJTB8BRqmNjBMLTB8DRqmMTBMIzB8AxqmNTBMKzB8CxqmMzBMJzB8BxqmNzBMLzB8DxpmMDDMIDD8ABpmNDDMKDD8CBpmMjDMJDD8BBpmNjDMLDD8DBpmMTDMIjD8AhpmNTDMKjD8ChpmMzDMJjD8BhpmNzDMLjD8DhrmMDDMITD8ARrmNDDMKTD8CRrmMjDMJTD8BRrmNjDMLTD8DRrmMTDMIzD8AxrmNTDMKzD8CxrmMzDMJzD8BxrmNzDMLzD8rwZnWMDAsIDAMABoWNDAsKDAMCBoWMjAsJDAMBBoWNjAsLDAMDBoWMTAsIjAMAhoWNTAsKjAMChoWMzAsJjAMBhoWNzAsLjAMDhoWMLAsITAMARoWNLAsKTAMCRoWMrAsJTAMBRoWNrAsLTAMDRoWMbAsIzAMAxoWNbAsKzAMCxoWM7AsJzAMBxoWN7AsLzAMDxoWMHAsILAMAJoWNHAsKLAMCJoWMnAsJLAMBJoWNnAsLLAMDJoWMXAsIrAMApoWNXAsKrAMCpoWM3AsJrAMBpoWN3AsLrAMDpoWMPAsIbAMAZoWNPAsKbAMCZoWMvAsJbAMBZoWNvAsLbAMDZoWMfAsI7AMA5oWNfAsK7AMC5oWM/AsJ7AMB5oWN/AsL7AMD5o2MDAsIHAMAFo2NDAsKHAMCFo2MjAsJHAMBFo2NjAsLHAMDFo2MTAsInAMAlo2NTAsKnAMClo2MzAsJnAMBlo2NzAsLnAMDlo2MLAsIXAMAVo2NLAsKXAMCVo2MrAsJXAMBVo2NrAsLXAMDVo2MbAsI3AMA1o2NbAsK3AMC1o2M7AsJ3AMB1o2N7AsL3AMD1o2MHAsIPAMANo2NHAsKPAMCNo2MnAsJPAMBNo2NnAsLPAMDNo2MXAsIvAMAto2NXAsKvAMCto2M3AsJvAMBto2N3AsLvAMDto2MPAsIfAMAdo2NPAsKfAMCdo2MvAsJfAMBdo2NvAsLfAMDdo2MfAsI/AMA9o2NfAsK/AMC9o2M/AsJ/AMB9o2N/AsL/AMD9oOMDAcIDAsABoONDAcKDAsCBoOMjAcJDAsBBoONjAcLDAsDBoOMTAcIjAsAhoONTAcKjAsChoOMzAcJjAsBhoONzAcLjAsDhoOMLAcITAsARoONLAcKTAsCRoOMrAcJTAsBRoONrAcLTAsDRoOMbAcIzAsAxoONbAcKzAsCxoOM7AcJzAsBxoON7AcLzAsDxoOMHAcILAsAJoONHAcKLAsCJoOMnAcJLAsBJoONnAcLLAsDJoOMXAcIrAsApoONXAcKrAsCpoOM3AcJrAsBpoON3AcLrAsDpoOMPAcIbAsAZoONPAcKbAsCZoOMvAcJbAsBZoONvAcLbAsDZoOMfAcI7AsA5oONfAcK7AsC5oOM/AcJ7AsB5oON/AcL7AsD5ouMDAcIHAsAFouNDAcKHAsCFouMjAcJHAsBFouNjAcLHAsDFouMTAcInAsAlouNTAcKnAsClouMzAcJnAsBlouNzAcLnAsDlouMLAcIXAsAVouNLAcKXAsCVouMrAcJXAsBVouNrAcLXAsDVouMbAcI3AsA1ouNbAcK3AsC1ouM7AcJ3AsB1ouN7AcL3AsD1ouMHAcIPAsANouNHAcKPAsCNouMnAcJPAsBNouNnAcLPAsDNouMXAcIvAsAtouNXAcKvAsCtouM3AcJvAsBtouN3AcLvAsDtouMPAcIfAsAdouNPAcKfAsCdouMvAcJfAsBdouNvAcLfAsDdouMfAcI/AsA9ouNfAcK/AsC9ouM/AcJ/AsB9ouN/AcL/AsD9oeMDA8IDAcABoeNDA8KDAcCBoeMjA8JDAcBBoeNjA8LDAcDBoeMTA8IjAcAhoeNTA8KjAcChoeMzA8JjAcBhoeNzA8LjAcDhoeMLA8ITAcARoeNLA8KTAcCRoeMrA8JTAcBRoeNrA8LTAcDRoeMbA8IzAcAxoeNbA8KzAcCxoeM7A8JzAcBxoeN7A8LzAcDxoeMHA8ILAcAJoeNHA8KLAcCJoeMnA8JLAcBJoeNnA8LLAcDJoeMXA8IrAcApoeNXA8KrAcCpoeM3A8JrAcBpoeN3A8LrAcDpoeMPA8IbAcAZoeNPA8KbAcCZoeMvA8JbAcBZoeNvA8LbAcDZoeMfA8I7AcA5oeNfA8K7AcC5oeM/A8J7AcB5oeN/A8L7AcD5o+MDA8IHAcAFo+NDA8KHAcCFo+MjA8JHAcBFo+NjA8LHAcDFo+MTA8InAcAlo+NTA8KnAcClo+MzA8JnAcBlo+NzA8LnAcDlo+MLA8IXAcAVo+NLA8KXAcCVo+MrA8JXAcBVo+NrA8LXAcDVo+MbA8I3AcA1o+NbA8K3AcC1o+M7A8J3AcB1o+N7A8L3AcD1o+MHA8IPAcANo+NHA8KPAcCNo+MnA8JPAcBNo+NnA8LPAcDNo+MXA8IvAcAto+NXA8KvAcCto+M3A8JvAcBto+N3A8LvAcDto+MPA8IfAcAdo+NPA8KfAcCdo+MvA8JfAcBdo+NvA8LfAcDdo+MfA8I/AcA9o+NfA8K/AcC9o+M/A8J/AcB9o+N+4/33D/2ukDfeDhgEMDAMIDA+AhgENDAMKDA+ChoEMDAMJDA+BhoENDAMLDA+DhkEMDIMIDI+AhkENDIMKDI+ChsEMDIMJDI+BhsENDIMLDI+DhiEMDEMIDE+AhiENDEMKDE+ChqEMDEMJDE+BhqENDEMLDE+DhmEMDMMIDM+AhmENDMMKDM+ChuEMDMMJDM+BhuENDMMLDM+DhhEMDCMIDC+AhhENDCMKDC+ChpEMDCMJDC+BhpENDCMLDC+DhlEMDKMIDK+AhlENDKMKDK+ChtEMDKMJDK+BhtENDKMLDK+DhjEMDGMIDG+AhjENDGMKDG+ChrEMDGMJDG+BhrENDGMLDG+DhnEMDOMIDO+AhnENDOMKDO+ChvEMDOMJDO+BhvENDOMLDO+DhgkMDBMIDB+AhgkNDBMKDB+ChokMDBMJDB+BhokNDBMLDB+DhkkMDJMIDJ+AhkkNDJMKDJ+ChskMDJMJDJ+BhskNDJMLDJ+DhikMDFMIDF+AhikNDFMKDF+ChqkMDFMJDF+BhqkNDFMLDF+DhmkMDNMIDN+AhmkNDNMKDN+ChukMDNMJDN+BhukNDNMLDN+DhhkMDDMIDD+AhhkNDDMKDD+ChpkMDDMJDD+BhpkNDDMLDD+DhlkMDLMIDL+AhlkNDLMKDL+ChtkMDLMJDL+BhtkNDLMLDL+DhjkMDHMIDH+AhjkNDHMKDH+ChrkMDHMJDH+BhrkNDHMLDH+DhnkMDPMIDP+AhnkNDPMKDP+ChvkMDPMJDP+BhvkNDPMLDP+ryRkWMDAsIDAMABoWNDAsKDAMCBoWMjAsJDAMBBoWNjAsLDAMDBoWMTAsIjAMAhoWNTAsKjAMChoWMzAsJjAMBhoWNzAsLjAMDhqWMDAsITAMARqWNDAsKTAMCRqWMjAsJTAMBRqWNjAsLTAMDRqWMTAsIzAMAxqWNTAsKzAMCxqWMzAsJzAMBxqWNzAsLzAMDxpWMDCsIDCMABpWNDCsKDCMCBpWMjCsJDCMBBpWNjCsLDCMDBpWMTCsIjCMAhpWNTCsKjCMChpWMzCsJjCMBhpWNzCsLjCMDhrWMDCsITCMARrWNDCsKTCMCRrWMjCsJTCMBRrWNjCsLTCMDRrWMTCsIzCMAxrWNTCsKzCMCxrWMzCsJzCMBxrWNzCsLzCMDxo2MDBsIDBMABo2NDBsKDBMCBo2MjBsJDBMBBo2NjBsLDBMDBo2MTBsIjBMAho2NTBsKjBMCho2MzBsJjBMBho2NzBsLjBMDhq2MDBsITBMARq2NDBsKTBMCRq2MjBsJTBMBRq2NjBsLTBMDRq2MTBsIzBMAxq2NTBsKzBMCxq2MzBsJzBMBxq2NzBsLzBMDxp2MDDsIDDMABp2NDDsKDDMCBp2MjDsJDDMBBp2NjDsLDDMDBp2MTDsIjDMAhp2NTDsKjDMChp2MzDsJjDMBhp2NzDsLjDMDhr2MDDsITDMARr2NDDsKTDMCRr2MjDsJTDMBRr2NjDsLTDMDRr2MTDsIzDMAxr2NTDsKzDMCxr2MzDsJzDMBxr2NzDsLzDMDxoOMDAcIDAsABoONDAcKDAsCBoOMjAcJDAsBBoONjAcLDAsDBoOMTAcIjAsAhoONTAcKjAsChoOMzAcJjAsBhoONzAcLjAsDhqOMDAcITAsARqONDAcKTAsCRqOMjAcJTAsBRqONjAcLTAsDRqOMTAcIzAsAxqONTAcKzAsCxqOMzAcJzAsBxqONzAcLzAsDxpOMDCcIDCsABpONDCcKDCsCBpOMjCcJDCsBBpONjCcLDCsDBpOMTCcIjCsAhpONTCcKjCsChpOMzCcJjCsBhpONzCcLjCsDhrOMDCcITCsARrONDCcKTCsCRrOMjCcJTCsBRrONjCcLTCsDRrOMTCcIzCsAxrONTCcKzCsCxrOMzCcJzCsBxrONzCcLzCsDxouMDBcIDBsABouNDBcKDBsCBouMjBcJDBsBBouNjBcLDBsDBouMTBcIjBsAhouNTBcKjBsChouMzBcJjBsBhouNzBcLjBsDhquMDBcITBsARquNDBcKTBsCRquMjBcJTBsBRquNjBcLTBsDRquMTBcIzBsAxquNTBcKzBsCxquMzBcJzBsBxquNzBcLzBsDxpuMDDcIDDsABpuNDDcKDDsCBpuMjDcJDDsBBpuNjDcLDDsDBpuMTDcIjDsAhpuNTDcKjDsChpuMzDcJjDsBhpuNzDcLjDsDhruMDDcITDsARruNDDcKTDsCRruMjDcJTDsBRruNjDcLTDsDRruMTDcIzDsAxruNTDcKzDsCxruMzDcJzDsBxruNzDcLzDsDxoeMDA8IDAcABoeNDA8KDAcCBoeMjA8JDAcBBoeNjA8LDAcDBoeMTA8IjAcAhoeNTA8KjAcChoeMzA8JjAcBhoeNzA8LjAcDhqeMDA8ITAcARqeNDA8KTAcCRqeMjA8JTAcBRqeNjA8LTAcDRqeMTA8IzAcAxqeNTA8KzAcCxqeMzA8JzAcBxqeNzA8LzAcDxpeMDC8IDCcABpeNDC8KDCcCBpeMjC8JDCcBBpeNjC8LDCcDBpeMTC8IjCcAhpeNTC8KjCcChpeMzC8JjCcBhpeNzC8LjCcDhreMDC8ITCcARreNDC8KTCcCRreMjC8JTCcBRreNjC8LTCcDRreMTC8IzCcAxreNTC8KzCcCxreMzC8JzCcBxreNzC8LzCcDxo+MDB8IDBcABo+NDB8KDBcCBo+MjB8JDBcBBo+NjB8LDBcDBo+MTB8IjBcAho+NTB8KjBcCho+MzB8JjBcBho+NzB8LjBcDhq+MDB8ITBcARq+NDB8KTBcCRq+MjB8JTBcBRq+NjB8LTBcDRq+MTB8IzBcAxq+NTB8KzBcCxq+MzB8JzBcBxq+NzB8LzBcDxp+MDD8IDDcABp+NDD8KDDcCBp+MjD8JDDcBBp+NjD8LDDcDBp+MTD8IjDcAhp+NTD8KjDcChp+MzD8JjDcBhp+NzD8LjDcDhr+MDD8ITDcARr+NDD8KTDcCRr+MjD8JTDcBRr+NjD8LTDcDRr+MTD8IzDcAxr+NTD8KzDcCxr+MzD8JzDcBxr+N/5/3/D/GmnD/aBhAAPDAALDA6BhQAPDgALDg6BhIAPDQALDQ6BhYAPDwALDw6BhEAPDIALDI6BhUAPDoALDo6BhMAPDYALDY6BhcAPD4ALD46BhCAPDEALDE6BhSAPDkALDk6BhKAPDUALDU6BhaAPD0ALD06BhGAPDMALDM6BhWAPDsALDs6BhOAPDcALDc6BheAPD8ALD86BhBAPDCALDC6BhRAPDiALDi6BhJAPDSALDS6BhZAPDyALDy6BhFAPDKALDK6BhVAPDqALDq6BhNAPDaALDa6BhdAPD6ALD66BhDAPDGALDG6BhTAPDmALDm6BhLAPDWALDW6BhbAPD2ALD26BhHAPDOALDO6BhXAPDuALDu6BhPAPDeALDe6BhfAPD+ALD+6BhAgPDBALDB6BhQgPDhALDh6BhIgPDRALDR6BhYgPDxALDx6BhEgPDJALDJ6BhUgPDpALDp6BhMgPDZALDZ6BhcgPD5ALD56BhCgPDFALDF6BhSgPDlALDl6BhKgPDVALDV6BhagPD1ALD16BhGgPDNALDN6BhWgPDtALDt6BhOgPDdALDd6BhegPD9ALD96BhBgPDDALDD6BhRgPDjALDj6BhJgPDTALDT6BhZgPDzALDz6BhFgPDLALDL6BhVgPDrALDr6BhNgPDbALDb6BhdgPD7ALD76BhDgPDHALDH6BhTgPDnALDn6BhLgPDXALDX6BhbgPD3ALD36BhHgPDPALDP6BhXgPDvALDv6BhPgPDfALDf6BhfgPD/ALD/2pxhgUMDAsIDAOAhgUNDAsKDAOChoUMDAsJDAOBhoUNDAsLDAODhkUMDIsIDIOAhkUNDIsKDIOChsUMDIsJDIOBhsUNDIsLDIODhiUMDEsIDEOAhiUNDEsKDEOChqUMDEsJDEOBhqUNDEsLDEODhmUMDMsIDMOAhmUNDMsKDMOChuUMDMsJDMOBhuUNDMsLDMODhhUMDCsIDCOAhhUNDCsKDCOChpUMDCsJDCOBhpUNDCsLDCODhlUMDKsIDKOAhlUNDKsKDKOChtUMDKsJDKOBhtUNDKsLDKODhjUMDGsIDGOAhjUNDGsKDGOChrUMDGsJDGOBhrUNDGsLDGODhnUMDOsIDOOAhnUNDOsKDOOChvUMDOsJDOOBhvUNDOsLDOODhg0MDBsIDBOAhg0NDBsKDBOCho0MDBsJDBOBho0NDBsLDBODhk0MDJsIDJOAhk0NDJsKDJOChs0MDJsJDJOBhs0NDJsLDJODhi0MDFsIDFOAhi0NDFsKDFOChq0MDFsJDFOBhq0NDFsLDFODhm0MDNsIDNOAhm0NDNsKDNOChu0MDNsJDNOBhu0NDNsLDNODhh0MDDsIDDOAhh0NDDsKDDOChp0MDDsJDDOBhp0NDDsLDDODhl0MDLsIDLOAhl0NDLsKDLOCht0MDLsJDLOBht0NDLsLDLODhj0MDHsIDHOAhj0NDHsKDHOChr0MDHsJDHOBhr0NDHsLDHODhn0MDPsIDPOAhn0NDPsKDPOChv0MDPsJDPOBhv0NDPsLDPODhgMMDAcIDAuAhgMNDAcKDAuChoMMDAcJDAuBhoMNDAcLDAuDhkMMDIcIDIuAhkMNDIcKDIuChsMMDIcJDIuBhsMNDIcLDIuDhiMMDEcIDEuAhiMNDEcKDEuChqMMDEcJDEuBhqMNDEcLDEuDhmMMDMcIDMuAhmMNDMcKDMuChuMMDMcJDMuBhuMNDMcLDMuDhhMMDCcIDCuAhhMNDCcKDCuChpMMDCcJDCuBhpMNDCcLDCuDhlMMDKcIDKuAhlMNDKcKDKuChtMMDKcJDKuBhtMNDKcLDKuDhjMMDGcIDGuAhjMNDGcKDGuChrMMDGcJDGuBhrMNDGcLDGuDhnMMDOcIDOuAhnMNDOcKDOuChvMMDOcJDOuBhvMNDOcLDOuDhgsMDBcIDBuAhgsNDBcKDBuChosMDBcJDBuBhosNDBcLDBuDhksMDJcIDJuAhksNDJcKDJuChssMDJcJDJuBhssNDJcLDJuDhisMDFcIDFuAhisNDFcKDFuChqsMDFcJ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NjUwbCowTAoaNjMwbCYwTAYaNjcwbC4wTA4atjAwbCEwTAEatjQwbCkwTAkatjIwbCUwTAUatjYwbC0wTA0atjEwbCMwTAMatjUwbCswTAsatjMwbCcwTAcatjcwbC8wTA8adjAw7CAwzAAadjQw7CgwzAgadjIw7CQwzAQadjYw7CwwzAwadjEw7CIwzAIadjUw7CowzAoadjMw7CYwzAYadjcw7C4wzA4a9jAw7CEwzAEa9jQw7CkwzAka9jIw7CUwzAUa9jYw7C0wzA0a9jEw7CMwzAMa9jUw7CswzAsa9jMw7CcwzAca9jcw7C8wzA8aDjAwHCAwLAAaDjQwHCgwLAgaDjIwHCQwLAQaDjYwHCwwLAwaDjEwHCIwLAIaDjUwHCowLAoaDjMwHCYwLAYaDjcwHC4wLA4ajjAwHCEwLAEajjQwHCkwLAkajjIwHCUwLAUajjYwHC0wLA0ajjEwHCMwLAMajjUwHCswLAsajjMwHCcwLAcajjcwHC8wLA8aTjAwnCAwrAAaTjQwnCgwrAgaTjIwnCQwrAQaTjYwnCwwrAwaTjEwnCIwrAIaTjUwnCowrAoaTjMwnCYwrAYaTjcwnC4wrA4azjAwnCEwrAEazjQwnCkwrAkazjIwnCUwrAUazjYwnC0wrA0azjEwnCMwrAMazjUwnCswrAsazjMwnCcwrAcazjcwnC8wrA8aLjAwXCAwbAAaLjQwXCgwbAgaLjIwXCQwbAQaLjYwXCwwbAwaLjEwXCIwbAIaLjUwXCowbAoaLjMwXCYwbAYaLjcwXC4wbA4arjAwXCEwbAEarjQwXCkwbAkarjIwXCUwbAUarjYwXC0wbA0arjEwXCMwbAMarjUwXCswbAsarjMwXCcwbAcarjcwXC8wbA8abjAw3CAw7AAabjQw3Cgw7AgabjIw3CQw7AQabjYw3Cww7AwabjEw3CIw7AIabjUw3Cow7AoabjMw3CYw7AYabjcw3C4w7A4a7jAw3CEw7AEa7jQw3Ckw7Aka7jIw3CUw7AUa7jYw3C0w7A0a7jEw3CMw7AMa7jUw3Csw7Asa7jMw3Ccw7Aca7jcw3C8w7A8aHjAwPCAwHAAaHjQwPCgwHAgaHjIwPCQwHAQaHjYwPCwwHAwaHjEwPCIwHAIaHjUwPCowHAoaHjMwPCYwHAYaHjcwPC4wHA4anjAwPCEwHAEa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CAwrgIYTDQwnCgwrgoaTDAwnCQwrgYaTDQwnCwwrg4ZTDAynCAyrgIZTDQynCgyrgobTDAynCQyrgYbTDQynCwyrg4YzDAxnCAxrgIYzDQxnCgxrgoazDAxnCQxrgYazDQxnCwxrg4ZzDAznCAzrgIZzDQznCgzrgobzDAznCQzrgYbzDQznCwzrg4YLDAwXCAwbgIYLDQwXCgwbgoaLDAwXCQwbgYaLDQwXCwwbg4ZLDAyXCAybgIZLDQyXCgybgobLDAyXCQybgYbLDQyXCwybg4YrDAxXCAxbgIYrDQxXCgxbgoarDAxXCQxbgYarDQxXCwxbg4ZrDAzXCAzbgIZrDQzXCgzbgobrDAzXCQzbgYbrDQzXCwzbg4YbDAw3CAw7gIYbDQw3Cgw7goabDAw3CQw7gYabDQw3Cww7g4ZbDAy3CAy7gIZbDQy3Cgy7gobbDAy3CQy7gYbbDQy3Cwy7g4Y7DAx3CAx7gIY7DQx3Cgx7goa7DAx3CQx7gYa7DQx3Cwx7g4Z7DAz3CAz7gIZ7DQz3Cgz7gob7DAz3CQz7gYb7DQz3Cwz7g4YHDAwPCAwHgIYHDQwPCgwHgoaHDAwPCQwHgYaHDQwPCwwHg4ZHDAyPCAyHgIZHDQyPCgyHgobHDAyPCQyHgYbHDQyPCwyHg4YnDAxPCAxHgIYnDQxPCgxHgoanDAxPCQxHgYanDQxPCwxHg4ZnDAzPCAzHgIZnDQzPCgzHgobnDAzPCQzHgYbnDQzPCwzHg4YXDAwvCAwngIYXDQwvCgwngoaXDAwvCQwngYaXDQwvCwwng4ZXDAyvCAyngIZXDQyvCgyngobXDAyvCQyngYbXDQyvCwyng4Y3DAxvCAxngIY3DQxvCgxngoa3DAxvCQxngYa3DQxvCwxng4Z3DAzvCAzngIZ3DQzvCgzngob3DAzvCQzngYb3DQzvCwzng4YPDAwfCAwXgIYPDQwfCgwXgoaPDAwfCQwXgYaPDQwfCwwXg4ZPDAyfCAyXgIZPDQyfCgyXgobPDAyfCQyXgYbPDQyfCwyXg4YvDAxfCAxXgIYvDQxfCgxXgoavDAxfCQxXgYavDQxfCwxXg4ZvDAzfCAzXgIZvDQzfCgzXgobvDAzfCQzXgYbvDQzfCwzXg4YfDAw/CAw3gIYfDQw/Cgw3goafDAw/CQw3gYafDQw/Cww3g4ZfDAy/CAy3gIZfDQy/Cgy3gobfDAy/CQy3gYbfDQy/Cwy3g4Y/DAx/CAx3gIY/DQx/Cgx3goa/DAx/CQx3gYa/DQx/Cwx3g4Z/DAz/CAz3gIZ/DQz/Cgz3gob/DAz/CQz3gYb/TfnfN/y/RtpwP2gYwMAwgMDwAGgY0MAwoMDwIGgYyMAwkMDwEGgY2MAwsMDwMGgYxMAwiMDwCGgY1MAwqMDwKGgYzMAwmMDwGGgY3MAwuMDwOGgYwsAwhMDwBGgY0sAwpMDwJGgYysAwlMDwFGgY2sAwtMDwNGgYxsAwjMDwDGgY1sAwrMDwLGgYzsAwnMDwHGgY3sAwvMDwPGgYwcAwgsDwAmgY0cAwosDwImgYycAwksDwEmgY2cAwssDwMmgYxcAwisDwCmgY1cAwqsDwKmgYzcAwmsDwGmgY3cAwusDwOmgYw8AwhsDwBmgY08AwpsDwJmgYy8AwlsDwFmgY28AwtsDwNmgYx8AwjsDwDmgY18AwrsDwLmgYz8AwnsDwHmgY38AwvsDwPmiYwMAwgcDwAWiY0MAwocDwIWiYyMAwkcDwEWiY2MAwscDwMWiYxMAwicDwCWiY1MAwqcDwKWiYzMAwmcDwGWiY3MAwucDwOWiYwsAwhcDwBWiY0sAwpcDwJWiYysAwlcDwFWiY2sAwtcDwNWiYxsAwjcDwDWiY1sAwrcDwLWiYzsAwncDwHWiY3sAwvcDwPWiYwcAwg8DwA2iY0cAwo8DwI2iYycAwk8DwE2iY2cAws8DwM2iYxcAwi8DwC2iY1cAwq8DwK2iYzcAwm8DwG2iY3cAwu8DwO2iYw8Awh8DwB2iY08Awp8DwJ2iYy8Awl8DwF2iY28Awt8DwN2iYx8Awj8DwD2iY18Awr8DwL2iYz8Awn8DwH2iY38Awv8Dwv/qcYQEDwwICwwCgYUEDw4ICw4CgYSEDw0ICw0CgYWEDw8ICw8CgYREDwyICwyCgYVEDw6ICw6CgYTEDw2ICw2CgYXEDw+ICw+CgYQkDwxICwxCgYUkDw5ICw5CgYSkDw1ICw1CgYWkDw9ICw9CgYRkDwzICwzCgYVkDw7ICw7CgYTkDw3ICw3CgYXkDw/ICw/CgYQUDwwoCwwigYUUDw4oCw4igYSUDw0oCw0igYWUDw8oCw8igYRUDwyoCwyigYVUDw6oCw6igYTUDw2oCw2igYXUDw+oCw+igYQ0DwxoCwxigYU0Dw5oCw5igYS0Dw1oCw1igYW0Dw9oCw9igYR0DwzoCwzj1OcO6BoZ1BYZxQcN6Bob1BIbxQMP6Bob1BYbxQcMGBoYNBIYJQMOGBoYNBYYJQcNGBoaNBIaJQMPGBoaNBYaJQcMmBoZNBIZJQMOmBoZNBYZJQcNmBobNBIbJQMPmBobNBYbJQcMWBoYtBIYpQMOWBoYtBYYpQcNWBoatBIapQMPWBoatBYapQcM2BoZtBIZpQMO2BoZtBYZpQcN2BobtBIbpQMP2BobtBYbpQcMOBoYdBIYZQMOOBoYdBYYZQcNOBoadBIaZQMPOBoadBYaZQcMuBoZdBIZZQMOuBoZdBYZZQcNuBobdBIbZQMPuBobdBYbZQcMeBoY9BIY5QMOeBoY9BYY5QcNeBoa9BIa5QMPeBoa9BYa5QcM+BoZ9BIZ5QMO+BoZ9BYZ5QcN+Bob9BIb5QMP+Bob9BYb5QcMBBoYDBIYFQMOBBoYDBYYFQcNBBoaDBIaFQMPBBoaDBYaFQcMhBoZDBIZFQMOhBoZDBYZFQcNhBobDBIbFQMPhBobDBYbFQcMRBoYjBIYlQMORBoYjBYYlQcNRBoajBIalQMPRBoajBYalQcMxBoZjBIZlQMOxBoZjBYZlQcNxBobjBIblQMPxBobjBYblQcMJBoYTBIYVQMOJBoYTBYYVQcNJBoaTBIaVQMPJBoaTBYaVQcMpBoZTBIZVQMOpBoZTBYZVQcNpBobTBIbVQMPpBobTBYbVQcMZBoYzBIY1QMOZBoYzBYY1QcNZBoazBIa1QMPZBoazBYa1QcM5BoZzBIZ1QMO5BoZzBYZ1QcN5BobzBIb1QMP5BobzBYb1QcMFBoYLBIYNQMOFBoYLBYYNQcNFBoaLBIaNQMPFBoaLBYaNQcMlBoZLBIZNQMOlBoZLBYZNQcNlBobLBIbNQMPlBobLBYbNQcMVBoYrBIYtQMOVBoYrBYYtQcNVBoarBIatQMPVBoarBYatQcM1BoZrBIZtQMO1BoZrBYZtQcN1BobrBIbtQMP1BobrBYbtQcMNBoYbBIYdQMONBoYbBYYdQcNNBoabBIadQMPNBoabBYadQcMtBoZbBIZdQMOtBoZbBYZdQcNtBobbBIbdQMPtBobbBYbdQcMdBoY7BIY9QMOdBoY7BYY9QcNdBoa7BIa9QMPdBoa7BYa9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BhpWNzCsLjCMDhrWMDCsITCMARrWNDCsKTCMCRrWMjCsJTCMBRrWNjCsLTCMDRrWMTCsIzCMAxrWNTCsKzCMCxrWMzCsJzCMBxrWNzCsLzCMDxo2MDBsIDBMABo2NDBsKDBMCBo2MjBsJDBMBBo2NjBsLDBMDBo2MTBsIjBMAho2NTBsKjBMCho2MzBsJjBMBho2NzBsLjBMDhq2MDBsITBMARq2NDBsKTBMCRq2MjBsJTBMBRq2NjBsLTBMDRq2MTBsIzBMAxq2NTBsKzBMCxq2MzBsJzBMBxq2NzBsLzBMDxp2MDDsIDDMABp2NDDsKDDMCBp2MjDsJDDMBBp2NjDsLDDMDBp2MTDsIjDMAhp2NTDsKjDMChp2MzDsJjDMBhp2NzDsLjDMDhr2MDDsITDMARr2NDDsKTDMCRr2MjDsJTDMBRr2NjDsLTDMDRr2MTDsIzDMAxr2NTDsKzDMCxr2MzDsJzDMBxr2NzDsLzDMDxoOMDAcIDAsABoONDAcKDAsCBoOMjAcJDAsBBoONjAcLDAsDBoOMTAcIjAsAhoONTAcKjAsChoOMzAcJjAsBhoONzAcLjAsDhqOMDAcITAsARqONDAcKTAsCRqOMjAcJTAsBRqONjAcLTAsDRqOMTAcIzAsAxqONTAcKzAsCxqOMzAcJzAsBxqONzAcLzAsDxpOMDCcIDCsABpONDCcKDCsCBpOMjCcJDCsBBpONjCcLDCsDBpOMTCcIjCsAhpONTCcKjCsChpOMzCcJjCsBhpONzCcLjCsDhrOMDCcITCsARrONDCcKTCsCRrOMjCcJTCsBRrONjCcLTCsDRrOMTCcIzCsAxrONTCcKzCsCxrOMzCcJzCsBxrONzCcLzCsDxouMDBcIDBsABouNDBcKDBsCBouMjBcJDBsBBouNjBcLDBsDBouMTBcIjBsAhouNTBcKjBsChouMzBcJjBsBhouNzBcLjBsDhquMDBcITBsARquNDBcKTBsCRquMjBcJTBsBRquNjBcLTBsDRquMTBcIzBsAxquNTBcKzBsCxquMzBcJzBsBxquNzBcLzBsDxpuMDDcIDDsABpuNDDcKDDsCBpuMjDcJDDsBBpuNjDcLDDsDBpuMTDcIjDsAhpuNTDcKjDsChpuMzDcJjDsBhpuNzDcLjDsDhruMDDcITDsARruNDDcKTDsCRruMjDcJTDs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MTDsIjDMBhp2NTDsKjDMDhp2MzDsJjDMARp2NzDsLjDMCRr2MDDsITDMBRr2NDDsKTDMDRr2MjDsJTDMAxr2NjDsLTDMCxr2MTDsIzDMBxr2NTDsKzDMDxr2MzDsJzAsABr2NzDsLzAsCBoOMDAcIDAsBBoONDAcKDAsDBoOMjAcJDAsAhoONjAcLDAsChoOMTAcIjAsBhoONTAcKjAsDhoOMzAcJjAsARoONzAcLjAsCRqOMDAcITAsBRqONDAcKTAsDRqOMjAcJTAsAxqONjAcLTAsCxqOMTAcIzAsBxqONTAcKzAsDxqOMzAcJzCsABqONzAcLzCsCBpOMDCcIDCsBBpONDCcKDCsDBpOMjCcJDCsAhpONjCcLDCsChpOMTCcIjCsBhpONTCcKjCsDhpOMzCcJjCsARpONzCcLjCsCRrOMDCcITCsBRrONDCcKTCsDRrOMjCcJTCsAxrONjCcLTCsCxrOMTCcIzCsBxrONTCcKzCsDxrOMzCcJzBsABrONzCcLzBsCBouMDBcIDBsBBouNDBcKDBsDBouMjBcJDBsAhouNjBcLDBsChouMTBcIjBsBhouNTBcKjBsDhouMzBcJjBsARouNzBcLjBsCRquMDBcITBsBRquNDBcKTBsDRquMjBcJTBsAxquNjBcLTBsCxquMTBcIzBsBxquNTBcKzBsDxquMzBcJzDsABquNzBcLzDsCBpuMDDcIDDsBBpuNDDcKDDsDBpuMjDcJDDsAhpuNjDcLDDsChpuMTDcIjDsBhpuNTDcKjDsDhpuMzDcJjDsARpuNzDcLjDsCRruMDDcITDsBRruNDDcKTDsDRruMjDcJTDsAxruNjDcLTDsCxruMTDcIzDsBxruNTDcKzDsDxruMzDcJzAcABruNzDcLzAcCBoeMDA8IDAcBBoeNDA8KDAcDBoeMjA8JDAcAhoeNjA8LDAcChoeMTA8IjAcBhoeNTA8KjAcDhoeMzA8JjAcARoeNzA8LjAcCRqeMDA8ITAcBRqeNDA8KTAcDRqeMjA8JTAcAxqeNjA8LTAcCxqeMTA8IzAcBxqeNTA8KzAcDxqeMzA8JzCcABqeNzA8LzCcCBpeMDC8IDCcBBpeNDC8KDCcDBpeMjC8JDCcAhpeNjC8LDCcChpeMTC8IjCcBhpeNTC8KjCcDhpeMzC8JjCcARpeNzC8LjCcCRre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1jIwrCUwjAMa1jYwrC0wjAsa1jEwrCMwjAca1jUwrCswjA8a1jMwrCcwTAAa1jcwrC8wTAgaNjAwbCAwTAQaNjQwbCgwTAwaNjIwbCQwTAIaNjYwbCwwTAoaNjEwbCIwTAYaNjUwbCowTA4aNjMwbCYwTAEaNjcwbC4wTAkatjAwbCEwTAUatjQwbCkwTA0atjIwbCUwTAMatjYwbC0wTAsatjEwbCMwTAcatjUwbCswTA8atjMwbCcwzAAatjcwbC8wzAgadjAw7CAwzAQadjQw7CgwzAwadjIw7CQwzAIadjYw7CwwzAoadjEw7CIwzAYadjUw7CowzA4adjMw7CYwzAEadjcw7C4wzAka9jAw7CEwzAUa9jQw7CkwzA0a9jIw7CUwzAMa9jYw7C0wzAsa9jEw7CMwzAca9jUw7CswzA8a9jMw7CcwLAAa9jcw7C8wLAgaDjAwHCAwLAQaDjQwHCgwLAwaDjIwHCQwLAIaDjYwHCwwLAoaDjEwHCIwLAYaDjUwHCowLA4aDjMwHCYwLAEaDjcwHC4wLAkajjAwHCEwLAUajjQwHCkwLA0ajjIwHCUwLAMajjYwHC0wLAsajjEwHCMwLAcajjUwHCswLA8ajjMwHCcwrAAajjcwHC8wrAgaTjAwnCAwrAQaTjQwnCgwrAwaTjIwnCQwrAIaTjYwnCwwrAoaTjEwnCIwrAYaTjUwnCowrA4aTjMwnCYwrAEaTjcwnC4wrAkazjAwnCEwrAUazjQwnCkwrA0azjIwnCUwrAMazjYwnC0wrAsazjEwnCMwrAcazjUwnCswrA8azjMwnCcwbAAazjcwnC8wbAgaLjAwXCAwbAQaLjQwXCgwbAwaLjIwXCQwbAIaLjYwXCwwbAoaLjEwXCIwbAYaLjUwXCowbA4aLjMwXCYwbAEaLjcwXC4wbAkarjAwXCEwbAUarjQwXCkwbA0arjIwXCUwbAMarjYwXC0wbAsarjEwXCMwbAcarjUwXCswbA8arjMwXCcw7AAarjcwXC8w7AgabjAw3CAw7AQabjQw3Cgw7AwabjIw3CQw7AIabjYw3Cww7AoabjEw3CIw7AYabjUw3Cow7A4abjMw3CYw7AEabjcw3C4w7Aka7jAw3CEw7AUa7jQw3Ckw7A0a7jIw3CUw7AMa7jYw3C0w7Asa7jEw3CMw7Aca7jUw3Csw7A8a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CgyLg4bDDAyHCQxLgIbDDQyHCwxLgoYjDAxHCAxLgYYjDQxHCgxLg4ajDAxHCQzLgIajDQxHCwzLgoZjDAzHCAzLgYZjDQzHCgzLg4bjDAzHCQwrgIbjDQzHCwwrgoYTDAwnCAwrgYYTDQwnCgwrg4aTDAwnCQyrgIaTDQwnCwyrgoZTDAynCAyrgYZTDQynCgyrg4bTDAynCQxrgIbTDQynCwxrgoYzDAxnCAxrgYYzDQxnCgxrg4azDAxnCQzrgIazDQxnCwzrgoZzDAznCAzrgYZzDQznCgzrg4bzDAznCQwbgIbzDQznCwwbgoYLDAwXCAwbgYYLDQwXCgwbg4aLDAwXCQybgIaLDQwXCwybgoZLDAyXCAybgYZLDQyXCgybg4bLDAyXCQxbgIbLDQyXCwxbgoYrDAxXCAxbgYYrDQxXCgxbg4arDAxXCQzbgIarDQxXCwzbgoZrDAzXCAzbgYZrDQzXCgzbg4brDAzXCQw7gIbrDQzXCww7goYbDAw3CAw7gYYbDQw3Cgw7g4abDAw3CQy7gIabDQw3Cwy7goZbDAy3CAy7gYZbDQy3Cgy7g4bbDAy3CQx7gIbbDQy3Cwx7goY7DAx3CAx7gYY7DQx3Cgx7g4a7DAx3CQz7gIa7DQx3Cwz7goZ7DAz3CAz7gYZ7DQz3Cgz7g4b7DAz3CQwHgIb7DQz3CwwHgoYHDAwPCAwHgYYHDQwPCgwHg4aHDAwPCQyHgIaHDQwPCwyHgoZHDAyPCAyHgYZHDQyPCgyHg4bHDAyPCQxHgIbHDQyPCwxHgoYnDAxPCAxHgYYnDQxPCgxHg4anDAxPCQzHgIanDQxPCwzHgoZnDAzPCAzHgYZnDQzPCgzHg4bnDAzPCQwngIbnDQzPCwwngoYXDAwvCAwngYYXDQwvCgwng4aXDAwvCQyngIaXDQwvCwyngoZXDAyvCAyngYZXDQyvCgyng4bXDAyvCQxngIbXDQyvCwxngoY3DAxvCAxngYY3DQxvCgxng4a3DAxvCQzngIa3DQxvCwzngoZ3DAzvCAzngYZ3DQzvCgzng4b3DAzvCQwXgIb3DQzvCwwXgoYPDAwfCAwXgYYPDQwfCgwXg4aPDAwfCQyXgIaPDQwfCwyXgoZPDAyfCAyXgYZPDQyfCgyXg4bPDAyfCQxXgIbPDQyfCwxXgoYvDAxfCAxXgYYvDQxfCgxXg4avDAxfCQzXgIavDQxfCwzXgoZvDAzfCAzXgYZvDQzfCgzXg4bvDAzfCQw3gIbvDQzfCww3goYfDAw/CAw3gYYfDQw/Cgw3g4afDAw/CQy3gIafDQw/Cwy3goZfDAy/CAy3gYZfDQy/Cgy3g4bfDAy/CQx3gIbfDQy/Cwx3goY/DAx/CAx3gYY/DQx/Cgx3g4a/DAx/CQz3gIa/DQx/Cwz3goZ/DAz/CAz3gYZ/DQz/Cgz3g4b/DAz/CQwPgIb/LfnfN/y/RtrwIGgYwMAwgMDwEGgY0MAwoMDwMGgYyMAwkMDwCGgY2MAwsMDwKGgYxMAwiMDwGGgY1MAwqMDwOGgYzMAwmMDwBGgY3MAwuMDwJGgYwsAwhMDwFGgY0sAwpMDwNGgYysAwlMDwDGgY2sAwtMDwLGgYxsAwjMDwHGgY1sAwrMDwPGgYzsAwnMDwAmgY3sAwvMDwImgYwcAwgsDwEmgY0cAwosDwMmgYycAwksDwCmgY2cAwssDwKmgYxcAwisDwGmgY1cAwqsDwOmgYzcAwmsDwBmgY3cAwusDwJmgYw8AwhsDwFmgY08AwpsDwNmgYy8AwlsDwDmgY28AwtsDwLmgYx8AwjsDwHmgY18AwrsDwPmgYz8AwnsDwAWgY38AwvsDwIWiYwMAwgcDwEWiY0MAwocDwMWiYyMAwkcDwCWiY2MAwscDwKWiYxMAwicDwGWiY1MAwqcDwOWiYzMAwmcDwBWiY3MAwucDwJWiYwsAwhcDwFWiY0sAwpcDwNWiYysAwlcDwDWiY2sAwtcDwLWiYxsAwjcDwHWiY1sAwrcDwPWiYzsAwncDwA2iY3sAwvcDwI2iYwcAwg8DwE2iY0cAwo8DwM2iYycAwk8DwC2iY2cAws8DwK2iYxcAwi8DwG2iY1cAwq8DwO2iYzcAwm8DwB2iY3cAwu8DwJ2iYw8Aw3xje8F84zjCngWGhPgLDZJxhLgPDHIJd/gXucu7/ccMiXQL+93/P//vc/69z5+HmzqCY+7/o//33/9wxBZ8bIDpnmNdg//IK9i8gaJjP4VsqMAwEGuY3MMwvMAwMGhYwMCwgMAwCGhY0MCwoMAwKGhZy+C8WGAYDDQsbGBYWGAYHDYsYGBYRGIYADYsaGBYVGIYEDYsZGBYTGIYCDYsbGBYXGIYGDUsYGJYQGIYBDUsaGJYUGIYFDUsZGJYSGIYDDUsbGJYWGIYHDcsYGJYRGEYADcsaGJYVGEYEDcsZGJYTGEYCDcsbGJYXGEYGDSsYGFYQGEYBDSsaGFYUGEYFDSsZGFYSGEYDDSsbGFYWGEYHDasYGFYRGMYADasaGFYVGMYEDasZGFYTGMYCDasbGFYXGMYGDWsYGNYQGMYBDWsaGNYUGMYFDWsZGNYSGMYDDWsbGNYWGMYHDesYGNYRGCYADesaGNYVGCYEDesZGNYTGCYCDesbGNYXGCYGDRsYGDYQGCYBDRsaGDYUGCYFDRsZGDYSGCYDDRsbGDYWGCYHDZsYGDYRGKYADZsaGDYVGKYEDZsZGDYTGKYCDZsbGDYXGKYGDVsYGLYQGKYBDVsaGLYUGKYFDVsZGLYSGKYDDVsbGLYWGKYHDdsYGLYRGGYADdsaGLYVGGYEDdsZGLYTGGYCDdsbGLYXGGYGDTsYGHYQGGYBDTsaGHYUGGYFDTsZGHYSGGYDDTsbGHYWGGYHDbsYGHYRGOYADbsaGHYVGOYEDbsZGHYTGOYCDbsbGHYXGOYGDXsYGPYQGOYBDXsaGPYUGOYFDXsZGPYSGOYDDXsbGPYWGOYHDfsYGPYRGBYADfsaGPYVGBYEDfsZGPYTGBYCDfsbGPYXGBYGDQcYGA4QGBYBDQcaGA4UGBYFDQcZGA4SGBYDDQcbGA4WGBYHDYcYGA4RGJYADYcaGA4VGJYEDYcZGA4TGJYCDYcbGA4XGJYGDUcYGI4QGJYBDUcaGI4UGJYFDUcZGI4SGJYDDUcbGI4WGJYHDccYGI4RGFYADccaGI4VGFYEDccZGI4TGFYCDccbGI4XGFYGDScYGE4QGFYBDScaGE4UGFYFDScZGE4SGFYDDScbGE4WGFYHDacYGE4RGNYADacaGE4VGNYEDacZGE4TGNYCDacbGE4XGNYGDWcYGM4QGNYBDWcaGM4UGNYFDWcZGM4SGNYDDWcbGM4WGNYHDecYGM4RGDYADecaGM4VGDYEDecZGM4TGDYCDecbGM4XGDYGDRcYGC4QGDYBDRcaGC4UGDYFDRcZGC4SGDYDDRcbGC4WGDYHDZcYGC4RGLYADZcaGC4VGLYEDZcZGC4TGLYCDZcbGC4XGLYGDVcYGK4QGLYBDVcaGK4UGLYFDVcZGK4SGLYDDVcbGK4WGLYHDdcYGK4RGHYADdcaGK4VGHYEDdcZGK4TGHYCDdcbGK4XGHYGDTcYGG4QGHYBDTcaGG4UGHYFDTcZGG4SGHYDDTcbGG4WGHYHDbcYGG4RGPYADbcaGG4VGPYEDbcZGG4TGPYCDbcbGG4XGPYGDXcYGO4QGPYBDXcaGO4UGPYFDXcZGO4SGPYDDXcbGO4WGPYHDfcYGO4RGA4ADfcaGO4VGA4EDfcZGO4TGA4CDfcbGO4XGA4GDQ8YGB4QGA4BDQ8aGB4UGA4FDQ8ZGB4SGA4DDQ8bGB4WGA4HDY8YGB4RGI4ADY8aGB4VGI4EDY8ZGB4TGI4CDY8bGB4XGI4GDU8YGJ4QGI4BDU8aGJ4UGI4FDU8ZGJ4SGI4DDU8bGJ4WGI4HDc8YGJ4RGE4ADc8aGJ4VGE4EDc8ZGJ4TGE4CDc8bGJ4XGE4GDS8YGF4QGE4BDS8aGF4UGE4FDS8ZGF4SGE4DDS8bGF4WGE4HDa8YGF4RGM4ADa8aGF4VGM4EDa8ZGF4TGM4CDa8bGF4XGM4GDW8YGN4QGM4BDW8aGN4UGM4FDW8ZGN4SGM4DDW8bGN4WGM4HDe8YGN4RGC4ADe8aGN4VGC4EDe8ZGN4TGC4CDe8bGN4XGC4GDR8YGD4QGC4BDR8aGD4UGC4FDR8ZGD4SGC4DDR8bGD4WGC4HDZ8YGD4RGK4ADZ8aGD4VGK4EDZ8ZGD4TGK4CDZ8bGD4XGK4GDV8YGL4QGK4BDV8aGL4UGK4FDV8ZGL4SGK4DDV8bGL4WGK4HDd8YGL4RGG4ADd8aGL4VGG4EDd8ZGL4TGG4CDd8bGL4XGG4GDT8YGH4QGG4BDT8aGH4UGG4FDT8ZGH4SGG4DDT8bGH4WGG4HDb8YGH4RGO4ADb8aGH4VGO4EDb8ZGH4TGO4CDb8bGH4XGO4GDX8YGP4QGO4BDX8aGP4UGO4FDX8ZGP4SGO4DDX8bGP4WGO4HDf8YGP4RGB4ADf8aGP4VGB4EDf8ZGP4TGB4CDf9b+r9v+H+NtOFh0DCAgWEAgeER0DCggWFAgeFR0DCQgWEggeEx0DCwgWFggeFx0DCIgWEQgeEJ0DCogWFQgeFJ0DCYgWEwgeEp0DC4gWFwgeFp0DCEgWEIgeEZ0DCkgWFIgeFZ0DCUgWEogeE50DC0gWFogeF50DCMgWEYgeEF0DCsgWFYgeFF0DCcgWE4geEl0DC8gWF4geFl0DCCgWEEgeEV0DCigWFEgeFV0DCSgWEkgeE10DCygWFkgeF10DCKgWEUgeEN0DCqgWFUgeFN0DCagWE0geEt0DC6gWF0geFt0DCGgWEMgeEd0DCmgWFMgeFd0DCWgWEsgeE90DC2gWFsgeF90DCOgWEcgeED0DCugWFcgeFD0DCegWE8geEj0DC+gWF8geFj0DCBgWECgeET0DChgWFCgeFT0DCRgWEigeEz0DCxgWFigeFz0DCJgWESgeEL0DCpgWFSgeFL0DCZgWEygeEr0DC5gWFygeFr0DCFgWEKgeEb0DClgWFKgeFb0DCVgWEqgeE70DC1gWFqgeF70DCNgWEageEH0DCtgWFageFH0DCdgWE6geEn0DC9gWF6geFn0DCDgWEGgeEX0DCjgWFGgeFX0DCTgWEmgeE30DCzgWFmgeF30DCLgWEWgeEP0DCrgWFWgeFP0DCbgWE2geEv0DC7gWF2geFv0DCHgWEOgeEf0DCngWFOgeFf0DCXgWEugeE/0DC3gWFugeF/MTjDPAaGeQSGAUDDvAaGeQWGAUHDfAaG+QSGgUDD/AaG+QWGgUHDAgaGBQSGQUDDggaGBQWGQUHDQgaGhQSGwUDDwgaGhQWGwUHDIgaGRQSGIUDDogaGRQWGIUHDYgaGxQSGoUDD4gaGxQWGoUHDEgaGJQSGYUDDkgaGJQWGYUHDUgaGpQSG4UDD0gaGpQWG4UHDMgaGZQSGEUDDsgaGZQWGEUHDcgaG5QSGkUDD8gaG5QWGkUHDCgaGFQSGUUDDigaGFQWGUUHDSgaGlQSG0UDDygaGlQWG0UHDKgaGVQSGMUDDqgaGVQWGMUHDagaG1QSGsUDD6gaG1QWGsUHDGgaGNQSGcUDDmgaGNQWGcUHDWgaGtQSG8UDD2gaGtQWG8UHDOgaGdQSGCUDDugaGdQWGCUHDegaG9QSGiUDD+gaG9QWGiUHDBgaGDQSGSUDDhgaGDQWGSUHDRgaGjQSGyUDDxgaGjQWGyUHDJgaGTQSGKUDDpgaGTQWGKUHDZgaGzQSGqUDD5gaGzQWGqUHDFgaGLQSGaUDDlgaGLQWGaUHDVgaGrQSG6UDD1gaGrQWG6UHDNgaGbQSGGUDDtgaGbQWGGUHDdgaG7QSGmUDD9gaG7QWGmUHDDgaGHQSGWUDDjgaGHQWGWUHDTgaGnQSG2UDDzgaGnQWG2UHDLgaGXQSGOUDDrgaGXQWGOUHDbgaG3QSGuUDD7gaG3QWGuUHDHgaGPQSGeUDDngaGPQWGeUHDXgaGvQSG+UDD3gaGvQWG+UHDPgaGfQSGBUDDvgaGfQWGBUHDfgaG/QSGhUDD/gaG/QWGhUHDAQaGAwSGRUDDgQaGAwWGRUHDQQaGgwSGxUDDwQaGgwWGxUHDIQaGQwSGJUDDoQaGQwWGJUHDYQaGwwSGpUDD4QaGwwWGpUHDEQaGIwSGZUDDkQaGIwWGZUHDUQaGowSG5UDD0QaGowWG5UHDMQaGYwSGFUDDsQaGYwWGFUHDcQaG4wSGlUDD8QaG4wWGlUHDCQaGEwSGVUDDiQaGEwWGVUHDSQaGkwSG1UDDyQaGkwWG1UHDKQaGUwSGNUDDqQaGUwWGNUHDaQaG0wSGtUDD6QaG0wWGtUHDGQaGMwSGdUDDmQaGMwWGdUHDWQaGswSG9UDD2QaGswWG9UHDOQaGcwSGDUDDuQaGcwWGDUHDeQaG8wSGjUDD+QaG8wWGjUHDBQaGCwSGTUDDhQaGCwWGTUHDRQaGiwSGzUDDxQaGiwWGzUHDJQaGSwSGLUDDpQaGSwWGLUHDZQaGywSGrUDD5QaGywWGrUHDFQaGKwSGbUDDlQaGKwWGbUHDVQaGqwSG7UDD1QaGqwWG7UHDNQaGawSGHUDDtQaGawWGHUHDdQaG6wSGnUDD9QaG6wWGnUHDDQaGGwSGXUDDjQaGGwWGXUHDTQaGmwSG3UDDzQaGmwWG3UHDLQaGWwSGPUDDrQaGWwWGPUHDbQaG2wSGvUDD7QaG2wWGvUHDHQaGOwSGfUDDnQaGOwWGfUHDXQaGuwSG/UDD3QaGuwWG/UHDPQaGewSGA0DDvQaGewWGA0HDfQaG+wSGg0DD/QaG+wWGg0HDAwaGBwSGQ0DDgwaGBwWGQ0HDQwaGhwSGw0DDwwaGhwWGw0HDIwaGRwSGI0DDowaGRwWGI0HDYwaGxwSGo0DD4waGxwWGo0HDEwaGJwSGY0DDkwaGJwWGY0HDUwaGpwSG40DD0waGpwWG40HDMwaGZwSGE0DDswaGZwWGE0HDcwaG5wSGk0DD8waG5wWGk0HDCwaGFwSGU0DDiwaGFwWGU0HDSwaGlwSG00DDywaGlwWG00HDKwaGVwSGM0DDqwaGVwWGM0HDawaG1wSGs0DD6waG1wWGs0HDGwaGNwSGc0DDmwaGNwWG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GBhOERjWAA2nGhhOFRjWBA2nGRhOExjWAg2nGxhOFxjWBg1nGBjOEBjWAQ1nGhjOFBjWBQ1nGRjOEhjWAw1nGxjOFhjWBw3nGBjOERg2AA3nGhjOFRg2BA3nGRjOExg2Ag3nGxjOFxg2Bg0XGBguEBg2AQ0XGhguFBg2BQ0XGRguEhg2Aw0XGxguFhg2Bw2XGBguERi2AA2XGhguFRi2BA2XGRguExi2Ag2XGxguFxi2Bg1XGBiuEBi2AQ1XGhiuFBi2BQ1XGRiuEhi2Aw1XGxiuFhi2Bw3XGBiuERh2AA3XGhiuFRh2BA3XGRiuExh2Ag3XGxiuFxh2Bg03GBhuEBh2AQ03GhhuFBh2BQ03GRhuEhh2Aw03GxhuFhh2Bw23GBhuERj2AA23GhhuFRj2BA23GRhuExj2Ag23GxhuFxj2Bg13GBjuEBj2AQ13GhjuFBj2BQ13GRjuEhj2Aw13GxjuFhj2Bw33GBjuERgOAA33GhjuFRgOBA33GRjuExgOAg33GxjuFxgOBg0PGBgeEBgOAQ0PGhgeFBgOBQ0PGRgeEhgOAw0PGxgeFhgOBw2PGBgeERiOAA2PGhgeFRiOBA2PGRgeExiOAg2PGxgeFxiOBg1PGBieEBiOAQ1PGhieFBiOBQ1PGRieEhiOAw1PGxieFhiOBw3PGBieERhOAA3PGhieFRhOBA3PGRieExhOAg3PGxieFxhOBg0vGBheEBhOAQ0vGhheFBhOBQ0vGRheEhhOAw0vGxheFhhOBw2vGBheERjOAA2vGhheFRjOBA2vGRheExjOAg2vGxheFxjOBg1vGBjeEBjOAQ1vGhjeFBjOBQ1vGRjeEhjOAw1vGxjeFhjOBw3vGBjeERguAA3vGhjeFRguBA3vGRjeExguAg3vGxjeFxguBg0fGBg+EBguAQ0fGhg+FBguBQ0fGRg+EhguAw0fGxg+FhguBw2fGBg+ERiuAA2fGhg+FRiuBA2fGRg+ExiuAg2fGxg+FxiuBg1fGBi+EBiuAQ1fGhi+FBiuBQ1fGRi+EhiuAw1fGxi+FhiuBw3fGBi+ERhuAA3fGhi+FRhuBA3fGRi+ExhuAg3fGxi+FxhuBg0/GBh+EBhuAQ0/Ghh+FBhuBQ0/GRh+EhhuAw0/Gxh+FhhuBw2/GBh+ERjuAA2/Ghh+FRj+/6j7p2BL1jZg1/xW2bZt27XKtl21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","debug_symbols":"1P3ByqRB099nnsu31qIyIyIjQqcyDINmLA8CIw0jeSV07r4fI8sYe+cXvVy77ubOqn9RufnR3dfzn//lf/i3/+//+f/7//p3//5//A//8V/+9f/jP//L//Qf/j//5j/9u//w77/f/ed/+f2vf/Qf/3//5t///e4//qd/8///T//yr/v2v/qXf/vv/4fvVxX/5V/9y//47/6nf/sv//qd//Kv/k+P3vz9/uuzNzv/94fzv/w//9W/nP+7r16//d9eveL/8Or/54e373999vx+9b8/2/8Xz1bHf322dv/bo2f+Rl9xdPz3HH1+/+2Fz6//b6xOcnWJF+SJo5u8H0OuXvGCnB+5+pA35FxzdpB3JMnVZV6RZ85u8o4MuXrJK3J/5myzHMl0vGY73jRnk/V4yXy8Zj9eMyAvWZBBFmSYBRlmQQZZkJHkarMgwyzIIAsyyIIMsyDTLMgkCzLJgkz0bx/TnE0WZJIFmWZBplmQSRZkkQVZZkGWWZBFFmQludosyDILssiCLLIgyyzIZxbkIwvykQX5zIJ8ac42/wUrWZDPLMhnFuQjC7LJgmyzINssyCYLspNcbRZkmwXZZEE2WZBtFuSYBTlkQQ5ZkGMW5KQ5myzIIQty0P8FaRbkkAW5ZEGuWZBrFuSSBblJrjYLcs2CXLIglyzINQvy+9DobrIhv89vzjYr8vwS3U125PmRIfl9V+gtMVPy/ExTR0V1UFVHZXVQVweFdVRZR6V1UFsHxXVQXeegvM4xfZ1jAjsHFXYOSuwc09g5JrJzUGXnoMzOMZ2dY0I7B5V2DkrtHNPaOSa2c1Bt56DczjG9nWOCOwcVdw5K7hzT3DkmunNQdeeg7M4x3Z1jwjsHlXcOSu8c0945Jr5zUH3noPzOMf2dYwI8BxV4DkrwHNPgOSbCc1CF56AMzzEdnmNCPAeVeA5K8RzT4jkmxnNQjeegHM8xPZ5jgjwHFXkOSvIc0+Q5JspzUJXnoCzPMV2eY8I8B5V5DkrzHNPmOSbOc1Cd56A8zzF9nmMCPQcVeg5K9BzT6Dkm0nNQpeegTM8xnZ5jQj0HlXoOSvUc0+o5JtZzUK3nolrPNbWea2o9F9V67i/R3WRVXlPruajWc1Gt55pazzW1notqPRfVeq6p9VxT67mo1nNRreeaWs81tZ6Laj0X1XquqfVcU+u5qNZzUa3nmlrPNbWei2o9F9V6rqn1XFPruajWc1Gt55pazzW1notqPRfVeq6p9VxT67mo1nNRreeaWs81tZ6Laj0X1XquqfVcU+u5qNZzUa3nmlrPNbWei2o9F9V6rqn1XFPruajWc1Gt55pazzW1notqPRfVeq6p9VxT67mo1nNRreeaWs81tZ6Laj0X1XquqfVcU+u5qNZzUa3nmlrPNbWei2o9F9V6rqn1XFPruajWc1Gt55pazzW1notqPRfVeq6p9VxT67mo1nNRreeaWs81tZ6Laj0X1XquqfVcU+u5qNZzUa3nmlrPNbWei2o9gWo9YWo9YWo9gWo98Ut0N1mVYWo9gWo9gWo9YWo9YWo9gWo9gWo9YWo9YWo9gWo9gWo9YWo9YWo9gWo9gWo9YWo9YWo9gWo9gWo9YWo9YWo9gWo9gWo9YWo9YWo9gWo9gWo9YWo9YWo9gWo9gWo9YWo9YWo9gWo9gWo9YWo9YWo9gWo9gWo9YWo9YWo9gWo9gWo9YWo9YWo9gWo9gWo9YWo9YWo9gWo9gWo9YWo9YWo9gWo9gWo9YWo9YWo9gWo9gWo9YWo9YWo9gWo9gWo9YWo9YWo9gWo9gWo9YWo9YWo9gWo9gWo9YWo9YWo9gWo9gWo9YWo9YWo9gWo9gWo9YWo9YWo9gWo9gWo9YWo9YWo9gWo9gWo9YWo9YWo9gWo9gWo9YWo9YWo9gWo9iWo9aWo9aWo9iWo9+Ut0N1mVaWo9iWo9iWo9aWo9aWo9iWo9iWo9aWo9aWo9iWo9iWo9aWo9aWo9iWo9iWo9aWo9aWo9iWo9iWo9aWo9aWo9iWo9iWo9aWo9aWo9iWo9iWo9aWo9aWo9iWo9iWo9aWo9aWo9iWo9iWo9aWo9aWo9iWo9iWo9aWo9aWo9iWo9iWo9aWo9aWo9iWo9iWo9aWo9aWo9iWo9iWo9aWo9aWo9iWo9iWo9aWo9aWo9iWo9iWo9aWo9aWo9iWo9iWo9aWo9aWo9iWo9iWo9aWo9aWo9iWo9iWo9aWo9aWo9iWo9iWo9aWo9aWo9iWo9iWo9aWo9aWo9iWo9iWo9aWo9aWo9iWo9iWo9aWo9aWo9iWo9iWo9aWo9aWo9iWo9hWo9ZWo9ZWo9hWo99Ut0N1mVZWo9hWo9hWo9ZWo9ZWo9hWo9hWo9ZWo9ZWo9hWo9hWo9ZWo9ZWo9hWo9hWo9ZWo9ZWo9hWo9hWo9ZWo9ZWo9hWo9hWo9ZWo9ZWo9hWo9hWo9ZWo9ZWo9hWo9hWo9ZWo9ZWo9hWo9hWo9ZWo9ZWo9hWo9hWo9ZWo9ZWo9hWo9hWo9ZWo9ZWo9hWo9hWo9ZWo9ZWo9hWo9hWo9ZWo9ZWo9hWo9hWo9ZWo9ZWo9hWo9hWo9ZWo9ZWo9hWo9hWo9ZWo9ZWo9hWo9hWo9ZWo9ZWo9hWo9hWo9ZWo9ZWo9hWo9hWo9ZWo9ZWo9hWo9hWo9ZWo9ZWo9hWo9hWo9ZWo9ZWo9hWo9hWo9ZWo9ZWo9hWo9hWo9ZWo9ZWo9hWo9D9V6nqn1PFPreajW836J7iar8plaz0O1nodqPc/Uep6p9TxU63mo1vNMreeZWs9DtZ6Haj3P1HqeqfU8VOt5qNbzTK3nmVrPQ7Weh2o9z9R6nqn1PFTreajW80yt55laz0O1nodqPc/Uep6p9TxU63mo1vNMreeZWs9DtZ6Haj3P1HqeqfU8VOt5qNbzTK3nmVrPQ7Weh2o9z9R6nqn1PFTreajW80yt55laz0O1nodqPc/Uep6p9TxU63mo1vNMreeZWs9DtZ6Haj3P1HqeqfU8VOt5qNbzTK3nmVrPQ7Weh2o9z9R6nqn1PFTreajW80yt55laz0O1nodqPc/Uep6p9TxU63mo1vNMreeZWs9DtZ6Haj3P1HqeqfU8VOt5qNbzTK3nmVrPQ7Weh2o9z9R6nqn1PFTraVTraVPraVPraVTr6V+iu8mqbFPraVTraVTraVPraVPraVTraVTraVPraVPraVTraVTraVPraVPraVTraVTraVPraVPraVTraVTraVPraVPraVTraVTraVPraVPraVTraVTraVPraVPraVTraVTraVPraVPraVTraVTraVPraVPraVTraVTraVPraVPraVTraVTraVPraVPraVTraVTraVPraVPraVTraVTraVPraVPraVTraVTraVPraVPraVTraVTraVPraVPraVTraVTraVPraVPraVTraVTraVPraVPraVTraVTraVPraVPraVTraVTraVPraVPraVTraVTraVPraVPraVTraVTraVPraVPraVTraVTraVPraVPraVTraVTraVPraVPraVTrGVTrGVPrGVPrGVTrmV+iu8mqHFPrGVTrGVTrGVPrGVPrGVTrGVTrGVPrGVPrGVTrGVTrGVPrGVPrGVTr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ikAPFYEeKgI9VQR6qgj0UBHooSLQU0WgVkWgRkWgRkWgVkWg/qU63CzNRkWgVkWgVkWgRkWgRkWgVkWgVkWgRkWgRkWgVkWgVkWgRkWgRkWgVkWgVkWgRkWgRkWgVkWgVkWgRkWgRkWgVkWgVkWgRkWgRkWgVkWgVkWgRkWgRkWgVkWgVkWgRkWgRkWgVkWgVkWgRkWgRkWgVkWgVkWgRkWgRkWgVkWgVkWgRkWgRkWgVkWgVkWgRkWgRkWgVkWgVkWgRkWgRkWgVkWgVkWgRkWgRkWgVkWgVkWgRkWgRkWgVkWgVkWgRkWgRkWgVkWgVkWgRkWgRkWgVkWgVkWgRkWgRkWgVkWgVkWgRkWgRkWgVkWgVkWgRkWgRkWgVkWgVkWgRkWgRkWgVkWgVkWgRkWgRkWgVkWgVkWgRkWgRkWgVkWgUUWgQUWgQUWgUUWg+aU63CzNQUWgUUWgUUWgQUWgQUWgUUWgUUWgQUWgQUWgUUWgUUWgQUWgQUWgUUWgUUWgQUWgQUWgUUWgUUWgQUWgQUWgUUWgUUWgQUWgQUWgUUWgUUWgQUWgQUWgUUWgUUWgQUWgQUWgUUWgUUWgQUWgQUWgUUWgUUWgQUWgQUWgUUWgUUWgQUWgQUWgUUWgUUWgQUWgQUWgUUWgUUWgQUWgQUWgUUWgUUWgQUWgQUWgUUWgUUWgQUWgQUWgUUWgUUWgQUWgQUWgUUWgUUWgQUWgQUWgUUWgUUWgQUWgQUWgUUWgUUWgQUWgQUWgUUWgUUWgQUWgQUWgUUWgUUWgQUWgQUWgUUWgUUWgQUWgQUWgUUWgUUWgQUWgQUWgUUWgVUWgRUWgRUWgVUWg/aU63CzNRUWgVUWgVUWgRUWgRUWgVUWgVUWgRUWgRUWgVUWgVUWgRUWgRUWgVUWgVUWgRUWgRUWgVUWgVUWgRUWgRUWgVUWgVUWgRUWgRUWgVUWgVUWgRUWgRUWgVUWgVUWgRUWgRUWgVUWgVUWgRUWgRUWgVUWgVUWgRUWgRUWgVUWgVUWgRUWgRUWgVUWgVUWgRUWgRUWgVUWgVUWgRUWgRUWgVUWgVUWgRUWgRUWgVUWgVUWgRUWgRUWgVUWgVUWgRUWgRUWgVUWgVUWgRUWgRUWgVUWgVUWgRUWgRUWgVUWgVUWgRUWgRUWgVUWgVUWgRUWgRUWgVUWgVUWgRUWgRUWgVUWg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Ah1UBDqoCHRUEeioItBBRaCDikBHFYGOKgIdVAQ6qAh0VBHoqCLQQUWgg4pARxWBjioCHVQEOqgIdFQR6Kgi0EFFoIOKQEcVgY4qAh1UBDqoCHRUEeioItBBRaCDikBHFYGOKgIdVAQ6qAh0VBHoqCLQQUWgg4pARxWBjioCHVQEOqgIdFQR6Kgi0EFFoIOKQEcVgY4qAh1UBDqoCHRUEeiqItBFRaCLikBXFYHuL9XhZmleVAS6qgh0VRHooiLQRUWgq4pAVxWBLioCXVQEuqoIdFUR6KIi0EVFoKuKQFcVgS4qAl1UBLqqCHRVEeiiItBFRaCrikBXFYEuKgJdVAS6qgh0VRHooiLQRUWgq4pAVxWBLioCXVQEuqoIdFUR6KIi0EVFoKuKQFcVgS4qAl1UBLqqCHRVEeiiItBFRaCrikBXFYEuKgJdVAS6qgh0VRHooiLQRUWgq4pAVxWBLioCXVQEuqoIdFUR6KIi0EVFoKuKQFcVgS4qAl1UBLqqCHRVEeiiItBFRaCrikBXFYEuKgJdVAS6qgh0VRHooiLQRUWgq4pAVxWBLioCXVQEuqoIdFUR6KIi0EVFoKuKQFcVgS4qAl1UBLqqCHRVEeiiItBFRaCrikChikCBikCBikChikDxS3W4WZqBikChikChikCBikCBikChikChikCBikCBikChikChikCBikCBikChikChikCBikCBikChikChikCBikCBikChikChikCBikCBikChikChikCBikCBikChikChikCBikCBikChikChikCBikCBikChikChikCBikCBikChikChikCBikCBikChikChikCBikCBikChikChikCBikCBikChikChikCBikCBikChikChikCBikCBikChikChikCBikCBikChikChikCBikCBikChikChikCBikCBikChikChikCBikCBikChikChikCBikCBikChikChikCBikCBikChikChikCBikCBikChikChikCBikCBikChikCpikCJikCJikCpikD5S3W4WZqJikCpikCpikCJikCJikCpikCpikCJikCJikCpikCpikCJikCJikCpikCpikCJikCJikCpikCpikCJikCJikCpikCpikCJikCJikCpikCpikCJikCJikCpikCpikCJikCJikCpikCpikCJikCJikCpikCpikCJikCJikCpikCpikCJikCJikCpikCpikCJikCJikCpikCpikCJikCJikCpikCpikCJikCJikCpikCpikCJikCJikCpikCpikCJikCJikCpikCpikCJikCJikCpikCpikCJikCJikCpikCpikCJikCJikCpikCpikCJikCJikCpikCpikCJikCJikCpikCpikCJikCJikCpikCpikCJikCJikCpikClikCFikCFikClikD1S3W4WZqFikClikClikCFikCFikClikClikCFikCFikClikClikCFikCFikClikClikCFikCFikClikClikCFikCFikClikClikCFikCFikClikClikCFikCFikClikClikCFikCFikClikClikCFikCFikClikClikCFikCFikClikClikCFikCFikClikClikCFikCFikClikClikCFikCFikClikClikCFikCFikClikClikCFikCFikClikClikCFikCFikClikClikCFikCFikClikClikCFikCFikClikClikCFikCFikClikClikCFikCFikClikClikCFikCFikClikClikCFikCFikClikClikCFikCFikClikBPFYEeKgI9VAR6qgj0fqkON0vzoSLQU0Wgp4pADxWBHioCPVUEeqoI9FAR6KEi0FNFoKeKQA8VgR4qAj1VBHqqCPRQEeihItBTRaCnikAPFYEeKgI9VQR6qgj0UBHooSLQU0Wgp4pADxWBHioCPVUEeqoI9FAR6KEi0FNFoKeKQA8VgR4qAj1VBHqqCPRQEeihItBTRaCnikAPFYEeKgI9VQR6qgj0UBHooSLQU0Wgp4pADxWBHioCPVUEeqoI9FAR6KEi0FNFoKeKQA8VgR4qAj1VBHqqCPRQEeihItBTRaCnikAPFYEeKgI9VQR6qgj0UBHooSLQU0Wgp4pADxWBHioCPVUEeqoI9FAR6KEi0FNFoKeKQA8VgR4qAj1VBHqqCPRQEeihItBTRaCnikAPFYEeKgI9VQRqVQRqVARqVARqVQTqX6rDzdJsVARqVQRqVQRqVARqVARqVQRqVQRqVARqVARqVQRqVQRqVARqVARqVQRqVQRqVARqVARqVQRqVQRqVARqVARqVQRqVQRqVARqVARqVQRqVQRqVARqVARqVQRqVQRqVARqVARqVQRqVQRqVARqVARqVQRqVQRqVARqVARqVQRqVQRqVARqVARqVQRqVQRqVARqVARqVQRqVQRqVARqVARqVQRqVQRqVARqVARqVQRqVQRqVARqVARqVQRqVQRqVARqVARqVQRqVQRqVARqVARqVQRqVQRqVARqVARqVQRqVQRqVARqVARqVQRqVQRqVARqVARqVQRqVQRqVARqVARqVQRqVQRqVARqVARqVQRqVQRqVARqVARqVQQaVQQaVAQaVAQaVQSaX6rDzdIcVAQaVQQaVQQaVAQaVAQaVQQaVQQaVAQaVAQaVQQaVQQaVAQaVAQaVQQaVQQaVAQaVAQaVQQaVQQaVAQaVAQaVQQaVQQaVAQaVAQaVQQaVQQaVAQaVAQaVQQaVQQaVAQaVAQaVQQaVQQaVAQaVAQaVQQaVQQaVAQaVAQaVQQaVQQaVAQaVAQaVQQaVQQaVAQaVAQaVQQaVQQaVAQaVAQaVQQaVQQaVAQaVAQaVQQaVQQaVAQaVAQaVQQaVQQaVAQaVAQaVQQaVQQaVAQaVAQaVQQaVQQaVAQaVAQaVQQaVQQaVAQaVAQaVQQaVQQaVAQaVAQaVQQaVQQaVAQaVAQaVQQaVQQaVAQaVAQaVQQaVQQaVAQaVAQaVQRaVQRaVARaVARaVQTaX6rDzdJcVARaVQRaVQRaVARaVARaVQRaVQRaVARaVARaVQRaVQRaVARaVARaVQRaVQRaVARaVARaVQRaVQRaVARaVARaVQRaVQRaVARaVARaVQRaVQRaVARaVARaVQRaVQRaVARaVARaVQRaVQRaVARaVARaVQRaVQRaVARaVARaVQRaVQRaVARaVARaVQRaVQRaVARaVARaVQRaVQRaVARaVARaVQRaVQRaVARaVARaVQRaVQRaVARaVARaVQRaVQRaVARaVARaVQRaVQRaVARaVARaVQRaVQRaVARaVARaVQRaVQRaVARaVARaVQRaVQRaVARaVARaVQRaVQRaVARaVARaVQRaVQRaVARaVARaVQRaVQRaVARaVARaVATKHyoCfcPJ0vx2k6X57TZL8xue6nCyNL/dZGl+u83S/IabpfkNJ0szf6YI9O02S/MbbpbmN5wszW93orvN0vyGm6X5DSdL89tNlua3Wy1NVAT6hqOlaYpA3261NFER6BuOlqYpAn271dJERaBvOFqapgj07VZLExWBvuFoaZoi0LdbLU1UBPqGo6VpikDfbrU0URHoG46WpikCfbvV0kRFoG84WpqmCPTtVksTFYG+4WhpmiLQt1stTVQE+oajpWmKQN9utTRREegbjpamKQJ9u9XSREWgbzhamqYI9O1WSxMVgb7haGmaItC3Wy1NVAT6hqOlaYpA3261NFER6BuOlqYpAn271dJERaBvOFqapgj07VZLExWBvuFoaZoi0LdbLU1UBPqGo6VpikDfbrU0URHoG46WpikCfbvV0kRFoG84WpqmCPTtVksTFYG+4WhpmiLQtxstzaOKQAcVgQ4qAh1VBDq/VIebpXlQEeioItBRRaCDikAHFYGOKgIdVQQ6qAh0UBHoqCLQUUWgg4pABxWBjioCHVUEOqgIdFAR6Kgi0FFFoIOKQAcVgY4qAh1VBDqoCHRQEeioItBRRaCDikAHFYGOKgIdVQQ6qAh0UBHoqCLQUUWgg4pABxWBjioCHVUEOqgIdFAR6Kgi0FFFoIOKQAcVgY4qAh1VBDqoCHRQEeioItBRRaCDikAHFYGOKgIdVQQ6qAh0UBHoqCLQUUWgg4pABxWBjioCHVUEOqgIdFAR6Kgi0FFFoIOKQAcVgY4qAh1VBDqoCHRQEeioItBRRaCDikAHFYGOKgIdVQQ6qAh0UBHoqCLQUUWgg4pABxWBjioCHVUEOqgIdFAR6Kgi0FFFoIOKQAcVgY4qAl1VBLqoCHRREeiqItD9pTrcLM2LikBXFYGuKgJdVAS6qAh0VRHoqiLQRUWgi4pAVxWBrioCXVQEuqgIdFUR6Koi0EVFoIuKQFcVga4qAl1UBLqoCHRVEeiqItBFRaCLikBXFYGuKgJdVAS6qAh0VRHoqiLQRUWgi4pAVxWBrioCXVQEuqgIdFUR6Koi0EVFoIuKQFcVga4qAl1UBLqoCHRVEeiqItBFRaCLikBXFYGuKgJdVAS6qAh0VRHoqiLQRUWgi4pAVxWBrioCXVQEuqgIdFUR6Koi0EVFoIuKQFcVga4qAl1UBLqoCHRVEeiqItBFRaCLikBXFYGuKgJdVAS6qAh0VRHoqiLQRUWgi4pAVxWBrioCXVQEuqgIdFUR6Koi0EVFoIuKQFcVga4qAl1UBLqoCHRVEShUEShQEShQEShUESh+qQ43SzNQEShUEShUEShQEShQEShUEShUEShQEShQEShUEShUEShQEShQEShUEShUEShQEShQEShUEShUEShQEShQEShUEShUEShQEShQEShUEShUEShQEShQEShUEShUEShQEShQEShUEShUEShQEShQEShUEShUEShQEShQEShUEShUEShQEShQEShUEShUEShQEShQEShUEShUEShQEShQEShUEShUEShQEShQEShUEShUEShQEShQEShUEShUEShQEShQEShUEShUEShQEShQEShUEShUEShQEShQEShUEShUEShQEShQEShUEShUEShQEShQEShUEShUEShQEShQEShUEShUEShQEShQEShUEShUEShQEShQEShUEShVEShREShREShVESh/qQ43SzNREShVEShVEShREShREShVEShVEShREShREShVEShVEShREShREShVEShVEShREShREShVEShVEShREShREShVEShVEShREShREShVEShVEShREShREShVEShVEShREShREShVEShVEShREShREShVEShVEShREShREShVEShVEShREShREShVEShVEShREShREShVEShVEShREShREShVEShVEShREShREShVEShVEShREShREShVEShVEShREShREShVEShVEShREShREShVEShVEShREShREShVEShVEShREShREShVEShVEShREShREShVEShVEShREShREShVEShVEShREShREShVEShVEShREShREShVEahUEahQEahQEahUEah+qQ43S7NQEahUEahUEahQEahQEahUEahUEahQEahQEahUEahUEahQEahQEahUEahUEahQEahQEahUEahUEahQEahQEahUEahUEahQEahQEahUEahUEahQEahQEahUEahUEahQEahQEahUEahUEahQEahQEahUEahUEahQEahQEahUEahUEahQEahQEahUEahUEahQEahQEahUEahUEahQEahQEahUEahUEahQEahQEahUEahUEahQEahQEahUEahUEahQEahQEahUEahUEahQEahQEahUEahUEahQEahQEahUEahUEahQEahQEahUEahUEahQEahQEahUEahUEahQEahQEahUEahUEahQEahQEahUEahUEahQEahQEahUEeipItBDRaCHikBPFYHeL9XhZmk+VAR6qgj0VBHooSLQQ0Wgp4pATxWBHioCPVQEeqoI9FQR6KEi0ENFoKeKQE8VgR4qAj1UBHqqCPRUEeihItBDRaCnikBPFYEeKgI9VAR6qgj0VBHooSLQQ0Wgp4pATxWBHioCPVQEeqoI9FQR6KEi0ENFoKeKQE8VgR4qAj1UBHqqCPRUEeihItBDRaCnikBPFYEeKgI9VAR6qgj0VBHooSLQQ0Wgp4pATxWBHioCPVQEeqoI9FQR6KEi0ENFoKeKQE8VgR4qAj1UBHqqCPRUEeihItBDRaCnikBPFYEeKgI9VAR6qgj0VBHooSLQQ0Wgp4pATxWBHioCPVQEeqoI9FQR6KEi0ENFoKeKQE8VgR4qAj1UBHqqCPRUEeihItBDRaCnikCtikCNikCNikCtikD9S3W4WZqNikCtikCtikCNikCNikCtikCtikCNikCNikCtikCtikCNikCNikCtikCtikCNikCNikCtikCtikCNikCNikCtikCtikCNikCNikCtikCtikCNikCNikCtikCtikCNikCNikCtikCtikCNikCNikCtikCtikCNikCNikCtikCtikCNikCNikCtikCtikCNikCNikCtikCtikCNikCNikCtikCtikCNikCNikCtikCtikCNikCNikCtikCtikCNikCNikCtikCtikCNikCNikCtikCtikCNikCNikCtikCtikCNikCNikCtikCtikCNikCNikCtikCtikCNikCNikCtikCtikCNikCNikCtikCtikCNikCNikCtikCjikCDikCDikCjikDzS3W4WZqDikCjikCjikCDikCDikCjikCjikCDikCDikCjikCjikCDikCDikCjikCjikCDikCDikCjikCjikCDikCDikCjikCjikCDikCDikCjikCjikCDikCDikCjikCjikCDikCDikCjikCjikCDikCDikCjikCjikCDikCDikCjikCjikCDikCDikCjikCjikCDikCDikCjikCjikCDikCDikCjikCjikCDikCDikCjikCjikCDikCDikCjikCjikCDikCDikCjikCjikCDikCDikCjikCjikCDikCDikCjikCjikCDikCDikCjikCjikCDikCDikCjikCjikCDikCDikCjikCjikCDikCDikCjikCjikCDikCDikCjikCrikCLikCLikCrikD7S3W4WZqLikCrikCrikCLikCLikCrikCrikCLikCLikCrikCrikCLikCLikCrikCrikCLikCLikCrikCrikCLikCLikCrikCrikCLikCLikCrikCrikCLikCLikCrikCrikCLikCLikCrikCrikCLikCLikCrikCrikCLikCLikCrikCrikCLikCLikCrikCrikCLikCLikCrikCrikCLikCLikCrikCrikCLikCLikCrikCrikCLikCLikCrikCrikCLikCLikCrikCrikCLikCLikCrikCrikCLikCLikCrikCrikCLikCLikCrikCrikCLikCLikCrikCrikCLikCLikCrikCrikCLikCLikCrikCrikCLikCLikCLikD1Q0WgbzhZmt9usjS/3WZpfsNTHU6W5rebLM1vt1ma33CzNL/hZGnWzxSBvt1maX7DzdL8hpOl+e1OdLdZmt9wszS/4WRpfrvJ0vx2q6WJikDfcLQ0TRHo262WJioCfcPR0jRFoG+3WpqoCPQNR0vTFIG+3WppoiLQNxwtTVME+narpYmKQN9wtDRNEejbrZYmKgJ9w9HSNEWgb7damqgI9A1HS9MUgb7dammiItA3HC1NUwT6dquliYpA33C0NE0R6NutliYqAn3D0dI0RaBvt1qaqAj0DUdL0xSBvt1qaaIi0DccLU1TBPp2q6WJikDfcLQ0TRHo262WJioCfcPR0jRFoG+3WpqoCPQNR0vTFIG+3WppoiLQNxwtTVME+narpYmKQN9wtDRNEejbrZYmKgJ9w9HSNEWg7z3V0kRFoO9N0dI0RaDvPdXSREWg703R0jRFoO890dI8qgh0UBHooCLQUUWg80t1uFmaBxWBjioCHVUEOqgIdFAR6Kgi0FFFoIOKQAcVgY4qAh1VBDqoCHRQEeioItBRRaCDikAHFYGOKgIdVQQ6qAh0UBHoqCLQUUWgg4pABxWBjioCHVUEOqgIdFAR6Kgi0FFFoIOKQAcVgY4qAh1VBDqoCHRQEeioItBRRaCDikAHFYGOKgIdVQQ6qAh0UBHoqCLQUUWgg4pABxWBjioCHVUEOqgIdFAR6Kgi0FFFoIOKQAcVgY4qAh1VBDqoCHRQEeioItBRRaCDikAHFYGOKgIdVQQ6qAh0UBHoqCLQUUWgg4pABxWBjioCHVUEOqgIdFAR6Kgi0FFFoIOKQAcVgY4qAh1VBDqoCHRQEeioItBRRaCDikAHFYGOKgIdVQQ6qAh0UBHoqCLQVUWgi4pAFxWBrioC3V+qw83SvKgIdFUR6Koi0EVFoIuKQFcVga4qAl1UBLqoCHRVEeiqItBFRaCLikBXFYGuKgJdVAS6qAh0VRHoqiLQRUWgi4pAVxWBrioCXVQEuqgIdFUR6Koi0EVFoIuKQFcVga4qAl1UBLqoCHRVEeiqItBFRaCLikBXFYGuKgJdVAS6qAh0VRHoqiLQRUWgi4pAVxWBrioCXVQEuqgIdFUR6Koi0EVFoIuKQFcVga4qAl1UBLqoCHRVEeiqItBFRaCLikBXFYGuKgJdVAS6qAh0VRHoqiLQRUWgi4pAVxWBrioCXVQEuqgIdFUR6Koi0EVFoIuKQFcVga4qAl1UBLqoCHRVEeiqItBFRaCLikBXFYGuKgJdVAS6qAh0VRHoqiLQRUWgi4pAVxWBQhWBAhWBAhWBQhWB4pfqcLM0AxWBQhWBQhWBAhWBAhWBQhWBQhWBAhWBAhWBQhWBQhWBAhWBAhWBQhWBQhWBAhWBAhWBQhWBQhWBAhWBAhWBQhWBQhWBAhWBAhWBQhWBQhWBAhWBAhWBQhWBQhWBAhWBAhWBQhWBQhWBAhWBAhWBQhWBQhWBAhWBAhWBQhWBQhWBAhWBAhWBQhWBQhWBAhWBAhWBQhWBQhWBAhWBAhWBQhWBQhWBAhWBAhWBQhWBQhWBAhWBAhWBQhWBQhWBAhWBAhWBQhWBQhWBAhWBAhWBQhWBQhWBAhWBAhWBQhWBQhWBAhWBAhWBQhWBQhWBAhWBAhWBQhWBQhWBAhWBAhWBQhWBQhWBAhWBAhWBQhWBQhWBAhWBAhWBQhWBUhWBEhWBEhWBUhWB8pfqcLM0ExWBUhWBUhWBEhWBEhWBUhWBUhWBEhWBEhWBUhWBUhWBEhWBEhWBUhWBUhWBEhWBEhWBUhWBUhWBEhWBEhWBUhWBUhWBEhWBEhWBUhWBUhWBEhWBEhWBUhWBUhWBEhWBEhWBUhWBUhWBEhWBEhWBUhWBUhWBEhWBEhWBUhWBUhWBEhWBEhWBUhWBUhWBEhWBEhWBUhWBUhWBEhWBEhWBUhWBUhWBEhWBEhWBUhWBUhWBEhWBEhWBUhWBUhWBEhWBEhWBUhWBUhWBEhWBEhWBUhWBUhWBEhWBEhWBUhWBUhWBEhWBEhWBUhWBUhWBEhWBEhWBUhWBUhWBEhWBEhWBUhWBUhWBEhWBEhWBUhWBUhWBEhWBEhWBUhWBShWBChWBChWBShWB6pfqcLM0CxWBShWBShWBChWBChWBShWBShWBChWBChWBShWBShWBChWBChWBShWBShWBChWBChWBShWBShWBChWBChWBShWBShWBChWBChWBShWBShWBChWBChWBShWBShWBChWBChWBShWBShWBChWBChWBShWBShWBChWBChWBShWBShWBChWBChWBShWBShWBChWBChWBShWBShWBChWBChWBShWBShWBChWBChWBShWBShWBChWBChWBShWBShWBChWBChWBShWBShWBChWBChWBShWBShWBChWBChWBShWBShWBChWBChWBShWBShWBChWBChWBShWBShWBChWBChWBShWBShWBChWBChWBShWBShWBChWBChWBShWBnioCPVQEeqgI9FQR6P1SHW6W5kNFoKeKQE8VgR4qAj1UBHqqCPRUEeihItBDRaCnikBPFYEeKgI9VAR6qgj0VBHooSLQQ0Wgp4pATxWBHioCPVQEeqoI9FQR6KEi0ENFoKeKQE8VgR4qAj1UBHqqCPRUEeihItBDRaCnikBPFYEeKgI9VAR6qgj0VBHooSLQQ0Wgp4pATxWBHioCPVQEeqoI9FQR6KEi0ENFoKeKQE8VgR4qAj1UBHqqCPRUEeihItBDRaCnikBPFYEeKgI9VAR6qgj0VBHooSLQQ0Wgp4pATxWBHioCPVQEeqoI9FQR6KEi0ENFoKeKQE8VgR4qAj1UBHqqCPRUEeihItBDRaCnikBPFYEeKgI9VAR6qgj0VBHooSLQQ0Wgp4pATxWBHioCPVQEeqoI1KoI1KgI1KgI1KoI1L9Uh5ul2agI1KoI1KoI1KgI1KgI1KoI1KoI1KgI1KgI1KoI1KoI1KgI1KgI1KoI1KoI1KgI1KgI1KoI1KoI1KgI1KgI1KoI1KoI1KgI1KgI1KoI1KoI1KgI1KgI1KoI1KoI1KgI1KgI1KoI1KoI1KgI1KgI1KoI1KoI1KgI1KgI1KoI1KoI1KgI1KgI1KoI1KoI1KgI1KgI1KoI1KoI1KgI1KgI1KoI1KoI1KgI1KgI1KoI1KoI1KgI1KgI1KoI1KoI1KgI1KgI1KoI1KoI1KgI1KgI1KoI1KoI1KgI1KgI1KoI1KoI1KgI1KgI1KoI1KoI1KgI1KgI1KoI1KoI1KgI1KgI1KoI1KoI1KgI1KgI1KoI1KoI1KgI1KgI1KoINKoINKgINKgINKoINL9Uh5ulOagINKoINKoINKgINKgINKoINKoINKgINKgINKoINKoINKgINKgINKoINKoINKgINKgINKoINKoINKgINKgINKoINKoINKgINKgINKoINKoINKgINKgINKoINKoINKgINKgINKoINKoINKgINKgINKoINKoINKgINKgINKoINKoINKgINKgINKoINKoINKgINKgINKoINKoINKgINKgINKoINKoINKgINKgINKoINKoINKgINKgINKoINKoINKgINKgINKoINKoINKgINKgINKoINKoINKgINKgINKoINKoINKgINKgINKoINKoINKgINKgINKoINKoINKgINKgINKoINKoINKgINKgINKoINKoINKgINKgINKoItKoItKgItKgItKoItL9Uh5uluagItKoItKoItKgItKgItKoItKoItKgItKgItKoItKoItKgItKgItKoItKoItKgItKgItKoItKoItKgItKgItKoItKoItKgItKgItKoItKoItKgItKgItKoItKoItKgItKgItKoItKoItKgItKgItKoItKoItKgItKgItKoItKoItKgItKgItKoItKoItKgItKgItKoItKoItKgItKgItKoItKoItKgItKgItKoItKoItKgItKgItKoItKoItKgItKgItKoItKoItKgItKgItKoItKoItKgItKgItKoItKoItKgItKgItKoItKoItKgItKgItKoItKoItKgItKgItKoItKoItKgItKgItKoItKoItKgItKgItKgI9H6oCPQNJ0vz202W5rfbLM1veKrDydL8dpOl+e02S/MbbpbmN5wszfczRaBvt1ma33CzNL/hZGl+uxPdbZbmN9wszW84WZrfbrI0v91qaaIi0DccLU1TBPp2q6WJikDfcLQ0TRHo262WJioCfcPR0jRFoG+3WpqoCPQNR0vTFIG+3WppoiLQNxwtTVME+narpYmKQN9wtDRNEejbrZYmKgJ9w9HSNEWgb7damqgI9A1HS9MUgb7dammiItA3HC1NUwT6dquliYpA33C0NE0R6NutliYqAn3D0dI0RaBvt1qaqAj0DUdL0xSBvt1qaaIi0DccLU1TBPp2q6WJ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Aj1VBHqqCPRQEeihItBTRaCnikAPFYEeKgI9VQR6qgj0UBHooSLQU0Wgp4pADxWBHioCPVUEeqoI9FAR6KEi0FNFoKeKQA8VgR4qAj1VBHqqCPRQEeihItBTRaCnikAPFYEeKgI9VQR6qgj0UBHooSLQU0Wgp4pADxWBHioCPVUEalUEalQEalQEalUE6l+qw83SbFQEalUEalUEalQEalQEalUEalUEalQEalQEalUEalUEalQEalQEalUEalUEalQEalQEalUEalUEalQEalQEalUEalUEalQEalQEalUEalUEalQEalQEalUEalUEalQEalQEalUEalUEalQEalQEalUEalUEalQEalQEalUEalUEalQEalQEalUEalUEalQEalQEalUEalUEalQEalQEalUEalUEalQEalQEalUEalUEalQEalQEalUEalUEalQEalQEalUEalUEalQEalQEalUEalUEalQEalQEalUEalUEalQEalQEalUEalUEalQEalQEalUEalUEalQEalQEalUEalUEalQEalQEalUEalUEalQEalQEalUEGlUEGlQEGlQEGlUEml+qw83SHFQEGlUEGlUEGlQEGlQEGlUEGlUEGlQEGlQEGlUEGlUEGlQEGlQEGlUEGlUEGlQEGlQEGlUEGlUEGlQEGlQEGlUEGlUEGlQEGlQEGlUEGlUEGlQEGlQEGlUEGlUEGlQEGlQEGlUEGlUEGlQEGlQEGlUEGlUEGlQEGlQEGlUEGlUEGlQEGlQEGlUEGlUEGlQEGlQEGlUEGlUEGlQEGlQEGlUEGlUEGlQEGlQEGlUEGlUEGlQEGlQEGlUEGlUEGlQEGlQEGlUEGlUEGlQEGlQEGlUEGlUEGlQEGlQEGlUEGlUEGlQEGlQEGlUEGlUEGlQEGlQEGlUEGlUEGlQEGlQEGlUEGlUEGlQEGlQEGlUEGlUEGlQEGlQEGlUEWlUEWlQEWlQEWlUE2l+qw83SXFQEWlUEWlUEWlQEWlQEWlUEWlUEWlQEWlQEWlUEWlUEWlQEWlQEWlUEWlUEWlQEWlQEWlUEWlUEWlQEWlQEWlUEWlUEWlQEWlQEWlUEWlUEWlQEWlQEWlUEWlUEWlQEWlQEWlUEWlUEWlQEWlQEWlUEWlUEWlQEWlQEWlUEWlUEWlQEWlQEWlUEWlUEWlQEWlQEWlUEWlUEWlQEWlQEWlUEWlUEWlQEWlQEWlUEWlUEWlQEWlQEWlUEWlUEWlQEWlQEWlUEWlUEWlQEWlQEWlUEWlUEWlQEWlQEWlUEWlUEWlQEWlQEWlUEWlUEWlQEWlQEWlUEWlUEWlQEWlQEWlUEWlUEWlQEWlQEWlUEWlUEWlQEWlQEWlQE6h8qAn3DydL8dpOl+e02S/MbnupwsjS/3WRpfrvN0vyGm6X5DSdLs3+mCPTtNkvzG26W5jecLM1vd6K7zdL8hpul+Q0nS/PbTZbmt1stTVQE+oajpWmKQN9utTRREegbjpamKQJ9u9XSREWgbzhamqYI9O1WSxMVgb7haGmaItC3Wy1NVAT6hqOlaYpA3261NFER6BuOlqYpAn271dJERaBvOFqapgj07VZLExWBvuFoaZoi0LdbLU1UBPqGo6VpikDfbrU0URHoG46WpikCfbvV0kRFoG84WpqmCPTtVksTFYG+4WhpmiLQt1stTVQE+oajpWmKQN9utTRREegbjpamKQJ9u9XSREWgbzhamqYI9O1WSxMVgb7haGmaItC3Wy1NVAT6hqOlaYpA3261NFER6BuOlqYpAn271dJERaBvOFqapgj07VZLExWBvuFoaZoi0LcbLc2jikAHFYEOKgIdVQQ6v1SHm6V5UBHoqCLQUUWgg4pABxWBjioCHVUEOqgIdFAR6Kgi0FFFoIOKQAcVgY4qAh1VBDqoCHRQEeioItBRRaCDikAHFYGOKgIdVQQ6qAh0UBHoqCLQUUWgg4pABxWBjioCHVUEOqgIdFAR6Kgi0FFFoIOKQAcVgY4qAh1VBDqoCHRQEeioItBRRaCDikAHFYGOKgIdVQQ6qAh0UBHoqCLQUUWgg4pABxWBjioCHVUEOqgIdFAR6Kgi0FFFoIOKQAcVgY4qAh1VBDqoCHRQEeioItBRRaCDikAHFYGOKgIdVQQ6qAh0UBHoqCLQUUWgg4pABxWBjioCHVUEOqgIdFAR6Kgi0FFFoIOKQAcVgY4qAh1VBDqoCHRQEeioItBRRaCDikAHFYGOKgJdVQS6qAh0URHoqiLQ/aU63CzNi4pAVxWBrioCXVQEuqgIdFUR6Koi0EVFoIuKQFcVga4qAl1UBLqoCHRVEeiqItBFRaCLikBXFYGuKgJdVAS6qAh0VRHoqiLQRUWgi4pAVxWBrioCXVQEuqgIdFUR6Koi0EVFoIuKQFcVga4qAl1UBLqoCHRVEeiqItBFRaCLikBXFYGuKgJdVAS6qAh0VRHoqiLQRUWgi4pAVxWBrioCXVQEuqgIdFUR6Koi0EVFoIuKQFcVga4qAl1UBLqoCHRVEeiqItBFRaCLikBXFYGuKgJdVAS6qAh0VRHoqiLQRUWgi4pAVxWBrioCXVQEuqgIdFUR6Koi0EVFoIuKQFcVga4qAl1UBLqoCHRVEeiqItBFRaCLikBXFYGuKgJdVAS6qAh0VREoVBEoUBEoUBEoVBEofqkON0szUBEoVBEoVBEoUBEoUBEoVBEoVBEoUBEoUBEoVBEoVBEoUBEoUBEoVBEoVBEoUBEoUBEoVBEoVBEoUBEoUBEoVBEoVBEoUBEoUBEoVBEoVBEoUBEoUBEoVBEoVBEoUBEoUBEoVBEoVBEoUBEoUBEoVBEoVBEoUBEoUBEoVBEoVBEoUBEoUBEoVBEoVBEoUBEoUBEoVBEoVBEoUBEoUBEoVBEoVBEoUBEoUBEoVBEoVBEoUBEoUBEoVBEoVBEoUBEoUBEoVBEoVBEoUBEoUBEoVBEoVBEoUBEoUBEoVBEoVBEoUBEoUBEoVBEoVBEoUBEoUBEoVBEoVBEoUBEoUBEoVBEoVBEoUBEoUBEoVBEoVBEoUBEoUBEoVBEoVREoUREoUREoVREof6kON0szUREoVREoVREoUREoUREoVREoVREoUREoUREoVREoVREoUREoUREoVREoVREoUREoUREoVREoVREoUREoUREoVREoVREoUREoUREoVREoVREoUREoUREoVREoVREoUREoUREoVREoVREoUREoUREoVREoVREoUREoUREoVREoVREoUREoUREoVREoVREoUREoUREoVREoVREoUREoUREoVREoVREoUREoUREoVREoVREoUREoUREoVREoVREoUREoUREoVREoVREoUREoUREoVREoVREoUREoUREoVREoVREoUREoUREoVREoVREoUREoUREoVREoVREoUREoUREoVREoVREoUREoUREoVREoVREoUREoUREoVRGoVBGoUBGoUBGoVBGofqkON0uzUBGoVBGoVBGoUBGoUBGoVBGoVBGoUBGoUBGoVBGoVBGoUBGoUBGoVBGoVBGoUBGoUBGoVBGoVBGoUBGoUBGoVBGoVBGoUBGoUBGoVBGoVBGoUBGo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KgI9VAR6qgjUqgjUqAjUqAjUqgjUv1SHm6XZqAjUqgjUqgjUqAjUqAjUqgjUqgjUqAjUqAjUqgjUqgjUqAjUqAjUqgjUqgjUqAjUqAjUqgjUqgjUqAjUqAjUqgjUqgjUqAjUqAjUqgjUqgjUqAjUqAjUqgjUqgjUqAjUqAjUqgjUqgjUqAjUqAjUqgjUqgjUqAjUqAjUqgjUqgjUqAjUqAjUqgjUqgjUqAjUqAjUqgjUqgjUqAjUqAjUqgjUqgjUqAjUqAjUqgjUqgjUqAjUqAjUqgjUqgjUqAjUqAjUqgjUqgjUqAjUqAjUqgjUqgjUqAjUqAjUqgjUqgjUqAjUqAjUqgjUqgjUqAjUqAjUqgjUqgjUqAjUqAjUqgjUqgjUqAjUqAjUqgjUqgjUqAjUqAjUqgg0qgg0qAg0qAg0qgg0v1SHm6U5qAg0qgg0qgg0qAg0qAg0qgg0qgg0qAg0qAg0qgg0qgg0qAg0qAg0qgg0qgg0qAg0qAg0qgg0qgg0qAg0qAg0qgg0qgg0qAg0qAg0qgg0qgg0qAg0qAg0qgg0qgg0qAg0qAg0qgg0qgg0qAg0qAg0qgg0qgg0qAg0qAg0qgg0qgg0qAg0qAg0qgg0qgg0qAg0qAg0qgg0qgg0qAg0qAg0qgg0qgg0qAg0qAg0qgg0qgg0qAg0qAg0qgg0qgg0qAg0qAg0qgg0qgg0qAg0qAg0qgg0qgg0qAg0qAg0qgg0qgg0qAg0qAg0qgg0qgg0qAg0qAg0qgg0qgg0qAg0qAg0qgg0qgg0qAg0qAg0qgg0qgg0qAg0qAg0qgi0qgi0qAi0qAi0qgi0v1SHm6W5qAi0qgi0qgi0qAi0qAi0qgi0qgi0qAi0qAi0qgi0qgi0qAi0qAi0qgi0qgi0qAi0qAi0qgi0qgi0qAi0qAi0qgi0qgi0qAi0qAi0qgi0qgi0qAi0qAi0qgi0qgi0qAi0qAi0qgi0qgi0qAi0qAi0qgi0qgi0qAi0qAi0qgi0qgi0qAi0qAi0qgi0qgi0qAi0qAi0qgi0qgi0qAi0qAi0qgi0qgi0qAi0qAi0qgi0qgi0qAi0qAi0qgi0qgi0qAi0qAi0qgi0qgi0qAi0qAi0qgi0qgi0qAi0qAi0qgi0qgi0qAi0qAi0qgi0qgi0qAi0qAi0qgi0qgi0qAi0qAi0qgi0qgi0qAi0qAi0qgi0qgi0qAi0qAi0qAi0P1QE+oaTpfntJkvz222W5jc81eFkaX67ydL8dpul+Q03S/MbTpbm/kwR6NttluY33CzNbzhZmt/uRHebpfkNN0vzG06W5rebLM1vt1qaqAj0DUdL0xSBvt1qaaIi0DccLU1TBPp2q6WJikDfcLQ0TRHo262WJioCfcPR0jRFoG+3WpqoCPQNR0vTFIG+3WppoiLQNxwtTVME+narpYmKQN9wtDRNEejbrZYmKgJ9w9HSNEWgb7damqgI9A1HS9MUgb7dammiItA3HC1NUwT6dquliYpA33C0NE0R6NutliYqAn3D0dI0RaBvt1qaqAj0DUdL0xSBvt1qaaIi0DccLU1TBPp2q6WJikDfcLQ0TRHo262WJioCfcPR0jRFoG+3WpqoCPQNR0vTFIG+3WppoiLQNxwtTVME+narpYmKQN9wtDRNEejbrZYmKgJ9w9HSNEWgbzdamkcVgQ4qAh1UBDqqCHR+qQ43S/OgItBRRaCjikAHFYEOKgIdVQQ6qgh0UBHooCLQUUWgo4pABxWBDioCHVUEOqoIdFAR6KAi0FFFoKOKQAcVgQ4qAh1VBDqqCHRQEeigItBRRaCjikAHFYEOKgIdVQQ6qgh0UBHooCLQUUWgo4pABxWBDioCHVUEOqoIdFAR6KAi0FFFoKOKQAcVgQ4qAh1VBDqqCHRQEeigItBRRaCjikAHFYEOKgIdVQQ6qgh0UBHooCLQUUWgo4pABxWBDioCHVUEOqoIdFAR6KAi0FFFoKOKQAcVgQ4qAh1VBDqqCHRQEeigItBRRaCjikAHFYEOKgIdVQQ6qgh0UBHooCLQUUWgo4pABxWBDioCHVUEOqoIdFAR6KAi0FFFoKOKQAcVgQ4qAh1VBLqqCHRREeiiItBVRaD7S3W4WZoXFYGuKgJdVQS6qAh0URHoqiLQVUWgi4pAFxWBrioCXVUEuqgIdFER6Koi0FVFoIuKQBcVga4qAl1VBLqoCHRREeiqItBVRaCLikAXFYGuKgJdVQS6qAh0URHoqiLQVUWgi4pAFxWBrioCXVUEuqgIdFER6Koi0FVFoIuKQBcVga4qAl1VBLqoCHRREeiqItBVRaCLikAXFYGuKgJdVQS6qAh0URHoqiLQVUWgi4pAFxWBrioCXVUEuqgIdFER6Koi0FVFoIuKQBcVga4qAl1VBLqoCHRREeiqItBVRaCLikAXFYGuKgJdVQS6qAh0URHoqiLQVUWgi4pAFxWBrioCXVUEuqgIdFER6Koi0FVFoIuKQBcVga4qAl1VBLqoCHRREeiqIlCoIlCgIlCgIlCoIlD8Uh1ulmagIlCoIlCoIlCgIlCgIlCoIlCoIlCgIlCgIlCoIlCoIlCgIlCgIlCoIlCoIlCgIlCgIlCoIlCoIlCgIlCgIlCoIlCoIlCgIlCgIlCoIlCoIlCgIlCgIlCoIlCoIlCgIlCgIlCoIlCoIlCgIlCgIlCoIlCoIlCgIlCgIlCoIlCoIlCgIlCgIlCoIlCoIlCgIlCgIlCoIlCoIlCgIlCgIlCoIlCoIlCgIlCgIlCoIlCoIlCgIlCgIlCoIlCoIlCgIlCgIlCoIlCoIlCgIlCgIlCoIlCoIlCgIlCgIlCoIlCoIlCgIlCgIlCoIlCoIlCgIlCgIlCoIlCoIlCgIlCgIlCoIlCoIlCgIlCgIlCoIlCoIlCgIlCgIlCoIlCqIlCiIlCiIlCqIlD+Uh1ulmaiIlCqIlCqIlCiIlCiIlCqIlCqIlCiIlCiIlCqIlCqIlCiIlCiIlCqIlCqIlCiIlCiIlCqIlCqIlCiIlCiIlCqIlCqIlCiIlCiIlCqIlCqIlCiIlCiIlCqIlCqIlCiIlCiIlCqIlCqIlCiIlCiIlCqIlCqIlCiIlCiIlCqIlCqIlCiIlCiIlCqIlCqIlCiIlCiIlCqIlCqIlCiIlCiIlCqIlCqIlCiIlCiIlCqIlCqIlCiIlCiIlCqIlCqIlCiIlCiIlCqIlCqIlCiIlCiIlCqIlCqIlCiIlCiIlCqIlCqIlCiIlCiIlCqIlCqIlCiIlCiIlCqIlCqIlCiIlCiIlCqIlCqIlCiIlCiIlCqIlCqIlCiIlCiIlCqIlCpIlChIlChIlCpIlD9Uh1ulmahIlCpIlCpIlChIlChIlCpIlCpIlChIlChIlCpIlCpIlChIlChIlCpIlCpIlChIlChIlCpIlCpIlChIlChIlCpIlCpIlChIlChIlCpIlCpIlChIlChIlCpIlCpIlChIlChIlCpIlCpIlChIlChIlCpIlCpIlChIlChIlCpIlCpIlChIlChIlCpIlCpIlChIlChIlCpIlCpIlChIlChIlCpIlCpIlChIlChIlCpIlCpIlChIlChIlCpIlCpIlChIlChIlCpIlCpIlChIlCh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qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg51sfXJqkOtqkOtqkPNqkPNqkOtqkOtqkPNqkPNqkOtqkOtqkPNqkPNqkOtqkOtqkPNqkPNqkOtqkOtqkPNqkPNqkOtqkOtqkPNqkPNqkOtqkOtqkPNqkPNqkOtqkOtqkPNqkPNqkOtqkOtqkPNqkPNqkOtqkOtqkPNqkPDqkOjqkOjqkPDqkPzS3Y5Wp+jqkPDqkPDqkOjqkOjqkPDqkPDqkOjqkOjqkPDqkPDqkOjqkOjqkPDqkPDqkOjqkOjqkPDqkPDqkOjqkOjqkPDqkPDqkOjqkOjqkPDqkPDqkOjqkOjqkPDqkPDqkOjqkOjqkPDqkPDqkOjqkOjqkPDqkPDqkOjqkOjqkPDqkPDqkOjqkOjqkPDqkPDqkOjqkOjqkPDqkPDqkOjqkOjqkPDqkPDqkOjqkOjqkPDqkPDqkOjqkOjqkPDqkPDqkOjqkOjqkPDqkPDqkOjqkOjqkPDqkPDqkOjqkOjqkPDqkPDqkOjqkOjqkPDqkPDqkOjqkOjqkPDqkPDqkOjqkOjqkPDqkPDqkOjqkOjqkPDqkPDqkOjqkOjqkPDqkPLqkOrqkOrqkPLqkP7S3Y5Wp+rqkPLqkPLqkOrqkOrqkPLqkPLqkOrqkOrqkPLqkPLqkOrqkOrqkPLqkPLqkOrqkOrqkPLqkPLqkOrqkOrqkPLqkPLqkOrqkOrqkPLqkPLqkOrqkOrqkPLqkPLqkOrqkOrqkPLqkPLqkOrqkOrqkPLqkPLqkOrqkOrqkPLqkPLqkOrqkOrqkPLqkPLqkOrqkOrqkPLqkPLqkOrqkOrqkPLqkPLqkOrqkOrqkPLqkPLqkOrqkOrqkPLqkPLqkOrqkOrqkPLqkPLqkOrqkOrqkPLqkPLqkOrqkOrqkPLqkPLqkOrqkOrqkPLqkPLqkOrqkOrqkPLqkPLqkOrqkOrqkPLqkPLqkOrqkOrqkPLqkPLqkOrqkOrqkOrqkPfB0fr81tu1ud33KzP7zhan9/yZJeb9fkdN+vzO47W57ccrc9vuVmf54eqQ99wtD6/5Wh9fsvN+vyGpzocrc9vOVqf33KzPr/hZn1+w9n6VNWh75XU+kTVoW84W5+qOvS9klqfqDr0992xd4WtT1QdOj9UHfqGs/WpqkPfcrU+UXXoG87Wp6oOfcvV+kTVoW84W5+qOvQtV+sTVYe+4Wx9qurQt1ytT1Qd+oaz9amqQ99ytT5Rdegbztanqg59y9X6RNWhbzhbn6o69C1X6xNVh77hbH2q6tC3XK1PVB36hrP1qapD33K1PlF16BvO1qeqDn3L1fpE1aFvOFufqjr0HVfrE1WH/r4w9q6w9YmqQ99wtT5Vdej8VHXoW67WJ6oOfcPZ+lTVoW+5Wp+oOvQNZ+tTVYe+5Wp9ourQ348oV++Kqg79/WA+9bKkOpytT1Ud+iNY1cui1ierDh1WHTqqOnRUdeiw6tD5Jbscrc+jqkOHVYcOqw4dVR06qjp0WHXosOrQUdWho6pDh1WHDqsOHVUdOqo6dFh16LDq0FHVoaOqQ4dVhw6rDh1VHTqqOnRYdeiw6tBR1aGjqkOHVYcOqw4dVR06qjp0WHXosOrQUdWho6pDh1WHDqsOHVUdOqo6dFh16LDq0FHVoaOqQ4dVhw6rDh1VHTqqOnRYdeiw6tBR1aGjqkOHVYcOqw4dVR06qjp0WHXosOrQUdWho6pDh1WHDqsOHVUdOqo6dFh16LDq0FHVoaOqQ4dVhw6rDh1VHTqqOnRYdeiw6tBR1aGjqkOHVYcOqw4dVR06qjp0WHXosOrQUdWho6pDh1WHDqsOHVUdOqo6dFh16LDq0FHVoaOqQ4dVhw6rDh1VHTqqOnRYdeiy6tBV1aGrqkOXVYfuL9nlaH1eVR26rDp0WXXoqurQVdWhy6pDl1WHrqoOXVUduqw6dFl16Krq0FXVocuqQ5dVh66qDl1VHbqsOnRZdeiq6tBV1aHLqkOXVYeuqg5dVR26rDp0WXXoqurQVdWhy6pDl1WHrqoOXVUduqw6dFl16Krq0FXVocuqQ5dVh66qDl1VHbqsOnRZdeiq6tBV1aHLqkOXVYeuqg5dVR26rDp0WXXoqurQVdWhy6pDl1WHrqoOXVUduqw6dFl16Krq0FXVocuqQ5dVh66qDl1VHbqsOnRZdeiq6tBV1aHLqkOXVYeuqg5dVR26rDp0WXXoqurQVdWhy6pDl1WHrqoOXVUduqw6dFl16Krq0FXVocuqQ5dVh66qDl1VHbqsOnRZdeiq6tBV1aHLqkPBqkOhqkOhqkPBqkPxS3Y5Wp+hqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPJqkOpqkOpqkPJqkP5S3Y5Wp+pqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPFqkOlqkOlqkPFqkP1S3Y5Wp+lqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkOPVYeeqg49VR16rDr0fskuR+vzqerQY9Whx6pDT1WHnqoOPVYdeqw69FR1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dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRZdeiq6tBV1aHLqkP3l+xytD6vqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aFg1aFQ1aFQ1aFg1aH4Jbscrc9Q1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFk1aFU1aFU1aFk1aH8Jbscrc9U1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk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qerQY9Whx6pDT1WHnqoOPVYdeqw69FR16Knq0GPVoceqQ09Vh56qDj1WHXqsOvRUdeip6tBj1aHHqkNPVYeeqg49Vh16rDr0VHXoqerQY9Whx6pDT1WHnqoOPVYdeqw69FR16Knq0GPVoceqQ09Vh56qDj1WHXqsOvRUdeip6tBj1aFm1aFW1aFW1aFm1aH+Jbscrc9W1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFh1aFR1aFR1aFh1aH5Jbscrc9R1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFl1aFV1aFV1aFl1aH9Jbscrc9V1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl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sOpQsepQqepQqepQsepQ/YpdjtZnqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQserQZdWhq6pDV1WHLqsO3V+xy9H6vKo6dFl16LLq0FXVoauqQ5dVhy6rDl1VHbqqOnRZdeiy6tBV1aGrqkOXVYcuqw5dVR26qjp0WXXosurQVdWhq6pDl1WHLqsOXVUduqo6dFl16LLq0FXVoauqQ5dVhy6rDl1VHbqqOnRZdeiy6tBV1aGrqkOXVYcuqw5dVR26qjp0WXXosurQVdWhq6pDl1WHLqsOXVUduqo6dFl16LLq0FXVoauqQ5dVhy6rDl1VHbqqOnRZdeiy6tBV1aGrqkOXVYcuqw5dVR26qjp0WXXosurQVdWhq6pDl1WHLqsOXVUduqo6dFl16LLq0FXVoauqQ5dVhy6rDl1VHbqqOnRZdeiy6tBV1aGrqkOXVYcuqw5dVR26qjp0WXXosurQVdWhq6pDl1WHHqsOPVUdeqo69Fh16P2KXY7W51PVoceqQ49Vh56qDj1VHXqsOvRYdeip6tBT1aHHqkOPVYeeqg49VR16rDr0WHXoqerQU9Whx6pDj1WHnqoOPVUdeqw69Fh16Knq0FPVoceqQ49Vh56qDj1VHXqsOvRYdeip6tBT1aHHqkOPVYeeqg49VR16rDr0WHXoqerQU9Whx6pDj1WHnqoOPVUdeqw69Fh16Knq0FPVoceqQ49Vh56qDj1VHXqsOvRYdeip6tBT1aHHqkOPVYeeqg49VR16rDr0WHXoqerQU9Whx6pDj1WHnqoOPVUdeqw69Fh16Knq0FPVoceqQ49Vh56qDj1VHXqsOvRYdeip6tBT1aHHqkOPVYeeqg49VR16rDr0WHXoqerQU9Whx6pDj1WHnqoOPVUdeqw61Kw61Ko61Ko61Kw61L9il6P12ao61Kw61Kw61Ko61Ko61Kw61Kw61Ko61Ko61Kw61Kw61Ko61Ko61Kw61Kw61Ko61Ko61Kw61Kw61Ko61Ko61Kw61Kw61Ko61Ko61Kw61Kw61Ko61Ko61Kw61Kw61Ko61Ko61Kw61Kw61Ko61Ko61Kw61Kw61Ko61Ko61Kw61Kw61Ko61Ko61Kw61Kw61Ko61Ko61Kw61Kw61Ko61Ko61Kw61Kw61Ko61Ko61Kw61Kw61Ko61Ko61Kw61Kw61Ko61Ko61Kw61Kw61Ko61Ko61Kw61Kw61Ko61Ko61Kw61Kw61Ko61Ko61Kw61Kw61Ko61Ko61Kw61Kw61Ko61Ko61Kw61Kw61Ko61Ko61Kw61Kw61Ko61Ko61Kw6NKw6NKo6NKo6NKw6NL9il6P1Oao6NKw6NKw6NKo6NKo6NKw6NKw6NKo6NKo6NKw6NKw6NKo6NKo6NKw6NKw6NKo6NKo6NKw6NKw6NKo6NKo6NKw6NKw6NKo6NKo6NKw6NKw6NKo6NKo6NKw6NKw6NKo6NKo6NKw6NKw6NKo6NKo6NKw6NKw6NKo6NKo6NKw6NKw6NKo6NKo6NKw6NKw6NKo6NKo6NKw6NKw6NKo6NKo6NKw6NKw6NKo6NKo6NKw6NKw6NKo6NKo6NKw6NKw6NKo6NKo6NKw6NKw6NKo6NKo6NKw6NKw6NKo6NKo6NKw6NKw6NKo6NKo6NKw6NKw6NKo6NKo6NKw6NKw6NKo6NKo6NKw6NKw6NKo6NKo6NKw6NKw6NKo6NKo6NKw6tKw6tKo6tKo6tKw6tL9il6P1uao6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6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mlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHhlWHRlWHRlWHhlWH5lfscrQ+R1WHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHllWHVlWHVlWHllWH9lfscrQ+V1WHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHVlWH5qeqQ99ysz6/4WZ9fsPR+vyWF7vcrM9vuFmf33C0Pr/laH1+y836nB+qDn3D0fr8lqP1+S036/MbXupwtD6/5Wh9fsvN+vyGm/X5DWfrU1WHvuVqfaLq0DecrU9VHfqWq/WJqkPfcLY+VXXoW67WJ6oOfcPZ+lTVoW+5Wp+oOvQNZ+tTVYe+5Wp9ourQN5ytT1Ud+par9YmqQ99wtj5VdehbrtYnqg59w9n6VNWhb7lan6g69A1n61NVh77lan2i6tA3nK1PVR36lqv1iapD33C2PlV16Fuu1ieqDn3D2fpU1aFvuVqfqDr0DWfrU1WHvuVqfaLq0DecrU9VHfqWq/WJqkPfcLY+VXXoW67WJ6oOfcPZ+lTVoW+5Wp+oOvQNZ+tTVYe+5Wp9ourQN5ytT1Ud+par9YmqQ99wtj5VdehbrtYnqg59w9n6VNWhb7lan6g69A1X6zNYdShUdShUdShYdSh+xS5H6zNUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShZdShVdShVdShZdSh/xS5H6zNVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdeiw6tBR1aGjqkOHVYfOr9jlaH0eVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkPFqkOlqkOlqkPFqkP1K3Y5Wp+lqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkOXVYeuqg5dVR26rDp0f8UuR+vzqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh16rDr0VHXoqerQY9Wh9yt2OVqfT1WHHqsOPVYdeqo69FR16LHq0GPVoaeqQ09Vhx6rDj1WHXqqOvRUdeix6tBj1aGnqkNPVYceqw49Vh16qjr0VHXoserQY9Whp6pDT1WHHqsOPVYdeqo69FR16LHq0GPVoaeqQ09Vhx6rDj1WHXqqOvRUdeix6tBj1aGnqkNPVYceqw49Vh16qjr0VHXoserQY9Whp6pDT1WHHqsOPVYdeqo69FR16LHq0GPVoaeqQ09Vhx6rDj1WHXqqOvRUdeix6tBj1aGnqkNPVYceqw49Vh16qjr0VHXoserQY9Whp6pDT1WHHqsOPVYdeqo69FR16LHq0GPVoaeqQ09Vhx6rDj1WHXqqOvRUdeix6tBj1aGnqkNPVYceqw49Vh16qjr0VHXosepQs+pQq+pQq+pQs+pQ/4pdjtZnq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+rQsOrQqOrQqOrQsOrQ/IpdjtbnqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsurQqurQqurQsurQ/opdjtbnqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQqurQ/lR16Ftu1uc33KzPbzhan9/yYpeb9fkNN+vzG47W57ccrc9vuVmf+0PVoW84Wp/fcrQ+v+VmfX7DSx2O1ue3HK3Pb7lZn99wsz6/4Wx9qurQt1ytT1Qd+oaz9amqQ99ytT5Rdegbztanqg59y9X6RNWhbzhbn6o69C1X6xNVh77hbH2q6tC3XK1PVB36hrP1qapD33K1PlF16BvO1qeqDn3L1fpE1aFvOFufqjr0LVfrE1WHvuFsfarq0LdcrU9UHfqGs/WpqkPfcrU+UXXoG87Wp6oOfcvV+kTVoW84W5+qOvQtV+sTVYe+4Wx9qurQt1ytT1Qd+oaz9amqQ99ytT5Rdegbztanqg59y9X6RNWhbzhbn6o69C1X6xNVh77hbH2q6tC3XK1PVB36hrP1qapD33K1PlF16BvO1qeqDn3L1fpE1aFvOFufqjr0LVfrE1WHvuFqfQarDoWqDoWqDgWrDsWv2OVofYaqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDiWrDqWqDqWqDiWrDuWv2OVofaaqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDh1WHTqqOnRUdeiw6tD5Fbscrc+jqkOHVYcOqw4dVR06qjp0WHXosOrQUdWho6pDh1WHDqsOHVUdOqo6dFh16LDq0FHVoaOqQ4dVhw6rDh1VHTqqOnRYdeiw6tBR1aGjqkOHVYcOqw4dVR06qjp0WHXosOrQUdWho6pDh1WHDqsOHVUdOqo6dFh16LDq0FHVoaOqQ4dVhw6rDh1VHTqqOnRYdeiw6tBR1aGjqkOHVYcOqw4dVR06qjp0WHXosOrQUdWho6pDh1WHDqsOHVUdOqo6dFh16LDq0FHVoaOqQ4dVhw6rDh1VHTqqOnRYdeiw6tBR1aGjqkOHVYcOqw4dVR06qjp0WHXosOrQUdWho6pDh1WHDqsOHVUdOqo6dFh16LDq0FHVoaOqQ4dVhw6rDh1VHTqqOnRYdahYdahUdahUdahYdah+xS5H67NUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdeiy6tBV1aGrqkOXVYfur9jlaH1eVR26rDp0WXXoqurQVdWhy6pDl1WHrqoOXVUduqw6dFl16Krq0FXVocuqQ5dVh66qDl1VHbqsOnRZdeiq6tBV1aHLqkOXVYeuqg5dVR26rDp0WXXoqurQVdWhy6pDl1WHrqoOXVUduqw6dFl16Krq0FXVocuqQ5dVh66qDl1VHbqsOnRZdeiq6tBV1aHLqkOXVYeuqg5dVR26rDp0WXXoqurQVdWhy6pDl1WHrqoOXVUduqw6dFl16Krq0FXVocuqQ5dVh66qDl1VHbqsOnRZdeiq6tBV1aHLqkOXVYeuqg5dVR26rDp0WXXoqurQVdWhy6pDl1WHrqoOXVUduqw6dFl16Krq0FXVocuqQ5dVh66qDl1VHbqsOnRZdeiq6tBV1aHLqkOPVYeeqg49VR16rDr0fsUuR+vzqerQY9Whx6pDT1WHnqoOPVYdeqw69FR16Knq0GPVoceqQ09Vh56qDj1WHXqsOvRUdeip6tBj1aHHqkNPVYeeqg49Vh16rDr0VHXoqerQY9Whx6pDT1WHnqoOPVYdeqw69FR16Knq0GPVoceqQ09Vh56qDj1WHXqsOvRUdeip6tBj1aHHqkNPVYeeqg49Vh16rDr0VHXoqerQY9Whx6pDT1WHnqoOPVYdeqw69FR16Knq0GPVoceqQ09Vh56qDj1WHXqsOvRUdeip6tBj1aHHqkNPVYeeqg49Vh16rDr0VHXoqerQY9Whx6pDT1WHnqoOPVYdeqw69FR16Knq0GPVoceqQ09Vh56qDj1WHXqsOvRUdeip6tBj1aHHqkNPVYeeqg49Vh1qVh1qVR1qVR1qVh3qX7HL0fpsVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh0aVh0aVR0aVR0aVh2aX7HL0focVR0aVh0aVh0aVR0aVR0aVh0aVh0aVR0aVR0aVh0aVh0aVR0aVR0aVh0aVh0aVR0aVR0aVh0aVh0aVR0aVR0aVh0aVh0aVR0aVR0aVh0aVh0aVR0aVR0aVh0aVh0aVR0aVR0aVh0aVh0aVR0aVR0aVh0aVh0aVR0aVR0aVh0aVh0aVR0aVR0aVh0aVh0aVR0aVR0aVh0aVh0aVR0aVR0aVh0aVh0aVR0aVR0aVh0aVh0aVR0aVR0aVh0aVh0aVR0aVR0aVh0aVh0aVR0aVR0aVh0aVh0aVR0aVR0aVh0aVh0aVR0aVR0aVh0aVh0aVR0aVR0aVh0aVh0aVR0aVR0aVh0aVh0aVR0aVR0aVh0aVh0aVR0aVR0aVh1aVh1aVR1aVR1aVh3aX7HL0fpcVR1aVh1aVh1aVR1aVR1aVh1aVh1aVR1aVR1aVh1aVh1aVR1aVR1aVh1aVh1aVR1aVR1aVh1aVh1aVR1aVR1aVh1aVh1aVR1aVR1aVh1aVh1aVR1aVR1aVh1aVh1aVR1aVR1aVh1aVh1aVR1aVR1aVh1aVh1aVR1aVR1aVh1aVh1aVR1aVR1aVh1aVh1aVR1aVR1aVh1aVh1aVR1aVR1aVh1aVh1aVR1aVR1aVh1aVh1aVR1aVR1aVh1aVh1aVR1aVR1aVh1aVh1aVR1aVR1aVh1aVh1aVR1aVR1aVh1aVh1aVR1aVR1aVh1aVh1aVR1aVR1aVh1aVh1aVR1aVR1aVh1aVh1aVR1aVR1aVh1aVh1aVR1aVR1aVB3K3w9Vh/6Wk/X5N5ysz7/hZn3+LS92OVmff8PJ+vwbbtbn33KzPv+Wk/X5DTfVob/hZn3+LTfr8285WZ9/w0sdbtbn33KzPv+Wk/X5N5ysz7/hbH2i6tDfcrU+TXXobzhbn6g69LdcrU9THfobztYnqg79LVfr01SH/oaz9YmqQ3/L1fo01aG/4Wx9ourQ33K1Pk116G84W5+oOvS3XK1PUx36G87WJ6oO/S1X69NUh/6Gs/WJqkN/y9X6NNWhv+FsfaLq0N9ytT5NdehvOFufqDr0t1ytT1Md+hvO1ieqDv0tV+vTVIf+hrP1iapDf8vV+jTVob/hbH2i6tDfcrU+TXXobzhbn6g69LdcrU9THfobztYnqg79LVfr01SH/oaz9YmqQ3/L1fo01aG/4Wx9ourQ33K1Pk116G84W5+oOvS3XK1PUx36G87WJ6oO/S1X69NUh/6Gs/WJqkN/y9X6NNWhv+FqfQarDoWqDoWqDgWrDsWv2OVofYaqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDgWrDoWqDoWqDgWrDiWrDqWqDqWqDiWrDuWv2OVofaaqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDiWrDqWqDqWqDiWrDh1WHTqqOnRUdeiw6tD5Fbscrc+jqkOHVYcOqw4dVR06qjp0WHXosOrQUdWho6pDh1WHDqsOHVUdOqo6dFh16LDq0FHVoaOqQ4dVhw6rDh1VHTqqOnRYdeiw6tBR1aGjqkOHVYcOqw4dVR06qjp0WHXosOrQUdWho6pDh1WHDqsOHVUdOqo6dFh16LDq0FHVoaOqQ4dVhw6rDh1VHTqqOnRYdeiw6tBR1aGjqkOHVYcOqw4dVR06qjp0WHXosOrQUdWho6pDh1WHDqsOHVUdOqo6dFh16LDq0FHVoaOqQ4dVhw6rDh1VHTqqOnRYdeiw6tBR1aGjqkOHVYcOqw4dVR06qjp0WHXosOrQUdWho6pDh1WHDqsOHVUdOqo6dFh16LDq0FHVoaOqQ4dVhw6rDh1VHTqqOnRYdahYdahUdahUdahYdah+xS5H67NUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdahYdahUdahUdahYdeiy6tBV1aGrqkOXVYfur9jlaH1eVR26rDp0WXXoqurQVdWhy6pDl1WHrqoOXVUduqw6dFl16Krq0FXVocuqQ5dVh66qDl1VHbqsOnRZdeiq6tBV1aHLqkOXVYeuqg5dVR26rDp0WXXoqurQVdWhy6pDl1WHrqoOXVUduqw6dFl16Krq0FXVocuqQ5dVh66qDl1VHbqsOnRZdeiq6tBV1aHLqkOXVYeuqg5dVR26rDp0WXXoqurQVdWhy6pDl1WHrqoOXVUduqw6dFl16Krq0FXVocuqQ5dVh66qDl1VHbqsOnRZdeiq6tBV1aHLqkOXVYeuqg5dVR26rDp0WXXoqurQVdWhy6pDl1WHrqoOXVUduqw6dFl16Krq0FXVocuqQ5dVh66qDl1VHbqsOnRZdeiq6tBV1aHLqkOPVYeeqg49VR16rDr0fsUuR+vzqerQY9Whx6pDT1WHnqoOPVYdeqw69FR16Knq0GPVoceqQ09Vh56qDj1WHXqsOvRUdeip6tBj1aHHqkNPVYeeqg49Vh16rDr0VHXoqerQY9Whx6pDT1WHnqoOPVYdeqw69FR16Knq0GPVoceqQ09Vh56qDj1W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Vh16rDr0VHXoqerQY9Whx6pDT1WHnqoOPVYdeqw69FR16Knq0GPVoWbVoVbVoVbVoWbVof4Vuxytz1bVoWbVoWbVoVbVoVbVoWbVoWbVoVbVoVbVoWbVoWbVoVbVoVbVoWbVoWbVoVbVoVbVoWbVoWbVoVbVoVbVoWbVoWbVoVbVoVbVoWbVoWbVoVbVoVbVoWbVoWbVoVbVoVbVoWbVoWbVoVbVoVbVoWbVoWbVoVbVoVbVoWbVoWbVoVbVoVbVoWbVoWbVoVbVoVbVoWbVoWbVoVbVoVbVoWbVoWbVoVbVoVbVoWbVoWbVoVbVoVbVoWbVoWbVoVbVoVbVoWbVoWbVoVbVoVbVoWbVoWbVoVbVoVbVoWbVoWbVoVbVoVbVoWbVoWbVoVbVoVbVoWbVoWbVoVbVoVbVoWbVoWbVoVbVoVbVoWbVoWbVoVbVoVbVoWbVoWHVoVHVoVHVoWHVofkVuxytz1HVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWXVoVXVoVXVoWXVof0Vuxytz1XVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoVXVofNT1aFvuVmf33CzPr/haH1+y4tdbtbnN9ysz284Wp/fcrQ+v+VmfZ4fqg59w9H6/Jaj9fktN+vzG17qcLQ+v+VofX7Lzfr8hpv1+Q1n61NVh77lan2i6tA3nK1PVR36lqv1iapD33C2PlV16Fuu1ieqDn3D2fpU1aFvuVqfqDr0DWfrU1WHvuVqfaLq0DecrU9VHfqWq/WJqkPfcLY+VXXoW67WJ6oOfcPZ+lTVoW+5Wp+oOvQNZ+tTVYe+5Wp9ourQN5ytT1Ud+par9YmqQ99wtj5VdehbrtYnqg59w9n6VNWhb7lan6g69A1n61NVh77lan2i6tA3nK1PVR36lqv1iapD33C2PlV16Fuu1ieqDn3D2fpU1aFvuVqfqDr0DWfrU1WHvuVqfaLq0DecrU9VHfqWq/WJqkPfcLY+VXXoW67WJ6oOfcPZ+lTVoW+5Wp+oOvQNV+szWHUoVHUoVHUoWHUofsUuR+szVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWXUoVXUoVXUoWXUof8UuR+szVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXXosOrQUdWho6pDh1WHzq/Y5Wh9HlUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDxapDpapDpapDxapD9St2OVqfpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDl1WHrqoOXVUduqw6dH/FLkfr86rq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNX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FDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFA3rFA3rFA3rFA3rFM2v2OVqhw7rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFC3rFC3rFC3rFC3rFO2v2OVqhy7rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFC3rFK3qFN2f6hR9y9EO/ZajHfotRzv0W17scrRDv+Voh37L0Q79lqMd+i1HO/T+VKfoW4526Lcc7dBvOdqh3/Jil6Md+i1H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Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06RcM6RcM6RcM6RcM6RfMrdrnaocM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6Rcs6Rcs6Rcs6Rcs6Rfsrdrnaocs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Rcs6Ras6Rf1TnaJvOdqh33K0Q7/laId+y4tdjnbotxzt0G852qHfcrRDv+Voh/ZPdYq+5WiHfsvRDv2Wox36LS92Odqh33K0Q7/laId+y9EO/ZazHao6Rd9ytkNVp+hbznao6hR9y9kOVZ2ibznboapT9C1nO1R1ir7lbIeqTtG3nO1Q1Sn6lrMdqjpF33K2Q1Wn6FvOdqjqFH3L2Q5VnaJvOduhqlP0LWc7VHWKvuVsh6pO0bec7VDVKfqWsx2qOkXfcrZDVafoW852qOoUfcvZ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WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ih7rFD3WKXqsU/RYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ih7rFD3WKXqsU/RYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9FinqFmnqFmnqFmnqFmnqH/FLlc7tFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnaFinaFinaFinaFinaH7FLlc7dFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFmnaFmnaFmnaFmnaH/FLlc7dFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmn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dYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpuqxTdFmn6LJO0WWdoss6RZd1ii7rFF3WKbqsU3RZp+iyTtFlnaLLOkWXdYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpuqxTdFmn6LJO0WWdoss6RZd1ii7rFF3WKbqsU3RZp+iyTtFlnaLLOkWXdYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpuqxTdFmn6LJO0WWdoss6RZd1ii7rFF3WKbqsU3RZp+iyTtFlnaLLOkWXdYou6xRd1im6rFN0Wafosk7RZZ2ixzpFj3WKHusUPdYper9il6sd+lin6LFO0WOdosc6RY91ih7rFD3WKXqsU/RYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ih7rFD3WKXqsU/RYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ih7rFD3WKXqsU/RYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ih7rFD3WKXqsU/RYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUNesUNesUNesUNesU9a/Y5WqHNusUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUDesUDesUDesUDesUza/Y5WqHDusUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesULesULesULesULesU7a/Y5WqHLusULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesUreoU7U91ir7laId+y9EO/ZajHfotL3Y52qHfcrRDv+Voh37L0Q79lqMduj/VKfqWox36LUc79FuOdui3vNjlaId+y9EO/ZajHfotRzv0W852qOoUfcvZDlWdom8526GqU/QtZztUdYq+5WyHqk7Rt5ztUNUp+pazHao6Rd9ytkNVp+hbznao6hR9y9kOVZ2ibznboapT9C1nO1R1ir7lbIeqTtG3nO1Q1Sn6lrMdqjpF33K2Q1Wn6FvOdqjqFH3L2Q5VnaJvOduhqlP0LWc7VHWKvuVsh6pO0bec7VDVKfqWsx2qOkXfcrZDVafoW852qOoUfcvZDlWdom8526GqU/QtZztUdYq+5WyHqk7Rt5ztUNUp+pazHao6Rd9ytkNVp+hbznao6hR9y9kOVZ2ibznboapT9C1nO1R1ir7lbIeqTtG3nO1Q1Sn6lrMdqjpF33K2Q1Wn6Fuu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KXqsU/RYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52iZp2iZp2iZp2iZp2i/hW7XO3QZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iZp2iYZ2iYZ2iYZ2iYZ2i+RW7XO3QYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iYZ2iZZ2iZZ2iZZ2iZZ2i/RW7XO3QZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iZZ2iRZ2i8/uhTtHfcrND/5abHfq33OzQv+XFLjc79G+52aF/y80O/VtudujfcrNDv+WoU/S33OzQv+Vmh/4tNzv0b3mxy80O/VtudujfcrND/5abHfq3nO1Q1Cn6W852KOoU/S1nOxR1iv6Wsx2KOkV/y9kORZ2iv+Vsh6JO0d9ytkNRp+hvOduhqFP0t5ztUNQp+lvOdijqFP0tZzsUdYr+lrMdijpFf8vZDkWdor/lbIeiTtHfcrZDUafobznboahT9Lec7VDUKfpbznYo6hT9LWc7FHWK/pazHYo6RX/L2Q5FnaK/5WyHok7R33K2Q1Gn6G8526GoU/S3nO1Q1Cn6W852KOoU/S1nOxR1iv6Wsx2KOkV/y9kORZ2iv+Vsh6JO0d9ytkNRp+hvOduhqFP0t5ztUNQp+lvOdijqFP0tZzsUdYr+lrMdijpFf8vZDkWdor/lbIeiTtHfcrZDUafobznboahT9Ldc7dBgnaJgnaJgnaJgnaL4Fbtc7dBgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJgnaJknaJknaJknaJknaL8Fbtc7dBknaL/R82940aUBFkW3FL6NyL2v7F5FLrFUarQBQPlIC6ZrhwkYMk6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6Rck6RcU6RcU6RcU6RcU6RfVrdrnaocU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6Rc06Rc06Rc06Rc06Rf1rdrnaoc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06RcM6RcM6RcM6RcM6RfNrdrnaocM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6RcM6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KFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFmnKFmnKFmnKFmnKH/NLlc7NFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnqFinqFinqFinqFinqH7NLlc7tFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFinqFmnqFmnqFmnqFmnqH/NLlc7tFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnqFmnaFinaFinaFinaFinaH7NLlc7dFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFinaFmnaFmnaFmnaFmnaH/NLlc7dFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmnaFmn6LBO0WGdosM6RYd1is6v2eVqhx7WKTqsU3RYp+iwTtFhnaLDOkWHdYoO6xQd1ik6rFN0WKfosE7RYZ2iwzpFh3WKDusUHdYpOqxTdFin6LBO0WGdosM6RYd1ig7rFB3WKTqsU3RYp+iwTtFhnaLDOkWHdYoO6xQd1ik6rFN0WKfosE7RYZ2iwzpFh3WKDusUHdYpOqxTdFin6LBO0WGdosM6RYd1ig7rFB3WKTqsU3RYp+iwTtFhnaLDOkWHdYoO6xQd1ik6rFN0WKfosE7RYZ2iwzpFh3WKDusUHdYpOqxTdFin6LBO0WGdosM6RYd1ig7rFB3WKTqsU3RYp+iwTtFhnaLDOkWHdYoO6xQd1ik6rFN0WKfosE7RYZ2iwzpFh3WKDusUHdYpOqxTdFin6LBO0WGdosM6RZd1ii7rFF3WKbqsU3R/zS5XO/SyTtFlnaLLOkWXdYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpuqxTdFmn6LJO0WWdoss6RZd1ii7rFF3WKbqsU3RZp+iyTtFlnaLLOkWXdYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpuqxTdFmn6LJO0WWdoss6RZd1ii7rFF3WKbqsU3RZp+iyTtFlnaLLOkWXdYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpuqxTdFmn6LJO0WWdoss6RZd1ii7rFF3WKbqsU3RZp+iyTtFlnaLLOkWXdYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpuqxTdFmn6LJO0WWdoss6RZd1ii7rFF3WKXqsU/RYp+ixTtFjnaL3a3a52qGPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ih7rFD3WKXqsU/RYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ih7rFD3WKXqsU/RYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ih7rFD3WKXqsU/RYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ih7rFD3WKXqsU/RYp+ipTlH+VKfoW4526Lcc7dBvOdqh3/Jml6Md+i1HO/Rbjnbotxzt0G852qH5U52ibznaod9ytEO/5WiHfsubXY526Lcc7dBvOdqh33K0Q7/lbIeqTtG3nO1Q1Sn6lrMdqjpF33K2Q1Wn6FvOdqjqFH3L2Q5VnaJvOduhqlP0LWc7VHWKvuVsh6pO0bec7VDVKfqWsx2qOkXfcrZDVafoW852qOoUfcvZDlWdom8526GqU/QtZztUdYq+5WyHqk7Rt5ztUNUp+pazHao6Rd9ytkNVp+hbznao6hR9y9kOVZ2ibznboapT9C1nO1R1ir7lbIeqTtG3nO1Q1Sn6lrMdqjpF33K2Q1Wn6FvOdqjqFH3L2Q5VnaJvOduhqlP0LWc7VHWKvuVsh6pO0bec7VDVKfqWsx2qOkXfcrZDVafoW852qOoUfcvZDlWdom8526GqU/QtZztUdYq+5WqHBusUBesUBesUBesUxa/Z5WqHBusUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUBesUJesUJesUJesUJesU5a/Z5WqHJusUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUJesUFesUFesUFesUFesU1a/Z5WqHFusUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUNesUNesUNesUNesU9a/Z5WqHNusUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUDesUDesUDesUDesUza/Z5WqHDusUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesULesULesULesULesU7a/Z5WqHLusULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesUHdYpOqxTdFin6LBO0fk1u1zt0MM6RYd1ig7rFB3WKTqsU3RYp+iwTtFhnaLDOkWHdYoO6xQd1ik6rFN0WKfosE7RYZ2iwzpFh3WKDusUHdYpOqxTdFin6LBO0WGdosM6RYd1ig7rFB3WKTqsU3RYp+iwTtFhnaLDOkWHdYoO6xQd1ik6rFN0WKfosE7RYZ2iwzpFh3WKDusUHdYpOqxTdFin6LBO0WGdosM6RYd1ig7rFB3WKTqsU3RYp+iwTtFhnaLDOkWHdYoO6xQd1ik6rFN0WKfosE7R+edO0fflwf8s//4P///l7/zvsfx+/2z4P2eK/qvh8X85PH7/+4vjd/7h8mSXl3osrQ4f9laWXX7UY7nq8Kfeyv2xywM9lpvq8GJvpdnlox7LqsMPeyuXXa7W51Pr87H1+dj6fGp9/nOa6L8aztbnY+vzqfX51Pp8an3en1qf94fW5/2h9Xl/an3eX7PL0fq8P7Q+70+tz/tT6/P+0Pq8gdbnDbU+b6j1eQOtz/vPQaL/arhanzfU+ryB1ucNtD5vsPWZbH2mWp+p1mey9fnPLaL/bLlan6nWZ7L1mWx9plqfpdZnsfVZbH2WWp//nCH6r4az9VlsfZZan6XWZ7H12Wx9tlqfrdZns/X5zwWi/2y5Wp+t1mez9dlsfbZan6PW57D1OWx9jlqf/xwf+q+Gs/U5bH2OWp+j1uew9blsfa5an6vW57L1+c/dof9suVqfq9bnsvW5bH2q6tBV1aHLqkOXVYeuqg5dVR26rDp0WXXoqurQVdWhy6pDl1WHrqoOXVUduqw6dFl16Krq0FXVocuqQ5dVh66qDl1VHbqsOnRZdeiq6tBV1aHLqkOXVYeuqg5dVR26rDr0WHXoqerQU9Whx6pD79fscrQ+n6oOPVYdeqw69FR16Knq0GPVoceqQ09Vh56qDj1WHXqsOvRUdeip6tBj1aHHqkNPVYeeqg49Vh16rDr0VHXoqerQY9Whx6pDT1WHnqoOPVYdeqw69FR16Knq0GPVoceqQ09Vh56qDj1WHXqsOvRUdeip6tBj1aHHqkNPVYeeqg49Vh16rDr0VHXoqerQY9Whx6pDT1WHnqoOPVYdeqw69FR16Knq0GPVoceqQ09Vh56qDj1WHXqsOvRUdeip6tBj1aHHqkNPVYeeqg49Vh16rDr0VHXoqerQY9Whx6pDT1WHnqoOPVYdeqw69FR16Knq0GPVoceqQ09Vh56qDj1WHXqsOvRUdeip6tBj1aHHqkNPVYeeqg49Vh16rDr0VHXoqerQU9Wh+qnq0LfcrM9vuFmf33C0Pr/lzS436/MbbtbnNxytz285Wp/fcrM+64eqQ99wtD6/5Wh9fsvN+vyGtzocrc9vOVqf33KzPr/hZn1+w9n6VNWhb7lan6g69A1n61NVh77lan2i6tA3nK1PVR36lqv1iapD33C2PlV16Fuu1ieqDn3D2fpU1aFvuVqfqDr0DWfrU1WHvuVqfaLq0DecrU9VHfqWq/WJqkPfcLY+VXXoW67WJ6oOfcPZ+lTVoW+5Wp+oOvQNZ+tTVYe+5Wp9ourQN5ytT1Ud+par9YmqQ99wtj5VdehbrtYnqg59w9n6VNWhb7lan6g69A1n61NVh77lan2i6tA3nK1PVR36lqv1iapD33C2PlV16Fuu1ieqDn3D2fpU1aFvuVqfqDr0DWfrU1WHvuVqfaLq0DecrU9VHfqWq/WJqkPfcLY+VXXoW67WJ6oOfcPV+gxWHQpVHQpVHQpWHYpfs8vR+gxVHQpWHQpWHQpVHQpVHQpWHQpWHQpVHQpVHQpWHQpWHQpVHQpVHQpWHQpWHQpVHQpVHQpWHQpWHQpVHQpVHQpWHQpWHQpVHQpVHQpWHQpWHQpVHQpVHQpWHQpWHQpVHQpVHQpWHQpWHQpVHQpVHQpWHQpWHQpVHQpVHQpWHQpWHQpVHQpVHQpWHQpWHQpVHQpVHQpWHQpWHQpVHQpVHQpWHQpWHQpVHQpVHQpWHQpWHQpVHQpVHQpWHQpWHQpVHQpVHQpWHQpWHQpVHQpVHQpWHQpWHQpVHQpVHQpWHQpWHQpVHQpVHQpWHQpWHQpVHQpVHQpWHQpWHQpVHQpVHQpWHQpWHQpVHQpVHQpWHQpWHQpVHQpVHQpWHUpWHUpVHUpVHUpWHcpfs8vR+kxVHUpWHUpWHUpVHUpVHUpWHUpWHUpVHUpVHUpWHUpWHUpVHUpVHUpWHUpWHUpVHUpVHUpWHUpWHUpVHUpVHUpWHUpWHUpVHUpVHUpWHUpWHUpVHUpVHUpWHUpWHUpVHUpVHUpWHUpWHUpVHUpVHUpWHUpWHUpVHUpVHUpWHUpWHUpVHUpVHUpWHUpWHUpVHUpVHUpWHUpWHUpVHUpVHUpWHUpWHUpVHUpVHUpWHUpWHUpVHUpVHUpWHUpWHUpVHUpVHUpWHUpWHUpVHUpVHUpWHUpWHUpVHUpVHUpWHUpWHUpVHUpVHUpWHUpWHUpVHUpVHUpWHUpWHUpVHUpVHUpWHUpWHUpVHUpVHUpWHUpWHUpVHUpVHUpWHSpWHSpVHSpVHSpWHapfs8vR+ixVHSpWHSpWHSpVHSpVHSpWHSpWHSpVHSpVHSpWHSpWHSpVHSpVHSpWHSpWHSpVHSpVHSpWHSpWHSpVHSpVHSpWHSpWHSpVHSpVHSpWHSpWHSpVHSpVHSpWHSpWHSpVHSpVHSpWHSpWHSpVHSpVHSpWHSpWHSpVHSpVHSpWHSpWHSpVHSpVHSpWHSpWHSpVHSpVHSpWHSpWHSpVHSpVHSpWHSpWHSpVHSpVHSpWHSpWHSpVHSpVHSpWHSpWHSpVHSpVHSpWHSpWHSpVHSpVHSpWHSpWHSpVHSpVHSpWHSpWHSpVHSpVHSpWHSpWHSpVHSpVHSpWHSpWHSpVHSpVHSpWHSpWHSpVHSpVHSpWHSpWHSpVHSpVHSpWHWpWHWpVHWpVHWpWHepfs8vR+mxVHWpWHWpWHWpVHWpVHWpWHWpWHWpVHWpVHWpWHWpWHWpVHWpVHWpWHWpWHWpVHWpVHWpWHWpWHWpVHWpVHWpWHWpWHWpVHWpVHWpWHWpWHWpVHWpVHWpWHWpWHWpVHWpVHWpWHWpWHWpVHWpVHWpWHWpWHWpVHWpVHWpWHWpWHWpVHWpVHWpWHWpWHWpVHWpVHWpWHWpWHWpVHWpVHWpWHWpWHWpVHWpVHWpWHWpWHWpVHWpVHWpWHWpWHWpVHWpVHWpWHWpWHWpVHWpVHWpWHWpWHWpVHWpVHWpWHWpWHWpVHWpVHWpWHWpWHWpVHWpVHWpWHWpWHWpVHWpVHWpWHWpWHWpVHWpVHWpWHWpWHWpVHWpVHWpWHRpWHRpVHRpVHRpWHZpfs8vR+hxVHRpWHRpWHRpVHRpVHRpWHRpWHRpVHRpVHRpWHRpWHRpVHRpVHRpWHRpWHRpVHRpVHRpWHRpWHRpVHRpVHRpWHRpWHRpVHRpVHRpWHRpWHRpVHRpVHRpWHRpWHRpVHRpVHRpWHRpWHRpVHRpVHRpWHRpWHRpVHRpVHRpWHRpWHRpVHRpVHRpWHRpWHRpVHRpVHRpWHRpWHRpVHRpVHRpWHRpWHRpVHRpVHRpWHRpWHRpVHRpVHRpWHRpWHRpVHRpVHRpWHRpWHRpVHRpVHRpWHRpWHRpVHRpVHRpWHRpWHRpVHRpVHRpWHRpWHRpVHRpVHRpWHRpWHRpVHRpVHRpWHRpWHRpVHRpVHRpWHRpWHRpVHRpVHRpWHVpWHVpVHVpVHVpWHdpfs8vR+lxVHVpWHVpWHVpVHVpVHVpWHVpWHVpVHVpVHVpWHVpWHVpVHVpVHVpWHVpWHVpVHVpVHVpWHVpWHVpVHVpVHVpWHVpWHVpVHVpVHVpWHVpWHVpVHVpVHVpWHVpWHVpVHVpVHVpWHVpWHVpVHVpVHVpWHVpWHVpVHVpVHVpWHVpWHVpVHVpVHVpWHVpWHVpVHVpVHVpWHVpWHVpVHVpVHVpWHVpWHVpVHVpVHVpWHVpWHVpVHVpVHVpWHVpWHVpVHVpVHVpWHVpWHVpVHVpVHVpWHVpWHVpVHVpVHVpWHVpWHVpVHVpVHVpWHVpWHVpVHVpVHVpWHVpWHVpVHVpVHVpWHVpWHVpVHVpVHVpWHVpWHVpVHVpVHVpWHTqsOnRUdeio6tBh1aHza3Y5Wp9HVYcOqw4dVh06qjp0VHXosOrQYdWho6pDR1WHDqsOHVYdOqo6dFR16LDq0GHVoaOqQ0dVhw6rDh1WHTqqOnRUdeiw6tBh1aGjqkNHVYcOqw4dVh06qjp0VHXosOrQYdWho6pDR1WHDqsOHVYdOqo6dFR16LDq0GHVoaOqQ0dVhw6rDh1WHTqqOnRUdeiw6tBh1aGjqkNHVYcOqw4dVh06qjp0VHXosOrQYdWho6pD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Q6WqQ8WqQ8WqQ6WqQ6WqQ8WqQ8WqQ6WqQ6WqQ8WqQ8WqQ6WqQ6WqQ8WqQ8WqQ6WqQ6WqQ8WqQ8WqQ6WqQ6WqQ8WqQ8WqQ6WqQ6WqQ8WqQ8WqQ6WqQ6WqQ8WqQ8WqQ6WqQ6WqQ8WqQ8WqQ6WqQ6WqQ8WqQ8WqQ6WqQ6WqQ8WqQ8WqQ6WqQ6WqQ8WqQ8WqQ6WqQ6WqQ8WqQ8WqQ6WqQ6WqQ8WqQ8WqQ6WqQ6WqQ8WqQ8WqQ6WqQ6WqQ8WqQ82qQ62qQ62qQ82qQ/1rdjlan62qQ82qQ82qQ62qQ62qQ82qQ82qQ62qQ62qQ82qQ82qQ62qQ62qQ82qQ82qQ62qQ62qQ82qQ82qQ62qQ62qQ82qQ82qQ62qQ62qQ82qQ82qQ62qQ62qQ82qQ82qQ62qQ62qQ82qQ82qQ62qQ62qQ82qQ82qQ62qQ62qQ82qQ82qQ62qQ62qQ82qQ82qQ62qQ62qQ82qQ82qQ62qQ62qQ82qQ82qQ62qQ62qQ82qQ82qQ62qQ62qQ82qQ82qQ62qQ62qQ82qQ82qQ62qQ62qQ82qQ82qQ62qQ62qQ82qQ82qQ62qQ62qQ82qQ82qQ62qQ62qQ82qQ82qQ62qQ62qQ82qQ82qQ62qQ62qQ82qQ82qQ62qQ62qQ82qQ8OqQ6OqQ6OqQ8OqQ/Nrdjlan6OqQ8OqQ8OqQ6OqQ6OqQ8OqQ8OqQ6OqQ6OqQ8OqQ8OqQ6OqQ6OqQ8OqQ8OqQ6OqQ6OqQ8OqQ8OqQ6OqQ6OqQ8OqQ8OqQ6OqQ6OqQ8OqQ8OqQ6OqQ6OqQ8OqQ8OqQ6OqQ6OqQ8OqQ8OqQ6OqQ6OqQ8OqQ8OqQ6OqQ6OqQ8OqQ8OqQ6OqQ6OqQ8OqQ8OqQ6OqQ6OqQ8OqQ8OqQ6OqQ6OqQ8OqQ8OqQ6OqQ6OqQ8OqQ8OqQ6OqQ6OqQ8OqQ8OqQ6OqQ6OqQ8OqQ8OqQ6OqQ6OqQ8OqQ8OqQ6OqQ6OqQ8OqQ8OqQ6OqQ6OqQ8OqQ8OqQ6OqQ6OqQ8OqQ8OqQ6OqQ6OqQ8OqQ8OqQ6OqQ6OqQ8OqQ8OqQ6OqQ6OqQ8OqQ8uqQ6uqQ6uqQ8uqQ/trdjlan6uqQ8uqQ8uqQ6uqQ6uqQ8uqQ8uqQ6uqQ6uqQ8uqQ8uqQ6uqQ6uqQ8uqQ8uqQ6uqQ6uqQ8uqQ8uqQ6uqQ6uqQ8uqQ8uqQ6uqQ6uqQ8uqQ8uqQ6uqQ6uqQ8uqQ8uqQ6uq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KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1qFh1qFR1qFR1qFh1qH7NLkfrs1R1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFl1qFV1qFV1qFl1qH/NLkfrs1V1qFl1qFl1qFV1qFV1qFl1qFl1qFV1qFV1qFl1qFl1qFV1qFV1qFl1qFl1qFV1qFV1qFl1qFl1qFV1qFV1qFl1qFl1qFV1qFV1qFl1qFl1qFV1qFV1qFl1qFl1qFV1qFV1qFl1qFl1qFV1qFV1qFl1qFl1qFV1qFV1qFl1qFl1qFV1qFV1qFl1qFl1qFV1qFV1qFl1qFl1qFV1qFV1qFl1qFl1qFV1qFV1qFl1qFl1qFV1qFV1qFl1qFl1qFV1qFV1qFl1qFl1qFV1qFV1qFl1qFl1qFV1qFV1qFl1qFl1qFV1qFV1qFl1qFl1qFV1qFV1qFl1qFl1qFV1qFV1qFl1qFl1qFV1qFV1qFl1qFl1qFV1qFV1qFl1aFh1aFR1aFR1aFh1aH7NLkfrc1R1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFl1aFV1aFV1aFl1aH/NLkfrc1V1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl16LDq0FHVoaOqQ4dVh86v2eVofR5VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ5dVh66qDl1VHbqsOnR/zS5H6/Oq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHXqsOvRUdeip6tBj1aH3a3Y5Wp9PVYceqw49Vh16qjr0VHXoserQY9Whp6pDT1WHHqsOPVYdeqo69FR16LHq0GPVoaeqQ09Vhx6rDj1WHXqqOvRUdeix6tBj1aGnqkNPVYceqw49Vh16qjr0VHXoserQY9Whp6pDT1WHHqsOPVYdeqo69FR16LHq0GPVoaeqQ09Vhx6rDj1WHXqqOvRUdeix6tBj1aGnqkNPVYceqw49Vh16qjr0VHXoserQY9Whp6pDT1WHHqsOPVYdeqo69FR16LHq0GPVoaeqQ09Vhx6rDj1WHXqqOvRUdeix6tBj1aGnqkNPVYceqw49Vh16qjr0VHXoserQY9Whp6pDT1WHHqsOPVYdeqo69FR16LHq0GPVoaeqQ09Vhx6rDj1WHXqqOvRUdeip6tD+VHXoW27W5zfcrM9vOFqf3/Jml5v1+Q036/Mbjtbntxytz2+5WZ/7Q9Whbzhan99ytD6/5WZ9fsNbHY7W57ccrc9vuVmf33CzPr/hbH2q6tC3XK1PVB36hrP1qapD33K1PlF16BvO1qeqDn3L1fpE1aFvOFufqjr0LVfrE1WHvuFsfarq0LdcrU9UHfqGs/WpqkPfcrU+UXXoG87Wp6oOfcvV+kTVoW84W5+qOvQtV+sTVYe+4Wx9qurQt1ytT1Qd+oaz9amqQ99ytT5Rdegbztanqg59y9X6RNWhbzhbn6o69C1X6xNVh77hbH2q6tC3XK1PVB36hrP1qapD33K1PlF16BvO1qeqDn3L1fpE1aFvOFufqjr0LVfrE1WHvuFsfarq0LdcrU9UHfqGs/WpqkPfcrU+UXXoG87Wp6oOfcvV+kTVoW84W5+qOvQtV+sTVYe+4Wp9BqsOhaoOhaoOBasOxa/Z5Wh9hqoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOJasOpaoOpaoOJasO5a/Z5Wh9pqoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOFasOlaoOlaoOFasO1a/Z5Wh9lqoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasONasOtaoOtaoONasO9a/Z5Wh9tqoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasODasOjaoOjaoODasOza/Z5Wh9jqoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasOLasOraoOraoOLasO7a/Z5Wh9rqoOLasOLasOraoOraoOLasOLasOraoOraoOLasOLasOraoOraoOLasOLasOraoOraoOLasOLasOraoOraoOLasOLasOraoOraoOLasOLasOraoOraoOLasOLasOraoOraoOLasOLasOraoOraoOLasOLasOraoOraoOLasOLasOraoOraoOLasOLasOraoOraoOLasOLasOraoOraoOLasOLasOraoOraoOLasOLasOraoOraoOLasOLasOraoOraoOLasOLasOraoOraoOLasOLasOraoOraoOLasOLasOraoOraoOLasO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UlWHUlWHklWHklWHUlWHUlWHklWHklWHUlWHUlWHklWHklWHUlWHUlWHklWHklWHUlWHUlWHklWHklWHUlWHUlWHklWHklWHUlWHUlWHklWHklWHUlWHUlWHklWHklWHUlWHUlWHklWHklWHUlWHUlWHklWHklWHUlWHUlWHklWHilWHSlWHSlWHilWH6tfscrQ+S1WHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHmlWHWlWHWlWHmlWH+tfscrQ+W1WHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHhlWHRlWHRlWHhlWH5tfscrQ+R1WHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWH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oapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDyapDqapDqapDyapD+Wt2OVqfqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDxapDpapDpapDxapD9Wt2OVqfpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDzapDrapDrapDzapD/Wt2OVqfrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDw6pDo6pDo6pDw6pD82t2OVqfo6pDw6pDw6pDo6pDo6pDw6pDw6pDo6pDo6pDw6pDw6pDo6pDo6pDw6pDw6pDo6pDo6pDw6pDw6pDo6pDo6pDw6pDw6pDo6pDo6pDw6pDw6pDo6pDo6pDw6pDw6pDo6pDo6pDw6pDw6pDo6pDo6pDw6pDw6pDo6pDo6pDw6pDw6pDo6pDo6pDw6pDw6pDo6pDo6pDw6pDw6pDo6pDo6pDw6pDw6pDo6pDo6pDw6pDw6pDo6pDo6pDw6pDw6pDo6pDo6pDw6pDw6pDo6pDo6pDw6pDw6pDo6pDo6pDw6pDw6pDo6pDo6pDw6pDw6pDo6pDo6pDw6pDw6pDo6pDo6pDw6pDw6pDo6pDo6pDw6pDw6pDo6pDo6pDw6pDy6pDq6pDq6pDy6pD+2t2OVqfq6pDy6pDy6pDq6pDq6pDy6pDy6pDq6pDq6pDy6pDy6pDq6pDq6pDy6pDy6pDq6pDq6pDy6pDy6pDq6pDq6pDy6pDy6pDq6pDq6pDy6pDy6pDq6pDq6pDy6pDy6pDq6pDq6pDy6pDy6pDq6pDq6pDy6pDy6pDq6pDq6pDy6pDy6pDq6pDq6pDy6pDy6pDq6pDq6pDy6pDy6pDq6pDq6pDy6pDy6pDq6pDq6pDy6pDy6pDq6pDq6pDy6pDy6pDq6pDq6pDy6pDy6pDq6pDq6pDy6pDy6pDq6pDq6pDy6pDy6pDq6pDq6pDy6pDy6pDq6pDq6pDy6pDy6pDq6pDq6pDy6pDy6pDq6pDq6pDy6pDy6pDq6pDq6pDy6pDh1WHjqoOHVUdOqw6dH7NLkfr86jq0GHVocOqQ0dVh46qDh1WHTqsOnRUdeio6tBh1aHDqkNHVYeOqg4dVh06rDp0VHXoqOrQYdWhw6pDR1WHjqoOHVYdOqw6dFR16Kjq0GHVocOqQ0dVh46qDh1WHTqsOnRUdeio6tBh1aHDqkNHVYeOqg4dVh06rDp0VHXoqOrQYdWhw6pDR1WHjqoOHVYdOqw6dFR16Kjq0GHVocOqQ0dVh46qDh1WHTqsOnRUdeio6tBh1aHDqkNHVYeOqg4dVh06rDp0VHXoqOrQYdWhw6pDR1WHjqoOHVYdOqw6dFR16Kjq0GHVocOqQ0dVh46qDh1WHTqsOnRUdeio6tBh1aHDqkNHVYeOqg4dVh06rDp0VHXoqOrQYdWhw6pDR1WHjqoOHVYduqw6dFV16Krq0GXVoftrdjlan1dVhy6rDl1WHbqqOnRVdeiy6tBl1aGrqkNXVYcuqw5dVh26qjp0VXXosurQZdWhq6pDV1WHLqsOXVYduqo6dFV16LLq0GXVoauqQ1dVhy6rDl1WHbqqOnRVdeiy6tBl1aGrqkNXVYcuqw5dVh26qjp0VXXosurQZdWhq6pDV1WHLqsOXVYduqo6dFV16LLq0GXVoauqQ1dVhy6rDl1WHbqqOnRVdeiy6tBl1aGrqkNXVYcuqw5dVh26qjp0VXXosurQZdWhq6pDV1WHLqsOXVYduqo6dFV16LLq0GXVoauqQ1dVhy6rDl1WHbqqOnRVdeiy6tBl1aGrqkNXVYcuqw5dVh26qjp0VXXosurQZdWhq6pDV1WHLqsOXVYduqo6dFV16LLq0GPVoaeqQ09Vhx6rDr1fs8vR+nyqOvRYdeix6tBT1aGnqkOPVYceqw49VR16qjr0WHXoserQU9Whp6pDj1WHHqsOPVUdeqo69Fh16LHq0FPVoaeqQ49Vhx6rDj1VHXqqOvRYdeix6tBT1aGnqkOPVYceqw49VR16qjr0WHXoserQU9Whp6pDj1WHHqsOPVUdeqo69Fh16LHq0FPVoaeqQ49Vhx6rDj1VHXqqOvRYdeix6tBT1aGnqkOPVYceqw49VR16qjr0WHXoserQU9Whp6pDj1WHHqsOPVUdeqo69Fh16LHq0FPVoaeqQ49Vhx6rDj1VHXqqOvRYdeix6tBT1aGnqkOPVYceqw49VR16qjr0WHXoserQU9Whp6pDj1WHHqsOPVUdeqo69Fh16LHq0FPVoaeqQ09Vh95PVYe+5WZ9fsPN+vyGo/X5LW92uVmf33CzPr/haH1+y9H6/Jab9fl+qDr0DUfr81uO1ue33KzPb3irw9H6/Jaj9fktN+vzG27W5zecrU9VHfqWq/WJqkPfcLY+VXXoW67WJ6oOfcPZ+lTVoW+5Wp+oOvQNZ+tTVYe+5Wp9ourQN5ytT1Ud+par9YmqQ99wtj5VdehbrtYnqg59w9n6VNWhb7lan6g69A1n61NVh77lan2i6tA3nK1PVR36lqv1iapD33C2PlV16Fuu1ieqDn3D2fpU1aFvuVqfqDr0DWfrU1WHvuVqfaLq0DecrU9VHfqWq/WJqkPfcLY+VXXoW67WJ6oOfcPZ+lTVoW+5Wp+oOvQNZ+tTVYe+5Wp9ourQN5ytT1Ud+par9YmqQ99wtj5VdehbrtYnqg59w9n6VNWhb7lan6g69A1n61NVh77lan2i6tA3XK3PYNWhUNWhUNWhYNWh+DW7HK3PUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhZNWhVNWhVNWhZNWh/DW7HK3PVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhYtWhUtWhUtWhYtWh+jW7HK3PUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhZtWhVtWhVtWhZtWh/jW7HK3PVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhYdWhUdWhUdWhYdWh+TW7HK3PUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhZdWhVdWhVdWh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YNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhZNWhVNWhVNWhZNWh/DW7HK3PVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhYtWhUtWhUtWhYtWh+jW7HK3PUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhZtWhVtWhVtWhZtWh74ddjtZnq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+rQsOrQqOrQqOrQsOrQ/JpdjtbnqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsurQqurQqurQsurQ/ppdjtbnqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQYdWho6pDR1WHDqsOnV+zy9H6PKo6dFh16LDq0FHVoaOqQ4dVhw6rDh1VHTqqOnRYdeiw6tBR1aGjqkOHVYcOqw4dVR06qjp0WHXosOrQUdWho6pDh1WHDqsOHVUdOqo6dFh16LDq0FHVoaOqQ4dVhw6rDh1VHTqqOnRYdeiw6tBR1aGjqkOHVYcOqw4dVR06qjp0WHXosOrQUdWho6pDh1WHDqsOHVUdOqo6dFh16LDq0FHVoaOqQ4dVhw6rDh1VHTqqOnRYdeiw6tBR1aGjqkOHVYcOqw4dVR06qjp0WHXosOrQUdWho6pDh1WHDqsOHVUdOqo6dFh16LDq0FHVoaOqQ4dVhw6rDh1VHTqqOnRYdeiw6tBR1aGjqkOHVYcOqw4dVR06qjp0WHXosOrQUdWho6pDh1WHLqsOXVUduqo6dFl16P6aXY7W51XVocuqQ5dVh66qDl1VHbqsOnRZdeiq6tBV1aHLqkOXVYeuqg5dVR26rDp0WXXoqurQVdWhy6pDl1WHrqoOXVUduqw6dFl16Krq0FXVocuqQ5dVh66qDl1VHbqsOnRZdeiq6tBV1aHLqkOXVYeuqg5dVR26rDp0WXXoqurQVdWhy6pDl1WHrqoOXVUduqw6dFl16Krq0FXVocuqQ5dVh66qDl1VHbqsOnRZdeiq6tBV1aHLqkOXVYeuqg5dVR26rDp0WXXoqurQVdWhy6pDl1WHrqoOXVUduqw6dFl16Krq0FXVocuqQ5dVh66qDl1VHbqsOnRZdeiq6tBV1aHLqkOXVYeuqg5dVR26rDp0WXXoqurQVdWhy6pDl1WHrqoOXVUduqw69Fh16Knq0FPVoceqQ+/X7HK0Pp+qDj1WHXqsOvRUdeip6tBj1aHHqkNPVYeeqg49Vh16rDr0VHXoqerQY9Whx6pDT1WHnqoOPVYdeqw69FR16Knq0GPVoceqQ09Vh56qDj1WHXqsOvRUdeip6tBj1aHHqkNPVYeeqg49Vh16rDr0VHXoqerQY9Whx6pDT1WHnqoOPVYdeqw69FR16Knq0GPVoceqQ09Vh56qDj1WHXqsOvRUdeip6tBj1aHHqkPvX1CH3vzP8pvn/+xY/gV16D8aXv+Xw//VW2l2+ajHsurww97KZZc/9Fj+BXXoPxoe6q2cZJeXeiytDh/2VpZdftRjuerwp97K/bHL1fq8an1etj7/BXXov1qu1udV6/Oy9XnZ+rxqfT61Ph9bn4+tz6fW57+gDv1Hw9n6fGx9PrU+n1qfD63P7w9H6/Nbbtbn99ysz+85Wp/f8maXm/X5PTfr83uO1ue3HK3Pb7lZn/ELsz6/4Wh9fsvR+vyWm/X5DW91OFqf33K0Pr/lZn1+w836/Iaz9ZlsfaZan6nWZ7L1+S+oQ//VcrU+U63PZOsz2fpMtT5Lrc9i67PY+iy1Pv8Fdeg/Gs7WZ7H1WWp9llqfxdZns/XZan22Wp/N1ue/oA79V8vV+my1Pputz2brs9X6HLU+h63PYetz1Pr8F9Sh/2g4W5/D1ueo9TlqfQ5bn8vWJ6oOfcPV+lTVoW95s8vV+kTVoW84W5+qOvQtV+sTVYe+4Wx9qurQ91ytT1Qd+vvA2Fth6xNVh77han2q6lD8VHXoW67WJ6oOfcPZ+lTVoW+5Wp+oOvQNZ+tTVYe+5Wp9ourQN5ytT1Ud+par9YmqQ99wtj5VdehbrtYnqg59w9X6DFYdClUdClUdClYdil+zy9H6DFUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdSlYdSlUdSlUdSlYdyl+zy9H6TFUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdKlYdKlUdKlUdKlYdql+zy9H6LFUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdalYdalUdalUdalYd6l+zy9H6bFUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdGlYdGlUdGlUdGlYdml+zy9H6HFUdGlYdGlYdGlUdGlUdGlYdGlYdGlUdGlUdGlYdGlYdGlUdGlUdGlYdGlYdGlUdGlUdGlYdGlYdGlUdGlUdGlYdGlYdGlUdGlUdGlYdGlYdGlUdGlUdGlYdGlYdGlUdGlUdGlYdGlYdGlUdGlUdGlYdGlYdGlUdGlUdGlYdGlYdGlUdGlUdGlYdGlYdGlUdGlUdGlYdGlYdGlUdGlUdGlYdGlYdGlUdGlUdGlYdGlYdGlUdGlUdGlYdGlYdGlUdGlUdGlYdGlYdGlUdGlUdGlYdGlYdGlUdGlUdGlYdGlYdGlUdGlUdGlYdGlYdGlUdGlUdGlYdGlYdGlUdGlUdGlYdGlYdGlUdGlUdGlYdGlYdGlUdGlUdGlYdWlYdWlUdWlUdWlYd2l+zy9H6XFUdWlYdWlYdWlUdWlUdWlYdWlYdWlUdWlUdWlYdWlYdWlUdWlUdWlYdWlYdWlUdWlUdWlYdWlYdWlUdWlUdWlYdWlYdWlUdWlUdWlYdWlYdWlUdWlUdWlYdWlYdWlUdWlUdWlYdWlYdWlUdWlUdWlYdWlYdWlUdWlUdWlYdWlYdWlUdWlUdWlYdWlYdWlUdWlUdWlYdWlYdWlUdWlUdWlYdWlYdWlUdWlUdWlYdWlYdWlUdWlUdWlYdWlYdWlUdWlUdWlYdWlYdWlUdWlUdWlYdWlYdWlUdWlUdWlYdWlYdWlUdWlUdWlYdWlYdWlUdWlUdWlYdWlYdWlUdWlUdWlYdWlYdWlUdWlUdWlYdWlYdWlUdWlUdWlYdOqw6dFR16Kjq0GHVofNrdjlan0dVhw6rDh1WHTqqOnRUdeiw6tBh1aGjqkNHVYcOqw4dVh06qjp0VHXosOrQYdWho6pDR1WHDqsOHVYdOqo6dFR16LDq0GHVoaOqQ0dVhw6rDh1WHTqqOnRUdeiw6tBh1aGjqkNHVYcOqw4dVh06qjp0VHXosOrQYdWho6pDR1WHDqsOHVYdOqo6dFR16LDq0GHVoaOqQ0dVhw6rDh1WHTqqOnRUdeiw6tBh1aGjqkNHVYcOqw4dVh06qjp0VHXosOrQYdWho6pDR1WHDqsOHVYdOqo6dFR16LDq0GHVoaOqQ0dVhw6rDh1WHTqqOnRUdeiw6tBh1aGjqkNHVYcOqw4dVh06qjp0VHXosOrQYdWho6pDR1WHDqsOHVYdOqo6dFR16LDq0GXVoauqQ1dVhy6rDt1fs8vR+ryqOnRZdeiy6tBV1aGrqkOXVYcuqw5dVR26qjp0WXXosurQVdWhq6pDl1WHLqsOXVUduqo6dFl16LLq0FXVoauqQ5dVhy6rDl1VHbqqOnRZdeiy6tBV1aGrqkOXVYcuqw5dVR26qjp0WXXosurQVdWhq6pDl1WHLqsOXVUduqo6dFl16LLq0FXVoauqQ5dVhy6rDl1VHbqqOnRZdeiy6tBV1aGrqkOXVYcuqw5dVR26qjp0WXXosurQVdWhq6pDl1WHLqsOXVUduqo6dFl16LLq0FXVoauqQ5dVhy6rDl1VHbqqOnRZdeiy6tBV1aGrqkOXVYcuqw5dVR26qjp0WXXosurQVdWhq6pDl1WHLqsOXVUduqo6dFl16LLq0FXVoauqQ5dVhx6rDj1VHXqqOvRYdej9ml2O1udT1aHHqkOPVYeeqg49VR16rDr0WHXoqerQU9Whx6pDj1WHnqoOPVUdeqw69Fh16Knq0FPVoceqQ49Vh56qDj1VHXqsOvRYdeip6tBT1aHHqkOPVYeeqg49VR16rDr0WHXoqerQU9Whx6pDj1WHnqoOPVUdeqw69Fh16Knq0FPVoceqQ49Vh56qDj1VHXqsOvRYdeip6tBT1aHHqkOPVYeeqg49VR16rDr0WHXoqerQU9Whx6pDj1WHnqoOPVUdeqw69Fh16Knq0FPVoceqQ49Vh56qDj1VHXqsOvRYdeip6tBT1aHHqkOPVYeeqg49VR16rDr0WHXoqerQU9Whx6pDj1WHnqoOPVUdeqw69Fh16Knq0FPVoceqQ49Vh56qDj1VHXqqOpQ/VR36lpv1+Q036/Mbjtbnt7zZ5WZ9fsPN+vyGo/X5LUfr81tu1mf+UHXoG47W57ccrc9vuVmf3/BWh6P1+S1H6/NbbtbnN9ysz284W5+qOvQtV+sTVYe+4Wx9qurQt1ytT1Qd+oaz9amqQ99ytT5Rdegbztanqg59y9X6RNWhbzhbn6o69C1X6xNVh77hbH2q6tC3XK1PVB36hrP1qapD33K1PlF16BvO1qeqDn3L1fpE1aFvOFufqjr0LVfrE1WHvuFsfarq0LdcrU9UHfqGs/WpqkPfcrU+UXXoG87Wp6oOfcvV+kTVoW84W5+qOvQtV+sTVYe+4Wx9qurQt1ytT1Qd+oaz9amqQ99ytT5Rdegbztanqg59y9X6RNWhbzhbn6o69C1X6xNVh77hbH2q6tC3XK1PVB36hrP1qapD33K1PlF16BvO1qeqDn3L1fpE1aFvuFqfwapDoapDoapDwapD8Wt2OVqfoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDwapDoapDoapDwapDyapDqapDqapDyapD+Wt2OVqfqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDyapDqapDqapDyapDxapDpapDpapDxapD9Wt2OVqfpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDzapDrapDrapDzapD/Wt2OVqfrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDw6pDo6pDo6pDw6pD82t2OVqfo6pDw6pDw6pDo6pDo6pDw6pDw6pDo6pDo6pDw6pD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qkPfcLY+VXXoW67WJ6oOfcPZ+lTVoW+5Wp+oOvQNV+szWHUoVHUoVHUoWHUofs0uR+szVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWXUoVXUoVXUoWXUof80uR+szVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXWoWHWoVHWoVHWoWHWofs0uR+uzVHWoWHWoWHWoVHWoVHWoWHWoWHWoVHWoVHWoWHWoWHWoVHWoVHWoWHWoWHWoVHWoVHWoWHWoWHWoVHWoVHWoWHWoWHWoVHWoVHWoWHWoWHWoVHWoVHWoWHWoWHWoVHWoVHWoWHWoWHWoVHWoVHWoWHWoWHWoVHWoVHWoWHWoWHWoVHWoVHWoWHWoWHWoVHWoVHWoWHWoWHWoVHWoVHWoWHWoWHWoVHWoVHWoWHWoWHWoVHWoVHWoWHWoWHWoVHWoVHWoWHWoWHWoVHWoVHWoWHWoWHWoVHWoVHWoWHWoWHWoVHWoVHWoWHWoWHWoVHWoVHWoWHWoWHWoVHWoVHWoWHWoWHWoVHWoVHWoWHWoWHWoVHWoVHWoWHWoWXWoVXWoVXWoWXWof80uR+uzVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXVoWHVoVHVoVHVoWHVofs0uR+tzVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWXVoVXVoVXVoWXVof80uR+tzVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVo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qg4lqw4lqw6lqg6lqg4lqw4lqw6lqg6lqg4lqw4lqw6lqg6lqg4lqw4lqw6lqg6lqg4lqw4lqw6lqg6lqg4lqw4lqw6lqg6lqg4lqw4lqw6lqg6lqg4lqw4lqw6lqg6lqg4lqw4lqw6lqg6lqg4lqw4Vqw6Vqg6Vqg4Vqw7Vr9nlaH2Wqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw41qw61qg61qg41qw71r9nlaH22qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw4Nqw6Nqg6Nqg4Nqw7Nr9nlaH2Oqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6N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1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFk1aFU1aFU1aFk1aH8Nbscrc9U1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFi1aFS1aFS1aFi1aH6Nbscrc9S1aFi1aFi1aFS1aFS1aFi1aFi1aFS1aFS1aFi1aFi1aFS1aFS1aFi1aFi1aFS1aFS1aFi1aFi1aFS1aFS1aFi1aH/R829G9u261oWdGmSAPHx37EaS7lqCTvinUgPugAITclg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFk1aFU1aFU1aFk1aH8Jbscrc9U1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aHHqkNPVYeeqg49Vh16v2SXo/X5VHXoserQY9Whp6pDT1WHHqsOPVYdeqo69FR16LHq0GPVoaeqQ09Vhx6rDj1WHXqqOvRUdeix6tBj1aGnqkNPVYceqw49Vh16qjr0VHXoserQY9Whp6pDT1WHHqsOPVYdeqo69FR16LHq0GPVoaeqQ09Vhx6rDj1WHXqqOvRUdeix6tBj1aGnqkNPVYceqw49Vh16qjr0VHXoserQY9Whp6pDT1WHHqsOPVYdeqo69FR16LHq0GPVoaeqQ09Vhx6rDj1WHXqqOvRUdeix6tBj1aGnqkNPVYceqw49Vh16qjr0VHXoserQY9Whp6pDT1WHHqsOPVYdeqo69FR16LHq0GPVoaeqQ09Vhx6rDj1WHXqqOvRUdeix6tBj1aGnqkNPVYceqw4Vqw6Vqg6Vqg4Vqw7VL9nlaH2Wqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw41qw61qg61qg41qw71L9nlaH22qg41qw41qw61qg61qg41qw41qw71QeuzVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXWoWXWoVXWoVXWoWXVoWHVoVHVoVHVoWHVofskuR+tzVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWXVoVXVoVXVoWXVof8kuR+tzVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoVXWofqo69C036/MbbtbnNxytz295ssvN+vyGm/X5DUfr81uO1ue33KzP+qHq0Dccrc9vOVqf33KzPr/hqQ5H6/Nbjtbnt9ysz2+4WZ/fcLY+VXXoW67WJ6oOfcPZ+lTVoW+5Wp+oOvQNZ+tTVYe+5Wp9ourQN5ytT1Ud+par9YmqQ99wtj5VdehbrtYnqg59w9n6VNWhb7lan6g69A1n61NVh77lan2i6tA3nK1PVR36lqv1iapD33C2PlV16Fuu1ieqDn3D2fpU1aFvuVqfqDr0DWfrU1WHvuVqfaLq0DecrU9VHfqWq/WJqkPfcLY+VXXoW67WJ6oOfcPZ+lTVoW+5Wp+oOvQNZ+tTVYe+5Wp9ourQN5ytT1Ud+par9YmqQ99wtj5VdehbrtYnqg59w9n6VNWhb7lan6g69A1n61NVh77lan2i6tA3nK1PVR36lqv1iapD33C1Pg+rDh1VHTqqOnRYdej8kl2O1udR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRZdeiq6tBV1aHLqkP3l+xytD6vqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aFg1aFQ1aFQ1aFg1aH4Jbscrc9Q1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFg1aFQ1aFQ1aFg1aFk1aFU1aFU1aFk1aH8Jbscrc9U1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aFk1aFU1aFU1aFk1aHHqkNPVYeeqg49Vh16v2SXo/X5VHXoserQY9Whp6pDT1WHHqsOPVYdeqo69FR16LHq0GPVoaeqQ09Vhx6rDj1WHXqqOvRUdeix6tBj1aGnqkNPVYceqw49Vh16qjr0VHXoserQY9Whp6pDT1WHHqsOPVYdeqo69FR16LHq0GPVoaeqQ09Vhx6rDj1WHXqqOvRUdeix6tBj1aGnqkNPVYceqw49Vh16qjr0VHXoserQY9Whp6pDT1WHHqsOPVYdeqo69FR16LHq0GPVoaeqQ09Vhx6rDj1WHXqqOvRUdeix6tBj1aGnqkNPVYceqw49Vh16qjr0VHXoserQY9Whp6pDT1WHHqsOPVYdeqo69FR16LHq0GPVoaeqQ09Vhx6rDj1WHXqqOvRUdeix6tBj1aGnqkNPVYceqw4Vqw6Vqg6Vqg4Vqw7VL9nlaH2Wqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw4Vqw6Vqg6Vqg4Vqw41qw61qg61qg41qw71L9nlaH22qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw41qw61qg61qg41qw4Nqw6Nqg6Nqg4Nqw7NL9nlaH2Oqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6Nqg6Nqg4Nqw4Nqw6N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1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFh1aFR1aFR1aFh1aH5Jbscrc9R1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFl1aFV1aFV1aFl1aH9Jbscrc9V1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFV1aH5qerQt9ysz2+4WZ/fcLQ+v+XJLjfr8xtu1uc3HK3Pbzlan99ysz7nh6pD33C0Pr/laH1+y836/IanOhytz285Wp/fcrM+v+FmfX7D2fpU1aFvuVqfqDr0DWfrU1WHvuVqfaLq0DecrU9VHfqWq/WJqkPfcLY+VXXoW67WJ6oOfcPZ+lTVoW+5Wp+oOvQNZ+tTVYe+5Wp9ourQN5ytT1Ud+par9YmqQ99wtj5VdehbrtYnqg59w9n6VNWhb7lan6g69A1n61NV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OlSsOlSqOlSqOlSsOlSsOlSqOlSqOlSsOlSsOlSqOlSqOlSsOlSsOlSqOlSqOlSsOlSsOlSqOlSqOlSsOlSsOlSqOlSqOlSsOlSsOlSqOlSqOlSsOlSsOlSqOlSqOlSsOlSsOlSqOlSqOlSsOlSsOlSqOlSqOlSsOlSsOlSqOlSqOlSsOlSsOlSqOlSqOlSsOlSsOlSqOlSqOlSsOlSsOlSqOlSqOlSsOlSsOlSqOlSqOlSsOtSsOtSqOtSqOtSsOtS/ZJej9dmqOtSsOtSsOtSqOtSqOtSsOtSsOtSqOtSqOtSsOtRHrc9W1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFm1aFW1aFW1aFm1aFh1aFR1aFR1aFh1aH5Jbscrc9R1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFl1aFV1aFV1aFl1aH9Jbscrc9V1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFV1aH9qerQt9ysz2+4WZ/fcLQ+v+XJLjfr8xtu1uc3HK3Pbzlan99ysz73h6pD33C0Pr/laH1+y836/IanOhytz285Wp/fcrM+v+FmfX7D2fpU1aFvuVqfqDr0DWfrU1WHvuVqfaLq0DecrU9VHfqWq/WJqkPfcLY+VXXoW67WJ6oOfcPZ+lTVoW+5Wp+oOvQNZ+tTVYe+5Wp9ourQN5ytT1Ud+par9YmqQ99wtj5VdehbrtYnqg59w9n6VNWhb7lan6g69A1n61NVh77lan2i6tA3nK1PVR36lqv1iapD33C2PlV16Fuu1ieqDn3D2fpU1aFvuVqfqDr0DWfrU1WHvuVqfaLq0DecrU9VHfqWq/WJqkPfcLY+VXXoW67WJ6oOfcPZ+lTVoW+5Wp+oOvQNZ+tTVYe+5Wp9ourQN5ytT1Ud+par9YmqQ99wtj5VdehbrtYnqg59w9X6PKw6dFR16Kjq0GHVofNLdjlan0dVhw6rDh1WHTqqOnRUdeiw6tBh1aGjqkNHVYcOqw4dVh06qjp0VHXosOrQYdWho6pDR1WHDqsOHVYdOqo6dFR16LDq0GHVoaOqQ0dVhw6rDh1WHTqqOnRUdeiw6tBh1aGjqkNHVYcOqw4dVh06qjp0VHXosOrQYdWho6pDR1WHDqsOHVYdOqo6dFR16LDq0GHVofPv6tC8/N/yqf/P8lf/u5a3/7g82eXv/3R5nf9dS9U/Li92ebPXMuzyVa/l3+Wh/2z5Ua/l3+mh/2x5sNeS7PLHXkuxy5u9lmGXr3ot/WOXH/Va+rLL2Q79d4DoP1vOdmizHdpshzbboc126LAdOmyHDtuhw3bovytE/9lytkOH7dBhO3TYDh22Q5ft0GU7dNkOXbZD/50i+s+Wsx26bIcu26HLduiqHXp/aofen9qh96d26P2pHXp/yS5XO/T+1A69P7VD70/t0PtTO/QetUPvUTv0HrVD71E79P47SvSfLVc79B61Q+9RO/QetUPvYTv0sh162Q69bIdetkP/XSb6z5azHXrZDr1sh162Qy/bocF2aLAdGmyHBtuh/84T/WfL2Q4NtkOD7dBgOzTYDk22Q5Pt0GQ7NNkO/Xej6D9bznZosh2abIcm26HJduhjO/SxHfrYDmWdoss6RZd1ii7rFF3WKbqsU3RZp+iyTtFlnaLLOkWXdYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpuqxTdFmn6LJO0WWdoss6RZd1ii7rFF3WKbqsU3RZp+iyTtFlnaLLOkWXdYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpuqxTdFmnKFinKFinKFinKFinKH7JLlc7NFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFmnKFmnKFmnKFmnKH/JLlc7NFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmn6LFO0WOdosc6RY91it4v2eVqhz7W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KSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKWrWKWrWKWrWKWrWKepfssvVDm3WKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKRrWKRrWKRrWKRrWKZpfssvVDh3WKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKRrWKVrWKVrWKVrWKVrWKdpfssvVDl3WKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrWKVrVKTo/1Sn6lqMd+i1HO/RbjnbotzzZ5WiHfsvRDv2Wox36LUc79FuOduj5qU7Rtxzt0G852qHfcrRDv+XJLkc79FuOdui3HO3Qbznaod9ytkNVp+hbznao6hR9y9kOVZ2ibznboapT9C1nO1R1ir7lbIeqTtG3nO1Q1Sn6lrMdqjpF33K2Q1Wn6FvOdqjqFH3L2Q5VnaJvOduhqlP0LWc7VHWKvuVsh6pO0bec7VDVKfqWsx2qOkXfcrZDVafoW852qOoUfcvZDlWdom8526GqU/QtZztUdYq+5WyHqk7Rt5ztUNUp+pazHao6Rd9ytkNVp+hbznao6hR9y9kOVZ2ibznboapT9C1nO1R1ir7lbIeqTtG3nO1Q1Sn6lrMdqjpF33K2Q1Wn6FvOdqjqFH3L2Q5VnaJvOduhqlP0LWc7VHWKvuVsh6pO0bec7VDVKfqWsx2qOkXfcrVDD+sUHdYpOqxTdFin6PySXa526GGdosM6RYd1ig7rFB3WKTqsU3RYp+iwTtFhnaLDOkWHdYoO6xQd1ik6rFN0WKfosE7RYZ2iwzpFh3WKDusUHdYpOqxTdFin6LBO0WGdosM6RYd1ig7rFB3WKTqsU3RYp+iwTtFhnaLDOkWHdYoO6xQd1ik6rFN0WKfosE7RYZ2iwzpFh3WKDusUHdYpOqxTdFin6LBO0WGdosM6RYd1ig7rFB3WKTqsU3RYp+iwTtFhnaLDOkWHdYoO6xQd1ik6rFN0WKfosE7RYZ2iwzpFh3WKDusUHdYpOqxTdFin6LBO0WGdosM6RYd1ig7rFB3WKTqsU3RYp+iwTtFhnaLDOkWHdYoO6xQd1ik6rFN0WKfosE7RYZ2iwzpFh3WKDusUHdYpOqxTdFmn6LJO0WWdoss6RfeX7HK1Qy/rFF3WKbqsU3RZp+iyTtFlnaLLOkWXdYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpuqxTdFmn6LJO0WWdoss6RZd1ii7rFF3WKbqsU3RZp+iyTtFlnaLLOkWXdYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpuqxTdFmn6LJO0WWdoss6RZd1ii7rFF3WKbqsU3RZp+iyTtFlnaLLOkWXdYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpuqxTdFmn6LJO0WWdoss6RZd1ii7rFF3WKbqsU3RZp+iyTtFlnaLLOkWXdYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpuqxTdFmn6LJO0WWdomCdomCdomCdomCdovglu1zt0GCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomCdomSdomSdomSdomSdovwlu1zt0GSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdomSdosc6RY91ih7rFD3WKXq/ZJerHfpYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ih7rFD3WKXqsU/RYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ih7rFD3WKXqsU/RYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ih7rFD3WKXqsU/RYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ih7rFBXrFBXrFBXrFBXrFNUv2eVqhxbrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFBXrFDXrFDXrFDXrFDXrFPUv2eVqhzbrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFDXrFA3rFA3rFA3rFA3rFM0v2eVqhw7rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3rFA3r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UbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJOUbJO0WOdosc6RY91ih7rFL1fssvVDn2sU/RYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ih7rFD3WKXqsU/RYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ih7rFD3WKXqsU/RYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ih7rFD3WKXqsU/RYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91iop1iop1iop1iop1iuqX7HK1Q4t1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1iop1ipp1ipp1ipp1ipp1ivqX7HK1Q5t1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ipp1ioZ1ioZ1ioZ1ioZ1iuaX7HK1Q4d1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ipZ1ipZ1ipZ1ipZ1ivaX7HK1Q5d1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ilZ1iuKnOkXfcrRDv+Voh37L0Q79lie7HO3Qbznaod9ytEO/5WiHfsvRDo2f6hR9y9EO/ZajHfotRzv0W57scrRDv+Voh37L0Q79lqMd+i1nO1R1ir7lbIeqTtG3nO1Q1Sn6lrMdqjpF33K2Q1Wn6FvOdqjqFH3L2Q5VnaJvOduhqlP0LWc7VHWKvuVsh6pO0bec7VDVKfqWsx2qOkXfcrZDVafoW852qOoUfcvZDlWdom8526GqU/QtZztUdYq+5WyHqk7Rt5ztUNUp+pazHao6Rd9ytkNVp+hbznao6hR9y9kOVZ2ibznboapT9C1nO1R1ir7lbIeqTtG3nO1Q1Sn6lrMdqjpF33K2Q1Wn6FvOdqjqFH3L2Q5VnaJvOduhqlP0LWc7VHWKvuVsh6pO0bec7VDVKfqWsx2qOkXfcrZDVafoW852qOoUfcvZDlWdom8526GqU/QtVzv0sE7RYZ2iwzpFh3WKzi/Z5WqHHtYpOqxTdFin6LBO0WGdosM6RYd1ig7rFB3WKTqsU3RYp+iwTtFhnaLDOkWHdYoO6xQd1ik6rFN0WKfosE7RYZ2iwzpFh3WKDusUHdYpOqxTdFin6LBO0WGdosM6RYd1ig7rFB3WKTqsU3RYp+iwTtFhnaLDOkWHdYoO6xQd1ik6rFN0WKfosE7RYZ2iwzpFh3WKDusUHdYpOqxTdFin6LBO0WGdosM6RYd1ig7rFB3WKTqsU3RYp+iwTtFhnaLDOkWHdYoO6xQd1ik6rFN0WKfosE7RYZ2iwzpFh3WKDusUHdYpOqxTdFin6LBO0WGdosM6RYd1ig7rFB3WKTqsU3RYp+iwTtFhnaLDOkWHdYoO6xQd1ik6rFN0WKfosE7RYZ2iwzpFl3WKLusUXdYpuqxTdH/JLlc79LJO0WWdoss6RZd1ii7rFF3WKbqsU3RZp+iyTtFlnaLLOkWXdYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpuqxTdFmn6LJO0WWdoss6RZd1ii7rFF3WKbqsU3RZp+iyTtFlnaLLOkWXdYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpuqxTdFmn6LJO0WWdoss6RZd1ii7rFF3WKbqsU3RZp+iyTtFlnaLLOkWXdYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpuqxTdFmn6LJO0WWdoss6RZd1ii7rFF3WKbqsU3RZp+iyTtFlnaLLOkWXdYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpCtYpCtYpCtYpCtYpil+yy9UODdYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpCtYpStYpStYpStYpStYpyl+yy9UOTdYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpStYpeqxT9Fin6LFO0WOdovdLdrnaoY91ih7rFD3WKXqsU/RYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ih7rFD3WKXqsU/RYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ih7rFD3WKXqsU/RYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ih7rFD3WKXqsU/RYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFOUbFOUbFOUbFOUbFOUf2SXa52aLFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbFOUbNOUbNOUbNOUbNOUf+SXa52aLNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNOUbNO0bBO0bBO0bBO0bBO0fySXa526LBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO0bBO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atYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpGtYpGtYpGtYpGtYpml+yy9UOHdYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpGtYpWtYpWtYpWtYpWtYp2l+yy9UOXdYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtYpWtUpej/VKfqWox36LUc79FuOdui3PNnlaId+y9EO/ZajHfotRzv0W4526PupTtG3HO3Qbznaod9ytEO/5ckuRzv0W4526Lcc7dBvOdqh33K2Q1Wn6FvOdqjqFH3L2Q5VnaJvOduhqlP0LWc7VHWKvuVsh6pO0bec7VDVKfqWsx2qOkXfcrZDVafoW852qOoUfcvZDlWdom8526GqU/QtZztUdYq+5WyHqk7Rt5ztUNUp+pazHao6Rd9ytkNVp+hb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FesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUFesUNesUNesUNesUNesU9S/Z5WqHNusUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUNesUDesUDesUDesUDesUzS/Z5WqHDusUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesUDesULesULesULesULesU7S/Z5WqHLusULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesULesUreoU1U91ir7laId+y9EO/ZajHfotT3Y52qHfcrRDv+Voh37L0Q79lqMdWj/VKfqWox36LUc79FuOdui3PNnlaId+y9EO/ZajHfotRzv0W852qOoUfcvZDlWdom8526GqU/QtZztUdYq+5WyHqk7Rt5ztUNUp+pazHao6Rd9ytkNVp+hbznao6hR9y9kOVZ2ibznboapT9C1nO1R1ir7lbIeqTtG3nO1Q1Sn6lrMdqjpF33K2Q1Wn6FvOdqjqFH3L2Q5VnaJvOduhqlP0LWc7VHWKvuVsh6pO0bec7VDVKfqWsx2qOkXfcrZDVafoW852qOoUfcvZDlWdom8526GqU/QtZztUdYq+5WyHqk7Rt5ztUNUp+pazHao6Rd9ytkNVp+hbznao6hR9y9kOVZ2ibznboapT9C1nO1R1ir7lbIeqTtG3nO1Q1Sn6lrMdqjpF33K2Q1Wn6FuuduhhnaLDOkWHdYoO6xSdX7LL1Q49rFN0WKfosE7RYZ2iwzpFh3WKDusUHdYpOqxTdFin6LBO0WGdosM6RYd1ig7rFB3WKTqsU3RYp+iwTtFhnaLDOkWHdYoO6xQd1ik6rFN0WKfosE7RYZ2iwzpFh3WKDusUHdYpOqxTdFin6LBO0WGdosM6RYd1ig7rFB3WKTqsU3RYp+iwTtFhnaLDOkWHdYoO6xQd1ik6rFN0WKfosE7RYZ2iwzpFh3WKDusUHdYpOqxTdFin6LBO0WGdosM6RYd1ig7rFB3WKTqsU3RYp+iwTtFhnaLDOkWHdYoO6xQd1ik6rFN0WKfosE7RYZ2iwzpFh3WKDusUHdYpOqxTdFin6LBO0WGdosM6RYd1ig7rFB3WKTqsU3RYp+iwTtFhnaLDOkWHdYou6xRd1im6rFN0Wafo/pJdrnboZZ2iyzpFl3WKLusUXdYpuqxTdFmn6LJO0WWdoss6RZd1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rFNUrFNUrFNUrFNUrFNUrFNUrFNUrFNUrFNUrFNUrFNUrFNUrFNUrFNUrFNUrFNUrFNUrFPUrFPUrFPUrFPUrFPUv2SXqx3arFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFPUrFM0rFM0rFM0rFM0rFM0v2SXqx06rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFM0rFO0rFO0rFO0rFO0rFO0v2SXqx26rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0rFO0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Y52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ih7rFD3WKXqsU/RYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ih7rFD3WKXqsU/RYp+ixTtFjnaLHOkWPdYqKdYqKdYqKdYqKdYrql+xytUOLdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqKdYqadYqadYqadYqadYr6l+xytUObdYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqadYqGdYqGdYqGdYqGdYrml+xytUOHdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqG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TlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTlGzTtGwTtGwTtGwTtGwTtH8kl2uduiwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGwTtGyTtGyTtGyTtGyTtH+kl2uduiyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGyTtGiTlH9fqhT9Lfc7NC/5WaH/i03O/RvebLLzQ79W2526N9ys0P/lpsd+rfc7NBvOeoU/S03O/Rvudmhf8vNDv1bnuxys0P/lpsd+rfc7NC/5WaH/i1nOxR1iv6Wsx2KOkV/y9kORZ2iv+Vsh6JO0d9ytkNRp+hvOduhqFP0t5ztUNQp+lvOdijqFP0tZzsUdYr+lrMdijpFf8vZDkWdor/lbIeiTtHfcrZDUafobznboahT9Lec7VDUKfpbznYo6hT9LWc7FHWK/pazHYo6RX/L2Q5FnaK/5WyHok7R33K2Q1Gn6G8526GoU/S3nO1Q1Cn6W852KOoU/S1nOxR1iv6Wsx2KOkV/y9kORZ2iv+Vsh6JO0d9ytkNRp+hvOduhqFP0t5ztUNQp+lvOdijqFP0tZzsUdYr+lrMdijpFf8vZDkWdor/lbIeiTtHfcrZDUafobznboahT9Lec7VDUKfpbznYo6hT9LVc79LBO0WGdosM6RYd1is4v2eVqhx7WKTqsU3RYp+iwTtFhnaLDOkWHdYoO6xQd1ik6rFN0WKfosE7RYZ2iwzpFh3WKDusUHdYpOqxTdFin6LBO0WGdosM6RYd1ig7rFB3WKTqsU3RYp+iwTtFhnaLDOkWHdYoO6xQd1ik6rFN0WKfosE7RYZ2iwzpFh3WKDusUHdYpOqxTdFin6LBO0WGdosM6RYd1ig7rFB3WKTqsU3RYp+iwTtFhnaLDOkWHdYoO6xQd1ik6rFN0WKfosE7RYZ2iwzpFh3WKDusUHdYpOqxTdFin6LBO0WGdosM6RYd1ig7rFB3WKTqsU3RYp+iwTtFhnaLDOkWHdYoO6xQd1ik6rFN0WKfosE7RYZ2iwzpFh3WKDusUHdYpOqxTdFin6LBO0WGdosM6RZd1ii7rFF3WKbqsU3R/yS5XO/SyTtFlnaLLOkWXdYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpuqxTdFmn6LJO0WWdoss6RZd1ii7rFF3WKbqsU3RZp+iyTtFlnaLLOkWXdYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpuqxTdFmn6LJO0WWdoss6RZd1ii7rFF3WKbqsU3RZp+iyTtFlnaLLOkWXdYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpuqxTdFmn6LJO0WWdoss6RZd1ii7rFF3WKbqsU3RZp+iyTtFlnaLLOkWXdYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpuqxTdFmn6LJO0WWdoss6RZd1ii7rFF3WKQrWKQrWKQrWKQrWKYpfssvVDg3WKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKQrWKUrWKUrWKUrWKUrWKcpfssvVDk3WKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKUrWKfp/1NxBqgNJrKbRLVkKKULa/8Y6L3S/aQ+qeMWZO5PfWGC+ySnWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKSrWKWrWKWrWKWrWKWrWKepfscvVDm3WKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKWrWKbqsU3RZp+iyTtFlnaL7K3a52qGXdYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpuqxTdFmn6LJO0WWdoss6RZd1ii7rFF3WKbqsU3RZp+iyTtFlnaLLOkWXdYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpuqxTdFmn6LJO0WWdoss6RZd1ii7rFF3WKbqsU3RZp+iyTtFlnaLLOkWXdYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpuqxTdFmn6LJO0WWdoss6RZd1ii7rFF3WKbqsU3RZp+iyTtFlnaLLOkWXdYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpuqxTdFmn6LJO0WWdoss6RZd1ii7rFF3WKbqsU3RZp+iyTtFjnaLHOkWPdYoe6xS9X7HL1Q59rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ih7rFD3WKXqsU/RYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ih7rFD3WKXqsU/RYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ih7rFD3WKXqsU/RYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ih7rFD3WKXqsU/RYp+ixTtFjnaLHOkWPdYqGdYqGdYqGdYqGdYrmV+xytUOHdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqGdYqWdYqWdYqWdYqWdYr2V+xytUOXdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYqWdYpWdYripzpF33K0Q7/laId+y9EO/ZYXuxzt0G852qHfcrRDv+Voh37L0Q6Nn+oUfcvRDv2Wox36LUc79Fte7HK0Q7/laId+y9EO/ZajHfotZztUdYq+5WyHqk7Rt5ztUNUp+pazHao6Rd9ytkNVp+hbznao6hR9y9kOVZ2ibznboapT9C1nO1R1ir7lbIeqTtG3nO1Q1Sn6lrMdqjpF33K2Q1Wn6FvOdqjqFH3L2Q5VnaJvOduhqlP0LWc7VHWKvuVsh6pO0bec7VDVKfqWsx2qOkXfcrZDVafoW852qOoUfcvZDlWdom8526GqU/QtZztUdYq+5WyHqk7Rt5ztUNUp+pazHao6Rd9ytkNVp+hbznao6hR9y9kOVZ2ibznboapT9C1nO1R1ir7lbIeqTtG3nO1Q1Sn6lrMdqjpF33K2Q1Wn6FvOdqjqFH3L2Q5VnaJvOduhqlP0LVc7NFinKFinKFinKFinKH7FLlc7NFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFinKFmnKFmnKFmnKFmnKH/FLlc7NFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmnKFmn6LBO0WGdosM6RYd1is6v2OVqhx7WKTqsU3RYp+iwTtFhnaLDOkWHdYoO6xQd1ik6rFN0WKfosE7RYZ2iwzpFh3WKDusUHdYpOqxTdFin6LBO0WGdosM6RYd1ig7rFB3WKTqsU3RYp+iwTtFhnaLDOkWHdYoO6xQd1ik6rFN0WKfosE7RYZ2iwzpFh3WKDusUHdYpOqxTdFin6LBO0WGdosM6RYd1ig7rFB3WKTqsU3RYp+iwTtFhnaLDOkWHdYoO6xQd1ik6rFN0WKfosE7RYZ2iwzpFh3WKDusUHdYpOqxTdFin6LBO0WGdosM6RYd1ig7rFB3WKTqsU3RYp+iwTtFhnaLDOkWHdYoO6xQd1ik6rFN0WKfosE7RYZ2iwzpFh3WKDusUHdYpOqxTdFin6LBO0WGdosM6RcU6RcU6RcU6RcU6RfUrdrnaocU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6RcU6Rc06Rc06Rc06Rc06Rf0rdrnaoc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rc06Rf3YDmWdomadomadomadomadomadomadomadomadomadomadomadomadomadomadomadomadomadomadomadomadoss6RZd1ii7rFF3WKbq/YperHXpZp+iyTtFlnaLLOkWXdYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpuqxTdFmn6LJO0WWdoss6RZd1ii7rFF3WKbqsU3RZp+iyTtFlnaLLOkWXdYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpuqxTdFmn6LJO0WWdoss6RZd1ii7rFF3WKbqsU3RZp+iyTtFlnaLLOkWXdYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpuqxTdFmn6LJO0WWdoss6RZd1ii7rFF3WKbqsU3RZp+iyTtFlnaLLOkWXdYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpuqxTdFmn6LJO0WWdoss6RZd1ii7rFD3WKXqsU/RYp+ixTtH7Fbtc7dDHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ih7rFD3WKXqsU/RYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ih7rFD3WKXqsU/RYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ih7rFD3WKXqsU/RYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ih7rFD3WKXqsU/RYp2hYp2hYp2hYp2hYp2h+xS5XO3RYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hYp2hZp2hZp2hZp2hZp2h/xS5XO3RZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hZp2hVpyh/qlP0LUc79FuOdui3HO3Qb3mxy9EO/ZajHfotRzv0W4526Lcc7dD8qU7Rtxzt0G852qHfcrRDv+XFLkc79FuOdui3HO3Qbznaod9ytkNVp+hbznao6hR9y9kOVZ2ibznboapT9C1nO1R1ir7lbIeqTtG3nO1Q1Sn6lrMdqjpF33K2Q1Wn6FvOdqjqFH3L2Q5VnaJvOduhqlP0LWc7VHWKvuVsh6pO0bec7VDVKfqWsx2qOkXfcrZDVafoW852qOoUfcvZDlWdom8526GqU/QtZztUdYq+5WyHqk7Rt5ztUNUp+pazHao6Rd9ytkNVp+hbznao6hR9y9kOVZ2ibznboapT9C1nO1R1ir7lbIeqTtG3nO1Q1Sn6lrMdqjpF33K2Q1Wn6FvOdqjqFH3L2Q5VnaJvOduhqlP0LWc7VHWKvuVsh6pO0bec7VDVKfqWsx2qOkXfcrVDg3WKgnWKgnWKgnWK4lfscrVDg3WKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKgnWKknWKknWKknWKknWK8lfscrVDk3WKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKknWKDusUHdYpOqxTdFin6PyKXa526GGdosM6RYd1ig7rFB3WKTqsU3RYp+iwTtFhnaLDOkWHdYoO6xQd1ik6rFN0WKfosE7RYZ2iwzpFh3WKDusUHdYpOqxTdFin6LBO0WGdosM6RYd1ig7rFB3WKTqsU3RYp+iw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atYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpatYpuqxTdFmn6LJO0WWdovsrdrnaoZd1ii7rFF3WKbqsU3RZp+iyTtFlnaLLOkWXdYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpuqxTdFmn6LJO0WWdoss6RZd1ii7rFF3WKbqsU3RZp+iyTtFlnaLLOkWXdYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpuqxTdFmn6LJO0WWdoss6RZd1ii7rFF3WKbqsU3RZp+iyTtFlnaLLOkWXdYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpuqxTdFmn6LJO0WWdoss6RZd1ii7rFF3WKbqsU3RZp+iyTtFlnaLLOkWXdYou6xRd1im6rFN0Wafosk7RZZ2iyzpFl3WKLusUXdYpuqxTdFmn6LJO0WOdosc6RY91ih7rFL1fscvVDn2sU/RYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ih7rFD3WKXqsU/RYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ih7rFD3WKXqsU/RYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ih7rFD3WKXqsU/RYp+ixTtFjnaLHOkWPdYoe6xQ91il6rFP0WKfosU7RY52ixzpFj3WKHusUPdYpeqxT9Fin6LFO0WOdosc6RY91ioZ1ioZ1ioZ1ioZ1iuZX7HK1Q4d1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ioZ1ipZ1ipZ1ipZ1ipZ1ivZX7HK1Q5d1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ipZ1ilZ1iuqnOkXfcrRDv+Voh37L0Q79lhe7HO3Qbznaod9ytEO/5WiHfsvRDq2f6hR9y9EO/ZajHfotRzv0W17scrRDv+Voh37L0Q79lqMd+i1nO1R1ir7lbIeqTtG3nO1Q1Sn6lrMdqjpF33K2Q1Wn6FvOdqjqFH3L2Q5VnaJvOduhqlP0LWc7VHWKvuVsh6pO0bec7VDVKfqWsx2qOkXfcrZDVafoW852qOoUfcvZDlWdom8526GqU/QtZztUdYq+5WyHqk7Rt5ztUNUp+pazHao6Rd9ytkNVp+hbznao6hR9y9kOVZ2ibznboapT9C1nO1R1ir7lbIeqTtG3nO1Q1Sn6lrMdqjpF33K2Q1Wn6FvOdqjqFH3L2Q5VnaJvOduhqlP0LWc7VHWKvuVsh6pO0bec7VDVKfqWsx2qOkXfcrZDVafoW852qOoUfcvZDlWdom8526GqU/QtVzs0WKcoWKcoWKcoWKcofsUuVzs0WKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWKcoWacoWacoWacoWacof8UuVzs0WacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWacoWafosE7RYZ2iwzpFh3WKzq/Y5WqHHtYpOqxTdFin6LBO0WGdosM6RYd1ig7rFB3WKTqsU3RYp+iwTtFhnaLDOkWHdYoO6xQd1ik6rFN0WKfosE7RYZ2iwzpFh3WKDusUHdYpOqxTdFin6LBO0WGdosM6RYd1ig7rFB3WKTqsU3RYp+iwTtFhnaLDOkWHdYoO6xQd1ik6rFN0WKfosE7RYZ2iwzpFh3WKDusUHdYpOqxTdFin6LBO0WGdosM6RYd1ig7rFB3WKTqsU3RYp+iwTtFhnaLDOkWHdYoO6xQd1ik6rFN0WKfosE7RYZ2iwzpFh3WKDusUHdYpOqxTdFin6LBO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9FR16Knq0GPVoceqQ09Vh56qDj1WHXqsOvRUdeip6tBj1aHHqkNPVYeeqg49Vh16rDr0VHXoqerQY9Whx6pDT1WHnqoOPVYdeqw69FR16Knq0GPVoceqQ09Vh56qDj1WHXqsOvRUdeip6tBj1aHHqkNPVYeeqg49Vh16rDr0VHXoqerQY9Whx6pDT1WHnqoOPVYdeqw69FR16Knq0GPVoceqQ09Vh56qDj1WHXqsOvRUdeip6tBj1aHHqkNPVYeeqg49Vh16rDr0VHXoqerQY9Whx6pDT1WHnqoOPVYdeqw69FR16Knq0GPVoceqQ09Vh56qDj1WHXqsOvRUdeip6tBj1aHHqkNPVYeeqg49Vh16rDr0VHXoqerQY9WhYdWhUdWhUdWhYdWh+RW7HK3PUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhZdWhVdWhVdWhZdWh/RW7HK3PVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhVdWh91PVoW+5WZ/fcLM+v+FofX7Li11u1uc33KzPbzhan99ytD6/5WZ9vh+qDn3D0fr8lqP1+S036/MbXupwtD6/5Wh9fsvN+vyGm/X5DWfrU1WHvuVqfaLq0DecrU9VHfqWq/WJqkPfcLY+VXXoW67WJ6oOfcPZ+lTVoW+5Wp+oOvQNZ+tTVYe+5Wp9ourQN5ytT1Ud+par9YmqQ99wtj5VdehbrtYnqg59w9n6VNWhb7lan6g69A1n61NVh77lan2i6tA3nK1PVR36lqv1iapD33C2PlV16Fuu1ieqDn3D2fpU1aFvuVqfqDr0DWfrU1WHvuVqfaLq0DecrU9VHfqWq/WJqkPfcLY+VXXoW67WJ6oOfcPZ+lTVoW+5Wp+oOvQNZ+tTVYe+5Wp9ourQN5ytT1Ud+par9YmqQ99wtj5VdehbrtYnqg59w9n6VNWhb7lan6g69A1X6zNYdShUdShUdShYdSh+xS5H6zNUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShYdShUdShUdShYdShZdShVdShVdShZdSh/xS5H6zNVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShVdShZdShZdShVdShV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qOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsurQqurQqurQsurQ/opdjtbnqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQqurQ/FR16Ftu1uc33KzPbzhan9/y/9W/z391uVmf33CzPr/haH1+y9H6/Jab9Tk/VB36hqP1+S1H6/NbbtbnN7zU4Wh9fsvR+vyWm/X5DTfr8xvO1qeqDn3L1fpE1aFvOFufqjr0LVfrE1WHvuFsfarq0LdcrU9UHfqGs/WpqkPfcrU+UXXoG87Wp6oOfcvV+kTVoW84W5+qOvQtV+sTVYe+4Wx9qurQt1ytT1Qd+oaz9amqQ99ytT5Rdegbztanqg59y9X6RNWhbzhbn6o69C1X6xNVh77hbH2q6tC3XK1PVB36hrP1qapD33K1PlF16BvO1qeqDn3L1fpE1aFvOFufqjr0LVfrE1WHvuFsfarq0LdcrU9UHfqGs/WpqkPfcrU+UXXoG87Wp6oOfcvV+kTVoW84W5+qOvQtV+sTVYe+4Wx9qurQt1ytT1Qd+oaz9amqQ99ytT5RdegbrtZnsOpQqOpQqOpQsOpQ/IpdjtZnqOpQsOpQsOpQqOpQqOpQsOpQsOpQqOpQqOpQsOpQsOpQqOpQqOpQsOpQsOpQqOpQqOpQsOpQsOpQqOpQqOpQsOpQsOpQqOpQqOpQsOpQsOpQqOpQqOpQsOpQsOpQqOpQqOpQsOpQsOpQqOpQqOpQsOpQsOpQqOpQqOpQsOpQsOpQqOpQqOpQsOpQsOpQqOpQqOpQsOpQsOpQqOpQqOpQsOpQsOpQqOpQqOpQsOpQsOpQqOpQqOpQsOpQsOpQqOpQqOpQsOpQsOpQqOpQqOpQsOpQsOpQqOpQqOpQsOpQsOpQqOpQqOpQsOpQsOpQqOpQqOpQsOpQsOpQqOpQqOpQsOpQsOpQqOpQqOpQsOpQsOpQqOpQqOpQsOpQsupQqupQqupQsupQ/opdjtZnqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsurQYdWho6pDR1WHDqsOnV+xy9H6PKo6dFh16LDq0FHVoaOqQ4dVhw6rDh1VHTqqOnRYdeiw6tBR1aGjqkOHVYcOqw4dVR06qjp0WHXosOrQUdWho6pDh1WHDqsOHVUdOqo6dFh16LDq0FHVoaOqQ4dVhw6rDh1VHTqqOnRYdeiw6tBR1aGjqkOHVYcOqw4dVR06qjp0WHXosOrQUdWho6pDh1WHDqsOHVUdOqo6dFh16LDq0FHVoaOqQ4dVhw6rDh1VHTqqOnRYdeiw6tBR1aGjqkOHVYcOqw4dVR06qjp0WHXosOrQUdWho6pDh1WHDqsOHVUdOqo6dFh16LDq0FHVoaOqQ4dVhw6rDh1VHTqqOnRYdeiw6tBR1aGjqkOHVYcOqw4dVR06qjp0WHXosOrQUdWho6pDh1WHilWHSlWHSlWHilWH6lfscrQ+S1WHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHmlWHWlWHWlWHmlWH+lfscrQ+W1WHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHLqsOXVUduqo6dFl16P6KXY7W51XVocuqQ5dVh66qDl1VHbqsOnRZdeiq6tBV1aHLqkOXVYeuqg5dVR26rDp0WXXoqurQVdWhy6pDl1WHrqoOXVUduqw6dFl16Krq0FXVocuqQ5dVh66qDl1VHbqsOnRZdeiq6tBV1aHLqkOXVYeuqg5dVR26rDp0WXXoqurQVdWhy6pDl1WHrqoOXVUduqw6dFl16Krq0FXVocuqQ5dVh66qDl1VHbqsOnRZdeiq6tBV1aHLqkOXVYeuqg5dVR26rDp0WXXoqurQVdWhy6pDl1WHrqoOXVUduqw6dFl16Krq0FXVocuqQ5dVh66qDl1VHbqsOnRZdeiq6tBV1aHLqkOXVYeuqg5dVR26rDp0WXXoqurQVdWhy6pDl1WHrqoOXVUduqw69Fh16Knq0FPVoceqQ+9X7HK0Pp+qDj1WHXqsOvRUdeip6tBj1aHHqkNPVYeeqg49Vh16rDr0VHXoqerQY9Whx6pDT1WHnqoOPVYdeqw69FR16Knq0GPVoceqQ09Vh56qDj1WHXqsOvRUdeip6tBj1aHHqkNPVYeeqg49Vh16rDr0VHXoqerQY9Whx6pDT1WHnqoOPVYdeqw69FR16Knq0GPVoceqQ09Vh56qDj1WHXqsOvRUdeip6tBj1aHHqkNPVYeeqg49Vh16rDr0VHXoqerQY9Whx6pDT1WHnqoOPVYdeqw69FR16Knq0GPVoceqQ09Vh56qDj1WHXqsOvRUdeip6tBj1aHHqkNPVYeeqg49Vh16rDr0VHXoqerQY9Whx6pDT1WHnqoOPVYdeqw69FR16Knq0GPVoWHVoVHVoVHVoWHVofkVuxytz1HVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWXVoVXVoVXVoWXVof0Vuxytz1XVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoVXVof2p6tC33KzPb7hZn99wtD6/5cUuN+vzG27W5zccrc9vOVqf33KzPveHqkPfcLQ+v+VofX7Lzfr8hpc6HK3Pbzlan99ysz6/4WZ9fsPZ+lTVoW+5Wp+oOvQNZ+tTVYe+5Wp9ourQN5ytT1Ud+par9YmqQ99wtj5VdehbrtYnqg59w9n6VNWhb7lan6g69A1n61NVh77l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tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKw6tKw6tKo6tKo6tKg69H4/VB36W07W599wsj7/hpv1+be82OVkff4NJ+vzb7hZn3/Lzfr8W07W5zfcVIf+hpv1+bfcrM+/5WR9/g0vdbhZn3/Lzfr8W07W599wsj7/hrP1iapDf8vV+jTVob/hbH2i6tDfcrU+TXXobzhbn6g69LdcrU9THfobztYnqg79LVfr01SH/oaz9YmqQ3/L1fo01aG/4Wx9ourQ33K1Pk116G84W5+oOvS3XK1PUx36G87WJ6oO/S1X69NUh/6Gs/WJqkN/y9X6NNWhv+FsfaLq0N9ytT5NdehvOFufqDr0t1ytT1Md+hvO1ieqDv0tV+vTVIf+hrP1iapDf8vV+jTVob/hbH2i6tDfcrU+TXXobzhbn6g69LdcrU9THfobztYnqg79LVfr01SH/oaz9YmqQ3/L1fo01aG/4Wx9ourQ33K1Pk116G84W5+oOvS3XK1PUx36G87WJ6oO/S1X69NUh/6Gq/UZrDoUqjoUqjoUrDoUv2KXo/UZqjoUrDoUrDoUqjoUqjoUrDoUrDoUqjoUqjoUrDoUrDoUqjoUqjoUrDoUrDoUqjoUqjoUrDoUrDoUqjoUqjoUrDoUrDoUqjoUqjoUrDoUrDoUqjoUqjoUrDoUrDoUqjoUqjoUrDoUrDoUqjoUqjoUrDoUrDoUqjoUqjoUrDoUrDoUqjoUqjoUrDoUrDoUqjoUqjoUrDoUrDoUqjoUqjoUrDoUrDoUqjoUqjoUrDoUrDoUqjoUqjoUrDoUrDoUqjoUqjoUrDoUrDoUqjoUqjoUrDoUrDoUqjoUqjoUrDoUrDoUqjoUqjoUrDoUrDoUqjoUqjoUrDoUrDoUqjoUqjoUrDoUrDoUqjoUqjoUrDoUrDoUqjoUqjoUrDqUrDqUqjqUqjqU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WHXoserQU9Whp6pDj1WHHqsOPVUdeqo69Fh1aFh1aFR1aFR1aFh1aH7FLkfrc1R1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFl1aFV1aFV1aFl1aH/FLkfrc1V1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFV16PviaH1+y836/B436/N7HK3Pb3mxy836/B436/N7HK3Pbzlan99ysz7jh6pD33C0Pr/laH1+y836/IaXOhytz2/5ZZeb9fkNN+vzG87Wp6oOfW9S6xNVh77hbH2q6tD3JrU+UXXo77djb4WtT1Qdih+qDn3D2fpU1aFvuVqfqDr0DWfrU1WHvuVqfaLq0DecrU9VHfqWq/WJqkPfcLY+VXXoW67WJ6oOfcPZ+lTVoW+5Wp+oOvQNZ+tTVYe+5Wp9ourQN5ytT1Ud+par9YmqQ99wtj5VdehbrtYnqg59w9n6VNWhb7lan6g69A1n61NVh77lan2i6tA3nK1PVR36HlfrE1WH/n4w9lbY+kTVoW+4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qupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsurQYdWho6pDR1WHDqsOnV+xy9H6PKo6dFh16LDq0FHVoaOqQ4dVhw6rDh1VHTqqOnRYdeiw6tBR1aGjqkOHVYcOqw4dVR06qjp0WHXosOrQUdWho6pDh1WHDqsOHVUdOqo6dFh16LDq0FHVoaOqQ4dVhw6rDh1VHTqqOnRYdeiw6tBR1aGjqkOHVYcOqw4dVR06qjp0WHXosOrQUdWho6pDh1WHDqsOHVUdOqo6dFh16LDq0FHVoaOqQ4dVhw6rDh1VHTqqOnRYdeiw6tBR1aGjqkOHVYcOqw4dVR06qjp0WHXosOrQUdWho6pDh1WHDqsOHVUdOqo6dFh16LDq0FHVoaOqQ4dVhw6rDh1VHTqqOnRYdeiw6tBR1aGjqkOHVYcOqw4dVR06qjp0WHXosOrQUdWho6pDh1WHilWHSlWHSlWHilWH6lfscrQ+S1WHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHmlWHWlWHWlWHmlWH+lfscrQ+W1WHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHLqsOXVUduqo6dFl16P6KXY7W51XVocuqQ5dVh66qDl1VHbqsOnRZdeiq6tBV1aHLqkOXVYeuqg5dVR26rDp0WXXoqurQVdWhy6pDl1WHrqoOXVUduqw6dFl16Krq0FXVocuqQ5dVh66qDl1VHbqsOnRZdeiq6tBV1aHLqkOXVYeuqg5dVR26rDp0WXXoqurQVdWhy6pDl1WHrqoOXVUduqw6dFl16Krq0FXVocuqQ5dVh66qDl1VHbqsOnRZdeiq6tBV1aHLqkOXVYeuqg5dVR26rDp0WXXoqurQVdWhy6pDl1WHrqoOXVUduqw6dFl16Krq0FXVocuqQ5dVh66qDl1VHbqsOnRZdeiq6tBV1aHLqkOXVYeuqg5dVR26rDp0WXXoqurQVdWhy6pDl1WHrqoOXVUduqw69Fh16Knq0FPVoceqQ+9X7HK0Pp+qDj1WHXqsOvRUdeip6tBj1aHHqkNPVYeeqg49Vh16rDr0VHXoqerQY9Whx6pDT1WHnqoOPVYdeqw69FR16Knq0GPVoceqQ09Vh56qDj1WHXqsOvRUdeip6tBj1aHHqkNPVYeeqg49Vh16rDr0VHXoqerQY9Whx6pDT1WHnqoOPVYdeqw69FR16Knq0GPVoceqQ09Vh56qDj1WHXqsOvRUdeip6tBj1aHHqkNPVYeeqg49Vh16rDr0VHXoqerQY9Whx6pDT1WHnqoOPVYdeqw69FR16Knq0GPVoceqQ09Vh56qDj1WHXqsOvRUdeip6tBj1aHHqkNPVYeeqg49Vh16rDr0VHXoqerQY9Whx6pDT1WHnqoOPVYdeqw69FR16Knq0GPVoWHVoVHVoVHVoWHVofkVuxytz1HVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWHVoVHVoVHVoWHVoWXVoVXVoVXVoWXVof0Vuxytz1XVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoWXVoWXVoVXVoVXVoVXVofNT1aFvuVmf33CzPr/haH1+y4tdbtbnN9ysz284Wp/fcrQ+v+VmfZ4fqg59w9H6/Jaj9fktN+vzG17qcLQ+v+VofX7Lzfr8hpv1+Q1n61NVh77lan2i6tA3nK1PVR36lqv1iapD33C2PlV16Fuu1ieqDn3D2fpU1aFvuVqfqDr0DWfrU1WHvuVqfaLq0DecrU9VHfqWq/WJqkPfcLY+VXXoW67WJ6oOfcPZ+lTVoW+5Wp+oOvQNZ+tTVYe+5Wp9ourQN5ytT1Ud+par9YmqQ99wtj5VdehbrtYnqg59w9n6VNWhb7lan6g69A1n61NVh77lan2i6tA3nK1PVR36lqv1iapD33C2PlV16Fuu1ieqDn3D2fpU1aFvuVqfqDr0DWfrU1WHvuVqfaLq0DecrU9VHfqWq/WJqkPfcLY+VXXoW67WJ6oOfcPZ+lTVoW+5Wp+oOvQNV+szWHUoVHUoVHUoWHUofsUuR+szVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWHUoVHUoVHUoWHUoWXUoVXUoVXUoWXUof8UuR+szVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXUoWXUoVXUoVXUoWXXosOrQUdWho6pDh1WHzq/Y5Wh9HlUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDxapDpapDpapDxapD9St2OVqfpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDxapDpapDpapDxapDzapDrapDrapDzapD/St2OVqfrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDzapDrapDrapDzapDl1WHrqoOXVUduqw6dH/FLkfr86rq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYdeqw69FR16Knq0GPVofcrdjlan09Vhx6rDj1WHXqqOvRUdeix6tBj1aGnqkNPVYceqw49Vh16qjr0VHXoserQY9Wh9y+oQ1v/97Pnl/2/diz/gjr0Hw0//5vD/9VbKXZ5q8dy1eGPvZVhly96LP+COvQfDQ/1Vk6yy496LKUOb/ZWLrv8qccy6vBVb6V+7HK1Pkutz2Lr819Qh/6r5Wp9llqfxdZnsfVZan22Wp/N1mez9dlqff4L6tB/NJytz2brs9X6bLU+m63Py9bnVevzqvV52fr8F9Sh/2q5Wp9Xrc/L1udl6/Oq9fnU+nxsfT62Pp9an/+COvQfDWfr87H1+dT6fGp9PrY+h63PUetz1Poctj7/BXXov1qu1ueo9TlsfQ5bn6PW56r1uWx9Llufq9bnv6AO/UfD2fpctj5Xrc9V63PV+pyfWp/zQ+tzfmh9zk+tz/kVuxytz/mh9Tk/tT7np9bn/ND6nEDrc0Ktzwm1PifQ+px/QR36j4ar9Tmh1ucEWp8TaH1OsPWZbH2q6tCo6tCw6tCw6tCo6tCo6tCw6tCw6tCo6tCo6tCw6tCw6tCo6tCo6tCw6tCw6tCo6tCo6tCw6tCw6tCo6tCo6tCw6tCw6tCo6tCo6tCw6tCw6tCo6tCo6tCw6tCw6tCo6tCo6tCw6tCw6tCo6tCo6tCw6tCw6tCo6tCo6tCw6tCw6tCo6tCo6tCw6tCw6tCo6tCo6tCw6tCw6tCo6tCo6tCw6tCw6tCo6tCo6tCw6tCw6tCo6tCo6tCw6tCw6tCo6tCo6tCw6tCw6tCo6tCo6tCw6tCw6tCo6tCo6tCw6tCw6tCo6tCo6tCw6tCy6tCq6tCq6tCy6tD+il2O1ueq6tCy6tCy6tCq6tCq6tCy6tCy6tCq6tCq6tCy6tCy6tCq6tCq6tCy6tCy6tCq6tCq6tCy6tCy6tCq6tCq6tCy6tCy6tCq6tCq6tCy6tCy6tCq6tCq6tCy6tCy6tCq6tCq6tCy6tCy6tCq6tCq6tCy6tCy6tCq6tCq6tCy6tCy6tCq6tCq6tCy6tCy6tCq6tCq6tCy6tCy6tCq6tCq6tCy6tCy6tCq6tCq6tCy6tCy6tCq6tCq6tCy6tCy6tCq6tCq6tCy6tCy6tCq6tCq6tCy6tCy6tCq6tCq6tCy6tCy6tCq6tCq6tCy6tCy6tCq6tCq6tCy6tCy6tCq6tCq6tCy6tCy6tCq6tCq6tCy6tCy6tCq6tCq6tCq6lD9VHXoW27W5zfcrM9vOFqf3/Jil5v1+Q036/Mbjtbntxytz2+5WZ/1Q9Whbzhan99ytD6/5WZ9fsNLHY7W57ccrc9vuVmf33CzPr/hbH2q6tC3XK1PVB36hrP1qapD33K1PlF16BvO1qeqDn3L1fpE1aFvOFufqjr0LVfrE1WHvuFsfarq0LdcrU9UHfqGs/WpqkPfcrU+UXXoG87Wp6oOfcvV+kTVoW84W5+qOvQtV+sTVYe+4Wx9qurQt1ytT1Qd+oaz9amqQ99ytT5Rdegbztanqg59y9X6RNWhbzhbn6o69C1X6xNVh77hbH2q6tC3XK1PVB36hrP1qapD33K1PlF16BvO1qeqDn3L1fpE1aFvOFufqjr0LVfrE1WHvuFsfarq0LdcrU9UHfqGs/WpqkPfcrU+UXXoG87Wp6oOfcvV+kTVoW84W5+qOvQtV+sTVYe+4Wp9BqsOhaoOhaoOBasOxa/Y5Wh9hqoOBasOBasOxQ+tz1DVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWTVoVTVoVTVoWTVofwVuxytz1TVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTV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6LHq0FPVoaeqQ49Vhx6rDj1VHXqqOvRYdeix6tBT1aGnqkOPVYceqw49VR16qjr0WHXoserQU9Whp6pDj1WHHqsOPVUdeqo69Fh16LHq0FPVoaeqQ49Vhx6rDj1VHXqqOvRYdeix6tBT1aGnqkOPVYceqw49VR16qjr0WHXoserQU9Whp6pDj1WHHqsOPVUdeqo69Fh16LHq0FPVoaeqQ49Vhx6rDj1VHXqqOvRYdWhYdWhUdWhUdWhYdWh+yS5H63NUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhZdWhVdWhVdWhZdWh/yS5H63NVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhVdah/qjr0LTfr8xtu1uc3HK3Pb3myy836/Iab9fkNR+vzW47W57fcrM/+oerQNxytz285Wp/fcrM+v+GpDkfr81uO1ue33KzPb7hZn99wtj5VdehbrtYnqg59w9n6VNWhb7lan6g69A1n61NVh77lan2i6tA3nK1PVR36lqv1iapD33C2PlV16Fuu1ieqDn3D2fpU1aFvuVqfqDr0DWfrU1WHvuVqfaLq0DecrU9VHfqWq/WJqkPfcLY+VXXoW67WJ6oOfcPZ+lTVoW+5Wp+oOvQNZ+tTVYe+5Wp9ourQN5ytT1Ud+par9YmqQ99wtj5VdehbrtYnqg59w9n6VNWhb7lan6g69A1n61NVh77lan2i6tA3nK1PVR36lqv1iapD33C2PlV16Fuu1ieqDn3D2fpU1aFvuVqfqDr0DWfrU1WHvuVqfaLq0DecrU9VHfqWq/WJqkPfcLU+D6sOHVUdOqo6dFh16PySXY7W51HVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFl16Krq0FXVocuqQ/eX7HK0Pq+qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVoWDVoVDVoVDVoWDVofgluxytz1DVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWDVoVDVoVDVoWDVoWTVoVTVoVTVoWTVofwluxytz1TVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWTVoVTVoVTVoWTVoWLVoVLVoVLVoWLVofoluxytz1LVoWLVoWLVoVLVoVLVoWLVoWLVoVLVoVLVoWLVoWLVoVLVoVLVoWLVoWLVoVLVoVLVoWLVoWLVoVLVoVLVoWLVoWLVoVLVoVLVoWLVoWLVoVLVoVLVoWLVoWLVoVLVoVLVoWLVoWLVoVLVoVLVoWLVoWLVoVLVoVLVoWLVoWLVoVLVoVLVoWLVoWLVoVLVoVLVoWLVoWLVoVLVoVLVoWLVoWLVoVLVoVLVoWLVoWLVoVLVoVLVoWLVoWLVoVLVoVLVoWLVoWLVoVLVoVLVoWLVoWLVoVLVoVLVoWLVoWLVoVLVoVLVoWLVoWLVoVLVoVLVoWLVoWLVoVLVoVLVoWLVoWLVoVLVoVLVoWLVoWLVoVLVoVLVoWLVoWbVoVbVoVbVoWbVof4luxytz1bVoWbVoWbVoVbVoVbVoWbVoWbVoVbVoVbVoWbVoWbVoVbVoVbV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UKjqUKjqULDqULDqUKjqUKjqULDqULDqUKjqUKjqULDqULDqUKjqUKjqULDqULDqUKjqUKjqULDqULDqUKjqUKjqULDqULDqUKjqUKjqULDqULDqUKjqUKjqULDqULDqUKjqUKjqULDqULLqUKrqUKrqULLqUP6SXY7WZ6rqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULHqUKnqUKnqULHqUP2SXY7WZ6nqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULPqUKvqUKvqULPqUP+SXY7WZ6vqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPq0GPVoaeqQ09Vhx6rDr1fssvR+nyqOvRYdeix6tBT1aGnqkOPVYceqw49VR16qjr0WHXoserQU9Whp6pDj1WHHqsOPVUdeqo69Fh16LHq0FPVoaeqQ49Vhx6rDj1VHXqqOvRYdeix6tBT1aGnqkOPVYceqw49VR16qjr0WHXoserQU9Whp6pDj1WHHqsOPVUdeqo69Fh16LHq0FPVoaeqQ49Vhx6rDj1VHXqqOvRYdeix6tBT1aGnqkOPVYceqw49VR16qjr0WHXoserQU9Whp6pDj1WHHqsOPVUdeqo69Fh16LHq0FPVoaeqQ49Vhx6rDj1VHXqqOvRYdeix6tBT1aGnqkOPVYceqw49VR16qjr0WHXoserQU9Whp6pDj1WHHqsOPVUdeqo69Fh16LHq0FPVoaeqQ49Vh4ZVh0ZVh0ZVh4ZVh+aX7HK0PkdVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh5ZVh1ZVh1ZVh5ZVh/aX7HK0PldVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh1ZVh/anqkPfcrM+v+FmfX7D0fr8lie73KzPb7hZn99wtD6/5Wh9fsvN+twfqg59w9H6/Jaj9fktN+vzG57qcLQ+v+VofX7Lzfr8hpv1+Q1n61NVh77lan2i6tA3nK1PVR36lqv1iapD33C2PlV16Fuu1ieqDn3D2fpU1aFvuVqfqDr0DWfrU1WHvuVqfaLq0DecrU9VHfqWq/WJqkPfcLY+VXXoW67WJ6oOfcPZ+lTVoW+5Wp+oOvQNZ+tTVYe+5Wp9ourQN5ytT1Ud+par9YmqQ99wtj5VdehbrtYnqg59w9n6VNWhb7lan6g69A1n61NVh77lan2i6tA3nK1PVR36lqv1iapD33C2PlV16Fuu1ieqDn3D2fpU1aFvuVqfqDr0DWfrU1WHvuVqfaLq0DecrU9VHfqWq/WJqkPfcLY+VXXoW67WJ6oOfcPZ+lTVoW+5Wp+oOvQNV+vzsOrQUdWho6pDh1WHzi/Z5Wh9HlUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDl1WHrqoOXVUduqw6dH/JLkfr86rq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYdClYdClUdClUdClYdil+yy9H6DFUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdSlYdSlUdSlUdSlYdyl+yy9H6TFUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdKlYdKlUdKlUdKlYdql+yy9H6LFUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdalYdalUdalUdalYd6l+yy9H6bFUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdeqw69FR16Knq0GPVofdLdjlan09Vhx6rDj1WHXqqOvRUdeix6tBj1aGnqkNPVYceqw49Vh16qjr0VHXoserQY9Whp6pDT1WHHqsOPVYdeqo69FR16LHq0GPVoaeqQ09Vhx6rDj1WHXqqOvRUdeix6tBj1aGnqkNPVYceqw49Vh16qjr0VHXoserQY9Whp6pDT1WHHqsOPVYdeqo69FR16LHq0GPVoaeqQ09Vhx6rDj1WHXqqOvRUdeix6tBj1aGnqkNPVYceqw49Vh16qjr0VHXoserQY9Whp6pDT1WHHqsOPVYdeqo69FR16LHq0GPVoaeqQ09Vhx6rDj1WHXqqOvRUdeix6tBj1aGnqkNPVYceqw49Vh16qjr0VHXoserQY9Whp6pDT1WHHqsOPVYdeqo69FR16LHq0LDq0Kjq0Kjq0LDq0PySXY7W56jq0LDq0LDq0Kjq0Kjq0LDq0LDq0Kjq0Kjq0LDq0LDq0Kjq0Kjq0LDq0LDq0Kjq0Kjq0LDq0LDq0Kjq0Kjq0LDq0LDq0Kjq0Kjq0LDq0LDq0Kjq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Z6rqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULLqUKrqUKrqULLqULHqUKnqUKnqULHqUP2SXY7WZ6nqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULHqUKnqUKnqULHqULPqUKvqUKvqULPqUP+SXY7WZ6vqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPqULPqUKvqUKvqULPq0GPVoaeqQ09Vhx6rDr1fssvR+nyqOvRYdeix6tBT1aGnqkOPVYceqw49VR16qjr0WHXoserQU9Whp6pDj1WHHqsOPVUdeqo69Fh16LHq0FPVoaeqQ49Vhx6rDj1VHXqqOvRYdeix6tBT1aGnqkOPVYceqw49VR16qjr0WHXoserQU9Whp6pDj1WHHqsOPVUdeqo69Fh16LHq0FPVoaeqQ49Vhx6rDj1VHXqqOvRYdeix6tBT1aGnqkOPVYceqw49VR16qjr0WHXoserQU9Whp6pDj1WHHqsOPVUdeqo69Fh16LHq0FPVoaeqQ49Vhx6rDj1VHXqqOvRYdeix6tBT1aGnqkOPVYceqw49VR16qjr0WHXoserQU9Whp6pDj1WHHqsOPVUdeqo69Fh16LHq0FPVoaeqQ49Vh4ZVh0ZVh0ZVh4ZVh+aX7HK0PkdVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh4ZVh0ZVh0ZVh4ZVh5ZVh1ZVh1ZVh5ZVh/aX7HK0PldVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh5ZVh5ZVh1ZVh1ZVh1ZVh74/jtbnt9ysz+9xsz6/x9H6/JYnu9ysz+9xsz6/x9H6/Jaj9fktN+vz/FB16BuO1ue3HK3Pb7lZn9/wVIej9fktR+vzW27W5zfcrM9vOFufqjr0/ZJan6g69A1n61NVh75fUusTVYf+vh17K2x9ourQ+aHq0DecrU9VHfqWq/WJqkPfcLY+VXXoW67WJ6oOfcPZ+lTVoW+5Wp+oOvQNZ+tTVYe+5Wp9ourQN5ytT1Ud+par9YmqQ99wtj5VdehbrtYnqg59w9n6VNWhb7lan6g69A1n61NVh77lan2i6tA3nK1PVR36lqv1iapD33C2PlV16Fuu1ieqDn3D2fpU1aHvcbU+UXXo74Oxt8LWJ6oOfcPV+lTVofNT1aFvuVqfqDr0DWfrU1WHvuVqfaLq0DecrU9VHfqWq/WJqkPfcLY+VXXoW67WJ6oOfcPZ+lTVoW+5Wp+oOvQNV+vzsOrQUdWho6pDh1WHzi/Z5Wh9HlUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDl1WHrqoOXVUduqw6dH/JLkfr86rq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYdClYdClUdClUdClYdil+yy9H6DFUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdClYdClUdClUdClYdSlYdSlUdSlUdSlYdyl+yy9H6TFUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdSlYdSlUdSlUdSlYdKlYdKlUdKlUdKlYdql+yy9H6LFUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdKlYdKlUdKlUdKlYdalYdalUdalUdalYd6l+yy9H6bFUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdalYdalUdalUdalYdeqw69FR16Knq0GPVofdLdjlan09Vhx6rDj1WHXqqOvRUdeix6tBj1aGnqkNPVYceqw49Vh16qjr0VHXoserQY9Whp6pDT1WHHqsOPVYdeqo69FR16LHq0GPVoaeqQ09Vhx6rDj1WHXqqOvRUdeix6tBj1aGnqkNPVYceqw49Vh16qjr0VHXoserQY9Whp6pDT1WHHqsOPVYdeqo69FR16LHq0GPVoaeqQ09Vhx6rDj1WHXqqOvRUdeix6tBj1aGnqkNPVYceqw49Vh16qjr0VHXoserQY9Whp6pDT1WHHqsOPVYdeqo69FR16LHq0GPVoaeqQ09Vhx6rDj1WHXqqOvRUdeix6tBj1aGnqkNPVYceqw49Vh16qjr0VHXoserQY9Whp6pDT1WHHqsOPVYdeqo69FR16LHq0LDq0Kjq0Kjq0LDq0PySXY7W56jq0LDq0LDq0Kjq0Kjq0LDq0LDq0Kjq0Kjq0LDq0LDq0Kjq0Kjq0LDq0LDq0Kjq0Kjq0LDq0LDq0Kjq0Kjq0LDq0LDq0Kjq0Kjq0LDq0LDq0Kjq0Kjq0LDq0LDq0Kjq0Kjq0LDq0LDq0Kjq0Kjq0LDq0LDq0Kjq0Kjq0LDq0LDq0Kjq0Kjq0LDq0LDq0Kjq0Kjq0LDq0LDq0Kjq0Kjq0LDq0LDq0Kjq0Kjq0LDq0LDq0Kjq0Kjq0LDq0LDq0Kjq0Kjq0LDq0LDq0Kjq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JasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOFasOlaoOlaoOFasO1S/Z5Wh9lqoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasONasOtaoOtaoONasO9S/Z5Wh9tqoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasOPVYdeqo69FR16LHq0Psluxytz6eqQ49Vhx6rDj1VHXqqOvRYdeix6tBT1aGnqkOPVYceqw49VR16qjr0WHXoserQU9Whp6pDj1WHHqsOPVUdeqo69Fh16LHq0FPVoaeqQ49Vhx6rDj1VHXqqOvRYdeix6tBT1aGnqkOPVYceqw49VR16qjr0WHXoserQU9Whp6pDj1WHHqsOPVUdeqo69Fh16LHq0FPVoaeqQ49Vhx6rDj1VHXqqOvRYdeix6tBT1aGnqkOPVYceqw49VR16qjr0WHXoserQU9Whp6pDj1WHHqsOPVUdeqo69Fh16LHq0FPVoaeqQ49Vhx6rDj1VHXqqOvRYdeix6tBT1aGnqkOPVYceqw49VR16qjr0WHXoserQU9Whp6pDj1WHHqsOPVUdeqo69Fh1aFh1aFR1aFR1aFh1aH7JLkfrc1R1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFl1aFV1aFV1aFl1aH/JLkfrc1V1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFV1KH6qOvQtN+vzG27W5zccrc9vebLLzfr8hpv1+Q1H6/Nbjtbnt9ysz/ih6tA3HK3Pbzlan99ysz6/4akOR+vzW47W57fcrM9vuFmf33C2PlV16HuXWp+oOvS9iq1PVR36e5d6LGp9qurQ9y62PlF1KH6oOvQNZ+tTVYe+5Wp9ourQN5ytT1Ud+par9YmqQ99wtj5VdehbrtYnqg59w9n6VNWhb7lan6g69A1n61NVh77lan2i6tA3nK1PVR36lqv1iapD33C2PlV16Fuu1ieqDn3D2fpU1aFvuVqfqDr0DWfrU1WHvuVqfaLq0DecrU9VHfqWq/WJqkPfcLY+VXXoW67WJ6oOfcPZ+lTVoW+5Wp+oOvQNZ+tTVYe+5Wp9ourQN5ytT1Ud+par9YmqQ99wtj5VdehbrtYnqg59w9n6VNWhb7lan6g69A1n61NVh77lan2i6tA3XK3Pw6pDR1WHjqoOHVYdOr9kl6P1eVR16LDq0GHVoaOqQ0dVhw6rDh1WHTqqOnRUdeiw6tBh1aGjqkNHVYcOqw4dVh06qjp0VHXosOrQYdWho6pDR1WHDqsOHVYdOqo6dFR16LDq0GHVoaOqQ0dVhw6rDh1WHTqqOnRUdeiw6tBh1aGjqkNHVYcOqw4dVh06qjp0VHXosOrQYdWho6pDR1WHDqsOHVYdOqo6dFR16LDq0GHVoaOqQ0dVhw6rDh1WHTqqOnRUdeiw6tBh1aGjqkNHVYcOqw4dVh06qjp0VHXosOrQYdWho6pDR1WHDqsOHVYdOqo6dFR16LDq0GHVoaOqQ0dVhw6rDh1WHTqqOnRUdeiw6tBh1aGjqkNHVYcOqw4dVh06qjp0VHXosOrQYdWho6pDR1WHDqsOXVYduqo6dFV16LLq0P0luxytz6uqQ5dVhy6rDl1VHbqqOnRZdeiy6tBV1aGrqkOXVYcuqw5dVR26qjp0WXXosurQVdWhq6pDl1WHLqsOXVUduqo6dFl16LLq0FXVoauqQ5dVhy6rDl1VHbqqOnRZdeiy6tBV1aGrqkOXVYcuqw5dVR26qjp0WXXosurQVdWhq6pDl1WHLqsOXVUduqo6dFl16LLq0FXVoauqQ5dVhy6rDl1VHbqqOnRZdeiy6tBV1aGrqkOXVYcuqw5dVR26qjp0WXXosurQVdWhq6pDl1WHLqsOXVUduqo6dFl16LLq0FXVoauqQ5dVhy6rDl1VHbqqOnRZdeiy6tBV1aGrqkOXVYcuqw5dVR26qjp0WXXosurQVdWhq6pDl1WHLqsOXVUduqo6dFl1KFh1KFR1KFR1KFh1KH7JLkfrM1R1KFh1KFh1KFR1KFR1KFh1KFh1KFR1KFR1KFh1KFh1KFR1KFR1KFh1KFh1KFR1KFR1KFh1KFh1KFR1KFR1KFh1KFh1KFR1KFR1KFh1KFh1KFR1KFR1KFh1KFh1KFR1KFR1KFh1KFh1KFR1KFR1KFh1KFh1KFR1KFR1KFh1KFh1KFR1KFR1KFh1KFh1KFR1KFR1KFh1KFh1KFR1KFR1KFh1KFh1KFR1KFR1KFh1KFh1KFR1KFR1KFh1KFh1KFR1KFR1KFh1KFh1KFR1KFR1KFh1KFh1KFR1KFR1KFh1KFh1KFR1KFR1KFh1KFh1KFR1KFR1KFh1KFh1KFR1KFR1KFh1KFh1KFR1KFR1KFh1KFh1KFR1KFR1KFh1KFl1KFV1KFV1KFl1KH/JLkfrM1V1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1KFl1KFV1KFV1KFl1qFh1qFR1qFR1qFh1qH7JLkfrs1R1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFh1qFR1qFR1qFh1qFl1qFV1qFV1qFl1qH/JLkfrs1V1qFl1qFl1qFV1qFV1qFl1qFl1qFV1qFV1qFl1qFl1qFV1qFV1qFl1qFl1qFV1qFV1qFl1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V1WHrqoOXVYdur9kl6P1eVV16LLq0GXVoauqQ1dVhy6rDl1WHbqqOnRVdeiy6tBl1aGrqkNXVYcuqw5dVh26qjp0VXXosurQZdWhq6pDV1WHLqsOXVYduqo6dFV16LLq0GXVoauqQ1dVhy6rDl1WHbqqOnRVdeiy6tBl1aGrqkNXVYcuqw5dVh26qjp0VXXosurQZdWhq6pDV1WHLqsOXVYduqo6dFV16LLq0GXVoauqQ1dVhy6rDl1WHbqqOnRVdeiy6tBl1aGrqkNXVYcuqw5dVh26qjp0VXXosurQZdWhq6pDV1WHLqsOXVYduqo6dFV16LLq0GXVoauqQ1dVhy6rDl1WHbqqOnRVdeiy6tBl1aGrqkNXVYcuqw5dVh26qjp0VXXosurQZdWhq6pDV1WHLqsOBasOhaoOhaoOBasOxS/Z5Wh9hqoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOBasOhaoOhaoOBasOJasOpaoOpaoOJasO5S/Z5Wh9pqoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOJasOpaoOpaoOJasOFasOlaoOlaoOFasO1S/Z5Wh9lqoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasOFasOlaoOlaoOFasONasOtaoOtaoONasO9S/Z5Wh9tqoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasONasOtaoOtaoONasOPVYdeqo69FR16LHq0Psluxytz6eqQ49Vhx6rDj1VHXqqOvRYdeix6tBT1aGnqkOPVYceqw49VR16qjr0WHXoserQU9Whp6pDj1WHHqsOPVUdeqo69Fh16LHq0FPVoaeqQ49Vhx6rDj1VHXqqOvRYdeix6tBT1aGnqkOPVYceqw49VR16qjr0WHXoserQU9Whp6pDj1WHHqsOPVUdeqo69Fh16LHq0FPVoaeqQ49Vhx6rDj1VHXqqOvRYdeix6tBT1aGnqkOPVYceqw49VR16qjr0WHXoserQU9Whp6pDj1WHHqsOPVUdeqo69Fh16LHq0FPVoaeqQ49Vhx6rDj1VHXqqOvRYdeix6tBT1aGnqkOPVYceqw49VR16qjr0WHXoserQU9Whp6pDj1WHHqsOPVUdeqo69Fh1aFh1aFR1aFR1aFh1aH7JLkfrc1R1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFh1aFR1aFR1aFh1aFl1aFV1aFV1aFl1aH/JLkfrc1V1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFl1aFl1aFV1aFV1aFV1qH6qOvQtN+vzG27W5zccrc9vebLLzfr8hpv1+Q1H6/Nbjtbnt9ysz/qh6tA3HK3Pbzlan99ysz6/4akOR+vzW47W57fcrM9vuFmf33C2PlV16Fuu1ieqDn3D2fpU1aFvuVqfqDr0DWfrU1WHvuVqfaLq0DecrU9VHfqWq/WJqkPfcLY+VXXoW67WJ6oOfcPZ+lTVoW+5Wp+oOvQNZ+tTVYe+5Wp9ourQN5ytT1Ud+par9YmqQ99wtj5VdehbrtYnqg59w9n6VNWhb7lan6g69A1n61NVh77lan2i6tA3nK1PVR36lqv1iapD33C2PlV16Fuu1ieqDn3D2fpU1aFvuVqfqDr0DWfrU1WHvuVqfaLq0DecrU9VHfqWq/WJqkPfcLY+VXXoW67WJ6oOfcPZ+lTVoW+5Wp+oOvQNZ+tTVYe+5Wp9ourQN5ytT1Ud+par9YmqQ99wtT4Pqw4dVR06qjp0WHXo/JJdjtbnUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WXXoqurQVdWhy6pD95fscrQ+r6oOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhYNWhUNWhUNWhYNWh+CW7HK3PUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhYNWhUNWhUNWhYNWhZNWhVNWhVNWhZNWh/CW7HK3PVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhZNWhVNWhVNWhZNWhYtWhUtWhUtWhYtWh+iW7HK3PUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhYtWhUtWhUtWhYtWhZtWhVtWhVtWhZtWh/iW7HK3PVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhZtWhVtWhVtWhZtWhx6pDT1WHnqoOPVYder9kl6P1+VR16LHq0GPVoaeqQ09Vhx6rDj1WHXqqOvRUdeix6tBj1aGnqkNPVYceqw49Vh16qjr0VHXoserQY9Whp6pDT1WHHqsOPVYdeqo69FR16LHq0GPVoaeqQ09Vhx6rDj1WHXqqOvRUdeix6tBj1aGnqkNPVYceqw49Vh16qjr0VHXoserQY9Whp6pDT1WHHqsOPVYdeqo69FR16LHq0GPVoaeqQ09Vhx6rDj1WHXqqOvRUdeix6tBj1aGnqkNPVYceqw49Vh16qjr0VHXoserQY9Whp6pDT1WHHqsOPVYdeqo69FR16LHq0GPVoaeqQ09Vhx6rDj1WHXqqOvRUdeix6tBj1aGnqkNPVYceqw49Vh16qjr0VHXoserQY9Whp6pDT1WHHqsODasOjaoOjaoODasOzS/Z5Wh9jqoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasODasOjaoOjaoODasOLasOraoOraoOLasO7S/Z5Wh9rqoOLasOLasOraoOraoOLasOLasOraoOraoOLasOLasOraoOraoOLasOLasOraoOraoOLasOLasOraoOraoOLasOLasOraoOraoOLasOLasOraoOraoOLasOLasOraoOraoOLasOLasOraoOraoOLasOLasOraoOraoOLasOLasOraoOraoOLasOLasOraoOraoOLasOLasOraoOraoOLasOLasOraoOraoOLasOLasOraoO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YdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhYdWhUdWhUdWhYdWhZdWhVdWhVdWhZdWh/SW7HK3PVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhZdWhZdWhVdWhVdWhVdWh91PVoW+5WZ/fcLM+v+FofX7Lk11u1uc33KzPbzhan99ytD6/5WZ9vh+qDn3D0fr8lqP1+S036/MbnupwtD6/5Wh9fsvN+vyGm/X5DWfrU1WHvuVqfaLq0DecrU9VHfqWq/WJqkPfcLY+VXXoW67WJ6oOfcPZ+lTVoW+5Wp+oOvQNZ+tTVYe+5Wp9ourQN5ytT1Ud+par9YmqQ99wtj5VdehbrtYnqg59w9n6VNWhb7lan6g69A1n61NVh77lan2i6tA3nK1PVR36lqv1iapD33C2PlV16Fuu1ieqDn3D2fpU1aFvuVqfqDr0DWfrU1WHvuVqfaLq0DecrU9VHfqWq/WJqkPfcLY+VXXoW67WJ6oOfcPZ+lTVoW+5Wp+oOvQNZ+tTVYe+5Wp9ourQN5ytT1Ud+par9YmqQ99wtj5VdehbrtYnqg59w9n6VNWhb7lan6g69A1X6/Ow6tBR1aGjqkOHVYfOL9nlaH0eVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOHVYeOqg4dVR06rDp0WHXoqOrQUdWhw6pDh1WHjqoOHVUdOqw6dFh16Kjq0FHVocOqQ4dVh46qDh1VHTqsOnRYdeio6tBR1aHDqkOXVYeuqg5dVR26rDp0f8kuR+vzqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh26rDp0VXXoqurQZdWhy6pDV1WHrqoOXVYduqw6dFV16Krq0GXVocuqQ1dVh66qDl1WHbqsOnRVdeiq6tBl1aHLqkNXVYeuqg5dVh0KVh0KVR0KVR0KVh2KX7LL0foMVR0KVh0KVh0KVR0KVR0KVh0KVh0KVR0KVR0KVh0KVh0KVR0KVR0KVh0KVh0KVR0KVR0KVh0KVh0KVR0KVR0KVh0KVh0KVR0KVR0KVh0KVh0KVR0KVR0KVh0KVh0KVR0KVR0KVh0KVh0KVR0KVR0KVh0KVh0KVR0KVR0KVh0KVh0KVR0KVR0KVh0KVh0KVR0KVR0KVh0KVh0KVR0KVR0KVh0KVh0KVR0KVR0KVh0KVh0KVR0KVR0KVh0KVh0KVR0KVR0KVh0KVh0KVR0KVR0KVh0KVh0KVR0KVR0KVh0KVh0KVR0KVR0KVh0KVh0KVR0KVR0KVh0KVh0KVR0KVR0KVh0KVh0KVR0KVR0KVh0KVh0KVR0KVR0KVh1KVh1KVR1KVR1KVh3KX7LL0fpMVR1KVh1KVh1KVR1KVR1KVh1KVh1KVR1KVR1KVh1KVh1KVR1KVR1KVh1KVh1KVR1KVR1KVh1KVh1KVR1KVR1KVh1KVh1KVR1KVR1KVh1KVh1KVR1KVR1KVh1KVh1KVR1KVR1KVh1KVh1KVR1KVR1KVh1KVh1KVR1KVR1KVh1KVh1KVR1KVR1KVh1KVh1KVR1KVR1KVh1KVh1KVR1KVR1KVh1KVh1KVR1KVR1KVh1KVh1KVR1KVR1KVh1KVh1KVR1KVR1KVh1KVh1KVR1KVR1KVh1KVh1KVR1KVR1KVh1KVh1KVR1KVR1KVh1KVh1KVR1KVR1KVh1KVh1KVR1KVR1KVh1KVh1KVR1KVR1KVh1KVh1KVR1KVR1KVh0qVh0qVR0qVR0qVh2qX7LL0fosVR0qVh0qVh0qVR0qVR0qVh0qVh0qVR0qVR0qVh0qVh0qVR0qVR0qVh0qVh0qVR0qVR0qVh0qVh0qVR0qVR0qVh0qVh0qVR0qVR0qVh0qVh0qVR0qVR0qVh0qVh0qVR0qVR0qVh0qVh0qVR0qVR0qVh0qVh0qVR0qVR0qVh0qVh0qVR0qVR0qVh0qVh0qVR0qVR0qVh0qVh0qVR0qVR0qVh0qVh0qVR0qVR0qVh0qVh0qVR0qVR0qVh0qVh0qVR0qVR0qVh0qVh0qVR0qVR0qVh0qVh0qVR0qVR0qVh0qVh0qVR0qVR0qVh0qVh0qVR0qVR0qVh0qVh0qVR0qVR0qVh0qVh0qVR0qVR0qVh0qVh0qVR0qVR0qVh1qVh1qVR1qVR1qVh3qX7LL0fpsVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh1qVh1qVR1qVR1qVh16rDr0VHXoqerQY9Wh90t2OVqfT1WHHqsOPVYdeqo69FR16LHq0GPVoaeqQ09Vhx6rDj1WHXqqOvRUdeix6tBj1aGnqkNPVYceqw49Vh16qjr0VHXoserQY9Whp6pDT1WHHqsOPVYdeqo69FR16LHq0GPVoaeqQ09Vhx6rDj1WHXqqOvRUdeix6tBj1aGnqkNPVYceqw49Vh16qjr0VHXoserQY9Whp6pDT1WHHqsOPVYdeqo69FR16LHq0GPVoaeqQ09Vhx6rDj1WHXqqOvRUdeix6tBj1aGnqkNPVYceqw49Vh16qjr0VHXoserQY9Whp6pDT1WHHqsOPVYdeqo69FR16LHq0GPVoaeqQ09Vhx6rDj1WHXqqOvRUdeix6tBj1aGnqkNPVYceqw49Vh16qjr0VHXoserQsOrQqOrQqOrQsOrQ/JJdjtbnqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsOrQqOrQqOrQsOrQsurQqurQqurQsurQ/pJdjtbnqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQsurQsurQqurQqurQqurQ/FR16Ftu1uc33KzPbzhan9/yZJeb9fkNN+vzG47W57ccrc9vuVmf80PVoW84Wp/fcrQ+v+VmfX7DUx2O1ue3HK3Pb7lZn99wsz6/4Wx9qurQt1ytT1Qd+oaz9amqQ99ytT5Rdegbztanqg59y9X6RNWhbzhbn6o69C1X6xNVh77hbH2q6tC3XK1PVB36hrP1qapD33K1PlF16BvO1qeqDn3L1fpE1aFvOFufqjr0LVfrE1WHvuFsfarq0LdcrU9UHfqGs/WpqkPfcrU+UXXoG87Wp6oOfcvV+kTVoW84W5+qOvQtV+sTVYe+4Wx9qurQt1ytT1Qd+oaz9amqQ99ytT5Rdegbztanqg59y9X6RNWhbzhbn6o69C1X6xNVh77hbH2q6tC3XK1PVB36hrP1qapD33K1PlF16BvO1qeqDn3L1fpE1aFvOFufqjr0LVfrE1WHvuFqfR5WHTqqOnRUdeiw6tD5Jbscrc+jqkOHVYcOqw4dVR06qjp0WHXosOrQUdWho6pDh1WHDqsOHVUdOqo6dFh16LDq0FHVoaOqQ4dVhw6rDh1VHTqqOnRYdeiw6tBR1aGjqkOHVYcOqw4dVR06qjp0WHXosOrQUdWho6pDh1WHDqsOHVUdOqo6dFh16LDq0FHVoaOqQ4dVhw6rDh1VHTqqOnRYdeiw6tBR1aGjqkOHVYcOqw4dVR06qjp0WHXosOrQUdWho6pDh1WHDqsOHVUdOqo6dFh16LDq0FHVoaOqQ4dVhw6rDh1VHTqqOnRYdeiw6tBR1aGjqkOHVYcOqw4dVR06qjp0WHXosOrQUdWho6pDh1WHDqsOHVUdOqo6dFh16LDq0FHVoaOqQ4dVhw6rDh1VHTqqOnRYdeiy6tBV1aGrqkOXVYfuL9nlaH1eVR26rDp0WXXoqurQVdWhy6pDl1WHrqoOXVUduqw6dFl16Krq0FXVocuqQ5dVh66qDl1VHbqsOnRZdeiq6tBV1aHLqkOXVYeuqg5dVR26rDp0WXXoqurQVdWhy6pDl1WHrqoOXVUduqw6dFl16Krq0FXVocuqQ5dVh66qDl1VHbqsOnRZdeiq6tBV1aHLqkOXVYeuqg5dVR26rDp0WXXoqurQVdWhy6pDl1WHrqoOXVUduqw6dFl16Krq0FXVocuqQ5dVh66qDl1VHbqsOnRZdeiq6tBV1aHLqkOXVYeuqg5dVR26rDp0WXXoqurQVdWhy6pDl1WHrqoOXVUduqw6dFl16Krq0FXVocuqQ5dVh66qDl1VHbqsOnRZdeiq6tBV1aHLqkPBqkOhqkOhqkPBqkPxS3Y5Wp+hqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPBqkOhqkOhqkPBqkPJqkOpqkOpqkPJqkP5S3Y5Wp+pqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPJqkOpqkOpqkPJqkPFqkOlqkOlqkPFqkP1S3Y5Wp+lqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOlqkOlqkPFqkPFqkOl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qupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsupQqupQqupQsupQsepQqepQqepQsepQ/ZJdjtZnqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQsepQqepQqepQsepQs+pQq+pQq+pQs+pQ/5JdjtZnq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+pQs+pQq+pQq+pQs+rQY9Whp6pDT1WHHqsOvV+yy9H6fKo69Fh16LHq0FPVoaeqQ49Vhx6rDj1VHXqqOvRYdeix6tBT1aGnqkOPVYceqw49VR16qjr0WHXoserQU9Whp6pDj1WHHqsOPVUdeqo69Fh16LHq0FPVoaeqQ49Vhx6rDj1VHXqqOvRYdeix6tBT1aGnqkOPVYceqw49VR16qjr0WHXoserQU9Whp6pDj1WHHqsOPVUdeqo69Fh16LHq0FPVoaeqQ49Vhx6rDj1VHXqqOvRYdeix6tBT1aGnqkOPVYceqw49VR16qjr0WHXoserQU9Whp6pDj1WHHqsOPVUdeqo69Fh16LHq0FPVoaeqQ49Vhx6rDj1VHXqqOvRYdeix6tBT1aGnqkOPVYceqw49VR16qjr0WHXoserQU9Whp6pDj1WHhlWHRlWHRlWHhlWH5pfscrQ+R1WHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHhlWHRlWHRlWHhlWHllWHVlWHVlWHllWH9pfscrQ+V1WHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHllWHllWHVlWHVlWHFlWH9vdD1aG/5WR9/g0n6/NvuFmff8uTXU7W599wsj7/hpv1+bfcrM+/5WR9fsNNdehvuFmff8vN+vxbTtbn3/BUh5v1+bfcrM+/5WR9/g0n6/NvOFufqDr0t1ytT1Md+hvO1ieqDv0tV+vTVIf+hrP1iapDf8vV+jTVob/hbH2i6tDfcrU+TXXobzhbn6g69LdcrU9THfobztYnqg79LVfr01SH/oaz9YmqQ3/L1fo01aG/4Wx9ourQ33K1Pk116G84W5+oOvS3XK1PUx36G87WJ6oO/S1X69NUh/6Gs/WJqkN/y9X6NNWhv+FsfaLq0N9ytT5NdehvOFufqDr0t1ytT1Md+hvO1ieqDv0tV+vTVIf+hrP1iapDf8vV+jTVob/hbH2i6tDfcrU+TXXobzhbn6g69LdcrU9THfobztYnqg79LVfr01SH/oaz9YmqQ3/L1fo01aG/4Wx9ourQ33K1Pk116G+4Wp+HVYfOP6tD8av43+WT/1/Hcv5ZHfrPhsf/5/D/01tJdnmpx9Lq8MfeyrDLFz2Wf1aH/rPhR72Vc9nloR5LqsOLvZVmlz/1WEYdvuqt3B+7XK3Pq9bnZevzn9Wh/265Wp9Xrc/L1udl6/Oq9RlqfQZbn8HWZ6j1+c/q0H82nK3PYOsz1PoMtT6Drc9k6zPV+ky1PpOtz39Wh/675Wp9plqfydZnsvWZan2WWp/F1mex9Vlqff6zOvSfDWfrs9j6LLU+S63PYuuz2fpstT5brc9m6/Of1aH/brlan63WZ7P12Wx9tlqfT63Px9bnY+vzqfX5z+rQfzacrc/H1udT6/Op9fnY+hy2Pketz1Hrc9j6/Gd16L9brtbnqPU5bH0OW5+j1ueq9blsfS5bn6vW5z+rQ//ZcLY+l63PVetz1fpctT7vT63Pq6pDV1WHLqsO3V+yy9H6vKo6dFl16LLq0FXVoauqQ5dVhy6rDl1VHbqqOnRZdeiy6tBV1aGrqkOXVYcuqw5dVR26qjp0WXXosurQVdWhq6pDl1WHLqsOXVUduqo6dFl16LLq0FXVoauqQ5dVhy6rDl1VHbqqOnRZdeiy6tBV1aGrqkOXVYcuqw5dVR26qjp0WXXosurQVdWhq6pDl1WHLqsOXVUduqo6dFl16LLq0FXVoauqQ5dVhy6rDl1VHbqqOnRZdeiy6tBV1aGrqkOXVYcuqw5dVR26qjp0WXXosurQVdWhq6pDl1WHLqsOXVUduqo6dFl16LLq0FXVoauqQ5dVhy6rDl1VHbqqOnRZdeiy6tBV1aGrqkOXVYcuqw5dVR26qjp0WXXosurQVdWhq6pDl1WHglWHQlWHQlWHglWH4pfscrQ+Q1WHglWHglWHQlWHQlWHglWHglWHQlWHQlWHglWHglWHQlWHQlWHglWHglWHQlWHQlWHglWHglWHQlWHQlWHglWHglWHQlWHQlWHglWHglWHQlWHQlWHglWHglWHQlWHQlWHglWHglWHQlWHQlWHglWHglWHQlWHQlWHglWHglWHQlWHQlWHglWHglWHQlWHQlWHglWHglWHQlWHQlWHglWHglWHQlWHQlWHglWHglWHQlWHQlWHglWHglWHQlWHQlWHglWHglWHQlWHQlWHglWHglWHQlWHQlWHglWHglWHQlWHQlWHglWHglWHQlWHQlWHglWHglWHQlWHQlWHglWHglWHQlWHQlWHglWHglWHQlWHQlWHglWHklWHUlWHUlWHklWH8pfscrQ+U1WHklWHklWHUlWHUlWHklWHklWHUlWHUlWHklWHklWHUlWHUlWHklWHklWHUlWHUlWHklWHklWHUlWHUlWHklWHklWHUlWHUlWHklWHklWHUlWHUlWHklWHklWHUlWHUlWHklWHklWHUlWHUlWHklWHklWHUlWHUlWHklWHklWHUlWHUlWHklWHklWHUlWHUlWHklWHklWHUlWHUlWHklWHklWHUlWHUlWHklWHklWHUlWHUlWHklWHklWHUlWHUlWHklWHklWHUlWHUlWHklWHklWHUlWHUlWHklWHklWHUlWHUlWHklWHklWHUlWHUlWHklWHklWHUlWHUlWHklWHklWHUlWHUlWHklWHklWHUlWHUlWHklWHilWHSlWHSlWHilWH6pfscrQ+S1WHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHilWHSlWHSlWHilWHmlWHWlWHWlWHmlWH+pfscrQ+W1WHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWHmlWHWlWHWlWHmlWH/oeae8eR9jjWILylrqy81f43dj4OjuTKkIwIDq0Gh/0S/JFAGfG0Vh1qqzrUVnWotepQa9WhtqpDbVWHWqsOjVYdGqs6NFZ1aLTq0PxSu1z6+hyrOjRadWi06tBY1aGxqkOjVYdGqw6NVR0aqzo0WnVotOrQWNWhsapDo1WHRqsOjVUdGqs6NFp1aLTq0FjVobGqQ6NVh0arDo1VHRqrOjRadWi06tBY1aGxqkOjVYdGqw6NVR0aqzo0WnVotOrQWNWhsapDo1WHRqsOjVUdGqs6NFp1aLTq0FjVobGqQ6NVh0arDo1VHRqrOjRadWi06tBY1aGxqkOjVYdGqw6NVR0aqzo0WnVotOrQWNWhsapDo1WHRqsOjVUdGqs6NFp1aLTq0FjVobGqQ6NVh0arDo1VHRqrOjRadWi06tBY1aGxqkOjVYdGqw6NVR0aqzo0WnVotOrQWNWhsapDo1WHRqsOjVUdGqs6NFp1aLTq0FjVobGqQ6NVh1arDq1VHVqrOrRadWh/qV0ufX2uVR1arTq0WnVorerQWtWh1apDq1WH1qoOrVUdWq06tFp1aK3q0FrVodWqQ6tVh9aqDq1VHVqtOrRadWit6tBa1aHVqkOrVYfWqg6tVR1arTq0WnVorerQWtWh1apDq1WH1qoOrVUdWq06tFp1aK3q0FrVodWqQ6tVh9aqDq1VHVqtOrRadWit6tBa1aHVqkOrVYfWqg6tVR1arTq0WnVorerQWtWh1apDq1WH1qoOrVUdWq06tFp1aK3q0FrVodWqQ6tVh9aqDq1VHVqtOrRadWit6tBa1aHVqkOrVYfWqg6tVR1arTq0WnVorerQWtWh1apDq1WH1qoOrVUdWq06tFp1aK3q0FrVodWqQ6tVh9aqDq1VHVqtOrRadWit6tBa1aHVqkNPqw49qzr0rOrQ06pD75fa5dLX57OqQ0+rDj2tOvSs6tCzqkNPqw49rTr0rOrQs6pDT6sOPa069Kzq0LOqQ0+rDj2tOvSs6tCzqkNPqw49rTr0rOrQs6pDT6sOPa069Kzq0LOqQ0+rDj2tOvSs6tCzqkNPqw49rTr0rOrQs6pDT6sOPa069Kzq0LOqQ0+rDj2tOvSs6tCzqkNPqw49rTr0rOrQs6pDT6sOPa069Kzq0LOqQ0+rDj2tOvSs6tCzqkNPqw49rTr0rOrQs6pDT6sOPa069Kzq0LOqQ0+rDj2tOvSs6tCzqkNPqw49rTr0rOrQs6pDT6sOPa069Kzq0LOqQ0+rDj2tOvSs6tCzqkNPqw49rTr0rOrQs6pDT6sOPa069Kzq0LOqQ0+rDj2tOvSs6tCzqkNPqw49rTr0rOrQs6pDz6oOff/h0tfnt9z5+vx+3fn6/H5d+vr8lqd2ufP1+f268/X5/br09fktl74+v+XO1+f5SdWhb7j09fktl74+v+XO1+c3PK3Dpa/Pb7n09fktd74+v+HO1+c3XPv6tKpD37/J+vqUqkPfcO3r06oOff8m6+tTqg798/9O+2dF+/qUqkPnJ1WHvuHa16dVHfqWW1+fUnXoG659fVrVoW+59fUpVYe+4drXp1Ud+pZbX59Sdegbrn19WtWhb7n19SlVh77h2tenVR36lltfn1J16BuufX1a1aFvufX1KVWHvuHa16dVHfqWW1+fUnXoG659fVrVoW+59fUpVYe+4drXp1Ud+pZbX59Sdegbrn19WtWhb7n19SlVh77h2tenVR36ft36+pSqQ//8D9P+WdG+PqXq0Dfc+vq0qkPnZ1WHvuXW16dUHfqGa1+fVnXoW259fUrVoW+49vVpVYe+5dbXp1Qd+oZrX59Wdehbbn19StWhb7j29WlVh77l1tenVB36hltfn0erDh2rOnSs6tDRqkPnl9rl0tfnsapDR6sOHa06dKzq0LGqQ0erDh2tOnSs6tCxqkNHqw4drTp0rOrQsapDR6sOHa06dKzq0LGqQ0erDh2tOnSs6tCxqkNHqw4drTp0rOrQsapDR6sOHa06dKzq0LGqQ0erDh2tOnSs6tCxqkNHqw4drTp0rOrQsapDR6sOHa06dKzq0LGqQ0erDh2tOnSs6tCxqkNHqw4drTp0rOrQsapDR6sOHa06dKzq0LGqQ0erDh2tOnSs6tCxqkNH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+y6r7bustu+y2r7Lavsuq+27rLbvstq+y2r7Lqvtu6y277Lavstq+y6r7bustu+y2r7Lavsuq+27rLbvstq+y2r7Lqvtu6y277Lavstq+y6r7bustu+y2r7Lavsuq+27rLbvstq+y2r7Lqvtu6y277Lavstq+y6r7UtW25esti9ZbV+y2r78oa5ystq+ZLV9yWr7ktX2JavtS1bbl6y2L1ltX7LavmS1fclq+5LV9iWr7UtW25esti9ZbV+y2r5ktX3JavuS1fYlq+1LVtuXrLYvWW1fstq+ZLV9yWr7ktX2JavtS1bbl6y2L1ltX7LavmS1fclq+5LV9iWr7UtW25esti9ZbV+y2r5ktX3JavuS1fYlq+1LVtuXrLYvWW1fstq+ZLV9yWr7ktX2JavtS1bbl6y2L1ltX7LavmS1fclq+5LV9iWr7UtW25esti9ZbV+y2r5ktX3JavuS1fYlq+1LVtuXrLYvWW1fstq+ZLV9yWr7ktX2JavtS1bbl6y2L1ltX7LavmS1fclq+5LV9iWr7UtW25esti9ZbV+y2r5ktX3JavuS1fYlq+1LVtuXrLavWG1fsdq+YrV9xWr76oe6ysVq+4rV9hWr7StW21estq9YbV+x2r5itX3FavuK1fYVq+0rVttXrLavWG1fsdq+YrV9xWr7itX2FavtK1bbV6y2r1htX7HavmK1fcVq+4rV9hWr7StW21estq9YbV+x2r5itX3FavuK1fYVq+0rVttXrLavWG1fsdq+YrV9xWr7itX2FavtK1bbV6y2r1htX7HavmK1fcVq+4rV9hWr7StW21estq9YbV+x2r5itX3FavuK1fYVq+0rVttXrLavWG1fsdq+YrV9xWr7itX2FavtK1bbV6y2r1htX7HavmK1fcVq+4rV9hWr7StW21estq9YbV+x2r5itX3FavuK1fYVq+0rVttXrLavWG1fsdq+YrV9xWr7itX2FavtK1bbV6y2r1htX7Havma1fc1q+5rV9jWr7esf6io3q+1rVtvXrLavWW1fs9q+ZrV9zWr7mtX2Navta1bb16y2r1ltX7Pavma1fc1q+5rV9jWr7WtW29estq9ZbV+z2r5mtX3Navua1fY1q+1rVtvXrLavWW1fs9q+ZrV9zWr7mtX2Navta1bb16y2r1ltX7Pavma1fc1q+5rV9jWr7WtW29estq9ZbV+z2r5mtX3Navua1fY1q+1rVtvXrLavWW1fs9q+ZrV9zWr7mtX2Navta1bb16y2r1ltX7Pavma1fc1q+5rV9jWr7WtW29estq9ZbV+z2r5mtX3Navua1fY1q+1rVtvXrLavWW1fs9q+ZrV9zWr7mtX2Navta1bb16y2r1ltX7Pavma1fc1q+5rV9jWr7WtW29estq9ZbV+z2r5mtX3NavuG1fYNq+0bVts3rLZvfqirPKy2b1ht37DavmG1fcNq+4bV9g2r7RtW2zestm9Ybd+w2r5htX3DavuG1fYNq+0bVts3rLZvWG3fsNq+YbV9w2r7htX2DavtG1bbN6y2b1ht37DavmG1fcNq+4bV9g2r7RtW2zestm9Ybd+w2r5htX3DavuG1fYNq+0bVts3rLZvWG3fsNq+YbV9w2r7htX2DavtG1bbN6y2b1ht37DavmG1fcNq+4bV9g2r7RtW2zestm9Ybd+w2r5htX3DavuG1fYNq+0bVts3rLZvWG3fsNq+YbV9w2r7htX2DavtG1bbN6y2b1ht37DavmG1fcNq+4bV9g2r7RtW2zestm9Ybd+w2r5htX3DavuG1fYNq+0bVts3rLZvWG3fsNq+YbV9w2r7htX2DavtW1bbt6y2b1lt37Lavv2hrvKy2r5ltX3LavuW1fYtq+1bVtu3rLZvWW3fstq+ZbV9y2r7ltX2LavtW1bbt6y2b1lt37LavmW1fctq+5bV9i2r7VtW27estm9Zbd+y2r5ltX3LavuW1fYtq+1bVtu3rLZvWW3fstq+ZbV9y2r7ltX2LavtW1bbt6y2b1lt37LavmW1fctq+5bV9i2r7VtW27estm9Zbd+y2r5ltX3LavuW1fYtq+1bVtu3rLZvWW3fstq+ZbV9y2r7ltX2LavtW1bbt6y2b1lt37LavmW1fctq+5bV9i2r7VtW27estm9Zbd+y2r5ltX3LavuW1fYtq+1bVtu3rLZvWW3fstq+ZbV9y2r7ltX2LavtW1bbt6y2b1lt37LavmW1fctq+5bV9i2r7VtW27estu+x2r7Havseq+17rLbv/VBX+bHavsdq+x6r7Xustu+x2r7Havseq+17rLbvsdq+x2r7Hqvte6y277Havsdq+x6r7Xustu+x2r7Havseq+17rLbvsdq+x2r7Hqvte6y277Havsdq+x6r7Xustu+x2r7Havseq+17rLbvsdq+x2r7Hqvte6y277Havsdq+x6r7Xustu+x2r7Havseq+17rLbvsdq+x2r7Hqvte6y277Havsdq+x6r7Xustu+x2r7Havseq+17rLbvsdq+x2r7Hqvte6y277Havsdq+x6r7Xustu+x2r7Havseq+17rLbvsdq+x2r7Hqvte6y277Havsdq+x6r7Xustu+x2r7Havseq+17rLbvsdq+x2r7Hqvte6y277Havsdq+x6r7Xustu+x2r7Havseq+17rLbvsdq+x2r7Hqrt+waRrvI3h3SVvzmkq/zNIV3lbw7pKn9zSFf5m0O6yt8c0lX+J3JmzWFdZVTb9/2wrjKq7ft+WFcZ1fZ9P6yrjGr7vh/WVUa1fd8P6yqj2r5vDusqo9q+bw7rKqPavm8O6yqj2r5vDusqo9q+bw7rKqPavm8O6yqj2r5vDusqo9q+bw7rKqPavm8O6yqj2r5vDusqo9q+70PWVUa1fd+HrKuMavu+D1lXGdX2fR+yrjKq7fs+ZF1lVNv3zWFdZVTb981hXWVU2/fNYV1lVNv3zWFdZVTb981hXWVU2/fNYV1lVNv3zWFdZVTb981hXWVU2/fNYV1lVNv3zWFdZVTb981hXWVU2/fNYV1lVNv3zWFdZVTb981hXWVU2/fNYV1lVNv3zWFdZVTb981hXWVU2/fNYV1lVNv3zWFdZVTb981hXWVU2/fNYV1lVNv3zWFdZVTb981hXWVU2/fNYV1lVNv3zUFd5cNq+w6r7Tustu+w2r7vU9Yc1FU+rLbvsNq+w2r7DqvtO6y277DavsNq+w6r7Tustu+w2r7DavsOq+07rLbvsNq+w2r7DqvtO6y277DavsNq+w6r7Tustu+w2r7DavsOq+07rLbvsNq+w2r7DqvtO6y277DavsNq+w6r7Tustu+w2r7DavsOq+07rLbvsNq+w2r7DqvtO6y277DavsNq+w6r7Tustu+w2r7DavsOq+07rLbvsNq+w2r7DqvtO6y277DavsNq+w6r7Tustu+w2r7DavsOq+07rLbvsNq+w2r7DqvtO6y277DavsNq+w6r7Tustu+w2r7DavsOq+07rLbvsNq+w2r7DqvtO6y277DavsNq+w6r7Tustu+w2r7DavsOq+07rLbvsNq+w2r7DqvtO6y277DavsNq+w6r7Tustu+w2r5gtX3BavuC1fYFq+2LH+oqB6vtC1bbF6y2L1htX7DavmC1fcFq+4LV9gWr7QtW2xesti9YbV+w2r5gtX3BavuC1fYFq+0LVtsXrLYvWG1fsNq+YLV9wWr7gtX2BavtC1bbF6y2L1htX7DavmC1fcFq+4LV9gWr7QtW2xesti9YbV+w2r5gtX3BavuC1fYFq+0LVtsXrLYvWG1fsNq+YLV9wWr7gtX2BavtC1bbF6y2L1htX7DavmC1fcFq+4LV9gWr7QtW2xesti9YbV+w2r5gtX3BavuC1fYFq+0LVtsXrLYvWG1fsNq+YLV9wWr7gtX2BavtC1bbF6y2L1htX7DavmC1fcFq+4LV9gWr7QtW2xesti9YbV+w2r5gtX3BavuC1fYFq+0LVtsXrLYvWG1fsNq+YLV9wWr7Lqvtu6y277Lavstq++4PdZUvq+27rLbvstq+y2r7Lqvtu6y277Lavstq+y6r7bustu+y2r7Lavsuq+27rLbvstq+y2r7Lqvtu6y277Lavstq+y6r7bustu+y2r7Lavsuq+27rLbvstq+y2r7Lqvtu6y277Lavstq+y6r7bustu+y2r7Lavsuq+27rLbvstq+y2r7Lqvtu6y277Lavstq+y6r7bustu+y2r7Lavsuq+27rLbvstq+y2r7Lqvtu6y277Lavstq+y6r7bustu+y2r7Lavsuq+27rLbvstq+y2r7Lqvtu6y277Lavstq+y6r7bustu+y2r7Lavsuq+27rLbvstq+y2r7Lqvtu6y277Lavstq+y6r7bustu+y2r7Lavsuq+27rLbvstq+y2r7Lqvtu6y277Lavstq+y6r7bustu+y2r5ktX3JavuS1fYlq+3LH+oqJ6vtS1bbl6y2L1ltX7LavmS1fclq+5LV9iWr7UtW25esti9ZbV+y2r5ktX3JavuS1fYlq+1LVtuXrLYvWW1fstq+ZLV9yWr7ktX2JavtS1bbl6y2L1ltX7LavmS1fclq+5LV9iWr7UtW25esti9ZbV+y2r5ktX3JavuS1fYlq+1LVtuXrLYvWW1fstq+ZLV9yWr7ktX2JavtS1bbl6y2L1ltX7LavmS1fclq+5LV9iWr7UtW25esti9ZbV+y2r5ktX3JavuS1fYlq+1LVtuXrLYvWW1fstq+ZLV9yWr7ktX2JavtS1bbl6y2L1ltX7LavmS1fclq+5LV9iWr7UtW25esti9ZbV+y2r5ktX3JavuS1fYlq+1LVtuXrLYvWW1fstq+ZLV9yWr7itX2FavtK1bbV6y2r36oq1ystq9YbV+x2r5itX3FavuK1fYVq+0rVttXrLavWG1fsdq+YrV9xWr7itX2FavtK1bbV6y2r1htX7HavmK1fcVq+4rV9hWr7StW21estq9YbV+x2r5itX3FavuK1fYVq+0rVttXrLavWG1fsdq+YrV9xWr7itX2FavtK1bbV6y2r1htX7HavmK1fcVq+4rV9hWr7StW21estq9YbV+x2r5itX3FavuK1fYVq+0rVttXrLavWG1fsdq+YrV9xWr7itX2FavtK1bbV6y2r1htX7HavmK1fcVq+4rV9hWr7StW21estq9YbV+x2r5itX3FavuK1fYVq+0rVttXrLavWG1fsdq+YrV9xWr7itX2FavtK1bbV6y2r1htX7HavmK1fcVq+4rV9hWr7WtW29estq9ZbV+z2r7+oa5ys9q+ZrV9zWr7mtX2Navta1bb16y2r1ltX7Pavma1fc1q+5rV9jWr7WtW29estq9ZbV+z2r5mtX3Navua1fY1q+1rVtvXrLavWW1fs9q+ZrV9zWr7mtX2Navta1bb16y2r1ltX7Pavma1fc1q+5rV9jWr7WtW29estq9ZbV+z2r5mtX3Navua1fY1q+1rVtvXrLavWW1fs9q+ZrV9zWr7mtX2Navta1bb16y2r1ltX7Pavma1fc1q+5rV9jWr7WtW29estq9ZbV+z2r5mtX3Navua1fY1q+1rVtvXrLavWW1fs9q+ZrV9zWr7mtX2Navta1bb16y2r1ltX7Pavma1fc1q+5rV9jWr7WtW29estq9ZbV+z2r5mtX3Navua1fY1q+1rVtvXrLZvWG3fsNq+YbV9w2r75oe6ysNq+4bV9g2r7RtW2zestm9Ybd+w2r5htX3DavuG1fYNq+0bVts3rLZvWG3fsNq+YbV9w2r7htX2DavtG1bbN6y2b1ht37DavmG1fcNq+4bV9g2r7RtW2zestm9Ybd+w2r5htX3DavuG1fYNq+0bVts3rLZvWG3fsNq+YbV9w2r7htX2DavtG1bbN6y2b1ht37DavmG1fcNq+4bV9g2r7RtW2zestm9Ybd+w2r5htX3DavuG1fYNq+0bVts3rLZvWG3fsNq+YbV9w2r7htX2DavtG1bbN6y2b1ht37DavmG1fcNq+4bV9g2r7RtW2zestm9Ybd+w2r5htX3DavuG1fYNq+0bVts3rLZvWG3fsNq+YbV9w2r7htX2DavtG1bbN6y2b1ht37DavmW1fctq+5bV9i2r7dsf6iovq+1bVtu3rLZvWW3fstq+ZbV9y2r7ltX2LavtW1bbt6y2b1lt37LavmW1fctq+5bV9i2r7VtW27estm9Zbd+y2r5ltX3LavuW1fYtq+1bVtu3rLZvWW3fstq+ZbV9y2r7ltX2LavtW1bbt6y2b1lt37LavmW1fctq+5bV9i2r7VtW27estm9Zbd+y2r5ltX3LavuW1fYtq+1bVtu3rLZvWW3fstq+ZbV9y2r7ltX2LavtW1bbt6y2b1lt37LavmW1fctq+5bV9i2r7VtW27estm9Zbd+y2r5ltX3LavuW1fYtq+1bVtu3rLZvWW3fstq+ZbV9y2r7ltX2LavtW1bbt6y2b1lt37LavmW1fctq+5bV9i2r7VtW27estm9Zbd+y2r5ltX3Lavseq+17rLbvsdq+x2r73g91lR+r7Xustu+x2r7Havseq+17rLbvsdq+x2r7Hqvte6y277Havsdq+x6r7Xustu+x2r7Havseq+17rLbvsdq+x2r7Hqvte6y277Havsdq+x6r7Xustu+x2r7Havseq+17rLbvsdq+x2r7Hqvte6y277Havsdq+x6r7Xustu+x2r7Havseq+17rLbvsdq+x2r7Hqvte6y277Havsdq+x6r7Xustu+x2r7Havseq+17rLbvsdq+x2r7Hqvte6y277Havsdq+x6r7Xustu+x2r7Havseq+17rLbvsdq+x2r7Hqvte6y277Havsdq+x6r7Xustu+x2r7Havseq+17rLbvsdq+x2r7Hqvte6y277Havsdq+x6r7Xustu+x2r7Havseq+17rLbvsdq+x2r7Hqvte6y276Havvih2r5vDukqf3NIV/mbQ7rK3xzSVf7mkK7yN4d0lb85pKv8zSFd5W8O6yqj2r5vDusqo9q+bw7rKqPavm8O6yqj2r5vDusqo9q+bw7rKqPavm8O6yqj2r5vDusqo9q+bw7rKqPavm8O6yqj2r5vDusqo9q+bw7rKqPavm8O6yqj2r5vDusqo9q+bw7rKqPavm8O6yqj2r5vDusqo9q+bw7rKqPavm8O6yqj2r5vDusqo9q+bw7rKqPavm8O6yqj2r5vDusqo9q+bw7rKqPavm8O6yqj2r5vDusqo9q+bw7rKqPavm8O6yqj2r5vDusqo9q+bw7rKqPavm8O6yqj2r5vDusqo9q+bw7rKqPavm8O6yqj2r5vDusqo9q+bw7rKqPavm8O6yqj2r5vDusqo9q+bw7rKqPavm8O6yqj2r5vDusqo9q+bw7rKqPavm8O6yqj2r5vDusqo9q+bw7rKqPavm8O6iofVtt3WG3fYbV9h9X2fZ+y5qCu8mG1fYfV9h1W23dYbd9htX2H1fYdVtt3WG3fYbV9h9X2HVbbd1ht32G1fYfV9h1W23dYbd9htX2H1fYdVtt3WG3fYbV9h9X2HVbbd1ht32G1fYfV9h1W23dYbd9htX2H1fYdVtt3WG3fYbV9h9X2HVbbd1ht32G1fYfV9h1W23dYbd9htX2H1fYdVtt3WG3fYbV9h9X2HVbbd1ht32G1fYfV9h1W23dYbd9htX2H1fYdVtt3WG3fYbV9h9X2HVbbd1ht32G1fYfV9h1W23dYbd9htX2H1fYdVtt3WG3fYbV9h9X2HVbbd1ht32G1fYfV9h1W23dYbd9htX2H1fYdVtt3WG3fYbV9h9X2HVbbd1ht32G1fYfV9h1W23dYbd9htX2H1fYdVtt3WG3fYbV9h9X2BavtC1bbF6y2L1htX/xQVzlYbV+w2r5gtX3BavuC1fYFq+0LVtsXrLYvWG1fsNq+YLV9wWr7gtX2BavtC1bbF6y2L1htX7DavmC1fcFq+4LV9gWr7QtW2xesti9YbV+w2r5gtX3BavuC1fYFq+0LVtsXrLYvWG1fsNq+YLV9wWr7gtX2BavtC1bbF6y2L1htX7DavmC1fcFq+4LV9gWr7QtW2xesti9YbV+w2r5gtX3BavuC1fYFq+0LVtsXrLYvWG1fsNq+YLV9wWr7gtX2BavtC1bbF6y2L1htX7DavmC1fcFq+4LV9gWr7QtW2xesti9YbV+w2r5gtX3BavuC1fYFq+0LVtsXrLYvWG1fsNq+YLV9wWr7gtX2BavtC1bbF6y2L1htX7DavmC1fcFq+4LV9gWr7QtW23dZbd9ltX2X1fZdVtt3f6irfFlt32W1fZfV9l1W23dZbd9ltX2X1fZdVtt3WW3fZbV9l9X2XVbbd1lt32W1fZfV9l1W23dZbd9ltX2X1fZdVtt3WW3fZbV9l9X2XVbbd1lt32W1fZfV9l1W23dZbd9ltX2X1fZdVtt3WW3fZbV9l9X2XVbbd1lt32W1fZfV9l1W23dZbd9ltX2X1fZdVtt3WW3fZbV9l9X2XVbbd1lt32W1fZfV9l1W23dZbd9ltX2X1fZdVtt3WW3fZbV9l9X2XVbbd1lt32W1fZfV9l1W23dZbd9ltX2X1fZdVtt3WW3fZbV9l9X2XVbbd1lt32W1fZfV9l1W23dZbd9ltX2X1fZdVtt3WW3fZbV9l9X2XVbbd1lt32W1fZfV9l1W23dZbd9ltX2X1fZdVtt3WW3fZbV9l9X2JavtS1bbl6y2L1ltX/5QVzlZbV+y2r5ktX3JavuS1fYlq+1LVtuXrLYvWW1fstq+ZLV9yWr7ktX2JavtS1bbl6y2L1ltX7LavmS1fclq+5LV9iWr7UtW25esti9ZbV+y2r5ktX3JavuS1fYlq+1LVtuXrLYvWW1fstq+ZLV9yWr7ktX2JavtS1bbl6y2L1ltX7LavmS1fclq+5LV9iWr7UtW25esti9ZbV+y2r5ktX3JavuS1fYlq+1LVtuXrLYvWW1fstq+ZLV9yWr7ktX2JavtS1bbl6y2L1ltX7LavmS1fclq+5LV9iWr7UtW25esti9ZbV+y2r5ktX3JavuS1fYlq+1LVtuXrLYvWW1fstq+ZLV9yWr7ktX2JavtS1bbl6y2L1ltX7LavmS1fclq+5LV9iWr7UtW21estq9YbV+x2r5itX31Q13lYrV9xWr7itX2FavtK1bbV6y2r1htX7HavmK1fcVq+4rV9hWr7StW21estq9YbV+x2r5itX3FavuK1fYVq+0rVttXrLavWG1fsdq+YrV9xWr7itX2FavtK1bbV6y2r1htX7HavmK1fcVq+4rV9hWr7StW21estq9YbV+x2r5itX3FavuK1fYVq+0rVttXrLavWG1fsdq+YrV9xWr7itX2FavtK1bbV6y2r1htX7HavmK1fcVq+4rV9hWr7StW21estq9YbV+x2r5itX3FavuK1fYVq+0rVttXrLavWG1fsdq+YrV9xWr7itX2FavtK1bbV6y2r1htX7HavmK1fcVq+4rV9hWr7StW21estq9YbV+x2r5itX3FavuK1fYVq+0rVttXrLavWG1fs9q+ZrV9zWr7mtX29Q91lZvV9jWr7WtW29estq9ZbV+z2r5mtX3Navua1fY1q+1rVtvXrLavWW1fs9q+ZrV9zWr7mtX2Navta1bb16y2r1ltX7Pavma1fc1q+5rV9jWr7WtW29estq9ZbV+z2r5mtX3Navua1fY1q+1rVtvXrLavWW1fs9q+ZrV9zWr7mtX2Navta1bb16y2r1ltX7Pavma1fc1q+5rV9jWr7WtW29estq9ZbV+z2r5mtX3Navua1fY1q+1rVtvXrLavWW1fs9q+ZrV9zWr7mtX2Navta1bb16y2r1ltX7Pavma1fc1q+5rV9jWr7WtW29estq9ZbV+z2r5mtX3Navua1fY1q+1rVtvXrLavWW1fs9q+ZrV9zWr7mtX2Navta1bb16y2r1ltX7Pavma1fcNq+4bV9g2r7RtW2zc/1FUeVts3rLZvWG3fsNq+YbV9w2r7htX2DavtG1bbN6y2b1ht37DavmG1fcNq+4bV9g2r7RtW2zestm9Ybd+w2r5htX3DavuG1fYNq+0bVts3rLZvWG3fsNq+YbV9w2r7htX2DavtG1bbN6y2b1ht37DavmG1fcNq+4bV9g2r7RtW2zestm9Ybd+w2r5htX3DavuG1fYNq+0bVts3rLZvWG3fsNq+YbV9w2r7htX2DavtG1bbN6y2b1ht37DavmG1fcNq+4bV9g2r7RtW2zestm9Ybd+w2r5htX3DavuG1fYNq+0bVts3rLZvWG3fsNq+YbV9w2r7htX2DavtG1bbN6y2b1ht37DavmG1fcNq+4bV9g2r7RtW2zestm9Ybd+w2r5htX3DavuG1fYtq+1bVtu3rLZvWW3f/lBXeVlt37LavmW1fctq+5bV9i2r7VtW27estm9Zbd+y2r5ltX3LavuW1fYtq+1bVtu3rLZvWW3fstq+ZbV9y2r7ltX2LavtW1bbt6y2b1lt37LavmW1fctq+5bV9i2r7VtW27estm9Zbd+y2r5ltX3LavuW1fYtq+1bVtu3rLZvWW3fstq+ZbV9y2r7ltX2LavtW1bbt6y2b1lt37LavmW1fctq+5bV9i2r7VtW27estm9Zbd+y2r5ltX3LavuW1fYtq+1bVtu3rLZvWW3fstq+ZbV9y2r7ltX2LavtW1bbt6y2b1lt37LavmW1fctq+5bV9i2r7VtW27estm9Zbd+y2r5ltX3LavuW1fYtq+1bVtu3rLZvWW3fstq+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+4bV9g2r7RtW2zestm9Ybd+w2r5htX3DavuG1fYNq+0bVts3rLZvWG3fsNq+YbV9w2r7htX2DavtG1bbN6y2b1ht37DavmG1fcNq+4bV9g2r7RtW2zestm9Ybd+w2r5htX3DavuG1fYNq+0bVts3rLZvWG3fsNq+YbV9w2r7htX2DavtG1bbN6y2b1ht37DavmG1fcNq+4bV9g2r7RtW2zestm9Ybd+w2r5htX3DavuG1fYNq+0bVts3rLZvWG3fsNq+YbV9w2r7htX2DavtG1bbN6y2b1ht37LavmW1fctq+5bV9u0PdZWX1fYtq+1bVtu3rLZvWW3fstq+ZbV9y2r7ltX2LavtW1bbt6y2b1lt37LavmW1fctq+5bV9i2r7VtW27estm9Zbd+y2r5ltX3LavuW1fYtq+1bVtu3rLZvWW3fstq+ZbV9y2r7ltX2LavtW1bbt6y2b1lt37LavmW1fctq+5bV9i2r7VtW27estm9Zbd+y2r5ltX3LavuW1fYtq+1bVtu3rLZvWW3fstq+ZbV9y2r7ltX2LavtW1bbt6y2b1lt37LavmW1fctq+5bV9i2r7VtW27estm9Zbd+y2r5ltX3LavuW1fYtq+1bVtu3rLZvWW3fstq+ZbV9y2r7ltX2LavtW1bbt6y2b1lt37LavmW1fctq+5bV9i2r7VtW27estm9Zbd+y2r5ltX2P1fY9Vtv3WG3fY7V974e6yo/V9j1W2/dYbd9jtX2P1fY9Vtv3WG3fY7V9j9X2PVbb91ht32O1fY/V9j1W2/dYbd9jtX2P1fY9Vtv3WG3fY7V9j9X2PVbb91ht32O1fY/V9j1W2/dYbd9jtX2P1fY9Vtv3WG3fY7V9j9X2PVbb91ht32O1fY/V9j1W2/dYbd9jtX2P1fY9Vtv3WG3fY7V9j9X2PVbb91ht32O1fY/V9j1W2/dYbd9jtX2P1fY9Vtv3WG3fY7V9j9X2PVbb91ht32O1fY/V9j1W2/dYbd9jtX2P1fY9Vtv3WG3fY7V9j9X2PVbb91ht32O1fY/V9j1W2/dYbd9jtX2P1fY9Vtv3WG3fY7V9j9X2PVbb91ht32O1fY/V9j1W2/dYbd9jtX2P1fY9Vtv3WG3fY7V9j9X2PVbb91BtX/5Qbd83h3SVvzmkq/zNIV3lbw7pKn9zSFf5m0O6yt8c0lX+5pCu8jeHdZVRbd83h3WVUW3fN4d1lVFt3zeHdZVRbd83h3WVUW3fN4d1lVFt3zeHdZVRbd83h3WVUW3fN4d1lVFt3zeHdZVRbd83h3WVUW3fN4d1lVFt3zeHdZVRbd83h3WVUW3fN4d1lVFt3zeHdZVRbd83h3WVUW3fN4d1lVFt3zeHdZVRbd83h3WVUW3fN4d1lVFt3zeHdZVRbd83h3WVUW3fN4d1lVFt3zeHdZVRbd83h3WVUW3fN4d1lVFt3zeHdZVRbd83h3WVUW3fN4d1lVFt3zeHdZVRbd83h3WVUW3fN4d1lVFt3zeHdZVRbd83h3WVUW3fN4d1lVFt3zeHdZVRbd83h3WVUW3fN4d1lVFt3zeHdZVRbd83h3WVUW3fN4d1lVFt3zeHdZVRbd83h3WVUW3fN4d1lVFt3zcHdZUPq+07rLbvsNq+w2r7vr9Zc1BX+bDavsNq+w6r7Tustu+w2r7DavsOq+07rLbvsNq+w2r7DqvtO6y277DavsNq+w6r7Tustu+w2r7DavsOq+07rLbvsNq+w2r7DqvtO6y277DavsNq+w6r7Tustu+w2r7DavsOq+07rLbvsNq+w2r7DqvtO6y277DavsNq+w6r7Tustu+w2r7DavsOq+07rLbvsNq+w2r7DqvtO6y277DavsNq+w6r7Tustu+w2r7DavsOq+07rLbvsNq+w2r7DqvtO6y277DavsNq+w6r7Tustu+w2r7DavsOq+07rLbvsNq+w2r7DqvtO6y277DavsNq+w6r7Tustu+w2r7DavsOq+07rLbvsNq+w2r7DqvtO6y277DavsNq+w6r7Tustu+w2r7DavsOq+07rLbvsNq+w2r7gtX2BavtC1bbF6y2L36oqxysti9YbV+w2r5gtX3BavuC1fYFq+0LVtsXrLYvWG1fsNq+YLV9wWr7gtX2BavtC1bbF6y2L1htX7DavmC1fcFq+4LV9gWr7QtW2xesti9YbV+w2r5gtX3BavuC1fYFq+0LVtsXrLYvWG1fsNq+YLV9wWr7gtX2BavtC1bbF6y2L1htX7DavmC1fcFq+4LV9gWr7QtW2xesti9YbV+w2r5gtX3BavuC1fYFq+0LVtsXrLYvWG1fsNq+YLV9wWr7gtX2BavtC1bbF6y2L1htX7DavmC1fcFq+4LV9gWr7QtW2xesti9YbV+w2r5gtX3BavuC1fYFq+0LVtsXrLYvWG1fsNq+YLV9wWr7gtX2BavtC1bbF6y2L1htX7DavmC1fcFq+4LV9gWr7bustu+y2r7Lavsuq+27P9RVvqy277Lavstq+y6r7bustu+y2r7Lavsuq+27rLbvstq+y2r7Lqvtu6y277Lavstq+y6r7bustu+y2r7Lavsuq+27rLbvstq+y2r7Lqvtu6y277Lavstq+y6r7bustu+y2r7Lavsuq+27rLbvstq+y2r7Lqvtu6y277Lavstq+y6r7bustu+y2r7Lavsuq+27rLbvstq+y2r7Lqvtu6y277Lavstq+y6r7bustu+y2r7Lavsuq+27rLbvstq+y2r7Lqvtu6y277Lavstq+y6r7bustu+y2r7Lavsuq+27rLbvstq+y2r7Lqvtu6y277Lavstq+y6r7bustu+y2r7Lavsuq+27rLbvstq+y2r7Lqvtu6y277Lavstq+y6r7bustu+y2r7Lavsuq+27rLbvstq+y2r7ktX2JavtS1bbl6y2L3+oq5ysti9ZbV+y2r5ktX3JavuS1fYlq+1LVtuXrLYvWW1fstq+ZLV9yWr7ktX2JavtS1bbl6y2L1ltX7LavmS1fclq+5LV9iWr7UtW25esti9ZbV+y2r5ktX3JavuS1fYlq+1LVtuXrLYvWW1fstq+ZLV9yWr7ktX2JavtS1bbl6y2L1ltX7LavmS1fclq+5LV9iWr7UtW25esti9ZbV+y2r5ktX3JavuS1fYlq+1LVtuXrLYvWW1fstq+ZLV9yWr7ktX2JavtS1bbl6y2L1ltX7LavmS1fclq+5LV9iWr7UtW25esti9ZbV+y2r5ktX3JavuS1fYlq+1LVtuXrLYvWW1fstq+ZLV9yWr7ktX2JavtS1bbl6y2L1ltX7LavmS1fclq+5LV9iWr7StW21estq9YbV+x2r76oa5ysdq+YrV9xWr7itX2FavtK1bbV6y2r1htX7HavmK1fcVq+4rV9hWr7StW21estq9YbV+x2r5itX3FavuK1fYVq+0rVttXrLavWG1fsdq+YrV9xWr7itX2FavtK1bbV6y2r1htX7HavmK1fcVq+4rV9hWr7StW21estq9YbV+x2r5itX3FavuK1fYVq+0rVttXrLavWG1fsdq+YrV9xWr7itX2FavtK1bbV6y2r1htX7HavmK1fcVq+4rV9hWr7StW21estq9YbV+x2r5itX3FavuK1fYVq+0rVttXrLavWG1fsdq+YrV9xWr7itX2FavtK1bbV6y2r1htX7HavmK1fcVq+4rV9hWr7StW21estq9YbV+x2r5itX3FavuK1fYVq+0rVttXrLavWW1fs9q+ZrV9zWr7+oe6ys1q+5rV9jWr7WtW29estq9ZbV+z2r5mtX3Navua1fY1q+1rVtvXrLavWW1fs9q+ZrV9zWr7mtX2Navta1bb16y2r1ltX7Pavma1fc1q+5rV9jWr7WtW29estq9ZbV+z2r5mtX3Navua1fY1q+1rVtvXrLavWW1fs9q+ZrV9zWr7mtX2Navta1bb16y2r1ltX7Pavma1fc1q+5rV9jWr7WtW29estq9ZbV+z2r5mtX3Navua1fY1q+1rVtvXrLavWW1fs9q+ZrV9zWr7mtX2Navta1bb16y2r1ltX7Pavma1fc1q+5rV9jWr7WtW29estq9ZbV+z2r5mtX3Navua1fY1q+1rVtvXrLavWW1fs9q+ZrV9zWr7mtX2Navta1bb16y2r1ltX7PavmG1fcNq+4bV9g2r7Zsf6ioPq+0bVts3rLZvWG3fsNq+YbV9w2r7htX2DavtG1bbN6y2b1ht37DavmG1fcNq+4bV9g2r7RtW2zestm9Ybd+w2r5htX3DavuG1fYNq+0bVts3rLZvWG3fsNq+YbV9w2r7htX2DavtG1bbN6y2b1ht37DavmG1fcNq+4bV9g2r7RtW2zestm9Ybd+w2r5htX3DavuG1fYNq+0bVts3rLZvWG3fsNq+YbV9w2r7htX2DavtG1bbN6y2b1ht37DavmG1fcNq+4bV9g2r7RtW2zestm9Ybd+w2r5htX3DavuG1fYNq+0bVts3rLZvWG3fsNq+YbV9w2r7htX2DavtG1bbN6y2b1ht37DavmG1fcNq+4bV9g2r7RtW2zestm9Ybd+w2r5htX3DavuW1fYtq+1bVtu3rLZvf6irvKy2b1lt37LavmW1fctq+5bV9i2r7VtW27estm9Zbd+y2r5ltX3LavuW1fYtq+1bVtu3rLZvWW3fstq+ZbV9y2r7ltX2LavtW1bbt6y2b1lt37LavmW1fctq+5bV9i2r7VtW27estm9Zbd+y2r5ltX3LavuW1fYtq+1bVtu3rLZvWW3fstq+ZbV9y2r7ltX2LavtW1bbt6y2b1lt37LavmW1fctq+5bV9i2r7VtW27estm9Zbd+y2r5ltX3LavuW1fYtq+1bVtu3rLZvWW3fstq+ZbV9y2r7ltX2LavtW1bbt6y2b1lt37LavmW1fctq+5bV9i2r7VtW27estm9Zbd+y2r5ltX3LavuW1fYtq+1bVtu3rLZvWW3fstq+ZbV9y2r7ltX2Lavte6y277Havsdq+x6r7Xs/1FV+rLbvsdq+x2r7Hqvte6y277Havsdq+x6r7Xustu+x2r7Havseq+17rLbvsdq+x2r7Hqvte6y277Havsdq+x6r7Xustu+x2r7Havseq+17rLbvsdq+x2r7Hqvte6y277Havsdq+x6r7Xustu+x2r7Havseq+17rLbvsdq+x2r7Hqvte6y277Havsdq+x6r7Xustu+x2r7Havseq+17rLbvsdq+x2r7Hqvte6y277Havsdq+x6r7Xustu+x2r7Havseq+17rLbvsdq+x2r7Hqvte6y277Havsdq+x6r7Xustu+x2r7Havseq+17rLbvsdq+x2r7Hqvte6y277Havsdq+x6r7Xustu+x2r7Havseq+17rLbvsdq+x2r7Hqvte6y277Havsdq+x6r7Xustu+x2r6Havvqh2r7vjmkq/zNIV3lbw7pKn9zSFf5m0O6yt8c0lX+5pCu8jeHdJW/OayrjGr7vjmsq4xq+745rKuMavu+OayrjGr7vjmsq4xq+745rKuMavu+OayrjGr7vjmsq4xq+745rKuMavu+OayrjGr7vjmsq4xq+745rKuMavu+OayrjGr7vjmsq4xq+745rKuMavu+OayrjGr7vjmsq4xq+745rKuMavu+OayrjGr7vjmsq4xq+745rKuMavu+OayrjGr7vjmsq4xq+745rKuMavu+OayrjGr7vjmsq4xq+745rKuMavu+OayrjGr7vjmsq4xq+745rKuMavu+OayrjGr7vjmsq4xq+745rKuMavu+OayrjGr7vjmsq4xq+745rKuMavu+OayrjGr7vjmsq4xq+745rKuMavu+OayrjGr7vjmsq4xq+745rKuMavu+OayrjGr7vjmsq4xq+745rKuMavu+OairfFht32G1fYfV9h1W2/d9ypqDusqH1fYdVtt3WG3fYbV9h9X2HVbbd1ht32G1fYfV9h1W23dYbd9htX2H1fYdVtt3WG3fYbV9h9X2HVbbd1ht32G1fYfV9h1W23dYbd9htX2H1fYdVtt3WG3fYbV9h9X2HVbbd1ht32G1fYfV9h1W23dYbd9htX2H1fYdVtt3WG3fYbV9h9X2HVbbd1ht32G1fYfV9h1W23dYbd9htX2H1fYdVtt3WG3fYbV9h9X2HVbbd1ht32G1fYfV9h1W23dYbd9htX2H1fYdVtt3WG3fYbV9h9X2HVbbd1ht32G1fYfV9h1W23dYbd9htX2H1fYdVtt3WG3fYbV9h9X2HVbbd1ht32G1fYfV9h1W23dYbd9htX2H1fYdVtt3WG3fYbV9h9X2HVbbd1ht32G1fYfV9h1W2xesti9YbV+w2r5gtX3xQ13lYLV9wWr7gtX2BavtC1bbF6y2L1htX7DavmC1fcFq+4LV9gWr7QtW2xesti9YbV+w2r5gtX3BavuC1fYFq+0LVtsXrLYvWG1fsNq+YLV9wWr7gtX2BavtC1bbF6y2L1htX7DavmC1fcFq+4LV9gWr7QtW2xesti9YbV+w2r5gtX3BavuC1fYFq+0LVtsXrLYvWG1fsNq+YLV9wWr7gtX2BavtC1bbF6y2L1htX7DavmC1fcFq+4LV9gWr7QtW2xesti9YbV+w2r5gtX3BavuC1fYFq+0LVtsXrLYvWG1fsNq+YLV9wWr7gtX2BavtC1bbF6y2L1htX7DavmC1fcFq+4LV9gWr7QtW2xesti9YbV+w2r5gtX3BavuC1fYFq+0LVtsXrLYvWG3fZbV9l9X2XVbbd1lt3/2hrvJltX2X1fZdVtt3WW3fZbV9l9X2XVbbd1lt32W1fZfV9l1W23dZbd9ltX2X1fZdVtt3WW3fZbV9l9X2XVbbd1lt32W1fZfV9l1W23dZbd9ltX2X1fZdVtt3WW3fZbV9l9X2XVbbd1lt32W1fZfV9l1W23dZbd9ltX2X1fZdVtt3WW3fZbV9l9X2XVbbd1lt32W1fZfV9l1W23dZbd9ltX2X1fZdVtt3WW3fZbV9l9X2XVbbd1lt32W1fZfV9l1W23dZbd9ltX2X1fZdVtt3WW3fZbV9l9X2XVbbd1lt32W1fZfV9l1W23dZbd9ltX2X1fZdVtt3WW3fZbV9l9X2XVbbd1lt32W1fZfV9l1W23dZbd9ltX2X1fZdVtt3WW3fZbV9l9X2XVbbd1lt32W1fZfV9l1W25esti9ZbV+y2r5ktX35Q13lZLV9yWr7ktX2JavtS1bbl6y2L1ltX7LavmS1fclq+5LV9iWr7UtW25esti9ZbV+y2r5ktX3JavuS1fYlq+1LVtuXrLYvWW1fstq+ZLV9yWr7ktX2JavtS1bbl6y2L1ltX7LavmS1fclq+5LV9iWr7UtW25esti9ZbV+y2r5ktX3JavuS1fYlq+1LVtuXrLYvWW1fstq+ZLV9yWr7ktX2JavtS1bbl6y2L1ltX7LavmS1fclq+5LV9iWr7UtW25esti9ZbV+y2r5ktX3JavuS1fYlq+1LVtuXrLYvWW1fstq+ZLV9yWr7ktX2JavtS1bbl6y2L1ltX7LavmS1fclq+5LV9iWr7UtW25esti9ZbV+y2r5ktX3JavuS1fYlq+1LVtuXrLYvWW1fsdq+YrV9xWr7itX21Q91lYvV9hWr7StW21estq9YbV+x2r5itX3FavuK1fYVq+0rVttXrLavWG1fsdq+YrV9xWr7itX2FavtK1bbV6y2r1htX7HavmK1fcVq+4rV9hWr7StW21estq9YbV+x2r5itX3FavuK1fYVq+0rVttXrLavWG1fsdq+YrV9xWr7itX2FavtK1bbV6y2r1htX7HavmK1fcVq+4rV9hWr7StW21estq9YbV+x2r5itX3FavuK1fYVq+0rVttXrLavWG1fsdq+YrV9xWr7itX2FavtK1bbV6y2r1htX7HavmK1fcVq+4rV9hWr7StW21estq9YbV+x2r5itX3FavuK1fYVq+0rVttXrLavWG1fsdq+YrV9xWr7itX2FavtK1bbV6y2r1htX7HavmK1fc1q+5rV9jWr7WtW29c/1FVuVtvXrLavWW1fs9q+ZrV9zWr7mtX2Navta1bb16y2r1ltX7Pavma1fc1q+5rV9jWr7WtW29estq9ZbV+z2r5mtX3Navua1fY1q+1rVtvXrLavWW1fs9q+ZrV9zWr7mtX2Navta1bb16y2r1ltX7Pavma1fc1q+5rV9jWr7WtW29estq9ZbV+z2r5mtX3Navua1fY1q+1rVtvXrLavWW1fs9q+ZrV9zWr7mtX2Navta1bb16y2r1ltX7Pavma1fc1q+5rV9jWr7WtW29estq9ZbV+z2r5mtX3Navua1fY1q+1rVtvXrLavWW1fs9q+ZrV9zWr7mtX2Navta1bb16y2r1ltX7Pavma1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wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ917J917J917J917J990dV+Vq271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271m271m271m271m27/2oKj/L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9qVl+9KyfWnZvrRsX/6oKqdl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7SvL9pVl+8qyfWXZvvpRVS7L9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s29eW7WvL9rVl+9qyff2jqtyW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btm8s2zeW7RvL9o1l++ZHVXks2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9atm8t27eW7VvL9u2PqvJatm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1L2b7+UbbvmyNV+ZsjVfmbI1X5myNV+ZsjVfmbI1X5myNV+ZsjVfmbY1WZsn3fHKvKlO375lhVpmzfN8eqMmX7vjlWlSnb982xqkzZvm+OVWXK9n1zrCpTtu+bY1WZsn3fHKvKlO375lhVpmzfN8eqMmX7vjlWlSnb982xqkzZvm+OVWXK9n1zrCpTtu+bY1WZsn3fHKvKlO375lhVpmzfN8eqMmX7vjlWlSnb982xqkzZvm+OVWXK9n1zrCpTtu+bY1WZsn3fHKvKlO375lhVpmzfN8eqMmX7vjlWlSnb982xqkzZvm+OVWXK9n1zrCpTtu+bY1WZsn3fHKvKlO375lhVpmzfN8eqMmX7vjlWlSnb982xqkzZvm+OVWXK9n1zrCpTtu+bY1WZsn3fHKvKlO375lhVpmzfN8eqMmX7vjlWlSnb982hqnws23cs23cs23cs2/ddrTlUlY9l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+8KyfWHZvrBsX1i2L35UlcOyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9l3L9l3L9l3L9l3L9t0fVeVr2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5r2b5n2b5n2b5n2b5n2b73o6r8LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNv3LNuXlu1Ly/alZfvSsn35o6qclu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWravLNtXlu0ry/aVZfvqR1W5LNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfW7avLdvXlu1ry/b1j6pyW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+sWzfWLZvLNs3lu2bH1XlsWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9a9m+tWzfWrZvLdu3P6rKa9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2LWX75kfZvm+OVOVvjlTlb45U5W+OVOVvjlTlb45U5W+OVOVvjlTlb45VZcr2fXOsKlO275tjVZmyfd8cq8qU7fvmWFWmbN83x6oyZfu+OVaVKdv3zbGqTNm+b45VZcr2fXOsKlO275tjVZmyfd8cq8qU7fvmWFWmbN83x6oyZfu+OVaVKdv3zbGqTNm+b45VZcr2fXOsKlO275tjVZmyfd8cq8qU7fvmWFWmbN83x6oyZfu+OVaVKdv3zbGqTNm+b45VZcr2fXOsKlO275tjVZmyfd8cq8qU7fvmWFWmbN83x6oyZfu+OVaVKdv3zbGqTNm+b45VZcr2fXOsKlO275tjVZmyfd8cq8qU7fvmWFWmbN83x6oyZfu+OVaVKdv3zbGqTNm+b45VZcr2fXOsKlO275tjVZmyfd8cq8qU7fvmWFWmbN83h6rysWzfsWzfsWzfsWzfd7XmUFU+lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu0Ly/aFZfvCsn1h2b74UVUOy/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNt3Ldt3Ldt3Ldt3Ldt3f1SVr2X7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7nmX7nmX7nmX7nmX73o+q8rNs37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37NsX1q2Ly3bl5btS8v25Y+qclq2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrJsX1m2ryzbV5btqx9V5bJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfW3ZvrZsX1u2ry3b1z+qym3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+8ayfWPZvrFs31i2b35UlceyfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9q1l+9ayfWvZvrVs3/6oKq9l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eU7dsfZfu+OVKVvzlSlb85UpW/OVKVvzlSlb85UpW/OVKVvzlSlb85VpUp2/fNsapM2b5vjlVlyvZ9c6wqU7bvm2NVmbJ93xyrypTt++ZYVaZs3zfHqjJl+745VpUp2/fNsapM2b5vjlVlyvZ9c6wqU7bvm2NVmbJ93xyrypTt++ZYVaZs3zfHqjJl+745VpUp2/fNsapM2b5vjlVlyvZ9c6wqU7bvm2NVmbJ93xyrypTt++ZYVaZs3zfHqjJl+745VpUp2/fNsapM2b5vjlVlyvZ9c6wqU7bvm2NVmbJ93xyrypTt++ZYVaZs3zfHqjJl+745VpUp2/fNsapM2b5vjlVlyvZ9c6wqU7bvm2NVmbJ93xyrypTt++ZYVaZs3zfHqjJl+745VpUp2/fNsapM2b5vjlVlyvZ9c6wqU7bvm2NVmbJ93xyqyseyfceyfceyfceyfd/VmkNV+Vi271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i2LyzbF5btC8v2hWX74kdVOSzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBs37Vs37Vs37Vs37Vs3/1RVb6W7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7XuW7XuW7XuW7XuW7Xs/qsrPsn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn1p2b60bF9ati8t25c/qspp2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvKsn1l2b6ybF9Ztq9+VJXLsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/a1Zfvasn1t2b62bF//qCq3Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu0by/aNZfvGsn1j2b75UVUey/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNu3lu1by/atZfvWsn37o6q8lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfSrbv/H6S7fufA1X5fw5U5f85UJX/50BV/p8DVfl/DlTl/zlQlf/nQFX+n2NVWbJ9/3OsKku273+OVWXJ9v3Psaos2b7/OVaVJdv3P8eqsmT7/udYVZZs3/8cq8qS7fufY1VZsn3/c6wqS7bvf45VZcn2/c+xqizZvv85VpUl2/c/x6qyZPv+51hVlmzf/xyrypLt+59jVVmyff9zrCpLtu9/jlVlyfb9z7GqLNm+/zlWlSXb9z/HqrJk+/7nWFWWbN//HKvKku37n2NVWbJ9/3OsKku273+OVWXJ9v3Psaos2b7/OVaVJdv3P8eqsmT7/udYVZZs3/8cq8qS7fufY1VZsn3/c6wqS7bvf45VZcn2/c+xqizZvv85VpUl2/c/x6qyZPv+51hVlmzf/xyrypLt+59jVVmyff9zrCpLtu9/jlVlyfb9z7GqLNm+/zlWlSXb9z+HqvKxbN+xbN+xbN+xbN93teZQVT6W7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7TuW7QvL9oVl+8KyfWHZvvhRVQ7L9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s23ct23ct23ct23ct23d/VJWvZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfueZfueZfueZfueZfvej6rys2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2xfWrYvLduXlu1Ly/blj6pyWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+smxfWbavLNtXlu2rH1XlsmxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9bdm+tmxfW7avLdvXP6rKbdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX7xrJ9Y9m+sWzfWLZvflSVx7J9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2rWX71rJ9a9m+tWzf/qgqr2X71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5TtOz/K9n1zpCp/c6Qqf3OkKn9zpCp/c6Qqf3OkKn9zpCp/c6Qqf3OsKlO275tjVZmyfd8cq8qU7fvmWFWmbN83x6oyZfu+OVaVKdv3zbGqTNm+b45VZcr2fXOsKlO275tjVZmyfd8cq8qU7fvmWFWmbN83x6oyZfu+OVaVKdv3zbGqTNm+b45VZcr2fUerypTt+45WlSnb9x2tKlO27ztaVaZs33e0qkzZvm+OVWXK9n1zrCpTtu+bY1WZsn3fHKvKlO375lhVpmzfN8eqMmX7vjlWlSnb982xqkzZvm+OVWXK9n1zrCpTtu+bY1WZsn3fHKvKlO375lhVpmzfN8eqMmX7vjlWlSnb982xqkzZvm+OVWXK9v1/H2/NsapM2b7/n/KsOVaVKdv3/ymANceqMmX7/t8/tOZYVaZs3/9TD9Ycq8qW7TuW7TuW7TuW7TuW7fuu1hyqyseyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfWHZvrBsX1i2LyzbFz+qymHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+65l+65l+65l+65l++6PqvK1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+zbN+zbN+zbN+zbN/7UVV+lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu1Ly/alZfvSsn1p2b78UVVOy/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLdtXlu0ry/aVZfvKsn31o6pclu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLdvXlu1ry/a1Zfv6R1W5LdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmzfWLZvLNs3lu0by/bNj6ryWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+tWzfWrZvLdu3lu3bH1XltWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX7lrJ98aNs3zdHqvI3R6ryN0eq8jdHqvI3R6ryN0eq8jdHqvI3R6ryN8eqMmX7vjlWlSnb982xqkzZvm+OVWXK9n1zrCpTtu+bY1WZsn3fHKvKlO375lhVpmzfN8eqMmX7vjlWlSnb982xqkzZvm+OVWXK9n1zrCpTtu+bY1WZsn3fHKvKlO375lhVpmzfN8eqMmX7vjlWlSnb982xqkzZvm+OVWXK9n1zrCpTtu+bY1WZsn3fHKvKlO375lhVpmzfN8eqMmX7vjlWlSnb982xqkzZvm+OVWXK9n1zrCpTtu+bY1WZsn3fHKvKlO375lhVpmzfN8eqMmX7vjlWlSnb982xqkzZvm+OVWXK9n1zrCpTtu+bY1WZsn3fHKvKlO375lhVpmzfN8eqMmX7vjlWlSnb982xqkzZvm+OVWXK9n1zrCpTtu+bQ1X5WLbvWLbvWLbvWLbvu1pzqCofy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/aFZfvCsn1h2b6wbF/8qCqHZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu27lu27lu27lu27lu27P6rK17J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J9z7J9z7J9z7J9z7J970dV+Vm271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m2Ly3bl5btS8v2pWX78kdVOS3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1m2ryzbV5btK8v21Y+qclm2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrZsX1u2ry3b15bt6x9V5bZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfWPZvrFs31i2byzbNz+qymPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+9ayfWvZvrVs31q2b39UldeyfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvK9t0fZfu+OVKVvzlSlb85UpW/OVKVvzlSlb85UpW/OVKVvzlSlb85VpUp2/fNsapM2b5vjlVlyvZ9c6wqU7bvm2NVmbJ93xyrypTt++ZYVaZs3zfHqjJl+745VpUp2/fNsapM2b5vjlVlyvZ9c6wqU7bvm2NVmbJ93xyrypTt++ZYVaZs3zfHqjJl+745VpUp2/fNsapM2b5vjlVlyvZ9c6wqU7bvm2NVmbJ93xyrypTt++ZYVaZs3zfHqjJl+745VpUp2/fNsapM2b5vjlVlyvZ9c6wqU7bvm2NVmbJ93xyrypTt++ZYVaZs3zfHqjJl+745VpUp2/fNsapM2b5vjlVlyvZ9c6wqU7bvm2NVmbJ93xyrypTt++ZYVaZs3zfHqjJl+745VpUp2/fNsapM2b5vjlVlyvZ9c6wqU7bvm2NVmbJ93xyqyseyfceyfceyfceyfd/VmkNV+Vi271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i271i2LyzbF5btC8v2hWX74kdVOSzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBs37Vs37Vs37Vs37Vs3/1RVb6W7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7XuW7XuW7XuW7XuW7Xs/qsrPsn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn1p2b60bF9ati8t25c/qspp2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvKsn1l2b6ybF9Ztq9+VJXLsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/a1Zfvasn1t2b62bF//qCq3Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu0by/aNZfvGsn1j2b75UVUey/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNu3lu1by/atZfvWsn37o6q8lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfUrbv/Sjb982RqvzNkar8zZGq/M2RqvzNkar8zZGq/M2RqvzNkar8zbGqTNm+b45VZcr2fXOsKlO275tjVZmyfd8cq8qU7fvmWFWmbN83x6oyZfu+OVaVKdv3zbGqTNm+b45VZcr2fXOsKlO275tjVZmyfd8cq8qU7fvmWFWmbN83x6oyZfu+OVaVKdv3zbGqTNm+b45VZcr2fXOsKlO275tjVZmyfd8cq8qU7fvmWFWmbN83x6oyZfu+OVaVKdv3zbGqTNm+b45VZcr2fXOsKlO275tjVZmyfd8cq8qU7fvmWFWmbN83x6oyZfu+OVaVKdv3zbGqTNm+b45VZcr2fXOsKlO275tjVZmyfd8cq8qU7fvmWFWmbN83x6oyZfu+OVaVKdv3zbGqTNm+b45VZcr2fXOsKlO275tjVZmyfd8cq8qU7fvmUFU+lu07lu07lu07lu37rtYcqsrHsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn3Hsn1h2b6wbF9Yti8s2xc/qsph2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfuuZfuuZfuuZfuuZfvuj6rytWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzftWzfs2zfs2zfs2zfs2zf+1FVfpbte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5bte5btS8v2pWX70rJ9adm+/FFVTsv2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bV5btK8v2lWX7yrJ99aOqXJbtK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ry3b15bta8v2tWX7+kdVuS3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZs31i2byzbN5btG8v2zY+q8li2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrVs31q2by3bt5bt2x9V5bVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+5ayffmjbN83R6ryN0eq8jdHqvI3R6ryN0eq8jdHqvI3R6ryN0eq8jfHqjJl+745VpUp2/fNsapM2b5vjlVlyvZ9c6wqU7bvm2NVmbJ93xyrypTt++ZYVaZs3zfHqjJl+745VpUp2/fNsapM2b5vjlVlyvZ9c6wqU7bvm2NVmbJ93xyrypTt++ZYVaZs3zfHqjJl+745VpUp2/fNsapM2b5vjlVlyvZ9c6wqU7bvm2NVmbJ93xyrypTt++ZYVaZs3zfHqjJl+745VpUp2/fNsapM2b5vjlVlyvZ9c6wqU7bvm2NVmbJ93xyrypTt++ZYVaZs3zfHqjJl+745VpUp2/fNsapM2b5vjlVlyvZ9c6wqU7bvm2NVmbJ93xyrypTt++ZYVaZs3zfHqjJl+745VpUp2/fNsapM2b5vjlVlyvZ9c6wqU7bvm0NV+Vi271i271i271i277tac6gqH8v2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2hWX7wrJ9Ydm+sGxf/Kgqh2X7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btu5btu5btu5btu5btuz+qyteyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfdeyfc+yfc+yfc+yfc+yfe9HVflZtu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Ztu9Zti8t25eW7UvL9qVl+/JHVTkt25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9Ztq8s21eW7SvL9tWPqnJZtq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b62bF9btq8t29eW7esfVeW2bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1j2b6xbN9Ytm8s2zc/qspj2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvWsn1r2b61bN9atm9/VJXXsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1byvbVj7J93xypyt8cqcrfHKnK3xypyt8cqcrfHKnK3xypyt8cqcrfHKvKlO375lhVpmzfN8eqMmX7vjlWlSnb982xqkzZvm+OVWXK9n1zrCpTtu+bY1WZsn3fHKvKlO375lhVpmzfN8eqMmX7vjlWlSnb982xqkzZvm+OVWXK9n1zrCpTtu+bY1WZsn3fHKvKlO375lhVpmzfN8eqMmX7vjlWlSnb982xqkzZvm+OVWXK9n1zrCpTtu+bY1WZsn3fHKvKlO375lhVpmzfN8eqMmX7vjlWlSnb982xqkzZvm+OVWXK9n1zrCpTtu+bY1WZsn3fHKvKlO375lhVpmzfN8eqMmX7vjlWlSnb982xqkzZvm+OVWXK9n1zrCpTtu+bY1WZsn3fHKvKlO375lhVpmzfN8eqMmX7vjlWlSnb982xqkzZvm8OVeVj2b5j2b5j2b5j2b7vas2hqnws23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs23cs2xeW7QvL9oVl+8KyffGjqhyW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Ytu9atu9atu9atu9atu/+qCpfy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Y9y/Y9y/Y9y/Y9y/a9H1XlZ9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+tGxfWrYvLduXlu3LH1XltGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9Zdm+smxfWbavLNtXP6rKZdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX72rJ9bdm+tmxfW7avf1SV27J9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2jWX7xrJ9Y9m+sWzf/Kgqj2X7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btW8v2rWX71rJ9a9m+/VFVXsv2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2bynb1z/K9n1zpCp/c6Qqf3OkKn9zpCp/c6Qqf3OkKn9zpCp/c6Qqf3OsKlO275tjVZmyfd8cq8qU7fvmWFWmbN83x6oyZfu+OVaVKdv3zbGqTNm+b45VZcr2fXOsKlO275tjVZmyfd8cq8qU7fvmWFWmbN83x6oyZfu+OVaVKdv3zbGqTNm+b45VZcr2fXOsKlO275tjVZmyfd8cq8qU7fvmWFWmbN83x6oyZfu+OVaVKdv3zbGqTNm+b45VZcr2fXOsKlO275tjVZmyfd8cq8qU7fvmWFWmbN83x6oyZfu+OVaVKdv3zbGqTNm+b45VZcr2fXOsKlO275tjVZmyfd8cq8qU7fvmWFWmbN83x6oyZfu+OVaVKdv3zbGqTNm+b45VZcr2fXOsKlO275tjVZmyfd8cq8qU7fvmWFWmbN83x6oyZfu+OVSVj2X7jmX7jmX7jmX7vqs1h6rysWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWzfsWxfWLYvLNsXlu0Ly/bFj6pyWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+a9m+a9m+a9m+a9m++6OqfC3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3b9yzb9yzb9yzb9yzb935UlZ9l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+9KyfWnZvrRsX1q2L39UldOyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9pVl+8qyfWXZvrJsX/2oKpdl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7WvL9rVl+9qyfW3Zvv5RVW7L9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t2zeW7RvL9o1l+8ayffOjqjyW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8t27eW7VvL9q1l+/ZHVXkt27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b6lbN/8KNv3zZGq/M2RqvzNkar8zZGq/M2RqvzNkar8zZGq/M2RqvzNsapM2b5vjlVlyvZ9c6wqU7bvm2NVmbJ93xyrypTt++ZYVaZs3zfHqjJl+745VpUp2/fNsapM2b5vjlVlyvZ9c6wqU7bvm2NVmbJ93xyrypTt++ZYVaZs3zfHqjJl+745VpUp2/fNsapM2b5vjlVlyvZ9c6wqU7bvm2NVmbJ93xyrypTt++ZYVaZs3zfHqjJl+745VpUp2/fNsapM2b5vjlVlyvZ9c6wqU7bvm2NVmbJ93xyrypTt++ZYVaZs3zfHqjJl+745VpUp2/fNsapM2b5vjlVlyvZ9c6wqU7bvm2NVmbJ93xyrypTt++ZYVaZs3zfHqjJl+745VpUp2/fNsapM2b5vjlVlyvZ9c6wqU7bvm2NVmbJ93xyrypTt++ZQVT6W7TuW7TuW7TuW7fuu1hyqyseyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfWHZvrBsX1i2LyzbFz+qymHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+65l+65l+65l+65l++6PqvK1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+1bN+zbN+zbN+zbN+zbN/7UVV+lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu17lu1Ly/alZfvSsn1p2b78UVVOy/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLdtXlu0ry/aVZfvKsn31o6pclu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLdvXlu1ry/a1Zfv6R1W5LdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmzfWLZvLNs3lu0by/bNj6ryWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+tWzfWrZvLdu3lu3bH1XltWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX7lrJ9+6Ns3zdHqvI3R6ryN0eq8jdHqvI3R6ryN0eq8jdHqvI3R6ryN8eqMmX7vjlWlSnb982xqkzZvm+OVWXK9n1zrCpTtu+bY1WZsn3fHKvKlO375lhVpmzfN8eqMmX7vjlWlSnb982xqkzZvm+OVWXK9n1zrCpTtu+bY1WZsn3fHKvKlO375lhVpmzfN8eqMmX7vjlWlSnb982xqkzZvm+OVWXK9n1zrCpTtu+bY1WZsn3fHKvKlO375lhVpmzfN8eqMmX7vjlWlSnb982xqkzZvm+OVWXK9n1zrCpTtu+bY1WZsn3fHKvKlO375lhVpmzfN8eqMmX7vjlWlSnb982xqkzZvm+OVWXK9n1zrCpTtu+bY1WZsn3fHKvKlO375lhVpmzfN8eqMmX7vjlWlSnb982xqkzZvm+OVWXK9n1zrCpTtu+bQ1X5WLbvWLbvWLbvWLbvu1pzqCofy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/aFZfvCsn1h2b6wbF/8qCqHZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu27lu27lu27lu27lu27P6rK17J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J917J9z7J9z7J9z7J9z7J970dV+Vm271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m271m2Ly3bl5btS8v2pWX78kdVOS3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1m2ryzbV5btK8v21Y+qclm2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrZsX1u2ry3b15bt6x9V5bZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfWPZvrFs31i2byzbNz+qymPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+9ayfWvZvrVs31q2b39UldeyfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvJ9sXvJ9m+/zlQlf/nQFX+nwNV+X8OVOX/OVCV/+dAVf6fA1X5fw5U5f85VpUl2/c/x6qyZPv+51hVlmzf/xyrypLt+59jVVmyff9zrCpLtu9/jlVlyfb9z7GqLNm+/zlWlSXb9z/HqrJk+/7nWFWWbN//HKvKku37n2NVWbJ9/3OsKku273+OVWXJ9v3Psaos2b7/OVaVJdv3P8eqsmT7/udYVZZs3/8cq8qS7fufY1VZsn3/c6wqS7bvf45VZcn2/c+xqizZvv85VpUl2/c/x6qyZPv+51hVlmzf/xyrypLt+59jVVmyff9zrCpLtu9/jlVlyfb9z7GqLNm+/zlWlSXb9z/HqrJk+/7nWFWWbN//HKvKku37n2NVWbJ9/3OsKku273+OVWXJ9v3Psaos2b7/OVaVJdv3P8eqsmT7/udYVZZs3/8cq8qS7fufY1VZsn3/c6gqH8v2Hcv2Hcv2Hcv2fVdrDlXlY9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+sGxfWLYvLNsXlu2LH1XlsGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ917J917J917J917J990dV+Vq271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271m271m271m271m27/2oKj/L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9qVl+9KyfWnZvrRsX/6oKqdl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7SvL9pVl+8qyfWXZvvpRVS7L9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s29eW7WvL9rVl+9qyff2jqtyW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btm8s2zeW7RvL9o1l++ZHVXks2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9atm8t27eW7VvL9u2PqvJatm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1L2b7zo2zfN0eq8jdHqvI3R6ryN0eq8jdHqvI3R6ryN0eq8jdHqvI3x6oyZfu+OVaVKdv3zbGq/Me8nRtGEMNAEEzpQHxk/olplUW5Y43VXlG277tjVZmyfd8dq8qU7fvuWFWmbN93x6oyZfu+O1aVKdv33bGqTNm+745VZcr2fXesKlO277tjVZmyfd8dq8qU7fvuWFWmbN93x6oyZfu+O1aVKdv3jVaVKdv3jVaVKdv3jVaVKdv3jVaVKdv3jVaVKdv33bGqTNm+745VZcr2fXesKlO277tjVZmyfd8dq8qU7fvuWFWmbN93x6oyZfu+O1aVKdv33bGqTNm+745VZcr2fXesKlO277tjVZmyfd8dq8qU7fvuWFWmbN93x6oyZfu+O1aVKdv33bGqTNm+745VZcr2fXesKlO277tjVZmyfd8dq8qU7fvuWFWmbN93x6oyZfu+O1aVKdv33aGqHJbtC8v2hWX7wrJ932rdoaoclu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGzfsWzfsWzfsWzfsWzf+VFVPpbtO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btO5btS8v2pWX70rJ9adm+/FFVTsv2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bV5btK8v2lWX7yrJ99aOqXJbtK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ry3b15bta8v2tWX7+kdVuS3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZs31i2byzbN5btG8v2zY+q8li2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrVs31q2by3bt5bt2x9V5bVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfdeyfdeyfdeyfdeyffdHVflatu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9atu9Ztu9Ztu9Ztu9Ztu/9qCo/y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9y/Y9yvadH2X7vjtSlb87UpW/O1KVvztSlb87UpW/O1KVvztSlb87UpW/O1aVKdv33bGqTNm+745VZcr2fXesKlO277tjVZmyfd8dq8qU7fvuWFWmbN93x6oyZfu+O1aVKdv33bGqTNm+745VZcr2fXesKlO277tjVZmyfd8dq8qU7fvuWFWmbN93x6oyZfu+O1aVKdv33bGqTNm+745VZcr2fXesKlO277tjVZmyfd8dq8qU7fvuWFWmbN93x6oyZfu+O1aVKdv33bGqTNm+745VZcr2fXesKlO277tjVZmyfd8dq8qU7fvuWFWmbN93x6oyZfu+O1aVKdv33bGqTNm+745VZcr2fXesKlO277tjVZmyfd8dq8qU7fvuWFWmbN93x6oyZfu+O1aVKdv33bGqTNm+745VZcr2fXesKlO277tjVZmyfd8dqsph2b6wbF9Yti8s2/et1h2qymHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9h3L9h3L9h3L9h3L9p0fVeVj2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b5j2b60bF9ati8t25eW7csfVeW0bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1l2b6ybF9Ztq8s21c/qspl2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvasn1t2b62bF9btq9/VJXbsn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/aNZfvGsn1j2b6xbN/8qCqPZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu1by/atZfvWsn1r2b79UVVey/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdt3Ldt3Ldt3Ldt3Ldt3f1SVr2X7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7rmX7nmX7nmX7nmX7nmX73o+q8rNs37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns37Ns36NsX/4o2/fdkar83ZGq/N2Rqvzdkar83ZGq/N2Rqvzdkar83ZGq/N2xqkzZvu+OVWXK9n13rCpTtu+7Y1WZsn3fHavKlO377lhVpmzfd8eqMmX7vjtWlSnb992xqkzZvu+OVWXK9n13rCpTtu+7Y1WZsn3fHavKlO377lhVpmzfd8eqMmX7vjtWlSnb992xqkzZvu+OVWXK9n13rCpTtu+7Y1WZsn3fHavKlO377lhVpmzfd8eqMmX7vjtWlSnb992xqkzZvu+OVWXK9n13rCpTtu+7Y1WZsn3fHavKlO377lhVpmzfd8eqMmX7vjtWlSnb992xqkzZvu+OVWXK9n13rCpTtu+7Y1WZsn3fHavKlO377lhVpmzfd8eqMmX7vjtWlSnb992xqkzZvu+OVWXK9n13rCpTtu+7Y1WZsn3fHavKlO377lBVDsv2hWX7wrJ9Ydm+b7XuUFUOy/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLbvWLbvWLbvWLbvWLbv/KgqH8v2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2Hcv2nbWqbNm+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+Y9m+tGxfWrYvLduXlu3LH1XltGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9Zdm+smxfWbavLNtXP6rKZdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX72rJ9bdm+tmxfW7avf1SV27J9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2jWX7xrJ9Y9m+sWzf/Kgqj2X7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btW8v2rWX71rJ9a9m+/VFVXsv2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bdy3bdy3bdy3bdy3bd39Ula9l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+65l+55l+55l+55l+55l+96PqvKzbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+zbN+jbF/9KNv33ZGq/N2Rqvzdkar83ZGq/N2Rqvzdkar83ZGq/N2RqvzdsapM2b7vjlVlyvZ9d6wqU7bvu2NVmbJ93x2rypTt++5YVaZs33fHqjJl+747VpUp2/fdsapM2b7vjlVlyvZ9d6wqU7bvu2NVmbJ93x2rypTt++5YVaZs33fHqjJl+747VpUp2/fdsapM2b7vjlVlyvZ9d6wqU7bvu2NVmbJ93x2rypTt++5YVaZs33fHqjJl+747VpUp2/fdsapM2b7vjlVlyvZ9d6wqU7bvu2NVmbJ93x2rypTt++5YVaZs33fHqjJl+747VpUp2/fdsapM2b7vjlVlyvZ9d6wqU7bvu2NVmbJ93x2rypTt++5YVaZs33fHqjJl+747VpUp2/fdsapM2b7vjlVlyvZ9d6wqU7bvu2NVmbJ93x2rypTt++5QVQ7L9oVl+8KyfWHZvm+17lBVDsv2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i271i271i271i271i27/yoKh/L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9h3L9qVl+9KyfWnZvrRsX/6oKqdl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7SvL9pVl+8qyfWXZvvpRVS7L9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s29eW7WvL9rVl+9qyff2jqtyW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btm8s2zeW7RvL9o1l++ZHVXks2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9atm8t27eW7VvL9u2PqvJatm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b5r2b5r2b5r2b5r2b77o6p8Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldt3Ldv3LNv3LNv3LNv3LNv3flSVn2X7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7nmX7HmX7+kfZvu+OVOXvjlTl745U5e+OVOXvjlTl745U5e+OVOXvjlTl745VZcr2fXesKlO277tjVZmyfd8dq8qU7fvuWFWmbN93x6oyZfu+O1aVKdv33bGqTNm+745VZcr2fXesKlO277tjVZmyfd8dq8qU7fvuWFWmbN93x6oyZfu+O1aVKdv33bGqTNm+745VZcr2fXesKlO277tjVZmyfd8dq8qU7fvuWFWmbN93x6oyZfu+O1aVKdv33bGqTNm+745VZcr2fXesKlO277tjVZmyfd8dq8qU7fvuWFWmbN93x6oyZfu+O1aVKdv33bGqTNm+745VZcr2fXesKlO277tjVZmyfd8dq8qU7fvuWFWmbN93x6oyZfu+O1aVKdv33bGqTNm+745VZcr2fXesKlO277tjVZmyfd8dq8qU7fvuWFWmbN93h6pyWLYvLNsXlu0Ly/Z9q3WHqnJYti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn3Hsn3Hsn3Hsn3Hsn3nR1X5WLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLYvLduXlu1Ly/alZfvyR1U5LduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWbavLNtXlu0ry/bVj6pyWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+tmxfW7avLdvXlu3rH1XltmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9Y9m+sWzfWLZvLNs3P6rKY9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX71rJ9a9m+tWzfWrZvf1SV17J9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2Xcv2Xcv2Xcv2Xcv23R9V5WvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmfZvmfZvmfZvmfZvvejqvws2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/co2zc/yvZ9d6Qqf3ekKn93pCp/d6Qqf3ekKn93pCp/d6Qqf3ekKn93rCpTtu+7Y1WZsn3fHavKlO377lhVpmzfd8eqMmX7vjtWlSnb992xqkzZvu+OVWXK9n13rCpTtu+7Y1WZsn3fHavKlO377lhVpmzfd8eqMmX7vjtWlSnb992xqkzZvu+OVWXK9n13rCpTtu+7Y1WZsn3fHavKlO377lhVpmzfd8eqMmX7vjtWlSnb992xqkzZvu+OVWXK9n13rCpTtu+7Y1WZsn3fHavKlO377lhVpmzfd8eqMmX7vjtWlSnb992xqkzZvu+OVWXK9n13rCpTtu+7Y1WZsn3fHavKlO377lhVpmzfd8eqMmX7vjtWlSnb992xqkzZvu+OVWXK9n13rCpTtu+7Y1WZsn3fHavKlO377lhVpmzfd8eqMmX7vjtUlcOyfWHZvrBsX1i271utO1SVw7J9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btO5btO5btO5btO5btOz+qyseyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfceyfWnZvrRsX1q2Ly3blz+qymnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+8qyfWXZvrJsX1m2r35UlcuyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9rVl+9qyfW3ZvrZsX/+oKrdl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7RvL9o1l+8ayfWPZvvlRVR7L9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s27eW7VvL9q1l+9ayffujqryW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atu9atu9atu9atu9atu/+qCpfy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Zdy/Y9y/Y9y/Y9y/Y9y/a9H1XlZ9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+Z9m+R9m+/VG277sjVfm7I1X5uyNV+bsjVfm7I1X5uyNV+bsjVfm7I1X5u2NVmbJ93x2rypTt++5YVaZs33fHqjJl+747VpUp2/fdsapM2b7vjlVlyvZ9d6wqU7bvu2NVmbJ93x2rypTt++5YVaZs33fHqjJl+747VpUp2/fdsapM2b7vjlVlyvZ9d6wqU7bvu2NVmbJ93x2rypTt++5YVaZs33fHqjJl+747VpUp2/fdsapM2b7vjlVlyvZ9d6wqU7bvu2NVmbJ93x2rypTt++5YVaZs33fHqjJl+747VpUp2/fdsapM2b7vjlVlyvZ9d6wqU7bvu2NVmbJ93x2rypTt++5YVaZs33fHqjJl+747VpUp2/fdsapM2b7vjlVlyvZ9d6wqU7bvu2NVmbJ93x2rypTt++5YVaZs33fHqjJl+747VpUp2/fdoaoclu0Ly/aFZfvCsn3fat2hqhyW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbN+xbN+xbN+xbN+xbN/5UVU+lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu1Ly/alZfvSsn1p2b78UVVOy/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLdtXlu0ry/aVZfvKsn31o6pclu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLdvXlu1ry/a1Zfv6R1W5LdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmzfWLZvLNs3lu0by/bNj6ryWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+tWzfWrZvLdu3lu3bH1XltWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ917J917J917J917J990dV+Vq271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271m271m271m271m27/2oKj/L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3K9t0fZfu+O1KVvztSlb87UpW/O1KVvztSlb87UpW/O1KVvztSlb87VpUp2/fdsapM2b7vjlVlyvZ9d6wqU7bvu2NVmbJ93x2rypTt++5YVaZs33fHqjJl+747VpUp2/fdsapM2b7vjlVlyvZ9d6wqU7bvu2NVmbJ93x2rypTt++5YVaZs33fHqjJl+747VpUp2/fdsapM2b7vjlVlyvZ9d6wqU7bvu2NVmbJ93x2rypTt++5YVaZs33fHqjJl+747VpUp2/fdsapM2b7vjlVlyvZ9d6wqU7bvu2NVmbJ93x2rypTt++5YVaZs33fHqjJl+747VpUp2/fdsapM2b7vjlVlyvZ9d6wqU7bvu2NVmbJ93x2rypTt++5YVaZs33fHqjJl+747VpUp2/fdsapM2b7vjlVlyvZ9d6wqU7bvu2NVmbJ93x2qymHZvrBsX1i2Lyzb963WHarKYdm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2Hcv2Hcv2Hcv2Hcv2nR9V5WPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvrRsX1q2Ly3bl5btyx9V5bRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWXZvrJsX1m2ryzbVz+qymXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+9qyfW3ZvrZsX1u2r39UlduyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9o1l+8ayfWPZvrFs3/yoKo9l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7VvL9q1l+9ayfWvZvv1RVV7L9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t23ct23ct23ct23ct23d/VJWvZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfueZfueZfueZfueZfvej6rys2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfo2zf+1G277sjVfm7I1X5uyNV+bsjVfm7I1X5uyNV+bsjVfm7I1X5u2NVmbJ93x2rypTt++5YVaZs33fHqjJl+747VpUp2/fdsapM2b7vjlVlyvZ9d6wqU7bvu2NVmbJ93x2rypTt++5YVaZs33fHqjJl+747VpUp2/fdsapM2b7vjlVlyvZ9d6wqU7bvu2NVmbJ93x2rypTt++5YVaZs33fHqjJl+747VpUp2/fdsapM2b7vjlVlyvZ9d6wqU7bvu2NVmbJ93x2rypTt++5YVaZs33fHqjJl+747VpUp2/fdsapM2b7vjlVlyvZ9d6wqU7bvu2NVmbJ93x2rypTt++5YVaZs33fHqjJl+747VpUp2/fdsapM2b7vjlVlyvZ9d6wqU7bvu2NVmbJ93x2rypTt++5YVaZs33fHqjJl+747VpUp2/fdoaoclu0Ly/aFZfvCsn3fat2hqhyW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbN+xbN+xbN+xbN+xbN/5UVU+lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu07lu1Ly/alZfvSsn1p2b78UVVOy/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLdtXlu0ry/aVZfvKsn31o6pclu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLdvXlu1ry/a1Zfv6R1W5LdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmzfWLZvLNs3lu0by/bNj6ryWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+tWzfWrZvLdu3lu3bH1XltWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ917J917J917J917J990dV+Vq271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271q271m271m271m271m27/2oKj/L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3L9j3J9uXvJ9m+/ztQlf/vQFX+vwNV+f8OVOX/O1CV/+9AVf6/A1X5/w5U5f87VpUl2/d/x6qyZPv+71hVlmzf/x2rypLt+79jVVmyff93rCpLtu//jlVlyfb937GqLNm+/ztWlSXb93/HqrJk+/7vWFWWbN//HavKku37v2NVWbJ9/3esKku27/+OVWXJ9v3fsaos2b7/O1aVJdv3f8eqsmT7/u9YVZZs3/8dq8qS7fu/Y1VZsn3/d6wqS7bv/45VZcn2/d+xqizZvv87VpUl2/d/x6qyZPv+71hVlmzf/x2rypLt+79jVVmyff93rCpLtu//jlVlyfb937GqLNm+/ztWlSXb93/HqrJk+/7vWFWWbN//HavKku37v2NVWbJ9/3esKku27/+OVWXJ9v3fsaos2b7/O1aVJdv3f8eqsmT7/u9YVZZs3/8dq8qS7fu/Y1VZsn3/d6gqh2X7wrJ9Ydm+sGzft1p3qCqHZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNt3LNt3LNt3LNt3LNt3flSVj2X7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX7jmX70rJ9adm+tGxfWrYvf1SV07J9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2lWX7yrJ9Zdm+smxf/agql2X7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5bta8v2tWX72rJ9bdm+/lFVbsv2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3bN5btG8v2jWX7xrJ986OqPJbtG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2by3bt5btW8v2rWX79kdVeS3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs37Vs37Vs37Vs37Vs3/1RVb6W7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7buW7XuW7XuW7XuW7XuW7Xs/qsrPsn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn3Psn2Psn3xo2zfd0eq8ndHqvJ3R6ryd0eq8ndHqvJ3R6ryd0eq8ndHqvJ3x6oyZfu+O1aVKdv33bGqTNm+745VZcr2fXesKlO277tjVZmyfd8dq8qU7fvuWFWmbN93x6oyZfu+O1aVKdv33bGqTNm+745VZcr2fXesKlO277tjVZmyfd8dq8qU7fvuWFWmbN83WlWmbN83WlWmbN83WlWmbN83WlWmbN83WlWmbN93x6oyZfu+O1aVKdv33bGqTNm+745VZcr2fXesKlO277tjVZmyfd8dq8qU7fvuWFWmbN93x6oyZfu+O1aVKdv33bGqTNm+745VZcr2fXesKlO277tjVZmyfd8dq8qU7fvuWFWmbN93x6oyZfu+O1aVKdv33bGqTNm+745VZcr2fXesKlO277tjVZmyfd8dq8qU7fvuWFWmbN93h6pyWLYvLNsXlu0Ly/Z9q3WHqnJYti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn3Hsn3Hsn3Hsn3Hsn3nR1X5WLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLbvWLYvLduXlu1Ly/alZfvyR1U5LduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWbavLNtXlu0ry/bVj6pyWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+tmxfW7avLdvXlu3rH1XltmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9Y9m+sWzfWLZvLNs3P6rKY9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX71rJ9a9m+tWzfWrZvf1SV17J9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2Xcv2Xcv2Xcv2Xcv23R9V5WvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmvZvmfZvmfZvmfZvmfZvvejqvws2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/cs2/co23d+lO377khV/u5IVf7uSFX+7khV/u5IVf7uSFX+7khV/u5IVf7uWFWmbN93x6oyZfu+O1aVKdv33bGqTNm+745VZcr2fXesKlO277tjVZmyfd8dq8qU7fvuWFWmbN93x6oyZfu+O1aVKdv33bGqTNm+745VZcr2fXesKlO277tjVZmyfd8dq8qU7fvuWFWmbN93x6oyZfu+O1aVKdv33bGqTNm+745VZcr2fXesKlO277tjVZmyfd8dq8qU7fvuWFWmbN93x6oyZfu+O1aVKdv33bGqTNm+745VZcr2fXesKlO277tjVZmyfd8dq8qU7fvuWFWmbN93x6oyZfu+O1aVKdv33bGqTNm+745VZcr2fXesKlO277tjVZmyfd8dq8qU7fvuWFWmbN93x6oyZfu+O1aVKdv33bGqTNm+745VZcr2fXeoKodl+8KyfWHZvrBs37dad6gqh2X7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2Lyzbdyzbdyzbdyzbdyzbd35UlY9l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+45l+9KyfWnZvrRsX1q2L39UldOyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9pVl+8qyfWXZvrJsX/2oKpdl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7WvL9rVl+9qyfW3Zvv5RVW7L9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t2zeW7RvL9o1l+8ayffOjqjyW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8t27eW7VvL9q1l+/ZHVXkt27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN+1bN+1bN+1bN+1bN/9UVW+lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu27lu17lu17lu17lu17lu17P6rKz7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9z7J9j7J9+aNs33dHqvJ3R6ryd0eq8ndHqvJ3R6ryd0eq8ndHqvJ3R6ryd8eqMmX7vjtWlSnb992xqkzZvu+OVWXK9n13rCpTtu+7Y1WZsn3fHavKlO377lhVpmzfd8eqMmX7vjtWlSnb992xqkzZvu+OVWXK9n13rCpTtu+7Y1WZsn3fHavKlO377lhVpmzfd8eqMmX7vjtWlSnb992xqkzZvu+OVWXK9n13rCpTtu+7Y1WZsn3fHavKlO377lhVpmzfd8eqMmX7vjtWlSnb992xqkzZvu+OVWXK9n13rCpTtu+7Y1WZsn3fHavKlO377lhVpmzfd8eqMmX7vjtWlSnb992xqkzZvu+OVWXK9n13rCpTtu+7Y1WZsn3fHavKlO377lhVpmzfd8eqMmX7vjtWlSnb992xqkzZvu+OVWXK9n13rCpTtu+7Q1U5LNsXlu0Ly/aFZfu+1bpDVTks2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b5j2b5j2b5j2b5j2b7zo6p8LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNt3LNuXlu1Ly/alZfvSsn35o6qclu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWravLNtXlu0ry/aVZfvqR1W5LNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfW7avLdvXlu1ry/b1j6pyW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+sWzfWLZvLNs3lu2bH1XlsWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9a9m+tWzfWrZvLdu3P6rKa9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX7rmX7rmX7rmX7rmX77o+q8rVs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Vs37Ns37Ns37Ns37Ns3/tRVX6W7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuW7XuU7asfZfu+O1KVvztSlb87UpW/O1KVvztSlb87UpW/O1KVvztSlb87VpUp2/fdsapM2b7vjlVlyvZ9d6wqU7bvu2NVmbJ93x2rypTt++5YVaZs33fHqjJl+747VpUp2/fdsapM2b7vjlVlyvZ9d6wqU7bvu2NVmbJ93x2rypTt++5YVaZs33fHqjJl+747VpUp2/fdsapM2b7vjlVlyvZ9d6wqU7bvu2NVmbJ93x2rypTt++5YVaZs33fHqjJl+747VpUp2/fdsapM2b7vjlVlyvZ9d6wqU7bvu2NVmbJ93x2rypTt++5YVaZs33fHqjJl+747VpUp2/fdsapM2b7vjlVlyvZ9d6wqU7bvu2NVmbJ93x2rypTt++5YVaZs33fHqjJl+747VpUp2/fdsapM2b7vjlVlyvZ9d6wqU7bvu2NVmbJ93x2qymHZvrBsX1i2Lyzb963WHarKYdm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2Hcv2Hcv2Hcv2Hcv2nR9V5WPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvmPZvrRsX1q2Ly3bl5btyx9V5bRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWXZvrJsX1m2ryzbVz+qymXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+9qyfW3ZvrZsX1u2r39UlduyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9o1l+8ayfWPZvrFs3/yoKo9l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7VvL9q1l+9ayfWvZvv1RVV7L9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t23ct23ct23ct23ct23d/VJWvZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfuuZfueZfueZfueZfueZfvej6rys2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfs2zfo2xf/yjb992Rqvzdkar83ZGq/N2Rqvzdkar83ZGq/N2Rqvzdkar83bGqTNm+745VZcr2fXesKlO277tjVZmyfd8dq8qU7fvuWFWmbN93x6oyZfu+O1aVKdv33bGqTNm+745VZcr2fXesKlO277tjVZmyfd8dq8qU7fvuWFWmbN93x6oyZfu+O1aVKdv33bGqTNm+745VZcr2fXesKlO277tjVZmyfd8dq8qU7fvuWFWmbN93x6oyZfu+O1aVKdv33bGqTNm+745VZcr2fXesKlO277tjVZmyfd8dq8qU7fvuWFWmbN93x6oyZfu+O1aVKdv33bGqTNm+745VZcr2fXesKlO277tjVZmyfd8dq8qU7fvuWFWmbN93x6oyZfu+O1aVKdv33bGqTNm+745VZcr2fXesKlO277tjVZmyfd8dq8qU7fvuUFUOy/aFZfvCsn1h2b5vte5QVQ7L9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Yti8s2xeW7QvL9oVl+8KyfWHZvrBsX1i2LyzbF5btC8v2hWX7wrJ9Ydm+sGxfWLYvLNsXlu0Ly/aFZfvCsn1h2b6wbF9Ytu9Ytu9Ytu9Ytu9Ytu/8qCofy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/Ydy/alZfvSsn1p2b60bF/+qCqnZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu1Ly/alZfvSsn1p2b60bF9ati8t25eW7UvL9qVl+9KyfWnZvrRsX1q2Ly3bl5btS8v2pWX70rJ9adm+tGxfWrYvLduXlu0ry/aVZfvKsn1l2b76UVUuy/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNtXlu0ry/aVZfvKsn1l2b6ybF9Ztq8s21eW7SvL9pVl+8qyfWXZvrJsX1m2ryzbV5btK8v2lWX7yrJ9Zdm+smxfWbavLNvXlu1ry/a1Zfvasn39o6rclu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7avLdvXlu1ry/a1Zfvasn1t2b62bF9btq8t29eW7WvL9rVl+9qyfW3ZvrZsX1u2ry3b15bta8v2tWX72rJ9bdm+tmxfW7ZvLNs3lu0by/aNZfvmR1V5LNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWLZvLNs3lu0by/aNZfvGsn1j2b6xbN9Ytm8s2zeW7RvL9o1l+8ayfWPZvrFs31i2byzbN5btG8v2jWX7xrJ9Y9m+sWzfWrZvLdu3lu1by/btj6ryWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+tWzfWrZvLdu3lu1by/atZfvWsn1r2b61bN9atm8t27eW7VvL9q1l+9ayfWvZvrVs31q2by3bt5btW8v2rWX71rJ9a9m+a9m+a9m+a9m+a9m++6OqfC3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3bdy3b9yzb9yzb9yzb9yzb935UlZ9l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+55l+x5l++ZH2b7vjlTl745U5e+OVOXvjlTl745U5e+OVOXvjlTl745U5e+OVWXK9n13rCpTtu+7Y1WZsn3fHavKlO377lhVpmzfd8eqMmX7vjtWlSnb992xqkzZvu+OVWXK9n13rCpTtu+7Y1WZsn3fHavKlO377lhVpmzfd8eqMmX7vjtWlSnb992xqkzZvu+OVWXK9n13rCpTtu+7Y1WZsn3fHavKlO377lhVpmzfd8eqMmX7vjtWlSnb992xqkzZvu+OVWXK9n13rCpTtu+7Y1WZsn3fHavKlO377lhVpmzfd8eqMmX7vjtWlSnb992xqkzZvu+OVWXK9n13rCpTtu+7Y1WZsn3fHavKlO377lhVpmzfd8eqMmX7vjtWlSnb992xqkzZ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","file_map":{"3":{"source":"use crate::cmp::{Eq, Ord};\nuse crate::convert::From;\nuse crate::runtime::is_unconstrained;\n\nmod check_shuffle;\nmod quicksort;\n\nimpl [T; N] {\n /// Returns the length of this array.\n ///\n /// ```noir\n /// fn len(self) -> Field\n /// ```\n ///\n /// example\n ///\n /// ```noir\n /// fn main() {\n /// let array = [42, 42];\n /// assert(array.len() == 2);\n /// }\n /// ```\n #[builtin(array_len)]\n pub fn len(self) -> u32 {}\n\n /// Returns this array as a slice.\n ///\n /// ```noir\n /// let array = [1, 2];\n /// let slice = array.as_slice();\n /// assert_eq(slice, &[1, 2]);\n /// ```\n #[builtin(as_slice)]\n pub fn as_slice(self) -> [T] {}\n\n /// Applies a function to each element of this array, returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.map(|a| a * 2);\n /// assert_eq(b, [2, 4, 6]);\n /// ```\n pub fn map(self, f: fn[Env](T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of the array, returning the final accumulated value. The first\n /// parameter is the initial value.\n ///\n /// This is a left fold, so the given function will be applied to the accumulator and first element of\n /// the array, then the second, and so on. For a given call the expected result would be equivalent to:\n ///\n /// ```rust\n /// let a1 = [1];\n /// let a2 = [1, 2];\n /// let a3 = [1, 2, 3];\n ///\n /// let f = |a, b| a - b;\n /// a1.fold(10, f); //=> f(10, 1)\n /// a2.fold(10, f); //=> f(f(10, 1), 2)\n /// a3.fold(10, f); //=> f(f(f(10, 1), 2), 3)\n ///\n /// assert_eq(a3.fold(10, f), 10 - 1 - 2 - 3);\n /// ```\n pub fn fold(self, mut accumulator: U, f: fn[Env](U, T) -> U) -> U {\n for elem in self {\n accumulator = f(accumulator, elem);\n }\n accumulator\n }\n\n /// Same as fold, but uses the first element as the starting element.\n ///\n /// Requires the input array to be non-empty.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [1, 2, 3, 4];\n /// let reduced = arr.reduce(|a, b| a + b);\n /// assert(reduced == 10);\n /// }\n /// ```\n pub fn reduce(self, f: fn[Env](T, T) -> T) -> T {\n let mut accumulator = self[0];\n for i in 1..self.len() {\n accumulator = f(accumulator, self[i]);\n }\n accumulator\n }\n\n /// Returns true if all the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 2];\n /// let all = arr.all(|a| a == 2);\n /// assert(all);\n /// }\n /// ```\n pub fn all(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = true;\n for elem in self {\n ret &= predicate(elem);\n }\n ret\n }\n\n /// Returns true if any of the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 5];\n /// let any = arr.any(|a| a == 5);\n /// assert(any);\n /// }\n /// ```\n pub fn any(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n for elem in self {\n ret |= predicate(elem);\n }\n ret\n }\n}\n\nimpl [T; N]\nwhere\n T: Ord + Eq,\n{\n /// Returns a new sorted array. The original array remains untouched. Notice that this function will\n /// only work for arrays of fields or integers, not for any arbitrary type. This is because the sorting\n /// logic it uses internally is optimized specifically for these values. If you need a sort function to\n /// sort any type, you should use the `sort_via` function.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32];\n /// let sorted = arr.sort();\n /// assert(sorted == [32, 42]);\n /// }\n /// ```\n pub fn sort(self) -> Self {\n self.sort_via(|a, b| a <= b)\n }\n}\n\nimpl [T; N]\nwhere\n T: Eq,\n{\n /// Returns a new sorted array by sorting it with a custom comparison function.\n /// The original array remains untouched.\n /// The ordering function must return true if the first argument should be sorted to be before the second argument or is equal to the second argument.\n ///\n /// Using this method with an operator like `<` that does not return `true` for equal values will result in an assertion failure for arrays with equal elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32]\n /// let sorted_ascending = arr.sort_via(|a, b| a <= b);\n /// assert(sorted_ascending == [32, 42]); // verifies\n ///\n /// let sorted_descending = arr.sort_via(|a, b| a >= b);\n /// assert(sorted_descending == [32, 42]); // does not verify\n /// }\n /// ```\n pub fn sort_via(self, ordering: fn[Env](T, T) -> bool) -> Self {\n // Safety: `sorted` array is checked to be:\n // a. a permutation of `input`'s elements\n // b. satisfying the predicate `ordering`\n unsafe {\n let sorted = quicksort::quicksort(self, ordering);\n\n if !is_unconstrained() {\n for i in 0..N - 1 {\n assert(\n ordering(sorted[i], sorted[i + 1]),\n \"Array has not been sorted correctly according to `ordering`.\",\n );\n }\n check_shuffle::check_shuffle(self, sorted);\n }\n sorted\n }\n }\n}\n\nimpl [u8; N] {\n /// Converts a byte array of type `[u8; N]` to a string. Note that this performs no UTF-8 validation -\n /// the given array is interpreted as-is as a string.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let hi = [104, 105].as_str_unchecked();\n /// assert_eq(hi, \"hi\");\n /// }\n /// ```\n #[builtin(array_as_str_unchecked)]\n pub fn as_str_unchecked(self) -> str {}\n}\n\nimpl From> for [u8; N] {\n /// Returns an array of the string bytes.\n fn from(s: str) -> Self {\n s.as_bytes()\n }\n}\n\nmod test {\n #[test]\n fn map_empty() {\n assert_eq([].map(|x| x + 1), []);\n }\n}\n","path":"std/array/mod.nr"},"18":{"source":"pub mod bn254;\nuse crate::{runtime::is_unconstrained, static_assert};\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n /// Asserts that `self` can be represented in `bit_size` bits.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{bit_size}`.\n // docs:start:assert_max_bit_size\n pub fn assert_max_bit_size(self) {\n // docs:end:assert_max_bit_size\n static_assert(\n BIT_SIZE < modulus_num_bits() as u32,\n \"BIT_SIZE must be less than modulus_num_bits\",\n );\n self.__assert_max_bit_size(BIT_SIZE);\n }\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_le_bits)]\n fn _to_le_bits(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_be_bits)]\n fn _to_be_bits(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_le_bits\n pub fn to_le_bits(self: Self) -> [u1; N] {\n // docs:end:to_le_bits\n let bits = self._to_le_bits();\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[N - 1 - i] != p[N - 1 - i]) {\n assert(p[N - 1 - i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_be_bits\n pub fn to_be_bits(self: Self) -> [u1; N] {\n // docs:end:to_be_bits\n let bits = self._to_be_bits();\n\n if !is_unconstrained() {\n // Ensure that the decomposition does not overflow the modulus\n let p = modulus_be_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[i] != p[i]) {\n assert(p[i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its little endian byte decomposition as a `[u8;N]` array\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_le_bytes\n pub fn to_le_bytes(self: Self) -> [u8; N] {\n // docs:end:to_le_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_le_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[N - 1 - i] != p[N - 1 - i]) {\n assert(bytes[N - 1 - i] < p[N - 1 - i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n /// Decomposes `self` into its big endian byte decomposition as a `[u8;N]` array of length required to represent the field modulus\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_be_bytes\n pub fn to_be_bytes(self: Self) -> [u8; N] {\n // docs:end:to_be_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_be_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_be_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[i] != p[i]) {\n assert(bytes[i] < p[i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n // docs:start:to_le_radix\n pub fn to_le_radix(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n static_assert(1 < radix, \"radix must be greater than 1\");\n static_assert(radix <= 256, \"radix must be less than or equal to 256\");\n static_assert(radix & (radix - 1) == 0, \"radix must be a power of 2\");\n }\n self.__to_le_radix(radix)\n }\n // docs:end:to_le_radix\n\n // docs:start:to_be_radix\n pub fn to_be_radix(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(radix);\n }\n self.__to_be_radix(radix)\n }\n // docs:end:to_be_radix\n\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix(self, radix: u32) -> [u8; N] {}\n\n // `_radix` must be less than 256\n #[builtin(to_be_radix)]\n fn __to_be_radix(self, radix: u32) -> [u8; N] {}\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b: [u1; 32] = exponent.to_le_bits();\n\n for i in 1..33 {\n r *= r;\n r = (b[32 - i] as Field) * (r * self) + (1 - b[32 - i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x `elem` {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n\n /// Convert a little endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_le_bytes(bytes: [u8; N]) -> Field {\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[i] as Field) * v;\n v = v * 256;\n }\n result\n }\n\n /// Convert a big endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_be_bytes(bytes: [u8; N]) -> Field {\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[N - 1 - i] as Field) * v;\n v = v * 256;\n }\n result\n }\n}\n\n#[builtin(modulus_num_bits)]\npub comptime fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub comptime fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub comptime fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub comptime fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub comptime fn modulus_le_bytes() -> [u8] {}\n\n/// An unconstrained only built in to efficiently compare fields.\n#[builtin(field_less_than)]\nunconstrained fn __field_less_than(x: Field, y: Field) -> bool {}\n\npub(crate) unconstrained fn field_less_than(x: Field, y: Field) -> bool {\n __field_less_than(x, y)\n}\n\n// Convert a 32 byte array to a field element by modding\npub fn bytes32_to_field(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (bytes32[15 - i] as Field) * v;\n low = low + (bytes32[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n low + high * v\n}\n\nfn lt_fallback(x: Field, y: Field) -> bool {\n if is_unconstrained() {\n // Safety: unconstrained context\n unsafe {\n field_less_than(x, y)\n }\n } else {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_bytes();\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..32 {\n if (!done) {\n let x_byte = x_bytes[32 - 1 - i] as u8;\n let y_byte = y_bytes[32 - 1 - i] as u8;\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n }\n}\n\nmod tests {\n use crate::{panic::panic, runtime};\n use super::field_less_than;\n\n #[test]\n // docs:start:to_be_bits_example\n fn test_to_be_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_be_bits();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 1, 0]);\n }\n // docs:end:to_be_bits_example\n\n #[test]\n // docs:start:to_le_bits_example\n fn test_to_le_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_le_bits();\n assert_eq(bits, [0, 1, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bits_example\n\n #[test]\n // docs:start:to_be_bytes_example\n fn test_to_be_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_be_bytes();\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 0, 2]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_bytes_example\n\n #[test]\n // docs:start:to_le_bytes_example\n fn test_to_le_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_le_bytes();\n assert_eq(bytes, [2, 0, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_bytes_example\n\n #[test]\n // docs:start:to_be_radix_example\n fn test_to_be_radix() {\n // 259, in base 256, big endian, is [1, 3].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_be_radix(256);\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 1, 3]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_radix_example\n\n #[test]\n // docs:start:to_le_radix_example\n fn test_to_le_radix() {\n // 259, in base 256, little endian, is [3, 1].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_le_radix(256);\n assert_eq(bytes, [3, 1, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_radix_example\n\n #[test(should_fail_with = \"radix must be greater than 1\")]\n fn test_to_le_radix_1() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(1);\n } else {\n panic(f\"radix must be greater than 1\");\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be greater than 2\n //#[test]\n //fn test_to_le_radix_brillig_1() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(1);\n // crate::println(out);\n // let expected = [0; 8];\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test(should_fail_with = \"radix must be a power of 2\")]\n fn test_to_le_radix_3() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(3);\n } else {\n panic(f\"radix must be a power of 2\");\n }\n }\n\n #[test]\n fn test_to_le_radix_brillig_3() {\n // this test should only fail in constrained mode\n if runtime::is_unconstrained() {\n let field = 1;\n let out: [u8; 8] = field.to_le_radix(3);\n let mut expected = [0; 8];\n expected[0] = 1;\n assert(out == expected, \"unexpected result\");\n }\n }\n\n #[test(should_fail_with = \"radix must be less than or equal to 256\")]\n fn test_to_le_radix_512() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(512);\n } else {\n panic(f\"radix must be less than or equal to 256\")\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be less than 512\n //#[test]\n //fn test_to_le_radix_brillig_512() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(512);\n // let mut expected = [0; 8];\n // expected[0] = 1;\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test]\n unconstrained fn test_field_less_than() {\n assert(field_less_than(0, 1));\n assert(field_less_than(0, 0x100));\n assert(field_less_than(0x100, 0 - 1));\n assert(!field_less_than(0 - 1, 0));\n }\n}\n","path":"std/field/mod.nr"},"61":{"source":"use greco::constants::{L, N};\nuse greco::crypto::pk_encryption::BfvPkEncryptionCircuit;\nuse greco::math::polynomial::Polynomial;\n\nfn main(\n pk0is: [Polynomial; L],\n pk1is: [Polynomial; L],\n ct0is: [Polynomial; L],\n ct1is: [Polynomial; L],\n u: Polynomial,\n e0: Polynomial,\n e1: Polynomial,\n k1: Polynomial,\n r1is: [Polynomial<(2 * N) - 1>; L],\n r2is: [Polynomial; L],\n p1is: [Polynomial<(2 * N) - 1>; L],\n p2is: [Polynomial; L],\n) {\n let circuit = BfvPkEncryptionCircuit::new(\n pk0is,\n pk1is,\n ct0is,\n ct1is,\n u,\n e0,\n e1,\n k1,\n r1is,\n r2is,\n p1is,\n p2is,\n );\n circuit.correct_encryption();\n}\n","path":"/Users/giacomo/Documents/projects/work/enclave/examples/CRISP/circuits/src/main.nr"},"64":{"source":"use crate::constants::{\n E_BOUND, K0IS, K1_LOW_BOUND, K1_UP_BOUND, L, N, P1_BOUNDS, P2_BOUNDS, PK_BOUND, Q_MOD_T, QIS,\n R1_LOW_BOUNDS, R1_UP_BOUNDS, R2_BOUNDS, SIZE, TAG, U_BOUND,\n};\nuse crate::math::polynomial::Polynomial;\nuse safe::safe::SafeSponge;\n\n/// BfvPkEncryption circuit structure\npub struct BfvPkEncryptionCircuit {\n pk0is: [Polynomial; L],\n pk1is: [Polynomial; L],\n ct0is: [Polynomial; L],\n ct1is: [Polynomial; L],\n u: Polynomial,\n e0: Polynomial,\n e1: Polynomial,\n k1: Polynomial,\n r1is: [Polynomial<(2 * N) - 1>; L],\n r2is: [Polynomial; L],\n p1is: [Polynomial<(2 * N) - 1>; L],\n p2is: [Polynomial; L],\n}\n\nimpl BfvPkEncryptionCircuit {\n /// Creates a new circuit\n pub fn new(\n pk0is: [Polynomial; L],\n pk1is: [Polynomial; L],\n ct0is: [Polynomial; L],\n ct1is: [Polynomial; L],\n u: Polynomial,\n e0: Polynomial,\n e1: Polynomial,\n k1: Polynomial,\n r1is: [Polynomial<2 * N - 1>; L],\n r2is: [Polynomial; L],\n p1is: [Polynomial<2 * N - 1>; L],\n p2is: [Polynomial; L],\n ) -> BfvPkEncryptionCircuit {\n BfvPkEncryptionCircuit { pk0is, pk1is, ct0is, ct1is, u, e0, e1, k1, r1is, r2is, p1is, p2is }\n }\n\n /// Assigns all the witness polynomial coefficients to an array\n fn payload(self) -> [Field; SIZE] {\n let mut inputs = [0; SIZE];\n let mut offset = 0;\n\n let (inputs, offset) = flatten(inputs, self.pk0is, offset);\n let (inputs, offset) = flatten(inputs, self.pk1is, offset);\n let (inputs, offset) = flatten(inputs, self.ct0is, offset);\n let (inputs, offset) = flatten(inputs, self.ct1is, offset);\n let (inputs, offset) = flatten(inputs, [self.e0], offset);\n let (inputs, offset) = flatten(inputs, [self.e1], offset);\n let (inputs, offset) = flatten(inputs, [self.u], offset);\n let (inputs, offset) = flatten(inputs, [self.k1], offset);\n let (inputs, offset) = flatten(inputs, self.r1is, offset);\n let (inputs, offset) = flatten(inputs, self.r2is, offset);\n let (inputs, offset) = flatten(inputs, self.p1is, offset);\n let (inputs, _) = flatten(inputs, self.p2is, offset);\n\n inputs\n }\n\n pub fn correct_encryption(self) {\n // Binary check\n\n assert(0 == self.k1.coefficients[N - 1] * (Q_MOD_T - self.k1.coefficients[N - 1]));\n\n // Bound check\n self.u.range_check_1bound(U_BOUND);\n self.e0.range_check_1bound(E_BOUND);\n self.e1.range_check_1bound(E_BOUND);\n self.k1.range_check_2bounds(K1_UP_BOUND, K1_LOW_BOUND);\n\n for i in 0..L {\n self.pk0is[i].range_check_1bound(PK_BOUND[i]);\n self.pk1is[i].range_check_1bound(PK_BOUND[i]);\n self.r1is[i].range_check_2bounds(R1_UP_BOUNDS[i], R1_LOW_BOUNDS[i]);\n self.r2is[i].range_check_1bound(R2_BOUNDS[i]);\n self.p1is[i].range_check_1bound(P1_BOUNDS[i]);\n self.p2is[i].range_check_1bound(P2_BOUNDS[i]);\n }\n\n // We assign all the coefficients to an array to generate challenge values\n let inputs = self.payload();\n let mut safe = SafeSponge::<_, _, TAG>::start([SIZE, 2 * L]);\n safe = safe.absorb(inputs);\n let gammas = safe.squeeze();\n\n // CORRECT ENCRYPTION CONSTRAINT\n // For each `i` Prove that LHS(gamma) = RHS(gamma)\n // pk0_u = pk0is(gamma) * u(gamma) + e0(gamma)\n // LHS = ct0i(gamma)\n // RHS = pk0_u + k1(gamma) * k0i + r1i(gamma) * qi + r2i(gamma) * cyclo(gamma)\n for i in 0..L {\n let gamma = gammas.get(i);\n\n // cyclo poly is equal to x^N + 1\n let cyclo_at_gamma = gamma.pow_32(N as Field) + 1;\n\n // Gamma evaluation\n let u_at_gamma = self.u.eval(gamma);\n let e0_at_gamma = self.e0.eval(gamma);\n let k1_at_gamma = self.k1.eval(gamma);\n let pk0is_at_gamma = self.pk0is.map(|pk| pk.eval(gamma));\n let r1i_at_gamma = self.r1is.map(|r1| r1.eval(gamma));\n let r2i_at_gamma = self.r2is.map(|r2| r2.eval(gamma));\n\n // First step\n let pk0_u = (pk0is_at_gamma[i] * u_at_gamma) + e0_at_gamma;\n\n // rhs = pk0_u + k1(gamma) * k0i\n let rhs = pk0_u + (k1_at_gamma * K0IS[i]);\n\n // rhs = rhs + r1i(gamma) * qi\n let rhs = rhs + (r1i_at_gamma[i] * QIS[i]);\n\n // rhs = rhs + r2i(gamma) * cyclo(gamma)\n let rhs = rhs + r2i_at_gamma[i] * cyclo_at_gamma;\n let lhs = self.ct0is[i].eval(gamma);\n\n // LHS(gamma) = RHS(gamma)\n assert_eq(lhs, rhs);\n\n // Gamma evaluation\n let gamma = gammas.get(i + L);\n\n // cyclo poly is equal to x^N + 1\n let cyclo_at_gamma = gamma.pow_32(N as Field) + 1;\n\n let u_at_gamma = self.u.eval(gamma);\n let e1_at_gamma = self.e1.eval(gamma);\n let pk1is_at_gamma = self.pk1is.map(|pk| pk.eval(gamma));\n let p1is_at_gamma = self.p1is.map(|p1| p1.eval(gamma));\n let p2is_at_gamma = self.p2is.map(|p2| p2.eval(gamma));\n\n // Second step\n let pk1_u = (pk1is_at_gamma[i] * u_at_gamma) + e1_at_gamma;\n\n //rhs = pk1_u + p2i * cyclo(gamma)\n let rhs = pk1_u + p2is_at_gamma[i] * cyclo_at_gamma;\n\n //rhs = rhs + p1s * qi\n let rhs = rhs + (p1is_at_gamma[i] * QIS[i]);\n let lhs = self.ct1is[i].eval(gamma);\n\n // LHS(gamma) = RHS(gamma)\n assert_eq(lhs, rhs);\n }\n safe.finish();\n }\n}\n\n/// Flattens an array of polynomials into a 1D array of Field elements.\n///\n/// # Generic Parameters\n/// * `A` - The size of each polynomial in the array\n/// * `L` - The number of polynomials in the array\n///\n/// # Arguments\n/// * `inputs` - The target array to store flattened coefficients\n/// * `poly` - Array of polynomials to flatten\n/// * `offset` - Starting position in the inputs array\n///\n/// # Returns\n/// A tuple containing:\n/// * The updated inputs array with flattened coefficients\n/// * The new offset position\n/// ```\nfn flatten(\n mut inputs: [Field; SIZE],\n poly: [Polynomial; L],\n mut offset: u32,\n) -> ([Field; SIZE], u32) {\n for j in 0..L {\n for i in 0..A {\n inputs[i + offset] = poly[j].coefficients[i];\n }\n offset += A;\n }\n\n (inputs, offset)\n}\n","path":"/Users/giacomo/nargo/github.com/gnosisguild/greco/v0.1.0/circuits/src/crypto/pk_encryption.nr"},"67":{"source":"/// Polynomial structure\npub struct Polynomial {\n // Coefficients of the polynomial (Biggest degree at the first index)\n pub coefficients: [Field; N],\n}\n\nimpl Polynomial {\n /// Creates a new polynomial\n pub fn new(coefficients: [Field; N]) -> Self {\n Polynomial { coefficients }\n }\n\n /// Evaluate a polynomial at a point in the field.\n pub fn eval(self, x: Field) -> Field {\n let mut acc = self.coefficients[0];\n for i in 1..self.coefficients.len() {\n acc = acc * x + self.coefficients[i];\n }\n acc\n }\n\n /// Adds `upper_bound` to the coefficients of the polynomial and constrains them to be in the range `[0, 2 * upper_bound]`.\n pub fn range_check_1bound(self, upper_bound: u64) {\n let comp_value = (2 * upper_bound) as Field;\n for i in 0..self.coefficients.len() {\n let shifted_coeff = self.coefficients[i] + upper_bound as Field;\n shifted_coeff.assert_max_bit_size::<66>();\n (comp_value - shifted_coeff).assert_max_bit_size::<66>();\n }\n }\n\n /// Adds `-lower_bound` to the coefficients of the polynomial and constrains them to be in the range `[0, upper_bound - lower_bound]`.\n pub fn range_check_2bounds(self, upper_bound: u64, lower_bound: i64) {\n let mut value_shift = (lower_bound * -1) as Field;\n let comp_value = value_shift + upper_bound as Field;\n for i in 0..self.coefficients.len() {\n let shifted_coeff = self.coefficients[i] + value_shift;\n shifted_coeff.assert_max_bit_size::<66>();\n (comp_value - shifted_coeff).assert_max_bit_size::<66>();\n }\n }\n}\n\n#[test]\nfn test_polynomial_eval() {\n let coeffs = [1, 2, 3]; // represents 1x^2 + 2x + 3\n let poly = Polynomial::new(coeffs);\n\n let x = 2; // evaluate at x = 2\n let result = poly.eval(x);\n // (1 * 2^2) + (2 * 2) + 3 = 4 + 4 + 3 = 11\n assert_eq(result, 11);\n}\n\n#[test]\nfn test_polynomial_bounds() {\n let coeffs = [-16, 240, 242];\n let poly = Polynomial::new(coeffs);\n\n // Test single bound check\n poly.range_check_1bound(242);\n\n // Test double bounds check\n poly.range_check_2bounds(242, -16);\n}\n\n#[test]\nfn test_polynomial_eval_zero() {\n let coeffs = [1, -2, 1]; // x^2 - 2x + 1 = (x-1)^2\n let poly = Polynomial::new(coeffs);\n\n let x = 1; // evaluate at x = 1, should be 0\n let result = poly.eval(x);\n assert_eq(result, 0);\n}\n\n#[test]\nfn test_polynomial_eval_large() {\n let coeffs = [1000000, -500000, 250000]; // large coefficients\n let poly = Polynomial::new(coeffs);\n\n let x = 2;\n let result = poly.eval(x);\n // 1000000*2^2 - 500000*2 + 250000 = 4000000 - 1000000 + 250000 = 3250000\n assert_eq(result, 3250000);\n}\n","path":"/Users/giacomo/nargo/github.com/gnosisguild/greco/v0.1.0/circuits/src/math/polynomial.nr"},"77":{"source":"use poseidon::poseidon2_permutation;\n\nglobal RATE: u32 = 3;\nglobal CAPACITY: u32 = 1;\nglobal WIDTH: u32 = 4;\n\npub struct SafeSponge {\n state: [Field; WIDTH],\n out: Vec,\n absorb_pos: u32,\n squeeze_pos: u32,\n io_pattern: [u32; L],\n io_count: u32,\n}\n\nimpl SafeSponge {\n pub fn start(pattern: [u32; L]) -> SafeSponge {\n let mut sponge = SafeSponge:: {\n state: [0; WIDTH],\n out: Vec::new(),\n absorb_pos: 0,\n squeeze_pos: 0,\n io_pattern: pattern,\n io_count: 0,\n };\n sponge.state[0] = TAG;\n sponge\n }\n\n pub fn absorb(mut self, input: [Field; S]) -> SafeSponge {\n assert(self.io_pattern[self.io_count] as u32 == S);\n\n for i in 0..self.io_pattern[self.io_count] {\n if self.absorb_pos == RATE {\n self.state = poseidon2_permutation(self.state, self.state.len());\n self.absorb_pos = 0;\n }\n let pos = self.absorb_pos + CAPACITY;\n self.state[pos] = self.state[pos] + input[i];\n self.absorb_pos += 1;\n }\n self.io_count += 1;\n self.squeeze_pos = RATE;\n self\n }\n\n pub fn squeeze(mut self) -> Vec {\n for _ in 0..self.io_pattern[self.io_count] {\n if self.squeeze_pos == RATE {\n self.state = poseidon2_permutation(self.state, self.state.len());\n self.squeeze_pos = 0;\n self.absorb_pos = 0;\n }\n self.out.push(self.state[self.squeeze_pos + CAPACITY]);\n self.squeeze_pos += 1;\n }\n self.io_count += 1;\n self.out\n }\n\n pub fn finish(mut self) {\n // Clear the state\n self.state = [0; WIDTH];\n self.out = Vec::new();\n self.io_count = 0;\n self.io_pattern = [0; L];\n self.squeeze_pos = 0;\n self.absorb_pos = 0;\n }\n}\n\n#[test]\nfn test_safe_sponge() {\n let pattern = [5, 4];\n let mut safe = SafeSponge::<_, _, 14699256703807541932168660170536>::start(pattern);\n safe = safe.absorb([1, 2, 3, 4, 5]);\n\n let result = safe.squeeze();\n\n assert(result.len() == 4);\n assert(result.get(0) == 0x2ab2e2868c2490af2e13c32a0ba0852fe8d6b0979baa5831134e59029de898ab);\n assert(result.get(1) == 0x49eacd210d0bd4ae8609da50602d3144fca0ad09b77fbf3d7186068ffd374c);\n assert(result.get(2) == 0x16e39eccdecf20ef20ab765865573ffa55ad04b6e3dc44eaa2ee9a764e5f7159);\n assert(result.get(3) == 0x218adb7f25e9d014affbc444372dedcfbe9767fbf41c25412bd5bf99200be37f);\n\n safe.finish();\n}\n\n#[test]\nfn test_safe_sponge_multiple_absorb() {\n let pattern = [3, 2];\n let mut safe = SafeSponge::<_, _, 14699256703807541932168660170536>::start(pattern);\n safe = safe.absorb([1, 2, 3]);\n let result = safe.squeeze();\n\n assert(result.len() == 2);\n assert(result.get(0) == 0x0b6756778988e5a5f2127f26baf7b2056dcd9e26b7eff2716d47f3e8c4a9c38e);\n assert(result.get(1) == 0x20bd726a0eed7e98a62845891b62bee66ceab93fc41829acfef50a29e63fae0b);\n\n safe.finish();\n}\n","path":"/Users/giacomo/nargo/github.com/gnosisguild/safe-api/v0.1.0/src/safe.nr"}},"names":["main"],"brillig_names":[]} \ No newline at end of file diff --git a/examples/CRISP/apps/client/libs/wasm/pkg/crisp_wasm_crypto.d.ts b/examples/CRISP/apps/client/libs/wasm/pkg/crisp_wasm_crypto.d.ts index 31c6568484..183c053bf4 100644 --- a/examples/CRISP/apps/client/libs/wasm/pkg/crisp_wasm_crypto.d.ts +++ b/examples/CRISP/apps/client/libs/wasm/pkg/crisp_wasm_crypto.d.ts @@ -1,91 +1,78 @@ /* tslint:disable */ /* eslint-disable */ +export function __wbgtest_cov_dump(): Uint8Array | undefined; /** -* Handler for `console.log` invocations. -* -* If a test is currently running it takes the `args` array and stringifies -* it and appends it to the current output of the test. Otherwise it passes -* the arguments to the original `console.log` function, psased as -* `original`. -* @param {Array} args -*/ + * Handler for `console.log` invocations. + * + * If a test is currently running it takes the `args` array and stringifies + * it and appends it to the current output of the test. Otherwise it passes + * the arguments to the original `console.log` function, psased as + * `original`. + */ export function __wbgtest_console_log(args: Array): void; /** -* Handler for `console.debug` invocations. See above. -* @param {Array} args -*/ + * Handler for `console.debug` invocations. See above. + */ export function __wbgtest_console_debug(args: Array): void; /** -* Handler for `console.info` invocations. See above. -* @param {Array} args -*/ + * Handler for `console.info` invocations. See above. + */ export function __wbgtest_console_info(args: Array): void; /** -* Handler for `console.warn` invocations. See above. -* @param {Array} args -*/ + * Handler for `console.warn` invocations. See above. + */ export function __wbgtest_console_warn(args: Array): void; /** -* Handler for `console.error` invocations. See above. -* @param {Array} args -*/ + * Handler for `console.error` invocations. See above. + */ export function __wbgtest_console_error(args: Array): void; -/** -* @returns {Uint8Array | undefined} -*/ -export function __wbgtest_cov_dump(): Uint8Array | undefined; -/** -*/ export class Encrypt { free(): void; -/** -*/ constructor(); -/** -* @param {bigint} vote -* @param {Uint8Array} public_key -* @returns {Uint8Array} -*/ - encrypt_vote(vote: bigint, public_key: Uint8Array): Uint8Array; -/** -*/ + encrypt_vote(vote: bigint, public_key: Uint8Array): EncryptedVote; static test(): void; } +export class EncryptedVote { + private constructor(); + free(): void; + readonly encrypted_vote: Uint8Array; + readonly circuit_inputs: string; +} /** -* Runtime test harness support instantiated in JS. -* -* The node.js entry script instantiates a `Context` here which is used to -* drive test execution. -*/ + * Runtime test harness support instantiated in JS. + * + * The node.js entry script instantiates a `Context` here which is used to + * drive test execution. + */ export class WasmBindgenTestContext { free(): void; -/** -* Creates a new context ready to run tests. -* -* A `Context` is the main structure through which test execution is -* coordinated, and this will collect output and results for all executed -* tests. -*/ + /** + * Creates a new context ready to run tests. + * + * A `Context` is the main structure through which test execution is + * coordinated, and this will collect output and results for all executed + * tests. + */ constructor(); -/** -* Inform this context about runtime arguments passed to the test -* harness. -* @param {any[]} args -*/ - args(args: any[]): void; -/** -* Executes a list of tests, returning a promise representing their -* eventual completion. -* -* This is the main entry point for executing tests. All the tests passed -* in are the JS `Function` object that was plucked off the -* `WebAssembly.Instance` exports list. -* -* The promise returned resolves to either `true` if all tests passed or -* `false` if at least one test failed. -* @param {any[]} tests -* @returns {Promise} -*/ + /** + * Handle `--include-ignored` flag. + */ + include_ignored(include_ignored: boolean): void; + /** + * Handle filter argument. + */ + filtered_count(filtered: number): void; + /** + * Executes a list of tests, returning a promise representing their + * eventual completion. + * + * This is the main entry point for executing tests. All the tests passed + * in are the JS `Function` object that was plucked off the + * `WebAssembly.Instance` exports list. + * + * The promise returned resolves to either `true` if all tests passed or + * `false` if at least one test failed. + */ run(tests: any[]): Promise; } @@ -94,30 +81,35 @@ export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembl export interface InitOutput { readonly memory: WebAssembly.Memory; readonly __wbg_encrypt_free: (a: number, b: number) => void; + readonly __wbg_encryptedvote_free: (a: number, b: number) => void; + readonly encryptedvote_encrypted_vote: (a: number) => [number, number]; + readonly encryptedvote_circuit_inputs: (a: number) => [number, number]; readonly encrypt_new: () => number; - readonly encrypt_encrypt_vote: (a: number, b: number, c: number, d: number, e: number) => void; - readonly __wbgt_test_encrypt_vote_0: (a: number) => void; + readonly encrypt_encrypt_vote: (a: number, b: bigint, c: number, d: number) => [number, number, number]; readonly encrypt_test: () => void; readonly __wbg_wasmbindgentestcontext_free: (a: number, b: number) => void; readonly wasmbindgentestcontext_new: () => number; - readonly wasmbindgentestcontext_args: (a: number, b: number, c: number) => void; - readonly wasmbindgentestcontext_run: (a: number, b: number, c: number) => number; - readonly __wbgtest_console_log: (a: number) => void; - readonly __wbgtest_console_debug: (a: number) => void; - readonly __wbgtest_console_info: (a: number) => void; - readonly __wbgtest_console_warn: (a: number) => void; - readonly __wbgtest_console_error: (a: number) => void; - readonly __wbgtest_cov_dump: (a: number) => void; + readonly wasmbindgentestcontext_include_ignored: (a: number, b: number) => void; + readonly wasmbindgentestcontext_filtered_count: (a: number, b: number) => void; + readonly wasmbindgentestcontext_run: (a: number, b: number, c: number) => any; + readonly __wbgtest_console_log: (a: any) => void; + readonly __wbgtest_console_debug: (a: any) => void; + readonly __wbgtest_console_info: (a: any) => void; + readonly __wbgtest_console_warn: (a: any) => void; + readonly __wbgtest_console_error: (a: any) => void; + readonly __wbgtest_cov_dump: () => [number, number]; + readonly __externref_table_alloc: () => number; + readonly __wbindgen_export_1: WebAssembly.Table; readonly __wbindgen_malloc: (a: number, b: number) => number; readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number; - readonly __wbindgen_export_2: WebAssembly.Table; - readonly _dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h1d8c1928bfa3ee85: (a: number, b: number, c: number) => void; - readonly __wbindgen_add_to_stack_pointer: (a: number) => number; - readonly __wbindgen_free: (a: number, b: number, c: number) => void; - readonly wasm_bindgen__convert__closures__invoke0_mut__h39c761bb9a2bf959: (a: number, b: number) => void; readonly __wbindgen_exn_store: (a: number) => void; - readonly wasm_bindgen__convert__closures__invoke3_mut__h4031e454ad97d11c: (a: number, b: number, c: number, d: number, e: number) => void; - readonly wasm_bindgen__convert__closures__invoke2_mut__hc0d7ba91596f2e65: (a: number, b: number, c: number, d: number) => void; + readonly __wbindgen_export_5: WebAssembly.Table; + readonly __wbindgen_free: (a: number, b: number, c: number) => void; + readonly __externref_table_dealloc: (a: number) => void; + readonly closure335_externref_shim: (a: number, b: number, c: any) => void; + readonly closure257_externref_shim: (a: number, b: number, c: any, d: number, e: any) => void; + readonly closure261_externref_shim: (a: number, b: number, c: any, d: any) => void; + readonly __wbindgen_start: () => void; } export type SyncInitInput = BufferSource | WebAssembly.Module; diff --git a/examples/CRISP/apps/client/libs/wasm/pkg/crisp_wasm_crypto.js b/examples/CRISP/apps/client/libs/wasm/pkg/crisp_wasm_crypto.js index 2b1a912863..193ea1f79f 100644 --- a/examples/CRISP/apps/client/libs/wasm/pkg/crisp_wasm_crypto.js +++ b/examples/CRISP/apps/client/libs/wasm/pkg/crisp_wasm_crypto.js @@ -1,28 +1,16 @@ let wasm; -const heap = new Array(128).fill(undefined); - -heap.push(undefined, null, true, false); - -function getObject(idx) { return heap[idx]; } - -let heap_next = heap.length; - -function dropObject(idx) { - if (idx < 132) return; - heap[idx] = heap_next; - heap_next = idx; +function isLikeNone(x) { + return x === undefined || x === null; } -function takeObject(idx) { - const ret = getObject(idx); - dropObject(idx); - return ret; +function addToExternrefTable0(obj) { + const idx = wasm.__externref_table_alloc(); + wasm.__wbindgen_export_1.set(idx, obj); + return idx; } -const cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } ); - -if (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); }; +let WASM_VECTOR_LEN = 0; let cachedUint8ArrayMemory0 = null; @@ -33,22 +21,6 @@ function getUint8ArrayMemory0() { return cachedUint8ArrayMemory0; } -function getStringFromWasm0(ptr, len) { - ptr = ptr >>> 0; - return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); -} - -function addHeapObject(obj) { - if (heap_next === heap.length) heap.push(heap.length + 1); - const idx = heap_next; - heap_next = heap[idx]; - - heap[idx] = obj; - return idx; -} - -let WASM_VECTOR_LEN = 0; - const cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } ); const encodeString = (typeof cachedTextEncoder.encodeInto === 'function' @@ -103,10 +75,6 @@ function passStringToWasm0(arg, malloc, realloc) { return ptr; } -function isLikeNone(x) { - return x === undefined || x === null; -} - let cachedDataViewMemory0 = null; function getDataViewMemory0() { @@ -116,75 +84,28 @@ function getDataViewMemory0() { return cachedDataViewMemory0; } -function debugString(val) { - // primitive types - const type = typeof val; - if (type == 'number' || type == 'boolean' || val == null) { - return `${val}`; - } - if (type == 'string') { - return `"${val}"`; - } - if (type == 'symbol') { - const description = val.description; - if (description == null) { - return 'Symbol'; - } else { - return `Symbol(${description})`; - } - } - if (type == 'function') { - const name = val.name; - if (typeof name == 'string' && name.length > 0) { - return `Function(${name})`; - } else { - return 'Function'; - } - } - // objects - if (Array.isArray(val)) { - const length = val.length; - let debug = '['; - if (length > 0) { - debug += debugString(val[0]); - } - for(let i = 1; i < length; i++) { - debug += ', ' + debugString(val[i]); - } - debug += ']'; - return debug; - } - // Test for built-in - const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val)); - let className; - if (builtInMatches.length > 1) { - className = builtInMatches[1]; - } else { - // Failed to match the standard '[object ClassName]' - return toString.call(val); - } - if (className == 'Object') { - // we're a user defined class or Object - // JSON.stringify avoids problems with cycles, and is generally much - // easier than looping through ownProperties of `val`. - try { - return 'Object(' + JSON.stringify(val) + ')'; - } catch (_) { - return 'Object'; - } - } - // errors - if (val instanceof Error) { - return `${val.name}: ${val.message}\n${val.stack}`; +function handleError(f, args) { + try { + return f.apply(this, args); + } catch (e) { + const idx = addToExternrefTable0(e); + wasm.__wbindgen_exn_store(idx); } - // TODO we could test for more things here, like `Set`s and `Map`s. - return className; +} + +const cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } ); + +if (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); }; + +function getStringFromWasm0(ptr, len) { + ptr = ptr >>> 0; + return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); } const CLOSURE_DTORS = (typeof FinalizationRegistry === 'undefined') ? { register: () => {}, unregister: () => {} } : new FinalizationRegistry(state => { - wasm.__wbindgen_export_2.get(state.dtor)(state.a, state.b) + wasm.__wbindgen_export_5.get(state.dtor)(state.a, state.b) }); function makeMutClosure(arg0, arg1, dtor, f) { @@ -200,7 +121,7 @@ function makeMutClosure(arg0, arg1, dtor, f) { return f(a, state.b, ...args); } finally { if (--state.cnt === 0) { - wasm.__wbindgen_export_2.get(state.dtor)(a, state.b); + wasm.__wbindgen_export_5.get(state.dtor)(a, state.b); CLOSURE_DTORS.unregister(state); } else { state.a = a; @@ -211,8 +132,10 @@ function makeMutClosure(arg0, arg1, dtor, f) { CLOSURE_DTORS.register(real, state, state); return real; } -function __wbg_adapter_28(arg0, arg1, arg2) { - wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h1d8c1928bfa3ee85(arg0, arg1, addHeapObject(arg2)); + +function getArrayU8FromWasm0(ptr, len) { + ptr = ptr >>> 0; + return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len); } function passArray8ToWasm0(arg, malloc) { @@ -222,137 +145,94 @@ function passArray8ToWasm0(arg, malloc) { return ptr; } -function getArrayU8FromWasm0(ptr, len) { - ptr = ptr >>> 0; - return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len); +function takeFromExternrefTable0(idx) { + const value = wasm.__wbindgen_export_1.get(idx); + wasm.__externref_table_dealloc(idx); + return value; +} +/** + * @returns {Uint8Array | undefined} + */ +export function __wbgtest_cov_dump() { + const ret = wasm.__wbgtest_cov_dump(); + let v1; + if (ret[0] !== 0) { + v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + } + return v1; } function passArrayJsValueToWasm0(array, malloc) { const ptr = malloc(array.length * 4, 4) >>> 0; - const mem = getDataViewMemory0(); for (let i = 0; i < array.length; i++) { - mem.setUint32(ptr + 4 * i, addHeapObject(array[i]), true); + const add = addToExternrefTable0(array[i]); + getDataViewMemory0().setUint32(ptr + 4 * i, add, true); } WASM_VECTOR_LEN = array.length; return ptr; } - -let stack_pointer = 128; - -function addBorrowedObject(obj) { - if (stack_pointer == 1) throw new Error('out of js stack'); - heap[--stack_pointer] = obj; - return stack_pointer; -} /** -* Handler for `console.log` invocations. -* -* If a test is currently running it takes the `args` array and stringifies -* it and appends it to the current output of the test. Otherwise it passes -* the arguments to the original `console.log` function, psased as -* `original`. -* @param {Array} args -*/ + * Handler for `console.log` invocations. + * + * If a test is currently running it takes the `args` array and stringifies + * it and appends it to the current output of the test. Otherwise it passes + * the arguments to the original `console.log` function, psased as + * `original`. + * @param {Array} args + */ export function __wbgtest_console_log(args) { - try { - wasm.__wbgtest_console_log(addBorrowedObject(args)); - } finally { - heap[stack_pointer++] = undefined; - } + wasm.__wbgtest_console_log(args); } /** -* Handler for `console.debug` invocations. See above. -* @param {Array} args -*/ + * Handler for `console.debug` invocations. See above. + * @param {Array} args + */ export function __wbgtest_console_debug(args) { - try { - wasm.__wbgtest_console_debug(addBorrowedObject(args)); - } finally { - heap[stack_pointer++] = undefined; - } + wasm.__wbgtest_console_debug(args); } /** -* Handler for `console.info` invocations. See above. -* @param {Array} args -*/ + * Handler for `console.info` invocations. See above. + * @param {Array} args + */ export function __wbgtest_console_info(args) { - try { - wasm.__wbgtest_console_info(addBorrowedObject(args)); - } finally { - heap[stack_pointer++] = undefined; - } + wasm.__wbgtest_console_info(args); } /** -* Handler for `console.warn` invocations. See above. -* @param {Array} args -*/ + * Handler for `console.warn` invocations. See above. + * @param {Array} args + */ export function __wbgtest_console_warn(args) { - try { - wasm.__wbgtest_console_warn(addBorrowedObject(args)); - } finally { - heap[stack_pointer++] = undefined; - } + wasm.__wbgtest_console_warn(args); } /** -* Handler for `console.error` invocations. See above. -* @param {Array} args -*/ + * Handler for `console.error` invocations. See above. + * @param {Array} args + */ export function __wbgtest_console_error(args) { - try { - wasm.__wbgtest_console_error(addBorrowedObject(args)); - } finally { - heap[stack_pointer++] = undefined; - } -} - -function __wbg_adapter_44(arg0, arg1) { - wasm.wasm_bindgen__convert__closures__invoke0_mut__h39c761bb9a2bf959(arg0, arg1); + wasm.__wbgtest_console_error(args); } -function handleError(f, args) { - try { - return f.apply(this, args); - } catch (e) { - wasm.__wbindgen_exn_store(addHeapObject(e)); - } -} -/** -* @returns {Uint8Array | undefined} -*/ -export function __wbgtest_cov_dump() { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.__wbgtest_cov_dump(retptr); - var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); - var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); - let v1; - if (r0 !== 0) { - v1 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1, 1); - } - return v1; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } +function __wbg_adapter_28(arg0, arg1, arg2) { + wasm.closure335_externref_shim(arg0, arg1, arg2); } -function __wbg_adapter_108(arg0, arg1, arg2, arg3, arg4) { - wasm.wasm_bindgen__convert__closures__invoke3_mut__h4031e454ad97d11c(arg0, arg1, addHeapObject(arg2), arg3, addHeapObject(arg4)); +function __wbg_adapter_52(arg0, arg1, arg2, arg3, arg4) { + wasm.closure257_externref_shim(arg0, arg1, arg2, arg3, arg4); } -function __wbg_adapter_121(arg0, arg1, arg2, arg3) { - wasm.wasm_bindgen__convert__closures__invoke2_mut__hc0d7ba91596f2e65(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3)); +function __wbg_adapter_65(arg0, arg1, arg2, arg3) { + wasm.closure261_externref_shim(arg0, arg1, arg2, arg3); } const EncryptFinalization = (typeof FinalizationRegistry === 'undefined') ? { register: () => {}, unregister: () => {} } : new FinalizationRegistry(ptr => wasm.__wbg_encrypt_free(ptr >>> 0, 1)); -/** -*/ + export class Encrypt { __destroy_into_raw() { @@ -366,8 +246,6 @@ export class Encrypt { const ptr = this.__destroy_into_raw(); wasm.__wbg_encrypt_free(ptr, 0); } - /** - */ constructor() { const ret = wasm.encrypt_new(); this.__wbg_ptr = ret >>> 0; @@ -375,46 +253,84 @@ export class Encrypt { return this; } /** - * @param {bigint} vote - * @param {Uint8Array} public_key - * @returns {Uint8Array} - */ + * @param {bigint} vote + * @param {Uint8Array} public_key + * @returns {EncryptedVote} + */ encrypt_vote(vote, public_key) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passArray8ToWasm0(public_key, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - wasm.encrypt_encrypt_vote(retptr, this.__wbg_ptr, vote, ptr0, len0); - var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); - var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); - var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true); - var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true); - if (r3) { - throw takeObject(r2); - } - var v2 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1, 1); - return v2; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); + const ptr0 = passArray8ToWasm0(public_key, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.encrypt_encrypt_vote(this.__wbg_ptr, vote, ptr0, len0); + if (ret[2]) { + throw takeFromExternrefTable0(ret[1]); } + return EncryptedVote.__wrap(ret[0]); } - /** - */ static test() { wasm.encrypt_test(); } } +const EncryptedVoteFinalization = (typeof FinalizationRegistry === 'undefined') + ? { register: () => {}, unregister: () => {} } + : new FinalizationRegistry(ptr => wasm.__wbg_encryptedvote_free(ptr >>> 0, 1)); + +export class EncryptedVote { + + static __wrap(ptr) { + ptr = ptr >>> 0; + const obj = Object.create(EncryptedVote.prototype); + obj.__wbg_ptr = ptr; + EncryptedVoteFinalization.register(obj, obj.__wbg_ptr, obj); + return obj; + } + + __destroy_into_raw() { + const ptr = this.__wbg_ptr; + this.__wbg_ptr = 0; + EncryptedVoteFinalization.unregister(this); + return ptr; + } + + free() { + const ptr = this.__destroy_into_raw(); + wasm.__wbg_encryptedvote_free(ptr, 0); + } + /** + * @returns {Uint8Array} + */ + get encrypted_vote() { + const ret = wasm.encryptedvote_encrypted_vote(this.__wbg_ptr); + var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + return v1; + } + /** + * @returns {string} + */ + get circuit_inputs() { + let deferred1_0; + let deferred1_1; + try { + const ret = wasm.encryptedvote_circuit_inputs(this.__wbg_ptr); + deferred1_0 = ret[0]; + deferred1_1 = ret[1]; + return getStringFromWasm0(ret[0], ret[1]); + } finally { + wasm.__wbindgen_free(deferred1_0, deferred1_1, 1); + } + } +} + const WasmBindgenTestContextFinalization = (typeof FinalizationRegistry === 'undefined') ? { register: () => {}, unregister: () => {} } : new FinalizationRegistry(ptr => wasm.__wbg_wasmbindgentestcontext_free(ptr >>> 0, 1)); /** -* Runtime test harness support instantiated in JS. -* -* The node.js entry script instantiates a `Context` here which is used to -* drive test execution. -*/ + * Runtime test harness support instantiated in JS. + * + * The node.js entry script instantiates a `Context` here which is used to + * drive test execution. + */ export class WasmBindgenTestContext { __destroy_into_raw() { @@ -429,12 +345,12 @@ export class WasmBindgenTestContext { wasm.__wbg_wasmbindgentestcontext_free(ptr, 0); } /** - * Creates a new context ready to run tests. - * - * A `Context` is the main structure through which test execution is - * coordinated, and this will collect output and results for all executed - * tests. - */ + * Creates a new context ready to run tests. + * + * A `Context` is the main structure through which test execution is + * coordinated, and this will collect output and results for all executed + * tests. + */ constructor() { const ret = wasm.wasmbindgentestcontext_new(); this.__wbg_ptr = ret >>> 0; @@ -442,33 +358,37 @@ export class WasmBindgenTestContext { return this; } /** - * Inform this context about runtime arguments passed to the test - * harness. - * @param {any[]} args - */ - args(args) { - const ptr0 = passArrayJsValueToWasm0(args, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - wasm.wasmbindgentestcontext_args(this.__wbg_ptr, ptr0, len0); + * Handle `--include-ignored` flag. + * @param {boolean} include_ignored + */ + include_ignored(include_ignored) { + wasm.wasmbindgentestcontext_include_ignored(this.__wbg_ptr, include_ignored); + } + /** + * Handle filter argument. + * @param {number} filtered + */ + filtered_count(filtered) { + wasm.wasmbindgentestcontext_filtered_count(this.__wbg_ptr, filtered); } /** - * Executes a list of tests, returning a promise representing their - * eventual completion. - * - * This is the main entry point for executing tests. All the tests passed - * in are the JS `Function` object that was plucked off the - * `WebAssembly.Instance` exports list. - * - * The promise returned resolves to either `true` if all tests passed or - * `false` if at least one test failed. - * @param {any[]} tests - * @returns {Promise} - */ + * Executes a list of tests, returning a promise representing their + * eventual completion. + * + * This is the main entry point for executing tests. All the tests passed + * in are the JS `Function` object that was plucked off the + * `WebAssembly.Instance` exports list. + * + * The promise returned resolves to either `true` if all tests passed or + * `false` if at least one test failed. + * @param {any[]} tests + * @returns {Promise} + */ run(tests) { const ptr0 = passArrayJsValueToWasm0(tests, wasm.__wbindgen_malloc); const len0 = WASM_VECTOR_LEN; const ret = wasm.wasmbindgentestcontext_run(this.__wbg_ptr, ptr0, len0); - return takeObject(ret); + return ret; } } @@ -480,7 +400,7 @@ async function __wbg_load(module, imports) { } catch (e) { if (module.headers.get('Content-Type') != 'application/wasm') { - console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); + console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); } else { throw e; @@ -506,135 +426,237 @@ async function __wbg_load(module, imports) { function __wbg_get_imports() { const imports = {}; imports.wbg = {}; - imports.wbg.__wbindgen_object_drop_ref = function(arg0) { - takeObject(arg0); - }; - imports.wbg.__wbindgen_string_new = function(arg0, arg1) { - const ret = getStringFromWasm0(arg0, arg1); - return addHeapObject(ret); + imports.wbg.__wbg_Deno_5e0f323eeba20aa4 = function(arg0) { + const ret = arg0.Deno; + return isLikeNone(ret) ? 0 : addToExternrefTable0(ret); }; - imports.wbg.__wbg_log_4c6146472facbfaa = function(arg0, arg1) { - console.log(getStringFromWasm0(arg0, arg1)); - }; - imports.wbg.__wbg_String_e73d90ae9c871912 = function(arg0, arg1) { - const ret = String(getObject(arg1)); + imports.wbg.__wbg_String_6f4330ab5fd77ef6 = function(arg0, arg1) { + const ret = String(arg1); const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); const len1 = WASM_VECTOR_LEN; getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); }; - imports.wbg.__wbg_getElementById_8e651e19b1db8af4 = function(arg0, arg1, arg2) { - const ret = getObject(arg0).getElementById(getStringFromWasm0(arg1, arg2)); - return addHeapObject(ret); + imports.wbg.__wbg_buffer_609cc3eee51ed158 = function(arg0) { + const ret = arg0.buffer; + return ret; }; - imports.wbg.__wbg_settextcontent_f5ce03c2d5452fdb = function(arg0, arg1, arg2) { - getObject(arg0).textContent = getStringFromWasm0(arg1, arg2); + imports.wbg.__wbg_call_672a4d21634d4a24 = function() { return handleError(function (arg0, arg1) { + const ret = arg0.call(arg1); + return ret; + }, arguments) }; + imports.wbg.__wbg_call_7cccdd69e0791ae2 = function() { return handleError(function (arg0, arg1, arg2) { + const ret = arg0.call(arg1, arg2); + return ret; + }, arguments) }; + imports.wbg.__wbg_constructor_75c512bc262c1ab2 = function(arg0) { + const ret = arg0.constructor; + return ret; }; - imports.wbg.__wbindgen_string_get = function(arg0, arg1) { - const obj = getObject(arg1); - const ret = typeof(obj) === 'string' ? obj : undefined; - var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - var len1 = WASM_VECTOR_LEN; - getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); - getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); + imports.wbg.__wbg_crypto_574e78ad8b13b65f = function(arg0) { + const ret = arg0.crypto; + return ret; }; - imports.wbg.__wbindgen_number_new = function(arg0) { - const ret = arg0; - return addHeapObject(ret); + imports.wbg.__wbg_error_f19acdc6b5fafb26 = function(arg0, arg1) { + console.error(getStringFromWasm0(arg0, arg1)); }; - imports.wbg.__wbg_wbgtestinvoke_a9c01fbf474f5d4b = function() { return handleError(function (arg0, arg1) { + imports.wbg.__wbg_forEach_d6a05ca96422eff9 = function(arg0, arg1, arg2) { try { - var state0 = {a: arg0, b: arg1}; - var cb0 = () => { + var state0 = {a: arg1, b: arg2}; + var cb0 = (arg0, arg1, arg2) => { const a = state0.a; state0.a = 0; try { - return __wbg_adapter_44(a, state0.b, ); + return __wbg_adapter_52(a, state0.b, arg0, arg1, arg2); } finally { state0.a = a; } }; - __wbg_test_invoke(cb0); + arg0.forEach(cb0); } finally { state0.a = state0.b = 0; } + }; + imports.wbg.__wbg_getElementById_727e92dd724c370c = function(arg0, arg1, arg2) { + const ret = arg0.getElementById(getStringFromWasm0(arg1, arg2)); + return ret; + }; + imports.wbg.__wbg_getRandomValues_b8f5dbd5f3995a9e = function() { return handleError(function (arg0, arg1) { + arg0.getRandomValues(arg1); }, arguments) }; - imports.wbg.__wbg_wbgtestoutputwriteln_af26aa5032b93b71 = function(arg0) { - __wbg_test_output_writeln(takeObject(arg0)); + imports.wbg.__wbg_log_c222819a41e063d3 = function(arg0) { + console.log(arg0); }; - imports.wbg.__wbindgen_object_clone_ref = function(arg0) { - const ret = getObject(arg0); - return addHeapObject(ret); + imports.wbg.__wbg_message_97a2af9b89d693a3 = function(arg0) { + const ret = arg0.message; + return ret; }; - imports.wbg.__wbg_stack_0cf5246a8b98a5c3 = function(arg0) { - const ret = getObject(arg0).stack; - return addHeapObject(ret); + imports.wbg.__wbg_msCrypto_a61aeb35a24c1329 = function(arg0) { + const ret = arg0.msCrypto; + return ret; }; - imports.wbg.__wbg_textcontent_9f35c3e14d1b1ad8 = function(arg0, arg1) { - const ret = getObject(arg1).textContent; + imports.wbg.__wbg_name_0b327d569f00ebee = function(arg0) { + const ret = arg0.name; + return ret; + }; + imports.wbg.__wbg_name_ac50ab7b6b731bdc = function(arg0, arg1) { + const ret = arg1.name; const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); const len1 = WASM_VECTOR_LEN; getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); }; - imports.wbg.__wbg_stack_b18cfcfd5aef8d27 = function(arg0) { - const ret = getObject(arg0).stack; - return addHeapObject(ret); + imports.wbg.__wbg_new_23a2665fac83c611 = function(arg0, arg1) { + try { + var state0 = {a: arg0, b: arg1}; + var cb0 = (arg0, arg1) => { + const a = state0.a; + state0.a = 0; + try { + return __wbg_adapter_65(a, state0.b, arg0, arg1); + } finally { + state0.a = a; + } + }; + const ret = new Promise(cb0); + return ret; + } finally { + state0.a = state0.b = 0; + } + }; + imports.wbg.__wbg_new_78093c5bd701d017 = function() { + const ret = new Error(); + return ret; }; - imports.wbg.__wbg_static_accessor_DOCUMENT_c9d3ded98505f352 = function() { - const ret = document; - return addHeapObject(ret); + imports.wbg.__wbg_new_a12002a7f91c75be = function(arg0) { + const ret = new Uint8Array(arg0); + return ret; + }; + imports.wbg.__wbg_newnoargs_105ed471475aaf50 = function(arg0, arg1) { + const ret = new Function(getStringFromWasm0(arg0, arg1)); + return ret; + }; + imports.wbg.__wbg_newwithbyteoffsetandlength_d97e637ebe145a9a = function(arg0, arg1, arg2) { + const ret = new Uint8Array(arg0, arg1 >>> 0, arg2 >>> 0); + return ret; + }; + imports.wbg.__wbg_newwithlength_a381634e90c276d4 = function(arg0) { + const ret = new Uint8Array(arg0 >>> 0); + return ret; + }; + imports.wbg.__wbg_node_905d3e251edff8a2 = function(arg0) { + const ret = arg0.node; + return ret; + }; + imports.wbg.__wbg_now_832024c17817dc01 = function(arg0) { + const ret = arg0.now(); + return ret; + }; + imports.wbg.__wbg_performance_ae5e84dd26af6765 = function(arg0) { + const ret = arg0.performance; + return ret; }; - imports.wbg.__wbg_self_91e88697873c977b = function(arg0) { - const ret = getObject(arg0).self; - return isLikeNone(ret) ? 0 : addHeapObject(ret); + imports.wbg.__wbg_process_dc0fbacc7c1c06f7 = function(arg0) { + const ret = arg0.process; + return ret; + }; + imports.wbg.__wbg_queueMicrotask_97d92b4fcc8a61c5 = function(arg0) { + queueMicrotask(arg0); }; - imports.wbg.__wbg_constructor_2aca75e2f55853d3 = function(arg0) { - const ret = getObject(arg0).constructor; - return addHeapObject(ret); + imports.wbg.__wbg_queueMicrotask_d3219def82552485 = function(arg0) { + const ret = arg0.queueMicrotask; + return ret; }; - imports.wbg.__wbg_name_8e788143eb60943f = function(arg0, arg1) { - const ret = getObject(arg1).name; + imports.wbg.__wbg_randomFillSync_ac0988aba3254290 = function() { return handleError(function (arg0, arg1) { + arg0.randomFillSync(arg1); + }, arguments) }; + imports.wbg.__wbg_require_60cc747a6bc5215a = function() { return handleError(function () { + const ret = module.require; + return ret; + }, arguments) }; + imports.wbg.__wbg_resolve_4851785c9c5f573d = function(arg0) { + const ret = Promise.resolve(arg0); + return ret; + }; + imports.wbg.__wbg_self_67c28212685dfde2 = function(arg0) { + const ret = arg0.self; + return isLikeNone(ret) ? 0 : addToExternrefTable0(ret); + }; + imports.wbg.__wbg_set_65595bdd868b3009 = function(arg0, arg1, arg2) { + arg0.set(arg1, arg2 >>> 0); + }; + imports.wbg.__wbg_settextcontent_4516425a935f461b = function(arg0, arg1, arg2) { + arg0.textContent = getStringFromWasm0(arg1, arg2); + }; + imports.wbg.__wbg_stack_54b23675007f71bb = function(arg0, arg1) { + const ret = arg1.stack; const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); const len1 = WASM_VECTOR_LEN; getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); }; - imports.wbg.__wbg_Deno_5db6104106b466fc = function(arg0) { - const ret = getObject(arg0).Deno; - return isLikeNone(ret) ? 0 : addHeapObject(ret); - }; - imports.wbg.__wbg_stack_b73d0c34f7b4416b = function(arg0, arg1) { - const ret = getObject(arg1).stack; + imports.wbg.__wbg_stack_8e0a01ea26c1db11 = function(arg0, arg1) { + const ret = arg1.stack; const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); const len1 = WASM_VECTOR_LEN; getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); }; - imports.wbg.__wbg_new_abda76e883ba8a5f = function() { - const ret = new Error(); - return addHeapObject(ret); + imports.wbg.__wbg_stack_d6edc2612f9df83f = function(arg0) { + const ret = arg0.stack; + return ret; }; - imports.wbg.__wbg_stack_658279fe44541cf6 = function(arg0, arg1) { - const ret = getObject(arg1).stack; + imports.wbg.__wbg_stack_f851a06e9c78be1d = function(arg0) { + const ret = arg0.stack; + return ret; + }; + imports.wbg.__wbg_static_accessor_DOCUMENT_2badde8ae57cc9f7 = function() { + const ret = document; + return ret; + }; + imports.wbg.__wbg_static_accessor_GLOBAL_88a902d13a557d07 = function() { + const ret = typeof global === 'undefined' ? null : global; + return isLikeNone(ret) ? 0 : addToExternrefTable0(ret); + }; + imports.wbg.__wbg_static_accessor_GLOBAL_THIS_56578be7e9f832b0 = function() { + const ret = typeof globalThis === 'undefined' ? null : globalThis; + return isLikeNone(ret) ? 0 : addToExternrefTable0(ret); + }; + imports.wbg.__wbg_static_accessor_SELF_37c5d418e4bf5819 = function() { + const ret = typeof self === 'undefined' ? null : self; + return isLikeNone(ret) ? 0 : addToExternrefTable0(ret); + }; + imports.wbg.__wbg_static_accessor_WINDOW_5de37043a91a9c40 = function() { + const ret = typeof window === 'undefined' ? null : window; + return isLikeNone(ret) ? 0 : addToExternrefTable0(ret); + }; + imports.wbg.__wbg_subarray_aa9065fa9dc5df96 = function(arg0, arg1, arg2) { + const ret = arg0.subarray(arg1 >>> 0, arg2 >>> 0); + return ret; + }; + imports.wbg.__wbg_textcontent_9581a1676431df94 = function(arg0, arg1) { + const ret = arg1.textContent; const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); const len1 = WASM_VECTOR_LEN; getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); }; - imports.wbg.__wbg_error_f851667af71bcfc6 = function(arg0, arg1) { - let deferred0_0; - let deferred0_1; - try { - deferred0_0 = arg0; - deferred0_1 = arg1; - console.error(getStringFromWasm0(arg0, arg1)); - } finally { - wasm.__wbindgen_free(deferred0_0, deferred0_1, 1); - } + imports.wbg.__wbg_then_44b73946d2fb3e7d = function(arg0, arg1) { + const ret = arg0.then(arg1); + return ret; + }; + imports.wbg.__wbg_versions_c01dfd4722a88165 = function(arg0) { + const ret = arg0.versions; + return ret; + }; + imports.wbg.__wbg_wbgtestogconsolelog_2c6a12219a99cdb3 = function(arg0, arg1) { + __wbgtest_og_console_log(getStringFromWasm0(arg0, arg1)); + }; + imports.wbg.__wbg_wbgtestoutputwriteln_be640e64b2946d47 = function(arg0) { + __wbg_test_output_writeln(arg0); }; imports.wbg.__wbindgen_cb_drop = function(arg0) { - const obj = takeObject(arg0).original; + const obj = arg0.original; if (obj.cnt-- == 1) { obj.a = 0; return true; @@ -642,195 +664,60 @@ function __wbg_get_imports() { const ret = false; return ret; }; - imports.wbg.__wbg_queueMicrotask_12a30234db4045d3 = function(arg0) { - queueMicrotask(getObject(arg0)); + imports.wbg.__wbindgen_closure_wrapper1962 = function(arg0, arg1, arg2) { + const ret = makeMutClosure(arg0, arg1, 336, __wbg_adapter_28); + return ret; }; - imports.wbg.__wbg_queueMicrotask_48421b3cc9052b68 = function(arg0) { - const ret = getObject(arg0).queueMicrotask; - return addHeapObject(ret); + imports.wbg.__wbindgen_init_externref_table = function() { + const table = wasm.__wbindgen_export_1; + const offset = table.grow(4); + table.set(0, undefined); + table.set(offset + 0, undefined); + table.set(offset + 1, null); + table.set(offset + 2, true); + table.set(offset + 3, false); + ; }; imports.wbg.__wbindgen_is_function = function(arg0) { - const ret = typeof(getObject(arg0)) === 'function'; + const ret = typeof(arg0) === 'function'; return ret; }; - imports.wbg.__wbg_debug_5fb96680aecf5dc8 = function(arg0) { - console.debug(getObject(arg0)); - }; - imports.wbg.__wbg_error_8e3928cfb8a43e2b = function(arg0) { - console.error(getObject(arg0)); - }; - imports.wbg.__wbg_info_530a29cb2e4e3304 = function(arg0) { - console.info(getObject(arg0)); - }; - imports.wbg.__wbg_log_5bb5f88f245d7762 = function(arg0) { - console.log(getObject(arg0)); - }; - imports.wbg.__wbg_warn_63bbae1730aead09 = function(arg0) { - console.warn(getObject(arg0)); - }; - imports.wbg.__wbg_crypto_566d7465cdbb6b7a = function(arg0) { - const ret = getObject(arg0).crypto; - return addHeapObject(ret); - }; imports.wbg.__wbindgen_is_object = function(arg0) { - const val = getObject(arg0); + const val = arg0; const ret = typeof(val) === 'object' && val !== null; return ret; }; - imports.wbg.__wbg_process_dc09a8c7d59982f6 = function(arg0) { - const ret = getObject(arg0).process; - return addHeapObject(ret); - }; - imports.wbg.__wbg_versions_d98c6400c6ca2bd8 = function(arg0) { - const ret = getObject(arg0).versions; - return addHeapObject(ret); - }; - imports.wbg.__wbg_node_caaf83d002149bd5 = function(arg0) { - const ret = getObject(arg0).node; - return addHeapObject(ret); - }; imports.wbg.__wbindgen_is_string = function(arg0) { - const ret = typeof(getObject(arg0)) === 'string'; + const ret = typeof(arg0) === 'string'; return ret; }; - imports.wbg.__wbg_require_94a9da52636aacbf = function() { return handleError(function () { - const ret = module.require; - return addHeapObject(ret); - }, arguments) }; - imports.wbg.__wbg_msCrypto_0b84745e9245cdf6 = function(arg0) { - const ret = getObject(arg0).msCrypto; - return addHeapObject(ret); - }; - imports.wbg.__wbg_randomFillSync_290977693942bf03 = function() { return handleError(function (arg0, arg1) { - getObject(arg0).randomFillSync(takeObject(arg1)); - }, arguments) }; - imports.wbg.__wbg_getRandomValues_260cc23a41afad9a = function() { return handleError(function (arg0, arg1) { - getObject(arg0).getRandomValues(getObject(arg1)); - }, arguments) }; - imports.wbg.__wbg_newnoargs_76313bd6ff35d0f2 = function(arg0, arg1) { - const ret = new Function(getStringFromWasm0(arg0, arg1)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_call_1084a111329e68ce = function() { return handleError(function (arg0, arg1) { - const ret = getObject(arg0).call(getObject(arg1)); - return addHeapObject(ret); - }, arguments) }; - imports.wbg.__wbg_self_3093d5d1f7bcb682 = function() { return handleError(function () { - const ret = self.self; - return addHeapObject(ret); - }, arguments) }; - imports.wbg.__wbg_window_3bcfc4d31bc012f8 = function() { return handleError(function () { - const ret = window.window; - return addHeapObject(ret); - }, arguments) }; - imports.wbg.__wbg_globalThis_86b222e13bdf32ed = function() { return handleError(function () { - const ret = globalThis.globalThis; - return addHeapObject(ret); - }, arguments) }; - imports.wbg.__wbg_global_e5a3fe56f8be9485 = function() { return handleError(function () { - const ret = global.global; - return addHeapObject(ret); - }, arguments) }; imports.wbg.__wbindgen_is_undefined = function(arg0) { - const ret = getObject(arg0) === undefined; + const ret = arg0 === undefined; return ret; }; - imports.wbg.__wbg_forEach_1778105a4f7c1a63 = function(arg0, arg1, arg2) { - try { - var state0 = {a: arg1, b: arg2}; - var cb0 = (arg0, arg1, arg2) => { - const a = state0.a; - state0.a = 0; - try { - return __wbg_adapter_108(a, state0.b, arg0, arg1, arg2); - } finally { - state0.a = a; - } - }; - getObject(arg0).forEach(cb0); - } finally { - state0.a = state0.b = 0; - } - }; - imports.wbg.__wbg_message_e18bae0a0e2c097a = function(arg0) { - const ret = getObject(arg0).message; - return addHeapObject(ret); - }; - imports.wbg.__wbg_name_ac78212e803c7941 = function(arg0) { - const ret = getObject(arg0).name; - return addHeapObject(ret); - }; - imports.wbg.__wbg_call_89af060b4e1523f2 = function() { return handleError(function (arg0, arg1, arg2) { - const ret = getObject(arg0).call(getObject(arg1), getObject(arg2)); - return addHeapObject(ret); - }, arguments) }; - imports.wbg.__wbg_new_b85e72ed1bfd57f9 = function(arg0, arg1) { - try { - var state0 = {a: arg0, b: arg1}; - var cb0 = (arg0, arg1) => { - const a = state0.a; - state0.a = 0; - try { - return __wbg_adapter_121(a, state0.b, arg0, arg1); - } finally { - state0.a = a; - } - }; - const ret = new Promise(cb0); - return addHeapObject(ret); - } finally { - state0.a = state0.b = 0; - } - }; - imports.wbg.__wbg_resolve_570458cb99d56a43 = function(arg0) { - const ret = Promise.resolve(getObject(arg0)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_then_95e6edc0f89b73b1 = function(arg0, arg1) { - const ret = getObject(arg0).then(getObject(arg1)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_buffer_b7b08af79b0b0974 = function(arg0) { - const ret = getObject(arg0).buffer; - return addHeapObject(ret); - }; - imports.wbg.__wbg_newwithbyteoffsetandlength_8a2cb9ca96b27ec9 = function(arg0, arg1, arg2) { - const ret = new Uint8Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0); - return addHeapObject(ret); - }; - imports.wbg.__wbg_new_ea1883e1e5e86686 = function(arg0) { - const ret = new Uint8Array(getObject(arg0)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_set_d1e79e2388520f18 = function(arg0, arg1, arg2) { - getObject(arg0).set(getObject(arg1), arg2 >>> 0); - }; - imports.wbg.__wbg_newwithlength_ec548f448387c968 = function(arg0) { - const ret = new Uint8Array(arg0 >>> 0); - return addHeapObject(ret); + imports.wbg.__wbindgen_memory = function() { + const ret = wasm.memory; + return ret; }; - imports.wbg.__wbg_subarray_7c2e3576afe181d1 = function(arg0, arg1, arg2) { - const ret = getObject(arg0).subarray(arg1 >>> 0, arg2 >>> 0); - return addHeapObject(ret); + imports.wbg.__wbindgen_number_new = function(arg0) { + const ret = arg0; + return ret; }; - imports.wbg.__wbindgen_debug_string = function(arg0, arg1) { - const ret = debugString(getObject(arg1)); - const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - const len1 = WASM_VECTOR_LEN; + imports.wbg.__wbindgen_string_get = function(arg0, arg1) { + const obj = arg1; + const ret = typeof(obj) === 'string' ? obj : undefined; + var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + var len1 = WASM_VECTOR_LEN; getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); }; + imports.wbg.__wbindgen_string_new = function(arg0, arg1) { + const ret = getStringFromWasm0(arg0, arg1); + return ret; + }; imports.wbg.__wbindgen_throw = function(arg0, arg1) { throw new Error(getStringFromWasm0(arg0, arg1)); }; - imports.wbg.__wbindgen_memory = function() { - const ret = wasm.memory; - return addHeapObject(ret); - }; - imports.wbg.__wbindgen_closure_wrapper247 = function(arg0, arg1, arg2) { - const ret = makeMutClosure(arg0, arg1, 76, __wbg_adapter_28); - return addHeapObject(ret); - }; return imports; } @@ -846,7 +733,7 @@ function __wbg_finalize_init(instance, module) { cachedUint8ArrayMemory0 = null; - + wasm.__wbindgen_start(); return wasm; } @@ -854,10 +741,13 @@ function initSync(module) { if (wasm !== undefined) return wasm; - if (typeof module !== 'undefined' && Object.getPrototypeOf(module) === Object.prototype) - ({module} = module) - else - console.warn('using deprecated parameters for `initSync()`; pass a single object instead') + if (typeof module !== 'undefined') { + if (Object.getPrototypeOf(module) === Object.prototype) { + ({module} = module) + } else { + console.warn('using deprecated parameters for `initSync()`; pass a single object instead') + } + } const imports = __wbg_get_imports(); @@ -876,10 +766,13 @@ async function __wbg_init(module_or_path) { if (wasm !== undefined) return wasm; - if (typeof module_or_path !== 'undefined' && Object.getPrototypeOf(module_or_path) === Object.prototype) - ({module_or_path} = module_or_path) - else - console.warn('using deprecated parameters for the initialization function; pass a single object instead') + if (typeof module_or_path !== 'undefined') { + if (Object.getPrototypeOf(module_or_path) === Object.prototype) { + ({module_or_path} = module_or_path) + } else { + console.warn('using deprecated parameters for the initialization function; pass a single object instead') + } + } if (typeof module_or_path === 'undefined') { module_or_path = new URL('crisp_wasm_crypto_bg.wasm', import.meta.url); diff --git a/examples/CRISP/apps/client/libs/wasm/pkg/crisp_wasm_crypto_bg.wasm b/examples/CRISP/apps/client/libs/wasm/pkg/crisp_wasm_crypto_bg.wasm index 1698cae66e..174e6a8214 100644 Binary files a/examples/CRISP/apps/client/libs/wasm/pkg/crisp_wasm_crypto_bg.wasm and b/examples/CRISP/apps/client/libs/wasm/pkg/crisp_wasm_crypto_bg.wasm differ diff --git a/examples/CRISP/apps/client/libs/wasm/pkg/crisp_wasm_crypto_bg.wasm.d.ts b/examples/CRISP/apps/client/libs/wasm/pkg/crisp_wasm_crypto_bg.wasm.d.ts index 9ac108a13f..ae5de9e5ff 100644 --- a/examples/CRISP/apps/client/libs/wasm/pkg/crisp_wasm_crypto_bg.wasm.d.ts +++ b/examples/CRISP/apps/client/libs/wasm/pkg/crisp_wasm_crypto_bg.wasm.d.ts @@ -1,28 +1,33 @@ /* tslint:disable */ /* eslint-disable */ export const memory: WebAssembly.Memory; -export function __wbg_encrypt_free(a: number, b: number): void; -export function encrypt_new(): number; -export function encrypt_encrypt_vote(a: number, b: number, c: number, d: number, e: number): void; -export function __wbgt_test_encrypt_vote_0(a: number): void; -export function encrypt_test(): void; -export function __wbg_wasmbindgentestcontext_free(a: number, b: number): void; -export function wasmbindgentestcontext_new(): number; -export function wasmbindgentestcontext_args(a: number, b: number, c: number): void; -export function wasmbindgentestcontext_run(a: number, b: number, c: number): number; -export function __wbgtest_console_log(a: number): void; -export function __wbgtest_console_debug(a: number): void; -export function __wbgtest_console_info(a: number): void; -export function __wbgtest_console_warn(a: number): void; -export function __wbgtest_console_error(a: number): void; -export function __wbgtest_cov_dump(a: number): void; -export function __wbindgen_malloc(a: number, b: number): number; -export function __wbindgen_realloc(a: number, b: number, c: number, d: number): number; -export const __wbindgen_export_2: WebAssembly.Table; -export function _dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h1d8c1928bfa3ee85(a: number, b: number, c: number): void; -export function __wbindgen_add_to_stack_pointer(a: number): number; -export function __wbindgen_free(a: number, b: number, c: number): void; -export function wasm_bindgen__convert__closures__invoke0_mut__h39c761bb9a2bf959(a: number, b: number): void; -export function __wbindgen_exn_store(a: number): void; -export function wasm_bindgen__convert__closures__invoke3_mut__h4031e454ad97d11c(a: number, b: number, c: number, d: number, e: number): void; -export function wasm_bindgen__convert__closures__invoke2_mut__hc0d7ba91596f2e65(a: number, b: number, c: number, d: number): void; +export const __wbg_encrypt_free: (a: number, b: number) => void; +export const __wbg_encryptedvote_free: (a: number, b: number) => void; +export const encryptedvote_encrypted_vote: (a: number) => [number, number]; +export const encryptedvote_circuit_inputs: (a: number) => [number, number]; +export const encrypt_new: () => number; +export const encrypt_encrypt_vote: (a: number, b: bigint, c: number, d: number) => [number, number, number]; +export const encrypt_test: () => void; +export const __wbg_wasmbindgentestcontext_free: (a: number, b: number) => void; +export const wasmbindgentestcontext_new: () => number; +export const wasmbindgentestcontext_include_ignored: (a: number, b: number) => void; +export const wasmbindgentestcontext_filtered_count: (a: number, b: number) => void; +export const wasmbindgentestcontext_run: (a: number, b: number, c: number) => any; +export const __wbgtest_console_log: (a: any) => void; +export const __wbgtest_console_debug: (a: any) => void; +export const __wbgtest_console_info: (a: any) => void; +export const __wbgtest_console_warn: (a: any) => void; +export const __wbgtest_console_error: (a: any) => void; +export const __wbgtest_cov_dump: () => [number, number]; +export const __externref_table_alloc: () => number; +export const __wbindgen_export_1: WebAssembly.Table; +export const __wbindgen_malloc: (a: number, b: number) => number; +export const __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number; +export const __wbindgen_exn_store: (a: number) => void; +export const __wbindgen_export_5: WebAssembly.Table; +export const __wbindgen_free: (a: number, b: number, c: number) => void; +export const __externref_table_dealloc: (a: number) => void; +export const closure335_externref_shim: (a: number, b: number, c: any) => void; +export const closure257_externref_shim: (a: number, b: number, c: any, d: number, e: any) => void; +export const closure261_externref_shim: (a: number, b: number, c: any, d: any) => void; +export const __wbindgen_start: () => void; diff --git a/examples/CRISP/apps/client/libs/wasm/pkg/crisp_worker.js b/examples/CRISP/apps/client/libs/wasm/pkg/crisp_worker.js index be650998b9..67a7c88ee5 100644 --- a/examples/CRISP/apps/client/libs/wasm/pkg/crisp_worker.js +++ b/examples/CRISP/apps/client/libs/wasm/pkg/crisp_worker.js @@ -20,8 +20,17 @@ self.onmessage = async function (event) { if (!wasmInstance || !encryptInstance) { await initWasm(); } - const encryptedVote = encryptInstance.encrypt_vote(voteId, publicKey); - self.postMessage({ type: 'encrypt_vote', success: true, encryptedVote }); + const result = encryptInstance.encrypt_vote(voteId, publicKey); + const circuitInputs = JSON.parse(result.circuit_inputs); + + self.postMessage({ + type: 'encrypt_vote', + success: true, + encryptedVote: { + vote: result.encrypted_vote, + circuitInputs, + }, + }); } catch (error) { self.postMessage({ type: 'encrypt_vote', success: false, error: error.message }); } diff --git a/examples/CRISP/apps/client/libs/wasm/pkg/package.json b/examples/CRISP/apps/client/libs/wasm/pkg/package.json deleted file mode 100644 index ee0f7eb5f8..0000000000 --- a/examples/CRISP/apps/client/libs/wasm/pkg/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "crisp-wasm-crypto", - "type": "module", - "version": "0.1.0", - "repository": { - "type": "git", - "url": "https://github.com/gnosisguild/enclave" - }, - "files": [ - "crisp_wasm_crypto_bg.wasm", - "crisp_wasm_crypto.js", - "crisp_wasm_crypto.d.ts" - ], - "main": "crisp_wasm_crypto.js", - "types": "crisp_wasm_crypto.d.ts", - "sideEffects": [ - "./snippets/*" - ] -} \ No newline at end of file diff --git a/examples/CRISP/apps/client/package.json b/examples/CRISP/apps/client/package.json index 21a95f405f..d2f0cb411e 100644 --- a/examples/CRISP/apps/client/package.json +++ b/examples/CRISP/apps/client/package.json @@ -17,10 +17,14 @@ "deploy": "gh-pages -d dist" }, "dependencies": { + "@aztec/bb.js": "^0.82.2", "@emotion/babel-plugin": "^11.11.0", "@emotion/react": "^11.11.4", + "@noir-lang/acvm_js": "1.0.0-beta.3", + "@noir-lang/noir_js": "1.0.0-beta.3", + "@noir-lang/noirc_abi": "1.0.0-beta.3", "@phosphor-icons/react": "^2.1.4", - "@semaphore-protocol/core": "^4.9.2", + "@semaphore-protocol/core": "github:hmzakhalid/semaphore-noir#dist-core", "@semaphore-protocol/data": "^4.9.2", "@svgr/rollup": "^8.1.0", "@tanstack/react-query": "^5.74.3", @@ -32,7 +36,7 @@ "react-markdown": "^9.0.1", "react-router-dom": "^6.22.3", "react-syntax-highlighter": "^15.5.0", - "viem": "^2.27.0", + "viem": "2.30.6", "vite-plugin-node-polyfills": "^0.22.0", "vite-plugin-top-level-await": "^1.4.1", "vite-tsconfig-paths": "^4.3.2", @@ -55,7 +59,7 @@ "prettier": "^3.2.5", "prettier-plugin-tailwindcss": "^0.5.13", "tailwindcss": "^3.4.2", - "typescript": "^5.2.2", + "typescript": "^5.8.3", "vite": "^5.2.0", "vite-plugin-wasm": "^3.3.0" }, diff --git a/examples/CRISP/apps/client/src/context/voteManagement/VoteManagement.types.ts b/examples/CRISP/apps/client/src/context/voteManagement/VoteManagement.types.ts index b4d6a5e48c..44f7b25bdf 100644 --- a/examples/CRISP/apps/client/src/context/voteManagement/VoteManagement.types.ts +++ b/examples/CRISP/apps/client/src/context/voteManagement/VoteManagement.types.ts @@ -1,5 +1,5 @@ import { ReactNode } from 'react' -import { BroadcastVoteRequest, BroadcastVoteResponse, VoteStateLite, VotingRound } from '@/model/vote.model' +import { BroadcastVoteRequest, BroadcastVoteResponse, VoteStateLite, VotingRound, EncryptedVote } from '@/model/vote.model' import { Poll, PollRequestResult, PollResult } from '@/model/poll.model' import { Identity } from '@semaphore-protocol/core' @@ -28,7 +28,7 @@ export type VoteManagementContextType = { getPastPolls: () => Promise setVotingRound: React.Dispatch> setUser: React.Dispatch> - encryptVote: (voteId: bigint, publicKey: Uint8Array) => Promise + encryptVote: (voteId: bigint, publicKey: Uint8Array) => Promise registerIdentityOnContract: () => void broadcastVote: (vote: BroadcastVoteRequest) => Promise getRoundStateLite: (roundCount: number) => Promise diff --git a/examples/CRISP/apps/client/src/hooks/voting/useVoteCasting.ts b/examples/CRISP/apps/client/src/hooks/voting/useVoteCasting.ts index e35a443740..e729d00cf1 100644 --- a/examples/CRISP/apps/client/src/hooks/voting/useVoteCasting.ts +++ b/examples/CRISP/apps/client/src/hooks/voting/useVoteCasting.ts @@ -4,7 +4,7 @@ import { useVoteManagementContext } from '@/context/voteManagement'; import { useNotificationAlertContext } from '@/context/NotificationAlert/NotificationAlert.context.tsx'; import { Poll } from '@/model/poll.model'; import { BroadcastVoteRequest } from '@/model/vote.model'; -import { Group, generateProof, SemaphoreProof } from '@semaphore-protocol/core'; +import { Group, generateNoirProof, SemaphoreNoirProof, initSemaphoreNoirBackend } from '@semaphore-protocol/core'; import { encodeSemaphoreProof } from '@/utils/proof-encoding'; export const useVoteCasting = () => { @@ -67,13 +67,17 @@ export const useVoteCasting = () => { const group = new Group(currentGroupMembers); const scope = String(roundState.id); const message = String(pollSelected.value); - const fullProof: SemaphoreProof = await generateProof(semaphoreIdentity, group, message, scope); + const merkleTreeDepth = 10; + const noirBackend = await initSemaphoreNoirBackend(merkleTreeDepth); + const fullProof: SemaphoreNoirProof = await generateNoirProof(semaphoreIdentity, group, message, scope, noirBackend, true); console.log("Full generated proof object:", fullProof); const proofBytes = encodeSemaphoreProof(fullProof); const voteRequest: BroadcastVoteRequest = { round_id: roundState.id, - enc_vote_bytes: Array.from(voteEncrypted), + enc_vote_bytes: Array.from(voteEncrypted.vote), + proof: Array.from(voteEncrypted.proof), + public_inputs: voteEncrypted.public_inputs, address: user.address, proof_sem: Array.from(proofBytes) }; diff --git a/examples/CRISP/apps/client/src/hooks/wasm/useWebAssembly.tsx b/examples/CRISP/apps/client/src/hooks/wasm/useWebAssembly.tsx index f9f8e5e010..41c76cb802 100644 --- a/examples/CRISP/apps/client/src/hooks/wasm/useWebAssembly.tsx +++ b/examples/CRISP/apps/client/src/hooks/wasm/useWebAssembly.tsx @@ -1,6 +1,11 @@ import { useState, useEffect } from 'react' import { handleGenericError } from '@/utils/handle-generic-error' import { useNotificationAlertContext } from '@/context/NotificationAlert' +import { EncryptedVote } from '@/model/vote.model' +import { + generateProof, + CircuitInputs, +} from '@/utils/proofUtils' export const useWebAssemblyHook = () => { const { showToast } = useNotificationAlertContext() @@ -17,20 +22,26 @@ export const useWebAssemblyHook = () => { } }, []) - const encryptVote = async (voteId: bigint, publicKey: Uint8Array): Promise => { + const encryptVote = async (voteId: bigint, publicKey: Uint8Array): Promise => { if (!worker) { console.error('WebAssembly worker not initialized') return } - return new Promise((resolve, reject) => { + return new Promise((resolve, reject) => { setIsLoading(true) worker.postMessage({ type: 'encrypt_vote', data: { voteId, publicKey } }) - worker.onmessage = (event) => { + worker.onmessage = async (event) => { const { type, success, encryptedVote, error } = event.data if (type === 'encrypt_vote') { if (success) { - resolve(encryptedVote) + const { vote, circuitInputs } = encryptedVote; + const { proof, publicInputs } = await generateProof(circuitInputs as CircuitInputs); + resolve({ + vote: vote, + proof: proof, + public_inputs: publicInputs, + }) } else { showToast({ type: 'danger', @@ -50,4 +61,3 @@ export const useWebAssemblyHook = () => { encryptVote, } } - diff --git a/examples/CRISP/apps/client/src/model/vote.model.ts b/examples/CRISP/apps/client/src/model/vote.model.ts index 0649593d8c..ed5e0b3cf1 100644 --- a/examples/CRISP/apps/client/src/model/vote.model.ts +++ b/examples/CRISP/apps/client/src/model/vote.model.ts @@ -18,6 +18,8 @@ export interface CurrentRound { export interface BroadcastVoteRequest { round_id: number; enc_vote_bytes: number[]; + proof: number[]; + public_inputs: string[]; address: string; proof_sem: number[]; } @@ -45,3 +47,9 @@ export interface VoteStateLite { committee_public_key: number[] emojis: [string, string] } + +export interface EncryptedVote { + vote: Uint8Array + proof: Uint8Array + public_inputs: string[] +} diff --git a/examples/CRISP/apps/client/src/providers/Web3Provider.tsx b/examples/CRISP/apps/client/src/providers/Web3Provider.tsx index 1ef0e7291f..0f26bd06fa 100644 --- a/examples/CRISP/apps/client/src/providers/Web3Provider.tsx +++ b/examples/CRISP/apps/client/src/providers/Web3Provider.tsx @@ -25,10 +25,11 @@ const queryClient = new QueryClient() const options = import.meta.env.DEV ? ({ - // NOTE: this ensures that clicking the button doesn't force the change of network which we need for testing - initialChainId: 0, - } as ConnectkitOptions) - : undefined + initialChainId: 0, + } as ConnectkitOptions) + : ({ + initialChainId: sepolia.id, + } as ConnectkitOptions); export const Web3Provider = ({ children }: { children: React.ReactNode }) => { return ( diff --git a/examples/CRISP/apps/client/src/utils/proof-encoding.ts b/examples/CRISP/apps/client/src/utils/proof-encoding.ts index 4f2a0e779e..f05d0b271d 100644 --- a/examples/CRISP/apps/client/src/utils/proof-encoding.ts +++ b/examples/CRISP/apps/client/src/utils/proof-encoding.ts @@ -1,26 +1,22 @@ -import { hexToBytes, encodeAbiParameters, parseAbiParameters } from 'viem'; -import { type SemaphoreProof } from '@semaphore-protocol/core'; +import { hexToBytes, encodeAbiParameters, parseAbiParameters, bytesToHex } from 'viem'; +import { type SemaphoreNoirProof } from '@semaphore-protocol/core'; const abi = parseAbiParameters( - 'uint256,uint256,uint256,uint256,uint256,uint256[8]' + '(uint256,uint256,uint256,uint256,uint256,bytes)' ); -type Tuple8 = readonly [T, T, T, T, T, T, T, T]; - export function encodeSemaphoreProof( - { merkleTreeDepth, merkleTreeRoot, nullifier, message, scope, points }: SemaphoreProof + { merkleTreeDepth, merkleTreeRoot, nullifier, message, scope, proofBytes }: SemaphoreNoirProof ): Uint8Array { - if (points.length !== 8) { - throw new Error('Semaphore proof must have 8 points'); - } - const hex = encodeAbiParameters(abi, [ - BigInt(merkleTreeDepth), - BigInt(merkleTreeRoot), - BigInt(nullifier), - BigInt(message), - BigInt(scope), - points.map(BigInt) as unknown as Tuple8, + [ + BigInt(merkleTreeDepth), + BigInt(merkleTreeRoot), + BigInt(nullifier), + BigInt(message), + BigInt(scope), + bytesToHex(proofBytes), + ] ]); return hexToBytes(hex); diff --git a/examples/CRISP/apps/client/src/utils/proofUtils.ts b/examples/CRISP/apps/client/src/utils/proofUtils.ts new file mode 100644 index 0000000000..dc20c788b9 --- /dev/null +++ b/examples/CRISP/apps/client/src/utils/proofUtils.ts @@ -0,0 +1,71 @@ +import { UltraHonkBackend, ProofData } from '@aztec/bb.js'; +import { Noir } from '@noir-lang/noir_js'; +import crisp_circuit from 'libs/noir/crisp_circuit.json'; + +export type Field = string; + +export type Polynomial = { + coefficients: Field[]; +}; + +export interface CircuitInputs { + pk0is: string[][]; + pk1is: string[][]; + ct0is: string[][]; + ct1is: string[][]; + u: string[]; + e0: string[]; + e1: string[]; + k1: string[]; + r1is: string[][]; + r2is: string[][]; + p1is: string[][]; + p2is: string[][]; +} + +export const convertToPolynomial = (stringArray: string[]): Polynomial => { + return { + coefficients: stringArray, + }; +}; + +export const convertToPolynomialArray = ( + stringArrays: string[][] +): Polynomial[] => { + return stringArrays.map(convertToPolynomial); +}; + +export const generateProof = async (circuitInputs: CircuitInputs): Promise => { + const noir = new Noir(crisp_circuit as any); + const backend = new UltraHonkBackend(crisp_circuit.bytecode, { threads: 4 }); + + const pk0is_poly = convertToPolynomialArray(circuitInputs.pk0is); + const pk1is_poly = convertToPolynomialArray(circuitInputs.pk1is); + const ct0is_poly = convertToPolynomialArray(circuitInputs.ct0is); + const ct1is_poly = convertToPolynomialArray(circuitInputs.ct1is); + const u_poly = convertToPolynomial(circuitInputs.u); + const e0_poly = convertToPolynomial(circuitInputs.e0); + const e1_poly = convertToPolynomial(circuitInputs.e1); + const k1_poly = convertToPolynomial(circuitInputs.k1); + const r1is_poly = convertToPolynomialArray(circuitInputs.r1is); + const r2is_poly = convertToPolynomialArray(circuitInputs.r2is); + const p1is_poly = convertToPolynomialArray(circuitInputs.p1is); + const p2is_poly = convertToPolynomialArray(circuitInputs.p2is); + + const { witness } = await noir.execute({ + pk0is: pk0is_poly, + pk1is: pk1is_poly, + ct0is: ct0is_poly, + ct1is: ct1is_poly, + u: u_poly, + e0: e0_poly, + e1: e1_poly, + k1: k1_poly, + r1is: r1is_poly, + r2is: r2is_poly, + p1is: p1is_poly, + p2is: p2is_poly, + }); + + return await backend.generateProof(witness, { keccak: true }); +}; \ No newline at end of file diff --git a/examples/CRISP/apps/client/src/utils/vote.ts b/examples/CRISP/apps/client/src/utils/vote.ts index 975e23b154..d2a716fc07 100644 --- a/examples/CRISP/apps/client/src/utils/vote.ts +++ b/examples/CRISP/apps/client/src/utils/vote.ts @@ -10,4 +10,4 @@ export const generateCrispRound = (votingAddress: string): VotingConfigRequest = ciphernode_count: 2, // We can hard code this so they don't have to choose voter_count: 0, // The server will replace this with a timestamp for how long they have to vote } -} +} \ No newline at end of file diff --git a/examples/CRISP/apps/client/tsconfig.json b/examples/CRISP/apps/client/tsconfig.json index 6160d3f9d3..d42a3cdbec 100644 --- a/examples/CRISP/apps/client/tsconfig.json +++ b/examples/CRISP/apps/client/tsconfig.json @@ -2,10 +2,13 @@ "compilerOptions": { "target": "ES2020", "useDefineForClassFields": true, - "lib": ["ES2020", "DOM", "DOM.Iterable"], + "lib": [ + "ES2020", + "DOM", + "DOM.Iterable" + ], "module": "ESNext", "skipLibCheck": true, - /* Bundler mode */ "moduleResolution": "bundler", "allowImportingTsExtensions": true, @@ -13,17 +16,30 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - /* Linting */ "strict": true, "noUnusedLocals": true, "noUnusedParameters": true, "noFallthroughCasesInSwitch": true, "paths": { - "@/*": ["./src/*"], - "libs/*": ["./libs/*"] + "@/*": [ + "./src/*" + ], + "libs/*": [ + "./libs/*" + ] } }, - "include": ["src", "src/**/*.d.ts", "pkg", "libs/wasm/pkg"], - "references": [{ "path": "./tsconfig.node.json" }] -} + "include": [ + "src", + "src/**/*.d.ts", + "pkg", + "libs/wasm/pkg", + "libs/noir" + ], + "references": [ + { + "path": "./tsconfig.node.json" + } + ] +} \ No newline at end of file diff --git a/examples/CRISP/apps/client/vite.config.ts b/examples/CRISP/apps/client/vite.config.ts index 90cb4b681d..77016882df 100644 --- a/examples/CRISP/apps/client/vite.config.ts +++ b/examples/CRISP/apps/client/vite.config.ts @@ -16,7 +16,8 @@ export default defineConfig({ global: 'globalThis', }, optimizeDeps: { - exclude: ['@rollup/browser'], + esbuildOptions: { target: "esnext" }, + exclude: ['@rollup/browser', '@noir-lang/noirc_abi', '@noir-lang/acvm_js'], }, resolve: { alias: { diff --git a/examples/CRISP/apps/program/Cargo.lock b/examples/CRISP/apps/program/Cargo.lock index 8d101479c6..a57ffe6f60 100644 --- a/examples/CRISP/apps/program/Cargo.lock +++ b/examples/CRISP/apps/program/Cargo.lock @@ -2,6 +2,189 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "actix-codec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f7b0a21988c1bf877cf4759ef5ddaac04c1c9fe808c9142ecb78ba97d97a28a" +dependencies = [ + "bitflags 2.9.1", + "bytes", + "futures-core", + "futures-sink", + "memchr", + "pin-project-lite", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "actix-http" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44dfe5c9e0004c623edc65391dfd51daa201e7e30ebd9c9bedf873048ec32bc2" +dependencies = [ + "actix-codec", + "actix-rt", + "actix-service", + "actix-utils", + "base64", + "bitflags 2.9.1", + "brotli", + "bytes", + "bytestring", + "derive_more", + "encoding_rs", + "flate2", + "foldhash", + "futures-core", + "h2 0.3.26", + "http 0.2.12", + "httparse", + "httpdate", + "itoa", + "language-tags", + "local-channel", + "mime", + "percent-encoding", + "pin-project-lite", + "rand 0.9.1", + "sha1", + "smallvec", + "tokio", + "tokio-util", + "tracing", + "zstd", +] + +[[package]] +name = "actix-macros" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" +dependencies = [ + "quote", + "syn 2.0.101", +] + +[[package]] +name = "actix-router" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13d324164c51f63867b57e73ba5936ea151b8a41a1d23d1031eeb9f70d0236f8" +dependencies = [ + "bytestring", + "cfg-if", + "http 0.2.12", + "regex", + "regex-lite", + "serde", + "tracing", +] + +[[package]] +name = "actix-rt" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24eda4e2a6e042aa4e55ac438a2ae052d3b5da0ecf83d7411e1a368946925208" +dependencies = [ + "futures-core", + "tokio", +] + +[[package]] +name = "actix-server" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a65064ea4a457eaf07f2fba30b4c695bf43b721790e9530d26cb6f9019ff7502" +dependencies = [ + "actix-rt", + "actix-service", + "actix-utils", + "futures-core", + "futures-util", + "mio", + "socket2", + "tokio", + "tracing", +] + +[[package]] +name = "actix-service" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e46f36bf0e5af44bdc4bdb36fbbd421aa98c79a9bce724e1edeb3894e10dc7f" +dependencies = [ + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "actix-utils" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a1dcdff1466e3c2488e1cb5c36a71822750ad43839937f85d2f4d9f8b705d8" +dependencies = [ + "local-waker", + "pin-project-lite", +] + +[[package]] +name = "actix-web" +version = "4.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a597b77b5c6d6a1e1097fddde329a83665e25c5437c696a3a9a4aa514a614dea" +dependencies = [ + "actix-codec", + "actix-http", + "actix-macros", + "actix-router", + "actix-rt", + "actix-server", + "actix-service", + "actix-utils", + "actix-web-codegen", + "bytes", + "bytestring", + "cfg-if", + "cookie", + "derive_more", + "encoding_rs", + "foldhash", + "futures-core", + "futures-util", + "impl-more", + "itoa", + "language-tags", + "log", + "mime", + "once_cell", + "pin-project-lite", + "regex", + "regex-lite", + "serde", + "serde_json", + "serde_urlencoded", + "smallvec", + "socket2", + "time", + "tracing", + "url", +] + +[[package]] +name = "actix-web-codegen" +version = "4.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f591380e2e68490b5dfaf1dd1aa0ebe78d84ba7067078512b4ea6e4492d622b8" +dependencies = [ + "actix-router", + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "addr2line" version = "0.24.2" @@ -38,6 +221,21 @@ dependencies = [ "memchr", ] +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + [[package]] name = "allocator-api2" version = "0.2.21" @@ -46,9 +244,9 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "alloy" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b4ae82946772d69f868b9ef81fc66acb1b149ef9b4601849bec4bcf5da6552e" +checksum = "8a66e45d962abb2e1e8a505d97af34d92137b82f6cabbfb373406a9220dc7dca" dependencies = [ "alloy-consensus", "alloy-contract", @@ -68,9 +266,9 @@ dependencies = [ [[package]] name = "alloy-chains" -version = "0.1.69" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28e2652684758b0d9b389d248b209ed9fd9989ef489a550265fe4bb8454fe7eb" +checksum = "19a9cc9d81ace3da457883b0bdf76776e55f1b84219a9e9d55c27ad308548d3f" dependencies = [ "alloy-primitives", "num_enum", @@ -79,22 +277,24 @@ dependencies = [ [[package]] name = "alloy-consensus" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fbf458101ed6c389e9bb70a34ebc56039868ad10472540614816cdedc8f5265" +checksum = "2bcb57295c4b632b6b3941a089ee82d00ff31ff9eb3eac801bf605ffddc81041" dependencies = [ "alloy-eips", "alloy-primitives", "alloy-rlp", "alloy-serde", "alloy-trie", + "alloy-tx-macros", "auto_impl", "c-kzg", - "derive_more 2.0.1", + "derive_more", "either", "k256", "once_cell", "rand 0.8.5", + "secp256k1", "serde", "serde_with", "thiserror 2.0.12", @@ -102,9 +302,9 @@ dependencies = [ [[package]] name = "alloy-consensus-any" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc982af629e511292310fe85b433427fd38cb3105147632b574abc997db44c91" +checksum = "3ab669be40024565acb719daf1b2a050e6dc065fc0bec6050d97a81cdb860bd7" dependencies = [ "alloy-consensus", "alloy-eips", @@ -116,9 +316,9 @@ dependencies = [ [[package]] name = "alloy-contract" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0a0c1ddee20ecc14308aae21c2438c994df7b39010c26d70f86e1d8fdb8db0" +checksum = "8ba5d28e15c14226f243d6e329611840135e1b0fa31feaea57c461e0b03b4c7b" dependencies = [ "alloy-consensus", "alloy-dyn-abi", @@ -132,14 +332,15 @@ dependencies = [ "alloy-transport", "futures", "futures-util", + "serde_json", "thiserror 2.0.12", ] [[package]] name = "alloy-core" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d8bcce99ad10fe02640cfaec1c6bc809b837c783c1d52906aa5af66e2a196f6" +checksum = "5968f48d7a62587cd874bd84034831da4f7f577ce5de984828e376766efc0f32" dependencies = [ "alloy-dyn-abi", "alloy-json-abi", @@ -150,15 +351,14 @@ dependencies = [ [[package]] name = "alloy-dyn-abi" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb8e762aefd39a397ff485bc86df673465c4ad3ec8819cc60833a8a3ba5cdc87" +checksum = "f9135eb501feccf7f4cb8a183afd406a65483fdad7bbd7332d0470e5d725c92f" dependencies = [ "alloy-json-abi", "alloy-primitives", "alloy-sol-type-parser", "alloy-sol-types", - "const-hex", "itoa", "serde", "serde_json", @@ -167,9 +367,9 @@ dependencies = [ [[package]] name = "alloy-eip2124" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "675264c957689f0fd75f5993a73123c2cc3b5c235a38f5b9037fe6c826bfb2c0" +checksum = "741bdd7499908b3aa0b159bba11e71c8cddd009a2c2eb7a06e825f1ec87900a5" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -180,9 +380,9 @@ dependencies = [ [[package]] name = "alloy-eip2930" -version = "0.1.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0069cf0642457f87a01a014f6dc29d5d893cd4fd8fddf0c3cdfad1bb3ebafc41" +checksum = "7b82752a889170df67bbb36d42ca63c531eb16274f0d7299ae2a680facba17bd" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -191,9 +391,9 @@ dependencies = [ [[package]] name = "alloy-eip7702" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b15b13d38b366d01e818fe8e710d4d702ef7499eacd44926a06171dd9585d0c" +checksum = "9d4769c6ffddca380b0070d71c8b7f30bed375543fe76bb2f74ec0acf4b7cd16" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -203,9 +403,9 @@ dependencies = [ [[package]] name = "alloy-eips" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e86967eb559920e4b9102e4cb825fe30f2e9467988353ce4809f0d3f2c90cd4" +checksum = "4f853de9ca1819f54de80de5d03bfc1bb7c9fafcf092b480a654447141bc354d" dependencies = [ "alloy-eip2124", "alloy-eip2930", @@ -215,18 +415,17 @@ dependencies = [ "alloy-serde", "auto_impl", "c-kzg", - "derive_more 2.0.1", + "derive_more", "either", - "once_cell", "serde", "sha2", ] [[package]] name = "alloy-genesis" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a40de6f5b53ecf5fd7756072942f41335426d9a3704cd961f77d854739933bcf" +checksum = "8500bcc1037901953771c25cb77e0d4ec0bffd938d93a04715390230d21a612d" dependencies = [ "alloy-eips", "alloy-primitives", @@ -237,9 +436,9 @@ dependencies = [ [[package]] name = "alloy-json-abi" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe6beff64ad0aa6ad1019a3db26fef565aefeb011736150ab73ed3366c3cfd1b" +checksum = "8b26fdd571915bafe857fccba4ee1a4f352965800e46a53e4a5f50187b7776fa" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -249,12 +448,13 @@ dependencies = [ [[package]] name = "alloy-json-rpc" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27434beae2514d4a2aa90f53832cbdf6f23e4b5e2656d95eaf15f9276e2418b6" +checksum = "f4997a9873c8639d079490f218e50e5fa07e70f957e9fc187c0a0535977f482f" dependencies = [ "alloy-primitives", "alloy-sol-types", + "http 1.3.1", "serde", "serde_json", "thiserror 2.0.12", @@ -263,9 +463,9 @@ dependencies = [ [[package]] name = "alloy-network" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26a33a38c7486b1945f8d093ff027add2f3a8f83c7300dbad6165cc49150085e" +checksum = "a0306e8d148b7b94d988615d367443c1b9d6d2e9fecd2e1f187ac5153dce56f5" dependencies = [ "alloy-consensus", "alloy-consensus-any", @@ -280,7 +480,7 @@ dependencies = [ "alloy-sol-types", "async-trait", "auto_impl", - "derive_more 2.0.1", + "derive_more", "futures-utils-wasm", "serde", "serde_json", @@ -289,9 +489,9 @@ dependencies = [ [[package]] name = "alloy-network-primitives" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db973a7a23cbe96f2958e5687c51ce2d304b5c6d0dc5ccb3de8667ad8476f50b" +checksum = "3eef189583f4c53d231dd1297b28a675ff842b551fb34715f562868a1937431a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -302,15 +502,15 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c77490fe91a0ce933a1f219029521f20fc28c2c0ca95d53fa4da9c00b8d9d4e" +checksum = "a326d47106039f38b811057215a92139f46eef7983a4b77b10930a0ea5685b1e" dependencies = [ "alloy-rlp", "bytes", "cfg-if", "const-hex", - "derive_more 2.0.1", + "derive_more", "foldhash", "hashbrown 0.15.3", "indexmap 2.9.0", @@ -319,7 +519,7 @@ dependencies = [ "keccak-asm", "paste", "proptest", - "rand 0.8.5", + "rand 0.9.1", "ruint", "rustc-hash", "serde", @@ -329,9 +529,9 @@ dependencies = [ [[package]] name = "alloy-provider" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b03bde77ad73feae14aa593bcabb932c8098c0f0750ead973331cfc0003a4e1" +checksum = "ea624ddcdad357c33652b86aa7df9bd21afd2080973389d3facf1a221c573948" dependencies = [ "alloy-chains", "alloy-consensus", @@ -342,6 +542,7 @@ dependencies = [ "alloy-primitives", "alloy-rpc-client", "alloy-rpc-types-eth", + "alloy-signer", "alloy-sol-types", "alloy-transport", "alloy-transport-http", @@ -349,8 +550,10 @@ dependencies = [ "async-trait", "auto_impl", "dashmap", + "either", "futures", "futures-utils-wasm", + "http 1.3.1", "lru", "parking_lot", "pin-project", @@ -366,9 +569,9 @@ dependencies = [ [[package]] name = "alloy-rlp" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6c1d995bff8d011f7cd6c81820d51825e6e06d6db73914c1630ecf544d83d6" +checksum = "5f70d83b765fdc080dbcd4f4db70d8d23fe4761f2f02ebfa9146b833900634b4" dependencies = [ "alloy-rlp-derive", "arrayvec", @@ -377,9 +580,9 @@ dependencies = [ [[package]] name = "alloy-rlp-derive" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a40e1ef334153322fd878d07e86af7a529bcb86b2439525920a88eba87bcf943" +checksum = "64b728d511962dda67c1bc7ea7c03736ec275ed2cf4c35d9585298ac9ccf3b73" dependencies = [ "proc-macro2", "quote", @@ -388,9 +591,9 @@ dependencies = [ [[package]] name = "alloy-rpc-client" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445a3298c14fae7afb5b9f2f735dead989f3dd83020c2ab8e48ed95d7b6d1acb" +checksum = "e43d00b4de38432304c4e4b01ae6a3601490fd9824c852329d158763ec18663c" dependencies = [ "alloy-json-rpc", "alloy-primitives", @@ -413,9 +616,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9157deaec6ba2ad7854f16146e4cd60280e76593eed79fdcb06e0fa8b6c60f77" +checksum = "3bf22ddb69a436f28bbdda7daf34fe011ee9926fa13bfce89fa023aca9ce2b2f" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", @@ -425,9 +628,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-any" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604dea1f00fd646debe8033abe8e767c732868bf8a5ae9df6321909ccbc99c56" +checksum = "5958f2310d69f4806e6f6b90ceb4f2b781cc5a843517a7afe2e7cfec6de3cfb9" dependencies = [ "alloy-consensus-any", "alloy-rpc-types-eth", @@ -436,9 +639,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-eth" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e13d71eac04513a71af4b3df580f52f2b4dcbff9d971cc9a52519acf55514cb" +checksum = "1826285e4ffc2372a8c061d5cc145858e67a0be3309b768c5b77ddb6b9e6cbc7" dependencies = [ "alloy-consensus", "alloy-consensus-any", @@ -448,7 +651,7 @@ dependencies = [ "alloy-rlp", "alloy-serde", "alloy-sol-types", - "itertools 0.14.0", + "itertools 0.13.0", "serde", "serde_json", "thiserror 2.0.12", @@ -456,9 +659,9 @@ dependencies = [ [[package]] name = "alloy-serde" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a1cd73fc054de6353c7f22ff9b846b0f0f145cd0112da07d4119e41e9959207" +checksum = "906ce0190afeded19cb2e963cb8507c975a7862216b9e74f39bf91ddee6ae74b" dependencies = [ "alloy-primitives", "serde", @@ -467,9 +670,9 @@ dependencies = [ [[package]] name = "alloy-signer" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c96fbde54bee943cd94ebacc8a62c50b38c7dfd2552dcd79ff61aea778b1bfcc" +checksum = "c89baab06195c4be9c5d66f15c55e948013d1aff3ec1cfb0ed469e1423313fce" dependencies = [ "alloy-primitives", "async-trait", @@ -482,9 +685,9 @@ dependencies = [ [[package]] name = "alloy-signer-local" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc6e72002cc1801d8b41e9892165e3a6551b7bd382bd9d0414b21e90c0c62551" +checksum = "8a249a923e302ac6db932567c43945392f0b6832518aab3c4274858f58756774" dependencies = [ "alloy-consensus", "alloy-network", @@ -498,9 +701,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10ae8e9a91d328ae954c22542415303919aabe976fe7a92eb06db1b68fd59f2" +checksum = "d4be1ce1274ddd7fdfac86e5ece1b225e9bba1f2327e20fbb30ee6b9cc1423fe" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", @@ -512,9 +715,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro-expander" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83ad5da86c127751bc607c174d6c9fe9b85ef0889a9ca0c641735d77d4f98f26" +checksum = "01e92f3708ea4e0d9139001c86c051c538af0146944a2a9c7181753bd944bf57" dependencies = [ "alloy-json-abi", "alloy-sol-macro-input", @@ -531,9 +734,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro-input" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3d30f0d3f9ba3b7686f3ff1de9ee312647aac705604417a2f40c604f409a9e" +checksum = "9afe1bd348a41f8c9b4b54dfb314886786d6201235b0b3f47198b9d910c86bb2" dependencies = [ "alloy-json-abi", "const-hex", @@ -549,9 +752,9 @@ dependencies = [ [[package]] name = "alloy-sol-type-parser" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d162f8524adfdfb0e4bd0505c734c985f3e2474eb022af32eef0d52a4f3935c" +checksum = "d6195df2acd42df92a380a8db6205a5c7b41282d0ce3f4c665ecf7911ac292f1" dependencies = [ "serde", "winnow", @@ -559,26 +762,26 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d43d5e60466a440230c07761aa67671d4719d46f43be8ea6e7ed334d8db4a9ab" +checksum = "6185e98a79cf19010722f48a74b5a65d153631d2f038cabd250f4b9e9813b8ad" dependencies = [ "alloy-json-abi", "alloy-primitives", "alloy-sol-macro", - "const-hex", "serde", ] [[package]] name = "alloy-transport" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec325c2af8562ef355c02aeb527c755a07e9d8cf6a1e65dda8d0bf23e29b2c" +checksum = "6d1ae10b1bc77fde38161e242749e41e65e34000d05da0a3d3f631e03bfcb19e" dependencies = [ "alloy-json-rpc", + "alloy-primitives", "base64", - "derive_more 2.0.1", + "derive_more", "futures", "futures-utils-wasm", "parking_lot", @@ -594,9 +797,9 @@ dependencies = [ [[package]] name = "alloy-transport-http" -version = "0.12.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a082c9473c6642cce8b02405a979496126a03b096997888e86229afad05db06c" +checksum = "b234272ee449e32c9f1afbbe4ee08ea7c4b52f14479518f95c844ab66163c545" dependencies = [ "alloy-json-rpc", "alloy-transport", @@ -609,20 +812,33 @@ dependencies = [ [[package]] name = "alloy-trie" -version = "0.7.9" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95a94854e420f07e962f7807485856cde359ab99ab6413883e15235ad996e8b" +checksum = "983d99aa81f586cef9dae38443245e585840fcf0fc58b09aee0b1f27aed1d500" dependencies = [ "alloy-primitives", "alloy-rlp", "arrayvec", - "derive_more 1.0.0", + "derive_more", "nybbles", "serde", "smallvec", "tracing", ] +[[package]] +name = "alloy-tx-macros" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b75ef8609ea2b31c799b0a56c724dca4c73105c5ccc205d9dfeb1d038df6a1da" +dependencies = [ + "alloy-primitives", + "darling", + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "android-tzdata" version = "0.1.1" @@ -638,6 +854,56 @@ dependencies = [ "libc", ] +[[package]] +name = "anstream" +version = "0.6.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" + +[[package]] +name = "anstyle-parse" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6680de5231bd6ee4c6191b8a1325daa282b415391ec9d3a37bd34f2060dc73fa" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys 0.59.0", +] + [[package]] name = "anyhow" version = "1.0.98" @@ -1083,6 +1349,12 @@ dependencies = [ "syn 2.0.101", ] +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + [[package]] name = "auto_impl" version = "1.3.0" @@ -1157,6 +1429,22 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" +[[package]] +name = "bitcoin-io" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b47c4ab7a93edb0c7198c5535ed9b52b63095f4e9b45279c6736cec4b856baf" + +[[package]] +name = "bitcoin_hashes" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb18c03d0db0247e147a21a6faafd5a7eb851c743db062de72018b6b7e8e4d16" +dependencies = [ + "bitcoin-io", + "hex-conservative", +] + [[package]] name = "bitflags" version = "1.3.2" @@ -1165,9 +1453,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" +checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" [[package]] name = "bitvec" @@ -1253,6 +1541,27 @@ dependencies = [ "syn 2.0.101", ] +[[package]] +name = "brotli" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9991eea70ea4f293524138648e41ee89b0b2b12ddef3b255effa43c8056e0e0d" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + [[package]] name = "bumpalo" version = "3.17.0" @@ -1300,11 +1609,20 @@ dependencies = [ "serde", ] +[[package]] +name = "bytestring" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e465647ae23b2823b0753f50decb2d5a86d2bb2cac04788fafd1f80e45378e5f" +dependencies = [ + "bytes", +] + [[package]] name = "c-kzg" -version = "1.0.3" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0307f72feab3300336fb803a57134159f6e20139af1357f36c54cb90d8e8928" +checksum = "7318cfa722931cb5fe0838b98d3ce5621e75f6a6408abc21721d80de9223f2e4" dependencies = [ "blst", "cc", @@ -1349,10 +1667,12 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.21" +version = "1.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8691782945451c1c383942c4874dbe63814f61cb57ef773cda2972682b7bb3c0" +checksum = "d0fc897dc1e865cc67c0e05a836d9d3f1df3cbe442aa4a9473b18e12624a4951" dependencies = [ + "jobserver", + "libc", "shlex", ] @@ -1388,35 +1708,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15" [[package]] -name = "commons" -version = "0.1.0" -dependencies = [ - "anyhow", - "fhe", - "fhe-traits", -] - -[[package]] -name = "compute-provider" -version = "0.1.0" -dependencies = [ - "ark-bn254 0.4.0", - "ark-ff 0.4.2", - "hex", - "lean-imt", - "light-poseidon", - "num-bigint", - "num-traits", - "rayon", - "serde", - "sha3", -] +name = "colorchoice" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "const-hex" -version = "1.14.0" +version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b0485bab839b018a8f1723fc5391819fea5f8f0f32288ef8a735fd096b6160c" +checksum = "83e22e0ed40b96a48d3db274f72fd365bd78f67af39b6bbd47e8a15e1c6207ff" dependencies = [ "cfg-if", "cpufeatures", @@ -1451,6 +1752,17 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "cookie" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" +dependencies = [ + "percent-encoding", + "time", + "version_check", +] + [[package]] name = "core-foundation" version = "0.9.4" @@ -1502,6 +1814,29 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crisp-program" +version = "0.1.0" +dependencies = [ + "actix-web", + "e3-compute-provider", + "env_logger", + "program-client", + "serde", + "serde_json", + "tokio", + "voting-host", +] + [[package]] name = "crossbeam-deque" version = "0.8.6" @@ -1666,33 +2001,13 @@ dependencies = [ "syn 2.0.101", ] -[[package]] -name = "derive_more" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" -dependencies = [ - "derive_more-impl 1.0.0", -] - [[package]] name = "derive_more" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" dependencies = [ - "derive_more-impl 2.0.1", -] - -[[package]] -name = "derive_more-impl" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", + "derive_more-impl", ] [[package]] @@ -1794,6 +2109,34 @@ dependencies = [ "proc-macro-error", ] +[[package]] +name = "e3-bfv-helpers" +version = "0.1.0" +dependencies = [ + "alloy-dyn-abi", + "alloy-primitives", + "anyhow", + "fhe", + "fhe-traits", + "rand 0.8.5", +] + +[[package]] +name = "e3-compute-provider" +version = "0.1.0" +dependencies = [ + "ark-bn254 0.4.0", + "ark-ff 0.4.2", + "hex", + "lean-imt", + "light-poseidon", + "num-bigint", + "num-traits", + "rayon", + "serde", + "sha3", +] + [[package]] name = "ecdsa" version = "0.16.9" @@ -1897,6 +2240,29 @@ dependencies = [ "syn 2.0.101", ] +[[package]] +name = "env_filter" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "env_logger" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" +dependencies = [ + "anstream", + "anstyle", + "env_filter", + "jiff", + "log", +] + [[package]] name = "equivalent" version = "1.0.2" @@ -1905,9 +2271,9 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" +checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18" dependencies = [ "libc", "windows-sys 0.59.0", @@ -1915,9 +2281,9 @@ dependencies = [ [[package]] name = "ethnum" -version = "1.5.1" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0939f82868b77ef93ce3c3c3daf2b3c526b456741da5a1a4559e590965b6026b" +checksum = "ca81e6b4777c89fd810c25a4be2b1bd93ea034fbe58e6a75216a34c6b82c539b" [[package]] name = "fastrand" @@ -1960,7 +2326,7 @@ dependencies = [ [[package]] name = "fhe" version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs?branch=feature%2Fgreco-integration#b529be34a8b6cfa589b3ce451dbba0ce0126b92a" +source = "git+https://github.com/gnosisguild/fhe.rs#11cdd749a8e01c486160d5f62572c4520af5358f" dependencies = [ "doc-comment", "fhe-math", @@ -1983,7 +2349,7 @@ dependencies = [ [[package]] name = "fhe-math" version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs?branch=feature%2Fgreco-integration#b529be34a8b6cfa589b3ce451dbba0ce0126b92a" +source = "git+https://github.com/gnosisguild/fhe.rs#11cdd749a8e01c486160d5f62572c4520af5358f" dependencies = [ "ethnum", "fhe-traits", @@ -2005,7 +2371,7 @@ dependencies = [ [[package]] name = "fhe-traits" version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs?branch=feature%2Fgreco-integration#b529be34a8b6cfa589b3ce451dbba0ce0126b92a" +source = "git+https://github.com/gnosisguild/fhe.rs#11cdd749a8e01c486160d5f62572c4520af5358f" dependencies = [ "rand 0.8.5", ] @@ -2013,7 +2379,7 @@ dependencies = [ [[package]] name = "fhe-util" version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs?branch=feature%2Fgreco-integration#b529be34a8b6cfa589b3ce451dbba0ce0126b92a" +source = "git+https://github.com/gnosisguild/fhe.rs#11cdd749a8e01c486160d5f62572c4520af5358f" dependencies = [ "itertools 0.12.1", "num-bigint-dig", @@ -2041,6 +2407,16 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" +[[package]] +name = "flate2" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + [[package]] name = "fnv" version = "1.0.7" @@ -2231,9 +2607,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" dependencies = [ "cfg-if", "js-sys", @@ -2253,17 +2629,55 @@ checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" name = "glob" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "h2" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap 2.9.0", + "slab", + "tokio", + "tokio-util", + "tracing", +] [[package]] -name = "group" -version = "0.13.0" +name = "h2" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +checksum = "a9421a676d1b147b16b82c9225157dc629087ef8ec4d5e2960f9437a90dac0a5" dependencies = [ - "ff", - "rand_core 0.6.4", - "subtle", + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.3.1", + "indexmap 2.9.0", + "slab", + "tokio", + "tokio-util", + "tracing", ] [[package]] @@ -2325,9 +2739,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.3.9" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +checksum = "f154ce46856750ed433c8649605bf7ed2de3bc35fd9d2a9f30cddd873c80cb08" [[package]] name = "hex" @@ -2338,6 +2752,15 @@ dependencies = [ "serde", ] +[[package]] +name = "hex-conservative" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5313b072ce3c597065a808dbf612c4c8e8590bdbf8b579508bf7a762c5eae6cd" +dependencies = [ + "arrayvec", +] + [[package]] name = "hex-literal" version = "0.4.1" @@ -2353,6 +2776,17 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + [[package]] name = "http" version = "1.3.1" @@ -2371,7 +2805,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http", + "http 1.3.1", ] [[package]] @@ -2382,7 +2816,7 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http", + "http 1.3.1", "http-body", "pin-project-lite", ] @@ -2393,6 +2827,12 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + [[package]] name = "hyper" version = "1.6.0" @@ -2402,7 +2842,8 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "http", + "h2 0.4.10", + "http 1.3.1", "http-body", "httparse", "itoa", @@ -2414,12 +2855,11 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.5" +version = "0.27.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" +checksum = "03a01595e11bdcec50946522c32dde3fc6914743000a68b93000965f2f02406d" dependencies = [ - "futures-util", - "http", + "http 1.3.1", "hyper", "hyper-util", "rustls", @@ -2427,7 +2867,7 @@ dependencies = [ "tokio", "tokio-rustls", "tower-service", - "webpki-roots 0.26.11", + "webpki-roots", ] [[package]] @@ -2448,22 +2888,28 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.11" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497bbc33a26fdd4af9ed9c70d63f61cf56a938375fbb32df34db9b1cd6d643f2" +checksum = "b1c293b6b3d21eca78250dc7dbebd6b9210ec5530e038cbfe0661b5c47ab06e8" dependencies = [ + "base64", "bytes", "futures-channel", + "futures-core", "futures-util", - "http", + "http 1.3.1", "http-body", "hyper", + "ipnet", "libc", + "percent-encoding", "pin-project-lite", "socket2", + "system-configuration", "tokio", "tower-service", "tracing", + "windows-registry", ] [[package]] @@ -2539,9 +2985,9 @@ checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" [[package]] name = "icu_properties" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2549ca8c7241c82f59c80ba2a6f415d931c5b58d24fb8412caa1a1f02c49139a" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" dependencies = [ "displaydoc", "icu_collections", @@ -2555,9 +3001,9 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8197e866e47b68f8f7d95249e172903bec06004b18b2937f1095d40a0c57de04" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" [[package]] name = "icu_provider" @@ -2612,6 +3058,12 @@ dependencies = [ "parity-scale-codec", ] +[[package]] +name = "impl-more" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a5a9a0ff0086c7a148acb942baaabeadf9504d10400b5a05645853729b9cd2" + [[package]] name = "impl-trait-for-tuples" version = "0.2.3" @@ -2657,6 +3109,22 @@ version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +[[package]] +name = "iri-string" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + [[package]] name = "itertools" version = "0.10.5" @@ -2699,6 +3167,40 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +[[package]] +name = "jiff" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a194df1107f33c79f4f93d02c80798520551949d59dfad22b6157048a88cca93" +dependencies = [ + "jiff-static", + "log", + "portable-atomic", + "portable-atomic-util", + "serde", +] + +[[package]] +name = "jiff-static" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c6e1db7ed32c6c71b759497fae34bf7933636f75a251b9e736555da426f6442" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "jobserver" +version = "0.1.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" +dependencies = [ + "getrandom 0.3.3", + "libc", +] + [[package]] name = "js-sys" version = "0.3.77" @@ -2742,6 +3244,12 @@ dependencies = [ "sha3-asm", ] +[[package]] +name = "language-tags" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" + [[package]] name = "lazy-regex" version = "3.4.1" @@ -2801,7 +3309,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "libc", ] @@ -2829,11 +3337,28 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" +[[package]] +name = "local-channel" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6cbc85e69b8df4b8bb8b89ec634e7189099cea8927a276b7384ce5488e53ec8" +dependencies = [ + "futures-core", + "futures-sink", + "local-waker", +] + +[[package]] +name = "local-waker" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d873d7c67ce09b42110d801813efbc9364414e356be9935700d368351657487" + [[package]] name = "lock_api" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" dependencies = [ "autocfg", "scopeguard", @@ -2854,6 +3379,12 @@ dependencies = [ "hashbrown 0.15.3", ] +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + [[package]] name = "macro-string" version = "0.1.4" @@ -2885,9 +3416,9 @@ dependencies = [ [[package]] name = "matrixmultiply" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a" +checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08" dependencies = [ "autocfg", "rawpointer", @@ -2928,7 +3459,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "block", "core-graphics-types", "foreign-types 0.5.0", @@ -2967,20 +3498,21 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", + "log", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "multimap" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" +checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084" [[package]] name = "native-tls" @@ -3127,9 +3659,9 @@ dependencies = [ [[package]] name = "num_cpus" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" dependencies = [ "hermit-abi", "libc", @@ -3192,13 +3724,19 @@ version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +[[package]] +name = "once_cell_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" + [[package]] name = "openssl" -version = "0.10.72" +version = "0.10.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fedfea7d58a1f73118430a55da6a286e7b044961736ce96a16a17068ea25e5da" +checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "cfg-if", "foreign-types 0.3.2", "libc", @@ -3226,9 +3764,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.108" +version = "0.9.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e145e1651e858e820e4860f7b9c5e169bc1d8ce1c86043be79fa7b7634821847" +checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" dependencies = [ "cc", "libc", @@ -3250,9 +3788,9 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "parity-scale-codec" -version = "3.7.4" +version = "3.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9fde3d0718baf5bc92f577d652001da0f8d54cd03a7974e118d04fc888dc23d" +checksum = "799781ae679d79a948e13d4824a40970bfa500058d245760dd857301059810fa" dependencies = [ "arrayvec", "bitvec", @@ -3266,9 +3804,9 @@ dependencies = [ [[package]] name = "parity-scale-codec-derive" -version = "3.7.4" +version = "3.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581c837bb6b9541ce7faa9377c20616e4fb7650f6b0f68bc93c827ee504fb7b3" +checksum = "34b4653168b563151153c9e4c08ebed57fb8262bebfa79711552fa983c623e7a" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -3278,9 +3816,9 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" dependencies = [ "lock_api", "parking_lot_core", @@ -3288,9 +3826,9 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.10" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" dependencies = [ "cfg-if", "libc", @@ -3380,6 +3918,21 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +[[package]] +name = "portable-atomic" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" + +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] + [[package]] name = "postcard" version = "1.1.1" @@ -3418,9 +3971,9 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.32" +version = "0.2.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "664ec5419c51e34154eec046ebcba56312d5a2fc3b09a06da188e1ad21afadf6" +checksum = "9dee91521343f4c5c6a63edd65e54f31f5c92fe8978c40a4282f8372194c6a7d" dependencies = [ "proc-macro2", "syn 2.0.101", @@ -3512,6 +4065,15 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "program-client" +version = "0.1.0" +dependencies = [ + "anyhow", + "reqwest", + "serde", +] + [[package]] name = "proptest" version = "1.6.0" @@ -3520,7 +4082,7 @@ checksum = "14cae93065090804185d3b75f0bf93b8eeda30c7a9b4a33d3bdb3988d6229e50" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.9.0", + "bitflags 2.9.1", "lazy_static", "num-traits", "rand 0.8.5", @@ -3616,9 +4178,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quinn" -version = "0.11.7" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3bd15a6f2967aef83887dcb9fec0014580467e33720d073560cf015a5683012" +checksum = "626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8" dependencies = [ "bytes", "cfg_aliases", @@ -3636,12 +4198,13 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.11" +version = "0.11.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcbafbbdbb0f638fe3f35f3c56739f77a8a1d070cb25603226c83339b391472b" +checksum = "49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e" dependencies = [ "bytes", - "getrandom 0.3.2", + "getrandom 0.3.3", + "lru-slab", "rand 0.9.1", "ring", "rustc-hash", @@ -3709,6 +4272,7 @@ checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.3", + "serde", ] [[package]] @@ -3746,7 +4310,8 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ - "getrandom 0.3.2", + "getrandom 0.3.3", + "serde", ] [[package]] @@ -3790,7 +4355,7 @@ version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", ] [[package]] @@ -3836,6 +4401,12 @@ dependencies = [ "regex-syntax 0.8.5", ] +[[package]] +name = "regex-lite" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53a49587ad06b26609c52e423de037e7f57f20d53535d66e08c695f347df952a" + [[package]] name = "regex-syntax" version = "0.6.29" @@ -3850,16 +4421,18 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" -version = "0.12.15" +version = "0.12.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d19c46a6fdd48bc4dab94b6103fccc55d34c67cc0ad04653aad4ea2a07cd7bbb" +checksum = "e98ff6b0dbbe4d5a37318f433d4fc82babd21631f194d370409ceb2e40b2f0b5" dependencies = [ "base64", "bytes", + "encoding_rs", "futures-channel", "futures-core", "futures-util", - "http", + "h2 0.4.10", + "http 1.3.1", "http-body", "http-body-util", "hyper", @@ -3876,7 +4449,6 @@ dependencies = [ "pin-project-lite", "quinn", "rustls", - "rustls-pemfile", "rustls-pki-types", "serde", "serde_json", @@ -3887,14 +4459,14 @@ dependencies = [ "tokio-rustls", "tokio-util", "tower", + "tower-http", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots 0.26.11", - "windows-registry", + "webpki-roots", ] [[package]] @@ -3929,7 +4501,7 @@ checksum = "f4fe7599ac55ad77515608ec42a9727001559fe4f579c533cb7c973b54800c05" dependencies = [ "anyhow", "borsh", - "derive_more 2.0.1", + "derive_more", "elf", "lazy_static", "postcard", @@ -3942,9 +4514,9 @@ dependencies = [ [[package]] name = "risc0-build" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31d104165340cba919a3dac26c4be7da04b20b941601a7ad50c04834c4d26de5" +checksum = "d17d6657b1fb615c0482bd4b57aae7850911ed7dbdc8e783df20e93f33209a8f" dependencies = [ "anyhow", "cargo_metadata", @@ -3966,8 +4538,8 @@ dependencies = [ [[package]] name = "risc0-build-ethereum" -version = "2.0.0" -source = "git+https://github.com/risc0/risc0-ethereum?tag=v2.0.0#38591d7a1302d437b76937bd3e0432005b33f616" +version = "2.2.0" +source = "git+https://github.com/risc0/risc0-ethereum?tag=v2.2.0#382d76a8040068243a5d13e3de50fcca4224b0d6" dependencies = [ "anyhow", "bytemuck", @@ -3979,9 +4551,9 @@ dependencies = [ [[package]] name = "risc0-circuit-keccak" -version = "2.0.1" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd8acfc84307ed1be64cf9fefc390963fc22b2865d027f03405977a0cfa9747" +checksum = "8d339c65b0e011677404bd6bdfe1b0f29748187a568fb2f74df7fb650590181a" dependencies = [ "anyhow", "bytemuck", @@ -3995,9 +4567,9 @@ dependencies = [ [[package]] name = "risc0-circuit-recursion" -version = "2.0.1" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd1514e94440e2da301f48d345e1937b315147f58c5dc4992feb045324651d" +checksum = "8c6501fd3936aea2dd3e55915f34328fe96e6ca25ef00320242f837ae668785b" dependencies = [ "anyhow", "bytemuck", @@ -4010,14 +4582,14 @@ dependencies = [ [[package]] name = "risc0-circuit-rv32im" -version = "2.0.3" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f6ed144d8b8f93c4a6096e3dd90f9dcbd91eff83eae690a72fd6e640760b94" +checksum = "c80e0a8f0f56106295bb682dbc27093438e163a5f6384a79e877ab895a11d9ae" dependencies = [ "anyhow", "bit-vec", "bytemuck", - "derive_more 2.0.1", + "derive_more", "paste", "risc0-binfmt", "risc0-core", @@ -4039,8 +4611,8 @@ dependencies = [ [[package]] name = "risc0-ethereum-contracts" -version = "2.0.0" -source = "git+https://github.com/risc0/risc0-ethereum?tag=v2.0.0#38591d7a1302d437b76937bd3e0432005b33f616" +version = "2.2.0" +source = "git+https://github.com/risc0/risc0-ethereum?tag=v2.2.0#382d76a8040068243a5d13e3de50fcca4224b0d6" dependencies = [ "alloy", "alloy-sol-types", @@ -4109,9 +4681,9 @@ dependencies = [ [[package]] name = "risc0-zkvm" -version = "2.0.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a049319790277845335445b549d49e66341f4a7ffba7f7aaa1e77e2fc4a9c19" +checksum = "0f1014d2efcb3b359aff878c9aeb6aa949a6d91f091a2ffb5ffd8d928a1ab7f3" dependencies = [ "anyhow", "bincode", @@ -4119,7 +4691,7 @@ dependencies = [ "borsh", "bytemuck", "bytes", - "derive_more 2.0.1", + "derive_more", "getrandom 0.2.16", "hex", "lazy-regex", @@ -4153,7 +4725,7 @@ dependencies = [ "bytemuck", "cfg-if", "getrandom 0.2.16", - "getrandom 0.3.2", + "getrandom 0.3.3", "libm", "stability", ] @@ -4180,9 +4752,9 @@ dependencies = [ [[package]] name = "ruint" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78a46eb779843b2c4f21fac5773e25d6d5b7c8f0922876c91541790d2ca27eef" +checksum = "11256b5fe8c68f56ac6f39ef0720e592f33d2367a4782740d9c9142e889c7fb4" dependencies = [ "alloy-rlp", "ark-ff 0.3.0", @@ -4253,7 +4825,7 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "errno", "libc", "linux-raw-sys", @@ -4274,15 +4846,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "rustls-pemfile" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" -dependencies = [ - "rustls-pki-types", -] - [[package]] name = "rustls-pki-types" version = "1.12.0" @@ -4295,9 +4858,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.2" +version = "0.103.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7149975849f1abb3832b246010ef62ccc80d3a76169517ada7188252b9cfb437" +checksum = "e4a72fe2bcf7a6ac6fd7d0b9e5cb68aeb7d4c0a0271730218b3e92d43b4eb435" dependencies = [ "ring", "rustls-pki-types", @@ -4306,9 +4869,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" [[package]] name = "rusty-fork" @@ -4373,13 +4936,34 @@ dependencies = [ "zeroize", ] +[[package]] +name = "secp256k1" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b50c5943d326858130af85e049f2661ba3c78b26589b8ab98e65e80ae44a1252" +dependencies = [ + "bitcoin_hashes", + "rand 0.8.5", + "secp256k1-sys", + "serde", +] + +[[package]] +name = "secp256k1-sys" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4387882333d3aa8cb20530a17c69a3752e97837832f34f6dccc760e715001d9" +dependencies = [ + "cc", +] + [[package]] name = "security-framework" version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "core-foundation", "core-foundation-sys", "libc", @@ -4516,6 +5100,17 @@ dependencies = [ "serde", ] +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + [[package]] name = "sha2" version = "0.10.9" @@ -4601,9 +5196,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.9" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" dependencies = [ "libc", "windows-sys 0.52.0", @@ -4727,9 +5322,9 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4560533fbd6914b94a8fb5cc803ed6801c3455668db3b810702c57612bac9412" +checksum = "14c8c8f496c33dc6343dac05b4be8d9e0bca180a4caa81d7b8416b10cc2273cd" dependencies = [ "paste", "proc-macro2", @@ -4757,6 +5352,27 @@ dependencies = [ "syn 2.0.101", ] +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags 2.9.1", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tap" version = "1.0.1" @@ -4765,12 +5381,12 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.19.1" +version = "3.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" +checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" dependencies = [ "fastrand", - "getrandom 0.3.2", + "getrandom 0.3.3", "once_cell", "rustix", "windows-sys 0.59.0", @@ -4902,9 +5518,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.45.0" +version = "1.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2513ca694ef9ede0fb23fe71a4ee4107cb102b9dc1930f6d0fd77aae068ae165" +checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" dependencies = [ "backtrace", "bytes", @@ -5030,6 +5646,24 @@ dependencies = [ "tower-service", ] +[[package]] +name = "tower-http" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc2d9e086a412a451384326f521c8123a99a466b329941a9403696bff9b0da2" +dependencies = [ + "bitflags 2.9.1", + "bytes", + "futures-util", + "http 1.3.1", + "http-body", + "iri-string", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", +] + [[package]] name = "tower-layer" version = "0.3.3" @@ -5196,6 +5830,12 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + [[package]] name = "valuable" version = "0.1.1" @@ -5218,8 +5858,8 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" name = "voting-core" version = "0.1.0" dependencies = [ - "commons", - "compute-provider", + "e3-bfv-helpers", + "e3-compute-provider", "fhe", "fhe-traits", ] @@ -5233,7 +5873,7 @@ dependencies = [ "anyhow", "bincode", "bytemuck", - "compute-provider", + "e3-compute-provider", "fhe", "fhe-traits", "fhe-util", @@ -5399,15 +6039,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "webpki-roots" -version = "0.26.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" -dependencies = [ - "webpki-roots 1.0.0", -] - [[package]] name = "webpki-roots" version = "1.0.0" @@ -5441,15 +6072,15 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-core" -version = "0.61.0" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ "windows-implement", "windows-interface", "windows-link", "windows-result", - "windows-strings 0.4.0", + "windows-strings 0.4.2", ] [[package]] @@ -5493,9 +6124,9 @@ dependencies = [ [[package]] name = "windows-result" -version = "0.3.2" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ "windows-link", ] @@ -5511,9 +6142,9 @@ dependencies = [ [[package]] name = "windows-strings" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ "windows-link", ] @@ -5745,7 +6376,7 @@ version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", ] [[package]] @@ -5891,3 +6522,31 @@ dependencies = [ "quote", "syn 2.0.101", ] + +[[package]] +name = "zstd" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "7.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.15+zstd.1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/examples/CRISP/apps/program/Cargo.toml b/examples/CRISP/apps/program/Cargo.toml index 3d499f1561..896f5316ef 100644 --- a/examples/CRISP/apps/program/Cargo.toml +++ b/examples/CRISP/apps/program/Cargo.toml @@ -1,6 +1,6 @@ [workspace] resolver = "2" -members = ["host", "core", "methods"] +members = ["host", "core", "methods", "app", "client"] exclude = ["methods/guests"] [workspace.package] @@ -11,28 +11,33 @@ edition = "2021" voting-host = { path = "./host" } voting-core = { path = "./core" } methods = { path = "./methods" } +program-client = { path = "./client" } -alloy-primitives = { version = "0.8", default-features = false, features = [ +alloy-primitives = { version = "1.0", default-features = false, features = [ "rlp", "serde", "std", ]} -alloy-sol-types = { version = "0.8" } +alloy-sol-types = { version = "1.0" } anyhow = { version = "1.0.86" } +actix-web = "4.10.2" bincode = { version = "1.3.3" } bytemuck = { version = "1" } +env_logger = "0.11.5" hex = { version = "0.4.3" } log = { version = "0.4" } -risc0-build = { version = "2.0.1", features = ["docker"] } -risc0-build-ethereum = { git = "https://github.com/risc0/risc0-ethereum", tag = "v2.0.0" } -risc0-ethereum-contracts = { git = "https://github.com/risc0/risc0-ethereum", tag = "v2.0.0" } -risc0-zkvm = { version = "2.0.0" } -risc0-zkp = { version = "2.0.0", default-features = false } +reqwest = { version = "0.12.15", features = ["json"] } +risc0-build = { version = "2.1.2", features = ["docker"] } +risc0-build-ethereum = { git = "https://github.com/risc0/risc0-ethereum", tag = "v2.2.0" } +risc0-ethereum-contracts = { git = "https://github.com/risc0/risc0-ethereum", tag = "v2.2.0" } +risc0-zkvm = { version = "2.1.0" } +risc0-zkp = { version = "2.0.1", default-features = false } serde = { version = "1.0.208", features = ["derive", "std"] } -fhe_rs = { package = "fhe", git = "https://github.com/gnosisguild/fhe.rs", branch = "feature/greco-integration" } -fhe-traits = { git = "https://github.com/gnosisguild/fhe.rs", branch = "feature/greco-integration" } -fhe-util = { git = "https://github.com/gnosisguild/fhe.rs", branch = "feature/greco-integration" } -compute-provider = { path = "../../../../packages/compute_provider" } +serde_json = "1.0.133" +fhe_rs = { package = "fhe", git = "https://github.com/gnosisguild/fhe.rs" } +fhe-traits = { git = "https://github.com/gnosisguild/fhe.rs" } +fhe-util = { git = "https://github.com/gnosisguild/fhe.rs" } +e3-compute-provider = { path = "../../../../crates/compute-provider" } tokio = { version = "1.38", features = ["full"] } rand = { version = "0.8.5" } tracing-subscriber = { version = "0.3", features = ["env-filter"] } diff --git a/examples/CRISP/apps/program/README.md b/examples/CRISP/apps/program/README.md new file mode 100644 index 0000000000..93be049b45 --- /dev/null +++ b/examples/CRISP/apps/program/README.md @@ -0,0 +1,46 @@ +# Program + +This module does the following: + +- Run a local webserver that accepts calls from the client +- Run computations using risc0 + +This is the program component for our overall CRISP architecture: + +```mermaid +graph TD + subgraph frontend["FRONTEND"] + client + end + subgraph ec2_1["BACKEND"] + server["server"] --> db + db[(DB)] + + server --HTTP--> program + end + subgraph thirdparty["3rd PARTY"] + bonsai + end + client --"HTTP"--> server + program ---> bonsai + + bonsai["bonsai (risc0)"] + + server --"publishInput()"--> evm + subgraph evm["EVM"] + esol1["Enclave Contracts"] + csol1["CRISP Contracts"] + end + server -. "WebSocket listener" .-> evm +``` + +# Structure + +This package consists of the following components: + +- **`app`**: The webserver used to accept calls from the client +- **`client`**: A library to used externally in order to make calls to the program +- **`core`**: The FHE program we are trying to run as an universal module (runs in risc0 but also outside of risc0) +- **`host`**: The function that actually runs the FHE program in the risc0 VM +- **`methods/guest`**: The entry point that risc0 uses to load and run the `core` module + diff --git a/examples/CRISP/apps/program/app/Cargo.toml b/examples/CRISP/apps/program/app/Cargo.toml new file mode 100644 index 0000000000..dcef3f08c2 --- /dev/null +++ b/examples/CRISP/apps/program/app/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "crisp-program" +version.workspace = true +edition.workspace = true + +[dependencies] +actix-web.workspace = true +env_logger.workspace = true +serde.workspace = true +serde_json.workspace = true +tokio.workspace = true +e3-compute-provider.workspace = true +voting-host.workspace = true +program-client.workspace = true diff --git a/examples/CRISP/apps/program/app/src/main.rs b/examples/CRISP/apps/program/app/src/main.rs new file mode 100644 index 0000000000..d1fe7b828c --- /dev/null +++ b/examples/CRISP/apps/program/app/src/main.rs @@ -0,0 +1,45 @@ +use actix_web::{middleware::Logger, web, App, HttpResponse, HttpServer, Result}; +use e3_compute_provider::FHEInputs; +use program_client::{ComputeRequest, ComputeResponse}; +use serde::{Deserialize, Serialize}; +use serde_json::json; + +// Run compute handler +async fn run_compute(req: web::Json) -> Result { + let fhe_inputs = FHEInputs { + params: req.params.clone(), + ciphertexts: req.ciphertext_inputs.clone(), + }; + let (risc0_output, ciphertext) = + tokio::task::spawn_blocking(move || voting_host::run_compute(fhe_inputs)) + .await + .map_err(|e| { + eprintln!("Task spawn error: {:?}", e); + actix_web::error::ErrorInternalServerError("Task execution failed") + })? + .map_err(|e| { + eprintln!("Compute function error: {:?}", e); + actix_web::error::ErrorInternalServerError("Computation failed") + })?; + + let proof: Vec = risc0_output.seal.into(); + let response = ComputeResponse { ciphertext, proof }; + + Ok(HttpResponse::Ok().json(response)) +} + +#[actix_web::main] +async fn main() -> std::io::Result<()> { + env_logger::init(); + let bind_addr = "0.0.0.0:4001"; + let server = HttpServer::new(|| { + App::new() + .wrap(Logger::default()) + .route("/run_compute", web::post().to(run_compute)) + }) + .bind(bind_addr)?; + + println!("'crisp-program' listening on http://{}", bind_addr); + + server.run().await +} diff --git a/examples/CRISP/apps/program/client/Cargo.toml b/examples/CRISP/apps/program/client/Cargo.toml new file mode 100644 index 0000000000..2f3ef34799 --- /dev/null +++ b/examples/CRISP/apps/program/client/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "program-client" +version.workspace = true +edition.workspace = true + +[dependencies] +serde.workspace = true +reqwest.workspace = true +anyhow.workspace = true diff --git a/examples/CRISP/apps/program/client/src/lib.rs b/examples/CRISP/apps/program/client/src/lib.rs new file mode 100644 index 0000000000..c8edef8318 --- /dev/null +++ b/examples/CRISP/apps/program/client/src/lib.rs @@ -0,0 +1,34 @@ +use anyhow::Result; +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize)] +pub struct ComputeRequest { + pub params: Vec, + pub ciphertext_inputs: Vec<(Vec, u64)>, +} + +#[derive(Deserialize, Serialize)] +pub struct ComputeResponse { + pub ciphertext: Vec, + pub proof: Vec, +} + +pub async fn run_compute( + params: Vec, + ciphertext_inputs: Vec<(Vec, u64)>, +) -> Result<(Vec, Vec)> { + let request = ComputeRequest { + params, + ciphertext_inputs, + }; + + let response: ComputeResponse = reqwest::Client::new() + .post("http://127.0.0.1:4001/run_compute") + .json(&request) + .send() + .await? + .json() + .await?; + + Ok((response.proof, response.ciphertext)) +} diff --git a/examples/CRISP/apps/program/core/Cargo.lock b/examples/CRISP/apps/program/core/Cargo.lock deleted file mode 100644 index fbf6b18406..0000000000 --- a/examples/CRISP/apps/program/core/Cargo.lock +++ /dev/null @@ -1,1216 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "ahash" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy 0.7.35", -] - -[[package]] -name = "aho-corasick" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" -dependencies = [ - "memchr", -] - -[[package]] -name = "allocator-api2" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" - -[[package]] -name = "anyhow" -version = "1.0.98" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" - -[[package]] -name = "ark-bn254" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-std", -] - -[[package]] -name = "ark-ec" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" -dependencies = [ - "ark-ff", - "ark-poly", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown 0.13.2", - "itertools 0.10.5", - "num-traits", - "zeroize", -] - -[[package]] -name = "ark-ff" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" -dependencies = [ - "ark-ff-asm", - "ark-ff-macros", - "ark-serialize", - "ark-std", - "derivative", - "digest", - "itertools 0.10.5", - "num-bigint", - "num-traits", - "paste", - "rustc_version", - "zeroize", -] - -[[package]] -name = "ark-ff-asm" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-ff-macros" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" -dependencies = [ - "num-bigint", - "num-traits", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-poly" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" -dependencies = [ - "ark-ff", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown 0.13.2", -] - -[[package]] -name = "ark-serialize" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" -dependencies = [ - "ark-serialize-derive", - "ark-std", - "digest", - "num-bigint", -] - -[[package]] -name = "ark-serialize-derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-std" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" -dependencies = [ - "num-traits", - "rand", -] - -[[package]] -name = "autocfg" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" - -[[package]] -name = "bitflags" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "bytes" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "commons" -version = "0.1.0" -dependencies = [ - "anyhow", - "fhe", - "fhe-traits", -] - -[[package]] -name = "compute-provider" -version = "0.1.0" -dependencies = [ - "ark-bn254", - "ark-ff", - "hex", - "lean-imt", - "light-poseidon", - "num-bigint", - "num-traits", - "rayon", - "serde", - "sha3", -] - -[[package]] -name = "cpufeatures" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" -dependencies = [ - "libc", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer", - "crypto-common", -] - -[[package]] -name = "doc-comment" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" - -[[package]] -name = "either" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" - -[[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - -[[package]] -name = "errno" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" -dependencies = [ - "libc", - "windows-sys", -] - -[[package]] -name = "ethnum" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0939f82868b77ef93ce3c3c3daf2b3c526b456741da5a1a4559e590965b6026b" - -[[package]] -name = "fastrand" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" - -[[package]] -name = "fhe" -version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs?branch=feature%2Fgreco-integration#b529be34a8b6cfa589b3ce451dbba0ce0126b92a" -dependencies = [ - "doc-comment", - "fhe-math", - "fhe-traits", - "fhe-util", - "itertools 0.12.1", - "ndarray", - "num-bigint", - "num-traits", - "prost", - "prost-build", - "rand", - "rand_chacha", - "serde", - "thiserror", - "zeroize", - "zeroize_derive", -] - -[[package]] -name = "fhe-math" -version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs?branch=feature%2Fgreco-integration#b529be34a8b6cfa589b3ce451dbba0ce0126b92a" -dependencies = [ - "ethnum", - "fhe-traits", - "fhe-util", - "itertools 0.12.1", - "ndarray", - "num-bigint", - "num-bigint-dig", - "num-traits", - "prost", - "prost-build", - "rand", - "rand_chacha", - "sha2", - "thiserror", - "zeroize", -] - -[[package]] -name = "fhe-traits" -version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs?branch=feature%2Fgreco-integration#b529be34a8b6cfa589b3ce451dbba0ce0126b92a" -dependencies = [ - "rand", -] - -[[package]] -name = "fhe-util" -version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs?branch=feature%2Fgreco-integration#b529be34a8b6cfa589b3ce451dbba0ce0126b92a" -dependencies = [ - "itertools 0.12.1", - "num-bigint-dig", - "num-traits", - "prime_factorization", - "rand", - "rayon", -] - -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", -] - -[[package]] -name = "getrandom" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" -dependencies = [ - "cfg-if", - "libc", - "r-efi", - "wasi 0.14.2+wasi-0.2.4", -] - -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash", -] - -[[package]] -name = "hashbrown" -version = "0.15.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3" -dependencies = [ - "allocator-api2", - "equivalent", - "foldhash", -] - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "indexmap" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" -dependencies = [ - "equivalent", - "hashbrown 0.15.3", -] - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" -dependencies = [ - "either", -] - -[[package]] -name = "keccak" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" -dependencies = [ - "cpufeatures", -] - -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -dependencies = [ - "spin", -] - -[[package]] -name = "lean-imt" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa2acc6dee32b12409446a76b9c1877e5ba9afb36dfcbe96d0ddaf15ca08f18d" -dependencies = [ - "hashbrown 0.15.3", -] - -[[package]] -name = "libc" -version = "0.2.172" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" - -[[package]] -name = "libm" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a25169bd5913a4b437588a7e3d127cd6e90127b60e0ffbd834a38f1599e016b8" - -[[package]] -name = "light-poseidon" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c9a85a9752c549ceb7578064b4ed891179d20acd85f27318573b64d2d7ee7ee" -dependencies = [ - "ark-bn254", - "ark-ff", - "num-bigint", - "thiserror", -] - -[[package]] -name = "linux-raw-sys" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" - -[[package]] -name = "log" -version = "0.4.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" - -[[package]] -name = "matrixmultiply" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a" -dependencies = [ - "autocfg", - "rawpointer", -] - -[[package]] -name = "memchr" -version = "2.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" - -[[package]] -name = "multimap" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" - -[[package]] -name = "ndarray" -version = "0.15.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb12d4e967ec485a5f71c6311fe28158e9d6f4bc4a447b474184d0f91a8fa32" -dependencies = [ - "matrixmultiply", - "num-complex", - "num-integer", - "num-traits", - "rawpointer", -] - -[[package]] -name = "num" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" -dependencies = [ - "num-bigint", - "num-complex", - "num-integer", - "num-iter", - "num-rational", - "num-traits", -] - -[[package]] -name = "num-bigint" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "num-bigint-dig" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" -dependencies = [ - "byteorder", - "lazy_static", - "libm", - "num-integer", - "num-iter", - "num-traits", - "rand", - "serde", - "smallvec", -] - -[[package]] -name = "num-complex" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-iter" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" -dependencies = [ - "num-bigint", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", -] - -[[package]] -name = "once_cell" -version = "1.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" - -[[package]] -name = "paste" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" - -[[package]] -name = "petgraph" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" -dependencies = [ - "fixedbitset", - "indexmap", -] - -[[package]] -name = "ppv-lite86" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" -dependencies = [ - "zerocopy 0.8.25", -] - -[[package]] -name = "prettyplease" -version = "0.2.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "664ec5419c51e34154eec046ebcba56312d5a2fc3b09a06da188e1ad21afadf6" -dependencies = [ - "proc-macro2", - "syn 2.0.101", -] - -[[package]] -name = "prime_factorization" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb24cb4f70d64221509ab3dca82ad2ec24e1d7f3fa3e7cb9eed4ced578683287" -dependencies = [ - "itertools 0.10.5", - "num", - "rand", -] - -[[package]] -name = "proc-macro2" -version = "1.0.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "prost" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" -dependencies = [ - "bytes", - "prost-derive", -] - -[[package]] -name = "prost-build" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" -dependencies = [ - "bytes", - "heck", - "itertools 0.12.1", - "log", - "multimap", - "once_cell", - "petgraph", - "prettyplease", - "prost", - "prost-types", - "regex", - "syn 2.0.101", - "tempfile", -] - -[[package]] -name = "prost-derive" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" -dependencies = [ - "anyhow", - "itertools 0.12.1", - "proc-macro2", - "quote", - "syn 2.0.101", -] - -[[package]] -name = "prost-types" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" -dependencies = [ - "prost", -] - -[[package]] -name = "quote" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "r-efi" -version = "5.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha", - "rand_core", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.16", -] - -[[package]] -name = "rawpointer" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" - -[[package]] -name = "rayon" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - -[[package]] -name = "regex" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" - -[[package]] -name = "rustc_version" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" -dependencies = [ - "semver", -] - -[[package]] -name = "rustix" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" -dependencies = [ - "bitflags", - "errno", - "libc", - "linux-raw-sys", - "windows-sys", -] - -[[package]] -name = "semver" -version = "1.0.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" - -[[package]] -name = "serde" -version = "1.0.219" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.219" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", -] - -[[package]] -name = "sha2" -version = "0.10.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sha3" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" -dependencies = [ - "digest", - "keccak", -] - -[[package]] -name = "smallvec" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" - -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.101" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "tempfile" -version = "3.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" -dependencies = [ - "fastrand", - "getrandom 0.3.2", - "once_cell", - "rustix", - "windows-sys", -] - -[[package]] -name = "thiserror" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", -] - -[[package]] -name = "typenum" -version = "1.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" - -[[package]] -name = "unicode-ident" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" - -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - -[[package]] -name = "voting-core" -version = "0.1.0" -dependencies = [ - "commons", - "compute-provider", - "fhe", - "fhe-traits", -] - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasi" -version = "0.14.2+wasi-0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" -dependencies = [ - "wit-bindgen-rt", -] - -[[package]] -name = "windows-sys" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-targets" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - -[[package]] -name = "wit-bindgen-rt" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags", -] - -[[package]] -name = "zerocopy" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" -dependencies = [ - "zerocopy-derive 0.7.35", -] - -[[package]] -name = "zerocopy" -version = "0.8.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" -dependencies = [ - "zerocopy-derive 0.8.25", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", -] - -[[package]] -name = "zeroize" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", -] diff --git a/examples/CRISP/apps/program/core/Cargo.toml b/examples/CRISP/apps/program/core/Cargo.toml index 9341fef2f0..29866db4db 100644 --- a/examples/CRISP/apps/program/core/Cargo.toml +++ b/examples/CRISP/apps/program/core/Cargo.toml @@ -6,5 +6,5 @@ edition = { workspace = true } [dependencies] fhe_rs = { workspace = true } fhe-traits = { workspace = true } -compute-provider = { path = "../../../../../packages/compute_provider" } -commons = { path = "../../../../../packages/commons" } +e3-compute-provider = { path = "../../../../../crates/compute-provider" } +e3-bfv-helpers = { path = "../../../../../crates/bfv-helpers" } diff --git a/examples/CRISP/apps/program/core/src/lib.rs b/examples/CRISP/apps/program/core/src/lib.rs index d709e9f427..3ed45d3ac6 100644 --- a/examples/CRISP/apps/program/core/src/lib.rs +++ b/examples/CRISP/apps/program/core/src/lib.rs @@ -1,11 +1,11 @@ -use commons::bfv::deserialize_bfv_params_arc; -use compute_provider::FHEInputs; +use e3_bfv_helpers::decode_bfv_params_arc; +use e3_compute_provider::FHEInputs; use fhe_rs::bfv::Ciphertext; use fhe_traits::{DeserializeParametrized, Serialize}; /// CRISP Implementation of the CiphertextProcessor function pub fn fhe_processor(fhe_inputs: &FHEInputs) -> Vec { - let params = deserialize_bfv_params_arc(&fhe_inputs.params); + let params = decode_bfv_params_arc(&fhe_inputs.params); let mut sum = Ciphertext::zero(¶ms); for ciphertext_bytes in &fhe_inputs.ciphertexts { diff --git a/examples/CRISP/apps/program/host/Cargo.toml b/examples/CRISP/apps/program/host/Cargo.toml index acd102ed48..eec2096415 100644 --- a/examples/CRISP/apps/program/host/Cargo.toml +++ b/examples/CRISP/apps/program/host/Cargo.toml @@ -15,10 +15,10 @@ methods = { workspace = true } risc0-ethereum-contracts = { workspace = true } risc0-zkvm = { workspace = true } tokio = { workspace = true } -compute-provider = { path = "../../../../../packages/compute_provider" } +e3-compute-provider = { path = "../../../../../crates/compute-provider" } fhe_rs = { workspace = true } fhe-traits = { workspace = true } fhe-util = { workspace = true } voting-core = { workspace = true } rand = { workspace = true } -tracing-subscriber = { workspace = true } \ No newline at end of file +tracing-subscriber = { workspace = true } diff --git a/examples/CRISP/apps/program/host/README.md b/examples/CRISP/apps/program/host/README.md new file mode 100644 index 0000000000..7dd618f26a --- /dev/null +++ b/examples/CRISP/apps/program/host/README.md @@ -0,0 +1,3 @@ +# Risc0 Host + +Exposes a function to run the computation found in `voting-core::fhe_processor` whilst also generating a risc0 proof assuming `risc0_dev_mode` is _not_ set. diff --git a/examples/CRISP/apps/program/host/src/lib.rs b/examples/CRISP/apps/program/host/src/lib.rs index d9e3ac38a3..dc363d9fbe 100644 --- a/examples/CRISP/apps/program/host/src/lib.rs +++ b/examples/CRISP/apps/program/host/src/lib.rs @@ -1,6 +1,8 @@ use anyhow::{Error, Result}; use bincode::serialize; -use compute_provider::{ComputeInput, ComputeManager, ComputeProvider, ComputeResult, FHEInputs}; +use e3_compute_provider::{ + ComputeInput, ComputeManager, ComputeProvider, ComputeResult, FHEInputs, +}; use methods::VOTING_ELF; use risc0_ethereum_contracts::groth16; use risc0_zkvm::{default_prover, ExecutorEnv, ProverOpts, VerifierContext}; diff --git a/examples/CRISP/apps/program/methods/build.rs b/examples/CRISP/apps/program/methods/build.rs index b65eeff505..c460987a89 100644 --- a/examples/CRISP/apps/program/methods/build.rs +++ b/examples/CRISP/apps/program/methods/build.rs @@ -40,10 +40,13 @@ fn main() { // Generate Rust source files for the methods crate. let guests = embed_methods_with_options(HashMap::from([("guests", guest_options)])); - // Generate Solidity source files for use with Forge. - let solidity_opts = risc0_build_ethereum::Options::default() - .with_image_id_sol_path(SOLIDITY_IMAGE_ID_PATH) - .with_elf_sol_path(SOLIDITY_ELF_PATH); - - generate_solidity_files(guests.as_slice(), &solidity_opts).unwrap(); + if std::env::var("SKIP_SOLIDITY").unwrap_or_default() != "1" { + // Generate Solidity source files for use with Forge. + let solidity_opts = risc0_build_ethereum::Options::default() + .with_image_id_sol_path(SOLIDITY_IMAGE_ID_PATH) + .with_elf_sol_path(SOLIDITY_ELF_PATH); + generate_solidity_files(guests.as_slice(), &solidity_opts).unwrap(); + } else { + println!("cargo:warning=Skipping solidity codegen (SKIP_SOLIDITY set)"); + } } diff --git a/examples/CRISP/apps/program/methods/guest/Cargo.lock b/examples/CRISP/apps/program/methods/guest/Cargo.lock index 711878f91d..733cf11055 100644 --- a/examples/CRISP/apps/program/methods/guest/Cargo.lock +++ b/examples/CRISP/apps/program/methods/guest/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "ahash" -version = "0.8.11" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", "once_cell", @@ -29,11 +29,27 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" +[[package]] +name = "alloy-dyn-abi" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9135eb501feccf7f4cb8a183afd406a65483fdad7bbd7332d0470e5d725c92f" +dependencies = [ + "alloy-json-abi", + "alloy-primitives", + "alloy-sol-type-parser", + "alloy-sol-types", + "itoa", + "serde", + "serde_json", + "winnow", +] + [[package]] name = "alloy-json-abi" -version = "0.8.3" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9996daf962fd0a90d3c93b388033228865953b92de7bb1959b891d78750a4091" +checksum = "8b26fdd571915bafe857fccba4ee1a4f352965800e46a53e4a5f50187b7776fa" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -43,31 +59,36 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "0.8.3" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "411aff151f2a73124ee473708e82ed51b2535f68928b6a1caa8bc1246ae6f7cd" +checksum = "a326d47106039f38b811057215a92139f46eef7983a4b77b10930a0ea5685b1e" dependencies = [ "alloy-rlp", "bytes", "cfg-if", "const-hex", - "derive_more 1.0.0", - "hex-literal", + "derive_more", + "foldhash", + "hashbrown 0.15.3", + "indexmap", "itoa", "k256", "keccak-asm", + "paste", "proptest", - "rand", + "rand 0.9.1", "ruint", + "rustc-hash", "serde", + "sha3", "tiny-keccak", ] [[package]] name = "alloy-rlp" -version = "0.3.5" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b155716bab55763c95ba212806cf43d05bcc70e5f35b02bad20cf5ec7fe11fed" +checksum = "5f70d83b765fdc080dbcd4f4db70d8d23fe4761f2f02ebfa9146b833900634b4" dependencies = [ "arrayvec", "bytes", @@ -75,23 +96,23 @@ dependencies = [ [[package]] name = "alloy-sol-macro" -version = "0.8.13" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c0279d09463a4695788a3622fd95443625f7be307422deba4b55dd491a9c7a1" +checksum = "d4be1ce1274ddd7fdfac86e5ece1b225e9bba1f2327e20fbb30ee6b9cc1423fe" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.101", ] [[package]] name = "alloy-sol-macro-expander" -version = "0.8.13" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4feea540fc8233df2ad1156efd744b2075372f43a8f942a68b3b19c8a00e2c12" +checksum = "01e92f3708ea4e0d9139001c86c051c538af0146944a2a9c7181753bd944bf57" dependencies = [ "alloy-sol-macro-input", "const-hex", @@ -100,54 +121,54 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.101", "syn-solidity", "tiny-keccak", ] [[package]] name = "alloy-sol-macro-input" -version = "0.8.13" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0ad281f3d1b613af814b66977ee698e443d4644a1510962d0241f26e0e53ae" +checksum = "9afe1bd348a41f8c9b4b54dfb314886786d6201235b0b3f47198b9d910c86bb2" dependencies = [ "const-hex", "dunce", "heck", + "macro-string", "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.101", "syn-solidity", ] [[package]] name = "alloy-sol-type-parser" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d162f8524adfdfb0e4bd0505c734c985f3e2474eb022af32eef0d52a4f3935c" +checksum = "d6195df2acd42df92a380a8db6205a5c7b41282d0ce3f4c665ecf7911ac292f1" dependencies = [ "serde", - "winnow 0.7.10", + "winnow", ] [[package]] name = "alloy-sol-types" -version = "0.8.3" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1eb88e4da0a1b697ed6a9f811fdba223cf4d5c21410804fd1707836af73a462b" +checksum = "6185e98a79cf19010722f48a74b5a65d153631d2f038cabd250f4b9e9813b8ad" dependencies = [ "alloy-json-abi", "alloy-primitives", "alloy-sol-macro", - "const-hex", "serde", ] [[package]] name = "anyhow" -version = "1.0.86" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" [[package]] name = "ark-bn254" @@ -202,7 +223,7 @@ checksum = "e7e89fe77d1f0f4fe5b96dfc940923d88d17b6a773808124f21e764dfb063c6a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.101", ] [[package]] @@ -235,7 +256,7 @@ dependencies = [ "ark-std 0.5.0", "educe", "fnv", - "hashbrown 0.15.2", + "hashbrown 0.15.3", "itertools 0.13.0", "num-bigint", "num-integer", @@ -277,7 +298,7 @@ dependencies = [ "num-bigint", "num-traits", "paste", - "rustc_version 0.4.0", + "rustc_version 0.4.1", "zeroize", ] @@ -328,7 +349,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" dependencies = [ "quote", - "syn 2.0.98", + "syn 2.0.101", ] [[package]] @@ -366,7 +387,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.101", ] [[package]] @@ -409,7 +430,7 @@ dependencies = [ "ark-std 0.5.0", "educe", "fnv", - "hashbrown 0.15.2", + "hashbrown 0.15.3", ] [[package]] @@ -495,7 +516,7 @@ checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.101", ] [[package]] @@ -517,7 +538,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" dependencies = [ "num-traits", - "rand", + "rand 0.8.5", ] [[package]] @@ -527,7 +548,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" dependencies = [ "num-traits", - "rand", + "rand 0.8.5", ] [[package]] @@ -537,31 +558,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "246a225cc6131e9ee4f24619af0f19d67761fff15d7ccc22e42b80846e69449a" dependencies = [ "num-traits", - "rand", + "rand 0.8.5", ] [[package]] name = "arrayvec" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "auto_impl" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" +checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.101", ] [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "base16ct" @@ -571,9 +592,9 @@ checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" [[package]] name = "base64ct" -version = "1.6.0" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" +checksum = "89e25b6adfb930f02d1981565a6e5d9c547ac15a96606256d3b59040e5cd4ca3" [[package]] name = "bincode" @@ -607,9 +628,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.5.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" [[package]] name = "bitvec" @@ -649,9 +670,9 @@ dependencies = [ [[package]] name = "borsh" -version = "1.5.5" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5430e3be710b68d984d1391c854eb431a9d548640711faa54eecb1df93db91cc" +checksum = "ad8646f98db542e39fc66e68a20b2144f6a732636df7c2354e74645faaa433ce" dependencies = [ "borsh-derive", "cfg_aliases", @@ -659,28 +680,28 @@ dependencies = [ [[package]] name = "borsh-derive" -version = "1.5.5" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8b668d39970baad5356d7c83a86fee3a539e6f93bf6764c97368243e17a0487" +checksum = "fdd1d3c0c2f5833f22386f252fe8ed005c7f59fdcddeef025c01b4c3b9fd9ac3" dependencies = [ "once_cell", "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.101", ] [[package]] name = "byte-slice-cast" -version = "1.2.2" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" +checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" [[package]] name = "bytemuck" -version = "1.21.0" +version = "1.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" +checksum = "9134a6ef01ce4b366b50689c94f82c14bc72bc5d0386829828a2e2752ef7958c" dependencies = [ "bytemuck_derive", ] @@ -693,7 +714,7 @@ checksum = "3fa76293b4f7bb636ab88fd78228235b5248b4d05cc589aed610f954af5d7c7a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.101", ] [[package]] @@ -704,18 +725,21 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.6.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" dependencies = [ "serde", ] [[package]] name = "cc" -version = "1.0.98" +version = "1.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" +checksum = "d0fc897dc1e865cc67c0e05a836d9d3f1df3cbe442aa4a9473b18e12624a4951" +dependencies = [ + "shlex", +] [[package]] name = "cfg-if" @@ -735,36 +759,11 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15" -[[package]] -name = "commons" -version = "0.1.0" -dependencies = [ - "anyhow", - "fhe", - "fhe-traits", -] - -[[package]] -name = "compute-provider" -version = "0.1.0" -dependencies = [ - "ark-bn254 0.4.0", - "ark-ff 0.4.2", - "hex", - "lean-imt", - "light-poseidon", - "num-bigint", - "num-traits", - "rayon", - "serde", - "sha3", -] - [[package]] name = "const-hex" -version = "1.12.0" +version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fb8a24a26d37e1ffd45343323dc9fe6654ceea44c12f2fcb3d7ac29e610bc6" +checksum = "83e22e0ed40b96a48d3db274f72fd365bd78f67af39b6bbd47e8a15e1c6207ff" dependencies = [ "cfg-if", "cpufeatures", @@ -779,6 +778,26 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +[[package]] +name = "const_format" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + [[package]] name = "core-foundation" version = "0.9.4" @@ -808,18 +827,18 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] [[package]] name = "crossbeam-deque" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -836,15 +855,15 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.20" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" [[package]] name = "crypto-bigint" @@ -853,7 +872,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ "generic-array", - "rand_core", + "rand_core 0.6.4", "subtle", "zeroize", ] @@ -870,9 +889,9 @@ dependencies = [ [[package]] name = "der" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" dependencies = [ "const-oid", "zeroize", @@ -889,34 +908,13 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "derive_more" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" -dependencies = [ - "derive_more-impl 1.0.0", -] - [[package]] name = "derive_more" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" dependencies = [ - "derive_more-impl 2.0.1", -] - -[[package]] -name = "derive_more-impl" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.98", - "unicode-xid", + "derive_more-impl", ] [[package]] @@ -927,7 +925,7 @@ checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.101", "unicode-xid", ] @@ -966,9 +964,35 @@ checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] name = "dunce" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "e3-bfv-helpers" +version = "0.1.0" +dependencies = [ + "alloy-dyn-abi", + "alloy-primitives", + "fhe", + "fhe-traits", +] + +[[package]] +name = "e3-compute-provider" +version = "0.1.0" +dependencies = [ + "ark-bn254 0.4.0", + "ark-ff 0.4.2", + "hex", + "lean-imt", + "light-poseidon", + "num-bigint", + "num-traits", + "rayon", + "serde", + "sha3", +] [[package]] name = "ecdsa" @@ -993,14 +1017,14 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.101", ] [[package]] name = "either" -version = "1.12.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "elf" @@ -1021,7 +1045,7 @@ dependencies = [ "generic-array", "group", "pkcs8", - "rand_core", + "rand_core 0.6.4", "sec1", "subtle", "zeroize", @@ -1056,20 +1080,20 @@ checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.101", ] [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.9" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18" dependencies = [ "libc", "windows-sys", @@ -1077,15 +1101,15 @@ dependencies = [ [[package]] name = "ethnum" -version = "1.5.0" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b90ca2580b73ab6a1f724b76ca11ab632df820fd6040c336200d2c1df7b3c82c" +checksum = "ca81e6b4777c89fd810c25a4be2b1bd93ea034fbe58e6a75216a34c6b82c539b" [[package]] name = "fastrand" -version = "2.1.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "fastrlp" @@ -1111,18 +1135,18 @@ dependencies = [ [[package]] name = "ff" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" dependencies = [ - "rand_core", + "rand_core 0.6.4", "subtle", ] [[package]] name = "fhe" version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs?branch=feature%2Fgreco-integration#b529be34a8b6cfa589b3ce451dbba0ce0126b92a" +source = "git+https://github.com/gnosisguild/fhe.rs#11cdd749a8e01c486160d5f62572c4520af5358f" dependencies = [ "doc-comment", "fhe-math", @@ -1134,10 +1158,10 @@ dependencies = [ "num-traits", "prost", "prost-build", - "rand", - "rand_chacha", + "rand 0.8.5", + "rand_chacha 0.3.1", "serde", - "thiserror", + "thiserror 1.0.69", "zeroize", "zeroize_derive", ] @@ -1145,7 +1169,7 @@ dependencies = [ [[package]] name = "fhe-math" version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs?branch=feature%2Fgreco-integration#b529be34a8b6cfa589b3ce451dbba0ce0126b92a" +source = "git+https://github.com/gnosisguild/fhe.rs#11cdd749a8e01c486160d5f62572c4520af5358f" dependencies = [ "ethnum", "fhe-traits", @@ -1157,31 +1181,31 @@ dependencies = [ "num-traits", "prost", "prost-build", - "rand", - "rand_chacha", + "rand 0.8.5", + "rand_chacha 0.3.1", "sha2", - "thiserror", + "thiserror 1.0.69", "zeroize", ] [[package]] name = "fhe-traits" version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs?branch=feature%2Fgreco-integration#b529be34a8b6cfa589b3ce451dbba0ce0126b92a" +source = "git+https://github.com/gnosisguild/fhe.rs#11cdd749a8e01c486160d5f62572c4520af5358f" dependencies = [ - "rand", + "rand 0.8.5", ] [[package]] name = "fhe-util" version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs?branch=feature%2Fgreco-integration#b529be34a8b6cfa589b3ce451dbba0ce0126b92a" +source = "git+https://github.com/gnosisguild/fhe.rs#11cdd749a8e01c486160d5f62572c4520af5358f" dependencies = [ "itertools 0.12.1", "num-bigint-dig", "num-traits", "prime_factorization", - "rand", + "rand 0.8.5", "rayon", ] @@ -1192,7 +1216,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" dependencies = [ "byteorder", - "rand", + "rand 0.8.5", "rustc-hex", "static_assertions", ] @@ -1233,7 +1257,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.101", ] [[package]] @@ -1261,13 +1285,25 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", ] [[package]] @@ -1277,7 +1313,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff", - "rand_core", + "rand_core 0.6.4", "subtle", ] @@ -1289,7 +1325,7 @@ dependencies = [ "alloy-sol-types", "anyhow", "bincode", - "compute-provider", + "e3-compute-provider", "risc0-zkvm", "voting-core", ] @@ -1305,19 +1341,14 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.14.5" +version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" - -[[package]] -name = "hashbrown" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3" dependencies = [ "allocator-api2", "equivalent", "foldhash", + "serde", ] [[package]] @@ -1361,13 +1392,13 @@ dependencies = [ [[package]] name = "impl-trait-for-tuples" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.101", ] [[package]] @@ -1378,12 +1409,13 @@ checksum = "4ee796ad498c8d9a1d68e477df8f754ed784ef875de1414ebdaf169f70a6a784" [[package]] name = "indexmap" -version = "2.2.6" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" dependencies = [ "equivalent", - "hashbrown 0.14.5", + "hashbrown 0.15.3", + "serde", ] [[package]] @@ -1415,15 +1447,15 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "k256" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" dependencies = [ "cfg-if", "ecdsa", @@ -1443,9 +1475,9 @@ dependencies = [ [[package]] name = "keccak-asm" -version = "0.1.1" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47a3633291834c4fbebf8673acbc1b04ec9d151418ff9b8e26dcd79129928758" +checksum = "505d1856a39b200489082f90d897c3f07c455563880bc5952e38eabf731c83b6" dependencies = [ "digest 0.10.7", "sha3-asm", @@ -1466,20 +1498,20 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa2acc6dee32b12409446a76b9c1877e5ba9afb36dfcbe96d0ddaf15ca08f18d" dependencies = [ - "hashbrown 0.15.2", + "hashbrown 0.15.3", ] [[package]] name = "libc" -version = "0.2.158" +version = "0.2.172" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" +checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" [[package]] name = "libm" -version = "0.2.8" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "light-poseidon" @@ -1490,20 +1522,31 @@ dependencies = [ "ark-bn254 0.4.0", "ark-ff 0.4.2", "num-bigint", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "linux-raw-sys" -version = "0.4.14" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" [[package]] name = "log" -version = "0.4.21" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" + +[[package]] +name = "macro-string" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] [[package]] name = "malloc_buf" @@ -1516,9 +1559,9 @@ dependencies = [ [[package]] name = "matrixmultiply" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a" +checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08" dependencies = [ "autocfg", "rawpointer", @@ -1526,9 +1569,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.2" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "merlin" @@ -1538,7 +1581,7 @@ checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" dependencies = [ "byteorder", "keccak", - "rand_core", + "rand_core 0.6.4", "zeroize", ] @@ -1548,7 +1591,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.9.1", "block", "core-graphics-types", "foreign-types", @@ -1559,9 +1602,9 @@ dependencies = [ [[package]] name = "multimap" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" +checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084" [[package]] name = "ndarray" @@ -1618,7 +1661,7 @@ dependencies = [ "num-integer", "num-iter", "num-traits", - "rand", + "rand 0.8.5", "serde", "smallvec", ] @@ -1684,34 +1727,36 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.19.0" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "parity-scale-codec" -version = "3.6.12" +version = "3.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" +checksum = "799781ae679d79a948e13d4824a40970bfa500058d245760dd857301059810fa" dependencies = [ "arrayvec", "bitvec", "byte-slice-cast", + "const_format", "impl-trait-for-tuples", "parity-scale-codec-derive", + "rustversion", "serde", ] [[package]] name = "parity-scale-codec-derive" -version = "3.6.12" +version = "3.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" +checksum = "34b4653168b563151153c9e4c08ebed57fb8262bebfa79711552fa983c623e7a" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.101", ] [[package]] @@ -1722,12 +1767,12 @@ checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "pest" -version = "2.7.10" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "560131c633294438da9f7c4b08189194b20946c8274c6b9e38881a7874dc8ee8" +checksum = "198db74531d58c70a361c42201efde7e2591e976d518caf7662a47dc5720e7b6" dependencies = [ "memchr", - "thiserror", + "thiserror 2.0.12", "ucd-trie", ] @@ -1743,9 +1788,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pkcs8" @@ -1771,18 +1816,21 @@ dependencies = [ [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] [[package]] name = "prettyplease" -version = "0.2.22" +version = "0.2.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479cf940fbbb3426c32c5d5176f62ad57549a0bb84773423ba8be9d089f5faba" +checksum = "9dee91521343f4c5c6a63edd65e54f31f5c92fe8978c40a4282f8372194c6a7d" dependencies = [ "proc-macro2", - "syn 2.0.98", + "syn 2.0.101", ] [[package]] @@ -1793,7 +1841,7 @@ checksum = "bb24cb4f70d64221509ab3dca82ad2ec24e1d7f3fa3e7cb9eed4ced578683287" dependencies = [ "itertools 0.10.5", "num", - "rand", + "rand 0.8.5", ] [[package]] @@ -1809,9 +1857,9 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.1.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" dependencies = [ "toml_edit", ] @@ -1835,14 +1883,14 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.101", ] [[package]] name = "proc-macro2" -version = "1.0.93" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" dependencies = [ "unicode-ident", ] @@ -1855,11 +1903,11 @@ checksum = "14cae93065090804185d3b75f0bf93b8eeda30c7a9b4a33d3bdb3988d6229e50" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.5.0", + "bitflags 2.9.1", "lazy_static", "num-traits", - "rand", - "rand_chacha", + "rand 0.8.5", + "rand_chacha 0.3.1", "rand_xorshift", "regex-syntax", "rusty-fork", @@ -1894,7 +1942,7 @@ dependencies = [ "prost", "prost-types", "regex", - "syn 2.0.98", + "syn 2.0.101", "tempfile", ] @@ -1908,7 +1956,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.101", ] [[package]] @@ -1928,13 +1976,19 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quote" -version = "1.0.36" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" + [[package]] name = "radium" version = "0.7.0" @@ -1948,8 +2002,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", - "rand_core", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", + "serde", ] [[package]] @@ -1959,7 +2024,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", ] [[package]] @@ -1968,7 +2043,17 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.16", +] + +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.3", + "serde", ] [[package]] @@ -1977,7 +2062,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" dependencies = [ - "rand_core", + "rand_core 0.6.4", ] [[package]] @@ -2008,9 +2093,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.6" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", @@ -2020,9 +2105,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", @@ -2031,9 +2116,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "rfc6979" @@ -2047,28 +2132,28 @@ dependencies = [ [[package]] name = "risc0-binfmt" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f147f96a8a3058e699a5d39fc7e59d982f633751543ff4437cc0fb21f40b2e0" +checksum = "f4fe7599ac55ad77515608ec42a9727001559fe4f579c533cb7c973b54800c05" dependencies = [ "anyhow", "borsh", - "derive_more 2.0.1", + "derive_more", "elf", "lazy_static", "postcard", "risc0-zkp", "risc0-zkvm-platform", - "semver 1.0.23", + "semver 1.0.26", "serde", "tracing", ] [[package]] name = "risc0-circuit-keccak" -version = "2.0.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc6af6fc80443a05d9e8e25aeba78082fc58e8a3c6a6b92017cae0a404494ba9" +checksum = "8d339c65b0e011677404bd6bdfe1b0f29748187a568fb2f74df7fb650590181a" dependencies = [ "anyhow", "bytemuck", @@ -2082,9 +2167,9 @@ dependencies = [ [[package]] name = "risc0-circuit-recursion" -version = "2.0.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c7bdd11df4ed470b3c032ac4c5bfb2729f6151af33ee255b66169de0c35611e" +checksum = "8c6501fd3936aea2dd3e55915f34328fe96e6ca25ef00320242f837ae668785b" dependencies = [ "anyhow", "bytemuck", @@ -2097,14 +2182,14 @@ dependencies = [ [[package]] name = "risc0-circuit-rv32im" -version = "2.0.2" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c98a4d9e438aac2e661b8376f6dd48b17a0949b29dbb0aed6e88e62de0bd5940" +checksum = "c80e0a8f0f56106295bb682dbc27093438e163a5f6384a79e877ab895a11d9ae" dependencies = [ "anyhow", "bit-vec", "bytemuck", - "derive_more 2.0.1", + "derive_more", "paste", "risc0-binfmt", "risc0-core", @@ -2121,14 +2206,14 @@ checksum = "317bbf70a8750b64d4fd7a2bdc9d7d5f30d8bb305cae486962c797ef35c8d08e" dependencies = [ "bytemuck", "bytemuck_derive", - "rand_core", + "rand_core 0.6.4", ] [[package]] name = "risc0-groth16" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a800c55717c52f764325bdb18a164843d417a4c8c8a123b7d4206705c11a54c3" +checksum = "4b31cb7b2a46f0cdaf71803ea7e0389af9f5bc1aea2531106f2972b241f26e98" dependencies = [ "anyhow", "ark-bn254 0.5.0", @@ -2147,9 +2232,9 @@ dependencies = [ [[package]] name = "risc0-zkos-v1compat" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa44e7cc6642e621c6f3eea56f57a765f8e599bf327f4d0f74921693234a5d62" +checksum = "f76c479b69d1987cb54ac72dcc017197296fdcd6daf78fafc10cbbd3a167a7de" dependencies = [ "include_bytes_aligned", "no_std_strings", @@ -2157,9 +2242,9 @@ dependencies = [ [[package]] name = "risc0-zkp" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "023ed128cab28e4078330fffb65e9d079b3198958e3de6835f70c7ff285afeb4" +checksum = "fa210a232361fd671b30918469856b64d715f2564956d0a5df97ab6cb116d28b" dependencies = [ "anyhow", "blake2", @@ -2171,7 +2256,7 @@ dependencies = [ "hex-literal", "metal", "paste", - "rand_core", + "rand_core 0.6.4", "risc0-core", "risc0-zkvm-platform", "serde", @@ -2182,15 +2267,15 @@ dependencies = [ [[package]] name = "risc0-zkvm" -version = "2.0.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5881af78a17ca292037ef38383233f8d617ab679d68cc07c865e3ddabef1db80" +checksum = "0f1014d2efcb3b359aff878c9aeb6aa949a6d91f091a2ffb5ffd8d928a1ab7f3" dependencies = [ "anyhow", "borsh", "bytemuck", - "derive_more 2.0.1", - "getrandom", + "derive_more", + "getrandom 0.2.16", "hex", "risc0-binfmt", "risc0-circuit-keccak", @@ -2202,7 +2287,7 @@ dependencies = [ "risc0-zkp", "risc0-zkvm-platform", "rrs-lib", - "semver 1.0.23", + "semver 1.0.26", "serde", "sha2", "stability", @@ -2211,13 +2296,14 @@ dependencies = [ [[package]] name = "risc0-zkvm-platform" -version = "2.0.1" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed76ab12e5af4c93a3996e0609696cfdd0caebe8746af171ef583fa6e4af134" +checksum = "2e4de2938eaf24892ef927d9cef6e4acb6a19ce01c017cd498533896f633f332" dependencies = [ "bytemuck", "cfg-if", - "getrandom", + "getrandom 0.2.16", + "getrandom 0.3.3", "libm", "stability", ] @@ -2244,9 +2330,9 @@ dependencies = [ [[package]] name = "ruint" -version = "1.13.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "825df406ec217a8116bd7b06897c6cc8f65ffefc15d030ae2c9540acc9ed50b6" +checksum = "11256b5fe8c68f56ac6f39ef0720e592f33d2367a4782740d9c9142e889c7fb4" dependencies = [ "alloy-rlp", "ark-ff 0.3.0", @@ -2260,7 +2346,8 @@ dependencies = [ "parity-scale-codec", "primitive-types", "proptest", - "rand", + "rand 0.8.5", + "rand 0.9.1", "rlp", "ruint-macro", "serde", @@ -2274,6 +2361,12 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + [[package]] name = "rustc-hex" version = "2.1.0" @@ -2291,26 +2384,32 @@ dependencies = [ [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ - "semver 1.0.23", + "semver 1.0.26", ] [[package]] name = "rustix" -version = "0.38.34" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.9.1", "errno", "libc", "linux-raw-sys", "windows-sys", ] +[[package]] +name = "rustversion" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" + [[package]] name = "rusty-fork" version = "0.3.0" @@ -2354,18 +2453,18 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.23" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" dependencies = [ "serde", ] [[package]] name = "semver-parser" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" +checksum = "9900206b54a3527fdc7b8a938bffd94a568bac4f4aa8113b209df75a09c0dec2" dependencies = [ "pest", ] @@ -2387,7 +2486,7 @@ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.101", ] [[package]] @@ -2404,9 +2503,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.8" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", "cpufeatures", @@ -2425,14 +2524,20 @@ dependencies = [ [[package]] name = "sha3-asm" -version = "0.1.1" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9b57fd861253bff08bb1919e995f90ba8f4889de2726091c8876f3a4e823b40" +checksum = "c28efc5e327c837aa837c59eae585fc250715ef939ac32881bcc11677cd02d46" dependencies = [ "cc", "cfg-if", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signature" version = "2.2.0" @@ -2440,14 +2545,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "digest 0.10.7", - "rand_core", + "rand_core 0.6.4", ] [[package]] name = "smallvec" -version = "1.13.2" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" [[package]] name = "spin" @@ -2472,7 +2577,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d904e7009df136af5297832a3ace3370cd14ff1546a232f4f185036c2736fcac" dependencies = [ "quote", - "syn 2.0.98", + "syn 2.0.101", ] [[package]] @@ -2483,9 +2588,9 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "subtle" -version = "2.5.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" @@ -2500,9 +2605,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.98" +version = "2.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" +checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" dependencies = [ "proc-macro2", "quote", @@ -2511,14 +2616,14 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4560533fbd6914b94a8fb5cc803ed6801c3455668db3b810702c57612bac9412" +checksum = "14c8c8f496c33dc6343dac05b4be8d9e0bca180a4caa81d7b8416b10cc2273cd" dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.101", ] [[package]] @@ -2529,34 +2634,55 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.10.1" +version = "3.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" dependencies = [ - "cfg-if", "fastrand", + "getrandom 0.3.3", + "once_cell", "rustix", "windows-sys", ] [[package]] name = "thiserror" -version = "1.0.61" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +dependencies = [ + "thiserror-impl 2.0.12", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ - "thiserror-impl", + "proc-macro2", + "quote", + "syn 2.0.101", ] [[package]] name = "thiserror-impl" -version = "1.0.61" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.101", ] [[package]] @@ -2570,26 +2696,26 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.6" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" +checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3" [[package]] name = "toml_edit" -version = "0.21.1" +version = "0.22.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e" dependencies = [ "indexmap", "toml_datetime", - "winnow 0.5.40", + "winnow", ] [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "log", "pin-project-lite", @@ -2599,20 +2725,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.101", ] [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", "valuable", @@ -2629,15 +2755,15 @@ dependencies = [ [[package]] name = "typenum" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "ucd-trie" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" [[package]] name = "uint" @@ -2659,9 +2785,9 @@ checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "unicode-xid" @@ -2671,31 +2797,31 @@ checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "valuable" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "voting-core" version = "0.1.0" dependencies = [ - "commons", - "compute-provider", + "e3-bfv-helpers", + "e3-compute-provider", "fhe", "fhe-traits", ] [[package]] name = "wait-timeout" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" +checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" dependencies = [ "libc", ] @@ -2706,11 +2832,20 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.14.2+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "windows-sys" -version = "0.52.0" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ "windows-targets", ] @@ -2781,20 +2916,20 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.5.40" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +checksum = "c06928c8748d81b05c9be96aad92e1b6ff01833332f281e8cfca3be4b35fc9ec" dependencies = [ "memchr", ] [[package]] -name = "winnow" -version = "0.7.10" +name = "wit-bindgen-rt" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06928c8748d81b05c9be96aad92e1b6ff01833332f281e8cfca3be4b35fc9ec" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" dependencies = [ - "memchr", + "bitflags 2.9.1", ] [[package]] @@ -2808,22 +2943,22 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.7.34" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" +checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.34" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" +checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.101", ] [[package]] @@ -2843,5 +2978,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn 2.0.101", ] diff --git a/examples/CRISP/apps/program/methods/guest/Cargo.toml b/examples/CRISP/apps/program/methods/guest/Cargo.toml index 0f0143c140..9dc83343b0 100644 --- a/examples/CRISP/apps/program/methods/guest/Cargo.toml +++ b/examples/CRISP/apps/program/methods/guest/Cargo.toml @@ -10,10 +10,10 @@ name = "voting" path = "src/bin/voting.rs" [dependencies] -alloy-primitives = { version = "0.8", default-features = false, features = ["rlp", "serde", "std"] } -alloy-sol-types = "0.8" -risc0-zkvm = { version = "2.0.0", default-features = false, features = ['std'] } -compute-provider = { path = "../../../../../../packages/compute_provider" } +alloy-primitives = { version = "1.0", default-features = false, features = ["rlp", "serde", "std"] } +alloy-sol-types = "1.0" +risc0-zkvm = { version = "2.1.0", default-features = false, features = ['std'] } +e3-compute-provider = { path = "../../../../../../crates/compute-provider" } voting-core = { path = "../../core" } bincode = "1.3.3" anyhow = "1.0.86" diff --git a/examples/CRISP/apps/program/methods/guest/src/bin/voting.rs b/examples/CRISP/apps/program/methods/guest/src/bin/voting.rs index 9410e102a2..c98b2250b3 100644 --- a/examples/CRISP/apps/program/methods/guest/src/bin/voting.rs +++ b/examples/CRISP/apps/program/methods/guest/src/bin/voting.rs @@ -1,6 +1,6 @@ use anyhow::{Error, Result}; use bincode::deserialize; -use compute_provider::{ComputeInput, ComputeResult}; +use e3_compute_provider::{ComputeInput, ComputeResult}; use risc0_zkvm::guest::env; use std::io::Read; use voting_core::fhe_processor; diff --git a/examples/CRISP/apps/server/.dockerignore b/examples/CRISP/apps/server/.dockerignore new file mode 100644 index 0000000000..b43307271d --- /dev/null +++ b/examples/CRISP/apps/server/.dockerignore @@ -0,0 +1,9 @@ +target +**/target +node_modules +**/node_modules +.git +.DS_Store +**/.DS_Store +**/tests/tmp/ +**/*.log \ No newline at end of file diff --git a/examples/CRISP/apps/server/.env.example b/examples/CRISP/apps/server/.env.example index 0108b4d947..1166578dd8 100644 --- a/examples/CRISP/apps/server/.env.example +++ b/examples/CRISP/apps/server/.env.example @@ -12,13 +12,13 @@ CRON_API_KEY=1234567890 ENCLAVE_ADDRESS="0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512" CIPHERNODE_REGISTRY_ADDRESS="0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0" NAIVE_REGISTRY_FILTER_ADDRESS="0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9" -E3_PROGRAM_ADDRESS="0x959922bE3CAee4b8Cd9a407cc3ac1C251C2007B1" # CRISPProgram Contract Address +E3_PROGRAM_ADDRESS="0xc6e7DF5E7b4f2A278906862b61205850344D4e7d" # CRISPProgram Contract Address # E3 Config E3_WINDOW_SIZE=40 E3_THRESHOLD_MIN=1 E3_THRESHOLD_MAX=2 -E3_DURATION=40 +E3_DURATION=160 # E3 Compute Provider Config E3_COMPUTE_PROVIDER_NAME="RISC0" diff --git a/examples/CRISP/apps/server/Cargo.lock b/examples/CRISP/apps/server/Cargo.lock index 9421b1ecbf..093f4dcfa9 100644 --- a/examples/CRISP/apps/server/Cargo.lock +++ b/examples/CRISP/apps/server/Cargo.lock @@ -27,7 +27,7 @@ checksum = "daa239b93927be1ff123eebada5a3ff23e89f0124ccb8609234e5103d5a5ae6d" dependencies = [ "actix-utils", "actix-web", - "derive_more 2.0.1", + "derive_more", "futures-util", "log", "once_cell", @@ -49,7 +49,7 @@ dependencies = [ "brotli", "bytes", "bytestring", - "derive_more 2.0.1", + "derive_more", "encoding_rs", "flate2", "foldhash", @@ -164,7 +164,7 @@ dependencies = [ "bytestring", "cfg-if", "cookie", - "derive_more 2.0.1", + "derive_more", "encoding_rs", "foldhash", "futures-core", @@ -222,7 +222,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", - "getrandom 0.3.3", "once_cell", "version_check", "zerocopy", @@ -260,98 +259,61 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "alloy" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59febb24956a41c29bb5f450978fbe825bd6456b3f80586c8bd558dc882e7b6a" +checksum = "18e746cb4cea9ab4cda8cb117717b16c21116004f51efd78968ee0f1ffcf2602" dependencies = [ - "alloy-consensus 0.8.3", - "alloy-contract 0.8.3", + "alloy-consensus", + "alloy-contract", "alloy-core", - "alloy-eips 0.8.3", - "alloy-genesis 0.8.3", - "alloy-network 0.8.3", - "alloy-provider 0.8.3", + "alloy-eips", + "alloy-genesis", + "alloy-network", + "alloy-node-bindings", + "alloy-provider", "alloy-pubsub", - "alloy-rpc-client 0.8.3", - "alloy-rpc-types 0.8.3", - "alloy-serde 0.8.3", - "alloy-signer 0.8.3", - "alloy-signer-local 0.8.3", - "alloy-transport 0.8.3", - "alloy-transport-http 0.8.3", + "alloy-rpc-client", + "alloy-rpc-types", + "alloy-serde", + "alloy-signer", + "alloy-signer-local", + "alloy-transport", + "alloy-transport-http", "alloy-transport-ipc", "alloy-transport-ws", ] -[[package]] -name = "alloy" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b4ae82946772d69f868b9ef81fc66acb1b149ef9b4601849bec4bcf5da6552e" -dependencies = [ - "alloy-consensus 0.12.6", - "alloy-contract 0.12.6", - "alloy-core", - "alloy-eips 0.12.6", - "alloy-genesis 0.12.6", - "alloy-network 0.12.6", - "alloy-provider 0.12.6", - "alloy-rpc-client 0.12.6", - "alloy-rpc-types 0.12.6", - "alloy-serde 0.12.6", - "alloy-signer 0.12.6", - "alloy-signer-local 0.12.6", - "alloy-transport 0.12.6", - "alloy-transport-http 0.12.6", -] - [[package]] name = "alloy-chains" -version = "0.1.69" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28e2652684758b0d9b389d248b209ed9fd9989ef489a550265fe4bb8454fe7eb" +checksum = "19a9cc9d81ace3da457883b0bdf76776e55f1b84219a9e9d55c27ad308548d3f" dependencies = [ "alloy-primitives", "num_enum", - "strum 0.27.1", -] - -[[package]] -name = "alloy-consensus" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e88e1edea70787c33e11197d3f32ae380f3db19e6e061e539a5bcf8184a6b326" -dependencies = [ - "alloy-eips 0.8.3", - "alloy-primitives", - "alloy-rlp", - "alloy-serde 0.8.3", - "alloy-trie", - "auto_impl", - "c-kzg", - "derive_more 1.0.0", - "k256", - "serde", + "strum", ] [[package]] name = "alloy-consensus" -version = "0.12.6" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fbf458101ed6c389e9bb70a34ebc56039868ad10472540614816cdedc8f5265" +checksum = "659c33e85c4a9f8bb1b9a2400f4f3d0dd52fbc4bd3650e08d22df1e17d5d92ee" dependencies = [ - "alloy-eips 0.12.6", + "alloy-eips", "alloy-primitives", "alloy-rlp", - "alloy-serde 0.12.6", + "alloy-serde", "alloy-trie", + "alloy-tx-macros", "auto_impl", "c-kzg", - "derive_more 2.0.1", + "derive_more", "either", "k256", "once_cell", "rand 0.8.5", + "secp256k1", "serde", "serde_with", "thiserror 2.0.12", @@ -359,79 +321,46 @@ dependencies = [ [[package]] name = "alloy-consensus-any" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57b1bb53f40c0273cd1975573cd457b39213e68584e36d1401d25fd0398a1d65" -dependencies = [ - "alloy-consensus 0.8.3", - "alloy-eips 0.8.3", - "alloy-primitives", - "alloy-rlp", - "alloy-serde 0.8.3", - "serde", -] - -[[package]] -name = "alloy-consensus-any" -version = "0.12.6" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc982af629e511292310fe85b433427fd38cb3105147632b574abc997db44c91" +checksum = "d48fdc146414932cec2114f749f5f65a8960ee7547b1638a97bb0d04160d09e4" dependencies = [ - "alloy-consensus 0.12.6", - "alloy-eips 0.12.6", + "alloy-consensus", + "alloy-eips", "alloy-primitives", "alloy-rlp", - "alloy-serde 0.12.6", + "alloy-serde", "serde", ] [[package]] name = "alloy-contract" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b668c78c4b1f12f474ede5a85e8ce550d0aa1ef7d49fd1d22855a43b960e725" +checksum = "c711bfed1579611565ab831166c7bbaf123baea785ea945f02ed3620950f6fe1" dependencies = [ + "alloy-consensus", "alloy-dyn-abi", "alloy-json-abi", - "alloy-network 0.8.3", - "alloy-network-primitives 0.8.3", + "alloy-network", + "alloy-network-primitives", "alloy-primitives", - "alloy-provider 0.8.3", + "alloy-provider", "alloy-pubsub", - "alloy-rpc-types-eth 0.8.3", - "alloy-sol-types", - "alloy-transport 0.8.3", - "futures", - "futures-util", - "thiserror 2.0.12", -] - -[[package]] -name = "alloy-contract" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0a0c1ddee20ecc14308aae21c2438c994df7b39010c26d70f86e1d8fdb8db0" -dependencies = [ - "alloy-consensus 0.12.6", - "alloy-dyn-abi", - "alloy-json-abi", - "alloy-network 0.12.6", - "alloy-network-primitives 0.12.6", - "alloy-primitives", - "alloy-provider 0.12.6", - "alloy-rpc-types-eth 0.12.6", + "alloy-rpc-types-eth", "alloy-sol-types", - "alloy-transport 0.12.6", + "alloy-transport", "futures", "futures-util", + "serde_json", "thiserror 2.0.12", ] [[package]] name = "alloy-core" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d8bcce99ad10fe02640cfaec1c6bc809b837c783c1d52906aa5af66e2a196f6" +checksum = "5968f48d7a62587cd874bd84034831da4f7f577ce5de984828e376766efc0f32" dependencies = [ "alloy-dyn-abi", "alloy-json-abi", @@ -442,15 +371,14 @@ dependencies = [ [[package]] name = "alloy-dyn-abi" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb8e762aefd39a397ff485bc86df673465c4ad3ec8819cc60833a8a3ba5cdc87" +checksum = "f9135eb501feccf7f4cb8a183afd406a65483fdad7bbd7332d0470e5d725c92f" dependencies = [ "alloy-json-abi", "alloy-primitives", "alloy-sol-type-parser", "alloy-sol-types", - "const-hex", "itoa", "serde", "serde_json", @@ -459,9 +387,9 @@ dependencies = [ [[package]] name = "alloy-eip2124" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "675264c957689f0fd75f5993a73123c2cc3b5c235a38f5b9037fe6c826bfb2c0" +checksum = "741bdd7499908b3aa0b159bba11e71c8cddd009a2c2eb7a06e825f1ec87900a5" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -472,9 +400,9 @@ dependencies = [ [[package]] name = "alloy-eip2930" -version = "0.1.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0069cf0642457f87a01a014f6dc29d5d893cd4fd8fddf0c3cdfad1bb3ebafc41" +checksum = "7b82752a889170df67bbb36d42ca63c531eb16274f0d7299ae2a680facba17bd" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -483,98 +411,68 @@ dependencies = [ [[package]] name = "alloy-eip7702" -version = "0.4.2" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c986539255fb839d1533c128e190e557e52ff652c9ef62939e233a81dd93f7e" +checksum = "9d4769c6ffddca380b0070d71c8b7f30bed375543fe76bb2f74ec0acf4b7cd16" dependencies = [ "alloy-primitives", "alloy-rlp", - "derive_more 1.0.0", "k256", "serde", -] - -[[package]] -name = "alloy-eip7702" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b15b13d38b366d01e818fe8e710d4d702ef7499eacd44926a06171dd9585d0c" -dependencies = [ - "alloy-primitives", - "alloy-rlp", - "serde", "thiserror 2.0.12", ] [[package]] name = "alloy-eips" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f9fadfe089e9ccc0650473f2d4ef0a28bc015bbca5631d9f0f09e49b557fdb3" -dependencies = [ - "alloy-eip2930", - "alloy-eip7702 0.4.2", - "alloy-primitives", - "alloy-rlp", - "alloy-serde 0.8.3", - "c-kzg", - "derive_more 1.0.0", - "once_cell", - "serde", - "sha2", -] - -[[package]] -name = "alloy-eips" -version = "0.12.6" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e86967eb559920e4b9102e4cb825fe30f2e9467988353ce4809f0d3f2c90cd4" +checksum = "8390cb5c872d53560635dabc02d616c1bb626dd0f7d6893f8725edb822573fed" dependencies = [ "alloy-eip2124", "alloy-eip2930", - "alloy-eip7702 0.5.1", + "alloy-eip7702", "alloy-primitives", "alloy-rlp", - "alloy-serde 0.12.6", + "alloy-serde", "auto_impl", "c-kzg", - "derive_more 2.0.1", + "derive_more", "either", - "once_cell", "serde", "sha2", ] [[package]] name = "alloy-genesis" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b2a4cf7b70f3495788e74ce1c765260ffe38820a2a774ff4aacb62e31ea73f9" +checksum = "a18ce1538291d8409d4a7d826176d461a6f9eb28632d7185f801bda43a138260" dependencies = [ + "alloy-eips", "alloy-primitives", - "alloy-serde 0.8.3", + "alloy-serde", "alloy-trie", "serde", ] [[package]] -name = "alloy-genesis" -version = "0.12.6" +name = "alloy-hardforks" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a40de6f5b53ecf5fd7756072942f41335426d9a3704cd961f77d854739933bcf" +checksum = "977d2492ce210e34baf7b36afaacea272c96fbe6774c47e23f97d14033c0e94f" dependencies = [ - "alloy-eips 0.12.6", + "alloy-chains", + "alloy-eip2124", "alloy-primitives", - "alloy-serde 0.12.6", - "alloy-trie", - "serde", + "auto_impl", + "dyn-clone", ] [[package]] name = "alloy-json-abi" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe6beff64ad0aa6ad1019a3db26fef565aefeb011736150ab73ed3366c3cfd1b" +checksum = "8b26fdd571915bafe857fccba4ee1a4f352965800e46a53e4a5f50187b7776fa" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -584,26 +482,13 @@ dependencies = [ [[package]] name = "alloy-json-rpc" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e29040b9d5fe2fb70415531882685b64f8efd08dfbd6cc907120650504821105" -dependencies = [ - "alloy-primitives", - "alloy-sol-types", - "serde", - "serde_json", - "thiserror 2.0.12", - "tracing", -] - -[[package]] -name = "alloy-json-rpc" -version = "0.12.6" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27434beae2514d4a2aa90f53832cbdf6f23e4b5e2656d95eaf15f9276e2418b6" +checksum = "0b91481d12dcd964f4a838271d6abffac2d4082695fc3f73a15429166ea1692d" dependencies = [ "alloy-primitives", "alloy-sol-types", + "http 1.3.1", "serde", "serde_json", "thiserror 2.0.12", @@ -612,49 +497,24 @@ dependencies = [ [[package]] name = "alloy-network" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "510cc00b318db0dfccfdd2d032411cfae64fc144aef9679409e014145d3dacc4" -dependencies = [ - "alloy-consensus 0.8.3", - "alloy-consensus-any 0.8.3", - "alloy-eips 0.8.3", - "alloy-json-rpc 0.8.3", - "alloy-network-primitives 0.8.3", - "alloy-primitives", - "alloy-rpc-types-any 0.8.3", - "alloy-rpc-types-eth 0.8.3", - "alloy-serde 0.8.3", - "alloy-signer 0.8.3", - "alloy-sol-types", - "async-trait", - "auto_impl", - "futures-utils-wasm", - "serde", - "serde_json", - "thiserror 2.0.12", -] - -[[package]] -name = "alloy-network" -version = "0.12.6" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26a33a38c7486b1945f8d093ff027add2f3a8f83c7300dbad6165cc49150085e" +checksum = "c8b245fa9d76cc9fc58cf78844f2d4e481333449ba679b2044f09b983fc96f85" dependencies = [ - "alloy-consensus 0.12.6", - "alloy-consensus-any 0.12.6", - "alloy-eips 0.12.6", - "alloy-json-rpc 0.12.6", - "alloy-network-primitives 0.12.6", + "alloy-consensus", + "alloy-consensus-any", + "alloy-eips", + "alloy-json-rpc", + "alloy-network-primitives", "alloy-primitives", - "alloy-rpc-types-any 0.12.6", - "alloy-rpc-types-eth 0.12.6", - "alloy-serde 0.12.6", - "alloy-signer 0.12.6", + "alloy-rpc-types-any", + "alloy-rpc-types-eth", + "alloy-serde", + "alloy-signer", "alloy-sol-types", "async-trait", "auto_impl", - "derive_more 2.0.1", + "derive_more", "futures-utils-wasm", "serde", "serde_json", @@ -663,41 +523,49 @@ dependencies = [ [[package]] name = "alloy-network-primitives" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9081c099e798b8a2bba2145eb82a9a146f01fc7a35e9ab6e7b43305051f97550" +checksum = "7cecb975fc2f2e1eb09c513428c34e0d8c13e28b5ff1dbdf68e0f64a1a92c5f3" dependencies = [ - "alloy-consensus 0.8.3", - "alloy-eips 0.8.3", + "alloy-consensus", + "alloy-eips", "alloy-primitives", - "alloy-serde 0.8.3", + "alloy-serde", "serde", ] [[package]] -name = "alloy-network-primitives" -version = "0.12.6" +name = "alloy-node-bindings" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db973a7a23cbe96f2958e5687c51ce2d304b5c6d0dc5ccb3de8667ad8476f50b" +checksum = "f4131fe12c27e13a99d79bc8e02f9ce4f23f98a6f2e90458fe09992e99e46a9a" dependencies = [ - "alloy-consensus 0.12.6", - "alloy-eips 0.12.6", + "alloy-genesis", + "alloy-hardforks", + "alloy-network", "alloy-primitives", - "alloy-serde 0.12.6", - "serde", + "alloy-signer", + "alloy-signer-local", + "k256", + "rand 0.8.5", + "serde_json", + "tempfile", + "thiserror 2.0.12", + "tracing", + "url", ] [[package]] name = "alloy-primitives" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c77490fe91a0ce933a1f219029521f20fc28c2c0ca95d53fa4da9c00b8d9d4e" +checksum = "a326d47106039f38b811057215a92139f46eef7983a4b77b10930a0ea5685b1e" dependencies = [ "alloy-rlp", "bytes", "cfg-if", "const-hex", - "derive_more 2.0.1", + "derive_more", "foldhash", "hashbrown 0.15.3", "indexmap 2.9.0", @@ -706,7 +574,7 @@ dependencies = [ "keccak-asm", "paste", "proptest", - "rand 0.8.5", + "rand 0.9.1", "ruint", "rustc-hash", "serde", @@ -716,70 +584,41 @@ dependencies = [ [[package]] name = "alloy-provider" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc2dfaddd9a30aa870a78a4e1316e3e115ec1e12e552cbc881310456b85c1f24" +checksum = "ecac2cbea1cb3da53b4e68a078e57f9da8d12d86e2017db1240df222e2498397" dependencies = [ "alloy-chains", - "alloy-consensus 0.8.3", - "alloy-eips 0.8.3", - "alloy-json-rpc 0.8.3", - "alloy-network 0.8.3", - "alloy-network-primitives 0.8.3", + "alloy-consensus", + "alloy-eips", + "alloy-json-rpc", + "alloy-network", + "alloy-network-primitives", + "alloy-node-bindings", "alloy-primitives", "alloy-pubsub", - "alloy-rpc-client 0.8.3", - "alloy-rpc-types-eth 0.8.3", - "alloy-transport 0.8.3", - "alloy-transport-http 0.8.3", + "alloy-rpc-client", + "alloy-rpc-types-anvil", + "alloy-rpc-types-debug", + "alloy-rpc-types-eth", + "alloy-rpc-types-trace", + "alloy-rpc-types-txpool", + "alloy-signer", + "alloy-sol-types", + "alloy-transport", + "alloy-transport-http", "alloy-transport-ipc", "alloy-transport-ws", "async-stream", "async-trait", "auto_impl", "dashmap", + "either", "futures", "futures-utils-wasm", - "lru 0.12.5", - "parking_lot 0.12.3", - "pin-project", - "reqwest", - "schnellru", - "serde", - "serde_json", - "thiserror 2.0.12", - "tokio", - "tracing", - "url", - "wasmtimer", -] - -[[package]] -name = "alloy-provider" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b03bde77ad73feae14aa593bcabb932c8098c0f0750ead973331cfc0003a4e1" -dependencies = [ - "alloy-chains", - "alloy-consensus 0.12.6", - "alloy-eips 0.12.6", - "alloy-json-rpc 0.12.6", - "alloy-network 0.12.6", - "alloy-network-primitives 0.12.6", - "alloy-primitives", - "alloy-rpc-client 0.12.6", - "alloy-rpc-types-eth 0.12.6", - "alloy-sol-types", - "alloy-transport 0.12.6", - "alloy-transport-http 0.12.6", - "async-stream", - "async-trait", - "auto_impl", - "dashmap", - "futures", - "futures-utils-wasm", - "lru 0.13.0", - "parking_lot 0.12.3", + "http 1.3.1", + "lru", + "parking_lot 0.12.4", "pin-project", "reqwest", "serde", @@ -793,28 +632,30 @@ dependencies = [ [[package]] name = "alloy-pubsub" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "695809e743628d54510c294ad17a4645bd9f465aeb0d20ee9ce9877c9712dc9c" +checksum = "db1d3c2316590910ba697485aa75cdafef89735010d338d197f8af5baa79df92" dependencies = [ - "alloy-json-rpc 0.8.3", + "alloy-json-rpc", "alloy-primitives", - "alloy-transport 0.8.3", + "alloy-transport", "bimap", "futures", + "parking_lot 0.12.4", "serde", "serde_json", "tokio", "tokio-stream", "tower", "tracing", + "wasmtimer", ] [[package]] name = "alloy-rlp" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6c1d995bff8d011f7cd6c81820d51825e6e06d6db73914c1630ecf544d83d6" +checksum = "5f70d83b765fdc080dbcd4f4db70d8d23fe4761f2f02ebfa9146b833900634b4" dependencies = [ "alloy-rlp-derive", "arrayvec", @@ -823,9 +664,9 @@ dependencies = [ [[package]] name = "alloy-rlp-derive" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a40e1ef334153322fd878d07e86af7a529bcb86b2439525920a88eba87bcf943" +checksum = "64b728d511962dda67c1bc7ea7c03736ec275ed2cf4c35d9585298ac9ccf3b73" dependencies = [ "proc-macro2", "quote", @@ -834,40 +675,17 @@ dependencies = [ [[package]] name = "alloy-rpc-client" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "531137b283547d5b9a5cafc96b006c64ef76810c681d606f28be9781955293b6" +checksum = "e0bed8157038003c702dd1861a6b72d4b1a8f46aeffad35e81580223642170fa" dependencies = [ - "alloy-json-rpc 0.8.3", + "alloy-json-rpc", "alloy-primitives", "alloy-pubsub", - "alloy-transport 0.8.3", - "alloy-transport-http 0.8.3", + "alloy-transport", + "alloy-transport-http", "alloy-transport-ipc", "alloy-transport-ws", - "futures", - "pin-project", - "reqwest", - "serde", - "serde_json", - "tokio", - "tokio-stream", - "tower", - "tracing", - "url", - "wasmtimer", -] - -[[package]] -name = "alloy-rpc-client" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445a3298c14fae7afb5b9f2f735dead989f3dd83020c2ab8e48ed95d7b6d1acb" -dependencies = [ - "alloy-json-rpc 0.12.6", - "alloy-primitives", - "alloy-transport 0.12.6", - "alloy-transport-http 0.12.6", "async-stream", "futures", "pin-project", @@ -885,123 +703,121 @@ dependencies = [ [[package]] name = "alloy-rpc-types" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3410a472ce26c457e9780f708ee6bd540b30f88f1f31fdab7a11d00bd6aa1aee" +checksum = "82fed036edc62cd79476fe0340277a1c47b07c173f6ac0244f24193e1183b8e4" dependencies = [ "alloy-primitives", + "alloy-rpc-types-anvil", "alloy-rpc-types-engine", - "alloy-rpc-types-eth 0.8.3", - "alloy-serde 0.8.3", + "alloy-rpc-types-eth", + "alloy-rpc-types-trace", + "alloy-rpc-types-txpool", + "alloy-serde", "serde", ] [[package]] -name = "alloy-rpc-types" -version = "0.12.6" +name = "alloy-rpc-types-anvil" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9157deaec6ba2ad7854f16146e4cd60280e76593eed79fdcb06e0fa8b6c60f77" +checksum = "9f2e3dc925ec6722524f8d7412b9a6845a3350c7037f8a37892ada00c9018125" dependencies = [ "alloy-primitives", - "alloy-rpc-types-eth 0.12.6", - "alloy-serde 0.12.6", + "alloy-rpc-types-eth", + "alloy-serde", "serde", ] [[package]] name = "alloy-rpc-types-any" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed98e1af55a7d856bfa385f30f63d8d56be2513593655c904a8f4a7ec963aa3e" +checksum = "caf6702dd7eb929068ab075869679e745d68c4eb611c5a0cf72617688b85b5f4" dependencies = [ - "alloy-consensus-any 0.8.3", - "alloy-rpc-types-eth 0.8.3", - "alloy-serde 0.8.3", + "alloy-consensus-any", + "alloy-rpc-types-eth", + "alloy-serde", ] [[package]] -name = "alloy-rpc-types-any" -version = "0.12.6" +name = "alloy-rpc-types-debug" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604dea1f00fd646debe8033abe8e767c732868bf8a5ae9df6321909ccbc99c56" +checksum = "0e982f72ff47c0f754cb6aa579e456220d768e1ec07675e66cfce970dad70292" dependencies = [ - "alloy-consensus-any 0.12.6", - "alloy-rpc-types-eth 0.12.6", - "alloy-serde 0.12.6", + "alloy-primitives", + "serde", ] [[package]] name = "alloy-rpc-types-engine" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03bd16fa4959255ebf4a7702df08f325e5631df5cdca07c8a8e58bdc10fe02e3" +checksum = "505224e162e239980c6df7632c99f0bc5abbcf630017502810979e9e01f3c86e" dependencies = [ - "alloy-consensus 0.8.3", - "alloy-eips 0.8.3", + "alloy-consensus", + "alloy-eips", "alloy-primitives", "alloy-rlp", - "alloy-serde 0.8.3", - "derive_more 1.0.0", + "alloy-serde", + "derive_more", + "rand 0.8.5", "serde", - "strum 0.26.3", + "strum", ] [[package]] name = "alloy-rpc-types-eth" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8737d7a6e37ca7bba9c23e9495c6534caec6760eb24abc9d5ffbaaba147818e1" +checksum = "20ff509ca40537042b7cc9bede6b415ef807c9c5c48024e9fe10b8c8ad0757ef" dependencies = [ - "alloy-consensus 0.8.3", - "alloy-consensus-any 0.8.3", - "alloy-eips 0.8.3", - "alloy-network-primitives 0.8.3", + "alloy-consensus", + "alloy-consensus-any", + "alloy-eips", + "alloy-network-primitives", "alloy-primitives", "alloy-rlp", - "alloy-serde 0.8.3", + "alloy-serde", "alloy-sol-types", - "derive_more 1.0.0", "itertools 0.13.0", "serde", "serde_json", + "thiserror 2.0.12", ] [[package]] -name = "alloy-rpc-types-eth" -version = "0.12.6" +name = "alloy-rpc-types-trace" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e13d71eac04513a71af4b3df580f52f2b4dcbff9d971cc9a52519acf55514cb" +checksum = "51dc49d5865f2227c810a416c8d14141db7716a0174bfa6cff1c1a984b678b5e" dependencies = [ - "alloy-consensus 0.12.6", - "alloy-consensus-any 0.12.6", - "alloy-eips 0.12.6", - "alloy-network-primitives 0.12.6", "alloy-primitives", - "alloy-rlp", - "alloy-serde 0.12.6", - "alloy-sol-types", - "itertools 0.14.0", + "alloy-rpc-types-eth", + "alloy-serde", "serde", "serde_json", "thiserror 2.0.12", ] [[package]] -name = "alloy-serde" -version = "0.8.3" +name = "alloy-rpc-types-txpool" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5851bf8d5ad33014bd0c45153c603303e730acc8a209450a7ae6b4a12c2789e2" +checksum = "c962ec5193084873353ad7a65568056b4e704203302e6ba81374e95a22deba4d" dependencies = [ "alloy-primitives", + "alloy-rpc-types-eth", + "alloy-serde", "serde", - "serde_json", ] [[package]] name = "alloy-serde" -version = "0.12.6" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a1cd73fc054de6353c7f22ff9b846b0f0f145cd0112da07d4119e41e9959207" +checksum = "f9873512b1e99505f4a65e1d3a3105cb689f112f8e3cab3c632b20a97a46adae" dependencies = [ "alloy-primitives", "serde", @@ -1010,23 +826,9 @@ dependencies = [ [[package]] name = "alloy-signer" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e10ca565da6500cca015ba35ee424d59798f2e1b85bc0dd8f81dafd401f029a" -dependencies = [ - "alloy-primitives", - "async-trait", - "auto_impl", - "elliptic-curve", - "k256", - "thiserror 2.0.12", -] - -[[package]] -name = "alloy-signer" -version = "0.12.6" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c96fbde54bee943cd94ebacc8a62c50b38c7dfd2552dcd79ff61aea778b1bfcc" +checksum = "c2d4d95d8431a11e0daee724c3b7635dc8e9d3d60d0b803023a8125c74a77899" dependencies = [ "alloy-primitives", "async-trait", @@ -1039,30 +841,14 @@ dependencies = [ [[package]] name = "alloy-signer-local" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47fababf5a745133490cde927d48e50267f97d3d1209b9fc9f1d1d666964d172" -dependencies = [ - "alloy-consensus 0.8.3", - "alloy-network 0.8.3", - "alloy-primitives", - "alloy-signer 0.8.3", - "async-trait", - "k256", - "rand 0.8.5", - "thiserror 2.0.12", -] - -[[package]] -name = "alloy-signer-local" -version = "0.12.6" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc6e72002cc1801d8b41e9892165e3a6551b7bd382bd9d0414b21e90c0c62551" +checksum = "cb03eca937485b258d8e791d143e95b50dbfae0e18f92e1b1271c38959cd00fb" dependencies = [ - "alloy-consensus 0.12.6", - "alloy-network 0.12.6", + "alloy-consensus", + "alloy-network", "alloy-primitives", - "alloy-signer 0.12.6", + "alloy-signer", "async-trait", "k256", "rand 0.8.5", @@ -1071,9 +857,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10ae8e9a91d328ae954c22542415303919aabe976fe7a92eb06db1b68fd59f2" +checksum = "d4be1ce1274ddd7fdfac86e5ece1b225e9bba1f2327e20fbb30ee6b9cc1423fe" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", @@ -1085,14 +871,14 @@ dependencies = [ [[package]] name = "alloy-sol-macro-expander" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83ad5da86c127751bc607c174d6c9fe9b85ef0889a9ca0c641735d77d4f98f26" +checksum = "01e92f3708ea4e0d9139001c86c051c538af0146944a2a9c7181753bd944bf57" dependencies = [ "alloy-json-abi", "alloy-sol-macro-input", "const-hex", - "heck 0.5.0", + "heck", "indexmap 2.9.0", "proc-macro-error2", "proc-macro2", @@ -1104,14 +890,14 @@ dependencies = [ [[package]] name = "alloy-sol-macro-input" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3d30f0d3f9ba3b7686f3ff1de9ee312647aac705604417a2f40c604f409a9e" +checksum = "9afe1bd348a41f8c9b4b54dfb314886786d6201235b0b3f47198b9d910c86bb2" dependencies = [ "alloy-json-abi", "const-hex", "dunce", - "heck 0.5.0", + "heck", "macro-string", "proc-macro2", "quote", @@ -1122,9 +908,9 @@ dependencies = [ [[package]] name = "alloy-sol-type-parser" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d162f8524adfdfb0e4bd0505c734c985f3e2474eb022af32eef0d52a4f3935c" +checksum = "d6195df2acd42df92a380a8db6205a5c7b41282d0ce3f4c665ecf7911ac292f1" dependencies = [ "serde", "winnow", @@ -1132,49 +918,29 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d43d5e60466a440230c07761aa67671d4719d46f43be8ea6e7ed334d8db4a9ab" +checksum = "6185e98a79cf19010722f48a74b5a65d153631d2f038cabd250f4b9e9813b8ad" dependencies = [ "alloy-json-abi", "alloy-primitives", "alloy-sol-macro", - "const-hex", - "serde", -] - -[[package]] -name = "alloy-transport" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "538a04a37221469cac0ce231b737fd174de2fdfcdd843bdd068cb39ed3e066ad" -dependencies = [ - "alloy-json-rpc 0.8.3", - "base64 0.22.1", - "futures-util", - "futures-utils-wasm", "serde", - "serde_json", - "thiserror 2.0.12", - "tokio", - "tower", - "tracing", - "url", - "wasmtimer", ] [[package]] name = "alloy-transport" -version = "0.12.6" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec325c2af8562ef355c02aeb527c755a07e9d8cf6a1e65dda8d0bf23e29b2c" +checksum = "468a871d7ea52e31ef3abf5ccde612cb3723794f484d26dca6a04a3a776db739" dependencies = [ - "alloy-json-rpc 0.12.6", + "alloy-json-rpc", + "alloy-primitives", "base64 0.22.1", - "derive_more 2.0.1", + "derive_more", "futures", "futures-utils-wasm", - "parking_lot 0.12.3", + "parking_lot 0.12.4", "serde", "serde_json", "thiserror 2.0.12", @@ -1187,27 +953,12 @@ dependencies = [ [[package]] name = "alloy-transport-http" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ed40eb1e1265b2911512f6aa1dcece9702d078f5a646730c45e39e2be00ac1c" +checksum = "6e969c254b189f7da95f07bab53673dd418f8595abfe3397b2cf8d7ba7955487" dependencies = [ - "alloy-json-rpc 0.8.3", - "alloy-transport 0.8.3", - "reqwest", - "serde_json", - "tower", - "tracing", - "url", -] - -[[package]] -name = "alloy-transport-http" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a082c9473c6642cce8b02405a979496126a03b096997888e86229afad05db06c" -dependencies = [ - "alloy-json-rpc 0.12.6", - "alloy-transport 0.12.6", + "alloy-json-rpc", + "alloy-transport", "reqwest", "serde_json", "tower", @@ -1217,17 +968,18 @@ dependencies = [ [[package]] name = "alloy-transport-ipc" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a172a59d24706b26a79a837f86d51745cb26ca6f8524712acd0208a14cff95" +checksum = "cb134aaa80c2e1e03eebc101e7c513f08a529726738506d8c306ec9f3c9a7f3b" dependencies = [ - "alloy-json-rpc 0.8.3", + "alloy-json-rpc", "alloy-pubsub", - "alloy-transport 0.8.3", + "alloy-transport", "bytes", "futures", "interprocess", "pin-project", + "serde", "serde_json", "tokio", "tokio-util", @@ -1236,12 +988,12 @@ dependencies = [ [[package]] name = "alloy-transport-ws" -version = "0.8.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fba0e39d181d13c266dbb8ca54ed584a2c66d6e9279afca89c7a6b1825e98abb" +checksum = "e57f13346af9441cafa99d5b80d95c2480870dd18bd274464f7131df01ad692a" dependencies = [ "alloy-pubsub", - "alloy-transport 0.8.3", + "alloy-transport", "futures", "http 1.3.1", "rustls", @@ -1254,20 +1006,33 @@ dependencies = [ [[package]] name = "alloy-trie" -version = "0.7.9" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95a94854e420f07e962f7807485856cde359ab99ab6413883e15235ad996e8b" +checksum = "983d99aa81f586cef9dae38443245e585840fcf0fc58b09aee0b1f27aed1d500" dependencies = [ "alloy-primitives", "alloy-rlp", "arrayvec", - "derive_more 1.0.0", + "derive_more", "nybbles", "serde", "smallvec", "tracing", ] +[[package]] +name = "alloy-tx-macros" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d642ba58c32547ad9742c613f9849a2aedc47914b02948224326e4cb62b91040" +dependencies = [ + "alloy-primitives", + "darling", + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "android-tzdata" version = "0.1.1" @@ -1324,12 +1089,12 @@ dependencies = [ [[package]] name = "anstyle-wincon" -version = "3.0.7" +version = "3.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" +checksum = "6680de5231bd6ee4c6191b8a1325daa282b415391ec9d3a37bd34f2060dc73fa" dependencies = [ "anstyle", - "once_cell", + "once_cell_polyfill", "windows-sys 0.59.0", ] @@ -1345,56 +1110,11 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" dependencies = [ - "ark-ec 0.4.2", + "ark-ec", "ark-ff 0.4.2", "ark-std 0.4.0", ] -[[package]] -name = "ark-bn254" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d69eab57e8d2663efa5c63135b2af4f396d66424f88954c21104125ab6b3e6bc" -dependencies = [ - "ark-ec 0.5.0", - "ark-ff 0.5.0", - "ark-r1cs-std", - "ark-std 0.5.0", -] - -[[package]] -name = "ark-crypto-primitives" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e0c292754729c8a190e50414fd1a37093c786c709899f29c9f7daccecfa855e" -dependencies = [ - "ahash", - "ark-crypto-primitives-macros", - "ark-ec 0.5.0", - "ark-ff 0.5.0", - "ark-relations", - "ark-serialize 0.5.0", - "ark-snark", - "ark-std 0.5.0", - "blake2", - "derivative", - "digest 0.10.7", - "fnv", - "merlin", - "sha2", -] - -[[package]] -name = "ark-crypto-primitives-macros" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7e89fe77d1f0f4fe5b96dfc940923d88d17b6a773808124f21e764dfb063c6a" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", -] - [[package]] name = "ark-ec" version = "0.4.2" @@ -1402,7 +1122,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" dependencies = [ "ark-ff 0.4.2", - "ark-poly 0.4.2", + "ark-poly", "ark-serialize 0.4.2", "ark-std 0.4.0", "derivative", @@ -1412,27 +1132,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "ark-ec" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43d68f2d516162846c1238e755a7c4d131b892b70cc70c471a8e3ca3ed818fce" -dependencies = [ - "ahash", - "ark-ff 0.5.0", - "ark-poly 0.5.0", - "ark-serialize 0.5.0", - "ark-std 0.5.0", - "educe", - "fnv", - "hashbrown 0.15.3", - "itertools 0.13.0", - "num-bigint", - "num-integer", - "num-traits", - "zeroize", -] - [[package]] name = "ark-ff" version = "0.3.0" @@ -1471,26 +1170,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "ark-ff" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a177aba0ed1e0fbb62aa9f6d0502e9b46dad8c2eab04c14258a1212d2557ea70" -dependencies = [ - "ark-ff-asm 0.5.0", - "ark-ff-macros 0.5.0", - "ark-serialize 0.5.0", - "ark-std 0.5.0", - "arrayvec", - "digest 0.10.7", - "educe", - "itertools 0.13.0", - "num-bigint", - "num-traits", - "paste", - "zeroize", -] - [[package]] name = "ark-ff-asm" version = "0.3.0" @@ -1511,16 +1190,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "ark-ff-asm" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" -dependencies = [ - "quote", - "syn 2.0.101", -] - [[package]] name = "ark-ff-macros" version = "0.3.0" @@ -1546,34 +1215,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "ark-ff-macros" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09be120733ee33f7693ceaa202ca41accd5653b779563608f1234f78ae07c4b3" -dependencies = [ - "num-bigint", - "num-traits", - "proc-macro2", - "quote", - "syn 2.0.101", -] - -[[package]] -name = "ark-groth16" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88f1d0f3a534bb54188b8dcc104307db6c56cdae574ddc3212aec0625740fc7e" -dependencies = [ - "ark-crypto-primitives", - "ark-ec 0.5.0", - "ark-ff 0.5.0", - "ark-poly 0.5.0", - "ark-relations", - "ark-serialize 0.5.0", - "ark-std 0.5.0", -] - [[package]] name = "ark-poly" version = "0.4.2" @@ -1587,50 +1228,6 @@ dependencies = [ "hashbrown 0.13.2", ] -[[package]] -name = "ark-poly" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579305839da207f02b89cd1679e50e67b4331e2f9294a57693e5051b7703fe27" -dependencies = [ - "ahash", - "ark-ff 0.5.0", - "ark-serialize 0.5.0", - "ark-std 0.5.0", - "educe", - "fnv", - "hashbrown 0.15.3", -] - -[[package]] -name = "ark-r1cs-std" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "941551ef1df4c7a401de7068758db6503598e6f01850bdb2cfdb614a1f9dbea1" -dependencies = [ - "ark-ec 0.5.0", - "ark-ff 0.5.0", - "ark-relations", - "ark-std 0.5.0", - "educe", - "num-bigint", - "num-integer", - "num-traits", - "tracing", -] - -[[package]] -name = "ark-relations" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec46ddc93e7af44bcab5230937635b06fb5744464dd6a7e7b083e80ebd274384" -dependencies = [ - "ark-ff 0.5.0", - "ark-std 0.5.0", - "tracing", - "tracing-subscriber 0.2.25", -] - [[package]] name = "ark-serialize" version = "0.3.0" @@ -1647,25 +1244,12 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" dependencies = [ - "ark-serialize-derive 0.4.2", + "ark-serialize-derive", "ark-std 0.4.0", "digest 0.10.7", "num-bigint", ] -[[package]] -name = "ark-serialize" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7" -dependencies = [ - "ark-serialize-derive 0.5.0", - "ark-std 0.5.0", - "arrayvec", - "digest 0.10.7", - "num-bigint", -] - [[package]] name = "ark-serialize-derive" version = "0.4.2" @@ -1677,29 +1261,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "ark-serialize-derive" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", -] - -[[package]] -name = "ark-snark" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d368e2848c2d4c129ce7679a7d0d2d612b6a274d3ea6a13bad4445d61b381b88" -dependencies = [ - "ark-ff 0.5.0", - "ark-relations", - "ark-serialize 0.5.0", - "ark-std 0.5.0", -] - [[package]] name = "ark-std" version = "0.3.0" @@ -1720,16 +1281,6 @@ dependencies = [ "rand 0.8.5", ] -[[package]] -name = "ark-std" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "246a225cc6131e9ee4f24619af0f19d67761fff15d7ccc22e42b80846e69449a" -dependencies = [ - "num-traits", - "rand 0.8.5", -] - [[package]] name = "arraydeque" version = "0.5.1" @@ -1874,24 +1425,34 @@ dependencies = [ [[package]] name = "bit-set" -version = "0.5.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" dependencies = [ - "bit-vec 0.6.3", + "bit-vec", ] [[package]] name = "bit-vec" -version = "0.6.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" [[package]] -name = "bit-vec" -version = "0.8.0" +name = "bitcoin-io" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" +checksum = "0b47c4ab7a93edb0c7198c5535ed9b52b63095f4e9b45279c6736cec4b856baf" + +[[package]] +name = "bitcoin_hashes" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb18c03d0db0247e147a21a6faafd5a7eb851c743db062de72018b6b7e8e4d16" +dependencies = [ + "bitcoin-io", + "hex-conservative", +] [[package]] name = "bitflags" @@ -1920,21 +1481,6 @@ dependencies = [ "wyz", ] -[[package]] -name = "blake2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - [[package]] name = "block-buffer" version = "0.10.4" @@ -1956,42 +1502,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "bonsai-sdk" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bce8d6acc5286a16e94c29e9c885d1869358885e08a6feeb6bc54e36fe20055" -dependencies = [ - "duplicate", - "maybe-async", - "reqwest", - "serde", - "thiserror 1.0.69", -] - -[[package]] -name = "borsh" -version = "1.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad8646f98db542e39fc66e68a20b2144f6a732636df7c2354e74645faaa433ce" -dependencies = [ - "borsh-derive", - "cfg_aliases", -] - -[[package]] -name = "borsh-derive" -version = "1.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdd1d3c0c2f5833f22386f252fe8ed005c7f59fdcddeef025c01b4c3b9fd9ac3" -dependencies = [ - "once_cell", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.101", -] - [[package]] name = "brotli" version = "8.0.1" @@ -2025,26 +1535,6 @@ version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" -[[package]] -name = "bytemuck" -version = "1.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9134a6ef01ce4b366b50689c94f82c14bc72bc5d0386829828a2e2752ef7958c" -dependencies = [ - "bytemuck_derive", -] - -[[package]] -name = "bytemuck_derive" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fa76293b4f7bb636ab88fd78228235b5248b4d05cc589aed610f954af5d7c7a" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", -] - [[package]] name = "byteorder" version = "1.5.0" @@ -2071,9 +1561,9 @@ dependencies = [ [[package]] name = "c-kzg" -version = "1.0.3" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0307f72feab3300336fb803a57134159f6e20139af1357f36c54cb90d8e8928" +checksum = "7318cfa722931cb5fe0838b98d3ce5621e75f6a6408abc21721d80de9223f2e4" dependencies = [ "blst", "cc", @@ -2085,70 +1575,32 @@ dependencies = [ ] [[package]] -name = "camino" -version = "1.1.9" +name = "cc" +version = "1.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" +checksum = "d0fc897dc1e865cc67c0e05a836d9d3f1df3cbe442aa4a9473b18e12624a4951" dependencies = [ - "serde", + "jobserver", + "libc", + "shlex", ] [[package]] -name = "cargo-platform" -version = "0.1.9" +name = "cfg-if" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" -dependencies = [ - "serde", -] +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] -name = "cargo_metadata" -version = "0.19.2" +name = "chrono" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" +checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" dependencies = [ - "camino", - "cargo-platform", - "semver 1.0.26", - "serde", - "serde_json", - "thiserror 2.0.12", -] - -[[package]] -name = "cc" -version = "1.2.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32db95edf998450acc7881c932f94cd9b05c87b4b2599e8bab064753da4acfd1" -dependencies = [ - "jobserver", - "libc", - "shlex", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "cfg_aliases" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" - -[[package]] -name = "chrono" -version = "0.4.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" -dependencies = [ - "android-tzdata", - "iana-time-zone", - "js-sys", - "num-traits", + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", "serde", "wasm-bindgen", "windows-link", @@ -2156,9 +1608,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.38" +version = "4.5.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed93b9805f8ba930df42c2590f05453d5ec36cbb85d018868a5b24d31f6ac000" +checksum = "fd60e63e9be68e5fb56422e397cf9baddded06dae1d2e523401542383bc72a9f" dependencies = [ "clap_builder", "clap_derive", @@ -2166,9 +1618,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.38" +version = "4.5.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "379026ff283facf611b0ea629334361c4211d1b12ee01024eec1591133b04120" +checksum = "89cc6392a1f72bbeb820d71f32108f61fdaf18bc526e1d23954168a67759ef51" dependencies = [ "anstream", "anstyle", @@ -2182,7 +1634,7 @@ version = "4.5.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" dependencies = [ - "heck 0.5.0", + "heck", "proc-macro2", "quote", "syn 2.0.101", @@ -2194,43 +1646,12 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" -[[package]] -name = "cobs" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15" - [[package]] name = "colorchoice" version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" -[[package]] -name = "commons" -version = "0.1.0" -dependencies = [ - "anyhow", - "fhe", - "fhe-traits", -] - -[[package]] -name = "compute-provider" -version = "0.1.0" -dependencies = [ - "ark-bn254 0.4.0", - "ark-ff 0.4.2", - "hex", - "lean-imt", - "light-poseidon", - "num-bigint", - "num-traits", - "rayon", - "serde", - "sha3", -] - [[package]] name = "config" version = "0.14.1" @@ -2247,7 +1668,7 @@ dependencies = [ "serde", "serde_json", "toml", - "yaml-rust2 0.8.1", + "yaml-rust2", ] [[package]] @@ -2358,17 +1779,6 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" -[[package]] -name = "core-graphics-types" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "libc", -] - [[package]] name = "cpufeatures" version = "0.2.17" @@ -2408,17 +1818,18 @@ version = "0.1.0" dependencies = [ "actix-cors", "actix-web", - "alloy 0.8.3", + "alloy", "alloy-primitives", "alloy-sol-types", + "async-trait", "bincode", "chrono", "clap", - "commons", - "compute-provider", "config", "dialoguer", "dotenvy", + "e3-compute-provider", + "e3-sdk", "env_logger", "eyre", "fhe", @@ -2429,6 +1840,7 @@ dependencies = [ "jwt", "log", "once_cell", + "program-client", "rand 0.8.5", "reqwest", "serde", @@ -2437,7 +1849,6 @@ dependencies = [ "sled", "thiserror 1.0.69", "tokio", - "voting-host", "wasm-bindgen", ] @@ -2540,7 +1951,7 @@ dependencies = [ "hashbrown 0.14.5", "lock_api", "once_cell", - "parking_lot_core 0.9.10", + "parking_lot_core 0.9.11", ] [[package]] @@ -2580,65 +1991,13 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "derive_builder" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" -dependencies = [ - "derive_builder_macro", -] - -[[package]] -name = "derive_builder_core" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 2.0.101", -] - -[[package]] -name = "derive_builder_macro" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" -dependencies = [ - "derive_builder_core", - "syn 2.0.101", -] - -[[package]] -name = "derive_more" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" -dependencies = [ - "derive_more-impl 1.0.0", -] - [[package]] name = "derive_more" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" dependencies = [ - "derive_more-impl 2.0.1", -] - -[[package]] -name = "derive_more-impl" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", - "unicode-xid", + "derive_more-impl", ] [[package]] @@ -2688,27 +2047,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "dirs" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "dirs-sys" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" -dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.48.0", -] - [[package]] name = "displaydoc" version = "0.2.5" @@ -2735,12 +2073,6 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" -[[package]] -name = "docker-generate" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf673e0848ef09fa4aeeba78e681cf651c0c7d35f76ee38cec8e55bc32fa111" - [[package]] name = "doctest-file" version = "1.0.0" @@ -2753,12 +2085,6 @@ version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" -[[package]] -name = "downcast-rs" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" - [[package]] name = "dunce" version = "1.0.5" @@ -2766,13 +2092,71 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] -name = "duplicate" -version = "1.0.0" +name = "dyn-clone" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de78e66ac9061e030587b2a2e75cc88f22304913c907b11307bca737141230cb" +checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" + +[[package]] +name = "e3-bfv-helpers" +version = "0.1.0" +dependencies = [ + "alloy-dyn-abi", + "alloy-primitives", + "fhe", + "fhe-traits", +] + +[[package]] +name = "e3-compute-provider" +version = "0.1.0" +dependencies = [ + "ark-bn254", + "ark-ff 0.4.2", + "hex", + "lean-imt", + "light-poseidon", + "num-bigint", + "num-traits", + "rayon", + "serde", + "sha3", +] + +[[package]] +name = "e3-evm-helpers" +version = "0.1.0" +dependencies = [ + "alloy", + "async-trait", + "eyre", + "futures", + "futures-util", + "once_cell", + "tokio", +] + +[[package]] +name = "e3-indexer" +version = "0.1.0" +dependencies = [ + "alloy", + "async-trait", + "bincode", + "e3-evm-helpers", + "eyre", + "serde", + "thiserror 1.0.69", + "tokio", +] + +[[package]] +name = "e3-sdk" +version = "0.1.0" dependencies = [ - "heck 0.4.1", - "proc-macro-error", + "e3-bfv-helpers", + "e3-evm-helpers", + "e3-indexer", ] [[package]] @@ -2790,18 +2174,6 @@ dependencies = [ "spki", ] -[[package]] -name = "educe" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417" -dependencies = [ - "enum-ordinalize", - "proc-macro2", - "quote", - "syn 2.0.101", -] - [[package]] name = "either" version = "1.15.0" @@ -2811,12 +2183,6 @@ dependencies = [ "serde", ] -[[package]] -name = "elf" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4445909572dbd556c457c849c4ca58623d84b27c8fff1e74b0b4227d8b90d17b" - [[package]] name = "elliptic-curve" version = "0.13.8" @@ -2837,18 +2203,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "embedded-io" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" - -[[package]] -name = "embedded-io" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" - [[package]] name = "encode_unicode" version = "1.0.0" @@ -2864,26 +2218,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "enum-ordinalize" -version = "4.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea0dcfa4e54eeb516fe454635a95753ddd39acda650ce703031c6973e315dd5" -dependencies = [ - "enum-ordinalize-derive", -] - -[[package]] -name = "enum-ordinalize-derive" -version = "4.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", -] - [[package]] name = "env_filter" version = "0.1.3" @@ -2915,9 +2249,9 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" +checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18" dependencies = [ "libc", "windows-sys 0.59.0", @@ -2925,9 +2259,9 @@ dependencies = [ [[package]] name = "ethnum" -version = "1.5.1" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0939f82868b77ef93ce3c3c3daf2b3c526b456741da5a1a4559e590965b6026b" +checksum = "ca81e6b4777c89fd810c25a4be2b1bd93ea034fbe58e6a75216a34c6b82c539b" [[package]] name = "eyre" @@ -2956,6 +2290,17 @@ dependencies = [ "bytes", ] +[[package]] +name = "fastrlp" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce8dba4714ef14b8274c371879b175aa55b16b30f269663f19d576f380018dc4" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", +] + [[package]] name = "ff" version = "0.13.1" @@ -2969,7 +2314,7 @@ dependencies = [ [[package]] name = "fhe" version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs?branch=feature%2Fgreco-integration#b529be34a8b6cfa589b3ce451dbba0ce0126b92a" +source = "git+https://github.com/gnosisguild/fhe.rs#11cdd749a8e01c486160d5f62572c4520af5358f" dependencies = [ "doc-comment", "fhe-math", @@ -2979,7 +2324,7 @@ dependencies = [ "ndarray", "num-bigint", "num-traits", - "prost 0.12.6", + "prost", "prost-build", "rand 0.8.5", "rand_chacha 0.3.1", @@ -2992,7 +2337,7 @@ dependencies = [ [[package]] name = "fhe-math" version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs?branch=feature%2Fgreco-integration#b529be34a8b6cfa589b3ce451dbba0ce0126b92a" +source = "git+https://github.com/gnosisguild/fhe.rs#11cdd749a8e01c486160d5f62572c4520af5358f" dependencies = [ "ethnum", "fhe-traits", @@ -3002,7 +2347,7 @@ dependencies = [ "num-bigint", "num-bigint-dig", "num-traits", - "prost 0.12.6", + "prost", "prost-build", "rand 0.8.5", "rand_chacha 0.3.1", @@ -3014,7 +2359,7 @@ dependencies = [ [[package]] name = "fhe-traits" version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs?branch=feature%2Fgreco-integration#b529be34a8b6cfa589b3ce451dbba0ce0126b92a" +source = "git+https://github.com/gnosisguild/fhe.rs#11cdd749a8e01c486160d5f62572c4520af5358f" dependencies = [ "rand 0.8.5", ] @@ -3022,7 +2367,7 @@ dependencies = [ [[package]] name = "fhe-util" version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs?branch=feature%2Fgreco-integration#b529be34a8b6cfa589b3ce451dbba0ce0126b92a" +source = "git+https://github.com/gnosisguild/fhe.rs#11cdd749a8e01c486160d5f62572c4520af5358f" dependencies = [ "itertools 0.12.1", "num-bigint-dig", @@ -3078,28 +2423,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" dependencies = [ - "foreign-types-shared 0.1.1", -] - -[[package]] -name = "foreign-types" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" -dependencies = [ - "foreign-types-macros", - "foreign-types-shared 0.3.1", -] - -[[package]] -name = "foreign-types-macros" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", + "foreign-types-shared", ] [[package]] @@ -3108,12 +2432,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" -[[package]] -name = "foreign-types-shared" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" - [[package]] name = "form_urlencoded" version = "1.2.1" @@ -3270,10 +2588,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", - "js-sys", "libc", "wasi 0.11.0+wasi-snapshot-preview1", - "wasm-bindgen", ] [[package]] @@ -3283,11 +2599,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" dependencies = [ "cfg-if", - "js-sys", "libc", "r-efi", "wasi 0.14.2+wasi-0.2.4", - "wasm-bindgen", ] [[package]] @@ -3398,31 +2712,16 @@ dependencies = [ ] [[package]] -name = "hashlink" -version = "0.9.1" +name = "heck" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" -dependencies = [ - "hashbrown 0.14.5", -] - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.3.9" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +checksum = "f154ce46856750ed433c8649605bf7ed2de3bc35fd9d2a9f30cddd873c80cb08" [[package]] name = "hex" @@ -3434,10 +2733,13 @@ dependencies = [ ] [[package]] -name = "hex-literal" -version = "0.4.1" +name = "hex-conservative" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" +checksum = "5313b072ce3c597065a808dbf612c4c8e8590bdbf8b579508bf7a762c5eae6cd" +dependencies = [ + "arrayvec", +] [[package]] name = "hmac" @@ -3527,11 +2829,10 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.5" +version = "0.27.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" +checksum = "03a01595e11bdcec50946522c32dde3fc6914743000a68b93000965f2f02406d" dependencies = [ - "futures-util", "http 1.3.1", "hyper", "hyper-util", @@ -3540,7 +2841,6 @@ dependencies = [ "tokio", "tokio-rustls", "tower-service", - "webpki-roots 0.26.11", ] [[package]] @@ -3561,22 +2861,28 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.11" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497bbc33a26fdd4af9ed9c70d63f61cf56a938375fbb32df34db9b1cd6d643f2" +checksum = "b1c293b6b3d21eca78250dc7dbebd6b9210ec5530e038cbfe0661b5c47ab06e8" dependencies = [ + "base64 0.22.1", "bytes", "futures-channel", + "futures-core", "futures-util", "http 1.3.1", "http-body", "hyper", + "ipnet", "libc", + "percent-encoding", "pin-project-lite", "socket2", + "system-configuration", "tokio", "tower-service", "tracing", + "windows-registry", ] [[package]] @@ -3652,9 +2958,9 @@ checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" [[package]] name = "icu_properties" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2549ca8c7241c82f59c80ba2a6f415d931c5b58d24fb8412caa1a1f02c49139a" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" dependencies = [ "displaydoc", "icu_collections", @@ -3668,9 +2974,9 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8197e866e47b68f8f7d95249e172903bec06004b18b2937f1095d40a0c57de04" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" [[package]] name = "icu_provider" @@ -3742,12 +3048,6 @@ dependencies = [ "syn 2.0.101", ] -[[package]] -name = "include_bytes_aligned" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee796ad498c8d9a1d68e477df8f754ed784ef875de1414ebdaf169f70a6a784" - [[package]] name = "indenter" version = "0.3.3" @@ -3806,6 +3106,16 @@ version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +[[package]] +name = "iri-string" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" +dependencies = [ + "memchr", + "serde", +] + [[package]] name = "is_terminal_polyfill" version = "1.70.1" @@ -3839,15 +3149,6 @@ dependencies = [ "either", ] -[[package]] -name = "itertools" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" -dependencies = [ - "either", -] - [[package]] name = "itoa" version = "1.0.15" @@ -3856,9 +3157,9 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jiff" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f02000660d30638906021176af16b17498bd0d12813dbfe7b276d8bc7f3c0806" +checksum = "a194df1107f33c79f4f93d02c80798520551949d59dfad22b6157048a88cca93" dependencies = [ "jiff-static", "log", @@ -3869,9 +3170,9 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c30758ddd7188629c6713fc45d1188af4f44c90582311d0c8d8c9907f60c48" +checksum = "6c6e1db7ed32c6c71b759497fae34bf7933636f75a251b9e736555da426f6442" dependencies = [ "proc-macro2", "quote", @@ -3963,29 +3264,6 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" -[[package]] -name = "lazy-regex" -version = "3.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60c7310b93682b36b98fa7ea4de998d3463ccbebd94d935d6b48ba5b6ffa7126" -dependencies = [ - "lazy-regex-proc_macros", - "once_cell", - "regex", -] - -[[package]] -name = "lazy-regex-proc_macros" -version = "3.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ba01db5ef81e17eb10a5e0f2109d1b3a3e29bac3070fdbd7d156bf7dbd206a1" -dependencies = [ - "proc-macro2", - "quote", - "regex", - "syn 2.0.101", -] - [[package]] name = "lazy_static" version = "1.5.0" @@ -4016,23 +3294,13 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" -[[package]] -name = "libredox" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" -dependencies = [ - "bitflags 2.9.1", - "libc", -] - [[package]] name = "light-poseidon" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c9a85a9752c549ceb7578064b4ed891179d20acd85f27318573b64d2d7ee7ee" dependencies = [ - "ark-bn254 0.4.0", + "ark-bn254", "ark-ff 0.4.2", "num-bigint", "thiserror 1.0.69", @@ -4069,9 +3337,9 @@ checksum = "4d873d7c67ce09b42110d801813efbc9364414e356be9935700d368351657487" [[package]] name = "lock_api" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" dependencies = [ "autocfg", "scopeguard", @@ -4083,15 +3351,6 @@ version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" -[[package]] -name = "lru" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" -dependencies = [ - "hashbrown 0.15.3", -] - [[package]] name = "lru" version = "0.13.0" @@ -4101,12 +3360,6 @@ dependencies = [ "hashbrown 0.15.3", ] -[[package]] -name = "lru-slab" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" - [[package]] name = "macro-string" version = "0.1.4" @@ -4118,24 +3371,6 @@ dependencies = [ "syn 2.0.101", ] -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata 0.1.10", -] - [[package]] name = "matrixmultiply" version = "0.3.10" @@ -4146,60 +3381,12 @@ dependencies = [ "rawpointer", ] -[[package]] -name = "maybe-async" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cf92c10c7e361d6b99666ec1c6f9805b0bea2c3bd8c78dc6fe98ac5bd78db11" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", -] - [[package]] name = "memchr" version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" -[[package]] -name = "merlin" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" -dependencies = [ - "byteorder", - "keccak", - "rand_core 0.6.4", - "zeroize", -] - -[[package]] -name = "metal" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21" -dependencies = [ - "bitflags 2.9.1", - "block", - "core-graphics-types", - "foreign-types 0.5.0", - "log", - "objc", - "paste", -] - -[[package]] -name = "methods" -version = "0.1.0" -dependencies = [ - "hex", - "risc0-build", - "risc0-build-ethereum", - "risc0-zkp", -] - [[package]] name = "mime" version = "0.3.17" @@ -4223,14 +3410,14 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", "log", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -4269,12 +3456,6 @@ dependencies = [ "rawpointer", ] -[[package]] -name = "no_std_strings" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5b0c77c1b780822bc749a33e39aeb2c07584ab93332303babeabb645298a76e" - [[package]] name = "nom" version = "7.1.3" @@ -4285,16 +3466,6 @@ dependencies = [ "minimal-lexical", ] -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - [[package]] name = "num" version = "0.4.3" @@ -4394,9 +3565,9 @@ dependencies = [ [[package]] name = "num_cpus" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" dependencies = [ "hermit-abi", "libc", @@ -4435,15 +3606,6 @@ dependencies = [ "smallvec", ] -[[package]] -name = "objc" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" -dependencies = [ - "malloc_buf", -] - [[package]] name = "object" version = "0.36.7" @@ -4459,15 +3621,21 @@ version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +[[package]] +name = "once_cell_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" + [[package]] name = "openssl" -version = "0.10.72" +version = "0.10.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fedfea7d58a1f73118430a55da6a286e7b044961736ce96a16a17068ea25e5da" +checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" dependencies = [ "bitflags 2.9.1", "cfg-if", - "foreign-types 0.3.2", + "foreign-types", "libc", "once_cell", "openssl-macros", @@ -4493,9 +3661,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.108" +version = "0.9.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e145e1651e858e820e4860f7b9c5e169bc1d8ce1c86043be79fa7b7634821847" +checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" dependencies = [ "cc", "libc", @@ -4503,12 +3671,6 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - [[package]] name = "ordered-multimap" version = "0.7.3" @@ -4519,17 +3681,11 @@ dependencies = [ "hashbrown 0.14.5", ] -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - [[package]] name = "parity-scale-codec" -version = "3.7.4" +version = "3.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9fde3d0718baf5bc92f577d652001da0f8d54cd03a7974e118d04fc888dc23d" +checksum = "799781ae679d79a948e13d4824a40970bfa500058d245760dd857301059810fa" dependencies = [ "arrayvec", "bitvec", @@ -4543,9 +3699,9 @@ dependencies = [ [[package]] name = "parity-scale-codec-derive" -version = "3.7.4" +version = "3.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581c837bb6b9541ce7faa9377c20616e4fb7650f6b0f68bc93c827ee504fb7b3" +checksum = "34b4653168b563151153c9e4c08ebed57fb8262bebfa79711552fa983c623e7a" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -4566,12 +3722,12 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" dependencies = [ "lock_api", - "parking_lot_core 0.9.10", + "parking_lot_core 0.9.11", ] [[package]] @@ -4590,9 +3746,9 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.10" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" dependencies = [ "cfg-if", "libc", @@ -4747,18 +3903,6 @@ dependencies = [ "portable-atomic", ] -[[package]] -name = "postcard" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "170a2601f67cc9dba8edd8c4870b15f71a6a2dc196daec8c83f72b59dff628a8" -dependencies = [ - "cobs", - "embedded-io 0.4.0", - "embedded-io 0.6.1", - "serde", -] - [[package]] name = "potential_utf" version = "0.1.2" @@ -4785,9 +3929,9 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.32" +version = "0.2.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "664ec5419c51e34154eec046ebcba56312d5a2fc3b09a06da188e1ad21afadf6" +checksum = "9dee91521343f4c5c6a63edd65e54f31f5c92fe8978c40a4282f8372194c6a7d" dependencies = [ "proc-macro2", "syn 2.0.101", @@ -4824,30 +3968,6 @@ dependencies = [ "toml_edit", ] -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - [[package]] name = "proc-macro-error-attr2" version = "2.0.0" @@ -4879,21 +3999,30 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "program-client" +version = "0.1.0" +dependencies = [ + "anyhow", + "reqwest", + "serde", +] + [[package]] name = "proptest" -version = "1.4.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31b476131c3c86cb68032fdc5cb6d5a1045e3e42d96b69fa599fd77701e1f5bf" +checksum = "14cae93065090804185d3b75f0bf93b8eeda30c7a9b4a33d3bdb3988d6229e50" dependencies = [ "bit-set", - "bit-vec 0.6.3", - "bitflags 2.5.0", + "bit-vec", + "bitflags 2.9.1", "lazy_static", "num-traits", "rand 0.8.5", "rand_chacha 0.3.1", "rand_xorshift", - "regex-syntax 0.8.5", + "regex-syntax", "rusty-fork", "tempfile", "unarray", @@ -4906,17 +4035,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" dependencies = [ "bytes", - "prost-derive 0.12.6", -] - -[[package]] -name = "prost" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" -dependencies = [ - "bytes", - "prost-derive 0.13.5", + "prost-derive", ] [[package]] @@ -4926,14 +4045,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" dependencies = [ "bytes", - "heck 0.5.0", + "heck", "itertools 0.12.1", "log", "multimap", "once_cell", "petgraph", "prettyplease", - "prost 0.12.6", + "prost", "prost-types", "regex", "syn 2.0.101", @@ -4953,26 +4072,13 @@ dependencies = [ "syn 2.0.101", ] -[[package]] -name = "prost-derive" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" -dependencies = [ - "anyhow", - "itertools 0.14.0", - "proc-macro2", - "quote", - "syn 2.0.101", -] - [[package]] name = "prost-types" version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" dependencies = [ - "prost 0.12.6", + "prost", ] [[package]] @@ -4981,61 +4087,6 @@ version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" -[[package]] -name = "quinn" -version = "0.11.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8" -dependencies = [ - "bytes", - "cfg_aliases", - "pin-project-lite", - "quinn-proto", - "quinn-udp", - "rustc-hash", - "rustls", - "socket2", - "thiserror 2.0.12", - "tokio", - "tracing", - "web-time", -] - -[[package]] -name = "quinn-proto" -version = "0.11.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e" -dependencies = [ - "bytes", - "getrandom 0.3.3", - "lru-slab", - "rand 0.9.1", - "ring", - "rustc-hash", - "rustls", - "rustls-pki-types", - "slab", - "thiserror 2.0.12", - "tinyvec", - "tracing", - "web-time", -] - -[[package]] -name = "quinn-udp" -version = "0.5.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee4e529991f949c5e25755532370b8af5d114acae52326361d68d47af64aa842" -dependencies = [ - "cfg_aliases", - "libc", - "once_cell", - "socket2", - "tracing", - "windows-sys 0.59.0", -] - [[package]] name = "quote" version = "1.0.40" @@ -5077,6 +4128,7 @@ checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.3", + "serde", ] [[package]] @@ -5115,6 +4167,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ "getrandom 0.3.3", + "serde", ] [[package]] @@ -5177,35 +4230,35 @@ dependencies = [ ] [[package]] -name = "redox_users" -version = "0.4.6" +name = "ref-cast" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" dependencies = [ - "getrandom 0.2.16", - "libredox", - "thiserror 1.0.69", + "ref-cast-impl", ] [[package]] -name = "regex" -version = "1.11.1" +name = "ref-cast-impl" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" dependencies = [ - "aho-corasick", - "memchr", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", + "proc-macro2", + "quote", + "syn 2.0.101", ] [[package]] -name = "regex-automata" -version = "0.1.10" +name = "regex" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ - "regex-syntax 0.6.29", + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", ] [[package]] @@ -5216,7 +4269,7 @@ checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.5", + "regex-syntax", ] [[package]] @@ -5225,12 +4278,6 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53a49587ad06b26609c52e423de037e7f57f20d53535d66e08c695f347df952a" -[[package]] -name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - [[package]] name = "regex-syntax" version = "0.8.5" @@ -5239,16 +4286,14 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" -version = "0.12.15" +version = "0.12.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d19c46a6fdd48bc4dab94b6103fccc55d34c67cc0ad04653aad4ea2a07cd7bbb" +checksum = "e98ff6b0dbbe4d5a37318f433d4fc82babd21631f194d370409ceb2e40b2f0b5" dependencies = [ "base64 0.22.1", "bytes", "encoding_rs", - "futures-channel", "futures-core", - "futures-util", "h2 0.4.10", "http 1.3.1", "http-body", @@ -5265,289 +4310,44 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "quinn", - "rustls", - "rustls-pemfile", "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", "sync_wrapper", - "system-configuration", "tokio", "tokio-native-tls", - "tokio-rustls", - "tokio-util", "tower", + "tower-http", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", - "wasm-streams", "web-sys", - "webpki-roots 0.26.11", - "windows-registry", -] - -[[package]] -name = "rfc6979" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" -dependencies = [ - "hmac", - "subtle", ] [[package]] -name = "ring" -version = "0.17.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" -dependencies = [ - "cc", - "cfg-if", - "getrandom 0.2.16", - "libc", - "untrusted", - "windows-sys 0.52.0", -] - -[[package]] -name = "risc0-binfmt" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4fe7599ac55ad77515608ec42a9727001559fe4f579c533cb7c973b54800c05" -dependencies = [ - "anyhow", - "borsh", - "derive_more 2.0.1", - "elf", - "lazy_static", - "postcard", - "risc0-zkp", - "risc0-zkvm-platform", - "semver 1.0.26", - "serde", - "tracing", -] - -[[package]] -name = "risc0-build" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31d104165340cba919a3dac26c4be7da04b20b941601a7ad50c04834c4d26de5" -dependencies = [ - "anyhow", - "cargo_metadata", - "derive_builder", - "dirs", - "docker-generate", - "hex", - "risc0-binfmt", - "risc0-zkos-v1compat", - "risc0-zkp", - "risc0-zkvm-platform", - "rzup", - "semver 1.0.26", - "serde", - "serde_json", - "stability", - "tempfile", -] - -[[package]] -name = "risc0-build-ethereum" -version = "2.0.0" -source = "git+https://github.com/risc0/risc0-ethereum?tag=v2.0.0#38591d7a1302d437b76937bd3e0432005b33f616" -dependencies = [ - "anyhow", - "bytemuck", - "hex", - "risc0-build", - "risc0-zkp", - "risc0-zkvm", -] - -[[package]] -name = "risc0-circuit-keccak" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd8acfc84307ed1be64cf9fefc390963fc22b2865d027f03405977a0cfa9747" -dependencies = [ - "anyhow", - "bytemuck", - "paste", - "risc0-binfmt", - "risc0-circuit-recursion", - "risc0-core", - "risc0-zkp", - "tracing", -] - -[[package]] -name = "risc0-circuit-recursion" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd1514e94440e2da301f48d345e1937b315147f58c5dc4992feb045324651d" -dependencies = [ - "anyhow", - "bytemuck", - "hex", - "metal", - "risc0-core", - "risc0-zkp", - "tracing", -] - -[[package]] -name = "risc0-circuit-rv32im" -version = "2.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f6ed144d8b8f93c4a6096e3dd90f9dcbd91eff83eae690a72fd6e640760b94" -dependencies = [ - "anyhow", - "bit-vec 0.8.0", - "bytemuck", - "derive_more 2.0.1", - "paste", - "risc0-binfmt", - "risc0-core", - "risc0-zkp", - "serde", - "tracing", -] - -[[package]] -name = "risc0-core" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317bbf70a8750b64d4fd7a2bdc9d7d5f30d8bb305cae486962c797ef35c8d08e" -dependencies = [ - "bytemuck", - "bytemuck_derive", - "rand_core 0.6.4", -] - -[[package]] -name = "risc0-ethereum-contracts" -version = "2.0.0" -source = "git+https://github.com/risc0/risc0-ethereum?tag=v2.0.0#38591d7a1302d437b76937bd3e0432005b33f616" -dependencies = [ - "alloy 0.12.6", - "alloy-sol-types", - "anyhow", - "cfg-if", - "risc0-zkvm", - "thiserror 2.0.12", - "tracing", -] - -[[package]] -name = "risc0-groth16" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b31cb7b2a46f0cdaf71803ea7e0389af9f5bc1aea2531106f2972b241f26e98" -dependencies = [ - "anyhow", - "ark-bn254 0.5.0", - "ark-ec 0.5.0", - "ark-groth16", - "ark-serialize 0.5.0", - "bytemuck", - "hex", - "num-bigint", - "num-traits", - "risc0-binfmt", - "risc0-zkp", - "serde", - "stability", -] - -[[package]] -name = "risc0-zkos-v1compat" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f76c479b69d1987cb54ac72dcc017197296fdcd6daf78fafc10cbbd3a167a7de" -dependencies = [ - "include_bytes_aligned", - "no_std_strings", -] - -[[package]] -name = "risc0-zkp" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa210a232361fd671b30918469856b64d715f2564956d0a5df97ab6cb116d28b" -dependencies = [ - "anyhow", - "blake2", - "borsh", - "bytemuck", - "cfg-if", - "digest 0.10.7", - "hex", - "hex-literal", - "metal", - "paste", - "rand_core 0.6.4", - "risc0-core", - "risc0-zkvm-platform", - "serde", - "sha2", - "stability", - "tracing", -] - -[[package]] -name = "risc0-zkvm" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a049319790277845335445b549d49e66341f4a7ffba7f7aaa1e77e2fc4a9c19" -dependencies = [ - "anyhow", - "bincode", - "bonsai-sdk", - "borsh", - "bytemuck", - "bytes", - "derive_more 2.0.1", - "getrandom 0.2.16", - "hex", - "lazy-regex", - "prost 0.13.5", - "risc0-binfmt", - "risc0-build", - "risc0-circuit-keccak", - "risc0-circuit-recursion", - "risc0-circuit-rv32im", - "risc0-core", - "risc0-groth16", - "risc0-zkos-v1compat", - "risc0-zkp", - "risc0-zkvm-platform", - "rrs-lib", - "rzup", - "semver 1.0.26", - "serde", - "sha2", - "stability", - "tempfile", - "tracing", +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", ] [[package]] -name = "risc0-zkvm-platform" -version = "2.0.2" +name = "ring" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e4de2938eaf24892ef927d9cef6e4acb6a19ce01c017cd498533896f633f332" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ - "bytemuck", + "cc", "cfg-if", "getrandom 0.2.16", - "getrandom 0.3.3", - "libm", - "stability", + "libc", + "untrusted", + "windows-sys 0.52.0", ] [[package]] @@ -5572,33 +4372,26 @@ dependencies = [ "serde_derive", ] -[[package]] -name = "rrs-lib" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4382d3af3a4ebdae7f64ba6edd9114fff92c89808004c4943b393377a25d001" -dependencies = [ - "downcast-rs", - "paste", -] - [[package]] name = "ruint" -version = "1.12.3" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c3cc4c2511671f327125da14133d0c5c5d137f006a1017a16f557bc85b16286" +checksum = "11256b5fe8c68f56ac6f39ef0720e592f33d2367a4782740d9c9142e889c7fb4" dependencies = [ "alloy-rlp", "ark-ff 0.3.0", "ark-ff 0.4.2", "bytes", - "fastrlp", + "fastrlp 0.3.1", + "fastrlp 0.4.0", "num-bigint", + "num-integer", "num-traits", "parity-scale-codec", "primitive-types", "proptest", "rand 0.8.5", + "rand 0.9.1", "rlp", "ruint-macro", "serde", @@ -5685,22 +4478,12 @@ dependencies = [ "zeroize", ] -[[package]] -name = "rustls-pemfile" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" -dependencies = [ - "rustls-pki-types", -] - [[package]] name = "rustls-pki-types" version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" dependencies = [ - "web-time", "zeroize", ] @@ -5717,9 +4500,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" [[package]] name = "rusty-fork" @@ -5739,21 +4522,6 @@ version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" -[[package]] -name = "rzup" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "400558bf12d4292a7804093b60a437ba8b0219ea7d53716b2c010a0d31e5f4a8" -dependencies = [ - "semver 1.0.26", - "serde", - "strum 0.26.3", - "tempfile", - "thiserror 2.0.12", - "toml", - "yaml-rust2 0.9.0", -] - [[package]] name = "schannel" version = "0.1.27" @@ -5764,14 +4532,15 @@ dependencies = [ ] [[package]] -name = "schnellru" -version = "0.2.4" +name = "schemars" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "356285bbf17bea63d9e52e96bd18f039672ac92b55b8cb997d6162a2a37d1649" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" dependencies = [ - "ahash", - "cfg-if", - "hashbrown 0.13.2", + "dyn-clone", + "ref-cast", + "serde", + "serde_json", ] [[package]] @@ -5795,6 +4564,27 @@ dependencies = [ "zeroize", ] +[[package]] +name = "secp256k1" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b50c5943d326858130af85e049f2661ba3c78b26589b8ab98e65e80ae44a1252" +dependencies = [ + "bitcoin_hashes", + "rand 0.8.5", + "secp256k1-sys", + "serde", +] + +[[package]] +name = "secp256k1-sys" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4387882333d3aa8cb20530a17c69a3752e97837832f34f6dccc760e715001d9" +dependencies = [ + "cc", +] + [[package]] name = "security-framework" version = "2.11.1" @@ -5832,9 +4622,6 @@ name = "semver" version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" -dependencies = [ - "serde", -] [[package]] name = "semver-parser" @@ -5906,15 +4693,16 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.12.0" +version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa" +checksum = "bf65a400f8f66fb7b0552869ad70157166676db75ed8181f8104ea91cf9d0b42" dependencies = [ "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", "indexmap 2.9.0", + "schemars", "serde", "serde_derive", "serde_json", @@ -5924,9 +4712,9 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.12.0" +version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e" +checksum = "81679d9ed988d5e9a5e6531dc3f2c28efbd639cbd1dfb628df08edea6004da77" dependencies = [ "darling", "proc-macro2", @@ -5986,15 +4774,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "sharded-slab" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" -dependencies = [ - "lazy_static", -] - [[package]] name = "shell-words" version = "1.1.0" @@ -6062,9 +4841,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.9" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" dependencies = [ "libc", "windows-sys 0.52.0", @@ -6086,16 +4865,6 @@ dependencies = [ "der", ] -[[package]] -name = "stability" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d904e7009df136af5297832a3ace3370cd14ff1546a232f4f185036c2736fcac" -dependencies = [ - "quote", - "syn 2.0.101", -] - [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -6114,35 +4883,13 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" -[[package]] -name = "strum" -version = "0.26.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" -dependencies = [ - "strum_macros 0.26.4", -] - [[package]] name = "strum" version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f64def088c51c9510a8579e3c5d67c65349dcf755e5479ad3d010aa6454e2c32" dependencies = [ - "strum_macros 0.27.1", -] - -[[package]] -name = "strum_macros" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.101", + "strum_macros", ] [[package]] @@ -6151,7 +4898,7 @@ version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c77a8c5abcaf0f9ce05d62342b7d298c346515365c36b673df4ebe3ced01fde8" dependencies = [ - "heck 0.5.0", + "heck", "proc-macro2", "quote", "rustversion", @@ -6188,9 +4935,9 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "0.8.25" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4560533fbd6914b94a8fb5cc803ed6801c3455668db3b810702c57612bac9412" +checksum = "14c8c8f496c33dc6343dac05b4be8d9e0bca180a4caa81d7b8416b10cc2273cd" dependencies = [ "paste", "proc-macro2", @@ -6367,32 +5114,17 @@ dependencies = [ "zerovec", ] -[[package]] -name = "tinyvec" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - [[package]] name = "tokio" -version = "1.45.0" +version = "1.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2513ca694ef9ede0fb23fe71a4ee4107cb102b9dc1930f6d0fd77aae068ae165" +checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" dependencies = [ "backtrace", "bytes", "libc", "mio", - "parking_lot 0.12.3", + "parking_lot 0.12.4", "pin-project-lite", "signal-hook-registry", "socket2", @@ -6445,9 +5177,9 @@ dependencies = [ [[package]] name = "tokio-tungstenite" -version = "0.24.0" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9" +checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084" dependencies = [ "futures-util", "log", @@ -6528,6 +5260,24 @@ dependencies = [ "tower-service", ] +[[package]] +name = "tower-http" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc2d9e086a412a451384326f521c8123a99a466b329941a9403696bff9b0da2" +dependencies = [ + "bitflags 2.9.1", + "bytes", + "futures-util", + "http 1.3.1", + "http-body", + "iri-string", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", +] + [[package]] name = "tower-layer" version = "0.3.3" @@ -6570,7 +5320,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", - "valuable", ] [[package]] @@ -6585,44 +5334,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "tracing-log" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" -dependencies = [ - "log", - "once_cell", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.2.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" -dependencies = [ - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" -dependencies = [ - "matchers", - "nu-ansi-term", - "once_cell", - "regex", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", -] - [[package]] name = "try-lock" version = "0.2.5" @@ -6631,21 +5342,20 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "tungstenite" -version = "0.24.0" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18e5b8366ee7a95b16d32197d0b2604b43a0be89dc5fac9f8e96ccafbaedda8a" +checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13" dependencies = [ - "byteorder", "bytes", "data-encoding", "http 1.3.1", "httparse", "log", - "rand 0.8.5", + "rand 0.9.1", "rustls", "rustls-pki-types", "sha1", - "thiserror 1.0.69", + "thiserror 2.0.12", "utf-8", ] @@ -6756,40 +5466,6 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" -[[package]] -name = "voting-core" -version = "0.1.0" -dependencies = [ - "commons", - "compute-provider", - "fhe", - "fhe-traits", -] - -[[package]] -name = "voting-host" -version = "0.1.0" -dependencies = [ - "alloy-primitives", - "alloy-sol-types", - "anyhow", - "bincode", - "bytemuck", - "compute-provider", - "fhe", - "fhe-traits", - "fhe-util", - "log", - "methods", - "rand 0.8.5", - "risc0-ethereum-contracts", - "risc0-zkvm", - "serde", - "tokio", - "tracing-subscriber 0.3.19", - "voting-core", -] - [[package]] name = "wait-timeout" version = "0.2.1" @@ -6894,19 +5570,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "wasm-streams" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" -dependencies = [ - "futures-util", - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - [[package]] name = "wasmtimer" version = "0.4.1" @@ -6915,7 +5578,7 @@ checksum = "0048ad49a55b9deb3953841fa1fc5858f0efbcb7a18868c899a360269fac1b23" dependencies = [ "futures", "js-sys", - "parking_lot 0.12.3", + "parking_lot 0.12.4", "pin-utils", "slab", "wasm-bindgen", @@ -6931,16 +5594,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "web-time" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - [[package]] name = "webpki-roots" version = "0.26.11" @@ -6989,15 +5642,15 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-core" -version = "0.61.0" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ "windows-implement", "windows-interface", "windows-link", "windows-result", - "windows-strings 0.4.0", + "windows-strings 0.4.2", ] [[package]] @@ -7041,9 +5694,9 @@ dependencies = [ [[package]] name = "windows-result" -version = "0.3.2" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ "windows-link", ] @@ -7059,22 +5712,13 @@ dependencies = [ [[package]] name = "windows-strings" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ "windows-link", ] -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - [[package]] name = "windows-sys" version = "0.52.0" @@ -7093,21 +5737,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - [[package]] name = "windows-targets" version = "0.52.6" @@ -7140,12 +5769,6 @@ dependencies = [ "windows_x86_64_msvc 0.53.0", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -7158,12 +5781,6 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" @@ -7176,12 +5793,6 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -7206,12 +5817,6 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - [[package]] name = "windows_i686_msvc" version = "0.52.6" @@ -7224,12 +5829,6 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" @@ -7242,12 +5841,6 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" @@ -7260,12 +5853,6 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -7338,18 +5925,7 @@ checksum = "8902160c4e6f2fb145dbe9d6760a75e3c9522d8bf796ed7047c85919ac7115f8" dependencies = [ "arraydeque", "encoding_rs", - "hashlink 0.8.4", -] - -[[package]] -name = "yaml-rust2" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a1a1c0bc9823338a3bdf8c61f994f23ac004c6fa32c08cd152984499b445e8d" -dependencies = [ - "arraydeque", - "encoding_rs", - "hashlink 0.9.1", + "hashlink", ] [[package]] diff --git a/examples/CRISP/apps/server/Cargo.toml b/examples/CRISP/apps/server/Cargo.toml index a61b4bc31a..195466db17 100644 --- a/examples/CRISP/apps/server/Cargo.toml +++ b/examples/CRISP/apps/server/Cargo.toml @@ -26,19 +26,20 @@ tokio = "1.38" futures = "0.3.30" # Cryptography and blockchain -alloy = { version = "0.8", features = ["full", "rpc-types-eth"] } -alloy-primitives = { version = "0.8", default-features = false, features = ["rlp", "serde", "std"] } -alloy-sol-types = "0.8" -fhe_rs = { package = "fhe", git = "https://github.com/gnosisguild/fhe.rs", branch = "feature/greco-integration" } -fhe-traits = { git = "https://github.com/gnosisguild/fhe.rs", branch = "feature/greco-integration" } +alloy = { version = "1.0.11", features = ["full", "rpc-types-eth"] } +alloy-primitives = { version = "1.0", default-features = false, features = ["rlp", "serde", "std"] } +alloy-sol-types = "1.0" +async-trait = { version = "0.1.88" } +fhe_rs = { package = "fhe", git = "https://github.com/gnosisguild/fhe.rs" } +fhe-traits = { git = "https://github.com/gnosisguild/fhe.rs" } hmac = "0.12.1" jwt = "0.16.0" sha2 = "0.10.8" # Local dependencies -compute-provider = { path = "../../../../packages/compute_provider" } -commons = { path = "../../../../packages/commons" } -voting-host = { path = "../program/host" } +e3-compute-provider = { path = "../../../../crates/compute-provider" } +e3-sdk = { path = "../../../../crates/sdk" } +program-client = { path = "../program/client" } # CLI and user interaction dialoguer = { version = "0.11.0", features = ["fuzzy-select"] } diff --git a/examples/CRISP/apps/server/Dockerfile b/examples/CRISP/apps/server/Dockerfile new file mode 100644 index 0000000000..a728628796 --- /dev/null +++ b/examples/CRISP/apps/server/Dockerfile @@ -0,0 +1,138 @@ +############### stage 0: base-dev ############### +ARG RUST_VERSION=1.85.0 +ARG RISC0_VERSION=2.1.0 +ARG SKIP_SOLIDITY=0 + +FROM rust:${RUST_VERSION}-slim-bullseye AS base-dev + +ENV RISC0_HOME=/root/.risc0 +ENV PATH="${RISC0_HOME}/bin:${PATH}" +ENV CARGO_HOME=/usr/local/cargo + +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + pkg-config libssl-dev curl ca-certificates && \ + rm -rf /var/lib/apt/lists/* + +RUN curl -sSfL https://risczero.com/install | bash +RUN rzup install rust ${RUST_VERSION} +RUN rzup install r0vm ${RISC0_VERSION} +RUN rzup install cargo-risczero ${RISC0_VERSION} + +RUN cargo install --locked cargo-chef + +################################################# +############### stage 1: chef ################### +FROM base-dev AS chef +WORKDIR /app + +COPY examples/CRISP/apps/server/Cargo.toml examples/CRISP/apps/server/Cargo.lock examples/CRISP/apps/server/ +COPY examples/CRISP/apps/program/Cargo.toml examples/CRISP/apps/program/ +COPY examples/CRISP/apps/program/host/Cargo.toml examples/CRISP/apps/program/host/ +COPY examples/CRISP/apps/program/core/Cargo.toml examples/CRISP/apps/program/core/ +COPY examples/CRISP/apps/program/methods/Cargo.toml examples/CRISP/apps/program/methods/ +COPY crates/sdk/Cargo.toml crates/sdk/ +COPY Cargo.toml Cargo.lock ./ +COPY crates/compute-provider/Cargo.toml crates/compute-provider/ + +WORKDIR /app/examples/CRISP/apps/server +RUN cargo chef prepare --recipe-path recipe.json + +############### stage 2: planner ############### +FROM base-dev AS planner + +ARG SKIP_SOLIDITY +ENV SKIP_SOLIDITY=${SKIP_SOLIDITY} + +WORKDIR /app +COPY --from=chef /app/examples/CRISP/apps/server/recipe.json \ + /app/examples/CRISP/apps/server/recipe.json + +COPY examples/CRISP/apps/server/Cargo.toml examples/CRISP/apps/server/Cargo.lock examples/CRISP/apps/server/ +COPY examples/CRISP/apps/program/Cargo.toml examples/CRISP/apps/program/ +COPY examples/CRISP/apps/program/host/Cargo.toml examples/CRISP/apps/program/host/ +COPY examples/CRISP/apps/program/core/Cargo.toml examples/CRISP/apps/program/core/ +COPY examples/CRISP/apps/program/methods/Cargo.toml examples/CRISP/apps/program/methods/ + +COPY Cargo.lock ./Cargo.lock +COPY Cargo.toml ./Cargo.toml + +# find crates/* -name "Cargo.toml" -not -path "*/support/*" -printf "COPY %p %p\n" +COPY crates/aggregator/Cargo.toml crates/aggregator/Cargo.toml +COPY crates/bfv-helpers/Cargo.toml crates/bfv-helpers/Cargo.toml +COPY crates/cli/Cargo.toml crates/cli/Cargo.toml +COPY crates/compute-provider/Cargo.toml crates/compute-provider/Cargo.toml +COPY crates/config/Cargo.toml crates/config/Cargo.toml +COPY crates/crypto/Cargo.toml crates/crypto/Cargo.toml +COPY crates/data/Cargo.toml crates/data/Cargo.toml +COPY crates/entrypoint/Cargo.toml crates/entrypoint/Cargo.toml +COPY crates/events/Cargo.toml crates/events/Cargo.toml +COPY crates/evm/Cargo.toml crates/evm/Cargo.toml +COPY crates/evm-helpers/Cargo.toml crates/evm-helpers/Cargo.toml +COPY crates/fhe/Cargo.toml crates/fhe/Cargo.toml +COPY crates/fs/Cargo.toml crates/fs/Cargo.toml +COPY crates/indexer/Cargo.toml crates/indexer/Cargo.toml +COPY crates/init/Cargo.toml crates/init/Cargo.toml +COPY crates/keyshare/Cargo.toml crates/keyshare/Cargo.toml +COPY crates/logger/Cargo.toml crates/logger/Cargo.toml +COPY crates/net/Cargo.toml crates/net/Cargo.toml +COPY crates/program-server/Cargo.toml crates/program-server/Cargo.toml +COPY crates/request/Cargo.toml crates/request/Cargo.toml +COPY crates/sdk/Cargo.toml crates/sdk/Cargo.toml +COPY crates/sortition/Cargo.toml crates/sortition/Cargo.toml +COPY crates/support-scripts/Cargo.toml crates/support-scripts/Cargo.toml +COPY crates/test-helpers/Cargo.toml crates/test-helpers/Cargo.toml +COPY crates/tests/Cargo.toml crates/tests/Cargo.toml +COPY crates/wasm/Cargo.toml crates/wasm/Cargo.toml + + +RUN set -eux; \ + find \ + examples/CRISP/apps/program \ + crates \ + -type f -name Cargo.toml ! -path '*/target/*' -print0 \ + | while IFS= read -r -d '' manifest_path; do \ + crate_dir="$(dirname "$manifest_path")"; \ + if [ "$manifest_path" = "examples/CRISP/apps/program/Cargo.toml" ]; then \ + continue; \ + fi; \ + mkdir -p "$crate_dir/src"; \ + if [ ! -f "$crate_dir/src/lib.rs" ] && [ ! -f "$crate_dir/src/main.rs" ]; then \ + echo "// Stub lib.rs for $crate_dir" > "$crate_dir/src/lib.rs"; \ + fi; \ + done + +WORKDIR /app/examples/CRISP/apps/server +RUN --mount=type=cache,id=cargo-registry,target=/usr/local/cargo/registry,sharing=locked \ + --mount=type=cache,id=cargo-git,target=/usr/local/cargo/git,sharing=locked \ + --mount=type=cache,id=cargo-target,target=/app/target,sharing=locked \ + cargo chef cook --release --recipe-path recipe.json + +############### stage 3: builder ############### +FROM base-dev AS builder + +ARG SKIP_SOLIDITY +ENV SKIP_SOLIDITY=${SKIP_SOLIDITY} + +WORKDIR /app + +COPY examples/CRISP/apps/server/ examples/CRISP/apps/server/ +COPY examples/CRISP/apps/program/ examples/CRISP/apps/program/ +COPY Cargo.* ./ +COPY crates/ crates/ +COPY crates/compute-provider/ crates/compute-provider/ + +WORKDIR /app/examples/CRISP/apps/server +RUN --mount=type=cache,id=cargo-registry,target=/usr/local/cargo/registry,sharing=locked \ + --mount=type=cache,id=cargo-git,target=/usr/local/cargo/git,sharing=locked \ + --mount=type=cache,id=cargo-target,target=/app/target,sharing=locked \ + cargo build --release --bin server && \ + mkdir -p /app/dist && cp target/release/server /app/dist/server + +############### stage 4: runtime ############### +FROM gcr.io/distroless/cc-debian12 AS runtime +WORKDIR / + +COPY --from=builder /app/dist/server \ + /usr/local/bin/server +ENTRYPOINT ["/usr/local/bin/server"] diff --git a/examples/CRISP/apps/server/src/cli/commands.rs b/examples/CRISP/apps/server/src/cli/commands.rs index 9bb8ecb9f7..968544d558 100644 --- a/examples/CRISP/apps/server/src/cli/commands.rs +++ b/examples/CRISP/apps/server/src/cli/commands.rs @@ -6,11 +6,10 @@ use serde::{Deserialize, Serialize}; use super::{CLI_DB, CONFIG}; use alloy::primitives::{Address, Bytes, U256}; -use commons::bfv::{build_bfv_params_arc, encode_bfv_params, params::SET_2048_1032193_1}; -use crisp::server::blockchain::relayer::EnclaveContract; -use fhe_rs::bfv::{ - BfvParameters, Ciphertext, Encoding, Plaintext, PublicKey, SecretKey, -}; +use crisp::server::config::CONFIG as SERVER_CONFIG; // TODO: unify configuration +use e3_sdk::bfv_helpers::{build_bfv_params_arc, encode_bfv_params, params::SET_2048_1032193_1}; +use e3_sdk::evm_helpers::contracts::{EnclaveContract, EnclaveRead, EnclaveWrite, ReadOnly}; +use fhe_rs::bfv::{BfvParameters, Ciphertext, Encoding, Plaintext, PublicKey, SecretKey}; use fhe_traits::{ DeserializeParametrized, FheDecoder, FheDecrypter, FheEncoder, FheEncrypter, Serialize as FheSerialize, @@ -46,7 +45,12 @@ struct CTRequest { pub async fn initialize_crisp_round() -> Result<(), Box> { info!("Starting new CRISP round!"); - let contract = EnclaveContract::new(CONFIG.enclave_address.clone()).await?; + let contract = EnclaveContract::new( + &SERVER_CONFIG.http_rpc_url, + &SERVER_CONFIG.private_key, + &SERVER_CONFIG.enclave_address, + ) + .await?; let e3_program: Address = CONFIG.e3_program_address.parse()?; info!("Enabling E3 Program..."); @@ -102,7 +106,12 @@ pub async fn activate_e3_round() -> Result<(), Box Result<(), Box::try_decode(&pt, Encoding::poly())?[0]; info!("Vote count: {:?}", votes); - let contract = EnclaveContract::new(CONFIG.enclave_address.clone()).await?; + let contract = EnclaveContract::new( + &SERVER_CONFIG.http_rpc_url, + &SERVER_CONFIG.private_key, + &SERVER_CONFIG.enclave_address, + ) + .await?; let res = contract .publish_plaintext_output(U256::from(input_crisp_id), Bytes::from(votes.to_be_bytes())) .await?; diff --git a/examples/CRISP/apps/server/src/cli/main.rs b/examples/CRISP/apps/server/src/cli/main.rs index 6b92124c0e..1ed4ce9fd2 100644 --- a/examples/CRISP/apps/server/src/cli/main.rs +++ b/examples/CRISP/apps/server/src/cli/main.rs @@ -4,10 +4,7 @@ mod config; use dialoguer::{theme::ColorfulTheme, FuzzySelect}; use reqwest::Client; -use commands::{ - activate_e3_round, decrypt_and_publish_result, initialize_crisp_round, - participate_in_existing_round, -}; +use commands::initialize_crisp_round; use config::CONFIG; use crisp::logger::init_logger; use log::info; @@ -38,9 +35,6 @@ struct Cli { enum Commands { /// Initialize new E3 round Init, - - /// Participate in an E3 round - Participate, } #[tokio::main] @@ -59,9 +53,6 @@ pub async fn main() -> Result<(), Box> { Some(Commands::Init) => { initialize_crisp_round().await?; } - Some(Commands::Participate) => { - participate_in_existing_round(&client).await?; - } None => { // Fall back to interactive mode if no command was specified let action = select_action()?; @@ -69,9 +60,6 @@ pub async fn main() -> Result<(), Box> { 0 => { initialize_crisp_round().await?; } - 1 => { - participate_in_existing_round(&client).await?; - } _ => unreachable!(), } } @@ -92,7 +80,7 @@ fn select_environment() -> Result Result> { let selections = &[ "Initialize new E3 round.", - "Participate in an E3 round.", + // "Participate in an E3 round.", // "Activate an E3 round.", // "Decrypt Ciphertext & Publish Results", ]; diff --git a/examples/CRISP/apps/server/src/server/app_data.rs b/examples/CRISP/apps/server/src/server/app_data.rs new file mode 100644 index 0000000000..fbad55f8d0 --- /dev/null +++ b/examples/CRISP/apps/server/src/server/app_data.rs @@ -0,0 +1,27 @@ +use std::sync::Arc; + +use e3_sdk::indexer::SharedStore; +use tokio::sync::RwLock; + +use super::{ + database::SledDB, + repo::{CrispE3Repository, CurrentRoundRepository}, +}; + +pub struct AppData { + db: SharedStore, +} + +impl AppData { + pub fn new(db: SharedStore) -> Self { + Self { db } + } + + pub fn e3(&self, e3_id: u64) -> CrispE3Repository { + CrispE3Repository::new(self.db.clone(), e3_id) + } + + pub fn current_round(&self) -> CurrentRoundRepository { + CurrentRoundRepository::new(self.db.clone()) + } +} diff --git a/examples/CRISP/apps/server/src/server/blockchain/events.rs b/examples/CRISP/apps/server/src/server/blockchain/events.rs deleted file mode 100644 index 2914989bca..0000000000 --- a/examples/CRISP/apps/server/src/server/blockchain/events.rs +++ /dev/null @@ -1,92 +0,0 @@ -use alloy::{rpc::types::Log, sol}; - -use eyre::Result; - -use super::handlers::{ - handle_ciphertext_output_published, handle_committee_published, handle_e3, - handle_input_published, handle_plaintext_output_published, -}; -use super::listener::ContractEvent; - -sol! { - #[derive(Debug)] - event E3Activated(uint256 e3Id, uint256 expiration, bytes committeePublicKey); - - #[derive(Debug)] - event InputPublished(uint256 indexed e3Id, bytes data, uint256 inputHash, uint256 index); - - #[derive(Debug)] - event CiphertextOutputPublished(uint256 indexed e3Id, bytes ciphertextOutput); - - #[derive(Debug)] - event PlaintextOutputPublished(uint256 indexed e3Id, bytes plaintextOutput); - - #[derive(Debug)] - event CommitteePublished(uint256 indexed e3Id, bytes publicKey); -} - -impl ContractEvent for E3Activated { - fn process(&self, _log: Log) -> Result<()> { - let event_clone = self.clone(); - tokio::spawn(async move { - if let Err(e) = handle_e3(event_clone).await { - eprintln!("Error handling E3 request: {:?}", e); - } - }); - - Ok(()) - } -} - -impl ContractEvent for InputPublished { - fn process(&self, _log: Log) -> Result<()> { - let event_clone = self.clone(); - tokio::spawn(async move { - if let Err(e) = handle_input_published(event_clone).await { - eprintln!("Error handling input published: {:?}", e); - } - }); - - Ok(()) - } -} - -impl ContractEvent for CiphertextOutputPublished { - fn process(&self, _log: Log) -> Result<()> { - let event_clone = self.clone(); - tokio::spawn(async move { - if let Err(e) = handle_ciphertext_output_published(event_clone).await { - eprintln!("Error handling ciphertext output published: {:?}", e); - } - }); - - Ok(()) - } -} - -impl ContractEvent for PlaintextOutputPublished { - fn process(&self, _log: Log) -> Result<()> { - let event_clone = self.clone(); - - tokio::spawn(async move { - if let Err(e) = handle_plaintext_output_published(event_clone).await { - eprintln!("Error handling public key published: {:?}", e); - } - }); - - Ok(()) - } -} - -impl ContractEvent for CommitteePublished { - fn process(&self, _log: Log) -> Result<()> { - let event_clone = self.clone(); - tokio::spawn(async move { - if let Err(e) = handle_committee_published(event_clone).await { - eprintln!("Error handling committee published: {:?}", e); - } - }); - - Ok(()) - } -} diff --git a/examples/CRISP/apps/server/src/server/blockchain/handlers.rs b/examples/CRISP/apps/server/src/server/blockchain/handlers.rs deleted file mode 100644 index b43c91adad..0000000000 --- a/examples/CRISP/apps/server/src/server/blockchain/handlers.rs +++ /dev/null @@ -1,203 +0,0 @@ -use super::{ - events::{ - CiphertextOutputPublished, CommitteePublished, E3Activated, InputPublished, - PlaintextOutputPublished, - }, - relayer::EnclaveContract, -}; -use crate::server::{ - config::CONFIG, - database::{generate_emoji, get_e3, update_e3_status, GLOBAL_DB}, - models::{CurrentRound, E3}, -}; -use chrono::Utc; -use compute_provider::FHEInputs; -use log::info; -use std::error::Error; -use std::time::{Duration, SystemTime, UNIX_EPOCH}; -use tokio::time::{sleep_until, Instant}; -use voting_host::run_compute; - -type Result = std::result::Result>; - -pub async fn handle_e3(e3_activated: E3Activated) -> Result<()> { - let e3_id = e3_activated.e3Id.to::(); - info!("Handling E3 request with id {}", e3_id); - - // Fetch E3 from the contract - let contract = EnclaveContract::new(CONFIG.enclave_address.clone()).await?; - - let e3 = contract.get_e3(e3_activated.e3Id).await?; - info!("Fetched E3 from the contract."); - info!("E3: {:?}", e3); - - let start_time = Utc::now().timestamp() as u64; - - let e3_obj = E3 { - // Identifiers - id: e3_id, - chain_id: CONFIG.chain_id, // Hardcoded for testing - enclave_address: CONFIG.enclave_address.clone(), - - // Status-related - status: "Active".to_string(), - has_voted: vec![], - vote_count: 0, - votes_option_1: 0, - votes_option_2: 0, - - // Timing-related - start_time, - block_start: e3.requestBlock.to::(), - duration: e3.duration.to::(), - expiration: e3.expiration.to::(), - - // Parameters - e3_params: e3.e3ProgramParams.to_vec(), - committee_public_key: e3_activated.committeePublicKey.to_vec(), - - // Outputs - ciphertext_output: vec![], - plaintext_output: vec![], - - // Ciphertext Inputs - ciphertext_inputs: vec![], - - // Emojis - emojis: generate_emoji(), - }; - - // Save E3 to the database - let key = format!("e3:{}", e3_id); - GLOBAL_DB.insert(&key, &e3_obj).await?; - - // Set Current Round - let current_round = CurrentRound { id: e3_id }; - GLOBAL_DB.insert("e3:current_round", ¤t_round).await?; - - let expiration = Instant::now() - + (UNIX_EPOCH + Duration::from_secs(e3.expiration.to::())) - .duration_since(SystemTime::now()) - .unwrap_or_else(|_| Duration::ZERO); - - info!("Expiration: {:?}", expiration); - - // Sleep till the E3 expires (instantly if in the past) - sleep_until(expiration).await; - - // Get All Encrypted Votes - let (mut e3, _) = get_e3(e3_id).await.unwrap(); - update_e3_status(e3_id, "Expired".to_string()).await?; - - if e3.vote_count > 0 { - info!("E3 FROM DB"); - info!("Vote Count: {:?}", e3.vote_count); - - let fhe_inputs = FHEInputs { - params: e3.e3_params, - ciphertexts: e3.ciphertext_inputs, - }; - info!("Starting computation for E3: {}", e3_id); - update_e3_status(e3_id, "Computing".to_string()).await?; - // Call Compute Provider in a separate thread - let (risc0_output, ciphertext) = - tokio::task::spawn_blocking(move || run_compute(fhe_inputs).unwrap()) - .await - .unwrap(); - - info!("Computation completed for E3: {}", e3_id); - info!("RISC0 Output: {:?}", risc0_output); - update_e3_status(e3_id, "PublishingCiphertext".to_string()).await?; - // Params will be encoded on chain to create the journal - let tx = contract - .publish_ciphertext_output( - e3_activated.e3Id, - ciphertext.into(), - risc0_output.seal.into(), - ) - .await?; - - info!( - "CiphertextOutputPublished event published with tx: {:?}", - tx.transaction_hash - ); - } else { - info!("E3 has no votes to decrypt. Setting status to Finished."); - e3.status = "Finished".to_string(); - - GLOBAL_DB.insert(&key, &e3_obj).await?; - } - info!("E3 request handled successfully."); - Ok(()) -} - -pub async fn handle_input_published(input: InputPublished) -> Result<()> { - info!("Handling VoteCast event..."); - - let e3_id = input.e3Id.to::(); - let (mut e3, key) = get_e3(e3_id).await?; - - e3.ciphertext_inputs - .push((input.data.to_vec(), input.index.to::())); - e3.vote_count += 1; - - GLOBAL_DB.insert(&key, &e3).await?; - - info!("Saved Input with Hash: {:?}", input.inputHash); - Ok(()) -} - -pub async fn handle_ciphertext_output_published( - ciphertext_output: CiphertextOutputPublished, -) -> Result<()> { - info!("Handling CiphertextOutputPublished event..."); - - let e3_id = ciphertext_output.e3Id.to::(); - let (mut e3, key) = get_e3(e3_id).await?; - - e3.ciphertext_output = ciphertext_output.ciphertextOutput.to_vec(); - e3.status = "CiphertextPublished".to_string(); - - GLOBAL_DB.insert(&key, &e3).await?; - - info!("CiphertextOutputPublished event handled."); - Ok(()) -} - -pub async fn handle_plaintext_output_published( - plaintext_output: PlaintextOutputPublished, -) -> Result<()> { - info!("Handling PlaintextOutputPublished event..."); - let e3_id = plaintext_output.e3Id.to::(); - let (mut e3, key) = get_e3(e3_id).await?; - - let decoded: Vec = bincode::deserialize(&plaintext_output.plaintextOutput.to_vec())?; - e3.plaintext_output = plaintext_output.plaintextOutput.to_vec(); - e3.votes_option_2 = decoded[0]; - e3.votes_option_1 = e3.vote_count - e3.votes_option_2; - e3.status = "Finished".to_string(); - - info!("Vote Count: {:?}", e3.vote_count); - info!("Votes Option 1: {:?}", e3.votes_option_1); - info!("Votes Option 2: {:?}", e3.votes_option_2); - - GLOBAL_DB.insert(&key, &e3).await?; - - info!("PlaintextOutputPublished event handled."); - Ok(()) -} - -pub async fn handle_committee_published(committee_published: CommitteePublished) -> Result<()> { - info!("Handling CommitteePublished event..."); - info!( - "Committee Published for round: {:?}", - committee_published.e3Id - ); - - let contract = EnclaveContract::new(CONFIG.enclave_address.clone()).await?; - let tx = contract - .activate(committee_published.e3Id, committee_published.publicKey) - .await?; - info!("E3 activated with tx: {:?}", tx.transaction_hash); - Ok(()) -} diff --git a/examples/CRISP/apps/server/src/server/blockchain/listener.rs b/examples/CRISP/apps/server/src/server/blockchain/listener.rs deleted file mode 100644 index f1ec1881d3..0000000000 --- a/examples/CRISP/apps/server/src/server/blockchain/listener.rs +++ /dev/null @@ -1,162 +0,0 @@ -use alloy::{ - primitives::{Address, B256}, - providers::{Provider, ProviderBuilder, RootProvider}, - rpc::types::{BlockNumberOrTag, Filter, Log}, - sol_types::SolEvent, - transports::BoxTransport, -}; -use eyre::eyre; -use eyre::Result; -use futures::stream::StreamExt; -use log::{error, info}; -use std::collections::HashMap; -use std::sync::Arc; -use std::time::Duration; -use tokio::time::sleep; - -use super::events::{ - CiphertextOutputPublished, CommitteePublished, E3Activated, InputPublished, - PlaintextOutputPublished, -}; - -pub trait ContractEvent: Send + Sync + 'static { - fn process(&self, log: Log) -> Result<()>; -} - -pub struct EventListener { - provider: Arc>, - filter: Filter, - handlers: HashMap Result> + Send + Sync>>, -} - -impl EventListener { - pub fn new(provider: Arc>, filter: Filter) -> Self { - Self { - provider, - filter, - handlers: HashMap::new(), - } - } - - pub fn add_event_handler(&mut self) - where - E: SolEvent + ContractEvent + 'static, - { - let signature = E::SIGNATURE_HASH; - let handler = Arc::new(move |log: Log| -> Result> { - let event = log.log_decode::()?.inner.data; - Ok(Box::new(event)) - }); - - self.handlers.insert(signature, handler); - } - - pub async fn listen(&self) -> Result<()> { - let mut stream = self - .provider - .subscribe_logs(&self.filter) - .await? - .into_stream(); - while let Some(log) = stream.next().await { - if let Some(topic0) = log.topic0() { - if let Some(decoder) = self.handlers.get(topic0) { - match decoder(log.clone()) { - Ok(event) => { - event.process(log)?; - } - Err(e) => { - println!("Error decoding event 0x{:x}: {:?}", topic0, e); - } - } - } - } - } - - Ok(()) - } -} - -pub struct EnclaveContract { - provider: Arc>, -} - -impl EnclaveContract { - pub async fn new(rpc_url: &str) -> Result { - let provider = ProviderBuilder::new().on_builtin(rpc_url).await?; - Ok(Self { - provider: Arc::new(provider), - }) - } - - pub fn add_listener(&self, contract_address: Address) -> EventListener { - let filter = Filter::new() - .address(contract_address) - .from_block(BlockNumberOrTag::Latest); - - EventListener::new(self.provider.clone(), filter) - } -} - -pub async fn start_listener( - rpc_url: &str, - enclave_address: &str, - registry_address: &str, -) -> Result<()> { - let enclave_address: Address = enclave_address - .parse() - .map_err(|_| eyre!("Failed to parse enclave_address: {}", enclave_address))?; - let registry_address: Address = registry_address - .parse() - .map_err(|_| eyre!("Failed to parse registry_address: {}", registry_address))?; - - loop { - match run_listener(rpc_url, enclave_address, registry_address).await { - Ok(_) => { - info!("Listener finished successfully. Checking for reconnection..."); - } - Err(e) => { - error!( - "Error occurred in listener: {}. Reconnecting after delay...", - e - ); - } - } - sleep(Duration::from_secs(5)).await; - } -} - -// Separate function to encapsulate listener logic -async fn run_listener( - rpc_url: &str, - enclave_address: Address, - registry_address: Address, -) -> Result<()> { - let manager = EnclaveContract::new(rpc_url).await?; - - let mut enclave_listener = manager.add_listener(enclave_address); - enclave_listener.add_event_handler::(); - enclave_listener.add_event_handler::(); - enclave_listener.add_event_handler::(); - enclave_listener.add_event_handler::(); - - let mut registry_listener = manager.add_listener(registry_address); - registry_listener.add_event_handler::(); - - let enclave_handle = tokio::spawn(async move { - match enclave_listener.listen().await { - Ok(_) => info!("Enclave listener finished"), - Err(e) => error!("Error in enclave listener: {}", e), - } - }); - - let registry_handle = tokio::spawn(async move { - match registry_listener.listen().await { - Ok(_) => info!("Registry listener finished"), - Err(e) => error!("Error in registry listener: {}", e), - } - }); - - tokio::try_join!(enclave_handle, registry_handle)?; - - Ok(()) -} diff --git a/examples/CRISP/apps/server/src/server/blockchain/mod.rs b/examples/CRISP/apps/server/src/server/blockchain/mod.rs deleted file mode 100644 index 0d017d32fb..0000000000 --- a/examples/CRISP/apps/server/src/server/blockchain/mod.rs +++ /dev/null @@ -1,5 +0,0 @@ -pub mod events; -pub mod handlers; -pub mod listener; -pub mod relayer; -pub mod sync; diff --git a/examples/CRISP/apps/server/src/server/blockchain/relayer.rs b/examples/CRISP/apps/server/src/server/blockchain/relayer.rs deleted file mode 100644 index d5b41f891b..0000000000 --- a/examples/CRISP/apps/server/src/server/blockchain/relayer.rs +++ /dev/null @@ -1,199 +0,0 @@ -use crate::server::CONFIG; -use alloy::providers::fillers::BlobGasFiller; -use alloy::{ - network::{Ethereum, EthereumWallet}, - primitives::{Address, Bytes, U256}, - providers::fillers::{ - ChainIdFiller, FillProvider, GasFiller, JoinFill, NonceFiller, WalletFiller, - }, - providers::{Identity, Provider, ProviderBuilder, RootProvider}, - rpc::types::TransactionReceipt, - signers::local::PrivateKeySigner, - sol, - transports::BoxTransport, -}; -use eyre::Result; -use std::sync::Arc; - -sol! { - #[derive(Debug)] - struct E3 { - uint256 seed; - uint32[2] threshold; - uint256 requestBlock; - uint256[2] startWindow; - uint256 duration; - uint256 expiration; - bytes32 encryptionSchemeId; - address e3Program; - bytes e3ProgramParams; - address inputValidator; - address decryptionVerifier; - bytes32 committeePublicKey; - bytes32 ciphertextOutput; - bytes plaintextOutput; - } - - #[derive(Debug)] - #[sol(rpc)] - contract Enclave { - uint256 public nexte3Id = 0; - mapping(uint256 e3Id => uint256 inputCount) public inputCounts; - mapping(uint256 e3Id => bytes params) public e3Params; - mapping(address e3Program => bool allowed) public e3Programs; - function request(address filter, uint32[2] calldata threshold, uint256[2] calldata startWindow, uint256 duration, address e3Program, bytes memory e3ProgramParams, bytes memory computeProviderParams) external payable returns (uint256 e3Id, E3 memory e3); - function activate(uint256 e3Id,bytes memory publicKey) external returns (bool success); - function enableE3Program(address e3Program) public onlyOwner returns (bool success); - function publishInput(uint256 e3Id, bytes memory data) external returns (bool success); - function publishCiphertextOutput(uint256 e3Id, bytes memory ciphertextOutput, bytes memory proof) external returns (bool success); - function publishPlaintextOutput(uint256 e3Id, bytes memory data) external returns (bool success); - function getE3(uint256 e3Id) external view returns (E3 memory e3); - function getRoot(uint256 id) public view returns (uint256); - } -} - -type CRISPProvider = FillProvider< - JoinFill< - JoinFill< - Identity, - JoinFill>>, - >, - WalletFiller, - >, - RootProvider, - BoxTransport, - Ethereum, ->; - -pub struct EnclaveContract { - pub provider: Arc, - pub contract_address: Address, -} - -impl EnclaveContract { - pub async fn new(contract_address: String) -> Result { - let signer: PrivateKeySigner = CONFIG.private_key.parse()?; - let wallet = EthereumWallet::from(signer.clone()); - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .wallet(wallet) - .on_builtin(&CONFIG.http_rpc_url) - .await?; - - Ok(Self { - provider: Arc::new(provider), - contract_address: contract_address.parse()?, - }) - } - - pub async fn request_e3( - &self, - filter: Address, - threshold: [u32; 2], - start_window: [U256; 2], - duration: U256, - e3_program: Address, - e3_params: Bytes, - compute_provider_params: Bytes, - ) -> Result { - let contract = Enclave::new(self.contract_address, &self.provider); - let builder = contract - .request( - filter, - threshold, - start_window, - duration, - e3_program, - e3_params, - compute_provider_params, - ) - .value(U256::from(1)); - let receipt = builder.send().await.unwrap().get_receipt().await.unwrap(); - Ok(receipt) - } - - pub async fn activate(&self, e3_id: U256, pub_key: Bytes) -> Result { - let contract = Enclave::new(self.contract_address, &self.provider); - let builder = contract.activate(e3_id, pub_key); - let receipt = builder.send().await.unwrap().get_receipt().await.unwrap(); - Ok(receipt) - } - - pub async fn enable_e3_program(&self, e3_program: Address) -> Result { - let contract = Enclave::new(self.contract_address, &self.provider); - let builder = contract.enableE3Program(e3_program); - let receipt = builder.send().await?.get_receipt().await?; - Ok(receipt) - } - - pub async fn publish_input(&self, e3_id: U256, data: Bytes) -> Result { - let contract = Enclave::new(self.contract_address, &self.provider); - let builder = contract.publishInput(e3_id, data); - let receipt = builder.send().await.unwrap().get_receipt().await.unwrap(); - Ok(receipt) - } - - pub async fn publish_ciphertext_output( - &self, - e3_id: U256, - data: Bytes, - proof: Bytes, - ) -> Result { - let contract = Enclave::new(self.contract_address, &self.provider); - let builder = contract.publishCiphertextOutput(e3_id, data, proof); - let receipt = builder.send().await.unwrap().get_receipt().await.unwrap(); - Ok(receipt) - } - - pub async fn publish_plaintext_output( - &self, - e3_id: U256, - data: Bytes, - ) -> Result { - let contract = Enclave::new(self.contract_address, &self.provider); - let builder = contract.publishPlaintextOutput(e3_id, data); - let receipt = builder.send().await.unwrap().get_receipt().await.unwrap(); - Ok(receipt) - } - - pub async fn get_e3_id(&self) -> Result { - let contract = Enclave::new(self.contract_address, &self.provider); - let e3_id = contract.nexte3Id().call().await?; - Ok(e3_id.nexte3Id) - } - - pub async fn get_e3(&self, e3_id: U256) -> Result { - let contract = Enclave::new(self.contract_address, &self.provider); - let e3_return = contract.getE3(e3_id).call().await?; - Ok(e3_return.e3) - } - - pub async fn get_input_count(&self, e3_id: U256) -> Result { - let contract = Enclave::new(self.contract_address, &self.provider); - let input_count = contract.inputCounts(e3_id).call().await?; - Ok(input_count.inputCount) - } - - pub async fn get_latest_block(&self) -> Result { - let block = self.provider.get_block_number().await?; - Ok(block) - } - - pub async fn get_root(&self, id: U256) -> Result { - let contract = Enclave::new(self.contract_address, &self.provider); - let root = contract.getRoot(id).call().await?; - Ok(root._0) - } - - pub async fn get_e3_params(&self, e3_id: U256) -> Result { - let contract = Enclave::new(self.contract_address, &self.provider); - let params = contract.e3Params(e3_id).call().await?; - Ok(params.params) - } - - pub async fn is_e3_program_enabled(&self, e3_program: Address) -> Result { - let contract = Enclave::new(self.contract_address, &self.provider); - let enabled = contract.e3Programs(e3_program).call().await?; - Ok(enabled.allowed) - } -} diff --git a/examples/CRISP/apps/server/src/server/blockchain/sync.rs b/examples/CRISP/apps/server/src/server/blockchain/sync.rs deleted file mode 100644 index c0590529a2..0000000000 --- a/examples/CRISP/apps/server/src/server/blockchain/sync.rs +++ /dev/null @@ -1,316 +0,0 @@ -use super::events::InputPublished; -use super::relayer::E3 as ContractE3; -use crate::server::{ - blockchain::relayer::EnclaveContract, - config::CONFIG, - database::{generate_emoji, get_e3, update_e3_status, GLOBAL_DB}, - models::{CurrentRound, E3}, -}; -use alloy::{ - primitives::{Address, Bytes, FixedBytes, U256}, - providers::Provider, - rpc::types::{BlockNumberOrTag, Filter, Log}, - sol_types::SolEvent, -}; -use compute_provider::FHEInputs; -use futures::future::join_all; -use log::{error, info, warn}; -use std::{ - collections::HashMap, - error::Error, - str::FromStr, - sync::Arc, - time::{Duration, SystemTime, UNIX_EPOCH}, -}; -use tokio::time::{sleep_until, Instant}; -use voting_host::run_compute; - -/// Type alias for results with a boxed error. -type Result = std::result::Result>; -pub async fn sync_server() -> Result<()> { - info!("Starting server synchronization..."); - let contract = Arc::new(EnclaveContract::new(CONFIG.enclave_address.clone()).await?); - - // Retrieve the current round from the database. - let current_round = match GLOBAL_DB.get::("e3:current_round").await? { - Some(round) => round, - None => { - info!("No current round found in DB. Exiting sync process. Will compute next round."); - return Ok(()); - } - }; - info!("Current round: {}", current_round.id); - - // Fetch the latest E3 from the database and the contract. - let (latest_db_e3, _) = get_e3(current_round.id).await?; - let contract_e3_id = contract.get_e3_id().await?.to::(); - if contract_e3_id == 0 { - warn!("No E3 IDs found in the contract."); - return Ok(()); - } - let latest_contract_e3_id = contract_e3_id - 1; - - // Check if synchronization is needed. - if latest_db_e3.status == "Finished" && latest_db_e3.id == latest_contract_e3_id { - info!("Database is up to date with the contract. No sync needed."); - return Ok(()); - } - - // Identify the last finished E3 in the database. - let last_finished_e3_id = find_last_finished_e3_id(latest_db_e3.id).await?; - info!("Last finished E3 ID: {:?}", last_finished_e3_id); - - // Determine the range of E3 IDs to synchronize. - let start_sync_id = last_finished_e3_id.map_or(0, |id| id + 1); - let sync_ids: Vec = (start_sync_id..=latest_contract_e3_id).collect(); - info!("Syncing E3s: {:?}", sync_ids); - - // Determine the starting block for fetching events. - let from_block = contract - .get_e3(U256::from(start_sync_id)) - .await? - .requestBlock - .to::(); - info!("From block: {}", from_block); - - // Fetch relevant events from the blockchain. - let events = Arc::new(fetch_events(contract.clone(), from_block).await?); - - // Synchronize each E3 concurrently. - join_all(sync_ids.into_iter().map(|e3_id| { - let contract = contract.clone(); - let events = events.clone(); - async move { - if let Err(e) = sync_e3(U256::from(e3_id), contract, events).await { - error!("Failed to sync E3 {}: {:?}", e3_id, e); - } - } - })) - .await; - - // Update the current round in the database. - let new_current_round = CurrentRound { - id: latest_contract_e3_id, - }; - GLOBAL_DB - .insert("e3:current_round", &new_current_round) - .await?; - - info!("Server synchronization completed."); - Ok(()) -} - -/// Finds the last finished E3 ID in the database. -async fn find_last_finished_e3_id(latest_db_id: u64) -> Result> { - for id in (0..=latest_db_id).rev() { - let (e3, _) = match get_e3(id).await { - Ok(e3) => e3, - Err(_) => continue, - }; - if e3.status == "Finished" { - return Ok(Some(id)); - } - } - Ok(None) -} - -/// Fetches events from the blockchain starting from a specific block. -async fn fetch_events( - contract: Arc, - from_block: u64, -) -> Result>> { - let filter = Filter::new() - .from_block(BlockNumberOrTag::Number(from_block)) - .to_block(BlockNumberOrTag::Latest) - .address(Address::from_str(&CONFIG.enclave_address)?) - .event(InputPublished::SIGNATURE); - - let logs = contract.provider.get_logs(&filter).await.map_err(|e| { - error!("Error fetching logs: {:?}", e); - e - })?; - - let mut events_by_e3_id = HashMap::new(); - for log in logs { - let input = log.log_decode::()?.data().clone(); - events_by_e3_id - .entry(input.e3Id) - .or_insert_with(Vec::new) - .push(log); - } - - Ok(events_by_e3_id) -} - -/// Synchronizes a single E3. -async fn sync_e3( - e3_id: U256, - contract: Arc, - published_events: Arc>>, -) -> Result<()> { - let events_clone = published_events.clone(); - let contract_clone = contract.clone(); - let contract_e3 = contract.get_e3(e3_id).await?; - - // Exit early if the E3 is not yet activated. - if contract_e3.committeePublicKey == FixedBytes::<32>::default() { - info!("E3 {} not yet activated", e3_id); - return Ok(()); - } - - let expiration = calculate_expiration(&contract_e3.expiration)?; - let now = Instant::now(); - - if contract_e3.ciphertextOutput == FixedBytes::<32>::default() { - if now >= expiration { - info!("E3 {} expired, computing and publishing ciphertext.", e3_id); - tokio::spawn(async move { - if let Err(e) = - compute_and_publish_ciphertext(e3_id, contract_clone, events_clone).await - { - error!("Error computing and publishing ciphertext: {:?}", e); - } - }); - } else { - info!("E3 {} still active, waiting until expiration", e3_id); - sleep_until(expiration).await; - // After sleeping, re-fetch events - let events = Arc::new( - fetch_events(contract.clone(), contract_e3.requestBlock.to::()).await?, - ); - - tokio::spawn(async move { - if let Err(e) = compute_and_publish_ciphertext(e3_id, contract_clone, events).await - { - error!("Error computing and publishing ciphertext: {:?}", e); - } - }); - } - return Ok(()); - } - - if contract_e3.plaintextOutput == Bytes::default() { - info!("E3 {} waiting for plaintext output", e3_id); - return Ok(()); - } - - // Sync with the database. - let vote_count = published_events - .get(&e3_id) - .map_or(0, |logs| logs.len() as u64); - sync_e3_with_db(e3_id, &contract_e3, vote_count).await?; - - Ok(()) -} - -/// Calculates the expiration time based on the contract's expiration field. -fn calculate_expiration(expiration_secs: &U256) -> Result { - let expiration_duration = UNIX_EPOCH + Duration::from_secs(expiration_secs.to::()); - let duration_since_now = expiration_duration - .duration_since(SystemTime::now()) - .unwrap_or_else(|_| Duration::ZERO); - Ok(Instant::now() + duration_since_now) -} - -/// Computes and publishes the ciphertext output. -async fn compute_and_publish_ciphertext( - e3_id: U256, - contract: Arc, - events: Arc>>, -) -> Result<()> { - let ciphertext_inputs = events - .get(&e3_id) - .map(|logs| { - logs.iter() - .map(|log| { - let input = log.log_decode::().unwrap().data().clone(); - (input.data.to_vec(), input.index.to::()) - }) - .collect::>() - }) - .unwrap_or_default(); - - if ciphertext_inputs.is_empty() { - info!("No ciphertext inputs found for E3 {}", e3_id); - update_e3_status(e3_id.to::(), "Finished".to_string()).await?; - return Ok(()); - } - - // Update vote count - let mut db_e3 = get_e3(e3_id.to::()).await?.0; - db_e3.vote_count = ciphertext_inputs.len() as u64; - GLOBAL_DB - .insert(&format!("e3:{}", e3_id.to::()), &db_e3) - .await?; - - let contract_e3 = contract.get_e3(e3_id).await?; - let fhe_inputs = FHEInputs { - params: contract_e3.e3ProgramParams.to_vec(), - ciphertexts: ciphertext_inputs, - }; - - let (risc0_output, ciphertext) = - tokio::task::spawn_blocking(move || run_compute(fhe_inputs).unwrap()) - .await - .unwrap(); - - let tx = contract - .publish_ciphertext_output(e3_id, ciphertext.into(), risc0_output.seal.into()) - .await?; - - info!( - "Ciphertext published for round {}. TxHash: {:?}", - e3_id, tx.transaction_hash - ); - - Ok(()) -} - -/// Synchronizes the E3 data with the database. -async fn sync_e3_with_db(e3_id: U256, contract_e3: &ContractE3, vote_count: u64) -> Result<()> { - let (mut db_e3, key) = match get_e3(e3_id.to::()).await { - Ok(e3) => e3, - Err(_) => { - let new_e3 = E3 { - id: e3_id.to::(), - chain_id: CONFIG.chain_id, - enclave_address: CONFIG.enclave_address.clone(), - status: "Finished".to_string(), - has_voted: vec![], - vote_count, - votes_option_1: 0, - votes_option_2: 0, - start_time: contract_e3.startWindow[0].to::(), - block_start: contract_e3.requestBlock.to::(), - duration: contract_e3.duration.to::(), - expiration: contract_e3.expiration.to::(), - e3_params: contract_e3.e3ProgramParams.to_vec(), - committee_public_key: contract_e3.committeePublicKey.to_vec(), - ciphertext_output: contract_e3.ciphertextOutput.to_vec(), - plaintext_output: contract_e3.plaintextOutput.to_vec(), - ciphertext_inputs: vec![], - emojis: generate_emoji(), - }; - (new_e3, format!("e3:{}", e3_id.to::())) - } - }; - - db_e3.plaintext_output = contract_e3.plaintextOutput.to_vec(); - db_e3.status = "Finished".to_string(); - - // Decode plaintext output to obtain vote counts. - let decoded: Vec = bincode::deserialize(&db_e3.plaintext_output).unwrap_or(vec![0, 0]); - - if decoded.len() >= 2 { - db_e3.votes_option_2 = decoded[0]; - db_e3.votes_option_1 = decoded[1]; - db_e3.vote_count = db_e3.votes_option_1 + db_e3.votes_option_2; - } else { - warn!("Unexpected plaintext output format for E3 {}", e3_id); - } - - GLOBAL_DB.insert(&key, &db_e3).await?; - info!("E3 {} synced with DB", e3_id); - - Ok(()) -} diff --git a/examples/CRISP/apps/server/src/server/database.rs b/examples/CRISP/apps/server/src/server/database.rs index ef31bb19f6..38902067cf 100644 --- a/examples/CRISP/apps/server/src/server/database.rs +++ b/examples/CRISP/apps/server/src/server/database.rs @@ -1,12 +1,11 @@ -use super::models::E3; +use async_trait::async_trait; +use e3_sdk::indexer::DataStore; use log::error; -use once_cell::sync::Lazy; use rand::Rng; use serde::{de::DeserializeOwned, Serialize}; use sled::Db; -use std::{error::Error, str, sync::Arc}; +use std::str; use thiserror::Error; -use tokio::sync::RwLock; #[derive(Error, Debug)] pub enum DatabaseError { @@ -17,60 +16,61 @@ pub enum DatabaseError { } #[derive(Clone)] pub struct SledDB { - pub db: Arc>, + pub db: Db, } impl SledDB { pub fn new(path: &str) -> Result { let db = sled::open(path)?; - Ok(Self { - db: Arc::new(RwLock::new(db)), - }) + Ok(Self { db }) } +} - pub async fn insert(&self, key: &str, value: &T) -> Result<(), DatabaseError> { +#[async_trait] +impl DataStore for SledDB { + type Error = DatabaseError; + async fn insert( + &mut self, + key: &str, + value: &T, + ) -> Result<(), Self::Error> { let serialized = serde_json::to_vec(value)?; - self.db.write().await.insert(key.as_bytes(), serialized)?; + self.db.insert(key.as_bytes(), serialized)?; Ok(()) } - pub async fn get(&self, key: &str) -> Result, DatabaseError> { - if let Some(bytes) = self.db.read().await.get(key.as_bytes())? { + async fn get( + &self, + key: &str, + ) -> Result, Self::Error> { + if let Some(bytes) = self.db.get(key.as_bytes())? { let value = serde_json::from_slice(&bytes)?; Ok(Some(value)) } else { Ok(None) } } -} -pub static GLOBAL_DB: Lazy = Lazy::new(|| { - let pathdb = std::env::current_dir().unwrap().join("database/server"); - SledDB::new(pathdb.to_str().unwrap()).unwrap() -}); + async fn modify(&mut self, key: &str, mut f: F) -> Result, Self::Error> + where + T: Serialize + DeserializeOwned + Send + Sync, + F: FnMut(Option) -> Option + Send, + { + // Edit in place + let result = self.db.update_and_fetch(key, |old_bytes| { + let current_value = old_bytes.and_then(|bytes| serde_json::from_slice(bytes).ok()); + let new_value = f(current_value); + new_value.and_then(|val| serde_json::to_vec(&val).ok()) + })?; -pub async fn get_e3(e3_id: u64) -> Result<(E3, String), Box> { - let key = format!("e3:{}", e3_id); - match GLOBAL_DB.get::(&key).await? { - Some(e3) => Ok((e3, key)), - None => { - error!("E3 state not found for key: {}", key); - Err("E3 state not found".into()) - } + // Deserialize the final result + result + .map(|bytes| serde_json::from_slice(&bytes)) + .transpose() + .map_err(|e| e.into()) } } -pub async fn update_e3_status( - e3_id: u64, - status: String, -) -> Result<(), Box> { - let key = format!("e3:{}", e3_id); - let mut e3 = GLOBAL_DB.get::(&key).await?.unwrap(); - e3.status = status; - GLOBAL_DB.insert(&key, &e3).await?; - Ok(()) -} - pub fn generate_emoji() -> [String; 2] { let emojis = [ "🍇", "🍈", "🍉", "🍊", "🍋", "🍌", "🍍", "🥭", "🍎", "🍏", "🍐", "🍑", "🍒", "🍓", "🫐", diff --git a/examples/CRISP/apps/server/src/server/indexer.rs b/examples/CRISP/apps/server/src/server/indexer.rs new file mode 100644 index 0000000000..2115026800 --- /dev/null +++ b/examples/CRISP/apps/server/src/server/indexer.rs @@ -0,0 +1,226 @@ +use crate::server::{ + models::CurrentRound, + repo::{CrispE3Repository, CurrentRoundRepository}, +}; +use e3_compute_provider::FHEInputs; +use e3_sdk::{ + evm_helpers::{ + contracts::{ + EnclaveContract, EnclaveContractFactory, EnclaveRead, EnclaveWrite, ReadWrite, + }, + events::{ + CiphertextOutputPublished, CommitteePublished, E3Activated, PlaintextOutputPublished, + }, + listener::EventListener, + }, + indexer::{DataStore, EnclaveIndexer}, +}; +use log::info; +use program_client::run_compute; +use std::error::Error; +use std::sync::Arc; +use std::time::{Duration, SystemTime, UNIX_EPOCH}; +use tokio::time::{sleep_until, Instant}; + +type Result = std::result::Result>; + +pub async fn register_e3_activated( + mut indexer: EnclaveIndexer, + contract: EnclaveContract, +) -> Result> { + let contract = Arc::new(contract); + // E3Activated + indexer + .add_event_handler(move |event: E3Activated, store| { + let e3_id = event.e3Id.to::(); + let mut repo = CrispE3Repository::new(store.clone(), e3_id); + let mut current_round_repo = CurrentRoundRepository::new(store); + let expiration = event.expiration.to::(); + let contract = contract.clone(); + info!("Handling E3 request with id {}", e3_id); + async move { + repo.initialize_round().await?; + + current_round_repo + .set_current_round(CurrentRound { id: e3_id }) + .await?; + + // Calculate expiration time to sleep until + let expiration = Instant::now() + + (UNIX_EPOCH + Duration::from_secs(expiration)) + .duration_since(SystemTime::now()) + .unwrap_or_else(|_| Duration::ZERO); + + sleep_until(expiration).await; + + let e3 = repo.get_e3().await?; + repo.update_status("Expired").await?; + + if repo.get_vote_count().await? > 0 { + let fhe_inputs = FHEInputs { + params: e3.e3_params, + ciphertexts: e3.ciphertext_inputs, + }; + + info!("Starting computation for E3: {}", e3_id); + repo.update_status("Computing").await?; + + let (risc0_output, ciphertext) = + run_compute(fhe_inputs.params, fhe_inputs.ciphertexts) + .await + .map_err(|e| eyre::eyre!("Error running compute: {e}"))?; + + info!("Computation completed for E3: {}", e3_id); + info!("RISC0 Output: {:?}", risc0_output); + + repo.update_status("PublishingCiphertext").await?; + + let tx = contract + .clone() + .publish_ciphertext_output( + event.e3Id, + ciphertext.into(), + risc0_output.into(), + ) + .await?; + + info!( + "CiphertextOutputPublished event published with tx: {:?}", + tx.transaction_hash + ); + } else { + info!("E3 has no votes to decrypt. Setting status to Finished."); + repo.update_status("Finished").await?; + } + info!("E3 request handled successfully."); + + Ok(()) + } + }) + .await; + Ok(indexer) +} + +pub async fn register_ciphertext_output_published( + mut indexer: EnclaveIndexer, +) -> Result> { + // CiphertextOutputPublished + indexer + .add_event_handler(move |event: CiphertextOutputPublished, store| { + let e3_id = event.e3Id.to::(); + let mut repo = CrispE3Repository::new(store, e3_id); + async move { + repo.update_status("CiphertextPublished").await?; + Ok(()) + } + }) + .await; + Ok(indexer) +} + +pub async fn register_plaintext_output_published( + mut indexer: EnclaveIndexer, +) -> Result> { + // PlaintextOutputPublished + indexer + .add_event_handler(move |event: PlaintextOutputPublished, store| { + let e3_id = event.e3Id.to::(); + let mut repo = CrispE3Repository::new(store, e3_id); + async move { + info!("CRISP: handling 'PlaintextOutputPublished'"); + + // The plaintextOutput from the event contains the result of the FHE computation. + // The computation sums the encrypted votes: '0' for Option 1, '1' for Option 2. + // Thus, the decrypted sum directly represents the number of votes for Option 2. + // The output is expected to be a Vec in little endian format of u64s. + let decoded: Vec = event + .plaintextOutput + .chunks_exact(8) + .map(|chunk| u64::from_le_bytes(chunk.try_into().unwrap())) + .collect(); + + // decoded[0] is the sum of all encrypted votes (0s and 1s). + // Since Option 1 votes are encrypted as '0' and Option 2 votes as '1', + // this sum is equivalent to the count of votes for Option 2. + let option_2 = decoded[0]; + + // Retrieve the total number of votes that were cast and recorded for this round. + let total_votes = repo.get_vote_count().await?; + + // The number of votes for Option 1 can be derived by subtracting + // the Option 2 votes (the sum from the FHE output) from the total votes. + let option_1 = total_votes - option_2; + + info!("Vote Count: {:?}", total_votes); + info!("Votes Option 1: {:?}", option_1); + info!("Votes Option 2: {:?}", option_2); + + repo.set_votes(option_1, option_2).await?; + repo.update_status("Finished").await?; + Ok(()) + } + }) + .await; + Ok(indexer) +} + +pub async fn register_committee_published( + mut listener: EventListener, + contract: EnclaveContract, +) -> Result { + // CommitteePublished + listener + .add_event_handler(move |event: CommitteePublished| { + let contract = contract.clone(); + async move { + // We need to do this to ensure this is idempotent. + // TODO: conserve bandwidth and check for E3AlreadyActivated error instead of + // making two calls to contract + let e3 = contract.get_e3(event.e3Id).await?; + if u64::try_from(e3.expiration)? > 0 { + info!("E3 already activated '{}'", event.e3Id); + return Ok(()); + } + + // If not activated activate + let tx = contract.activate(event.e3Id, event.publicKey).await?; + info!("E3 activated with tx: {:?}", tx.transaction_hash); + Ok(()) + } + }) + .await; + Ok(listener) +} + +pub async fn start_indexer( + ws_url: &str, + contract_address: &str, + registry_filter_address: &str, + store: impl DataStore, + private_key: &str, +) -> Result<()> { + let readonly_contract = EnclaveContractFactory::create_read(ws_url, contract_address).await?; + + let readwrite_contract = + EnclaveContractFactory::create_write(ws_url, contract_address, private_key).await?; + + let enclave_contract_listener = + EventListener::create_contract_listener(ws_url, contract_address).await?; + + // CRISP indexer + let crisp_indexer = + EnclaveIndexer::new(enclave_contract_listener, readonly_contract, store).await?; + let crisp_indexer = register_e3_activated(crisp_indexer, readwrite_contract.clone()).await?; + let crisp_indexer = register_ciphertext_output_published(crisp_indexer).await?; + let crisp_indexer = register_plaintext_output_published(crisp_indexer).await?; + crisp_indexer.start(); + + // Registry Listener + let registry_contract_listener = + EventListener::create_contract_listener(&ws_url, registry_filter_address).await?; + let registry_listener = + register_committee_published(registry_contract_listener, readwrite_contract).await?; + registry_listener.start(); + + Ok(()) +} diff --git a/examples/CRISP/apps/server/src/server/mod.rs b/examples/CRISP/apps/server/src/server/mod.rs index 89bf45b184..083afb567f 100644 --- a/examples/CRISP/apps/server/src/server/mod.rs +++ b/examples/CRISP/apps/server/src/server/mod.rs @@ -1,15 +1,21 @@ -pub mod blockchain; -mod config; +mod app_data; +pub mod config; mod database; +mod indexer; mod models; +mod repo; mod routes; +use std::sync::Arc; + use actix_cors::Cors; use actix_web::{middleware::Logger, web, App, HttpServer}; - -use blockchain::listener::start_listener; -use database::GLOBAL_DB; -use models::AppState; +use app_data::AppData; +use database::SledDB; +use e3_sdk::indexer::SharedStore; +use eyre::OptionExt; +use indexer::start_indexer; +use tokio::sync::RwLock; use crate::logger::init_logger; use config::CONFIG; @@ -18,25 +24,31 @@ use config::CONFIG; pub async fn start() -> Result<(), Box> { init_logger(); - tokio::spawn(async { - if let Err(e) = blockchain::sync::sync_server().await { - eprintln!("Sync server failed: {:?}", e); - } - }); + let pathdb = std::env::current_dir()?.join("database/server"); + let pathdb = pathdb.to_str().ok_or_eyre("Path could not be determined")?; + let db = SharedStore::new(Arc::new(RwLock::new(SledDB::new(pathdb)?))); - tokio::spawn(async { - if let Err(e) = start_listener( - &CONFIG.ws_rpc_url, - &CONFIG.enclave_address, - &CONFIG.ciphernode_registry_address, - ) - .await - { - eprintln!("Listener failed: {:?}", e); + // New indexer + tokio::spawn({ + let db = db.clone(); + async move { + if let Err(e) = start_indexer( + &CONFIG.ws_rpc_url, + &CONFIG.enclave_address, + &CONFIG.ciphernode_registry_address, + db.clone(), + &CONFIG.private_key, + ) + .await + { + eprintln!("Listener failed: {:?}", e); + } } }); - let _ = HttpServer::new(|| { + let bind_addr = "0.0.0.0:4000"; + let db_clone = db.clone(); + let server = HttpServer::new(move || { let cors = Cors::default() .allow_any_origin() .allowed_methods(vec!["GET", "POST", "OPTIONS"]) @@ -47,14 +59,14 @@ pub async fn start() -> Result<(), Box> { App::new() .wrap(cors) .wrap(Logger::new(r#"%a "%r" %s %b %T"#)) - .app_data(web::Data::new(AppState { - sled: GLOBAL_DB.clone(), - })) + .app_data(web::Data::new(AppData::new(db_clone.clone()))) .configure(routes::setup_routes) }) - .bind("0.0.0.0:4000")? - .run() - .await; + .bind(bind_addr)?; + + println!("'crisp-server' listening on http://{}", bind_addr); + + server.run().await?; Ok(()) } diff --git a/examples/CRISP/apps/server/src/server/models.rs b/examples/CRISP/apps/server/src/server/models.rs index b9decaec9d..c04ad7db42 100644 --- a/examples/CRISP/apps/server/src/server/models.rs +++ b/examples/CRISP/apps/server/src/server/models.rs @@ -1,10 +1,5 @@ -use crate::server::database::SledDB; use serde::{Deserialize, Serialize}; -pub struct AppState { - pub sled: SledDB, -} - #[derive(Debug, Deserialize, Serialize)] pub struct JsonResponse { pub response: String, @@ -50,6 +45,8 @@ pub struct CTRequest { pub struct EncryptedVote { pub round_id: u64, pub enc_vote_bytes: Vec, + pub proof: Vec, + pub public_inputs: Vec<[u8; 32]>, pub address: String, pub proof_sem: Vec, } @@ -95,7 +92,7 @@ pub struct E3StateLite { pub duration: u64, pub expiration: u64, pub start_block: u64, - + pub committee_public_key: Vec, pub emojis: [String; 2], } @@ -135,6 +132,16 @@ pub struct E3 { pub emojis: [String; 2], } +#[derive(Debug, Deserialize, Serialize)] +pub struct E3Crisp { + pub emojis: [String; 2], + pub has_voted: Vec, + pub start_time: u64, + pub status: String, + pub votes_option_1: u64, + pub votes_option_2: u64, +} + impl From for WebResultRequest { fn from(e3: E3) -> Self { WebResultRequest { diff --git a/examples/CRISP/apps/server/src/server/repo.rs b/examples/CRISP/apps/server/src/server/repo.rs new file mode 100644 index 0000000000..e3de88a068 --- /dev/null +++ b/examples/CRISP/apps/server/src/server/repo.rs @@ -0,0 +1,234 @@ +use super::{ + database::generate_emoji, + models::{CurrentRound, E3Crisp, E3StateLite, WebResultRequest}, +}; +use chrono::Utc; +use e3_sdk::indexer::{models::E3 as EnclaveE3, DataStore, E3Repository, SharedStore}; +use eyre::Result; +use log::info; + +pub struct CurrentRoundRepository { + store: SharedStore, +} + +impl CurrentRoundRepository { + pub fn new(store: SharedStore) -> Self { + Self { store } + } + + pub async fn set_current_round(&mut self, value: CurrentRound) -> Result<()> { + let key = self.current_round_key(); + self.store + .insert(&key, &value) + .await + .map_err(|_| eyre::eyre!("Could not set current_round for '{key}'"))?; + Ok(()) + } + + pub async fn get_current_round(&self) -> Result> { + let key = self.current_round_key(); + let round = self + .store + .get::(&key) + .await + .map_err(|_| eyre::eyre!("Could get e3 at '{key}'"))?; + Ok(round) + } + + pub async fn get_current_round_id(&self) -> Result { + let round = self + .get_current_round() + .await? + .ok_or(eyre::eyre!("No current round has been saved"))?; + + Ok(round.id) + } + + fn current_round_key(&self) -> String { + format!("_e3:current_round") + } +} + +pub struct CrispE3Repository { + store: SharedStore, + e3_id: u64, +} + +impl CrispE3Repository { + pub fn new(store: SharedStore, e3_id: u64) -> Self { + Self { store, e3_id } + } + + async fn set_crisp(&mut self, value: E3Crisp) -> Result<()> { + let key = self.crisp_key(); + self.store + .insert(&key, &value) + .await + .map_err(|_| eyre::eyre!("Could not store crisp at '{key}'"))?; + Ok(()) + } + + async fn get_crisp(&self) -> Result { + let key = self.crisp_key(); + let e3_crisp = self + .store + .get::(&key) + .await + .map_err(|e| eyre::eyre!("Could get crisp at '{key}' due to error: {e}"))? + .ok_or(eyre::eyre!("No data found at {key}"))?; + Ok(e3_crisp) + } + + pub async fn initialize_round(&mut self) -> Result<()> { + let start_time = Utc::now().timestamp() as u64; + + self.set_crisp(E3Crisp { + has_voted: vec![], + start_time, + status: "Active".to_string(), + votes_option_1: 0, + votes_option_2: 0, + emojis: generate_emoji(), + }) + .await + } + + fn get_e3_repo(&self) -> E3Repository { + E3Repository::new(self.store.clone(), self.e3_id) + } + + pub async fn get_e3(&self) -> Result { + let e3 = self.get_e3_repo().get_e3().await?; + Ok(e3) + } + + pub async fn get_vote_count(&self) -> Result { + let e3 = self.get_e3().await?; + Ok(u64::try_from(e3.ciphertext_inputs.len())?) + } + + pub async fn update_status(&mut self, value: &str) -> Result<()> { + let key = self.crisp_key(); + + self.store + .modify(&key, |e3_obj: Option| { + e3_obj.map(|mut e| { + e.status = value.to_string(); + e + }) + }) + .await + .map_err(|_| eyre::eyre!("Could not update status for '{key}'"))?; + Ok(()) + } + + pub async fn set_votes(&mut self, option_1: u64, option_2: u64) -> Result<()> { + info!("set_votes(option_1:{} option_2:{})", option_1, option_2); + let key = self.crisp_key(); + self.store + .modify(&key, |e3_obj: Option| { + e3_obj.map(|mut e| { + e.votes_option_1 = option_1; + e.votes_option_2 = option_2; + e + }) + }) + .await + .map_err(|_| eyre::eyre!("Could not append ciphertext_input for '{key}'"))?; + Ok(()) + } + + pub async fn get_ciphertext_output(&self) -> Result> { + let e3 = self.get_e3().await?; + Ok(e3.ciphertext_output) + } + + pub async fn get_committee_public_key(&self) -> Result> { + let e3 = self.get_e3().await?; + Ok(e3.committee_public_key) + } + + pub async fn get_web_result_request(&self) -> Result { + let e3 = self.get_e3().await?; + let e3_crisp = self.get_crisp().await?; + Ok(WebResultRequest { + round_id: e3.id, + option_1_tally: e3_crisp.votes_option_1, + option_2_tally: e3_crisp.votes_option_2, + total_votes: e3_crisp.votes_option_1 + e3_crisp.votes_option_2, + option_1_emoji: e3_crisp.emojis[0].clone(), + option_2_emoji: e3_crisp.emojis[1].clone(), + end_time: e3.expiration, + }) + } + + pub async fn get_e3_state_lite(&self) -> Result { + let e3 = self.get_e3().await?; + let e3_crisp = self.get_crisp().await?; + Ok(E3StateLite { + emojis: e3_crisp.emojis, + expiration: e3.expiration, + id: self.e3_id, + status: e3_crisp.status, + chain_id: e3.chain_id, + duration: e3.duration, + vote_count: u64::try_from(e3.ciphertext_inputs.len())?, + start_time: e3_crisp.start_time, + start_block: e3.request_block, + enclave_address: e3.enclave_address, + committee_public_key: e3.committee_public_key, + }) + } + + pub async fn set_ciphertext_output(&mut self, data: Vec) -> Result<()> { + self.get_e3_repo().set_ciphertext_output(data).await?; + Ok(()) + } + + pub async fn has_voted(&self, address: String) -> Result { + let e3_crisp = self.get_crisp().await?; + Ok(e3_crisp.has_voted.contains(&address)) + } + + pub async fn insert_voter_address(&mut self, address: String) -> Result<()> { + let key = self.crisp_key(); + self.store + .modify(&key, |e3_obj: Option| { + e3_obj.map(|mut e| { + e.has_voted.push(address.clone()); + e + }) + }) + .await + .map_err(|_| eyre::eyre!("Could not insert address on '{key}'"))?; + Ok(()) + } + + pub async fn remove_voter_address(&mut self, address: &str) -> Result<()> { + let key = self.crisp_key(); + self.store + .modify(&key, |e3_obj: Option| { + e3_obj.map(|mut e| { + e.has_voted = e + .has_voted + .into_iter() + .filter(|item| item != address) + .collect(); + e + }) + }) + .await + .map_err(|_| eyre::eyre!("Could not remove address {address}"))?; + Ok(()) + } + + pub async fn is_finished(&self) -> Result { + let e3 = self.get_crisp().await?; + Ok(e3.status == "Finished") + } + + fn crisp_key(&self) -> String { + let e3_id = self.e3_id; + format!("_e3:crisp:{e3_id}") + } +} diff --git a/examples/CRISP/apps/server/src/server/routes/rounds.rs b/examples/CRISP/apps/server/src/server/routes/rounds.rs index 913d611325..0981f20b04 100644 --- a/examples/CRISP/apps/server/src/server/routes/rounds.rs +++ b/examples/CRISP/apps/server/src/server/routes/rounds.rs @@ -1,14 +1,13 @@ -use crate::server::blockchain::relayer::EnclaveContract; +use crate::server::app_data::AppData; use crate::server::config::CONFIG; -use crate::server::database::get_e3; use crate::server::models::{ - AppState, CTRequest, ComputeProviderParams, CronRequestE3, CurrentRound, JsonResponse, - PKRequest, + CTRequest, ComputeProviderParams, CronRequestE3, JsonResponse, PKRequest, }; use actix_web::{web, HttpResponse, Responder}; use alloy::primitives::{Address, Bytes, U256}; use chrono::Utc; -use commons::bfv::{build_bfv_params_arc, encode_bfv_params, params::SET_2048_1032193_1}; +use e3_sdk::bfv_helpers::{build_bfv_params_arc, encode_bfv_params, params::SET_2048_1032193_1}; +use e3_sdk::evm_helpers::contracts::{EnclaveContract, EnclaveRead, EnclaveWrite}; use log::{error, info}; pub fn setup_routes(config: &mut web::ServiceConfig) { @@ -49,15 +48,11 @@ async fn request_new_round(data: web::Json) -> impl Responder { /// Get the current E3 round /// -/// # Arguments -/// -/// * `AppState` - The application state -/// /// # Returns /// /// * A JSON response containing the current round -async fn get_current_round(state: web::Data) -> impl Responder { - match state.sled.get::("e3:current_round").await { +async fn get_current_round(store: web::Data) -> impl Responder { + match store.current_round().get_current_round().await { Ok(Some(current_round)) => HttpResponse::Ok().json(current_round), Ok(None) => HttpResponse::NotFound().json(JsonResponse { response: "No current round found".to_string(), @@ -77,14 +72,18 @@ async fn get_current_round(state: web::Data) -> impl Responder { /// # Returns /// /// * A JSON response containing the ciphertext -async fn get_ciphertext(data: web::Json) -> impl Responder { +async fn get_ciphertext(data: web::Json, store: web::Data) -> impl Responder { let mut incoming = data.into_inner(); - let (state_data, _) = get_e3(incoming.round_id).await.unwrap(); - - incoming.ct_bytes = state_data.ciphertext_output; - - HttpResponse::Ok().json(incoming) + match store.e3(incoming.round_id).get_ciphertext_output().await { + Ok(ct_bytes) => { + incoming.ct_bytes = ct_bytes; + HttpResponse::Ok().json(incoming) + } + Err(e) => HttpResponse::InternalServerError().json(JsonResponse { + response: format!("Failed to retrieve ciphertext output: {}", e), + }), + } } /// Get the public key for a given round @@ -96,14 +95,18 @@ async fn get_ciphertext(data: web::Json) -> impl Responder { /// # Returns /// /// * A JSON response containing the public key -async fn get_public_key(data: web::Json) -> impl Responder { +async fn get_public_key(data: web::Json, store: web::Data) -> impl Responder { let mut incoming = data.into_inner(); - let (state_data, _) = get_e3(incoming.round_id).await.unwrap(); - - incoming.pk_bytes = state_data.committee_public_key; - - HttpResponse::Ok().json(incoming) + match store.e3(incoming.round_id).get_committee_public_key().await { + Ok(pk_bytes) => { + incoming.pk_bytes = pk_bytes; + HttpResponse::Ok().json(incoming) + } + Err(e) => HttpResponse::InternalServerError().json(JsonResponse { + response: format!("Failed to retrieve public key: {}", e), + }), + } } /// Initialize a new CRISP round @@ -115,8 +118,12 @@ async fn get_public_key(data: web::Json) -> impl Responder { /// * A result indicating the success of the operation pub async fn initialize_crisp_round() -> Result<(), Box> { info!("Starting new CRISP round!"); - - let contract = EnclaveContract::new(CONFIG.enclave_address.clone()).await?; + let contract = EnclaveContract::new( + &CONFIG.http_rpc_url, + &CONFIG.private_key, + &CONFIG.enclave_address, + ) + .await?; let e3_program: Address = CONFIG.e3_program_address.parse()?; // Enable E3 Program @@ -153,8 +160,7 @@ pub async fn initialize_crisp_round() -> Result<(), Box) -> impl Responder { +async fn get_round_result( + data: web::Json, + store: web::Data, +) -> impl Responder { let incoming = data.into_inner(); - - match get_e3(incoming.round_id).await { - Ok((state, _)) => { - let response: WebResultRequest = state.into(); - HttpResponse::Ok().json(response) - } + match store.e3(incoming.round_id).get_web_result_request().await { + Ok(response) => HttpResponse::Ok().json(response), Err(e) => { - info!("Error getting E3 state: {:?}", e); + error!("Error getting E3 state: {:?}", e); HttpResponse::InternalServerError().body("Failed to get E3 state") } } @@ -41,9 +39,9 @@ async fn get_round_result(data: web::Json) -> impl Responder { /// # Returns /// /// * A JSON response containing the results for all rounds -async fn get_all_round_results() -> impl Responder { - let round_count = match GLOBAL_DB.get::("e3:current_round").await { - Ok(count) => count.unwrap().id, +async fn get_all_round_results(store: web::Data) -> impl Responder { + let round_count = match store.current_round().get_current_round_id().await { + Ok(count) => count, Err(e) => { info!("Error retrieving round count: {:?}", e); return HttpResponse::InternalServerError().body("Failed to retrieve round count"); @@ -51,12 +49,11 @@ async fn get_all_round_results() -> impl Responder { }; let mut states = Vec::new(); + + // FIXME: This assumes ids are ordered for i in 0..round_count + 1 { - match get_e3(i).await { - Ok((state, _key)) => { - let web_result: WebResultRequest = state.into(); - states.push(web_result); - } + match store.e3(i).get_web_result_request().await { + Ok(w) => states.push(w), Err(e) => { info!("Error retrieving state for round {}: {:?}", i, e); continue; @@ -75,16 +72,13 @@ async fn get_all_round_results() -> impl Responder { /// /// # Returns /// -async fn get_round_state_lite(data: web::Json) -> impl Responder { +async fn get_round_state_lite( + data: web::Json, + store: web::Data, +) -> impl Responder { let incoming = data.into_inner(); - - match get_e3(incoming.round_id as u64).await { - Ok((state, _)) => { - let state_lite: E3StateLite = state.into(); - HttpResponse::Ok().json(state_lite) - } - Err(_e) => { - HttpResponse::InternalServerError().body("Failed to get E3 state") - } + match store.e3(incoming.round_id).get_e3_state_lite().await { + Ok(state_lite) => HttpResponse::Ok().json(state_lite), + Err(_) => HttpResponse::InternalServerError().body("Failed to get E3 state"), } } diff --git a/examples/CRISP/apps/server/src/server/routes/voting.rs b/examples/CRISP/apps/server/src/server/routes/voting.rs index 376925426a..b1781cba22 100644 --- a/examples/CRISP/apps/server/src/server/routes/voting.rs +++ b/examples/CRISP/apps/server/src/server/routes/voting.rs @@ -1,16 +1,18 @@ +use crate::server::{ + app_data::AppData, + config::CONFIG, + database::SledDB, + models::{EncryptedVote, VoteResponse, VoteResponseStatus}, + repo::CrispE3Repository, +}; use actix_web::{web, HttpResponse, Responder}; -use log::info; use alloy::{ dyn_abi::DynSolValue, primitives::{Bytes, U256}, }; +use e3_sdk::evm_helpers::contracts::{EnclaveContract, EnclaveWrite}; use eyre::Error; -use crate::server::{ - blockchain::relayer::EnclaveContract, - config::CONFIG, - database::{get_e3, GLOBAL_DB}, - models::{EncryptedVote, VoteResponse, VoteResponseStatus, E3}, -}; +use log::{error, info}; pub fn setup_routes(config: &mut web::ServiceConfig) { config.service( @@ -27,64 +29,87 @@ pub fn setup_routes(config: &mut web::ServiceConfig) { /// # Returns /// /// * A JSON response indicating the success or failure of the operation -async fn broadcast_encrypted_vote(data: web::Json) -> impl Responder { +async fn broadcast_encrypted_vote( + data: web::Json, + store: web::Data, +) -> impl Responder { let vote = data.into_inner(); // Validate and update vote status - let (mut state_data, key) = match validate_and_update_vote_status(&vote).await { - Ok(result) => result, - Err(response) => return response, + let has_voted = match store + .e3(vote.round_id) + .has_voted(vote.address.clone()) + .await + { + Ok(voted) => voted, + Err(e) => { + log::error!("Database error checking vote status: {:?}", e); + return HttpResponse::InternalServerError().json("Internal server error"); + } }; + if has_voted { + return HttpResponse::Ok().json(VoteResponse { + status: VoteResponseStatus::UserAlreadyVoted, + tx_hash: None, + message: Some("User Has Already Voted".to_string()), + }); + } + + let mut repo = store.e3(vote.round_id); + + if let Err(e) = repo.insert_voter_address(vote.address.clone()).await { + log::error!("Database error inserting voter: {:?}", e); + return HttpResponse::InternalServerError().json("Internal server error"); + } + // Prepare vote data for blockchain + let public_inputs_array = if vote.public_inputs.is_empty() { + DynSolValue::Array(vec![]) + } else { + DynSolValue::Array( + vote.public_inputs + .into_iter() + .map(|pi_array_u8| DynSolValue::FixedBytes(pi_array_u8.into(), 32)) + .collect(), + ) + }; + let e3_id = U256::from(vote.round_id); let params_value = DynSolValue::Tuple(vec![ DynSolValue::Bytes(vote.proof_sem), + DynSolValue::Bytes(vote.proof), + public_inputs_array, DynSolValue::Bytes(vote.enc_vote_bytes), ]); let encoded_params = Bytes::from(params_value.abi_encode_params()); // Broadcast vote to blockchain - let contract = EnclaveContract::new(CONFIG.enclave_address.clone()).await.unwrap(); + let contract = match EnclaveContract::new( + &CONFIG.http_rpc_url, + &CONFIG.private_key, + &CONFIG.enclave_address, + ) + .await + { + Ok(c) => c, + Err(e) => { + log::error!("Database error checking vote status: {:?}", e); + return HttpResponse::InternalServerError().json("Internal server error"); + } + }; + match contract.publish_input(e3_id, encoded_params).await { Ok(hash) => HttpResponse::Ok().json(VoteResponse { status: VoteResponseStatus::Success, tx_hash: Some(hash.transaction_hash.to_string()), message: Some("Vote Successful".to_string()), }), - Err(e) => handle_vote_error(e, &mut state_data, &key, &vote.address).await, + Err(e) => handle_vote_error(e, repo, &vote.address).await, } } -/// Validate and update the vote status -/// -/// # Arguments -/// -/// * `vote` - The vote data to be validated and updated -/// -/// # Returns -/// -/// * A tuple containing the state data and the key -async fn validate_and_update_vote_status( - vote: &EncryptedVote, -) -> Result<(E3, String), HttpResponse> { - let (mut state_data, key) = get_e3(vote.round_id).await.unwrap(); - - if state_data.has_voted.contains(&vote.address) { - return Err(HttpResponse::Ok().json(VoteResponse { - status: VoteResponseStatus::UserAlreadyVoted, - tx_hash: None, - message: Some("User Has Already Voted".to_string()), - })); - } - - state_data.has_voted.push(vote.address.clone()); - GLOBAL_DB.insert(&key, &state_data).await.unwrap(); - - Ok((state_data, key.to_string())) -} - /// Handle the vote error /// /// # Arguments @@ -95,17 +120,16 @@ async fn validate_and_update_vote_status( /// * `address` - The address for the vote async fn handle_vote_error( e: Error, - state_data: &mut E3, - key: &str, + mut repo: CrispE3Repository, address: &str, ) -> HttpResponse { info!("Error while sending vote transaction: {:?}", e); // Rollback the vote - if let Some(pos) = state_data.has_voted.iter().position(|x| x == address) { - state_data.has_voted.remove(pos); - GLOBAL_DB.insert(key, state_data).await.unwrap(); - } + match repo.remove_voter_address(address).await { + Ok(_) => (), + Err(err) => error!("Error rolling back the vote: {err}"), + }; HttpResponse::Ok().json(VoteResponse { status: VoteResponseStatus::FailedBroadcast, diff --git a/examples/CRISP/apps/wasm-crypto/Cargo.lock b/examples/CRISP/apps/wasm-crypto/Cargo.lock index fe7f2a601b..41a96c132e 100644 --- a/examples/CRISP/apps/wasm-crypto/Cargo.lock +++ b/examples/CRISP/apps/wasm-crypto/Cargo.lock @@ -14,18 +14,18 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.21.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "aes" @@ -47,17 +47,332 @@ dependencies = [ "memchr", ] +[[package]] +name = "alloy-dyn-abi" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9135eb501feccf7f4cb8a183afd406a65483fdad7bbd7332d0470e5d725c92f" +dependencies = [ + "alloy-json-abi", + "alloy-primitives", + "alloy-sol-type-parser", + "alloy-sol-types", + "itoa", + "serde", + "serde_json", + "winnow", +] + +[[package]] +name = "alloy-json-abi" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b26fdd571915bafe857fccba4ee1a4f352965800e46a53e4a5f50187b7776fa" +dependencies = [ + "alloy-primitives", + "alloy-sol-type-parser", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-primitives" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a326d47106039f38b811057215a92139f46eef7983a4b77b10930a0ea5685b1e" +dependencies = [ + "alloy-rlp", + "bytes", + "cfg-if", + "const-hex", + "derive_more 2.0.1", + "foldhash", + "hashbrown", + "indexmap", + "itoa", + "k256", + "keccak-asm", + "paste", + "proptest", + "rand 0.9.1", + "ruint", + "rustc-hash", + "serde", + "sha3", + "tiny-keccak", +] + +[[package]] +name = "alloy-rlp" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f70d83b765fdc080dbcd4f4db70d8d23fe4761f2f02ebfa9146b833900634b4" +dependencies = [ + "arrayvec", + "bytes", +] + +[[package]] +name = "alloy-sol-macro" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4be1ce1274ddd7fdfac86e5ece1b225e9bba1f2327e20fbb30ee6b9cc1423fe" +dependencies = [ + "alloy-sol-macro-expander", + "alloy-sol-macro-input", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "alloy-sol-macro-expander" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01e92f3708ea4e0d9139001c86c051c538af0146944a2a9c7181753bd944bf57" +dependencies = [ + "alloy-sol-macro-input", + "const-hex", + "heck", + "indexmap", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.101", + "syn-solidity", + "tiny-keccak", +] + +[[package]] +name = "alloy-sol-macro-input" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afe1bd348a41f8c9b4b54dfb314886786d6201235b0b3f47198b9d910c86bb2" +dependencies = [ + "const-hex", + "dunce", + "heck", + "macro-string", + "proc-macro2", + "quote", + "syn 2.0.101", + "syn-solidity", +] + +[[package]] +name = "alloy-sol-type-parser" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6195df2acd42df92a380a8db6205a5c7b41282d0ce3f4c665ecf7911ac292f1" +dependencies = [ + "serde", + "winnow", +] + +[[package]] +name = "alloy-sol-types" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6185e98a79cf19010722f48a74b5a65d153631d2f038cabd250f4b9e9813b8ad" +dependencies = [ + "alloy-json-abi", + "alloy-primitives", + "alloy-sol-macro", + "serde", +] + +[[package]] +name = "anstream" +version = "0.6.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" + +[[package]] +name = "anstyle-parse" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys 0.59.0", +] + [[package]] name = "anyhow" version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" +[[package]] +name = "ark-ff" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" +dependencies = [ + "ark-ff-asm 0.3.0", + "ark-ff-macros 0.3.0", + "ark-serialize 0.3.0", + "ark-std 0.3.0", + "derivative", + "num-bigint", + "num-traits", + "paste", + "rustc_version 0.3.3", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm 0.4.2", + "ark-ff-macros 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint", + "num-traits", + "paste", + "rustc_version 0.4.1", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" +dependencies = [ + "num-bigint", + "num-traits", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-serialize" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" +dependencies = [ + "ark-std 0.3.0", + "digest 0.9.0", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-std 0.4.0", + "digest 0.10.7", + "num-bigint", +] + +[[package]] +name = "ark-std" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "arrayref" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" + [[package]] name = "arrayvec" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "ascii-canvas" @@ -70,9 +385,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.80" +version = "0.1.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" +checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" dependencies = [ "proc-macro2", "quote", @@ -87,14 +402,14 @@ checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" dependencies = [ "futures", "pharos", - "rustc_version", + "rustc_version 0.4.1", ] [[package]] name = "auto_impl" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" +checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" dependencies = [ "proc-macro2", "quote", @@ -103,23 +418,23 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.2.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" -version = "0.3.71" +version = "0.3.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] @@ -142,9 +457,9 @@ checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "base64ct" -version = "1.6.0" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" +checksum = "89e25b6adfb930f02d1981565a6e5d9c547ac15a96606256d3b59040e5cd4ca3" [[package]] name = "bech32" @@ -167,7 +482,16 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" dependencies = [ - "bit-vec", + "bit-vec 0.6.3", +] + +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec 0.8.0", ] [[package]] @@ -176,6 +500,12 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + [[package]] name = "bitflags" version = "1.3.2" @@ -184,9 +514,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.5.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" [[package]] name = "bitvec" @@ -200,6 +530,19 @@ dependencies = [ "wyz", ] +[[package]] +name = "blake3" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq 0.3.1", +] + [[package]] name = "block-buffer" version = "0.10.4" @@ -221,15 +564,15 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "byte-slice-cast" -version = "1.2.2" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" +checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" [[package]] name = "byteorder" @@ -239,9 +582,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.6.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" dependencies = [ "serde", ] @@ -258,29 +601,28 @@ dependencies = [ [[package]] name = "bzip2-sys" -version = "0.1.11+1.0.8" +version = "0.1.13+1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +checksum = "225bff33b2141874fe80d71e07d6eec4f85c5c216453dd96388240f96e1acc14" dependencies = [ "cc", - "libc", "pkg-config", ] [[package]] name = "camino" -version = "1.1.6" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" +checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" dependencies = [ "serde", ] [[package]] name = "cargo-platform" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" dependencies = [ "serde", ] @@ -293,20 +635,21 @@ checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" dependencies = [ "camino", "cargo-platform", - "semver", + "semver 1.0.26", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "cc" -version = "1.0.94" +version = "1.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f6e324229dc011159fcc089755d1e2e216a90d43a7dea6853ca740b84f35e7" +checksum = "d0fc897dc1e865cc67c0e05a836d9d3f1df3cbe442aa4a9473b18e12624a4951" dependencies = [ "jobserver", "libc", + "shlex", ] [[package]] @@ -317,9 +660,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" dependencies = [ "num-traits", ] @@ -334,6 +677,46 @@ dependencies = [ "inout", ] +[[package]] +name = "clap" +version = "4.5.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd60e63e9be68e5fb56422e397cf9baddded06dae1d2e523401542383bc72a9f" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89cc6392a1f72bbeb820d71f32108f61fdaf18bc526e1d23954168a67759ef51" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "clap_lex" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" + [[package]] name = "coins-bip32" version = "0.8.7" @@ -342,12 +725,12 @@ checksum = "3b6be4a5df2098cd811f3194f64ddb96c267606bffd9689ac7b0160097b01ad3" dependencies = [ "bs58", "coins-core", - "digest", + "digest 0.10.7", "hmac", "k256", "serde", "sha2", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -361,9 +744,9 @@ dependencies = [ "hmac", "once_cell", "pbkdf2 0.12.2", - "rand", + "rand 0.8.5", "sha2", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -375,7 +758,7 @@ dependencies = [ "base64 0.21.7", "bech32", "bs58", - "digest", + "digest 0.10.7", "generic-array", "hex", "ripemd", @@ -383,39 +766,26 @@ dependencies = [ "serde_derive", "sha2", "sha3", - "thiserror", + "thiserror 1.0.69", ] [[package]] -name = "commons" -version = "0.1.0" -dependencies = [ - "anyhow", - "fhe", - "fhe-traits", -] +name = "colorchoice" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" [[package]] name = "console" -version = "0.15.8" +version = "0.15.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" +checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" dependencies = [ "encode_unicode", - "lazy_static", "libc", + "once_cell", "unicode-width", - "windows-sys 0.52.0", -] - -[[package]] -name = "console_error_panic_hook" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" -dependencies = [ - "cfg-if", - "wasm-bindgen", + "windows-sys 0.59.0", ] [[package]] @@ -430,9 +800,9 @@ dependencies = [ [[package]] name = "const-hex" -version = "1.11.3" +version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ba00838774b4ab0233e355d26710fbfc8327a05c017f6dc4873f876d1f79f78" +checksum = "83e22e0ed40b96a48d3db274f72fd365bd78f67af39b6bbd47e8a15e1c6207ff" dependencies = [ "cfg-if", "cpufeatures", @@ -447,12 +817,38 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +[[package]] +name = "const_format" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + [[package]] name = "constant_time_eq" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" +[[package]] +name = "constant_time_eq" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + [[package]] name = "core-foundation" version = "0.9.4" @@ -465,24 +861,24 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] [[package]] name = "crc32fast" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if", ] @@ -492,21 +888,22 @@ name = "crisp-wasm-crypto" version = "0.1.0" dependencies = [ "bincode", - "commons", "console", "console_log", + "e3-bfv-helpers", + "e3-greco-generator", "ethers", "fhe", "fhe-math", "fhe-traits", "fhe-util", - "getrandom", + "getrandom 0.2.16", "itertools 0.13.0", "log", "ndarray", "num-bigint", "num-traits", - "rand", + "rand 0.8.5", "rayon", "serde", "serde_json", @@ -517,9 +914,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -536,15 +933,15 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.19" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" [[package]] name = "crypto-bigint" @@ -553,7 +950,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ "generic-array", - "rand_core", + "rand_core 0.6.4", "subtle", "zeroize", ] @@ -579,15 +976,15 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.5.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" +checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" [[package]] name = "der" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" dependencies = [ "const-oid", "zeroize", @@ -595,24 +992,74 @@ dependencies = [ [[package]] name = "deranged" -version = "0.3.11" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" dependencies = [ "powerfmt", ] [[package]] -name = "derive_more" -version = "0.99.17" +name = "derivative" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2", "quote", "syn 1.0.109", ] +[[package]] +name = "derive_more" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl 1.0.0", +] + +[[package]] +name = "derive_more" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" +dependencies = [ + "derive_more-impl 2.0.1", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "derive_more-impl" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", + "unicode-xid", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + [[package]] name = "digest" version = "0.10.7" @@ -667,6 +1114,17 @@ dependencies = [ "winapi", ] +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "doc-comment" version = "0.3.3" @@ -675,9 +1133,52 @@ checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" [[package]] name = "dunce" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "e3-bfv-helpers" +version = "0.1.0" +dependencies = [ + "alloy-dyn-abi", + "alloy-primitives", + "anyhow", + "fhe", + "fhe-traits", + "rand 0.8.5", +] + +[[package]] +name = "e3-greco-generator" +version = "0.1.0" +source = "git+https://github.com/gnosisguild/greco#072bdfbbf6f4c49920fbce72c71cc884ea7423e3" +dependencies = [ + "blake3", + "clap", + "e3-greco-polynomial", + "fhe", + "fhe-math", + "fhe-traits", + "itertools 0.14.0", + "num-bigint", + "num-traits", + "rand 0.8.5", + "rayon", + "serde", + "serde_json", + "toml", +] + +[[package]] +name = "e3-greco-polynomial" +version = "0.1.0" +source = "git+https://github.com/gnosisguild/greco#072bdfbbf6f4c49920fbce72c71cc884ea7423e3" +dependencies = [ + "num-bigint", + "num-traits", + "serde", +] [[package]] name = "ecdsa" @@ -686,7 +1187,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ "der", - "digest", + "digest 0.10.7", "elliptic-curve", "rfc6979", "signature", @@ -695,9 +1196,9 @@ dependencies = [ [[package]] name = "either" -version = "1.11.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "elliptic-curve" @@ -707,12 +1208,12 @@ checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct", "crypto-bigint", - "digest", + "digest 0.10.7", "ff", "generic-array", "group", "pkcs8", - "rand_core", + "rand_core 0.6.4", "sec1", "subtle", "zeroize", @@ -720,24 +1221,24 @@ dependencies = [ [[package]] name = "ena" -version = "0.14.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c533630cf40e9caa44bd91aadc88a75d75a4c3a12b4cfde353cbed41daa1e1f1" +checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5" dependencies = [ "log", ] [[package]] name = "encode_unicode" -version = "0.3.6" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" [[package]] name = "encoding_rs" -version = "0.8.34" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if", ] @@ -753,7 +1254,7 @@ dependencies = [ "hex", "k256", "log", - "rand", + "rand 0.8.5", "rlp", "serde", "sha3", @@ -762,18 +1263,18 @@ dependencies = [ [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.8" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -784,17 +1285,17 @@ checksum = "1fda3bf123be441da5260717e0661c25a2fd9cb2b2c1d20bf2e05580047158ab" dependencies = [ "aes", "ctr", - "digest", + "digest 0.10.7", "hex", "hmac", "pbkdf2 0.11.0", - "rand", + "rand 0.8.5", "scrypt", "serde", "serde_json", "sha2", "sha3", - "thiserror", + "thiserror 1.0.69", "uuid", ] @@ -811,7 +1312,7 @@ dependencies = [ "serde", "serde_json", "sha3", - "thiserror", + "thiserror 1.0.69", "uint", ] @@ -890,7 +1391,7 @@ dependencies = [ "pin-project", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -951,14 +1452,14 @@ dependencies = [ "num_enum", "once_cell", "open-fastrlp", - "rand", + "rand 0.8.5", "rlp", "serde", "serde_json", "strum", "syn 2.0.101", "tempfile", - "thiserror", + "thiserror 1.0.69", "tiny-keccak", "unicode-xid", ] @@ -972,10 +1473,10 @@ dependencies = [ "chrono", "ethers-core", "reqwest", - "semver", + "semver 1.0.26", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tracing", ] @@ -999,7 +1500,7 @@ dependencies = [ "reqwest", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "tracing-futures", @@ -1031,7 +1532,7 @@ dependencies = [ "reqwest", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-tungstenite", "tracing", @@ -1056,9 +1557,9 @@ dependencies = [ "elliptic-curve", "eth-keystore", "ethers-core", - "rand", + "rand 0.8.5", "sha2", - "thiserror", + "thiserror 1.0.69", "tracing", ] @@ -1081,12 +1582,12 @@ dependencies = [ "path-slash", "rayon", "regex", - "semver", + "semver 1.0.26", "serde", "serde_json", "solang-parser", "svm-rs", - "thiserror", + "thiserror 1.0.69", "tiny-keccak", "tokio", "tracing", @@ -1096,9 +1597,9 @@ dependencies = [ [[package]] name = "ethnum" -version = "1.5.0" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b90ca2580b73ab6a1f724b76ca11ab632df820fd6040c336200d2c1df7b3c82c" +checksum = "ca81e6b4777c89fd810c25a4be2b1bd93ea034fbe58e6a75216a34c6b82c539b" [[package]] name = "eyre" @@ -1112,24 +1613,46 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.0.2" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "fastrlp" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "658bd65b1cf4c852a3cc96f18a8ce7b5640f6b703f905c7d74532294c2a63984" +checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", +] + +[[package]] +name = "fastrlp" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce8dba4714ef14b8274c371879b175aa55b16b30f269663f19d576f380018dc4" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", +] [[package]] name = "ff" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" dependencies = [ - "rand_core", + "rand_core 0.6.4", "subtle", ] [[package]] name = "fhe" version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs.git?branch=feature%2Fgreco-integration#26e5f2ff6c860d47a1c88a777936bc68eaedb129" +source = "git+https://github.com/gnosisguild/fhe.rs.git#11cdd749a8e01c486160d5f62572c4520af5358f" dependencies = [ "doc-comment", "fhe-math", @@ -1141,10 +1664,10 @@ dependencies = [ "num-traits", "prost", "prost-build", - "rand", - "rand_chacha", + "rand 0.8.5", + "rand_chacha 0.3.1", "serde", - "thiserror", + "thiserror 1.0.69", "zeroize", "zeroize_derive", ] @@ -1152,7 +1675,7 @@ dependencies = [ [[package]] name = "fhe-math" version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs.git?branch=feature%2Fgreco-integration#26e5f2ff6c860d47a1c88a777936bc68eaedb129" +source = "git+https://github.com/gnosisguild/fhe.rs.git#11cdd749a8e01c486160d5f62572c4520af5358f" dependencies = [ "ethnum", "fhe-traits", @@ -1164,30 +1687,32 @@ dependencies = [ "num-traits", "prost", "prost-build", - "rand", - "rand_chacha", + "rand 0.8.5", + "rand_chacha 0.3.1", "sha2", - "thiserror", + "thiserror 1.0.69", "zeroize", ] [[package]] name = "fhe-traits" version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs.git?branch=feature%2Fgreco-integration#26e5f2ff6c860d47a1c88a777936bc68eaedb129" +source = "git+https://github.com/gnosisguild/fhe.rs.git#11cdd749a8e01c486160d5f62572c4520af5358f" dependencies = [ - "rand", + "rand 0.8.5", ] [[package]] name = "fhe-util" version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs.git?branch=feature%2Fgreco-integration#26e5f2ff6c860d47a1c88a777936bc68eaedb129" +source = "git+https://github.com/gnosisguild/fhe.rs.git#11cdd749a8e01c486160d5f62572c4520af5358f" dependencies = [ "itertools 0.12.1", "num-bigint-dig", "num-traits", - "rand", + "prime_factorization", + "rand 0.8.5", + "rayon", ] [[package]] @@ -1197,7 +1722,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" dependencies = [ "byteorder", - "rand", + "rand 0.8.5", "rustc-hex", "static_assertions", ] @@ -1210,9 +1735,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.28" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" dependencies = [ "crc32fast", "miniz_oxide", @@ -1224,6 +1749,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + [[package]] name = "form_urlencoded" version = "1.2.1" @@ -1251,9 +1782,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -1266,9 +1797,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -1276,15 +1807,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -1293,9 +1824,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-locks" @@ -1309,9 +1840,9 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", @@ -1320,15 +1851,15 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-timer" @@ -1342,9 +1873,9 @@ dependencies = [ [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -1380,28 +1911,40 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "js-sys", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", +] + [[package]] name = "gimli" -version = "0.28.1" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "glob" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" [[package]] name = "gloo-timers" @@ -1422,7 +1965,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff", - "rand_core", + "rand_core 0.6.4", "subtle", ] @@ -1447,9 +1990,13 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.14.3" +version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3" +dependencies = [ + "foldhash", + "serde", +] [[package]] name = "hashers" @@ -1460,12 +2007,6 @@ dependencies = [ "fxhash", ] -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - [[package]] name = "heck" version = "0.5.0" @@ -1474,15 +2015,18 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.3.9" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +checksum = "f154ce46856750ed433c8649605bf7ed2de3bc35fd9d2a9f30cddd873c80cb08" [[package]] name = "hex" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +dependencies = [ + "serde", +] [[package]] name = "hmac" @@ -1490,16 +2034,16 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest", + "digest 0.10.7", ] [[package]] name = "home" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -1526,9 +2070,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.8.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "httpdate" @@ -1538,9 +2082,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "0.14.28" +version = "0.14.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" dependencies = [ "bytes", "futures-channel", @@ -1561,27 +2105,124 @@ dependencies = [ ] [[package]] -name = "hyper-rustls" -version = "0.24.2" +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http", + "hyper", + "rustls", + "tokio", + "tokio-rustls", +] + +[[package]] +name = "icu_collections" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" + +[[package]] +name = "icu_properties" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "potential_utf", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" + +[[package]] +name = "icu_provider" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" dependencies = [ - "futures-util", - "http", - "hyper", - "rustls", - "tokio", - "tokio-rustls", + "displaydoc", + "icu_locale_core", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", ] [[package]] name = "idna" -version = "0.5.0" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "icu_normalizer", + "icu_properties", ] [[package]] @@ -1613,13 +2254,13 @@ dependencies = [ [[package]] name = "impl-trait-for-tuples" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.101", ] [[package]] @@ -1630,37 +2271,53 @@ checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" [[package]] name = "indexmap" -version = "2.2.6" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" dependencies = [ "equivalent", "hashbrown", + "serde", ] [[package]] name = "inout" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" dependencies = [ "generic-array", ] [[package]] name = "instant" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if", ] [[package]] name = "ipnet" -version = "2.9.0" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "itertools" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] [[package]] name = "itertools" @@ -1689,27 +2346,38 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jobserver" -version = "0.1.30" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "685a7d121ee3f65ae4fddd72b25a04bb36b6af81bc0828f7d5434c0fe60fa3a2" +checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" dependencies = [ + "getrandom 0.3.3", "libc", ] [[package]] name = "js-sys" -version = "0.3.70" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -1729,9 +2397,9 @@ dependencies = [ [[package]] name = "k256" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" dependencies = [ "cfg-if", "ecdsa", @@ -1750,6 +2418,16 @@ dependencies = [ "cpufeatures", ] +[[package]] +name = "keccak-asm" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "505d1856a39b200489082f90d897c3f07c455563880bc5952e38eabf731c83b6" +dependencies = [ + "digest 0.10.7", + "sha3-asm", +] + [[package]] name = "lalrpop" version = "0.20.2" @@ -1757,7 +2435,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55cb077ad656299f160924eb2912aa147d7339ea7d69e1b5517326fdcec3c1ca" dependencies = [ "ascii-canvas", - "bit-set", + "bit-set 0.5.3", "ena", "itertools 0.11.0", "lalrpop-util", @@ -1782,24 +2460,24 @@ dependencies = [ [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" dependencies = [ - "spin 0.5.2", + "spin 0.9.8", ] [[package]] name = "libc" -version = "0.2.153" +version = "0.2.172" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" [[package]] name = "libm" -version = "0.2.8" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libredox" @@ -1807,21 +2485,27 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.9.1", "libc", ] [[package]] name = "linux-raw-sys" -version = "0.4.13" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" + +[[package]] +name = "litemap" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" [[package]] name = "lock_api" -version = "0.4.11" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" dependencies = [ "autocfg", "scopeguard", @@ -1829,15 +2513,26 @@ dependencies = [ [[package]] name = "log" -version = "0.4.21" +version = "0.4.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" + +[[package]] +name = "macro-string" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] [[package]] name = "matrixmultiply" -version = "0.3.8" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2" +checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08" dependencies = [ "autocfg", "rawpointer", @@ -1850,14 +2545,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ "cfg-if", - "digest", + "digest 0.10.7", ] [[package]] name = "memchr" -version = "2.7.2" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "mime" @@ -1867,9 +2562,9 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "minicov" -version = "0.3.5" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c71e683cd655513b99affab7d317deb690528255a0d5f717f1024093c12b169" +checksum = "f27fe9f1cc3c22e1687f9446c2083c4c5fc7f0bcf1c7a86bdbded14985895b4b" dependencies = [ "cc", "walkdir", @@ -1877,29 +2572,29 @@ dependencies = [ [[package]] name = "miniz_oxide" -version = "0.7.2" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" dependencies = [ - "adler", + "adler2", ] [[package]] name = "mio" -version = "0.8.11" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", - "wasi", - "windows-sys 0.48.0", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.59.0", ] [[package]] name = "multimap" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" +checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084" [[package]] name = "ndarray" @@ -1920,6 +2615,20 @@ version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + [[package]] name = "num-bigint" version = "0.4.6" @@ -1928,6 +2637,7 @@ checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits", + "serde", ] [[package]] @@ -1942,16 +2652,16 @@ dependencies = [ "num-integer", "num-iter", "num-traits", - "rand", + "rand 0.8.5", "serde", "smallvec", ] [[package]] name = "num-complex" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23c6602fda94a57c990fe0df199a035d83576b496aa29f4e634a8ac6004e68a6" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" dependencies = [ "num-traits", ] @@ -1973,20 +2683,31 @@ dependencies = [ [[package]] name = "num-iter" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d869c01cc0c455284163fd0092f1f93835385ccab5a98a0dcc497b2f8bf055a9" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" dependencies = [ "autocfg", "num-integer", "num-traits", ] +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + [[package]] name = "num-traits" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", "libm", @@ -1994,9 +2715,9 @@ dependencies = [ [[package]] name = "num_cpus" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" dependencies = [ "hermit-abi", "libc", @@ -2004,20 +2725,20 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" dependencies = [ "num_enum_derive", ] [[package]] name = "num_enum_derive" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ - "proc-macro-crate 3.1.0", + "proc-macro-crate", "proc-macro2", "quote", "syn 2.0.101", @@ -2025,18 +2746,24 @@ dependencies = [ [[package]] name = "object" -version = "0.32.2" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "once_cell_polyfill" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" [[package]] name = "open-fastrlp" @@ -2071,35 +2798,37 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "parity-scale-codec" -version = "3.6.9" +version = "3.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881331e34fa842a2fb61cc2db9643a8fedc615e47cfcc52597d1af0db9a7e8fe" +checksum = "799781ae679d79a948e13d4824a40970bfa500058d245760dd857301059810fa" dependencies = [ "arrayvec", "bitvec", "byte-slice-cast", + "const_format", "impl-trait-for-tuples", "parity-scale-codec-derive", + "rustversion", "serde", ] [[package]] name = "parity-scale-codec-derive" -version = "3.6.9" +version = "3.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" +checksum = "34b4653168b563151153c9e4c08ebed57fb8262bebfa79711552fa983c623e7a" dependencies = [ - "proc-macro-crate 2.0.0", + "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.101", ] [[package]] name = "parking_lot" -version = "0.12.1" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" dependencies = [ "lock_api", "parking_lot_core", @@ -2107,15 +2836,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.9" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-targets 0.48.5", + "windows-targets 0.52.6", ] [[package]] @@ -2125,10 +2854,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" dependencies = [ "base64ct", - "rand_core", + "rand_core 0.6.4", "subtle", ] +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + [[package]] name = "path-slash" version = "0.2.1" @@ -2141,7 +2876,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" dependencies = [ - "digest", + "digest 0.10.7", "hmac", "password-hash", "sha2", @@ -2153,7 +2888,7 @@ version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ - "digest", + "digest 0.10.7", "hmac", ] @@ -2172,11 +2907,22 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +[[package]] +name = "pest" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "198db74531d58c70a361c42201efde7e2591e976d518caf7662a47dc5720e7b6" +dependencies = [ + "memchr", + "thiserror 2.0.12", + "ucd-trie", +] + [[package]] name = "petgraph" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", "indexmap", @@ -2189,37 +2935,37 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414" dependencies = [ "futures", - "rustc_version", + "rustc_version 0.4.1", ] [[package]] name = "phf" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" dependencies = [ "phf_macros", - "phf_shared 0.11.2", + "phf_shared", ] [[package]] name = "phf_generator" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" dependencies = [ - "phf_shared 0.11.2", - "rand", + "phf_shared", + "rand 0.8.5", ] [[package]] name = "phf_macros" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" dependencies = [ "phf_generator", - "phf_shared 0.11.2", + "phf_shared", "proc-macro2", "quote", "syn 2.0.101", @@ -2227,36 +2973,27 @@ dependencies = [ [[package]] name = "phf_shared" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" -dependencies = [ - "siphasher", -] - -[[package]] -name = "phf_shared" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" dependencies = [ "siphasher", ] [[package]] name = "pin-project" -version = "1.1.5" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.5" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", @@ -2265,9 +3002,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -2287,9 +3024,18 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" + +[[package]] +name = "potential_utf" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +dependencies = [ + "zerovec", +] [[package]] name = "powerfmt" @@ -2299,9 +3045,12 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] [[package]] name = "precomputed-hash" @@ -2311,14 +3060,25 @@ checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" [[package]] name = "prettyplease" -version = "0.2.19" +version = "0.2.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ac2cf0f2e4f42b49f5ffd07dae8d746508ef7526c13940e5f524012ae6c6550" +checksum = "9dee91521343f4c5c6a63edd65e54f31f5c92fe8978c40a4282f8372194c6a7d" dependencies = [ "proc-macro2", "syn 2.0.101", ] +[[package]] +name = "prime_factorization" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb24cb4f70d64221509ab3dca82ad2ec24e1d7f3fa3e7cb9eed4ced578683287" +dependencies = [ + "itertools 0.10.5", + "num", + "rand 0.8.5", +] + [[package]] name = "primitive-types" version = "0.12.2" @@ -2335,30 +3095,33 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "1.3.1" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" dependencies = [ - "once_cell", - "toml_edit 0.19.15", + "toml_edit", ] [[package]] -name = "proc-macro-crate" +name = "proc-macro-error-attr2" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" dependencies = [ - "toml_edit 0.20.7", + "proc-macro2", + "quote", ] [[package]] -name = "proc-macro-crate" -version = "3.1.0" +name = "proc-macro-error2" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" dependencies = [ - "toml_edit 0.21.1", + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn 2.0.101", ] [[package]] @@ -2372,25 +3135,29 @@ dependencies = [ [[package]] name = "proptest" -version = "1.4.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31b476131c3c86cb68032fdc5cb6d5a1045e3e42d96b69fa599fd77701e1f5bf" +checksum = "14cae93065090804185d3b75f0bf93b8eeda30c7a9b4a33d3bdb3988d6229e50" dependencies = [ - "bitflags 2.5.0", + "bit-set 0.8.0", + "bit-vec 0.8.0", + "bitflags 2.9.1", "lazy_static", "num-traits", - "rand", - "rand_chacha", + "rand 0.8.5", + "rand_chacha 0.3.1", "rand_xorshift", "regex-syntax", + "rusty-fork", + "tempfile", "unarray", ] [[package]] name = "prost" -version = "0.12.4" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0f5d036824e4761737860779c906171497f6d55681139d8312388f8fe398922" +checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" dependencies = [ "bytes", "prost-derive", @@ -2398,12 +3165,12 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.12.4" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80b776a1b2dc779f5ee0641f8ade0125bc1298dd41a9a0c16d8bd57b42d222b1" +checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" dependencies = [ "bytes", - "heck 0.5.0", + "heck", "itertools 0.12.1", "log", "multimap", @@ -2419,9 +3186,9 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.12.4" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19de2de2a00075bf566bee3bd4db014b11587e84184d3f7a791bc17f1a8e9e48" +checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ "anyhow", "itertools 0.12.1", @@ -2432,22 +3199,34 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.12.4" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3235c33eb02c1f1e212abdbe34c78b264b038fb58ca612664343271e36e55ffe" +checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" dependencies = [ "prost", ] +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + [[package]] name = "quote" -version = "1.0.36" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" + [[package]] name = "radium" version = "0.7.0" @@ -2461,8 +3240,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", - "rand_core", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", + "serde", ] [[package]] @@ -2472,7 +3262,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", ] [[package]] @@ -2481,7 +3281,17 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.16", +] + +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.3", + "serde", ] [[package]] @@ -2490,7 +3300,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" dependencies = [ - "rand_core", + "rand_core 0.6.4", ] [[package]] @@ -2521,29 +3331,29 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.4.1" +version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.9.1", ] [[package]] name = "redox_users" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ - "getrandom", + "getrandom 0.2.16", "libredox", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "regex" -version = "1.10.4" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", @@ -2553,9 +3363,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.6" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", @@ -2564,9 +3374,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" @@ -2636,15 +3446,14 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.8" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom", + "getrandom 0.2.16", "libc", - "spin 0.9.8", "untrusted 0.9.0", "windows-sys 0.52.0", ] @@ -2655,7 +3464,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" dependencies = [ - "digest", + "digest 0.10.7", ] [[package]] @@ -2680,11 +3489,50 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ruint" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11256b5fe8c68f56ac6f39ef0720e592f33d2367a4782740d9c9142e889c7fb4" +dependencies = [ + "alloy-rlp", + "ark-ff 0.3.0", + "ark-ff 0.4.2", + "bytes", + "fastrlp 0.3.1", + "fastrlp 0.4.0", + "num-bigint", + "num-integer", + "num-traits", + "parity-scale-codec", + "primitive-types", + "proptest", + "rand 0.8.5", + "rand 0.9.1", + "rlp", + "ruint-macro", + "serde", + "valuable", + "zeroize", +] + +[[package]] +name = "ruint-macro" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" + [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc-hash" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" [[package]] name = "rustc-hex" @@ -2694,34 +3542,43 @@ checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" dependencies = [ - "semver", + "semver 0.11.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver 1.0.26", ] [[package]] name = "rustix" -version = "0.38.32" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65e04861e65f21776e67888bfbea442b3642beaa0138fdb1dd7a84a52dffdb89" +checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.9.1", "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "rustls" -version = "0.21.10" +version = "0.21.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" dependencies = [ "log", - "ring 0.17.8", + "ring 0.17.14", "rustls-webpki", "sct", ] @@ -2741,21 +3598,33 @@ version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "ring 0.17.8", + "ring 0.17.14", "untrusted 0.9.0", ] [[package]] name = "rustversion" -version = "1.0.15" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" + +[[package]] +name = "rusty-fork" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47" +checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" +dependencies = [ + "fnv", + "quick-error", + "tempfile", + "wait-timeout", +] [[package]] name = "ryu" -version = "1.0.17" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "salsa20" @@ -2777,34 +3646,28 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.11.2" +version = "2.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c453e59a955f81fb62ee5d596b450383d699f152d350e9d23a0db2adb78e4c0" +checksum = "346a3b32eba2640d17a9cb5927056b08f3de90f65b72fe09402c2ad07d684d0b" dependencies = [ "cfg-if", - "derive_more", + "derive_more 1.0.0", "parity-scale-codec", "scale-info-derive", ] [[package]] name = "scale-info-derive" -version = "2.11.2" +version = "2.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18cf6c6447f813ef19eb450e985bcce6705f9ce7660db221b59093d15c79c4b7" +checksum = "c6630024bf739e2179b91fb424b28898baf819414262c5d376677dbff1fe7ebf" dependencies = [ - "proc-macro-crate 1.3.1", + "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.101", ] -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - [[package]] name = "scopeguard" version = "1.2.0" @@ -2829,7 +3692,7 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "ring 0.17.8", + "ring 0.17.14", "untrusted 0.9.0", ] @@ -2849,13 +3712,31 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.22" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" dependencies = [ "serde", ] +[[package]] +name = "semver-parser" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9900206b54a3527fdc7b8a938bffd94a568bac4f4aa8113b209df75a09c0dec2" +dependencies = [ + "pest", +] + [[package]] name = "send_wrapper" version = "0.4.0" @@ -2902,9 +3783,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.5" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" dependencies = [ "serde", ] @@ -2929,18 +3810,18 @@ checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", "cpufeatures", - "digest", + "digest 0.10.7", ] [[package]] name = "sha2" -version = "0.10.8" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", "cpufeatures", - "digest", + "digest 0.10.7", ] [[package]] @@ -2949,37 +3830,53 @@ version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" dependencies = [ - "digest", + "digest 0.10.7", "keccak", ] +[[package]] +name = "sha3-asm" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28efc5e327c837aa837c59eae585fc250715ef939ac32881bcc11677cd02d46" +dependencies = [ + "cc", + "cfg-if", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signature" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ - "digest", - "rand_core", + "digest 0.10.7", + "rand_core 0.6.4", ] [[package]] name = "simple_asn1" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" +checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" dependencies = [ "num-bigint", "num-traits", - "thiserror", + "thiserror 2.0.12", "time", ] [[package]] name = "siphasher" -version = "0.3.11" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" [[package]] name = "slab" @@ -2992,15 +3889,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.13.2" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" [[package]] name = "socket2" -version = "0.5.6" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" dependencies = [ "libc", "windows-sys 0.52.0", @@ -3016,7 +3913,7 @@ dependencies = [ "lalrpop", "lalrpop-util", "phf", - "thiserror", + "thiserror 1.0.69", "unicode-xid", ] @@ -3042,6 +3939,12 @@ dependencies = [ "der", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "static_assertions" version = "1.1.0" @@ -3050,33 +3953,38 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "string_cache" -version = "0.8.7" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" +checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" dependencies = [ "new_debug_unreachable", - "once_cell", "parking_lot", - "phf_shared 0.10.0", + "phf_shared", "precomputed-hash", ] +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + [[package]] name = "strum" -version = "0.26.2" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" dependencies = [ "strum_macros", ] [[package]] name = "strum_macros" -version = "0.26.2" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6cf59daf282c0a494ba14fd21610a0325f9f90ec9d1231dea26bcb1d696c946" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" dependencies = [ - "heck 0.4.1", + "heck", "proc-macro2", "quote", "rustversion", @@ -3085,9 +3993,9 @@ dependencies = [ [[package]] name = "subtle" -version = "2.5.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "svm-rs" @@ -3100,11 +4008,11 @@ dependencies = [ "hex", "once_cell", "reqwest", - "semver", + "semver 1.0.26", "serde", "serde_json", "sha2", - "thiserror", + "thiserror 1.0.69", "url", "zip", ] @@ -3131,12 +4039,35 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn-solidity" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c8c8f496c33dc6343dac05b4be8d9e0bca180a4caa81d7b8416b10cc2273cd" +dependencies = [ + "paste", + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "sync_wrapper" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "system-configuration" version = "0.5.1" @@ -3166,14 +4097,15 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.10.1" +version = "3.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" dependencies = [ - "cfg-if", "fastrand", + "getrandom 0.3.3", + "once_cell", "rustix", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -3189,18 +4121,38 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.58" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +dependencies = [ + "thiserror-impl 2.0.12", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ - "thiserror-impl", + "proc-macro2", + "quote", + "syn 2.0.101", ] [[package]] name = "thiserror-impl" -version = "1.0.58" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ "proc-macro2", "quote", @@ -3209,9 +4161,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.36" +version = "0.3.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" dependencies = [ "deranged", "itoa", @@ -3224,15 +4176,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" +checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" [[package]] name = "time-macros" -version = "0.2.18" +version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" dependencies = [ "num-conv", "time-core", @@ -3247,11 +4199,21 @@ dependencies = [ "crunchy", ] +[[package]] +name = "tinystr" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" dependencies = [ "tinyvec_macros", ] @@ -3264,18 +4226,17 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.37.0" +version = "1.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" dependencies = [ "backtrace", "bytes", "libc", "mio", - "num_cpus", "pin-project-lite", "socket2", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -3305,96 +4266,69 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.10" +version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" dependencies = [ "bytes", "futures-core", "futures-sink", "pin-project-lite", "tokio", - "tracing", ] [[package]] name = "toml" -version = "0.8.12" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9dd1545e8208b4a5af1aa9bbd0b4cf7e9ea08fabc5d0a5c67fcaafa17433aa3" +checksum = "05ae329d1f08c4d17a59bed7ff5b5a769d062e64a62d34a3261b219e62cd5aae" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.9", + "toml_edit", ] [[package]] name = "toml_datetime" -version = "0.6.5" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3" dependencies = [ "serde", ] [[package]] name = "toml_edit" -version = "0.19.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" -dependencies = [ - "indexmap", - "toml_datetime", - "winnow 0.5.40", -] - -[[package]] -name = "toml_edit" -version = "0.20.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" -dependencies = [ - "indexmap", - "toml_datetime", - "winnow 0.5.40", -] - -[[package]] -name = "toml_edit" -version = "0.21.1" +version = "0.22.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e" dependencies = [ "indexmap", + "serde", + "serde_spanned", "toml_datetime", - "winnow 0.5.40", + "toml_write", + "winnow", ] [[package]] -name = "toml_edit" -version = "0.22.9" +name = "toml_write" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e40bb779c5187258fd7aad0eb68cb8706a0a81fa712fbea808ab43c4b8374c4" -dependencies = [ - "indexmap", - "serde", - "serde_spanned", - "toml_datetime", - "winnow 0.6.6", -] +checksum = "bfb942dfe1d8e29a7ee7fcbde5bd2b9a25fb89aa70caea2eba3bee836ff41076" [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "pin-project-lite", "tracing-attributes", @@ -3403,9 +4337,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", @@ -3414,9 +4348,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", ] @@ -3449,19 +4383,25 @@ dependencies = [ "http", "httparse", "log", - "rand", + "rand 0.8.5", "rustls", "sha1", - "thiserror", + "thiserror 1.0.69", "url", "utf-8", ] [[package]] name = "typenum" -version = "1.17.0" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" + +[[package]] +name = "ucd-trie" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" [[package]] name = "uint" @@ -3481,38 +4421,23 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" -[[package]] -name = "unicode-bidi" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" - [[package]] name = "unicode-ident" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" - -[[package]] -name = "unicode-normalization" -version = "0.1.23" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" -dependencies = [ - "tinyvec", -] +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "unicode-width" -version = "0.1.11" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" [[package]] name = "unicode-xid" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "untrusted" @@ -3528,9 +4453,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.0" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", @@ -3543,21 +4468,48 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + [[package]] name = "uuid" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" dependencies = [ - "getrandom", + "getrandom 0.2.16", "serde", ] +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "wait-timeout" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" +dependencies = [ + "libc", +] [[package]] name = "walkdir" @@ -3584,26 +4536,35 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.14.2+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "wasm-bindgen" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", "once_cell", + "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", "syn 2.0.101", @@ -3612,21 +4573,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.43" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3634,9 +4596,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", @@ -3647,20 +4609,21 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "wasm-bindgen-test" -version = "0.3.43" +version = "0.3.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68497a05fb21143a08a7d24fc81763384a3072ee43c44e86aad1744d6adef9d9" +checksum = "66c8d5e33ca3b6d9fa3b4676d774c5778031d27a578c2b007f905acf816152c3" dependencies = [ - "console_error_panic_hook", "js-sys", "minicov", - "scoped-tls", "wasm-bindgen", "wasm-bindgen-futures", "wasm-bindgen-test-macro", @@ -3668,9 +4631,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-test-macro" -version = "0.3.43" +version = "0.3.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8220be1fa9e4c889b30fd207d4906657e7e90b12e0e6b0c8b8d8709f5de021" +checksum = "17d5042cc5fa009658f9a7333ef24291b1291a25b6382dd68862a7f3b969f69b" dependencies = [ "proc-macro2", "quote", @@ -3679,9 +4642,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" dependencies = [ "js-sys", "wasm-bindgen", @@ -3711,11 +4674,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.6" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "winapi", + "windows-sys 0.59.0", ] [[package]] @@ -3739,7 +4702,16 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", ] [[package]] @@ -3759,18 +4731,18 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] @@ -3781,9 +4753,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" @@ -3793,9 +4765,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" @@ -3805,15 +4777,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" @@ -3823,9 +4795,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" @@ -3835,9 +4807,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" @@ -3847,9 +4819,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" @@ -3859,24 +4831,15 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" - -[[package]] -name = "winnow" -version = "0.5.40" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.6" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0c976aaaa0e1f90dbb21e9587cdaf1d9679a1cde8875c0d6bd83ab96a208352" +checksum = "c06928c8748d81b05c9be96aad92e1b6ff01833332f281e8cfca3be4b35fc9ec" dependencies = [ "memchr", ] @@ -3891,6 +4854,21 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "wit-bindgen-rt" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags 2.9.1", +] + +[[package]] +name = "writeable" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" + [[package]] name = "ws_stream_wasm" version = "0.7.4" @@ -3902,9 +4880,9 @@ dependencies = [ "js-sys", "log", "pharos", - "rustc_version", + "rustc_version 0.4.1", "send_wrapper 0.6.0", - "thiserror", + "thiserror 1.0.69", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -3925,11 +4903,79 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" +[[package]] +name = "yoke" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", + "synstructure", +] + [[package]] name = "zeroize" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +dependencies = [ + "zeroize_derive", +] [[package]] name = "zeroize_derive" @@ -3942,6 +4988,39 @@ dependencies = [ "syn 2.0.101", ] +[[package]] +name = "zerotrie" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "zip" version = "0.6.6" @@ -3951,7 +5030,7 @@ dependencies = [ "aes", "byteorder", "bzip2", - "constant_time_eq", + "constant_time_eq 0.1.5", "crc32fast", "crossbeam-utils", "flate2", @@ -3983,9 +5062,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.10+zstd.1.5.6" +version = "2.0.15+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c253a4914af5bafc8fa8c86ee400827e83cf6ec01195ec1f1ed8441bf00d65aa" +checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" dependencies = [ "cc", "pkg-config", diff --git a/examples/CRISP/apps/wasm-crypto/Cargo.toml b/examples/CRISP/apps/wasm-crypto/Cargo.toml index f764fc7703..39d63f1397 100644 --- a/examples/CRISP/apps/wasm-crypto/Cargo.toml +++ b/examples/CRISP/apps/wasm-crypto/Cargo.toml @@ -6,17 +6,18 @@ repository = "https://github.com/gnosisguild/enclave" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +greco = { package = "e3-greco-generator", git = "https://github.com/gnosisguild/greco" } web-sys = { version = "0.3", features = ["console"] } console = "0.15.7" -fhe_rs = { package = "fhe", git = "https://github.com/gnosisguild/fhe.rs", branch = "feature/greco-integration" } -fhe-traits = { git = "https://github.com/gnosisguild/fhe.rs", branch = "feature/greco-integration" } -fhe-math = { git = "https://github.com/gnosisguild/fhe.rs.git", branch = "feature/greco-integration" } -fhe-util = { git = "https://github.com/gnosisguild/fhe.rs", branch = "feature/greco-integration" } +fhe_rs = { package = "fhe", git = "https://github.com/gnosisguild/fhe.rs" } +fhe-traits = { git = "https://github.com/gnosisguild/fhe.rs" } +fhe-math = { git = "https://github.com/gnosisguild/fhe.rs.git" } +fhe-util = { git = "https://github.com/gnosisguild/fhe.rs" } rand = "0.8.5" -ethers = "2.0" +ethers = "2.0.14" getrandom = { version = "0.2.11", features = ["js"] } bincode = "1.3.3" -commons = { path = "../../../../packages/commons" } +e3-bfv-helpers = { path = "../../../../crates/bfv-helpers" } rayon = "1.10.0" ndarray = "0.15.6" itertools = "0.13.0" @@ -30,4 +31,4 @@ console_log = "0.2" log = "0.4" [lib] -crate-type = ["cdylib", "rlib"] \ No newline at end of file +crate-type = ["cdylib", "rlib"] diff --git a/examples/CRISP/apps/wasm-crypto/README.md b/examples/CRISP/apps/wasm-crypto/README.md new file mode 100644 index 0000000000..72699c2019 --- /dev/null +++ b/examples/CRISP/apps/wasm-crypto/README.md @@ -0,0 +1,35 @@ +# CRISP-Web + +A Rust WebAssembly (WASM) implementation of Fully Homomorphic Encryption (FHE) for secure voting systems. + +## Features + +- BFV encryption scheme implementation +- WASM integration for browser-based encryption +- Greco protocol implementation for input validation + +## Prerequisites + +- Rust (latest stable version) +- wasm-pack +- Node.js (for running tests) + +## Installation + +1. Install wasm-pack +`cargo install wasm-pack` + +## Building + +Build the WebAssembly package: +``` +wasm-pack build --target web --release +``` + + +## Running Tests + +Run the tests: +``` +wasm-pack test --node --release +``` diff --git a/examples/CRISP/apps/wasm-crypto/src/greco/greco.rs b/examples/CRISP/apps/wasm-crypto/src/greco/greco.rs deleted file mode 100644 index 1298638ec7..0000000000 --- a/examples/CRISP/apps/wasm-crypto/src/greco/greco.rs +++ /dev/null @@ -1,835 +0,0 @@ -use std::fs::File; -use std::io::Write; -use std::ops::Deref; -use std::path::Path; -use std::sync::Arc; - -use fhe_math::rq::{Poly, Representation}; -use fhe_math::zq::Modulus; -use fhe_rs::bfv::{BfvParameters, Ciphertext, Plaintext, PublicKey}; -use serde_json::json; - -use crate::greco::poly::*; -use itertools::izip; -use num_bigint::BigInt; -use num_traits::*; -use rayon::iter::{ParallelBridge, ParallelIterator}; - -/// Set of vectors for input validation of a ciphertext -#[derive(Clone, Debug)] -pub struct InputValidationVectors { - pk0is: Vec>, - pk1is: Vec>, - ct0is: Vec>, - ct1is: Vec>, - r1is: Vec>, - r2is: Vec>, - p1is: Vec>, - p2is: Vec>, - k0is: Vec, - u: Vec, - e0: Vec, - e1: Vec, - k1: Vec, -} - -impl InputValidationVectors { - /// Create a new `InputValidationVectors` with the given number of moduli and degree. - /// - /// # Arguments - /// - /// * `num_moduli` - The number of moduli, which determines the number of inner vectors in 2D vectors. - /// * `degree` - The size of each inner vector in the 2D vectors. - /// - /// # Returns - /// - /// Returns a new instance of `InputValidationVectors` with all fields initialized to zero. - pub fn new(num_moduli: usize, degree: usize) -> Self { - InputValidationVectors { - pk0is: vec![vec![BigInt::zero(); degree]; num_moduli], - pk1is: vec![vec![BigInt::zero(); degree]; num_moduli], - ct0is: vec![vec![BigInt::zero(); degree]; num_moduli], - ct1is: vec![vec![BigInt::zero(); degree]; num_moduli], - r1is: vec![vec![BigInt::zero(); 2 * (degree - 1)]; num_moduli], - r2is: vec![vec![BigInt::zero(); degree - 2]; num_moduli], - p1is: vec![vec![BigInt::zero(); 2 * (degree - 1)]; num_moduli], - p2is: vec![vec![BigInt::zero(); degree - 2]; num_moduli], - k0is: vec![BigInt::zero(); num_moduli], - u: vec![BigInt::zero(); degree], - e0: vec![BigInt::zero(); degree], - e1: vec![BigInt::zero(); degree], - k1: vec![BigInt::zero(); degree], - } - } - - /// Assign and return all of the centered input validation vectors to the ZKP modulus `p`. - /// - /// # Arguments - /// - /// * `p` - ZKP modulus - /// - /// # Returns - /// - /// Returns a new `InputValidationVectors` struct with all coefficients reduced modulo `p`. - pub fn standard_form(&self, p: &BigInt) -> Self { - InputValidationVectors { - pk0is: reduce_coefficients_2d(&self.pk0is, p), - pk1is: reduce_coefficients_2d(&self.pk1is, p), - ct0is: reduce_coefficients_2d(&self.ct0is, p), - ct1is: reduce_coefficients_2d(&self.ct1is, p), - r1is: reduce_coefficients_2d(&self.r1is, p), - r2is: reduce_coefficients_2d(&self.r2is, p), - p1is: reduce_coefficients_2d(&self.p1is, p), - p2is: reduce_coefficients_2d(&self.p2is, p), - k0is: self.k0is.clone(), - u: reduce_coefficients(&self.u, p), - e0: reduce_coefficients(&self.e0, p), - e1: reduce_coefficients(&self.e1, p), - k1: reduce_coefficients(&self.k1, p), - } - } - - /// Convert the `InputValidationVectors` to a JSON object. - /// - /// # Returns - /// - /// Returns a `serde_json::Value` representing the JSON serialization of the `InputValidationVectors`. - pub fn to_json(&self) -> serde_json::Value { - json!({ - "pk0i": to_string_2d_vec(&self.pk0is), - "pk1i": to_string_2d_vec(&self.pk1is), - "u": to_string_1d_vec(&self.u), - "e0": to_string_1d_vec(&self.e0), - "e1": to_string_1d_vec(&self.e1), - "k1": to_string_1d_vec(&self.k1), - "r2is": to_string_2d_vec(&self.r2is), - "r1is": to_string_2d_vec(&self.r1is), - "p2is": to_string_2d_vec(&self.p2is), - "p1is": to_string_2d_vec(&self.p1is), - "ct0is": to_string_2d_vec(&self.ct0is), - "ct1is": to_string_2d_vec(&self.ct1is), - }) - } - - /// Check whether all members of `self` have the correct length based on the provided `degree` and `num_moduli`. - /// - /// # Arguments - /// - /// * `num_moduli` - The expected number of moduli (outer vector length). - /// * `degree` - The expected degree (inner vector length). - /// - /// # Returns - /// - /// Returns `true` if all vectors have the correct lengths, `false` otherwise. - pub fn check_correct_lengths(&self, num_moduli: usize, degree: usize) -> bool { - // Helper function to check 2D vector lengths - let check_2d_lengths = - |vec: &Vec>, expected_outer_len: usize, expected_inner_len: usize| { - vec.len() == expected_outer_len && vec.iter().all(|v| v.len() == expected_inner_len) - }; - - // Helper function to check 1D vector lengths - let check_1d_lengths = |vec: &Vec, expected_len: usize| vec.len() == expected_len; - - // Use all to combine all checks into a single statement - [ - // 2D vector checks - check_2d_lengths(&self.pk0is, num_moduli, degree), - check_2d_lengths(&self.pk1is, num_moduli, degree), - check_2d_lengths(&self.ct0is, num_moduli, degree), - check_2d_lengths(&self.ct1is, num_moduli, degree), - check_2d_lengths(&self.r1is, num_moduli, 2 * (degree - 1)), - check_2d_lengths(&self.r2is, num_moduli, degree - 2), - check_2d_lengths(&self.p1is, num_moduli, 2 * (degree - 1)), - check_2d_lengths(&self.p2is, num_moduli, degree - 2), - // 1D vector checks - check_1d_lengths(&self.k0is, num_moduli), - check_1d_lengths(&self.u, degree), - check_1d_lengths(&self.e0, degree), - check_1d_lengths(&self.e1, degree), - check_1d_lengths(&self.k1, degree), - ] - .iter() - .all(|&check| check) - } - - /// Create the centered validation vectors necessary for creating an input validation proof according to Greco. - /// For more information, please see https://eprint.iacr.org/2024/594. - /// - /// # Arguments - /// - /// * `pt` - Plaintext from fhe.rs. - /// * `u_rns` - Private polynomial used in ciphertext sampled from secret key distribution. - /// * `e0_rns` - Error polynomial used in ciphertext sampled from error distribution. - /// * `e1_rns` - Error polynomioal used in cihpertext sampled from error distribution. - /// * `ct` - Ciphertext from fhe.rs. - /// * `pk` - Public Key from fhe.rs. - pub fn compute( - pt: &Plaintext, - u_rns: &Poly, - e0_rns: &Poly, - e1_rns: &Poly, - ct: &Ciphertext, - pk: &PublicKey, - ) -> Result> { - // Get context, plaintext modulus, and degree - let params = &pk.par; - let ctx = params.ctx_at_level(pt.level())?; - let t = Modulus::new(params.plaintext())?; - let N: u64 = ctx.degree as u64; - - // Calculate k1 (independent of qi), center and reverse - let q_mod_t = (ctx.modulus() % t.modulus()) - .to_u64() - .ok_or_else(|| "Cannot convert BigInt to u64.".to_string())?; // [q]_t - let mut k1_u64 = pt.value.deref().to_vec(); // m - t.scalar_mul_vec(&mut k1_u64, q_mod_t); // k1 = [q*m]_t - let mut k1: Vec = k1_u64.iter().map(|&x| BigInt::from(x)).rev().collect(); - reduce_and_center_coefficients_mut(&mut k1, &BigInt::from(t.modulus())); - - // Extract single vectors of u, e1, and e2 as Vec, center and reverse - let mut u_rns_copy = u_rns.clone(); - let mut e0_rns_copy = e0_rns.clone(); - let mut e1_rns_copy = e1_rns.clone(); - - u_rns_copy.change_representation(Representation::PowerBasis); - e0_rns_copy.change_representation(Representation::PowerBasis); - e1_rns_copy.change_representation(Representation::PowerBasis); - - let u: Vec = unsafe { - ctx.moduli_operators()[0] - .center_vec_vt( - u_rns_copy - .coefficients() - .row(0) - .as_slice() - .ok_or_else(|| "Cannot center coefficients.".to_string())?, - ) - .iter() - .rev() - .map(|&x| BigInt::from(x)) - .collect() - }; - - let e0: Vec = unsafe { - ctx.moduli_operators()[0] - .center_vec_vt( - e0_rns_copy - .coefficients() - .row(0) - .as_slice() - .ok_or_else(|| "Cannot center coefficients.".to_string())?, - ) - .iter() - .rev() - .map(|&x| BigInt::from(x)) - .collect() - }; - - let e1: Vec = unsafe { - ctx.moduli_operators()[0] - .center_vec_vt( - e1_rns_copy - .coefficients() - .row(0) - .as_slice() - .ok_or_else(|| "Cannot center coefficients.".to_string())?, - ) - .iter() - .rev() - .map(|&x| BigInt::from(x)) - .collect() - }; - - // Extract and convert ciphertext and plaintext polynomials - let mut ct0 = ct.c[0].clone(); - let mut ct1 = ct.c[1].clone(); - ct0.change_representation(Representation::PowerBasis); - ct1.change_representation(Representation::PowerBasis); - - let mut pk0: Poly = pk.c.c[0].clone(); - let mut pk1: Poly = pk.c.c[1].clone(); - pk0.change_representation(Representation::PowerBasis); - pk1.change_representation(Representation::PowerBasis); - - // Create cyclotomic polynomial x^N + 1 - let mut cyclo = vec![BigInt::from(0u64); (N + 1) as usize]; - cyclo[0] = BigInt::from(1u64); // x^N term - cyclo[N as usize] = BigInt::from(1u64); // x^0 term - - // Print - /* - println!("m = {:?}\n", &m); - println!("k1 = {:?}\n", &k1); - println!("u = {:?}\n", &u); - println!("e0 = {:?}\n", &e0); - println!("e1 = {:?}\n", &e1); - */ - - // Initialize matrices to store results - let num_moduli = ctx.moduli().len(); - let mut res = InputValidationVectors::new(num_moduli, N as usize); - - // Perform the main computation logic - let results: Vec<( - usize, - Vec, - Vec, - BigInt, - Vec, - Vec, - Vec, - Vec, - Vec, - Vec, - )> = izip!( - ctx.moduli_operators(), - ct0.coefficients().rows(), - ct1.coefficients().rows(), - pk0.coefficients().rows(), - pk1.coefficients().rows() - ) - .enumerate() - .par_bridge() - .map( - |(i, (qi, ct0_coeffs, ct1_coeffs, pk0_coeffs, pk1_coeffs))| { - // --------------------------------------------------- ct0i --------------------------------------------------- - - // Convert to vectors of bigint, center, and reverse order. - let mut ct0i: Vec = - ct0_coeffs.iter().rev().map(|&x| BigInt::from(x)).collect(); - let mut ct1i: Vec = - ct1_coeffs.iter().rev().map(|&x| BigInt::from(x)).collect(); - let mut pk0i: Vec = - pk0_coeffs.iter().rev().map(|&x| BigInt::from(x)).collect(); - let mut pk1i: Vec = - pk1_coeffs.iter().rev().map(|&x| BigInt::from(x)).collect(); - - let qi_bigint = BigInt::from(qi.modulus()); - - reduce_and_center_coefficients_mut(&mut ct0i, &qi_bigint); - reduce_and_center_coefficients_mut(&mut ct1i, &qi_bigint); - reduce_and_center_coefficients_mut(&mut pk0i, &qi_bigint); - reduce_and_center_coefficients_mut(&mut pk1i, &qi_bigint); - - // k0qi = -t^{-1} mod qi - let koqi_u64 = qi.inv(qi.neg(t.modulus())).unwrap(); - let k0qi = BigInt::from(koqi_u64); // Do not need to center this - - // ki = k1 * k0qi - let ki = poly_scalar_mul(&k1, &k0qi); - - // Calculate ct0i_hat = pk0 * ui + e0i + ki - let ct0i_hat = { - let pk0i_times_u = poly_mul(&pk0i, &u); - assert_eq!((pk0i_times_u.len() as u64) - 1, 2 * (N - 1)); - - let e0_plus_ki = poly_add(&e0, &ki); - assert_eq!((e0_plus_ki.len() as u64) - 1, N - 1); - - poly_add(&pk0i_times_u, &e0_plus_ki) - }; - assert_eq!((ct0i_hat.len() as u64) - 1, 2 * (N - 1)); - - // Check whether ct0i_hat mod R_qi (the ring) is equal to ct0i - let mut ct0i_hat_mod_rqi = ct0i_hat.clone(); - reduce_in_ring(&mut ct0i_hat_mod_rqi, &cyclo, &qi_bigint); - assert_eq!(&ct0i, &ct0i_hat_mod_rqi); - - // Compute r2i numerator = ct0i - ct0i_hat and reduce/center the polynomial - let ct0i_minus_ct0i_hat = poly_sub(&ct0i, &ct0i_hat); - assert_eq!((ct0i_minus_ct0i_hat.len() as u64) - 1, 2 * (N - 1)); - let mut ct0i_minus_ct0i_hat_mod_zqi = ct0i_minus_ct0i_hat.clone(); - reduce_and_center_coefficients_mut(&mut ct0i_minus_ct0i_hat_mod_zqi, &qi_bigint); - - // Compute r2i as the quotient of numerator divided by the cyclotomic polynomial - // to produce: (ct0i - ct0i_hat) / (x^N + 1) mod Z_qi. Remainder should be empty. - let (r2i, r2i_rem) = poly_div(&ct0i_minus_ct0i_hat_mod_zqi, &cyclo); - assert!(r2i_rem.is_empty()); - assert_eq!((r2i.len() as u64) - 1, N - 2); // Order(r2i) = N - 2 - - // Assert that (ct0i - ct0i_hat) = (r2i * cyclo) mod Z_qi - let r2i_times_cyclo = poly_mul(&r2i, &cyclo); - let mut r2i_times_cyclo_mod_zqi = r2i_times_cyclo.clone(); - reduce_and_center_coefficients_mut(&mut r2i_times_cyclo_mod_zqi, &qi_bigint); - assert_eq!(&ct0i_minus_ct0i_hat_mod_zqi, &r2i_times_cyclo_mod_zqi); - assert_eq!((r2i_times_cyclo.len() as u64) - 1, 2 * (N - 1)); - - // Calculate r1i = (ct0i - ct0i_hat - r2i * cyclo) / qi mod Z_p. Remainder should be empty. - let r1i_num = poly_sub(&ct0i_minus_ct0i_hat, &r2i_times_cyclo); - assert_eq!((r1i_num.len() as u64) - 1, 2 * (N - 1)); - - let (r1i, r1i_rem) = poly_div(&r1i_num, &[qi_bigint.clone()]); - assert!(r1i_rem.is_empty()); - assert_eq!((r1i.len() as u64) - 1, 2 * (N - 1)); // Order(r1i) = 2*(N-1) - assert_eq!(&r1i_num, &poly_mul(&r1i, &[qi_bigint.clone()])); - - // Assert that ct0i = ct0i_hat + r1i * qi + r2i * cyclo mod Z_p - let r1i_times_qi = poly_scalar_mul(&r1i, &qi_bigint); - let mut ct0i_calculated = - poly_add(&poly_add(&ct0i_hat, &r1i_times_qi), &r2i_times_cyclo); - - while ct0i_calculated.len() > 0 && ct0i_calculated[0].is_zero() { - ct0i_calculated.remove(0); - } - - assert_eq!(&ct0i, &ct0i_calculated); - - // --------------------------------------------------- ct1i --------------------------------------------------- - - // Calculate ct1i_hat = pk1i * ui + e1i - let ct1i_hat = { - let pk1i_times_u = poly_mul(&pk1i, &u); - assert_eq!((pk1i_times_u.len() as u64) - 1, 2 * (N - 1)); - - poly_add(&pk1i_times_u, &e1) - }; - assert_eq!((ct1i_hat.len() as u64) - 1, 2 * (N - 1)); - - // Check whether ct1i_hat mod R_qi (the ring) is equal to ct1i - let mut ct1i_hat_mod_rqi = ct1i_hat.clone(); - reduce_in_ring(&mut ct1i_hat_mod_rqi, &cyclo, &qi_bigint); - assert_eq!(&ct1i, &ct1i_hat_mod_rqi); - - // Compute p2i numerator = ct1i - ct1i_hat - let ct1i_minus_ct1i_hat = poly_sub(&ct1i, &ct1i_hat); - assert_eq!((ct1i_minus_ct1i_hat.len() as u64) - 1, 2 * (N - 1)); - let mut ct1i_minus_ct1i_hat_mod_zqi = ct1i_minus_ct1i_hat.clone(); - reduce_and_center_coefficients_mut(&mut ct1i_minus_ct1i_hat_mod_zqi, &qi_bigint); - - // Compute p2i as the quotient of numerator divided by the cyclotomic polynomial, - // and reduce/center the resulting coefficients to produce: - // (ct1i - ct1i_hat) / (x^N + 1) mod Z_qi. Remainder should be empty. - let (p2i, p2i_rem) = poly_div(&ct1i_minus_ct1i_hat_mod_zqi, &cyclo.clone()); - assert!(p2i_rem.is_empty()); - assert_eq!((p2i.len() as u64) - 1, N - 2); // Order(p2i) = N - 2 - - // Assert that (ct1i - ct1i_hat) = (p2i * cyclo) mod Z_qi - let p2i_times_cyclo: Vec = poly_mul(&p2i, &cyclo); - let mut p2i_times_cyclo_mod_zqi = p2i_times_cyclo.clone(); - reduce_and_center_coefficients_mut(&mut p2i_times_cyclo_mod_zqi, &qi_bigint); - assert_eq!(&ct1i_minus_ct1i_hat_mod_zqi, &p2i_times_cyclo_mod_zqi); - assert_eq!((p2i_times_cyclo.len() as u64) - 1, 2 * (N - 1)); - - // Calculate p1i = (ct1i - ct1i_hat - p2i * cyclo) / qi mod Z_p. Remainder should be empty. - let p1i_num = poly_sub(&ct1i_minus_ct1i_hat, &p2i_times_cyclo); - assert_eq!((p1i_num.len() as u64) - 1, 2 * (N - 1)); - - let (p1i, p1i_rem) = poly_div(&p1i_num, &[BigInt::from(qi.modulus())]); - assert!(p1i_rem.is_empty()); - assert_eq!((p1i.len() as u64) - 1, 2 * (N - 1)); // Order(p1i) = 2*(N-1) - assert_eq!(&p1i_num, &poly_mul(&p1i, &[qi_bigint.clone()])); - - // Assert that ct1i = ct1i_hat + p1i * qi + p2i * cyclo mod Z_p - let p1i_times_qi = poly_scalar_mul(&p1i, &qi_bigint); - let mut ct1i_calculated = - poly_add(&poly_add(&ct1i_hat, &p1i_times_qi), &p2i_times_cyclo); - - while ct1i_calculated.len() > 0 && ct1i_calculated[0].is_zero() { - ct1i_calculated.remove(0); - } - - assert_eq!(&ct1i, &ct1i_calculated); - - /* - println!("qi = {:?}\n", &qi_bigint); - println!("ct0i = {:?}\n", &ct0i); - println!("k0qi = {:?}\n", &k0qi); - println!("pk0 = Polynomial({:?})\n", &pk0i); - println!("pk1 = Polynomial({:?})\n", &pk1i); - println!("ki = {:?}\n", &ki); - println!("ct0i_hat_mod_rqi = {:?}\n", &ct0i_hat_mod_rqi); - */ - - (i, r2i, r1i, k0qi, ct0i, ct1i, pk0i, pk1i, p1i, p2i) - }, - ) - .collect(); - - // println!("Completed creation of polynomials!"); - - // Merge results into the `res` structure after parallel execution - for (i, r2i, r1i, k0i, ct0i, ct1i, pk0i, pk1i, p1i, p2i) in results.into_iter() { - res.r2is[i] = r2i; - res.r1is[i] = r1i; - res.k0is[i] = k0i; - res.ct0is[i] = ct0i; - res.ct1is[i] = ct1i; - res.pk0is[i] = pk0i; - res.pk1is[i] = pk1i; - res.p1is[i] = p1i; - res.p2is[i] = p2i; - } - - // Set final result vectors - res.u = u; - res.e0 = e0; - res.e1 = e1; - res.k1 = k1; - - Ok(res) - } -} - -/// The `InputValidationBounds` struct holds the bounds for various vectors and polynomials used in the input validation process. -/// These bounds are calculated from a set of BFV encryption parameters and represent limits on the values of different fields -/// to ensure that the inputs remain within valid ranges during operations. -#[derive(Clone, Debug)] -pub struct InputValidationBounds { - u: BigInt, - e: BigInt, - t: BigInt, - k1: BigInt, - pk: Vec, - r1: Vec, - r2: Vec, - p1: Vec, - p2: Vec, -} - -impl InputValidationBounds { - /// Checks the constraints of the input validation vectors against the bounds stored in `InputValidationBounds`. - /// - /// # Arguments - /// - /// * `vecs` - A reference to `InputValidationVectors`, which contains the vectors to be validated. - /// * `p` - The prime modulus used in the encryption scheme. - /// - /// This function checks whether the coefficients of the vectors `u`, `e0`, `e1`, `k1`, and others are within - /// the specified ranges, using both centered and standard range checks. It asserts that the vectors stay within - /// these predefined bounds. - pub fn check_constraints(&self, vecs: &InputValidationVectors, p: &BigInt) { - let vecs_std = vecs.standard_form(p); - - // constraint. The coefficients of u, e0, e1 should be in the range [-⌈6σ⌋, ⌈6σ⌋] - // where ⌈6σ⌋ is the upper bound of the discrete Gaussian distribution - assert!(range_check_centered(&vecs.u, &-&self.u, &self.u)); - assert!(range_check_centered(&vecs.e0, &-&self.e, &self.e)); - assert!(range_check_centered(&vecs.e1, &-&self.e, &self.e)); - assert!(range_check_standard(&vecs_std.u, &self.u, &p)); - assert!(range_check_standard(&vecs_std.e0, &self.e, &p)); - assert!(range_check_standard(&vecs_std.e1, &self.e, &p)); - - // constraint. The coefficients of k1 should be in the range [-(t-1)/2, (t-1)/2] - assert!(range_check_centered(&vecs.k1, &-&self.k1, &self.k1)); - assert!(range_check_standard(&vecs_std.k1, &self.k1, &p)); - - // Perform asserts for polynomials depending on each qi - for i in 0..self.r2.len() { - // constraint. The coefficients of ct0i and ct1i should be in the range [-(qi-1)/2, (qi-1)/2] - assert!(range_check_centered( - &vecs.ct0is[i], - &-&self.pk[i], - &self.pk[i] - )); - assert!(range_check_centered( - &vecs.ct1is[i], - &-&self.pk[i], - &self.pk[i] - )); - - // constraint. The coefficients of pk0i and pk1i should be in range [-(qi-1)/2 , (qi-1)/2] - assert!(range_check_centered( - &vecs.pk0is[i], - &-&self.pk[i], - &self.pk[i] - )); - assert!(range_check_centered( - &vecs.pk1is[i], - &-&self.pk[i], - &self.pk[i] - )); - assert!(range_check_standard(&vecs_std.pk0is[i], &self.pk[i], &p)); - assert!(range_check_standard(&vecs_std.pk1is[i], &self.pk[i], &p)); - - // constraint. The coefficients of r2i should be in the range [-(qi-1)/2, (qi-1)/2] - assert!(range_check_centered( - &vecs.r2is[i], - &-&self.r2[i], - &self.r2[i] - )); - assert!(range_check_standard(&vecs_std.r2is[i], &self.r2[i], &p)); - - // constraint. The coefficients of (ct0i - ct0i_hat - r2i * cyclo) / qi = r1i should be in the range - // $[ - // \frac{- ((N+2) \cdot \frac{q_i - 1}{2} + B + \frac{t - 1}{2} \cdot |K_{0,i}|)}{q_i}, - // \frac{ (N+2) \cdot \frac{q_i - 1}{2} + B + \frac{t - 1}{2} \cdot |K_{0,i}| }{q_i} - // ]$ - assert!(range_check_centered( - &vecs.r1is[i], - &-&self.r1[i], - &self.r1[i] - )); - assert!(range_check_standard(&vecs_std.r1is[i], &self.r1[i], &p)); - - // constraint. The coefficients of p2 should be in the range [-(qi-1)/2, (qi-1)/2] - assert!(range_check_centered( - &vecs.p2is[i], - &-&self.p2[i], - &self.p2[i] - )); - assert!(range_check_standard(&vecs_std.p2is[i], &self.p2[i], &p)); - - // constraint. The coefficients of (ct0i - ct0i_hat - p2i * cyclo) / qi = p1i should be in the range - // $[ - // \frac{- ((N+2) \cdot \frac{q_i - 1}{2} + B)}{q_i}, - // \frac{ (N+2) \cdot \frac{q_i - 1}{2} + B }{q_i} - // ]$ - assert!(range_check_centered( - &vecs.p1is[i], - &-&self.p1[i], - &self.p1[i] - )); - assert!(range_check_standard(&vecs_std.p1is[i], &self.p1[i], &p)); - } - } - - /// Compute the input validation bounds from a set of BFV encryption parameters. - /// - /// # Arguments - /// - /// * `params` - A reference to the BFV parameters. - /// * `level` - The encryption level, which determines the number of moduli used. - /// - /// # Returns - /// - /// A new `InputValidationBounds` instance containing the bounds for vectors and polynomials - /// based on the BFV parameters and the specified level. - pub fn compute( - params: &Arc, - level: usize, - ) -> Result> { - // Get cyclotomic degree and context at provided level - let N = BigInt::from(params.degree()); - let t = BigInt::from(params.plaintext()); - let ctx = params.ctx_at_level(level)?; - - // Note: the secret key in fhe.rs is sampled from a discrete gaussian distribution - // rather than a ternary distribution as in bfv.py. - let gauss_bound = BigInt::from( - f64::ceil(6_f64 * f64::sqrt(params.variance() as f64)) - .to_i64() - .ok_or_else(|| "Failed to convert variance to i64".to_string())?, - ); - let u_bound = gauss_bound.clone(); - let e_bound = gauss_bound.clone(); - let ptxt_bound = (t - BigInt::from(1)) / BigInt::from(2); - let k1_bound = ptxt_bound.clone(); - - // Calculate qi-based bounds - let num_moduli = ctx.moduli().len(); - let mut pk_bounds: Vec = vec![BigInt::zero(); num_moduli]; - let mut r2_bounds: Vec = vec![BigInt::zero(); num_moduli]; - let mut r1_bounds: Vec = vec![BigInt::zero(); num_moduli]; - let mut p2_bounds: Vec = vec![BigInt::zero(); num_moduli]; - let mut p1_bounds: Vec = vec![BigInt::zero(); num_moduli]; - for (i, qi) in ctx.moduli_operators().iter().enumerate() { - let qi_bigint = BigInt::from(qi.modulus()); - let qi_bound = (&qi_bigint - BigInt::from(1)) / BigInt::from(2); - - // Calculate the k0qi for the bounds (these are also constant wrt BFV params) - let k0qi = BigInt::from( - qi.inv(qi.neg(params.plaintext())) - .ok_or_else(|| "Failed to calculate modulus inverse for k0qi".to_string())?, - ); - - pk_bounds[i] = qi_bound.clone(); - r2_bounds[i] = qi_bound.clone(); - r1_bounds[i] = ((&N + 2) * &qi_bound + &gauss_bound + &ptxt_bound * BigInt::abs(&k0qi)) - / &qi_bigint; - p2_bounds[i] = qi_bound.clone(); - p1_bounds[i] = ((&N + 2) * &qi_bound + &gauss_bound) / &qi_bigint; - } - - Ok(InputValidationBounds { - u: u_bound, - e: e_bound, - t: ptxt_bound, - k1: k1_bound, - pk: pk_bounds, - r1: r1_bounds, - r2: r2_bounds, - p1: p1_bounds, - p2: p2_bounds, - }) - } - - /// Writes the input validation bounds to a file that can be imported as a Rust module. - /// - /// # Arguments - /// - /// * `params` - Reference to BFV parameters to extract context information. - /// * `output_file` - The path where the output constants should be saved. - /// - /// This function calculates certain constants like `k0i` values for each modulus `qi` and writes the bounds and other - /// relevant constants in a Rust-friendly format to the file specified by `output_file`. - fn to_file( - &self, - params: &Arc, - output_file: &str, - ) -> Result<(), Box> { - let level = params.moduli().len() - self.r2.len(); - let ctx = params.ctx_at_level(level)?; - - // Calculate k0i constants - let k0i_constants = ctx - .moduli_operators() - .iter() - .map(|qi| { - // Use the ? operator to propagate errors - let k0qi_value = qi - .inv(qi.neg(params.plaintext())) - .ok_or_else(|| "Failed to calculate modulus inverse for k0qi".to_string())?; - Ok(BigInt::from(k0qi_value)) - }) - .collect::, String>>()?; - - // Set the output file path - let output_path = Path::new("src") - .join("constants") - .join("pk_enc_constants") - .join(output_file); - - let mut file = File::create(output_path)?; - - // Writing the constants to the file - writeln!(file, "/// `N` is the degree of the cyclotomic polynomial defining the ring `Rq = Zq[X]/(X^N + 1)`.")?; - writeln!(file, "pub const N: usize = {};", params.degree())?; - - let pk_bound_str = self - .pk - .iter() - .map(|x| x.to_string()) - .collect::>() - .join(", "); - writeln!(file, "/// The coefficients of the polynomial `pk0is` and `pk1is` should exist in the interval `[-PK_BOUND, PK_BOUND]`.")?; - writeln!( - file, - "pub const PK_BOUND: [u64; {}] = [{}];", - self.pk.len(), - pk_bound_str - )?; - - writeln!(file, "/// The coefficients of the polynomial `pk1is` should exist in the interval `[-PK0_BOUND, PK0_BOUND]`.")?; - - writeln!(file, "/// The coefficients of the polynomial `e` should exist in the interval `[-E_BOUND, E_BOUND]` where `E_BOUND` is the upper bound of the gaussian distribution with 𝜎 = 3.2.")?; - writeln!(file, "pub const E_BOUND: u64 = {};", self.e)?; - - writeln!(file, "/// The coefficients of the polynomial `s` should exist in the interval `[-S_BOUND, S_BOUND]`.")?; - writeln!(file, "pub const U_BOUND: u64 = {};", self.u)?; - - let r1_bounds_str = self - .r1 - .iter() - .map(|x| x.to_string()) - .collect::>() - .join(", "); - writeln!(file, "/// The coefficients of the polynomials `r1is` should exist in the interval `[-R1_BOUND[i], R1_BOUND[i]]` where `R1_BOUND[i]` is equal to `(qi-1)/2`.")?; - writeln!( - file, - "pub const R1_BOUNDS: [u64; {}] = [{}];", - self.r1.len(), - r1_bounds_str - )?; - - let r2_bounds_str = self - .r2 - .iter() - .map(|x| x.to_string()) - .collect::>() - .join(", "); - writeln!(file, "/// The coefficients of the polynomials `r2is` should exist in the interval `[-R2_BOUND[i], R2_BOUND[i]]` where `R2_BOUND[i]` is equal to $\\frac{{(N+2) \\cdot \\frac{{q_i - 1}}{{2}} + B + \\frac{{t - 1}}{{2}} \\cdot |K_{{0,i}}|}}{{q_i}}`.")?; - writeln!( - file, - "pub const R2_BOUNDS: [u64; {}] = [{}];", - self.r2.len(), - r2_bounds_str - )?; - - let p1_bounds_str = self - .p1 - .iter() - .map(|x| x.to_string()) - .collect::>() - .join(", "); - writeln!(file, "/// The coefficients of the polynomials `p1is` should exist in the interval `[-P1_BOUND[i], P1_BOUND[i]]` where `P1_BOUND[i]` is equal to (((qis[i] - 1) / 2) * (n + 2) + b ) / qis[i].")?; - writeln!( - file, - "pub const P1_BOUNDS: [u64; {}] = [{}];", - self.p1.len(), - p1_bounds_str - )?; - - let p2_bounds_str = self - .p2 - .iter() - .map(|x| x.to_string()) - .collect::>() - .join(", "); - writeln!(file, "/// The coefficients of the polynomials `p2is` should exist in the interval `[-P2_BOUND[i], P2_BOUND[i]]` where `P2_BOUND[i]` is equal to (qis[i] - 1) / 2.")?; - writeln!( - file, - "pub const P2_BOUNDS: [u64; {}] = [{}];", - self.p2.len(), - p2_bounds_str - )?; - - writeln!(file, "/// The coefficients of `k1` should exist in the interval `[-K1_BOUND, K1_BOUND]` where `K1_BOUND` is equal to `(t-1)/2`.")?; - writeln!(file, "pub const K1_BOUND: u64 = {};", self.k1)?; - - let qis_str = ctx - .moduli() - .iter() - .map(|x| format!("\"{}\"", x)) - .collect::>() - .join(", "); - writeln!(file, "/// List of scalars `qis` such that `qis[i]` is the modulus of the i-th CRT basis of `q` (ciphertext space modulus).")?; - writeln!( - file, - "pub const QIS: [&str; {}] = [{}];", - ctx.moduli().len(), - qis_str - )?; - - let k0is_str = k0i_constants - .iter() - .map(|x| format!("\"{}\"", x)) - .collect::>() - .join(", "); - writeln!(file, "/// List of scalars `k0is` such that `k0i[i]` is equal to the negative of the multiplicative inverses of t mod qi.")?; - writeln!( - file, - "pub const K0IS: [&str; {}] = [{}];", - k0i_constants.len(), - k0is_str - )?; - - Ok(()) - } -} - -fn to_string_1d_vec(poly: &Vec) -> Vec { - poly.iter().map(|coef| coef.to_string()).collect() -} - -fn to_string_2d_vec(poly: &Vec>) -> Vec> { - poly.iter().map(|row| to_string_1d_vec(row)).collect() -} - -/// Writes the given JSON data to a file in the specified output path. -/// -/// # Arguments -/// -/// * `output_path` - A reference to the base directory path where the file will be created. -/// * `filename` - The name of the file to create. -/// * `json_data` - A reference to the JSON data to be written into the file. -/// -/// # Panics -/// -/// This function will panic if the file cannot be created or if writing to the file fails. -fn write_json_to_file(output_path: &Path, filename: &str, json_data: &serde_json::Value) { - let file_path = output_path.join(filename); - let mut file = File::create(file_path).expect("Unable to create file"); - file.write_all(serde_json::to_string_pretty(json_data).unwrap().as_bytes()) - .expect("Unable to write data"); -} diff --git a/examples/CRISP/apps/wasm-crypto/src/greco/mod.rs b/examples/CRISP/apps/wasm-crypto/src/greco/mod.rs deleted file mode 100644 index 2d120a8d70..0000000000 --- a/examples/CRISP/apps/wasm-crypto/src/greco/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod greco; -mod poly; diff --git a/examples/CRISP/apps/wasm-crypto/src/greco/poly.rs b/examples/CRISP/apps/wasm-crypto/src/greco/poly.rs deleted file mode 100644 index 402ac77f6c..0000000000 --- a/examples/CRISP/apps/wasm-crypto/src/greco/poly.rs +++ /dev/null @@ -1,343 +0,0 @@ -/// Provides helper methods that perform modular poynomial arithmetic over polynomials encoded in vectors -/// of coefficients from largest degree to lowest. -use num_bigint::BigInt; -use num_traits::*; - -/// Adds two polynomials represented as vectors of `BigInt` coefficients in descending order of powers. -/// -/// This function aligns two polynomials of potentially different lengths and adds their coefficients. -/// It assumes that polynomials are represented from leading degree to degree zero, even if the -/// coefficient at degree zero is zero. Leading zeros are not removed to keep the order of the -/// polynomial correct, which in Greco's case is necessary so that the order can be checked. -/// -/// # Arguments -/// -/// * `poly1` - Coefficients of the first polynomial, from highest to lowest degree. -/// * `poly2` - Coefficients of the second polynomial, from highest to lowest degree. -/// -/// # Returns -/// -/// A vector of `BigInt` coefficients representing the sum of the two polynomials. -pub fn poly_add(poly1: &[BigInt], poly2: &[BigInt]) -> Vec { - // Determine the new length and create extended polynomials - let max_length = std::cmp::max(poly1.len(), poly2.len()); - let mut extended_poly1 = vec![BigInt::zero(); max_length]; - let mut extended_poly2 = vec![BigInt::zero(); max_length]; - - // Copy original coefficients into extended vectors - extended_poly1[max_length - poly1.len()..].clone_from_slice(poly1); - extended_poly2[max_length - poly2.len()..].clone_from_slice(poly2); - - // Add the coefficients - let mut result = vec![BigInt::zero(); max_length]; - for i in 0..max_length { - result[i] = &extended_poly1[i] + &extended_poly2[i]; - } - - result -} - -/// Negates the coefficients of a polynomial represented as a slice of `BigInt` coefficients. -/// -/// This function creates a new polynomial where each coefficient is the negation of the corresponding -/// coefficient in the input polynomial. -/// -/// # Arguments -/// -/// * `poly` - A slice of `BigInt` representing the coefficients of the polynomial, with the highest -/// degree term at index 0 and the constant term at the end. -/// -/// # Returns -/// -/// A vector of `BigInt` representing the polynomial with negated coefficients, with the same degree -/// order as the input polynomial. -pub fn poly_neg(poly: &[BigInt]) -> Vec { - poly.iter().map(|x| -x).collect() -} - -/// Subtracts one polynomial from another, both represented as slices of `BigInt` coefficients in descending order. -/// -/// This function subtracts the second polynomial (`poly2`) from the first polynomial (`poly1`). It does so -/// by first negating the coefficients of `poly2` and then adding the result to `poly1`. -/// -/// # Arguments -/// -/// * `poly1` - A slice of `BigInt` representing the coefficients of the first polynomial (minuend), with -/// the highest degree term at index 0 and the constant term at the end. -/// * `poly2` - A slice of `BigInt` representing the coefficients of the second polynomial (subtrahend), with -/// the highest degree term at index 0 and the constant term at the end. -/// -/// # Returns -/// -/// A vector of `BigInt` representing the coefficients of the resulting polynomial after subtraction. -pub fn poly_sub(poly1: &[BigInt], poly2: &[BigInt]) -> Vec { - poly_add(poly1, &poly_neg(poly2)) -} - -/// Multiplies two polynomials represented as slices of `BigInt` coefficients naively. -/// -/// Given two polynomials `poly1` and `poly2`, where each polynomial is represented by a slice of -/// coefficients, this function computes their product. The order of coefficients (ascending or -/// descending powers) should be the same for both input polynomials. The resulting polynomial is -/// returned as a vector of `BigInt` coefficients in the same order as the inputs. -/// -/// # Arguments -/// -/// * `poly1` - A slice of `BigInt` representing the coefficients of the first polynomial. -/// * `poly2` - A slice of `BigInt` representing the coefficients of the second polynomial. -/// -/// # Returns -/// -/// A vector of `BigInt` representing the coefficients of the resulting polynomial after multiplication, -/// in the same order as the input polynomials. -pub fn poly_mul(poly1: &[BigInt], poly2: &[BigInt]) -> Vec { - let product_len = poly1.len() + poly2.len() - 1; - let mut product = vec![BigInt::zero(); product_len]; - - for i in 0..poly1.len() { - for j in 0..poly2.len() { - product[i + j] += &poly1[i] * &poly2[j]; - } - } - - product -} - -/// Divides one polynomial by another, returning the quotient and remainder, with both polynomials -/// represented by vectors of `BigInt` coefficients in descending order of powers. -/// -/// Given two polynomials `dividend` and `divisor`, where each polynomial is represented by a vector -/// of coefficients in descending order of powers (i.e., the coefficient at index `i` corresponds -/// to the term of degree `n - i`, where `n` is the degree of the polynomial), this function computes -/// their quotient and remainder. The quotient and remainder are also represented in descending order -/// of powers. -/// -/// # Arguments -/// -/// * `dividend` - A slice of `BigInt` representing the coefficients of the dividend polynomial. -/// * `divisor` - A slice of `BigInt` representing the coefficients of the divisor polynomial. The leading -/// coefficient (highest degree term) must be non-zero. -/// -/// # Returns -/// -/// A tuple containing two vectors of `BigInt`: -/// * The first vector represents the quotient polynomial, with coefficients in descending order of powers. -/// * The second vector represents the remainder polynomial, also in descending order of powers. -/// -/// # Panics -/// -/// This function will panic if the divisor is empty or if the leading coefficient of the divisor is zero. -pub fn poly_div(dividend: &[BigInt], divisor: &[BigInt]) -> (Vec, Vec) { - assert!( - !divisor.is_empty() && !divisor[0].is_zero(), - "Leading coefficient of divisor cannot be zero" - ); - - let mut quotient = vec![BigInt::zero(); dividend.len() - divisor.len() + 1]; - let mut remainder = dividend.to_vec(); - - for i in 0..quotient.len() { - let coeff = &remainder[i] / &divisor[0]; - quotient[i] = coeff.clone(); - - for j in 0..divisor.len() { - remainder[i + j] = &remainder[i + j] - &divisor[j] * &coeff; - } - } - - while remainder.len() > 0 && remainder[0].is_zero() { - remainder.remove(0); - } - - (quotient, remainder) -} - -/// Multiplies each coefficient of a polynomial by a scalar. -/// -/// This function takes a polynomial represented as a vector of `BigInt` coefficients and multiplies each -/// coefficient by a given scalar. -/// -/// # Arguments -/// -/// * `poly` - A slice of `BigInt` representing the coefficients of the polynomial, with the highest degree term -/// at index 0 and the constant term at the end. -/// * `scalar` - A `BigInt` representing the scalar by which each coefficient of the polynomial will be multiplied. -/// -/// # Returns -/// -/// A vector of `BigInt` representing the polynomial with each coefficient multiplied by the scalar, maintaining -/// the same order of coefficients as the input polynomial. -pub fn poly_scalar_mul(poly: &[BigInt], scalar: &BigInt) -> Vec { - poly.iter().map(|coeff| coeff * scalar).collect() -} - -/// Reduces the coefficients of a polynomial by dividing it with a cyclotomic polynomial -/// and updating the coefficients with the remainder. -/// -/// This function performs a polynomial long division of the input polynomial (represented by -/// `coefficients`) by the given cyclotomic polynomial (represented by `cyclo`). It replaces -/// the original coefficients with the coefficients of the remainder from this division. -/// -/// # Arguments -/// -/// * `coefficients` - A mutable reference to a `Vec` containing the coefficients of -/// the polynomial to be reduced. The coefficients are in descending order of degree, -/// i.e., the first element is the coefficient of the highest degree term. -/// * `cyclo` - A slice of `BigInt` representing the coefficients of the cyclotomic polynomial. -/// The coefficients are also in descending order of degree. -/// -/// # Panics -/// -/// This function will panic if the remainder length exceeds the degree of the cyclotomic polynomial, -/// which would indicate an issue with the division operation. -pub fn reduce_coefficients_by_cyclo(coefficients: &mut Vec, cyclo: &[BigInt]) { - // Perform polynomial long division, assuming poly_div returns (quotient, remainder) - let (_, remainder) = poly_div(&coefficients, cyclo); - - let N = cyclo.len() - 1; - let mut out: Vec = vec![BigInt::zero(); N]; - - // Calculate the starting index in `out` where the remainder should be copied - let start_idx = N - remainder.len(); - - // Copy the remainder into the `out` vector starting from `start_idx` - out[start_idx..].clone_from_slice(&remainder); - - // Resize the original `coefficients` vector to fit the result and copy the values - coefficients.clear(); - coefficients.extend(out); -} - -/// Reduces a number modulo a prime modulus and centers it. -/// -/// This function takes an arbitrary number and reduces it modulo the specified prime modulus. -/// After reduction, the number is adjusted to be within the symmetric range -/// [−(modulus−1)/2, (modulus−1)/2]. If the number is already within this range, it remains unchanged. -/// -/// # Parameters -/// -/// - `x`: A reference to a `BigInt` representing the number to be reduced and centered. -/// - `modulus`: A reference to the prime modulus `BigInt` used for reduction. -/// - `half_modulus`: A reference to a `BigInt` representing half of the modulus used to center the coefficient. -/// -/// # Returns -/// -/// - A `BigInt` representing the reduced and centered number. -pub fn reduce_and_center(x: &BigInt, modulus: &BigInt, half_modulus: &BigInt) -> BigInt { - // Calculate the remainder ensuring it's non-negative - let mut r = x % modulus; - if r < BigInt::zero() { - r += modulus; - } - - // Adjust the remainder if it is greater than half_modulus - if r > *half_modulus { - r -= modulus; - } - - r -} - -/// Reduces and centers polynomial coefficients modulo a prime modulus. -/// -/// This function iterates over a mutable slice of polynomial coefficients, reducing each coefficient -/// modulo a given prime modulus and adjusting the result to be within the symmetric range -/// [−(modulus−1)/2, (modulus−1)/2]. -/// -/// # Parameters -/// -/// - `coefficients`: A mutable slice of `BigInt` coefficients to be reduced and centered. -/// - `modulus`: A prime modulus `BigInt` used for reduction and centering. -/// -/// # Panics -/// -/// - Panics if `modulus` is zero due to division by zero. -pub fn reduce_and_center_coefficients_mut(coefficients: &mut [BigInt], modulus: &BigInt) { - let half_modulus = modulus / BigInt::from(2); - coefficients - .iter_mut() - .for_each(|x| *x = reduce_and_center(x, modulus, &half_modulus)); -} -pub fn reduce_and_center_coefficients( - coefficients: &mut [BigInt], - modulus: &BigInt, -) -> Vec { - let half_modulus = modulus / BigInt::from(2); - coefficients - .iter() - .map(|x| reduce_and_center(x, modulus, &half_modulus)) - .collect() -} - -/// Reduces a polynomial's coefficients within a polynomial ring defined by a cyclotomic polynomial and a modulus. -/// -/// This function performs two reductions on the polynomial represented by `coefficients`: -/// 1. **Cyclotomic Reduction**: Reduces the polynomial by the cyclotomic polynomial, replacing -/// the original coefficients with the remainder after polynomial division. -/// 2. **Modulus Reduction**: Reduces the coefficients of the polynomial modulo a given modulus, -/// centering the coefficients within the range [-modulus/2, modulus/2). -/// -/// # Arguments -/// -/// * `coefficients` - A mutable reference to a `Vec` representing the coefficients of the polynomial -/// to be reduced. The coefficients should be in descending order of degree. -/// * `cyclo` - A slice of `BigInt` representing the coefficients of the cyclotomic polynomial (typically x^N + 1). -/// * `modulus` - A reference to a `BigInt` representing the modulus for the coefficient reduction. The coefficients -/// will be reduced and centered modulo this value. -pub fn reduce_in_ring(coefficients: &mut Vec, cyclo: &[BigInt], modulus: &BigInt) { - reduce_coefficients_by_cyclo(coefficients, cyclo); - reduce_and_center_coefficients_mut(coefficients, modulus); -} - -/// Reduces each element in the given slice of `BigInt` by the modulus `p`. -/// -/// This function takes a slice of `BigInt` coefficients and applies the modulus operation -/// on each element. It ensures the result is within the range `[0, p-1]` by adding `p` -/// before applying the modulus operation. The result is collected into a new `Vec`. -/// -/// # Arguments -/// -/// * `coefficients` - A slice of `BigInt` representing the coefficients to be reduced. -/// * `p` - A reference to a `BigInt` that represents the modulus value. -/// -/// # Returns -/// -/// A `Vec` where each element is reduced modulo `p`. -pub fn reduce_coefficients(coefficients: &[BigInt], p: &BigInt) -> Vec { - coefficients.iter().map(|coeff| (coeff + p) % p).collect() -} - -pub fn reduce_coefficients_2d(coefficient_matrix: &[Vec], p: &BigInt) -> Vec> { - coefficient_matrix - .iter() - .map(|coeffs| reduce_coefficients(coeffs, p)) - .collect() -} - -/// Mutably reduces each element in the given slice of `BigInt` by the modulus `p`. -/// -/// This function modifies the given mutable slice of `BigInt` coefficients in place. It adds `p` -/// to each element before applying the modulus operation, ensuring the results are within the range `[0, p-1]`. -/// -/// # Arguments -/// -/// * `coefficients` - A mutable slice of `BigInt` representing the coefficients to be reduced. -/// * `p` - A reference to a `BigInt` that represents the modulus value. -pub fn reduce_coefficients_mut(coefficients: &mut [BigInt], p: &BigInt) { - for coeff in coefficients.iter_mut() { - *coeff += p; - *coeff %= p; - } -} - -pub fn range_check_centered(vec: &[BigInt], lower_bound: &BigInt, upper_bound: &BigInt) -> bool { - vec.iter() - .all(|coeff| coeff >= lower_bound && coeff <= upper_bound) -} - -pub fn range_check_standard(vec: &[BigInt], bound: &BigInt, modulus: &BigInt) -> bool { - vec.iter().all(|coeff| { - (coeff >= &BigInt::from(0) && coeff <= bound) - || (coeff >= &(modulus - bound) && coeff < modulus) - }) -} diff --git a/examples/CRISP/apps/wasm-crypto/src/lib.rs b/examples/CRISP/apps/wasm-crypto/src/lib.rs index 9e663b1c81..a62d4daf07 100644 --- a/examples/CRISP/apps/wasm-crypto/src/lib.rs +++ b/examples/CRISP/apps/wasm-crypto/src/lib.rs @@ -1,10 +1,12 @@ -mod greco; mod util; -use commons::bfv::{build_bfv_params_arc, params::SET_2048_1032193_1}; use console_log; +use e3_bfv_helpers::{build_bfv_params_arc, params::SET_2048_1032193_1}; use fhe_rs::bfv::{Ciphertext, Encoding, Plaintext, PublicKey, SecretKey}; use fhe_traits::{DeserializeParametrized, FheDecrypter, FheEncoder, Serialize}; +use greco::InputValidationVectors; +use num_bigint::BigInt; +use num_traits::Num; use rand::thread_rng; use wasm_bindgen::prelude::*; use wasm_bindgen_test::*; // For setting up logging to the browser console @@ -14,6 +16,25 @@ pub struct Encrypt { encrypted_vote: Vec, } +#[wasm_bindgen] +pub struct EncryptedVote { + encrypted_vote: Vec, + circuit_inputs: String, +} + +#[wasm_bindgen] +impl EncryptedVote { + #[wasm_bindgen(getter)] + pub fn encrypted_vote(&self) -> Vec { + self.encrypted_vote.clone() + } + + #[wasm_bindgen(getter)] + pub fn circuit_inputs(&self) -> String { + self.circuit_inputs.clone() + } +} + #[wasm_bindgen] impl Encrypt { #[wasm_bindgen(constructor)] @@ -23,7 +44,11 @@ impl Encrypt { } } - pub fn encrypt_vote(&mut self, vote: u64, public_key: Vec) -> Result, JsValue> { + pub fn encrypt_vote( + &mut self, + vote: u64, + public_key: Vec, + ) -> Result { let (degree, plaintext_modulus, moduli) = SET_2048_1032193_1; let params = build_bfv_params_arc(degree, plaintext_modulus, &moduli); @@ -39,13 +64,25 @@ impl Encrypt { .map_err(|e| JsValue::from_str(&format!("Error encrypting vote: {}", e)))?; // Create Greco input validation ZKP proof - // let input_val_vectors = - // InputValidationVectors::compute(&pt, &u_rns, &e0_rns, &e1_rns, &ct, &pk).map_err( - // |e| JsValue::from_str(&format!("Error computing input validation vectors: {}", e)), - // )?; - + let input_val_vectors = + InputValidationVectors::compute(&pt, &u_rns, &e0_rns, &e1_rns, &ct, &pk, ¶ms) + .map_err(|e| { + JsValue::from_str(&format!("Error computing input validation vectors: {}", e)) + })?; + + let zkp_modulus = BigInt::from_str_radix( + "21888242871839275222246405745257275088548364400416034343698204186575808495617", + 10, + ) + .unwrap(); + + let standard_input_val = input_val_vectors.standard_form(&zkp_modulus); self.encrypted_vote = ct.to_bytes(); - Ok(self.encrypted_vote.clone()) + + Ok(EncryptedVote { + encrypted_vote: self.encrypted_vote.clone(), + circuit_inputs: standard_input_val.to_json().to_string(), + }) } pub fn test() { @@ -57,24 +94,29 @@ fn main() -> Result<(), Box> { Ok(()) } -// Tests -#[wasm_bindgen_test] -fn test_encrypt_vote() { - // Initialize the logger to print to the browser's console - console_log::init_with_level(log::Level::Info).expect("Error initializing logger"); +#[cfg(test)] +mod tests { + use super::*; + use wasm_bindgen_test::*; - let (degree, plaintext_modulus, moduli) = SET_2048_1032193_1; - let params = build_bfv_params_arc(degree, plaintext_modulus, &moduli); - let mut rng = thread_rng(); - let sk = SecretKey::random(¶ms, &mut rng); - let pk = PublicKey::new(&sk, &mut rng); + #[wasm_bindgen_test] + fn test_encrypt_vote() { + // Initialize the logger to print to the browser's console + console_log::init_with_level(log::Level::Info).expect("Error initializing logger"); - let mut test = Encrypt::new(); - let vote = 10; - test.encrypt_vote(vote, pk.to_bytes()).unwrap(); + let (degree, plaintext_modulus, moduli) = SET_2048_1032193_1; + let params = build_bfv_params_arc(degree, plaintext_modulus, &moduli); + let mut rng = thread_rng(); + let sk = SecretKey::random(¶ms, &mut rng); + let pk = PublicKey::new(&sk, &mut rng); - let ct = Ciphertext::from_bytes(&test.encrypted_vote, ¶ms).unwrap(); - let pt = sk.try_decrypt(&ct).unwrap(); + let mut test = Encrypt::new(); + let vote = 10; + test.encrypt_vote(vote, pk.to_bytes()).unwrap(); - assert_eq!(pt.value[0], vote); + let ct = Ciphertext::from_bytes(&test.encrypted_vote, ¶ms).unwrap(); + let pt = sk.try_decrypt(&ct).unwrap(); + + assert_eq!(pt.value[0], vote); + } } diff --git a/examples/CRISP/circuits/.gitignore b/examples/CRISP/circuits/.gitignore new file mode 100644 index 0000000000..767eaf4c68 --- /dev/null +++ b/examples/CRISP/circuits/.gitignore @@ -0,0 +1,2 @@ +target/ +Prover.toml \ No newline at end of file diff --git a/examples/CRISP/circuits/Nargo.toml b/examples/CRISP/circuits/Nargo.toml new file mode 100644 index 0000000000..637ec18e0f --- /dev/null +++ b/examples/CRISP/circuits/Nargo.toml @@ -0,0 +1,9 @@ +[package] +name = "crisp_circuit" +type = "bin" +version = "0.1.0" +authors = ["Gnosis Guild / Enclave"] +license = "MIT" + +[dependencies] +greco = { tag = "v0.1.0", git = "https://github.com/gnosisguild/greco", directory = "./circuits" } \ No newline at end of file diff --git a/examples/CRISP/circuits/src/main.nr b/examples/CRISP/circuits/src/main.nr new file mode 100644 index 0000000000..552436bb54 --- /dev/null +++ b/examples/CRISP/circuits/src/main.nr @@ -0,0 +1,34 @@ +use greco::constants::{L, N}; +use greco::crypto::pk_encryption::BfvPkEncryptionCircuit; +use greco::math::polynomial::Polynomial; + +fn main( + pk0is: [Polynomial; L], + pk1is: [Polynomial; L], + ct0is: [Polynomial; L], + ct1is: [Polynomial; L], + u: Polynomial, + e0: Polynomial, + e1: Polynomial, + k1: Polynomial, + r1is: [Polynomial<(2 * N) - 1>; L], + r2is: [Polynomial; L], + p1is: [Polynomial<(2 * N) - 1>; L], + p2is: [Polynomial; L], +) { + let circuit = BfvPkEncryptionCircuit::new( + pk0is, + pk1is, + ct0is, + ct1is, + u, + e0, + e1, + k1, + r1is, + r2is, + p1is, + p2is, + ); + circuit.correct_encryption(); +} diff --git a/examples/CRISP/contracts/CRISPChecker.sol b/examples/CRISP/contracts/CRISPChecker.sol index e1a368f261..56712236be 100644 --- a/examples/CRISP/contracts/CRISPChecker.sol +++ b/examples/CRISP/contracts/CRISPChecker.sol @@ -2,7 +2,7 @@ pragma solidity >=0.8.27; import {BaseChecker} from "@excubiae/contracts/checker/BaseChecker.sol"; -import {ISemaphore} from "@semaphore-protocol/contracts/interfaces/ISemaphore.sol"; +import {ISemaphore} from "@semaphore-protocol/contracts/interfaces/ISemaphoreNoir.sol"; /// @title CRISPChecker. /// @notice Enclave Input Validator @@ -45,9 +45,9 @@ contract CRISPChecker is BaseChecker { ) internal view override returns (bool) { super._check(subject, evidence); - ISemaphore.SemaphoreProof memory proof = abi.decode( + ISemaphore.SemaphoreNoirProof memory proof = abi.decode( evidence, - (ISemaphore.SemaphoreProof) + (ISemaphore.SemaphoreNoirProof) ); // The proof scope encodes both the subject address and group ID to prevent front-running attacks. diff --git a/examples/CRISP/contracts/CRISPInputValidator.sol b/examples/CRISP/contracts/CRISPInputValidator.sol index b0062a4c1e..5a5d938636 100644 --- a/examples/CRISP/contracts/CRISPInputValidator.sol +++ b/examples/CRISP/contracts/CRISPInputValidator.sol @@ -4,6 +4,7 @@ pragma solidity >=0.8.27; import {IInputValidator} from "@gnosis-guild/enclave/contracts/interfaces/IInputValidator.sol"; import {IBasePolicy} from "@excubiae/contracts/interfaces/IBasePolicy.sol"; import {Clone} from "@excubiae/contracts/proxy/Clone.sol"; +import {IVerifier} from "./CRISPVerifier.sol"; /// @title CRISPInputValidator. /// @notice Enclave Input Validator @@ -11,18 +12,26 @@ contract CRISPInputValidator is IInputValidator, Clone { /// @notice The policy that will be used to validate the input. IBasePolicy internal policy; + /// @notice The verifier that will be used to validate the input. + IVerifier internal noirVerifier; + /// @notice The error emitted when the input data is empty. error EmptyInputData(); /// @notice The error emitted when the input data is invalid. error InvalidInputData(bytes reason); + /// @notice The error emitted when the Noir proof is invalid. + error InvalidNoirProof(); /// @notice Initializes the contract with appended bytes data for configuration. function _initialize() internal virtual override(Clone) { super._initialize(); - bytes memory data = _getAppendedBytes(); - address policyAddr = abi.decode(data, (address)); + (address policyAddr, address verifierAddr) = abi.decode( + _getAppendedBytes(), + (address, address) + ); policy = IBasePolicy(policyAddr); + noirVerifier = IVerifier(verifierAddr); } /// @notice Validates input @@ -35,13 +44,19 @@ contract CRISPInputValidator is IInputValidator, Clone { ) external returns (bytes memory input) { if (data.length == 0) revert EmptyInputData(); - (bytes memory proofBytes, bytes memory vote) = abi.decode( - data, - (bytes, bytes) - ); + ( + bytes memory semaphoreProof, + bytes memory noirProof, + bytes32[] memory noirPublicInputs, + bytes memory vote + ) = abi.decode(data, (bytes, bytes, bytes32[], bytes)); + + // Reverts if the semaphore proof is invalid + policy.enforce(sender, semaphoreProof); - // Reverts if the proof is invalid - policy.enforce(sender, proofBytes); + // Reverts if noir proof is invalid + if (!noirVerifier.verify(noirProof, noirPublicInputs)) + revert InvalidNoirProof(); input = vote; } diff --git a/examples/CRISP/contracts/CRISPInputValidatorFactory.sol b/examples/CRISP/contracts/CRISPInputValidatorFactory.sol index dc6907e06c..3818d6c1bb 100644 --- a/examples/CRISP/contracts/CRISPInputValidatorFactory.sol +++ b/examples/CRISP/contracts/CRISPInputValidatorFactory.sol @@ -12,8 +12,12 @@ contract CRISPInputValidatorFactory is Factory { /// @notice Deploys a new CRISPInputValidator clone. /// @param _policyAddr Address of the associated policy contract. - function deploy(address _policyAddr) public returns (address clone) { - bytes memory data = abi.encode(_policyAddr); + /// @param _verifierAddr Address of the associated verifier contract. + function deploy( + address _policyAddr, + address _verifierAddr + ) public returns (address clone) { + bytes memory data = abi.encode(_policyAddr, _verifierAddr); clone = super._deploy(data); CRISPInputValidator(clone).initialize(); diff --git a/examples/CRISP/contracts/CRISPPolicy.sol b/examples/CRISP/contracts/CRISPPolicy.sol index 3db670489b..27e80d050e 100644 --- a/examples/CRISP/contracts/CRISPPolicy.sol +++ b/examples/CRISP/contracts/CRISPPolicy.sol @@ -3,7 +3,7 @@ pragma solidity >=0.8.27; import {BasePolicy} from "@excubiae/contracts/policy/BasePolicy.sol"; import {BaseChecker} from "@excubiae/contracts/checker/BaseChecker.sol"; -import {ISemaphore} from "@semaphore-protocol/contracts/interfaces/ISemaphore.sol"; +import {ISemaphore} from "@semaphore-protocol/contracts/interfaces/ISemaphoreNoir.sol"; /// @title CRISPPolicy /// @notice Policy contract for validating inputs based on Semaphore proofs and usage limits. @@ -36,9 +36,9 @@ contract CRISPPolicy is BasePolicy { address subject, bytes calldata evidence ) internal override(BasePolicy) onlyTarget { - ISemaphore.SemaphoreProof memory proof = abi.decode( + ISemaphore.SemaphoreNoirProof memory proof = abi.decode( evidence, - (ISemaphore.SemaphoreProof) + (ISemaphore.SemaphoreNoirProof) ); uint256 n = proof.nullifier; if (spentNullifiers[n]) revert AlreadyEnforced(); diff --git a/examples/CRISP/contracts/CRISPProgram.sol b/examples/CRISP/contracts/CRISPProgram.sol index 4299b4d05c..93abd60385 100644 --- a/examples/CRISP/contracts/CRISPProgram.sol +++ b/examples/CRISP/contracts/CRISPProgram.sol @@ -7,10 +7,11 @@ import {IE3Program} from "@gnosis-guild/enclave/contracts/interfaces/IE3Program. import {IBasePolicy} from "@excubiae/contracts/interfaces/IBasePolicy.sol"; import {IInputValidator} from "@gnosis-guild/enclave/contracts/interfaces/IInputValidator.sol"; import {IEnclave} from "@gnosis-guild/enclave/contracts/interfaces/IEnclave.sol"; -import {ISemaphore} from "@semaphore-protocol/contracts/interfaces/ISemaphore.sol"; +import {ISemaphore} from "@semaphore-protocol/contracts/interfaces/ISemaphoreNoir.sol"; import {CRISPCheckerFactory} from "./CRISPCheckerFactory.sol"; import {CRISPPolicyFactory} from "./CRISPPolicyFactory.sol"; import {CRISPInputValidatorFactory} from "./CRISPInputValidatorFactory.sol"; +import {HonkVerifier} from "./CRISPVerifier.sol"; contract CRISPProgram is IE3Program, Ownable { // Constants @@ -23,6 +24,7 @@ contract CRISPProgram is IE3Program, Ownable { CRISPCheckerFactory private immutable CHECKER_FACTORY; CRISPPolicyFactory private immutable POLICY_FACTORY; CRISPInputValidatorFactory private immutable INPUT_VALIDATOR_FACTORY; + HonkVerifier private immutable HONK_VERIFIER; uint8 public constant INPUT_LIMIT = 100; bytes32 public imageId; @@ -46,6 +48,7 @@ contract CRISPProgram is IE3Program, Ownable { error InvalidPolicyFactory(); error InvalidCheckerFactory(); error InvalidInputValidatorFactory(); + error InvalidHonkVerifier(); error GroupDoesNotExist(); error AlreadyRegistered(); @@ -56,6 +59,7 @@ contract CRISPProgram is IE3Program, Ownable { /// @param _checkerFactory The checker factory address /// @param _policyFactory The policy factory address /// @param _inputValidatorFactory The input validator factory address + /// @param _honkVerifier The honk verifier address /// @param _imageId The image ID for the guest program constructor( IEnclave _enclave, @@ -64,6 +68,7 @@ contract CRISPProgram is IE3Program, Ownable { CRISPCheckerFactory _checkerFactory, CRISPPolicyFactory _policyFactory, CRISPInputValidatorFactory _inputValidatorFactory, + HonkVerifier _honkVerifier, bytes32 _imageId ) Ownable(msg.sender) { require(address(_enclave) != address(0), EnclaveAddressZero()); @@ -78,6 +83,7 @@ contract CRISPProgram is IE3Program, Ownable { address(_inputValidatorFactory) != address(0), InvalidInputValidatorFactory() ); + require(address(_honkVerifier) != address(0), InvalidHonkVerifier()); enclave = _enclave; verifier = _verifier; @@ -85,6 +91,7 @@ contract CRISPProgram is IE3Program, Ownable { CHECKER_FACTORY = _checkerFactory; POLICY_FACTORY = _policyFactory; INPUT_VALIDATOR_FACTORY = _inputValidatorFactory; + HONK_VERIFIER = _honkVerifier; authorizedContracts[address(_enclave)] = true; imageId = _imageId; } @@ -151,7 +158,10 @@ contract CRISPProgram is IE3Program, Ownable { // Deploy a new input validator inputValidator = IInputValidator( - INPUT_VALIDATOR_FACTORY.deploy(address(policy)) + INPUT_VALIDATOR_FACTORY.deploy( + address(policy), + address(HONK_VERIFIER) + ) ); policy.setTarget(address(inputValidator)); diff --git a/examples/CRISP/contracts/CRISPVerifier.sol b/examples/CRISP/contracts/CRISPVerifier.sol new file mode 100644 index 0000000000..d04aab949c --- /dev/null +++ b/examples/CRISP/contracts/CRISPVerifier.sol @@ -0,0 +1,1883 @@ +// SPDX-License-Identifier: Apache-2.0 +// Copyright 2022 Aztec +pragma solidity >=0.8.21; + +uint256 constant N = 1048576; +uint256 constant LOG_N = 20; +uint256 constant NUMBER_OF_PUBLIC_INPUTS = 0; +library HonkVerificationKey { + function loadVerificationKey() internal pure returns (Honk.VerificationKey memory) { + Honk.VerificationKey memory vk = Honk.VerificationKey({ + circuitSize: uint256(1048576), + logCircuitSize: uint256(20), + publicInputsSize: uint256(0), + ql: Honk.G1Point({ + x: uint256(0x10d36906c36e560297d7bc49c7661fbf50a476bea06e780c40d53a45c459599e), + y: uint256(0x1ed002ce45e75474d75d25ef1764280c6f1974b704ae77315baf31726978c175) + }), + qr: Honk.G1Point({ + x: uint256(0x248d6c5782f08a14f794dae5832e8d4a5b42afebf0b248532d725e5d633e7215), + y: uint256(0x266b795b6cf4aa5fff2eb8c3e5a9b9780d6fd5d7170fc2b87f0e6aec8eaa9551) + }), + qo: Honk.G1Point({ + x: uint256(0x2137d78eee77dfd53fc4bf2adeacef7b15a94cc050a06fb8f52e5a28e938a78e), + y: uint256(0x1b0888693ee93d8804044d8d5e8d950ed53fbb451da45863f6f768145c7d24b1) + }), + q4: Honk.G1Point({ + x: uint256(0x00dceb0527695295e8bc90df562acf14d9bdb55e6250ca81034c7f56b9345985), + y: uint256(0x07963d90a20b5fbd22fcb35424b408b2ed41ab59fb2014027d9ec235a5f5905f) + }), + qm: Honk.G1Point({ + x: uint256(0x11a037d3a9259c512f1039f1049fc7541cbbf315ddb90fe2869e6281c12023ef), + y: uint256(0x2d9966faba8461ee70d9db68e1d817fb21b15fb1e09e7476839dc6d07135cc23) + }), + qc: Honk.G1Point({ + x: uint256(0x1219c094d86699487f09191b809a6be165c9b4808bbcadef831592295a1d7da6), + y: uint256(0x20b99b2dcadc856a88cc731f349aa47893a0569c4e747b4af0d7aae0dc9bdcda) + }), + qArith: Honk.G1Point({ + x: uint256(0x147b6a393db982d0f0c7764012b6835c95bc0fa7926fda3f8bf684105282d388), + y: uint256(0x25b693e3f55d510c41dde8bd6b0d61b5c39db3888b55aeada5d7622f34254edf) + }), + qDeltaRange: Honk.G1Point({ + x: uint256(0x2c9e01c750140eb161d24b9ee0fc8984acb60bf4e395b8e6ebbaa91c1be174e9), + y: uint256(0x1bc18c861d47b1f9a988e2e3d3d7a0a6252dc986d614fcca0e4f8ac7457c0892) + }), + qElliptic: Honk.G1Point({ + x: uint256(0x088a610ed8e4090aefcac9ab7277b21fdfb04ce437eb458bdb3696bff53c1cd0), + y: uint256(0x2c5353cedecc1e5f4d84b3ae7f3711e36deebc3071201975bf0fecc655545f5e) + }), + qAux: Honk.G1Point({ + x: uint256(0x1baad7c6c4a0f76d721636e31a5b5c28c1062d21f2148339266343c8c1d38996), + y: uint256(0x1eb16da6aed4aa1a55302d002d233fd4dbb885c96431a494683dc97a9275f43b) + }), + qLookup: Honk.G1Point({ + x: uint256(0x1d64341216e323f076ac53aa06192392677f44b67b6947dd6a0a1490fb32a083), + y: uint256(0x28d02cea9cc379ace2ae8779011e247ddc4213ef69895a8e634f425844107141) + }), + qPoseidon2External: Honk.G1Point({ + x: uint256(0x1e0266510d883b6379b58686bd63642eae499ea68a706cc9e70c14c9c0e8536a), + y: uint256(0x11491f77ce7999d3618f0bac66ef7c4f1ed122f862d1c1465e71ce1262c4d7bd) + }), + qPoseidon2Internal: Honk.G1Point({ + x: uint256(0x22b036a9ca9be4e71743a125c08648843a55f2cf070dafbbda117ca79e071ad5), + y: uint256(0x12fd44e4853d17621023115fbb658d1150aa85fae5a020f07eddd2215812b2f8) + }), + s1: Honk.G1Point({ + x: uint256(0x1a18a989b31c09eea3da5ae3faa7680ef410474de274210f9c39ebfe6a798c7d), + y: uint256(0x2108883b1e5364123ffd7c32161f9228987ee6aa31ba3c579765f6096579b8e0) + }), + s2: Honk.G1Point({ + x: uint256(0x26ddc6264203943a7c31aed2afb7d53fe32a7a38249897fc2a8771c65c414096), + y: uint256(0x0249864a3e742b55386cf6ab4051915fa677a11885e4b0eb04d20d38e9632afe) + }), + s3: Honk.G1Point({ + x: uint256(0x250a1f5dd0a1e0ec7ab855db5863a25a567877ef1bd1c19e5bc1ccdb733b2956), + y: uint256(0x2cc285a8d6a6e91d142e2a941e23c0a7aee361316975b582e0370e46c4939d9f) + }), + s4: Honk.G1Point({ + x: uint256(0x0fc8be2a322d1c45d22b210211992629be0450555321e4a55c2cf2d8f5498c6c), + y: uint256(0x1091f3056debdf6a98ab5e4c6df48dc4fded590c78788baf2b394ff6005df6f6) + }), + t1: Honk.G1Point({ + x: uint256(0x1bf7da4add7c858eb94b75f2e78fbd89c84f5fa43824a0d5534173872ee099c2), + y: uint256(0x1b35fa2a35673699ee1cb260d9e6c4be79b26d488c26dc2531194e43c8f747ea) + }), + t2: Honk.G1Point({ + x: uint256(0x16bf79791869cec464180d5322eeaaef18fed6dc10c3e64e314c04d85c3faece), + y: uint256(0x2e2ec6341669b5b975e25e465af5d9e40533d5ac173554df19daed27f66c36ff) + }), + t3: Honk.G1Point({ + x: uint256(0x150253026f1b985165783c2f4ee1df612c826dda543d06d34711b965730ab69e), + y: uint256(0x0c4062ebcca21d81273b9c58d64447e4ee4d55effa8cbc8fdbd6a76bc3092264) + }), + t4: Honk.G1Point({ + x: uint256(0x159f2541ce446c6d59ea3f06be91ec9f47c9c82f3e4fd10696511efaff4121fa), + y: uint256(0x15f873b33ec9467e1f0c4fb3a0b59a6fcd6f3480515f1ff5506c48f0c521f00f) + }), + id1: Honk.G1Point({ + x: uint256(0x0c02225e1d329e09a738ff6a3d1f2eefee2d9c2446f748430a4c9e3db3af493e), + y: uint256(0x22970a47d992efe75e1a9ae8c48617327596f0b9d1536898b516e9dc0d92e351) + }), + id2: Honk.G1Point({ + x: uint256(0x025b15baf18a3565112553243b581ab7c1ef2bb7b6cecb6fd3dbcb494f131c1b), + y: uint256(0x0784d79e6aa29c9c710670f3e62df4c3bf99a73a85bb255a009d5566da762426) + }), + id3: Honk.G1Point({ + x: uint256(0x2f0d8870dfa4fe4f0bcf1e8a8b69f750b15e8315a76dea5965fe82d369e00ffd), + y: uint256(0x0b8a634aa17cb7e29434a052392f7c40e013e37f2dfdcce584ecaa23a3508c89) + }), + id4: Honk.G1Point({ + x: uint256(0x126143c034d5218ac854d254492806967ae0d23ec5684d341d730cd4dda79f08), + y: uint256(0x1c00c21435080bb1e5b99a42eba611eda1328b0e38e92fcd955d81e96b9b2917) + }), + lagrangeFirst: Honk.G1Point({ + x: uint256(0x0000000000000000000000000000000000000000000000000000000000000001), + y: uint256(0x0000000000000000000000000000000000000000000000000000000000000002) + }), + lagrangeLast: Honk.G1Point({ + x: uint256(0x1120d97a81a9c90c251f46b1ec3998bc67e7978323aebf46551a536bf4d0f167), + y: uint256(0x26d1e132ba53edea7d5e8aa5b21067176a3cf0ba74257f595e17bf0db56a98de) + }) + }); + return vk; + } +} + +pragma solidity ^0.8.27; + +type Fr is uint256; + +using { add as + } for Fr global; +using { sub as - } for Fr global; +using { mul as * } for Fr global; +using { exp as ^ } for Fr global; +using { notEqual as != } for Fr global; +using { equal as == } for Fr global; + +uint256 constant MODULUS = + 21888242871839275222246405745257275088548364400416034343698204186575808495617; // Prime field order + +Fr constant MINUS_ONE = Fr.wrap(MODULUS - 1); + +// Instantiation +library FrLib +{ + function from(uint256 value) internal pure returns(Fr) + { + return Fr.wrap(value % MODULUS); + } + + function fromBytes32(bytes32 value) internal pure returns(Fr) + { + return Fr.wrap(uint256(value) % MODULUS); + } + + function toBytes32(Fr value) internal pure returns(bytes32) + { + return bytes32(Fr.unwrap(value)); + } + + function invert(Fr value) internal view returns(Fr) + { + uint256 v = Fr.unwrap(value); + uint256 result; + + // Call the modexp precompile to invert in the field + assembly + { + let free := mload(0x40) + mstore(free, 0x20) + mstore(add(free, 0x20), 0x20) + mstore(add(free, 0x40), 0x20) + mstore(add(free, 0x60), v) + mstore(add(free, 0x80), sub(MODULUS, 2)) + mstore(add(free, 0xa0), MODULUS) + let success := staticcall(gas(), 0x05, free, 0xc0, 0x00, 0x20) + if iszero(success) { + revert(0, 0) + } + result := mload(0x00) + } + + return Fr.wrap(result); + } + + function pow(Fr base, uint256 v) internal view returns(Fr) + { + uint256 b = Fr.unwrap(base); + uint256 result; + + // Call the modexp precompile to invert in the field + assembly + { + let free := mload(0x40) + mstore(free, 0x20) + mstore(add(free, 0x20), 0x20) + mstore(add(free, 0x40), 0x20) + mstore(add(free, 0x60), b) + mstore(add(free, 0x80), v) + mstore(add(free, 0xa0), MODULUS) + let success := staticcall(gas(), 0x05, free, 0xc0, 0x00, 0x20) + if iszero(success) { + revert(0, 0) + } + result := mload(0x00) + } + + return Fr.wrap(result); + } + + function div(Fr numerator, Fr denominator) internal view returns(Fr) + { + return numerator * invert(denominator); + } + + function sqr(Fr value) internal pure returns (Fr) { + return value * value; + } + + function unwrap(Fr value) internal pure returns (uint256) { + return Fr.unwrap(value); + } + + function neg(Fr value) internal pure returns (Fr) { + return Fr.wrap(MODULUS - Fr.unwrap(value)); + } +} + +// Free functions +function add(Fr a, Fr b) pure returns(Fr) +{ + return Fr.wrap(addmod(Fr.unwrap(a), Fr.unwrap(b), MODULUS)); +} + +function mul(Fr a, Fr b) pure returns(Fr) +{ + return Fr.wrap(mulmod(Fr.unwrap(a), Fr.unwrap(b), MODULUS)); +} + +function sub(Fr a, Fr b) pure returns(Fr) +{ + return Fr.wrap(addmod(Fr.unwrap(a), MODULUS - Fr.unwrap(b), MODULUS)); +} + +function exp(Fr base, Fr exponent) pure returns(Fr) +{ + if (Fr.unwrap(exponent) == 0) return Fr.wrap(1); + + for (uint256 i = 1; i < Fr.unwrap(exponent); i += i) { + base = base * base; + } + return base; +} + +function notEqual(Fr a, Fr b) pure returns(bool) +{ + return Fr.unwrap(a) != Fr.unwrap(b); +} + +function equal(Fr a, Fr b) pure returns(bool) +{ + return Fr.unwrap(a) == Fr.unwrap(b); +} + +uint256 constant CONST_PROOF_SIZE_LOG_N = 28; + +uint256 constant NUMBER_OF_SUBRELATIONS = 26; +uint256 constant BATCHED_RELATION_PARTIAL_LENGTH = 8; +uint256 constant NUMBER_OF_ENTITIES = 40; +uint256 constant NUMBER_UNSHIFTED = 35; +uint256 constant NUMBER_TO_BE_SHIFTED = 5; + +// Alphas are used as relation separators so there should be NUMBER_OF_SUBRELATIONS - 1 +uint256 constant NUMBER_OF_ALPHAS = 25; + +// Prime field order +uint256 constant Q = 21888242871839275222246405745257275088696311157297823662689037894645226208583; // EC group order. F_q +uint256 constant P = 21888242871839275222246405745257275088548364400416034343698204186575808495617; // Prime field order, F_r + +// ENUM FOR WIRES +enum WIRE { + Q_M, + Q_C, + Q_L, + Q_R, + Q_O, + Q_4, + Q_LOOKUP, + Q_ARITH, + Q_RANGE, + Q_ELLIPTIC, + Q_AUX, + Q_POSEIDON2_EXTERNAL, + Q_POSEIDON2_INTERNAL, + SIGMA_1, + SIGMA_2, + SIGMA_3, + SIGMA_4, + ID_1, + ID_2, + ID_3, + ID_4, + TABLE_1, + TABLE_2, + TABLE_3, + TABLE_4, + LAGRANGE_FIRST, + LAGRANGE_LAST, + W_L, + W_R, + W_O, + W_4, + Z_PERM, + LOOKUP_INVERSES, + LOOKUP_READ_COUNTS, + LOOKUP_READ_TAGS, + W_L_SHIFT, + W_R_SHIFT, + W_O_SHIFT, + W_4_SHIFT, + Z_PERM_SHIFT +} + +library Honk { + struct G1Point { + uint256 x; + uint256 y; + } + + struct G1ProofPoint { + uint256 x_0; + uint256 x_1; + uint256 y_0; + uint256 y_1; + } + + struct VerificationKey { + // Misc Params + uint256 circuitSize; + uint256 logCircuitSize; + uint256 publicInputsSize; + // Selectors + G1Point qm; + G1Point qc; + G1Point ql; + G1Point qr; + G1Point qo; + G1Point q4; + G1Point qLookup; // Lookup + G1Point qArith; // Arithmetic widget + G1Point qDeltaRange; // Delta Range sort + G1Point qAux; // Auxillary + G1Point qElliptic; // Auxillary + G1Point qPoseidon2External; + G1Point qPoseidon2Internal; + // Copy cnstraints + G1Point s1; + G1Point s2; + G1Point s3; + G1Point s4; + // Copy identity + G1Point id1; + G1Point id2; + G1Point id3; + G1Point id4; + // Precomputed lookup table + G1Point t1; + G1Point t2; + G1Point t3; + G1Point t4; + // Fixed first and last + G1Point lagrangeFirst; + G1Point lagrangeLast; + } + + struct RelationParameters { + // challenges + Fr eta; + Fr etaTwo; + Fr etaThree; + Fr beta; + Fr gamma; + // derived + Fr publicInputsDelta; + } + + + struct Proof { + // Free wires + Honk.G1ProofPoint w1; + Honk.G1ProofPoint w2; + Honk.G1ProofPoint w3; + Honk.G1ProofPoint w4; + // Lookup helpers - Permutations + Honk.G1ProofPoint zPerm; + // Lookup helpers - logup + Honk.G1ProofPoint lookupReadCounts; + Honk.G1ProofPoint lookupReadTags; + Honk.G1ProofPoint lookupInverses; + // Sumcheck + Fr[BATCHED_RELATION_PARTIAL_LENGTH][CONST_PROOF_SIZE_LOG_N] sumcheckUnivariates; + Fr[NUMBER_OF_ENTITIES] sumcheckEvaluations; + // Shplemini + Honk.G1ProofPoint[CONST_PROOF_SIZE_LOG_N - 1] geminiFoldComms; + Fr[CONST_PROOF_SIZE_LOG_N] geminiAEvaluations; + Honk.G1ProofPoint shplonkQ; + Honk.G1ProofPoint kzgQuotient; + } +} + +// Transcript library to generate fiat shamir challenges +struct Transcript { + // Oink + Honk.RelationParameters relationParameters; + Fr[NUMBER_OF_ALPHAS] alphas; + Fr[CONST_PROOF_SIZE_LOG_N] gateChallenges; + // Sumcheck + Fr[CONST_PROOF_SIZE_LOG_N] sumCheckUChallenges; + // Gemini + Fr rho; + Fr geminiR; + // Shplonk + Fr shplonkNu; + Fr shplonkZ; +} + +library TranscriptLib { + function generateTranscript(Honk.Proof memory proof, bytes32[] calldata publicInputs, uint256 circuitSize, uint256 publicInputsSize, uint256 pubInputsOffset) + internal + pure + returns (Transcript memory t) + { + Fr previousChallenge; + (t.relationParameters, previousChallenge) = + generateRelationParametersChallenges(proof, publicInputs, circuitSize, publicInputsSize, pubInputsOffset, previousChallenge); + + (t.alphas, previousChallenge) = generateAlphaChallenges(previousChallenge, proof); + + (t.gateChallenges, previousChallenge) = generateGateChallenges(previousChallenge); + + (t.sumCheckUChallenges, previousChallenge) = generateSumcheckChallenges(proof, previousChallenge); + + (t.rho, previousChallenge) = generateRhoChallenge(proof, previousChallenge); + + (t.geminiR, previousChallenge) = generateGeminiRChallenge(proof, previousChallenge); + + (t.shplonkNu, previousChallenge) = generateShplonkNuChallenge(proof, previousChallenge); + + (t.shplonkZ, previousChallenge) = generateShplonkZChallenge(proof, previousChallenge); + + return t; + } + + function splitChallenge(Fr challenge) internal pure returns (Fr first, Fr second) { + uint256 challengeU256 = uint256(Fr.unwrap(challenge)); + uint256 lo = challengeU256 & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; + uint256 hi = challengeU256 >> 128; + first = FrLib.fromBytes32(bytes32(lo)); + second = FrLib.fromBytes32(bytes32(hi)); + } + + function generateRelationParametersChallenges( + Honk.Proof memory proof, + bytes32[] calldata publicInputs, + uint256 circuitSize, + uint256 publicInputsSize, + uint256 pubInputsOffset, + Fr previousChallenge + ) internal pure returns (Honk.RelationParameters memory rp, Fr nextPreviousChallenge) { + (rp.eta, rp.etaTwo, rp.etaThree, previousChallenge) = + generateEtaChallenge(proof, publicInputs, circuitSize, publicInputsSize, pubInputsOffset); + + (rp.beta, rp.gamma, nextPreviousChallenge) = generateBetaAndGammaChallenges(previousChallenge, proof); + + } + + function generateEtaChallenge(Honk.Proof memory proof, bytes32[] calldata publicInputs, uint256 circuitSize, uint256 publicInputsSize, uint256 pubInputsOffset) + internal + pure + returns (Fr eta, Fr etaTwo, Fr etaThree, Fr previousChallenge) + { + bytes32[] memory round0 = new bytes32[](3 + publicInputsSize + 12); + round0[0] = bytes32(circuitSize); + round0[1] = bytes32(publicInputsSize); + round0[2] = bytes32(pubInputsOffset); + for (uint256 i = 0; i < publicInputsSize; i++) { + round0[3 + i] = bytes32(publicInputs[i]); + } + + // Create the first challenge + // Note: w4 is added to the challenge later on + round0[3 + publicInputsSize] = bytes32(proof.w1.x_0); + round0[3 + publicInputsSize + 1] = bytes32(proof.w1.x_1); + round0[3 + publicInputsSize + 2] = bytes32(proof.w1.y_0); + round0[3 + publicInputsSize + 3] = bytes32(proof.w1.y_1); + round0[3 + publicInputsSize + 4] = bytes32(proof.w2.x_0); + round0[3 + publicInputsSize + 5] = bytes32(proof.w2.x_1); + round0[3 + publicInputsSize + 6] = bytes32(proof.w2.y_0); + round0[3 + publicInputsSize + 7] = bytes32(proof.w2.y_1); + round0[3 + publicInputsSize + 8] = bytes32(proof.w3.x_0); + round0[3 + publicInputsSize + 9] = bytes32(proof.w3.x_1); + round0[3 + publicInputsSize + 10] = bytes32(proof.w3.y_0); + round0[3 + publicInputsSize + 11] = bytes32(proof.w3.y_1); + + previousChallenge = FrLib.fromBytes32(keccak256(abi.encodePacked(round0))); + (eta, etaTwo) = splitChallenge(previousChallenge); + previousChallenge = FrLib.fromBytes32(keccak256(abi.encodePacked(Fr.unwrap(previousChallenge)))); + Fr unused; + (etaThree, unused) = splitChallenge(previousChallenge); + } + + function generateBetaAndGammaChallenges(Fr previousChallenge, Honk.Proof memory proof) + internal + pure + returns (Fr beta, Fr gamma, Fr nextPreviousChallenge) + { + bytes32[13] memory round1; + round1[0] = FrLib.toBytes32(previousChallenge); + round1[1] = bytes32(proof.lookupReadCounts.x_0); + round1[2] = bytes32(proof.lookupReadCounts.x_1); + round1[3] = bytes32(proof.lookupReadCounts.y_0); + round1[4] = bytes32(proof.lookupReadCounts.y_1); + round1[5] = bytes32(proof.lookupReadTags.x_0); + round1[6] = bytes32(proof.lookupReadTags.x_1); + round1[7] = bytes32(proof.lookupReadTags.y_0); + round1[8] = bytes32(proof.lookupReadTags.y_1); + round1[9] = bytes32(proof.w4.x_0); + round1[10] = bytes32(proof.w4.x_1); + round1[11] = bytes32(proof.w4.y_0); + round1[12] = bytes32(proof.w4.y_1); + + nextPreviousChallenge = FrLib.fromBytes32(keccak256(abi.encodePacked(round1))); + (beta, gamma) = splitChallenge(nextPreviousChallenge); + } + + // Alpha challenges non-linearise the gate contributions + function generateAlphaChallenges(Fr previousChallenge, Honk.Proof memory proof) + internal + pure + returns (Fr[NUMBER_OF_ALPHAS] memory alphas, Fr nextPreviousChallenge) + { + // Generate the original sumcheck alpha 0 by hashing zPerm and zLookup + uint256[9] memory alpha0; + alpha0[0] = Fr.unwrap(previousChallenge); + alpha0[1] = proof.lookupInverses.x_0; + alpha0[2] = proof.lookupInverses.x_1; + alpha0[3] = proof.lookupInverses.y_0; + alpha0[4] = proof.lookupInverses.y_1; + alpha0[5] = proof.zPerm.x_0; + alpha0[6] = proof.zPerm.x_1; + alpha0[7] = proof.zPerm.y_0; + alpha0[8] = proof.zPerm.y_1; + + nextPreviousChallenge = FrLib.fromBytes32(keccak256(abi.encodePacked(alpha0))); + (alphas[0], alphas[1]) = splitChallenge(nextPreviousChallenge); + + for (uint256 i = 1; i < NUMBER_OF_ALPHAS / 2; i++) { + nextPreviousChallenge = FrLib.fromBytes32(keccak256(abi.encodePacked(Fr.unwrap(nextPreviousChallenge)))); + (alphas[2 * i], alphas[2 * i + 1]) = splitChallenge(nextPreviousChallenge); + } + if (((NUMBER_OF_ALPHAS & 1) == 1) && (NUMBER_OF_ALPHAS > 2)) { + nextPreviousChallenge = FrLib.fromBytes32(keccak256(abi.encodePacked(Fr.unwrap(nextPreviousChallenge)))); + Fr unused; + (alphas[NUMBER_OF_ALPHAS - 1], unused) = splitChallenge(nextPreviousChallenge); + } + } + + function generateGateChallenges(Fr previousChallenge) + internal + pure + returns (Fr[CONST_PROOF_SIZE_LOG_N] memory gateChallenges, Fr nextPreviousChallenge) + { + for (uint256 i = 0; i < CONST_PROOF_SIZE_LOG_N; i++) { + previousChallenge = FrLib.fromBytes32(keccak256(abi.encodePacked(Fr.unwrap(previousChallenge)))); + Fr unused; + (gateChallenges[i], unused) = splitChallenge(previousChallenge); + } + nextPreviousChallenge = previousChallenge; + } + + function generateSumcheckChallenges(Honk.Proof memory proof, Fr prevChallenge) + internal + pure + returns (Fr[CONST_PROOF_SIZE_LOG_N] memory sumcheckChallenges, Fr nextPreviousChallenge) + { + for (uint256 i = 0; i < CONST_PROOF_SIZE_LOG_N; i++) { + Fr[BATCHED_RELATION_PARTIAL_LENGTH + 1] memory univariateChal; + univariateChal[0] = prevChallenge; + + for (uint256 j = 0; j < BATCHED_RELATION_PARTIAL_LENGTH; j++) { + univariateChal[j + 1] = proof.sumcheckUnivariates[i][j]; + } + prevChallenge = FrLib.fromBytes32(keccak256(abi.encodePacked(univariateChal))); + Fr unused; + (sumcheckChallenges[i], unused) = splitChallenge(prevChallenge); + } + nextPreviousChallenge = prevChallenge; + } + + function generateRhoChallenge(Honk.Proof memory proof, Fr prevChallenge) + internal + pure + returns (Fr rho, Fr nextPreviousChallenge) + { + Fr[NUMBER_OF_ENTITIES + 1] memory rhoChallengeElements; + rhoChallengeElements[0] = prevChallenge; + + for (uint256 i = 0; i < NUMBER_OF_ENTITIES; i++) { + rhoChallengeElements[i + 1] = proof.sumcheckEvaluations[i]; + } + + nextPreviousChallenge = FrLib.fromBytes32(keccak256(abi.encodePacked(rhoChallengeElements))); + Fr unused; + (rho, unused) = splitChallenge(nextPreviousChallenge); + } + + function generateGeminiRChallenge(Honk.Proof memory proof, Fr prevChallenge) + internal + pure + returns (Fr geminiR, Fr nextPreviousChallenge) + { + uint256[(CONST_PROOF_SIZE_LOG_N - 1) * 4 + 1] memory gR; + gR[0] = Fr.unwrap(prevChallenge); + + for (uint256 i = 0; i < CONST_PROOF_SIZE_LOG_N - 1; i++) { + gR[1 + i * 4] = proof.geminiFoldComms[i].x_0; + gR[2 + i * 4] = proof.geminiFoldComms[i].x_1; + gR[3 + i * 4] = proof.geminiFoldComms[i].y_0; + gR[4 + i * 4] = proof.geminiFoldComms[i].y_1; + } + + nextPreviousChallenge = FrLib.fromBytes32(keccak256(abi.encodePacked(gR))); + Fr unused; + (geminiR, unused) = splitChallenge(nextPreviousChallenge); + } + + function generateShplonkNuChallenge(Honk.Proof memory proof, Fr prevChallenge) + internal + pure + returns (Fr shplonkNu, Fr nextPreviousChallenge) + { + uint256[(CONST_PROOF_SIZE_LOG_N) + 1] memory shplonkNuChallengeElements; + shplonkNuChallengeElements[0] = Fr.unwrap(prevChallenge); + + for (uint256 i = 0; i < CONST_PROOF_SIZE_LOG_N; i++) { + shplonkNuChallengeElements[i + 1] = Fr.unwrap(proof.geminiAEvaluations[i]); + } + + nextPreviousChallenge = FrLib.fromBytes32(keccak256(abi.encodePacked(shplonkNuChallengeElements))); + Fr unused; + (shplonkNu, unused) = splitChallenge(nextPreviousChallenge); + } + + function generateShplonkZChallenge(Honk.Proof memory proof, Fr prevChallenge) + internal + pure + returns (Fr shplonkZ, Fr nextPreviousChallenge) + { + uint256[5] memory shplonkZChallengeElements; + shplonkZChallengeElements[0] = Fr.unwrap(prevChallenge); + + shplonkZChallengeElements[1] = proof.shplonkQ.x_0; + shplonkZChallengeElements[2] = proof.shplonkQ.x_1; + shplonkZChallengeElements[3] = proof.shplonkQ.y_0; + shplonkZChallengeElements[4] = proof.shplonkQ.y_1; + + nextPreviousChallenge = FrLib.fromBytes32(keccak256(abi.encodePacked(shplonkZChallengeElements))); + Fr unused; + (shplonkZ, unused) = splitChallenge(nextPreviousChallenge); + } + + function loadProof(bytes calldata proof) internal pure returns (Honk.Proof memory p) { + // Commitments + p.w1 = bytesToG1ProofPoint(proof[0x0:0x80]); + + p.w2 = bytesToG1ProofPoint(proof[0x80:0x100]); + p.w3 = bytesToG1ProofPoint(proof[0x100:0x180]); + + // Lookup / Permutation Helper Commitments + p.lookupReadCounts = bytesToG1ProofPoint(proof[0x180:0x200]); + p.lookupReadTags = bytesToG1ProofPoint(proof[0x200:0x280]); + p.w4 = bytesToG1ProofPoint(proof[0x280:0x300]); + p.lookupInverses = bytesToG1ProofPoint(proof[0x300:0x380]); + p.zPerm = bytesToG1ProofPoint(proof[0x380:0x400]); + uint256 boundary = 0x400; + + // Sumcheck univariates + for (uint256 i = 0; i < CONST_PROOF_SIZE_LOG_N; i++) { + for (uint256 j = 0; j < BATCHED_RELATION_PARTIAL_LENGTH; j++) { + p.sumcheckUnivariates[i][j] = bytesToFr(proof[boundary:boundary + 0x20]); + boundary += 0x20; + } + } + // Sumcheck evaluations + for (uint256 i = 0; i < NUMBER_OF_ENTITIES; i++) { + p.sumcheckEvaluations[i] = bytesToFr(proof[boundary:boundary + 0x20]); + boundary += 0x20; + } + + // Gemini + // Read gemini fold univariates + for (uint256 i = 0; i < CONST_PROOF_SIZE_LOG_N - 1; i++) { + p.geminiFoldComms[i] = bytesToG1ProofPoint(proof[boundary:boundary + 0x80]); + boundary += 0x80; + } + + // Read gemini a evaluations + for (uint256 i = 0; i < CONST_PROOF_SIZE_LOG_N; i++) { + p.geminiAEvaluations[i] = bytesToFr(proof[boundary:boundary + 0x20]); + boundary += 0x20; + } + + // Shplonk + p.shplonkQ = bytesToG1ProofPoint(proof[boundary:boundary + 0x80]); + boundary = boundary + 0x80; + // KZG + p.kzgQuotient = bytesToG1ProofPoint(proof[boundary:boundary + 0x80]); + } +} + + +// Fr utility + +function bytesToFr(bytes calldata proofSection) pure returns (Fr scalar) { + require(proofSection.length == 0x20, "invalid bytes scalar"); + scalar = FrLib.fromBytes32(bytes32(proofSection)); +} + +// EC Point utilities +function convertProofPoint(Honk.G1ProofPoint memory input) pure returns (Honk.G1Point memory) { + return Honk.G1Point({x: input.x_0 | (input.x_1 << 136), y: input.y_0 | (input.y_1 << 136)}); +} + +function bytesToG1ProofPoint(bytes calldata proofSection) pure returns (Honk.G1ProofPoint memory point) { + require(proofSection.length == 0x80, "invalid bytes point"); + point = Honk.G1ProofPoint({ + x_0: uint256(bytes32(proofSection[0x00:0x20])), + x_1: uint256(bytes32(proofSection[0x20:0x40])), + y_0: uint256(bytes32(proofSection[0x40:0x60])), + y_1: uint256(bytes32(proofSection[0x60:0x80])) + }); +} + +function negateInplace(Honk.G1Point memory point) pure returns (Honk.G1Point memory) { + point.y = (Q - point.y) % Q; + return point; +} + + function pairing(Honk.G1Point memory rhs, Honk.G1Point memory lhs) view returns (bool) { + bytes memory input = abi.encodePacked( + rhs.x, + rhs.y, + // Fixed G1 point + uint256(0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2), + uint256(0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed), + uint256(0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b), + uint256(0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa), + lhs.x, + lhs.y, + // G1 point from VK + uint256(0x260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c1), + uint256(0x0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b0), + uint256(0x04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe4), + uint256(0x22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55) + ); + + (bool success, bytes memory result) = address(0x08).staticcall(input); + bool decodedResult = abi.decode(result, (bool)); + return success && decodedResult; + } + + +library RelationsLib { + Fr internal constant GRUMPKIN_CURVE_B_PARAMETER_NEGATED = Fr.wrap(17); // -(-17) + + function accumulateRelationEvaluations( + Fr[NUMBER_OF_ENTITIES] memory purportedEvaluations, + Honk.RelationParameters memory rp, + Fr[NUMBER_OF_ALPHAS] memory alphas, + Fr powPartialEval + ) internal pure returns (Fr accumulator) { + Fr[NUMBER_OF_SUBRELATIONS] memory evaluations; + + // Accumulate all relations in Ultra Honk - each with varying number of subrelations + accumulateArithmeticRelation(purportedEvaluations, evaluations, powPartialEval); + accumulatePermutationRelation(purportedEvaluations, rp, evaluations, powPartialEval); + accumulateLogDerivativeLookupRelation(purportedEvaluations, rp, evaluations, powPartialEval); + accumulateDeltaRangeRelation(purportedEvaluations, evaluations, powPartialEval); + accumulateEllipticRelation(purportedEvaluations, evaluations, powPartialEval); + accumulateAuxillaryRelation(purportedEvaluations, rp, evaluations, powPartialEval); + accumulatePoseidonExternalRelation(purportedEvaluations, evaluations, powPartialEval); + accumulatePoseidonInternalRelation(purportedEvaluations, evaluations, powPartialEval); + // batch the subrelations with the alpha challenges to obtain the full honk relation + accumulator = scaleAndBatchSubrelations(evaluations, alphas); + } + + /** + * Aesthetic helper function that is used to index by enum into proof.sumcheckEvaluations, it avoids + * the relation checking code being cluttered with uint256 type casting, which is often a different colour in code + * editors, and thus is noisy. + */ + function wire(Fr[NUMBER_OF_ENTITIES] memory p, WIRE _wire) internal pure returns (Fr) { + return p[uint256(_wire)]; + } + + uint256 internal constant NEG_HALF_MODULO_P = 0x183227397098d014dc2822db40c0ac2e9419f4243cdcb848a1f0fac9f8000000; + /** + * Ultra Arithmetic Relation + * + */ + function accumulateArithmeticRelation( + Fr[NUMBER_OF_ENTITIES] memory p, + Fr[NUMBER_OF_SUBRELATIONS] memory evals, + Fr domainSep + ) internal pure { + // Relation 0 + Fr q_arith = wire(p, WIRE.Q_ARITH); + { + Fr neg_half = Fr.wrap(NEG_HALF_MODULO_P); + + Fr accum = (q_arith - Fr.wrap(3)) * (wire(p, WIRE.Q_M) * wire(p, WIRE.W_R) * wire(p, WIRE.W_L)) * neg_half; + accum = accum + (wire(p, WIRE.Q_L) * wire(p, WIRE.W_L)) + (wire(p, WIRE.Q_R) * wire(p, WIRE.W_R)) + + (wire(p, WIRE.Q_O) * wire(p, WIRE.W_O)) + (wire(p, WIRE.Q_4) * wire(p, WIRE.W_4)) + wire(p, WIRE.Q_C); + accum = accum + (q_arith - Fr.wrap(1)) * wire(p, WIRE.W_4_SHIFT); + accum = accum * q_arith; + accum = accum * domainSep; + evals[0] = accum; + } + + // Relation 1 + { + Fr accum = wire(p, WIRE.W_L) + wire(p, WIRE.W_4) - wire(p, WIRE.W_L_SHIFT) + wire(p, WIRE.Q_M); + accum = accum * (q_arith - Fr.wrap(2)); + accum = accum * (q_arith - Fr.wrap(1)); + accum = accum * q_arith; + accum = accum * domainSep; + evals[1] = accum; + } + } + + function accumulatePermutationRelation( + Fr[NUMBER_OF_ENTITIES] memory p, + Honk.RelationParameters memory rp, + Fr[NUMBER_OF_SUBRELATIONS] memory evals, + Fr domainSep + ) internal pure { + Fr grand_product_numerator; + Fr grand_product_denominator; + + { + Fr num = wire(p, WIRE.W_L) + wire(p, WIRE.ID_1) * rp.beta + rp.gamma; + num = num * (wire(p, WIRE.W_R) + wire(p, WIRE.ID_2) * rp.beta + rp.gamma); + num = num * (wire(p, WIRE.W_O) + wire(p, WIRE.ID_3) * rp.beta + rp.gamma); + num = num * (wire(p, WIRE.W_4) + wire(p, WIRE.ID_4) * rp.beta + rp.gamma); + + grand_product_numerator = num; + } + { + Fr den = wire(p, WIRE.W_L) + wire(p, WIRE.SIGMA_1) * rp.beta + rp.gamma; + den = den * (wire(p, WIRE.W_R) + wire(p, WIRE.SIGMA_2) * rp.beta + rp.gamma); + den = den * (wire(p, WIRE.W_O) + wire(p, WIRE.SIGMA_3) * rp.beta + rp.gamma); + den = den * (wire(p, WIRE.W_4) + wire(p, WIRE.SIGMA_4) * rp.beta + rp.gamma); + + grand_product_denominator = den; + } + + // Contribution 2 + { + Fr acc = (wire(p, WIRE.Z_PERM) + wire(p, WIRE.LAGRANGE_FIRST)) * grand_product_numerator; + + acc = acc + - ( + (wire(p, WIRE.Z_PERM_SHIFT) + (wire(p, WIRE.LAGRANGE_LAST) * rp.publicInputsDelta)) + * grand_product_denominator + ); + acc = acc * domainSep; + evals[2] = acc; + } + + // Contribution 3 + { + Fr acc = (wire(p, WIRE.LAGRANGE_LAST) * wire(p, WIRE.Z_PERM_SHIFT)) * domainSep; + evals[3] = acc; + } + } + + function accumulateLogDerivativeLookupRelation( + Fr[NUMBER_OF_ENTITIES] memory p, + Honk.RelationParameters memory rp, + Fr[NUMBER_OF_SUBRELATIONS] memory evals, + Fr domainSep + ) internal pure { + Fr write_term; + Fr read_term; + + // Calculate the write term (the table accumulation) + { + write_term = wire(p, WIRE.TABLE_1) + rp.gamma + (wire(p, WIRE.TABLE_2) * rp.eta) + + (wire(p, WIRE.TABLE_3) * rp.etaTwo) + (wire(p, WIRE.TABLE_4) * rp.etaThree); + } + + // Calculate the write term + { + Fr derived_entry_1 = wire(p, WIRE.W_L) + rp.gamma + (wire(p, WIRE.Q_R) * wire(p, WIRE.W_L_SHIFT)); + Fr derived_entry_2 = wire(p, WIRE.W_R) + wire(p, WIRE.Q_M) * wire(p, WIRE.W_R_SHIFT); + Fr derived_entry_3 = wire(p, WIRE.W_O) + wire(p, WIRE.Q_C) * wire(p, WIRE.W_O_SHIFT); + + read_term = derived_entry_1 + (derived_entry_2 * rp.eta) + (derived_entry_3 * rp.etaTwo) + + (wire(p, WIRE.Q_O) * rp.etaThree); + } + + Fr read_inverse = wire(p, WIRE.LOOKUP_INVERSES) * write_term; + Fr write_inverse = wire(p, WIRE.LOOKUP_INVERSES) * read_term; + + Fr inverse_exists_xor = wire(p, WIRE.LOOKUP_READ_TAGS) + wire(p, WIRE.Q_LOOKUP) + - (wire(p, WIRE.LOOKUP_READ_TAGS) * wire(p, WIRE.Q_LOOKUP)); + + // Inverse calculated correctly relation + Fr accumulatorNone = read_term * write_term * wire(p, WIRE.LOOKUP_INVERSES) - inverse_exists_xor; + accumulatorNone = accumulatorNone * domainSep; + + // Inverse + Fr accumulatorOne = wire(p, WIRE.Q_LOOKUP) * read_inverse - wire(p, WIRE.LOOKUP_READ_COUNTS) * write_inverse; + + evals[4] = accumulatorNone; + evals[5] = accumulatorOne; + } + + function accumulateDeltaRangeRelation( + Fr[NUMBER_OF_ENTITIES] memory p, + Fr[NUMBER_OF_SUBRELATIONS] memory evals, + Fr domainSep + ) internal pure { + Fr minus_one = Fr.wrap(0) - Fr.wrap(1); + Fr minus_two = Fr.wrap(0) - Fr.wrap(2); + Fr minus_three = Fr.wrap(0) - Fr.wrap(3); + + // Compute wire differences + Fr delta_1 = wire(p, WIRE.W_R) - wire(p, WIRE.W_L); + Fr delta_2 = wire(p, WIRE.W_O) - wire(p, WIRE.W_R); + Fr delta_3 = wire(p, WIRE.W_4) - wire(p, WIRE.W_O); + Fr delta_4 = wire(p, WIRE.W_L_SHIFT) - wire(p, WIRE.W_4); + + // Contribution 6 + { + Fr acc = delta_1; + acc = acc * (delta_1 + minus_one); + acc = acc * (delta_1 + minus_two); + acc = acc * (delta_1 + minus_three); + acc = acc * wire(p, WIRE.Q_RANGE); + acc = acc * domainSep; + evals[6] = acc; + } + + // Contribution 7 + { + Fr acc = delta_2; + acc = acc * (delta_2 + minus_one); + acc = acc * (delta_2 + minus_two); + acc = acc * (delta_2 + minus_three); + acc = acc * wire(p, WIRE.Q_RANGE); + acc = acc * domainSep; + evals[7] = acc; + } + + // Contribution 8 + { + Fr acc = delta_3; + acc = acc * (delta_3 + minus_one); + acc = acc * (delta_3 + minus_two); + acc = acc * (delta_3 + minus_three); + acc = acc * wire(p, WIRE.Q_RANGE); + acc = acc * domainSep; + evals[8] = acc; + } + + // Contribution 9 + { + Fr acc = delta_4; + acc = acc * (delta_4 + minus_one); + acc = acc * (delta_4 + minus_two); + acc = acc * (delta_4 + minus_three); + acc = acc * wire(p, WIRE.Q_RANGE); + acc = acc * domainSep; + evals[9] = acc; + } + } + + struct EllipticParams { + // Points + Fr x_1; + Fr y_1; + Fr x_2; + Fr y_2; + Fr y_3; + Fr x_3; + // push accumulators into memory + Fr x_double_identity; + } + + function accumulateEllipticRelation( + Fr[NUMBER_OF_ENTITIES] memory p, + Fr[NUMBER_OF_SUBRELATIONS] memory evals, + Fr domainSep + ) internal pure { + EllipticParams memory ep; + ep.x_1 = wire(p, WIRE.W_R); + ep.y_1 = wire(p, WIRE.W_O); + + ep.x_2 = wire(p, WIRE.W_L_SHIFT); + ep.y_2 = wire(p, WIRE.W_4_SHIFT); + ep.y_3 = wire(p, WIRE.W_O_SHIFT); + ep.x_3 = wire(p, WIRE.W_R_SHIFT); + + Fr q_sign = wire(p, WIRE.Q_L); + Fr q_is_double = wire(p, WIRE.Q_M); + + // Contribution 10 point addition, x-coordinate check + // q_elliptic * (x3 + x2 + x1)(x2 - x1)(x2 - x1) - y2^2 - y1^2 + 2(y2y1)*q_sign = 0 + Fr x_diff = (ep.x_2 - ep.x_1); + Fr y1_sqr = (ep.y_1 * ep.y_1); + { + // Move to top + Fr partialEval = domainSep; + + Fr y2_sqr = (ep.y_2 * ep.y_2); + Fr y1y2 = ep.y_1 * ep.y_2 * q_sign; + Fr x_add_identity = (ep.x_3 + ep.x_2 + ep.x_1); + x_add_identity = x_add_identity * x_diff * x_diff; + x_add_identity = x_add_identity - y2_sqr - y1_sqr + y1y2 + y1y2; + + evals[10] = x_add_identity * partialEval * wire(p, WIRE.Q_ELLIPTIC) * (Fr.wrap(1) - q_is_double); + } + + // Contribution 11 point addition, x-coordinate check + // q_elliptic * (q_sign * y1 + y3)(x2 - x1) + (x3 - x1)(y2 - q_sign * y1) = 0 + { + Fr y1_plus_y3 = ep.y_1 + ep.y_3; + Fr y_diff = ep.y_2 * q_sign - ep.y_1; + Fr y_add_identity = y1_plus_y3 * x_diff + (ep.x_3 - ep.x_1) * y_diff; + evals[11] = y_add_identity * domainSep * wire(p, WIRE.Q_ELLIPTIC) * (Fr.wrap(1) - q_is_double); + } + + // Contribution 10 point doubling, x-coordinate check + // (x3 + x1 + x1) (4y1*y1) - 9 * x1 * x1 * x1 * x1 = 0 + // N.B. we're using the equivalence x1*x1*x1 === y1*y1 - curve_b to reduce degree by 1 + { + Fr x_pow_4 = (y1_sqr + GRUMPKIN_CURVE_B_PARAMETER_NEGATED) * ep.x_1; + Fr y1_sqr_mul_4 = y1_sqr + y1_sqr; + y1_sqr_mul_4 = y1_sqr_mul_4 + y1_sqr_mul_4; + Fr x1_pow_4_mul_9 = x_pow_4 * Fr.wrap(9); + + // NOTE: pushed into memory (stack >:'( ) + ep.x_double_identity = (ep.x_3 + ep.x_1 + ep.x_1) * y1_sqr_mul_4 - x1_pow_4_mul_9; + + Fr acc = ep.x_double_identity * domainSep * wire(p, WIRE.Q_ELLIPTIC) * q_is_double; + evals[10] = evals[10] + acc; + } + + // Contribution 11 point doubling, y-coordinate check + // (y1 + y1) (2y1) - (3 * x1 * x1)(x1 - x3) = 0 + { + Fr x1_sqr_mul_3 = (ep.x_1 + ep.x_1 + ep.x_1) * ep.x_1; + Fr y_double_identity = x1_sqr_mul_3 * (ep.x_1 - ep.x_3) - (ep.y_1 + ep.y_1) * (ep.y_1 + ep.y_3); + evals[11] = evals[11] + y_double_identity * domainSep * wire(p, WIRE.Q_ELLIPTIC) * q_is_double; + } + } + + // Constants for the auxiliary relation + Fr constant LIMB_SIZE = Fr.wrap(uint256(1) << 68); + Fr constant SUBLIMB_SHIFT = Fr.wrap(uint256(1) << 14); + + // Parameters used within the Auxiliary Relation + // A struct is used to work around stack too deep. This relation has alot of variables + struct AuxParams { + Fr limb_subproduct; + Fr non_native_field_gate_1; + Fr non_native_field_gate_2; + Fr non_native_field_gate_3; + Fr limb_accumulator_1; + Fr limb_accumulator_2; + Fr memory_record_check; + Fr partial_record_check; + Fr next_gate_access_type; + Fr record_delta; + Fr index_delta; + Fr adjacent_values_match_if_adjacent_indices_match; + Fr adjacent_values_match_if_adjacent_indices_match_and_next_access_is_a_read_operation; + Fr access_check; + Fr next_gate_access_type_is_boolean; + Fr ROM_consistency_check_identity; + Fr RAM_consistency_check_identity; + Fr timestamp_delta; + Fr RAM_timestamp_check_identity; + Fr memory_identity; + Fr index_is_monotonically_increasing; + Fr auxiliary_identity; + } + + function accumulateAuxillaryRelation( + Fr[NUMBER_OF_ENTITIES] memory p, + Honk.RelationParameters memory rp, + Fr[NUMBER_OF_SUBRELATIONS] memory evals, + Fr domainSep + ) internal pure { + AuxParams memory ap; + + /** + * Contribution 12 + * Non native field arithmetic gate 2 + * deg 4 + * + * _ _ + * / _ _ _ 14 \ + * q_2 . q_4 | (w_1 . w_2) + (w_1 . w_2) + (w_1 . w_4 + w_2 . w_3 - w_3) . 2 - w_3 - w_4 | + * \_ _/ + * + * + */ + ap.limb_subproduct = wire(p, WIRE.W_L) * wire(p, WIRE.W_R_SHIFT) + wire(p, WIRE.W_L_SHIFT) * wire(p, WIRE.W_R); + ap.non_native_field_gate_2 = + (wire(p, WIRE.W_L) * wire(p, WIRE.W_4) + wire(p, WIRE.W_R) * wire(p, WIRE.W_O) - wire(p, WIRE.W_O_SHIFT)); + ap.non_native_field_gate_2 = ap.non_native_field_gate_2 * LIMB_SIZE; + ap.non_native_field_gate_2 = ap.non_native_field_gate_2 - wire(p, WIRE.W_4_SHIFT); + ap.non_native_field_gate_2 = ap.non_native_field_gate_2 + ap.limb_subproduct; + ap.non_native_field_gate_2 = ap.non_native_field_gate_2 * wire(p, WIRE.Q_4); + + ap.limb_subproduct = ap.limb_subproduct * LIMB_SIZE; + ap.limb_subproduct = ap.limb_subproduct + (wire(p, WIRE.W_L_SHIFT) * wire(p, WIRE.W_R_SHIFT)); + ap.non_native_field_gate_1 = ap.limb_subproduct; + ap.non_native_field_gate_1 = ap.non_native_field_gate_1 - (wire(p, WIRE.W_O) + wire(p, WIRE.W_4)); + ap.non_native_field_gate_1 = ap.non_native_field_gate_1 * wire(p, WIRE.Q_O); + + ap.non_native_field_gate_3 = ap.limb_subproduct; + ap.non_native_field_gate_3 = ap.non_native_field_gate_3 + wire(p, WIRE.W_4); + ap.non_native_field_gate_3 = ap.non_native_field_gate_3 - (wire(p, WIRE.W_O_SHIFT) + wire(p, WIRE.W_4_SHIFT)); + ap.non_native_field_gate_3 = ap.non_native_field_gate_3 * wire(p, WIRE.Q_M); + + Fr non_native_field_identity = + ap.non_native_field_gate_1 + ap.non_native_field_gate_2 + ap.non_native_field_gate_3; + non_native_field_identity = non_native_field_identity * wire(p, WIRE.Q_R); + + // ((((w2' * 2^14 + w1') * 2^14 + w3) * 2^14 + w2) * 2^14 + w1 - w4) * qm + // deg 2 + ap.limb_accumulator_1 = wire(p, WIRE.W_R_SHIFT) * SUBLIMB_SHIFT; + ap.limb_accumulator_1 = ap.limb_accumulator_1 + wire(p, WIRE.W_L_SHIFT); + ap.limb_accumulator_1 = ap.limb_accumulator_1 * SUBLIMB_SHIFT; + ap.limb_accumulator_1 = ap.limb_accumulator_1 + wire(p, WIRE.W_O); + ap.limb_accumulator_1 = ap.limb_accumulator_1 * SUBLIMB_SHIFT; + ap.limb_accumulator_1 = ap.limb_accumulator_1 + wire(p, WIRE.W_R); + ap.limb_accumulator_1 = ap.limb_accumulator_1 * SUBLIMB_SHIFT; + ap.limb_accumulator_1 = ap.limb_accumulator_1 + wire(p, WIRE.W_L); + ap.limb_accumulator_1 = ap.limb_accumulator_1 - wire(p, WIRE.W_4); + ap.limb_accumulator_1 = ap.limb_accumulator_1 * wire(p, WIRE.Q_4); + + // ((((w3' * 2^14 + w2') * 2^14 + w1') * 2^14 + w4) * 2^14 + w3 - w4') * qm + // deg 2 + ap.limb_accumulator_2 = wire(p, WIRE.W_O_SHIFT) * SUBLIMB_SHIFT; + ap.limb_accumulator_2 = ap.limb_accumulator_2 + wire(p, WIRE.W_R_SHIFT); + ap.limb_accumulator_2 = ap.limb_accumulator_2 * SUBLIMB_SHIFT; + ap.limb_accumulator_2 = ap.limb_accumulator_2 + wire(p, WIRE.W_L_SHIFT); + ap.limb_accumulator_2 = ap.limb_accumulator_2 * SUBLIMB_SHIFT; + ap.limb_accumulator_2 = ap.limb_accumulator_2 + wire(p, WIRE.W_4); + ap.limb_accumulator_2 = ap.limb_accumulator_2 * SUBLIMB_SHIFT; + ap.limb_accumulator_2 = ap.limb_accumulator_2 + wire(p, WIRE.W_O); + ap.limb_accumulator_2 = ap.limb_accumulator_2 - wire(p, WIRE.W_4_SHIFT); + ap.limb_accumulator_2 = ap.limb_accumulator_2 * wire(p, WIRE.Q_M); + + Fr limb_accumulator_identity = ap.limb_accumulator_1 + ap.limb_accumulator_2; + limb_accumulator_identity = limb_accumulator_identity * wire(p, WIRE.Q_O); // deg 3 + + /** + * MEMORY + * + * A RAM memory record contains a tuple of the following fields: + * * i: `index` of memory cell being accessed + * * t: `timestamp` of memory cell being accessed (used for RAM, set to 0 for ROM) + * * v: `value` of memory cell being accessed + * * a: `access` type of record. read: 0 = read, 1 = write + * * r: `record` of memory cell. record = access + index * eta + timestamp * eta_two + value * eta_three + * + * A ROM memory record contains a tuple of the following fields: + * * i: `index` of memory cell being accessed + * * v: `value1` of memory cell being accessed (ROM tables can store up to 2 values per index) + * * v2:`value2` of memory cell being accessed (ROM tables can store up to 2 values per index) + * * r: `record` of memory cell. record = index * eta + value2 * eta_two + value1 * eta_three + * + * When performing a read/write access, the values of i, t, v, v2, a, r are stored in the following wires + + * selectors, depending on whether the gate is a RAM read/write or a ROM read + * + * | gate type | i | v2/t | v | a | r | + * | --------- | -- | ----- | -- | -- | -- | + * | ROM | w1 | w2 | w3 | -- | w4 | + * | RAM | w1 | w2 | w3 | qc | w4 | + * + * (for accesses where `index` is a circuit constant, it is assumed the circuit will apply a copy constraint on + * `w2` to fix its value) + * + * + */ + + /** + * Memory Record Check + * Partial degree: 1 + * Total degree: 4 + * + * A ROM/ROM access gate can be evaluated with the identity: + * + * qc + w1 \eta + w2 \eta_two + w3 \eta_three - w4 = 0 + * + * For ROM gates, qc = 0 + */ + ap.memory_record_check = wire(p, WIRE.W_O) * rp.etaThree; + ap.memory_record_check = ap.memory_record_check + (wire(p, WIRE.W_R) * rp.etaTwo); + ap.memory_record_check = ap.memory_record_check + (wire(p, WIRE.W_L) * rp.eta); + ap.memory_record_check = ap.memory_record_check + wire(p, WIRE.Q_C); + ap.partial_record_check = ap.memory_record_check; // used in RAM consistency check; deg 1 or 4 + ap.memory_record_check = ap.memory_record_check - wire(p, WIRE.W_4); + + /** + * Contribution 13 & 14 + * ROM Consistency Check + * Partial degree: 1 + * Total degree: 4 + * + * For every ROM read, a set equivalence check is applied between the record witnesses, and a second set of + * records that are sorted. + * + * We apply the following checks for the sorted records: + * + * 1. w1, w2, w3 correctly map to 'index', 'v1, 'v2' for a given record value at w4 + * 2. index values for adjacent records are monotonically increasing + * 3. if, at gate i, index_i == index_{i + 1}, then value1_i == value1_{i + 1} and value2_i == value2_{i + 1} + * + */ + ap.index_delta = wire(p, WIRE.W_L_SHIFT) - wire(p, WIRE.W_L); + ap.record_delta = wire(p, WIRE.W_4_SHIFT) - wire(p, WIRE.W_4); + + ap.index_is_monotonically_increasing = ap.index_delta * ap.index_delta - ap.index_delta; // deg 2 + + ap.adjacent_values_match_if_adjacent_indices_match = (ap.index_delta * MINUS_ONE + Fr.wrap(1)) * ap.record_delta; // deg 2 + + evals[13] = ap.adjacent_values_match_if_adjacent_indices_match * (wire(p, WIRE.Q_L) * wire(p, WIRE.Q_R)) + * (wire(p, WIRE.Q_AUX) * domainSep); // deg 5 + evals[14] = ap.index_is_monotonically_increasing * (wire(p, WIRE.Q_L) * wire(p, WIRE.Q_R)) + * (wire(p, WIRE.Q_AUX) * domainSep); // deg 5 + + ap.ROM_consistency_check_identity = ap.memory_record_check * (wire(p, WIRE.Q_L) * wire(p, WIRE.Q_R)); // deg 3 or 7 + + /** + * Contributions 15,16,17 + * RAM Consistency Check + * + * The 'access' type of the record is extracted with the expression `w_4 - ap.partial_record_check` + * (i.e. for an honest Prover `w1 * eta + w2 * eta^2 + w3 * eta^3 - w4 = access`. + * This is validated by requiring `access` to be boolean + * + * For two adjacent entries in the sorted list if _both_ + * A) index values match + * B) adjacent access value is 0 (i.e. next gate is a READ) + * then + * C) both values must match. + * The gate boolean check is + * (A && B) => C === !(A && B) || C === !A || !B || C + * + * N.B. it is the responsibility of the circuit writer to ensure that every RAM cell is initialized + * with a WRITE operation. + */ + Fr access_type = (wire(p, WIRE.W_4) - ap.partial_record_check); // will be 0 or 1 for honest Prover; deg 1 or 4 + ap.access_check = access_type * access_type - access_type; // check value is 0 or 1; deg 2 or 8 + + ap.next_gate_access_type = wire(p, WIRE.W_O_SHIFT) * rp.etaThree; + ap.next_gate_access_type = ap.next_gate_access_type + (wire(p, WIRE.W_R_SHIFT) * rp.etaTwo); + ap.next_gate_access_type = ap.next_gate_access_type + (wire(p, WIRE.W_L_SHIFT) * rp.eta); + ap.next_gate_access_type = wire(p, WIRE.W_4_SHIFT) - ap.next_gate_access_type; + + Fr value_delta = wire(p, WIRE.W_O_SHIFT) - wire(p, WIRE.W_O); + ap.adjacent_values_match_if_adjacent_indices_match_and_next_access_is_a_read_operation = ( + ap.index_delta * MINUS_ONE + Fr.wrap(1) + ) * value_delta * (ap.next_gate_access_type * MINUS_ONE + Fr.wrap(1)); // deg 3 or 6 + + // We can't apply the RAM consistency check identity on the final entry in the sorted list (the wires in the + // next gate would make the identity fail). We need to validate that its 'access type' bool is correct. Can't + // do with an arithmetic gate because of the `eta` factors. We need to check that the *next* gate's access + // type is correct, to cover this edge case + // deg 2 or 4 + ap.next_gate_access_type_is_boolean = + ap.next_gate_access_type * ap.next_gate_access_type - ap.next_gate_access_type; + + // Putting it all together... + evals[15] = ap.adjacent_values_match_if_adjacent_indices_match_and_next_access_is_a_read_operation + * (wire(p, WIRE.Q_ARITH)) * (wire(p, WIRE.Q_AUX) * domainSep); // deg 5 or 8 + evals[16] = ap.index_is_monotonically_increasing * (wire(p, WIRE.Q_ARITH)) * (wire(p, WIRE.Q_AUX) * domainSep); // deg 4 + evals[17] = ap.next_gate_access_type_is_boolean * (wire(p, WIRE.Q_ARITH)) * (wire(p, WIRE.Q_AUX) * domainSep); // deg 4 or 6 + + ap.RAM_consistency_check_identity = ap.access_check * (wire(p, WIRE.Q_ARITH)); // deg 3 or 9 + + /** + * RAM Timestamp Consistency Check + * + * | w1 | w2 | w3 | w4 | + * | index | timestamp | timestamp_check | -- | + * + * Let delta_index = index_{i + 1} - index_{i} + * + * Iff delta_index == 0, timestamp_check = timestamp_{i + 1} - timestamp_i + * Else timestamp_check = 0 + */ + ap.timestamp_delta = wire(p, WIRE.W_R_SHIFT) - wire(p, WIRE.W_R); + ap.RAM_timestamp_check_identity = + (ap.index_delta * MINUS_ONE + Fr.wrap(1)) * ap.timestamp_delta - wire(p, WIRE.W_O); // deg 3 + + /** + * Complete Contribution 12 + * The complete RAM/ROM memory identity + * Partial degree: + */ + ap.memory_identity = ap.ROM_consistency_check_identity; // deg 3 or 6 + ap.memory_identity = + ap.memory_identity + ap.RAM_timestamp_check_identity * (wire(p, WIRE.Q_4) * wire(p, WIRE.Q_L)); // deg 4 + ap.memory_identity = ap.memory_identity + ap.memory_record_check * (wire(p, WIRE.Q_M) * wire(p, WIRE.Q_L)); // deg 3 or 6 + ap.memory_identity = ap.memory_identity + ap.RAM_consistency_check_identity; // deg 3 or 9 + + // (deg 3 or 9) + (deg 4) + (deg 3) + ap.auxiliary_identity = ap.memory_identity + non_native_field_identity + limb_accumulator_identity; + ap.auxiliary_identity = ap.auxiliary_identity * (wire(p, WIRE.Q_AUX) * domainSep); // deg 4 or 10 + evals[12] = ap.auxiliary_identity; + } + + struct PoseidonExternalParams { + Fr s1; + Fr s2; + Fr s3; + Fr s4; + Fr u1; + Fr u2; + Fr u3; + Fr u4; + Fr t0; + Fr t1; + Fr t2; + Fr t3; + Fr v1; + Fr v2; + Fr v3; + Fr v4; + Fr q_pos_by_scaling; + } + + function accumulatePoseidonExternalRelation( + Fr[NUMBER_OF_ENTITIES] memory p, + Fr[NUMBER_OF_SUBRELATIONS] memory evals, + Fr domainSep + ) internal pure { + PoseidonExternalParams memory ep; + + ep.s1 = wire(p, WIRE.W_L) + wire(p, WIRE.Q_L); + ep.s2 = wire(p, WIRE.W_R) + wire(p, WIRE.Q_R); + ep.s3 = wire(p, WIRE.W_O) + wire(p, WIRE.Q_O); + ep.s4 = wire(p, WIRE.W_4) + wire(p, WIRE.Q_4); + + ep.u1 = ep.s1 * ep.s1 * ep.s1 * ep.s1 * ep.s1; + ep.u2 = ep.s2 * ep.s2 * ep.s2 * ep.s2 * ep.s2; + ep.u3 = ep.s3 * ep.s3 * ep.s3 * ep.s3 * ep.s3; + ep.u4 = ep.s4 * ep.s4 * ep.s4 * ep.s4 * ep.s4; + // matrix mul v = M_E * u with 14 additions + ep.t0 = ep.u1 + ep.u2; // u_1 + u_2 + ep.t1 = ep.u3 + ep.u4; // u_3 + u_4 + ep.t2 = ep.u2 + ep.u2 + ep.t1; // 2u_2 + // ep.t2 += ep.t1; // 2u_2 + u_3 + u_4 + ep.t3 = ep.u4 + ep.u4 + ep.t0; // 2u_4 + // ep.t3 += ep.t0; // u_1 + u_2 + 2u_4 + ep.v4 = ep.t1 + ep.t1; + ep.v4 = ep.v4 + ep.v4 + ep.t3; + // ep.v4 += ep.t3; // u_1 + u_2 + 4u_3 + 6u_4 + ep.v2 = ep.t0 + ep.t0; + ep.v2 = ep.v2 + ep.v2 + ep.t2; + // ep.v2 += ep.t2; // 4u_1 + 6u_2 + u_3 + u_4 + ep.v1 = ep.t3 + ep.v2; // 5u_1 + 7u_2 + u_3 + 3u_4 + ep.v3 = ep.t2 + ep.v4; // u_1 + 3u_2 + 5u_3 + 7u_4 + + ep.q_pos_by_scaling = wire(p, WIRE.Q_POSEIDON2_EXTERNAL) * domainSep; + evals[18] = evals[18] + ep.q_pos_by_scaling * (ep.v1 - wire(p, WIRE.W_L_SHIFT)); + + evals[19] = evals[19] + ep.q_pos_by_scaling * (ep.v2 - wire(p, WIRE.W_R_SHIFT)); + + evals[20] = evals[20] + ep.q_pos_by_scaling * (ep.v3 - wire(p, WIRE.W_O_SHIFT)); + + evals[21] = evals[21] + ep.q_pos_by_scaling * (ep.v4 - wire(p, WIRE.W_4_SHIFT)); + } + + struct PoseidonInternalParams { + Fr u1; + Fr u2; + Fr u3; + Fr u4; + Fr u_sum; + Fr v1; + Fr v2; + Fr v3; + Fr v4; + Fr s1; + Fr q_pos_by_scaling; + } + + function accumulatePoseidonInternalRelation( + Fr[NUMBER_OF_ENTITIES] memory p, + Fr[NUMBER_OF_SUBRELATIONS] memory evals, + Fr domainSep + ) internal pure { + PoseidonInternalParams memory ip; + + Fr[4] memory INTERNAL_MATRIX_DIAGONAL = [ + FrLib.from(0x10dc6e9c006ea38b04b1e03b4bd9490c0d03f98929ca1d7fb56821fd19d3b6e7), + FrLib.from(0x0c28145b6a44df3e0149b3d0a30b3bb599df9756d4dd9b84a86b38cfb45a740b), + FrLib.from(0x00544b8338791518b2c7645a50392798b21f75bb60e3596170067d00141cac15), + FrLib.from(0x222c01175718386f2e2e82eb122789e352e105a3b8fa852613bc534433ee428b) + ]; + + // add round constants + ip.s1 = wire(p, WIRE.W_L) + wire(p, WIRE.Q_L); + + // apply s-box round + ip.u1 = ip.s1 * ip.s1 * ip.s1 * ip.s1 * ip.s1; + ip.u2 = wire(p, WIRE.W_R); + ip.u3 = wire(p, WIRE.W_O); + ip.u4 = wire(p, WIRE.W_4); + + // matrix mul with v = M_I * u 4 muls and 7 additions + ip.u_sum = ip.u1 + ip.u2 + ip.u3 + ip.u4; + + ip.q_pos_by_scaling = wire(p, WIRE.Q_POSEIDON2_INTERNAL) * domainSep; + + ip.v1 = ip.u1 * INTERNAL_MATRIX_DIAGONAL[0] + ip.u_sum; + evals[22] = evals[22] + ip.q_pos_by_scaling * (ip.v1 - wire(p, WIRE.W_L_SHIFT)); + + ip.v2 = ip.u2 * INTERNAL_MATRIX_DIAGONAL[1] + ip.u_sum; + evals[23] = evals[23] + ip.q_pos_by_scaling * (ip.v2 - wire(p, WIRE.W_R_SHIFT)); + + ip.v3 = ip.u3 * INTERNAL_MATRIX_DIAGONAL[2] + ip.u_sum; + evals[24] = evals[24] + ip.q_pos_by_scaling * (ip.v3 - wire(p, WIRE.W_O_SHIFT)); + + ip.v4 = ip.u4 * INTERNAL_MATRIX_DIAGONAL[3] + ip.u_sum; + evals[25] = evals[25] + ip.q_pos_by_scaling * (ip.v4 - wire(p, WIRE.W_4_SHIFT)); + } + + function scaleAndBatchSubrelations( + Fr[NUMBER_OF_SUBRELATIONS] memory evaluations, + Fr[NUMBER_OF_ALPHAS] memory subrelationChallenges + ) internal pure returns (Fr accumulator) { + accumulator = accumulator + evaluations[0]; + + for (uint256 i = 1; i < NUMBER_OF_SUBRELATIONS; ++i) { + accumulator = accumulator + evaluations[i] * subrelationChallenges[i - 1]; + } + } +} + +struct ShpleminiIntermediates { + Fr unshiftedScalar; + Fr shiftedScalar; + // Scalar to be multiplied by [1]₁ + Fr constantTermAccumulator; + // Accumulator for powers of rho + Fr batchingChallenge; + // Linear combination of multilinear (sumcheck) evaluations and powers of rho + Fr batchedEvaluation; + // 1/(z - r^{2^i}) for i = 0, ..., logSize, dynamically updated + Fr posInvertedDenominator; + // 1/(z + r^{2^i}) for i = 0, ..., logSize, dynamically updated + Fr negInvertedDenominator; + // v^{2i} * 1/(z - r^{2^i}) + Fr scalingFactorPos; + // v^{2i+1} * 1/(z + r^{2^i}) + Fr scalingFactorNeg; + // // Fold_i(r^{2^i}) reconstructed by Verifier + // Fr[CONST_PROOF_SIZE_LOG_N] foldPosEvaluations; +} + +library CommitmentSchemeLib { + using FrLib for Fr; + + function computeSquares(Fr r) internal pure returns (Fr[CONST_PROOF_SIZE_LOG_N] memory squares) { + squares[0] = r; + for (uint256 i = 1; i < CONST_PROOF_SIZE_LOG_N; ++i) { + squares[i] = squares[i - 1].sqr(); + } + } + + // Compute the evaluations A_l(r^{2^l}) for l = 0, ..., m-1 + function computeFoldPosEvaluations( + Fr[CONST_PROOF_SIZE_LOG_N] memory sumcheckUChallenges, + Fr batchedEvalAccumulator, + Fr[CONST_PROOF_SIZE_LOG_N] memory geminiEvaluations, + Fr[CONST_PROOF_SIZE_LOG_N] memory geminiEvalChallengePowers, + uint256 logSize + ) internal view returns (Fr[CONST_PROOF_SIZE_LOG_N] memory foldPosEvaluations) { + for (uint256 i = CONST_PROOF_SIZE_LOG_N; i > 0; --i) { + Fr challengePower = geminiEvalChallengePowers[i - 1]; + Fr u = sumcheckUChallenges[i - 1]; + + Fr batchedEvalRoundAcc = ( + (challengePower * batchedEvalAccumulator * Fr.wrap(2)) + - geminiEvaluations[i - 1] * (challengePower * (Fr.wrap(1) - u) - u) + ); + // Divide by the denominator + batchedEvalRoundAcc = batchedEvalRoundAcc * (challengePower * (Fr.wrap(1) - u) + u).invert(); + + if (i <= logSize) { + batchedEvalAccumulator = batchedEvalRoundAcc; + foldPosEvaluations[i - 1] = batchedEvalRoundAcc; + } + } + + } +} + +interface IVerifier { + function verify(bytes calldata _proof, bytes32[] calldata _publicInputs) external view returns (bool); +} + + +abstract contract BaseHonkVerifier is IVerifier { + using FrLib for Fr; + + uint256 immutable n; + uint256 immutable logN; + uint256 immutable numPublicInputs; + + constructor(uint256 _n, uint256 _logN, uint256 _numPublicInputs) { + n = _n; + logN = _logN; + numPublicInputs = _numPublicInputs; + } + + error ProofLengthWrong(); + error PublicInputsLengthWrong(); + error SumcheckFailed(); + error ShpleminiFailed(); + + // Number of field elements in a ultra honk zero knowledge proof + uint256 constant PROOF_SIZE = 440; + + function loadVerificationKey() internal pure virtual returns (Honk.VerificationKey memory); + + function verify(bytes calldata proof, bytes32[] calldata publicInputs) public view override returns (bool) { + // Check the received proof is the expected size where each field element is 32 bytes + if (proof.length != PROOF_SIZE * 32) { + revert ProofLengthWrong(); + } + + Honk.VerificationKey memory vk = loadVerificationKey(); + Honk.Proof memory p = TranscriptLib.loadProof(proof); + + if (publicInputs.length != vk.publicInputsSize) { + revert PublicInputsLengthWrong(); + } + + // Generate the fiat shamir challenges for the whole protocol + // TODO(https://github.com/AztecProtocol/barretenberg/issues/1281): Add pubInputsOffset to VK or remove entirely. + Transcript memory t = TranscriptLib.generateTranscript(p, publicInputs, vk.circuitSize, vk.publicInputsSize, /*pubInputsOffset=*/1); + + // Derive public input delta + // TODO(https://github.com/AztecProtocol/barretenberg/issues/1281): Add pubInputsOffset to VK or remove entirely. + t.relationParameters.publicInputsDelta = computePublicInputDelta( + publicInputs, t.relationParameters.beta, t.relationParameters.gamma, /*pubInputsOffset=*/1 + ); + + // Sumcheck + bool sumcheckVerified = verifySumcheck(p, t); + if (!sumcheckVerified) revert SumcheckFailed(); + + bool shpleminiVerified = verifyShplemini(p, vk, t); + if (!shpleminiVerified) revert ShpleminiFailed(); + + return sumcheckVerified && shpleminiVerified; // Boolean condition not required - nice for vanity :) + } + + function computePublicInputDelta(bytes32[] memory publicInputs, Fr beta, Fr gamma, uint256 offset) + internal + view + returns (Fr publicInputDelta) + { + Fr numerator = Fr.wrap(1); + Fr denominator = Fr.wrap(1); + + Fr numeratorAcc = gamma + (beta * FrLib.from(n + offset)); + Fr denominatorAcc = gamma - (beta * FrLib.from(offset + 1)); + + { + for (uint256 i = 0; i < numPublicInputs; i++) { + Fr pubInput = FrLib.fromBytes32(publicInputs[i]); + + numerator = numerator * (numeratorAcc + pubInput); + denominator = denominator * (denominatorAcc + pubInput); + + numeratorAcc = numeratorAcc + beta; + denominatorAcc = denominatorAcc - beta; + } + } + + // Fr delta = numerator / denominator; // TOOO: batch invert later? + publicInputDelta = FrLib.div(numerator, denominator); + } + + function verifySumcheck(Honk.Proof memory proof, Transcript memory tp) internal view returns (bool verified) { + Fr roundTarget; + Fr powPartialEvaluation = Fr.wrap(1); + + // We perform sumcheck reductions over log n rounds ( the multivariate degree ) + for (uint256 round; round < logN; ++round) { + Fr[BATCHED_RELATION_PARTIAL_LENGTH] memory roundUnivariate = proof.sumcheckUnivariates[round]; + bool valid = checkSum(roundUnivariate, roundTarget); + if (!valid) revert SumcheckFailed(); + + Fr roundChallenge = tp.sumCheckUChallenges[round]; + + // Update the round target for the next rounf + roundTarget = computeNextTargetSum(roundUnivariate, roundChallenge); + powPartialEvaluation = partiallyEvaluatePOW(tp.gateChallenges[round], powPartialEvaluation, roundChallenge); + } + + // Last round + Fr grandHonkRelationSum = + RelationsLib.accumulateRelationEvaluations(proof.sumcheckEvaluations, tp.relationParameters, tp.alphas, powPartialEvaluation); + verified = (grandHonkRelationSum == roundTarget); + } + + function checkSum(Fr[BATCHED_RELATION_PARTIAL_LENGTH] memory roundUnivariate, Fr roundTarget) + internal + pure + returns (bool checked) + { + Fr totalSum = roundUnivariate[0] + roundUnivariate[1]; + checked = totalSum == roundTarget; + } + + // Return the new target sum for the next sumcheck round + function computeNextTargetSum(Fr[BATCHED_RELATION_PARTIAL_LENGTH] memory roundUnivariates, Fr roundChallenge) + internal + view + returns (Fr targetSum) + { + // TODO: inline + Fr[BATCHED_RELATION_PARTIAL_LENGTH] memory BARYCENTRIC_LAGRANGE_DENOMINATORS = [ + Fr.wrap(0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffec51), + Fr.wrap(0x00000000000000000000000000000000000000000000000000000000000002d0), + Fr.wrap(0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffff11), + Fr.wrap(0x0000000000000000000000000000000000000000000000000000000000000090), + Fr.wrap(0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffff71), + Fr.wrap(0x00000000000000000000000000000000000000000000000000000000000000f0), + Fr.wrap(0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593effffd31), + Fr.wrap(0x00000000000000000000000000000000000000000000000000000000000013b0) + ]; + + // To compute the next target sum, we evaluate the given univariate at a point u (challenge). + + // Performing Barycentric evaluations + // Compute B(x) + Fr numeratorValue = Fr.wrap(1); + for (uint256 i = 0; i < BATCHED_RELATION_PARTIAL_LENGTH; ++i) { + numeratorValue = numeratorValue * (roundChallenge - Fr.wrap(i)); + } + + // Calculate domain size N of inverses + Fr[BATCHED_RELATION_PARTIAL_LENGTH] memory denominatorInverses; + for (uint256 i = 0; i < BATCHED_RELATION_PARTIAL_LENGTH; ++i) { + Fr inv = BARYCENTRIC_LAGRANGE_DENOMINATORS[i]; + inv = inv * (roundChallenge - Fr.wrap(i)); + inv = FrLib.invert(inv); + denominatorInverses[i] = inv; + } + + for (uint256 i = 0; i < BATCHED_RELATION_PARTIAL_LENGTH; ++i) { + Fr term = roundUnivariates[i]; + term = term * denominatorInverses[i]; + targetSum = targetSum + term; + } + + // Scale the sum by the value of B(x) + targetSum = targetSum * numeratorValue; + } + + // Univariate evaluation of the monomial ((1-X_l) + X_l.B_l) at the challenge point X_l=u_l + function partiallyEvaluatePOW(Fr gateChallenge, Fr currentEvaluation, Fr roundChallenge) + internal + pure + returns (Fr newEvaluation) + { + Fr univariateEval = Fr.wrap(1) + (roundChallenge * (gateChallenge - Fr.wrap(1))); + newEvaluation = currentEvaluation * univariateEval; + } + + function verifyShplemini(Honk.Proof memory proof, Honk.VerificationKey memory vk, Transcript memory tp) + internal + view + returns (bool verified) + { + ShpleminiIntermediates memory mem; // stack + + // - Compute vector (r, r², ... , r²⁽ⁿ⁻¹⁾), where n = log_circuit_size + Fr[CONST_PROOF_SIZE_LOG_N] memory powers_of_evaluation_challenge = CommitmentSchemeLib.computeSquares(tp.geminiR); + + // Arrays hold values that will be linearly combined for the gemini and shplonk batch openings + Fr[NUMBER_OF_ENTITIES + CONST_PROOF_SIZE_LOG_N + 2] memory scalars; + Honk.G1Point[NUMBER_OF_ENTITIES + CONST_PROOF_SIZE_LOG_N + 2] memory commitments; + + mem.posInvertedDenominator = (tp.shplonkZ - powers_of_evaluation_challenge[0]).invert(); + mem.negInvertedDenominator = (tp.shplonkZ + powers_of_evaluation_challenge[0]).invert(); + + mem.unshiftedScalar = mem.posInvertedDenominator + (tp.shplonkNu * mem.negInvertedDenominator); + mem.shiftedScalar = + tp.geminiR.invert() * (mem.posInvertedDenominator - (tp.shplonkNu * mem.negInvertedDenominator)); + + scalars[0] = Fr.wrap(1); + commitments[0] = convertProofPoint(proof.shplonkQ); + + mem.batchingChallenge = Fr.wrap(1); + mem.batchedEvaluation = Fr.wrap(0); + + for (uint256 i = 1; i <= NUMBER_UNSHIFTED; ++i) { + scalars[i] = mem.unshiftedScalar.neg() * mem.batchingChallenge; + mem.batchedEvaluation = mem.batchedEvaluation + (proof.sumcheckEvaluations[i - 1] * mem.batchingChallenge); + mem.batchingChallenge = mem.batchingChallenge * tp.rho; + } + // g commitments are accumulated at r + for (uint256 i = NUMBER_UNSHIFTED + 1; i <= NUMBER_OF_ENTITIES; ++i) { + scalars[i] = mem.shiftedScalar.neg() * mem.batchingChallenge; + mem.batchedEvaluation = mem.batchedEvaluation + (proof.sumcheckEvaluations[i - 1] * mem.batchingChallenge); + mem.batchingChallenge = mem.batchingChallenge * tp.rho; + } + + commitments[1] = vk.qm; + commitments[2] = vk.qc; + commitments[3] = vk.ql; + commitments[4] = vk.qr; + commitments[5] = vk.qo; + commitments[6] = vk.q4; + commitments[7] = vk.qLookup; + commitments[8] = vk.qArith; + commitments[9] = vk.qDeltaRange; + commitments[10] = vk.qElliptic; + commitments[11] = vk.qAux; + commitments[12] = vk.qPoseidon2External; + commitments[13] = vk.qPoseidon2Internal; + commitments[14] = vk.s1; + commitments[15] = vk.s2; + commitments[16] = vk.s3; + commitments[17] = vk.s4; + commitments[18] = vk.id1; + commitments[19] = vk.id2; + commitments[20] = vk.id3; + commitments[21] = vk.id4; + commitments[22] = vk.t1; + commitments[23] = vk.t2; + commitments[24] = vk.t3; + commitments[25] = vk.t4; + commitments[26] = vk.lagrangeFirst; + commitments[27] = vk.lagrangeLast; + + // Accumulate proof points + commitments[28] = convertProofPoint(proof.w1); + commitments[29] = convertProofPoint(proof.w2); + commitments[30] = convertProofPoint(proof.w3); + commitments[31] = convertProofPoint(proof.w4); + commitments[32] = convertProofPoint(proof.zPerm); + commitments[33] = convertProofPoint(proof.lookupInverses); + commitments[34] = convertProofPoint(proof.lookupReadCounts); + commitments[35] = convertProofPoint(proof.lookupReadTags); + + // to be Shifted + commitments[36] = convertProofPoint(proof.w1); + commitments[37] = convertProofPoint(proof.w2); + commitments[38] = convertProofPoint(proof.w3); + commitments[39] = convertProofPoint(proof.w4); + commitments[40] = convertProofPoint(proof.zPerm); + + // Add contributions from A₀(r) and A₀(-r) to constant_term_accumulator: + // Compute the evaluations A_l(r^{2^l}) for l = 0, ..., logN - 1 + Fr[CONST_PROOF_SIZE_LOG_N] memory foldPosEvaluations = CommitmentSchemeLib.computeFoldPosEvaluations( + tp.sumCheckUChallenges, + mem.batchedEvaluation, + proof.geminiAEvaluations, + powers_of_evaluation_challenge, + logN + ); + + // Compute the Shplonk constant term contributions from A₀(±r) + mem.constantTermAccumulator = foldPosEvaluations[0] * mem.posInvertedDenominator; + mem.constantTermAccumulator = + mem.constantTermAccumulator + (proof.geminiAEvaluations[0] * tp.shplonkNu * mem.negInvertedDenominator); + mem.batchingChallenge = tp.shplonkNu.sqr(); + + // Compute Shplonk constant term contributions from Aₗ(±r^{2ˡ}) for l = 1, ..., m-1; + // Compute scalar multipliers for each fold commitment + for (uint256 i = 0; i < CONST_PROOF_SIZE_LOG_N - 1; ++i) { + bool dummy_round = i >= (logN - 1); + + if (!dummy_round) { + // Update inverted denominators + mem.posInvertedDenominator = (tp.shplonkZ - powers_of_evaluation_challenge[i + 1]).invert(); + mem.negInvertedDenominator = (tp.shplonkZ + powers_of_evaluation_challenge[i + 1]).invert(); + + // Compute the scalar multipliers for Aₗ(± r^{2ˡ}) and [Aₗ] + mem.scalingFactorPos = mem.batchingChallenge * mem.posInvertedDenominator; + mem.scalingFactorNeg = mem.batchingChallenge * tp.shplonkNu * mem.negInvertedDenominator; + // [Aₗ] is multiplied by -v^{2l}/(z-r^{2^l}) - v^{2l+1} /(z+ r^{2^l}) + scalars[NUMBER_OF_ENTITIES + 1 + i] = mem.scalingFactorNeg.neg() + mem.scalingFactorPos.neg(); + + // Accumulate the const term contribution given by + // v^{2l} * Aₗ(r^{2ˡ}) /(z-r^{2^l}) + v^{2l+1} * Aₗ(-r^{2ˡ}) /(z+ r^{2^l}) + Fr accumContribution = mem.scalingFactorNeg * proof.geminiAEvaluations[i + 1]; + accumContribution = accumContribution + mem.scalingFactorPos * foldPosEvaluations[i + 1]; + mem.constantTermAccumulator = mem.constantTermAccumulator + accumContribution; + // Update the running power of v + mem.batchingChallenge = mem.batchingChallenge * tp.shplonkNu * tp.shplonkNu; + } + + commitments[NUMBER_OF_ENTITIES + 1 + i] = convertProofPoint(proof.geminiFoldComms[i]); + } + + // Finalise the batch opening claim + commitments[NUMBER_OF_ENTITIES + CONST_PROOF_SIZE_LOG_N] = Honk.G1Point({x: 1, y: 2}); + scalars[NUMBER_OF_ENTITIES + CONST_PROOF_SIZE_LOG_N] = mem.constantTermAccumulator; + + Honk.G1Point memory quotient_commitment = convertProofPoint(proof.kzgQuotient); + + commitments[NUMBER_OF_ENTITIES + CONST_PROOF_SIZE_LOG_N + 1] = quotient_commitment; + scalars[NUMBER_OF_ENTITIES + CONST_PROOF_SIZE_LOG_N + 1] = tp.shplonkZ; // evaluation challenge + + Honk.G1Point memory P_0 = batchMul(commitments, scalars); + Honk.G1Point memory P_1 = negateInplace(quotient_commitment); + + return pairing(P_0, P_1); + } + + // This implementation is the same as above with different constants + function batchMul( + Honk.G1Point[NUMBER_OF_ENTITIES + CONST_PROOF_SIZE_LOG_N + 2] memory base, + Fr[NUMBER_OF_ENTITIES + CONST_PROOF_SIZE_LOG_N + 2] memory scalars + ) internal view returns (Honk.G1Point memory result) { + uint256 limit = NUMBER_OF_ENTITIES + CONST_PROOF_SIZE_LOG_N + 2; + assembly { + let success := 0x01 + let free := mload(0x40) + + // Write the original into the accumulator + // Load into memory for ecMUL, leave offset for eccAdd result + // base is an array of pointers, so we have to dereference them + mstore(add(free, 0x40), mload(mload(base))) + mstore(add(free, 0x60), mload(add(0x20, mload(base)))) + // Add scalar + mstore(add(free, 0x80), mload(scalars)) + success := and(success, staticcall(gas(), 7, add(free, 0x40), 0x60, free, 0x40)) + + let count := 0x01 + for {} lt(count, limit) { count := add(count, 1) } { + // Get loop offsets + let base_base := add(base, mul(count, 0x20)) + let scalar_base := add(scalars, mul(count, 0x20)) + + mstore(add(free, 0x40), mload(mload(base_base))) + mstore(add(free, 0x60), mload(add(0x20, mload(base_base)))) + // Add scalar + mstore(add(free, 0x80), mload(scalar_base)) + + success := and(success, staticcall(gas(), 7, add(free, 0x40), 0x60, add(free, 0x40), 0x40)) + // accumulator = accumulator + accumulator_2 + success := and(success, staticcall(gas(), 6, free, 0x80, free, 0x40)) + } + + // Return the result - i hate this + mstore(result, mload(free)) + mstore(add(result, 0x20), mload(add(free, 0x20))) + } + } +} + +contract HonkVerifier is BaseHonkVerifier(N, LOG_N, NUMBER_OF_PUBLIC_INPUTS) { + function loadVerificationKey() internal pure override returns (Honk.VerificationKey memory) { + return HonkVerificationKey.loadVerificationKey(); + } +} diff --git a/examples/CRISP/deploy/Deploy.s.sol b/examples/CRISP/deploy/Deploy.s.sol index 4c5e88486a..d858972074 100644 --- a/examples/CRISP/deploy/Deploy.s.sol +++ b/examples/CRISP/deploy/Deploy.s.sol @@ -25,13 +25,15 @@ import {ControlID} from "risc0/groth16/ControlID.sol"; import {CRISPProgram} from "../contracts/CRISPProgram.sol"; import {CRISPPolicy} from "../contracts/CRISPPolicy.sol"; import {CRISPChecker} from "../contracts/CRISPChecker.sol"; +import {IE3Program} from "@gnosis-guild/enclave/contracts/interfaces/IE3Program.sol"; import {IEnclave} from "@gnosis-guild/enclave/contracts/interfaces/IEnclave.sol"; -import {Semaphore} from "@semaphore-protocol/contracts/Semaphore.sol"; -import {SemaphoreVerifier} from "@semaphore-protocol/contracts/base/SemaphoreVerifier.sol"; -import {ISemaphoreVerifier} from "@semaphore-protocol/contracts/interfaces/ISemaphoreVerifier.sol"; +import {SemaphoreNoir} from "@semaphore-protocol/contracts/SemaphoreNoir.sol"; +import {SemaphoreNoirVerifier} from "@semaphore-protocol/contracts/base/SemaphoreNoirVerifier.sol"; +import {IVerifier} from "@semaphore-protocol/contracts/interfaces/ISemaphoreNoirVerifier.sol"; import {CRISPCheckerFactory} from "../contracts/CRISPCheckerFactory.sol"; import {CRISPPolicyFactory} from "../contracts/CRISPPolicyFactory.sol"; import {CRISPInputValidatorFactory} from "../contracts/CRISPInputValidatorFactory.sol"; +import {HonkVerifier} from "../contracts/CRISPVerifier.sol"; import {MockRISC0Verifier} from "../contracts/Mocks/MockRISC0Verifier.sol"; import {ImageID} from "../contracts/ImageID.sol"; @@ -157,14 +159,14 @@ contract CRISPProgramDeploy is Script { console2.log("Enclave Address: ", address(enclave)); console2.log("Verifier Address: ", address(verifier)); - SemaphoreVerifier semaphoreVerifier = new SemaphoreVerifier(); + SemaphoreNoirVerifier semaphoreVerifier = new SemaphoreNoirVerifier(); console2.log( - "Deployed SemaphoreVerifier to", + "Deployed SemaphoreNoirVerifier to", address(semaphoreVerifier) ); - Semaphore semaphore = new Semaphore( - ISemaphoreVerifier(address(semaphoreVerifier)) + SemaphoreNoir semaphore = new SemaphoreNoir( + IVerifier(address(semaphoreVerifier)) ); console2.log("Deployed Semaphore to", address(semaphore)); @@ -183,6 +185,9 @@ contract CRISPProgramDeploy is Script { address(inputValidatorFactory) ); + HonkVerifier honkVerifier = new HonkVerifier(); + console2.log("Deployed HonkVerifier to", address(honkVerifier)); + CRISPProgram crisp = new CRISPProgram( enclave, verifier, @@ -190,8 +195,12 @@ contract CRISPProgramDeploy is Script { checkerFactory, policyFactory, inputValidatorFactory, + honkVerifier, ImageID.VOTING_ID ); console2.log("Deployed CRISPProgram to", address(crisp)); + + enclave.enableE3Program(IE3Program(address(crisp))); + console2.log("Enabled E3 Program on Enclave"); } } diff --git a/examples/CRISP/docker-compose.yaml b/examples/CRISP/docker-compose.yaml index 48a25604be..42095512b8 100644 --- a/examples/CRISP/docker-compose.yaml +++ b/examples/CRISP/docker-compose.yaml @@ -1,24 +1,26 @@ services: enclave-dev: - user: devuser platform: linux/amd64 build: context: . args: USER_UID: ${USER_UID:-1000} - USER_GID: ${USER_GID:-1000} - USERNAME: devuser + USER_GID: ${USER_GID:-100} + USERNAME: ubuntu volumes: - ../..:/app - git-folder:/app/.git - - cargo-bin:/home/devuser/.cargo/bin - - cargo-registry:/home/devuser/.cargo/registry + - cargo-bin:/home/ubuntu/.cargo/bin + - cargo-registry:/home/ubuntu/.cargo/registry - server-target:/app/examples/CRISP/apps/server/target - evm-node-modules:/app/packages/evm/node_modules - root-node-modules:/app/node_modules - client-node-modules:/app/examples/CRISP/apps/client/node_modules - crisp-node-modules:/app/examples/CRISP/node_modules - crisp-foundry-cache:/app/examples/CRISP/out + - synpress-cache:/app/examples/CRISP/.cache-synpress + - test-results:/app/examples/CRISP/test-results + - playwright-report:/app/examples/CRISP/playwright-report entrypoint: - "" ports: @@ -27,8 +29,9 @@ services: - "4000:4000" command: > /bin/bash -c ' - sudo chown -R devuser:devuser /app && - sudo chown -R devuser:devuser /home/devuser && + sudo chown -R ubuntu:ubuntu /app && + sudo chown -R ubuntu:ubuntu /home/ubuntu && + sudo chmod -R 777 /app/examples/CRISP && tail -f /dev/null ' @@ -42,3 +45,6 @@ volumes: crisp-node-modules: crisp-foundry-cache: git-folder: + synpress-cache: + test-results: + playwright-report: diff --git a/examples/CRISP/foundry.toml b/examples/CRISP/foundry.toml index 5d2e4d85e0..26dd697d6b 100644 --- a/examples/CRISP/foundry.toml +++ b/examples/CRISP/foundry.toml @@ -5,7 +5,7 @@ libs = ["lib"] test = "tests" ffi = true fs_permissions = [{ access = "read-write", path = "./"}] -via_ir = true +via_ir = false optimizer = true optimizer-runs = 10_000_000 diff --git a/examples/CRISP/lib/risc0-ethereum b/examples/CRISP/lib/risc0-ethereum index 38591d7a13..c09ee29b38 160000 --- a/examples/CRISP/lib/risc0-ethereum +++ b/examples/CRISP/lib/risc0-ethereum @@ -1 +1 @@ -Subproject commit 38591d7a1302d437b76937bd3e0432005b33f616 +Subproject commit c09ee29b386d2b1486724509868d1115db36929f diff --git a/examples/CRISP/package.json b/examples/CRISP/package.json index 9014b34388..efc4fad224 100644 --- a/examples/CRISP/package.json +++ b/examples/CRISP/package.json @@ -24,7 +24,7 @@ "dependencies": { "@excubiae/contracts": "^0.4.0", "@gnosis-guild/enclave": "workspace:*", - "@semaphore-protocol/contracts": "^4.9.2", + "@semaphore-protocol/contracts": "github:hmzakhalid/semaphore-noir#dist-contracts", "@zk-kit/lean-imt.sol": "2.0.0", "poseidon-solidity": "^0.0.5", "solady": "^0.1.13" @@ -40,8 +40,8 @@ "@nomicfoundation/hardhat-verify": "^2.0.0", "@nomicfoundation/ignition-core": "^0.15.5", "@playwright/test": "1.52.0", - "playwright": "1.52.0", "@synthetixio/synpress": "^4.1.0", + "@synthetixio/synpress-cache": "^0.0.12", "@typechain/ethers-v6": "^0.5.0", "@typechain/hardhat": "^9.0.0", "@types/chai": "^4.2.0", @@ -50,10 +50,11 @@ "hardhat": "^2.22.10", "hardhat-deploy": "^0.12.4", "hardhat-gas-reporter": "^1.0.8", + "playwright": "1.52.0", "solidity-coverage": "^0.8.1", "ts-node": "^10.9.2", "typechain": "^8.3.0", - "typescript": "^5.5.4", + "typescript": "5.8.3", "wait-on": "^8.0.3" }, "packageManager": "pnpm@10.7.1+sha512.2d92c86b7928dc8284f53494fb4201f983da65f0fb4f0d40baafa5cf628fa31dae3e5968f12466f17df7e97310e30f343a648baea1b9b350685dafafffdf5808" diff --git a/examples/CRISP/playwright.config.ts b/examples/CRISP/playwright.config.ts index 9de2190975..85b252f894 100644 --- a/examples/CRISP/playwright.config.ts +++ b/examples/CRISP/playwright.config.ts @@ -2,9 +2,10 @@ import { defineConfig } from "@playwright/test"; export default defineConfig({ testDir: "./test", - timeout: 3 * 60 * 1000, + timeout: 5 * 60 * 1000, use: { baseURL: "http://localhost:3000", + actionTimeout: 60 * 1000, }, retries: process.env.CI ? 2 : 0, fullyParallel: true, diff --git a/examples/CRISP/scripts/compile_circuits.sh b/examples/CRISP/scripts/compile_circuits.sh new file mode 100755 index 0000000000..16845e1cd6 --- /dev/null +++ b/examples/CRISP/scripts/compile_circuits.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +set -euo pipefail + +# Ensure we're in the right directory +cd "$(dirname "$0")/.." + +# Run the compilation script +./scripts/tasks/compile_circuits.sh \ No newline at end of file diff --git a/examples/CRISP/scripts/tasks/compile_circuits.sh b/examples/CRISP/scripts/tasks/compile_circuits.sh new file mode 100755 index 0000000000..5fa618f260 --- /dev/null +++ b/examples/CRISP/scripts/tasks/compile_circuits.sh @@ -0,0 +1,47 @@ +#!/usr/bin/env bash + +set -euo pipefail + +echo "noir" +# Ensure we're in the right directory +cd /app/examples/CRISP + +# Compile the circuit +echo "Compiling Noir circuit..." +if ! (cd circuits && nargo compile); then + echo "Error: Noir circuit compilation failed" + exit 1 +fi + +# Create the public circuits directory +echo "Creating public circuits directory..." +mkdir -p apps/client/libs/noir + +# Copy the compiled artifacts +echo "Copying circuit artifacts..." +if ! cp -r circuits/target/* apps/client/libs/noir/; then + echo "Error: Failed to copy circuit artifacts" + exit 1 +fi + +# Generate the Verifier +echo "Generating Verifier Key..." +if ! bb write_vk -b circuits/target/*.json -o circuits/target --oracle_hash keccak; then + echo "Error: Failed to generate Verifier Key" + exit 1 +fi + +echo "Generating Solidity Verifier..." +if ! bb write_solidity_verifier -k circuits/target/vk -o circuits/target/CRISPVerifier.sol; then + echo "Error: Failed to generate Solidity Verifier" + exit 1 +fi + +# Copy the Solidity Verifier to the contracts folder +echo "Copying Solidity Verifier to contracts folder..." +if ! cp circuits/target/CRISPVerifier.sol contracts/CRISPVerifier.sol; then + echo "Error: Failed to copy Solidity Verifier to contracts folder" + exit 1 +fi + +echo "Noir setup completed successfully" \ No newline at end of file diff --git a/examples/CRISP/scripts/tasks/dev.sh b/examples/CRISP/scripts/tasks/dev.sh index d6ea53d614..3c22a72aca 100755 --- a/examples/CRISP/scripts/tasks/dev.sh +++ b/examples/CRISP/scripts/tasks/dev.sh @@ -33,6 +33,7 @@ trap cleanup INT TERM (cd /app && pnpm install --frozen-lockfile) + concurrently \ -ks first \ --names "ANVIL,DEPLOY,NODES" \ diff --git a/examples/CRISP/scripts/tasks/dev_cipher.sh b/examples/CRISP/scripts/tasks/dev_cipher.sh index 4207ec8f1d..42ae4f6ab9 100755 --- a/examples/CRISP/scripts/tasks/dev_cipher.sh +++ b/examples/CRISP/scripts/tasks/dev_cipher.sh @@ -2,6 +2,9 @@ set -euo pipefail +# nuke past installations as we are adding these nodes to the contract +rm -rf /app/examples/CRISP/.enclave/* + PRIVATE_KEY="0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" enclave wallet set --name ag --private-key "$PRIVATE_KEY" @@ -17,6 +20,7 @@ CN3=$(cat enclave.config.yaml | yq '.nodes.cn3.address') cd /app + # Add ciphernodes using variables from config.sh pnpm ciphernode:add --ciphernode-address "$CN1" --network "localhost" pnpm ciphernode:add --ciphernode-address "$CN2" --network "localhost" diff --git a/examples/CRISP/scripts/tasks/dev_program.sh b/examples/CRISP/scripts/tasks/dev_program.sh new file mode 100755 index 0000000000..86e576e71a --- /dev/null +++ b/examples/CRISP/scripts/tasks/dev_program.sh @@ -0,0 +1,9 @@ + +#!/usr/bin/env bash + +set -e + +export CARGO_INCREMENTAL=1 +export RISC0_DEV_MODE=1 + +(cd ./apps/program && cargo run --bin crisp-program) diff --git a/examples/CRISP/scripts/tasks/dev_server.sh b/examples/CRISP/scripts/tasks/dev_server.sh index 67929716eb..7007fdf15f 100755 --- a/examples/CRISP/scripts/tasks/dev_server.sh +++ b/examples/CRISP/scripts/tasks/dev_server.sh @@ -1,8 +1,7 @@ #!/usr/bin/env bash -set -euo pipefail +set -e export CARGO_INCREMENTAL=1 -export RISC0_DEV_MODE=1 (cd ./apps/server && cargo run --bin server) diff --git a/examples/CRISP/scripts/tasks/dev_services.sh b/examples/CRISP/scripts/tasks/dev_services.sh index 43385dfad6..882c2d0662 100755 --- a/examples/CRISP/scripts/tasks/dev_services.sh +++ b/examples/CRISP/scripts/tasks/dev_services.sh @@ -4,5 +4,6 @@ set -euo pipefail concurrently -kr \ "./scripts/tasks/dev_cipher.sh" \ + "./scripts/tasks/dev_program.sh" \ "sleep 3 && ./scripts/tasks/dev_server.sh" \ - "./scripts/tasks/dev_client.sh" + "wait-on tcp:4001 && wait-on tcp:4000 && ./scripts/tasks/dev_client.sh" diff --git a/examples/CRISP/scripts/tasks/dockerize.sh b/examples/CRISP/scripts/tasks/dockerize.sh index ca9b3493ae..99c7ad1c2d 100755 --- a/examples/CRISP/scripts/tasks/dockerize.sh +++ b/examples/CRISP/scripts/tasks/dockerize.sh @@ -25,7 +25,8 @@ function run_in_docker() { else # Not in container, start Docker and run inside echo "Running outside container, starting Docker and executing command" - docker compose up -d # ensure our container is running + # Passing in the following on first run should theoretically bake the current group and user id into the container so if you build locally using this script the container shouldn't clobber your files with the wrong user + USER_UID=$(id -u) USER_GID=$(id -g) docker compose up -d # ensure our container is running if [ $# -eq 0 ]; then docker compose exec enclave-dev bash diff --git a/examples/CRISP/scripts/tasks/setup.sh b/examples/CRISP/scripts/tasks/setup.sh index 061e6403d8..2ecaed0e03 100755 --- a/examples/CRISP/scripts/tasks/setup.sh +++ b/examples/CRISP/scripts/tasks/setup.sh @@ -12,10 +12,15 @@ echo "pnpm install" echo "evm" (cd /app/packages/evm && pnpm compile) echo "ciphernode" -(cd /app/packages/ciphernode && cargo build && cargo install --path ./enclave --force) +(cd /app && cargo build -p e3-cli && cargo install --path crates/cli) +echo "program" +(cd ./apps/program && cargo build --bin crisp-program) echo "server" (cd ./apps/server && [[ ! -f .env ]] && cp .env.example .env; cargo build --bin cli && cargo build --bin server) echo "crisp-wasm-crypto" (cd ./apps/wasm-crypto && cargo check) echo "client" (cd ./apps/client && if [[ ! -f .env ]]; then cp .env.example .env; fi) +# echo "noir" +# ./scripts/tasks/compile_circuits.sh +echo "Skipping circuit compilation - using pre-compiled circuits" diff --git a/examples/CRISP/test/crisp.spec.ts b/examples/CRISP/test/crisp.spec.ts index c6bce5aae0..e3858555d3 100644 --- a/examples/CRISP/test/crisp.spec.ts +++ b/examples/CRISP/test/crisp.spec.ts @@ -53,7 +53,7 @@ test("CRISP smoke test", async ({ await page.waitForTimeout(1000); await metamask.confirmTransaction(); await page.locator('button:has-text("Cast Vote")').click(); - await page.waitForTimeout(60000); + await page.waitForTimeout(180_000); await page.locator('a:has-text("Historic polls")').click(); await expect(page.locator("h1")).toHaveText("Historic polls"); await expect( @@ -62,4 +62,4 @@ test("CRISP smoke test", async ({ await expect( page.locator("[data-test-id='poll-0-0'] [data-test-id='poll-result-1'] h3"), ).toHaveText("0%"); -}); +}); \ No newline at end of file diff --git a/examples/CRISP/test/wallet-setup/basic.setup.ts b/examples/CRISP/test/wallet-setup/basic.setup.ts index 115a9a64b2..b40beac19c 100644 --- a/examples/CRISP/test/wallet-setup/basic.setup.ts +++ b/examples/CRISP/test/wallet-setup/basic.setup.ts @@ -17,4 +17,4 @@ export default defineWalletSetup(PASSWORD, async (context, walletPage) => { symbol: "ETH", }; await metamask.addNetwork(customNetwork); -}); +}); \ No newline at end of file diff --git a/install b/install new file mode 100755 index 0000000000..b52be86e25 --- /dev/null +++ b/install @@ -0,0 +1,203 @@ +#!/bin/bash + +set -e + +GITHUB_REPO="gnosisguild/enclave" +BINARY_NAME="enclaveup" +INSTALL_DIR="$HOME/.local/bin" + +log_info() { + echo "$1" +} + +log_success() { + echo "$1" +} + +log_warning() { + echo "$1" +} + +log_error() { + echo "$1" >&2 +} + +detect_platform() { + local os="" + local arch="" + case "$(uname -s)" in + Linux*) + os="linux" + case "$(uname -m)" in + x86_64) + arch="x86_64" + ;; + arm64|aarch64) + arch="aarch64" + ;; + *) + log_error "Unsupported Linux architecture: $(uname -m)" + exit 1 + ;; + esac + ;; + Darwin*) + os="macos" + case "$(uname -m)" in + x86_64) + arch="aarch64" + log_info "Intel Mac detected - using Apple Silicon binary (runs via Rosetta 2)" + ;; + arm64|aarch64) + arch="aarch64" + ;; + *) + log_error "Unsupported macOS architecture: $(uname -m)" + exit 1 + ;; + esac + ;; + *) + log_error "Unsupported operating system: $(uname -s)" + exit 1 + ;; + esac + + echo "${os}-${arch}" +} + +command_exists() { + command -v "$1" >/dev/null 2>&1 +} + +download_file() { + local url="$1" + local output="$2" + + if command_exists curl; then + curl -fsSL "$url" -o "$output" + elif command_exists wget; then + wget -q "$url" -O "$output" + else + log_error "Neither curl nor wget is available. Please install one of them." + exit 1 + fi +} + +get_latest_release() { + local api_url="https://api.github.com/repos/${GITHUB_REPO}/releases/latest" + local temp_file=$(mktemp) + + log_info "Fetching latest release information..." + + if ! download_file "$api_url" "$temp_file"; then + log_error "Failed to fetch release information from GitHub API" + rm -f "$temp_file" + exit 1 + fi + local tag_name=$(grep -o '"tag_name"[[:space:]]*:[[:space:]]*"[^"]*"' "$temp_file" | cut -d'"' -f4) + + if [ -z "$tag_name" ]; then + log_error "Failed to parse release information" + rm -f "$temp_file" + exit 1 + fi + + rm -f "$temp_file" + echo "$tag_name" +} + +get_download_url() { + local platform="$1" + local api_url="https://api.github.com/repos/${GITHUB_REPO}/releases/latest" + local temp_file=$(mktemp) + + if ! download_file "$api_url" "$temp_file"; then + log_error "Failed to fetch release information" + rm -f "$temp_file" + exit 1 + fi + local asset_pattern="${BINARY_NAME}-${platform}" + local download_url=$(grep -o '"browser_download_url"[[:space:]]*:[[:space:]]*"[^"]*'"$asset_pattern"'[^"]*"' "$temp_file" | cut -d'"' -f4) + + if [ -z "$download_url" ]; then + log_error "No compatible binary found for platform: $platform" + log_info "Available assets:" + grep -o '"name"[[:space:]]*:[[:space:]]*"[^"]*"' "$temp_file" | cut -d'"' -f4 | sed 's/^/ - /' + rm -f "$temp_file" + exit 1 + fi + + rm -f "$temp_file" + echo "$download_url" +} + +main() { + log_info "Enclave Installer" + local platform + platform=$(detect_platform) + log_info "Detected platform: $platform" + local version + version=$(get_latest_release) + log_info "Latest version: $version" + local download_url + download_url=$(get_download_url "$platform") + log_info "Download URL: $download_url" + log_info "Creating install directory: $INSTALL_DIR" + mkdir -p "$INSTALL_DIR" + local temp_file=$(mktemp) + local asset_name=$(basename "$download_url") + + log_info "Downloading $asset_name..." + if ! download_file "$download_url" "$temp_file"; then + log_error "Failed to download $asset_name" + rm -f "$temp_file" + exit 1 + fi + local target_path="$INSTALL_DIR/$BINARY_NAME" + log_info "Extracting to $target_path..." + + if ! tar -xzf "$temp_file" -C "$INSTALL_DIR" --strip-components=0 "$BINARY_NAME" 2>/dev/null; then + # Extracting without specifying the binary name (in case the structure is different) + if ! tar -xzf "$temp_file" -O | dd of="$target_path" 2>/dev/null; then + log_error "Failed to extract binary from tarball" + rm -f "$temp_file" + exit 1 + fi + fi + + rm -f "$temp_file" + chmod +x "$target_path" + log_success "Successfully installed $BINARY_NAME to $target_path" + + if [[ ":$PATH:" != *":$INSTALL_DIR:"* ]]; then + log_warning "$INSTALL_DIR is not in your PATH" + echo "" + echo "To add it to your PATH, run one of the following:" + echo "" + echo " # For bash users:" + echo " echo 'export PATH=\"$INSTALL_DIR:\$PATH\"' >> ~/.bashrc" + echo " source ~/.bashrc" + echo "" + echo " # For zsh users:" + echo " echo 'export PATH=\"$INSTALL_DIR:\$PATH\"' >> ~/.zshrc" + echo " source ~/.zshrc" + echo "" + echo " # For fish users:" + echo " fish_add_path $INSTALL_DIR" + echo "" + fi + + echo "" + log_success "Installation complete!" + echo "" + echo "You can now use $BINARY_NAME to install the Enclave CLI:" + echo "" + echo " $BINARY_NAME install # Install the latest enclave CLI" + echo " $BINARY_NAME update # Update to the latest version" + echo " $BINARY_NAME uninstall # Remove the enclave CLI" + echo " $BINARY_NAME --help # Show help" + echo "" +} + +main "$@" \ No newline at end of file diff --git a/package.json b/package.json index cadc7e2fa1..01f373e5f5 100644 --- a/package.json +++ b/package.json @@ -10,20 +10,20 @@ }, "scripts": { "clean": "cd packages/evm && pnpm clean", - "compile": "pnpm evm:compile && pnpm ciphernode:build", + "compile": "pnpm evm:build && pnpm sdk:build && pnpm react:build && pnpm ciphernode:build", "lint": "pnpm evm:lint && pnpm ciphernode:lint", "typechain": "pnpm evm:typechain", - "test": "pnpm evm:test && pnpm ciphernode:test", + "test": "pnpm evm:test && pnpm ciphernode:test && pnpm sdk:test", "test:integration": "cd ./tests/integration && ./test.sh", "coverage": "pnpm evm:coverage", "prepare": "husky", - "enclave": "cd packages/ciphernode && ./scripts/launch.sh", - "ciphernode:lint": "cd packages/ciphernode && cargo fmt -- --check", + "enclave": "cd crates && ./scripts/launch.sh", + "ciphernode:lint": "cargo fmt -- --check", "ciphernode:add": "cd packages/evm && pnpm ciphernode:add", "ciphernode:remove": "cd packages/evm && pnpm ciphernode:remove", - "ciphernode:test": "cd packages/ciphernode && ./scripts/test.sh", - "ciphernode:build": "cd packages/ciphernode && cargo build --release", - "preciphernode:build": "pnpm evm:compile", + "ciphernode:test": "cd crates && ./scripts/test.sh", + "ciphernode:build": "cargo build --release", + "preciphernode:build": "pnpm evm:build", "committee:new": "cd packages/evm && pnpm committee:new", "committee:publish": "cd packages/evm && pnpm hardhat committee:publish", "e3:activate": "cd packages/evm && pnpm -s hardhat e3:activate", @@ -31,12 +31,26 @@ "e3:publishCiphertext": "cd packages/evm && pnpm hardhat e3:publishCiphertext", "evm:install": "cd packages/evm && pnpm install", "evm:node": "cd packages/evm && pnpm hardhat node", - "evm:compile": "cd packages/evm && pnpm compile", + "evm:build": "cd packages/evm && pnpm compile", "evm:lint": "cd packages/evm && pnpm lint", "evm:typechain": "cd packages/evm && pnpm typechain", "evm:test": "cd packages/evm && pnpm test", "evm:coverage": "cd packages/evm && pnpm coverage", - "evm:release": "cd packages/evm && pnpm release" + "evm:release": "cd packages/evm && pnpm release", + "react:build": "cd packages/enclave-react && pnpm build", + "sdk:build": "cd packages/enclave-sdk && pnpm build", + "sdk:test": "cd packages/enclave-sdk && pnpm test", + "sdk:release": "cd packages/enclave-sdk && pnpm release", + "wasm:release": "cd crates/wasm && pnpm release", + "config:release": "cd packages/enclave-config && pnpm release", + "react:release": "cd packages/enclave-react && pnpm release", + "npm:release": "pnpm build && pnpm config:release && pnpm evm:release && pnpm wasm:release && pnpm sdk:release && pnpm react:release", + "support:build": "cd crates/support && ./scripts/build.sh", + "build": "pnpm compile", + "changeset": "changeset", + "version": "changeset version", + "wasm:build": "cd ./crates/wasm && pnpm build", + "release": "pnpm build && changeset publish" }, "workspaces": [ "packages/evm", @@ -46,6 +60,16 @@ ], "packageManager": "pnpm@10.7.1+sha512.2d92c86b7928dc8284f53494fb4201f983da65f0fb4f0d40baafa5cf628fa31dae3e5968f12466f17df7e97310e30f343a648baea1b9b350685dafafffdf5808", "devDependencies": { - "husky": "^9.1.7" + "husky": "^9.1.7", + "@changesets/cli": "^2.27.1" + }, + "pnpm": { + "overrides": { + "@types/node": "22.7.5", + "tsup": "8.5.0", + "typescript": "5.8.3", + "undici-types": "6.19.8", + "viem": "2.30.6" + } } } diff --git a/packages/ciphernode/Cargo.toml b/packages/ciphernode/Cargo.toml deleted file mode 100644 index 3ce3bd65e1..0000000000 --- a/packages/ciphernode/Cargo.toml +++ /dev/null @@ -1,112 +0,0 @@ -[workspace] -members = [ - "aggregator", - "config", - "crypto", - "data", - "e3_request", - "enclave", - "enclave_core", - "events", - "evm", - "fhe", - "keyshare", - "logger", - "net", - "sortition", - "test_helpers", - "tests", -] -resolver = "2" - -[workspace.package] -version = "0.1.0" -edition = "2021" - -[workspace.dependencies] -aggregator = { path = "./aggregator" } -config = { path = "./config" } -crypto = { path = "./crypto" } -data = { path = "./data" } -e3_request = { path = "./e3_request" } -enclave = { path = "./enclave" } -enclave_core = { path = "./enclave_core" } -events = { path = "./events" } -evm = { path = "./evm" } -fhe = { path = "./fhe" } -keyshare = { path = "./keyshare" } -logger = { path = "./logger" } -net = { path = "./net" } -sortition = { path = "./sortition" } -test_helpers = { package = "test-helpers", path = "./test_helpers" } -tests = { path = "./tests" } - -actix = "0.13.5" -actix-web = "4.10.2" -aes-gcm = "0.10.3" -alloy = { version = "0.8", features = ["node-bindings", "full"] } -alloy-primitives = { version = "0.8", default-features = false, features = [ - "rlp", - "serde", - "std", -] } -alloy-sol-types = "0.8" -alloy-dyn-abi = "1.1.0" -argon2 = "0.5.2" -anyhow = "1.0.86" -async-std = { version = "1.12", features = ["attributes"] } -async-trait = "0.1" -bincode = "1.3.3" -bloom = "0.3.2" -bs58 = "0.5.1" -base64 = "0.22.1" -clap = { version = "4.5.17", features = ["derive"] } -compile-time = "0.2.0" -dirs = "5.0.1" -dialoguer = "0.11.0" -fhe_rs = { package = "fhe", git = "https://github.com/gnosisguild/fhe.rs", branch = "feature/greco-integration" } -fhe-traits = { git = "https://github.com/gnosisguild/fhe.rs", branch = "feature/greco-integration" } -fhe-math = { git = "https://github.com/gnosisguild/fhe.rs.git", branch = "feature/greco-integration" } -fhe-util = { git = "https://github.com/gnosisguild/fhe.rs", branch = "feature/greco-integration" } -figment = { version = "0.10.19", features = ["yaml", "test"] } -futures = "0.3.30" -futures-util = "0.3" -hex = "0.4.3" -lazy_static = "1.5.0" -num = "0.4.3" -num-bigint = "0.4.6" -num-traits = "0.2" -once_cell = "1.19.0" -opentelemetry = "0.29.0" -opentelemetry-otlp = { version = "0.29.0", features = ["grpc-tonic"] } -opentelemetry_sdk = "0.29.0" -opentelemetry-stdout = "0.29.0" -path-clean = "1.0.1" -petname = "2.0.2" -phf = { version = "0.11", features = ["macros"] } -rand_chacha = "0.3.1" -rand = "0.8.5" -reqwest = "0.12.15" -serde = { version = "1.0.208", features = ["derive"] } -serde_json = "1.0.133" -sled = "0.34.7" -serde_yaml = "0.9.34" -sha2 = "0.10.8" -shellexpand = "3.1.0" -tempfile = "3.14.0" -tokio = { version = "1.38", features = ["full"] } -tracing = "0.1.37" -tracing-opentelemetry = "0.30.0" -tracing-subscriber = { version = "0.3", features = ["env-filter", "time"] } -url = "2.5.4" -libp2p = { version = "0.54.1", features = [ - "gossipsub", - "identify", - "kad", - "macros", - "mdns", - "ping", - "quic", - "tokio", -]} -zeroize = "1.6.0" diff --git a/packages/ciphernode/Dockerfile b/packages/ciphernode/Dockerfile deleted file mode 100644 index 5a6caacb73..0000000000 --- a/packages/ciphernode/Dockerfile +++ /dev/null @@ -1,92 +0,0 @@ -FROM node:22 AS evm-builder - -WORKDIR /build/packages/evm -COPY ./packages/evm ./ - -RUN npm install -g corepack -RUN corepack enable - -RUN pnpm install && pnpm compile - -# Build stage -FROM rust:1.81 AS ciphernode-builder - -# Force incremental -ENV CARGO_INCREMENTAL=1 -ENV RUSTC_FORCE_INCREMENTAL=1 -ENV CARGO_BUILD_JOBS=8 - -# Create build directory -WORKDIR /build/packages/ciphernode -COPY --from=evm-builder /build/packages/evm/artifacts ../evm/artifacts -COPY --from=evm-builder /build/packages/evm/deployments ../evm/deployments - -# Copy workpace Cargo.toml -COPY ./packages/ciphernode/Cargo.toml ./Cargo.toml -COPY ./packages/ciphernode/Cargo.lock ./Cargo.lock -COPY ./packages/ciphernode/aggregator/Cargo.toml ./aggregator/Cargo.toml -COPY ./packages/ciphernode/config/Cargo.toml ./config/Cargo.toml -COPY ./packages/ciphernode/crypto/Cargo.toml ./crypto/Cargo.toml -COPY ./packages/ciphernode/data/Cargo.toml ./data/Cargo.toml -COPY ./packages/ciphernode/e3_request/Cargo.toml ./e3_request/Cargo.toml -COPY ./packages/ciphernode/enclave/Cargo.toml ./enclave/Cargo.toml -COPY ./packages/ciphernode/enclave_core/Cargo.toml ./enclave_core/Cargo.toml -COPY ./packages/ciphernode/enclave_core/build.rs ./enclave_core/build.rs -COPY ./packages/ciphernode/events/Cargo.toml ./events/Cargo.toml -COPY ./packages/ciphernode/evm/Cargo.toml ./evm/Cargo.toml -COPY ./packages/ciphernode/fhe/Cargo.toml ./fhe/Cargo.toml -COPY ./packages/ciphernode/keyshare/Cargo.toml ./keyshare/Cargo.toml -COPY ./packages/ciphernode/logger/Cargo.toml ./logger/Cargo.toml -COPY ./packages/ciphernode/net/Cargo.toml ./net/Cargo.toml -COPY ./packages/ciphernode/sortition/Cargo.toml ./sortition/Cargo.toml -COPY ./packages/ciphernode/test_helpers/Cargo.toml ./test_helpers/Cargo.toml -COPY ./packages/ciphernode/tests/Cargo.toml ./tests/Cargo.toml -COPY ./packages/ciphernode/rust-toolchain.toml . - -# Copy commons package -COPY ./packages/commons ../commons - -RUN for d in ./*/ ; do \ - if [ -f "$d/Cargo.toml" ]; then \ - mkdir -p "$d/src" && \ - echo "fn main() {}" > "$d/src/lib.rs"; \ - fi \ - done - -RUN cargo build --release - -COPY ./packages/ciphernode . - -RUN find . -name "*.rs" -exec touch {} + -RUN cargo build --release - -# Runtime stage -FROM debian:stable-slim - -# Install runtime dependencies -RUN apt-get update && apt-get install -y --no-install-recommends iptables dnsutils iputils-ping ca-certificates jq && \ - apt-get clean && rm -rf /var/lib/apt/lists/* - -# Create non-root user -RUN useradd -m -u 1000 -s /bin/bash ciphernode - -# Create necessary directories with proper permissions -RUN mkdir -p /home/ciphernode/.config/enclave \ - /home/ciphernode/.local/share/enclave \ - /run/secrets && \ - chown -R ciphernode:ciphernode /home/ciphernode /run/secrets - -# Switch to non-root user -USER ciphernode -WORKDIR /home/ciphernode - -# Copy binary from builder -COPY --from=ciphernode-builder --chown=ciphernode:ciphernode /build/packages/ciphernode/target/release/enclave /usr/local/bin/ -COPY --from=ciphernode-builder --chmod=755 --chown=ciphernode:ciphernode /build/packages/ciphernode/ciphernode-entrypoint.sh /usr/local/bin/ - -# Environment variables for configuration -ENV CONFIG_DIR=/home/ciphernode/.config/enclave -ENV DATA_DIR=/home/ciphernode/.local/share/enclave - -# Add entrypoint script -ENTRYPOINT ["ciphernode-entrypoint.sh"] diff --git a/packages/ciphernode/aggregator/Cargo.toml b/packages/ciphernode/aggregator/Cargo.toml deleted file mode 100644 index 50de627b7d..0000000000 --- a/packages/ciphernode/aggregator/Cargo.toml +++ /dev/null @@ -1,18 +0,0 @@ -[package] -name = "aggregator" -version.workspace = true -edition.workspace = true - -[dependencies] -actix = { workspace = true } -anyhow = { workspace = true } -serde = { workspace = true } -bincode = { workspace = true } -config = { workspace = true } -async-trait = { workspace = true } -events = { workspace = true } -fhe = { workspace = true } -sortition = { workspace = true } -e3_request = { workspace = true } -data = { workspace = true } -tracing = { workspace = true } diff --git a/packages/ciphernode/crypto/Cargo.toml b/packages/ciphernode/crypto/Cargo.toml deleted file mode 100644 index 095f5e45eb..0000000000 --- a/packages/ciphernode/crypto/Cargo.toml +++ /dev/null @@ -1,14 +0,0 @@ -[package] -name = "crypto" -version.workspace = true -edition.workspace = true - -[dependencies] -aes-gcm = { workspace = true } -argon2 = { workspace = true } -rand = { workspace = true } -zeroize = { workspace = true } -anyhow = { workspace = true } -tokio = { workspace = true } -config = { workspace = true } -async-trait = { workspace = true } \ No newline at end of file diff --git a/packages/ciphernode/e3_request/Cargo.toml b/packages/ciphernode/e3_request/Cargo.toml deleted file mode 100644 index d236518a07..0000000000 --- a/packages/ciphernode/e3_request/Cargo.toml +++ /dev/null @@ -1,15 +0,0 @@ -[package] -name = "e3_request" -version.workspace = true -edition.workspace = true - -[dependencies] -actix = { workspace = true } -events = { workspace = true } -data = { workspace = true} -anyhow = { workspace = true } -serde = { workspace = true } -config = { workspace = true } -bincode = { workspace = true } -async-trait = { workspace = true } -tracing = { workspace = true } diff --git a/packages/ciphernode/enclave_core/src/helpers/shutdown.rs b/packages/ciphernode/enclave_core/src/helpers/shutdown.rs deleted file mode 100644 index 1736b648ef..0000000000 --- a/packages/ciphernode/enclave_core/src/helpers/shutdown.rs +++ /dev/null @@ -1,31 +0,0 @@ -use actix::Recipient; -use anyhow::Result; -use events::{EnclaveEvent, Shutdown}; -use std::time::Duration; -use tokio::{ - signal::unix::{signal, SignalKind}, - task::JoinHandle, -}; -use tracing::info; - -pub async fn listen_for_shutdown(bus: Recipient, handle: JoinHandle>) { - let mut sigterm = - signal(SignalKind::terminate()).expect("Failed to create SIGTERM signal stream"); - - sigterm.recv().await; - info!("SIGTERM received, initiating graceful shutdown..."); - - // Stop the actor system - let _ = bus.send(EnclaveEvent::from(Shutdown)).await; - - // Abort the spawned task - handle.abort(); - - // Wait for all actor processes to disconnect - tokio::time::sleep(Duration::from_secs(2)).await; - - // Wait for the task to finish - let _ = handle.await; - - info!("Graceful shutdown complete"); -} diff --git a/packages/ciphernode/evm/src/enclave_sol.rs b/packages/ciphernode/evm/src/enclave_sol.rs deleted file mode 100644 index 5ff322467d..0000000000 --- a/packages/ciphernode/evm/src/enclave_sol.rs +++ /dev/null @@ -1,34 +0,0 @@ -use crate::{ - enclave_sol_reader::EnclaveSolReader, - enclave_sol_writer::EnclaveSolWriter, - event_reader::EvmEventReaderState, - helpers::{ReadonlyProvider, RpcWSClient, SignerProvider, WithChainId}, -}; -use actix::Addr; -use alloy::transports::BoxTransport; -use anyhow::Result; -use data::Repository; -use events::{EnclaveEvent, EventBus}; - -pub struct EnclaveSol; -impl EnclaveSol { - pub async fn attach( - bus: &Addr>, - read_provider: &WithChainId, - write_provider: &WithChainId, RpcWSClient>, - contract_address: &str, - repository: &Repository, - start_block: Option, - ) -> Result<()> { - EnclaveSolReader::attach( - bus, - read_provider, - contract_address, - repository, - start_block, - ) - .await?; - EnclaveSolWriter::attach(bus, write_provider, contract_address).await?; - Ok(()) - } -} diff --git a/packages/ciphernode/evm/src/helpers.rs b/packages/ciphernode/evm/src/helpers.rs deleted file mode 100644 index 5b6d9574c3..0000000000 --- a/packages/ciphernode/evm/src/helpers.rs +++ /dev/null @@ -1,278 +0,0 @@ -use alloy::{ - network::{Ethereum, EthereumWallet}, - providers::{ - fillers::{ - BlobGasFiller, ChainIdFiller, FillProvider, GasFiller, JoinFill, NonceFiller, - WalletFiller, - }, - Identity, Provider, ProviderBuilder, RootProvider, - }, - pubsub::PubSubFrontend, - rpc::client::RpcClient, - signers::local::PrivateKeySigner, - transports::{ - http::{ - reqwest::{ - header::{HeaderMap, HeaderValue, AUTHORIZATION}, - Client, - }, - Http, - }, - ws::{WebSocketConfig, WsConnect}, - Authorization, BoxTransport, Transport, - }, -}; -use anyhow::{bail, Context, Result}; -use base64::{engine::general_purpose::STANDARD, Engine}; -use config::{RpcAuth, RPC}; -use crypto::Cipher; -use data::Repository; -use std::{env, marker::PhantomData, sync::Arc}; -use zeroize::Zeroizing; -pub trait AuthConversions { - fn to_header_value(&self) -> Option; - fn to_ws_auth(&self) -> Option; -} - -impl AuthConversions for RpcAuth { - fn to_header_value(&self) -> Option { - match self { - RpcAuth::None => None, - RpcAuth::Basic { username, password } => { - let auth = format!( - "Basic {}", - STANDARD.encode(Zeroizing::new(format!("{}:{}", username, password))) - ); - HeaderValue::from_str(&auth).ok() - } - RpcAuth::Bearer(token) => HeaderValue::from_str(&format!("Bearer {}", token)).ok(), - } - } - - fn to_ws_auth(&self) -> Option { - match self { - RpcAuth::None => None, - RpcAuth::Basic { username, password } => Some(Authorization::basic(username, password)), - RpcAuth::Bearer(token) => Some(Authorization::bearer(token)), - } - } -} - -/// We need to cache the chainId so we can easily use it in a non-async situation -/// This wrapper just stores the chain_id with the Provider -#[derive(Clone)] -// We have to be generic over T as the transport provider in order to handle different transport -// mechanisms such as the HttpClient etc. -pub struct WithChainId -where - P: Provider, - T: Transport + Clone, -{ - provider: Arc

, - chain_id: u64, - _t: PhantomData, -} - -impl WithChainId -where - P: Provider, - T: Transport + Clone, -{ - pub async fn new(provider: P) -> Result { - let chain_id = provider.get_chain_id().await?; - Ok(Self { - provider: Arc::new(provider), - chain_id, - _t: PhantomData, - }) - } - - pub fn get_provider(&self) -> Arc

{ - self.provider.clone() - } - - pub fn get_chain_id(&self) -> u64 { - self.chain_id - } -} - -pub type RpcWSClient = PubSubFrontend; -pub type RpcHttpClient = Http; -pub type SignerProvider = FillProvider< - JoinFill< - JoinFill< - Identity, - JoinFill>>, - >, - WalletFiller, - >, - RootProvider, - T, - Ethereum, ->; - -pub type ReadonlyProvider = RootProvider; - -#[derive(Clone)] -pub struct ProviderConfig { - rpc: RPC, - auth: RpcAuth, -} - -impl ProviderConfig { - pub fn new(rpc: RPC, auth: RpcAuth) -> Self { - Self { rpc, auth } - } - - async fn create_ws_provider(&self) -> Result> { - Ok(ProviderBuilder::new() - .on_ws(self.create_ws_connect()?) - .await? - .boxed()) - } - - async fn create_http_provider(&self) -> Result> { - Ok(ProviderBuilder::new() - .on_client(self.create_http_client()?) - .boxed()) - } - - pub async fn create_readonly_provider( - &self, - ) -> Result> { - let provider = if self.rpc.is_websocket() { - self.create_ws_provider().await? - } else { - self.create_http_provider().await? - }; - WithChainId::new(provider).await - } - - pub async fn create_ws_signer_provider( - &self, - signer: &Arc, - ) -> Result, RpcWSClient>> { - let wallet = EthereumWallet::from(signer.clone()); - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .wallet(wallet) - .on_ws(self.create_ws_connect()?) - .await - .context("Failed to create WS signer provider")?; - - WithChainId::new(provider).await - } - - pub async fn create_http_signer_provider( - &self, - signer: &Arc, - ) -> Result, RpcHttpClient>> { - let wallet = EthereumWallet::from(signer.clone()); - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .wallet(wallet) - .on_client(self.create_http_client()?); - WithChainId::new(provider).await - } - - fn create_ws_connect(&self) -> Result { - let config = WebSocketConfig { - max_frame_size: Some(32 * 1024 * 1024), - max_message_size: Some(32 * 1024 * 1024), - ..Default::default() - }; - - Ok(if let Some(ws_auth) = self.auth.to_ws_auth() { - WsConnect::new(self.rpc.as_ws_url()?) - .with_auth(ws_auth) - .with_config(config) - } else { - WsConnect::new(self.rpc.as_ws_url()?).with_config(config) - }) - } - - fn create_http_client(&self) -> Result>> { - let mut headers = HeaderMap::new(); - if let Some(auth_header) = self.auth.to_header_value() { - headers.insert(AUTHORIZATION, auth_header); - } - let client = Client::builder() - .default_headers(headers) - .build() - .context("Failed to create HTTP client")?; - let http = Http::with_client(client, self.rpc.as_http_url()?.parse()?); - Ok(RpcClient::new(http, false)) - } -} - -pub async fn pull_eth_signer_from_env(var: &str) -> Result> { - let private_key = env::var(var)?; - let signer = private_key.parse()?; - env::remove_var(var); - Ok(Arc::new(signer)) -} - -pub async fn get_signer_from_repository( - repository: Repository>, - cipher: &Arc, -) -> Result> { - let Some(private_key_encrypted) = repository.read().await? else { - bail!("No private key was found!") - }; - - let encoded_private_key = Zeroizing::new(cipher.decrypt_data(&private_key_encrypted)?); - - let private_key = Zeroizing::new(String::from_utf8(encoded_private_key.to_vec())?); - - let signer = private_key.parse()?; - Ok(Arc::new(signer)) -} - -#[cfg(test)] -mod test { - use super::*; - - #[test] - fn test_rpc_type_conversion() -> Result<()> { - // Test HTTP URLs - let http = RPC::from_url("http://localhost:8545/").unwrap(); - assert!(matches!(http, RPC::Http(_))); - assert_eq!(http.as_http_url()?, "http://localhost:8545/"); - assert_eq!(http.as_ws_url()?, "ws://localhost:8545/"); - - // Test HTTPS URLs - let https = RPC::from_url("https://example.com/").unwrap(); - assert!(matches!(https, RPC::Https(_))); - assert_eq!(https.as_http_url()?, "https://example.com/"); - assert_eq!(https.as_ws_url()?, "wss://example.com/"); - - // Test WS URLs - let ws = RPC::from_url("ws://localhost:8545/").unwrap(); - assert!(matches!(ws, RPC::Ws(_))); - assert_eq!(ws.as_http_url()?, "http://localhost:8545/"); - assert_eq!(ws.as_ws_url()?, "ws://localhost:8545/"); - - // Test WSS URLs - let wss = RPC::from_url("wss://example.com/").unwrap(); - assert!(matches!(wss, RPC::Wss(_))); - assert_eq!(wss.as_http_url()?, "https://example.com/"); - assert_eq!(wss.as_ws_url()?, "wss://example.com/"); - - Ok(()) - } - - #[test] - fn test_rpc_type_properties() { - assert!(!RPC::from_url("http://example.com/").unwrap().is_secure()); - assert!(RPC::from_url("https://example.com/").unwrap().is_secure()); - assert!(!RPC::from_url("ws://example.com/").unwrap().is_secure()); - assert!(RPC::from_url("wss://example.com/").unwrap().is_secure()); - - assert!(!RPC::from_url("http://example.com/").unwrap().is_websocket()); - assert!(!RPC::from_url("https://example.com/") - .unwrap() - .is_websocket()); - assert!(RPC::from_url("ws://example.com/").unwrap().is_websocket()); - assert!(RPC::from_url("wss://example.com/").unwrap().is_websocket()); - } -} diff --git a/packages/ciphernode/keyshare/Cargo.toml b/packages/ciphernode/keyshare/Cargo.toml deleted file mode 100644 index 9c7039f604..0000000000 --- a/packages/ciphernode/keyshare/Cargo.toml +++ /dev/null @@ -1,17 +0,0 @@ -[package] -name = "keyshare" -version.workspace = true -edition.workspace = true - -[dependencies] -actix = { workspace = true } -anyhow = { workspace = true } -async-trait = { workspace = true } -config = { workspace = true } -data = { workspace = true } -crypto = { workspace = true } -events = { workspace = true } -fhe = { workspace = true } -e3_request = { workspace = true } -serde = { workspace = true } -tracing = { workspace = true } diff --git a/packages/ciphernode/logger/Cargo.toml b/packages/ciphernode/logger/Cargo.toml deleted file mode 100644 index d965ac1d40..0000000000 --- a/packages/ciphernode/logger/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "logger" -version.workspace = true -edition.workspace = true - -[dependencies] -events = { workspace = true } -actix = { workspace = true } -base64 = { workspace = true } -tracing = { workspace = true } diff --git a/packages/ciphernode/scripts/test.sh b/packages/ciphernode/scripts/test.sh deleted file mode 100755 index 79de102f7d..0000000000 --- a/packages/ciphernode/scripts/test.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash - -set -e - -pushd ./evm && ./scripts/build_fixtures.sh && popd - -cargo test -- $@ diff --git a/packages/ciphernode/sortition/src/repo.rs b/packages/ciphernode/sortition/src/repo.rs deleted file mode 100644 index 2b84c1841a..0000000000 --- a/packages/ciphernode/sortition/src/repo.rs +++ /dev/null @@ -1,14 +0,0 @@ -use config::StoreKeys; -use data::{Repositories, Repository}; - -use crate::SortitionModule; - -pub trait SortitionRepositoryFactory { - fn sortition(&self) -> Repository; -} - -impl SortitionRepositoryFactory for Repositories { - fn sortition(&self) -> Repository { - Repository::new(self.store.scope(StoreKeys::sortition())) - } -} diff --git a/packages/ciphernode/tests/Cargo.toml b/packages/ciphernode/tests/Cargo.toml deleted file mode 100644 index 387832bd3c..0000000000 --- a/packages/ciphernode/tests/Cargo.toml +++ /dev/null @@ -1,33 +0,0 @@ -[package] -name = "tests" -version.workspace = true -edition.workspace = true - -[dependencies] -net = { workspace = true } -sortition = { workspace = true } -events = { workspace = true } -evm = { workspace = true } -logger = { workspace = true } -fhe = { workspace = true } -crypto = { workspace = true } -data = { workspace = true } -keyshare = { workspace = true } -aggregator = { workspace = true } -e3_request = { workspace = true } -test_helpers = { workspace = true } -fhe_rs = { workspace = true } -fhe-traits = { workspace = true } -fhe-util = { workspace = true } -async-std = { workspace = true } -tokio = { workspace = true } -alloy-primitives = { workspace = true } -alloy = { workspace = true } -clap = { workspace = true } -rand_chacha = { workspace = true } -rand = { workspace = true } -bincode = { workspace = true } -base64 = { workspace = true } -actix = { workspace = true } -anyhow = { workspace = true } -commons = { path = "../../commons" } diff --git a/packages/commons/Cargo.lock b/packages/commons/Cargo.lock deleted file mode 100644 index 23659a86dc..0000000000 --- a/packages/commons/Cargo.lock +++ /dev/null @@ -1,923 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "aho-corasick" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" -dependencies = [ - "memchr", -] - -[[package]] -name = "anyhow" -version = "1.0.98" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" - -[[package]] -name = "autocfg" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" - -[[package]] -name = "bitflags" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "bytes" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "commons" -version = "0.1.0" -dependencies = [ - "anyhow", - "fhe", - "fhe-traits", -] - -[[package]] -name = "cpufeatures" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" -dependencies = [ - "libc", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer", - "crypto-common", -] - -[[package]] -name = "doc-comment" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" - -[[package]] -name = "either" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" - -[[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - -[[package]] -name = "errno" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" -dependencies = [ - "libc", - "windows-sys", -] - -[[package]] -name = "ethnum" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0939f82868b77ef93ce3c3c3daf2b3c526b456741da5a1a4559e590965b6026b" - -[[package]] -name = "fastrand" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" - -[[package]] -name = "fhe" -version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs?branch=feature%2Fgreco-integration#b529be34a8b6cfa589b3ce451dbba0ce0126b92a" -dependencies = [ - "doc-comment", - "fhe-math", - "fhe-traits", - "fhe-util", - "itertools 0.12.1", - "ndarray", - "num-bigint", - "num-traits", - "prost", - "prost-build", - "rand", - "rand_chacha", - "serde", - "thiserror", - "zeroize", - "zeroize_derive", -] - -[[package]] -name = "fhe-math" -version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs?branch=feature%2Fgreco-integration#b529be34a8b6cfa589b3ce451dbba0ce0126b92a" -dependencies = [ - "ethnum", - "fhe-traits", - "fhe-util", - "itertools 0.12.1", - "ndarray", - "num-bigint", - "num-bigint-dig", - "num-traits", - "prost", - "prost-build", - "rand", - "rand_chacha", - "sha2", - "thiserror", - "zeroize", -] - -[[package]] -name = "fhe-traits" -version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs?branch=feature%2Fgreco-integration#b529be34a8b6cfa589b3ce451dbba0ce0126b92a" -dependencies = [ - "rand", -] - -[[package]] -name = "fhe-util" -version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs?branch=feature%2Fgreco-integration#b529be34a8b6cfa589b3ce451dbba0ce0126b92a" -dependencies = [ - "itertools 0.12.1", - "num-bigint-dig", - "num-traits", - "prime_factorization", - "rand", - "rayon", -] - -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", -] - -[[package]] -name = "getrandom" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" -dependencies = [ - "cfg-if", - "libc", - "r-efi", - "wasi 0.14.2+wasi-0.2.4", -] - -[[package]] -name = "hashbrown" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "indexmap" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" -dependencies = [ - "equivalent", - "hashbrown", -] - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" -dependencies = [ - "either", -] - -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -dependencies = [ - "spin", -] - -[[package]] -name = "libc" -version = "0.2.172" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" - -[[package]] -name = "libm" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9627da5196e5d8ed0b0495e61e518847578da83483c37288316d9b2e03a7f72" - -[[package]] -name = "linux-raw-sys" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" - -[[package]] -name = "log" -version = "0.4.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" - -[[package]] -name = "matrixmultiply" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a" -dependencies = [ - "autocfg", - "rawpointer", -] - -[[package]] -name = "memchr" -version = "2.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" - -[[package]] -name = "multimap" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" - -[[package]] -name = "ndarray" -version = "0.15.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb12d4e967ec485a5f71c6311fe28158e9d6f4bc4a447b474184d0f91a8fa32" -dependencies = [ - "matrixmultiply", - "num-complex", - "num-integer", - "num-traits", - "rawpointer", -] - -[[package]] -name = "num" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" -dependencies = [ - "num-bigint", - "num-complex", - "num-integer", - "num-iter", - "num-rational", - "num-traits", -] - -[[package]] -name = "num-bigint" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "num-bigint-dig" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" -dependencies = [ - "byteorder", - "lazy_static", - "libm", - "num-integer", - "num-iter", - "num-traits", - "rand", - "serde", - "smallvec", -] - -[[package]] -name = "num-complex" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-iter" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" -dependencies = [ - "num-bigint", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", -] - -[[package]] -name = "once_cell" -version = "1.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" - -[[package]] -name = "petgraph" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" -dependencies = [ - "fixedbitset", - "indexmap", -] - -[[package]] -name = "ppv-lite86" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" -dependencies = [ - "zerocopy", -] - -[[package]] -name = "prettyplease" -version = "0.2.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "664ec5419c51e34154eec046ebcba56312d5a2fc3b09a06da188e1ad21afadf6" -dependencies = [ - "proc-macro2", - "syn", -] - -[[package]] -name = "prime_factorization" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb24cb4f70d64221509ab3dca82ad2ec24e1d7f3fa3e7cb9eed4ced578683287" -dependencies = [ - "itertools 0.10.5", - "num", - "rand", -] - -[[package]] -name = "proc-macro2" -version = "1.0.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "prost" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" -dependencies = [ - "bytes", - "prost-derive", -] - -[[package]] -name = "prost-build" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" -dependencies = [ - "bytes", - "heck", - "itertools 0.12.1", - "log", - "multimap", - "once_cell", - "petgraph", - "prettyplease", - "prost", - "prost-types", - "regex", - "syn", - "tempfile", -] - -[[package]] -name = "prost-derive" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" -dependencies = [ - "anyhow", - "itertools 0.12.1", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "prost-types" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" -dependencies = [ - "prost", -] - -[[package]] -name = "quote" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "r-efi" -version = "5.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha", - "rand_core", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.16", -] - -[[package]] -name = "rawpointer" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" - -[[package]] -name = "rayon" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - -[[package]] -name = "regex" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" - -[[package]] -name = "rustix" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf" -dependencies = [ - "bitflags", - "errno", - "libc", - "linux-raw-sys", - "windows-sys", -] - -[[package]] -name = "serde" -version = "1.0.219" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.219" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "sha2" -version = "0.10.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "smallvec" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" - -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" - -[[package]] -name = "syn" -version = "2.0.101" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "tempfile" -version = "3.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" -dependencies = [ - "fastrand", - "getrandom 0.3.2", - "once_cell", - "rustix", - "windows-sys", -] - -[[package]] -name = "thiserror" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "typenum" -version = "1.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" - -[[package]] -name = "unicode-ident" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" - -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasi" -version = "0.14.2+wasi-0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" -dependencies = [ - "wit-bindgen-rt", -] - -[[package]] -name = "windows-sys" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-targets" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - -[[package]] -name = "wit-bindgen-rt" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags", -] - -[[package]] -name = "zerocopy" -version = "0.8.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "zeroize" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] diff --git a/packages/commons/Cargo.toml b/packages/commons/Cargo.toml deleted file mode 100644 index 48e58689ed..0000000000 --- a/packages/commons/Cargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "commons" -version = "0.1.0" -edition = "2021" - -[dependencies] -fhe_rs = { package = "fhe", git = "https://github.com/gnosisguild/fhe.rs", branch = "feature/greco-integration" } -fhe-traits = { git = "https://github.com/gnosisguild/fhe.rs", branch = "feature/greco-integration" } -anyhow = "1.0.86" \ No newline at end of file diff --git a/packages/commons/src/bfv/mod.rs b/packages/commons/src/bfv/mod.rs deleted file mode 100644 index 6bd66ea881..0000000000 --- a/packages/commons/src/bfv/mod.rs +++ /dev/null @@ -1,342 +0,0 @@ -use anyhow::Context; -use anyhow::Result; -use fhe_rs::bfv::{BfvParameters, BfvParametersBuilder}; -use fhe_traits::{Deserialize, Serialize}; -use std::sync::Arc; - -/// Predefined BFV parameters for common use cases -pub mod params { - /// Standard BFV parameters sets - /// Each set is a tuple of (degree, plaintext_modulus, moduli). - /// Naming convention: SET___ - - /// - Degree: 2048 (polynomial ring size) - /// - Plaintext modulus: 1032193 - /// - Moduli: [0x3FFFFFFF000001] (provides good security level) - pub const SET_2048_1032193_1: (usize, u64, [u64; 1]) = ( - 2048, // degree - 1032193, // plaintext_modulus - [0x3FFFFFFF000001], // moduli - ); -} - -/// Builds BFV (Brakerski-Fan-Vercauteren) encryption parameters. -/// -/// # Arguments -/// -/// * `degree` - The degree of the polynomial ring, must be a power of 2 -/// * `plaintext_modulus` - The modulus for the plaintext space -/// * `moduli` - The moduli for the ciphertext space -/// -/// # Returns -/// -/// Returns a `BfvParameters` instance configured with the specified parameters. -/// -/// # Panics -/// -/// Panics if the parameters cannot be built (e.g., invalid degree or moduli). -pub fn build_bfv_params(degree: usize, plaintext_modulus: u64, moduli: &[u64]) -> BfvParameters { - match BfvParametersBuilder::new() - .set_degree(degree) - .set_plaintext_modulus(plaintext_modulus) - .set_moduli(moduli) - .build() - { - Ok(params) => params, - Err(e) => panic!("Failed to build BFV Parameters: {}", e), - } -} - -/// Builds BFV encryption parameters wrapped in an `Arc` for shared ownership. -/// -/// This function is similar to `build_bfv_params` but returns the parameters -/// wrapped in an `Arc` for thread-safe shared ownership. -/// -/// # Arguments -/// -/// * `degree` - The degree of the polynomial ring, must be a power of 2 -/// * `plaintext_modulus` - The modulus for the plaintext space -/// * `moduli` - The moduli for the ciphertext space -/// -/// # Returns -/// -/// Returns an `Arc` instance configured with the specified parameters. -/// -/// # Panics -/// -/// Panics if the parameters cannot be built (e.g., invalid degree or moduli). -pub fn build_bfv_params_arc( - degree: usize, - plaintext_modulus: u64, - moduli: &[u64], -) -> Arc { - match BfvParametersBuilder::new() - .set_degree(degree) - .set_plaintext_modulus(plaintext_modulus) - .set_moduli(moduli) - .build_arc() - { - Ok(params) => params, - Err(e) => panic!("Failed to build BFV Parameters wrapped in Arc: {}", e), - } -} - -/// Deserializes BFV parameters from a byte slice. -/// -/// # Arguments -/// -/// * `bytes` - The byte slice containing the serialized parameters -/// -/// # Returns -/// -/// Returns a `BfvParameters` instance deserialized from the bytes. -/// -/// # Panics -/// -/// Panics if the deserialization fails. -pub fn deserialize_bfv_params(bytes: &[u8]) -> BfvParameters { - match BfvParameters::try_deserialize(bytes) { - Ok(params) => params, - Err(e) => panic!("Failed to deserialize BFV Parameters: {}", e), - } -} - -/// Deserializes BFV parameters from a byte slice and wraps them in an `Arc`. -/// -/// This is a convenience function that combines `deserialize_bfv_params` with `Arc::new` -/// to provide thread-safe shared ownership of the deserialized parameters. -/// -/// # Arguments -/// -/// * `bytes` - The byte slice containing the serialized parameters -/// -/// # Returns -/// -/// Returns an `Arc` instance deserialized from the bytes. -/// -/// # Panics -/// -/// Panics if the deserialization fails (see `deserialize_bfv_params`). -pub fn deserialize_bfv_params_arc(bytes: &[u8]) -> Arc { - Arc::new(deserialize_bfv_params(bytes)) -} - -/// Serializes BFV parameters into a byte vector. -/// -/// # Arguments -/// -/// * `params` - The BFV parameters to serialize -/// -/// # Returns -/// -/// Returns a `Vec` containing the serialized parameters. -/// -/// # Panics -/// -/// Panics if the serialization fails. -pub fn serialize_bfv_params(params: &BfvParameters) -> Vec { - params.to_bytes() -} - -/// Encodes BFV parameters into a byte vector. -/// -/// This function takes a `BfvParameters` instance and returns it serialized as a byte vector. -/// -/// # Arguments -/// -/// * `params` - The BFV parameters to encode -/// -/// # Returns -/// -/// Returns a `Vec` containing the serialized parameters. -pub fn encode_bfv_params(params: &BfvParameters) -> Vec { - params.to_bytes() -} - -/// Decodes BFV parameters from a byte slice. -/// -/// This function attempts to deserialize BFV parameters from a byte slice -/// and wraps them in an `Arc` for thread-safe shared ownership. -/// -/// # Arguments -/// -/// * `bytes` - The byte slice containing the serialized parameters -/// -/// # Returns -/// -/// Returns a `Result>` containing the deserialized parameters -/// or an error if deserialization fails. -pub fn decode_bfv_params(bytes: &[u8]) -> Result> { - Ok(Arc::new( - BfvParameters::try_deserialize(bytes).context("Could not decode Bfv Params")?, - )) -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn test_build_bfv_params() { - let degree = 2048; - let plaintext_modulus = 1032193; - let moduli = [0x3FFFFFFF000001]; - - let params = build_bfv_params(degree, plaintext_modulus, &moduli); - assert_eq!(params.degree(), degree); - assert_eq!(params.plaintext(), plaintext_modulus); - assert_eq!(params.moduli(), moduli); - } - - #[test] - fn test_build_bfv_params_arc() { - let degree = 2048; - let plaintext_modulus = 1032193; - let moduli = [0x3FFFFFFF000001]; - - let params = build_bfv_params_arc(degree, plaintext_modulus, &moduli); - assert_eq!(params.degree(), degree); - assert_eq!(params.plaintext(), plaintext_modulus); - assert_eq!(params.moduli(), moduli); - } - - #[test] - fn test_deserialize_bfv_params() { - let degree = 2048; - let plaintext_modulus = 1032193; - let moduli = [0x3FFFFFFF000001]; - - let params = build_bfv_params(degree, plaintext_modulus, &moduli); - let serialized = params.to_bytes(); - let deserialized = deserialize_bfv_params(&serialized); - - assert_eq!(deserialized.degree(), degree); - assert_eq!(deserialized.plaintext(), plaintext_modulus); - assert_eq!(deserialized.moduli(), moduli); - } - - #[test] - fn test_deserialize_bfv_params_arc() { - let degree = 2048; - let plaintext_modulus = 1032193; - let moduli = [0x3FFFFFFF000001]; - - let params = build_bfv_params(degree, plaintext_modulus, &moduli); - let serialized = params.to_bytes(); - let deserialized = deserialize_bfv_params_arc(&serialized); - - assert_eq!(deserialized.degree(), degree); - assert_eq!(deserialized.plaintext(), plaintext_modulus); - assert_eq!(deserialized.moduli(), moduli); - } - - #[test] - fn test_serialize_deserialize_roundtrip() { - let degree = 2048; - let plaintext_modulus = 1032193; - let moduli = [0x3FFFFFFF000001]; - - let params = build_bfv_params(degree, plaintext_modulus, &moduli); - let serialized = serialize_bfv_params(¶ms); - let deserialized = deserialize_bfv_params(&serialized); - - assert_eq!(deserialized.degree(), degree); - assert_eq!(deserialized.plaintext(), plaintext_modulus); - assert_eq!(deserialized.moduli(), moduli); - } - - #[test] - fn test_serialize_deserialize_arc_roundtrip() { - let degree = 2048; - let plaintext_modulus = 1032193; - let moduli = [0x3FFFFFFF000001]; - - let params = build_bfv_params_arc(degree, plaintext_modulus, &moduli); - let serialized = serialize_bfv_params(¶ms); - let deserialized = deserialize_bfv_params_arc(&serialized); - - assert_eq!(deserialized.degree(), degree); - assert_eq!(deserialized.plaintext(), plaintext_modulus); - assert_eq!(deserialized.moduli(), moduli); - } - - #[test] - fn test_encode_bfv_params() { - let degree = 2048; - let plaintext_modulus = 1032193; - let moduli = vec![0x3FFFFFFF000001]; - - let params = build_bfv_params(degree, plaintext_modulus, &moduli); - let encoded = encode_bfv_params(¶ms); - let decoded = decode_bfv_params(&encoded).unwrap(); - - assert_eq!(decoded.degree(), degree); - assert_eq!(decoded.plaintext(), plaintext_modulus); - assert_eq!(decoded.moduli(), moduli.as_slice()); - } - - #[test] - fn test_decode_params_error() { - let invalid_bytes = vec![0u8; 10]; - let result = decode_bfv_params(&invalid_bytes); - assert!(result.is_err()); - } - - mod params_tests { - use super::*; - - #[test] - fn test_params_constant() { - let (degree, plaintext_modulus, moduli) = params::SET_2048_1032193_1; - assert_eq!(degree, 2048); - assert_eq!(plaintext_modulus, 1032193); - assert_eq!(moduli, [0x3FFFFFFF000001]); - } - - #[test] - fn test_params_function() { - let (degree, plaintext_modulus, moduli) = params::SET_2048_1032193_1; - let params = build_bfv_params(degree, plaintext_modulus, &moduli); - - assert_eq!(params.degree(), degree); - assert_eq!(params.plaintext(), plaintext_modulus); - assert_eq!(params.moduli(), moduli); - } - - #[test] - fn test_params_arc_function() { - let (degree, plaintext_modulus, moduli) = params::SET_2048_1032193_1; - let params = build_bfv_params_arc(degree, plaintext_modulus, &moduli); - - assert_eq!(params.degree(), degree); - assert_eq!(params.plaintext(), plaintext_modulus); - assert_eq!(params.moduli(), moduli); - } - - #[test] - fn test_params_serialization_roundtrip() { - let (degree, plaintext_modulus, moduli) = params::SET_2048_1032193_1; - let params = build_bfv_params(degree, plaintext_modulus, &moduli); - let serialized = serialize_bfv_params(¶ms); - let deserialized = deserialize_bfv_params(&serialized); - - let (degree, plaintext_modulus, moduli) = params::SET_2048_1032193_1; - assert_eq!(deserialized.degree(), degree); - assert_eq!(deserialized.plaintext(), plaintext_modulus); - assert_eq!(deserialized.moduli(), moduli); - } - - #[test] - fn test_params_arc_serialization_roundtrip() { - let (degree, plaintext_modulus, moduli) = params::SET_2048_1032193_1; - let params = build_bfv_params_arc(degree, plaintext_modulus, &moduli); - let serialized = serialize_bfv_params(¶ms); - let deserialized = deserialize_bfv_params_arc(&serialized); - - let (degree, plaintext_modulus, moduli) = params::SET_2048_1032193_1; - assert_eq!(deserialized.degree(), degree); - assert_eq!(deserialized.plaintext(), plaintext_modulus); - assert_eq!(deserialized.moduli(), moduli); - } - } -} diff --git a/packages/commons/src/lib.rs b/packages/commons/src/lib.rs deleted file mode 100644 index 5e4e17e4fd..0000000000 --- a/packages/commons/src/lib.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod bfv; diff --git a/packages/compute_provider/Cargo.lock b/packages/compute_provider/Cargo.lock deleted file mode 100644 index f658942fcf..0000000000 --- a/packages/compute_provider/Cargo.lock +++ /dev/null @@ -1,604 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "ahash" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] - -[[package]] -name = "allocator-api2" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" - -[[package]] -name = "ark-bn254" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-std", -] - -[[package]] -name = "ark-ec" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" -dependencies = [ - "ark-ff", - "ark-poly", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown 0.13.2", - "itertools", - "num-traits", - "zeroize", -] - -[[package]] -name = "ark-ff" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" -dependencies = [ - "ark-ff-asm", - "ark-ff-macros", - "ark-serialize", - "ark-std", - "derivative", - "digest", - "itertools", - "num-bigint", - "num-traits", - "paste", - "rustc_version", - "zeroize", -] - -[[package]] -name = "ark-ff-asm" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-ff-macros" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" -dependencies = [ - "num-bigint", - "num-traits", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-poly" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" -dependencies = [ - "ark-ff", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown 0.13.2", -] - -[[package]] -name = "ark-serialize" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" -dependencies = [ - "ark-serialize-derive", - "ark-std", - "digest", - "num-bigint", -] - -[[package]] -name = "ark-serialize-derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-std" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" -dependencies = [ - "num-traits", - "rand", -] - -[[package]] -name = "autocfg" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "compute-provider" -version = "0.1.0" -dependencies = [ - "ark-bn254", - "ark-ff", - "hex", - "lean-imt", - "light-poseidon", - "num-bigint", - "num-traits", - "rayon", - "serde", - "sha3", -] - -[[package]] -name = "cpufeatures" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" -dependencies = [ - "libc", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer", - "crypto-common", -] - -[[package]] -name = "either" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" - -[[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash", -] - -[[package]] -name = "hashbrown" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" -dependencies = [ - "allocator-api2", - "equivalent", - "foldhash", -] - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "keccak" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" -dependencies = [ - "cpufeatures", -] - -[[package]] -name = "lean-imt" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa2acc6dee32b12409446a76b9c1877e5ba9afb36dfcbe96d0ddaf15ca08f18d" -dependencies = [ - "hashbrown 0.15.2", -] - -[[package]] -name = "libc" -version = "0.2.158" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" - -[[package]] -name = "light-poseidon" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c9a85a9752c549ceb7578064b4ed891179d20acd85f27318573b64d2d7ee7ee" -dependencies = [ - "ark-bn254", - "ark-ff", - "num-bigint", - "thiserror", -] - -[[package]] -name = "num-bigint" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", -] - -[[package]] -name = "once_cell" -version = "1.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ea5043e58958ee56f3e15a90aee535795cd7dfd319846288d93c5b57d85cbe" - -[[package]] -name = "paste" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" - -[[package]] -name = "ppv-lite86" -version = "0.2.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" -dependencies = [ - "zerocopy", -] - -[[package]] -name = "proc-macro2" -version = "1.0.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "rand_chacha", - "rand_core", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" - -[[package]] -name = "rayon" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - -[[package]] -name = "rustc_version" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" -dependencies = [ - "semver", -] - -[[package]] -name = "semver" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" - -[[package]] -name = "serde" -version = "1.0.210" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.210" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", -] - -[[package]] -name = "sha3" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" -dependencies = [ - "digest", - "keccak", -] - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.77" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "thiserror" -version = "1.0.63" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.63" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", -] - -[[package]] -name = "typenum" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" - -[[package]] -name = "unicode-ident" -version = "1.0.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" - -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - -[[package]] -name = "zerocopy" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" -dependencies = [ - "byteorder", - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", -] - -[[package]] -name = "zeroize" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", -] diff --git a/packages/compute_provider/Cargo.toml b/packages/compute_provider/Cargo.toml deleted file mode 100644 index 633ab90809..0000000000 --- a/packages/compute_provider/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -name = "compute-provider" -version = "0.1.0" -edition = "2021" - -[dependencies] -serde = { version = "1.0.208", features = ["derive", "std"] } -lean-imt = "0.1.2" -sha3 = "0.10.8" -num-bigint = "0.4.6" -num-traits = "0.2" -hex = "0.4.3" -light-poseidon = "0.2.0" -ark-ff = "0.4.2" -ark-bn254 = "0.4.0" -rayon = "1.10.0" \ No newline at end of file diff --git a/packages/enclave-config/.gitignore b/packages/enclave-config/.gitignore new file mode 100644 index 0000000000..64a826e5a2 --- /dev/null +++ b/packages/enclave-config/.gitignore @@ -0,0 +1 @@ +dist/.tsbuildinfo diff --git a/packages/enclave-config/dom.tsconfig.json b/packages/enclave-config/dom.tsconfig.json new file mode 100644 index 0000000000..f187be5868 --- /dev/null +++ b/packages/enclave-config/dom.tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "jsx": "react-jsx", + "lib": ["es2022", "dom", "dom.iterable"] + } +} diff --git a/packages/enclave-config/index.js b/packages/enclave-config/index.js new file mode 100644 index 0000000000..b0cf55060f --- /dev/null +++ b/packages/enclave-config/index.js @@ -0,0 +1 @@ +console.log("This is not designed to be run like this."); diff --git a/packages/enclave-config/package.json b/packages/enclave-config/package.json new file mode 100644 index 0000000000..1c8f5e0cea --- /dev/null +++ b/packages/enclave-config/package.json @@ -0,0 +1,23 @@ +{ + "name": "@gnosis-guild/enclave-config", + "private": false, + "version": "0.0.6-test", + "description": "", + "module": true, + "main": "index.js", + "type": "module", + "exports": { + "./tsup": "./tsup.config.js", + "./tsconfig.json": "./tsconfig.json", + "./dom.tsconfig.json": "./dom.tsconfig.json" + }, + "scripts": { + "release": "pnpm publish --access=public" + }, + "keywords": [], + "author": "", + "license": "LGPL-3.0-only", + "peerDependencies": { + "tsup": "^8.5.0" + } +} diff --git a/packages/enclave-config/tsconfig.json b/packages/enclave-config/tsconfig.json new file mode 100644 index 0000000000..685fd21b54 --- /dev/null +++ b/packages/enclave-config/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "ESNext", + "moduleResolution": "bundler", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "declaration": true, + "declarationMap": true, + "outDir": "dist", + "noEmit": true + } +} diff --git a/packages/enclave-config/tsup.config.js b/packages/enclave-config/tsup.config.js new file mode 100644 index 0000000000..7cee180c23 --- /dev/null +++ b/packages/enclave-config/tsup.config.js @@ -0,0 +1,10 @@ +import { defineConfig } from "tsup"; + +export const baseConfig = defineConfig({ + entry: ["src/index.ts"], + splitting: false, + sourcemap: true, + clean: true, + format: ["esm"], + dts: true, +}); diff --git a/packages/enclave-react/.gitignore b/packages/enclave-react/.gitignore new file mode 100644 index 0000000000..2b59089360 --- /dev/null +++ b/packages/enclave-react/.gitignore @@ -0,0 +1,21 @@ +# directories +.coverage_artifacts +.coverage_cache +.coverage_contracts +artifacts +build +cache +coverage +dist +node_modules +types +deployments/localhost + +# files +*.env +*.log +.DS_Store +.pnp.* +coverage.json +package-lock.json +pnpm-lock.yaml \ No newline at end of file diff --git a/packages/enclave-react/README.md b/packages/enclave-react/README.md new file mode 100644 index 0000000000..8d39021a61 --- /dev/null +++ b/packages/enclave-react/README.md @@ -0,0 +1,136 @@ +# @gnosis-guild/enclave-react + +React hooks and utilities for Enclave SDK. + +## Installation + +```bash +npm install @gnosis-guild/enclave-react @gnosis-guild/enclave +# or +yarn add @gnosis-guild/enclave-react @gnosis-guild/enclave +# or +pnpm add @gnosis-guild/enclave-react @gnosis-guild/enclave +``` + +## Usage + +### useEnclaveSDK + +A React hook for interacting with the Enclave SDK. This hook provides a clean interface for managing SDK state, handling contract interactions, and listening to events. + +```tsx +import { useEnclaveSDK } from '@gnosis-guild/enclave-react'; + +function MyComponent() { + const { + sdk, + isInitialized, + error, + requestE3, + activateE3, + publishInput, + onEnclaveEvent, + off, + EnclaveEventType, + RegistryEventType + } = useEnclaveSDK({ + autoConnect: true, + contracts: { + enclave: '0x...', + ciphernodeRegistry: '0x...' + }, + chainId: 1 + }); + + // Listen to events + React.useEffect(() => { + if (!isInitialized) return; + + const handleE3Requested = (event) => { + console.log('E3 requested:', event.data); + }; + + onEnclaveEvent(EnclaveEventType.E3_REQUESTED, handleE3Requested); + + return () => { + off(EnclaveEventType.E3_REQUESTED, handleE3Requested); + }; + }, [isInitialized, onEnclaveEvent, off, EnclaveEventType]); + + // Request computation + const handleRequest = async () => { + try { + const hash = await requestE3({ + filter: '0x...', + threshold: [2, 3], + startWindow: [BigInt(Date.now()), BigInt(Date.now() + 300000)], + duration: BigInt(1800), + e3Program: '0x...', + e3ProgramParams: '0x...', + computeProviderParams: '0x...', + value: BigInt('1000000000000000') // 0.001 ETH + }); + console.log('E3 requested with hash:', hash); + } catch (error) { + console.error('Failed to request E3:', error); + } + }; + + if (error) { + return

Error: {error}
; + } + + if (!isInitialized) { + return
Initializing SDK...
; + } + + return ( +
+ +
+ ); +} +``` + +## Features + +- **Automatic Wallet Integration**: Seamlessly integrates with wagmi for wallet management +- **Event Handling**: Simple event subscription and cleanup +- **Error Handling**: Comprehensive error states and messages +- **TypeScript Support**: Full type safety with TypeScript +- **Optimized**: Automatic cleanup and efficient re-renders + +## Requirements + +- React 18+ +- wagmi 2.0+ +- viem 2.0+ + +## API + +### useEnclaveSDK(config) + +#### Parameters + +- `config.autoConnect` (boolean, optional): Automatically initialize SDK when wallet is connected +- `config.contracts` (object, optional): Contract addresses for Enclave and CiphernodeRegistry +- `config.chainId` (number, optional): Chain ID for the network + +#### Returns + +- `sdk`: The raw SDK instance +- `isInitialized`: Boolean indicating if SDK is ready +- `error`: Error message if initialization failed +- `requestE3`: Function to request E3 computation +- `activateE3`: Function to activate E3 environment +- `publishInput`: Function to publish encrypted inputs +- `onEnclaveEvent`: Function to subscribe to events +- `off`: Function to unsubscribe from events +- `EnclaveEventType`: Event type constants +- `RegistryEventType`: Registry event type constants + +## License + +MIT \ No newline at end of file diff --git a/packages/enclave-react/package.json b/packages/enclave-react/package.json new file mode 100644 index 0000000000..0dfbea7e1a --- /dev/null +++ b/packages/enclave-react/package.json @@ -0,0 +1,60 @@ +{ + "name": "@gnosis-guild/enclave-react", + "version": "0.0.6-test", + "description": "React hooks and utilities for Enclave SDK", + "type": "module", + "private": false, + "exports": { + ".": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + } + }, + "sideEffects": false, + "files": [ + "dist" + ], + "scripts": { + "build": "tsup", + "dev": "tsup --watch", + "clean": "rm -rf dist", + "prepublishOnly": "pnpm run clean && pnpm run build", + "release": "pnpm publish --access=public" + }, + "keywords": [ + "react", + "hooks", + "enclave", + "encryption", + "fhe", + "e3" + ], + "author": { + "name": "gnosisguild", + "url": "https://github.com/gnosisguild" + }, + "license": "LGPL-3.0-only", + "peerDependencies": { + "react": "^18.2.0", + "wagmi": "^2.14.16" + }, + "publishConfig": { + "access": "public", + "git-checks": false + }, + "dependencies": { + "@gnosis-guild/enclave-sdk": "workspace:*", + "viem": "2.30.6" + }, + "devDependencies": { + "@gnosis-guild/enclave-config": "workspace:*", + "@types/react": "^18.2.0", + "tsup": "^8.5.0", + "typescript": "5.8.3" + }, + "repository": { + "type": "git", + "url": "https://github.com/gnosisguild/enclave.git", + "directory": "packages/enclave-react" + } +} diff --git a/packages/enclave-react/src/index.ts b/packages/enclave-react/src/index.ts new file mode 100644 index 0000000000..f7a747c111 --- /dev/null +++ b/packages/enclave-react/src/index.ts @@ -0,0 +1,26 @@ +/** + * @gnosis-guild/enclave-react + * + * React hooks and utilities for Enclave SDK + */ + +export { useEnclaveSDK } from "./useEnclaveSDK"; +export type { UseEnclaveSDKConfig, UseEnclaveSDKReturn } from "./useEnclaveSDK"; + +// Re-export commonly used types from the main SDK for convenience +export type { + AllEventTypes, + EventCallback, + EnclaveEvent, + E3RequestedData, + E3ActivatedData, + InputPublishedData, + CiphertextOutputPublishedData, + PlaintextOutputPublishedData, + CiphernodeAddedData, + CiphernodeRemovedData, + CommitteeRequestedData, + CommitteePublishedData, +} from "@gnosis-guild/enclave-sdk"; + +export { EnclaveEventType, RegistryEventType } from "@gnosis-guild/enclave-sdk"; diff --git a/packages/enclave-react/src/useEnclaveSDK.ts b/packages/enclave-react/src/useEnclaveSDK.ts new file mode 100644 index 0000000000..f6259e9b0e --- /dev/null +++ b/packages/enclave-react/src/useEnclaveSDK.ts @@ -0,0 +1,198 @@ +import { useState, useEffect, useCallback, useRef } from "react"; +import { useWalletClient, usePublicClient } from "wagmi"; +import { + EnclaveSDK, + type SDKConfig, + type AllEventTypes, + type EventCallback, + EnclaveEventType, + RegistryEventType, + SDKError, +} from "@gnosis-guild/enclave-sdk"; + +export interface UseEnclaveSDKConfig { + contracts?: { + enclave: `0x${string}`; + ciphernodeRegistry: `0x${string}`; + }; + chainId?: number; + autoConnect?: boolean; +} + +export interface UseEnclaveSDKReturn { + sdk: EnclaveSDK | null; + isInitialized: boolean; + error: string | null; + // Contract interaction methods (only the ones commonly used) + requestE3: typeof EnclaveSDK.prototype.requestE3; + activateE3: typeof EnclaveSDK.prototype.activateE3; + publishInput: typeof EnclaveSDK.prototype.publishInput; + // Event handling + onEnclaveEvent: ( + eventType: T, + callback: EventCallback, + ) => void; + off: ( + eventType: T, + callback: EventCallback, + ) => void; + // Event types for convenience + EnclaveEventType: typeof EnclaveEventType; + RegistryEventType: typeof RegistryEventType; +} + +/** + * React hook for interacting with Enclave SDK + * + * @param config Configuration for the SDK initialization + * @returns Object containing SDK instance and helper methods + * + * @example + * ```tsx + * import { useEnclaveSDK } from '@gnosis-guild/enclave-react'; + * + * function MyComponent() { + * const { + * sdk, + * isInitialized, + * error, + * requestE3, + * onEnclaveEvent + * } = useEnclaveSDK({ + * autoConnect: true, + * contracts: { + * enclave: '0x...', + * ciphernodeRegistry: '0x...' + * } + * }); + * + * // Use the SDK... + * } + * ``` + */ +export const useEnclaveSDK = ( + config: UseEnclaveSDKConfig, +): UseEnclaveSDKReturn => { + const [sdk, setSdk] = useState(null); + const [isInitialized, setIsInitialized] = useState(false); + const [error, setError] = useState(null); + const sdkRef = useRef(null); + + const publicClient = usePublicClient(); + + const { data: walletClient } = useWalletClient(); + const initializeSDK = useCallback(async () => { + try { + setError(null); + + if (!publicClient) { + throw new Error("Public client not available"); + } + + if (sdk) { + sdk.cleanup(); + } + + const sdkConfig: SDKConfig = { + publicClient, + walletClient, + contracts: config.contracts || { + enclave: "0x0000000000000000000000000000000000000000", + ciphernodeRegistry: "0x0000000000000000000000000000000000000000", + }, + chainId: config.chainId, + }; + + const newSdk = new EnclaveSDK(sdkConfig); + await newSdk.initialize(); + setSdk(newSdk); + sdkRef.current = newSdk; + setIsInitialized(true); + } catch (err: unknown) { + const errorMessage = + err instanceof SDKError + ? `SDK Error (${err.code}): ${err.message}` + : `Failed to initialize SDK: ${err}`; + setError(errorMessage); + console.error("SDK initialization failed:", err); + } + }, [publicClient, walletClient, config.contracts, config.chainId]); + + // Initialize SDK when wagmi clients are available + useEffect(() => { + if (config.autoConnect && publicClient && !isInitialized) { + initializeSDK(); + } + }, [config.autoConnect, publicClient, isInitialized, initializeSDK]); + + // Re-initialize when wallet client changes (connect/disconnect) + useEffect(() => { + if (isInitialized && publicClient && walletClient) { + initializeSDK(); + } + }, [walletClient, initializeSDK]); + + // Cleanup on unmount + useEffect(() => { + return () => { + if (sdkRef.current) { + sdkRef.current.cleanup(); + } + }; + }, []); + + // Contract interaction methods + const requestE3 = useCallback( + (...args: Parameters) => { + if (!sdk) throw new Error("SDK not initialized"); + return sdk.requestE3(...args); + }, + [sdk], + ); + + const activateE3 = useCallback( + (...args: Parameters) => { + if (!sdk) throw new Error("SDK not initialized"); + return sdk.activateE3(...args); + }, + [sdk], + ); + + const publishInput = useCallback( + (...args: Parameters) => { + if (!sdk) throw new Error("SDK not initialized"); + return sdk.publishInput(...args); + }, + [sdk], + ); + + // Event handling methods + const onEnclaveEvent = useCallback( + (eventType: T, callback: EventCallback) => { + if (!sdk) throw new Error("SDK not initialized"); + return sdk.onEnclaveEvent(eventType, callback); + }, + [sdk], + ); + + const off = useCallback( + (eventType: T, callback: EventCallback) => { + if (!sdk) throw new Error("SDK not initialized"); + return sdk.off(eventType, callback); + }, + [sdk], + ); + + return { + sdk, + isInitialized, + error, + requestE3, + activateE3, + publishInput, + onEnclaveEvent, + off, + EnclaveEventType, + RegistryEventType, + }; +}; diff --git a/packages/enclave-react/tsconfig.json b/packages/enclave-react/tsconfig.json new file mode 100644 index 0000000000..e55c5bb253 --- /dev/null +++ b/packages/enclave-react/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@gnosis-guild/enclave-config/dom.tsconfig.json", + "include": ["src/**/*", "tests/**/*"], + "exclude": ["node_modules", "dist"], + "compilerOptions": { + "incremental": true, + "tsBuildInfoFile": "./dist/.tsbuildinfo" + } +} diff --git a/packages/enclave-react/tsup.config.js b/packages/enclave-react/tsup.config.js new file mode 100644 index 0000000000..21d41b63ae --- /dev/null +++ b/packages/enclave-react/tsup.config.js @@ -0,0 +1,7 @@ +import { defineConfig } from "tsup"; +import { baseConfig } from "@gnosis-guild/enclave-config/tsup"; + +export default defineConfig({ + ...baseConfig, + include: ["./src/**/*.ts"], +}); diff --git a/packages/enclave-sdk/.gitignore b/packages/enclave-sdk/.gitignore new file mode 100644 index 0000000000..1521c8b765 --- /dev/null +++ b/packages/enclave-sdk/.gitignore @@ -0,0 +1 @@ +dist diff --git a/packages/enclave-sdk/README.md b/packages/enclave-sdk/README.md new file mode 100644 index 0000000000..5fb59c0329 --- /dev/null +++ b/packages/enclave-sdk/README.md @@ -0,0 +1,340 @@ +# Enclave TypeScript SDK + +A powerful, type-safe TypeScript SDK for interacting with Enclave smart +contracts. This SDK provides real-time event listening, contract interaction +methods, and comprehensive error handling. + +## Features + +- **Event-driven architecture**: Listen to smart contract events in real-time +- **Type-safe**: Built with TypeScript and uses generated types from contracts +- **Easy contract interactions**: Simple methods for reading from and writing to + contracts +- **React integration**: Includes React hooks for easy frontend integration +- **Error handling**: Comprehensive error handling with custom error types +- **Gas estimation**: Built-in gas estimation for transactions +- **Event polling**: Support for both WebSocket and polling-based event + listening + +## Installation + +```bash +pnpm add @gnosis-guild/enclave-sdk +``` + +## Quick Start + +```typescript +import { + EnclaveSDK, + EnclaveEventType, + RegistryEventType, +} from "@gnosis-guild/enclave-sdk"; +import { createPublicClient, createWalletClient, http, custom } from "viem"; + +// Initialize clients +const publicClient = createPublicClient({ + transport: http("YOUR_RPC_URL"), +}); + +const walletClient = createWalletClient({ + transport: custom(window.ethereum), +}); + +// Create SDK instance +const sdk = new EnclaveSDK({ + publicClient, + walletClient, + contracts: { + enclave: "0x...", // Your Enclave contract address + ciphernodeRegistry: "0x...", // Your CiphernodeRegistry contract address + }, + chainId: 1, // Optional +}); + +// Initialize the SDK +await sdk.initialize(); + +// Listen to events with the unified event system +sdk.onEnclaveEvent(EnclaveEventType.E3_REQUESTED, (event) => { + console.log("E3 Requested:", event.data); +}); + +sdk.onEnclaveEvent(RegistryEventType.CIPHERNODE_ADDED, (event) => { + console.log("Ciphernode Added:", event.data); +}); + +// Interact with contracts +const hash = await sdk.requestE3({ + filter: "0x...", + threshold: [1, 3], + startWindow: [BigInt(0), BigInt(100)], + duration: BigInt(3600), + e3Program: "0x...", + e3ProgramParams: "0x...", + computeProviderParams: "0x...", +}); +``` + +## Usage within a browser + +Usage within a typescript project should work out of the box, however in order to use wasm related functionality of the SDK within the browser vite you must do the following: + +- Use `vite` +- Use the `vite-plugin-top-level-await` plugin +- Use the `vite-plugin-wasm` plugin +- Exclude the `@gnosis-guild/e3-wasm` package from bundling optimization. + +This will enable `vite` to correctly bundle and serve the wasm bundle we use effectively. + +``` +import { defineConfig } from 'vite' +import wasm from 'vite-plugin-wasm' +import topLevelAwait from 'vite-plugin-top-level-await' + +export default defineConfig({ + // other config ... + optimizeDeps: { + exclude: ['@gnosis-guild/e3-wasm'], + }, + plugins: [wasm(), topLevelAwait()], +}) +``` + +## Event System + +The SDK uses a unified event system with TypeScript enums for type safety: + +### Enclave Events + +```typescript +enum EnclaveEventType { + // E3 Lifecycle + E3_REQUESTED = "E3Requested", + E3_ACTIVATED = "E3Activated", + INPUT_PUBLISHED = "InputPublished", + CIPHERTEXT_OUTPUT_PUBLISHED = "CiphertextOutputPublished", + PLAINTEXT_OUTPUT_PUBLISHED = "PlaintextOutputPublished", + + // E3 Program Management + E3_PROGRAM_ENABLED = "E3ProgramEnabled", + E3_PROGRAM_DISABLED = "E3ProgramDisabled", + + // Configuration + CIPHERNODE_REGISTRY_SET = "CiphernodeRegistrySet", + MAX_DURATION_SET = "MaxDurationSet", + // ... more events +} +``` + +### Registry Events + +```typescript +enum RegistryEventType { + CIPHERNODE_ADDED = "CiphernodeAdded", + CIPHERNODE_REMOVED = "CiphernodeRemoved", + COMMITTEE_REQUESTED = "CommitteeRequested", + COMMITTEE_PUBLISHED = "CommitteePublished", + ENCLAVE_SET = "EnclaveSet", + // ... more events +} +``` + +### Event Data Structure + +Each event follows a consistent structure: + +```typescript +interface EnclaveEvent { + type: T; + data: EventData[T]; // Typed based on event type + log: Log; // Raw viem log + timestamp: Date; + blockNumber: bigint; + transactionHash: string; +} +``` + +## React Integration + +The SDK includes a React hook for easy integration: + +```typescript +import { useEnclaveSDK } from '@gnosis-guild/enclave/sdk'; + +function MyComponent() { + const { + sdk, + isInitialized, + isConnecting, + error, + connectWallet, + requestE3, + onEnclaveEvent, + EnclaveEventType + } = useEnclaveSDK({ + contracts: { + enclave: '0x...', + ciphernodeRegistry: '0x...' + }, + rpcUrl: 'YOUR_RPC_URL', + autoConnect: true + }); + + useEffect(() => { + if (isInitialized) { + onEnclaveEvent(EnclaveEventType.E3_REQUESTED, (event) => { + console.log('New E3 request:', event); + }); + } + }, [isInitialized]); + + return ( +
+ {!isInitialized && ( + + )} + {/* Your UI */} +
+ ); +} +``` + +## API Reference + +### Core Methods + +#### Contract Interactions + +```typescript +// Request a new E3 computation +await sdk.requestE3({ + filter: `0x${string}`, + threshold: [number, number], + startWindow: [bigint, bigint], + duration: bigint, + e3Program: `0x${string}`, + e3ProgramParams: `0x${string}`, + computeProviderParams: `0x${string}`, + value?: bigint, + gasLimit?: bigint +}); + +// Activate an E3 computation +await sdk.activateE3(e3Id: bigint, publicKey: `0x${string}`, gasLimit?: bigint); + +// Publish input data +await sdk.publishInput(e3Id: bigint, data: `0x${string}`, gasLimit?: bigint); + +// Read operations +const e3Data = await sdk.getE3(e3Id: bigint); +``` + +#### Event Handling + +```typescript +sdk.onEnclaveEvent(eventType: AllEventTypes, callback: EventCallback); + +sdk.off(eventType: AllEventTypes, callback: EventCallback); + +const logs = await sdk.getHistoricalEvents( + eventType: AllEventTypes, + fromBlock?: bigint, + toBlock?: bigint +); + +// Event polling (if websockets unavailable) +await sdk.startEventPolling(); +sdk.stopEventPolling(); +``` + +#### Utilities + +```typescript +// Gas estimation +const gas = await sdk.estimateGas(functionName, args, contractAddress, abi, value?); + +// Transaction waiting +const receipt = await sdk.waitForTransaction(hash); + +// Configuration updates +sdk.updateConfig(newConfig: Partial); + +// Cleanup +sdk.cleanup(); +``` + +## Configuration + +```typescript +interface SDKConfig { + publicClient: PublicClient; + walletClient?: WalletClient; + contracts: { + enclave: `0x${string}`; + ciphernodeRegistry: `0x${string}`; + }; + chainId?: number; +} +``` + +## Error Handling + +The SDK includes comprehensive error handling: + +```typescript +import { SDKError } from "@gnosis-guild/enclave-sdk"; + +try { + await sdk.requestE3(params); +} catch (error) { + if (error instanceof SDKError) { + console.error(`SDK Error (${error.code}): ${error.message}`); + } else { + console.error("Unexpected error:", error); + } +} +``` + +## Development + +### Building the SDK + +```bash +cd packages/evm +pnpm compile +``` + +### Running the Demo + +```bash +cd examples/basic/client +pnpm install +pnpm dev +``` + +The demo showcases all SDK features including real-time event listening and +contract interactions. + +### Testing + +```bash +cd packages/evm +pnpm test +``` + +## Architecture + +The SDK consists of several key components: + +- **EnclaveSDK**: Main orchestrator class +- **ContractClient**: Handles contract read/write operations +- **EventListener**: Manages real-time event listening +- **Types**: TypeScript definitions with full type safety +- **Utils**: Helper functions and error classes + +## License + +This project is licensed under the MIT License. diff --git a/packages/enclave-sdk/package.json b/packages/enclave-sdk/package.json new file mode 100644 index 0000000000..e13c442055 --- /dev/null +++ b/packages/enclave-sdk/package.json @@ -0,0 +1,39 @@ +{ + "name": "@gnosis-guild/enclave-sdk", + "private": false, + "version": "0.0.6-test", + "type": "module", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + } + }, + "scripts": { + "prebuild": "cd ../evm && pnpm compile:ts && cd ../../crates/wasm && pnpm build", + "build": "tsup", + "dev": "tsup --watch", + "clean": "rm -rf dist", + "test": "vitest --run", + "prerelease": "pnpm clean && pnpm build", + "release": "pnpm publish --access=public" + }, + "devDependencies": { + "@gnosis-guild/enclave-config": "workspace:*", + "concurrently": "^9.1.2", + "tsup": "^8.5.0", + "typescript": "5.8.3", + "vite": "^6.2.0", + "vite-plugin-dts": "^4.5.3" + }, + "dependencies": { + "@gnosis-guild/e3-wasm": "workspace:*", + "@gnosis-guild/enclave": "workspace:*", + "comlink": "^4.4.2", + "viem": "2.30.6", + "vite-plugin-top-level-await": "^1.5.0", + "vite-plugin-wasm": "^3.4.1", + "vitest": "^1.6.1", + "web-worker": "^1.5.0" + } +} diff --git a/packages/enclave-sdk/src/contract-client.ts b/packages/enclave-sdk/src/contract-client.ts new file mode 100644 index 0000000000..18500fd48a --- /dev/null +++ b/packages/enclave-sdk/src/contract-client.ts @@ -0,0 +1,352 @@ +import { + Abi, + Hash, + PublicClient, + TransactionReceipt, + WalletClient, +} from "viem"; + +import { + CiphernodeRegistryOwnable__factory, + Enclave__factory, +} from "@gnosis-guild/enclave/types"; +import { type E3 } from "./types"; +import { SDKError, isValidAddress } from "./utils"; + +export class ContractClient { + private contractInfo: { + enclave: { address: `0x${string}`; abi: Abi }; + ciphernodeRegistry: { address: `0x${string}`; abi: Abi }; + } | null = null; + + constructor( + private publicClient: PublicClient, + private walletClient?: WalletClient, + private addresses: { + enclave: `0x${string}`; + ciphernodeRegistry: `0x${string}`; + } = { + enclave: "0x0000000000000000000000000000000000000000", + ciphernodeRegistry: "0x0000000000000000000000000000000000000000", + }, + ) { + if (!isValidAddress(addresses.enclave)) { + throw new SDKError("Invalid Enclave contract address", "INVALID_ADDRESS"); + } + if (!isValidAddress(addresses.ciphernodeRegistry)) { + throw new SDKError( + "Invalid CiphernodeRegistry contract address", + "INVALID_ADDRESS", + ); + } + } + + /** + * Initialize contract instances + */ + public async initialize(): Promise { + try { + this.contractInfo = { + enclave: { + address: this.addresses.enclave, + abi: Enclave__factory.abi, + }, + ciphernodeRegistry: { + address: this.addresses.ciphernodeRegistry, + abi: CiphernodeRegistryOwnable__factory.abi, + }, + }; + } catch (error) { + throw new SDKError( + `Failed to initialize contracts: ${error}`, + "INITIALIZATION_FAILED", + ); + } + } + + /** + * Request a new E3 computation + * request(address filter, uint32[2] threshold, uint256[2] startWindow, uint256 duration, IE3Program e3Program, bytes e3ProgramParams, bytes computeProviderParams) + */ + public async requestE3( + filter: `0x${string}`, + threshold: [number, number], + startWindow: [bigint, bigint], + duration: bigint, + e3Program: `0x${string}`, + e3ProgramParams: `0x${string}`, + computeProviderParams: `0x${string}`, + value?: bigint, + gasLimit?: bigint, + ): Promise { + if (!this.walletClient) { + throw new SDKError( + "Wallet client required for write operations", + "NO_WALLET", + ); + } + + if (!this.contractInfo) { + await this.initialize(); + } + + try { + const account = this.walletClient.account; + if (!account) { + throw new SDKError("No account connected", "NO_ACCOUNT"); + } + + // Simulate transaction + const { request } = await this.publicClient.simulateContract({ + address: this.addresses.enclave, + abi: Enclave__factory.abi, + functionName: "request", + args: [ + filter, + threshold, + startWindow, + duration, + e3Program, + e3ProgramParams, + computeProviderParams, + ], + account, + value: value || BigInt(0), + gas: gasLimit, + }); + + // Execute transaction + const hash = await this.walletClient.writeContract(request); + + return hash; + } catch (error) { + throw new SDKError(`Failed to request E3: ${error}`, "REQUEST_E3_FAILED"); + } + } + + /** + * Activate an E3 computation + * activate(uint256 e3Id, bytes memory publicKey) + */ + public async activateE3( + e3Id: bigint, + publicKey: `0x${string}`, + gasLimit?: bigint, + ): Promise { + if (!this.walletClient) { + throw new SDKError( + "Wallet client required for write operations", + "NO_WALLET", + ); + } + + if (!this.contractInfo) { + await this.initialize(); + } + + try { + const account = this.walletClient.account; + if (!account) { + throw new SDKError("No account connected", "NO_ACCOUNT"); + } + + const { request } = await this.publicClient.simulateContract({ + address: this.addresses.enclave, + abi: Enclave__factory.abi, + functionName: "activate", + args: [e3Id, publicKey], + account, + gas: gasLimit, + }); + + const hash = await this.walletClient.writeContract(request); + + return hash; + } catch (error) { + throw new SDKError( + `Failed to activate E3: ${error}`, + "ACTIVATE_E3_FAILED", + ); + } + } + + /** + * Publish input for an E3 computation + * publishInput(uint256 e3Id, bytes memory data) + */ + public async publishInput( + e3Id: bigint, + data: `0x${string}`, + gasLimit?: bigint, + ): Promise { + if (!this.walletClient) { + throw new SDKError( + "Wallet client required for write operations", + "NO_WALLET", + ); + } + + if (!this.contractInfo) { + await this.initialize(); + } + + try { + const account = this.walletClient.account; + if (!account) { + throw new SDKError("No account connected", "NO_ACCOUNT"); + } + + const { request } = await this.publicClient.simulateContract({ + address: this.addresses.enclave, + abi: Enclave__factory.abi, + functionName: "publishInput", + args: [e3Id, data], + account, + gas: gasLimit, + }); + + const hash = await this.walletClient.writeContract(request); + + return hash; + } catch (error) { + throw new SDKError( + `Failed to publish input: ${error}`, + "PUBLISH_INPUT_FAILED", + ); + } + } + + /** + * Publish ciphertext output for an E3 computation + * publishCiphertextOutput(uint256 e3Id, bytes memory ciphertextOutput, bytes memory proof) + */ + public async publishCiphertextOutput( + e3Id: bigint, + ciphertextOutput: `0x${string}`, + proof: `0x${string}`, + gasLimit?: bigint, + ): Promise { + if (!this.walletClient) { + throw new SDKError( + "Wallet client required for write operations", + "NO_WALLET", + ); + } + + if (!this.contractInfo) { + await this.initialize(); + } + + try { + const account = this.walletClient.account; + if (!account) { + throw new SDKError("No account connected", "NO_ACCOUNT"); + } + + // Simulate transaction + const { request } = await this.publicClient.simulateContract({ + address: this.addresses.enclave, + abi: Enclave__factory.abi, + functionName: "publishCiphertextOutput", + args: [e3Id, ciphertextOutput, proof], + account, + gas: gasLimit, + }); + + // Execute transaction + const hash = await this.walletClient.writeContract(request); + + return hash; + } catch (error) { + throw new SDKError( + `Failed to publish ciphertext output: ${error}`, + "PUBLISH_CIPHERTEXT_OUTPUT_FAILED", + ); + } + } + + /** + * Get E3 information + * Based on the contract: getE3(uint256 e3Id) returns (E3 memory e3) + */ + public async getE3(e3Id: bigint): Promise { + if (!this.contractInfo) { + await this.initialize(); + } + + try { + const result: E3 = await this.publicClient.readContract({ + address: this.addresses.enclave, + abi: Enclave__factory.abi, + functionName: "getE3", + args: [e3Id], + }); + + return result; + } catch (error) { + throw new SDKError(`Failed to get E3: ${error}`, "GET_E3_FAILED"); + } + } + + /** + * Estimate gas for a transaction + */ + public async estimateGas( + functionName: string, + args: readonly unknown[], + contractAddress: `0x${string}`, + abi: Abi, + value?: bigint, + ): Promise { + if (!this.walletClient) { + throw new SDKError( + "Wallet client required for gas estimation", + "NO_WALLET", + ); + } + + try { + const account = this.walletClient.account; + if (!account) { + throw new SDKError("No account connected", "NO_ACCOUNT"); + } + + const estimateParams = { + address: contractAddress, + abi, + functionName, + args, + account, + ...(value !== undefined && { value }), + }; + + const gas = await this.publicClient.estimateContractGas(estimateParams); + + return gas; + } catch (error) { + throw new SDKError( + `Failed to estimate gas: ${error}`, + "GAS_ESTIMATION_FAILED", + ); + } + } + + /** + * Wait for transaction confirmation + */ + public async waitForTransaction(hash: Hash): Promise { + try { + const receipt = await this.publicClient.waitForTransactionReceipt({ + hash, + confirmations: 1, + }); + + return receipt; + } catch (error) { + throw new SDKError( + `Failed to wait for transaction: ${error}`, + "TRANSACTION_WAIT_FAILED", + ); + } + } +} diff --git a/packages/enclave-sdk/src/enclave-sdk.ts b/packages/enclave-sdk/src/enclave-sdk.ts new file mode 100644 index 0000000000..9e3311d89b --- /dev/null +++ b/packages/enclave-sdk/src/enclave-sdk.ts @@ -0,0 +1,382 @@ +import { + type Abi, + type Hash, + type Log, + WalletClient, + createPublicClient, + createWalletClient, + http, + webSocket, +} from "viem"; +import { privateKeyToAccount } from "viem/accounts"; +import { hardhat, mainnet, monadTestnet, sepolia } from "viem/chains"; + +import { + CiphernodeRegistryOwnable__factory, + Enclave__factory, +} from "@gnosis-guild/enclave/types"; +import { ContractClient } from "./contract-client"; +import { EventListener } from "./event-listener"; +import { + type AllEventTypes, + type E3, + EnclaveEventType, + type EventCallback, + type SDKConfig, +} from "./types"; +import { SDKError, isValidAddress } from "./utils"; + +export class EnclaveSDK { + public static readonly chains = { + 1: mainnet, + 11155111: sepolia, + 41454: monadTestnet, + 31337: hardhat, + } as const; + + private eventListener: EventListener; + private contractClient: ContractClient; + private initialized = false; + + constructor(private config: SDKConfig) { + if (!config.publicClient) { + throw new SDKError("Public client is required", "MISSING_PUBLIC_CLIENT"); + } + + if (!isValidAddress(config.contracts.enclave)) { + throw new SDKError("Invalid Enclave contract address", "INVALID_ADDRESS"); + } + + if (!isValidAddress(config.contracts.ciphernodeRegistry)) { + throw new SDKError( + "Invalid CiphernodeRegistry contract address", + "INVALID_ADDRESS", + ); + } + + this.eventListener = new EventListener(config.publicClient); + this.contractClient = new ContractClient( + config.publicClient, + config.walletClient, + config.contracts, + ); + } + + /** + * Initialize the SDK + */ + // TODO: Delete this it is redundant + public async initialize(): Promise { + if (this.initialized) return; + + try { + await this.contractClient.initialize(); + this.initialized = true; + } catch (error) { + throw new SDKError( + `Failed to initialize SDK: ${error}`, + "SDK_INITIALIZATION_FAILED", + ); + } + } + + /** + * Request a new E3 computation + */ + public async requestE3(params: { + filter: `0x${string}`; + threshold: [number, number]; + startWindow: [bigint, bigint]; + duration: bigint; + e3Program: `0x${string}`; + e3ProgramParams: `0x${string}`; + computeProviderParams: `0x${string}`; + value?: bigint; + gasLimit?: bigint; + }): Promise { + console.log(">>> REQUEST"); + + if (!this.initialized) { + await this.initialize(); + } + + return this.contractClient.requestE3( + params.filter, + params.threshold, + params.startWindow, + params.duration, + params.e3Program, + params.e3ProgramParams, + params.computeProviderParams, + params.value, + params.gasLimit, + ); + } + + /** + * Activate an E3 computation + */ + public async activateE3( + e3Id: bigint, + publicKey: `0x${string}`, + gasLimit?: bigint, + ): Promise { + if (!this.initialized) { + await this.initialize(); + } + + return this.contractClient.activateE3(e3Id, publicKey, gasLimit); + } + + /** + * Publish input for an E3 computation + */ + public async publishInput( + e3Id: bigint, + data: `0x${string}`, + gasLimit?: bigint, + ): Promise { + if (!this.initialized) { + await this.initialize(); + } + + return this.contractClient.publishInput(e3Id, data, gasLimit); + } + + /** + * Publish ciphertext output for an E3 computation + */ + public async publishCiphertextOutput( + e3Id: bigint, + ciphertextOutput: `0x${string}`, + proof: `0x${string}`, + gasLimit?: bigint, + ): Promise { + if (!this.initialized) { + await this.initialize(); + } + + return this.contractClient.publishCiphertextOutput( + e3Id, + ciphertextOutput, + proof, + gasLimit, + ); + } + + /** + * Get E3 information + */ + public async getE3(e3Id: bigint): Promise { + if (!this.initialized) { + await this.initialize(); + } + + return this.contractClient.getE3(e3Id); + } + + /** + * Unified Event Listening - Listen to any Enclave or Registry event + */ + public onEnclaveEvent( + eventType: T, + callback: EventCallback, + ): void { + // Determine which contract to listen to based on event type + const isEnclaveEvent = Object.values(EnclaveEventType).includes( + eventType as EnclaveEventType, + ); + const contractAddress = isEnclaveEvent + ? this.config.contracts.enclave + : this.config.contracts.ciphernodeRegistry; + const abi = isEnclaveEvent + ? Enclave__factory.abi + : CiphernodeRegistryOwnable__factory.abi; + + void this.eventListener.watchContractEvent( + contractAddress, + eventType, + abi, + callback, + ); + } + + /** + * Remove event listener + */ + public off( + eventType: T, + callback: EventCallback, + ): void { + this.eventListener.off(eventType, callback); + } + + /** + * Handle an event only once + */ + public once( + type: T, + callback: EventCallback, + ): void { + const handler: EventCallback = (event) => { + this.off(type, handler); + const prom = callback(event); + if (prom) { + prom.catch((e) => console.log(e)); + } + }; + this.onEnclaveEvent(type, handler); + } + + /** + * Get historical events + */ + public async getHistoricalEvents( + eventType: AllEventTypes, + fromBlock?: bigint, + toBlock?: bigint, + ): Promise { + const isEnclaveEvent = Object.values(EnclaveEventType).includes( + eventType as EnclaveEventType, + ); + const contractAddress = isEnclaveEvent + ? this.config.contracts.enclave + : this.config.contracts.ciphernodeRegistry; + const abi = isEnclaveEvent + ? Enclave__factory.abi + : CiphernodeRegistryOwnable__factory.abi; + + return this.eventListener.getHistoricalEvents( + contractAddress, + eventType, + abi, + fromBlock, + toBlock, + ); + } + + /** + * Start polling for events + */ + public async startEventPolling(): Promise { + void this.eventListener.startPolling(); + } + + /** + * Stop polling for events + */ + public stopEventPolling(): void { + this.eventListener.stopPolling(); + } + + /** + * Utility methods + */ + + /** + * Estimate gas for a transaction + */ + public async estimateGas( + functionName: string, + args: readonly unknown[], + contractAddress: `0x${string}`, + abi: Abi, + value?: bigint, + ): Promise { + return this.contractClient.estimateGas( + functionName, + args, + contractAddress, + abi, + value, + ); + } + + /** + * Wait for transaction confirmation + */ + public async waitForTransaction(hash: Hash): Promise { + return this.contractClient.waitForTransaction(hash); + } + + /** + * Clean up resources + */ + public cleanup(): void { + this.eventListener.cleanup(); + } + + /** + * Update SDK configuration + */ + // TODO: We should delete this as we don't want a stateful client. + public updateConfig(newConfig: Partial): void { + if (newConfig.publicClient) { + this.config.publicClient = newConfig.publicClient; + this.eventListener = new EventListener(newConfig.publicClient); + } + + if (newConfig.walletClient) { + this.config.walletClient = newConfig.walletClient; + } + + if (newConfig.contracts) { + this.config.contracts = { + ...this.config.contracts, + ...newConfig.contracts, + }; + } + + if (newConfig.chainId) { + this.config.chainId = newConfig.chainId; + } + + this.contractClient = new ContractClient( + this.config.publicClient, + this.config.walletClient, + this.config.contracts, + ); + + this.initialized = false; + } + + public static create(options: { + rpcUrl: string; + contracts: { + enclave: `0x${string}`; + ciphernodeRegistry: `0x${string}`; + }; + privateKey?: `0x${string}`; + chainId: keyof typeof EnclaveSDK.chains; + }): EnclaveSDK { + const chain = EnclaveSDK.chains[options.chainId]; + + const isWebSocket = + options.rpcUrl.startsWith("ws://") || options.rpcUrl.startsWith("wss://"); + const transport = isWebSocket + ? webSocket(options.rpcUrl, { + keepAlive: { interval: 30_000 }, + reconnect: { attempts: 5, delay: 2_000 }, + }) + : http(options.rpcUrl); + const publicClient = createPublicClient({ + chain, + transport, + }) as SDKConfig["publicClient"]; + let walletClient: WalletClient | undefined = undefined; + if (options.privateKey) { + const account = privateKeyToAccount(options.privateKey); + walletClient = createWalletClient({ + account, + chain, + transport, + }); + } + + return new EnclaveSDK({ + publicClient, + walletClient, + contracts: options.contracts, + }); + } +} diff --git a/packages/enclave-sdk/src/event-listener.ts b/packages/enclave-sdk/src/event-listener.ts new file mode 100644 index 0000000000..1bd13b05f6 --- /dev/null +++ b/packages/enclave-sdk/src/event-listener.ts @@ -0,0 +1,272 @@ +import { type Abi, type Log, type PublicClient } from "viem"; + +import { + type AllEventTypes, + type EnclaveEvent, + type EnclaveEventData, + type EnclaveEventType, + type EventCallback, + type EventListenerConfig, + type RegistryEventData, + type RegistryEventType, + type SDKEventEmitter, +} from "./types"; +import { SDKError, sleep } from "./utils"; + +export class EventListener implements SDKEventEmitter { + private listeners: Map> = new Map(); + private activeWatchers: Map void> = new Map(); + private isPolling = false; + private lastBlockNumber: bigint = BigInt(0); + + constructor( + private publicClient: PublicClient, + private config: EventListenerConfig = {}, + ) { } + + /** + * Listen to specific contract events + */ + public async watchContractEvent( + address: `0x${string}`, + eventType: T, + abi: Abi, + callback: EventCallback, + ): Promise { + const watcherKey = `${address}:${eventType}`; + console.log(`watchContractEvent: ${watcherKey}`); + + if (!this.listeners.has(eventType)) { + this.listeners.set(eventType, new Set()); + } + console.log("Added callback"); + this.listeners.get(eventType)!.add(callback as EventCallback); + + // eslint-disable-next-line @typescript-eslint/no-this-alias + const emitter = this; + + // If we don't have an active watcher for this event, create one + if (!this.activeWatchers.has(watcherKey)) { + console.log("Adding active watcher for " + watcherKey); + + try { + const unwatch = this.publicClient.watchContractEvent({ + address, + abi, + eventName: eventType as string, + fromBlock: this.config.fromBlock, + onLogs(logs: Log[]) { + for (let i = 0; i < logs.length; i++) { + const log = logs[i]; + if (!log) { + console.log("warning: Log was falsy when a log was expected!"); + break; + } + const event: EnclaveEvent = { + type: eventType, + data: (log as unknown as { args: unknown }) + .args as T extends EnclaveEventType + ? EnclaveEventData[T] + : T extends RegistryEventType + ? RegistryEventData[T] + : unknown, + log, + timestamp: new Date(), + blockNumber: log.blockNumber ?? BigInt(0), + transactionHash: log.transactionHash ?? "0x", + }; + console.log("Created event, now emitting event..."); + emitter.emit(event); + console.log("Event emitted"); + } + }, + }); + + this.activeWatchers.set(watcherKey, unwatch); + } catch (error) { + throw new SDKError( + `Failed to watch contract event ${eventType} on ${address}: ${error}`, + "WATCH_EVENT_FAILED", + ); + } + } + } + + /** + * Listen to all logs from a specific address + */ + public async watchLogs( + address: `0x${string}`, + callback: (log: Log) => void, + ): Promise { + const watcherKey = `logs:${address}`; + + if (!this.activeWatchers.has(watcherKey)) { + try { + const unwatch = this.publicClient.watchEvent({ + address, + onLogs: (logs: Log[]) => { + logs.forEach((log: Log) => { + callback(log); + }); + }, + }); + + this.activeWatchers.set(watcherKey, unwatch); + } catch (error) { + throw new SDKError( + `Failed to watch logs for address ${address}: ${error}`, + "WATCH_LOGS_FAILED", + ); + } + } + } + + /** + * Start polling for historical events + */ + public async startPolling(): Promise { + if (this.isPolling) return; + + this.isPolling = true; + + try { + this.lastBlockNumber = await this.publicClient.getBlockNumber(); + + void this.pollForEvents(); + } catch (error) { + this.isPolling = false; + throw new SDKError( + `Failed to start polling: ${error}`, + "POLLING_START_FAILED", + ); + } + } + + /** + * Stop polling for events + */ + public stopPolling(): void { + this.isPolling = false; + } + + /** + * Get historical events + */ + public async getHistoricalEvents( + address: `0x${string}`, + eventType: AllEventTypes, + abi: Abi, + fromBlock?: bigint, + toBlock?: bigint, + ): Promise { + try { + const logs = await this.publicClient.getContractEvents({ + address, + abi, + eventName: eventType as string, + fromBlock: fromBlock || this.config.fromBlock, + toBlock: toBlock || this.config.toBlock, + }); + + return logs; + } catch (error) { + throw new SDKError( + `Failed to get historical events: ${error}`, + "HISTORICAL_EVENTS_FAILED", + ); + } + } + + /** + * SDKEventEmitter implementation + */ + public on( + eventType: T, + callback: EventCallback, + ): void { + if (!this.listeners.has(eventType)) { + this.listeners.set(eventType, new Set()); + } + this.listeners.get(eventType)!.add(callback as EventCallback); + } + + public off( + eventType: T, + callback: EventCallback, + ): void { + const callbacks = this.listeners.get(eventType); + if (callbacks) { + callbacks.delete(callback as EventCallback); + if (callbacks.size === 0) { + this.listeners.delete(eventType); + // Find and stop corresponding watchers + const watchersToRemove: string[] = []; + this.activeWatchers.forEach((unwatch, key) => { + if (key.endsWith(`:${eventType}`)) { + try { + unwatch(); + } catch (error) { + console.error(`Error unwatching event ${eventType}:`, error); + } + watchersToRemove.push(key); + } + }); + watchersToRemove.forEach((key) => this.activeWatchers.delete(key)); + } + } + } + + public emit(event: EnclaveEvent): void { + console.log("emit() called for " + event.type); + const callbacks = this.listeners.get(event.type); + if (callbacks) { + console.log("Have " + callbacks.size + " callbacks"); + callbacks.forEach((callback) => { + console.log("Running callback..."); + try { + void (callback as EventCallback)(event); + } catch (error) { + console.error(`Error in event callback for ${event.type}:`, error); + } + }); + } + } + + /** + * Clean up all listeners and watchers + */ + public cleanup(): void { + this.stopPolling(); + + // Stop all active watchers + this.activeWatchers.forEach((unwatch) => { + try { + unwatch(); + } catch (error) { + console.error("Error unwatching during cleanup:", error); + } + }); + this.activeWatchers.clear(); + + // Clear all listeners + this.listeners.clear(); + } + + private async pollForEvents(): Promise { + while (this.isPolling) { + try { + const currentBlock = await this.publicClient.getBlockNumber(); + + if (currentBlock > this.lastBlockNumber) { + this.lastBlockNumber = currentBlock; + } + + await sleep(this.config.pollingInterval || 5000); + } catch (error) { + console.error("Error during polling:", error); + await sleep(this.config.pollingInterval || 5000); + } + } + } +} diff --git a/packages/enclave-sdk/src/index.ts b/packages/enclave-sdk/src/index.ts new file mode 100644 index 0000000000..94563e11cc --- /dev/null +++ b/packages/enclave-sdk/src/index.ts @@ -0,0 +1,59 @@ +// Main SDK class +export { EnclaveSDK } from "./enclave-sdk"; + +// Core classes +export { EventListener } from "./event-listener"; +export { ContractClient } from "./contract-client"; + +// Types and interfaces +export type { + E3, + SDKConfig, + EventListenerConfig, + ContractInstances, + EventFilter, + EventCallback, + SDKEventEmitter, + AllEventTypes, + EnclaveEvent, + // Event data types + E3RequestedData, + E3ActivatedData, + InputPublishedData, + CiphertextOutputPublishedData, + PlaintextOutputPublishedData, + CiphernodeAddedData, + CiphernodeRemovedData, + CommitteeRequestedData, + CommitteePublishedData, + EnclaveEventData, + RegistryEventData, +} from "./types"; + +// Event enums +export { EnclaveEventType, RegistryEventType } from "./types"; + +// Export utilities +export { + SDKError, + isValidAddress, + isValidHash, + formatEventName, + parseEventData, + formatBigInt, + parseBigInt, + generateEventId, + sleep, + getCurrentTimestamp, + // BFV and E3 utilities + BFV_PARAMS_SET, + DEFAULT_COMPUTE_PROVIDER_PARAMS, + DEFAULT_E3_CONFIG, + encodeBfvParams, + encodeComputeProviderParams, + calculateStartWindow, + decodePlaintextOutput, + type ComputeProviderParams, +} from "./utils"; + +export { encryptNumber } from "./wasm"; diff --git a/packages/enclave-sdk/src/types.ts b/packages/enclave-sdk/src/types.ts new file mode 100644 index 0000000000..c8058a7c83 --- /dev/null +++ b/packages/enclave-sdk/src/types.ts @@ -0,0 +1,210 @@ +import { type Log, type PublicClient, type WalletClient } from "viem"; + +import { + type CiphernodeRegistryOwnable, + type Enclave, + type MockCiphernodeRegistry, +} from "@gnosis-guild/enclave/types"; + +export interface SDKConfig { + publicClient: PublicClient; + walletClient?: WalletClient; + contracts: { + enclave: `0x${string}`; + ciphernodeRegistry: `0x${string}`; + }; + chainId?: number; +} + +export interface EventListenerConfig { + fromBlock?: bigint; + toBlock?: bigint; + polling?: boolean; + pollingInterval?: number; +} + +export interface ContractInstances { + enclave: Enclave; + ciphernodeRegistry: CiphernodeRegistryOwnable | MockCiphernodeRegistry; +} + +// Unified Event System +export enum EnclaveEventType { + // E3 Lifecycle Events + E3_REQUESTED = "E3Requested", + E3_ACTIVATED = "E3Activated", + INPUT_PUBLISHED = "InputPublished", + CIPHERTEXT_OUTPUT_PUBLISHED = "CiphertextOutputPublished", + PLAINTEXT_OUTPUT_PUBLISHED = "PlaintextOutputPublished", + + // E3 Program Management + E3_PROGRAM_ENABLED = "E3ProgramEnabled", + E3_PROGRAM_DISABLED = "E3ProgramDisabled", + + // Encryption Scheme Management + ENCRYPTION_SCHEME_ENABLED = "EncryptionSchemeEnabled", + ENCRYPTION_SCHEME_DISABLED = "EncryptionSchemeDisabled", + + // Configuration + CIPHERNODE_REGISTRY_SET = "CiphernodeRegistrySet", + MAX_DURATION_SET = "MaxDurationSet", + ALLOWED_E3_PROGRAMS_PARAMS_SET = "AllowedE3ProgramsParamsSet", + + // Ownership + OWNERSHIP_TRANSFERRED = "OwnershipTransferred", + INITIALIZED = "Initialized", +} + +export enum RegistryEventType { + // Committee Management + COMMITTEE_REQUESTED = "CommitteeRequested", + COMMITTEE_PUBLISHED = "CommitteePublished", + + // Configuration + ENCLAVE_SET = "EnclaveSet", + + // Ownership + OWNERSHIP_TRANSFERRED = "OwnershipTransferred", + INITIALIZED = "Initialized", +} + +// Union type for all events +export type AllEventTypes = EnclaveEventType | RegistryEventType; + +// Event data interfaces based on TypeChain types +export interface E3 { + seed: bigint; + threshold: readonly [number, number]; + requestBlock: bigint; + startWindow: readonly [bigint, bigint]; + duration: bigint; + expiration: bigint; + encryptionSchemeId: string; + e3Program: string; + e3ProgramParams: string; + inputValidator: string; + decryptionVerifier: string; + committeePublicKey: string; + ciphertextOutput: string; + plaintextOutput: string; +} + +export interface E3RequestedData { + e3Id: bigint; + e3: E3; + filter: string; + e3Program: string; +} + +export interface E3ActivatedData { + e3Id: bigint; + expiration: bigint; + committeePublicKey: string; +} + +export interface InputPublishedData { + e3Id: bigint; + data: string; + inputHash: bigint; + index: bigint; +} + +export interface CiphertextOutputPublishedData { + e3Id: bigint; + ciphertextOutput: string; +} + +export interface PlaintextOutputPublishedData { + e3Id: bigint; + plaintextOutput: string; +} + +export interface CiphernodeAddedData { + node: string; + index: bigint; + numNodes: bigint; + size: bigint; +} + +export interface CiphernodeRemovedData { + node: string; + index: bigint; + numNodes: bigint; + size: bigint; +} + +export interface CommitteeRequestedData { + e3Id: bigint; + filter: string; + threshold: [bigint, bigint]; +} + +export interface CommitteePublishedData { + e3Id: bigint; + publicKey: string; +} + +// Event data mapping +export interface EnclaveEventData { + [EnclaveEventType.E3_REQUESTED]: E3RequestedData; + [EnclaveEventType.E3_ACTIVATED]: E3ActivatedData; + [EnclaveEventType.INPUT_PUBLISHED]: InputPublishedData; + [EnclaveEventType.CIPHERTEXT_OUTPUT_PUBLISHED]: CiphertextOutputPublishedData; + [EnclaveEventType.PLAINTEXT_OUTPUT_PUBLISHED]: PlaintextOutputPublishedData; + [EnclaveEventType.E3_PROGRAM_ENABLED]: { e3Program: string }; + [EnclaveEventType.E3_PROGRAM_DISABLED]: { e3Program: string }; + [EnclaveEventType.ENCRYPTION_SCHEME_ENABLED]: { encryptionSchemeId: string }; + [EnclaveEventType.ENCRYPTION_SCHEME_DISABLED]: { encryptionSchemeId: string }; + [EnclaveEventType.CIPHERNODE_REGISTRY_SET]: { ciphernodeRegistry: string }; + [EnclaveEventType.MAX_DURATION_SET]: { maxDuration: bigint }; + [EnclaveEventType.ALLOWED_E3_PROGRAMS_PARAMS_SET]: { + e3ProgramParams: string[]; + }; + [EnclaveEventType.OWNERSHIP_TRANSFERRED]: { + previousOwner: string; + newOwner: string; + }; + [EnclaveEventType.INITIALIZED]: { version: bigint }; +} + +export interface RegistryEventData { + [RegistryEventType.COMMITTEE_REQUESTED]: CommitteeRequestedData; + [RegistryEventType.COMMITTEE_PUBLISHED]: CommitteePublishedData; + [RegistryEventType.ENCLAVE_SET]: { enclave: string }; + [RegistryEventType.OWNERSHIP_TRANSFERRED]: { + previousOwner: string; + newOwner: string; + }; + [RegistryEventType.INITIALIZED]: { version: bigint }; +} + +// Generic event structure +export interface EnclaveEvent { + type: T; + data: T extends EnclaveEventType + ? EnclaveEventData[T] + : T extends RegistryEventType + ? RegistryEventData[T] + : unknown; + log: Log; + timestamp: Date; + blockNumber: bigint; + transactionHash: string; +} + +export type EventCallback = ( + event: EnclaveEvent, +) => void | Promise; + +export interface EventFilter { + address?: `0x${string}`; + fromBlock?: bigint; + toBlock?: bigint; + args?: Partial; +} + +export interface SDKEventEmitter { + on(eventType: T, callback: EventCallback): void; + off(eventType: T, callback: EventCallback): void; + emit(event: EnclaveEvent): void; +} diff --git a/packages/enclave-sdk/src/utils.ts b/packages/enclave-sdk/src/utils.ts new file mode 100644 index 0000000000..02edbbf25a --- /dev/null +++ b/packages/enclave-sdk/src/utils.ts @@ -0,0 +1,171 @@ +import { type Address, type Hash, type Log, encodeAbiParameters } from "viem"; + +export class SDKError extends Error { + constructor( + message: string, + public readonly code?: string, + ) { + super(message); + this.name = "SDKError"; + } +} + +export function isValidAddress(address: string): address is Address { + return /^0x[a-fA-F0-9]{40}$/.test(address); +} + +export function isValidHash(hash: string): hash is Hash { + return /^0x[a-fA-F0-9]{64}$/.test(hash); +} + +export function formatEventName( + contractName: string, + eventName: string, +): string { + return `${contractName}.${eventName}`; +} + +export function parseEventData(log: Log): T { + return log.data as unknown as T; +} + +/** + * Sleep for a specified number of milliseconds + */ +export const sleep = (ms: number): Promise => { + return new Promise((resolve) => setTimeout(resolve, ms)); +}; + +export function formatBigInt(value: bigint): string { + return value.toString(); +} + +export function parseBigInt(value: string): bigint { + return BigInt(value); +} + +export function generateEventId(log: Log): string { + return `${log.blockHash}-${log.logIndex}`; +} + +/** + * Get the current timestamp in seconds + */ +export function getCurrentTimestamp(): number { + return Math.floor(Date.now() / 1000); +} + +// BFV parameter set matching the Rust SET_2048_1032193_1 configuration +export const BFV_PARAMS_SET = { + degree: 2048, + plaintext_modulus: 1032193, + moduli: [0x3fffffff000001n], // BigInt for the modulus +} as const; + +// Compute provider parameters structure +export interface ComputeProviderParams { + name: string; + parallel: boolean; + batch_size: number; +} + +// Default compute provider configuration +export const DEFAULT_COMPUTE_PROVIDER_PARAMS: ComputeProviderParams = { + name: "risc0", + parallel: false, + batch_size: 2, +}; + +// Default E3 configuration +export const DEFAULT_E3_CONFIG = { + threshold_min: 2, + threshold_max: 3, + window_size: 120, // 2 minutes in seconds + duration: 1800, // 30 minutes in seconds + payment_amount: "0", // 0 ETH in wei +} as const; + +/** + * Encode BFV parameters for the smart contract + * BFV (Brakerski-Fan-Vercauteren) is a type of fully homomorphic encryption + */ +export function encodeBfvParams( + degree: number = BFV_PARAMS_SET.degree, + plaintext_modulus: number = BFV_PARAMS_SET.plaintext_modulus, + moduli: readonly bigint[] = BFV_PARAMS_SET.moduli, +): `0x${string}` { + return encodeAbiParameters( + [ + { + name: "bfvParams", + type: "tuple", + components: [ + { name: "degree", type: "uint256" }, + { name: "plaintext_modulus", type: "uint256" }, + { name: "moduli", type: "uint256[]" }, + ], + }, + ], + [ + { + degree: BigInt(degree), + plaintext_modulus: BigInt(plaintext_modulus), + moduli: [...moduli], + }, + ], + ); +} + +/** + * Encode compute provider parameters for the smart contract + */ +export function encodeComputeProviderParams( + params: ComputeProviderParams, +): `0x${string}` { + const jsonString = JSON.stringify(params); + const encoder = new TextEncoder(); + const bytes = encoder.encode(jsonString); + + return `0x${Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0")).join("")}`; +} + +/** + * Calculate start window for E3 request + */ +export function calculateStartWindow( + windowSize: number = DEFAULT_E3_CONFIG.window_size, +): [bigint, bigint] { + const now = getCurrentTimestamp(); + return [BigInt(now), BigInt(now + windowSize)]; +} + +/** + * Decode plaintextOutput bytes to get the actual result number + */ +export function decodePlaintextOutput(plaintextOutput: string): number | null { + try { + // Remove '0x' prefix if present + const hex = plaintextOutput.startsWith("0x") + ? plaintextOutput.slice(2) + : plaintextOutput; + + // Convert hex to bytes + const bytes = new Uint8Array( + hex.match(/.{1,2}/g)?.map((byte) => parseInt(byte, 16)) || [], + ); + + if (bytes.length < 8) { + console.warn("Plaintext output too short for u64 decoding"); + return null; + } + + // Decode first u64 (8 bytes) as little-endian + const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength); + const result = view.getBigUint64(0, true); // true for little-endian + + return Number(result); + } catch (error) { + console.error("Failed to decode plaintext output:", error); + return null; + } +} diff --git a/packages/enclave-sdk/src/wasm.ts b/packages/enclave-sdk/src/wasm.ts new file mode 100644 index 0000000000..066ad242b0 --- /dev/null +++ b/packages/enclave-sdk/src/wasm.ts @@ -0,0 +1,10 @@ +import { encrypt_number } from "@gnosis-guild/e3-wasm"; +import init from "@gnosis-guild/e3-wasm/init"; + +export async function encryptNumber( + data: bigint, + public_key: Uint8Array, +): Promise { + await init(); + return encrypt_number(data, public_key); +} diff --git a/packages/enclave-sdk/tests/fixtures/pubkey.bin b/packages/enclave-sdk/tests/fixtures/pubkey.bin new file mode 100644 index 0000000000..ecc1d29341 Binary files /dev/null and b/packages/enclave-sdk/tests/fixtures/pubkey.bin differ diff --git a/packages/enclave-sdk/tests/sdk.test.ts b/packages/enclave-sdk/tests/sdk.test.ts new file mode 100644 index 0000000000..20703c2732 --- /dev/null +++ b/packages/enclave-sdk/tests/sdk.test.ts @@ -0,0 +1,17 @@ +import { describe, expect, it } from "vitest"; +import fs from "fs/promises"; +import path from "path"; + +import { encryptNumber } from "../src"; + +describe("encryptNumber", () => { + it("should encrypt a number without crashing in a node environent", async () => { + const buffer = await fs.readFile( + path.resolve(__dirname, "./fixtures/pubkey.bin"), + ); + const value = await encryptNumber(10n, Uint8Array.from(buffer)); + expect(value).to.be.an.instanceof(Uint8Array); + expect(value.length).to.equal(27_674); + // TODO: test the encryption is correct + }); +}); diff --git a/packages/enclave-sdk/tsconfig.json b/packages/enclave-sdk/tsconfig.json new file mode 100644 index 0000000000..0ab9246f05 --- /dev/null +++ b/packages/enclave-sdk/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@gnosis-guild/enclave-config/tsconfig.json", + "include": ["src/**/*", "tests/**/*"], + "exclude": ["node_modules", "dist"], + "compilerOptions": { + "incremental": true, + "tsBuildInfoFile": "./dist/.tsbuildinfo" + } +} diff --git a/packages/enclave-sdk/tsup.config.js b/packages/enclave-sdk/tsup.config.js new file mode 100644 index 0000000000..21d41b63ae --- /dev/null +++ b/packages/enclave-sdk/tsup.config.js @@ -0,0 +1,7 @@ +import { defineConfig } from "tsup"; +import { baseConfig } from "@gnosis-guild/enclave-config/tsup"; + +export default defineConfig({ + ...baseConfig, + include: ["./src/**/*.ts"], +}); diff --git a/packages/evm/.eslintrc.yml b/packages/evm/.eslintrc.yml index 27672a35fb..4f191fd36d 100644 --- a/packages/evm/.eslintrc.yml +++ b/packages/evm/.eslintrc.yml @@ -5,7 +5,9 @@ extends: - "prettier" parser: "@typescript-eslint/parser" parserOptions: - project: "tsconfig.json" + project: + - "tsconfig.json" + - "src/tsconfig.json" plugins: - "@typescript-eslint" root: true diff --git a/packages/evm/.gitignore b/packages/evm/.gitignore index 2b59089360..49ca6926b1 100644 --- a/packages/evm/.gitignore +++ b/packages/evm/.gitignore @@ -2,7 +2,10 @@ .coverage_artifacts .coverage_cache .coverage_contracts -artifacts +!artifacts/contracts/interfaces/IEnclave.sol/IEnclave.json +!artifacts/contracts/interfaces/ICiphernodeRegistry.sol/ICiphernodeRegistry.json +!artifacts/contracts/registry/NaiveRegistryFilter.sol/NaiveRegistryFilter.json +artifacts/ build cache coverage @@ -18,4 +21,4 @@ deployments/localhost .pnp.* coverage.json package-lock.json -pnpm-lock.yaml \ No newline at end of file +pnpm-lock.yaml diff --git a/packages/evm/artifacts/contracts/interfaces/ICiphernodeRegistry.sol/ICiphernodeRegistry.json b/packages/evm/artifacts/contracts/interfaces/ICiphernodeRegistry.sol/ICiphernodeRegistry.json new file mode 100644 index 0000000000..a50ca20a13 --- /dev/null +++ b/packages/evm/artifacts/contracts/interfaces/ICiphernodeRegistry.sol/ICiphernodeRegistry.json @@ -0,0 +1,220 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ICiphernodeRegistry", + "sourceName": "contracts/interfaces/ICiphernodeRegistry.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "node", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "numNodes", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "size", + "type": "uint256" + } + ], + "name": "CiphernodeAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "node", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "numNodes", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "size", + "type": "uint256" + } + ], + "name": "CiphernodeRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + } + ], + "name": "CommitteePublished", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "filter", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint32[2]", + "name": "threshold", + "type": "uint32[2]" + } + ], + "name": "CommitteeRequested", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "enclave", + "type": "address" + } + ], + "name": "EnclaveSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "committeePublicKey", + "outputs": [ + { + "internalType": "bytes32", + "name": "publicKeyHash", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "ciphernode", + "type": "address" + } + ], + "name": "isCiphernodeEligible", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "proof", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + } + ], + "name": "publishCommittee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "filter", + "type": "address" + }, + { + "internalType": "uint32[2]", + "name": "threshold", + "type": "uint32[2]" + } + ], + "name": "requestCommittee", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/packages/evm/artifacts/contracts/interfaces/IEnclave.sol/IEnclave.json b/packages/evm/artifacts/contracts/interfaces/IEnclave.sol/IEnclave.json new file mode 100644 index 0000000000..c0cf65458e --- /dev/null +++ b/packages/evm/artifacts/contracts/interfaces/IEnclave.sol/IEnclave.json @@ -0,0 +1,698 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "IEnclave", + "sourceName": "contracts/interfaces/IEnclave.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes[]", + "name": "e3ProgramParams", + "type": "bytes[]" + } + ], + "name": "AllowedE3ProgramsParamsSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "ciphernodeRegistry", + "type": "address" + } + ], + "name": "CiphernodeRegistrySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "ciphertextOutput", + "type": "bytes" + } + ], + "name": "CiphertextOutputPublished", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "expiration", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "committeePublicKey", + "type": "bytes" + } + ], + "name": "E3Activated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract IE3Program", + "name": "e3Program", + "type": "address" + } + ], + "name": "E3ProgramDisabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract IE3Program", + "name": "e3Program", + "type": "address" + } + ], + "name": "E3ProgramEnabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "seed", + "type": "uint256" + }, + { + "internalType": "uint32[2]", + "name": "threshold", + "type": "uint32[2]" + }, + { + "internalType": "uint256", + "name": "requestBlock", + "type": "uint256" + }, + { + "internalType": "uint256[2]", + "name": "startWindow", + "type": "uint256[2]" + }, + { + "internalType": "uint256", + "name": "duration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expiration", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "encryptionSchemeId", + "type": "bytes32" + }, + { + "internalType": "contract IE3Program", + "name": "e3Program", + "type": "address" + }, + { + "internalType": "bytes", + "name": "e3ProgramParams", + "type": "bytes" + }, + { + "internalType": "contract IInputValidator", + "name": "inputValidator", + "type": "address" + }, + { + "internalType": "contract IDecryptionVerifier", + "name": "decryptionVerifier", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "committeePublicKey", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "ciphertextOutput", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "plaintextOutput", + "type": "bytes" + } + ], + "indexed": false, + "internalType": "struct E3", + "name": "e3", + "type": "tuple" + }, + { + "indexed": false, + "internalType": "address", + "name": "filter", + "type": "address" + }, + { + "indexed": true, + "internalType": "contract IE3Program", + "name": "e3Program", + "type": "address" + } + ], + "name": "E3Requested", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "encryptionSchemeId", + "type": "bytes32" + } + ], + "name": "EncryptionSchemeDisabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "encryptionSchemeId", + "type": "bytes32" + } + ], + "name": "EncryptionSchemeEnabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "inputHash", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "InputPublished", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "maxDuration", + "type": "uint256" + } + ], + "name": "MaxDurationSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "plaintextOutput", + "type": "bytes" + } + ], + "name": "PlaintextOutputPublished", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + } + ], + "name": "activate", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IE3Program", + "name": "e3Program", + "type": "address" + } + ], + "name": "disableE3Program", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IE3Program", + "name": "e3Program", + "type": "address" + } + ], + "name": "enableE3Program", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "getE3", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "seed", + "type": "uint256" + }, + { + "internalType": "uint32[2]", + "name": "threshold", + "type": "uint32[2]" + }, + { + "internalType": "uint256", + "name": "requestBlock", + "type": "uint256" + }, + { + "internalType": "uint256[2]", + "name": "startWindow", + "type": "uint256[2]" + }, + { + "internalType": "uint256", + "name": "duration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expiration", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "encryptionSchemeId", + "type": "bytes32" + }, + { + "internalType": "contract IE3Program", + "name": "e3Program", + "type": "address" + }, + { + "internalType": "bytes", + "name": "e3ProgramParams", + "type": "bytes" + }, + { + "internalType": "contract IInputValidator", + "name": "inputValidator", + "type": "address" + }, + { + "internalType": "contract IDecryptionVerifier", + "name": "decryptionVerifier", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "committeePublicKey", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "ciphertextOutput", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "plaintextOutput", + "type": "bytes" + } + ], + "internalType": "struct E3", + "name": "e3", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "getInputRoot", + "outputs": [ + { + "internalType": "uint256", + "name": "root", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ciphertextOutput", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "proof", + "type": "bytes" + } + ], + "name": "publishCiphertextOutput", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "publishInput", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "plaintextOutput", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "proof", + "type": "bytes" + } + ], + "name": "publishPlaintextOutput", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "filter", + "type": "address" + }, + { + "internalType": "uint32[2]", + "name": "threshold", + "type": "uint32[2]" + }, + { + "internalType": "uint256[2]", + "name": "startWindow", + "type": "uint256[2]" + }, + { + "internalType": "uint256", + "name": "duration", + "type": "uint256" + }, + { + "internalType": "contract IE3Program", + "name": "e3Program", + "type": "address" + }, + { + "internalType": "bytes", + "name": "e3ProgramParams", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "computeProviderParams", + "type": "bytes" + } + ], + "name": "request", + "outputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "seed", + "type": "uint256" + }, + { + "internalType": "uint32[2]", + "name": "threshold", + "type": "uint32[2]" + }, + { + "internalType": "uint256", + "name": "requestBlock", + "type": "uint256" + }, + { + "internalType": "uint256[2]", + "name": "startWindow", + "type": "uint256[2]" + }, + { + "internalType": "uint256", + "name": "duration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expiration", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "encryptionSchemeId", + "type": "bytes32" + }, + { + "internalType": "contract IE3Program", + "name": "e3Program", + "type": "address" + }, + { + "internalType": "bytes", + "name": "e3ProgramParams", + "type": "bytes" + }, + { + "internalType": "contract IInputValidator", + "name": "inputValidator", + "type": "address" + }, + { + "internalType": "contract IDecryptionVerifier", + "name": "decryptionVerifier", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "committeePublicKey", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "ciphertextOutput", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "plaintextOutput", + "type": "bytes" + } + ], + "internalType": "struct E3", + "name": "e3", + "type": "tuple" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_maxDuration", + "type": "uint256" + } + ], + "name": "setMaxDuration", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/packages/evm/artifacts/contracts/registry/NaiveRegistryFilter.sol/NaiveRegistryFilter.json b/packages/evm/artifacts/contracts/registry/NaiveRegistryFilter.sol/NaiveRegistryFilter.json new file mode 100644 index 0000000000..e6c6abb981 --- /dev/null +++ b/packages/evm/artifacts/contracts/registry/NaiveRegistryFilter.sol/NaiveRegistryFilter.json @@ -0,0 +1,306 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "NaiveRegistryFilter", + "sourceName": "contracts/registry/NaiveRegistryFilter.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_registry", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "ciphernode", + "type": "address" + } + ], + "name": "CiphernodeNotEnabled", + "type": "error" + }, + { + "inputs": [], + "name": "CommitteeAlreadyExists", + "type": "error" + }, + { + "inputs": [], + "name": "CommitteeAlreadyPublished", + "type": "error" + }, + { + "inputs": [], + "name": "CommitteeDoesNotExist", + "type": "error" + }, + { + "inputs": [], + "name": "CommitteeNotPublished", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "inputs": [], + "name": "OnlyRegistry", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnableInvalidOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "OwnableUnauthorizedAccount", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3", + "type": "uint256" + } + ], + "name": "committees", + "outputs": [ + { + "internalType": "bytes32", + "name": "publicKey", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "getCommittee", + "outputs": [ + { + "components": [ + { + "internalType": "address[]", + "name": "nodes", + "type": "address[]" + }, + { + "internalType": "uint32[2]", + "name": "threshold", + "type": "uint32[2]" + }, + { + "internalType": "bytes32", + "name": "publicKey", + "type": "bytes32" + } + ], + "internalType": "struct NaiveRegistryFilter.Committee", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_registry", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "nodes", + "type": "address[]" + }, + { + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + } + ], + "name": "publishCommittee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "registry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "internalType": "uint32[2]", + "name": "threshold", + "type": "uint32[2]" + } + ], + "name": "requestCommittee", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_registry", + "type": "address" + } + ], + "name": "setRegistry", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6080346101f457601f610eb938819003918201601f19168301916001600160401b038311848410176101f95780849260409485528339810103126101f457610052602061004b8361020f565b920161020f565b600080516020610e9983398151915254604081901c60ff16159291906001600160401b038116801590816101ec575b60011490816101e2575b1590816101d9575b506101c8576001600160401b03198116600117600080516020610e99833981519152558361019d575b506100c5610299565b6100cd610299565b6100d633610223565b6100de6102c7565b600080546001600160a01b0319166001600160a01b03928316179055600080516020610e7983398151915254811690821603610186575b5061012a575b604051610b7b90816102fe8239f35b68ff000000000000000019600080516020610e998339815191525416600080516020610e99833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a161011b565b610197906101926102c7565b610223565b38610115565b6001600160481b0319166801000000000000000117600080516020610e9983398151915255386100bc565b63f92ee8a960e01b60005260046000fd5b90501538610093565b303b15915061008b565b859150610081565b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036101f457565b6001600160a01b0316801561028357600080516020610e7983398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b631e4fbdf760e01b600052600060045260246000fd5b60ff600080516020610e998339815191525460401c16156102b657565b631afcd79f60e31b60005260046000fd5b600080516020610e79833981519152546001600160a01b031633036102e857565b63118cdaa760e01b6000523360045260246000fdfe608080604052600436101561001357600080fd5b600090813560e01c90816218449a1461082e5750806329f73b9c1461053a5780632b20a4f614610468578063485cc9551461022e578063715018a6146101955780637b1039991461016f5780638da5cb5b14610129578063a91ee0dc146100ea578063f2fde38b146100bd5763f5e820fd1461008e57600080fd5b346100ba5760203660031901126100ba5760026040602092600435815260018452200154604051908152f35b80fd5b50346100ba5760203660031901126100ba576100e76100da6109e4565b6100e2610ae6565b610a40565b80f35b50346100ba5760203660031901126100ba576001600160a01b0361010c6109e4565b610114610ae6565b166001600160a01b0319600054161760005580f35b50346100ba57806003193601126100ba5760206001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b50346100ba57806003193601126100ba576001600160a01b036020915416604051908152f35b50346100ba57806003193601126100ba576101ae610ae6565b806001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031981167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346100ba5760403660031901126100ba576102486109e4565b602435906001600160a01b0382168203610464577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549160ff8360401c16159267ffffffffffffffff81168015908161045c575b6001149081610452575b159081610449575b5061043a5767ffffffffffffffff1981166001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00556001600160a01b039190846103fb575b506102fd610b2e565b610305610b2e565b61030e33610a40565b610316610ae6565b166001600160a01b031960005416176000556001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054166001600160a01b038216036103e9575b5061036b5780f35b68ff0000000000000000197ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a180f35b6103f5906100e2610ae6565b38610363565b68ffffffffffffffffff191668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055386102f4565b63f92ee8a960e01b8552600485fd5b905015386102ae565b303b1591506102a6565b85915061029c565b8280fd5b50346100ba5760603660031901126100ba5760043536606411610536576001600160a01b03825416330361052757808252600160205263ffffffff600160408420015460201c16610518578152600160205260016040822001602482805b600281106104dd5750505055602060405160018152f35b90919384359063ffffffff8216918281036105145750600583901b91821b63ffffffff90921b1916179360200191906001016104c6565b8480fd5b6334c2a65d60e11b8252600482fd5b6310f5403960e31b8252600482fd5b5080fd5b50346100ba5760603660031901126100ba576024359060043567ffffffffffffffff8311610536573660238401121561053657826004013567ffffffffffffffff811161081a578060051b936040519161059760208701846109c2565b82526020820190602482968201019036821161081657602401915b8183106107f6575050506044359167ffffffffffffffff831161075557366023840112156107555782600401359267ffffffffffffffff84116107e25760405193610607601f8201601f1916602001866109c2565b808552602085019136602483830101116107de57818792602460209301853786010152610632610ae6565b81855260016020526040852090600282019182546107cf5784519067ffffffffffffffff82116107bb576801000000000000000082116107bb578054828255808310610795575b508890885260208820885b83811061077857505050508451902090556001600160a01b0384541660405192604084019060208086015251809152606084019690865b818110610759575050506106dc83869796959603601f1981018552846109c2565b803b1561075557839283610717936107296040519889968795869463d9bbec9560e01b865260048601526060602486015260648501906109ff565b838103600319016044850152906109ff565b03925af180156107485761073a5780f35b610743916109c2565b388180f35b50604051903d90823e3d90fd5b8380fd5b82516001600160a01b03168952602098890198909201916001016106bb565b60019060206001600160a01b038551169401938184015501610684565b8189528260208a2091820191015b8181106107b05750610679565b8981556001016107a3565b634e487b7160e01b88526041600452602488fd5b63632a22bb60e01b8752600487fd5b8680fd5b634e487b7160e01b85526041600452602485fd5b82356001600160a01b03811681036107de578152602092830192016105b2565b8580fd5b634e487b7160e01b83526041600452602483fd5b82346100ba5760203660031901126100ba579061084a81610990565b606081528160408092815161085f83826109c2565b8236823760208201520152600435825260016020528082209080519061088482610990565b80518354808252848652602080872090830191875b81811061097157505050816108af9103826109c2565b8252600281519363ffffffff6001820154818116875260201c1660208601526108d883866109c2565b602084019485520154908083019182528051936020855260a08501935193608060208701528451809152602060c08701950190875b81811061095257505050519084019094905b600282106109365750508293505160808301520390f35b60208060019263ffffffff89511681520196019101909461091f565b82516001600160a01b031687526020968701969092019160010161090d565b82546001600160a01b0316845260209093019260019283019201610899565b6060810190811067ffffffffffffffff8211176109ac57604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109ac57604052565b600435906001600160a01b03821682036109fa57565b600080fd5b919082519283825260005b848110610a2b575050826000602080949584010152601f8019910116010190565b80602080928401015182828601015201610a0a565b6001600160a01b03168015610ad0576001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054826001600160a01b03198216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b631e4fbdf760e01b600052600060045260246000fd5b6001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303610b1957565b63118cdaa760e01b6000523360045260246000fd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615610b5d57565b631afcd79f60e31b60005260046000fdfea164736f6c634300081b000a9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00", + "deployedBytecode": "0x608080604052600436101561001357600080fd5b600090813560e01c90816218449a1461082e5750806329f73b9c1461053a5780632b20a4f614610468578063485cc9551461022e578063715018a6146101955780637b1039991461016f5780638da5cb5b14610129578063a91ee0dc146100ea578063f2fde38b146100bd5763f5e820fd1461008e57600080fd5b346100ba5760203660031901126100ba5760026040602092600435815260018452200154604051908152f35b80fd5b50346100ba5760203660031901126100ba576100e76100da6109e4565b6100e2610ae6565b610a40565b80f35b50346100ba5760203660031901126100ba576001600160a01b0361010c6109e4565b610114610ae6565b166001600160a01b0319600054161760005580f35b50346100ba57806003193601126100ba5760206001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b50346100ba57806003193601126100ba576001600160a01b036020915416604051908152f35b50346100ba57806003193601126100ba576101ae610ae6565b806001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031981167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346100ba5760403660031901126100ba576102486109e4565b602435906001600160a01b0382168203610464577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549160ff8360401c16159267ffffffffffffffff81168015908161045c575b6001149081610452575b159081610449575b5061043a5767ffffffffffffffff1981166001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00556001600160a01b039190846103fb575b506102fd610b2e565b610305610b2e565b61030e33610a40565b610316610ae6565b166001600160a01b031960005416176000556001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054166001600160a01b038216036103e9575b5061036b5780f35b68ff0000000000000000197ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a180f35b6103f5906100e2610ae6565b38610363565b68ffffffffffffffffff191668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055386102f4565b63f92ee8a960e01b8552600485fd5b905015386102ae565b303b1591506102a6565b85915061029c565b8280fd5b50346100ba5760603660031901126100ba5760043536606411610536576001600160a01b03825416330361052757808252600160205263ffffffff600160408420015460201c16610518578152600160205260016040822001602482805b600281106104dd5750505055602060405160018152f35b90919384359063ffffffff8216918281036105145750600583901b91821b63ffffffff90921b1916179360200191906001016104c6565b8480fd5b6334c2a65d60e11b8252600482fd5b6310f5403960e31b8252600482fd5b5080fd5b50346100ba5760603660031901126100ba576024359060043567ffffffffffffffff8311610536573660238401121561053657826004013567ffffffffffffffff811161081a578060051b936040519161059760208701846109c2565b82526020820190602482968201019036821161081657602401915b8183106107f6575050506044359167ffffffffffffffff831161075557366023840112156107555782600401359267ffffffffffffffff84116107e25760405193610607601f8201601f1916602001866109c2565b808552602085019136602483830101116107de57818792602460209301853786010152610632610ae6565b81855260016020526040852090600282019182546107cf5784519067ffffffffffffffff82116107bb576801000000000000000082116107bb578054828255808310610795575b508890885260208820885b83811061077857505050508451902090556001600160a01b0384541660405192604084019060208086015251809152606084019690865b818110610759575050506106dc83869796959603601f1981018552846109c2565b803b1561075557839283610717936107296040519889968795869463d9bbec9560e01b865260048601526060602486015260648501906109ff565b838103600319016044850152906109ff565b03925af180156107485761073a5780f35b610743916109c2565b388180f35b50604051903d90823e3d90fd5b8380fd5b82516001600160a01b03168952602098890198909201916001016106bb565b60019060206001600160a01b038551169401938184015501610684565b8189528260208a2091820191015b8181106107b05750610679565b8981556001016107a3565b634e487b7160e01b88526041600452602488fd5b63632a22bb60e01b8752600487fd5b8680fd5b634e487b7160e01b85526041600452602485fd5b82356001600160a01b03811681036107de578152602092830192016105b2565b8580fd5b634e487b7160e01b83526041600452602483fd5b82346100ba5760203660031901126100ba579061084a81610990565b606081528160408092815161085f83826109c2565b8236823760208201520152600435825260016020528082209080519061088482610990565b80518354808252848652602080872090830191875b81811061097157505050816108af9103826109c2565b8252600281519363ffffffff6001820154818116875260201c1660208601526108d883866109c2565b602084019485520154908083019182528051936020855260a08501935193608060208701528451809152602060c08701950190875b81811061095257505050519084019094905b600282106109365750508293505160808301520390f35b60208060019263ffffffff89511681520196019101909461091f565b82516001600160a01b031687526020968701969092019160010161090d565b82546001600160a01b0316845260209093019260019283019201610899565b6060810190811067ffffffffffffffff8211176109ac57604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109ac57604052565b600435906001600160a01b03821682036109fa57565b600080fd5b919082519283825260005b848110610a2b575050826000602080949584010152601f8019910116010190565b80602080928401015182828601015201610a0a565b6001600160a01b03168015610ad0576001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054826001600160a01b03198216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b631e4fbdf760e01b600052600060045260246000fd5b6001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303610b1957565b63118cdaa760e01b6000523360045260246000fd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615610b5d57565b631afcd79f60e31b60005260046000fdfea164736f6c634300081b000a", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/packages/evm/contracts/Enclave.sol b/packages/evm/contracts/Enclave.sol index da2ce7b735..640d8c50a5 100644 --- a/packages/evm/contracts/Enclave.sol +++ b/packages/evm/contracts/Enclave.sol @@ -44,6 +44,9 @@ contract Enclave is IEnclave, OwnableUpgradeable { mapping(bytes32 encryptionSchemeId => IDecryptionVerifier decryptionVerifier) public decryptionVerifiers; + /// Mapping that stores the valid E3 program ABI encoded parameter sets (e.g., BFV). + mapping(bytes e3ProgramParams => bool allowed) public e3ProgramsParams; + //////////////////////////////////////////////////////////// // // // Errors // @@ -82,24 +85,35 @@ contract Enclave is IEnclave, OwnableUpgradeable { /// @param _owner The owner of this contract /// @param _maxDuration The maximum duration of a computation in seconds + /// @param _e3ProgramsParams Array of ABI encoded E3 encryption scheme parameters sets (e.g., for BFV) constructor( address _owner, ICiphernodeRegistry _ciphernodeRegistry, - uint256 _maxDuration + uint256 _maxDuration, + bytes[] memory _e3ProgramsParams ) { - initialize(_owner, _ciphernodeRegistry, _maxDuration); + initialize( + _owner, + _ciphernodeRegistry, + _maxDuration, + _e3ProgramsParams + ); } /// @param _owner The owner of this contract + /// @param _ciphernodeRegistry The address of the ciphernode registry /// @param _maxDuration The maximum duration of a computation in seconds + /// @param _e3ProgramsParams Array of ABI encoded E3 encryption scheme parameters sets (e.g., for BFV) function initialize( address _owner, ICiphernodeRegistry _ciphernodeRegistry, - uint256 _maxDuration + uint256 _maxDuration, + bytes[] memory _e3ProgramsParams ) public initializer { __Ownable_init(msg.sender); setMaxDuration(_maxDuration); setCiphernodeRegistry(_ciphernodeRegistry); + setE3ProgramsParams(_e3ProgramsParams); if (_owner != owner()) transferOwnership(_owner); } @@ -199,11 +213,11 @@ contract Enclave is IEnclave, OwnableUpgradeable { keccak256(publicKey) == publicKeyHash, CommitteeSelectionFailed() ); - - e3s[e3Id].expiration = block.timestamp + e3.duration; + uint256 expiresAt = block.timestamp + e3.duration; + e3s[e3Id].expiration = expiresAt; e3s[e3Id].committeePublicKey = keccak256(publicKey); - emit E3Activated(e3Id, e3.expiration, publicKey); + emit E3Activated(e3Id, expiresAt, publicKey); return true; } @@ -364,6 +378,20 @@ contract Enclave is IEnclave, OwnableUpgradeable { emit EncryptionSchemeDisabled(encryptionSchemeId); } + function setE3ProgramsParams( + bytes[] memory _e3ProgramsParams + ) public onlyOwner returns (bool success) { + uint256 length = _e3ProgramsParams.length; + for (uint256 i; i < length; ) { + e3ProgramsParams[_e3ProgramsParams[i]] = true; + unchecked { + ++i; + } + } + success = true; + emit AllowedE3ProgramsParamsSet(_e3ProgramsParams); + } + //////////////////////////////////////////////////////////// // // // Get Functions // diff --git a/packages/evm/contracts/interfaces/IE3.sol b/packages/evm/contracts/interfaces/IE3.sol index 609715049f..67e43095e9 100644 --- a/packages/evm/contracts/interfaces/IE3.sol +++ b/packages/evm/contracts/interfaces/IE3.sol @@ -13,6 +13,7 @@ import { IDecryptionVerifier } from "./IDecryptionVerifier.sol"; /// @param duration Duration of the E3. /// @param expiration Timestamp when committee duties expire. /// @param e3Program Address of the E3 Program contract. +/// @param e3ProgramParams ABI encoded computation parameters. /// @param computeProvider Address of the compute provider contract. /// @param inputValidator Address of the input validator contract. /// @param decryptionVerifier Address of the output verifier contract. diff --git a/packages/evm/contracts/interfaces/IEnclave.sol b/packages/evm/contracts/interfaces/IEnclave.sol index 56f81c6e03..afcb889109 100644 --- a/packages/evm/contracts/interfaces/IEnclave.sol +++ b/packages/evm/contracts/interfaces/IEnclave.sol @@ -82,6 +82,10 @@ interface IEnclave { /// @param e3Program The address of the E3 Program. event E3ProgramDisabled(IE3Program e3Program); + /// @notice Emitted when the allowed E3 encryption scheme parameters are configured. + /// @param e3ProgramParams Array of encoded encryption scheme parameters (e.g, for BFV) + event AllowedE3ProgramsParamsSet(bytes[] e3ProgramParams); + //////////////////////////////////////////////////////////// // // // Core Entrypoints // @@ -169,6 +173,20 @@ interface IEnclave { uint256 _maxDuration ) external returns (bool success); + /// @notice This function should be called to enable an E3 Program. + /// @param e3Program The address of the E3 Program. + /// @return success True if the E3 Program was successfully enabled. + function enableE3Program( + IE3Program e3Program + ) external returns (bool success); + + /// @notice This function should be called to disable an E3 Program. + /// @param e3Program The address of the E3 Program. + /// @return success True if the E3 Program was successfully disabled. + function disableE3Program( + IE3Program e3Program + ) external returns (bool success); + //////////////////////////////////////////////////////////// // // // Get Functions // diff --git a/packages/evm/contracts/registry/CiphernodeRegistryOwnable.sol b/packages/evm/contracts/registry/CiphernodeRegistryOwnable.sol index cc79d02edf..3a3c25677b 100644 --- a/packages/evm/contracts/registry/CiphernodeRegistryOwnable.sol +++ b/packages/evm/contracts/registry/CiphernodeRegistryOwnable.sol @@ -24,7 +24,7 @@ contract CiphernodeRegistryOwnable is ICiphernodeRegistry, OwnableUpgradeable { uint256 public numCiphernodes; LeanIMTData public ciphernodes; - mapping(uint256 e3Id => IRegistryFilter filter) public filters; + mapping(uint256 e3Id => IRegistryFilter filter) public registryFilters; mapping(uint256 e3Id => uint256 root) public roots; mapping(uint256 e3Id => bytes32 publicKeyHash) public publicKeyHashes; @@ -80,10 +80,10 @@ contract CiphernodeRegistryOwnable is ICiphernodeRegistry, OwnableUpgradeable { uint32[2] calldata threshold ) external onlyEnclave returns (bool success) { require( - filters[e3Id] == IRegistryFilter(address(0)), + registryFilters[e3Id] == IRegistryFilter(address(0)), CommitteeAlreadyRequested() ); - filters[e3Id] = IRegistryFilter(filter); + registryFilters[e3Id] = IRegistryFilter(filter); roots[e3Id] = root(); IRegistryFilter(filter).requestCommittee(e3Id, threshold); @@ -97,7 +97,7 @@ contract CiphernodeRegistryOwnable is ICiphernodeRegistry, OwnableUpgradeable { bytes calldata publicKey ) external { // only to be published by the filter - require(address(filters[e3Id]) == msg.sender, OnlyFilter()); + require(address(registryFilters[e3Id]) == msg.sender, OnlyFilter()); publicKeyHashes[e3Id] = keccak256(publicKey); emit CommitteePublished(e3Id, publicKey); @@ -167,7 +167,7 @@ contract CiphernodeRegistryOwnable is ICiphernodeRegistry, OwnableUpgradeable { } function getFilter(uint256 e3Id) public view returns (IRegistryFilter) { - return filters[e3Id]; + return registryFilters[e3Id]; } function treeSize() public view returns (uint256) { diff --git a/packages/evm/deploy/enclave.ts b/packages/evm/deploy/enclave.ts index 207be341c3..6c1a1789f7 100644 --- a/packages/evm/deploy/enclave.ts +++ b/packages/evm/deploy/enclave.ts @@ -1,3 +1,6 @@ +import "@nomicfoundation/hardhat-ethers"; +import { ethers } from "ethers"; +import "hardhat-deploy"; import { DeployFunction } from "hardhat-deploy/types"; import { HardhatRuntimeEnvironment } from "hardhat/types"; import { PoseidonT3, proxy } from "poseidon-solidity"; @@ -9,12 +12,16 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { const { deployer } = await hre.getNamedAccounts(); const { deploy } = hre.deployments; + if (!deployer) { + throw new Error("Deployer not found from getNamedAccounts()"); + } + // First check if the proxy exists if ((await hre.ethers.provider.getCode(proxy.address)) === "0x") { // probably on the hardhat network // fund the keyless account const [sender] = await hre.ethers.getSigners(); - await sender.sendTransaction({ + await sender!.sendTransaction({ to: proxy.from, value: proxy.gas, }); @@ -27,7 +34,7 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { // Then deploy the hasher, if needed if ((await hre.ethers.provider.getCode(PoseidonT3.address)) === "0x") { const [sender] = await hre.ethers.getSigners(); - await sender.sendTransaction({ + await sender!.sendTransaction({ to: proxy.address, data: PoseidonT3.data, }); @@ -36,10 +43,19 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { } // Deploy Enclave contract + const polynomial_degree = ethers.toBigInt(2048); + const plaintext_modulus = ethers.toBigInt(1032193); + const moduli = [ethers.toBigInt("18014398492704769")]; + + // Encode just the struct (NOT the function selector) + const encoded = ethers.AbiCoder.defaultAbiCoder().encode( + ["uint256", "uint256", "uint256[]"], + [polynomial_degree, plaintext_modulus, moduli], + ); const enclave = await deploy("Enclave", { from: deployer, - args: [deployer, addressOne, THIRTY_DAYS_IN_SECONDS], + args: [deployer, addressOne, THIRTY_DAYS_IN_SECONDS, [encoded]], log: true, libraries: { PoseidonT3: PoseidonT3.address, @@ -75,19 +91,21 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { console.log(`NaiveRegistryFilter contract: `, naiveRegistryFilter.address); // set registry in enclave - const enclaveContract = await hre.ethers.getContractAt( - "Enclave", + const enclaveArtifact = await hre.deployments.getArtifact("Enclave"); + const enclaveContract = new hre.ethers.Contract( enclave.address, + enclaveArtifact.abi, + await hre.ethers.getSigner(deployer), ); - const registryAddress = await enclaveContract.ciphernodeRegistry(); + const registryAddress = await enclaveContract.ciphernodeRegistry!(); if (registryAddress === cypherNodeRegistry.address) { console.log(`Enclave contract already has registry`); return; } - const result = await enclaveContract.setCiphernodeRegistry( + const result = await enclaveContract.setCiphernodeRegistry!( cypherNodeRegistry.address, ); await result.wait(); diff --git a/packages/evm/deploy/mocks.ts b/packages/evm/deploy/mocks.ts index 4a2feb643f..083d2a6dc6 100644 --- a/packages/evm/deploy/mocks.ts +++ b/packages/evm/deploy/mocks.ts @@ -1,9 +1,13 @@ +import "@nomicfoundation/hardhat-ethers"; +import "hardhat-deploy"; import { DeployFunction } from "hardhat-deploy/types"; import { HardhatRuntimeEnvironment } from "hardhat/types"; const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { const { deployer } = await hre.getNamedAccounts(); const { deploy } = hre.deployments; + if (!deployer) + throw new Error("Deployer not returned from getNamedAddresses()"); const computeProvider = await deploy("MockComputeProvider", { from: deployer, @@ -40,9 +44,11 @@ MockE3Program:${mockE3Program.address} // Set up MockDecryptionVerifier in Enclave contract const enclaveDeployment = await hre.deployments.get("Enclave"); - const enclaveContract = await hre.ethers.getContractAt( - "Enclave", + const enclaveArtifact = await hre.deployments.getArtifact("Enclave"); + const enclaveContract = new hre.ethers.Contract( enclaveDeployment.address, + enclaveArtifact.abi, + await hre.ethers.getSigner(deployer), ); const encryptionSchemeId = hre.ethers.keccak256( @@ -50,7 +56,7 @@ MockE3Program:${mockE3Program.address} ); try { - const tx = await enclaveContract.setDecryptionVerifier( + const tx = await enclaveContract.setDecryptionVerifier!( encryptionSchemeId, mockDecryptionVerifier.address, ); diff --git a/packages/evm/deployments/sepolia/CiphernodeRegistryOwnable.json b/packages/evm/deployments/sepolia/CiphernodeRegistryOwnable.json index 16c8c42fc1..857bf3339a 100644 --- a/packages/evm/deployments/sepolia/CiphernodeRegistryOwnable.json +++ b/packages/evm/deployments/sepolia/CiphernodeRegistryOwnable.json @@ -1,5 +1,5 @@ { - "address": "0x78b57cfC6702F90b581914014e2DA4ba8532753C", + "address": "0x4A6701c770c53584b7d781ccC0267152d128bd4E", "abi": [ { "inputs": [ @@ -631,67 +631,67 @@ "type": "function" } ], - "transactionHash": "0xf28fde0a32f792fc54b8dbade3edb29b6a60fac689e7c637ba83d79438d69143", + "transactionHash": "0x146099bfb03e2f479887283ec82df6c4c8d11384eebfb22d640e07c50f957dd7", "receipt": { "to": null, "from": "0x8837e47c4Bb520ADE83AAB761C3B60679443af1B", - "contractAddress": "0x78b57cfC6702F90b581914014e2DA4ba8532753C", - "transactionIndex": 170, + "contractAddress": "0x4A6701c770c53584b7d781ccC0267152d128bd4E", + "transactionIndex": 136, "gasUsed": "1212915", - "logsBloom": "0x00000000000000000001000000000000000000000000000000800000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000001000000000000000000000000000020000000008000000000800000000000000000000000000000000400000000000000000002800000000000000000000004080000000000000000000000000000000000000000008000000000000000000000000000000000000000000000020000000000000000000000002000000000004200000000000000020000000000000000000000000000000000000000000000000000000000000000002", - "blockHash": "0x562182aa93f3713fd06c67d4d35b3a575ffdc939d4159c474baec34a65ac084f", - "transactionHash": "0xf28fde0a32f792fc54b8dbade3edb29b6a60fac689e7c637ba83d79438d69143", + "logsBloom": "0x00000000000000000001000000000002000000000000000000800000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000001000000000000000040000000000020000000000000000000800000000000000000000000000000000400000000000000000000800000000000000000000004080000000000000000000000000000000000000000000010000000000000000000040000000000004000000000020000000000000020000000002000000000004000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x483fe0f85cc08b523999f1e6edb7c182a737467d9289ca75f5074c445b152fd0", + "transactionHash": "0x146099bfb03e2f479887283ec82df6c4c8d11384eebfb22d640e07c50f957dd7", "logs": [ { - "transactionIndex": 170, - "blockNumber": 8332809, - "transactionHash": "0xf28fde0a32f792fc54b8dbade3edb29b6a60fac689e7c637ba83d79438d69143", - "address": "0x78b57cfC6702F90b581914014e2DA4ba8532753C", + "transactionIndex": 136, + "blockNumber": 8360699, + "transactionHash": "0x146099bfb03e2f479887283ec82df6c4c8d11384eebfb22d640e07c50f957dd7", + "address": "0x4A6701c770c53584b7d781ccC0267152d128bd4E", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000008837e47c4bb520ade83aab761c3b60679443af1b" ], "data": "0x", - "logIndex": 349, - "blockHash": "0x562182aa93f3713fd06c67d4d35b3a575ffdc939d4159c474baec34a65ac084f" + "logIndex": 163, + "blockHash": "0x483fe0f85cc08b523999f1e6edb7c182a737467d9289ca75f5074c445b152fd0" }, { - "transactionIndex": 170, - "blockNumber": 8332809, - "transactionHash": "0xf28fde0a32f792fc54b8dbade3edb29b6a60fac689e7c637ba83d79438d69143", - "address": "0x78b57cfC6702F90b581914014e2DA4ba8532753C", + "transactionIndex": 136, + "blockNumber": 8360699, + "transactionHash": "0x146099bfb03e2f479887283ec82df6c4c8d11384eebfb22d640e07c50f957dd7", + "address": "0x4A6701c770c53584b7d781ccC0267152d128bd4E", "topics": [ "0x2c8267accd82e977550ed2349c73311183cd22e306347be4453c8d130995e3c9", - "0x00000000000000000000000055eb3e7e3ffd6c5b7ef2c52c0744dc78ad26d2c9" + "0x0000000000000000000000006307a84b88f2641f197359a95bc6029bf33f54fb" ], "data": "0x", - "logIndex": 350, - "blockHash": "0x562182aa93f3713fd06c67d4d35b3a575ffdc939d4159c474baec34a65ac084f" + "logIndex": 164, + "blockHash": "0x483fe0f85cc08b523999f1e6edb7c182a737467d9289ca75f5074c445b152fd0" }, { - "transactionIndex": 170, - "blockNumber": 8332809, - "transactionHash": "0xf28fde0a32f792fc54b8dbade3edb29b6a60fac689e7c637ba83d79438d69143", - "address": "0x78b57cfC6702F90b581914014e2DA4ba8532753C", + "transactionIndex": 136, + "blockNumber": 8360699, + "transactionHash": "0x146099bfb03e2f479887283ec82df6c4c8d11384eebfb22d640e07c50f957dd7", + "address": "0x4A6701c770c53584b7d781ccC0267152d128bd4E", "topics": [ "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 351, - "blockHash": "0x562182aa93f3713fd06c67d4d35b3a575ffdc939d4159c474baec34a65ac084f" + "logIndex": 165, + "blockHash": "0x483fe0f85cc08b523999f1e6edb7c182a737467d9289ca75f5074c445b152fd0" } ], - "blockNumber": 8332809, - "cumulativeGasUsed": "25785929", + "blockNumber": 8360699, + "cumulativeGasUsed": "10145917", "status": 1, "byzantium": true }, "args": [ "0x8837e47c4Bb520ADE83AAB761C3B60679443af1B", - "0x55eb3E7e3fFd6c5B7EF2C52c0744DC78aD26D2C9" + "0x6307a84B88F2641f197359a95BC6029bF33f54fb" ], - "numDeployments": 2, + "numDeployments": 3, "solcInputHash": "7505270e9ddb813a3809c10e5d95f372", "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_enclave\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"node\",\"type\":\"address\"}],\"name\":\"CiphernodeNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CommitteeAlreadyPublished\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CommitteeAlreadyRequested\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CommitteeNotPublished\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeafAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeafCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeafDoesNotExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeafGreaterThanSnarkScalarField\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyEnclave\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyFilter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongSiblingNodes\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"node\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"numNodes\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"size\",\"type\":\"uint256\"}],\"name\":\"CiphernodeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"node\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"numNodes\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"size\",\"type\":\"uint256\"}],\"name\":\"CiphernodeRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"}],\"name\":\"CommitteePublished\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"filter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32[2]\",\"name\":\"threshold\",\"type\":\"uint32[2]\"}],\"name\":\"CommitteeRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"enclave\",\"type\":\"address\"}],\"name\":\"EnclaveSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"node\",\"type\":\"address\"}],\"name\":\"addCiphernode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ciphernodes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"size\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depth\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"}],\"name\":\"committeePublicKey\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"publicKeyHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enclave\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"}],\"name\":\"filters\",\"outputs\":[{\"internalType\":\"contract IRegistryFilter\",\"name\":\"filter\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"}],\"name\":\"getFilter\",\"outputs\":[{\"internalType\":\"contract IRegistryFilter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_enclave\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"node\",\"type\":\"address\"}],\"name\":\"isCiphernodeEligible\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"node\",\"type\":\"address\"}],\"name\":\"isEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"numCiphernodes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"}],\"name\":\"publicKeyHashes\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"publicKeyHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"}],\"name\":\"publishCommittee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"node\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"siblingNodes\",\"type\":\"uint256[]\"}],\"name\":\"removeCiphernode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"filter\",\"type\":\"address\"},{\"internalType\":\"uint32[2]\",\"name\":\"threshold\",\"type\":\"uint32[2]\"}],\"name\":\"requestCommittee\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"root\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"}],\"name\":\"rootAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"}],\"name\":\"roots\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"root\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_enclave\",\"type\":\"address\"}],\"name\":\"setEnclave\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"treeSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"CiphernodeAdded(address,uint256,uint256,uint256)\":{\"params\":{\"index\":\"Index of the ciphernode in the registry.\",\"node\":\"Address of the ciphernode.\",\"numNodes\":\"Number of ciphernodes in the registry.\",\"size\":\"Size of the registry.\"}},\"CiphernodeRemoved(address,uint256,uint256,uint256)\":{\"params\":{\"index\":\"Index of the ciphernode in the registry.\",\"node\":\"Address of the ciphernode.\",\"numNodes\":\"Number of ciphernodes in the registry.\",\"size\":\"Size of the registry.\"}},\"CommitteePublished(uint256,bytes)\":{\"params\":{\"e3Id\":\"ID of the E3 for which the committee was selected.\",\"publicKey\":\"Public key of the committee.\"}},\"CommitteeRequested(uint256,address,uint32[2])\":{\"params\":{\"e3Id\":\"ID of the E3 for which the committee was selected.\",\"filter\":\"Address of the contract that will coordinate committee selection.\",\"threshold\":\"The M/N threshold for the committee.\"}},\"EnclaveSet(address)\":{\"params\":{\"enclave\":\"Address of the enclave contract.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{\"committeePublicKey(uint256)\":{\"details\":\"This function MUST revert if no committee has been requested for the given E3.This function MUST revert if the committee has not yet published a public key.\",\"params\":{\"e3Id\":\"ID of the E3 for which to get the committee public key.\"},\"returns\":{\"publicKeyHash\":\"The hash of the public key of the given committee.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"requestCommittee(uint256,address,uint32[2])\":{\"details\":\"This function MUST revert when not called by the Enclave contract.\",\"params\":{\"e3Id\":\"ID of the E3 for which to select the committee.\",\"filter\":\"The address of the filter responsible for the committee selection process.\",\"threshold\":\"The M/N threshold for the committee.\"},\"returns\":{\"success\":\"True if committee selection was successfully initiated.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"events\":{\"CiphernodeAdded(address,uint256,uint256,uint256)\":{\"notice\":\"This event MUST be emitted when a ciphernode is added to the registry.\"},\"CiphernodeRemoved(address,uint256,uint256,uint256)\":{\"notice\":\"This event MUST be emitted when a ciphernode is removed from the registry.\"},\"CommitteePublished(uint256,bytes)\":{\"notice\":\"This event MUST be emitted when a committee is selected for an E3.\"},\"CommitteeRequested(uint256,address,uint32[2])\":{\"notice\":\"This event MUST be emitted when a committee is selected for an E3.\"},\"EnclaveSet(address)\":{\"notice\":\"This event MUST be emitted when `enclave` is set.\"}},\"kind\":\"user\",\"methods\":{\"committeePublicKey(uint256)\":{\"notice\":\"This function should be called by the Enclave contract to get the public key of a committee.\"},\"requestCommittee(uint256,address,uint32[2])\":{\"notice\":\"Initiates the committee selection process for a specified E3.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/registry/CiphernodeRegistryOwnable.sol\":\"CiphernodeRegistryOwnable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":800},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {ContextUpgradeable} from \\\"../utils/ContextUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * The initial owner is set to the address provided by the deployer. This can\\n * later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n /// @custom:storage-location erc7201:openzeppelin.storage.Ownable\\n struct OwnableStorage {\\n address _owner;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Ownable\\\")) - 1)) & ~bytes32(uint256(0xff))\\n bytes32 private constant OwnableStorageLocation = 0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300;\\n\\n function _getOwnableStorage() private pure returns (OwnableStorage storage $) {\\n assembly {\\n $.slot := OwnableStorageLocation\\n }\\n }\\n\\n /**\\n * @dev The caller account is not authorized to perform an operation.\\n */\\n error OwnableUnauthorizedAccount(address account);\\n\\n /**\\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\\n */\\n error OwnableInvalidOwner(address owner);\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\\n */\\n function __Ownable_init(address initialOwner) internal onlyInitializing {\\n __Ownable_init_unchained(initialOwner);\\n }\\n\\n function __Ownable_init_unchained(address initialOwner) internal onlyInitializing {\\n if (initialOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n OwnableStorage storage $ = _getOwnableStorage();\\n return $._owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n if (owner() != _msgSender()) {\\n revert OwnableUnauthorizedAccount(_msgSender());\\n }\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby disabling any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n if (newOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n OwnableStorage storage $ = _getOwnableStorage();\\n address oldOwner = $._owner;\\n $._owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1)) & ~bytes32(uint256(0xff))\\n bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error InvalidInitialization();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any\\n * number of times. This behavior in the constructor can be useful during testing and is not expected to be used in\\n * production.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n // Cache values to avoid duplicated sloads\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n\\n // Allowed calls:\\n // - initialSetup: the contract is not in the initializing state and no previous version was\\n // initialized\\n // - construction: the contract is initialized at version 1 (no reininitialization) and the\\n // current contract is just being deployed\\n bool initialSetup = initialized == 0 && isTopLevelCall;\\n bool construction = initialized == 1 && address(this).code.length == 0;\\n\\n if (!initialSetup && !construction) {\\n revert InvalidInitialization();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert InvalidInitialization();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert InvalidInitialization();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\"},\"@zk-kit/lean-imt.sol/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.8.4;\\n\\nuint256 constant SNARK_SCALAR_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n\",\"keccak256\":\"0xb1944a1d9f63069b2f22260935adb2d11546f82fbb7d12d853a90134a92f4b5b\",\"license\":\"UNLICENSED\"},\"@zk-kit/lean-imt.sol/InternalLeanIMT.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport {PoseidonT3} from \\\"poseidon-solidity/PoseidonT3.sol\\\";\\nimport {SNARK_SCALAR_FIELD} from \\\"./Constants.sol\\\";\\n\\nstruct LeanIMTData {\\n // Tracks the current number of leaves in the tree.\\n uint256 size;\\n // Represents the current depth of the tree, which can increase as new leaves are inserted.\\n uint256 depth;\\n // A mapping from each level of the tree to the node value of the last even position at that level.\\n // Used for efficient inserts, updates and root calculations.\\n mapping(uint256 => uint256) sideNodes;\\n // A mapping from leaf values to their respective indices in the tree.\\n // This facilitates checks for leaf existence and retrieval of leaf positions.\\n mapping(uint256 => uint256) leaves;\\n}\\n\\nerror WrongSiblingNodes();\\nerror LeafGreaterThanSnarkScalarField();\\nerror LeafCannotBeZero();\\nerror LeafAlreadyExists();\\nerror LeafDoesNotExist();\\n\\n/// @title Lean Incremental binary Merkle tree.\\n/// @dev The LeanIMT is an optimized version of the BinaryIMT.\\n/// This implementation eliminates the use of zeroes, and make the tree depth dynamic.\\n/// When a node doesn't have the right child, instead of using a zero hash as in the BinaryIMT,\\n/// the node's value becomes that of its left child. Furthermore, rather than utilizing a static tree depth,\\n/// it is updated based on the number of leaves in the tree. This approach\\n/// results in the calculation of significantly fewer hashes, making the tree more efficient.\\nlibrary InternalLeanIMT {\\n /// @dev Inserts a new leaf into the incremental merkle tree.\\n /// The function ensures that the leaf is valid according to the\\n /// constraints of the tree and then updates the tree's structure accordingly.\\n /// @param self: A storage reference to the 'LeanIMTData' struct.\\n /// @param leaf: The value of the new leaf to be inserted into the tree.\\n /// @return The new hash of the node after the leaf has been inserted.\\n function _insert(LeanIMTData storage self, uint256 leaf) internal returns (uint256) {\\n if (leaf >= SNARK_SCALAR_FIELD) {\\n revert LeafGreaterThanSnarkScalarField();\\n } else if (leaf == 0) {\\n revert LeafCannotBeZero();\\n } else if (_has(self, leaf)) {\\n revert LeafAlreadyExists();\\n }\\n\\n uint256 index = self.size;\\n\\n // Cache tree depth to optimize gas\\n uint256 treeDepth = self.depth;\\n\\n // A new insertion can increase a tree's depth by at most 1,\\n // and only if the number of leaves supported by the current\\n // depth is less than the number of leaves to be supported after insertion.\\n if (2 ** treeDepth < index + 1) {\\n ++treeDepth;\\n }\\n\\n self.depth = treeDepth;\\n\\n uint256 node = leaf;\\n\\n for (uint256 level = 0; level < treeDepth; ) {\\n if ((index >> level) & 1 == 1) {\\n node = PoseidonT3.hash([self.sideNodes[level], node]);\\n } else {\\n self.sideNodes[level] = node;\\n }\\n\\n unchecked {\\n ++level;\\n }\\n }\\n\\n self.size = ++index;\\n\\n self.sideNodes[treeDepth] = node;\\n self.leaves[leaf] = index;\\n\\n return node;\\n }\\n\\n /// @dev Inserts many leaves into the incremental merkle tree.\\n /// The function ensures that the leaves are valid according to the\\n /// constraints of the tree and then updates the tree's structure accordingly.\\n /// @param self: A storage reference to the 'LeanIMTData' struct.\\n /// @param leaves: The values of the new leaves to be inserted into the tree.\\n /// @return The root after the leaves have been inserted.\\n function _insertMany(LeanIMTData storage self, uint256[] calldata leaves) internal returns (uint256) {\\n // Cache tree size to optimize gas\\n uint256 treeSize = self.size;\\n\\n // Check that all the new values are correct to be added.\\n for (uint256 i = 0; i < leaves.length; ) {\\n if (leaves[i] >= SNARK_SCALAR_FIELD) {\\n revert LeafGreaterThanSnarkScalarField();\\n } else if (leaves[i] == 0) {\\n revert LeafCannotBeZero();\\n } else if (_has(self, leaves[i])) {\\n revert LeafAlreadyExists();\\n }\\n\\n self.leaves[leaves[i]] = treeSize + 1 + i;\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n // Array to save the nodes that will be used to create the next level of the tree.\\n uint256[] memory currentLevelNewNodes;\\n\\n currentLevelNewNodes = leaves;\\n\\n // Cache tree depth to optimize gas\\n uint256 treeDepth = self.depth;\\n\\n // Calculate the depth of the tree after adding the new values.\\n // Unlike the 'insert' function, we need a while here as\\n // N insertions can increase the tree's depth more than once.\\n while (2 ** treeDepth < treeSize + leaves.length) {\\n ++treeDepth;\\n }\\n\\n self.depth = treeDepth;\\n\\n // First index to change in every level.\\n uint256 currentLevelStartIndex = treeSize;\\n\\n // Size of the level used to create the next level.\\n uint256 currentLevelSize = treeSize + leaves.length;\\n\\n // The index where changes begin at the next level.\\n uint256 nextLevelStartIndex = currentLevelStartIndex >> 1;\\n\\n // The size of the next level.\\n uint256 nextLevelSize = ((currentLevelSize - 1) >> 1) + 1;\\n\\n for (uint256 level = 0; level < treeDepth; ) {\\n // The number of nodes for the new level that will be created,\\n // only the new values, not the entire level.\\n uint256 numberOfNewNodes = nextLevelSize - nextLevelStartIndex;\\n uint256[] memory nextLevelNewNodes = new uint256[](numberOfNewNodes);\\n for (uint256 i = 0; i < numberOfNewNodes; ) {\\n uint256 leftNode;\\n\\n // Assign the left node using the saved path or the position in the array.\\n if ((i + nextLevelStartIndex) * 2 < currentLevelStartIndex) {\\n leftNode = self.sideNodes[level];\\n } else {\\n leftNode = currentLevelNewNodes[(i + nextLevelStartIndex) * 2 - currentLevelStartIndex];\\n }\\n\\n uint256 rightNode;\\n\\n // Assign the right node if the value exists.\\n if ((i + nextLevelStartIndex) * 2 + 1 < currentLevelSize) {\\n rightNode = currentLevelNewNodes[(i + nextLevelStartIndex) * 2 + 1 - currentLevelStartIndex];\\n }\\n\\n uint256 parentNode;\\n\\n // Assign the parent node.\\n // If it has a right child the result will be the hash(leftNode, rightNode) if not,\\n // it will be the leftNode.\\n if (rightNode != 0) {\\n parentNode = PoseidonT3.hash([leftNode, rightNode]);\\n } else {\\n parentNode = leftNode;\\n }\\n\\n nextLevelNewNodes[i] = parentNode;\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n // Update the `sideNodes` variable.\\n // If `currentLevelSize` is odd, the saved value will be the last value of the array\\n // if it is even and there are more than 1 element in `currentLevelNewNodes`, the saved value\\n // will be the value before the last one.\\n // If it is even and there is only one element, there is no need to save anything because\\n // the correct value for this level was already saved before.\\n if (currentLevelSize & 1 == 1) {\\n self.sideNodes[level] = currentLevelNewNodes[currentLevelNewNodes.length - 1];\\n } else if (currentLevelNewNodes.length > 1) {\\n self.sideNodes[level] = currentLevelNewNodes[currentLevelNewNodes.length - 2];\\n }\\n\\n currentLevelStartIndex = nextLevelStartIndex;\\n\\n // Calculate the next level startIndex value.\\n // It is the position of the parent node which is pos/2.\\n nextLevelStartIndex >>= 1;\\n\\n // Update the next array that will be used to calculate the next level.\\n currentLevelNewNodes = nextLevelNewNodes;\\n\\n currentLevelSize = nextLevelSize;\\n\\n // Calculate the size of the next level.\\n // The size of the next level is (currentLevelSize - 1) / 2 + 1.\\n nextLevelSize = ((nextLevelSize - 1) >> 1) + 1;\\n\\n unchecked {\\n ++level;\\n }\\n }\\n\\n // Update tree size\\n self.size = treeSize + leaves.length;\\n\\n // Update tree root\\n self.sideNodes[treeDepth] = currentLevelNewNodes[0];\\n\\n return currentLevelNewNodes[0];\\n }\\n\\n /// @dev Updates the value of an existing leaf and recalculates hashes\\n /// to maintain tree integrity.\\n /// @param self: A storage reference to the 'LeanIMTData' struct.\\n /// @param oldLeaf: The value of the leaf that is to be updated.\\n /// @param newLeaf: The new value that will replace the oldLeaf in the tree.\\n /// @param siblingNodes: An array of sibling nodes that are necessary to recalculate the path to the root.\\n /// @return The new hash of the updated node after the leaf has been updated.\\n function _update(\\n LeanIMTData storage self,\\n uint256 oldLeaf,\\n uint256 newLeaf,\\n uint256[] calldata siblingNodes\\n ) internal returns (uint256) {\\n if (newLeaf >= SNARK_SCALAR_FIELD) {\\n revert LeafGreaterThanSnarkScalarField();\\n } else if (!_has(self, oldLeaf)) {\\n revert LeafDoesNotExist();\\n } else if (_has(self, newLeaf)) {\\n revert LeafAlreadyExists();\\n }\\n\\n uint256 index = _indexOf(self, oldLeaf);\\n uint256 node = newLeaf;\\n uint256 oldRoot = oldLeaf;\\n\\n uint256 lastIndex = self.size - 1;\\n uint256 i = 0;\\n\\n // Cache tree depth to optimize gas\\n uint256 treeDepth = self.depth;\\n\\n for (uint256 level = 0; level < treeDepth; ) {\\n if ((index >> level) & 1 == 1) {\\n if (siblingNodes[i] >= SNARK_SCALAR_FIELD) {\\n revert LeafGreaterThanSnarkScalarField();\\n }\\n\\n node = PoseidonT3.hash([siblingNodes[i], node]);\\n oldRoot = PoseidonT3.hash([siblingNodes[i], oldRoot]);\\n\\n unchecked {\\n ++i;\\n }\\n } else {\\n if (index >> level != lastIndex >> level) {\\n if (siblingNodes[i] >= SNARK_SCALAR_FIELD) {\\n revert LeafGreaterThanSnarkScalarField();\\n }\\n\\n node = PoseidonT3.hash([node, siblingNodes[i]]);\\n oldRoot = PoseidonT3.hash([oldRoot, siblingNodes[i]]);\\n\\n unchecked {\\n ++i;\\n }\\n } else {\\n self.sideNodes[i] = node;\\n }\\n }\\n\\n unchecked {\\n ++level;\\n }\\n }\\n\\n if (oldRoot != _root(self)) {\\n revert WrongSiblingNodes();\\n }\\n\\n self.sideNodes[treeDepth] = node;\\n\\n if (newLeaf != 0) {\\n self.leaves[newLeaf] = self.leaves[oldLeaf];\\n }\\n\\n self.leaves[oldLeaf] = 0;\\n\\n return node;\\n }\\n\\n /// @dev Removes a leaf from the tree by setting its value to zero.\\n /// This function utilizes the update function to set the leaf's value\\n /// to zero and update the tree's state accordingly.\\n /// @param self: A storage reference to the 'LeanIMTData' struct.\\n /// @param oldLeaf: The value of the leaf to be removed.\\n /// @param siblingNodes: An array of sibling nodes required for updating the path to the root after removal.\\n /// @return The new root hash of the tree after the leaf has been removed.\\n function _remove(\\n LeanIMTData storage self,\\n uint256 oldLeaf,\\n uint256[] calldata siblingNodes\\n ) internal returns (uint256) {\\n return _update(self, oldLeaf, 0, siblingNodes);\\n }\\n\\n /// @dev Checks if a leaf exists in the tree.\\n /// @param self: A storage reference to the 'LeanIMTData' struct.\\n /// @param leaf: The value of the leaf to check for existence.\\n /// @return A boolean value indicating whether the leaf exists in the tree.\\n function _has(LeanIMTData storage self, uint256 leaf) internal view returns (bool) {\\n return self.leaves[leaf] != 0;\\n }\\n\\n /// @dev Retrieves the index of a given leaf in the tree.\\n /// @param self: A storage reference to the 'LeanIMTData' struct.\\n /// @param leaf: The value of the leaf whose index is to be found.\\n /// @return The index of the specified leaf within the tree. If the leaf is not present, the function\\n /// reverts with a custom error.\\n function _indexOf(LeanIMTData storage self, uint256 leaf) internal view returns (uint256) {\\n if (self.leaves[leaf] == 0) {\\n revert LeafDoesNotExist();\\n }\\n\\n return self.leaves[leaf] - 1;\\n }\\n\\n /// @dev Retrieves the root of the tree from the 'sideNodes' mapping using the\\n /// current tree depth.\\n /// @param self: A storage reference to the 'LeanIMTData' struct.\\n /// @return The root hash of the tree.\\n function _root(LeanIMTData storage self) internal view returns (uint256) {\\n return self.sideNodes[self.depth];\\n }\\n}\\n\",\"keccak256\":\"0x6385ce9153d11d9824163464193d4ba3dd304e662dccd365ba2fc381a359762b\",\"license\":\"MIT\"},\"contracts/interfaces/ICiphernodeRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.8.27;\\n\\ninterface ICiphernodeRegistry {\\n /// @notice This event MUST be emitted when a committee is selected for an E3.\\n /// @param e3Id ID of the E3 for which the committee was selected.\\n /// @param filter Address of the contract that will coordinate committee selection.\\n /// @param threshold The M/N threshold for the committee.\\n event CommitteeRequested(\\n uint256 indexed e3Id,\\n address filter,\\n uint32[2] threshold\\n );\\n\\n /// @notice This event MUST be emitted when a committee is selected for an E3.\\n /// @param e3Id ID of the E3 for which the committee was selected.\\n /// @param publicKey Public key of the committee.\\n event CommitteePublished(uint256 indexed e3Id, bytes publicKey);\\n\\n /// @notice This event MUST be emitted when `enclave` is set.\\n /// @param enclave Address of the enclave contract.\\n event EnclaveSet(address indexed enclave);\\n\\n /// @notice This event MUST be emitted when a ciphernode is added to the registry.\\n /// @param node Address of the ciphernode.\\n /// @param index Index of the ciphernode in the registry.\\n /// @param numNodes Number of ciphernodes in the registry.\\n /// @param size Size of the registry.\\n event CiphernodeAdded(\\n address indexed node,\\n uint256 index,\\n uint256 numNodes,\\n uint256 size\\n );\\n\\n /// @notice This event MUST be emitted when a ciphernode is removed from the registry.\\n /// @param node Address of the ciphernode.\\n /// @param index Index of the ciphernode in the registry.\\n /// @param numNodes Number of ciphernodes in the registry.\\n /// @param size Size of the registry.\\n event CiphernodeRemoved(\\n address indexed node,\\n uint256 index,\\n uint256 numNodes,\\n uint256 size\\n );\\n\\n function isCiphernodeEligible(address ciphernode) external returns (bool);\\n\\n /// @notice Initiates the committee selection process for a specified E3.\\n /// @dev This function MUST revert when not called by the Enclave contract.\\n /// @param e3Id ID of the E3 for which to select the committee.\\n /// @param filter The address of the filter responsible for the committee selection process.\\n /// @param threshold The M/N threshold for the committee.\\n /// @return success True if committee selection was successfully initiated.\\n function requestCommittee(\\n uint256 e3Id,\\n address filter,\\n uint32[2] calldata threshold\\n ) external returns (bool success);\\n\\n /// @notice Publishes the public key resulting from the committee selection process.\\n /// @dev This function MUST revert if not called by the previously selected filter.\\n /// @param e3Id ID of the E3 for which to select the committee.\\n /// @param publicKey The hash of the public key generated by the given committee.\\n function publishCommittee(\\n uint256 e3Id,\\n bytes calldata proof,\\n bytes calldata publicKey\\n ) external;\\n\\n /// @notice This function should be called by the Enclave contract to get the public key of a committee.\\n /// @dev This function MUST revert if no committee has been requested for the given E3.\\n /// @dev This function MUST revert if the committee has not yet published a public key.\\n /// @param e3Id ID of the E3 for which to get the committee public key.\\n /// @return publicKeyHash The hash of the public key of the given committee.\\n function committeePublicKey(\\n uint256 e3Id\\n ) external view returns (bytes32 publicKeyHash);\\n}\\n\",\"keccak256\":\"0xe24e6322e8c6fc83461edfbdbedb409e243f1c4e79021a74585cfe875c225aa2\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/IRegistryFilter.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.8.27;\\n\\ninterface IRegistryFilter {\\n function requestCommittee(\\n uint256 e3Id,\\n uint32[2] calldata threshold\\n ) external returns (bool success);\\n}\\n\",\"keccak256\":\"0x6bd13d0b188e54393b1a030a43f95042161091d49428e880c301d882c4583100\",\"license\":\"LGPL-3.0-only\"},\"contracts/registry/CiphernodeRegistryOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.8.27;\\n\\nimport { ICiphernodeRegistry } from \\\"../interfaces/ICiphernodeRegistry.sol\\\";\\nimport { IRegistryFilter } from \\\"../interfaces/IRegistryFilter.sol\\\";\\nimport {\\n OwnableUpgradeable\\n} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport {\\n InternalLeanIMT,\\n LeanIMTData\\n} from \\\"@zk-kit/lean-imt.sol/InternalLeanIMT.sol\\\";\\n\\ncontract CiphernodeRegistryOwnable is ICiphernodeRegistry, OwnableUpgradeable {\\n using InternalLeanIMT for LeanIMTData;\\n\\n ////////////////////////////////////////////////////////////\\n // //\\n // Storage Variables //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n address public enclave;\\n uint256 public numCiphernodes;\\n LeanIMTData public ciphernodes;\\n\\n mapping(uint256 e3Id => IRegistryFilter filter) public filters;\\n mapping(uint256 e3Id => uint256 root) public roots;\\n mapping(uint256 e3Id => bytes32 publicKeyHash) public publicKeyHashes;\\n\\n ////////////////////////////////////////////////////////////\\n // //\\n // Errors //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n error CommitteeAlreadyRequested();\\n error CommitteeAlreadyPublished();\\n error OnlyFilter();\\n error CommitteeNotPublished();\\n error CiphernodeNotEnabled(address node);\\n error OnlyEnclave();\\n\\n ////////////////////////////////////////////////////////////\\n // //\\n // Modifiers //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n modifier onlyEnclave() {\\n require(msg.sender == enclave, OnlyEnclave());\\n _;\\n }\\n\\n ////////////////////////////////////////////////////////////\\n // //\\n // Initialization //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n constructor(address _owner, address _enclave) {\\n initialize(_owner, _enclave);\\n }\\n\\n function initialize(address _owner, address _enclave) public initializer {\\n __Ownable_init(msg.sender);\\n setEnclave(_enclave);\\n if (_owner != owner()) transferOwnership(_owner);\\n }\\n\\n ////////////////////////////////////////////////////////////\\n // //\\n // Core Entrypoints //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n function requestCommittee(\\n uint256 e3Id,\\n address filter,\\n uint32[2] calldata threshold\\n ) external onlyEnclave returns (bool success) {\\n require(\\n filters[e3Id] == IRegistryFilter(address(0)),\\n CommitteeAlreadyRequested()\\n );\\n filters[e3Id] = IRegistryFilter(filter);\\n roots[e3Id] = root();\\n\\n IRegistryFilter(filter).requestCommittee(e3Id, threshold);\\n emit CommitteeRequested(e3Id, filter, threshold);\\n success = true;\\n }\\n\\n function publishCommittee(\\n uint256 e3Id,\\n bytes calldata,\\n bytes calldata publicKey\\n ) external {\\n // only to be published by the filter\\n require(address(filters[e3Id]) == msg.sender, OnlyFilter());\\n\\n publicKeyHashes[e3Id] = keccak256(publicKey);\\n emit CommitteePublished(e3Id, publicKey);\\n }\\n\\n function addCiphernode(address node) external onlyOwner {\\n uint160 ciphernode = uint160(node);\\n ciphernodes._insert(ciphernode);\\n numCiphernodes++;\\n emit CiphernodeAdded(\\n node,\\n ciphernodes._indexOf(ciphernode),\\n numCiphernodes,\\n ciphernodes.size\\n );\\n }\\n\\n function removeCiphernode(\\n address node,\\n uint256[] calldata siblingNodes\\n ) external onlyOwner {\\n uint160 ciphernode = uint160(node);\\n uint256 index = ciphernodes._indexOf(ciphernode);\\n ciphernodes._remove(ciphernode, siblingNodes);\\n numCiphernodes--;\\n emit CiphernodeRemoved(node, index, numCiphernodes, ciphernodes.size);\\n }\\n\\n ////////////////////////////////////////////////////////////\\n // //\\n // Set Functions //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n function setEnclave(address _enclave) public onlyOwner {\\n enclave = _enclave;\\n emit EnclaveSet(_enclave);\\n }\\n\\n ////////////////////////////////////////////////////////////\\n // //\\n // Get Functions //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n function committeePublicKey(\\n uint256 e3Id\\n ) external view returns (bytes32 publicKeyHash) {\\n publicKeyHash = publicKeyHashes[e3Id];\\n require(publicKeyHash != bytes32(0), CommitteeNotPublished());\\n }\\n\\n function isCiphernodeEligible(address node) external view returns (bool) {\\n return isEnabled(node);\\n }\\n\\n function isEnabled(address node) public view returns (bool) {\\n return ciphernodes._has(uint160(node));\\n }\\n\\n function root() public view returns (uint256) {\\n return (ciphernodes._root());\\n }\\n\\n function rootAt(uint256 e3Id) public view returns (uint256) {\\n return roots[e3Id];\\n }\\n\\n function getFilter(uint256 e3Id) public view returns (IRegistryFilter) {\\n return filters[e3Id];\\n }\\n\\n function treeSize() public view returns (uint256) {\\n return ciphernodes.size;\\n }\\n}\\n\",\"keccak256\":\"0xe911e14c085551d0e3c200279ebf8ce5a70076b68a08303658782b0694593f21\",\"license\":\"LGPL-3.0-only\"},\"poseidon-solidity/PoseidonT3.sol\":{\"content\":\"/// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.0;\\n\\nlibrary PoseidonT3 {\\n uint constant M00 = 0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b;\\n uint constant M01 = 0x2969f27eed31a480b9c36c764379dbca2cc8fdd1415c3dded62940bcde0bd771;\\n uint constant M02 = 0x143021ec686a3f330d5f9e654638065ce6cd79e28c5b3753326244ee65a1b1a7;\\n uint constant M10 = 0x16ed41e13bb9c0c66ae119424fddbcbc9314dc9fdbdeea55d6c64543dc4903e0;\\n uint constant M11 = 0x2e2419f9ec02ec394c9871c832963dc1b89d743c8c7b964029b2311687b1fe23;\\n uint constant M12 = 0x176cc029695ad02582a70eff08a6fd99d057e12e58e7d7b6b16cdfabc8ee2911;\\n\\n // See here for a simplified implementation: https://github.com/vimwitch/poseidon-solidity/blob/e57becdabb65d99fdc586fe1e1e09e7108202d53/contracts/Poseidon.sol#L40\\n // Inspired by: https://github.com/iden3/circomlibjs/blob/v0.0.8/src/poseidon_slow.js\\n function hash(uint[2] memory) public pure returns (uint) {\\n assembly {\\n let F := 21888242871839275222246405745257275088548364400416034343698204186575808495617\\n let M20 := 0x2b90bba00fca0589f617e7dcbfe82e0df706ab640ceb247b791a93b74e36736d\\n let M21 := 0x101071f0032379b697315876690f053d148d4e109f5fb065c8aacc55a0f89bfa\\n let M22 := 0x19a3fc0a56702bf417ba7fee3802593fa644470307043f7773279cd71d25d5e0\\n\\n // load the inputs from memory\\n let state1 := add(mod(mload(0x80), F), 0x00f1445235f2148c5986587169fc1bcd887b08d4d00868df5696fff40956e864)\\n let state2 := add(mod(mload(0xa0), F), 0x08dff3487e8ac99e1f29a058d0fa80b930c728730b7ab36ce879f3890ecf73f5)\\n let scratch0 := mulmod(state1, state1, F)\\n state1 := mulmod(mulmod(scratch0, scratch0, F), state1, F)\\n scratch0 := mulmod(state2, state2, F)\\n state2 := mulmod(mulmod(scratch0, scratch0, F), state2, F)\\n scratch0 := add(\\n 0x2f27be690fdaee46c3ce28f7532b13c856c35342c84bda6e20966310fadc01d0,\\n add(add(15452833169820924772166449970675545095234312153403844297388521437673434406763, mulmod(state1, M10, F)), mulmod(state2, M20, F))\\n )\\n let scratch1 := add(\\n 0x2b2ae1acf68b7b8d2416bebf3d4f6234b763fe04b8043ee48b8327bebca16cf2,\\n add(add(18674271267752038776579386132900109523609358935013267566297499497165104279117, mulmod(state1, M11, F)), mulmod(state2, M21, F))\\n )\\n let scratch2 := add(\\n 0x0319d062072bef7ecca5eac06f97d4d55952c175ab6b03eae64b44c7dbf11cfa,\\n add(add(14817777843080276494683266178512808687156649753153012854386334860566696099579, mulmod(state1, M12, F)), mulmod(state2, M22, F))\\n )\\n let state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := mulmod(scratch1, scratch1, F)\\n scratch1 := mulmod(mulmod(state0, state0, F), scratch1, F)\\n state0 := mulmod(scratch2, scratch2, F)\\n scratch2 := mulmod(mulmod(state0, state0, F), scratch2, F)\\n state0 := add(0x28813dcaebaeaa828a376df87af4a63bc8b7bf27ad49c6298ef7b387bf28526d, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x2727673b2ccbc903f181bf38e1c1d40d2033865200c352bc150928adddf9cb78, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x234ec45ca27727c2e74abd2b2a1494cd6efbd43e340587d6b8fb9e31e65cc632, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := mulmod(state1, state1, F)\\n state1 := mulmod(mulmod(scratch0, scratch0, F), state1, F)\\n scratch0 := mulmod(state2, state2, F)\\n state2 := mulmod(mulmod(scratch0, scratch0, F), state2, F)\\n scratch0 := add(0x15b52534031ae18f7f862cb2cf7cf760ab10a8150a337b1ccd99ff6e8797d428, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x0dc8fad6d9e4b35f5ed9a3d186b79ce38e0e8a8d1b58b132d701d4eecf68d1f6, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x1bcd95ffc211fbca600f705fad3fb567ea4eb378f62e1fec97805518a47e4d9c, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := mulmod(scratch1, scratch1, F)\\n scratch1 := mulmod(mulmod(state0, state0, F), scratch1, F)\\n state0 := mulmod(scratch2, scratch2, F)\\n scratch2 := mulmod(mulmod(state0, state0, F), scratch2, F)\\n state0 := add(0x10520b0ab721cadfe9eff81b016fc34dc76da36c2578937817cb978d069de559, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x1f6d48149b8e7f7d9b257d8ed5fbbaf42932498075fed0ace88a9eb81f5627f6, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x1d9655f652309014d29e00ef35a2089bfff8dc1c816f0dc9ca34bdb5460c8705, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x04df5a56ff95bcafb051f7b1cd43a99ba731ff67e47032058fe3d4185697cc7d, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x0672d995f8fff640151b3d290cedaf148690a10a8c8424a7f6ec282b6e4be828, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x099952b414884454b21200d7ffafdd5f0c9a9dcc06f2708e9fc1d8209b5c75b9, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x052cba2255dfd00c7c483143ba8d469448e43586a9b4cd9183fd0e843a6b9fa6, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x0b8badee690adb8eb0bd74712b7999af82de55707251ad7716077cb93c464ddc, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x119b1590f13307af5a1ee651020c07c749c15d60683a8050b963d0a8e4b2bdd1, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x03150b7cd6d5d17b2529d36be0f67b832c4acfc884ef4ee5ce15be0bfb4a8d09, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x2cc6182c5e14546e3cf1951f173912355374efb83d80898abe69cb317c9ea565, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x005032551e6378c450cfe129a404b3764218cadedac14e2b92d2cd73111bf0f9, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x233237e3289baa34bb147e972ebcb9516469c399fcc069fb88f9da2cc28276b5, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x05c8f4f4ebd4a6e3c980d31674bfbe6323037f21b34ae5a4e80c2d4c24d60280, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x0a7b1db13042d396ba05d818a319f25252bcf35ef3aeed91ee1f09b2590fc65b, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x2a73b71f9b210cf5b14296572c9d32dbf156e2b086ff47dc5df542365a404ec0, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x1ac9b0417abcc9a1935107e9ffc91dc3ec18f2c4dbe7f22976a760bb5c50c460, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x12c0339ae08374823fabb076707ef479269f3e4d6cb104349015ee046dc93fc0, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x0b7475b102a165ad7f5b18db4e1e704f52900aa3253baac68246682e56e9a28e, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x037c2849e191ca3edb1c5e49f6e8b8917c843e379366f2ea32ab3aa88d7f8448, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x05a6811f8556f014e92674661e217e9bd5206c5c93a07dc145fdb176a716346f, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x29a795e7d98028946e947b75d54e9f044076e87a7b2883b47b675ef5f38bd66e, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x20439a0c84b322eb45a3857afc18f5826e8c7382c8a1585c507be199981fd22f, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x2e0ba8d94d9ecf4a94ec2050c7371ff1bb50f27799a84b6d4a2a6f2a0982c887, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x143fd115ce08fb27ca38eb7cce822b4517822cd2109048d2e6d0ddcca17d71c8, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x0c64cbecb1c734b857968dbbdcf813cdf8611659323dbcbfc84323623be9caf1, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x028a305847c683f646fca925c163ff5ae74f348d62c2b670f1426cef9403da53, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x2e4ef510ff0b6fda5fa940ab4c4380f26a6bcb64d89427b824d6755b5db9e30c, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x0081c95bc43384e663d79270c956ce3b8925b4f6d033b078b96384f50579400e, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x2ed5f0c91cbd9749187e2fade687e05ee2491b349c039a0bba8a9f4023a0bb38, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x30509991f88da3504bbf374ed5aae2f03448a22c76234c8c990f01f33a735206, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x1c3f20fd55409a53221b7c4d49a356b9f0a1119fb2067b41a7529094424ec6ad, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x10b4e7f3ab5df003049514459b6e18eec46bb2213e8e131e170887b47ddcb96c, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x2a1982979c3ff7f43ddd543d891c2abddd80f804c077d775039aa3502e43adef, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x1c74ee64f15e1db6feddbead56d6d55dba431ebc396c9af95cad0f1315bd5c91, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x07533ec850ba7f98eab9303cace01b4b9e4f2e8b82708cfa9c2fe45a0ae146a0, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x21576b438e500449a151e4eeaf17b154285c68f42d42c1808a11abf3764c0750, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x2f17c0559b8fe79608ad5ca193d62f10bce8384c815f0906743d6930836d4a9e, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x2d477e3862d07708a79e8aae946170bc9775a4201318474ae665b0b1b7e2730e, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x162f5243967064c390e095577984f291afba2266c38f5abcd89be0f5b2747eab, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x2b4cb233ede9ba48264ecd2c8ae50d1ad7a8596a87f29f8a7777a70092393311, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x2c8fbcb2dd8573dc1dbaf8f4622854776db2eece6d85c4cf4254e7c35e03b07a, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x1d6f347725e4816af2ff453f0cd56b199e1b61e9f601e9ade5e88db870949da9, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x204b0c397f4ebe71ebc2d8b3df5b913df9e6ac02b68d31324cd49af5c4565529, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x0c4cb9dc3c4fd8174f1149b3c63c3c2f9ecb827cd7dc25534ff8fb75bc79c502, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x174ad61a1448c899a25416474f4930301e5c49475279e0639a616ddc45bc7b54, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x1a96177bcf4d8d89f759df4ec2f3cde2eaaa28c177cc0fa13a9816d49a38d2ef, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x066d04b24331d71cd0ef8054bc60c4ff05202c126a233c1a8242ace360b8a30a, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x2a4c4fc6ec0b0cf52195782871c6dd3b381cc65f72e02ad527037a62aa1bd804, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x13ab2d136ccf37d447e9f2e14a7cedc95e727f8446f6d9d7e55afc01219fd649, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x1121552fca26061619d24d843dc82769c1b04fcec26f55194c2e3e869acc6a9a, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x00ef653322b13d6c889bc81715c37d77a6cd267d595c4a8909a5546c7c97cff1, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x0e25483e45a665208b261d8ba74051e6400c776d652595d9845aca35d8a397d3, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x29f536dcb9dd7682245264659e15d88e395ac3d4dde92d8c46448db979eeba89, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x2a56ef9f2c53febadfda33575dbdbd885a124e2780bbea170e456baace0fa5be, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x1c8361c78eb5cf5decfb7a2d17b5c409f2ae2999a46762e8ee416240a8cb9af1, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x151aff5f38b20a0fc0473089aaf0206b83e8e68a764507bfd3d0ab4be74319c5, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x04c6187e41ed881dc1b239c88f7f9d43a9f52fc8c8b6cdd1e76e47615b51f100, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x13b37bd80f4d27fb10d84331f6fb6d534b81c61ed15776449e801b7ddc9c2967, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x01a5c536273c2d9df578bfbd32c17b7a2ce3664c2a52032c9321ceb1c4e8a8e4, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x2ab3561834ca73835ad05f5d7acb950b4a9a2c666b9726da832239065b7c3b02, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x1d4d8ec291e720db200fe6d686c0d613acaf6af4e95d3bf69f7ed516a597b646, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x041294d2cc484d228f5784fe7919fd2bb925351240a04b711514c9c80b65af1d, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x154ac98e01708c611c4fa715991f004898f57939d126e392042971dd90e81fc6, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x0b339d8acca7d4f83eedd84093aef51050b3684c88f8b0b04524563bc6ea4da4, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x0955e49e6610c94254a4f84cfbab344598f0e71eaff4a7dd81ed95b50839c82e, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x06746a6156eba54426b9e22206f15abca9a6f41e6f535c6f3525401ea0654626, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x0f18f5a0ecd1423c496f3820c549c27838e5790e2bd0a196ac917c7ff32077fb, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x04f6eeca1751f7308ac59eff5beb261e4bb563583ede7bc92a738223d6f76e13, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x2b56973364c4c4f5c1a3ec4da3cdce038811eb116fb3e45bc1768d26fc0b3758, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x123769dd49d5b054dcd76b89804b1bcb8e1392b385716a5d83feb65d437f29ef, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x2147b424fc48c80a88ee52b91169aacea989f6446471150994257b2fb01c63e9, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x0fdc1f58548b85701a6c5505ea332a29647e6f34ad4243c2ea54ad897cebe54d, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x12373a8251fea004df68abcf0f7786d4bceff28c5dbbe0c3944f685cc0a0b1f2, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x21e4f4ea5f35f85bad7ea52ff742c9e8a642756b6af44203dd8a1f35c1a90035, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x16243916d69d2ca3dfb4722224d4c462b57366492f45e90d8a81934f1bc3b147, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x1efbe46dd7a578b4f66f9adbc88b4378abc21566e1a0453ca13a4159cac04ac2, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x07ea5e8537cf5dd08886020e23a7f387d468d5525be66f853b672cc96a88969a, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x05a8c4f9968b8aa3b7b478a30f9a5b63650f19a75e7ce11ca9fe16c0b76c00bc, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x20f057712cc21654fbfe59bd345e8dac3f7818c701b9c7882d9d57b72a32e83f, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x04a12ededa9dfd689672f8c67fee31636dcd8e88d01d49019bd90b33eb33db69, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x27e88d8c15f37dcee44f1e5425a51decbd136ce5091a6767e49ec9544ccd101a, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x2feed17b84285ed9b8a5c8c5e95a41f66e096619a7703223176c41ee433de4d1, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x1ed7cc76edf45c7c404241420f729cf394e5942911312a0d6972b8bd53aff2b8, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x15742e99b9bfa323157ff8c586f5660eac6783476144cdcadf2874be45466b1a, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x1aac285387f65e82c895fc6887ddf40577107454c6ec0317284f033f27d0c785, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x25851c3c845d4790f9ddadbdb6057357832e2e7a49775f71ec75a96554d67c77, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x15a5821565cc2ec2ce78457db197edf353b7ebba2c5523370ddccc3d9f146a67, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x2411d57a4813b9980efa7e31a1db5966dcf64f36044277502f15485f28c71727, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x002e6f8d6520cd4713e335b8c0b6d2e647e9a98e12f4cd2558828b5ef6cb4c9b, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x2ff7bc8f4380cde997da00b616b0fcd1af8f0e91e2fe1ed7398834609e0315d2, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x00b9831b948525595ee02724471bcd182e9521f6b7bb68f1e93be4febb0d3cbe, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x0a2f53768b8ebf6a86913b0e57c04e011ca408648a4743a87d77adbf0c9c3512, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x00248156142fd0373a479f91ff239e960f599ff7e94be69b7f2a290305e1198d, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x171d5620b87bfb1328cf8c02ab3f0c9a397196aa6a542c2350eb512a2b2bcda9, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x170a4f55536f7dc970087c7c10d6fad760c952172dd54dd99d1045e4ec34a808, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x29aba33f799fe66c2ef3134aea04336ecc37e38c1cd211ba482eca17e2dbfae1, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x1e9bc179a4fdd758fdd1bb1945088d47e70d114a03f6a0e8b5ba650369e64973, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x1dd269799b660fad58f7f4892dfb0b5afeaad869a9c4b44f9c9e1c43bdaf8f09, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x22cdbc8b70117ad1401181d02e15459e7ccd426fe869c7c95d1dd2cb0f24af38, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x0ef042e454771c533a9f57a55c503fcefd3150f52ed94a7cd5ba93b9c7dacefd, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x11609e06ad6c8fe2f287f3036037e8851318e8b08a0359a03b304ffca62e8284, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x1166d9e554616dba9e753eea427c17b7fecd58c076dfe42708b08f5b783aa9af, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x2de52989431a859593413026354413db177fbf4cd2ac0b56f855a888357ee466, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x3006eb4ffc7a85819a6da492f3a8ac1df51aee5b17b8e89d74bf01cf5f71e9ad, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x2af41fbb61ba8a80fdcf6fff9e3f6f422993fe8f0a4639f962344c8225145086, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x119e684de476155fe5a6b41a8ebc85db8718ab27889e85e781b214bace4827c3, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x1835b786e2e8925e188bea59ae363537b51248c23828f047cff784b97b3fd800, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x28201a34c594dfa34d794996c6433a20d152bac2a7905c926c40e285ab32eeb6, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x083efd7a27d1751094e80fefaf78b000864c82eb571187724a761f88c22cc4e7, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x0b6f88a3577199526158e61ceea27be811c16df7774dd8519e079564f61fd13b, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x0ec868e6d15e51d9644f66e1d6471a94589511ca00d29e1014390e6ee4254f5b, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x2af33e3f866771271ac0c9b3ed2e1142ecd3e74b939cd40d00d937ab84c98591, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x0b520211f904b5e7d09b5d961c6ace7734568c547dd6858b364ce5e47951f178, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x0b2d722d0919a1aad8db58f10062a92ea0c56ac4270e822cca228620188a1d40, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x1f790d4d7f8cf094d980ceb37c2453e957b54a9991ca38bbe0061d1ed6e562d4, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x0171eb95dfbf7d1eaea97cd385f780150885c16235a2a6a8da92ceb01e504233, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x0c2d0e3b5fd57549329bf6885da66b9b790b40defd2c8650762305381b168873, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x1162fb28689c27154e5a8228b4e72b377cbcafa589e283c35d3803054407a18d, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x2f1459b65dee441b64ad386a91e8310f282c5a92a89e19921623ef8249711bc0, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x1e6ff3216b688c3d996d74367d5cd4c1bc489d46754eb712c243f70d1b53cfbb, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x01ca8be73832b8d0681487d27d157802d741a6f36cdc2a0576881f9326478875, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x1f7735706ffe9fc586f976d5bdf223dc680286080b10cea00b9b5de315f9650e, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x2522b60f4ea3307640a0c2dce041fba921ac10a3d5f096ef4745ca838285f019, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x23f0bee001b1029d5255075ddc957f833418cad4f52b6c3f8ce16c235572575b, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x2bc1ae8b8ddbb81fcaac2d44555ed5685d142633e9df905f66d9401093082d59, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x0f9406b8296564a37304507b8dba3ed162371273a07b1fc98011fcd6ad72205f, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x2360a8eb0cc7defa67b72998de90714e17e75b174a52ee4acb126c8cd995f0a8, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x15871a5cddead976804c803cbaef255eb4815a5e96df8b006dcbbc2767f88948, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x193a56766998ee9e0a8652dd2f3b1da0362f4f54f72379544f957ccdeefb420f, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x2a394a43934f86982f9be56ff4fab1703b2e63c8ad334834e4309805e777ae0f, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x1859954cfeb8695f3e8b635dcb345192892cd11223443ba7b4166e8876c0d142, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x04e1181763050e58013444dbcb99f1902b11bc25d90bbdca408d3819f4fed32b, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x0fdb253dee83869d40c335ea64de8c5bb10eb82db08b5e8b1f5e5552bfd05f23, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x058cbe8a9a5027bdaa4efb623adead6275f08686f1c08984a9d7c5bae9b4f1c0, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x1382edce9971e186497eadb1aeb1f52b23b4b83bef023ab0d15228b4cceca59a, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x03464990f045c6ee0819ca51fd11b0be7f61b8eb99f14b77e1e6634601d9e8b5, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x23f7bfc8720dc296fff33b41f98ff83c6fcab4605db2eb5aaa5bc137aeb70a58, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x0a59a158e3eec2117e6e94e7f0e9decf18c3ffd5e1531a9219636158bbaf62f2, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x06ec54c80381c052b58bf23b312ffd3ce2c4eba065420af8f4c23ed0075fd07b, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x118872dc832e0eb5476b56648e867ec8b09340f7a7bcb1b4962f0ff9ed1f9d01, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x13d69fa127d834165ad5c7cba7ad59ed52e0b0f0e42d7fea95e1906b520921b1, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x169a177f63ea681270b1c6877a73d21bde143942fb71dc55fd8a49f19f10c77b, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x04ef51591c6ead97ef42f287adce40d93abeb032b922f66ffb7e9a5a7450544d, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x256e175a1dc079390ecd7ca703fb2e3b19ec61805d4f03ced5f45ee6dd0f69ec, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x30102d28636abd5fe5f2af412ff6004f75cc360d3205dd2da002813d3e2ceeb2, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x10998e42dfcd3bbf1c0714bc73eb1bf40443a3fa99bef4a31fd31be182fcc792, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x193edd8e9fcf3d7625fa7d24b598a1d89f3362eaf4d582efecad76f879e36860, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x18168afd34f2d915d0368ce80b7b3347d1c7a561ce611425f2664d7aa51f0b5d, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x29383c01ebd3b6ab0c017656ebe658b6a328ec77bc33626e29e2e95b33ea6111, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x10646d2f2603de39a1f4ae5e7771a64a702db6e86fb76ab600bf573f9010c711, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x0beb5e07d1b27145f575f1395a55bf132f90c25b40da7b3864d0242dcb1117fb, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x16d685252078c133dc0d3ecad62b5c8830f95bb2e54b59abdffbf018d96fa336, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x0a6abd1d833938f33c74154e0404b4b40a555bbbec21ddfafd672dd62047f01a, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x1a679f5d36eb7b5c8ea12a4c2dedc8feb12dffeec450317270a6f19b34cf1860, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x0980fb233bd456c23974d50e0ebfde4726a423eada4e8f6ffbc7592e3f1b93d6, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x161b42232e61b84cbf1810af93a38fc0cece3d5628c9282003ebacb5c312c72b, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x0ada10a90c7f0520950f7d47a60d5e6a493f09787f1564e5d09203db47de1a0b, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x1a730d372310ba82320345a29ac4238ed3f07a8a2b4e121bb50ddb9af407f451, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x2c8120f268ef054f817064c369dda7ea908377feaba5c4dffbda10ef58e8c556, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x1c7c8824f758753fa57c00789c684217b930e95313bcb73e6e7b8649a4968f70, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x2cd9ed31f5f8691c8e39e4077a74faa0f400ad8b491eb3f7b47b27fa3fd1cf77, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x23ff4f9d46813457cf60d92f57618399a5e022ac321ca550854ae23918a22eea, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x09945a5d147a4f66ceece6405dddd9d0af5a2c5103529407dff1ea58f180426d, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x188d9c528025d4c2b67660c6b771b90f7c7da6eaa29d3f268a6dd223ec6fc630, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x3050e37996596b7f81f68311431d8734dba7d926d3633595e0c0d8ddf4f0f47f, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x15af1169396830a91600ca8102c35c426ceae5461e3f95d89d829518d30afd78, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x1da6d09885432ea9a06d9f37f873d985dae933e351466b2904284da3320d8acc, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x2796ea90d269af29f5f8acf33921124e4e4fad3dbe658945e546ee411ddaa9cb, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x202d7dd1da0f6b4b0325c8b3307742f01e15612ec8e9304a7cb0319e01d32d60, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x096d6790d05bb759156a952ba263d672a2d7f9c788f4c831a29dace4c0f8be5f, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x054efa1f65b0fce283808965275d877b438da23ce5b13e1963798cb1447d25a4, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x1b162f83d917e93edb3308c29802deb9d8aa690113b2e14864ccf6e18e4165f1, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x21e5241e12564dd6fd9f1cdd2a0de39eedfefc1466cc568ec5ceb745a0506edc, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := mulmod(scratch1, scratch1, F)\\n scratch1 := mulmod(mulmod(state0, state0, F), scratch1, F)\\n state0 := mulmod(scratch2, scratch2, F)\\n scratch2 := mulmod(mulmod(state0, state0, F), scratch2, F)\\n state0 := add(0x1cfb5662e8cf5ac9226a80ee17b36abecb73ab5f87e161927b4349e10e4bdf08, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x0f21177e302a771bbae6d8d1ecb373b62c99af346220ac0129c53f666eb24100, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x1671522374606992affb0dd7f71b12bec4236aede6290546bcef7e1f515c2320, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := mulmod(state1, state1, F)\\n state1 := mulmod(mulmod(scratch0, scratch0, F), state1, F)\\n scratch0 := mulmod(state2, state2, F)\\n state2 := mulmod(mulmod(scratch0, scratch0, F), state2, F)\\n scratch0 := add(0x0fa3ec5b9488259c2eb4cf24501bfad9be2ec9e42c5cc8ccd419d2a692cad870, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x193c0e04e0bd298357cb266c1506080ed36edce85c648cc085e8c57b1ab54bba, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x102adf8ef74735a27e9128306dcbc3c99f6f7291cd406578ce14ea2adaba68f8, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := mulmod(scratch1, scratch1, F)\\n scratch1 := mulmod(mulmod(state0, state0, F), scratch1, F)\\n state0 := mulmod(scratch2, scratch2, F)\\n scratch2 := mulmod(mulmod(state0, state0, F), scratch2, F)\\n state0 := add(0x0fe0af7858e49859e2a54d6f1ad945b1316aa24bfbdd23ae40a6d0cb70c3eab1, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x216f6717bbc7dedb08536a2220843f4e2da5f1daa9ebdefde8a5ea7344798d22, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x1da55cc900f0d21f4a3e694391918a1b3c23b2ac773c6b3ef88e2e4228325161, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := mulmod(state1, state1, F)\\n state1 := mulmod(mulmod(scratch0, scratch0, F), state1, F)\\n scratch0 := mulmod(state2, state2, F)\\n state2 := mulmod(mulmod(scratch0, scratch0, F), state2, F)\\n\\n mstore(0x0, mod(add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)), F))\\n\\n return(0, 0x20)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x0102caa303bbc6690508f3615604f7730789ed990058c9513a87ccb30e4835be\",\"license\":\"MIT\"}},\"version\":1}", "bytecode": "0x60803461022457601f6116dc38819003918201601f19168301916001600160401b0383118484101761022957808492604094855283398101031261022457610052602061004b8361023f565b920161023f565b6000805160206116bc83398151915254604081901c60ff16159291906001600160401b0381168015908161021c575b6001149081610212575b159081610209575b506101f8576001600160401b031981166001176000805160206116bc83398151915255836101cd575b506100c56102c9565b6100cd6102c9565b6100d633610253565b6100de6102f7565b600080546001600160a01b0319166001600160a01b039290921691821781557f2c8267accd82e977550ed2349c73311183cd22e306347be4453c8d130995e3c99080a260008051602061169c833981519152546001600160a01b03908116908216036101b6575b5061015a575b60405161136e908161032e8239f35b68ff0000000000000000196000805160206116bc83398151915254166000805160206116bc833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a161014b565b6101c7906101c26102f7565b610253565b38610145565b6001600160481b03191668010000000000000001176000805160206116bc83398151915255386100bc565b63f92ee8a960e01b60005260046000fd5b90501538610093565b303b15915061008b565b859150610081565b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b038216820361022457565b6001600160a01b031680156102b35760008051602061169c83398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b631e4fbdf760e01b600052600060045260246000fd5b60ff6000805160206116bc8339815191525460401c16156102e657565b631afcd79f60e31b60005260046000fd5b60008051602061169c833981519152546001600160a01b0316330361031857565b63118cdaa760e01b6000523360045260246000fdfe608080604052600436101561001357600080fd5b60003560e01c90816306e341501461108c575080632c92fb99146110575780632e7b716d14610a0b578063485cc95514610e0957806370e36bbe14610da6578063715018a614610d0d5780638a78bb1514610adf5780638cb89ecb14610ab35780638d1ddfb114610a955780638da5cb5b14610a4f5780639015d37114610a0b5780639ccb58d514610897578063a04e606514610387578063c2b40ae41461035b578063ca2869a01461035b578063d9bbec9514610221578063dbb06c93146101fa578063e82f3b70146101b6578063ebf0c71714610184578063f2fde38b14610159578063f379b0df146101345763f6fc05d51461011157600080fd5b3461012f57600036600319011261012f576020600154604051908152f35b600080fd5b3461012f57600036600319011261012f57604060025460035482519182526020820152f35b3461012f57602036600319011261012f576101826101756110bd565b61017d611243565b61119d565b005b3461012f57600036600319011261012f5760206101ae600354600052600460205260406000205490565b604051908152f35b3461012f57602036600319011261012f57600435600052600860205260406000205480156101e957602090604051908152f35b6322e679e360e11b60005260046000fd5b3461012f57600036600319011261012f5760206001600160a01b0360005416604051908152f35b3461012f57606036600319011261012f5760043560243567ffffffffffffffff811161012f576102559036906004016110e9565b505060443567ffffffffffffffff811161012f576102779036906004016110e9565b8260005260066020526001600160a01b0360406000205416330361034a5767ffffffffffffffff811161033457604051601f8201601f1916926102bd6020850183611142565b8282526020820193368483011161012f578460409385847f8d0ca30515bbff1268ae5868080463444e5002373f7bc7d8d8869dca0a5ffc01983760006020878301015251902086600052600860205283600020556000838581519687956020875281602088015283870137840101528101030190a2005b634e487b7160e01b600052604160045260246000fd5b63be19562360e01b60005260046000fd5b3461012f57602036600319011261012f5760043560005260076020526020604060002054604051908152f35b3461012f57604036600319011261012f576103a06110bd565b60243567ffffffffffffffff811161012f573660238201121561012f5780600401359167ffffffffffffffff831161012f576024820191602436918560051b01011161012f576001600160a01b03906103f7611243565b1691610402836112b9565b9161041a846000526005602052604060002054151590565b61042f57631c811d5b60e21b60005260046000fd5b6000805260056020527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc5461088657610467846112b9565b600092859160025493600019850194851161087257600354948693849392915b87851061054d575050505050506104ab600354600052600460205260406000205490565b0361053c57600052600460205260406000205581600052600560205260006040812055600154908115610526576000199091016001819055600254604080519384526020840192909252908201527f8c008e3835f6c79bfcdb89f0f6ca8705e0b01049ee84a90b0e4da1c7ba9405d59080606081015b0390a2005b634e487b7160e01b600052601160045260246000fd5b631fd4986360e11b60005260046000fd5b90919293949584861c6001808216146000146106ed57507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161059088858761133b565b3510156106dc576105eb6020733333333C0A88F9BE4fd23ed0536F9B6c427e3B939a604051906105bf82611126565b6105ca8b888a61133b565b3582528282015260405180938192632b0aac7f60e11b83526004830161128b565b03818d5af490811561069d576000916106a9575b50610642916020919a6040519161061583611126565b6106208b888a61133b565b358352838301526040518080958194632b0aac7f60e11b83526004830161128b565b03915af490811561069d57600091610668575b50600180919701955b0193929190610487565b906020823d8211610695575b8161068160209383611142565b810103126106925750516001610655565b80fd5b3d9150610674565b6040513d6000823e3d90fd5b906020823d82116106d4575b816106c260209383611142565b810103126106925750516106426105ff565b3d91506106b5565b6361c0541760e11b60005260046000fd5b82871c14610858577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161072188858761133b565b3510156106dc5761077c6020733333333C0A88F9BE4fd23ed0536F9B6c427e3B939a6040519061075082611126565b815261075d8a878961133b565b358282015260405180938192632b0aac7f60e11b83526004830161128b565b03818d5af490811561069d57600091610825575b506107d3916020919a604051916107a683611126565b82526107b38a878961133b565b35838301526040518080958194632b0aac7f60e11b83526004830161128b565b03915af490811561069d576000916107f3575b506001809197019561065e565b906020823d821161081d575b8161080c60209383611142565b8101031261069257505160016107e6565b3d91506107ff565b906020823d8211610850575b8161083e60209383611142565b810103126106925750516107d3610790565b3d9150610831565b95946001908660005260046020528960406000205561065e565b634e487b7160e01b86526011600452602486fd5b6312c50cad60e11b60005260046000fd5b3461012f57608036600319011261012f576004356108b36110d3565b3660841161012f576001600160a01b036000541633036109fa578160005260066020526001600160a01b03604060002054166109e9576001600160a01b03168160005260066020526040600020816001600160a01b0319825416179055610927600354600052600460205260406000205490565b826000526007602052604060002055604051631590527b60e11b815282600482015261095560248201611164565b6020816064816000865af1801561069d576109ae575b5060607fa17377d4a5c0ff5c67888a6b08d9bf3a8505b47e922b6186b259471ebf12738e916040519081526109a260208201611164565ba2602060405160018152f35b6020813d6020116109e1575b816109c760209383611142565b8101031261012f5751801515810361012f5750606061096b565b3d91506109ba565b6374ff462560e11b60005260046000fd5b63e4c2a7eb60e01b60005260046000fd5b3461012f57602036600319011261012f576020610a45610a296110bd565b6001600160a01b03166000526005602052604060002054151590565b6040519015158152f35b3461012f57600036600319011261012f5760206001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b3461012f57600036600319011261012f576020600254604051908152f35b3461012f57602036600319011261012f5760043560005260086020526020604060002054604051908152f35b3461012f57602036600319011261012f576001600160a01b03610b006110bd565b610b08611243565b167f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018110610b41576361c0541760e11b60005260046000fd5b80610b57576314b48df160e11b60005260046000fd5b610b6e816000526005602052604060002054151590565b610886576002546003549060ff82116105265760018101808211610526576001831b10610cfd575b81600355829060005b838110610c2e5750610bb090611117565b918260025560005260046020526040600020558160005260056020526040600020557f3318d261fe14a5761d2d1e21555652f623d2134c430a9883c9ad6e958bb0db53610bfe600154611117565b80600155610c0b836112b9565b610521600254604051938493846040919493926060820195825260208201520152565b9160018083851c1614600014610ce4576020610c7f9160405190610c5182611126565b856000526004835260406000205482528282015260405180938192632b0aac7f60e11b83526004830161128b565b0381733333333C0A88F9BE4fd23ed0536F9B6c427e3B935af4801561069d57600090610cb2575b60019150925b01610b9f565b6020823d8211610cdc575b81610cca60209383611142565b81010312610692575060019051610ca6565b3d9150610cbd565b9180600191600052600460205283604060002055610cac565b90610d0790611117565b90610b96565b3461012f57600036600319011261012f57610d26611243565b60006001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031981167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461012f57602036600319011261012f576001600160a01b03610dc76110bd565b610dcf611243565b16806001600160a01b031960005416176000557f2c8267accd82e977550ed2349c73311183cd22e306347be4453c8d130995e3c9600080a2005b3461012f57604036600319011261012f57610e226110bd565b610e2a6110d3565b907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c16159267ffffffffffffffff82168015908161104f575b6001149081611045575b15908161103c575b5061102b5767ffffffffffffffff1982166001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00556001600160a01b039184610fec575b50610eca6112fb565b610ed26112fb565b610edb3361119d565b610ee3611243565b16806001600160a01b031960005416176000557f2c8267accd82e977550ed2349c73311183cd22e306347be4453c8d130995e3c9600080a26001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054166001600160a01b03821603610fda575b50610f5d57005b68ff0000000000000000197ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b610fe69061017d611243565b81610f56565b68ffffffffffffffffff191668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005584610ec1565b63f92ee8a960e01b60005260046000fd5b90501585610e7c565b303b159150610e74565b859150610e6a565b3461012f57602036600319011261012f57600435600052600660205260206001600160a01b0360406000205416604051908152f35b3461012f57602036600319011261012f57602090600435600052600682526001600160a01b03604060002054168152f35b600435906001600160a01b038216820361012f57565b602435906001600160a01b038216820361012f57565b9181601f8401121561012f5782359167ffffffffffffffff831161012f576020838186019501011161012f57565b60001981146105265760010190565b6040810190811067ffffffffffffffff82111761033457604052565b90601f8019910116810190811067ffffffffffffffff82111761033457604052565b60446000915b6002831061117757505050565b81359063ffffffff821680920361012f576020816001938293520192019201919061116a565b6001600160a01b0316801561122d576001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054826001600160a01b03198216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b631e4fbdf760e01b600052600060045260246000fd5b6001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416330361127657565b63118cdaa760e01b6000523360045260246000fd5b919060408301926000905b600282106112a357505050565b6020806001928551815201930191019091611296565b806000526005602052604060002054156112ea57600052600560205260406000205460001981019081116105265790565b631c811d5b60e21b60005260046000fd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561132a57565b631afcd79f60e31b60005260046000fd5b919081101561134b5760051b0190565b634e487b7160e01b600052603260045260246000fdfea164736f6c634300081b000a9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00", diff --git a/packages/evm/deployments/sepolia/Enclave.json b/packages/evm/deployments/sepolia/Enclave.json index 609a1531cf..1d6de1db32 100644 --- a/packages/evm/deployments/sepolia/Enclave.json +++ b/packages/evm/deployments/sepolia/Enclave.json @@ -1,5 +1,5 @@ { - "address": "0x55eb3E7e3fFd6c5B7EF2C52c0744DC78aD26D2C9", + "address": "0x6307a84B88F2641f197359a95BC6029bF33f54fb", "abi": [ { "inputs": [ @@ -1353,70 +1353,70 @@ "type": "function" } ], - "transactionHash": "0xebc4f5263c91ed286bc907a82a642ee1c93cc7b86d36a75196317010ec695309", + "transactionHash": "0x6c1ef01dba2714a518dca4fd47afa33ea9b0f7903e67e69613be23c8332535d1", "receipt": { "to": null, "from": "0x8837e47c4Bb520ADE83AAB761C3B60679443af1B", - "contractAddress": "0x55eb3E7e3fFd6c5B7EF2C52c0744DC78aD26D2C9", - "transactionIndex": 180, - "gasUsed": "2178019", - "logsBloom": "0x00000000000020000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000001000000000100000000000000000020000000000000000000800000000000000000000020000000400420000000000000000000800000000000000000000004080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000010000000000000000000000000004000000000000000020000000000000000000000000000001000000000800000000040000000000000000", - "blockHash": "0x35e6bde2d00cb80aabc8c7af84289131649dc636413c6a1a66629198e2193dd9", - "transactionHash": "0xebc4f5263c91ed286bc907a82a642ee1c93cc7b86d36a75196317010ec695309", + "contractAddress": "0x6307a84B88F2641f197359a95BC6029bF33f54fb", + "transactionIndex": 321, + "gasUsed": "2177587", + "logsBloom": "0x00000000000000000000000000000000000002000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000001000000001000000000100000000000000000020000000000000000000800000000000000000000000000000400420000000000000000000800000000000000000000004080000000000000000000000000000000000000000000000000000000000000000000004000000000000000000020000000010000000000000000000000000004000000000000000020000000000000000000000000000001000000000800000000000000000000000000", + "blockHash": "0xd72f5ec2bb616c64c8f5bbf6802669638ee6244ce86aec2a47250ac3173c82f4", + "transactionHash": "0x6c1ef01dba2714a518dca4fd47afa33ea9b0f7903e67e69613be23c8332535d1", "logs": [ { - "transactionIndex": 180, - "blockNumber": 8332807, - "transactionHash": "0xebc4f5263c91ed286bc907a82a642ee1c93cc7b86d36a75196317010ec695309", - "address": "0x55eb3E7e3fFd6c5B7EF2C52c0744DC78aD26D2C9", + "transactionIndex": 321, + "blockNumber": 8360698, + "transactionHash": "0x6c1ef01dba2714a518dca4fd47afa33ea9b0f7903e67e69613be23c8332535d1", + "address": "0x6307a84B88F2641f197359a95BC6029bF33f54fb", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000008837e47c4bb520ade83aab761c3b60679443af1b" ], "data": "0x", - "logIndex": 517, - "blockHash": "0x35e6bde2d00cb80aabc8c7af84289131649dc636413c6a1a66629198e2193dd9" + "logIndex": 469, + "blockHash": "0xd72f5ec2bb616c64c8f5bbf6802669638ee6244ce86aec2a47250ac3173c82f4" }, { - "transactionIndex": 180, - "blockNumber": 8332807, - "transactionHash": "0xebc4f5263c91ed286bc907a82a642ee1c93cc7b86d36a75196317010ec695309", - "address": "0x55eb3E7e3fFd6c5B7EF2C52c0744DC78aD26D2C9", + "transactionIndex": 321, + "blockNumber": 8360698, + "transactionHash": "0x6c1ef01dba2714a518dca4fd47afa33ea9b0f7903e67e69613be23c8332535d1", + "address": "0x6307a84B88F2641f197359a95BC6029bF33f54fb", "topics": [ "0xba0716ba1ee2ea8ecc4c64119b4537cdb42a99d82acf92af5b87607b8b523552" ], "data": "0x0000000000000000000000000000000000000000000000000000000000278d00", - "logIndex": 518, - "blockHash": "0x35e6bde2d00cb80aabc8c7af84289131649dc636413c6a1a66629198e2193dd9" + "logIndex": 470, + "blockHash": "0xd72f5ec2bb616c64c8f5bbf6802669638ee6244ce86aec2a47250ac3173c82f4" }, { - "transactionIndex": 180, - "blockNumber": 8332807, - "transactionHash": "0xebc4f5263c91ed286bc907a82a642ee1c93cc7b86d36a75196317010ec695309", - "address": "0x55eb3E7e3fFd6c5B7EF2C52c0744DC78aD26D2C9", + "transactionIndex": 321, + "blockNumber": 8360698, + "transactionHash": "0x6c1ef01dba2714a518dca4fd47afa33ea9b0f7903e67e69613be23c8332535d1", + "address": "0x6307a84B88F2641f197359a95BC6029bF33f54fb", "topics": [ "0x80052b810d39120cf6c976cca504a21703f585521dc7a41c6d241090e6c579b6" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 519, - "blockHash": "0x35e6bde2d00cb80aabc8c7af84289131649dc636413c6a1a66629198e2193dd9" + "logIndex": 471, + "blockHash": "0xd72f5ec2bb616c64c8f5bbf6802669638ee6244ce86aec2a47250ac3173c82f4" }, { - "transactionIndex": 180, - "blockNumber": 8332807, - "transactionHash": "0xebc4f5263c91ed286bc907a82a642ee1c93cc7b86d36a75196317010ec695309", - "address": "0x55eb3E7e3fFd6c5B7EF2C52c0744DC78aD26D2C9", + "transactionIndex": 321, + "blockNumber": 8360698, + "transactionHash": "0x6c1ef01dba2714a518dca4fd47afa33ea9b0f7903e67e69613be23c8332535d1", + "address": "0x6307a84B88F2641f197359a95BC6029bF33f54fb", "topics": [ "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 520, - "blockHash": "0x35e6bde2d00cb80aabc8c7af84289131649dc636413c6a1a66629198e2193dd9" + "logIndex": 472, + "blockHash": "0xd72f5ec2bb616c64c8f5bbf6802669638ee6244ce86aec2a47250ac3173c82f4" } ], - "blockNumber": 8332807, - "cumulativeGasUsed": "27324349", + "blockNumber": 8360698, + "cumulativeGasUsed": "28107948", "status": 1, "byzantium": true }, @@ -1425,11 +1425,11 @@ "0x0000000000000000000000000000000000000001", 2592000 ], - "numDeployments": 2, - "solcInputHash": "af1a33d80136fdacbd4916512487a8ab", - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"contract ICiphernodeRegistry\",\"name\":\"_ciphernodeRegistry\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_maxDuration\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"}],\"name\":\"CiphertextOutputAlreadyPublished\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"}],\"name\":\"CiphertextOutputNotPublished\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CommitteeSelectionFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"}],\"name\":\"E3AlreadyActivated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"}],\"name\":\"E3DoesNotExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"E3Expired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"}],\"name\":\"E3NotActivated\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"E3NotReady\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IE3Program\",\"name\":\"e3Program\",\"type\":\"address\"}],\"name\":\"E3ProgramNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiration\",\"type\":\"uint256\"}],\"name\":\"InputDeadlineNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiration\",\"type\":\"uint256\"}],\"name\":\"InputDeadlinePassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract ICiphernodeRegistry\",\"name\":\"ciphernodeRegistry\",\"type\":\"address\"}],\"name\":\"InvalidCiphernodeRegistry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IInputValidator\",\"name\":\"inputValidator\",\"type\":\"address\"}],\"name\":\"InvalidComputationRequest\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"InvalidDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encryptionSchemeId\",\"type\":\"bytes32\"}],\"name\":\"InvalidEncryptionScheme\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInput\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"output\",\"type\":\"bytes\"}],\"name\":\"InvalidOutput\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidStartWindow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32[2]\",\"name\":\"threshold\",\"type\":\"uint32[2]\"}],\"name\":\"InvalidThreshold\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeafAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeafCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeafGreaterThanSnarkScalarField\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleAlreadyEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"PaymentRequired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"}],\"name\":\"PlaintextOutputAlreadyPublished\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"ciphernodeRegistry\",\"type\":\"address\"}],\"name\":\"CiphernodeRegistrySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"ciphertextOutput\",\"type\":\"bytes\"}],\"name\":\"CiphertextOutputPublished\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"expiration\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"committeePublicKey\",\"type\":\"bytes\"}],\"name\":\"E3Activated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IE3Program\",\"name\":\"e3Program\",\"type\":\"address\"}],\"name\":\"E3ProgramDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IE3Program\",\"name\":\"e3Program\",\"type\":\"address\"}],\"name\":\"E3ProgramEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"seed\",\"type\":\"uint256\"},{\"internalType\":\"uint32[2]\",\"name\":\"threshold\",\"type\":\"uint32[2]\"},{\"internalType\":\"uint256\",\"name\":\"requestBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256[2]\",\"name\":\"startWindow\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiration\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"encryptionSchemeId\",\"type\":\"bytes32\"},{\"internalType\":\"contract IE3Program\",\"name\":\"e3Program\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"e3ProgramParams\",\"type\":\"bytes\"},{\"internalType\":\"contract IInputValidator\",\"name\":\"inputValidator\",\"type\":\"address\"},{\"internalType\":\"contract IDecryptionVerifier\",\"name\":\"decryptionVerifier\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"committeePublicKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"ciphertextOutput\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"plaintextOutput\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct E3\",\"name\":\"e3\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"filter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IE3Program\",\"name\":\"e3Program\",\"type\":\"address\"}],\"name\":\"E3Requested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"encryptionSchemeId\",\"type\":\"bytes32\"}],\"name\":\"EncryptionSchemeDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"encryptionSchemeId\",\"type\":\"bytes32\"}],\"name\":\"EncryptionSchemeEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"inputHash\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"InputPublished\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxDuration\",\"type\":\"uint256\"}],\"name\":\"MaxDurationSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"plaintextOutput\",\"type\":\"bytes\"}],\"name\":\"PlaintextOutputPublished\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"}],\"name\":\"activate\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ciphernodeRegistry\",\"outputs\":[{\"internalType\":\"contract ICiphernodeRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encryptionSchemeId\",\"type\":\"bytes32\"}],\"name\":\"decryptionVerifiers\",\"outputs\":[{\"internalType\":\"contract IDecryptionVerifier\",\"name\":\"decryptionVerifier\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IE3Program\",\"name\":\"e3Program\",\"type\":\"address\"}],\"name\":\"disableE3Program\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encryptionSchemeId\",\"type\":\"bytes32\"}],\"name\":\"disableEncryptionScheme\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IE3Program\",\"name\":\"e3Program\",\"type\":\"address\"}],\"name\":\"e3Programs\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"}],\"name\":\"e3s\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"seed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requestBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiration\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"encryptionSchemeId\",\"type\":\"bytes32\"},{\"internalType\":\"contract IE3Program\",\"name\":\"e3Program\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"e3ProgramParams\",\"type\":\"bytes\"},{\"internalType\":\"contract IInputValidator\",\"name\":\"inputValidator\",\"type\":\"address\"},{\"internalType\":\"contract IDecryptionVerifier\",\"name\":\"decryptionVerifier\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"committeePublicKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"ciphertextOutput\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"plaintextOutput\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IE3Program\",\"name\":\"e3Program\",\"type\":\"address\"}],\"name\":\"enableE3Program\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encryptionSchemeId\",\"type\":\"bytes32\"}],\"name\":\"getDecryptionVerifier\",\"outputs\":[{\"internalType\":\"contract IDecryptionVerifier\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"}],\"name\":\"getE3\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"seed\",\"type\":\"uint256\"},{\"internalType\":\"uint32[2]\",\"name\":\"threshold\",\"type\":\"uint32[2]\"},{\"internalType\":\"uint256\",\"name\":\"requestBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256[2]\",\"name\":\"startWindow\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiration\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"encryptionSchemeId\",\"type\":\"bytes32\"},{\"internalType\":\"contract IE3Program\",\"name\":\"e3Program\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"e3ProgramParams\",\"type\":\"bytes\"},{\"internalType\":\"contract IInputValidator\",\"name\":\"inputValidator\",\"type\":\"address\"},{\"internalType\":\"contract IDecryptionVerifier\",\"name\":\"decryptionVerifier\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"committeePublicKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"ciphertextOutput\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"plaintextOutput\",\"type\":\"bytes\"}],\"internalType\":\"struct E3\",\"name\":\"e3\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"}],\"name\":\"getInputRoot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"contract ICiphernodeRegistry\",\"name\":\"_ciphernodeRegistry\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_maxDuration\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"}],\"name\":\"inputCounts\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"inputCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"}],\"name\":\"inputs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"size\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depth\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nexte3Id\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"ciphertextOutput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"publishCiphertextOutput\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"publishInput\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"plaintextOutput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"publishPlaintextOutput\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"filter\",\"type\":\"address\"},{\"internalType\":\"uint32[2]\",\"name\":\"threshold\",\"type\":\"uint32[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"startWindow\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"contract IE3Program\",\"name\":\"e3Program\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"e3ProgramParams\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"computeProviderParams\",\"type\":\"bytes\"}],\"name\":\"request\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"seed\",\"type\":\"uint256\"},{\"internalType\":\"uint32[2]\",\"name\":\"threshold\",\"type\":\"uint32[2]\"},{\"internalType\":\"uint256\",\"name\":\"requestBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256[2]\",\"name\":\"startWindow\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiration\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"encryptionSchemeId\",\"type\":\"bytes32\"},{\"internalType\":\"contract IE3Program\",\"name\":\"e3Program\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"e3ProgramParams\",\"type\":\"bytes\"},{\"internalType\":\"contract IInputValidator\",\"name\":\"inputValidator\",\"type\":\"address\"},{\"internalType\":\"contract IDecryptionVerifier\",\"name\":\"decryptionVerifier\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"committeePublicKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"ciphertextOutput\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"plaintextOutput\",\"type\":\"bytes\"}],\"internalType\":\"struct E3\",\"name\":\"e3\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"requests\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ICiphernodeRegistry\",\"name\":\"_ciphernodeRegistry\",\"type\":\"address\"}],\"name\":\"setCiphernodeRegistry\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encryptionSchemeId\",\"type\":\"bytes32\"},{\"internalType\":\"contract IDecryptionVerifier\",\"name\":\"decryptionVerifier\",\"type\":\"address\"}],\"name\":\"setDecryptionVerifier\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxDuration\",\"type\":\"uint256\"}],\"name\":\"setMaxDuration\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"CiphernodeRegistrySet(address)\":{\"params\":{\"ciphernodeRegistry\":\"The address of the CiphernodeRegistry contract.\"}},\"CiphertextOutputPublished(uint256,bytes)\":{\"params\":{\"ciphertextOutput\":\"ABI encoded ciphertext output.\",\"e3Id\":\"ID of the E3.\"}},\"E3Activated(uint256,uint256,bytes)\":{\"params\":{\"committeePublicKey\":\"Public key of the committee.\",\"e3Id\":\"ID of the E3.\",\"expiration\":\"Timestamp when committee duties expire.\"}},\"E3ProgramDisabled(address)\":{\"params\":{\"e3Program\":\"The address of the E3 Program.\"}},\"E3ProgramEnabled(address)\":{\"params\":{\"e3Program\":\"The address of the E3 Program.\"}},\"E3Requested(uint256,(uint256,uint32[2],uint256,uint256[2],uint256,uint256,bytes32,address,bytes,address,address,bytes32,bytes32,bytes),address,address)\":{\"params\":{\"e3\":\"Details of the E3.\",\"e3Id\":\"ID of the E3.\",\"e3Program\":\"Address of the Computation module selected.\",\"filter\":\"Address of the pool of nodes from which the Cipher Node committee was selected.\"}},\"EncryptionSchemeDisabled(bytes32)\":{\"params\":{\"encryptionSchemeId\":\"The ID of the encryption scheme that was disabled.\"}},\"EncryptionSchemeEnabled(bytes32)\":{\"params\":{\"encryptionSchemeId\":\"The ID of the encryption scheme that was enabled.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"InputPublished(uint256,bytes,uint256,uint256)\":{\"params\":{\"data\":\"ABI encoded input data.\",\"e3Id\":\"ID of the E3.\"}},\"MaxDurationSet(uint256)\":{\"params\":{\"maxDuration\":\"The maximum duration of a computation in seconds.\"}},\"PlaintextOutputPublished(uint256,bytes)\":{\"params\":{\"e3Id\":\"ID of the E3.\",\"plaintextOutput\":\"ABI encoded plaintext output.\"}}},\"kind\":\"dev\",\"methods\":{\"activate(uint256,bytes)\":{\"details\":\"This function MUST emit the E3Activated event.This function MUST revert if the given E3 has not yet been requested.This function MUST revert if the selected node committee has not yet published a public key.\",\"params\":{\"e3Id\":\"ID of the E3.\",\"publicKey\":\"Public key of the committee.\"},\"returns\":{\"success\":\"True if the E3 was successfully activated.\"}},\"constructor\":{\"params\":{\"_maxDuration\":\"The maximum duration of a computation in seconds\",\"_owner\":\"The owner of this contract\"}},\"getE3(uint256)\":{\"details\":\"This function MUST revert if the E3 does not exist.\",\"params\":{\"e3Id\":\"ID of the E3.\"},\"returns\":{\"e3\":\"The struct representing the requested E3.\"}},\"getInputRoot(uint256)\":{\"details\":\"This function MUST revert if the E3 does not exist.\",\"params\":{\"e3Id\":\"ID of the E3.\"},\"returns\":{\"_0\":\"The root of the input merkle tree.\"}},\"initialize(address,address,uint256)\":{\"params\":{\"_maxDuration\":\"The maximum duration of a computation in seconds\",\"_owner\":\"The owner of this contract\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"publishCiphertextOutput(uint256,bytes,bytes)\":{\"details\":\"This function MUST emit the CiphertextOutputPublished event.\",\"params\":{\"ciphertextOutput\":\"ABI encoded output data to verify.\",\"e3Id\":\"ID of the E3.\",\"proof\":\"ABI encoded data to verify the ciphertextOutput.\"},\"returns\":{\"success\":\"True if the output was successfully published.\"}},\"publishInput(uint256,bytes)\":{\"details\":\"This function MUST revert if the E3 is not yet activated.This function MUST emit the InputPublished event.\",\"params\":{\"data\":\"ABI encoded input data to publish.\",\"e3Id\":\"ID of the E3.\"},\"returns\":{\"success\":\"True if the input was successfully published.\"}},\"publishPlaintextOutput(uint256,bytes,bytes)\":{\"details\":\"This function MUST revert if the output has not been published.This function MUST emit the PlaintextOutputPublished event.\",\"params\":{\"e3Id\":\"ID of the E3.\",\"plaintextOutput\":\"ABI encoded plaintext output.\",\"proof\":\"ABI encoded data to verify the plaintextOutput.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"request(address,uint32[2],uint256[2],uint256,address,bytes,bytes)\":{\"details\":\"This function MUST emit the E3Requested event.\",\"params\":{\"computeProviderParams\":\"ABI encoded compute provider parameters.\",\"duration\":\"The duration of the computation in seconds.\",\"e3Program\":\"Address of the E3 Program.\",\"e3ProgramParams\":\"ABI encoded computation parameters.\",\"filter\":\"IDs of the pool of nodes from which to select the committee.\",\"threshold\":\"The M/N threshold for the committee.\"},\"returns\":{\"e3\":\"The E3 struct.\",\"e3Id\":\"ID of the E3.\"}},\"setMaxDuration(uint256)\":{\"params\":{\"_maxDuration\":\"The maximum duration of a computation in seconds.\"},\"returns\":{\"success\":\"True if the max duration was successfully set.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"events\":{\"CiphernodeRegistrySet(address)\":{\"notice\":\"This event MUST be emitted any time the CiphernodeRegistry is set.\"},\"CiphertextOutputPublished(uint256,bytes)\":{\"notice\":\"This event MUST be emitted when the ciphertext output of an Encrypted Execution Environment (E3) is successfully published.\"},\"E3Activated(uint256,uint256,bytes)\":{\"notice\":\"This event MUST be emitted when an Encrypted Execution Environment (E3) is successfully activated.\"},\"E3ProgramDisabled(address)\":{\"notice\":\"This event MUST be emitted any time a E3 Program is disabled.\"},\"E3ProgramEnabled(address)\":{\"notice\":\"This event MUST be emitted any time a E3 Program is enabled.\"},\"E3Requested(uint256,(uint256,uint32[2],uint256,uint256[2],uint256,uint256,bytes32,address,bytes,address,address,bytes32,bytes32,bytes),address,address)\":{\"notice\":\"This event MUST be emitted when an Encrypted Execution Environment (E3) is successfully requested.\"},\"EncryptionSchemeDisabled(bytes32)\":{\"notice\":\"This event MUST be emitted any time an encryption scheme is disabled.\"},\"EncryptionSchemeEnabled(bytes32)\":{\"notice\":\"The event MUST be emitted any time an encryption scheme is enabled.\"},\"InputPublished(uint256,bytes,uint256,uint256)\":{\"notice\":\"This event MUST be emitted when an input to an Encrypted Execution Environment (E3) is successfully published.\"},\"MaxDurationSet(uint256)\":{\"notice\":\"This event MUST be emitted any time the `maxDuration` is set.\"},\"PlaintextOutputPublished(uint256,bytes)\":{\"notice\":\"This event MUST be emitted when the plaintext output of an Encrypted Execution Environment (E3) is successfully published.\"}},\"kind\":\"user\",\"methods\":{\"activate(uint256,bytes)\":{\"notice\":\"This function should be called to activate an Encrypted Execution Environment (E3) once it has been initialized and is ready for input.\"},\"getE3(uint256)\":{\"notice\":\"This function should be called to retrieve the details of an Encrypted Execution Environment (E3).\"},\"getInputRoot(uint256)\":{\"notice\":\"This function returns root of the input merkle tree for a given E3.\"},\"publishCiphertextOutput(uint256,bytes,bytes)\":{\"notice\":\"This function should be called to publish output data for an Encrypted Execution Environment (E3).\"},\"publishInput(uint256,bytes)\":{\"notice\":\"This function should be called to publish input data for Encrypted Execution Environment (E3).\"},\"publishPlaintextOutput(uint256,bytes,bytes)\":{\"notice\":\"This function publishes the plaintext output of an Encrypted Execution Environment (E3).\"},\"request(address,uint32[2],uint256[2],uint256,address,bytes,bytes)\":{\"notice\":\"This function should be called to request a computation within an Encrypted Execution Environment (E3).\"},\"setMaxDuration(uint256)\":{\"notice\":\"This function should be called to set the maximum duration of requested computations.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/Enclave.sol\":\"Enclave\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":800},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {ContextUpgradeable} from \\\"../utils/ContextUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * The initial owner is set to the address provided by the deployer. This can\\n * later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n /// @custom:storage-location erc7201:openzeppelin.storage.Ownable\\n struct OwnableStorage {\\n address _owner;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Ownable\\\")) - 1)) & ~bytes32(uint256(0xff))\\n bytes32 private constant OwnableStorageLocation = 0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300;\\n\\n function _getOwnableStorage() private pure returns (OwnableStorage storage $) {\\n assembly {\\n $.slot := OwnableStorageLocation\\n }\\n }\\n\\n /**\\n * @dev The caller account is not authorized to perform an operation.\\n */\\n error OwnableUnauthorizedAccount(address account);\\n\\n /**\\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\\n */\\n error OwnableInvalidOwner(address owner);\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\\n */\\n function __Ownable_init(address initialOwner) internal onlyInitializing {\\n __Ownable_init_unchained(initialOwner);\\n }\\n\\n function __Ownable_init_unchained(address initialOwner) internal onlyInitializing {\\n if (initialOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n OwnableStorage storage $ = _getOwnableStorage();\\n return $._owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n if (owner() != _msgSender()) {\\n revert OwnableUnauthorizedAccount(_msgSender());\\n }\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby disabling any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n if (newOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n OwnableStorage storage $ = _getOwnableStorage();\\n address oldOwner = $._owner;\\n $._owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1)) & ~bytes32(uint256(0xff))\\n bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error InvalidInitialization();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any\\n * number of times. This behavior in the constructor can be useful during testing and is not expected to be used in\\n * production.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n // Cache values to avoid duplicated sloads\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n\\n // Allowed calls:\\n // - initialSetup: the contract is not in the initializing state and no previous version was\\n // initialized\\n // - construction: the contract is initialized at version 1 (no reininitialization) and the\\n // current contract is just being deployed\\n bool initialSetup = initialized == 0 && isTopLevelCall;\\n bool construction = initialized == 1 && address(this).code.length == 0;\\n\\n if (!initialSetup && !construction) {\\n revert InvalidInitialization();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert InvalidInitialization();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert InvalidInitialization();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\"},\"@zk-kit/lean-imt.sol/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.8.4;\\n\\nuint256 constant SNARK_SCALAR_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n\",\"keccak256\":\"0xb1944a1d9f63069b2f22260935adb2d11546f82fbb7d12d853a90134a92f4b5b\",\"license\":\"UNLICENSED\"},\"@zk-kit/lean-imt.sol/InternalLeanIMT.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport {PoseidonT3} from \\\"poseidon-solidity/PoseidonT3.sol\\\";\\nimport {SNARK_SCALAR_FIELD} from \\\"./Constants.sol\\\";\\n\\nstruct LeanIMTData {\\n // Tracks the current number of leaves in the tree.\\n uint256 size;\\n // Represents the current depth of the tree, which can increase as new leaves are inserted.\\n uint256 depth;\\n // A mapping from each level of the tree to the node value of the last even position at that level.\\n // Used for efficient inserts, updates and root calculations.\\n mapping(uint256 => uint256) sideNodes;\\n // A mapping from leaf values to their respective indices in the tree.\\n // This facilitates checks for leaf existence and retrieval of leaf positions.\\n mapping(uint256 => uint256) leaves;\\n}\\n\\nerror WrongSiblingNodes();\\nerror LeafGreaterThanSnarkScalarField();\\nerror LeafCannotBeZero();\\nerror LeafAlreadyExists();\\nerror LeafDoesNotExist();\\n\\n/// @title Lean Incremental binary Merkle tree.\\n/// @dev The LeanIMT is an optimized version of the BinaryIMT.\\n/// This implementation eliminates the use of zeroes, and make the tree depth dynamic.\\n/// When a node doesn't have the right child, instead of using a zero hash as in the BinaryIMT,\\n/// the node's value becomes that of its left child. Furthermore, rather than utilizing a static tree depth,\\n/// it is updated based on the number of leaves in the tree. This approach\\n/// results in the calculation of significantly fewer hashes, making the tree more efficient.\\nlibrary InternalLeanIMT {\\n /// @dev Inserts a new leaf into the incremental merkle tree.\\n /// The function ensures that the leaf is valid according to the\\n /// constraints of the tree and then updates the tree's structure accordingly.\\n /// @param self: A storage reference to the 'LeanIMTData' struct.\\n /// @param leaf: The value of the new leaf to be inserted into the tree.\\n /// @return The new hash of the node after the leaf has been inserted.\\n function _insert(LeanIMTData storage self, uint256 leaf) internal returns (uint256) {\\n if (leaf >= SNARK_SCALAR_FIELD) {\\n revert LeafGreaterThanSnarkScalarField();\\n } else if (leaf == 0) {\\n revert LeafCannotBeZero();\\n } else if (_has(self, leaf)) {\\n revert LeafAlreadyExists();\\n }\\n\\n uint256 index = self.size;\\n\\n // Cache tree depth to optimize gas\\n uint256 treeDepth = self.depth;\\n\\n // A new insertion can increase a tree's depth by at most 1,\\n // and only if the number of leaves supported by the current\\n // depth is less than the number of leaves to be supported after insertion.\\n if (2 ** treeDepth < index + 1) {\\n ++treeDepth;\\n }\\n\\n self.depth = treeDepth;\\n\\n uint256 node = leaf;\\n\\n for (uint256 level = 0; level < treeDepth; ) {\\n if ((index >> level) & 1 == 1) {\\n node = PoseidonT3.hash([self.sideNodes[level], node]);\\n } else {\\n self.sideNodes[level] = node;\\n }\\n\\n unchecked {\\n ++level;\\n }\\n }\\n\\n self.size = ++index;\\n\\n self.sideNodes[treeDepth] = node;\\n self.leaves[leaf] = index;\\n\\n return node;\\n }\\n\\n /// @dev Inserts many leaves into the incremental merkle tree.\\n /// The function ensures that the leaves are valid according to the\\n /// constraints of the tree and then updates the tree's structure accordingly.\\n /// @param self: A storage reference to the 'LeanIMTData' struct.\\n /// @param leaves: The values of the new leaves to be inserted into the tree.\\n /// @return The root after the leaves have been inserted.\\n function _insertMany(LeanIMTData storage self, uint256[] calldata leaves) internal returns (uint256) {\\n // Cache tree size to optimize gas\\n uint256 treeSize = self.size;\\n\\n // Check that all the new values are correct to be added.\\n for (uint256 i = 0; i < leaves.length; ) {\\n if (leaves[i] >= SNARK_SCALAR_FIELD) {\\n revert LeafGreaterThanSnarkScalarField();\\n } else if (leaves[i] == 0) {\\n revert LeafCannotBeZero();\\n } else if (_has(self, leaves[i])) {\\n revert LeafAlreadyExists();\\n }\\n\\n self.leaves[leaves[i]] = treeSize + 1 + i;\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n // Array to save the nodes that will be used to create the next level of the tree.\\n uint256[] memory currentLevelNewNodes;\\n\\n currentLevelNewNodes = leaves;\\n\\n // Cache tree depth to optimize gas\\n uint256 treeDepth = self.depth;\\n\\n // Calculate the depth of the tree after adding the new values.\\n // Unlike the 'insert' function, we need a while here as\\n // N insertions can increase the tree's depth more than once.\\n while (2 ** treeDepth < treeSize + leaves.length) {\\n ++treeDepth;\\n }\\n\\n self.depth = treeDepth;\\n\\n // First index to change in every level.\\n uint256 currentLevelStartIndex = treeSize;\\n\\n // Size of the level used to create the next level.\\n uint256 currentLevelSize = treeSize + leaves.length;\\n\\n // The index where changes begin at the next level.\\n uint256 nextLevelStartIndex = currentLevelStartIndex >> 1;\\n\\n // The size of the next level.\\n uint256 nextLevelSize = ((currentLevelSize - 1) >> 1) + 1;\\n\\n for (uint256 level = 0; level < treeDepth; ) {\\n // The number of nodes for the new level that will be created,\\n // only the new values, not the entire level.\\n uint256 numberOfNewNodes = nextLevelSize - nextLevelStartIndex;\\n uint256[] memory nextLevelNewNodes = new uint256[](numberOfNewNodes);\\n for (uint256 i = 0; i < numberOfNewNodes; ) {\\n uint256 leftNode;\\n\\n // Assign the left node using the saved path or the position in the array.\\n if ((i + nextLevelStartIndex) * 2 < currentLevelStartIndex) {\\n leftNode = self.sideNodes[level];\\n } else {\\n leftNode = currentLevelNewNodes[(i + nextLevelStartIndex) * 2 - currentLevelStartIndex];\\n }\\n\\n uint256 rightNode;\\n\\n // Assign the right node if the value exists.\\n if ((i + nextLevelStartIndex) * 2 + 1 < currentLevelSize) {\\n rightNode = currentLevelNewNodes[(i + nextLevelStartIndex) * 2 + 1 - currentLevelStartIndex];\\n }\\n\\n uint256 parentNode;\\n\\n // Assign the parent node.\\n // If it has a right child the result will be the hash(leftNode, rightNode) if not,\\n // it will be the leftNode.\\n if (rightNode != 0) {\\n parentNode = PoseidonT3.hash([leftNode, rightNode]);\\n } else {\\n parentNode = leftNode;\\n }\\n\\n nextLevelNewNodes[i] = parentNode;\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n // Update the `sideNodes` variable.\\n // If `currentLevelSize` is odd, the saved value will be the last value of the array\\n // if it is even and there are more than 1 element in `currentLevelNewNodes`, the saved value\\n // will be the value before the last one.\\n // If it is even and there is only one element, there is no need to save anything because\\n // the correct value for this level was already saved before.\\n if (currentLevelSize & 1 == 1) {\\n self.sideNodes[level] = currentLevelNewNodes[currentLevelNewNodes.length - 1];\\n } else if (currentLevelNewNodes.length > 1) {\\n self.sideNodes[level] = currentLevelNewNodes[currentLevelNewNodes.length - 2];\\n }\\n\\n currentLevelStartIndex = nextLevelStartIndex;\\n\\n // Calculate the next level startIndex value.\\n // It is the position of the parent node which is pos/2.\\n nextLevelStartIndex >>= 1;\\n\\n // Update the next array that will be used to calculate the next level.\\n currentLevelNewNodes = nextLevelNewNodes;\\n\\n currentLevelSize = nextLevelSize;\\n\\n // Calculate the size of the next level.\\n // The size of the next level is (currentLevelSize - 1) / 2 + 1.\\n nextLevelSize = ((nextLevelSize - 1) >> 1) + 1;\\n\\n unchecked {\\n ++level;\\n }\\n }\\n\\n // Update tree size\\n self.size = treeSize + leaves.length;\\n\\n // Update tree root\\n self.sideNodes[treeDepth] = currentLevelNewNodes[0];\\n\\n return currentLevelNewNodes[0];\\n }\\n\\n /// @dev Updates the value of an existing leaf and recalculates hashes\\n /// to maintain tree integrity.\\n /// @param self: A storage reference to the 'LeanIMTData' struct.\\n /// @param oldLeaf: The value of the leaf that is to be updated.\\n /// @param newLeaf: The new value that will replace the oldLeaf in the tree.\\n /// @param siblingNodes: An array of sibling nodes that are necessary to recalculate the path to the root.\\n /// @return The new hash of the updated node after the leaf has been updated.\\n function _update(\\n LeanIMTData storage self,\\n uint256 oldLeaf,\\n uint256 newLeaf,\\n uint256[] calldata siblingNodes\\n ) internal returns (uint256) {\\n if (newLeaf >= SNARK_SCALAR_FIELD) {\\n revert LeafGreaterThanSnarkScalarField();\\n } else if (!_has(self, oldLeaf)) {\\n revert LeafDoesNotExist();\\n } else if (_has(self, newLeaf)) {\\n revert LeafAlreadyExists();\\n }\\n\\n uint256 index = _indexOf(self, oldLeaf);\\n uint256 node = newLeaf;\\n uint256 oldRoot = oldLeaf;\\n\\n uint256 lastIndex = self.size - 1;\\n uint256 i = 0;\\n\\n // Cache tree depth to optimize gas\\n uint256 treeDepth = self.depth;\\n\\n for (uint256 level = 0; level < treeDepth; ) {\\n if ((index >> level) & 1 == 1) {\\n if (siblingNodes[i] >= SNARK_SCALAR_FIELD) {\\n revert LeafGreaterThanSnarkScalarField();\\n }\\n\\n node = PoseidonT3.hash([siblingNodes[i], node]);\\n oldRoot = PoseidonT3.hash([siblingNodes[i], oldRoot]);\\n\\n unchecked {\\n ++i;\\n }\\n } else {\\n if (index >> level != lastIndex >> level) {\\n if (siblingNodes[i] >= SNARK_SCALAR_FIELD) {\\n revert LeafGreaterThanSnarkScalarField();\\n }\\n\\n node = PoseidonT3.hash([node, siblingNodes[i]]);\\n oldRoot = PoseidonT3.hash([oldRoot, siblingNodes[i]]);\\n\\n unchecked {\\n ++i;\\n }\\n } else {\\n self.sideNodes[i] = node;\\n }\\n }\\n\\n unchecked {\\n ++level;\\n }\\n }\\n\\n if (oldRoot != _root(self)) {\\n revert WrongSiblingNodes();\\n }\\n\\n self.sideNodes[treeDepth] = node;\\n\\n if (newLeaf != 0) {\\n self.leaves[newLeaf] = self.leaves[oldLeaf];\\n }\\n\\n self.leaves[oldLeaf] = 0;\\n\\n return node;\\n }\\n\\n /// @dev Removes a leaf from the tree by setting its value to zero.\\n /// This function utilizes the update function to set the leaf's value\\n /// to zero and update the tree's state accordingly.\\n /// @param self: A storage reference to the 'LeanIMTData' struct.\\n /// @param oldLeaf: The value of the leaf to be removed.\\n /// @param siblingNodes: An array of sibling nodes required for updating the path to the root after removal.\\n /// @return The new root hash of the tree after the leaf has been removed.\\n function _remove(\\n LeanIMTData storage self,\\n uint256 oldLeaf,\\n uint256[] calldata siblingNodes\\n ) internal returns (uint256) {\\n return _update(self, oldLeaf, 0, siblingNodes);\\n }\\n\\n /// @dev Checks if a leaf exists in the tree.\\n /// @param self: A storage reference to the 'LeanIMTData' struct.\\n /// @param leaf: The value of the leaf to check for existence.\\n /// @return A boolean value indicating whether the leaf exists in the tree.\\n function _has(LeanIMTData storage self, uint256 leaf) internal view returns (bool) {\\n return self.leaves[leaf] != 0;\\n }\\n\\n /// @dev Retrieves the index of a given leaf in the tree.\\n /// @param self: A storage reference to the 'LeanIMTData' struct.\\n /// @param leaf: The value of the leaf whose index is to be found.\\n /// @return The index of the specified leaf within the tree. If the leaf is not present, the function\\n /// reverts with a custom error.\\n function _indexOf(LeanIMTData storage self, uint256 leaf) internal view returns (uint256) {\\n if (self.leaves[leaf] == 0) {\\n revert LeafDoesNotExist();\\n }\\n\\n return self.leaves[leaf] - 1;\\n }\\n\\n /// @dev Retrieves the root of the tree from the 'sideNodes' mapping using the\\n /// current tree depth.\\n /// @param self: A storage reference to the 'LeanIMTData' struct.\\n /// @return The root hash of the tree.\\n function _root(LeanIMTData storage self) internal view returns (uint256) {\\n return self.sideNodes[self.depth];\\n }\\n}\\n\",\"keccak256\":\"0x6385ce9153d11d9824163464193d4ba3dd304e662dccd365ba2fc381a359762b\",\"license\":\"MIT\"},\"contracts/Enclave.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.8.27;\\n\\nimport { IEnclave, E3, IE3Program } from \\\"./interfaces/IEnclave.sol\\\";\\nimport { IInputValidator } from \\\"./interfaces/IInputValidator.sol\\\";\\nimport { ICiphernodeRegistry } from \\\"./interfaces/ICiphernodeRegistry.sol\\\";\\nimport { IDecryptionVerifier } from \\\"./interfaces/IDecryptionVerifier.sol\\\";\\nimport {\\n OwnableUpgradeable\\n} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport {\\n InternalLeanIMT,\\n LeanIMTData,\\n PoseidonT3\\n} from \\\"@zk-kit/lean-imt.sol/InternalLeanIMT.sol\\\";\\n\\ncontract Enclave is IEnclave, OwnableUpgradeable {\\n using InternalLeanIMT for LeanIMTData;\\n\\n ////////////////////////////////////////////////////////////\\n // //\\n // Storage Variables //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n ICiphernodeRegistry public ciphernodeRegistry; // address of the Ciphernode registry.\\n uint256 public maxDuration; // maximum duration of a computation in seconds.\\n uint256 public nexte3Id; // ID of the next E3.\\n uint256 public requests; // total number of requests made to Enclave.\\n\\n // Mapping of allowed E3 Programs.\\n mapping(IE3Program e3Program => bool allowed) public e3Programs;\\n\\n // Mapping of E3s.\\n mapping(uint256 e3Id => E3 e3) public e3s;\\n\\n // Mapping of input merkle trees.\\n mapping(uint256 e3Id => LeanIMTData imt) public inputs;\\n\\n // Mapping counting the number of inputs for each E3.\\n mapping(uint256 e3Id => uint256 inputCount) public inputCounts;\\n\\n // Mapping of enabled encryption schemes.\\n mapping(bytes32 encryptionSchemeId => IDecryptionVerifier decryptionVerifier)\\n public decryptionVerifiers;\\n\\n ////////////////////////////////////////////////////////////\\n // //\\n // Errors //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n error CommitteeSelectionFailed();\\n error E3ProgramNotAllowed(IE3Program e3Program);\\n error E3AlreadyActivated(uint256 e3Id);\\n error E3Expired();\\n error E3NotActivated(uint256 e3Id);\\n error E3NotReady();\\n error E3DoesNotExist(uint256 e3Id);\\n error ModuleAlreadyEnabled(address module);\\n error ModuleNotEnabled(address module);\\n error InvalidEncryptionScheme(bytes32 encryptionSchemeId);\\n error InputDeadlinePassed(uint256 e3Id, uint256 expiration);\\n error InputDeadlineNotPassed(uint256 e3Id, uint256 expiration);\\n error InvalidComputationRequest(IInputValidator inputValidator);\\n error InvalidCiphernodeRegistry(ICiphernodeRegistry ciphernodeRegistry);\\n error InvalidDuration(uint256 duration);\\n error InvalidOutput(bytes output);\\n error InvalidInput();\\n error InvalidStartWindow();\\n error InvalidThreshold(uint32[2] threshold);\\n error CiphertextOutputAlreadyPublished(uint256 e3Id);\\n error CiphertextOutputNotPublished(uint256 e3Id);\\n error PaymentRequired(uint256 value);\\n error PlaintextOutputAlreadyPublished(uint256 e3Id);\\n\\n ////////////////////////////////////////////////////////////\\n // //\\n // Initialization //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n /// @param _owner The owner of this contract\\n /// @param _maxDuration The maximum duration of a computation in seconds\\n constructor(\\n address _owner,\\n ICiphernodeRegistry _ciphernodeRegistry,\\n uint256 _maxDuration\\n ) {\\n initialize(_owner, _ciphernodeRegistry, _maxDuration);\\n }\\n\\n /// @param _owner The owner of this contract\\n /// @param _maxDuration The maximum duration of a computation in seconds\\n function initialize(\\n address _owner,\\n ICiphernodeRegistry _ciphernodeRegistry,\\n uint256 _maxDuration\\n ) public initializer {\\n __Ownable_init(msg.sender);\\n setMaxDuration(_maxDuration);\\n setCiphernodeRegistry(_ciphernodeRegistry);\\n if (_owner != owner()) transferOwnership(_owner);\\n }\\n\\n ////////////////////////////////////////////////////////////\\n // //\\n // Core Entrypoints //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n function request(\\n address filter,\\n uint32[2] calldata threshold,\\n uint256[2] calldata startWindow,\\n uint256 duration,\\n IE3Program e3Program,\\n bytes memory e3ProgramParams,\\n bytes memory computeProviderParams\\n ) external payable returns (uint256 e3Id, E3 memory e3) {\\n // TODO: allow for other payment methods or only native tokens?\\n // TODO: should payment checks be somewhere else? Perhaps in the E3 Program or ciphernode registry?\\n require(msg.value > 0, PaymentRequired(msg.value));\\n require(\\n threshold[1] >= threshold[0] && threshold[0] > 0,\\n InvalidThreshold(threshold)\\n );\\n require(\\n // TODO: do we need a minimum start window to allow time for committee selection?\\n startWindow[1] >= startWindow[0] &&\\n startWindow[1] >= block.timestamp,\\n InvalidStartWindow()\\n );\\n require(\\n duration > 0 && duration <= maxDuration,\\n InvalidDuration(duration)\\n );\\n require(e3Programs[e3Program], E3ProgramNotAllowed(e3Program));\\n\\n // TODO: should IDs be incremental or produced deterministically?\\n e3Id = nexte3Id;\\n nexte3Id++;\\n uint256 seed = uint256(keccak256(abi.encode(block.prevrandao, e3Id)));\\n\\n (bytes32 encryptionSchemeId, IInputValidator inputValidator) = e3Program\\n .validate(e3Id, seed, e3ProgramParams, computeProviderParams);\\n IDecryptionVerifier decryptionVerifier = decryptionVerifiers[\\n encryptionSchemeId\\n ];\\n require(\\n decryptionVerifiers[encryptionSchemeId] !=\\n IDecryptionVerifier(address(0)),\\n InvalidEncryptionScheme(encryptionSchemeId)\\n );\\n require(\\n address(inputValidator) != address(0),\\n InvalidComputationRequest(inputValidator)\\n );\\n\\n e3 = E3({\\n seed: seed,\\n threshold: threshold,\\n requestBlock: block.number,\\n startWindow: startWindow,\\n duration: duration,\\n expiration: 0,\\n encryptionSchemeId: encryptionSchemeId,\\n e3Program: e3Program,\\n e3ProgramParams: e3ProgramParams,\\n inputValidator: inputValidator,\\n decryptionVerifier: decryptionVerifier,\\n committeePublicKey: hex\\\"\\\",\\n ciphertextOutput: hex\\\"\\\",\\n plaintextOutput: hex\\\"\\\"\\n });\\n e3s[e3Id] = e3;\\n\\n require(\\n ciphernodeRegistry.requestCommittee(e3Id, filter, threshold),\\n CommitteeSelectionFailed()\\n );\\n\\n emit E3Requested(e3Id, e3, filter, e3Program);\\n }\\n\\n function activate(\\n uint256 e3Id,\\n bytes memory publicKey\\n ) external returns (bool success) {\\n E3 memory e3 = getE3(e3Id);\\n\\n require(e3.expiration == 0, E3AlreadyActivated(e3Id));\\n require(e3.startWindow[0] <= block.timestamp, E3NotReady());\\n // TODO: handle what happens to the payment if the start window has passed.\\n require(e3.startWindow[1] >= block.timestamp, E3Expired());\\n\\n bytes32 publicKeyHash = ciphernodeRegistry.committeePublicKey(e3Id);\\n require(\\n keccak256(publicKey) == publicKeyHash,\\n CommitteeSelectionFailed()\\n );\\n\\n e3s[e3Id].expiration = block.timestamp + e3.duration;\\n e3s[e3Id].committeePublicKey = keccak256(publicKey);\\n\\n emit E3Activated(e3Id, e3.expiration, publicKey);\\n\\n return true;\\n }\\n\\n function publishInput(\\n uint256 e3Id,\\n bytes memory data\\n ) external returns (bool success) {\\n E3 memory e3 = getE3(e3Id);\\n\\n // Note: if we make 0 a no expiration, this has to be refactored\\n require(e3.expiration > 0, E3NotActivated(e3Id));\\n // TODO: should we have an input window, including both a start and end timestamp?\\n require(\\n e3.expiration > block.timestamp,\\n InputDeadlinePassed(e3Id, e3.expiration)\\n );\\n\\n bytes memory input = e3.inputValidator.validate(msg.sender, data);\\n uint256 inputHash = PoseidonT3.hash(\\n [uint256(keccak256(input)), inputCounts[e3Id]]\\n );\\n\\n inputCounts[e3Id]++;\\n inputs[e3Id]._insert(inputHash);\\n success = true;\\n\\n emit InputPublished(e3Id, input, inputHash, inputCounts[e3Id] - 1);\\n }\\n\\n function publishCiphertextOutput(\\n uint256 e3Id,\\n bytes memory ciphertextOutput,\\n bytes memory proof\\n ) external returns (bool success) {\\n E3 memory e3 = getE3(e3Id);\\n // Note: if we make 0 a no expiration, this has to be refactored\\n require(e3.expiration > 0, E3NotActivated(e3Id));\\n require(\\n e3.expiration <= block.timestamp,\\n InputDeadlineNotPassed(e3Id, e3.expiration)\\n );\\n // TODO: should the output verifier be able to change its mind?\\n //i.e. should we be able to call this multiple times?\\n require(\\n e3.ciphertextOutput == bytes32(0),\\n CiphertextOutputAlreadyPublished(e3Id)\\n );\\n bytes32 ciphertextOutputHash = keccak256(ciphertextOutput);\\n (success) = e3.e3Program.verify(e3Id, ciphertextOutputHash, proof);\\n require(success, InvalidOutput(ciphertextOutput));\\n e3s[e3Id].ciphertextOutput = ciphertextOutputHash;\\n\\n emit CiphertextOutputPublished(e3Id, ciphertextOutput);\\n }\\n\\n function publishPlaintextOutput(\\n uint256 e3Id,\\n bytes memory plaintextOutput,\\n bytes memory proof\\n ) external returns (bool success) {\\n E3 memory e3 = getE3(e3Id);\\n // Note: if we make 0 a no expiration, this has to be refactored\\n require(e3.expiration > 0, E3NotActivated(e3Id));\\n require(\\n e3.ciphertextOutput != bytes32(0),\\n CiphertextOutputNotPublished(e3Id)\\n );\\n require(\\n e3.plaintextOutput.length == 0,\\n PlaintextOutputAlreadyPublished(e3Id)\\n );\\n (success) = e3.decryptionVerifier.verify(\\n e3Id,\\n keccak256(plaintextOutput),\\n proof\\n );\\n require(success, InvalidOutput(plaintextOutput));\\n e3s[e3Id].plaintextOutput = plaintextOutput;\\n\\n emit PlaintextOutputPublished(e3Id, plaintextOutput);\\n }\\n\\n ////////////////////////////////////////////////////////////\\n // //\\n // Set Functions //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n function setMaxDuration(\\n uint256 _maxDuration\\n ) public onlyOwner returns (bool success) {\\n maxDuration = _maxDuration;\\n success = true;\\n emit MaxDurationSet(_maxDuration);\\n }\\n\\n function setCiphernodeRegistry(\\n ICiphernodeRegistry _ciphernodeRegistry\\n ) public onlyOwner returns (bool success) {\\n require(\\n address(_ciphernodeRegistry) != address(0) &&\\n _ciphernodeRegistry != ciphernodeRegistry,\\n InvalidCiphernodeRegistry(_ciphernodeRegistry)\\n );\\n ciphernodeRegistry = _ciphernodeRegistry;\\n success = true;\\n emit CiphernodeRegistrySet(address(_ciphernodeRegistry));\\n }\\n\\n function enableE3Program(\\n IE3Program e3Program\\n ) public onlyOwner returns (bool success) {\\n require(\\n !e3Programs[e3Program],\\n ModuleAlreadyEnabled(address(e3Program))\\n );\\n e3Programs[e3Program] = true;\\n success = true;\\n emit E3ProgramEnabled(e3Program);\\n }\\n\\n function disableE3Program(\\n IE3Program e3Program\\n ) public onlyOwner returns (bool success) {\\n require(e3Programs[e3Program], ModuleNotEnabled(address(e3Program)));\\n delete e3Programs[e3Program];\\n success = true;\\n emit E3ProgramDisabled(e3Program);\\n }\\n\\n function setDecryptionVerifier(\\n bytes32 encryptionSchemeId,\\n IDecryptionVerifier decryptionVerifier\\n ) public onlyOwner returns (bool success) {\\n require(\\n decryptionVerifier != IDecryptionVerifier(address(0)) &&\\n decryptionVerifiers[encryptionSchemeId] != decryptionVerifier,\\n InvalidEncryptionScheme(encryptionSchemeId)\\n );\\n decryptionVerifiers[encryptionSchemeId] = decryptionVerifier;\\n success = true;\\n emit EncryptionSchemeEnabled(encryptionSchemeId);\\n }\\n\\n function disableEncryptionScheme(\\n bytes32 encryptionSchemeId\\n ) public onlyOwner returns (bool success) {\\n require(\\n decryptionVerifiers[encryptionSchemeId] !=\\n IDecryptionVerifier(address(0)),\\n InvalidEncryptionScheme(encryptionSchemeId)\\n );\\n decryptionVerifiers[encryptionSchemeId] = IDecryptionVerifier(\\n address(0)\\n );\\n success = true;\\n emit EncryptionSchemeDisabled(encryptionSchemeId);\\n }\\n\\n ////////////////////////////////////////////////////////////\\n // //\\n // Get Functions //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n function getE3(uint256 e3Id) public view returns (E3 memory e3) {\\n e3 = e3s[e3Id];\\n require(e3.e3Program != IE3Program(address(0)), E3DoesNotExist(e3Id));\\n }\\n\\n function getInputRoot(uint256 e3Id) public view returns (uint256) {\\n require(\\n e3s[e3Id].e3Program != IE3Program(address(0)),\\n E3DoesNotExist(e3Id)\\n );\\n return InternalLeanIMT._root(inputs[e3Id]);\\n }\\n\\n function getDecryptionVerifier(\\n bytes32 encryptionSchemeId\\n ) public view returns (IDecryptionVerifier) {\\n return decryptionVerifiers[encryptionSchemeId];\\n }\\n}\\n\",\"keccak256\":\"0x7e1c43df26c36b2954f7ca06376e3e6c24ad4efc6bd7144ed54c85595b49b035\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/ICiphernodeRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.8.27;\\n\\ninterface ICiphernodeRegistry {\\n /// @notice This event MUST be emitted when a committee is selected for an E3.\\n /// @param e3Id ID of the E3 for which the committee was selected.\\n /// @param filter Address of the contract that will coordinate committee selection.\\n /// @param threshold The M/N threshold for the committee.\\n event CommitteeRequested(\\n uint256 indexed e3Id,\\n address filter,\\n uint32[2] threshold\\n );\\n\\n /// @notice This event MUST be emitted when a committee is selected for an E3.\\n /// @param e3Id ID of the E3 for which the committee was selected.\\n /// @param publicKey Public key of the committee.\\n event CommitteePublished(uint256 indexed e3Id, bytes publicKey);\\n\\n /// @notice This event MUST be emitted when `enclave` is set.\\n /// @param enclave Address of the enclave contract.\\n event EnclaveSet(address indexed enclave);\\n\\n /// @notice This event MUST be emitted when a ciphernode is added to the registry.\\n /// @param node Address of the ciphernode.\\n /// @param index Index of the ciphernode in the registry.\\n /// @param numNodes Number of ciphernodes in the registry.\\n /// @param size Size of the registry.\\n event CiphernodeAdded(\\n address indexed node,\\n uint256 index,\\n uint256 numNodes,\\n uint256 size\\n );\\n\\n /// @notice This event MUST be emitted when a ciphernode is removed from the registry.\\n /// @param node Address of the ciphernode.\\n /// @param index Index of the ciphernode in the registry.\\n /// @param numNodes Number of ciphernodes in the registry.\\n /// @param size Size of the registry.\\n event CiphernodeRemoved(\\n address indexed node,\\n uint256 index,\\n uint256 numNodes,\\n uint256 size\\n );\\n\\n function isCiphernodeEligible(address ciphernode) external returns (bool);\\n\\n /// @notice Initiates the committee selection process for a specified E3.\\n /// @dev This function MUST revert when not called by the Enclave contract.\\n /// @param e3Id ID of the E3 for which to select the committee.\\n /// @param filter The address of the filter responsible for the committee selection process.\\n /// @param threshold The M/N threshold for the committee.\\n /// @return success True if committee selection was successfully initiated.\\n function requestCommittee(\\n uint256 e3Id,\\n address filter,\\n uint32[2] calldata threshold\\n ) external returns (bool success);\\n\\n /// @notice Publishes the public key resulting from the committee selection process.\\n /// @dev This function MUST revert if not called by the previously selected filter.\\n /// @param e3Id ID of the E3 for which to select the committee.\\n /// @param publicKey The hash of the public key generated by the given committee.\\n function publishCommittee(\\n uint256 e3Id,\\n bytes calldata proof,\\n bytes calldata publicKey\\n ) external;\\n\\n /// @notice This function should be called by the Enclave contract to get the public key of a committee.\\n /// @dev This function MUST revert if no committee has been requested for the given E3.\\n /// @dev This function MUST revert if the committee has not yet published a public key.\\n /// @param e3Id ID of the E3 for which to get the committee public key.\\n /// @return publicKeyHash The hash of the public key of the given committee.\\n function committeePublicKey(\\n uint256 e3Id\\n ) external view returns (bytes32 publicKeyHash);\\n}\\n\",\"keccak256\":\"0xe24e6322e8c6fc83461edfbdbedb409e243f1c4e79021a74585cfe875c225aa2\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/IDecryptionVerifier.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.8.27;\\n\\ninterface IDecryptionVerifier {\\n /// @notice This function should be called by the Enclave contract to verify the\\n /// decryption of output of a computation.\\n /// @param e3Id ID of the E3.\\n /// @param plaintextOutputHash The keccak256 hash of the plaintext output to be verified.\\n /// @param proof ABI encoded proof of the given output hash.\\n /// @return success Whether or not the plaintextOutputHash was successfully verified.\\n function verify(\\n uint256 e3Id,\\n bytes32 plaintextOutputHash,\\n bytes memory proof\\n ) external view returns (bool success);\\n}\\n\",\"keccak256\":\"0xb92991a581d3c18cdc273497687ec1c6e3016674314f21fe56917aece5d10863\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/IE3.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.8.27;\\n\\nimport { IInputValidator } from \\\"./IInputValidator.sol\\\";\\nimport { IE3Program } from \\\"./IE3Program.sol\\\";\\nimport { IDecryptionVerifier } from \\\"./IDecryptionVerifier.sol\\\";\\n\\n/// @title E3 struct\\n/// @notice This struct represents an E3 computation.\\n/// @param threshold M/N threshold for the committee.\\n/// @param requestBlock Block number when the E3 was requested.\\n/// @param startWindow Start window for the computation: index zero is minimum, index 1 is the maxium.\\n/// @param duration Duration of the E3.\\n/// @param expiration Timestamp when committee duties expire.\\n/// @param e3Program Address of the E3 Program contract.\\n/// @param computeProvider Address of the compute provider contract.\\n/// @param inputValidator Address of the input validator contract.\\n/// @param decryptionVerifier Address of the output verifier contract.\\n/// @param committeeId ID of the selected committee.\\n/// @param ciphertextOutput Encrypted output data.\\n/// @param plaintextOutput Decrypted output data.\\nstruct E3 {\\n uint256 seed;\\n uint32[2] threshold;\\n uint256 requestBlock;\\n uint256[2] startWindow;\\n uint256 duration;\\n uint256 expiration;\\n bytes32 encryptionSchemeId;\\n IE3Program e3Program;\\n bytes e3ProgramParams;\\n IInputValidator inputValidator;\\n IDecryptionVerifier decryptionVerifier;\\n bytes32 committeePublicKey;\\n bytes32 ciphertextOutput;\\n bytes plaintextOutput;\\n}\\n\",\"keccak256\":\"0x16f12d3e46b12fcbff721eb8c358324fd400c95b40d57ed06b05e7afd590811e\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/IE3Program.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.8.27;\\n\\nimport { IInputValidator } from \\\"./IInputValidator.sol\\\";\\n\\ninterface IE3Program {\\n /// @notice This function should be called by the Enclave contract to validate the computation parameters.\\n /// @param e3Id ID of the E3.\\n /// @param seed Seed for the computation.\\n /// @param e3ProgramParams ABI encoded computation parameters.\\n /// @param computeProviderParams ABI encoded compute provider parameters.\\n /// @return encryptionSchemeId ID of the encryption scheme to be used for the computation.\\n /// @return inputValidator The input validator to be used for the computation.\\n function validate(\\n uint256 e3Id,\\n uint256 seed,\\n bytes calldata e3ProgramParams,\\n bytes calldata computeProviderParams\\n )\\n external\\n returns (bytes32 encryptionSchemeId, IInputValidator inputValidator);\\n\\n /// @notice This function should be called by the Enclave contract to verify the decrypted output of an E3.\\n /// @param e3Id ID of the E3.\\n /// @param ciphertextOutputHash The keccak256 hash of output data to be verified.\\n /// @param proof ABI encoded data to verify the ciphertextOutputHash.\\n /// @return success Whether the output data is valid.\\n function verify(\\n uint256 e3Id,\\n bytes32 ciphertextOutputHash,\\n bytes memory proof\\n ) external returns (bool success);\\n}\\n\",\"keccak256\":\"0xd60e92b5b6498daf0b7f1238d354156c67d25c03caaaabbc601368e9e4a295b2\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/IEnclave.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.8.27;\\n\\nimport { E3, IE3Program } from \\\"./IE3.sol\\\";\\n\\ninterface IEnclave {\\n ////////////////////////////////////////////////////////////\\n // //\\n // Events //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n /// @notice This event MUST be emitted when an Encrypted Execution Environment (E3) is successfully requested.\\n /// @param e3Id ID of the E3.\\n /// @param e3 Details of the E3.\\n /// @param filter Address of the pool of nodes from which the Cipher Node committee was selected.\\n /// @param e3Program Address of the Computation module selected.\\n event E3Requested(\\n uint256 e3Id,\\n E3 e3,\\n address filter,\\n IE3Program indexed e3Program\\n );\\n\\n /// @notice This event MUST be emitted when an Encrypted Execution Environment (E3) is successfully activated.\\n /// @param e3Id ID of the E3.\\n /// @param expiration Timestamp when committee duties expire.\\n /// @param committeePublicKey Public key of the committee.\\n event E3Activated(\\n uint256 e3Id,\\n uint256 expiration,\\n bytes committeePublicKey\\n );\\n\\n /// @notice This event MUST be emitted when an input to an Encrypted Execution Environment (E3) is\\n /// successfully published.\\n /// @param e3Id ID of the E3.\\n /// @param data ABI encoded input data.\\n event InputPublished(\\n uint256 indexed e3Id,\\n bytes data,\\n uint256 inputHash,\\n uint256 index\\n );\\n\\n /// @notice This event MUST be emitted when the plaintext output of an Encrypted Execution Environment (E3)\\n /// is successfully published.\\n /// @param e3Id ID of the E3.\\n /// @param plaintextOutput ABI encoded plaintext output.\\n event PlaintextOutputPublished(uint256 indexed e3Id, bytes plaintextOutput);\\n\\n /// @notice This event MUST be emitted when the ciphertext output of an Encrypted Execution Environment (E3)\\n /// is successfully published.\\n /// @param e3Id ID of the E3.\\n /// @param ciphertextOutput ABI encoded ciphertext output.\\n event CiphertextOutputPublished(\\n uint256 indexed e3Id,\\n bytes ciphertextOutput\\n );\\n\\n /// @notice This event MUST be emitted any time the `maxDuration` is set.\\n /// @param maxDuration The maximum duration of a computation in seconds.\\n event MaxDurationSet(uint256 maxDuration);\\n\\n /// @notice This event MUST be emitted any time the CiphernodeRegistry is set.\\n /// @param ciphernodeRegistry The address of the CiphernodeRegistry contract.\\n event CiphernodeRegistrySet(address ciphernodeRegistry);\\n\\n /// @notice The event MUST be emitted any time an encryption scheme is enabled.\\n /// @param encryptionSchemeId The ID of the encryption scheme that was enabled.\\n event EncryptionSchemeEnabled(bytes32 encryptionSchemeId);\\n\\n /// @notice This event MUST be emitted any time an encryption scheme is disabled.\\n /// @param encryptionSchemeId The ID of the encryption scheme that was disabled.\\n event EncryptionSchemeDisabled(bytes32 encryptionSchemeId);\\n\\n /// @notice This event MUST be emitted any time a E3 Program is enabled.\\n /// @param e3Program The address of the E3 Program.\\n event E3ProgramEnabled(IE3Program e3Program);\\n\\n /// @notice This event MUST be emitted any time a E3 Program is disabled.\\n /// @param e3Program The address of the E3 Program.\\n event E3ProgramDisabled(IE3Program e3Program);\\n\\n ////////////////////////////////////////////////////////////\\n // //\\n // Core Entrypoints //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n /// @notice This function should be called to request a computation within an Encrypted Execution Environment (E3).\\n /// @dev This function MUST emit the E3Requested event.\\n /// @param filter IDs of the pool of nodes from which to select the committee.\\n /// @param threshold The M/N threshold for the committee.\\n /// @param duration The duration of the computation in seconds.\\n /// @param e3Program Address of the E3 Program.\\n /// @param e3ProgramParams ABI encoded computation parameters.\\n /// @param computeProviderParams ABI encoded compute provider parameters.\\n /// @return e3Id ID of the E3.\\n /// @return e3 The E3 struct.\\n function request(\\n address filter,\\n uint32[2] calldata threshold,\\n uint256[2] calldata startWindow,\\n uint256 duration,\\n IE3Program e3Program,\\n bytes memory e3ProgramParams,\\n bytes memory computeProviderParams\\n ) external payable returns (uint256 e3Id, E3 memory e3);\\n\\n /// @notice This function should be called to activate an Encrypted Execution Environment (E3) once it has been\\n /// initialized and is ready for input.\\n /// @dev This function MUST emit the E3Activated event.\\n /// @dev This function MUST revert if the given E3 has not yet been requested.\\n /// @dev This function MUST revert if the selected node committee has not yet published a public key.\\n /// @param e3Id ID of the E3.\\n /// @param publicKey Public key of the committee.\\n /// @return success True if the E3 was successfully activated.\\n function activate(\\n uint256 e3Id,\\n bytes memory publicKey\\n ) external returns (bool success);\\n\\n /// @notice This function should be called to publish input data for Encrypted Execution Environment (E3).\\n /// @dev This function MUST revert if the E3 is not yet activated.\\n /// @dev This function MUST emit the InputPublished event.\\n /// @param e3Id ID of the E3.\\n /// @param data ABI encoded input data to publish.\\n /// @return success True if the input was successfully published.\\n function publishInput(\\n uint256 e3Id,\\n bytes calldata data\\n ) external returns (bool success);\\n\\n /// @notice This function should be called to publish output data for an Encrypted Execution Environment (E3).\\n /// @dev This function MUST emit the CiphertextOutputPublished event.\\n /// @param e3Id ID of the E3.\\n /// @param ciphertextOutput ABI encoded output data to verify.\\n /// @param proof ABI encoded data to verify the ciphertextOutput.\\n /// @return success True if the output was successfully published.\\n function publishCiphertextOutput(\\n uint256 e3Id,\\n bytes memory ciphertextOutput,\\n bytes memory proof\\n ) external returns (bool success);\\n\\n /// @notice This function publishes the plaintext output of an Encrypted Execution Environment (E3).\\n /// @dev This function MUST revert if the output has not been published.\\n /// @dev This function MUST emit the PlaintextOutputPublished event.\\n /// @param e3Id ID of the E3.\\n /// @param plaintextOutput ABI encoded plaintext output.\\n /// @param proof ABI encoded data to verify the plaintextOutput.\\n function publishPlaintextOutput(\\n uint256 e3Id,\\n bytes memory plaintextOutput,\\n bytes memory proof\\n ) external returns (bool success);\\n\\n ////////////////////////////////////////////////////////////\\n // //\\n // Set Functions //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n /// @notice This function should be called to set the maximum duration of requested computations.\\n /// @param _maxDuration The maximum duration of a computation in seconds.\\n /// @return success True if the max duration was successfully set.\\n function setMaxDuration(\\n uint256 _maxDuration\\n ) external returns (bool success);\\n\\n ////////////////////////////////////////////////////////////\\n // //\\n // Get Functions //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n /// @notice This function should be called to retrieve the details of an Encrypted Execution Environment (E3).\\n /// @dev This function MUST revert if the E3 does not exist.\\n /// @param e3Id ID of the E3.\\n /// @return e3 The struct representing the requested E3.\\n function getE3(uint256 e3Id) external view returns (E3 memory e3);\\n\\n /// @notice This function returns root of the input merkle tree for a given E3.\\n /// @dev This function MUST revert if the E3 does not exist.\\n /// @param e3Id ID of the E3.\\n /// @return root The root of the input merkle tree.\\n function getInputRoot(uint256 e3Id) external view returns (uint256 root);\\n}\\n\",\"keccak256\":\"0xb1c9cd24aeb1dbf988555945ae532860c8a60a874f19020e48e29c9e3e5ebb64\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/IInputValidator.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.8.27;\\n\\ninterface IInputValidator {\\n /// @notice This function should be called by the Enclave contract to validate the\\n /// input of a computation.\\n /// @param sender The account that is submitting the input.\\n /// @param data The input to be verified.\\n /// @return input The decoded, policy-approved application payload.\\n function validate(\\n address sender,\\n bytes memory data\\n ) external returns (bytes memory input);\\n}\\n\",\"keccak256\":\"0x20d4016bd59c317c5571cfe6c3e8f46cbabddc0b926dc64019eeae8d29788653\",\"license\":\"LGPL-3.0-only\"},\"poseidon-solidity/PoseidonT3.sol\":{\"content\":\"/// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.0;\\n\\nlibrary PoseidonT3 {\\n uint constant M00 = 0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b;\\n uint constant M01 = 0x2969f27eed31a480b9c36c764379dbca2cc8fdd1415c3dded62940bcde0bd771;\\n uint constant M02 = 0x143021ec686a3f330d5f9e654638065ce6cd79e28c5b3753326244ee65a1b1a7;\\n uint constant M10 = 0x16ed41e13bb9c0c66ae119424fddbcbc9314dc9fdbdeea55d6c64543dc4903e0;\\n uint constant M11 = 0x2e2419f9ec02ec394c9871c832963dc1b89d743c8c7b964029b2311687b1fe23;\\n uint constant M12 = 0x176cc029695ad02582a70eff08a6fd99d057e12e58e7d7b6b16cdfabc8ee2911;\\n\\n // See here for a simplified implementation: https://github.com/vimwitch/poseidon-solidity/blob/e57becdabb65d99fdc586fe1e1e09e7108202d53/contracts/Poseidon.sol#L40\\n // Inspired by: https://github.com/iden3/circomlibjs/blob/v0.0.8/src/poseidon_slow.js\\n function hash(uint[2] memory) public pure returns (uint) {\\n assembly {\\n let F := 21888242871839275222246405745257275088548364400416034343698204186575808495617\\n let M20 := 0x2b90bba00fca0589f617e7dcbfe82e0df706ab640ceb247b791a93b74e36736d\\n let M21 := 0x101071f0032379b697315876690f053d148d4e109f5fb065c8aacc55a0f89bfa\\n let M22 := 0x19a3fc0a56702bf417ba7fee3802593fa644470307043f7773279cd71d25d5e0\\n\\n // load the inputs from memory\\n let state1 := add(mod(mload(0x80), F), 0x00f1445235f2148c5986587169fc1bcd887b08d4d00868df5696fff40956e864)\\n let state2 := add(mod(mload(0xa0), F), 0x08dff3487e8ac99e1f29a058d0fa80b930c728730b7ab36ce879f3890ecf73f5)\\n let scratch0 := mulmod(state1, state1, F)\\n state1 := mulmod(mulmod(scratch0, scratch0, F), state1, F)\\n scratch0 := mulmod(state2, state2, F)\\n state2 := mulmod(mulmod(scratch0, scratch0, F), state2, F)\\n scratch0 := add(\\n 0x2f27be690fdaee46c3ce28f7532b13c856c35342c84bda6e20966310fadc01d0,\\n add(add(15452833169820924772166449970675545095234312153403844297388521437673434406763, mulmod(state1, M10, F)), mulmod(state2, M20, F))\\n )\\n let scratch1 := add(\\n 0x2b2ae1acf68b7b8d2416bebf3d4f6234b763fe04b8043ee48b8327bebca16cf2,\\n add(add(18674271267752038776579386132900109523609358935013267566297499497165104279117, mulmod(state1, M11, F)), mulmod(state2, M21, F))\\n )\\n let scratch2 := add(\\n 0x0319d062072bef7ecca5eac06f97d4d55952c175ab6b03eae64b44c7dbf11cfa,\\n add(add(14817777843080276494683266178512808687156649753153012854386334860566696099579, mulmod(state1, M12, F)), mulmod(state2, M22, F))\\n )\\n let state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := mulmod(scratch1, scratch1, F)\\n scratch1 := mulmod(mulmod(state0, state0, F), scratch1, F)\\n state0 := mulmod(scratch2, scratch2, F)\\n scratch2 := mulmod(mulmod(state0, state0, F), scratch2, F)\\n state0 := add(0x28813dcaebaeaa828a376df87af4a63bc8b7bf27ad49c6298ef7b387bf28526d, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x2727673b2ccbc903f181bf38e1c1d40d2033865200c352bc150928adddf9cb78, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x234ec45ca27727c2e74abd2b2a1494cd6efbd43e340587d6b8fb9e31e65cc632, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := mulmod(state1, state1, F)\\n state1 := mulmod(mulmod(scratch0, scratch0, F), state1, F)\\n scratch0 := mulmod(state2, state2, F)\\n state2 := mulmod(mulmod(scratch0, scratch0, F), state2, F)\\n scratch0 := add(0x15b52534031ae18f7f862cb2cf7cf760ab10a8150a337b1ccd99ff6e8797d428, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x0dc8fad6d9e4b35f5ed9a3d186b79ce38e0e8a8d1b58b132d701d4eecf68d1f6, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x1bcd95ffc211fbca600f705fad3fb567ea4eb378f62e1fec97805518a47e4d9c, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := mulmod(scratch1, scratch1, F)\\n scratch1 := mulmod(mulmod(state0, state0, F), scratch1, F)\\n state0 := mulmod(scratch2, scratch2, F)\\n scratch2 := mulmod(mulmod(state0, state0, F), scratch2, F)\\n state0 := add(0x10520b0ab721cadfe9eff81b016fc34dc76da36c2578937817cb978d069de559, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x1f6d48149b8e7f7d9b257d8ed5fbbaf42932498075fed0ace88a9eb81f5627f6, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x1d9655f652309014d29e00ef35a2089bfff8dc1c816f0dc9ca34bdb5460c8705, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x04df5a56ff95bcafb051f7b1cd43a99ba731ff67e47032058fe3d4185697cc7d, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x0672d995f8fff640151b3d290cedaf148690a10a8c8424a7f6ec282b6e4be828, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x099952b414884454b21200d7ffafdd5f0c9a9dcc06f2708e9fc1d8209b5c75b9, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x052cba2255dfd00c7c483143ba8d469448e43586a9b4cd9183fd0e843a6b9fa6, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x0b8badee690adb8eb0bd74712b7999af82de55707251ad7716077cb93c464ddc, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x119b1590f13307af5a1ee651020c07c749c15d60683a8050b963d0a8e4b2bdd1, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x03150b7cd6d5d17b2529d36be0f67b832c4acfc884ef4ee5ce15be0bfb4a8d09, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x2cc6182c5e14546e3cf1951f173912355374efb83d80898abe69cb317c9ea565, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x005032551e6378c450cfe129a404b3764218cadedac14e2b92d2cd73111bf0f9, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x233237e3289baa34bb147e972ebcb9516469c399fcc069fb88f9da2cc28276b5, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x05c8f4f4ebd4a6e3c980d31674bfbe6323037f21b34ae5a4e80c2d4c24d60280, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x0a7b1db13042d396ba05d818a319f25252bcf35ef3aeed91ee1f09b2590fc65b, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x2a73b71f9b210cf5b14296572c9d32dbf156e2b086ff47dc5df542365a404ec0, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x1ac9b0417abcc9a1935107e9ffc91dc3ec18f2c4dbe7f22976a760bb5c50c460, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x12c0339ae08374823fabb076707ef479269f3e4d6cb104349015ee046dc93fc0, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x0b7475b102a165ad7f5b18db4e1e704f52900aa3253baac68246682e56e9a28e, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x037c2849e191ca3edb1c5e49f6e8b8917c843e379366f2ea32ab3aa88d7f8448, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x05a6811f8556f014e92674661e217e9bd5206c5c93a07dc145fdb176a716346f, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x29a795e7d98028946e947b75d54e9f044076e87a7b2883b47b675ef5f38bd66e, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x20439a0c84b322eb45a3857afc18f5826e8c7382c8a1585c507be199981fd22f, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x2e0ba8d94d9ecf4a94ec2050c7371ff1bb50f27799a84b6d4a2a6f2a0982c887, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x143fd115ce08fb27ca38eb7cce822b4517822cd2109048d2e6d0ddcca17d71c8, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x0c64cbecb1c734b857968dbbdcf813cdf8611659323dbcbfc84323623be9caf1, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x028a305847c683f646fca925c163ff5ae74f348d62c2b670f1426cef9403da53, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x2e4ef510ff0b6fda5fa940ab4c4380f26a6bcb64d89427b824d6755b5db9e30c, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x0081c95bc43384e663d79270c956ce3b8925b4f6d033b078b96384f50579400e, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x2ed5f0c91cbd9749187e2fade687e05ee2491b349c039a0bba8a9f4023a0bb38, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x30509991f88da3504bbf374ed5aae2f03448a22c76234c8c990f01f33a735206, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x1c3f20fd55409a53221b7c4d49a356b9f0a1119fb2067b41a7529094424ec6ad, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x10b4e7f3ab5df003049514459b6e18eec46bb2213e8e131e170887b47ddcb96c, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x2a1982979c3ff7f43ddd543d891c2abddd80f804c077d775039aa3502e43adef, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x1c74ee64f15e1db6feddbead56d6d55dba431ebc396c9af95cad0f1315bd5c91, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x07533ec850ba7f98eab9303cace01b4b9e4f2e8b82708cfa9c2fe45a0ae146a0, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x21576b438e500449a151e4eeaf17b154285c68f42d42c1808a11abf3764c0750, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x2f17c0559b8fe79608ad5ca193d62f10bce8384c815f0906743d6930836d4a9e, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x2d477e3862d07708a79e8aae946170bc9775a4201318474ae665b0b1b7e2730e, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x162f5243967064c390e095577984f291afba2266c38f5abcd89be0f5b2747eab, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x2b4cb233ede9ba48264ecd2c8ae50d1ad7a8596a87f29f8a7777a70092393311, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x2c8fbcb2dd8573dc1dbaf8f4622854776db2eece6d85c4cf4254e7c35e03b07a, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x1d6f347725e4816af2ff453f0cd56b199e1b61e9f601e9ade5e88db870949da9, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x204b0c397f4ebe71ebc2d8b3df5b913df9e6ac02b68d31324cd49af5c4565529, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x0c4cb9dc3c4fd8174f1149b3c63c3c2f9ecb827cd7dc25534ff8fb75bc79c502, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x174ad61a1448c899a25416474f4930301e5c49475279e0639a616ddc45bc7b54, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x1a96177bcf4d8d89f759df4ec2f3cde2eaaa28c177cc0fa13a9816d49a38d2ef, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x066d04b24331d71cd0ef8054bc60c4ff05202c126a233c1a8242ace360b8a30a, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x2a4c4fc6ec0b0cf52195782871c6dd3b381cc65f72e02ad527037a62aa1bd804, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x13ab2d136ccf37d447e9f2e14a7cedc95e727f8446f6d9d7e55afc01219fd649, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x1121552fca26061619d24d843dc82769c1b04fcec26f55194c2e3e869acc6a9a, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x00ef653322b13d6c889bc81715c37d77a6cd267d595c4a8909a5546c7c97cff1, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x0e25483e45a665208b261d8ba74051e6400c776d652595d9845aca35d8a397d3, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x29f536dcb9dd7682245264659e15d88e395ac3d4dde92d8c46448db979eeba89, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x2a56ef9f2c53febadfda33575dbdbd885a124e2780bbea170e456baace0fa5be, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x1c8361c78eb5cf5decfb7a2d17b5c409f2ae2999a46762e8ee416240a8cb9af1, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x151aff5f38b20a0fc0473089aaf0206b83e8e68a764507bfd3d0ab4be74319c5, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x04c6187e41ed881dc1b239c88f7f9d43a9f52fc8c8b6cdd1e76e47615b51f100, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x13b37bd80f4d27fb10d84331f6fb6d534b81c61ed15776449e801b7ddc9c2967, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x01a5c536273c2d9df578bfbd32c17b7a2ce3664c2a52032c9321ceb1c4e8a8e4, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x2ab3561834ca73835ad05f5d7acb950b4a9a2c666b9726da832239065b7c3b02, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x1d4d8ec291e720db200fe6d686c0d613acaf6af4e95d3bf69f7ed516a597b646, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x041294d2cc484d228f5784fe7919fd2bb925351240a04b711514c9c80b65af1d, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x154ac98e01708c611c4fa715991f004898f57939d126e392042971dd90e81fc6, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x0b339d8acca7d4f83eedd84093aef51050b3684c88f8b0b04524563bc6ea4da4, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x0955e49e6610c94254a4f84cfbab344598f0e71eaff4a7dd81ed95b50839c82e, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x06746a6156eba54426b9e22206f15abca9a6f41e6f535c6f3525401ea0654626, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x0f18f5a0ecd1423c496f3820c549c27838e5790e2bd0a196ac917c7ff32077fb, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x04f6eeca1751f7308ac59eff5beb261e4bb563583ede7bc92a738223d6f76e13, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x2b56973364c4c4f5c1a3ec4da3cdce038811eb116fb3e45bc1768d26fc0b3758, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x123769dd49d5b054dcd76b89804b1bcb8e1392b385716a5d83feb65d437f29ef, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x2147b424fc48c80a88ee52b91169aacea989f6446471150994257b2fb01c63e9, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x0fdc1f58548b85701a6c5505ea332a29647e6f34ad4243c2ea54ad897cebe54d, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x12373a8251fea004df68abcf0f7786d4bceff28c5dbbe0c3944f685cc0a0b1f2, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x21e4f4ea5f35f85bad7ea52ff742c9e8a642756b6af44203dd8a1f35c1a90035, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x16243916d69d2ca3dfb4722224d4c462b57366492f45e90d8a81934f1bc3b147, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x1efbe46dd7a578b4f66f9adbc88b4378abc21566e1a0453ca13a4159cac04ac2, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x07ea5e8537cf5dd08886020e23a7f387d468d5525be66f853b672cc96a88969a, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x05a8c4f9968b8aa3b7b478a30f9a5b63650f19a75e7ce11ca9fe16c0b76c00bc, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x20f057712cc21654fbfe59bd345e8dac3f7818c701b9c7882d9d57b72a32e83f, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x04a12ededa9dfd689672f8c67fee31636dcd8e88d01d49019bd90b33eb33db69, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x27e88d8c15f37dcee44f1e5425a51decbd136ce5091a6767e49ec9544ccd101a, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x2feed17b84285ed9b8a5c8c5e95a41f66e096619a7703223176c41ee433de4d1, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x1ed7cc76edf45c7c404241420f729cf394e5942911312a0d6972b8bd53aff2b8, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x15742e99b9bfa323157ff8c586f5660eac6783476144cdcadf2874be45466b1a, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x1aac285387f65e82c895fc6887ddf40577107454c6ec0317284f033f27d0c785, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x25851c3c845d4790f9ddadbdb6057357832e2e7a49775f71ec75a96554d67c77, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x15a5821565cc2ec2ce78457db197edf353b7ebba2c5523370ddccc3d9f146a67, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x2411d57a4813b9980efa7e31a1db5966dcf64f36044277502f15485f28c71727, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x002e6f8d6520cd4713e335b8c0b6d2e647e9a98e12f4cd2558828b5ef6cb4c9b, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x2ff7bc8f4380cde997da00b616b0fcd1af8f0e91e2fe1ed7398834609e0315d2, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x00b9831b948525595ee02724471bcd182e9521f6b7bb68f1e93be4febb0d3cbe, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x0a2f53768b8ebf6a86913b0e57c04e011ca408648a4743a87d77adbf0c9c3512, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x00248156142fd0373a479f91ff239e960f599ff7e94be69b7f2a290305e1198d, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x171d5620b87bfb1328cf8c02ab3f0c9a397196aa6a542c2350eb512a2b2bcda9, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x170a4f55536f7dc970087c7c10d6fad760c952172dd54dd99d1045e4ec34a808, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x29aba33f799fe66c2ef3134aea04336ecc37e38c1cd211ba482eca17e2dbfae1, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x1e9bc179a4fdd758fdd1bb1945088d47e70d114a03f6a0e8b5ba650369e64973, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x1dd269799b660fad58f7f4892dfb0b5afeaad869a9c4b44f9c9e1c43bdaf8f09, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x22cdbc8b70117ad1401181d02e15459e7ccd426fe869c7c95d1dd2cb0f24af38, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x0ef042e454771c533a9f57a55c503fcefd3150f52ed94a7cd5ba93b9c7dacefd, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x11609e06ad6c8fe2f287f3036037e8851318e8b08a0359a03b304ffca62e8284, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x1166d9e554616dba9e753eea427c17b7fecd58c076dfe42708b08f5b783aa9af, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x2de52989431a859593413026354413db177fbf4cd2ac0b56f855a888357ee466, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x3006eb4ffc7a85819a6da492f3a8ac1df51aee5b17b8e89d74bf01cf5f71e9ad, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x2af41fbb61ba8a80fdcf6fff9e3f6f422993fe8f0a4639f962344c8225145086, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x119e684de476155fe5a6b41a8ebc85db8718ab27889e85e781b214bace4827c3, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x1835b786e2e8925e188bea59ae363537b51248c23828f047cff784b97b3fd800, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x28201a34c594dfa34d794996c6433a20d152bac2a7905c926c40e285ab32eeb6, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x083efd7a27d1751094e80fefaf78b000864c82eb571187724a761f88c22cc4e7, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x0b6f88a3577199526158e61ceea27be811c16df7774dd8519e079564f61fd13b, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x0ec868e6d15e51d9644f66e1d6471a94589511ca00d29e1014390e6ee4254f5b, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x2af33e3f866771271ac0c9b3ed2e1142ecd3e74b939cd40d00d937ab84c98591, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x0b520211f904b5e7d09b5d961c6ace7734568c547dd6858b364ce5e47951f178, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x0b2d722d0919a1aad8db58f10062a92ea0c56ac4270e822cca228620188a1d40, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x1f790d4d7f8cf094d980ceb37c2453e957b54a9991ca38bbe0061d1ed6e562d4, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x0171eb95dfbf7d1eaea97cd385f780150885c16235a2a6a8da92ceb01e504233, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x0c2d0e3b5fd57549329bf6885da66b9b790b40defd2c8650762305381b168873, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x1162fb28689c27154e5a8228b4e72b377cbcafa589e283c35d3803054407a18d, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x2f1459b65dee441b64ad386a91e8310f282c5a92a89e19921623ef8249711bc0, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x1e6ff3216b688c3d996d74367d5cd4c1bc489d46754eb712c243f70d1b53cfbb, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x01ca8be73832b8d0681487d27d157802d741a6f36cdc2a0576881f9326478875, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x1f7735706ffe9fc586f976d5bdf223dc680286080b10cea00b9b5de315f9650e, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x2522b60f4ea3307640a0c2dce041fba921ac10a3d5f096ef4745ca838285f019, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x23f0bee001b1029d5255075ddc957f833418cad4f52b6c3f8ce16c235572575b, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x2bc1ae8b8ddbb81fcaac2d44555ed5685d142633e9df905f66d9401093082d59, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x0f9406b8296564a37304507b8dba3ed162371273a07b1fc98011fcd6ad72205f, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x2360a8eb0cc7defa67b72998de90714e17e75b174a52ee4acb126c8cd995f0a8, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x15871a5cddead976804c803cbaef255eb4815a5e96df8b006dcbbc2767f88948, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x193a56766998ee9e0a8652dd2f3b1da0362f4f54f72379544f957ccdeefb420f, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x2a394a43934f86982f9be56ff4fab1703b2e63c8ad334834e4309805e777ae0f, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x1859954cfeb8695f3e8b635dcb345192892cd11223443ba7b4166e8876c0d142, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x04e1181763050e58013444dbcb99f1902b11bc25d90bbdca408d3819f4fed32b, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x0fdb253dee83869d40c335ea64de8c5bb10eb82db08b5e8b1f5e5552bfd05f23, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x058cbe8a9a5027bdaa4efb623adead6275f08686f1c08984a9d7c5bae9b4f1c0, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x1382edce9971e186497eadb1aeb1f52b23b4b83bef023ab0d15228b4cceca59a, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x03464990f045c6ee0819ca51fd11b0be7f61b8eb99f14b77e1e6634601d9e8b5, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x23f7bfc8720dc296fff33b41f98ff83c6fcab4605db2eb5aaa5bc137aeb70a58, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x0a59a158e3eec2117e6e94e7f0e9decf18c3ffd5e1531a9219636158bbaf62f2, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x06ec54c80381c052b58bf23b312ffd3ce2c4eba065420af8f4c23ed0075fd07b, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x118872dc832e0eb5476b56648e867ec8b09340f7a7bcb1b4962f0ff9ed1f9d01, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x13d69fa127d834165ad5c7cba7ad59ed52e0b0f0e42d7fea95e1906b520921b1, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x169a177f63ea681270b1c6877a73d21bde143942fb71dc55fd8a49f19f10c77b, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x04ef51591c6ead97ef42f287adce40d93abeb032b922f66ffb7e9a5a7450544d, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x256e175a1dc079390ecd7ca703fb2e3b19ec61805d4f03ced5f45ee6dd0f69ec, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x30102d28636abd5fe5f2af412ff6004f75cc360d3205dd2da002813d3e2ceeb2, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x10998e42dfcd3bbf1c0714bc73eb1bf40443a3fa99bef4a31fd31be182fcc792, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x193edd8e9fcf3d7625fa7d24b598a1d89f3362eaf4d582efecad76f879e36860, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x18168afd34f2d915d0368ce80b7b3347d1c7a561ce611425f2664d7aa51f0b5d, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x29383c01ebd3b6ab0c017656ebe658b6a328ec77bc33626e29e2e95b33ea6111, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x10646d2f2603de39a1f4ae5e7771a64a702db6e86fb76ab600bf573f9010c711, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x0beb5e07d1b27145f575f1395a55bf132f90c25b40da7b3864d0242dcb1117fb, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x16d685252078c133dc0d3ecad62b5c8830f95bb2e54b59abdffbf018d96fa336, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x0a6abd1d833938f33c74154e0404b4b40a555bbbec21ddfafd672dd62047f01a, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x1a679f5d36eb7b5c8ea12a4c2dedc8feb12dffeec450317270a6f19b34cf1860, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x0980fb233bd456c23974d50e0ebfde4726a423eada4e8f6ffbc7592e3f1b93d6, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x161b42232e61b84cbf1810af93a38fc0cece3d5628c9282003ebacb5c312c72b, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x0ada10a90c7f0520950f7d47a60d5e6a493f09787f1564e5d09203db47de1a0b, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x1a730d372310ba82320345a29ac4238ed3f07a8a2b4e121bb50ddb9af407f451, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x2c8120f268ef054f817064c369dda7ea908377feaba5c4dffbda10ef58e8c556, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x1c7c8824f758753fa57c00789c684217b930e95313bcb73e6e7b8649a4968f70, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x2cd9ed31f5f8691c8e39e4077a74faa0f400ad8b491eb3f7b47b27fa3fd1cf77, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x23ff4f9d46813457cf60d92f57618399a5e022ac321ca550854ae23918a22eea, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x09945a5d147a4f66ceece6405dddd9d0af5a2c5103529407dff1ea58f180426d, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x188d9c528025d4c2b67660c6b771b90f7c7da6eaa29d3f268a6dd223ec6fc630, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x3050e37996596b7f81f68311431d8734dba7d926d3633595e0c0d8ddf4f0f47f, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x15af1169396830a91600ca8102c35c426ceae5461e3f95d89d829518d30afd78, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x1da6d09885432ea9a06d9f37f873d985dae933e351466b2904284da3320d8acc, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x2796ea90d269af29f5f8acf33921124e4e4fad3dbe658945e546ee411ddaa9cb, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x202d7dd1da0f6b4b0325c8b3307742f01e15612ec8e9304a7cb0319e01d32d60, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x096d6790d05bb759156a952ba263d672a2d7f9c788f4c831a29dace4c0f8be5f, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x054efa1f65b0fce283808965275d877b438da23ce5b13e1963798cb1447d25a4, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x1b162f83d917e93edb3308c29802deb9d8aa690113b2e14864ccf6e18e4165f1, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x21e5241e12564dd6fd9f1cdd2a0de39eedfefc1466cc568ec5ceb745a0506edc, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := mulmod(scratch1, scratch1, F)\\n scratch1 := mulmod(mulmod(state0, state0, F), scratch1, F)\\n state0 := mulmod(scratch2, scratch2, F)\\n scratch2 := mulmod(mulmod(state0, state0, F), scratch2, F)\\n state0 := add(0x1cfb5662e8cf5ac9226a80ee17b36abecb73ab5f87e161927b4349e10e4bdf08, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x0f21177e302a771bbae6d8d1ecb373b62c99af346220ac0129c53f666eb24100, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x1671522374606992affb0dd7f71b12bec4236aede6290546bcef7e1f515c2320, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := mulmod(state1, state1, F)\\n state1 := mulmod(mulmod(scratch0, scratch0, F), state1, F)\\n scratch0 := mulmod(state2, state2, F)\\n state2 := mulmod(mulmod(scratch0, scratch0, F), state2, F)\\n scratch0 := add(0x0fa3ec5b9488259c2eb4cf24501bfad9be2ec9e42c5cc8ccd419d2a692cad870, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x193c0e04e0bd298357cb266c1506080ed36edce85c648cc085e8c57b1ab54bba, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x102adf8ef74735a27e9128306dcbc3c99f6f7291cd406578ce14ea2adaba68f8, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := mulmod(scratch1, scratch1, F)\\n scratch1 := mulmod(mulmod(state0, state0, F), scratch1, F)\\n state0 := mulmod(scratch2, scratch2, F)\\n scratch2 := mulmod(mulmod(state0, state0, F), scratch2, F)\\n state0 := add(0x0fe0af7858e49859e2a54d6f1ad945b1316aa24bfbdd23ae40a6d0cb70c3eab1, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x216f6717bbc7dedb08536a2220843f4e2da5f1daa9ebdefde8a5ea7344798d22, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x1da55cc900f0d21f4a3e694391918a1b3c23b2ac773c6b3ef88e2e4228325161, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := mulmod(state1, state1, F)\\n state1 := mulmod(mulmod(scratch0, scratch0, F), state1, F)\\n scratch0 := mulmod(state2, state2, F)\\n state2 := mulmod(mulmod(scratch0, scratch0, F), state2, F)\\n\\n mstore(0x0, mod(add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)), F))\\n\\n return(0, 0x20)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x0102caa303bbc6690508f3615604f7730789ed990058c9513a87ccb30e4835be\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x6080346102a457601f61284638819003918201601f19168301916001600160401b038311848410176102a9578084926060946040528339810103126102a45780516001600160a01b0381168082036102a45760208301516001600160a01b03811693908490036102a457604090810151600080516020612826833981519152549182901c60ff161594916001600160401b0381168015908161029c575b6001149081610292575b159081610289575b50610278576001600160401b03198116600117600080516020612826833981519152557fba0716ba1ee2ea8ecc4c64119b4537cdb42a99d82acf92af5b87607b8b523552916020918761024d575b50610105610335565b61010d610335565b610116336102bf565b61011e610363565b80600155604051908152a1610131610363565b80151580610238575b1561022457600080546001600160a01b031916821790556040519081527f80052b810d39120cf6c976cca504a21703f585521dc7a41c6d241090e6c579b690602090a1600080516020612806833981519152546001600160a01b03160361020d575b506101b1575b60405161246c908161039a8239f35b68ff0000000000000000196000805160206128268339815191525416600080516020612826833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a16101a2565b61021e90610219610363565b6102bf565b3861019c565b6375ac4eb760e11b60005260045260246000fd5b506000546001600160a01b031681141561013a565b6001600160481b031916680100000000000000011760008051602061282683398151915255386100fc565b63f92ee8a960e01b60005260046000fd5b905015386100ae565b303b1591506100a6565b87915061009c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0316801561031f5760008051602061280683398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b631e4fbdf760e01b600052600060045260246000fd5b60ff6000805160206128268339815191525460401c161561035257565b631afcd79f60e31b60005260046000fd5b600080516020612806833981519152546001600160a01b0316330361038457565b63118cdaa760e01b6000523360045260246000fdfe6080604052600436101561001257600080fd5b60003560e01c80630e092fc314611b405780630ef81b2f14611b0b57806310bc628114611b0b5780631794bb3c146118e55780634017daf0146117f8578063406ed35c146117c55780634e92ec63146117375780634fc77264146116975780635314e9fa1461150d5780636db5c8fd146114ef578063715018a6146114565780637edcd7ab146111fd5780638da5cb5b146111b75780638dcdd86b1461119057806393b58f861461099b5780639c8570c814610828578063b3c88d67146107fc578063b74cb2db146107de578063c4ccafa21461079f578063cb64961714610781578063cbd16872146106c8578063cf0f34c4146106aa578063d016b08d14610279578063ddef9ea114610244578063f2fde38b14610219578063fad8e111146101ec5763fd2f3d011461014557600080fd5b346101e75760203660031901126101e7576001600160a01b03610166611ba5565b61016e6123d7565b1680600052600460205260ff604060002054166101d3576020817fb8d368517268f297fff00825d67d098763117d061360d31027be5b2e1a59d46792600052600482526040600020600160ff19825416179055604051908152a1602060405160018152f35b63b29d459560e01b60005260045260246000fd5b600080fd5b346101e75760203660031901126101e757602061020f61020a611ba5565b61234c565b6040519015158152f35b346101e75760203660031901126101e757610242610235611ba5565b61023d6123d7565b6122a6565b005b346101e75760203660031901126101e75760043560005260066020526040806000206001815491015482519182526020820152f35b346101e75761028736611ec0565b61029082611fea565b60a081016102a1848251151561213a565b514281111561069257506102ec6000926001600160a01b0361012085940151169060405194858094819363caf9278560e01b8352336004840152604060248401526044830190611d17565b03925af180156105915760009061060d575b61035a9150733333333C0A88F9BE4fd23ed0536F9B6c427e3B93602060405161032681611c12565b835182850120815285600052600782526040600020548282015260405180958192632b0aac7f60e11b835260048301612278565b0381845af4928315610591576000936105d9575b508360005260076020526040600020610387815461222d565b905560008481526006602052604090207f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000184106103cf576361c0541760e11b60005260046000fd5b836103e5576314b48df160e11b60005260046000fd5b83600052600381016020526040600020546105c857805491600182019283549360ff85116104d257600182018083116104d2576001861b106105b8575b84905585916000905b8582106104e8575050906104416003939261222d565b938483556000526002820160205260406000205584600052016020526040600020558260005260076020526040600020549060001982019182116104d2577f7555a0b1b87fe36304326aed23f5c78102b63922b1141f8df7d4593eff2021dd926104b992604051938493606085526060850190611d17565b91602084015260408301520390a2602060405160018152f35b634e487b7160e01b600052601160045260246000fd5b909260018084861c161460001461059d57602061053c916040519061050c82611c12565b8660005260028801835260406000205482528282015260405180938192632b0aac7f60e11b835260048301612278565b0381855af480156105915760009061055c575b60019150935b019061042b565b6020823d8211610589575b8161057460209383611c2e565b8101031261058657506001905161054f565b80fd5b3d9150610567565b6040513d6000823e3d90fd5b92806001916000526002860160205284604060002055610555565b936105c29061222d565b93610422565b6312c50cad60e11b60005260046000fd5b90926020823d602011610605575b816105f460209383611c2e565b81010312610586575051918461036e565b3d91506105e7565b3d8082843e61061c8184611c2e565b82019160208184031261068a5780519067ffffffffffffffff821161068e570182601f8201121561068a5780519161065383611e5d565b936106616040519586611c2e565b83855260208484010111610586575082916106859160208061035a96019101611cf4565b6102fe565b5080fd5b8280fd5b8363142c294360e31b60005260045260245260446000fd5b346101e75760203660031901126101e757602061020f60043561223c565b346101e75760403660031901126101e7576004356024356001600160a01b0381168091036101e7577ff4041a3f914dac3bc9bf5f003ba41f28dbb84abe42f4e07c76266f5c8ceecb699160209161071d6123d7565b801515828161075f575b6107309161211e565b81600052600883526040600020906001600160a01b0319825416179055604051908152a1602060405160018152f35b60009081526008855260409020546001600160a01b0316821415905082610727565b346101e75760003660031901126101e7576020600254604051908152f35b346101e75760203660031901126101e7576001600160a01b036107c0611ba5565b166000526004602052602060ff604060002054166040519015158152f35b346101e75760003660031901126101e7576020600354604051908152f35b346101e75760203660031901126101e75760043560005260076020526020604060002054604051908152f35b346101e75761083636611ef0565b9161084081611fea565b9160a08301610852838251151561213a565b51428111610983575061018083015161096e5760206108a06000956001600160a01b0360e08551858701209701511690604051978880948193632f0e1bbf60e01b83528a8a6004850161216e565b03925af192831561059157602094600094610917575b508161090a916108e77f7cc27e4a5626cbc4f8ba1a927b0448de55e6a114bc87660331270c5109ade071948761218a565b8460005260058752600d6040600020015560405191829187835287830190611d17565b0390a26040519015158152f35b61090a9194509161095e7f7cc27e4a5626cbc4f8ba1a927b0448de55e6a114bc87660331270c5109ade07193873d8911610967575b6109568183611c2e565b810190612156565b949150916108b6565b503d61094c565b50637eb9cea960e11b60005260045260246000fd5b826370c05fb960e11b60005260045260245260446000fd5b6101203660031901126101e7576109b0611ba5565b366064116101e7573660a4116101e75760a43560c435916001600160a01b03831683036101e75760e43567ffffffffffffffff81116101e7576109f7903690600401611e79565b906101043567ffffffffffffffff81116101e757610a19903690600401611e79565b90610a22611f5b565b50341561117b5760443563ffffffff8116908181036101e7575063ffffffff610a496121d2565b16111580611165575b1561114757608435606435811015908161113c575b501561112b578315158061111f575b1561110a576001600160a01b038516600052600460205260ff60406000205416156110ec57610b149060025493610aac8561222d565b6002556040805160208101904482528783820152828152610ace606082611c2e565b5190209481518095819263530ebf1f60e11b835289600484015288602484015260806044840152610b026084840187611d17565b83810360031901606485015290611d17565b038160006001600160a01b038c165af190811561059157600093849261109b575b506000848152600860205260409020546001600160a01b0390811692610b5d8685151561211e565b169081156110865760405195610b7287611bf5565b8652604094855198610b84878b611c2e565b6000996024815b6064821061106e575050602089015243878901528651610bab8882611c2e565b6064815b60a4821061105e575050606089015260808801528860a088015260c08701526001600160a01b03891660e087015261010086015261012085015261014084015284610160840152846101808401526020948251610c0c8782611c2e565b8181526101a0850152848152600586528281208451815560208501518290835b89600282106110365750505060018201558385015160028201556060850151825b600281106110215750506080850151600582015560a0850151600682015560c085015160078201556001600160a01b0360e0860151166001600160a01b036008830191166001600160a01b031982541617905561010085015180519067ffffffffffffffff8211610f6257610cc56009840154611bbb565b601f8111610ff0575b508890601f8311600114610f8157600e939291859183610f76575b50508160011b916000199060031b1c19161760098201555b6001600160a01b03610120870151166001600160a01b03600a830191166001600160a01b03198254161790556001600160a01b03610140870151166001600160a01b03600b830191166001600160a01b0319825416179055610160860151600c820155610180860151600d820155016101a085015180519067ffffffffffffffff8211610f62578190610d948454611bbb565b601f8111610f29575b508990601f8311600114610ec6578592610ebb575b50508160011b916000199060031b1c19161790555b80866001600160a01b036084818454169587519485938492639ccb58d560e01b84528c60048501521697886024840152610e03604484016121f6565b5af1908115610eb1578291610e94575b5015610e8557507fe31ba2ed37bce9c2bca28aabe3990572a1694b7a208f61e5cced4471fa33c8e56001600160a01b03610e81959697845191829189835260608b840152610e646060840189611d3c565b958784015216930390a28080519586958652850152830190611d3c565b0390f35b630d8dbe2560e01b8152600490fd5b610eab9150873d8911610967576109568183611c2e565b88610e13565b84513d84823e3d90fd5b015190508a80610db2565b8486528a86209250601f198416865b8c828210610f13575050908460019594939210610efa575b505050811b019055610dc7565b015160001960f88460031b161c191690558a8080610eed565b6001859682939686015181550195019301610ed5565b610f52908587528b8720601f850160051c8101918d8610610f58575b601f0160051c01906121bb565b8b610d9d565b9091508190610f45565b634e487b7160e01b84526041600452602484fd5b015190508b80610ce9565b9060098401855289852091855b8b601f1986168210610fda575050918391600193600e9695601f19811610610fc1575b505050811b016009820155610d01565b015160001960f88460031b161c191690558b8080610fb1565b6001849582939585015181550194019201610f8e565b61101b906009850186528a8620601f850160051c8101918c8610610f5857601f0160051c01906121bb565b8a610cce565b81518382016003015590880190600101610c4d565b829363ffffffff6001939451169063ffffffff8560051b92831b921b19161793019101610c2c565b8135815260209182019101610baf565b6020809161107b846121e5565b815201910190610b8b565b50633ca1cee360e11b60005260045260246000fd5b9091506040813d6040116110e4575b816110b760409383611c2e565b810103126110e05760208151910151936001600160a01b03851685036105865750929088610b35565b8380fd5b3d91506110aa565b6001600160a01b038563295a6a6f60e11b6000521660045260246000fd5b836313b783af60e21b60005260045260246000fd5b50600154841115610a76565b6308594fb760e01b60005260046000fd5b905042111586610a67565b604051633744092160e21b8152604490611163600482016121f6565bfd5b5063ffffffff6111736121d2565b161515610a52565b638c4fcd9360e01b6000523460045260246000fd5b346101e75760003660031901126101e75760206001600160a01b0360005416604051908152f35b346101e75760003660031901126101e75760206001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b346101e75761120b36611ef0565b611216839293611fea565b6112268360a0830151151561213a565b61018081015115611441576101a08101515161142c5761127592916001600160a01b03610140602093015116855183870120604051809681948293632f0e1bbf60e01b8452886004850161216e565b03915afa9182156105915760009261140b575b50611293838361218a565b806000526005602052600e6040600020019280519367ffffffffffffffff85116113f5576020946112c48254611bbb565b601f81116113c5575b5085601f821160011461133c5791817f02a24c3402076671e129905ba4579d884b1f94ded1c07fc03d26d11b60bca169949261090a94600091611331575b508160011b916000199060031b1c19161790555b60405191829187835287830190611d17565b90508301518961130b565b601f1982169083600052806000209160005b8181106113ae57509261090a9492600192827f02a24c3402076671e129905ba4579d884b1f94ded1c07fc03d26d11b60bca169989610611395575b5050811b01905561131f565b85015160001960f88460031b161c191690558980611389565b91928960018192868a01518155019401920161134e565b6113ef908360005287600020601f840160051c810191898510610f5857601f0160051c01906121bb565b866112cd565b634e487b7160e01b600052604160045260246000fd5b61142591925060203d602011610967576109568183611c2e565b9083611288565b826360ec327960e01b60005260045260246000fd5b8263032c20ef60e21b60005260045260246000fd5b346101e75760003660031901126101e75761146f6123d7565b60006001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031981167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101e75760003660031901126101e7576020600154604051908152f35b346101e75761151b36611ec0565b61152482611fea565b9160a083018051611682576060840180515142106116715760204291510151106116605760249360206001600160a01b036000541660405196878092630e82f3b760e41b82528760048301525afa9485156105915760009561162c575b50835194602085019586200361161b57608001514201908142116104d2577f50df9e2c9fc5a7f4a07e403fa0300b88fcc8c6943bdff4b8ae71f55b7fd95f899461160d9284600052600560205260066040600020015584519020836000526005602052600c60406000200155519260405193849384526020840152606060408401526060830190611d17565b0390a1602060405160018152f35b630d8dbe2560e01b60005260046000fd5b9094506020813d602011611658575b8161164860209383611c2e565b810103126101e757519385611581565b3d915061163b565b633d82a7cd60e11b60005260046000fd5b63a0750b5160e01b60005260046000fd5b50633e26347b60e21b60005260045260246000fd5b346101e75760203660031901126101e7576001600160a01b036116b8611ba5565b6116c06123d7565b1680600052600460205260ff6040600020541615611723576020817f56070b80bd617fcd2f7a284861edb488830a38f9dedcd77b2cb2f4eac17743e79260005260048252604060002060ff198154169055604051908152a1602060405160018152f35b6321ac7c5f60e01b60005260045260246000fd5b346101e75760203660031901126101e7577f104eb329a192aef26eddea07c2af5ad2587792e62b37ed4045b6ba59bc5540fc60206004356117766123d7565b8060005260088252611798816001600160a01b0360406000205416151561211e565b806000526008825260406000206001600160a01b03198154169055604051908152a1602060405160018152f35b346101e75760203660031901126101e757610e816117e4600435611fea565b604051918291602083526020830190611d3c565b346101e75760203660031901126101e757600435600052600560205260206040600020610e8181549160028101546005820154916006810154926007820154936118bf6001600160a01b0360088501541661185560098601611c50565b906001600160a01b03600a87015416976001600160a01b03600b8801541694600c8801549661188b600e600d8b01549a01611c50565b996040519e8f9e8f908152015260408d015260608c015260808b015260a08a015261018060c08a0152610180890190611d17565b9460e0880152610100870152610120860152610140850152838203610160850152611d17565b346101e75760603660031901126101e7576118fe611ba5565b602435906001600160a01b03821682036101e7577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c16159267ffffffffffffffff821680159081611b03575b6001149081611af9575b159081611af0575b50611adf5767ffffffffffffffff1982166001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00556119ce9184611aa0575b506119ac61241f565b6119b461241f565b6119bd336122a6565b6119c860443561223c565b5061234c565b506001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054166001600160a01b03821603611a8e575b50611a1157005b68ff0000000000000000197ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b611a9a9061023d6123d7565b81611a0a565b68ffffffffffffffffff191668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055846119a3565b63f92ee8a960e01b60005260046000fd5b90501585611963565b303b15915061195b565b859150611951565b346101e75760203660031901126101e757600435600052600860205260206001600160a01b0360406000205416604051908152f35b346101e75760203660031901126101e757600435806000526005602052611b7a816001600160a01b03600860406000200154161515611f3f565b6000526006602052600260406000206001810154600052016020526020604060002054604051908152f35b600435906001600160a01b03821682036101e757565b90600182811c92168015611beb575b6020831014611bd557565b634e487b7160e01b600052602260045260246000fd5b91607f1691611bca565b6101c0810190811067ffffffffffffffff8211176113f557604052565b6040810190811067ffffffffffffffff8211176113f557604052565b90601f8019910116810190811067ffffffffffffffff8211176113f557604052565b9060405191826000825492611c6484611bbb565b8084529360018116908115611cd25750600114611c8b575b50611c8992500383611c2e565b565b90506000929192526020600020906000915b818310611cb6575050906020611c899282010138611c7c565b6020919350806001915483858901015201910190918492611c9d565b905060209250611c8994915060ff191682840152151560051b82010138611c7c565b60005b838110611d075750506000910152565b8181015183820152602001611cf7565b90602091611d3081518092818552858086019101611cf4565b601f01601f1916010190565b919091805183526020810151602084016000905b60028210611e415750505060408101516060840152606081015192608081016000905b60028210611e2b575050611e28929350608082015160c082015260a082015160e082015260c08201516101008201526001600160a01b0360e0830151166101208201526101a0611dd6610100840151610200610140850152610200840190611d17565b926001600160a01b03610120820151166101608401526001600160a01b0361014082015116610180840152610160810151828401526101808101516101c08401520151906101e0818403910152611d17565b90565b6020806001928851815201960191019094611d73565b60208060019263ffffffff865116815201930191019091611d50565b67ffffffffffffffff81116113f557601f01601f191660200190565b81601f820112156101e757803590611e9082611e5d565b92611e9e6040519485611c2e565b828452602083830101116101e757816000926020809301838601378301015290565b9060406003198301126101e757600435916024359067ffffffffffffffff82116101e757611e2891600401611e79565b60606003198201126101e7576004359160243567ffffffffffffffff81116101e75782611f1f91600401611e79565b916044359067ffffffffffffffff82116101e757611e2891600401611e79565b15611f475750565b63cd6f4a4f60e01b60005260045260246000fd5b60405190611f6882611bf5565b60606101a0836000815260408051611f808282611c2e565b813682376020830152600081830152805190611f9c8183611c2e565b3682378382015260006080820152600060a0820152600060c0820152600060e08201528261010082015260006101208201526000610140820152600061016082015260006101808201520152565b90611ff3611f5b565b5081600052600560205260406000209160405161200f81611bf5565b8354815260405163ffffffff6001860154818116835260201c166020820152612039604082611c2e565b6020820152600284015460408201526040518060038601906000905b6002821061210857505050611c8992918161207960406001600160a01b0394611c2e565b606082015260058601546080820152600686015460a0820152600786015460c08201526120f8600e836008890154169760e084019889526120bc60098201611c50565b61010085015284600a8201541661012085015284600b82015416610140850152600c810154610160850152600d81015461018085015201611c50565b6101a08201529451161515611f3f565b6001602081928554815201930191019091612055565b156121265750565b6381c4951960e01b60005260045260246000fd5b156121425750565b63166b4d0360e01b60005260045260246000fd5b908160209103126101e7575180151581036101e75790565b611e289392606092825260208201528160408201520190611d17565b156121925750565b604051632f9f8ab960e01b8152602060048201529081906121b7906024830190611d17565b0390fd5b8181106121c6575050565b600081556001016121bb565b60243563ffffffff811681036101e75790565b359063ffffffff821682036101e757565b6024906000905b6002821061220a57505050565b60208060019263ffffffff61221e876121e5565b168152019301910190916121fd565b60001981146104d25760010190565b60207fba0716ba1ee2ea8ecc4c64119b4537cdb42a99d82acf92af5b87607b8b523552916122686123d7565b80600155604051908152a1600190565b919060408301926000905b6002821061229057505050565b6020806001928551815201930191019091612283565b6001600160a01b03168015612336576001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054826001600160a01b03198216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b631e4fbdf760e01b600052600060045260246000fd5b6001600160a01b039061235d6123d7565b16801515806123c2575b156123ae576020817f80052b810d39120cf6c976cca504a21703f585521dc7a41c6d241090e6c579b6926001600160a01b03196000541617600055604051908152a1600190565b6375ac4eb760e11b60005260045260246000fd5b506001600160a01b0360005416811415612367565b6001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416330361240a57565b63118cdaa760e01b6000523360045260246000fd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561244e57565b631afcd79f60e31b60005260046000fdfea164736f6c634300081b000a9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00", - "deployedBytecode": "0x6080604052600436101561001257600080fd5b60003560e01c80630e092fc314611b405780630ef81b2f14611b0b57806310bc628114611b0b5780631794bb3c146118e55780634017daf0146117f8578063406ed35c146117c55780634e92ec63146117375780634fc77264146116975780635314e9fa1461150d5780636db5c8fd146114ef578063715018a6146114565780637edcd7ab146111fd5780638da5cb5b146111b75780638dcdd86b1461119057806393b58f861461099b5780639c8570c814610828578063b3c88d67146107fc578063b74cb2db146107de578063c4ccafa21461079f578063cb64961714610781578063cbd16872146106c8578063cf0f34c4146106aa578063d016b08d14610279578063ddef9ea114610244578063f2fde38b14610219578063fad8e111146101ec5763fd2f3d011461014557600080fd5b346101e75760203660031901126101e7576001600160a01b03610166611ba5565b61016e6123d7565b1680600052600460205260ff604060002054166101d3576020817fb8d368517268f297fff00825d67d098763117d061360d31027be5b2e1a59d46792600052600482526040600020600160ff19825416179055604051908152a1602060405160018152f35b63b29d459560e01b60005260045260246000fd5b600080fd5b346101e75760203660031901126101e757602061020f61020a611ba5565b61234c565b6040519015158152f35b346101e75760203660031901126101e757610242610235611ba5565b61023d6123d7565b6122a6565b005b346101e75760203660031901126101e75760043560005260066020526040806000206001815491015482519182526020820152f35b346101e75761028736611ec0565b61029082611fea565b60a081016102a1848251151561213a565b514281111561069257506102ec6000926001600160a01b0361012085940151169060405194858094819363caf9278560e01b8352336004840152604060248401526044830190611d17565b03925af180156105915760009061060d575b61035a915073__$75f79a42d9bcbdbb69ad79ebd80f556f39$__602060405161032681611c12565b835182850120815285600052600782526040600020548282015260405180958192632b0aac7f60e11b835260048301612278565b0381845af4928315610591576000936105d9575b508360005260076020526040600020610387815461222d565b905560008481526006602052604090207f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000184106103cf576361c0541760e11b60005260046000fd5b836103e5576314b48df160e11b60005260046000fd5b83600052600381016020526040600020546105c857805491600182019283549360ff85116104d257600182018083116104d2576001861b106105b8575b84905585916000905b8582106104e8575050906104416003939261222d565b938483556000526002820160205260406000205584600052016020526040600020558260005260076020526040600020549060001982019182116104d2577f7555a0b1b87fe36304326aed23f5c78102b63922b1141f8df7d4593eff2021dd926104b992604051938493606085526060850190611d17565b91602084015260408301520390a2602060405160018152f35b634e487b7160e01b600052601160045260246000fd5b909260018084861c161460001461059d57602061053c916040519061050c82611c12565b8660005260028801835260406000205482528282015260405180938192632b0aac7f60e11b835260048301612278565b0381855af480156105915760009061055c575b60019150935b019061042b565b6020823d8211610589575b8161057460209383611c2e565b8101031261058657506001905161054f565b80fd5b3d9150610567565b6040513d6000823e3d90fd5b92806001916000526002860160205284604060002055610555565b936105c29061222d565b93610422565b6312c50cad60e11b60005260046000fd5b90926020823d602011610605575b816105f460209383611c2e565b81010312610586575051918461036e565b3d91506105e7565b3d8082843e61061c8184611c2e565b82019160208184031261068a5780519067ffffffffffffffff821161068e570182601f8201121561068a5780519161065383611e5d565b936106616040519586611c2e565b83855260208484010111610586575082916106859160208061035a96019101611cf4565b6102fe565b5080fd5b8280fd5b8363142c294360e31b60005260045260245260446000fd5b346101e75760203660031901126101e757602061020f60043561223c565b346101e75760403660031901126101e7576004356024356001600160a01b0381168091036101e7577ff4041a3f914dac3bc9bf5f003ba41f28dbb84abe42f4e07c76266f5c8ceecb699160209161071d6123d7565b801515828161075f575b6107309161211e565b81600052600883526040600020906001600160a01b0319825416179055604051908152a1602060405160018152f35b60009081526008855260409020546001600160a01b0316821415905082610727565b346101e75760003660031901126101e7576020600254604051908152f35b346101e75760203660031901126101e7576001600160a01b036107c0611ba5565b166000526004602052602060ff604060002054166040519015158152f35b346101e75760003660031901126101e7576020600354604051908152f35b346101e75760203660031901126101e75760043560005260076020526020604060002054604051908152f35b346101e75761083636611ef0565b9161084081611fea565b9160a08301610852838251151561213a565b51428111610983575061018083015161096e5760206108a06000956001600160a01b0360e08551858701209701511690604051978880948193632f0e1bbf60e01b83528a8a6004850161216e565b03925af192831561059157602094600094610917575b508161090a916108e77f7cc27e4a5626cbc4f8ba1a927b0448de55e6a114bc87660331270c5109ade071948761218a565b8460005260058752600d6040600020015560405191829187835287830190611d17565b0390a26040519015158152f35b61090a9194509161095e7f7cc27e4a5626cbc4f8ba1a927b0448de55e6a114bc87660331270c5109ade07193873d8911610967575b6109568183611c2e565b810190612156565b949150916108b6565b503d61094c565b50637eb9cea960e11b60005260045260246000fd5b826370c05fb960e11b60005260045260245260446000fd5b6101203660031901126101e7576109b0611ba5565b366064116101e7573660a4116101e75760a43560c435916001600160a01b03831683036101e75760e43567ffffffffffffffff81116101e7576109f7903690600401611e79565b906101043567ffffffffffffffff81116101e757610a19903690600401611e79565b90610a22611f5b565b50341561117b5760443563ffffffff8116908181036101e7575063ffffffff610a496121d2565b16111580611165575b1561114757608435606435811015908161113c575b501561112b578315158061111f575b1561110a576001600160a01b038516600052600460205260ff60406000205416156110ec57610b149060025493610aac8561222d565b6002556040805160208101904482528783820152828152610ace606082611c2e565b5190209481518095819263530ebf1f60e11b835289600484015288602484015260806044840152610b026084840187611d17565b83810360031901606485015290611d17565b038160006001600160a01b038c165af190811561059157600093849261109b575b506000848152600860205260409020546001600160a01b0390811692610b5d8685151561211e565b169081156110865760405195610b7287611bf5565b8652604094855198610b84878b611c2e565b6000996024815b6064821061106e575050602089015243878901528651610bab8882611c2e565b6064815b60a4821061105e575050606089015260808801528860a088015260c08701526001600160a01b03891660e087015261010086015261012085015261014084015284610160840152846101808401526020948251610c0c8782611c2e565b8181526101a0850152848152600586528281208451815560208501518290835b89600282106110365750505060018201558385015160028201556060850151825b600281106110215750506080850151600582015560a0850151600682015560c085015160078201556001600160a01b0360e0860151166001600160a01b036008830191166001600160a01b031982541617905561010085015180519067ffffffffffffffff8211610f6257610cc56009840154611bbb565b601f8111610ff0575b508890601f8311600114610f8157600e939291859183610f76575b50508160011b916000199060031b1c19161760098201555b6001600160a01b03610120870151166001600160a01b03600a830191166001600160a01b03198254161790556001600160a01b03610140870151166001600160a01b03600b830191166001600160a01b0319825416179055610160860151600c820155610180860151600d820155016101a085015180519067ffffffffffffffff8211610f62578190610d948454611bbb565b601f8111610f29575b508990601f8311600114610ec6578592610ebb575b50508160011b916000199060031b1c19161790555b80866001600160a01b036084818454169587519485938492639ccb58d560e01b84528c60048501521697886024840152610e03604484016121f6565b5af1908115610eb1578291610e94575b5015610e8557507fe31ba2ed37bce9c2bca28aabe3990572a1694b7a208f61e5cced4471fa33c8e56001600160a01b03610e81959697845191829189835260608b840152610e646060840189611d3c565b958784015216930390a28080519586958652850152830190611d3c565b0390f35b630d8dbe2560e01b8152600490fd5b610eab9150873d8911610967576109568183611c2e565b88610e13565b84513d84823e3d90fd5b015190508a80610db2565b8486528a86209250601f198416865b8c828210610f13575050908460019594939210610efa575b505050811b019055610dc7565b015160001960f88460031b161c191690558a8080610eed565b6001859682939686015181550195019301610ed5565b610f52908587528b8720601f850160051c8101918d8610610f58575b601f0160051c01906121bb565b8b610d9d565b9091508190610f45565b634e487b7160e01b84526041600452602484fd5b015190508b80610ce9565b9060098401855289852091855b8b601f1986168210610fda575050918391600193600e9695601f19811610610fc1575b505050811b016009820155610d01565b015160001960f88460031b161c191690558b8080610fb1565b6001849582939585015181550194019201610f8e565b61101b906009850186528a8620601f850160051c8101918c8610610f5857601f0160051c01906121bb565b8a610cce565b81518382016003015590880190600101610c4d565b829363ffffffff6001939451169063ffffffff8560051b92831b921b19161793019101610c2c565b8135815260209182019101610baf565b6020809161107b846121e5565b815201910190610b8b565b50633ca1cee360e11b60005260045260246000fd5b9091506040813d6040116110e4575b816110b760409383611c2e565b810103126110e05760208151910151936001600160a01b03851685036105865750929088610b35565b8380fd5b3d91506110aa565b6001600160a01b038563295a6a6f60e11b6000521660045260246000fd5b836313b783af60e21b60005260045260246000fd5b50600154841115610a76565b6308594fb760e01b60005260046000fd5b905042111586610a67565b604051633744092160e21b8152604490611163600482016121f6565bfd5b5063ffffffff6111736121d2565b161515610a52565b638c4fcd9360e01b6000523460045260246000fd5b346101e75760003660031901126101e75760206001600160a01b0360005416604051908152f35b346101e75760003660031901126101e75760206001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b346101e75761120b36611ef0565b611216839293611fea565b6112268360a0830151151561213a565b61018081015115611441576101a08101515161142c5761127592916001600160a01b03610140602093015116855183870120604051809681948293632f0e1bbf60e01b8452886004850161216e565b03915afa9182156105915760009261140b575b50611293838361218a565b806000526005602052600e6040600020019280519367ffffffffffffffff85116113f5576020946112c48254611bbb565b601f81116113c5575b5085601f821160011461133c5791817f02a24c3402076671e129905ba4579d884b1f94ded1c07fc03d26d11b60bca169949261090a94600091611331575b508160011b916000199060031b1c19161790555b60405191829187835287830190611d17565b90508301518961130b565b601f1982169083600052806000209160005b8181106113ae57509261090a9492600192827f02a24c3402076671e129905ba4579d884b1f94ded1c07fc03d26d11b60bca169989610611395575b5050811b01905561131f565b85015160001960f88460031b161c191690558980611389565b91928960018192868a01518155019401920161134e565b6113ef908360005287600020601f840160051c810191898510610f5857601f0160051c01906121bb565b866112cd565b634e487b7160e01b600052604160045260246000fd5b61142591925060203d602011610967576109568183611c2e565b9083611288565b826360ec327960e01b60005260045260246000fd5b8263032c20ef60e21b60005260045260246000fd5b346101e75760003660031901126101e75761146f6123d7565b60006001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031981167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101e75760003660031901126101e7576020600154604051908152f35b346101e75761151b36611ec0565b61152482611fea565b9160a083018051611682576060840180515142106116715760204291510151106116605760249360206001600160a01b036000541660405196878092630e82f3b760e41b82528760048301525afa9485156105915760009561162c575b50835194602085019586200361161b57608001514201908142116104d2577f50df9e2c9fc5a7f4a07e403fa0300b88fcc8c6943bdff4b8ae71f55b7fd95f899461160d9284600052600560205260066040600020015584519020836000526005602052600c60406000200155519260405193849384526020840152606060408401526060830190611d17565b0390a1602060405160018152f35b630d8dbe2560e01b60005260046000fd5b9094506020813d602011611658575b8161164860209383611c2e565b810103126101e757519385611581565b3d915061163b565b633d82a7cd60e11b60005260046000fd5b63a0750b5160e01b60005260046000fd5b50633e26347b60e21b60005260045260246000fd5b346101e75760203660031901126101e7576001600160a01b036116b8611ba5565b6116c06123d7565b1680600052600460205260ff6040600020541615611723576020817f56070b80bd617fcd2f7a284861edb488830a38f9dedcd77b2cb2f4eac17743e79260005260048252604060002060ff198154169055604051908152a1602060405160018152f35b6321ac7c5f60e01b60005260045260246000fd5b346101e75760203660031901126101e7577f104eb329a192aef26eddea07c2af5ad2587792e62b37ed4045b6ba59bc5540fc60206004356117766123d7565b8060005260088252611798816001600160a01b0360406000205416151561211e565b806000526008825260406000206001600160a01b03198154169055604051908152a1602060405160018152f35b346101e75760203660031901126101e757610e816117e4600435611fea565b604051918291602083526020830190611d3c565b346101e75760203660031901126101e757600435600052600560205260206040600020610e8181549160028101546005820154916006810154926007820154936118bf6001600160a01b0360088501541661185560098601611c50565b906001600160a01b03600a87015416976001600160a01b03600b8801541694600c8801549661188b600e600d8b01549a01611c50565b996040519e8f9e8f908152015260408d015260608c015260808b015260a08a015261018060c08a0152610180890190611d17565b9460e0880152610100870152610120860152610140850152838203610160850152611d17565b346101e75760603660031901126101e7576118fe611ba5565b602435906001600160a01b03821682036101e7577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c16159267ffffffffffffffff821680159081611b03575b6001149081611af9575b159081611af0575b50611adf5767ffffffffffffffff1982166001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00556119ce9184611aa0575b506119ac61241f565b6119b461241f565b6119bd336122a6565b6119c860443561223c565b5061234c565b506001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054166001600160a01b03821603611a8e575b50611a1157005b68ff0000000000000000197ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b611a9a9061023d6123d7565b81611a0a565b68ffffffffffffffffff191668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055846119a3565b63f92ee8a960e01b60005260046000fd5b90501585611963565b303b15915061195b565b859150611951565b346101e75760203660031901126101e757600435600052600860205260206001600160a01b0360406000205416604051908152f35b346101e75760203660031901126101e757600435806000526005602052611b7a816001600160a01b03600860406000200154161515611f3f565b6000526006602052600260406000206001810154600052016020526020604060002054604051908152f35b600435906001600160a01b03821682036101e757565b90600182811c92168015611beb575b6020831014611bd557565b634e487b7160e01b600052602260045260246000fd5b91607f1691611bca565b6101c0810190811067ffffffffffffffff8211176113f557604052565b6040810190811067ffffffffffffffff8211176113f557604052565b90601f8019910116810190811067ffffffffffffffff8211176113f557604052565b9060405191826000825492611c6484611bbb565b8084529360018116908115611cd25750600114611c8b575b50611c8992500383611c2e565b565b90506000929192526020600020906000915b818310611cb6575050906020611c899282010138611c7c565b6020919350806001915483858901015201910190918492611c9d565b905060209250611c8994915060ff191682840152151560051b82010138611c7c565b60005b838110611d075750506000910152565b8181015183820152602001611cf7565b90602091611d3081518092818552858086019101611cf4565b601f01601f1916010190565b919091805183526020810151602084016000905b60028210611e415750505060408101516060840152606081015192608081016000905b60028210611e2b575050611e28929350608082015160c082015260a082015160e082015260c08201516101008201526001600160a01b0360e0830151166101208201526101a0611dd6610100840151610200610140850152610200840190611d17565b926001600160a01b03610120820151166101608401526001600160a01b0361014082015116610180840152610160810151828401526101808101516101c08401520151906101e0818403910152611d17565b90565b6020806001928851815201960191019094611d73565b60208060019263ffffffff865116815201930191019091611d50565b67ffffffffffffffff81116113f557601f01601f191660200190565b81601f820112156101e757803590611e9082611e5d565b92611e9e6040519485611c2e565b828452602083830101116101e757816000926020809301838601378301015290565b9060406003198301126101e757600435916024359067ffffffffffffffff82116101e757611e2891600401611e79565b60606003198201126101e7576004359160243567ffffffffffffffff81116101e75782611f1f91600401611e79565b916044359067ffffffffffffffff82116101e757611e2891600401611e79565b15611f475750565b63cd6f4a4f60e01b60005260045260246000fd5b60405190611f6882611bf5565b60606101a0836000815260408051611f808282611c2e565b813682376020830152600081830152805190611f9c8183611c2e565b3682378382015260006080820152600060a0820152600060c0820152600060e08201528261010082015260006101208201526000610140820152600061016082015260006101808201520152565b90611ff3611f5b565b5081600052600560205260406000209160405161200f81611bf5565b8354815260405163ffffffff6001860154818116835260201c166020820152612039604082611c2e565b6020820152600284015460408201526040518060038601906000905b6002821061210857505050611c8992918161207960406001600160a01b0394611c2e565b606082015260058601546080820152600686015460a0820152600786015460c08201526120f8600e836008890154169760e084019889526120bc60098201611c50565b61010085015284600a8201541661012085015284600b82015416610140850152600c810154610160850152600d81015461018085015201611c50565b6101a08201529451161515611f3f565b6001602081928554815201930191019091612055565b156121265750565b6381c4951960e01b60005260045260246000fd5b156121425750565b63166b4d0360e01b60005260045260246000fd5b908160209103126101e7575180151581036101e75790565b611e289392606092825260208201528160408201520190611d17565b156121925750565b604051632f9f8ab960e01b8152602060048201529081906121b7906024830190611d17565b0390fd5b8181106121c6575050565b600081556001016121bb565b60243563ffffffff811681036101e75790565b359063ffffffff821682036101e757565b6024906000905b6002821061220a57505050565b60208060019263ffffffff61221e876121e5565b168152019301910190916121fd565b60001981146104d25760010190565b60207fba0716ba1ee2ea8ecc4c64119b4537cdb42a99d82acf92af5b87607b8b523552916122686123d7565b80600155604051908152a1600190565b919060408301926000905b6002821061229057505050565b6020806001928551815201930191019091612283565b6001600160a01b03168015612336576001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054826001600160a01b03198216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b631e4fbdf760e01b600052600060045260246000fd5b6001600160a01b039061235d6123d7565b16801515806123c2575b156123ae576020817f80052b810d39120cf6c976cca504a21703f585521dc7a41c6d241090e6c579b6926001600160a01b03196000541617600055604051908152a1600190565b6375ac4eb760e11b60005260045260246000fd5b506001600160a01b0360005416811415612367565b6001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416330361240a57565b63118cdaa760e01b6000523360045260246000fd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561244e57565b631afcd79f60e31b60005260046000fdfea164736f6c634300081b000a", + "numDeployments": 3, + "solcInputHash": "1560ab6aa11f44088d4445eb3d74156d", + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"contract ICiphernodeRegistry\",\"name\":\"_ciphernodeRegistry\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_maxDuration\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"}],\"name\":\"CiphertextOutputAlreadyPublished\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"}],\"name\":\"CiphertextOutputNotPublished\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CommitteeSelectionFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"}],\"name\":\"E3AlreadyActivated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"}],\"name\":\"E3DoesNotExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"E3Expired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"}],\"name\":\"E3NotActivated\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"E3NotReady\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IE3Program\",\"name\":\"e3Program\",\"type\":\"address\"}],\"name\":\"E3ProgramNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiration\",\"type\":\"uint256\"}],\"name\":\"InputDeadlineNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiration\",\"type\":\"uint256\"}],\"name\":\"InputDeadlinePassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract ICiphernodeRegistry\",\"name\":\"ciphernodeRegistry\",\"type\":\"address\"}],\"name\":\"InvalidCiphernodeRegistry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IInputValidator\",\"name\":\"inputValidator\",\"type\":\"address\"}],\"name\":\"InvalidComputationRequest\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"InvalidDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encryptionSchemeId\",\"type\":\"bytes32\"}],\"name\":\"InvalidEncryptionScheme\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInput\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"output\",\"type\":\"bytes\"}],\"name\":\"InvalidOutput\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidStartWindow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32[2]\",\"name\":\"threshold\",\"type\":\"uint32[2]\"}],\"name\":\"InvalidThreshold\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeafAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeafCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeafGreaterThanSnarkScalarField\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleAlreadyEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"PaymentRequired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"}],\"name\":\"PlaintextOutputAlreadyPublished\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"ciphernodeRegistry\",\"type\":\"address\"}],\"name\":\"CiphernodeRegistrySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"ciphertextOutput\",\"type\":\"bytes\"}],\"name\":\"CiphertextOutputPublished\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"expiration\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"committeePublicKey\",\"type\":\"bytes\"}],\"name\":\"E3Activated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IE3Program\",\"name\":\"e3Program\",\"type\":\"address\"}],\"name\":\"E3ProgramDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IE3Program\",\"name\":\"e3Program\",\"type\":\"address\"}],\"name\":\"E3ProgramEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"seed\",\"type\":\"uint256\"},{\"internalType\":\"uint32[2]\",\"name\":\"threshold\",\"type\":\"uint32[2]\"},{\"internalType\":\"uint256\",\"name\":\"requestBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256[2]\",\"name\":\"startWindow\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiration\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"encryptionSchemeId\",\"type\":\"bytes32\"},{\"internalType\":\"contract IE3Program\",\"name\":\"e3Program\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"e3ProgramParams\",\"type\":\"bytes\"},{\"internalType\":\"contract IInputValidator\",\"name\":\"inputValidator\",\"type\":\"address\"},{\"internalType\":\"contract IDecryptionVerifier\",\"name\":\"decryptionVerifier\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"committeePublicKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"ciphertextOutput\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"plaintextOutput\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct E3\",\"name\":\"e3\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"filter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IE3Program\",\"name\":\"e3Program\",\"type\":\"address\"}],\"name\":\"E3Requested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"encryptionSchemeId\",\"type\":\"bytes32\"}],\"name\":\"EncryptionSchemeDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"encryptionSchemeId\",\"type\":\"bytes32\"}],\"name\":\"EncryptionSchemeEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"inputHash\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"InputPublished\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxDuration\",\"type\":\"uint256\"}],\"name\":\"MaxDurationSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"plaintextOutput\",\"type\":\"bytes\"}],\"name\":\"PlaintextOutputPublished\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"}],\"name\":\"activate\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ciphernodeRegistry\",\"outputs\":[{\"internalType\":\"contract ICiphernodeRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encryptionSchemeId\",\"type\":\"bytes32\"}],\"name\":\"decryptionVerifiers\",\"outputs\":[{\"internalType\":\"contract IDecryptionVerifier\",\"name\":\"decryptionVerifier\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IE3Program\",\"name\":\"e3Program\",\"type\":\"address\"}],\"name\":\"disableE3Program\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encryptionSchemeId\",\"type\":\"bytes32\"}],\"name\":\"disableEncryptionScheme\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IE3Program\",\"name\":\"e3Program\",\"type\":\"address\"}],\"name\":\"e3Programs\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"}],\"name\":\"e3s\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"seed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requestBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiration\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"encryptionSchemeId\",\"type\":\"bytes32\"},{\"internalType\":\"contract IE3Program\",\"name\":\"e3Program\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"e3ProgramParams\",\"type\":\"bytes\"},{\"internalType\":\"contract IInputValidator\",\"name\":\"inputValidator\",\"type\":\"address\"},{\"internalType\":\"contract IDecryptionVerifier\",\"name\":\"decryptionVerifier\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"committeePublicKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"ciphertextOutput\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"plaintextOutput\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IE3Program\",\"name\":\"e3Program\",\"type\":\"address\"}],\"name\":\"enableE3Program\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encryptionSchemeId\",\"type\":\"bytes32\"}],\"name\":\"getDecryptionVerifier\",\"outputs\":[{\"internalType\":\"contract IDecryptionVerifier\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"}],\"name\":\"getE3\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"seed\",\"type\":\"uint256\"},{\"internalType\":\"uint32[2]\",\"name\":\"threshold\",\"type\":\"uint32[2]\"},{\"internalType\":\"uint256\",\"name\":\"requestBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256[2]\",\"name\":\"startWindow\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiration\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"encryptionSchemeId\",\"type\":\"bytes32\"},{\"internalType\":\"contract IE3Program\",\"name\":\"e3Program\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"e3ProgramParams\",\"type\":\"bytes\"},{\"internalType\":\"contract IInputValidator\",\"name\":\"inputValidator\",\"type\":\"address\"},{\"internalType\":\"contract IDecryptionVerifier\",\"name\":\"decryptionVerifier\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"committeePublicKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"ciphertextOutput\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"plaintextOutput\",\"type\":\"bytes\"}],\"internalType\":\"struct E3\",\"name\":\"e3\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"}],\"name\":\"getInputRoot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"contract ICiphernodeRegistry\",\"name\":\"_ciphernodeRegistry\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_maxDuration\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"}],\"name\":\"inputCounts\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"inputCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"}],\"name\":\"inputs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"size\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depth\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nexte3Id\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"ciphertextOutput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"publishCiphertextOutput\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"publishInput\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"plaintextOutput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"publishPlaintextOutput\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"filter\",\"type\":\"address\"},{\"internalType\":\"uint32[2]\",\"name\":\"threshold\",\"type\":\"uint32[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"startWindow\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"contract IE3Program\",\"name\":\"e3Program\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"e3ProgramParams\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"computeProviderParams\",\"type\":\"bytes\"}],\"name\":\"request\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"seed\",\"type\":\"uint256\"},{\"internalType\":\"uint32[2]\",\"name\":\"threshold\",\"type\":\"uint32[2]\"},{\"internalType\":\"uint256\",\"name\":\"requestBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256[2]\",\"name\":\"startWindow\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiration\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"encryptionSchemeId\",\"type\":\"bytes32\"},{\"internalType\":\"contract IE3Program\",\"name\":\"e3Program\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"e3ProgramParams\",\"type\":\"bytes\"},{\"internalType\":\"contract IInputValidator\",\"name\":\"inputValidator\",\"type\":\"address\"},{\"internalType\":\"contract IDecryptionVerifier\",\"name\":\"decryptionVerifier\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"committeePublicKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"ciphertextOutput\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"plaintextOutput\",\"type\":\"bytes\"}],\"internalType\":\"struct E3\",\"name\":\"e3\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"requests\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ICiphernodeRegistry\",\"name\":\"_ciphernodeRegistry\",\"type\":\"address\"}],\"name\":\"setCiphernodeRegistry\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encryptionSchemeId\",\"type\":\"bytes32\"},{\"internalType\":\"contract IDecryptionVerifier\",\"name\":\"decryptionVerifier\",\"type\":\"address\"}],\"name\":\"setDecryptionVerifier\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxDuration\",\"type\":\"uint256\"}],\"name\":\"setMaxDuration\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"CiphernodeRegistrySet(address)\":{\"params\":{\"ciphernodeRegistry\":\"The address of the CiphernodeRegistry contract.\"}},\"CiphertextOutputPublished(uint256,bytes)\":{\"params\":{\"ciphertextOutput\":\"ABI encoded ciphertext output.\",\"e3Id\":\"ID of the E3.\"}},\"E3Activated(uint256,uint256,bytes)\":{\"params\":{\"committeePublicKey\":\"Public key of the committee.\",\"e3Id\":\"ID of the E3.\",\"expiration\":\"Timestamp when committee duties expire.\"}},\"E3ProgramDisabled(address)\":{\"params\":{\"e3Program\":\"The address of the E3 Program.\"}},\"E3ProgramEnabled(address)\":{\"params\":{\"e3Program\":\"The address of the E3 Program.\"}},\"E3Requested(uint256,(uint256,uint32[2],uint256,uint256[2],uint256,uint256,bytes32,address,bytes,address,address,bytes32,bytes32,bytes),address,address)\":{\"params\":{\"e3\":\"Details of the E3.\",\"e3Id\":\"ID of the E3.\",\"e3Program\":\"Address of the Computation module selected.\",\"filter\":\"Address of the pool of nodes from which the Cipher Node committee was selected.\"}},\"EncryptionSchemeDisabled(bytes32)\":{\"params\":{\"encryptionSchemeId\":\"The ID of the encryption scheme that was disabled.\"}},\"EncryptionSchemeEnabled(bytes32)\":{\"params\":{\"encryptionSchemeId\":\"The ID of the encryption scheme that was enabled.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"InputPublished(uint256,bytes,uint256,uint256)\":{\"params\":{\"data\":\"ABI encoded input data.\",\"e3Id\":\"ID of the E3.\"}},\"MaxDurationSet(uint256)\":{\"params\":{\"maxDuration\":\"The maximum duration of a computation in seconds.\"}},\"PlaintextOutputPublished(uint256,bytes)\":{\"params\":{\"e3Id\":\"ID of the E3.\",\"plaintextOutput\":\"ABI encoded plaintext output.\"}}},\"kind\":\"dev\",\"methods\":{\"activate(uint256,bytes)\":{\"details\":\"This function MUST emit the E3Activated event.This function MUST revert if the given E3 has not yet been requested.This function MUST revert if the selected node committee has not yet published a public key.\",\"params\":{\"e3Id\":\"ID of the E3.\",\"publicKey\":\"Public key of the committee.\"},\"returns\":{\"success\":\"True if the E3 was successfully activated.\"}},\"constructor\":{\"params\":{\"_maxDuration\":\"The maximum duration of a computation in seconds\",\"_owner\":\"The owner of this contract\"}},\"getE3(uint256)\":{\"details\":\"This function MUST revert if the E3 does not exist.\",\"params\":{\"e3Id\":\"ID of the E3.\"},\"returns\":{\"e3\":\"The struct representing the requested E3.\"}},\"getInputRoot(uint256)\":{\"details\":\"This function MUST revert if the E3 does not exist.\",\"params\":{\"e3Id\":\"ID of the E3.\"},\"returns\":{\"_0\":\"The root of the input merkle tree.\"}},\"initialize(address,address,uint256)\":{\"params\":{\"_maxDuration\":\"The maximum duration of a computation in seconds\",\"_owner\":\"The owner of this contract\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"publishCiphertextOutput(uint256,bytes,bytes)\":{\"details\":\"This function MUST emit the CiphertextOutputPublished event.\",\"params\":{\"ciphertextOutput\":\"ABI encoded output data to verify.\",\"e3Id\":\"ID of the E3.\",\"proof\":\"ABI encoded data to verify the ciphertextOutput.\"},\"returns\":{\"success\":\"True if the output was successfully published.\"}},\"publishInput(uint256,bytes)\":{\"details\":\"This function MUST revert if the E3 is not yet activated.This function MUST emit the InputPublished event.\",\"params\":{\"data\":\"ABI encoded input data to publish.\",\"e3Id\":\"ID of the E3.\"},\"returns\":{\"success\":\"True if the input was successfully published.\"}},\"publishPlaintextOutput(uint256,bytes,bytes)\":{\"details\":\"This function MUST revert if the output has not been published.This function MUST emit the PlaintextOutputPublished event.\",\"params\":{\"e3Id\":\"ID of the E3.\",\"plaintextOutput\":\"ABI encoded plaintext output.\",\"proof\":\"ABI encoded data to verify the plaintextOutput.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"request(address,uint32[2],uint256[2],uint256,address,bytes,bytes)\":{\"details\":\"This function MUST emit the E3Requested event.\",\"params\":{\"computeProviderParams\":\"ABI encoded compute provider parameters.\",\"duration\":\"The duration of the computation in seconds.\",\"e3Program\":\"Address of the E3 Program.\",\"e3ProgramParams\":\"ABI encoded computation parameters.\",\"filter\":\"IDs of the pool of nodes from which to select the committee.\",\"threshold\":\"The M/N threshold for the committee.\"},\"returns\":{\"e3\":\"The E3 struct.\",\"e3Id\":\"ID of the E3.\"}},\"setMaxDuration(uint256)\":{\"params\":{\"_maxDuration\":\"The maximum duration of a computation in seconds.\"},\"returns\":{\"success\":\"True if the max duration was successfully set.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"events\":{\"CiphernodeRegistrySet(address)\":{\"notice\":\"This event MUST be emitted any time the CiphernodeRegistry is set.\"},\"CiphertextOutputPublished(uint256,bytes)\":{\"notice\":\"This event MUST be emitted when the ciphertext output of an Encrypted Execution Environment (E3) is successfully published.\"},\"E3Activated(uint256,uint256,bytes)\":{\"notice\":\"This event MUST be emitted when an Encrypted Execution Environment (E3) is successfully activated.\"},\"E3ProgramDisabled(address)\":{\"notice\":\"This event MUST be emitted any time a E3 Program is disabled.\"},\"E3ProgramEnabled(address)\":{\"notice\":\"This event MUST be emitted any time a E3 Program is enabled.\"},\"E3Requested(uint256,(uint256,uint32[2],uint256,uint256[2],uint256,uint256,bytes32,address,bytes,address,address,bytes32,bytes32,bytes),address,address)\":{\"notice\":\"This event MUST be emitted when an Encrypted Execution Environment (E3) is successfully requested.\"},\"EncryptionSchemeDisabled(bytes32)\":{\"notice\":\"This event MUST be emitted any time an encryption scheme is disabled.\"},\"EncryptionSchemeEnabled(bytes32)\":{\"notice\":\"The event MUST be emitted any time an encryption scheme is enabled.\"},\"InputPublished(uint256,bytes,uint256,uint256)\":{\"notice\":\"This event MUST be emitted when an input to an Encrypted Execution Environment (E3) is successfully published.\"},\"MaxDurationSet(uint256)\":{\"notice\":\"This event MUST be emitted any time the `maxDuration` is set.\"},\"PlaintextOutputPublished(uint256,bytes)\":{\"notice\":\"This event MUST be emitted when the plaintext output of an Encrypted Execution Environment (E3) is successfully published.\"}},\"kind\":\"user\",\"methods\":{\"activate(uint256,bytes)\":{\"notice\":\"This function should be called to activate an Encrypted Execution Environment (E3) once it has been initialized and is ready for input.\"},\"getE3(uint256)\":{\"notice\":\"This function should be called to retrieve the details of an Encrypted Execution Environment (E3).\"},\"getInputRoot(uint256)\":{\"notice\":\"This function returns root of the input merkle tree for a given E3.\"},\"publishCiphertextOutput(uint256,bytes,bytes)\":{\"notice\":\"This function should be called to publish output data for an Encrypted Execution Environment (E3).\"},\"publishInput(uint256,bytes)\":{\"notice\":\"This function should be called to publish input data for Encrypted Execution Environment (E3).\"},\"publishPlaintextOutput(uint256,bytes,bytes)\":{\"notice\":\"This function publishes the plaintext output of an Encrypted Execution Environment (E3).\"},\"request(address,uint32[2],uint256[2],uint256,address,bytes,bytes)\":{\"notice\":\"This function should be called to request a computation within an Encrypted Execution Environment (E3).\"},\"setMaxDuration(uint256)\":{\"notice\":\"This function should be called to set the maximum duration of requested computations.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/Enclave.sol\":\"Enclave\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":800},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {ContextUpgradeable} from \\\"../utils/ContextUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * The initial owner is set to the address provided by the deployer. This can\\n * later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n /// @custom:storage-location erc7201:openzeppelin.storage.Ownable\\n struct OwnableStorage {\\n address _owner;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Ownable\\\")) - 1)) & ~bytes32(uint256(0xff))\\n bytes32 private constant OwnableStorageLocation = 0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300;\\n\\n function _getOwnableStorage() private pure returns (OwnableStorage storage $) {\\n assembly {\\n $.slot := OwnableStorageLocation\\n }\\n }\\n\\n /**\\n * @dev The caller account is not authorized to perform an operation.\\n */\\n error OwnableUnauthorizedAccount(address account);\\n\\n /**\\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\\n */\\n error OwnableInvalidOwner(address owner);\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\\n */\\n function __Ownable_init(address initialOwner) internal onlyInitializing {\\n __Ownable_init_unchained(initialOwner);\\n }\\n\\n function __Ownable_init_unchained(address initialOwner) internal onlyInitializing {\\n if (initialOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n OwnableStorage storage $ = _getOwnableStorage();\\n return $._owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n if (owner() != _msgSender()) {\\n revert OwnableUnauthorizedAccount(_msgSender());\\n }\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby disabling any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n if (newOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n OwnableStorage storage $ = _getOwnableStorage();\\n address oldOwner = $._owner;\\n $._owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1)) & ~bytes32(uint256(0xff))\\n bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error InvalidInitialization();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any\\n * number of times. This behavior in the constructor can be useful during testing and is not expected to be used in\\n * production.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n // Cache values to avoid duplicated sloads\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n\\n // Allowed calls:\\n // - initialSetup: the contract is not in the initializing state and no previous version was\\n // initialized\\n // - construction: the contract is initialized at version 1 (no reininitialization) and the\\n // current contract is just being deployed\\n bool initialSetup = initialized == 0 && isTopLevelCall;\\n bool construction = initialized == 1 && address(this).code.length == 0;\\n\\n if (!initialSetup && !construction) {\\n revert InvalidInitialization();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert InvalidInitialization();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert InvalidInitialization();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\"},\"@zk-kit/lean-imt.sol/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.8.4;\\n\\nuint256 constant SNARK_SCALAR_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n\",\"keccak256\":\"0xb1944a1d9f63069b2f22260935adb2d11546f82fbb7d12d853a90134a92f4b5b\",\"license\":\"UNLICENSED\"},\"@zk-kit/lean-imt.sol/InternalLeanIMT.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport {PoseidonT3} from \\\"poseidon-solidity/PoseidonT3.sol\\\";\\nimport {SNARK_SCALAR_FIELD} from \\\"./Constants.sol\\\";\\n\\nstruct LeanIMTData {\\n // Tracks the current number of leaves in the tree.\\n uint256 size;\\n // Represents the current depth of the tree, which can increase as new leaves are inserted.\\n uint256 depth;\\n // A mapping from each level of the tree to the node value of the last even position at that level.\\n // Used for efficient inserts, updates and root calculations.\\n mapping(uint256 => uint256) sideNodes;\\n // A mapping from leaf values to their respective indices in the tree.\\n // This facilitates checks for leaf existence and retrieval of leaf positions.\\n mapping(uint256 => uint256) leaves;\\n}\\n\\nerror WrongSiblingNodes();\\nerror LeafGreaterThanSnarkScalarField();\\nerror LeafCannotBeZero();\\nerror LeafAlreadyExists();\\nerror LeafDoesNotExist();\\n\\n/// @title Lean Incremental binary Merkle tree.\\n/// @dev The LeanIMT is an optimized version of the BinaryIMT.\\n/// This implementation eliminates the use of zeroes, and make the tree depth dynamic.\\n/// When a node doesn't have the right child, instead of using a zero hash as in the BinaryIMT,\\n/// the node's value becomes that of its left child. Furthermore, rather than utilizing a static tree depth,\\n/// it is updated based on the number of leaves in the tree. This approach\\n/// results in the calculation of significantly fewer hashes, making the tree more efficient.\\nlibrary InternalLeanIMT {\\n /// @dev Inserts a new leaf into the incremental merkle tree.\\n /// The function ensures that the leaf is valid according to the\\n /// constraints of the tree and then updates the tree's structure accordingly.\\n /// @param self: A storage reference to the 'LeanIMTData' struct.\\n /// @param leaf: The value of the new leaf to be inserted into the tree.\\n /// @return The new hash of the node after the leaf has been inserted.\\n function _insert(LeanIMTData storage self, uint256 leaf) internal returns (uint256) {\\n if (leaf >= SNARK_SCALAR_FIELD) {\\n revert LeafGreaterThanSnarkScalarField();\\n } else if (leaf == 0) {\\n revert LeafCannotBeZero();\\n } else if (_has(self, leaf)) {\\n revert LeafAlreadyExists();\\n }\\n\\n uint256 index = self.size;\\n\\n // Cache tree depth to optimize gas\\n uint256 treeDepth = self.depth;\\n\\n // A new insertion can increase a tree's depth by at most 1,\\n // and only if the number of leaves supported by the current\\n // depth is less than the number of leaves to be supported after insertion.\\n if (2 ** treeDepth < index + 1) {\\n ++treeDepth;\\n }\\n\\n self.depth = treeDepth;\\n\\n uint256 node = leaf;\\n\\n for (uint256 level = 0; level < treeDepth; ) {\\n if ((index >> level) & 1 == 1) {\\n node = PoseidonT3.hash([self.sideNodes[level], node]);\\n } else {\\n self.sideNodes[level] = node;\\n }\\n\\n unchecked {\\n ++level;\\n }\\n }\\n\\n self.size = ++index;\\n\\n self.sideNodes[treeDepth] = node;\\n self.leaves[leaf] = index;\\n\\n return node;\\n }\\n\\n /// @dev Inserts many leaves into the incremental merkle tree.\\n /// The function ensures that the leaves are valid according to the\\n /// constraints of the tree and then updates the tree's structure accordingly.\\n /// @param self: A storage reference to the 'LeanIMTData' struct.\\n /// @param leaves: The values of the new leaves to be inserted into the tree.\\n /// @return The root after the leaves have been inserted.\\n function _insertMany(LeanIMTData storage self, uint256[] calldata leaves) internal returns (uint256) {\\n // Cache tree size to optimize gas\\n uint256 treeSize = self.size;\\n\\n // Check that all the new values are correct to be added.\\n for (uint256 i = 0; i < leaves.length; ) {\\n if (leaves[i] >= SNARK_SCALAR_FIELD) {\\n revert LeafGreaterThanSnarkScalarField();\\n } else if (leaves[i] == 0) {\\n revert LeafCannotBeZero();\\n } else if (_has(self, leaves[i])) {\\n revert LeafAlreadyExists();\\n }\\n\\n self.leaves[leaves[i]] = treeSize + 1 + i;\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n // Array to save the nodes that will be used to create the next level of the tree.\\n uint256[] memory currentLevelNewNodes;\\n\\n currentLevelNewNodes = leaves;\\n\\n // Cache tree depth to optimize gas\\n uint256 treeDepth = self.depth;\\n\\n // Calculate the depth of the tree after adding the new values.\\n // Unlike the 'insert' function, we need a while here as\\n // N insertions can increase the tree's depth more than once.\\n while (2 ** treeDepth < treeSize + leaves.length) {\\n ++treeDepth;\\n }\\n\\n self.depth = treeDepth;\\n\\n // First index to change in every level.\\n uint256 currentLevelStartIndex = treeSize;\\n\\n // Size of the level used to create the next level.\\n uint256 currentLevelSize = treeSize + leaves.length;\\n\\n // The index where changes begin at the next level.\\n uint256 nextLevelStartIndex = currentLevelStartIndex >> 1;\\n\\n // The size of the next level.\\n uint256 nextLevelSize = ((currentLevelSize - 1) >> 1) + 1;\\n\\n for (uint256 level = 0; level < treeDepth; ) {\\n // The number of nodes for the new level that will be created,\\n // only the new values, not the entire level.\\n uint256 numberOfNewNodes = nextLevelSize - nextLevelStartIndex;\\n uint256[] memory nextLevelNewNodes = new uint256[](numberOfNewNodes);\\n for (uint256 i = 0; i < numberOfNewNodes; ) {\\n uint256 leftNode;\\n\\n // Assign the left node using the saved path or the position in the array.\\n if ((i + nextLevelStartIndex) * 2 < currentLevelStartIndex) {\\n leftNode = self.sideNodes[level];\\n } else {\\n leftNode = currentLevelNewNodes[(i + nextLevelStartIndex) * 2 - currentLevelStartIndex];\\n }\\n\\n uint256 rightNode;\\n\\n // Assign the right node if the value exists.\\n if ((i + nextLevelStartIndex) * 2 + 1 < currentLevelSize) {\\n rightNode = currentLevelNewNodes[(i + nextLevelStartIndex) * 2 + 1 - currentLevelStartIndex];\\n }\\n\\n uint256 parentNode;\\n\\n // Assign the parent node.\\n // If it has a right child the result will be the hash(leftNode, rightNode) if not,\\n // it will be the leftNode.\\n if (rightNode != 0) {\\n parentNode = PoseidonT3.hash([leftNode, rightNode]);\\n } else {\\n parentNode = leftNode;\\n }\\n\\n nextLevelNewNodes[i] = parentNode;\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n // Update the `sideNodes` variable.\\n // If `currentLevelSize` is odd, the saved value will be the last value of the array\\n // if it is even and there are more than 1 element in `currentLevelNewNodes`, the saved value\\n // will be the value before the last one.\\n // If it is even and there is only one element, there is no need to save anything because\\n // the correct value for this level was already saved before.\\n if (currentLevelSize & 1 == 1) {\\n self.sideNodes[level] = currentLevelNewNodes[currentLevelNewNodes.length - 1];\\n } else if (currentLevelNewNodes.length > 1) {\\n self.sideNodes[level] = currentLevelNewNodes[currentLevelNewNodes.length - 2];\\n }\\n\\n currentLevelStartIndex = nextLevelStartIndex;\\n\\n // Calculate the next level startIndex value.\\n // It is the position of the parent node which is pos/2.\\n nextLevelStartIndex >>= 1;\\n\\n // Update the next array that will be used to calculate the next level.\\n currentLevelNewNodes = nextLevelNewNodes;\\n\\n currentLevelSize = nextLevelSize;\\n\\n // Calculate the size of the next level.\\n // The size of the next level is (currentLevelSize - 1) / 2 + 1.\\n nextLevelSize = ((nextLevelSize - 1) >> 1) + 1;\\n\\n unchecked {\\n ++level;\\n }\\n }\\n\\n // Update tree size\\n self.size = treeSize + leaves.length;\\n\\n // Update tree root\\n self.sideNodes[treeDepth] = currentLevelNewNodes[0];\\n\\n return currentLevelNewNodes[0];\\n }\\n\\n /// @dev Updates the value of an existing leaf and recalculates hashes\\n /// to maintain tree integrity.\\n /// @param self: A storage reference to the 'LeanIMTData' struct.\\n /// @param oldLeaf: The value of the leaf that is to be updated.\\n /// @param newLeaf: The new value that will replace the oldLeaf in the tree.\\n /// @param siblingNodes: An array of sibling nodes that are necessary to recalculate the path to the root.\\n /// @return The new hash of the updated node after the leaf has been updated.\\n function _update(\\n LeanIMTData storage self,\\n uint256 oldLeaf,\\n uint256 newLeaf,\\n uint256[] calldata siblingNodes\\n ) internal returns (uint256) {\\n if (newLeaf >= SNARK_SCALAR_FIELD) {\\n revert LeafGreaterThanSnarkScalarField();\\n } else if (!_has(self, oldLeaf)) {\\n revert LeafDoesNotExist();\\n } else if (_has(self, newLeaf)) {\\n revert LeafAlreadyExists();\\n }\\n\\n uint256 index = _indexOf(self, oldLeaf);\\n uint256 node = newLeaf;\\n uint256 oldRoot = oldLeaf;\\n\\n uint256 lastIndex = self.size - 1;\\n uint256 i = 0;\\n\\n // Cache tree depth to optimize gas\\n uint256 treeDepth = self.depth;\\n\\n for (uint256 level = 0; level < treeDepth; ) {\\n if ((index >> level) & 1 == 1) {\\n if (siblingNodes[i] >= SNARK_SCALAR_FIELD) {\\n revert LeafGreaterThanSnarkScalarField();\\n }\\n\\n node = PoseidonT3.hash([siblingNodes[i], node]);\\n oldRoot = PoseidonT3.hash([siblingNodes[i], oldRoot]);\\n\\n unchecked {\\n ++i;\\n }\\n } else {\\n if (index >> level != lastIndex >> level) {\\n if (siblingNodes[i] >= SNARK_SCALAR_FIELD) {\\n revert LeafGreaterThanSnarkScalarField();\\n }\\n\\n node = PoseidonT3.hash([node, siblingNodes[i]]);\\n oldRoot = PoseidonT3.hash([oldRoot, siblingNodes[i]]);\\n\\n unchecked {\\n ++i;\\n }\\n } else {\\n self.sideNodes[i] = node;\\n }\\n }\\n\\n unchecked {\\n ++level;\\n }\\n }\\n\\n if (oldRoot != _root(self)) {\\n revert WrongSiblingNodes();\\n }\\n\\n self.sideNodes[treeDepth] = node;\\n\\n if (newLeaf != 0) {\\n self.leaves[newLeaf] = self.leaves[oldLeaf];\\n }\\n\\n self.leaves[oldLeaf] = 0;\\n\\n return node;\\n }\\n\\n /// @dev Removes a leaf from the tree by setting its value to zero.\\n /// This function utilizes the update function to set the leaf's value\\n /// to zero and update the tree's state accordingly.\\n /// @param self: A storage reference to the 'LeanIMTData' struct.\\n /// @param oldLeaf: The value of the leaf to be removed.\\n /// @param siblingNodes: An array of sibling nodes required for updating the path to the root after removal.\\n /// @return The new root hash of the tree after the leaf has been removed.\\n function _remove(\\n LeanIMTData storage self,\\n uint256 oldLeaf,\\n uint256[] calldata siblingNodes\\n ) internal returns (uint256) {\\n return _update(self, oldLeaf, 0, siblingNodes);\\n }\\n\\n /// @dev Checks if a leaf exists in the tree.\\n /// @param self: A storage reference to the 'LeanIMTData' struct.\\n /// @param leaf: The value of the leaf to check for existence.\\n /// @return A boolean value indicating whether the leaf exists in the tree.\\n function _has(LeanIMTData storage self, uint256 leaf) internal view returns (bool) {\\n return self.leaves[leaf] != 0;\\n }\\n\\n /// @dev Retrieves the index of a given leaf in the tree.\\n /// @param self: A storage reference to the 'LeanIMTData' struct.\\n /// @param leaf: The value of the leaf whose index is to be found.\\n /// @return The index of the specified leaf within the tree. If the leaf is not present, the function\\n /// reverts with a custom error.\\n function _indexOf(LeanIMTData storage self, uint256 leaf) internal view returns (uint256) {\\n if (self.leaves[leaf] == 0) {\\n revert LeafDoesNotExist();\\n }\\n\\n return self.leaves[leaf] - 1;\\n }\\n\\n /// @dev Retrieves the root of the tree from the 'sideNodes' mapping using the\\n /// current tree depth.\\n /// @param self: A storage reference to the 'LeanIMTData' struct.\\n /// @return The root hash of the tree.\\n function _root(LeanIMTData storage self) internal view returns (uint256) {\\n return self.sideNodes[self.depth];\\n }\\n}\\n\",\"keccak256\":\"0x6385ce9153d11d9824163464193d4ba3dd304e662dccd365ba2fc381a359762b\",\"license\":\"MIT\"},\"contracts/Enclave.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.8.27;\\n\\nimport { IEnclave, E3, IE3Program } from \\\"./interfaces/IEnclave.sol\\\";\\nimport { IInputValidator } from \\\"./interfaces/IInputValidator.sol\\\";\\nimport { ICiphernodeRegistry } from \\\"./interfaces/ICiphernodeRegistry.sol\\\";\\nimport { IDecryptionVerifier } from \\\"./interfaces/IDecryptionVerifier.sol\\\";\\nimport {\\n OwnableUpgradeable\\n} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport {\\n InternalLeanIMT,\\n LeanIMTData,\\n PoseidonT3\\n} from \\\"@zk-kit/lean-imt.sol/InternalLeanIMT.sol\\\";\\n\\ncontract Enclave is IEnclave, OwnableUpgradeable {\\n using InternalLeanIMT for LeanIMTData;\\n\\n ////////////////////////////////////////////////////////////\\n // //\\n // Storage Variables //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n ICiphernodeRegistry public ciphernodeRegistry; // address of the Ciphernode registry.\\n uint256 public maxDuration; // maximum duration of a computation in seconds.\\n uint256 public nexte3Id; // ID of the next E3.\\n uint256 public requests; // total number of requests made to Enclave.\\n\\n // Mapping of allowed E3 Programs.\\n mapping(IE3Program e3Program => bool allowed) public e3Programs;\\n\\n // Mapping of E3s.\\n mapping(uint256 e3Id => E3 e3) public e3s;\\n\\n // Mapping of input merkle trees.\\n mapping(uint256 e3Id => LeanIMTData imt) public inputs;\\n\\n // Mapping counting the number of inputs for each E3.\\n mapping(uint256 e3Id => uint256 inputCount) public inputCounts;\\n\\n // Mapping of enabled encryption schemes.\\n mapping(bytes32 encryptionSchemeId => IDecryptionVerifier decryptionVerifier)\\n public decryptionVerifiers;\\n\\n ////////////////////////////////////////////////////////////\\n // //\\n // Errors //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n error CommitteeSelectionFailed();\\n error E3ProgramNotAllowed(IE3Program e3Program);\\n error E3AlreadyActivated(uint256 e3Id);\\n error E3Expired();\\n error E3NotActivated(uint256 e3Id);\\n error E3NotReady();\\n error E3DoesNotExist(uint256 e3Id);\\n error ModuleAlreadyEnabled(address module);\\n error ModuleNotEnabled(address module);\\n error InvalidEncryptionScheme(bytes32 encryptionSchemeId);\\n error InputDeadlinePassed(uint256 e3Id, uint256 expiration);\\n error InputDeadlineNotPassed(uint256 e3Id, uint256 expiration);\\n error InvalidComputationRequest(IInputValidator inputValidator);\\n error InvalidCiphernodeRegistry(ICiphernodeRegistry ciphernodeRegistry);\\n error InvalidDuration(uint256 duration);\\n error InvalidOutput(bytes output);\\n error InvalidInput();\\n error InvalidStartWindow();\\n error InvalidThreshold(uint32[2] threshold);\\n error CiphertextOutputAlreadyPublished(uint256 e3Id);\\n error CiphertextOutputNotPublished(uint256 e3Id);\\n error PaymentRequired(uint256 value);\\n error PlaintextOutputAlreadyPublished(uint256 e3Id);\\n\\n ////////////////////////////////////////////////////////////\\n // //\\n // Initialization //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n /// @param _owner The owner of this contract\\n /// @param _maxDuration The maximum duration of a computation in seconds\\n constructor(\\n address _owner,\\n ICiphernodeRegistry _ciphernodeRegistry,\\n uint256 _maxDuration\\n ) {\\n initialize(_owner, _ciphernodeRegistry, _maxDuration);\\n }\\n\\n /// @param _owner The owner of this contract\\n /// @param _maxDuration The maximum duration of a computation in seconds\\n function initialize(\\n address _owner,\\n ICiphernodeRegistry _ciphernodeRegistry,\\n uint256 _maxDuration\\n ) public initializer {\\n __Ownable_init(msg.sender);\\n setMaxDuration(_maxDuration);\\n setCiphernodeRegistry(_ciphernodeRegistry);\\n if (_owner != owner()) transferOwnership(_owner);\\n }\\n\\n ////////////////////////////////////////////////////////////\\n // //\\n // Core Entrypoints //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n function request(\\n address filter,\\n uint32[2] calldata threshold,\\n uint256[2] calldata startWindow,\\n uint256 duration,\\n IE3Program e3Program,\\n bytes memory e3ProgramParams,\\n bytes memory computeProviderParams\\n ) external payable returns (uint256 e3Id, E3 memory e3) {\\n // TODO: allow for other payment methods or only native tokens?\\n // TODO: should payment checks be somewhere else? Perhaps in the E3 Program or ciphernode registry?\\n require(msg.value > 0, PaymentRequired(msg.value));\\n require(\\n threshold[1] >= threshold[0] && threshold[0] > 0,\\n InvalidThreshold(threshold)\\n );\\n require(\\n // TODO: do we need a minimum start window to allow time for committee selection?\\n startWindow[1] >= startWindow[0] &&\\n startWindow[1] >= block.timestamp,\\n InvalidStartWindow()\\n );\\n require(\\n duration > 0 && duration <= maxDuration,\\n InvalidDuration(duration)\\n );\\n require(e3Programs[e3Program], E3ProgramNotAllowed(e3Program));\\n\\n // TODO: should IDs be incremental or produced deterministically?\\n e3Id = nexte3Id;\\n nexte3Id++;\\n uint256 seed = uint256(keccak256(abi.encode(block.prevrandao, e3Id)));\\n\\n (bytes32 encryptionSchemeId, IInputValidator inputValidator) = e3Program\\n .validate(e3Id, seed, e3ProgramParams, computeProviderParams);\\n IDecryptionVerifier decryptionVerifier = decryptionVerifiers[\\n encryptionSchemeId\\n ];\\n require(\\n decryptionVerifiers[encryptionSchemeId] !=\\n IDecryptionVerifier(address(0)),\\n InvalidEncryptionScheme(encryptionSchemeId)\\n );\\n require(\\n address(inputValidator) != address(0),\\n InvalidComputationRequest(inputValidator)\\n );\\n\\n e3 = E3({\\n seed: seed,\\n threshold: threshold,\\n requestBlock: block.number,\\n startWindow: startWindow,\\n duration: duration,\\n expiration: 0,\\n encryptionSchemeId: encryptionSchemeId,\\n e3Program: e3Program,\\n e3ProgramParams: e3ProgramParams,\\n inputValidator: inputValidator,\\n decryptionVerifier: decryptionVerifier,\\n committeePublicKey: hex\\\"\\\",\\n ciphertextOutput: hex\\\"\\\",\\n plaintextOutput: hex\\\"\\\"\\n });\\n e3s[e3Id] = e3;\\n\\n require(\\n ciphernodeRegistry.requestCommittee(e3Id, filter, threshold),\\n CommitteeSelectionFailed()\\n );\\n\\n emit E3Requested(e3Id, e3, filter, e3Program);\\n }\\n\\n function activate(\\n uint256 e3Id,\\n bytes memory publicKey\\n ) external returns (bool success) {\\n E3 memory e3 = getE3(e3Id);\\n\\n require(e3.expiration == 0, E3AlreadyActivated(e3Id));\\n require(e3.startWindow[0] <= block.timestamp, E3NotReady());\\n // TODO: handle what happens to the payment if the start window has passed.\\n require(e3.startWindow[1] >= block.timestamp, E3Expired());\\n\\n bytes32 publicKeyHash = ciphernodeRegistry.committeePublicKey(e3Id);\\n require(\\n keccak256(publicKey) == publicKeyHash,\\n CommitteeSelectionFailed()\\n );\\n uint256 expiresAt = block.timestamp + e3.duration;\\n e3s[e3Id].expiration = expiresAt;\\n e3s[e3Id].committeePublicKey = keccak256(publicKey);\\n\\n emit E3Activated(e3Id, expiresAt, publicKey);\\n\\n return true;\\n }\\n\\n function publishInput(\\n uint256 e3Id,\\n bytes memory data\\n ) external returns (bool success) {\\n E3 memory e3 = getE3(e3Id);\\n\\n // Note: if we make 0 a no expiration, this has to be refactored\\n require(e3.expiration > 0, E3NotActivated(e3Id));\\n // TODO: should we have an input window, including both a start and end timestamp?\\n require(\\n e3.expiration > block.timestamp,\\n InputDeadlinePassed(e3Id, e3.expiration)\\n );\\n\\n bytes memory input = e3.inputValidator.validate(msg.sender, data);\\n uint256 inputHash = PoseidonT3.hash(\\n [uint256(keccak256(input)), inputCounts[e3Id]]\\n );\\n\\n inputCounts[e3Id]++;\\n inputs[e3Id]._insert(inputHash);\\n success = true;\\n\\n emit InputPublished(e3Id, input, inputHash, inputCounts[e3Id] - 1);\\n }\\n\\n function publishCiphertextOutput(\\n uint256 e3Id,\\n bytes memory ciphertextOutput,\\n bytes memory proof\\n ) external returns (bool success) {\\n E3 memory e3 = getE3(e3Id);\\n // Note: if we make 0 a no expiration, this has to be refactored\\n require(e3.expiration > 0, E3NotActivated(e3Id));\\n require(\\n e3.expiration <= block.timestamp,\\n InputDeadlineNotPassed(e3Id, e3.expiration)\\n );\\n // TODO: should the output verifier be able to change its mind?\\n //i.e. should we be able to call this multiple times?\\n require(\\n e3.ciphertextOutput == bytes32(0),\\n CiphertextOutputAlreadyPublished(e3Id)\\n );\\n bytes32 ciphertextOutputHash = keccak256(ciphertextOutput);\\n (success) = e3.e3Program.verify(e3Id, ciphertextOutputHash, proof);\\n require(success, InvalidOutput(ciphertextOutput));\\n e3s[e3Id].ciphertextOutput = ciphertextOutputHash;\\n\\n emit CiphertextOutputPublished(e3Id, ciphertextOutput);\\n }\\n\\n function publishPlaintextOutput(\\n uint256 e3Id,\\n bytes memory plaintextOutput,\\n bytes memory proof\\n ) external returns (bool success) {\\n E3 memory e3 = getE3(e3Id);\\n // Note: if we make 0 a no expiration, this has to be refactored\\n require(e3.expiration > 0, E3NotActivated(e3Id));\\n require(\\n e3.ciphertextOutput != bytes32(0),\\n CiphertextOutputNotPublished(e3Id)\\n );\\n require(\\n e3.plaintextOutput.length == 0,\\n PlaintextOutputAlreadyPublished(e3Id)\\n );\\n (success) = e3.decryptionVerifier.verify(\\n e3Id,\\n keccak256(plaintextOutput),\\n proof\\n );\\n require(success, InvalidOutput(plaintextOutput));\\n e3s[e3Id].plaintextOutput = plaintextOutput;\\n\\n emit PlaintextOutputPublished(e3Id, plaintextOutput);\\n }\\n\\n ////////////////////////////////////////////////////////////\\n // //\\n // Set Functions //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n function setMaxDuration(\\n uint256 _maxDuration\\n ) public onlyOwner returns (bool success) {\\n maxDuration = _maxDuration;\\n success = true;\\n emit MaxDurationSet(_maxDuration);\\n }\\n\\n function setCiphernodeRegistry(\\n ICiphernodeRegistry _ciphernodeRegistry\\n ) public onlyOwner returns (bool success) {\\n require(\\n address(_ciphernodeRegistry) != address(0) &&\\n _ciphernodeRegistry != ciphernodeRegistry,\\n InvalidCiphernodeRegistry(_ciphernodeRegistry)\\n );\\n ciphernodeRegistry = _ciphernodeRegistry;\\n success = true;\\n emit CiphernodeRegistrySet(address(_ciphernodeRegistry));\\n }\\n\\n function enableE3Program(\\n IE3Program e3Program\\n ) public onlyOwner returns (bool success) {\\n require(\\n !e3Programs[e3Program],\\n ModuleAlreadyEnabled(address(e3Program))\\n );\\n e3Programs[e3Program] = true;\\n success = true;\\n emit E3ProgramEnabled(e3Program);\\n }\\n\\n function disableE3Program(\\n IE3Program e3Program\\n ) public onlyOwner returns (bool success) {\\n require(e3Programs[e3Program], ModuleNotEnabled(address(e3Program)));\\n delete e3Programs[e3Program];\\n success = true;\\n emit E3ProgramDisabled(e3Program);\\n }\\n\\n function setDecryptionVerifier(\\n bytes32 encryptionSchemeId,\\n IDecryptionVerifier decryptionVerifier\\n ) public onlyOwner returns (bool success) {\\n require(\\n decryptionVerifier != IDecryptionVerifier(address(0)) &&\\n decryptionVerifiers[encryptionSchemeId] != decryptionVerifier,\\n InvalidEncryptionScheme(encryptionSchemeId)\\n );\\n decryptionVerifiers[encryptionSchemeId] = decryptionVerifier;\\n success = true;\\n emit EncryptionSchemeEnabled(encryptionSchemeId);\\n }\\n\\n function disableEncryptionScheme(\\n bytes32 encryptionSchemeId\\n ) public onlyOwner returns (bool success) {\\n require(\\n decryptionVerifiers[encryptionSchemeId] !=\\n IDecryptionVerifier(address(0)),\\n InvalidEncryptionScheme(encryptionSchemeId)\\n );\\n decryptionVerifiers[encryptionSchemeId] = IDecryptionVerifier(\\n address(0)\\n );\\n success = true;\\n emit EncryptionSchemeDisabled(encryptionSchemeId);\\n }\\n\\n ////////////////////////////////////////////////////////////\\n // //\\n // Get Functions //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n function getE3(uint256 e3Id) public view returns (E3 memory e3) {\\n e3 = e3s[e3Id];\\n require(e3.e3Program != IE3Program(address(0)), E3DoesNotExist(e3Id));\\n }\\n\\n function getInputRoot(uint256 e3Id) public view returns (uint256) {\\n require(\\n e3s[e3Id].e3Program != IE3Program(address(0)),\\n E3DoesNotExist(e3Id)\\n );\\n return InternalLeanIMT._root(inputs[e3Id]);\\n }\\n\\n function getDecryptionVerifier(\\n bytes32 encryptionSchemeId\\n ) public view returns (IDecryptionVerifier) {\\n return decryptionVerifiers[encryptionSchemeId];\\n }\\n}\\n\",\"keccak256\":\"0x192cc4c3a9744ee4eb0fc6a30019367b6fba8eaba26bf613735fbcac6e63a7ff\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/ICiphernodeRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.8.27;\\n\\ninterface ICiphernodeRegistry {\\n /// @notice This event MUST be emitted when a committee is selected for an E3.\\n /// @param e3Id ID of the E3 for which the committee was selected.\\n /// @param filter Address of the contract that will coordinate committee selection.\\n /// @param threshold The M/N threshold for the committee.\\n event CommitteeRequested(\\n uint256 indexed e3Id,\\n address filter,\\n uint32[2] threshold\\n );\\n\\n /// @notice This event MUST be emitted when a committee is selected for an E3.\\n /// @param e3Id ID of the E3 for which the committee was selected.\\n /// @param publicKey Public key of the committee.\\n event CommitteePublished(uint256 indexed e3Id, bytes publicKey);\\n\\n /// @notice This event MUST be emitted when `enclave` is set.\\n /// @param enclave Address of the enclave contract.\\n event EnclaveSet(address indexed enclave);\\n\\n /// @notice This event MUST be emitted when a ciphernode is added to the registry.\\n /// @param node Address of the ciphernode.\\n /// @param index Index of the ciphernode in the registry.\\n /// @param numNodes Number of ciphernodes in the registry.\\n /// @param size Size of the registry.\\n event CiphernodeAdded(\\n address indexed node,\\n uint256 index,\\n uint256 numNodes,\\n uint256 size\\n );\\n\\n /// @notice This event MUST be emitted when a ciphernode is removed from the registry.\\n /// @param node Address of the ciphernode.\\n /// @param index Index of the ciphernode in the registry.\\n /// @param numNodes Number of ciphernodes in the registry.\\n /// @param size Size of the registry.\\n event CiphernodeRemoved(\\n address indexed node,\\n uint256 index,\\n uint256 numNodes,\\n uint256 size\\n );\\n\\n function isCiphernodeEligible(address ciphernode) external returns (bool);\\n\\n /// @notice Initiates the committee selection process for a specified E3.\\n /// @dev This function MUST revert when not called by the Enclave contract.\\n /// @param e3Id ID of the E3 for which to select the committee.\\n /// @param filter The address of the filter responsible for the committee selection process.\\n /// @param threshold The M/N threshold for the committee.\\n /// @return success True if committee selection was successfully initiated.\\n function requestCommittee(\\n uint256 e3Id,\\n address filter,\\n uint32[2] calldata threshold\\n ) external returns (bool success);\\n\\n /// @notice Publishes the public key resulting from the committee selection process.\\n /// @dev This function MUST revert if not called by the previously selected filter.\\n /// @param e3Id ID of the E3 for which to select the committee.\\n /// @param publicKey The hash of the public key generated by the given committee.\\n function publishCommittee(\\n uint256 e3Id,\\n bytes calldata proof,\\n bytes calldata publicKey\\n ) external;\\n\\n /// @notice This function should be called by the Enclave contract to get the public key of a committee.\\n /// @dev This function MUST revert if no committee has been requested for the given E3.\\n /// @dev This function MUST revert if the committee has not yet published a public key.\\n /// @param e3Id ID of the E3 for which to get the committee public key.\\n /// @return publicKeyHash The hash of the public key of the given committee.\\n function committeePublicKey(\\n uint256 e3Id\\n ) external view returns (bytes32 publicKeyHash);\\n}\\n\",\"keccak256\":\"0xe24e6322e8c6fc83461edfbdbedb409e243f1c4e79021a74585cfe875c225aa2\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/IDecryptionVerifier.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.8.27;\\n\\ninterface IDecryptionVerifier {\\n /// @notice This function should be called by the Enclave contract to verify the\\n /// decryption of output of a computation.\\n /// @param e3Id ID of the E3.\\n /// @param plaintextOutputHash The keccak256 hash of the plaintext output to be verified.\\n /// @param proof ABI encoded proof of the given output hash.\\n /// @return success Whether or not the plaintextOutputHash was successfully verified.\\n function verify(\\n uint256 e3Id,\\n bytes32 plaintextOutputHash,\\n bytes memory proof\\n ) external view returns (bool success);\\n}\\n\",\"keccak256\":\"0xb92991a581d3c18cdc273497687ec1c6e3016674314f21fe56917aece5d10863\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/IE3.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.8.27;\\n\\nimport { IInputValidator } from \\\"./IInputValidator.sol\\\";\\nimport { IE3Program } from \\\"./IE3Program.sol\\\";\\nimport { IDecryptionVerifier } from \\\"./IDecryptionVerifier.sol\\\";\\n\\n/// @title E3 struct\\n/// @notice This struct represents an E3 computation.\\n/// @param threshold M/N threshold for the committee.\\n/// @param requestBlock Block number when the E3 was requested.\\n/// @param startWindow Start window for the computation: index zero is minimum, index 1 is the maxium.\\n/// @param duration Duration of the E3.\\n/// @param expiration Timestamp when committee duties expire.\\n/// @param e3Program Address of the E3 Program contract.\\n/// @param computeProvider Address of the compute provider contract.\\n/// @param inputValidator Address of the input validator contract.\\n/// @param decryptionVerifier Address of the output verifier contract.\\n/// @param committeeId ID of the selected committee.\\n/// @param ciphertextOutput Encrypted output data.\\n/// @param plaintextOutput Decrypted output data.\\nstruct E3 {\\n uint256 seed;\\n uint32[2] threshold;\\n uint256 requestBlock;\\n uint256[2] startWindow;\\n uint256 duration;\\n uint256 expiration;\\n bytes32 encryptionSchemeId;\\n IE3Program e3Program;\\n bytes e3ProgramParams;\\n IInputValidator inputValidator;\\n IDecryptionVerifier decryptionVerifier;\\n bytes32 committeePublicKey;\\n bytes32 ciphertextOutput;\\n bytes plaintextOutput;\\n}\\n\",\"keccak256\":\"0x16f12d3e46b12fcbff721eb8c358324fd400c95b40d57ed06b05e7afd590811e\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/IE3Program.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.8.27;\\n\\nimport { IInputValidator } from \\\"./IInputValidator.sol\\\";\\n\\ninterface IE3Program {\\n /// @notice This function should be called by the Enclave contract to validate the computation parameters.\\n /// @param e3Id ID of the E3.\\n /// @param seed Seed for the computation.\\n /// @param e3ProgramParams ABI encoded computation parameters.\\n /// @param computeProviderParams ABI encoded compute provider parameters.\\n /// @return encryptionSchemeId ID of the encryption scheme to be used for the computation.\\n /// @return inputValidator The input validator to be used for the computation.\\n function validate(\\n uint256 e3Id,\\n uint256 seed,\\n bytes calldata e3ProgramParams,\\n bytes calldata computeProviderParams\\n )\\n external\\n returns (bytes32 encryptionSchemeId, IInputValidator inputValidator);\\n\\n /// @notice This function should be called by the Enclave contract to verify the decrypted output of an E3.\\n /// @param e3Id ID of the E3.\\n /// @param ciphertextOutputHash The keccak256 hash of output data to be verified.\\n /// @param proof ABI encoded data to verify the ciphertextOutputHash.\\n /// @return success Whether the output data is valid.\\n function verify(\\n uint256 e3Id,\\n bytes32 ciphertextOutputHash,\\n bytes memory proof\\n ) external returns (bool success);\\n}\\n\",\"keccak256\":\"0xd60e92b5b6498daf0b7f1238d354156c67d25c03caaaabbc601368e9e4a295b2\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/IEnclave.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.8.27;\\n\\nimport { E3, IE3Program } from \\\"./IE3.sol\\\";\\n\\ninterface IEnclave {\\n ////////////////////////////////////////////////////////////\\n // //\\n // Events //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n /// @notice This event MUST be emitted when an Encrypted Execution Environment (E3) is successfully requested.\\n /// @param e3Id ID of the E3.\\n /// @param e3 Details of the E3.\\n /// @param filter Address of the pool of nodes from which the Cipher Node committee was selected.\\n /// @param e3Program Address of the Computation module selected.\\n event E3Requested(\\n uint256 e3Id,\\n E3 e3,\\n address filter,\\n IE3Program indexed e3Program\\n );\\n\\n /// @notice This event MUST be emitted when an Encrypted Execution Environment (E3) is successfully activated.\\n /// @param e3Id ID of the E3.\\n /// @param expiration Timestamp when committee duties expire.\\n /// @param committeePublicKey Public key of the committee.\\n event E3Activated(\\n uint256 e3Id,\\n uint256 expiration,\\n bytes committeePublicKey\\n );\\n\\n /// @notice This event MUST be emitted when an input to an Encrypted Execution Environment (E3) is\\n /// successfully published.\\n /// @param e3Id ID of the E3.\\n /// @param data ABI encoded input data.\\n event InputPublished(\\n uint256 indexed e3Id,\\n bytes data,\\n uint256 inputHash,\\n uint256 index\\n );\\n\\n /// @notice This event MUST be emitted when the plaintext output of an Encrypted Execution Environment (E3)\\n /// is successfully published.\\n /// @param e3Id ID of the E3.\\n /// @param plaintextOutput ABI encoded plaintext output.\\n event PlaintextOutputPublished(uint256 indexed e3Id, bytes plaintextOutput);\\n\\n /// @notice This event MUST be emitted when the ciphertext output of an Encrypted Execution Environment (E3)\\n /// is successfully published.\\n /// @param e3Id ID of the E3.\\n /// @param ciphertextOutput ABI encoded ciphertext output.\\n event CiphertextOutputPublished(\\n uint256 indexed e3Id,\\n bytes ciphertextOutput\\n );\\n\\n /// @notice This event MUST be emitted any time the `maxDuration` is set.\\n /// @param maxDuration The maximum duration of a computation in seconds.\\n event MaxDurationSet(uint256 maxDuration);\\n\\n /// @notice This event MUST be emitted any time the CiphernodeRegistry is set.\\n /// @param ciphernodeRegistry The address of the CiphernodeRegistry contract.\\n event CiphernodeRegistrySet(address ciphernodeRegistry);\\n\\n /// @notice The event MUST be emitted any time an encryption scheme is enabled.\\n /// @param encryptionSchemeId The ID of the encryption scheme that was enabled.\\n event EncryptionSchemeEnabled(bytes32 encryptionSchemeId);\\n\\n /// @notice This event MUST be emitted any time an encryption scheme is disabled.\\n /// @param encryptionSchemeId The ID of the encryption scheme that was disabled.\\n event EncryptionSchemeDisabled(bytes32 encryptionSchemeId);\\n\\n /// @notice This event MUST be emitted any time a E3 Program is enabled.\\n /// @param e3Program The address of the E3 Program.\\n event E3ProgramEnabled(IE3Program e3Program);\\n\\n /// @notice This event MUST be emitted any time a E3 Program is disabled.\\n /// @param e3Program The address of the E3 Program.\\n event E3ProgramDisabled(IE3Program e3Program);\\n\\n ////////////////////////////////////////////////////////////\\n // //\\n // Core Entrypoints //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n /// @notice This function should be called to request a computation within an Encrypted Execution Environment (E3).\\n /// @dev This function MUST emit the E3Requested event.\\n /// @param filter IDs of the pool of nodes from which to select the committee.\\n /// @param threshold The M/N threshold for the committee.\\n /// @param duration The duration of the computation in seconds.\\n /// @param e3Program Address of the E3 Program.\\n /// @param e3ProgramParams ABI encoded computation parameters.\\n /// @param computeProviderParams ABI encoded compute provider parameters.\\n /// @return e3Id ID of the E3.\\n /// @return e3 The E3 struct.\\n function request(\\n address filter,\\n uint32[2] calldata threshold,\\n uint256[2] calldata startWindow,\\n uint256 duration,\\n IE3Program e3Program,\\n bytes memory e3ProgramParams,\\n bytes memory computeProviderParams\\n ) external payable returns (uint256 e3Id, E3 memory e3);\\n\\n /// @notice This function should be called to activate an Encrypted Execution Environment (E3) once it has been\\n /// initialized and is ready for input.\\n /// @dev This function MUST emit the E3Activated event.\\n /// @dev This function MUST revert if the given E3 has not yet been requested.\\n /// @dev This function MUST revert if the selected node committee has not yet published a public key.\\n /// @param e3Id ID of the E3.\\n /// @param publicKey Public key of the committee.\\n /// @return success True if the E3 was successfully activated.\\n function activate(\\n uint256 e3Id,\\n bytes memory publicKey\\n ) external returns (bool success);\\n\\n /// @notice This function should be called to publish input data for Encrypted Execution Environment (E3).\\n /// @dev This function MUST revert if the E3 is not yet activated.\\n /// @dev This function MUST emit the InputPublished event.\\n /// @param e3Id ID of the E3.\\n /// @param data ABI encoded input data to publish.\\n /// @return success True if the input was successfully published.\\n function publishInput(\\n uint256 e3Id,\\n bytes calldata data\\n ) external returns (bool success);\\n\\n /// @notice This function should be called to publish output data for an Encrypted Execution Environment (E3).\\n /// @dev This function MUST emit the CiphertextOutputPublished event.\\n /// @param e3Id ID of the E3.\\n /// @param ciphertextOutput ABI encoded output data to verify.\\n /// @param proof ABI encoded data to verify the ciphertextOutput.\\n /// @return success True if the output was successfully published.\\n function publishCiphertextOutput(\\n uint256 e3Id,\\n bytes memory ciphertextOutput,\\n bytes memory proof\\n ) external returns (bool success);\\n\\n /// @notice This function publishes the plaintext output of an Encrypted Execution Environment (E3).\\n /// @dev This function MUST revert if the output has not been published.\\n /// @dev This function MUST emit the PlaintextOutputPublished event.\\n /// @param e3Id ID of the E3.\\n /// @param plaintextOutput ABI encoded plaintext output.\\n /// @param proof ABI encoded data to verify the plaintextOutput.\\n function publishPlaintextOutput(\\n uint256 e3Id,\\n bytes memory plaintextOutput,\\n bytes memory proof\\n ) external returns (bool success);\\n\\n ////////////////////////////////////////////////////////////\\n // //\\n // Set Functions //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n /// @notice This function should be called to set the maximum duration of requested computations.\\n /// @param _maxDuration The maximum duration of a computation in seconds.\\n /// @return success True if the max duration was successfully set.\\n function setMaxDuration(\\n uint256 _maxDuration\\n ) external returns (bool success);\\n\\n ////////////////////////////////////////////////////////////\\n // //\\n // Get Functions //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n /// @notice This function should be called to retrieve the details of an Encrypted Execution Environment (E3).\\n /// @dev This function MUST revert if the E3 does not exist.\\n /// @param e3Id ID of the E3.\\n /// @return e3 The struct representing the requested E3.\\n function getE3(uint256 e3Id) external view returns (E3 memory e3);\\n\\n /// @notice This function returns root of the input merkle tree for a given E3.\\n /// @dev This function MUST revert if the E3 does not exist.\\n /// @param e3Id ID of the E3.\\n /// @return root The root of the input merkle tree.\\n function getInputRoot(uint256 e3Id) external view returns (uint256 root);\\n}\\n\",\"keccak256\":\"0xb1c9cd24aeb1dbf988555945ae532860c8a60a874f19020e48e29c9e3e5ebb64\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/IInputValidator.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.8.27;\\n\\ninterface IInputValidator {\\n /// @notice This function should be called by the Enclave contract to validate the\\n /// input of a computation.\\n /// @param sender The account that is submitting the input.\\n /// @param data The input to be verified.\\n /// @return input The decoded, policy-approved application payload.\\n function validate(\\n address sender,\\n bytes memory data\\n ) external returns (bytes memory input);\\n}\\n\",\"keccak256\":\"0x20d4016bd59c317c5571cfe6c3e8f46cbabddc0b926dc64019eeae8d29788653\",\"license\":\"LGPL-3.0-only\"},\"poseidon-solidity/PoseidonT3.sol\":{\"content\":\"/// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.0;\\n\\nlibrary PoseidonT3 {\\n uint constant M00 = 0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b;\\n uint constant M01 = 0x2969f27eed31a480b9c36c764379dbca2cc8fdd1415c3dded62940bcde0bd771;\\n uint constant M02 = 0x143021ec686a3f330d5f9e654638065ce6cd79e28c5b3753326244ee65a1b1a7;\\n uint constant M10 = 0x16ed41e13bb9c0c66ae119424fddbcbc9314dc9fdbdeea55d6c64543dc4903e0;\\n uint constant M11 = 0x2e2419f9ec02ec394c9871c832963dc1b89d743c8c7b964029b2311687b1fe23;\\n uint constant M12 = 0x176cc029695ad02582a70eff08a6fd99d057e12e58e7d7b6b16cdfabc8ee2911;\\n\\n // See here for a simplified implementation: https://github.com/vimwitch/poseidon-solidity/blob/e57becdabb65d99fdc586fe1e1e09e7108202d53/contracts/Poseidon.sol#L40\\n // Inspired by: https://github.com/iden3/circomlibjs/blob/v0.0.8/src/poseidon_slow.js\\n function hash(uint[2] memory) public pure returns (uint) {\\n assembly {\\n let F := 21888242871839275222246405745257275088548364400416034343698204186575808495617\\n let M20 := 0x2b90bba00fca0589f617e7dcbfe82e0df706ab640ceb247b791a93b74e36736d\\n let M21 := 0x101071f0032379b697315876690f053d148d4e109f5fb065c8aacc55a0f89bfa\\n let M22 := 0x19a3fc0a56702bf417ba7fee3802593fa644470307043f7773279cd71d25d5e0\\n\\n // load the inputs from memory\\n let state1 := add(mod(mload(0x80), F), 0x00f1445235f2148c5986587169fc1bcd887b08d4d00868df5696fff40956e864)\\n let state2 := add(mod(mload(0xa0), F), 0x08dff3487e8ac99e1f29a058d0fa80b930c728730b7ab36ce879f3890ecf73f5)\\n let scratch0 := mulmod(state1, state1, F)\\n state1 := mulmod(mulmod(scratch0, scratch0, F), state1, F)\\n scratch0 := mulmod(state2, state2, F)\\n state2 := mulmod(mulmod(scratch0, scratch0, F), state2, F)\\n scratch0 := add(\\n 0x2f27be690fdaee46c3ce28f7532b13c856c35342c84bda6e20966310fadc01d0,\\n add(add(15452833169820924772166449970675545095234312153403844297388521437673434406763, mulmod(state1, M10, F)), mulmod(state2, M20, F))\\n )\\n let scratch1 := add(\\n 0x2b2ae1acf68b7b8d2416bebf3d4f6234b763fe04b8043ee48b8327bebca16cf2,\\n add(add(18674271267752038776579386132900109523609358935013267566297499497165104279117, mulmod(state1, M11, F)), mulmod(state2, M21, F))\\n )\\n let scratch2 := add(\\n 0x0319d062072bef7ecca5eac06f97d4d55952c175ab6b03eae64b44c7dbf11cfa,\\n add(add(14817777843080276494683266178512808687156649753153012854386334860566696099579, mulmod(state1, M12, F)), mulmod(state2, M22, F))\\n )\\n let state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := mulmod(scratch1, scratch1, F)\\n scratch1 := mulmod(mulmod(state0, state0, F), scratch1, F)\\n state0 := mulmod(scratch2, scratch2, F)\\n scratch2 := mulmod(mulmod(state0, state0, F), scratch2, F)\\n state0 := add(0x28813dcaebaeaa828a376df87af4a63bc8b7bf27ad49c6298ef7b387bf28526d, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x2727673b2ccbc903f181bf38e1c1d40d2033865200c352bc150928adddf9cb78, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x234ec45ca27727c2e74abd2b2a1494cd6efbd43e340587d6b8fb9e31e65cc632, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := mulmod(state1, state1, F)\\n state1 := mulmod(mulmod(scratch0, scratch0, F), state1, F)\\n scratch0 := mulmod(state2, state2, F)\\n state2 := mulmod(mulmod(scratch0, scratch0, F), state2, F)\\n scratch0 := add(0x15b52534031ae18f7f862cb2cf7cf760ab10a8150a337b1ccd99ff6e8797d428, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x0dc8fad6d9e4b35f5ed9a3d186b79ce38e0e8a8d1b58b132d701d4eecf68d1f6, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x1bcd95ffc211fbca600f705fad3fb567ea4eb378f62e1fec97805518a47e4d9c, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := mulmod(scratch1, scratch1, F)\\n scratch1 := mulmod(mulmod(state0, state0, F), scratch1, F)\\n state0 := mulmod(scratch2, scratch2, F)\\n scratch2 := mulmod(mulmod(state0, state0, F), scratch2, F)\\n state0 := add(0x10520b0ab721cadfe9eff81b016fc34dc76da36c2578937817cb978d069de559, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x1f6d48149b8e7f7d9b257d8ed5fbbaf42932498075fed0ace88a9eb81f5627f6, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x1d9655f652309014d29e00ef35a2089bfff8dc1c816f0dc9ca34bdb5460c8705, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x04df5a56ff95bcafb051f7b1cd43a99ba731ff67e47032058fe3d4185697cc7d, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x0672d995f8fff640151b3d290cedaf148690a10a8c8424a7f6ec282b6e4be828, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x099952b414884454b21200d7ffafdd5f0c9a9dcc06f2708e9fc1d8209b5c75b9, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x052cba2255dfd00c7c483143ba8d469448e43586a9b4cd9183fd0e843a6b9fa6, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x0b8badee690adb8eb0bd74712b7999af82de55707251ad7716077cb93c464ddc, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x119b1590f13307af5a1ee651020c07c749c15d60683a8050b963d0a8e4b2bdd1, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x03150b7cd6d5d17b2529d36be0f67b832c4acfc884ef4ee5ce15be0bfb4a8d09, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x2cc6182c5e14546e3cf1951f173912355374efb83d80898abe69cb317c9ea565, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x005032551e6378c450cfe129a404b3764218cadedac14e2b92d2cd73111bf0f9, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x233237e3289baa34bb147e972ebcb9516469c399fcc069fb88f9da2cc28276b5, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x05c8f4f4ebd4a6e3c980d31674bfbe6323037f21b34ae5a4e80c2d4c24d60280, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x0a7b1db13042d396ba05d818a319f25252bcf35ef3aeed91ee1f09b2590fc65b, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x2a73b71f9b210cf5b14296572c9d32dbf156e2b086ff47dc5df542365a404ec0, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x1ac9b0417abcc9a1935107e9ffc91dc3ec18f2c4dbe7f22976a760bb5c50c460, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x12c0339ae08374823fabb076707ef479269f3e4d6cb104349015ee046dc93fc0, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x0b7475b102a165ad7f5b18db4e1e704f52900aa3253baac68246682e56e9a28e, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x037c2849e191ca3edb1c5e49f6e8b8917c843e379366f2ea32ab3aa88d7f8448, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x05a6811f8556f014e92674661e217e9bd5206c5c93a07dc145fdb176a716346f, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x29a795e7d98028946e947b75d54e9f044076e87a7b2883b47b675ef5f38bd66e, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x20439a0c84b322eb45a3857afc18f5826e8c7382c8a1585c507be199981fd22f, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x2e0ba8d94d9ecf4a94ec2050c7371ff1bb50f27799a84b6d4a2a6f2a0982c887, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x143fd115ce08fb27ca38eb7cce822b4517822cd2109048d2e6d0ddcca17d71c8, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x0c64cbecb1c734b857968dbbdcf813cdf8611659323dbcbfc84323623be9caf1, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x028a305847c683f646fca925c163ff5ae74f348d62c2b670f1426cef9403da53, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x2e4ef510ff0b6fda5fa940ab4c4380f26a6bcb64d89427b824d6755b5db9e30c, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x0081c95bc43384e663d79270c956ce3b8925b4f6d033b078b96384f50579400e, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x2ed5f0c91cbd9749187e2fade687e05ee2491b349c039a0bba8a9f4023a0bb38, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x30509991f88da3504bbf374ed5aae2f03448a22c76234c8c990f01f33a735206, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x1c3f20fd55409a53221b7c4d49a356b9f0a1119fb2067b41a7529094424ec6ad, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x10b4e7f3ab5df003049514459b6e18eec46bb2213e8e131e170887b47ddcb96c, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x2a1982979c3ff7f43ddd543d891c2abddd80f804c077d775039aa3502e43adef, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x1c74ee64f15e1db6feddbead56d6d55dba431ebc396c9af95cad0f1315bd5c91, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x07533ec850ba7f98eab9303cace01b4b9e4f2e8b82708cfa9c2fe45a0ae146a0, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x21576b438e500449a151e4eeaf17b154285c68f42d42c1808a11abf3764c0750, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x2f17c0559b8fe79608ad5ca193d62f10bce8384c815f0906743d6930836d4a9e, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x2d477e3862d07708a79e8aae946170bc9775a4201318474ae665b0b1b7e2730e, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x162f5243967064c390e095577984f291afba2266c38f5abcd89be0f5b2747eab, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x2b4cb233ede9ba48264ecd2c8ae50d1ad7a8596a87f29f8a7777a70092393311, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x2c8fbcb2dd8573dc1dbaf8f4622854776db2eece6d85c4cf4254e7c35e03b07a, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x1d6f347725e4816af2ff453f0cd56b199e1b61e9f601e9ade5e88db870949da9, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x204b0c397f4ebe71ebc2d8b3df5b913df9e6ac02b68d31324cd49af5c4565529, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x0c4cb9dc3c4fd8174f1149b3c63c3c2f9ecb827cd7dc25534ff8fb75bc79c502, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x174ad61a1448c899a25416474f4930301e5c49475279e0639a616ddc45bc7b54, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x1a96177bcf4d8d89f759df4ec2f3cde2eaaa28c177cc0fa13a9816d49a38d2ef, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x066d04b24331d71cd0ef8054bc60c4ff05202c126a233c1a8242ace360b8a30a, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x2a4c4fc6ec0b0cf52195782871c6dd3b381cc65f72e02ad527037a62aa1bd804, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x13ab2d136ccf37d447e9f2e14a7cedc95e727f8446f6d9d7e55afc01219fd649, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x1121552fca26061619d24d843dc82769c1b04fcec26f55194c2e3e869acc6a9a, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x00ef653322b13d6c889bc81715c37d77a6cd267d595c4a8909a5546c7c97cff1, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x0e25483e45a665208b261d8ba74051e6400c776d652595d9845aca35d8a397d3, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x29f536dcb9dd7682245264659e15d88e395ac3d4dde92d8c46448db979eeba89, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x2a56ef9f2c53febadfda33575dbdbd885a124e2780bbea170e456baace0fa5be, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x1c8361c78eb5cf5decfb7a2d17b5c409f2ae2999a46762e8ee416240a8cb9af1, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x151aff5f38b20a0fc0473089aaf0206b83e8e68a764507bfd3d0ab4be74319c5, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x04c6187e41ed881dc1b239c88f7f9d43a9f52fc8c8b6cdd1e76e47615b51f100, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x13b37bd80f4d27fb10d84331f6fb6d534b81c61ed15776449e801b7ddc9c2967, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x01a5c536273c2d9df578bfbd32c17b7a2ce3664c2a52032c9321ceb1c4e8a8e4, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x2ab3561834ca73835ad05f5d7acb950b4a9a2c666b9726da832239065b7c3b02, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x1d4d8ec291e720db200fe6d686c0d613acaf6af4e95d3bf69f7ed516a597b646, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x041294d2cc484d228f5784fe7919fd2bb925351240a04b711514c9c80b65af1d, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x154ac98e01708c611c4fa715991f004898f57939d126e392042971dd90e81fc6, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x0b339d8acca7d4f83eedd84093aef51050b3684c88f8b0b04524563bc6ea4da4, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x0955e49e6610c94254a4f84cfbab344598f0e71eaff4a7dd81ed95b50839c82e, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x06746a6156eba54426b9e22206f15abca9a6f41e6f535c6f3525401ea0654626, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x0f18f5a0ecd1423c496f3820c549c27838e5790e2bd0a196ac917c7ff32077fb, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x04f6eeca1751f7308ac59eff5beb261e4bb563583ede7bc92a738223d6f76e13, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x2b56973364c4c4f5c1a3ec4da3cdce038811eb116fb3e45bc1768d26fc0b3758, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x123769dd49d5b054dcd76b89804b1bcb8e1392b385716a5d83feb65d437f29ef, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x2147b424fc48c80a88ee52b91169aacea989f6446471150994257b2fb01c63e9, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x0fdc1f58548b85701a6c5505ea332a29647e6f34ad4243c2ea54ad897cebe54d, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x12373a8251fea004df68abcf0f7786d4bceff28c5dbbe0c3944f685cc0a0b1f2, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x21e4f4ea5f35f85bad7ea52ff742c9e8a642756b6af44203dd8a1f35c1a90035, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x16243916d69d2ca3dfb4722224d4c462b57366492f45e90d8a81934f1bc3b147, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x1efbe46dd7a578b4f66f9adbc88b4378abc21566e1a0453ca13a4159cac04ac2, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x07ea5e8537cf5dd08886020e23a7f387d468d5525be66f853b672cc96a88969a, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x05a8c4f9968b8aa3b7b478a30f9a5b63650f19a75e7ce11ca9fe16c0b76c00bc, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x20f057712cc21654fbfe59bd345e8dac3f7818c701b9c7882d9d57b72a32e83f, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x04a12ededa9dfd689672f8c67fee31636dcd8e88d01d49019bd90b33eb33db69, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x27e88d8c15f37dcee44f1e5425a51decbd136ce5091a6767e49ec9544ccd101a, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x2feed17b84285ed9b8a5c8c5e95a41f66e096619a7703223176c41ee433de4d1, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x1ed7cc76edf45c7c404241420f729cf394e5942911312a0d6972b8bd53aff2b8, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x15742e99b9bfa323157ff8c586f5660eac6783476144cdcadf2874be45466b1a, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x1aac285387f65e82c895fc6887ddf40577107454c6ec0317284f033f27d0c785, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x25851c3c845d4790f9ddadbdb6057357832e2e7a49775f71ec75a96554d67c77, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x15a5821565cc2ec2ce78457db197edf353b7ebba2c5523370ddccc3d9f146a67, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x2411d57a4813b9980efa7e31a1db5966dcf64f36044277502f15485f28c71727, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x002e6f8d6520cd4713e335b8c0b6d2e647e9a98e12f4cd2558828b5ef6cb4c9b, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x2ff7bc8f4380cde997da00b616b0fcd1af8f0e91e2fe1ed7398834609e0315d2, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x00b9831b948525595ee02724471bcd182e9521f6b7bb68f1e93be4febb0d3cbe, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x0a2f53768b8ebf6a86913b0e57c04e011ca408648a4743a87d77adbf0c9c3512, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x00248156142fd0373a479f91ff239e960f599ff7e94be69b7f2a290305e1198d, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x171d5620b87bfb1328cf8c02ab3f0c9a397196aa6a542c2350eb512a2b2bcda9, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x170a4f55536f7dc970087c7c10d6fad760c952172dd54dd99d1045e4ec34a808, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x29aba33f799fe66c2ef3134aea04336ecc37e38c1cd211ba482eca17e2dbfae1, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x1e9bc179a4fdd758fdd1bb1945088d47e70d114a03f6a0e8b5ba650369e64973, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x1dd269799b660fad58f7f4892dfb0b5afeaad869a9c4b44f9c9e1c43bdaf8f09, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x22cdbc8b70117ad1401181d02e15459e7ccd426fe869c7c95d1dd2cb0f24af38, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x0ef042e454771c533a9f57a55c503fcefd3150f52ed94a7cd5ba93b9c7dacefd, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x11609e06ad6c8fe2f287f3036037e8851318e8b08a0359a03b304ffca62e8284, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x1166d9e554616dba9e753eea427c17b7fecd58c076dfe42708b08f5b783aa9af, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x2de52989431a859593413026354413db177fbf4cd2ac0b56f855a888357ee466, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x3006eb4ffc7a85819a6da492f3a8ac1df51aee5b17b8e89d74bf01cf5f71e9ad, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x2af41fbb61ba8a80fdcf6fff9e3f6f422993fe8f0a4639f962344c8225145086, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x119e684de476155fe5a6b41a8ebc85db8718ab27889e85e781b214bace4827c3, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x1835b786e2e8925e188bea59ae363537b51248c23828f047cff784b97b3fd800, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x28201a34c594dfa34d794996c6433a20d152bac2a7905c926c40e285ab32eeb6, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x083efd7a27d1751094e80fefaf78b000864c82eb571187724a761f88c22cc4e7, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x0b6f88a3577199526158e61ceea27be811c16df7774dd8519e079564f61fd13b, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x0ec868e6d15e51d9644f66e1d6471a94589511ca00d29e1014390e6ee4254f5b, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x2af33e3f866771271ac0c9b3ed2e1142ecd3e74b939cd40d00d937ab84c98591, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x0b520211f904b5e7d09b5d961c6ace7734568c547dd6858b364ce5e47951f178, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x0b2d722d0919a1aad8db58f10062a92ea0c56ac4270e822cca228620188a1d40, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x1f790d4d7f8cf094d980ceb37c2453e957b54a9991ca38bbe0061d1ed6e562d4, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x0171eb95dfbf7d1eaea97cd385f780150885c16235a2a6a8da92ceb01e504233, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x0c2d0e3b5fd57549329bf6885da66b9b790b40defd2c8650762305381b168873, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x1162fb28689c27154e5a8228b4e72b377cbcafa589e283c35d3803054407a18d, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x2f1459b65dee441b64ad386a91e8310f282c5a92a89e19921623ef8249711bc0, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x1e6ff3216b688c3d996d74367d5cd4c1bc489d46754eb712c243f70d1b53cfbb, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x01ca8be73832b8d0681487d27d157802d741a6f36cdc2a0576881f9326478875, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x1f7735706ffe9fc586f976d5bdf223dc680286080b10cea00b9b5de315f9650e, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x2522b60f4ea3307640a0c2dce041fba921ac10a3d5f096ef4745ca838285f019, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x23f0bee001b1029d5255075ddc957f833418cad4f52b6c3f8ce16c235572575b, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x2bc1ae8b8ddbb81fcaac2d44555ed5685d142633e9df905f66d9401093082d59, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x0f9406b8296564a37304507b8dba3ed162371273a07b1fc98011fcd6ad72205f, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x2360a8eb0cc7defa67b72998de90714e17e75b174a52ee4acb126c8cd995f0a8, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x15871a5cddead976804c803cbaef255eb4815a5e96df8b006dcbbc2767f88948, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x193a56766998ee9e0a8652dd2f3b1da0362f4f54f72379544f957ccdeefb420f, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x2a394a43934f86982f9be56ff4fab1703b2e63c8ad334834e4309805e777ae0f, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x1859954cfeb8695f3e8b635dcb345192892cd11223443ba7b4166e8876c0d142, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x04e1181763050e58013444dbcb99f1902b11bc25d90bbdca408d3819f4fed32b, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x0fdb253dee83869d40c335ea64de8c5bb10eb82db08b5e8b1f5e5552bfd05f23, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x058cbe8a9a5027bdaa4efb623adead6275f08686f1c08984a9d7c5bae9b4f1c0, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x1382edce9971e186497eadb1aeb1f52b23b4b83bef023ab0d15228b4cceca59a, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x03464990f045c6ee0819ca51fd11b0be7f61b8eb99f14b77e1e6634601d9e8b5, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x23f7bfc8720dc296fff33b41f98ff83c6fcab4605db2eb5aaa5bc137aeb70a58, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x0a59a158e3eec2117e6e94e7f0e9decf18c3ffd5e1531a9219636158bbaf62f2, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x06ec54c80381c052b58bf23b312ffd3ce2c4eba065420af8f4c23ed0075fd07b, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x118872dc832e0eb5476b56648e867ec8b09340f7a7bcb1b4962f0ff9ed1f9d01, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x13d69fa127d834165ad5c7cba7ad59ed52e0b0f0e42d7fea95e1906b520921b1, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x169a177f63ea681270b1c6877a73d21bde143942fb71dc55fd8a49f19f10c77b, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x04ef51591c6ead97ef42f287adce40d93abeb032b922f66ffb7e9a5a7450544d, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x256e175a1dc079390ecd7ca703fb2e3b19ec61805d4f03ced5f45ee6dd0f69ec, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x30102d28636abd5fe5f2af412ff6004f75cc360d3205dd2da002813d3e2ceeb2, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x10998e42dfcd3bbf1c0714bc73eb1bf40443a3fa99bef4a31fd31be182fcc792, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x193edd8e9fcf3d7625fa7d24b598a1d89f3362eaf4d582efecad76f879e36860, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x18168afd34f2d915d0368ce80b7b3347d1c7a561ce611425f2664d7aa51f0b5d, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x29383c01ebd3b6ab0c017656ebe658b6a328ec77bc33626e29e2e95b33ea6111, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x10646d2f2603de39a1f4ae5e7771a64a702db6e86fb76ab600bf573f9010c711, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x0beb5e07d1b27145f575f1395a55bf132f90c25b40da7b3864d0242dcb1117fb, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x16d685252078c133dc0d3ecad62b5c8830f95bb2e54b59abdffbf018d96fa336, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x0a6abd1d833938f33c74154e0404b4b40a555bbbec21ddfafd672dd62047f01a, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x1a679f5d36eb7b5c8ea12a4c2dedc8feb12dffeec450317270a6f19b34cf1860, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x0980fb233bd456c23974d50e0ebfde4726a423eada4e8f6ffbc7592e3f1b93d6, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x161b42232e61b84cbf1810af93a38fc0cece3d5628c9282003ebacb5c312c72b, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x0ada10a90c7f0520950f7d47a60d5e6a493f09787f1564e5d09203db47de1a0b, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x1a730d372310ba82320345a29ac4238ed3f07a8a2b4e121bb50ddb9af407f451, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x2c8120f268ef054f817064c369dda7ea908377feaba5c4dffbda10ef58e8c556, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x1c7c8824f758753fa57c00789c684217b930e95313bcb73e6e7b8649a4968f70, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x2cd9ed31f5f8691c8e39e4077a74faa0f400ad8b491eb3f7b47b27fa3fd1cf77, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x23ff4f9d46813457cf60d92f57618399a5e022ac321ca550854ae23918a22eea, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x09945a5d147a4f66ceece6405dddd9d0af5a2c5103529407dff1ea58f180426d, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x188d9c528025d4c2b67660c6b771b90f7c7da6eaa29d3f268a6dd223ec6fc630, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x3050e37996596b7f81f68311431d8734dba7d926d3633595e0c0d8ddf4f0f47f, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x15af1169396830a91600ca8102c35c426ceae5461e3f95d89d829518d30afd78, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x1da6d09885432ea9a06d9f37f873d985dae933e351466b2904284da3320d8acc, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := add(0x2796ea90d269af29f5f8acf33921124e4e4fad3dbe658945e546ee411ddaa9cb, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x202d7dd1da0f6b4b0325c8b3307742f01e15612ec8e9304a7cb0319e01d32d60, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x096d6790d05bb759156a952ba263d672a2d7f9c788f4c831a29dace4c0f8be5f, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := add(0x054efa1f65b0fce283808965275d877b438da23ce5b13e1963798cb1447d25a4, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x1b162f83d917e93edb3308c29802deb9d8aa690113b2e14864ccf6e18e4165f1, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x21e5241e12564dd6fd9f1cdd2a0de39eedfefc1466cc568ec5ceb745a0506edc, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := mulmod(scratch1, scratch1, F)\\n scratch1 := mulmod(mulmod(state0, state0, F), scratch1, F)\\n state0 := mulmod(scratch2, scratch2, F)\\n scratch2 := mulmod(mulmod(state0, state0, F), scratch2, F)\\n state0 := add(0x1cfb5662e8cf5ac9226a80ee17b36abecb73ab5f87e161927b4349e10e4bdf08, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x0f21177e302a771bbae6d8d1ecb373b62c99af346220ac0129c53f666eb24100, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x1671522374606992affb0dd7f71b12bec4236aede6290546bcef7e1f515c2320, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := mulmod(state1, state1, F)\\n state1 := mulmod(mulmod(scratch0, scratch0, F), state1, F)\\n scratch0 := mulmod(state2, state2, F)\\n state2 := mulmod(mulmod(scratch0, scratch0, F), state2, F)\\n scratch0 := add(0x0fa3ec5b9488259c2eb4cf24501bfad9be2ec9e42c5cc8ccd419d2a692cad870, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\\n scratch1 := add(0x193c0e04e0bd298357cb266c1506080ed36edce85c648cc085e8c57b1ab54bba, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\\n scratch2 := add(0x102adf8ef74735a27e9128306dcbc3c99f6f7291cd406578ce14ea2adaba68f8, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\\n state0 := mulmod(scratch0, scratch0, F)\\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\\n state0 := mulmod(scratch1, scratch1, F)\\n scratch1 := mulmod(mulmod(state0, state0, F), scratch1, F)\\n state0 := mulmod(scratch2, scratch2, F)\\n scratch2 := mulmod(mulmod(state0, state0, F), scratch2, F)\\n state0 := add(0x0fe0af7858e49859e2a54d6f1ad945b1316aa24bfbdd23ae40a6d0cb70c3eab1, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\\n state1 := add(0x216f6717bbc7dedb08536a2220843f4e2da5f1daa9ebdefde8a5ea7344798d22, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\\n state2 := add(0x1da55cc900f0d21f4a3e694391918a1b3c23b2ac773c6b3ef88e2e4228325161, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\\n scratch0 := mulmod(state0, state0, F)\\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\\n scratch0 := mulmod(state1, state1, F)\\n state1 := mulmod(mulmod(scratch0, scratch0, F), state1, F)\\n scratch0 := mulmod(state2, state2, F)\\n state2 := mulmod(mulmod(scratch0, scratch0, F), state2, F)\\n\\n mstore(0x0, mod(add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)), F))\\n\\n return(0, 0x20)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x0102caa303bbc6690508f3615604f7730789ed990058c9513a87ccb30e4835be\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080346102a457601f61284438819003918201601f19168301916001600160401b038311848410176102a9578084926060946040528339810103126102a45780516001600160a01b0381168082036102a45760208301516001600160a01b03811693908490036102a457604090810151600080516020612824833981519152549182901c60ff161594916001600160401b0381168015908161029c575b6001149081610292575b159081610289575b50610278576001600160401b03198116600117600080516020612824833981519152557fba0716ba1ee2ea8ecc4c64119b4537cdb42a99d82acf92af5b87607b8b523552916020918761024d575b50610105610335565b61010d610335565b610116336102bf565b61011e610363565b80600155604051908152a1610131610363565b80151580610238575b1561022457600080546001600160a01b031916821790556040519081527f80052b810d39120cf6c976cca504a21703f585521dc7a41c6d241090e6c579b690602090a1600080516020612804833981519152546001600160a01b03160361020d575b506101b1575b60405161246a908161039a8239f35b68ff0000000000000000196000805160206128248339815191525416600080516020612824833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a16101a2565b61021e90610219610363565b6102bf565b3861019c565b6375ac4eb760e11b60005260045260246000fd5b506000546001600160a01b031681141561013a565b6001600160481b031916680100000000000000011760008051602061282483398151915255386100fc565b63f92ee8a960e01b60005260046000fd5b905015386100ae565b303b1591506100a6565b87915061009c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0316801561031f5760008051602061280483398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b631e4fbdf760e01b600052600060045260246000fd5b60ff6000805160206128248339815191525460401c161561035257565b631afcd79f60e31b60005260046000fd5b600080516020612804833981519152546001600160a01b0316330361038457565b63118cdaa760e01b6000523360045260246000fdfe6080604052600436101561001257600080fd5b60003560e01c80630e092fc314611b3e5780630ef81b2f14611b0957806310bc628114611b095780631794bb3c146118e35780634017daf0146117f6578063406ed35c146117c35780634e92ec63146117355780634fc77264146116955780635314e9fa1461150d5780636db5c8fd146114ef578063715018a6146114565780637edcd7ab146111fd5780638da5cb5b146111b75780638dcdd86b1461119057806393b58f861461099b5780639c8570c814610828578063b3c88d67146107fc578063b74cb2db146107de578063c4ccafa21461079f578063cb64961714610781578063cbd16872146106c8578063cf0f34c4146106aa578063d016b08d14610279578063ddef9ea114610244578063f2fde38b14610219578063fad8e111146101ec5763fd2f3d011461014557600080fd5b346101e75760203660031901126101e7576001600160a01b03610166611ba3565b61016e6123d5565b1680600052600460205260ff604060002054166101d3576020817fb8d368517268f297fff00825d67d098763117d061360d31027be5b2e1a59d46792600052600482526040600020600160ff19825416179055604051908152a1602060405160018152f35b63b29d459560e01b60005260045260246000fd5b600080fd5b346101e75760203660031901126101e757602061020f61020a611ba3565b61234a565b6040519015158152f35b346101e75760203660031901126101e757610242610235611ba3565b61023d6123d5565b6122a4565b005b346101e75760203660031901126101e75760043560005260066020526040806000206001815491015482519182526020820152f35b346101e75761028736611ebe565b61029082611fe8565b60a081016102a18482511515612138565b514281111561069257506102ec6000926001600160a01b0361012085940151169060405194858094819363caf9278560e01b8352336004840152604060248401526044830190611d15565b03925af180156105915760009061060d575b61035a9150733333333C0A88F9BE4fd23ed0536F9B6c427e3B93602060405161032681611c10565b835182850120815285600052600782526040600020548282015260405180958192632b0aac7f60e11b835260048301612276565b0381845af4928315610591576000936105d9575b508360005260076020526040600020610387815461222b565b905560008481526006602052604090207f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000184106103cf576361c0541760e11b60005260046000fd5b836103e5576314b48df160e11b60005260046000fd5b83600052600381016020526040600020546105c857805491600182019283549360ff85116104d257600182018083116104d2576001861b106105b8575b84905585916000905b8582106104e8575050906104416003939261222b565b938483556000526002820160205260406000205584600052016020526040600020558260005260076020526040600020549060001982019182116104d2577f7555a0b1b87fe36304326aed23f5c78102b63922b1141f8df7d4593eff2021dd926104b992604051938493606085526060850190611d15565b91602084015260408301520390a2602060405160018152f35b634e487b7160e01b600052601160045260246000fd5b909260018084861c161460001461059d57602061053c916040519061050c82611c10565b8660005260028801835260406000205482528282015260405180938192632b0aac7f60e11b835260048301612276565b0381855af480156105915760009061055c575b60019150935b019061042b565b6020823d8211610589575b8161057460209383611c2c565b8101031261058657506001905161054f565b80fd5b3d9150610567565b6040513d6000823e3d90fd5b92806001916000526002860160205284604060002055610555565b936105c29061222b565b93610422565b6312c50cad60e11b60005260046000fd5b90926020823d602011610605575b816105f460209383611c2c565b81010312610586575051918461036e565b3d91506105e7565b3d8082843e61061c8184611c2c565b82019160208184031261068a5780519067ffffffffffffffff821161068e570182601f8201121561068a5780519161065383611e5b565b936106616040519586611c2c565b83855260208484010111610586575082916106859160208061035a96019101611cf2565b6102fe565b5080fd5b8280fd5b8363142c294360e31b60005260045260245260446000fd5b346101e75760203660031901126101e757602061020f60043561223a565b346101e75760403660031901126101e7576004356024356001600160a01b0381168091036101e7577ff4041a3f914dac3bc9bf5f003ba41f28dbb84abe42f4e07c76266f5c8ceecb699160209161071d6123d5565b801515828161075f575b6107309161211c565b81600052600883526040600020906001600160a01b0319825416179055604051908152a1602060405160018152f35b60009081526008855260409020546001600160a01b0316821415905082610727565b346101e75760003660031901126101e7576020600254604051908152f35b346101e75760203660031901126101e7576001600160a01b036107c0611ba3565b166000526004602052602060ff604060002054166040519015158152f35b346101e75760003660031901126101e7576020600354604051908152f35b346101e75760203660031901126101e75760043560005260076020526020604060002054604051908152f35b346101e75761083636611eee565b9161084081611fe8565b9160a083016108528382511515612138565b51428111610983575061018083015161096e5760206108a06000956001600160a01b0360e08551858701209701511690604051978880948193632f0e1bbf60e01b83528a8a6004850161216c565b03925af192831561059157602094600094610917575b508161090a916108e77f7cc27e4a5626cbc4f8ba1a927b0448de55e6a114bc87660331270c5109ade0719487612188565b8460005260058752600d6040600020015560405191829187835287830190611d15565b0390a26040519015158152f35b61090a9194509161095e7f7cc27e4a5626cbc4f8ba1a927b0448de55e6a114bc87660331270c5109ade07193873d8911610967575b6109568183611c2c565b810190612154565b949150916108b6565b503d61094c565b50637eb9cea960e11b60005260045260246000fd5b826370c05fb960e11b60005260045260245260446000fd5b6101203660031901126101e7576109b0611ba3565b366064116101e7573660a4116101e75760a43560c435916001600160a01b03831683036101e75760e43567ffffffffffffffff81116101e7576109f7903690600401611e77565b906101043567ffffffffffffffff81116101e757610a19903690600401611e77565b90610a22611f59565b50341561117b5760443563ffffffff8116908181036101e7575063ffffffff610a496121d0565b16111580611165575b1561114757608435606435811015908161113c575b501561112b578315158061111f575b1561110a576001600160a01b038516600052600460205260ff60406000205416156110ec57610b149060025493610aac8561222b565b6002556040805160208101904482528783820152828152610ace606082611c2c565b5190209481518095819263530ebf1f60e11b835289600484015288602484015260806044840152610b026084840187611d15565b83810360031901606485015290611d15565b038160006001600160a01b038c165af190811561059157600093849261109b575b506000848152600860205260409020546001600160a01b0390811692610b5d8685151561211c565b169081156110865760405195610b7287611bf3565b8652604094855198610b84878b611c2c565b6000996024815b6064821061106e575050602089015243878901528651610bab8882611c2c565b6064815b60a4821061105e575050606089015260808801528860a088015260c08701526001600160a01b03891660e087015261010086015261012085015261014084015284610160840152846101808401526020948251610c0c8782611c2c565b8181526101a0850152848152600586528281208451815560208501518290835b89600282106110365750505060018201558385015160028201556060850151825b600281106110215750506080850151600582015560a0850151600682015560c085015160078201556001600160a01b0360e0860151166001600160a01b036008830191166001600160a01b031982541617905561010085015180519067ffffffffffffffff8211610f6257610cc56009840154611bb9565b601f8111610ff0575b508890601f8311600114610f8157600e939291859183610f76575b50508160011b916000199060031b1c19161760098201555b6001600160a01b03610120870151166001600160a01b03600a830191166001600160a01b03198254161790556001600160a01b03610140870151166001600160a01b03600b830191166001600160a01b0319825416179055610160860151600c820155610180860151600d820155016101a085015180519067ffffffffffffffff8211610f62578190610d948454611bb9565b601f8111610f29575b508990601f8311600114610ec6578592610ebb575b50508160011b916000199060031b1c19161790555b80866001600160a01b036084818454169587519485938492639ccb58d560e01b84528c60048501521697886024840152610e03604484016121f4565b5af1908115610eb1578291610e94575b5015610e8557507fe31ba2ed37bce9c2bca28aabe3990572a1694b7a208f61e5cced4471fa33c8e56001600160a01b03610e81959697845191829189835260608b840152610e646060840189611d3a565b958784015216930390a28080519586958652850152830190611d3a565b0390f35b630d8dbe2560e01b8152600490fd5b610eab9150873d8911610967576109568183611c2c565b88610e13565b84513d84823e3d90fd5b015190508a80610db2565b8486528a86209250601f198416865b8c828210610f13575050908460019594939210610efa575b505050811b019055610dc7565b015160001960f88460031b161c191690558a8080610eed565b6001859682939686015181550195019301610ed5565b610f52908587528b8720601f850160051c8101918d8610610f58575b601f0160051c01906121b9565b8b610d9d565b9091508190610f45565b634e487b7160e01b84526041600452602484fd5b015190508b80610ce9565b9060098401855289852091855b8b601f1986168210610fda575050918391600193600e9695601f19811610610fc1575b505050811b016009820155610d01565b015160001960f88460031b161c191690558b8080610fb1565b6001849582939585015181550194019201610f8e565b61101b906009850186528a8620601f850160051c8101918c8610610f5857601f0160051c01906121b9565b8a610cce565b81518382016003015590880190600101610c4d565b829363ffffffff6001939451169063ffffffff8560051b92831b921b19161793019101610c2c565b8135815260209182019101610baf565b6020809161107b846121e3565b815201910190610b8b565b50633ca1cee360e11b60005260045260246000fd5b9091506040813d6040116110e4575b816110b760409383611c2c565b810103126110e05760208151910151936001600160a01b03851685036105865750929088610b35565b8380fd5b3d91506110aa565b6001600160a01b038563295a6a6f60e11b6000521660045260246000fd5b836313b783af60e21b60005260045260246000fd5b50600154841115610a76565b6308594fb760e01b60005260046000fd5b905042111586610a67565b604051633744092160e21b8152604490611163600482016121f4565bfd5b5063ffffffff6111736121d0565b161515610a52565b638c4fcd9360e01b6000523460045260246000fd5b346101e75760003660031901126101e75760206001600160a01b0360005416604051908152f35b346101e75760003660031901126101e75760206001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b346101e75761120b36611eee565b611216839293611fe8565b6112268360a08301511515612138565b61018081015115611441576101a08101515161142c5761127592916001600160a01b03610140602093015116855183870120604051809681948293632f0e1bbf60e01b8452886004850161216c565b03915afa9182156105915760009261140b575b506112938383612188565b806000526005602052600e6040600020019280519367ffffffffffffffff85116113f5576020946112c48254611bb9565b601f81116113c5575b5085601f821160011461133c5791817f02a24c3402076671e129905ba4579d884b1f94ded1c07fc03d26d11b60bca169949261090a94600091611331575b508160011b916000199060031b1c19161790555b60405191829187835287830190611d15565b90508301518961130b565b601f1982169083600052806000209160005b8181106113ae57509261090a9492600192827f02a24c3402076671e129905ba4579d884b1f94ded1c07fc03d26d11b60bca169989610611395575b5050811b01905561131f565b85015160001960f88460031b161c191690558980611389565b91928960018192868a01518155019401920161134e565b6113ef908360005287600020601f840160051c810191898510610f5857601f0160051c01906121b9565b866112cd565b634e487b7160e01b600052604160045260246000fd5b61142591925060203d602011610967576109568183611c2c565b9083611288565b826360ec327960e01b60005260045260246000fd5b8263032c20ef60e21b60005260045260246000fd5b346101e75760003660031901126101e75761146f6123d5565b60006001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031981167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101e75760003660031901126101e7576020600154604051908152f35b346101e75761151b36611ebe565b9061152581611fe8565b9060a08201516116815760608201805151421061167057602042915101511061165f5760249160206001600160a01b036000541660405194858092630e82f3b760e41b82528660048301525afa9283156105915760009361162b575b50835192602085019384200361161a57608001514201918242116104d2577f50df9e2c9fc5a7f4a07e403fa0300b88fcc8c6943bdff4b8ae71f55b7fd95f899361160c918360005260056020528460066040600020015581519020836000526005602052600c6040600020015560405193849384526020840152606060408401526060830190611d15565b0390a1602060405160018152f35b630d8dbe2560e01b60005260046000fd5b9092506020813d602011611657575b8161164760209383611c2c565b810103126101e757519184611581565b3d915061163a565b633d82a7cd60e11b60005260046000fd5b63a0750b5160e01b60005260046000fd5b633e26347b60e21b60005260045260246000fd5b346101e75760203660031901126101e7576001600160a01b036116b6611ba3565b6116be6123d5565b1680600052600460205260ff6040600020541615611721576020817f56070b80bd617fcd2f7a284861edb488830a38f9dedcd77b2cb2f4eac17743e79260005260048252604060002060ff198154169055604051908152a1602060405160018152f35b6321ac7c5f60e01b60005260045260246000fd5b346101e75760203660031901126101e7577f104eb329a192aef26eddea07c2af5ad2587792e62b37ed4045b6ba59bc5540fc60206004356117746123d5565b8060005260088252611796816001600160a01b0360406000205416151561211c565b806000526008825260406000206001600160a01b03198154169055604051908152a1602060405160018152f35b346101e75760203660031901126101e757610e816117e2600435611fe8565b604051918291602083526020830190611d3a565b346101e75760203660031901126101e757600435600052600560205260206040600020610e8181549160028101546005820154916006810154926007820154936118bd6001600160a01b0360088501541661185360098601611c4e565b906001600160a01b03600a87015416976001600160a01b03600b8801541694600c88015496611889600e600d8b01549a01611c4e565b996040519e8f9e8f908152015260408d015260608c015260808b015260a08a015261018060c08a0152610180890190611d15565b9460e0880152610100870152610120860152610140850152838203610160850152611d15565b346101e75760603660031901126101e7576118fc611ba3565b602435906001600160a01b03821682036101e7577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c16159267ffffffffffffffff821680159081611b01575b6001149081611af7575b159081611aee575b50611add5767ffffffffffffffff1982166001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00556119cc9184611a9e575b506119aa61241d565b6119b261241d565b6119bb336122a4565b6119c660443561223a565b5061234a565b506001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054166001600160a01b03821603611a8c575b50611a0f57005b68ff0000000000000000197ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b611a989061023d6123d5565b81611a08565b68ffffffffffffffffff191668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055846119a1565b63f92ee8a960e01b60005260046000fd5b90501585611961565b303b159150611959565b85915061194f565b346101e75760203660031901126101e757600435600052600860205260206001600160a01b0360406000205416604051908152f35b346101e75760203660031901126101e757600435806000526005602052611b78816001600160a01b03600860406000200154161515611f3d565b6000526006602052600260406000206001810154600052016020526020604060002054604051908152f35b600435906001600160a01b03821682036101e757565b90600182811c92168015611be9575b6020831014611bd357565b634e487b7160e01b600052602260045260246000fd5b91607f1691611bc8565b6101c0810190811067ffffffffffffffff8211176113f557604052565b6040810190811067ffffffffffffffff8211176113f557604052565b90601f8019910116810190811067ffffffffffffffff8211176113f557604052565b9060405191826000825492611c6284611bb9565b8084529360018116908115611cd05750600114611c89575b50611c8792500383611c2c565b565b90506000929192526020600020906000915b818310611cb4575050906020611c879282010138611c7a565b6020919350806001915483858901015201910190918492611c9b565b905060209250611c8794915060ff191682840152151560051b82010138611c7a565b60005b838110611d055750506000910152565b8181015183820152602001611cf5565b90602091611d2e81518092818552858086019101611cf2565b601f01601f1916010190565b919091805183526020810151602084016000905b60028210611e3f5750505060408101516060840152606081015192608081016000905b60028210611e29575050611e26929350608082015160c082015260a082015160e082015260c08201516101008201526001600160a01b0360e0830151166101208201526101a0611dd4610100840151610200610140850152610200840190611d15565b926001600160a01b03610120820151166101608401526001600160a01b0361014082015116610180840152610160810151828401526101808101516101c08401520151906101e0818403910152611d15565b90565b6020806001928851815201960191019094611d71565b60208060019263ffffffff865116815201930191019091611d4e565b67ffffffffffffffff81116113f557601f01601f191660200190565b81601f820112156101e757803590611e8e82611e5b565b92611e9c6040519485611c2c565b828452602083830101116101e757816000926020809301838601378301015290565b9060406003198301126101e757600435916024359067ffffffffffffffff82116101e757611e2691600401611e77565b60606003198201126101e7576004359160243567ffffffffffffffff81116101e75782611f1d91600401611e77565b916044359067ffffffffffffffff82116101e757611e2691600401611e77565b15611f455750565b63cd6f4a4f60e01b60005260045260246000fd5b60405190611f6682611bf3565b60606101a0836000815260408051611f7e8282611c2c565b813682376020830152600081830152805190611f9a8183611c2c565b3682378382015260006080820152600060a0820152600060c0820152600060e08201528261010082015260006101208201526000610140820152600061016082015260006101808201520152565b90611ff1611f59565b5081600052600560205260406000209160405161200d81611bf3565b8354815260405163ffffffff6001860154818116835260201c166020820152612037604082611c2c565b6020820152600284015460408201526040518060038601906000905b6002821061210657505050611c8792918161207760406001600160a01b0394611c2c565b606082015260058601546080820152600686015460a0820152600786015460c08201526120f6600e836008890154169760e084019889526120ba60098201611c4e565b61010085015284600a8201541661012085015284600b82015416610140850152600c810154610160850152600d81015461018085015201611c4e565b6101a08201529451161515611f3d565b6001602081928554815201930191019091612053565b156121245750565b6381c4951960e01b60005260045260246000fd5b156121405750565b63166b4d0360e01b60005260045260246000fd5b908160209103126101e7575180151581036101e75790565b611e269392606092825260208201528160408201520190611d15565b156121905750565b604051632f9f8ab960e01b8152602060048201529081906121b5906024830190611d15565b0390fd5b8181106121c4575050565b600081556001016121b9565b60243563ffffffff811681036101e75790565b359063ffffffff821682036101e757565b6024906000905b6002821061220857505050565b60208060019263ffffffff61221c876121e3565b168152019301910190916121fb565b60001981146104d25760010190565b60207fba0716ba1ee2ea8ecc4c64119b4537cdb42a99d82acf92af5b87607b8b523552916122666123d5565b80600155604051908152a1600190565b919060408301926000905b6002821061228e57505050565b6020806001928551815201930191019091612281565b6001600160a01b03168015612334576001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054826001600160a01b03198216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b631e4fbdf760e01b600052600060045260246000fd5b6001600160a01b039061235b6123d5565b16801515806123c0575b156123ac576020817f80052b810d39120cf6c976cca504a21703f585521dc7a41c6d241090e6c579b6926001600160a01b03196000541617600055604051908152a1600190565b6375ac4eb760e11b60005260045260246000fd5b506001600160a01b0360005416811415612365565b6001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416330361240857565b63118cdaa760e01b6000523360045260246000fd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561244c57565b631afcd79f60e31b60005260046000fdfea164736f6c634300081b000a9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00", + "deployedBytecode": "0x6080604052600436101561001257600080fd5b60003560e01c80630e092fc314611b3e5780630ef81b2f14611b0957806310bc628114611b095780631794bb3c146118e35780634017daf0146117f6578063406ed35c146117c35780634e92ec63146117355780634fc77264146116955780635314e9fa1461150d5780636db5c8fd146114ef578063715018a6146114565780637edcd7ab146111fd5780638da5cb5b146111b75780638dcdd86b1461119057806393b58f861461099b5780639c8570c814610828578063b3c88d67146107fc578063b74cb2db146107de578063c4ccafa21461079f578063cb64961714610781578063cbd16872146106c8578063cf0f34c4146106aa578063d016b08d14610279578063ddef9ea114610244578063f2fde38b14610219578063fad8e111146101ec5763fd2f3d011461014557600080fd5b346101e75760203660031901126101e7576001600160a01b03610166611ba3565b61016e6123d5565b1680600052600460205260ff604060002054166101d3576020817fb8d368517268f297fff00825d67d098763117d061360d31027be5b2e1a59d46792600052600482526040600020600160ff19825416179055604051908152a1602060405160018152f35b63b29d459560e01b60005260045260246000fd5b600080fd5b346101e75760203660031901126101e757602061020f61020a611ba3565b61234a565b6040519015158152f35b346101e75760203660031901126101e757610242610235611ba3565b61023d6123d5565b6122a4565b005b346101e75760203660031901126101e75760043560005260066020526040806000206001815491015482519182526020820152f35b346101e75761028736611ebe565b61029082611fe8565b60a081016102a18482511515612138565b514281111561069257506102ec6000926001600160a01b0361012085940151169060405194858094819363caf9278560e01b8352336004840152604060248401526044830190611d15565b03925af180156105915760009061060d575b61035a915073__$75f79a42d9bcbdbb69ad79ebd80f556f39$__602060405161032681611c10565b835182850120815285600052600782526040600020548282015260405180958192632b0aac7f60e11b835260048301612276565b0381845af4928315610591576000936105d9575b508360005260076020526040600020610387815461222b565b905560008481526006602052604090207f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000184106103cf576361c0541760e11b60005260046000fd5b836103e5576314b48df160e11b60005260046000fd5b83600052600381016020526040600020546105c857805491600182019283549360ff85116104d257600182018083116104d2576001861b106105b8575b84905585916000905b8582106104e8575050906104416003939261222b565b938483556000526002820160205260406000205584600052016020526040600020558260005260076020526040600020549060001982019182116104d2577f7555a0b1b87fe36304326aed23f5c78102b63922b1141f8df7d4593eff2021dd926104b992604051938493606085526060850190611d15565b91602084015260408301520390a2602060405160018152f35b634e487b7160e01b600052601160045260246000fd5b909260018084861c161460001461059d57602061053c916040519061050c82611c10565b8660005260028801835260406000205482528282015260405180938192632b0aac7f60e11b835260048301612276565b0381855af480156105915760009061055c575b60019150935b019061042b565b6020823d8211610589575b8161057460209383611c2c565b8101031261058657506001905161054f565b80fd5b3d9150610567565b6040513d6000823e3d90fd5b92806001916000526002860160205284604060002055610555565b936105c29061222b565b93610422565b6312c50cad60e11b60005260046000fd5b90926020823d602011610605575b816105f460209383611c2c565b81010312610586575051918461036e565b3d91506105e7565b3d8082843e61061c8184611c2c565b82019160208184031261068a5780519067ffffffffffffffff821161068e570182601f8201121561068a5780519161065383611e5b565b936106616040519586611c2c565b83855260208484010111610586575082916106859160208061035a96019101611cf2565b6102fe565b5080fd5b8280fd5b8363142c294360e31b60005260045260245260446000fd5b346101e75760203660031901126101e757602061020f60043561223a565b346101e75760403660031901126101e7576004356024356001600160a01b0381168091036101e7577ff4041a3f914dac3bc9bf5f003ba41f28dbb84abe42f4e07c76266f5c8ceecb699160209161071d6123d5565b801515828161075f575b6107309161211c565b81600052600883526040600020906001600160a01b0319825416179055604051908152a1602060405160018152f35b60009081526008855260409020546001600160a01b0316821415905082610727565b346101e75760003660031901126101e7576020600254604051908152f35b346101e75760203660031901126101e7576001600160a01b036107c0611ba3565b166000526004602052602060ff604060002054166040519015158152f35b346101e75760003660031901126101e7576020600354604051908152f35b346101e75760203660031901126101e75760043560005260076020526020604060002054604051908152f35b346101e75761083636611eee565b9161084081611fe8565b9160a083016108528382511515612138565b51428111610983575061018083015161096e5760206108a06000956001600160a01b0360e08551858701209701511690604051978880948193632f0e1bbf60e01b83528a8a6004850161216c565b03925af192831561059157602094600094610917575b508161090a916108e77f7cc27e4a5626cbc4f8ba1a927b0448de55e6a114bc87660331270c5109ade0719487612188565b8460005260058752600d6040600020015560405191829187835287830190611d15565b0390a26040519015158152f35b61090a9194509161095e7f7cc27e4a5626cbc4f8ba1a927b0448de55e6a114bc87660331270c5109ade07193873d8911610967575b6109568183611c2c565b810190612154565b949150916108b6565b503d61094c565b50637eb9cea960e11b60005260045260246000fd5b826370c05fb960e11b60005260045260245260446000fd5b6101203660031901126101e7576109b0611ba3565b366064116101e7573660a4116101e75760a43560c435916001600160a01b03831683036101e75760e43567ffffffffffffffff81116101e7576109f7903690600401611e77565b906101043567ffffffffffffffff81116101e757610a19903690600401611e77565b90610a22611f59565b50341561117b5760443563ffffffff8116908181036101e7575063ffffffff610a496121d0565b16111580611165575b1561114757608435606435811015908161113c575b501561112b578315158061111f575b1561110a576001600160a01b038516600052600460205260ff60406000205416156110ec57610b149060025493610aac8561222b565b6002556040805160208101904482528783820152828152610ace606082611c2c565b5190209481518095819263530ebf1f60e11b835289600484015288602484015260806044840152610b026084840187611d15565b83810360031901606485015290611d15565b038160006001600160a01b038c165af190811561059157600093849261109b575b506000848152600860205260409020546001600160a01b0390811692610b5d8685151561211c565b169081156110865760405195610b7287611bf3565b8652604094855198610b84878b611c2c565b6000996024815b6064821061106e575050602089015243878901528651610bab8882611c2c565b6064815b60a4821061105e575050606089015260808801528860a088015260c08701526001600160a01b03891660e087015261010086015261012085015261014084015284610160840152846101808401526020948251610c0c8782611c2c565b8181526101a0850152848152600586528281208451815560208501518290835b89600282106110365750505060018201558385015160028201556060850151825b600281106110215750506080850151600582015560a0850151600682015560c085015160078201556001600160a01b0360e0860151166001600160a01b036008830191166001600160a01b031982541617905561010085015180519067ffffffffffffffff8211610f6257610cc56009840154611bb9565b601f8111610ff0575b508890601f8311600114610f8157600e939291859183610f76575b50508160011b916000199060031b1c19161760098201555b6001600160a01b03610120870151166001600160a01b03600a830191166001600160a01b03198254161790556001600160a01b03610140870151166001600160a01b03600b830191166001600160a01b0319825416179055610160860151600c820155610180860151600d820155016101a085015180519067ffffffffffffffff8211610f62578190610d948454611bb9565b601f8111610f29575b508990601f8311600114610ec6578592610ebb575b50508160011b916000199060031b1c19161790555b80866001600160a01b036084818454169587519485938492639ccb58d560e01b84528c60048501521697886024840152610e03604484016121f4565b5af1908115610eb1578291610e94575b5015610e8557507fe31ba2ed37bce9c2bca28aabe3990572a1694b7a208f61e5cced4471fa33c8e56001600160a01b03610e81959697845191829189835260608b840152610e646060840189611d3a565b958784015216930390a28080519586958652850152830190611d3a565b0390f35b630d8dbe2560e01b8152600490fd5b610eab9150873d8911610967576109568183611c2c565b88610e13565b84513d84823e3d90fd5b015190508a80610db2565b8486528a86209250601f198416865b8c828210610f13575050908460019594939210610efa575b505050811b019055610dc7565b015160001960f88460031b161c191690558a8080610eed565b6001859682939686015181550195019301610ed5565b610f52908587528b8720601f850160051c8101918d8610610f58575b601f0160051c01906121b9565b8b610d9d565b9091508190610f45565b634e487b7160e01b84526041600452602484fd5b015190508b80610ce9565b9060098401855289852091855b8b601f1986168210610fda575050918391600193600e9695601f19811610610fc1575b505050811b016009820155610d01565b015160001960f88460031b161c191690558b8080610fb1565b6001849582939585015181550194019201610f8e565b61101b906009850186528a8620601f850160051c8101918c8610610f5857601f0160051c01906121b9565b8a610cce565b81518382016003015590880190600101610c4d565b829363ffffffff6001939451169063ffffffff8560051b92831b921b19161793019101610c2c565b8135815260209182019101610baf565b6020809161107b846121e3565b815201910190610b8b565b50633ca1cee360e11b60005260045260246000fd5b9091506040813d6040116110e4575b816110b760409383611c2c565b810103126110e05760208151910151936001600160a01b03851685036105865750929088610b35565b8380fd5b3d91506110aa565b6001600160a01b038563295a6a6f60e11b6000521660045260246000fd5b836313b783af60e21b60005260045260246000fd5b50600154841115610a76565b6308594fb760e01b60005260046000fd5b905042111586610a67565b604051633744092160e21b8152604490611163600482016121f4565bfd5b5063ffffffff6111736121d0565b161515610a52565b638c4fcd9360e01b6000523460045260246000fd5b346101e75760003660031901126101e75760206001600160a01b0360005416604051908152f35b346101e75760003660031901126101e75760206001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b346101e75761120b36611eee565b611216839293611fe8565b6112268360a08301511515612138565b61018081015115611441576101a08101515161142c5761127592916001600160a01b03610140602093015116855183870120604051809681948293632f0e1bbf60e01b8452886004850161216c565b03915afa9182156105915760009261140b575b506112938383612188565b806000526005602052600e6040600020019280519367ffffffffffffffff85116113f5576020946112c48254611bb9565b601f81116113c5575b5085601f821160011461133c5791817f02a24c3402076671e129905ba4579d884b1f94ded1c07fc03d26d11b60bca169949261090a94600091611331575b508160011b916000199060031b1c19161790555b60405191829187835287830190611d15565b90508301518961130b565b601f1982169083600052806000209160005b8181106113ae57509261090a9492600192827f02a24c3402076671e129905ba4579d884b1f94ded1c07fc03d26d11b60bca169989610611395575b5050811b01905561131f565b85015160001960f88460031b161c191690558980611389565b91928960018192868a01518155019401920161134e565b6113ef908360005287600020601f840160051c810191898510610f5857601f0160051c01906121b9565b866112cd565b634e487b7160e01b600052604160045260246000fd5b61142591925060203d602011610967576109568183611c2c565b9083611288565b826360ec327960e01b60005260045260246000fd5b8263032c20ef60e21b60005260045260246000fd5b346101e75760003660031901126101e75761146f6123d5565b60006001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031981167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101e75760003660031901126101e7576020600154604051908152f35b346101e75761151b36611ebe565b9061152581611fe8565b9060a08201516116815760608201805151421061167057602042915101511061165f5760249160206001600160a01b036000541660405194858092630e82f3b760e41b82528660048301525afa9283156105915760009361162b575b50835192602085019384200361161a57608001514201918242116104d2577f50df9e2c9fc5a7f4a07e403fa0300b88fcc8c6943bdff4b8ae71f55b7fd95f899361160c918360005260056020528460066040600020015581519020836000526005602052600c6040600020015560405193849384526020840152606060408401526060830190611d15565b0390a1602060405160018152f35b630d8dbe2560e01b60005260046000fd5b9092506020813d602011611657575b8161164760209383611c2c565b810103126101e757519184611581565b3d915061163a565b633d82a7cd60e11b60005260046000fd5b63a0750b5160e01b60005260046000fd5b633e26347b60e21b60005260045260246000fd5b346101e75760203660031901126101e7576001600160a01b036116b6611ba3565b6116be6123d5565b1680600052600460205260ff6040600020541615611721576020817f56070b80bd617fcd2f7a284861edb488830a38f9dedcd77b2cb2f4eac17743e79260005260048252604060002060ff198154169055604051908152a1602060405160018152f35b6321ac7c5f60e01b60005260045260246000fd5b346101e75760203660031901126101e7577f104eb329a192aef26eddea07c2af5ad2587792e62b37ed4045b6ba59bc5540fc60206004356117746123d5565b8060005260088252611796816001600160a01b0360406000205416151561211c565b806000526008825260406000206001600160a01b03198154169055604051908152a1602060405160018152f35b346101e75760203660031901126101e757610e816117e2600435611fe8565b604051918291602083526020830190611d3a565b346101e75760203660031901126101e757600435600052600560205260206040600020610e8181549160028101546005820154916006810154926007820154936118bd6001600160a01b0360088501541661185360098601611c4e565b906001600160a01b03600a87015416976001600160a01b03600b8801541694600c88015496611889600e600d8b01549a01611c4e565b996040519e8f9e8f908152015260408d015260608c015260808b015260a08a015261018060c08a0152610180890190611d15565b9460e0880152610100870152610120860152610140850152838203610160850152611d15565b346101e75760603660031901126101e7576118fc611ba3565b602435906001600160a01b03821682036101e7577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c16159267ffffffffffffffff821680159081611b01575b6001149081611af7575b159081611aee575b50611add5767ffffffffffffffff1982166001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00556119cc9184611a9e575b506119aa61241d565b6119b261241d565b6119bb336122a4565b6119c660443561223a565b5061234a565b506001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054166001600160a01b03821603611a8c575b50611a0f57005b68ff0000000000000000197ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b611a989061023d6123d5565b81611a08565b68ffffffffffffffffff191668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055846119a1565b63f92ee8a960e01b60005260046000fd5b90501585611961565b303b159150611959565b85915061194f565b346101e75760203660031901126101e757600435600052600860205260206001600160a01b0360406000205416604051908152f35b346101e75760203660031901126101e757600435806000526005602052611b78816001600160a01b03600860406000200154161515611f3d565b6000526006602052600260406000206001810154600052016020526020604060002054604051908152f35b600435906001600160a01b03821682036101e757565b90600182811c92168015611be9575b6020831014611bd357565b634e487b7160e01b600052602260045260246000fd5b91607f1691611bc8565b6101c0810190811067ffffffffffffffff8211176113f557604052565b6040810190811067ffffffffffffffff8211176113f557604052565b90601f8019910116810190811067ffffffffffffffff8211176113f557604052565b9060405191826000825492611c6284611bb9565b8084529360018116908115611cd05750600114611c89575b50611c8792500383611c2c565b565b90506000929192526020600020906000915b818310611cb4575050906020611c879282010138611c7a565b6020919350806001915483858901015201910190918492611c9b565b905060209250611c8794915060ff191682840152151560051b82010138611c7a565b60005b838110611d055750506000910152565b8181015183820152602001611cf5565b90602091611d2e81518092818552858086019101611cf2565b601f01601f1916010190565b919091805183526020810151602084016000905b60028210611e3f5750505060408101516060840152606081015192608081016000905b60028210611e29575050611e26929350608082015160c082015260a082015160e082015260c08201516101008201526001600160a01b0360e0830151166101208201526101a0611dd4610100840151610200610140850152610200840190611d15565b926001600160a01b03610120820151166101608401526001600160a01b0361014082015116610180840152610160810151828401526101808101516101c08401520151906101e0818403910152611d15565b90565b6020806001928851815201960191019094611d71565b60208060019263ffffffff865116815201930191019091611d4e565b67ffffffffffffffff81116113f557601f01601f191660200190565b81601f820112156101e757803590611e8e82611e5b565b92611e9c6040519485611c2c565b828452602083830101116101e757816000926020809301838601378301015290565b9060406003198301126101e757600435916024359067ffffffffffffffff82116101e757611e2691600401611e77565b60606003198201126101e7576004359160243567ffffffffffffffff81116101e75782611f1d91600401611e77565b916044359067ffffffffffffffff82116101e757611e2691600401611e77565b15611f455750565b63cd6f4a4f60e01b60005260045260246000fd5b60405190611f6682611bf3565b60606101a0836000815260408051611f7e8282611c2c565b813682376020830152600081830152805190611f9a8183611c2c565b3682378382015260006080820152600060a0820152600060c0820152600060e08201528261010082015260006101208201526000610140820152600061016082015260006101808201520152565b90611ff1611f59565b5081600052600560205260406000209160405161200d81611bf3565b8354815260405163ffffffff6001860154818116835260201c166020820152612037604082611c2c565b6020820152600284015460408201526040518060038601906000905b6002821061210657505050611c8792918161207760406001600160a01b0394611c2c565b606082015260058601546080820152600686015460a0820152600786015460c08201526120f6600e836008890154169760e084019889526120ba60098201611c4e565b61010085015284600a8201541661012085015284600b82015416610140850152600c810154610160850152600d81015461018085015201611c4e565b6101a08201529451161515611f3d565b6001602081928554815201930191019091612053565b156121245750565b6381c4951960e01b60005260045260246000fd5b156121405750565b63166b4d0360e01b60005260045260246000fd5b908160209103126101e7575180151581036101e75790565b611e269392606092825260208201528160408201520190611d15565b156121905750565b604051632f9f8ab960e01b8152602060048201529081906121b5906024830190611d15565b0390fd5b8181106121c4575050565b600081556001016121b9565b60243563ffffffff811681036101e75790565b359063ffffffff821682036101e757565b6024906000905b6002821061220857505050565b60208060019263ffffffff61221c876121e3565b168152019301910190916121fb565b60001981146104d25760010190565b60207fba0716ba1ee2ea8ecc4c64119b4537cdb42a99d82acf92af5b87607b8b523552916122666123d5565b80600155604051908152a1600190565b919060408301926000905b6002821061228e57505050565b6020806001928551815201930191019091612281565b6001600160a01b03168015612334576001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054826001600160a01b03198216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b631e4fbdf760e01b600052600060045260246000fd5b6001600160a01b039061235b6123d5565b16801515806123c0575b156123ac576020817f80052b810d39120cf6c976cca504a21703f585521dc7a41c6d241090e6c579b6926001600160a01b03196000541617600055604051908152a1600190565b6375ac4eb760e11b60005260045260246000fd5b506001600160a01b0360005416811415612365565b6001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416330361240857565b63118cdaa760e01b6000523360045260246000fd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561244c57565b631afcd79f60e31b60005260046000fdfea164736f6c634300081b000a", "libraries": { "PoseidonT3": "0x3333333C0A88F9BE4fd23ed0536F9B6c427e3B93" }, @@ -1703,7 +1703,7 @@ "label": "ciphernodeRegistry", "offset": 0, "slot": "0", - "type": "t_contract(ICiphernodeRegistry)2534" + "type": "t_contract(ICiphernodeRegistry)2537" }, { "astId": 1384, @@ -1735,7 +1735,7 @@ "label": "e3Programs", "offset": 0, "slot": "4", - "type": "t_mapping(t_contract(IE3Program)2628,t_bool)" + "type": "t_mapping(t_contract(IE3Program)2631,t_bool)" }, { "astId": 1398, @@ -1743,7 +1743,7 @@ "label": "e3s", "offset": 0, "slot": "5", - "type": "t_mapping(t_uint256,t_struct(E3)2594_storage)" + "type": "t_mapping(t_uint256,t_struct(E3)2597_storage)" }, { "astId": 1403, @@ -1767,7 +1767,7 @@ "label": "decryptionVerifiers", "offset": 0, "slot": "8", - "type": "t_mapping(t_bytes32,t_contract(IDecryptionVerifier)2549)" + "type": "t_mapping(t_bytes32,t_contract(IDecryptionVerifier)2552)" } ], "types": { @@ -1798,46 +1798,46 @@ "label": "bytes", "numberOfBytes": "32" }, - "t_contract(ICiphernodeRegistry)2534": { + "t_contract(ICiphernodeRegistry)2537": { "encoding": "inplace", "label": "contract ICiphernodeRegistry", "numberOfBytes": "20" }, - "t_contract(IDecryptionVerifier)2549": { + "t_contract(IDecryptionVerifier)2552": { "encoding": "inplace", "label": "contract IDecryptionVerifier", "numberOfBytes": "20" }, - "t_contract(IE3Program)2628": { + "t_contract(IE3Program)2631": { "encoding": "inplace", "label": "contract IE3Program", "numberOfBytes": "20" }, - "t_contract(IInputValidator)2823": { + "t_contract(IInputValidator)2826": { "encoding": "inplace", "label": "contract IInputValidator", "numberOfBytes": "20" }, - "t_mapping(t_bytes32,t_contract(IDecryptionVerifier)2549)": { + "t_mapping(t_bytes32,t_contract(IDecryptionVerifier)2552)": { "encoding": "mapping", "key": "t_bytes32", "label": "mapping(bytes32 => contract IDecryptionVerifier)", "numberOfBytes": "32", - "value": "t_contract(IDecryptionVerifier)2549" + "value": "t_contract(IDecryptionVerifier)2552" }, - "t_mapping(t_contract(IE3Program)2628,t_bool)": { + "t_mapping(t_contract(IE3Program)2631,t_bool)": { "encoding": "mapping", - "key": "t_contract(IE3Program)2628", + "key": "t_contract(IE3Program)2631", "label": "mapping(contract IE3Program => bool)", "numberOfBytes": "32", "value": "t_bool" }, - "t_mapping(t_uint256,t_struct(E3)2594_storage)": { + "t_mapping(t_uint256,t_struct(E3)2597_storage)": { "encoding": "mapping", "key": "t_uint256", "label": "mapping(uint256 => struct E3)", "numberOfBytes": "32", - "value": "t_struct(E3)2594_storage" + "value": "t_struct(E3)2597_storage" }, "t_mapping(t_uint256,t_struct(LeanIMTData)518_storage)": { "encoding": "mapping", @@ -1853,12 +1853,12 @@ "numberOfBytes": "32", "value": "t_uint256" }, - "t_struct(E3)2594_storage": { + "t_struct(E3)2597_storage": { "encoding": "inplace", "label": "struct E3", "members": [ { - "astId": 2560, + "astId": 2563, "contract": "contracts/Enclave.sol:Enclave", "label": "seed", "offset": 0, @@ -1866,7 +1866,7 @@ "type": "t_uint256" }, { - "astId": 2564, + "astId": 2567, "contract": "contracts/Enclave.sol:Enclave", "label": "threshold", "offset": 0, @@ -1874,7 +1874,7 @@ "type": "t_array(t_uint32)2_storage" }, { - "astId": 2566, + "astId": 2569, "contract": "contracts/Enclave.sol:Enclave", "label": "requestBlock", "offset": 0, @@ -1882,7 +1882,7 @@ "type": "t_uint256" }, { - "astId": 2570, + "astId": 2573, "contract": "contracts/Enclave.sol:Enclave", "label": "startWindow", "offset": 0, @@ -1890,7 +1890,7 @@ "type": "t_array(t_uint256)2_storage" }, { - "astId": 2572, + "astId": 2575, "contract": "contracts/Enclave.sol:Enclave", "label": "duration", "offset": 0, @@ -1898,7 +1898,7 @@ "type": "t_uint256" }, { - "astId": 2574, + "astId": 2577, "contract": "contracts/Enclave.sol:Enclave", "label": "expiration", "offset": 0, @@ -1906,7 +1906,7 @@ "type": "t_uint256" }, { - "astId": 2576, + "astId": 2579, "contract": "contracts/Enclave.sol:Enclave", "label": "encryptionSchemeId", "offset": 0, @@ -1914,15 +1914,15 @@ "type": "t_bytes32" }, { - "astId": 2579, + "astId": 2582, "contract": "contracts/Enclave.sol:Enclave", "label": "e3Program", "offset": 0, "slot": "8", - "type": "t_contract(IE3Program)2628" + "type": "t_contract(IE3Program)2631" }, { - "astId": 2581, + "astId": 2584, "contract": "contracts/Enclave.sol:Enclave", "label": "e3ProgramParams", "offset": 0, @@ -1930,23 +1930,23 @@ "type": "t_bytes_storage" }, { - "astId": 2584, + "astId": 2587, "contract": "contracts/Enclave.sol:Enclave", "label": "inputValidator", "offset": 0, "slot": "10", - "type": "t_contract(IInputValidator)2823" + "type": "t_contract(IInputValidator)2826" }, { - "astId": 2587, + "astId": 2590, "contract": "contracts/Enclave.sol:Enclave", "label": "decryptionVerifier", "offset": 0, "slot": "11", - "type": "t_contract(IDecryptionVerifier)2549" + "type": "t_contract(IDecryptionVerifier)2552" }, { - "astId": 2589, + "astId": 2592, "contract": "contracts/Enclave.sol:Enclave", "label": "committeePublicKey", "offset": 0, @@ -1954,7 +1954,7 @@ "type": "t_bytes32" }, { - "astId": 2591, + "astId": 2594, "contract": "contracts/Enclave.sol:Enclave", "label": "ciphertextOutput", "offset": 0, @@ -1962,7 +1962,7 @@ "type": "t_bytes32" }, { - "astId": 2593, + "astId": 2596, "contract": "contracts/Enclave.sol:Enclave", "label": "plaintextOutput", "offset": 0, diff --git a/packages/evm/deployments/sepolia/NaiveRegistryFilter.json b/packages/evm/deployments/sepolia/NaiveRegistryFilter.json index 386c28533d..e38068c632 100644 --- a/packages/evm/deployments/sepolia/NaiveRegistryFilter.json +++ b/packages/evm/deployments/sepolia/NaiveRegistryFilter.json @@ -1,5 +1,5 @@ { - "address": "0x2c6A6bc9AaD9b34c3ecAfB9924C5F4501bb8b94D", + "address": "0x22f12b41DBb19fe7C7c72566BA403798D946FEF3", "abi": [ { "inputs": [ @@ -297,54 +297,54 @@ "type": "function" } ], - "transactionHash": "0x6dce2bdc9b1f9d1a70f8986d4c8c53f887dcb181dc37d164e1c7cfb8c32fcdd1", + "transactionHash": "0xa5f1477ed13ce30b7501513de14a1fc2d16477f6dff4fe274838426b7fa3cee3", "receipt": { "to": null, "from": "0x8837e47c4Bb520ADE83AAB761C3B60679443af1B", - "contractAddress": "0x2c6A6bc9AaD9b34c3ecAfB9924C5F4501bb8b94D", - "transactionIndex": 135, + "contractAddress": "0x22f12b41DBb19fe7C7c72566BA403798D946FEF3", + "transactionIndex": 148, "gasUsed": "771935", - "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000001000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000800000000000000000000004080000000000000001000000000000000000000000000000000000000000000001000000000000000000000000020000000000000000000000000000000000004000000000000000020000000000002000000000000000000000000000000000000000000000000000000", - "blockHash": "0xca2165eddd8a37d9a1b49f81844ceb4795d92e14626d10a915fc7893cefc60fd", - "transactionHash": "0x6dce2bdc9b1f9d1a70f8986d4c8c53f887dcb181dc37d164e1c7cfb8c32fcdd1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000001000000001000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000002800000000000000000000004080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000004000000000000000020000000000000000000000000000000000000000000000000000000000000000020", + "blockHash": "0x991d9ea05f561d1256896b16f918f2b3c564603a0b6dee93ff9abf06d3bb3be0", + "transactionHash": "0xa5f1477ed13ce30b7501513de14a1fc2d16477f6dff4fe274838426b7fa3cee3", "logs": [ { - "transactionIndex": 135, - "blockNumber": 8332810, - "transactionHash": "0x6dce2bdc9b1f9d1a70f8986d4c8c53f887dcb181dc37d164e1c7cfb8c32fcdd1", - "address": "0x2c6A6bc9AaD9b34c3ecAfB9924C5F4501bb8b94D", + "transactionIndex": 148, + "blockNumber": 8360700, + "transactionHash": "0xa5f1477ed13ce30b7501513de14a1fc2d16477f6dff4fe274838426b7fa3cee3", + "address": "0x22f12b41DBb19fe7C7c72566BA403798D946FEF3", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000008837e47c4bb520ade83aab761c3b60679443af1b" ], "data": "0x", - "logIndex": 251, - "blockHash": "0xca2165eddd8a37d9a1b49f81844ceb4795d92e14626d10a915fc7893cefc60fd" + "logIndex": 231, + "blockHash": "0x991d9ea05f561d1256896b16f918f2b3c564603a0b6dee93ff9abf06d3bb3be0" }, { - "transactionIndex": 135, - "blockNumber": 8332810, - "transactionHash": "0x6dce2bdc9b1f9d1a70f8986d4c8c53f887dcb181dc37d164e1c7cfb8c32fcdd1", - "address": "0x2c6A6bc9AaD9b34c3ecAfB9924C5F4501bb8b94D", + "transactionIndex": 148, + "blockNumber": 8360700, + "transactionHash": "0xa5f1477ed13ce30b7501513de14a1fc2d16477f6dff4fe274838426b7fa3cee3", + "address": "0x22f12b41DBb19fe7C7c72566BA403798D946FEF3", "topics": [ "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 252, - "blockHash": "0xca2165eddd8a37d9a1b49f81844ceb4795d92e14626d10a915fc7893cefc60fd" + "logIndex": 232, + "blockHash": "0x991d9ea05f561d1256896b16f918f2b3c564603a0b6dee93ff9abf06d3bb3be0" } ], - "blockNumber": 8332810, - "cumulativeGasUsed": "15267436", + "blockNumber": 8360700, + "cumulativeGasUsed": "15583856", "status": 1, "byzantium": true }, "args": [ "0x8837e47c4Bb520ADE83AAB761C3B60679443af1B", - "0x78b57cfC6702F90b581914014e2DA4ba8532753C" + "0x4A6701c770c53584b7d781ccC0267152d128bd4E" ], - "numDeployments": 2, + "numDeployments": 3, "solcInputHash": "7505270e9ddb813a3809c10e5d95f372", "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_registry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"ciphernode\",\"type\":\"address\"}],\"name\":\"CiphernodeNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CommitteeAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CommitteeAlreadyPublished\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CommitteeDoesNotExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CommitteeNotPublished\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyRegistry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3\",\"type\":\"uint256\"}],\"name\":\"committees\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"publicKey\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"}],\"name\":\"getCommittee\",\"outputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"nodes\",\"type\":\"address[]\"},{\"internalType\":\"uint32[2]\",\"name\":\"threshold\",\"type\":\"uint32[2]\"},{\"internalType\":\"bytes32\",\"name\":\"publicKey\",\"type\":\"bytes32\"}],\"internalType\":\"struct NaiveRegistryFilter.Committee\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_registry\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"nodes\",\"type\":\"address[]\"},{\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"}],\"name\":\"publishCommittee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"e3Id\",\"type\":\"uint256\"},{\"internalType\":\"uint32[2]\",\"name\":\"threshold\",\"type\":\"uint32[2]\"}],\"name\":\"requestCommittee\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_registry\",\"type\":\"address\"}],\"name\":\"setRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/registry/NaiveRegistryFilter.sol\":\"NaiveRegistryFilter\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":800},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {ContextUpgradeable} from \\\"../utils/ContextUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * The initial owner is set to the address provided by the deployer. This can\\n * later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n /// @custom:storage-location erc7201:openzeppelin.storage.Ownable\\n struct OwnableStorage {\\n address _owner;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Ownable\\\")) - 1)) & ~bytes32(uint256(0xff))\\n bytes32 private constant OwnableStorageLocation = 0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300;\\n\\n function _getOwnableStorage() private pure returns (OwnableStorage storage $) {\\n assembly {\\n $.slot := OwnableStorageLocation\\n }\\n }\\n\\n /**\\n * @dev The caller account is not authorized to perform an operation.\\n */\\n error OwnableUnauthorizedAccount(address account);\\n\\n /**\\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\\n */\\n error OwnableInvalidOwner(address owner);\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\\n */\\n function __Ownable_init(address initialOwner) internal onlyInitializing {\\n __Ownable_init_unchained(initialOwner);\\n }\\n\\n function __Ownable_init_unchained(address initialOwner) internal onlyInitializing {\\n if (initialOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n OwnableStorage storage $ = _getOwnableStorage();\\n return $._owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n if (owner() != _msgSender()) {\\n revert OwnableUnauthorizedAccount(_msgSender());\\n }\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby disabling any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n if (newOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n OwnableStorage storage $ = _getOwnableStorage();\\n address oldOwner = $._owner;\\n $._owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1)) & ~bytes32(uint256(0xff))\\n bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error InvalidInitialization();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any\\n * number of times. This behavior in the constructor can be useful during testing and is not expected to be used in\\n * production.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n // Cache values to avoid duplicated sloads\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n\\n // Allowed calls:\\n // - initialSetup: the contract is not in the initializing state and no previous version was\\n // initialized\\n // - construction: the contract is initialized at version 1 (no reininitialization) and the\\n // current contract is just being deployed\\n bool initialSetup = initialized == 0 && isTopLevelCall;\\n bool construction = initialized == 1 && address(this).code.length == 0;\\n\\n if (!initialSetup && !construction) {\\n revert InvalidInitialization();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert InvalidInitialization();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert InvalidInitialization();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\"},\"contracts/interfaces/ICiphernodeRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.8.27;\\n\\ninterface ICiphernodeRegistry {\\n /// @notice This event MUST be emitted when a committee is selected for an E3.\\n /// @param e3Id ID of the E3 for which the committee was selected.\\n /// @param filter Address of the contract that will coordinate committee selection.\\n /// @param threshold The M/N threshold for the committee.\\n event CommitteeRequested(\\n uint256 indexed e3Id,\\n address filter,\\n uint32[2] threshold\\n );\\n\\n /// @notice This event MUST be emitted when a committee is selected for an E3.\\n /// @param e3Id ID of the E3 for which the committee was selected.\\n /// @param publicKey Public key of the committee.\\n event CommitteePublished(uint256 indexed e3Id, bytes publicKey);\\n\\n /// @notice This event MUST be emitted when `enclave` is set.\\n /// @param enclave Address of the enclave contract.\\n event EnclaveSet(address indexed enclave);\\n\\n /// @notice This event MUST be emitted when a ciphernode is added to the registry.\\n /// @param node Address of the ciphernode.\\n /// @param index Index of the ciphernode in the registry.\\n /// @param numNodes Number of ciphernodes in the registry.\\n /// @param size Size of the registry.\\n event CiphernodeAdded(\\n address indexed node,\\n uint256 index,\\n uint256 numNodes,\\n uint256 size\\n );\\n\\n /// @notice This event MUST be emitted when a ciphernode is removed from the registry.\\n /// @param node Address of the ciphernode.\\n /// @param index Index of the ciphernode in the registry.\\n /// @param numNodes Number of ciphernodes in the registry.\\n /// @param size Size of the registry.\\n event CiphernodeRemoved(\\n address indexed node,\\n uint256 index,\\n uint256 numNodes,\\n uint256 size\\n );\\n\\n function isCiphernodeEligible(address ciphernode) external returns (bool);\\n\\n /// @notice Initiates the committee selection process for a specified E3.\\n /// @dev This function MUST revert when not called by the Enclave contract.\\n /// @param e3Id ID of the E3 for which to select the committee.\\n /// @param filter The address of the filter responsible for the committee selection process.\\n /// @param threshold The M/N threshold for the committee.\\n /// @return success True if committee selection was successfully initiated.\\n function requestCommittee(\\n uint256 e3Id,\\n address filter,\\n uint32[2] calldata threshold\\n ) external returns (bool success);\\n\\n /// @notice Publishes the public key resulting from the committee selection process.\\n /// @dev This function MUST revert if not called by the previously selected filter.\\n /// @param e3Id ID of the E3 for which to select the committee.\\n /// @param publicKey The hash of the public key generated by the given committee.\\n function publishCommittee(\\n uint256 e3Id,\\n bytes calldata proof,\\n bytes calldata publicKey\\n ) external;\\n\\n /// @notice This function should be called by the Enclave contract to get the public key of a committee.\\n /// @dev This function MUST revert if no committee has been requested for the given E3.\\n /// @dev This function MUST revert if the committee has not yet published a public key.\\n /// @param e3Id ID of the E3 for which to get the committee public key.\\n /// @return publicKeyHash The hash of the public key of the given committee.\\n function committeePublicKey(\\n uint256 e3Id\\n ) external view returns (bytes32 publicKeyHash);\\n}\\n\",\"keccak256\":\"0xe24e6322e8c6fc83461edfbdbedb409e243f1c4e79021a74585cfe875c225aa2\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/IRegistryFilter.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.8.27;\\n\\ninterface IRegistryFilter {\\n function requestCommittee(\\n uint256 e3Id,\\n uint32[2] calldata threshold\\n ) external returns (bool success);\\n}\\n\",\"keccak256\":\"0x6bd13d0b188e54393b1a030a43f95042161091d49428e880c301d882c4583100\",\"license\":\"LGPL-3.0-only\"},\"contracts/registry/NaiveRegistryFilter.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.8.27;\\n\\nimport { ICiphernodeRegistry } from \\\"../interfaces/ICiphernodeRegistry.sol\\\";\\nimport { IRegistryFilter } from \\\"../interfaces/IRegistryFilter.sol\\\";\\nimport {\\n OwnableUpgradeable\\n} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract NaiveRegistryFilter is IRegistryFilter, OwnableUpgradeable {\\n struct Committee {\\n address[] nodes;\\n uint32[2] threshold;\\n bytes32 publicKey;\\n }\\n\\n ////////////////////////////////////////////////////////////\\n // //\\n // Storage Variables //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n address public registry;\\n\\n mapping(uint256 e3 => Committee committee) public committees;\\n\\n ////////////////////////////////////////////////////////////\\n // //\\n // Errors //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n error CommitteeAlreadyExists();\\n error CommitteeAlreadyPublished();\\n error CommitteeDoesNotExist();\\n error CommitteeNotPublished();\\n error CiphernodeNotEnabled(address ciphernode);\\n error OnlyRegistry();\\n\\n ////////////////////////////////////////////////////////////\\n // //\\n // Modifiers //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n modifier onlyRegistry() {\\n require(msg.sender == registry, OnlyRegistry());\\n _;\\n }\\n\\n modifier onlyOwnerOrCiphernode() {\\n require(\\n msg.sender == owner() ||\\n ICiphernodeRegistry(registry).isCiphernodeEligible(msg.sender),\\n CiphernodeNotEnabled(msg.sender)\\n );\\n _;\\n }\\n\\n ////////////////////////////////////////////////////////////\\n // //\\n // Initialization //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n constructor(address _owner, address _registry) {\\n initialize(_owner, _registry);\\n }\\n\\n function initialize(address _owner, address _registry) public initializer {\\n __Ownable_init(msg.sender);\\n setRegistry(_registry);\\n if (_owner != owner()) transferOwnership(_owner);\\n }\\n\\n ////////////////////////////////////////////////////////////\\n // //\\n // Core Entrypoints //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n function requestCommittee(\\n uint256 e3Id,\\n uint32[2] calldata threshold\\n ) external onlyRegistry returns (bool success) {\\n require(committees[e3Id].threshold[1] == 0, CommitteeAlreadyExists());\\n committees[e3Id].threshold = threshold;\\n success = true;\\n }\\n\\n function publishCommittee(\\n uint256 e3Id,\\n address[] memory nodes,\\n bytes memory publicKey\\n ) external onlyOwner {\\n Committee storage committee = committees[e3Id];\\n require(committee.publicKey == bytes32(0), CommitteeAlreadyPublished());\\n committee.nodes = nodes;\\n committee.publicKey = keccak256(publicKey);\\n ICiphernodeRegistry(registry).publishCommittee(\\n e3Id,\\n abi.encode(nodes),\\n publicKey\\n );\\n }\\n\\n ////////////////////////////////////////////////////////////\\n // //\\n // Set Functions //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n function setRegistry(address _registry) public onlyOwner {\\n registry = _registry;\\n }\\n\\n ////////////////////////////////////////////////////////////\\n // //\\n // Get Functions //\\n // //\\n ////////////////////////////////////////////////////////////\\n\\n function getCommittee(\\n uint256 e3Id\\n ) external view returns (Committee memory) {\\n return committees[e3Id];\\n }\\n}\\n\",\"keccak256\":\"0x764a1b1965828e768fad1a594b858cf25c2edf954137bb49e4de3e474ee150dd\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}", "bytecode": "0x6080346101f457601f610eb938819003918201601f19168301916001600160401b038311848410176101f95780849260409485528339810103126101f457610052602061004b8361020f565b920161020f565b600080516020610e9983398151915254604081901c60ff16159291906001600160401b038116801590816101ec575b60011490816101e2575b1590816101d9575b506101c8576001600160401b03198116600117600080516020610e99833981519152558361019d575b506100c5610299565b6100cd610299565b6100d633610223565b6100de6102c7565b600080546001600160a01b0319166001600160a01b03928316179055600080516020610e7983398151915254811690821603610186575b5061012a575b604051610b7b90816102fe8239f35b68ff000000000000000019600080516020610e998339815191525416600080516020610e99833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a161011b565b610197906101926102c7565b610223565b38610115565b6001600160481b0319166801000000000000000117600080516020610e9983398151915255386100bc565b63f92ee8a960e01b60005260046000fd5b90501538610093565b303b15915061008b565b859150610081565b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036101f457565b6001600160a01b0316801561028357600080516020610e7983398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b631e4fbdf760e01b600052600060045260246000fd5b60ff600080516020610e998339815191525460401c16156102b657565b631afcd79f60e31b60005260046000fd5b600080516020610e79833981519152546001600160a01b031633036102e857565b63118cdaa760e01b6000523360045260246000fdfe608080604052600436101561001357600080fd5b600090813560e01c90816218449a1461082e5750806329f73b9c1461053a5780632b20a4f614610468578063485cc9551461022e578063715018a6146101955780637b1039991461016f5780638da5cb5b14610129578063a91ee0dc146100ea578063f2fde38b146100bd5763f5e820fd1461008e57600080fd5b346100ba5760203660031901126100ba5760026040602092600435815260018452200154604051908152f35b80fd5b50346100ba5760203660031901126100ba576100e76100da6109e4565b6100e2610ae6565b610a40565b80f35b50346100ba5760203660031901126100ba576001600160a01b0361010c6109e4565b610114610ae6565b166001600160a01b0319600054161760005580f35b50346100ba57806003193601126100ba5760206001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b50346100ba57806003193601126100ba576001600160a01b036020915416604051908152f35b50346100ba57806003193601126100ba576101ae610ae6565b806001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031981167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346100ba5760403660031901126100ba576102486109e4565b602435906001600160a01b0382168203610464577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549160ff8360401c16159267ffffffffffffffff81168015908161045c575b6001149081610452575b159081610449575b5061043a5767ffffffffffffffff1981166001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00556001600160a01b039190846103fb575b506102fd610b2e565b610305610b2e565b61030e33610a40565b610316610ae6565b166001600160a01b031960005416176000556001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054166001600160a01b038216036103e9575b5061036b5780f35b68ff0000000000000000197ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a180f35b6103f5906100e2610ae6565b38610363565b68ffffffffffffffffff191668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055386102f4565b63f92ee8a960e01b8552600485fd5b905015386102ae565b303b1591506102a6565b85915061029c565b8280fd5b50346100ba5760603660031901126100ba5760043536606411610536576001600160a01b03825416330361052757808252600160205263ffffffff600160408420015460201c16610518578152600160205260016040822001602482805b600281106104dd5750505055602060405160018152f35b90919384359063ffffffff8216918281036105145750600583901b91821b63ffffffff90921b1916179360200191906001016104c6565b8480fd5b6334c2a65d60e11b8252600482fd5b6310f5403960e31b8252600482fd5b5080fd5b50346100ba5760603660031901126100ba576024359060043567ffffffffffffffff8311610536573660238401121561053657826004013567ffffffffffffffff811161081a578060051b936040519161059760208701846109c2565b82526020820190602482968201019036821161081657602401915b8183106107f6575050506044359167ffffffffffffffff831161075557366023840112156107555782600401359267ffffffffffffffff84116107e25760405193610607601f8201601f1916602001866109c2565b808552602085019136602483830101116107de57818792602460209301853786010152610632610ae6565b81855260016020526040852090600282019182546107cf5784519067ffffffffffffffff82116107bb576801000000000000000082116107bb578054828255808310610795575b508890885260208820885b83811061077857505050508451902090556001600160a01b0384541660405192604084019060208086015251809152606084019690865b818110610759575050506106dc83869796959603601f1981018552846109c2565b803b1561075557839283610717936107296040519889968795869463d9bbec9560e01b865260048601526060602486015260648501906109ff565b838103600319016044850152906109ff565b03925af180156107485761073a5780f35b610743916109c2565b388180f35b50604051903d90823e3d90fd5b8380fd5b82516001600160a01b03168952602098890198909201916001016106bb565b60019060206001600160a01b038551169401938184015501610684565b8189528260208a2091820191015b8181106107b05750610679565b8981556001016107a3565b634e487b7160e01b88526041600452602488fd5b63632a22bb60e01b8752600487fd5b8680fd5b634e487b7160e01b85526041600452602485fd5b82356001600160a01b03811681036107de578152602092830192016105b2565b8580fd5b634e487b7160e01b83526041600452602483fd5b82346100ba5760203660031901126100ba579061084a81610990565b606081528160408092815161085f83826109c2565b8236823760208201520152600435825260016020528082209080519061088482610990565b80518354808252848652602080872090830191875b81811061097157505050816108af9103826109c2565b8252600281519363ffffffff6001820154818116875260201c1660208601526108d883866109c2565b602084019485520154908083019182528051936020855260a08501935193608060208701528451809152602060c08701950190875b81811061095257505050519084019094905b600282106109365750508293505160808301520390f35b60208060019263ffffffff89511681520196019101909461091f565b82516001600160a01b031687526020968701969092019160010161090d565b82546001600160a01b0316845260209093019260019283019201610899565b6060810190811067ffffffffffffffff8211176109ac57604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176109ac57604052565b600435906001600160a01b03821682036109fa57565b600080fd5b919082519283825260005b848110610a2b575050826000602080949584010152601f8019910116010190565b80602080928401015182828601015201610a0a565b6001600160a01b03168015610ad0576001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054826001600160a01b03198216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b631e4fbdf760e01b600052600060045260246000fd5b6001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303610b1957565b63118cdaa760e01b6000523360045260246000fd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615610b5d57565b631afcd79f60e31b60005260046000fdfea164736f6c634300081b000a9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00", diff --git a/packages/evm/deployments/sepolia/solcInputs/1560ab6aa11f44088d4445eb3d74156d.json b/packages/evm/deployments/sepolia/solcInputs/1560ab6aa11f44088d4445eb3d74156d.json new file mode 100644 index 0000000000..7f1f496ce2 --- /dev/null +++ b/packages/evm/deployments/sepolia/solcInputs/1560ab6aa11f44088d4445eb3d74156d.json @@ -0,0 +1,74 @@ +{ + "language": "Solidity", + "sources": { + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {ContextUpgradeable} from \"../utils/ContextUpgradeable.sol\";\nimport {Initializable} from \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n /// @custom:storage-location erc7201:openzeppelin.storage.Ownable\n struct OwnableStorage {\n address _owner;\n }\n\n // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.Ownable\")) - 1)) & ~bytes32(uint256(0xff))\n bytes32 private constant OwnableStorageLocation = 0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300;\n\n function _getOwnableStorage() private pure returns (OwnableStorage storage $) {\n assembly {\n $.slot := OwnableStorageLocation\n }\n }\n\n /**\n * @dev The caller account is not authorized to perform an operation.\n */\n error OwnableUnauthorizedAccount(address account);\n\n /**\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\n */\n error OwnableInvalidOwner(address owner);\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n */\n function __Ownable_init(address initialOwner) internal onlyInitializing {\n __Ownable_init_unchained(initialOwner);\n }\n\n function __Ownable_init_unchained(address initialOwner) internal onlyInitializing {\n if (initialOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n OwnableStorage storage $ = _getOwnableStorage();\n return $._owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n if (owner() != _msgSender()) {\n revert OwnableUnauthorizedAccount(_msgSender());\n }\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby disabling any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n if (newOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n OwnableStorage storage $ = _getOwnableStorage();\n address oldOwner = $._owner;\n $._owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n * reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n * case an upgrade adds a module that needs to be initialized.\n *\n * For example:\n *\n * [.hljs-theme-light.nopadding]\n * ```solidity\n * contract MyToken is ERC20Upgradeable {\n * function initialize() initializer public {\n * __ERC20_init(\"MyToken\", \"MTK\");\n * }\n * }\n *\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n * function initializeV2() reinitializer(2) public {\n * __ERC20Permit_init(\"MyToken\");\n * }\n * }\n * ```\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() {\n * _disableInitializers();\n * }\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Storage of the initializable contract.\n *\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\n * when using with upgradeable contracts.\n *\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\n */\n struct InitializableStorage {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n uint64 _initialized;\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool _initializing;\n }\n\n // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.Initializable\")) - 1)) & ~bytes32(uint256(0xff))\n bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00;\n\n /**\n * @dev The contract is already initialized.\n */\n error InvalidInitialization();\n\n /**\n * @dev The contract is not initializing.\n */\n error NotInitializing();\n\n /**\n * @dev Triggered when the contract has been initialized or reinitialized.\n */\n event Initialized(uint64 version);\n\n /**\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n * `onlyInitializing` functions can be used to initialize parent contracts.\n *\n * Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any\n * number of times. This behavior in the constructor can be useful during testing and is not expected to be used in\n * production.\n *\n * Emits an {Initialized} event.\n */\n modifier initializer() {\n // solhint-disable-next-line var-name-mixedcase\n InitializableStorage storage $ = _getInitializableStorage();\n\n // Cache values to avoid duplicated sloads\n bool isTopLevelCall = !$._initializing;\n uint64 initialized = $._initialized;\n\n // Allowed calls:\n // - initialSetup: the contract is not in the initializing state and no previous version was\n // initialized\n // - construction: the contract is initialized at version 1 (no reininitialization) and the\n // current contract is just being deployed\n bool initialSetup = initialized == 0 && isTopLevelCall;\n bool construction = initialized == 1 && address(this).code.length == 0;\n\n if (!initialSetup && !construction) {\n revert InvalidInitialization();\n }\n $._initialized = 1;\n if (isTopLevelCall) {\n $._initializing = true;\n }\n _;\n if (isTopLevelCall) {\n $._initializing = false;\n emit Initialized(1);\n }\n }\n\n /**\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n * used to initialize parent contracts.\n *\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\n * are added through upgrades and that require initialization.\n *\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\n * cannot be nested. If one is invoked in the context of another, execution will revert.\n *\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n * a contract, executing them in the right order is up to the developer or operator.\n *\n * WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization.\n *\n * Emits an {Initialized} event.\n */\n modifier reinitializer(uint64 version) {\n // solhint-disable-next-line var-name-mixedcase\n InitializableStorage storage $ = _getInitializableStorage();\n\n if ($._initializing || $._initialized >= version) {\n revert InvalidInitialization();\n }\n $._initialized = version;\n $._initializing = true;\n _;\n $._initializing = false;\n emit Initialized(version);\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\n */\n modifier onlyInitializing() {\n _checkInitializing();\n _;\n }\n\n /**\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\n */\n function _checkInitializing() internal view virtual {\n if (!_isInitializing()) {\n revert NotInitializing();\n }\n }\n\n /**\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n * through proxies.\n *\n * Emits an {Initialized} event the first time it is successfully executed.\n */\n function _disableInitializers() internal virtual {\n // solhint-disable-next-line var-name-mixedcase\n InitializableStorage storage $ = _getInitializableStorage();\n\n if ($._initializing) {\n revert InvalidInitialization();\n }\n if ($._initialized != type(uint64).max) {\n $._initialized = type(uint64).max;\n emit Initialized(type(uint64).max);\n }\n }\n\n /**\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\n */\n function _getInitializedVersion() internal view returns (uint64) {\n return _getInitializableStorage()._initialized;\n }\n\n /**\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\n */\n function _isInitializing() internal view returns (bool) {\n return _getInitializableStorage()._initializing;\n }\n\n /**\n * @dev Returns a pointer to the storage namespace.\n */\n // solhint-disable-next-line var-name-mixedcase\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\n assembly {\n $.slot := INITIALIZABLE_STORAGE\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\nimport {Initializable} from \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n function __Context_init() internal onlyInitializing {\n }\n\n function __Context_init_unchained() internal onlyInitializing {\n }\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n function _contextSuffixLength() internal view virtual returns (uint256) {\n return 0;\n }\n}\n" + }, + "@zk-kit/lean-imt.sol/Constants.sol": { + "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.8.4;\n\nuint256 constant SNARK_SCALAR_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n" + }, + "@zk-kit/lean-imt.sol/InternalLeanIMT.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.4;\n\nimport {PoseidonT3} from \"poseidon-solidity/PoseidonT3.sol\";\nimport {SNARK_SCALAR_FIELD} from \"./Constants.sol\";\n\nstruct LeanIMTData {\n // Tracks the current number of leaves in the tree.\n uint256 size;\n // Represents the current depth of the tree, which can increase as new leaves are inserted.\n uint256 depth;\n // A mapping from each level of the tree to the node value of the last even position at that level.\n // Used for efficient inserts, updates and root calculations.\n mapping(uint256 => uint256) sideNodes;\n // A mapping from leaf values to their respective indices in the tree.\n // This facilitates checks for leaf existence and retrieval of leaf positions.\n mapping(uint256 => uint256) leaves;\n}\n\nerror WrongSiblingNodes();\nerror LeafGreaterThanSnarkScalarField();\nerror LeafCannotBeZero();\nerror LeafAlreadyExists();\nerror LeafDoesNotExist();\n\n/// @title Lean Incremental binary Merkle tree.\n/// @dev The LeanIMT is an optimized version of the BinaryIMT.\n/// This implementation eliminates the use of zeroes, and make the tree depth dynamic.\n/// When a node doesn't have the right child, instead of using a zero hash as in the BinaryIMT,\n/// the node's value becomes that of its left child. Furthermore, rather than utilizing a static tree depth,\n/// it is updated based on the number of leaves in the tree. This approach\n/// results in the calculation of significantly fewer hashes, making the tree more efficient.\nlibrary InternalLeanIMT {\n /// @dev Inserts a new leaf into the incremental merkle tree.\n /// The function ensures that the leaf is valid according to the\n /// constraints of the tree and then updates the tree's structure accordingly.\n /// @param self: A storage reference to the 'LeanIMTData' struct.\n /// @param leaf: The value of the new leaf to be inserted into the tree.\n /// @return The new hash of the node after the leaf has been inserted.\n function _insert(LeanIMTData storage self, uint256 leaf) internal returns (uint256) {\n if (leaf >= SNARK_SCALAR_FIELD) {\n revert LeafGreaterThanSnarkScalarField();\n } else if (leaf == 0) {\n revert LeafCannotBeZero();\n } else if (_has(self, leaf)) {\n revert LeafAlreadyExists();\n }\n\n uint256 index = self.size;\n\n // Cache tree depth to optimize gas\n uint256 treeDepth = self.depth;\n\n // A new insertion can increase a tree's depth by at most 1,\n // and only if the number of leaves supported by the current\n // depth is less than the number of leaves to be supported after insertion.\n if (2 ** treeDepth < index + 1) {\n ++treeDepth;\n }\n\n self.depth = treeDepth;\n\n uint256 node = leaf;\n\n for (uint256 level = 0; level < treeDepth; ) {\n if ((index >> level) & 1 == 1) {\n node = PoseidonT3.hash([self.sideNodes[level], node]);\n } else {\n self.sideNodes[level] = node;\n }\n\n unchecked {\n ++level;\n }\n }\n\n self.size = ++index;\n\n self.sideNodes[treeDepth] = node;\n self.leaves[leaf] = index;\n\n return node;\n }\n\n /// @dev Inserts many leaves into the incremental merkle tree.\n /// The function ensures that the leaves are valid according to the\n /// constraints of the tree and then updates the tree's structure accordingly.\n /// @param self: A storage reference to the 'LeanIMTData' struct.\n /// @param leaves: The values of the new leaves to be inserted into the tree.\n /// @return The root after the leaves have been inserted.\n function _insertMany(LeanIMTData storage self, uint256[] calldata leaves) internal returns (uint256) {\n // Cache tree size to optimize gas\n uint256 treeSize = self.size;\n\n // Check that all the new values are correct to be added.\n for (uint256 i = 0; i < leaves.length; ) {\n if (leaves[i] >= SNARK_SCALAR_FIELD) {\n revert LeafGreaterThanSnarkScalarField();\n } else if (leaves[i] == 0) {\n revert LeafCannotBeZero();\n } else if (_has(self, leaves[i])) {\n revert LeafAlreadyExists();\n }\n\n self.leaves[leaves[i]] = treeSize + 1 + i;\n\n unchecked {\n ++i;\n }\n }\n\n // Array to save the nodes that will be used to create the next level of the tree.\n uint256[] memory currentLevelNewNodes;\n\n currentLevelNewNodes = leaves;\n\n // Cache tree depth to optimize gas\n uint256 treeDepth = self.depth;\n\n // Calculate the depth of the tree after adding the new values.\n // Unlike the 'insert' function, we need a while here as\n // N insertions can increase the tree's depth more than once.\n while (2 ** treeDepth < treeSize + leaves.length) {\n ++treeDepth;\n }\n\n self.depth = treeDepth;\n\n // First index to change in every level.\n uint256 currentLevelStartIndex = treeSize;\n\n // Size of the level used to create the next level.\n uint256 currentLevelSize = treeSize + leaves.length;\n\n // The index where changes begin at the next level.\n uint256 nextLevelStartIndex = currentLevelStartIndex >> 1;\n\n // The size of the next level.\n uint256 nextLevelSize = ((currentLevelSize - 1) >> 1) + 1;\n\n for (uint256 level = 0; level < treeDepth; ) {\n // The number of nodes for the new level that will be created,\n // only the new values, not the entire level.\n uint256 numberOfNewNodes = nextLevelSize - nextLevelStartIndex;\n uint256[] memory nextLevelNewNodes = new uint256[](numberOfNewNodes);\n for (uint256 i = 0; i < numberOfNewNodes; ) {\n uint256 leftNode;\n\n // Assign the left node using the saved path or the position in the array.\n if ((i + nextLevelStartIndex) * 2 < currentLevelStartIndex) {\n leftNode = self.sideNodes[level];\n } else {\n leftNode = currentLevelNewNodes[(i + nextLevelStartIndex) * 2 - currentLevelStartIndex];\n }\n\n uint256 rightNode;\n\n // Assign the right node if the value exists.\n if ((i + nextLevelStartIndex) * 2 + 1 < currentLevelSize) {\n rightNode = currentLevelNewNodes[(i + nextLevelStartIndex) * 2 + 1 - currentLevelStartIndex];\n }\n\n uint256 parentNode;\n\n // Assign the parent node.\n // If it has a right child the result will be the hash(leftNode, rightNode) if not,\n // it will be the leftNode.\n if (rightNode != 0) {\n parentNode = PoseidonT3.hash([leftNode, rightNode]);\n } else {\n parentNode = leftNode;\n }\n\n nextLevelNewNodes[i] = parentNode;\n\n unchecked {\n ++i;\n }\n }\n\n // Update the `sideNodes` variable.\n // If `currentLevelSize` is odd, the saved value will be the last value of the array\n // if it is even and there are more than 1 element in `currentLevelNewNodes`, the saved value\n // will be the value before the last one.\n // If it is even and there is only one element, there is no need to save anything because\n // the correct value for this level was already saved before.\n if (currentLevelSize & 1 == 1) {\n self.sideNodes[level] = currentLevelNewNodes[currentLevelNewNodes.length - 1];\n } else if (currentLevelNewNodes.length > 1) {\n self.sideNodes[level] = currentLevelNewNodes[currentLevelNewNodes.length - 2];\n }\n\n currentLevelStartIndex = nextLevelStartIndex;\n\n // Calculate the next level startIndex value.\n // It is the position of the parent node which is pos/2.\n nextLevelStartIndex >>= 1;\n\n // Update the next array that will be used to calculate the next level.\n currentLevelNewNodes = nextLevelNewNodes;\n\n currentLevelSize = nextLevelSize;\n\n // Calculate the size of the next level.\n // The size of the next level is (currentLevelSize - 1) / 2 + 1.\n nextLevelSize = ((nextLevelSize - 1) >> 1) + 1;\n\n unchecked {\n ++level;\n }\n }\n\n // Update tree size\n self.size = treeSize + leaves.length;\n\n // Update tree root\n self.sideNodes[treeDepth] = currentLevelNewNodes[0];\n\n return currentLevelNewNodes[0];\n }\n\n /// @dev Updates the value of an existing leaf and recalculates hashes\n /// to maintain tree integrity.\n /// @param self: A storage reference to the 'LeanIMTData' struct.\n /// @param oldLeaf: The value of the leaf that is to be updated.\n /// @param newLeaf: The new value that will replace the oldLeaf in the tree.\n /// @param siblingNodes: An array of sibling nodes that are necessary to recalculate the path to the root.\n /// @return The new hash of the updated node after the leaf has been updated.\n function _update(\n LeanIMTData storage self,\n uint256 oldLeaf,\n uint256 newLeaf,\n uint256[] calldata siblingNodes\n ) internal returns (uint256) {\n if (newLeaf >= SNARK_SCALAR_FIELD) {\n revert LeafGreaterThanSnarkScalarField();\n } else if (!_has(self, oldLeaf)) {\n revert LeafDoesNotExist();\n } else if (_has(self, newLeaf)) {\n revert LeafAlreadyExists();\n }\n\n uint256 index = _indexOf(self, oldLeaf);\n uint256 node = newLeaf;\n uint256 oldRoot = oldLeaf;\n\n uint256 lastIndex = self.size - 1;\n uint256 i = 0;\n\n // Cache tree depth to optimize gas\n uint256 treeDepth = self.depth;\n\n for (uint256 level = 0; level < treeDepth; ) {\n if ((index >> level) & 1 == 1) {\n if (siblingNodes[i] >= SNARK_SCALAR_FIELD) {\n revert LeafGreaterThanSnarkScalarField();\n }\n\n node = PoseidonT3.hash([siblingNodes[i], node]);\n oldRoot = PoseidonT3.hash([siblingNodes[i], oldRoot]);\n\n unchecked {\n ++i;\n }\n } else {\n if (index >> level != lastIndex >> level) {\n if (siblingNodes[i] >= SNARK_SCALAR_FIELD) {\n revert LeafGreaterThanSnarkScalarField();\n }\n\n node = PoseidonT3.hash([node, siblingNodes[i]]);\n oldRoot = PoseidonT3.hash([oldRoot, siblingNodes[i]]);\n\n unchecked {\n ++i;\n }\n } else {\n self.sideNodes[i] = node;\n }\n }\n\n unchecked {\n ++level;\n }\n }\n\n if (oldRoot != _root(self)) {\n revert WrongSiblingNodes();\n }\n\n self.sideNodes[treeDepth] = node;\n\n if (newLeaf != 0) {\n self.leaves[newLeaf] = self.leaves[oldLeaf];\n }\n\n self.leaves[oldLeaf] = 0;\n\n return node;\n }\n\n /// @dev Removes a leaf from the tree by setting its value to zero.\n /// This function utilizes the update function to set the leaf's value\n /// to zero and update the tree's state accordingly.\n /// @param self: A storage reference to the 'LeanIMTData' struct.\n /// @param oldLeaf: The value of the leaf to be removed.\n /// @param siblingNodes: An array of sibling nodes required for updating the path to the root after removal.\n /// @return The new root hash of the tree after the leaf has been removed.\n function _remove(\n LeanIMTData storage self,\n uint256 oldLeaf,\n uint256[] calldata siblingNodes\n ) internal returns (uint256) {\n return _update(self, oldLeaf, 0, siblingNodes);\n }\n\n /// @dev Checks if a leaf exists in the tree.\n /// @param self: A storage reference to the 'LeanIMTData' struct.\n /// @param leaf: The value of the leaf to check for existence.\n /// @return A boolean value indicating whether the leaf exists in the tree.\n function _has(LeanIMTData storage self, uint256 leaf) internal view returns (bool) {\n return self.leaves[leaf] != 0;\n }\n\n /// @dev Retrieves the index of a given leaf in the tree.\n /// @param self: A storage reference to the 'LeanIMTData' struct.\n /// @param leaf: The value of the leaf whose index is to be found.\n /// @return The index of the specified leaf within the tree. If the leaf is not present, the function\n /// reverts with a custom error.\n function _indexOf(LeanIMTData storage self, uint256 leaf) internal view returns (uint256) {\n if (self.leaves[leaf] == 0) {\n revert LeafDoesNotExist();\n }\n\n return self.leaves[leaf] - 1;\n }\n\n /// @dev Retrieves the root of the tree from the 'sideNodes' mapping using the\n /// current tree depth.\n /// @param self: A storage reference to the 'LeanIMTData' struct.\n /// @return The root hash of the tree.\n function _root(LeanIMTData storage self) internal view returns (uint256) {\n return self.sideNodes[self.depth];\n }\n}\n" + }, + "contracts/Enclave.sol": { + "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.8.27;\n\nimport { IEnclave, E3, IE3Program } from \"./interfaces/IEnclave.sol\";\nimport { IInputValidator } from \"./interfaces/IInputValidator.sol\";\nimport { ICiphernodeRegistry } from \"./interfaces/ICiphernodeRegistry.sol\";\nimport { IDecryptionVerifier } from \"./interfaces/IDecryptionVerifier.sol\";\nimport {\n OwnableUpgradeable\n} from \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport {\n InternalLeanIMT,\n LeanIMTData,\n PoseidonT3\n} from \"@zk-kit/lean-imt.sol/InternalLeanIMT.sol\";\n\ncontract Enclave is IEnclave, OwnableUpgradeable {\n using InternalLeanIMT for LeanIMTData;\n\n ////////////////////////////////////////////////////////////\n // //\n // Storage Variables //\n // //\n ////////////////////////////////////////////////////////////\n\n ICiphernodeRegistry public ciphernodeRegistry; // address of the Ciphernode registry.\n uint256 public maxDuration; // maximum duration of a computation in seconds.\n uint256 public nexte3Id; // ID of the next E3.\n uint256 public requests; // total number of requests made to Enclave.\n\n // Mapping of allowed E3 Programs.\n mapping(IE3Program e3Program => bool allowed) public e3Programs;\n\n // Mapping of E3s.\n mapping(uint256 e3Id => E3 e3) public e3s;\n\n // Mapping of input merkle trees.\n mapping(uint256 e3Id => LeanIMTData imt) public inputs;\n\n // Mapping counting the number of inputs for each E3.\n mapping(uint256 e3Id => uint256 inputCount) public inputCounts;\n\n // Mapping of enabled encryption schemes.\n mapping(bytes32 encryptionSchemeId => IDecryptionVerifier decryptionVerifier)\n public decryptionVerifiers;\n\n ////////////////////////////////////////////////////////////\n // //\n // Errors //\n // //\n ////////////////////////////////////////////////////////////\n\n error CommitteeSelectionFailed();\n error E3ProgramNotAllowed(IE3Program e3Program);\n error E3AlreadyActivated(uint256 e3Id);\n error E3Expired();\n error E3NotActivated(uint256 e3Id);\n error E3NotReady();\n error E3DoesNotExist(uint256 e3Id);\n error ModuleAlreadyEnabled(address module);\n error ModuleNotEnabled(address module);\n error InvalidEncryptionScheme(bytes32 encryptionSchemeId);\n error InputDeadlinePassed(uint256 e3Id, uint256 expiration);\n error InputDeadlineNotPassed(uint256 e3Id, uint256 expiration);\n error InvalidComputationRequest(IInputValidator inputValidator);\n error InvalidCiphernodeRegistry(ICiphernodeRegistry ciphernodeRegistry);\n error InvalidDuration(uint256 duration);\n error InvalidOutput(bytes output);\n error InvalidInput();\n error InvalidStartWindow();\n error InvalidThreshold(uint32[2] threshold);\n error CiphertextOutputAlreadyPublished(uint256 e3Id);\n error CiphertextOutputNotPublished(uint256 e3Id);\n error PaymentRequired(uint256 value);\n error PlaintextOutputAlreadyPublished(uint256 e3Id);\n\n ////////////////////////////////////////////////////////////\n // //\n // Initialization //\n // //\n ////////////////////////////////////////////////////////////\n\n /// @param _owner The owner of this contract\n /// @param _maxDuration The maximum duration of a computation in seconds\n constructor(\n address _owner,\n ICiphernodeRegistry _ciphernodeRegistry,\n uint256 _maxDuration\n ) {\n initialize(_owner, _ciphernodeRegistry, _maxDuration);\n }\n\n /// @param _owner The owner of this contract\n /// @param _maxDuration The maximum duration of a computation in seconds\n function initialize(\n address _owner,\n ICiphernodeRegistry _ciphernodeRegistry,\n uint256 _maxDuration\n ) public initializer {\n __Ownable_init(msg.sender);\n setMaxDuration(_maxDuration);\n setCiphernodeRegistry(_ciphernodeRegistry);\n if (_owner != owner()) transferOwnership(_owner);\n }\n\n ////////////////////////////////////////////////////////////\n // //\n // Core Entrypoints //\n // //\n ////////////////////////////////////////////////////////////\n\n function request(\n address filter,\n uint32[2] calldata threshold,\n uint256[2] calldata startWindow,\n uint256 duration,\n IE3Program e3Program,\n bytes memory e3ProgramParams,\n bytes memory computeProviderParams\n ) external payable returns (uint256 e3Id, E3 memory e3) {\n // TODO: allow for other payment methods or only native tokens?\n // TODO: should payment checks be somewhere else? Perhaps in the E3 Program or ciphernode registry?\n require(msg.value > 0, PaymentRequired(msg.value));\n require(\n threshold[1] >= threshold[0] && threshold[0] > 0,\n InvalidThreshold(threshold)\n );\n require(\n // TODO: do we need a minimum start window to allow time for committee selection?\n startWindow[1] >= startWindow[0] &&\n startWindow[1] >= block.timestamp,\n InvalidStartWindow()\n );\n require(\n duration > 0 && duration <= maxDuration,\n InvalidDuration(duration)\n );\n require(e3Programs[e3Program], E3ProgramNotAllowed(e3Program));\n\n // TODO: should IDs be incremental or produced deterministically?\n e3Id = nexte3Id;\n nexte3Id++;\n uint256 seed = uint256(keccak256(abi.encode(block.prevrandao, e3Id)));\n\n (bytes32 encryptionSchemeId, IInputValidator inputValidator) = e3Program\n .validate(e3Id, seed, e3ProgramParams, computeProviderParams);\n IDecryptionVerifier decryptionVerifier = decryptionVerifiers[\n encryptionSchemeId\n ];\n require(\n decryptionVerifiers[encryptionSchemeId] !=\n IDecryptionVerifier(address(0)),\n InvalidEncryptionScheme(encryptionSchemeId)\n );\n require(\n address(inputValidator) != address(0),\n InvalidComputationRequest(inputValidator)\n );\n\n e3 = E3({\n seed: seed,\n threshold: threshold,\n requestBlock: block.number,\n startWindow: startWindow,\n duration: duration,\n expiration: 0,\n encryptionSchemeId: encryptionSchemeId,\n e3Program: e3Program,\n e3ProgramParams: e3ProgramParams,\n inputValidator: inputValidator,\n decryptionVerifier: decryptionVerifier,\n committeePublicKey: hex\"\",\n ciphertextOutput: hex\"\",\n plaintextOutput: hex\"\"\n });\n e3s[e3Id] = e3;\n\n require(\n ciphernodeRegistry.requestCommittee(e3Id, filter, threshold),\n CommitteeSelectionFailed()\n );\n\n emit E3Requested(e3Id, e3, filter, e3Program);\n }\n\n function activate(\n uint256 e3Id,\n bytes memory publicKey\n ) external returns (bool success) {\n E3 memory e3 = getE3(e3Id);\n\n require(e3.expiration == 0, E3AlreadyActivated(e3Id));\n require(e3.startWindow[0] <= block.timestamp, E3NotReady());\n // TODO: handle what happens to the payment if the start window has passed.\n require(e3.startWindow[1] >= block.timestamp, E3Expired());\n\n bytes32 publicKeyHash = ciphernodeRegistry.committeePublicKey(e3Id);\n require(\n keccak256(publicKey) == publicKeyHash,\n CommitteeSelectionFailed()\n );\n uint256 expiresAt = block.timestamp + e3.duration;\n e3s[e3Id].expiration = expiresAt;\n e3s[e3Id].committeePublicKey = keccak256(publicKey);\n\n emit E3Activated(e3Id, expiresAt, publicKey);\n\n return true;\n }\n\n function publishInput(\n uint256 e3Id,\n bytes memory data\n ) external returns (bool success) {\n E3 memory e3 = getE3(e3Id);\n\n // Note: if we make 0 a no expiration, this has to be refactored\n require(e3.expiration > 0, E3NotActivated(e3Id));\n // TODO: should we have an input window, including both a start and end timestamp?\n require(\n e3.expiration > block.timestamp,\n InputDeadlinePassed(e3Id, e3.expiration)\n );\n\n bytes memory input = e3.inputValidator.validate(msg.sender, data);\n uint256 inputHash = PoseidonT3.hash(\n [uint256(keccak256(input)), inputCounts[e3Id]]\n );\n\n inputCounts[e3Id]++;\n inputs[e3Id]._insert(inputHash);\n success = true;\n\n emit InputPublished(e3Id, input, inputHash, inputCounts[e3Id] - 1);\n }\n\n function publishCiphertextOutput(\n uint256 e3Id,\n bytes memory ciphertextOutput,\n bytes memory proof\n ) external returns (bool success) {\n E3 memory e3 = getE3(e3Id);\n // Note: if we make 0 a no expiration, this has to be refactored\n require(e3.expiration > 0, E3NotActivated(e3Id));\n require(\n e3.expiration <= block.timestamp,\n InputDeadlineNotPassed(e3Id, e3.expiration)\n );\n // TODO: should the output verifier be able to change its mind?\n //i.e. should we be able to call this multiple times?\n require(\n e3.ciphertextOutput == bytes32(0),\n CiphertextOutputAlreadyPublished(e3Id)\n );\n bytes32 ciphertextOutputHash = keccak256(ciphertextOutput);\n (success) = e3.e3Program.verify(e3Id, ciphertextOutputHash, proof);\n require(success, InvalidOutput(ciphertextOutput));\n e3s[e3Id].ciphertextOutput = ciphertextOutputHash;\n\n emit CiphertextOutputPublished(e3Id, ciphertextOutput);\n }\n\n function publishPlaintextOutput(\n uint256 e3Id,\n bytes memory plaintextOutput,\n bytes memory proof\n ) external returns (bool success) {\n E3 memory e3 = getE3(e3Id);\n // Note: if we make 0 a no expiration, this has to be refactored\n require(e3.expiration > 0, E3NotActivated(e3Id));\n require(\n e3.ciphertextOutput != bytes32(0),\n CiphertextOutputNotPublished(e3Id)\n );\n require(\n e3.plaintextOutput.length == 0,\n PlaintextOutputAlreadyPublished(e3Id)\n );\n (success) = e3.decryptionVerifier.verify(\n e3Id,\n keccak256(plaintextOutput),\n proof\n );\n require(success, InvalidOutput(plaintextOutput));\n e3s[e3Id].plaintextOutput = plaintextOutput;\n\n emit PlaintextOutputPublished(e3Id, plaintextOutput);\n }\n\n ////////////////////////////////////////////////////////////\n // //\n // Set Functions //\n // //\n ////////////////////////////////////////////////////////////\n\n function setMaxDuration(\n uint256 _maxDuration\n ) public onlyOwner returns (bool success) {\n maxDuration = _maxDuration;\n success = true;\n emit MaxDurationSet(_maxDuration);\n }\n\n function setCiphernodeRegistry(\n ICiphernodeRegistry _ciphernodeRegistry\n ) public onlyOwner returns (bool success) {\n require(\n address(_ciphernodeRegistry) != address(0) &&\n _ciphernodeRegistry != ciphernodeRegistry,\n InvalidCiphernodeRegistry(_ciphernodeRegistry)\n );\n ciphernodeRegistry = _ciphernodeRegistry;\n success = true;\n emit CiphernodeRegistrySet(address(_ciphernodeRegistry));\n }\n\n function enableE3Program(\n IE3Program e3Program\n ) public onlyOwner returns (bool success) {\n require(\n !e3Programs[e3Program],\n ModuleAlreadyEnabled(address(e3Program))\n );\n e3Programs[e3Program] = true;\n success = true;\n emit E3ProgramEnabled(e3Program);\n }\n\n function disableE3Program(\n IE3Program e3Program\n ) public onlyOwner returns (bool success) {\n require(e3Programs[e3Program], ModuleNotEnabled(address(e3Program)));\n delete e3Programs[e3Program];\n success = true;\n emit E3ProgramDisabled(e3Program);\n }\n\n function setDecryptionVerifier(\n bytes32 encryptionSchemeId,\n IDecryptionVerifier decryptionVerifier\n ) public onlyOwner returns (bool success) {\n require(\n decryptionVerifier != IDecryptionVerifier(address(0)) &&\n decryptionVerifiers[encryptionSchemeId] != decryptionVerifier,\n InvalidEncryptionScheme(encryptionSchemeId)\n );\n decryptionVerifiers[encryptionSchemeId] = decryptionVerifier;\n success = true;\n emit EncryptionSchemeEnabled(encryptionSchemeId);\n }\n\n function disableEncryptionScheme(\n bytes32 encryptionSchemeId\n ) public onlyOwner returns (bool success) {\n require(\n decryptionVerifiers[encryptionSchemeId] !=\n IDecryptionVerifier(address(0)),\n InvalidEncryptionScheme(encryptionSchemeId)\n );\n decryptionVerifiers[encryptionSchemeId] = IDecryptionVerifier(\n address(0)\n );\n success = true;\n emit EncryptionSchemeDisabled(encryptionSchemeId);\n }\n\n ////////////////////////////////////////////////////////////\n // //\n // Get Functions //\n // //\n ////////////////////////////////////////////////////////////\n\n function getE3(uint256 e3Id) public view returns (E3 memory e3) {\n e3 = e3s[e3Id];\n require(e3.e3Program != IE3Program(address(0)), E3DoesNotExist(e3Id));\n }\n\n function getInputRoot(uint256 e3Id) public view returns (uint256) {\n require(\n e3s[e3Id].e3Program != IE3Program(address(0)),\n E3DoesNotExist(e3Id)\n );\n return InternalLeanIMT._root(inputs[e3Id]);\n }\n\n function getDecryptionVerifier(\n bytes32 encryptionSchemeId\n ) public view returns (IDecryptionVerifier) {\n return decryptionVerifiers[encryptionSchemeId];\n }\n}\n" + }, + "contracts/interfaces/ICiphernodeRegistry.sol": { + "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.8.27;\n\ninterface ICiphernodeRegistry {\n /// @notice This event MUST be emitted when a committee is selected for an E3.\n /// @param e3Id ID of the E3 for which the committee was selected.\n /// @param filter Address of the contract that will coordinate committee selection.\n /// @param threshold The M/N threshold for the committee.\n event CommitteeRequested(\n uint256 indexed e3Id,\n address filter,\n uint32[2] threshold\n );\n\n /// @notice This event MUST be emitted when a committee is selected for an E3.\n /// @param e3Id ID of the E3 for which the committee was selected.\n /// @param publicKey Public key of the committee.\n event CommitteePublished(uint256 indexed e3Id, bytes publicKey);\n\n /// @notice This event MUST be emitted when `enclave` is set.\n /// @param enclave Address of the enclave contract.\n event EnclaveSet(address indexed enclave);\n\n /// @notice This event MUST be emitted when a ciphernode is added to the registry.\n /// @param node Address of the ciphernode.\n /// @param index Index of the ciphernode in the registry.\n /// @param numNodes Number of ciphernodes in the registry.\n /// @param size Size of the registry.\n event CiphernodeAdded(\n address indexed node,\n uint256 index,\n uint256 numNodes,\n uint256 size\n );\n\n /// @notice This event MUST be emitted when a ciphernode is removed from the registry.\n /// @param node Address of the ciphernode.\n /// @param index Index of the ciphernode in the registry.\n /// @param numNodes Number of ciphernodes in the registry.\n /// @param size Size of the registry.\n event CiphernodeRemoved(\n address indexed node,\n uint256 index,\n uint256 numNodes,\n uint256 size\n );\n\n function isCiphernodeEligible(address ciphernode) external returns (bool);\n\n /// @notice Initiates the committee selection process for a specified E3.\n /// @dev This function MUST revert when not called by the Enclave contract.\n /// @param e3Id ID of the E3 for which to select the committee.\n /// @param filter The address of the filter responsible for the committee selection process.\n /// @param threshold The M/N threshold for the committee.\n /// @return success True if committee selection was successfully initiated.\n function requestCommittee(\n uint256 e3Id,\n address filter,\n uint32[2] calldata threshold\n ) external returns (bool success);\n\n /// @notice Publishes the public key resulting from the committee selection process.\n /// @dev This function MUST revert if not called by the previously selected filter.\n /// @param e3Id ID of the E3 for which to select the committee.\n /// @param publicKey The hash of the public key generated by the given committee.\n function publishCommittee(\n uint256 e3Id,\n bytes calldata proof,\n bytes calldata publicKey\n ) external;\n\n /// @notice This function should be called by the Enclave contract to get the public key of a committee.\n /// @dev This function MUST revert if no committee has been requested for the given E3.\n /// @dev This function MUST revert if the committee has not yet published a public key.\n /// @param e3Id ID of the E3 for which to get the committee public key.\n /// @return publicKeyHash The hash of the public key of the given committee.\n function committeePublicKey(\n uint256 e3Id\n ) external view returns (bytes32 publicKeyHash);\n}\n" + }, + "contracts/interfaces/IDecryptionVerifier.sol": { + "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.8.27;\n\ninterface IDecryptionVerifier {\n /// @notice This function should be called by the Enclave contract to verify the\n /// decryption of output of a computation.\n /// @param e3Id ID of the E3.\n /// @param plaintextOutputHash The keccak256 hash of the plaintext output to be verified.\n /// @param proof ABI encoded proof of the given output hash.\n /// @return success Whether or not the plaintextOutputHash was successfully verified.\n function verify(\n uint256 e3Id,\n bytes32 plaintextOutputHash,\n bytes memory proof\n ) external view returns (bool success);\n}\n" + }, + "contracts/interfaces/IE3.sol": { + "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.8.27;\n\nimport { IInputValidator } from \"./IInputValidator.sol\";\nimport { IE3Program } from \"./IE3Program.sol\";\nimport { IDecryptionVerifier } from \"./IDecryptionVerifier.sol\";\n\n/// @title E3 struct\n/// @notice This struct represents an E3 computation.\n/// @param threshold M/N threshold for the committee.\n/// @param requestBlock Block number when the E3 was requested.\n/// @param startWindow Start window for the computation: index zero is minimum, index 1 is the maxium.\n/// @param duration Duration of the E3.\n/// @param expiration Timestamp when committee duties expire.\n/// @param e3Program Address of the E3 Program contract.\n/// @param computeProvider Address of the compute provider contract.\n/// @param inputValidator Address of the input validator contract.\n/// @param decryptionVerifier Address of the output verifier contract.\n/// @param committeeId ID of the selected committee.\n/// @param ciphertextOutput Encrypted output data.\n/// @param plaintextOutput Decrypted output data.\nstruct E3 {\n uint256 seed;\n uint32[2] threshold;\n uint256 requestBlock;\n uint256[2] startWindow;\n uint256 duration;\n uint256 expiration;\n bytes32 encryptionSchemeId;\n IE3Program e3Program;\n bytes e3ProgramParams;\n IInputValidator inputValidator;\n IDecryptionVerifier decryptionVerifier;\n bytes32 committeePublicKey;\n bytes32 ciphertextOutput;\n bytes plaintextOutput;\n}\n" + }, + "contracts/interfaces/IE3Program.sol": { + "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.8.27;\n\nimport { IInputValidator } from \"./IInputValidator.sol\";\n\ninterface IE3Program {\n /// @notice This function should be called by the Enclave contract to validate the computation parameters.\n /// @param e3Id ID of the E3.\n /// @param seed Seed for the computation.\n /// @param e3ProgramParams ABI encoded computation parameters.\n /// @param computeProviderParams ABI encoded compute provider parameters.\n /// @return encryptionSchemeId ID of the encryption scheme to be used for the computation.\n /// @return inputValidator The input validator to be used for the computation.\n function validate(\n uint256 e3Id,\n uint256 seed,\n bytes calldata e3ProgramParams,\n bytes calldata computeProviderParams\n )\n external\n returns (bytes32 encryptionSchemeId, IInputValidator inputValidator);\n\n /// @notice This function should be called by the Enclave contract to verify the decrypted output of an E3.\n /// @param e3Id ID of the E3.\n /// @param ciphertextOutputHash The keccak256 hash of output data to be verified.\n /// @param proof ABI encoded data to verify the ciphertextOutputHash.\n /// @return success Whether the output data is valid.\n function verify(\n uint256 e3Id,\n bytes32 ciphertextOutputHash,\n bytes memory proof\n ) external returns (bool success);\n}\n" + }, + "contracts/interfaces/IEnclave.sol": { + "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.8.27;\n\nimport { E3, IE3Program } from \"./IE3.sol\";\n\ninterface IEnclave {\n ////////////////////////////////////////////////////////////\n // //\n // Events //\n // //\n ////////////////////////////////////////////////////////////\n\n /// @notice This event MUST be emitted when an Encrypted Execution Environment (E3) is successfully requested.\n /// @param e3Id ID of the E3.\n /// @param e3 Details of the E3.\n /// @param filter Address of the pool of nodes from which the Cipher Node committee was selected.\n /// @param e3Program Address of the Computation module selected.\n event E3Requested(\n uint256 e3Id,\n E3 e3,\n address filter,\n IE3Program indexed e3Program\n );\n\n /// @notice This event MUST be emitted when an Encrypted Execution Environment (E3) is successfully activated.\n /// @param e3Id ID of the E3.\n /// @param expiration Timestamp when committee duties expire.\n /// @param committeePublicKey Public key of the committee.\n event E3Activated(\n uint256 e3Id,\n uint256 expiration,\n bytes committeePublicKey\n );\n\n /// @notice This event MUST be emitted when an input to an Encrypted Execution Environment (E3) is\n /// successfully published.\n /// @param e3Id ID of the E3.\n /// @param data ABI encoded input data.\n event InputPublished(\n uint256 indexed e3Id,\n bytes data,\n uint256 inputHash,\n uint256 index\n );\n\n /// @notice This event MUST be emitted when the plaintext output of an Encrypted Execution Environment (E3)\n /// is successfully published.\n /// @param e3Id ID of the E3.\n /// @param plaintextOutput ABI encoded plaintext output.\n event PlaintextOutputPublished(uint256 indexed e3Id, bytes plaintextOutput);\n\n /// @notice This event MUST be emitted when the ciphertext output of an Encrypted Execution Environment (E3)\n /// is successfully published.\n /// @param e3Id ID of the E3.\n /// @param ciphertextOutput ABI encoded ciphertext output.\n event CiphertextOutputPublished(\n uint256 indexed e3Id,\n bytes ciphertextOutput\n );\n\n /// @notice This event MUST be emitted any time the `maxDuration` is set.\n /// @param maxDuration The maximum duration of a computation in seconds.\n event MaxDurationSet(uint256 maxDuration);\n\n /// @notice This event MUST be emitted any time the CiphernodeRegistry is set.\n /// @param ciphernodeRegistry The address of the CiphernodeRegistry contract.\n event CiphernodeRegistrySet(address ciphernodeRegistry);\n\n /// @notice The event MUST be emitted any time an encryption scheme is enabled.\n /// @param encryptionSchemeId The ID of the encryption scheme that was enabled.\n event EncryptionSchemeEnabled(bytes32 encryptionSchemeId);\n\n /// @notice This event MUST be emitted any time an encryption scheme is disabled.\n /// @param encryptionSchemeId The ID of the encryption scheme that was disabled.\n event EncryptionSchemeDisabled(bytes32 encryptionSchemeId);\n\n /// @notice This event MUST be emitted any time a E3 Program is enabled.\n /// @param e3Program The address of the E3 Program.\n event E3ProgramEnabled(IE3Program e3Program);\n\n /// @notice This event MUST be emitted any time a E3 Program is disabled.\n /// @param e3Program The address of the E3 Program.\n event E3ProgramDisabled(IE3Program e3Program);\n\n ////////////////////////////////////////////////////////////\n // //\n // Core Entrypoints //\n // //\n ////////////////////////////////////////////////////////////\n\n /// @notice This function should be called to request a computation within an Encrypted Execution Environment (E3).\n /// @dev This function MUST emit the E3Requested event.\n /// @param filter IDs of the pool of nodes from which to select the committee.\n /// @param threshold The M/N threshold for the committee.\n /// @param duration The duration of the computation in seconds.\n /// @param e3Program Address of the E3 Program.\n /// @param e3ProgramParams ABI encoded computation parameters.\n /// @param computeProviderParams ABI encoded compute provider parameters.\n /// @return e3Id ID of the E3.\n /// @return e3 The E3 struct.\n function request(\n address filter,\n uint32[2] calldata threshold,\n uint256[2] calldata startWindow,\n uint256 duration,\n IE3Program e3Program,\n bytes memory e3ProgramParams,\n bytes memory computeProviderParams\n ) external payable returns (uint256 e3Id, E3 memory e3);\n\n /// @notice This function should be called to activate an Encrypted Execution Environment (E3) once it has been\n /// initialized and is ready for input.\n /// @dev This function MUST emit the E3Activated event.\n /// @dev This function MUST revert if the given E3 has not yet been requested.\n /// @dev This function MUST revert if the selected node committee has not yet published a public key.\n /// @param e3Id ID of the E3.\n /// @param publicKey Public key of the committee.\n /// @return success True if the E3 was successfully activated.\n function activate(\n uint256 e3Id,\n bytes memory publicKey\n ) external returns (bool success);\n\n /// @notice This function should be called to publish input data for Encrypted Execution Environment (E3).\n /// @dev This function MUST revert if the E3 is not yet activated.\n /// @dev This function MUST emit the InputPublished event.\n /// @param e3Id ID of the E3.\n /// @param data ABI encoded input data to publish.\n /// @return success True if the input was successfully published.\n function publishInput(\n uint256 e3Id,\n bytes calldata data\n ) external returns (bool success);\n\n /// @notice This function should be called to publish output data for an Encrypted Execution Environment (E3).\n /// @dev This function MUST emit the CiphertextOutputPublished event.\n /// @param e3Id ID of the E3.\n /// @param ciphertextOutput ABI encoded output data to verify.\n /// @param proof ABI encoded data to verify the ciphertextOutput.\n /// @return success True if the output was successfully published.\n function publishCiphertextOutput(\n uint256 e3Id,\n bytes memory ciphertextOutput,\n bytes memory proof\n ) external returns (bool success);\n\n /// @notice This function publishes the plaintext output of an Encrypted Execution Environment (E3).\n /// @dev This function MUST revert if the output has not been published.\n /// @dev This function MUST emit the PlaintextOutputPublished event.\n /// @param e3Id ID of the E3.\n /// @param plaintextOutput ABI encoded plaintext output.\n /// @param proof ABI encoded data to verify the plaintextOutput.\n function publishPlaintextOutput(\n uint256 e3Id,\n bytes memory plaintextOutput,\n bytes memory proof\n ) external returns (bool success);\n\n ////////////////////////////////////////////////////////////\n // //\n // Set Functions //\n // //\n ////////////////////////////////////////////////////////////\n\n /// @notice This function should be called to set the maximum duration of requested computations.\n /// @param _maxDuration The maximum duration of a computation in seconds.\n /// @return success True if the max duration was successfully set.\n function setMaxDuration(\n uint256 _maxDuration\n ) external returns (bool success);\n\n ////////////////////////////////////////////////////////////\n // //\n // Get Functions //\n // //\n ////////////////////////////////////////////////////////////\n\n /// @notice This function should be called to retrieve the details of an Encrypted Execution Environment (E3).\n /// @dev This function MUST revert if the E3 does not exist.\n /// @param e3Id ID of the E3.\n /// @return e3 The struct representing the requested E3.\n function getE3(uint256 e3Id) external view returns (E3 memory e3);\n\n /// @notice This function returns root of the input merkle tree for a given E3.\n /// @dev This function MUST revert if the E3 does not exist.\n /// @param e3Id ID of the E3.\n /// @return root The root of the input merkle tree.\n function getInputRoot(uint256 e3Id) external view returns (uint256 root);\n}\n" + }, + "contracts/interfaces/IInputValidator.sol": { + "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.8.27;\n\ninterface IInputValidator {\n /// @notice This function should be called by the Enclave contract to validate the\n /// input of a computation.\n /// @param sender The account that is submitting the input.\n /// @param data The input to be verified.\n /// @return input The decoded, policy-approved application payload.\n function validate(\n address sender,\n bytes memory data\n ) external returns (bytes memory input);\n}\n" + }, + "poseidon-solidity/PoseidonT3.sol": { + "content": "/// SPDX-License-Identifier: MIT\npragma solidity >=0.7.0;\n\nlibrary PoseidonT3 {\n uint constant M00 = 0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b;\n uint constant M01 = 0x2969f27eed31a480b9c36c764379dbca2cc8fdd1415c3dded62940bcde0bd771;\n uint constant M02 = 0x143021ec686a3f330d5f9e654638065ce6cd79e28c5b3753326244ee65a1b1a7;\n uint constant M10 = 0x16ed41e13bb9c0c66ae119424fddbcbc9314dc9fdbdeea55d6c64543dc4903e0;\n uint constant M11 = 0x2e2419f9ec02ec394c9871c832963dc1b89d743c8c7b964029b2311687b1fe23;\n uint constant M12 = 0x176cc029695ad02582a70eff08a6fd99d057e12e58e7d7b6b16cdfabc8ee2911;\n\n // See here for a simplified implementation: https://github.com/vimwitch/poseidon-solidity/blob/e57becdabb65d99fdc586fe1e1e09e7108202d53/contracts/Poseidon.sol#L40\n // Inspired by: https://github.com/iden3/circomlibjs/blob/v0.0.8/src/poseidon_slow.js\n function hash(uint[2] memory) public pure returns (uint) {\n assembly {\n let F := 21888242871839275222246405745257275088548364400416034343698204186575808495617\n let M20 := 0x2b90bba00fca0589f617e7dcbfe82e0df706ab640ceb247b791a93b74e36736d\n let M21 := 0x101071f0032379b697315876690f053d148d4e109f5fb065c8aacc55a0f89bfa\n let M22 := 0x19a3fc0a56702bf417ba7fee3802593fa644470307043f7773279cd71d25d5e0\n\n // load the inputs from memory\n let state1 := add(mod(mload(0x80), F), 0x00f1445235f2148c5986587169fc1bcd887b08d4d00868df5696fff40956e864)\n let state2 := add(mod(mload(0xa0), F), 0x08dff3487e8ac99e1f29a058d0fa80b930c728730b7ab36ce879f3890ecf73f5)\n let scratch0 := mulmod(state1, state1, F)\n state1 := mulmod(mulmod(scratch0, scratch0, F), state1, F)\n scratch0 := mulmod(state2, state2, F)\n state2 := mulmod(mulmod(scratch0, scratch0, F), state2, F)\n scratch0 := add(\n 0x2f27be690fdaee46c3ce28f7532b13c856c35342c84bda6e20966310fadc01d0,\n add(add(15452833169820924772166449970675545095234312153403844297388521437673434406763, mulmod(state1, M10, F)), mulmod(state2, M20, F))\n )\n let scratch1 := add(\n 0x2b2ae1acf68b7b8d2416bebf3d4f6234b763fe04b8043ee48b8327bebca16cf2,\n add(add(18674271267752038776579386132900109523609358935013267566297499497165104279117, mulmod(state1, M11, F)), mulmod(state2, M21, F))\n )\n let scratch2 := add(\n 0x0319d062072bef7ecca5eac06f97d4d55952c175ab6b03eae64b44c7dbf11cfa,\n add(add(14817777843080276494683266178512808687156649753153012854386334860566696099579, mulmod(state1, M12, F)), mulmod(state2, M22, F))\n )\n let state0 := mulmod(scratch0, scratch0, F)\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\n state0 := mulmod(scratch1, scratch1, F)\n scratch1 := mulmod(mulmod(state0, state0, F), scratch1, F)\n state0 := mulmod(scratch2, scratch2, F)\n scratch2 := mulmod(mulmod(state0, state0, F), scratch2, F)\n state0 := add(0x28813dcaebaeaa828a376df87af4a63bc8b7bf27ad49c6298ef7b387bf28526d, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\n state1 := add(0x2727673b2ccbc903f181bf38e1c1d40d2033865200c352bc150928adddf9cb78, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\n state2 := add(0x234ec45ca27727c2e74abd2b2a1494cd6efbd43e340587d6b8fb9e31e65cc632, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\n scratch0 := mulmod(state0, state0, F)\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\n scratch0 := mulmod(state1, state1, F)\n state1 := mulmod(mulmod(scratch0, scratch0, F), state1, F)\n scratch0 := mulmod(state2, state2, F)\n state2 := mulmod(mulmod(scratch0, scratch0, F), state2, F)\n scratch0 := add(0x15b52534031ae18f7f862cb2cf7cf760ab10a8150a337b1ccd99ff6e8797d428, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\n scratch1 := add(0x0dc8fad6d9e4b35f5ed9a3d186b79ce38e0e8a8d1b58b132d701d4eecf68d1f6, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\n scratch2 := add(0x1bcd95ffc211fbca600f705fad3fb567ea4eb378f62e1fec97805518a47e4d9c, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\n state0 := mulmod(scratch0, scratch0, F)\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\n state0 := mulmod(scratch1, scratch1, F)\n scratch1 := mulmod(mulmod(state0, state0, F), scratch1, F)\n state0 := mulmod(scratch2, scratch2, F)\n scratch2 := mulmod(mulmod(state0, state0, F), scratch2, F)\n state0 := add(0x10520b0ab721cadfe9eff81b016fc34dc76da36c2578937817cb978d069de559, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\n state1 := add(0x1f6d48149b8e7f7d9b257d8ed5fbbaf42932498075fed0ace88a9eb81f5627f6, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\n state2 := add(0x1d9655f652309014d29e00ef35a2089bfff8dc1c816f0dc9ca34bdb5460c8705, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\n scratch0 := mulmod(state0, state0, F)\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\n scratch0 := add(0x04df5a56ff95bcafb051f7b1cd43a99ba731ff67e47032058fe3d4185697cc7d, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\n scratch1 := add(0x0672d995f8fff640151b3d290cedaf148690a10a8c8424a7f6ec282b6e4be828, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\n scratch2 := add(0x099952b414884454b21200d7ffafdd5f0c9a9dcc06f2708e9fc1d8209b5c75b9, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\n state0 := mulmod(scratch0, scratch0, F)\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\n state0 := add(0x052cba2255dfd00c7c483143ba8d469448e43586a9b4cd9183fd0e843a6b9fa6, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\n state1 := add(0x0b8badee690adb8eb0bd74712b7999af82de55707251ad7716077cb93c464ddc, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\n state2 := add(0x119b1590f13307af5a1ee651020c07c749c15d60683a8050b963d0a8e4b2bdd1, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\n scratch0 := mulmod(state0, state0, F)\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\n scratch0 := add(0x03150b7cd6d5d17b2529d36be0f67b832c4acfc884ef4ee5ce15be0bfb4a8d09, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\n scratch1 := add(0x2cc6182c5e14546e3cf1951f173912355374efb83d80898abe69cb317c9ea565, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\n scratch2 := add(0x005032551e6378c450cfe129a404b3764218cadedac14e2b92d2cd73111bf0f9, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\n state0 := mulmod(scratch0, scratch0, F)\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\n state0 := add(0x233237e3289baa34bb147e972ebcb9516469c399fcc069fb88f9da2cc28276b5, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\n state1 := add(0x05c8f4f4ebd4a6e3c980d31674bfbe6323037f21b34ae5a4e80c2d4c24d60280, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\n state2 := add(0x0a7b1db13042d396ba05d818a319f25252bcf35ef3aeed91ee1f09b2590fc65b, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\n scratch0 := mulmod(state0, state0, F)\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\n scratch0 := add(0x2a73b71f9b210cf5b14296572c9d32dbf156e2b086ff47dc5df542365a404ec0, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\n scratch1 := add(0x1ac9b0417abcc9a1935107e9ffc91dc3ec18f2c4dbe7f22976a760bb5c50c460, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\n scratch2 := add(0x12c0339ae08374823fabb076707ef479269f3e4d6cb104349015ee046dc93fc0, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\n state0 := mulmod(scratch0, scratch0, F)\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\n state0 := add(0x0b7475b102a165ad7f5b18db4e1e704f52900aa3253baac68246682e56e9a28e, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\n state1 := add(0x037c2849e191ca3edb1c5e49f6e8b8917c843e379366f2ea32ab3aa88d7f8448, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\n state2 := add(0x05a6811f8556f014e92674661e217e9bd5206c5c93a07dc145fdb176a716346f, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\n scratch0 := mulmod(state0, state0, F)\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\n scratch0 := add(0x29a795e7d98028946e947b75d54e9f044076e87a7b2883b47b675ef5f38bd66e, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\n scratch1 := add(0x20439a0c84b322eb45a3857afc18f5826e8c7382c8a1585c507be199981fd22f, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\n scratch2 := add(0x2e0ba8d94d9ecf4a94ec2050c7371ff1bb50f27799a84b6d4a2a6f2a0982c887, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\n state0 := mulmod(scratch0, scratch0, F)\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\n state0 := add(0x143fd115ce08fb27ca38eb7cce822b4517822cd2109048d2e6d0ddcca17d71c8, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\n state1 := add(0x0c64cbecb1c734b857968dbbdcf813cdf8611659323dbcbfc84323623be9caf1, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\n state2 := add(0x028a305847c683f646fca925c163ff5ae74f348d62c2b670f1426cef9403da53, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\n scratch0 := mulmod(state0, state0, F)\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\n scratch0 := add(0x2e4ef510ff0b6fda5fa940ab4c4380f26a6bcb64d89427b824d6755b5db9e30c, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\n scratch1 := add(0x0081c95bc43384e663d79270c956ce3b8925b4f6d033b078b96384f50579400e, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\n scratch2 := add(0x2ed5f0c91cbd9749187e2fade687e05ee2491b349c039a0bba8a9f4023a0bb38, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\n state0 := mulmod(scratch0, scratch0, F)\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\n state0 := add(0x30509991f88da3504bbf374ed5aae2f03448a22c76234c8c990f01f33a735206, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\n state1 := add(0x1c3f20fd55409a53221b7c4d49a356b9f0a1119fb2067b41a7529094424ec6ad, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\n state2 := add(0x10b4e7f3ab5df003049514459b6e18eec46bb2213e8e131e170887b47ddcb96c, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\n scratch0 := mulmod(state0, state0, F)\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\n scratch0 := add(0x2a1982979c3ff7f43ddd543d891c2abddd80f804c077d775039aa3502e43adef, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\n scratch1 := add(0x1c74ee64f15e1db6feddbead56d6d55dba431ebc396c9af95cad0f1315bd5c91, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\n scratch2 := add(0x07533ec850ba7f98eab9303cace01b4b9e4f2e8b82708cfa9c2fe45a0ae146a0, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\n state0 := mulmod(scratch0, scratch0, F)\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\n state0 := add(0x21576b438e500449a151e4eeaf17b154285c68f42d42c1808a11abf3764c0750, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\n state1 := add(0x2f17c0559b8fe79608ad5ca193d62f10bce8384c815f0906743d6930836d4a9e, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\n state2 := add(0x2d477e3862d07708a79e8aae946170bc9775a4201318474ae665b0b1b7e2730e, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\n scratch0 := mulmod(state0, state0, F)\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\n scratch0 := add(0x162f5243967064c390e095577984f291afba2266c38f5abcd89be0f5b2747eab, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\n scratch1 := add(0x2b4cb233ede9ba48264ecd2c8ae50d1ad7a8596a87f29f8a7777a70092393311, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\n scratch2 := add(0x2c8fbcb2dd8573dc1dbaf8f4622854776db2eece6d85c4cf4254e7c35e03b07a, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\n state0 := mulmod(scratch0, scratch0, F)\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\n state0 := add(0x1d6f347725e4816af2ff453f0cd56b199e1b61e9f601e9ade5e88db870949da9, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\n state1 := add(0x204b0c397f4ebe71ebc2d8b3df5b913df9e6ac02b68d31324cd49af5c4565529, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\n state2 := add(0x0c4cb9dc3c4fd8174f1149b3c63c3c2f9ecb827cd7dc25534ff8fb75bc79c502, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\n scratch0 := mulmod(state0, state0, F)\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\n scratch0 := add(0x174ad61a1448c899a25416474f4930301e5c49475279e0639a616ddc45bc7b54, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\n scratch1 := add(0x1a96177bcf4d8d89f759df4ec2f3cde2eaaa28c177cc0fa13a9816d49a38d2ef, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\n scratch2 := add(0x066d04b24331d71cd0ef8054bc60c4ff05202c126a233c1a8242ace360b8a30a, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\n state0 := mulmod(scratch0, scratch0, F)\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\n state0 := add(0x2a4c4fc6ec0b0cf52195782871c6dd3b381cc65f72e02ad527037a62aa1bd804, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\n state1 := add(0x13ab2d136ccf37d447e9f2e14a7cedc95e727f8446f6d9d7e55afc01219fd649, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\n state2 := add(0x1121552fca26061619d24d843dc82769c1b04fcec26f55194c2e3e869acc6a9a, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\n scratch0 := mulmod(state0, state0, F)\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\n scratch0 := add(0x00ef653322b13d6c889bc81715c37d77a6cd267d595c4a8909a5546c7c97cff1, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\n scratch1 := add(0x0e25483e45a665208b261d8ba74051e6400c776d652595d9845aca35d8a397d3, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\n scratch2 := add(0x29f536dcb9dd7682245264659e15d88e395ac3d4dde92d8c46448db979eeba89, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\n state0 := mulmod(scratch0, scratch0, F)\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\n state0 := add(0x2a56ef9f2c53febadfda33575dbdbd885a124e2780bbea170e456baace0fa5be, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\n state1 := add(0x1c8361c78eb5cf5decfb7a2d17b5c409f2ae2999a46762e8ee416240a8cb9af1, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\n state2 := add(0x151aff5f38b20a0fc0473089aaf0206b83e8e68a764507bfd3d0ab4be74319c5, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\n scratch0 := mulmod(state0, state0, F)\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\n scratch0 := add(0x04c6187e41ed881dc1b239c88f7f9d43a9f52fc8c8b6cdd1e76e47615b51f100, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\n scratch1 := add(0x13b37bd80f4d27fb10d84331f6fb6d534b81c61ed15776449e801b7ddc9c2967, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\n scratch2 := add(0x01a5c536273c2d9df578bfbd32c17b7a2ce3664c2a52032c9321ceb1c4e8a8e4, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\n state0 := mulmod(scratch0, scratch0, F)\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\n state0 := add(0x2ab3561834ca73835ad05f5d7acb950b4a9a2c666b9726da832239065b7c3b02, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\n state1 := add(0x1d4d8ec291e720db200fe6d686c0d613acaf6af4e95d3bf69f7ed516a597b646, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\n state2 := add(0x041294d2cc484d228f5784fe7919fd2bb925351240a04b711514c9c80b65af1d, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\n scratch0 := mulmod(state0, state0, F)\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\n scratch0 := add(0x154ac98e01708c611c4fa715991f004898f57939d126e392042971dd90e81fc6, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\n scratch1 := add(0x0b339d8acca7d4f83eedd84093aef51050b3684c88f8b0b04524563bc6ea4da4, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\n scratch2 := add(0x0955e49e6610c94254a4f84cfbab344598f0e71eaff4a7dd81ed95b50839c82e, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\n state0 := mulmod(scratch0, scratch0, F)\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\n state0 := add(0x06746a6156eba54426b9e22206f15abca9a6f41e6f535c6f3525401ea0654626, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\n state1 := add(0x0f18f5a0ecd1423c496f3820c549c27838e5790e2bd0a196ac917c7ff32077fb, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\n state2 := add(0x04f6eeca1751f7308ac59eff5beb261e4bb563583ede7bc92a738223d6f76e13, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\n scratch0 := mulmod(state0, state0, F)\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\n scratch0 := add(0x2b56973364c4c4f5c1a3ec4da3cdce038811eb116fb3e45bc1768d26fc0b3758, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\n scratch1 := add(0x123769dd49d5b054dcd76b89804b1bcb8e1392b385716a5d83feb65d437f29ef, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\n scratch2 := add(0x2147b424fc48c80a88ee52b91169aacea989f6446471150994257b2fb01c63e9, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\n state0 := mulmod(scratch0, scratch0, F)\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\n state0 := add(0x0fdc1f58548b85701a6c5505ea332a29647e6f34ad4243c2ea54ad897cebe54d, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\n state1 := add(0x12373a8251fea004df68abcf0f7786d4bceff28c5dbbe0c3944f685cc0a0b1f2, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\n state2 := add(0x21e4f4ea5f35f85bad7ea52ff742c9e8a642756b6af44203dd8a1f35c1a90035, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\n scratch0 := mulmod(state0, state0, F)\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\n scratch0 := add(0x16243916d69d2ca3dfb4722224d4c462b57366492f45e90d8a81934f1bc3b147, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\n scratch1 := add(0x1efbe46dd7a578b4f66f9adbc88b4378abc21566e1a0453ca13a4159cac04ac2, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\n scratch2 := add(0x07ea5e8537cf5dd08886020e23a7f387d468d5525be66f853b672cc96a88969a, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\n state0 := mulmod(scratch0, scratch0, F)\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\n state0 := add(0x05a8c4f9968b8aa3b7b478a30f9a5b63650f19a75e7ce11ca9fe16c0b76c00bc, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\n state1 := add(0x20f057712cc21654fbfe59bd345e8dac3f7818c701b9c7882d9d57b72a32e83f, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\n state2 := add(0x04a12ededa9dfd689672f8c67fee31636dcd8e88d01d49019bd90b33eb33db69, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\n scratch0 := mulmod(state0, state0, F)\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\n scratch0 := add(0x27e88d8c15f37dcee44f1e5425a51decbd136ce5091a6767e49ec9544ccd101a, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\n scratch1 := add(0x2feed17b84285ed9b8a5c8c5e95a41f66e096619a7703223176c41ee433de4d1, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\n scratch2 := add(0x1ed7cc76edf45c7c404241420f729cf394e5942911312a0d6972b8bd53aff2b8, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\n state0 := mulmod(scratch0, scratch0, F)\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\n state0 := add(0x15742e99b9bfa323157ff8c586f5660eac6783476144cdcadf2874be45466b1a, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\n state1 := add(0x1aac285387f65e82c895fc6887ddf40577107454c6ec0317284f033f27d0c785, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\n state2 := add(0x25851c3c845d4790f9ddadbdb6057357832e2e7a49775f71ec75a96554d67c77, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\n scratch0 := mulmod(state0, state0, F)\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\n scratch0 := add(0x15a5821565cc2ec2ce78457db197edf353b7ebba2c5523370ddccc3d9f146a67, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\n scratch1 := add(0x2411d57a4813b9980efa7e31a1db5966dcf64f36044277502f15485f28c71727, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\n scratch2 := add(0x002e6f8d6520cd4713e335b8c0b6d2e647e9a98e12f4cd2558828b5ef6cb4c9b, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\n state0 := mulmod(scratch0, scratch0, F)\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\n state0 := add(0x2ff7bc8f4380cde997da00b616b0fcd1af8f0e91e2fe1ed7398834609e0315d2, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\n state1 := add(0x00b9831b948525595ee02724471bcd182e9521f6b7bb68f1e93be4febb0d3cbe, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\n state2 := add(0x0a2f53768b8ebf6a86913b0e57c04e011ca408648a4743a87d77adbf0c9c3512, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\n scratch0 := mulmod(state0, state0, F)\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\n scratch0 := add(0x00248156142fd0373a479f91ff239e960f599ff7e94be69b7f2a290305e1198d, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\n scratch1 := add(0x171d5620b87bfb1328cf8c02ab3f0c9a397196aa6a542c2350eb512a2b2bcda9, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\n scratch2 := add(0x170a4f55536f7dc970087c7c10d6fad760c952172dd54dd99d1045e4ec34a808, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\n state0 := mulmod(scratch0, scratch0, F)\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\n state0 := add(0x29aba33f799fe66c2ef3134aea04336ecc37e38c1cd211ba482eca17e2dbfae1, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\n state1 := add(0x1e9bc179a4fdd758fdd1bb1945088d47e70d114a03f6a0e8b5ba650369e64973, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\n state2 := add(0x1dd269799b660fad58f7f4892dfb0b5afeaad869a9c4b44f9c9e1c43bdaf8f09, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\n scratch0 := mulmod(state0, state0, F)\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\n scratch0 := add(0x22cdbc8b70117ad1401181d02e15459e7ccd426fe869c7c95d1dd2cb0f24af38, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\n scratch1 := add(0x0ef042e454771c533a9f57a55c503fcefd3150f52ed94a7cd5ba93b9c7dacefd, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\n scratch2 := add(0x11609e06ad6c8fe2f287f3036037e8851318e8b08a0359a03b304ffca62e8284, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\n state0 := mulmod(scratch0, scratch0, F)\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\n state0 := add(0x1166d9e554616dba9e753eea427c17b7fecd58c076dfe42708b08f5b783aa9af, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\n state1 := add(0x2de52989431a859593413026354413db177fbf4cd2ac0b56f855a888357ee466, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\n state2 := add(0x3006eb4ffc7a85819a6da492f3a8ac1df51aee5b17b8e89d74bf01cf5f71e9ad, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\n scratch0 := mulmod(state0, state0, F)\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\n scratch0 := add(0x2af41fbb61ba8a80fdcf6fff9e3f6f422993fe8f0a4639f962344c8225145086, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\n scratch1 := add(0x119e684de476155fe5a6b41a8ebc85db8718ab27889e85e781b214bace4827c3, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\n scratch2 := add(0x1835b786e2e8925e188bea59ae363537b51248c23828f047cff784b97b3fd800, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\n state0 := mulmod(scratch0, scratch0, F)\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\n state0 := add(0x28201a34c594dfa34d794996c6433a20d152bac2a7905c926c40e285ab32eeb6, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\n state1 := add(0x083efd7a27d1751094e80fefaf78b000864c82eb571187724a761f88c22cc4e7, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\n state2 := add(0x0b6f88a3577199526158e61ceea27be811c16df7774dd8519e079564f61fd13b, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\n scratch0 := mulmod(state0, state0, F)\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\n scratch0 := add(0x0ec868e6d15e51d9644f66e1d6471a94589511ca00d29e1014390e6ee4254f5b, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\n scratch1 := add(0x2af33e3f866771271ac0c9b3ed2e1142ecd3e74b939cd40d00d937ab84c98591, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\n scratch2 := add(0x0b520211f904b5e7d09b5d961c6ace7734568c547dd6858b364ce5e47951f178, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\n state0 := mulmod(scratch0, scratch0, F)\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\n state0 := add(0x0b2d722d0919a1aad8db58f10062a92ea0c56ac4270e822cca228620188a1d40, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\n state1 := add(0x1f790d4d7f8cf094d980ceb37c2453e957b54a9991ca38bbe0061d1ed6e562d4, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\n state2 := add(0x0171eb95dfbf7d1eaea97cd385f780150885c16235a2a6a8da92ceb01e504233, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\n scratch0 := mulmod(state0, state0, F)\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\n scratch0 := add(0x0c2d0e3b5fd57549329bf6885da66b9b790b40defd2c8650762305381b168873, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\n scratch1 := add(0x1162fb28689c27154e5a8228b4e72b377cbcafa589e283c35d3803054407a18d, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\n scratch2 := add(0x2f1459b65dee441b64ad386a91e8310f282c5a92a89e19921623ef8249711bc0, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\n state0 := mulmod(scratch0, scratch0, F)\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\n state0 := add(0x1e6ff3216b688c3d996d74367d5cd4c1bc489d46754eb712c243f70d1b53cfbb, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\n state1 := add(0x01ca8be73832b8d0681487d27d157802d741a6f36cdc2a0576881f9326478875, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\n state2 := add(0x1f7735706ffe9fc586f976d5bdf223dc680286080b10cea00b9b5de315f9650e, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\n scratch0 := mulmod(state0, state0, F)\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\n scratch0 := add(0x2522b60f4ea3307640a0c2dce041fba921ac10a3d5f096ef4745ca838285f019, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\n scratch1 := add(0x23f0bee001b1029d5255075ddc957f833418cad4f52b6c3f8ce16c235572575b, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\n scratch2 := add(0x2bc1ae8b8ddbb81fcaac2d44555ed5685d142633e9df905f66d9401093082d59, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\n state0 := mulmod(scratch0, scratch0, F)\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\n state0 := add(0x0f9406b8296564a37304507b8dba3ed162371273a07b1fc98011fcd6ad72205f, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\n state1 := add(0x2360a8eb0cc7defa67b72998de90714e17e75b174a52ee4acb126c8cd995f0a8, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\n state2 := add(0x15871a5cddead976804c803cbaef255eb4815a5e96df8b006dcbbc2767f88948, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\n scratch0 := mulmod(state0, state0, F)\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\n scratch0 := add(0x193a56766998ee9e0a8652dd2f3b1da0362f4f54f72379544f957ccdeefb420f, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\n scratch1 := add(0x2a394a43934f86982f9be56ff4fab1703b2e63c8ad334834e4309805e777ae0f, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\n scratch2 := add(0x1859954cfeb8695f3e8b635dcb345192892cd11223443ba7b4166e8876c0d142, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\n state0 := mulmod(scratch0, scratch0, F)\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\n state0 := add(0x04e1181763050e58013444dbcb99f1902b11bc25d90bbdca408d3819f4fed32b, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\n state1 := add(0x0fdb253dee83869d40c335ea64de8c5bb10eb82db08b5e8b1f5e5552bfd05f23, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\n state2 := add(0x058cbe8a9a5027bdaa4efb623adead6275f08686f1c08984a9d7c5bae9b4f1c0, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\n scratch0 := mulmod(state0, state0, F)\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\n scratch0 := add(0x1382edce9971e186497eadb1aeb1f52b23b4b83bef023ab0d15228b4cceca59a, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\n scratch1 := add(0x03464990f045c6ee0819ca51fd11b0be7f61b8eb99f14b77e1e6634601d9e8b5, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\n scratch2 := add(0x23f7bfc8720dc296fff33b41f98ff83c6fcab4605db2eb5aaa5bc137aeb70a58, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\n state0 := mulmod(scratch0, scratch0, F)\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\n state0 := add(0x0a59a158e3eec2117e6e94e7f0e9decf18c3ffd5e1531a9219636158bbaf62f2, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\n state1 := add(0x06ec54c80381c052b58bf23b312ffd3ce2c4eba065420af8f4c23ed0075fd07b, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\n state2 := add(0x118872dc832e0eb5476b56648e867ec8b09340f7a7bcb1b4962f0ff9ed1f9d01, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\n scratch0 := mulmod(state0, state0, F)\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\n scratch0 := add(0x13d69fa127d834165ad5c7cba7ad59ed52e0b0f0e42d7fea95e1906b520921b1, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\n scratch1 := add(0x169a177f63ea681270b1c6877a73d21bde143942fb71dc55fd8a49f19f10c77b, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\n scratch2 := add(0x04ef51591c6ead97ef42f287adce40d93abeb032b922f66ffb7e9a5a7450544d, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\n state0 := mulmod(scratch0, scratch0, F)\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\n state0 := add(0x256e175a1dc079390ecd7ca703fb2e3b19ec61805d4f03ced5f45ee6dd0f69ec, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\n state1 := add(0x30102d28636abd5fe5f2af412ff6004f75cc360d3205dd2da002813d3e2ceeb2, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\n state2 := add(0x10998e42dfcd3bbf1c0714bc73eb1bf40443a3fa99bef4a31fd31be182fcc792, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\n scratch0 := mulmod(state0, state0, F)\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\n scratch0 := add(0x193edd8e9fcf3d7625fa7d24b598a1d89f3362eaf4d582efecad76f879e36860, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\n scratch1 := add(0x18168afd34f2d915d0368ce80b7b3347d1c7a561ce611425f2664d7aa51f0b5d, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\n scratch2 := add(0x29383c01ebd3b6ab0c017656ebe658b6a328ec77bc33626e29e2e95b33ea6111, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\n state0 := mulmod(scratch0, scratch0, F)\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\n state0 := add(0x10646d2f2603de39a1f4ae5e7771a64a702db6e86fb76ab600bf573f9010c711, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\n state1 := add(0x0beb5e07d1b27145f575f1395a55bf132f90c25b40da7b3864d0242dcb1117fb, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\n state2 := add(0x16d685252078c133dc0d3ecad62b5c8830f95bb2e54b59abdffbf018d96fa336, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\n scratch0 := mulmod(state0, state0, F)\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\n scratch0 := add(0x0a6abd1d833938f33c74154e0404b4b40a555bbbec21ddfafd672dd62047f01a, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\n scratch1 := add(0x1a679f5d36eb7b5c8ea12a4c2dedc8feb12dffeec450317270a6f19b34cf1860, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\n scratch2 := add(0x0980fb233bd456c23974d50e0ebfde4726a423eada4e8f6ffbc7592e3f1b93d6, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\n state0 := mulmod(scratch0, scratch0, F)\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\n state0 := add(0x161b42232e61b84cbf1810af93a38fc0cece3d5628c9282003ebacb5c312c72b, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\n state1 := add(0x0ada10a90c7f0520950f7d47a60d5e6a493f09787f1564e5d09203db47de1a0b, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\n state2 := add(0x1a730d372310ba82320345a29ac4238ed3f07a8a2b4e121bb50ddb9af407f451, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\n scratch0 := mulmod(state0, state0, F)\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\n scratch0 := add(0x2c8120f268ef054f817064c369dda7ea908377feaba5c4dffbda10ef58e8c556, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\n scratch1 := add(0x1c7c8824f758753fa57c00789c684217b930e95313bcb73e6e7b8649a4968f70, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\n scratch2 := add(0x2cd9ed31f5f8691c8e39e4077a74faa0f400ad8b491eb3f7b47b27fa3fd1cf77, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\n state0 := mulmod(scratch0, scratch0, F)\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\n state0 := add(0x23ff4f9d46813457cf60d92f57618399a5e022ac321ca550854ae23918a22eea, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\n state1 := add(0x09945a5d147a4f66ceece6405dddd9d0af5a2c5103529407dff1ea58f180426d, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\n state2 := add(0x188d9c528025d4c2b67660c6b771b90f7c7da6eaa29d3f268a6dd223ec6fc630, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\n scratch0 := mulmod(state0, state0, F)\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\n scratch0 := add(0x3050e37996596b7f81f68311431d8734dba7d926d3633595e0c0d8ddf4f0f47f, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\n scratch1 := add(0x15af1169396830a91600ca8102c35c426ceae5461e3f95d89d829518d30afd78, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\n scratch2 := add(0x1da6d09885432ea9a06d9f37f873d985dae933e351466b2904284da3320d8acc, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\n state0 := mulmod(scratch0, scratch0, F)\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\n state0 := add(0x2796ea90d269af29f5f8acf33921124e4e4fad3dbe658945e546ee411ddaa9cb, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\n state1 := add(0x202d7dd1da0f6b4b0325c8b3307742f01e15612ec8e9304a7cb0319e01d32d60, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\n state2 := add(0x096d6790d05bb759156a952ba263d672a2d7f9c788f4c831a29dace4c0f8be5f, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\n scratch0 := mulmod(state0, state0, F)\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\n scratch0 := add(0x054efa1f65b0fce283808965275d877b438da23ce5b13e1963798cb1447d25a4, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\n scratch1 := add(0x1b162f83d917e93edb3308c29802deb9d8aa690113b2e14864ccf6e18e4165f1, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\n scratch2 := add(0x21e5241e12564dd6fd9f1cdd2a0de39eedfefc1466cc568ec5ceb745a0506edc, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\n state0 := mulmod(scratch0, scratch0, F)\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\n state0 := mulmod(scratch1, scratch1, F)\n scratch1 := mulmod(mulmod(state0, state0, F), scratch1, F)\n state0 := mulmod(scratch2, scratch2, F)\n scratch2 := mulmod(mulmod(state0, state0, F), scratch2, F)\n state0 := add(0x1cfb5662e8cf5ac9226a80ee17b36abecb73ab5f87e161927b4349e10e4bdf08, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\n state1 := add(0x0f21177e302a771bbae6d8d1ecb373b62c99af346220ac0129c53f666eb24100, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\n state2 := add(0x1671522374606992affb0dd7f71b12bec4236aede6290546bcef7e1f515c2320, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\n scratch0 := mulmod(state0, state0, F)\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\n scratch0 := mulmod(state1, state1, F)\n state1 := mulmod(mulmod(scratch0, scratch0, F), state1, F)\n scratch0 := mulmod(state2, state2, F)\n state2 := mulmod(mulmod(scratch0, scratch0, F), state2, F)\n scratch0 := add(0x0fa3ec5b9488259c2eb4cf24501bfad9be2ec9e42c5cc8ccd419d2a692cad870, add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)))\n scratch1 := add(0x193c0e04e0bd298357cb266c1506080ed36edce85c648cc085e8c57b1ab54bba, add(add(mulmod(state0, M01, F), mulmod(state1, M11, F)), mulmod(state2, M21, F)))\n scratch2 := add(0x102adf8ef74735a27e9128306dcbc3c99f6f7291cd406578ce14ea2adaba68f8, add(add(mulmod(state0, M02, F), mulmod(state1, M12, F)), mulmod(state2, M22, F)))\n state0 := mulmod(scratch0, scratch0, F)\n scratch0 := mulmod(mulmod(state0, state0, F), scratch0, F)\n state0 := mulmod(scratch1, scratch1, F)\n scratch1 := mulmod(mulmod(state0, state0, F), scratch1, F)\n state0 := mulmod(scratch2, scratch2, F)\n scratch2 := mulmod(mulmod(state0, state0, F), scratch2, F)\n state0 := add(0x0fe0af7858e49859e2a54d6f1ad945b1316aa24bfbdd23ae40a6d0cb70c3eab1, add(add(mulmod(scratch0, M00, F), mulmod(scratch1, M10, F)), mulmod(scratch2, M20, F)))\n state1 := add(0x216f6717bbc7dedb08536a2220843f4e2da5f1daa9ebdefde8a5ea7344798d22, add(add(mulmod(scratch0, M01, F), mulmod(scratch1, M11, F)), mulmod(scratch2, M21, F)))\n state2 := add(0x1da55cc900f0d21f4a3e694391918a1b3c23b2ac773c6b3ef88e2e4228325161, add(add(mulmod(scratch0, M02, F), mulmod(scratch1, M12, F)), mulmod(scratch2, M22, F)))\n scratch0 := mulmod(state0, state0, F)\n state0 := mulmod(mulmod(scratch0, scratch0, F), state0, F)\n scratch0 := mulmod(state1, state1, F)\n state1 := mulmod(mulmod(scratch0, scratch0, F), state1, F)\n scratch0 := mulmod(state2, state2, F)\n state2 := mulmod(mulmod(scratch0, scratch0, F), state2, F)\n\n mstore(0x0, mod(add(add(mulmod(state0, M00, F), mulmod(state1, M10, F)), mulmod(state2, M20, F)), F))\n\n return(0, 0x20)\n }\n }\n}\n" + } + }, + "settings": { + "metadata": { + "bytecodeHash": "none", + "useLiteralContent": true + }, + "optimizer": { + "enabled": true, + "runs": 800 + }, + "viaIR": true, + "evmVersion": "paris", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + } + } +} \ No newline at end of file diff --git a/packages/evm/hardhat.config.ts b/packages/evm/hardhat.config.cts similarity index 97% rename from packages/evm/hardhat.config.ts rename to packages/evm/hardhat.config.cts index f1e0661f5d..036b4c3445 100644 --- a/packages/evm/hardhat.config.ts +++ b/packages/evm/hardhat.config.cts @@ -1,3 +1,7 @@ +import "./tasks/accounts"; +import "./tasks/ciphernode"; +import "./tasks/enclave"; +import "@nomicfoundation/hardhat-chai-matchers"; import "@nomicfoundation/hardhat-toolbox"; import dotenv from "dotenv"; import "hardhat-deploy"; @@ -5,10 +9,6 @@ import type { HardhatUserConfig } from "hardhat/config"; import { vars } from "hardhat/config"; import type { NetworkUserConfig } from "hardhat/types"; -import "./tasks/accounts"; -import "./tasks/ciphernode"; -import "./tasks/enclave"; - dotenv.config(); const { INFURA_KEY, MNEMONIC, PRIVATE_KEY, ETHERSCAN_API_KEY } = process.env; @@ -56,7 +56,7 @@ function getChainConfig(chain: keyof typeof chainIds): NetworkUserConfig { jsonRpcUrl = "https://" + chain + ".infura.io/v3/" + infuraApiKey; } - let accounts; + let accounts: [string] | { mnemonic: string }; if (PRIVATE_KEY) { accounts = [PRIVATE_KEY]; } else { diff --git a/packages/evm/package.json b/packages/evm/package.json index 23861ad876..f17acb84e1 100644 --- a/packages/evm/package.json +++ b/packages/evm/package.json @@ -1,13 +1,48 @@ { "name": "@gnosis-guild/enclave", "description": "Enclave is an open-source protocol for Encrypted Execution Environments (E3).", - "version": "0.0.5", + "version": "0.0.6-test", "license": "LGPL-3.0-only", "author": { "name": "gnosisguild", "url": "https://github.com/gnosisguild" }, + "exports": { + "./deploy/enclave": { + "import": { + "types": "./dist/deploy/enclave.d.mts", + "default": "./dist/deploy/enclave.mjs" + }, + "require": { + "types": "./dist/deploy/enclave.d.ts", + "default": "./dist/deploy/enclave.js" + } + }, + "./deploy/mocks": { + "import": { + "types": "./dist/deploy/mocks.d.mts", + "default": "./dist/deploy/mocks.mjs" + }, + "require": { + "types": "./dist/deploy/mocks.d.ts", + "default": "./dist/deploy/mocks.js" + } + }, + "./contracts/*": "./contracts/*", + "./artifacts/*": "./artifacts/*", + "./types": { + "import": { + "types": "./dist/types/index.d.mts", + "default": "./dist/types/index.mjs" + }, + "require": { + "types": "./dist/types/index.d.ts", + "default": "./dist/types/index.js" + } + } + }, "devDependencies": { + "@gnosis-guild/enclave-config": "workspace:*", "@nomicfoundation/hardhat-chai-matchers": "^2.0.2", "@nomicfoundation/hardhat-ethers": "^3.0.5", "@nomicfoundation/hardhat-network-helpers": "^1.0.10", @@ -21,7 +56,7 @@ "@types/chai": "^4.3.11", "@types/fs-extra": "^11.0.4", "@types/mocha": "^10.0.6", - "@types/node": "^20.10.4", + "@types/node": "^22.7.5", "@typescript-eslint/eslint-plugin": "^7.11.0", "@typescript-eslint/parser": "^7.11.0", "@zk-kit/lean-imt": "^2.1.0", @@ -47,12 +82,14 @@ "solhint-plugin-prettier": "^0.1.0", "solidity-coverage": "^0.8.5", "ts-generator": "^0.1.1", - "ts-node": "^10.9.2", + "tsup": "^8.5.0", "typechain": "^8.3.2", - "typescript": "^5.3.3" + "typescript": "5.8.3" }, "files": [ - "contracts" + "contracts", + "dist", + "artifacts" ], "keywords": [ "blockchain", @@ -66,11 +103,15 @@ "typechain" ], "publishConfig": { - "access": "public" + "access": "public", + "git-checks": false }, "scripts": { - "clean": "rimraf ./artifacts ./cache ./coverage ./types ./coverage.json && pnpm typechain", - "compile": "cross-env TS_NODE_TRANSPILE_ONLY=true hardhat compile", + "clean": "rimraf ./artifacts ./cache ./coverage ./types ./dist ./coverage.json && pnpm typechain", + "build": "pnpm compile", + "compile": "pnpm compile:contracts && pnpm compile:ts", + "compile:contracts": "cross-env TS_NODE_TRANSPILE_ONLY=true hardhat compile", + "compile:ts": "pnpm typechain && tsup", "coverage": "hardhat coverage --solcoverjs ./.solcover.js --temp artifacts --testfiles \"test/**/*.ts\" && pnpm typechain", "deploy": "hardhat deploy --tags enclave", "deploy:mocks": "hardhat deploy --tags enclave,mocks", @@ -88,10 +129,11 @@ "test": "hardhat test", "typechain": "cross-env TS_NODE_TRANSPILE_ONLY=true hardhat typechain", "prerelease": "pnpm clean && pnpm compile && pnpm typechain", - "release": "pnpm publish --non-interactive" + "release": "pnpm publish" }, "dependencies": { "@excubiae/contracts": "^0.4.0", + "@gnosis-guild/e3-wasm": "workspace:*", "solady": "^0.1.13" }, "packageManager": "pnpm@10.7.1+sha512.2d92c86b7928dc8284f53494fb4201f983da65f0fb4f0d40baafa5cf628fa31dae3e5968f12466f17df7e97310e30f343a648baea1b9b350685dafafffdf5808" diff --git a/packages/evm/test/CiphernodeRegistry/CiphernodeRegistryOwnable.spec.ts b/packages/evm/test/CiphernodeRegistry/CiphernodeRegistryOwnable.spec.ts index c426da6410..b6ef6eb81f 100644 --- a/packages/evm/test/CiphernodeRegistry/CiphernodeRegistryOwnable.spec.ts +++ b/packages/evm/test/CiphernodeRegistry/CiphernodeRegistryOwnable.spec.ts @@ -21,7 +21,9 @@ const hash = (a: bigint, b: bigint) => poseidon2([a, b]); describe("CiphernodeRegistryOwnable", function () { async function setup() { const [owner, notTheOwner] = await ethers.getSigners(); - + if (!owner) throw new Error("getSigners() did not return expected output"); + if (!notTheOwner) + throw new Error("getSigners() did not return expected output"); const poseidon = await PoseidonT3Fixture(); const registry = await deployCiphernodeRegistryOwnableFixture( owner.address, @@ -58,6 +60,7 @@ describe("CiphernodeRegistryOwnable", function () { const poseidonFactory = await ethers.getContractFactory("PoseidonT3"); const poseidonDeployment = await poseidonFactory.deploy(); const [deployer] = await ethers.getSigners(); + if (!deployer) throw new Error("Bad getSigners() output"); const ciphernodeRegistryFactory = await ethers.getContractFactory( "CiphernodeRegistryOwnable", { diff --git a/packages/evm/test/CiphernodeRegistry/NaiveRegistryFilter.spec.ts b/packages/evm/test/CiphernodeRegistry/NaiveRegistryFilter.spec.ts index ec11e0ef09..1dd1f5d595 100644 --- a/packages/evm/test/CiphernodeRegistry/NaiveRegistryFilter.spec.ts +++ b/packages/evm/test/CiphernodeRegistry/NaiveRegistryFilter.spec.ts @@ -18,7 +18,8 @@ const hash = (a: bigint, b: bigint) => poseidon2([a, b]); describe("NaiveRegistryFilter", function () { async function setup() { const [owner, notTheOwner] = await ethers.getSigners(); - + if (!owner) throw new Error("Bad getSigners output"); + if (!notTheOwner) throw new Error("Bad getSigners output"); const poseidon = await PoseidonT3Fixture(); const registry = await deployCiphernodeRegistryOwnableFixture( owner.address, diff --git a/packages/evm/test/Enclave.spec.ts b/packages/evm/test/Enclave.spec.ts index e93cfd9171..3b104c375c 100644 --- a/packages/evm/test/Enclave.spec.ts +++ b/packages/evm/test/Enclave.spec.ts @@ -1,3 +1,5 @@ +import "@nomicfoundation/hardhat-chai-matchers"; +import { anyValue } from "@nomicfoundation/hardhat-chai-matchers/withArgs"; import { loadFixture, mine, @@ -32,6 +34,14 @@ const data = "0xda7a"; const dataHash = ethers.keccak256(data); const _publicKeyHash = ethers.keccak256(abiCoder.encode(["uint256"], [0])); const proof = "0x1337"; +const polynomial_degree = ethers.toBigInt(2048); +const plaintext_modulus = ethers.toBigInt(1032193); +const moduli = [ethers.toBigInt("18014398492704769")]; // 0x3FFFFFFF000001 + +const encodedE3ProgramParams = ethers.AbiCoder.defaultAbiCoder().encode( + ["uint256", "uint256", "uint256[]"], + [polynomial_degree, plaintext_modulus, moduli], +); // Hash function used to compute the tree nodes. const hash = (a: bigint, b: bigint) => poseidon2([a, b]); @@ -39,7 +49,8 @@ const hash = (a: bigint, b: bigint) => poseidon2([a, b]); describe("Enclave", function () { async function setup() { const [owner, notTheOwner] = await ethers.getSigners(); - + if (!owner) throw new Error("Bad getSigners() output"); + if (!notTheOwner) throw new Error("Bad getSigners() output"); const poseidon = await PoseidonT3Fixture(); const registry = await deployCiphernodeRegistryFixture(); const decryptionVerifier = await deployDecryptionVerifierFixture(); @@ -64,6 +75,8 @@ describe("Enclave", function () { await enclave.enableE3Program(await e3Program.getAddress()); + await enclave.setE3ProgramsParams([encodedE3ProgramParams]); + return { owner, notTheOwner, @@ -85,7 +98,7 @@ describe("Enclave", function () { ], duration: time.duration.days(30), e3Program: await e3Program.getAddress(), - e3ProgramParams: "0x12345678", + e3ProgramParams: encodedE3ProgramParams, computeProviderParams: abiCoder.encode( ["address"], [await decryptionVerifier.getAddress()], @@ -185,6 +198,69 @@ describe("Enclave", function () { }); }); + describe("setE3ProgramsParams()", function () { + const polynomial_degree = ethers.toBigInt(2048); + const plaintext_modulus = ethers.toBigInt(1032193); + const moduli = [ethers.toBigInt("18014398492704769")]; // 0x3FFFFFFF000001 + + const encodedE3ProgramParams = ethers.AbiCoder.defaultAbiCoder().encode( + ["uint256", "uint256", "uint256[]"], + [polynomial_degree, plaintext_modulus, moduli], + ); + + const encodedE3ProgramsParams = [encodedE3ProgramParams]; + + it("reverts if not called by owner", async function () { + const { enclave, notTheOwner } = await loadFixture(setup); + + await expect( + enclave + .connect(notTheOwner) + .setE3ProgramsParams(encodedE3ProgramsParams), + ) + .to.be.revertedWithCustomError(enclave, "OwnableUnauthorizedAccount") + .withArgs(notTheOwner); + }); + + it("sets E3 program parameters correctly", async function () { + const { enclave } = await loadFixture(setup); + + await enclave.setE3ProgramsParams(encodedE3ProgramsParams); + expect(await enclave.e3ProgramsParams(encodedE3ProgramsParams[0]!)).to.be + .true; + }); + + it("returns true if parameters are set successfully", async function () { + const { enclave } = await loadFixture(setup); + + const result = await enclave.setE3ProgramsParams.staticCall( + encodedE3ProgramsParams, + ); + expect(result).to.be.true; + }); + + it("emits AllowedE3ProgramsParamsSet event", async function () { + const { enclave } = await loadFixture(setup); + + await expect(enclave.setE3ProgramsParams(encodedE3ProgramsParams)) + .to.emit(enclave, "AllowedE3ProgramsParamsSet") + .withArgs(encodedE3ProgramsParams); + }); + + it("handles multiple parameters", async function () { + const { enclave } = await loadFixture(setup); + encodedE3ProgramsParams.push( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ); + + await enclave.setE3ProgramsParams(encodedE3ProgramsParams); + + for (const param of encodedE3ProgramsParams) { + expect(await enclave.e3ProgramsParams(param)).to.be.true; + } + }); + }); + describe("getE3()", function () { it("reverts if E3 does not exist", async function () { const { enclave } = await loadFixture(setup); @@ -537,7 +613,12 @@ describe("Enclave", function () { request.startTime, request.duration, request.e3Program, - abiCoder.encode(["bytes", "address"], [ZeroHash, ethers.ZeroAddress]), + ethers.keccak256( + abiCoder.encode( + ["bytes", "address"], + [ZeroHash, ethers.ZeroAddress], + ), + ), request.computeProviderParams, { value: 10 }, ), @@ -823,11 +904,10 @@ describe("Enclave", function () { ); const e3Id = 0; - const e3 = await enclave.getE3(e3Id); await expect(enclave.activate(e3Id, ethers.ZeroHash)) .to.emit(enclave, "E3Activated") - .withArgs(e3Id, e3.expiration, e3.committeePublicKey); + .withArgs(e3Id, anyValue, ethers.ZeroHash); }); }); diff --git a/packages/evm/test/fixtures/Enclave.fixture.ts b/packages/evm/test/fixtures/Enclave.fixture.ts index b5d9087c09..85aa0aa4ce 100644 --- a/packages/evm/test/fixtures/Enclave.fixture.ts +++ b/packages/evm/test/fixtures/Enclave.fixture.ts @@ -9,13 +9,23 @@ export async function deployEnclaveFixture( maxDuration?: number, ) { const [signer] = await ethers.getSigners(); + const polynomial_degree = ethers.toBigInt(2048); + const plaintext_modulus = ethers.toBigInt(1032193); + const moduli = [ethers.toBigInt("18014398492704769")]; // 0x3FFFFFFF000001 + + // Encode just the struct (NOT the function selector) + const encoded = ethers.AbiCoder.defaultAbiCoder().encode( + ["uint256", "uint256", "uint256[]"], + [polynomial_degree, plaintext_modulus, moduli], + ); + const deployment = await ( await ethers.getContractFactory("Enclave", { libraries: { PoseidonT3: poseidonT3, }, }) - ).deploy(owner, registry, maxDuration || 60 * 60 * 24 * 30); + ).deploy(owner, registry, maxDuration || 60 * 60 * 24 * 30, [encoded]); return Enclave__factory.connect(await deployment.getAddress(), signer); } diff --git a/packages/evm/test/fixtures/MockCiphernodeRegistry.fixture.ts b/packages/evm/test/fixtures/MockCiphernodeRegistry.fixture.ts index 4e960cbccb..632762545d 100644 --- a/packages/evm/test/fixtures/MockCiphernodeRegistry.fixture.ts +++ b/packages/evm/test/fixtures/MockCiphernodeRegistry.fixture.ts @@ -10,6 +10,6 @@ export async function deployCiphernodeRegistryFixture(name?: string) { return MockCiphernodeRegistry__factory.connect( await deployment.getAddress(), - signer.provider, + signer!.provider, ); } diff --git a/packages/evm/test/fixtures/PoseidonT3.fixture.ts b/packages/evm/test/fixtures/PoseidonT3.fixture.ts index 471339c970..57f1c07b7e 100644 --- a/packages/evm/test/fixtures/PoseidonT3.fixture.ts +++ b/packages/evm/test/fixtures/PoseidonT3.fixture.ts @@ -4,6 +4,7 @@ import { PoseidonT3__factory } from "../../types"; export async function PoseidonT3Fixture(name?: string) { const [signer] = await ethers.getSigners(); + if (!signer) throw new Error("Bad getSigners output"); const deployment = await ( await ethers.getContractFactory(name || "PoseidonT3") ).deploy(); diff --git a/packages/evm/test/fixtures/pubkey.bin b/packages/evm/test/fixtures/pubkey.bin new file mode 100644 index 0000000000..ecc1d29341 Binary files /dev/null and b/packages/evm/test/fixtures/pubkey.bin differ diff --git a/packages/evm/tsconfig.json b/packages/evm/tsconfig.json index 734e21a248..a8d06e7401 100644 --- a/packages/evm/tsconfig.json +++ b/packages/evm/tsconfig.json @@ -1,22 +1,11 @@ { + "extends": "@gnosis-guild/enclave-config/tsconfig.json", + "include": ["tasks/**/*", "test/**/*", "deploy/**/*", "types/**/*"], + "exclude": ["node_modules", "dist"], "compilerOptions": { - "declaration": true, - "declarationMap": true, - "emitDecoratorMetadata": true, - "esModuleInterop": true, - "experimentalDecorators": true, - "forceConsistentCasingInFileNames": true, - "lib": ["es2020"], "module": "commonjs", "moduleResolution": "node", - "noImplicitAny": true, - "removeComments": true, - "resolveJsonModule": true, - "sourceMap": true, - "strict": true, - "target": "es2020" - }, - "exclude": ["node_modules"], - "files": ["./hardhat.config.ts"], - "include": ["src/**/*", "tasks/**/*", "test/**/*", "deploy/**/*", "types/"] + "incremental": true, + "tsBuildInfoFile": "./dist/.tsbuildinfo" + } } diff --git a/packages/evm/tsup.config.mjs b/packages/evm/tsup.config.mjs new file mode 100644 index 0000000000..954a7c4939 --- /dev/null +++ b/packages/evm/tsup.config.mjs @@ -0,0 +1,10 @@ +import { baseConfig } from "@gnosis-guild/enclave-config/tsup"; +import { defineConfig } from "tsup"; + +export default defineConfig({ + ...baseConfig, + entry: ["deploy/enclave.ts", "deploy/mocks.ts", "types/index.ts"], + include: ["./deploy/**/*.ts", "./types/**/*.ts"], + external: [/^mocha/, /^ts-node/, "hardhat-deploy"], + format: ["esm", "cjs"], +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index eda5e903cb..a8143a7cb6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,25 +4,37 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +overrides: + '@types/node': 22.7.5 + tsup: 8.5.0 + typescript: 5.8.3 + undici-types: 6.19.8 + viem: 2.30.6 + importers: .: devDependencies: + '@changesets/cli': + specifier: ^2.27.1 + version: 2.29.5 husky: specifier: ^9.1.7 version: 9.1.7 + crates/wasm: {} + docs: dependencies: next: specifier: ^14.2.1 - version: 14.2.28(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 14.2.30(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) nextra: specifier: ^2.13.4 - version: 2.13.4(next@14.2.28(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.13.4(next@14.2.30(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) nextra-theme-docs: specifier: ^2.13.4 - version: 2.13.4(next@14.2.28(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nextra@2.13.4(next@14.2.28(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.13.4(next@14.2.30(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nextra@2.13.4(next@14.2.30(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: specifier: ^18.2.0 version: 18.3.1 @@ -31,23 +43,23 @@ importers: version: 18.3.1(react@18.3.1) sharp: specifier: ^0.34.1 - version: 0.34.1 + version: 0.34.2 devDependencies: '@types/node': - specifier: 20.10.4 - version: 20.10.4 + specifier: 22.7.5 + version: 22.7.5 '@types/react': specifier: ^18.2.66 - version: 18.3.20 + version: 18.3.23 '@types/react-dom': specifier: ^18.2.22 - version: 18.3.6(@types/react@18.3.20) + version: 18.3.7(@types/react@18.3.23) prettier: specifier: ^3.5.3 - version: 3.5.3 + version: 3.6.1 typescript: - specifier: 5.5.4 - version: 5.5.4 + specifier: 5.8.3 + version: 5.8.3 examples/CRISP: dependencies: @@ -58,8 +70,8 @@ importers: specifier: workspace:* version: link:../../packages/evm '@semaphore-protocol/contracts': - specifier: ^4.9.2 - version: 4.9.2 + specifier: github:hmzakhalid/semaphore-noir#dist-contracts + version: '@semaphore-protocol/contracts-noir@https://codeload.github.com/hmzakhalid/semaphore-noir/tar.gz/9cd8034957a6f66b787639e224e517d9b2a4c972' '@zk-kit/lean-imt.sol': specifier: 2.0.0 version: 2.0.0 @@ -68,47 +80,50 @@ importers: version: 0.0.5 solady: specifier: ^0.1.13 - version: 0.1.13 + version: 0.1.22 devDependencies: '@nomicfoundation/hardhat-chai-matchers': specifier: ^2.0.0 - version: 2.0.8(@nomicfoundation/hardhat-ethers@3.0.8(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)))(chai@4.5.0)(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)) + version: 2.0.9(@nomicfoundation/hardhat-ethers@3.0.9(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)))(chai@4.5.0)(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) '@nomicfoundation/hardhat-ethers': specifier: ^3.0.0 - version: 3.0.8(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)) + version: 3.0.9(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) '@nomicfoundation/hardhat-foundry': specifier: ^1.1.2 - version: 1.1.3(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)) + version: 1.1.4(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) '@nomicfoundation/hardhat-ignition': specifier: ^0.15.5 - version: 0.15.11(@nomicfoundation/hardhat-verify@2.0.13(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + version: 0.15.12(@nomicfoundation/hardhat-verify@2.0.14(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) '@nomicfoundation/hardhat-ignition-ethers': specifier: ^0.15.0 - version: 0.15.11(225b6e328c7c72dea10c70026633527e) + version: 0.15.13(@nomicfoundation/hardhat-ethers@3.0.9(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)))(@nomicfoundation/hardhat-ignition@0.15.12(@nomicfoundation/hardhat-verify@2.0.14(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@nomicfoundation/ignition-core@0.15.12(bufferutil@4.0.9)(utf-8-validate@5.0.10))(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) '@nomicfoundation/hardhat-network-helpers': specifier: ^1.0.0 - version: 1.0.12(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)) + version: 1.0.13(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) '@nomicfoundation/hardhat-toolbox': specifier: ^5.0.0 - version: 5.0.0(b285d134f7bebf40fffb5d0c9e92a2e9) + version: 5.0.0(62dbc94741f8fd6a7d8599a31638421d) '@nomicfoundation/hardhat-verify': specifier: ^2.0.0 - version: 2.0.13(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)) + version: 2.0.14(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) '@nomicfoundation/ignition-core': specifier: ^0.15.5 - version: 0.15.11(bufferutil@4.0.9)(utf-8-validate@5.0.10) + version: 0.15.12(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@playwright/test': specifier: 1.52.0 version: 1.52.0 '@synthetixio/synpress': specifier: ^4.1.0 - version: 4.1.0(@depay/solana-web3.js@1.98.1)(@depay/web3-blockchains@9.8.2)(@playwright/test@1.52.0)(@swc/core@1.11.16(@swc/helpers@0.5.17))(bufferutil@4.0.9)(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(playwright-core@1.52.0)(postcss@8.5.3)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) + version: 4.1.0(@depay/solana-web3.js@1.98.2)(@depay/web3-blockchains@9.8.6)(@microsoft/api-extractor@7.52.8(@types/node@22.15.33))(@playwright/test@1.52.0)(@swc/core@1.12.7)(bufferutil@4.0.9)(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(playwright-core@1.52.0)(postcss@8.5.6)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@synthetixio/synpress-cache': + specifier: ^0.0.12 + version: 0.0.12(@microsoft/api-extractor@7.52.8(@types/node@22.15.33))(@swc/core@1.12.7)(playwright-core@1.52.0)(postcss@8.5.6)(typescript@5.8.3) '@typechain/ethers-v6': specifier: ^0.5.0 - version: 0.5.1(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.2))(typescript@5.8.2) + version: 0.5.1(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.3))(typescript@5.8.3) '@typechain/hardhat': specifier: ^9.0.0 - version: 9.1.0(@typechain/ethers-v6@0.5.1(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.2))(typescript@5.8.2))(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.2)) + version: 9.1.0(@typechain/ethers-v6@0.5.1(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.3))(typescript@5.8.3))(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.3)) '@types/chai': specifier: ^4.2.0 version: 4.3.20 @@ -117,67 +132,79 @@ importers: version: 10.0.10 concurrently: specifier: ^9.1.2 - version: 9.1.2 + version: 9.2.0 hardhat: specifier: ^2.22.10 - version: 2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10) + version: 2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) hardhat-deploy: specifier: ^0.12.4 version: 0.12.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) hardhat-gas-reporter: specifier: ^1.0.8 - version: 1.0.10(bufferutil@4.0.9)(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + version: 1.0.10(bufferutil@4.0.9)(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) playwright: specifier: 1.52.0 version: 1.52.0 solidity-coverage: specifier: ^0.8.1 - version: 0.8.14(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)) + version: 0.8.16(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) ts-node: specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2) + version: 10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3) typechain: specifier: ^8.3.0 - version: 8.3.2(typescript@5.8.2) + version: 8.3.2(typescript@5.8.3) typescript: - specifier: ^5.5.4 - version: 5.8.2 + specifier: 5.8.3 + version: 5.8.3 wait-on: specifier: ^8.0.3 version: 8.0.3 examples/CRISP/apps/client: dependencies: + '@aztec/bb.js': + specifier: ^0.82.2 + version: 0.82.3 '@emotion/babel-plugin': specifier: ^11.11.0 version: 11.13.5 '@emotion/react': specifier: ^11.11.4 - version: 11.14.0(@types/react@18.3.20)(react@18.3.1) + version: 11.14.0(@types/react@18.3.23)(react@18.3.1) + '@noir-lang/acvm_js': + specifier: 1.0.0-beta.3 + version: 1.0.0-beta.3 + '@noir-lang/noir_js': + specifier: 1.0.0-beta.3 + version: 1.0.0-beta.3 + '@noir-lang/noirc_abi': + specifier: 1.0.0-beta.3 + version: 1.0.0-beta.3 '@phosphor-icons/react': specifier: ^2.1.4 - version: 2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@semaphore-protocol/core': - specifier: ^4.9.2 - version: 4.9.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) + specifier: github:hmzakhalid/semaphore-noir#dist-core + version: https://codeload.github.com/hmzakhalid/semaphore-noir/tar.gz/caad5529009ebdeb1613c552c4e188a54b681a43(@types/snarkjs@0.7.9)(bufferutil@4.0.9)(commander@13.1.0)(utf-8-validate@5.0.10) '@semaphore-protocol/data': specifier: ^4.9.2 - version: 4.9.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) + version: 4.11.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) '@svgr/rollup': specifier: ^8.1.0 - version: 8.1.0(rollup@4.40.0)(typescript@5.8.2) + version: 8.1.0(rollup@4.44.1)(typescript@5.8.3) '@tanstack/react-query': specifier: ^5.74.3 - version: 5.74.3(react@18.3.1) + version: 5.81.2(react@18.3.1) axios: specifier: ^1.6.8 - version: 1.8.4 + version: 1.10.0 connectkit: specifier: ^1.9.0 - version: 1.9.0(@babel/core@7.26.10)(@tanstack/react-query@5.74.3(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@16.13.1)(react@18.3.1)(viem@2.27.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))(wagmi@2.14.16(@tanstack/query-core@5.74.3)(@tanstack/react-query@5.74.3(react@18.3.1))(@types/react@18.3.20)(bufferutil@4.0.9)(immer@10.0.2)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.27.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))(zod@3.24.4)) + version: 1.9.1(@babel/core@7.27.7)(@tanstack/react-query@5.81.2(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67))(wagmi@2.15.6(@tanstack/query-core@5.81.2)(@tanstack/react-query@5.81.2(react@18.3.1))(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67))(zod@3.25.67)) ethers: specifier: ^6.12.0 - version: 6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) + version: 6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) react: specifier: ^18.2.0 version: 18.3.1 @@ -186,56 +213,56 @@ importers: version: 18.3.1(react@18.3.1) react-markdown: specifier: ^9.0.1 - version: 9.1.0(@types/react@18.3.20)(react@18.3.1) + version: 9.1.0(@types/react@18.3.23)(react@18.3.1) react-router-dom: specifier: ^6.22.3 - version: 6.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 6.30.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-syntax-highlighter: specifier: ^15.5.0 version: 15.6.1(react@18.3.1) viem: - specifier: ^2.27.0 - version: 2.27.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) + specifier: 2.30.6 + version: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) vite-plugin-node-polyfills: specifier: ^0.22.0 - version: 0.22.0(rollup@4.40.0)(vite@5.4.18(@types/node@22.7.5)) + version: 0.22.0(rollup@4.44.1)(vite@5.4.19(@types/node@22.7.5)) vite-plugin-top-level-await: specifier: ^1.4.1 - version: 1.5.0(@swc/helpers@0.5.17)(rollup@4.40.0)(vite@5.4.18(@types/node@22.7.5)) + version: 1.5.0(rollup@4.44.1)(vite@5.4.19(@types/node@22.7.5)) vite-tsconfig-paths: specifier: ^4.3.2 - version: 4.3.2(typescript@5.8.2)(vite@5.4.18(@types/node@22.7.5)) + version: 4.3.2(typescript@5.8.3)(vite@5.4.19(@types/node@22.7.5)) wagmi: specifier: ^2.14.16 - version: 2.14.16(@tanstack/query-core@5.74.3)(@tanstack/react-query@5.74.3(react@18.3.1))(@types/react@18.3.20)(bufferutil@4.0.9)(immer@10.0.2)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.27.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))(zod@3.24.4) + version: 2.15.6(@tanstack/query-core@5.81.2)(@tanstack/react-query@5.81.2(react@18.3.1))(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67))(zod@3.25.67) devDependencies: '@tailwindcss/typography': specifier: ^0.5.12 - version: 0.5.16(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))) + version: 0.5.16(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))) '@types/react': specifier: ^18.2.66 - version: 18.3.20 + version: 18.3.23 '@types/react-dom': specifier: ^18.2.22 - version: 18.3.6(@types/react@18.3.20) + version: 18.3.7(@types/react@18.3.23) '@types/react-syntax-highlighter': specifier: ^15.5.11 version: 15.5.13 '@typescript-eslint/eslint-plugin': specifier: ^7.2.0 - version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2) + version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) '@typescript-eslint/parser': specifier: ^7.2.0 - version: 7.18.0(eslint@8.57.1)(typescript@5.8.2) + version: 7.18.0(eslint@8.57.1)(typescript@5.8.3) '@vitejs/plugin-react': specifier: ^4.2.1 - version: 4.3.4(vite@5.4.18(@types/node@22.7.5)) + version: 4.6.0(vite@5.4.19(@types/node@22.7.5)) add: specifier: ^2.0.6 version: 2.0.6 autoprefixer: specifier: ^10.4.19 - version: 10.4.21(postcss@8.5.3) + version: 10.4.21(postcss@8.5.6) eslint: specifier: ^8.57.0 version: 8.57.1 @@ -244,68 +271,154 @@ importers: version: 4.6.2(eslint@8.57.1) eslint-plugin-react-refresh: specifier: ^0.4.6 - version: 0.4.19(eslint@8.57.1) + version: 0.4.20(eslint@8.57.1) gh-pages: specifier: ^6.1.1 version: 6.3.0 prettier: specifier: ^3.2.5 - version: 3.5.3 + version: 3.6.1 prettier-plugin-tailwindcss: specifier: ^0.5.13 - version: 0.5.14(@trivago/prettier-plugin-sort-imports@4.3.0(prettier@3.5.3))(prettier@3.5.3) + version: 0.5.14(@trivago/prettier-plugin-sort-imports@4.3.0(prettier@3.6.1))(prettier@3.6.1) tailwindcss: specifier: ^3.4.2 - version: 3.4.17(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2)) + version: 3.4.17(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3)) typescript: - specifier: ^5.2.2 - version: 5.8.2 + specifier: 5.8.3 + version: 5.8.3 vite: specifier: ^5.2.0 - version: 5.4.18(@types/node@22.7.5) + version: 5.4.19(@types/node@22.7.5) vite-plugin-wasm: specifier: ^3.3.0 - version: 3.4.1(vite@5.4.18(@types/node@22.7.5)) + version: 3.4.1(vite@5.4.19(@types/node@22.7.5)) + + packages/enclave-config: + dependencies: + tsup: + specifier: 8.5.0 + version: 8.5.0(@microsoft/api-extractor@7.52.8(@types/node@22.7.5))(@swc/core@1.12.7)(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3)(yaml@2.8.0) + + packages/enclave-react: + dependencies: + '@gnosis-guild/enclave-sdk': + specifier: workspace:* + version: link:../enclave-sdk + react: + specifier: ^18.2.0 + version: 18.3.1 + viem: + specifier: 2.30.6 + version: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + wagmi: + specifier: ^2.14.16 + version: 2.15.6(@tanstack/query-core@5.81.2)(@tanstack/react-query@5.81.2(react@18.3.1))(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67))(zod@3.25.67) + devDependencies: + '@gnosis-guild/enclave-config': + specifier: workspace:* + version: link:../enclave-config + '@types/react': + specifier: ^18.2.0 + version: 18.3.23 + tsup: + specifier: 8.5.0 + version: 8.5.0(@microsoft/api-extractor@7.52.8(@types/node@22.7.5))(@swc/core@1.12.7)(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3)(yaml@2.8.0) + typescript: + specifier: 5.8.3 + version: 5.8.3 + + packages/enclave-sdk: + dependencies: + '@gnosis-guild/e3-wasm': + specifier: workspace:* + version: link:../../crates/wasm + '@gnosis-guild/enclave': + specifier: workspace:* + version: link:../evm + comlink: + specifier: ^4.4.2 + version: 4.4.2 + viem: + specifier: 2.30.6 + version: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + vite-plugin-top-level-await: + specifier: ^1.5.0 + version: 1.5.0(rollup@4.44.1)(vite@6.3.5(@types/node@22.7.5)(jiti@1.21.7)(tsx@4.20.3)(yaml@2.8.0)) + vite-plugin-wasm: + specifier: ^3.4.1 + version: 3.4.1(vite@6.3.5(@types/node@22.7.5)(jiti@1.21.7)(tsx@4.20.3)(yaml@2.8.0)) + vitest: + specifier: ^1.6.1 + version: 1.6.1(@types/node@22.7.5) + web-worker: + specifier: ^1.5.0 + version: 1.5.0 + devDependencies: + '@gnosis-guild/enclave-config': + specifier: workspace:* + version: link:../enclave-config + concurrently: + specifier: ^9.1.2 + version: 9.2.0 + tsup: + specifier: 8.5.0 + version: 8.5.0(@microsoft/api-extractor@7.52.8(@types/node@22.7.5))(@swc/core@1.12.7)(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3)(yaml@2.8.0) + typescript: + specifier: 5.8.3 + version: 5.8.3 + vite: + specifier: ^6.2.0 + version: 6.3.5(@types/node@22.7.5)(jiti@1.21.7)(tsx@4.20.3)(yaml@2.8.0) + vite-plugin-dts: + specifier: ^4.5.3 + version: 4.5.4(@types/node@22.7.5)(rollup@4.44.1)(typescript@5.8.3)(vite@6.3.5(@types/node@22.7.5)(jiti@1.21.7)(tsx@4.20.3)(yaml@2.8.0)) packages/evm: dependencies: '@excubiae/contracts': specifier: ^0.4.0 version: 0.4.0 + '@gnosis-guild/e3-wasm': + specifier: workspace:* + version: link:../../crates/wasm solady: specifier: ^0.1.13 - version: 0.1.13 + version: 0.1.22 devDependencies: + '@gnosis-guild/enclave-config': + specifier: workspace:* + version: link:../enclave-config '@nomicfoundation/hardhat-chai-matchers': specifier: ^2.0.2 - version: 2.0.8(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)))(chai@4.5.0)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)) + version: 2.0.9(@nomicfoundation/hardhat-ethers@3.0.9(ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)))(chai@4.5.0)(ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) '@nomicfoundation/hardhat-ethers': specifier: ^3.0.5 - version: 3.0.8(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)) + version: 3.0.9(ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) '@nomicfoundation/hardhat-network-helpers': specifier: ^1.0.10 - version: 1.0.12(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)) + version: 1.0.13(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) '@nomicfoundation/hardhat-toolbox': specifier: ^4.0.0 - version: 4.0.0(7a126116ab3a8428fc2292ff3b66a578) + version: 4.0.0(21df6d106862ca26965fedef68f78cbb) '@nomicfoundation/hardhat-verify': specifier: ^2.0.2 - version: 2.0.13(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)) + version: 2.0.14(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) '@openzeppelin/contracts': specifier: ^5.0.2 - version: 5.2.0 + version: 5.3.0 '@openzeppelin/contracts-upgradeable': specifier: ^5.0.2 - version: 5.2.0(@openzeppelin/contracts@5.2.0) + version: 5.3.0(@openzeppelin/contracts@5.3.0) '@trivago/prettier-plugin-sort-imports': specifier: ^4.3.0 - version: 4.3.0(prettier@3.5.3) + version: 4.3.0(prettier@3.6.1) '@typechain/ethers-v6': specifier: ^0.5.1 - version: 0.5.1(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.2))(typescript@5.8.2) + version: 0.5.1(ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.3))(typescript@5.8.3) '@typechain/hardhat': specifier: ^9.1.0 - version: 9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.2))(typescript@5.8.2))(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.2)) + version: 9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.3))(typescript@5.8.3))(ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.3)) '@types/chai': specifier: ^4.3.11 version: 4.3.20 @@ -316,14 +429,14 @@ importers: specifier: ^10.0.6 version: 10.0.10 '@types/node': - specifier: ^20.10.4 - version: 20.17.30 + specifier: 22.7.5 + version: 22.7.5 '@typescript-eslint/eslint-plugin': specifier: ^7.11.0 - version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2) + version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) '@typescript-eslint/parser': specifier: ^7.11.0 - version: 7.18.0(eslint@8.57.1)(typescript@5.8.2) + version: 7.18.0(eslint@8.57.1)(typescript@5.8.3) '@zk-kit/lean-imt': specifier: ^2.1.0 version: 2.2.3 @@ -338,7 +451,7 @@ importers: version: 7.0.3 dotenv: specifier: ^16.4.5 - version: 16.4.7 + version: 16.6.0 eslint: specifier: ^8.56.0 version: 8.57.1 @@ -347,19 +460,19 @@ importers: version: 9.1.0(eslint@8.57.1) ethers: specifier: ^6.9.0 - version: 6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) + version: 6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) fs-extra: specifier: ^11.2.0 version: 11.3.0 hardhat: specifier: ^2.22.0 - version: 2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10) + version: 2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) hardhat-deploy: specifier: ^0.12.1 version: 0.12.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) hardhat-gas-reporter: specifier: ^2.2.0 - version: 2.2.2(bufferutil@4.0.9)(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10))(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) + version: 2.3.0(bufferutil@4.0.9)(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(typescript@5.8.3)(utf-8-validate@5.0.10) lodash: specifier: ^4.17.21 version: 4.17.21 @@ -374,43 +487,246 @@ importers: version: 0.0.5 prettier: specifier: ^3.1.1 - version: 3.5.3 + version: 3.6.1 prettier-plugin-solidity: specifier: ^1.2.0 - version: 1.4.2(prettier@3.5.3) + version: 1.4.3(prettier@3.6.1) rimraf: specifier: ^5.0.5 version: 5.0.10 solhint: specifier: ^5.0.5 - version: 5.0.5(typescript@5.8.2) + version: 5.1.0(typescript@5.8.3) solhint-plugin-prettier: specifier: ^0.1.0 - version: 0.1.0(prettier-plugin-solidity@1.4.2(prettier@3.5.3))(prettier@3.5.3) + version: 0.1.0(prettier-plugin-solidity@1.4.3(prettier@3.6.1))(prettier@3.6.1) solidity-coverage: specifier: ^0.8.5 - version: 0.8.14(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)) + version: 0.8.16(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) ts-generator: specifier: ^0.1.1 version: 0.1.1 + tsup: + specifier: 8.5.0 + version: 8.5.0(@microsoft/api-extractor@7.52.8(@types/node@22.7.5))(@swc/core@1.12.7)(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3)(yaml@2.8.0) + typechain: + specifier: ^8.3.2 + version: 8.3.2(typescript@5.8.3) + typescript: + specifier: 5.8.3 + version: 5.8.3 + + templates/default: + dependencies: + '@gnosis-guild/enclave': + specifier: workspace:* + version: link:../../packages/evm + '@gnosis-guild/enclave-sdk': + specifier: workspace:* + version: link:../../packages/enclave-sdk + '@types/yargs': + specifier: ^17.0.33 + version: 17.0.33 + viem: + specifier: 2.30.6 + version: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + yargs: + specifier: ^18.0.0 + version: 18.0.0 + devDependencies: + '@nomicfoundation/hardhat-chai-matchers': + specifier: ^2.0.0 + version: 2.0.9(@nomicfoundation/hardhat-ethers@3.0.9(ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)))(chai@4.5.0)(ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-ethers': + specifier: ^3.0.5 + version: 3.0.9(ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-network-helpers': + specifier: ^1.0.10 + version: 1.0.13(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-toolbox': + specifier: ^4.0.0 + version: 4.0.0(79e6a2bdb20712d3f04f2697b228668d) + '@nomicfoundation/hardhat-verify': + specifier: ^2.0.2 + version: 2.0.14(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@openzeppelin/contracts': + specifier: 5.3.0 + version: 5.3.0 + '@risc0/ethereum': + specifier: file:lib/risc0-ethereum + version: risc0-ethereum@file:templates/default/lib/risc0-ethereum + '@typechain/ethers-v6': + specifier: ^0.5.0 + version: 0.5.1(ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.3))(typescript@5.8.3) + '@typechain/hardhat': + specifier: ^9.1.0 + version: 9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.3))(typescript@5.8.3))(ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.3)) + '@types/chai': + specifier: ^4.2.0 + version: 4.3.20 + '@types/express': + specifier: ^5.0.2 + version: 5.0.3 + '@types/mocha': + specifier: '>=9.1.0' + version: 10.0.10 + '@types/node': + specifier: 22.7.5 + version: 22.7.5 + '@zk-kit/lean-imt': + specifier: ^2.1.0 + version: 2.2.3 + '@zk-kit/lean-imt.sol': + specifier: 2.0.0 + version: 2.0.0 + chai: + specifier: ^4.2.0 + version: 4.5.0 + concurrently: + specifier: ^9.1.2 + version: 9.2.0 + ethers: + specifier: ^6.9.0 + version: 6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) + express: + specifier: ^5.1.0 + version: 5.1.0 + hardhat: + specifier: ^2.22.10 + version: 2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) + hardhat-deploy: + specifier: ^0.12.1 + version: 0.12.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) + hardhat-gas-reporter: + specifier: ^1.0.8 + version: 1.0.10(bufferutil@4.0.9)(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + poseidon-lite: + specifier: ^0.3.0 + version: 0.3.0 + solidity-coverage: + specifier: ^0.8.0 + version: 0.8.16(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) ts-node: specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2) + version: 10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3) + tsx: + specifier: ^4.20.3 + version: 4.20.3 typechain: - specifier: ^8.3.2 - version: 8.3.2(typescript@5.8.2) + specifier: ^8.3.0 + version: 8.3.2(typescript@5.8.3) + typed-rpc: + specifier: ^6.1.1 + version: 6.1.1 typescript: - specifier: ^5.3.3 - version: 5.8.2 + specifier: 5.8.3 + version: 5.8.3 + wait-on: + specifier: ^8.0.3 + version: 8.0.3 -packages: + templates/default/client: + dependencies: + '@gnosis-guild/enclave': + specifier: workspace:* + version: link:../../../packages/evm + '@gnosis-guild/enclave-react': + specifier: workspace:* + version: link:../../../packages/enclave-react + '@gnosis-guild/enclave-sdk': + specifier: workspace:* + version: link:../../../packages/enclave-sdk + '@phosphor-icons/react': + specifier: ^2.1.4 + version: 2.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@tanstack/react-query': + specifier: ^5.74.3 + version: 5.81.2(react@18.3.1) + '@wagmi/core': + specifier: ^2.14.16 + version: 2.17.3(@tanstack/query-core@5.81.2)(@types/react@18.3.23)(immer@10.0.2)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67)) + connectkit: + specifier: ^1.9.0 + version: 1.9.1(@babel/core@7.27.7)(@tanstack/react-query@5.81.2(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67))(wagmi@2.15.6(@tanstack/query-core@5.81.2)(@tanstack/react-query@5.81.2(react@18.3.1))(@types/react@18.3.23)(bufferutil@4.0.9)(immer@10.0.2)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67))(zod@3.25.67)) + react: + specifier: ^18.2.0 + version: 18.3.1 + react-dom: + specifier: ^18.2.0 + version: 18.3.1(react@18.3.1) + viem: + specifier: 2.30.6 + version: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + wagmi: + specifier: ^2.14.16 + version: 2.15.6(@tanstack/query-core@5.81.2)(@tanstack/react-query@5.81.2(react@18.3.1))(@types/react@18.3.23)(bufferutil@4.0.9)(immer@10.0.2)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67))(zod@3.25.67) + devDependencies: + '@tailwindcss/typography': + specifier: ^0.5.12 + version: 0.5.16(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))) + '@types/react': + specifier: ^18.2.66 + version: 18.3.23 + '@types/react-dom': + specifier: ^18.2.22 + version: 18.3.7(@types/react@18.3.23) + '@typescript-eslint/eslint-plugin': + specifier: ^7.2.0 + version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/parser': + specifier: ^7.2.0 + version: 7.18.0(eslint@8.57.1)(typescript@5.8.3) + '@vitejs/plugin-react': + specifier: ^4.2.1 + version: 4.6.0(vite@5.4.19(@types/node@22.7.5)) + autoprefixer: + specifier: ^10.4.19 + version: 10.4.21(postcss@8.5.6) + eslint: + specifier: ^8.57.0 + version: 8.57.1 + eslint-plugin-react-hooks: + specifier: ^4.6.0 + version: 4.6.2(eslint@8.57.1) + eslint-plugin-react-refresh: + specifier: ^0.4.6 + version: 0.4.20(eslint@8.57.1) + prettier: + specifier: ^3.2.5 + version: 3.6.1 + prettier-plugin-tailwindcss: + specifier: ^0.5.13 + version: 0.5.14(@trivago/prettier-plugin-sort-imports@4.3.0(prettier@3.6.1))(prettier@3.6.1) + tailwindcss: + specifier: ^3.4.2 + version: 3.4.17(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3)) + typescript: + specifier: 5.8.3 + version: 5.8.3 + vite: + specifier: ^5.2.0 + version: 5.4.19(@types/node@22.7.5) + vite-plugin-top-level-await: + specifier: ^1.4.1 + version: 1.5.0(rollup@4.44.1)(vite@5.4.19(@types/node@22.7.5)) + vite-plugin-wasm: + specifier: ^3.3.0 + version: 3.4.1(vite@5.4.19(@types/node@22.7.5)) + vite-tsconfig-paths: + specifier: ^4.3.2 + version: 4.3.2(typescript@5.8.3)(vite@5.4.19(@types/node@22.7.5)) + wasm-pack: + specifier: ^0.13.1 + version: 0.13.1 - '@adraffy/ens-normalize@1.10.0': - resolution: {integrity: sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==} +packages: '@adraffy/ens-normalize@1.10.1': resolution: {integrity: sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==} + '@adraffy/ens-normalize@1.11.0': + resolution: {integrity: sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg==} + '@alloc/quick-lru@5.2.0': resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} @@ -419,42 +735,50 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@babel/code-frame@7.26.2': - resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + '@aztec/bb.js@0.82.2': + resolution: {integrity: sha512-MBOHFVHOtfsknyJ1IsHH30paYqf0qLwYkiDTPyH1/KtkMwemvo5VyIgY0Dsl81KQa388MzoKhC6qnaFgERiaog==} + hasBin: true + + '@aztec/bb.js@0.82.3': + resolution: {integrity: sha512-jtnCqf+/QLw5yJGOmy818RMQqzHzHqcROtTdQZJybSxp0z3h76xpLSwoDQUBmZZVbP9e46FJjOLqB6gM9gY5cw==} + hasBin: true + + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.26.8': - resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} + '@babel/compat-data@7.27.7': + resolution: {integrity: sha512-xgu/ySj2mTiUFmdE9yCMfBxLp4DHd5DwmbbD05YAuICfodYT3VvRxbrh81LGQ/8UpSdtMdfKMn3KouYDX59DGQ==} engines: {node: '>=6.9.0'} - '@babel/core@7.26.10': - resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==} + '@babel/core@7.27.7': + resolution: {integrity: sha512-BU2f9tlKQ5CAthiMIgpzAh4eDTLWo1mqi9jqE2OxMG0E/OM199VJt2q8BztTxpnSW0i1ymdwLXRJnYzvDM5r2w==} engines: {node: '>=6.9.0'} '@babel/generator@7.17.7': resolution: {integrity: sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==} engines: {node: '>=6.9.0'} - '@babel/generator@7.27.0': - resolution: {integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==} + '@babel/generator@7.27.5': + resolution: {integrity: sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==} engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.25.9': - resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} + '@babel/helper-annotate-as-pure@7.27.3': + resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.27.0': - resolution: {integrity: sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==} + '@babel/helper-compilation-targets@7.27.2': + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.27.0': - resolution: {integrity: sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==} + '@babel/helper-create-class-features-plugin@7.27.1': + resolution: {integrity: sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-create-regexp-features-plugin@7.27.0': - resolution: {integrity: sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ==} + '@babel/helper-create-regexp-features-plugin@7.27.1': + resolution: {integrity: sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -476,99 +800,99 @@ packages: resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} engines: {node: '>=6.9.0'} - '@babel/helper-member-expression-to-functions@7.25.9': - resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} + '@babel/helper-member-expression-to-functions@7.27.1': + resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.25.9': - resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + '@babel/helper-module-imports@7.27.1': + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.26.0': - resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + '@babel/helper-module-transforms@7.27.3': + resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-optimise-call-expression@7.25.9': - resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} + '@babel/helper-optimise-call-expression@7.27.1': + resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.26.5': - resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + '@babel/helper-plugin-utils@7.27.1': + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} engines: {node: '>=6.9.0'} - '@babel/helper-remap-async-to-generator@7.25.9': - resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==} + '@babel/helper-remap-async-to-generator@7.27.1': + resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-replace-supers@7.26.5': - resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==} + '@babel/helper-replace-supers@7.27.1': + resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-skip-transparent-expression-wrappers@7.25.9': - resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} engines: {node: '>=6.9.0'} '@babel/helper-split-export-declaration@7.24.7': resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.25.9': - resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.25.9': - resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.25.9': - resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} - '@babel/helper-wrap-function@7.25.9': - resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==} + '@babel/helper-wrap-function@7.27.1': + resolution: {integrity: sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.27.0': - resolution: {integrity: sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==} + '@babel/helpers@7.27.6': + resolution: {integrity: sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==} engines: {node: '>=6.9.0'} - '@babel/parser@7.27.0': - resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==} + '@babel/parser@7.27.7': + resolution: {integrity: sha512-qnzXzDXdr/po3bOTbTIQZ7+TxNKxpkN5IifVLXS+r7qwynkZfPyjZfE7hCXbo7IoO9TNcSyibgONsf2HauUd3Q==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9': - resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==} + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1': + resolution: {integrity: sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9': - resolution: {integrity: sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==} + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1': + resolution: {integrity: sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9': - resolution: {integrity: sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==} + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1': + resolution: {integrity: sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9': - resolution: {integrity: sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==} + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1': + resolution: {integrity: sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9': - resolution: {integrity: sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==} + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1': + resolution: {integrity: sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -579,26 +903,26 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-assertions@7.26.0': - resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==} + '@babel/plugin-syntax-import-assertions@7.27.1': + resolution: {integrity: sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-attributes@7.26.0': - resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} + '@babel/plugin-syntax-import-attributes@7.27.1': + resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-jsx@7.25.9': - resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} + '@babel/plugin-syntax-jsx@7.27.1': + resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-typescript@7.25.9': - resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} + '@babel/plugin-syntax-typescript@7.27.1': + resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -609,356 +933,356 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-arrow-functions@7.25.9': - resolution: {integrity: sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==} + '@babel/plugin-transform-arrow-functions@7.27.1': + resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-generator-functions@7.26.8': - resolution: {integrity: sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==} + '@babel/plugin-transform-async-generator-functions@7.27.1': + resolution: {integrity: sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-to-generator@7.25.9': - resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==} + '@babel/plugin-transform-async-to-generator@7.27.1': + resolution: {integrity: sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoped-functions@7.26.5': - resolution: {integrity: sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==} + '@babel/plugin-transform-block-scoped-functions@7.27.1': + resolution: {integrity: sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoping@7.27.0': - resolution: {integrity: sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ==} + '@babel/plugin-transform-block-scoping@7.27.5': + resolution: {integrity: sha512-JF6uE2s67f0y2RZcm2kpAUEbD50vH62TyWVebxwHAlbSdM49VqPz8t4a1uIjp4NIOIZ4xzLfjY5emt/RCyC7TQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-properties@7.25.9': - resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==} + '@babel/plugin-transform-class-properties@7.27.1': + resolution: {integrity: sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-static-block@7.26.0': - resolution: {integrity: sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==} + '@babel/plugin-transform-class-static-block@7.27.1': + resolution: {integrity: sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 - '@babel/plugin-transform-classes@7.25.9': - resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==} + '@babel/plugin-transform-classes@7.27.7': + resolution: {integrity: sha512-CuLkokN1PEZ0Fsjtq+001aog/C2drDK9nTfK/NRK0n6rBin6cBrvM+zfQjDE+UllhR6/J4a6w8Xq9i4yi3mQrw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-computed-properties@7.25.9': - resolution: {integrity: sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==} + '@babel/plugin-transform-computed-properties@7.27.1': + resolution: {integrity: sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-destructuring@7.25.9': - resolution: {integrity: sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==} + '@babel/plugin-transform-destructuring@7.27.7': + resolution: {integrity: sha512-pg3ZLdIKWCP0CrJm0O4jYjVthyBeioVfvz9nwt6o5paUxsgJ/8GucSMAIaj6M7xA4WY+SrvtGu2LijzkdyecWQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-dotall-regex@7.25.9': - resolution: {integrity: sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==} + '@babel/plugin-transform-dotall-regex@7.27.1': + resolution: {integrity: sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-duplicate-keys@7.25.9': - resolution: {integrity: sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==} + '@babel/plugin-transform-duplicate-keys@7.27.1': + resolution: {integrity: sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9': - resolution: {integrity: sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==} + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1': + resolution: {integrity: sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-dynamic-import@7.25.9': - resolution: {integrity: sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==} + '@babel/plugin-transform-dynamic-import@7.27.1': + resolution: {integrity: sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-exponentiation-operator@7.26.3': - resolution: {integrity: sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==} + '@babel/plugin-transform-exponentiation-operator@7.27.1': + resolution: {integrity: sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-export-namespace-from@7.25.9': - resolution: {integrity: sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==} + '@babel/plugin-transform-export-namespace-from@7.27.1': + resolution: {integrity: sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-for-of@7.26.9': - resolution: {integrity: sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==} + '@babel/plugin-transform-for-of@7.27.1': + resolution: {integrity: sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-function-name@7.25.9': - resolution: {integrity: sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==} + '@babel/plugin-transform-function-name@7.27.1': + resolution: {integrity: sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-json-strings@7.25.9': - resolution: {integrity: sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==} + '@babel/plugin-transform-json-strings@7.27.1': + resolution: {integrity: sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-literals@7.25.9': - resolution: {integrity: sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==} + '@babel/plugin-transform-literals@7.27.1': + resolution: {integrity: sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-logical-assignment-operators@7.25.9': - resolution: {integrity: sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==} + '@babel/plugin-transform-logical-assignment-operators@7.27.1': + resolution: {integrity: sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-member-expression-literals@7.25.9': - resolution: {integrity: sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==} + '@babel/plugin-transform-member-expression-literals@7.27.1': + resolution: {integrity: sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-amd@7.25.9': - resolution: {integrity: sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==} + '@babel/plugin-transform-modules-amd@7.27.1': + resolution: {integrity: sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-commonjs@7.26.3': - resolution: {integrity: sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==} + '@babel/plugin-transform-modules-commonjs@7.27.1': + resolution: {integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-systemjs@7.25.9': - resolution: {integrity: sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==} + '@babel/plugin-transform-modules-systemjs@7.27.1': + resolution: {integrity: sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-umd@7.25.9': - resolution: {integrity: sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==} + '@babel/plugin-transform-modules-umd@7.27.1': + resolution: {integrity: sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-named-capturing-groups-regex@7.25.9': - resolution: {integrity: sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==} + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1': + resolution: {integrity: sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-new-target@7.25.9': - resolution: {integrity: sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==} + '@babel/plugin-transform-new-target@7.27.1': + resolution: {integrity: sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-nullish-coalescing-operator@7.26.6': - resolution: {integrity: sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==} + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1': + resolution: {integrity: sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-numeric-separator@7.25.9': - resolution: {integrity: sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==} + '@babel/plugin-transform-numeric-separator@7.27.1': + resolution: {integrity: sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-rest-spread@7.25.9': - resolution: {integrity: sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==} + '@babel/plugin-transform-object-rest-spread@7.27.7': + resolution: {integrity: sha512-201B1kFTWhckclcXpWHc8uUpYziDX/Pl4rxl0ZX0DiCZ3jknwfSUALL3QCYeeXXB37yWxJbo+g+Vfq8pAaHi3w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-super@7.25.9': - resolution: {integrity: sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==} + '@babel/plugin-transform-object-super@7.27.1': + resolution: {integrity: sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-catch-binding@7.25.9': - resolution: {integrity: sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==} + '@babel/plugin-transform-optional-catch-binding@7.27.1': + resolution: {integrity: sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-chaining@7.25.9': - resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==} + '@babel/plugin-transform-optional-chaining@7.27.1': + resolution: {integrity: sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-parameters@7.25.9': - resolution: {integrity: sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==} + '@babel/plugin-transform-parameters@7.27.7': + resolution: {integrity: sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-private-methods@7.25.9': - resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==} + '@babel/plugin-transform-private-methods@7.27.1': + resolution: {integrity: sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-private-property-in-object@7.25.9': - resolution: {integrity: sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==} + '@babel/plugin-transform-private-property-in-object@7.27.1': + resolution: {integrity: sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-property-literals@7.25.9': - resolution: {integrity: sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==} + '@babel/plugin-transform-property-literals@7.27.1': + resolution: {integrity: sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-constant-elements@7.25.9': - resolution: {integrity: sha512-Ncw2JFsJVuvfRsa2lSHiC55kETQVLSnsYGQ1JDDwkUeWGTL/8Tom8aLTnlqgoeuopWrbbGndrc9AlLYrIosrow==} + '@babel/plugin-transform-react-constant-elements@7.27.1': + resolution: {integrity: sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-display-name@7.25.9': - resolution: {integrity: sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==} + '@babel/plugin-transform-react-display-name@7.27.1': + resolution: {integrity: sha512-p9+Vl3yuHPmkirRrg021XiP+EETmPMQTLr6Ayjj85RLNEbb3Eya/4VI0vAdzQG9SEAl2Lnt7fy5lZyMzjYoZQQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx-development@7.25.9': - resolution: {integrity: sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==} + '@babel/plugin-transform-react-jsx-development@7.27.1': + resolution: {integrity: sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx-self@7.25.9': - resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} + '@babel/plugin-transform-react-jsx-self@7.27.1': + resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx-source@7.25.9': - resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} + '@babel/plugin-transform-react-jsx-source@7.27.1': + resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx@7.25.9': - resolution: {integrity: sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==} + '@babel/plugin-transform-react-jsx@7.27.1': + resolution: {integrity: sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-pure-annotations@7.25.9': - resolution: {integrity: sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==} + '@babel/plugin-transform-react-pure-annotations@7.27.1': + resolution: {integrity: sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regenerator@7.27.0': - resolution: {integrity: sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA==} + '@babel/plugin-transform-regenerator@7.27.5': + resolution: {integrity: sha512-uhB8yHerfe3MWnuLAhEbeQ4afVoqv8BQsPqrTv7e/jZ9y00kJL6l9a/f4OWaKxotmjzewfEyXE1vgDJenkQ2/Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regexp-modifiers@7.26.0': - resolution: {integrity: sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==} + '@babel/plugin-transform-regexp-modifiers@7.27.1': + resolution: {integrity: sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-reserved-words@7.25.9': - resolution: {integrity: sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==} + '@babel/plugin-transform-reserved-words@7.27.1': + resolution: {integrity: sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-shorthand-properties@7.25.9': - resolution: {integrity: sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==} + '@babel/plugin-transform-shorthand-properties@7.27.1': + resolution: {integrity: sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-spread@7.25.9': - resolution: {integrity: sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==} + '@babel/plugin-transform-spread@7.27.1': + resolution: {integrity: sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-sticky-regex@7.25.9': - resolution: {integrity: sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==} + '@babel/plugin-transform-sticky-regex@7.27.1': + resolution: {integrity: sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-template-literals@7.26.8': - resolution: {integrity: sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==} + '@babel/plugin-transform-template-literals@7.27.1': + resolution: {integrity: sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typeof-symbol@7.27.0': - resolution: {integrity: sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w==} + '@babel/plugin-transform-typeof-symbol@7.27.1': + resolution: {integrity: sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.27.0': - resolution: {integrity: sha512-fRGGjO2UEGPjvEcyAZXRXAS8AfdaQoq7HnxAbJoAoW10B9xOKesmmndJv+Sym2a+9FHWZ9KbyyLCe9s0Sn5jtg==} + '@babel/plugin-transform-typescript@7.27.1': + resolution: {integrity: sha512-Q5sT5+O4QUebHdbwKedFBEwRLb02zJ7r4A5Gg2hUoLuU3FjdMcyqcywqUrLCaDsFCxzokf7u9kuy7qz51YUuAg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-escapes@7.25.9': - resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==} + '@babel/plugin-transform-unicode-escapes@7.27.1': + resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-property-regex@7.25.9': - resolution: {integrity: sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==} + '@babel/plugin-transform-unicode-property-regex@7.27.1': + resolution: {integrity: sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-regex@7.25.9': - resolution: {integrity: sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==} + '@babel/plugin-transform-unicode-regex@7.27.1': + resolution: {integrity: sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-sets-regex@7.25.9': - resolution: {integrity: sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==} + '@babel/plugin-transform-unicode-sets-regex@7.27.1': + resolution: {integrity: sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/preset-env@7.26.9': - resolution: {integrity: sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==} + '@babel/preset-env@7.27.2': + resolution: {integrity: sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -968,64 +1292,124 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - '@babel/preset-react@7.26.3': - resolution: {integrity: sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==} + '@babel/preset-react@7.27.1': + resolution: {integrity: sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/preset-typescript@7.27.0': - resolution: {integrity: sha512-vxaPFfJtHhgeOVXRKuHpHPAOgymmy8V8I65T1q53R7GCZlefKeCaTyDs3zOPHTTbmquvNlQYC5klEvWsBAtrBQ==} + '@babel/preset-typescript@7.27.1': + resolution: {integrity: sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.27.0': - resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==} + '@babel/runtime@7.27.6': + resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==} engines: {node: '>=6.9.0'} - '@babel/template@7.27.0': - resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==} + '@babel/template@7.27.2': + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} '@babel/traverse@7.23.2': resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.27.0': - resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==} + '@babel/traverse@7.27.7': + resolution: {integrity: sha512-X6ZlfR/O/s5EQ/SnUSLzr+6kGnkg8HXGMzpgsMsrJVcfDtH1vIp6ctCN4eZ1LS5c0+te5Cb6Y514fASjMRJ1nw==} engines: {node: '>=6.9.0'} '@babel/types@7.17.0': resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==} engines: {node: '>=6.9.0'} - '@babel/types@7.27.0': - resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==} + '@babel/types@7.27.7': + resolution: {integrity: sha512-8OLQgDScAOHXnAz2cV+RfzzNMipuLVBz2biuAJFMV9bfkNf393je3VM8CLkjQodW5+iWsSJdSgSWT6rsZoXHPw==} engines: {node: '>=6.9.0'} '@braintree/sanitize-url@6.0.4': resolution: {integrity: sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==} + '@changesets/apply-release-plan@7.0.12': + resolution: {integrity: sha512-EaET7As5CeuhTzvXTQCRZeBUcisoYPDDcXvgTE/2jmmypKp0RC7LxKj/yzqeh/1qFTZI7oDGFcL1PHRuQuketQ==} + + '@changesets/assemble-release-plan@6.0.9': + resolution: {integrity: sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==} + + '@changesets/changelog-git@0.2.1': + resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==} + + '@changesets/cli@2.29.5': + resolution: {integrity: sha512-0j0cPq3fgxt2dPdFsg4XvO+6L66RC0pZybT9F4dG5TBrLA3jA/1pNkdTXH9IBBVHkgsKrNKenI3n1mPyPlIydg==} + hasBin: true + + '@changesets/config@3.1.1': + resolution: {integrity: sha512-bd+3Ap2TKXxljCggI0mKPfzCQKeV/TU4yO2h2C6vAihIo8tzseAn2e7klSuiyYYXvgu53zMN1OeYMIQkaQoWnA==} + + '@changesets/errors@0.2.0': + resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} + + '@changesets/get-dependents-graph@2.1.3': + resolution: {integrity: sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==} + + '@changesets/get-release-plan@4.0.13': + resolution: {integrity: sha512-DWG1pus72FcNeXkM12tx+xtExyH/c9I1z+2aXlObH3i9YA7+WZEVaiHzHl03thpvAgWTRaH64MpfHxozfF7Dvg==} + + '@changesets/get-version-range-type@0.4.0': + resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} + + '@changesets/git@3.0.4': + resolution: {integrity: sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==} + + '@changesets/logger@0.1.1': + resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==} + + '@changesets/parse@0.4.1': + resolution: {integrity: sha512-iwksMs5Bf/wUItfcg+OXrEpravm5rEd9Bf4oyIPL4kVTmJQ7PNDSd6MDYkpSJR1pn7tz/k8Zf2DhTCqX08Ou+Q==} + + '@changesets/pre@2.0.2': + resolution: {integrity: sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==} + + '@changesets/read@0.6.5': + resolution: {integrity: sha512-UPzNGhsSjHD3Veb0xO/MwvasGe8eMyNrR/sT9gR8Q3DhOQZirgKhhXv/8hVsI0QpPjR004Z9iFxoJU6in3uGMg==} + + '@changesets/should-skip-package@0.1.2': + resolution: {integrity: sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==} + + '@changesets/types@4.1.0': + resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} + + '@changesets/types@6.1.0': + resolution: {integrity: sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==} + + '@changesets/write@0.4.0': + resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} + '@coinbase/wallet-sdk@3.9.3': resolution: {integrity: sha512-N/A2DRIf0Y3PHc1XAMvbBUu4zisna6qAdqABMZwBMNEfWrXpAwx16pZGkYCLGE+Rvv1edbcB2LYDRnACNcmCiw==} - '@coinbase/wallet-sdk@4.3.0': - resolution: {integrity: sha512-T3+SNmiCw4HzDm4we9wCHCxlP0pqCiwKe4sOwPH3YAK2KSKjxPRydKu6UQJrdONFVLG7ujXvbd/6ZqmvJb8rkw==} + '@coinbase/wallet-sdk@4.3.3': + resolution: {integrity: sha512-h8gMLQNvP5TIJVXFOyQZaxbi1Mg5alFR4Z2/PEIngdyXZEoQGcVhzyQGuDa3t9zpllxvqfAaKfzDhsfCo+nhSQ==} '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} + '@commander-js/extra-typings@12.1.0': + resolution: {integrity: sha512-wf/lwQvWAA0goIghcb91dQYpkLBcyhOhQNqG/VgWhnKzgt+UOMvra7EX/2fv70arm5RW+PUHoQHHDa6/p77Eqg==} + peerDependencies: + commander: ~12.1.0 + '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - '@depay/solana-web3.js@1.98.1': - resolution: {integrity: sha512-3Qgf8cooFqaLCVCeA6KxNBU3aBWwS019a2IaPPIlpea/P4IOFAdZL1ZgnIFTsXAvugjqMAbegd2vfVJBd/ZJ6g==} + '@depay/solana-web3.js@1.98.2': + resolution: {integrity: sha512-O7SvHsZ6HGXlzSmjhj7mj0B/VvQQn8mzm/xKQ0SUrEUJVxg9zKFBlwIvxCtgf+IOrWlBJi6VqXRu7UznWvfrCA==} - '@depay/web3-blockchains@9.8.2': - resolution: {integrity: sha512-glJ1aFNG2ZljdmYS8Ei4ok+2eoCHPqK9lseJ4kBqqKTGNTRxZ2nVZQ1GxyiO9stuixyBowVFif0bRy9E6mAYZQ==} + '@depay/web3-blockchains@9.8.6': + resolution: {integrity: sha512-Fp2sGHjvRuqsLivfbL2qdhB447Fk/A0eS/iZj5VlzVnrpfa1Jt+tAKPk1c5T5tOYagnWaGG5DTFMuFNKiqRPkQ==} engines: {node: '>=18'} '@depay/web3-client@10.18.6': @@ -1109,12 +1493,6 @@ packages: '@emotion/weak-memoize@0.4.0': resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} - '@esbuild/aix-ppc64@0.19.12': - resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.20.0': resolution: {integrity: sha512-fGFDEctNh0CcSwsiRPxiaqX0P5rq+AqE0SRhYGZ4PX46Lg1FNR6oCxJghf8YgY0WQEgQuh3lErUFE4KxLeRmmw==} engines: {node: '>=12'} @@ -1127,11 +1505,11 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.19.12': - resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] + '@esbuild/aix-ppc64@0.25.6': + resolution: {integrity: sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] '@esbuild/android-arm64@0.20.0': resolution: {integrity: sha512-aVpnM4lURNkp0D3qPoAzSG92VXStYmoVPOgXveAUoQBWRSuQzt51yvSju29J6AHPmwY1BjH49uR29oyfH1ra8Q==} @@ -1145,10 +1523,10 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm@0.19.12': - resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} - engines: {node: '>=12'} - cpu: [arm] + '@esbuild/android-arm64@0.25.6': + resolution: {integrity: sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==} + engines: {node: '>=18'} + cpu: [arm64] os: [android] '@esbuild/android-arm@0.20.0': @@ -1163,10 +1541,10 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-x64@0.19.12': - resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/android-arm@0.25.6': + resolution: {integrity: sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==} + engines: {node: '>=18'} + cpu: [arm] os: [android] '@esbuild/android-x64@0.20.0': @@ -1181,11 +1559,11 @@ packages: cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.19.12': - resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] + '@esbuild/android-x64@0.25.6': + resolution: {integrity: sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] '@esbuild/darwin-arm64@0.20.0': resolution: {integrity: sha512-AjEcivGAlPs3UAcJedMa9qYg9eSfU6FnGHJjT8s346HSKkrcWlYezGE8VaO2xKfvvlZkgAhyvl06OJOxiMgOYQ==} @@ -1199,10 +1577,10 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.19.12': - resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/darwin-arm64@0.25.6': + resolution: {integrity: sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==} + engines: {node: '>=18'} + cpu: [arm64] os: [darwin] '@esbuild/darwin-x64@0.20.0': @@ -1217,11 +1595,11 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.19.12': - resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] + '@esbuild/darwin-x64@0.25.6': + resolution: {integrity: sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] '@esbuild/freebsd-arm64@0.20.0': resolution: {integrity: sha512-kQ7jYdlKS335mpGbMW5tEe3IrQFIok9r84EM3PXB8qBFJPSc6dpWfrtsC/y1pyrz82xfUIn5ZrnSHQQsd6jebQ==} @@ -1235,10 +1613,10 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.19.12': - resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/freebsd-arm64@0.25.6': + resolution: {integrity: sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==} + engines: {node: '>=18'} + cpu: [arm64] os: [freebsd] '@esbuild/freebsd-x64@0.20.0': @@ -1253,11 +1631,11 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.19.12': - resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] + '@esbuild/freebsd-x64@0.25.6': + resolution: {integrity: sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] '@esbuild/linux-arm64@0.20.0': resolution: {integrity: sha512-uTtyYAP5veqi2z9b6Gr0NUoNv9F/rOzI8tOD5jKcCvRUn7T60Bb+42NDBCWNhMjkQzI0qqwXkQGo1SY41G52nw==} @@ -1271,10 +1649,10 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.19.12': - resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} - engines: {node: '>=12'} - cpu: [arm] + '@esbuild/linux-arm64@0.25.6': + resolution: {integrity: sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==} + engines: {node: '>=18'} + cpu: [arm64] os: [linux] '@esbuild/linux-arm@0.20.0': @@ -1289,10 +1667,10 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.19.12': - resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} - engines: {node: '>=12'} - cpu: [ia32] + '@esbuild/linux-arm@0.25.6': + resolution: {integrity: sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==} + engines: {node: '>=18'} + cpu: [arm] os: [linux] '@esbuild/linux-ia32@0.20.0': @@ -1307,10 +1685,10 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.19.12': - resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} - engines: {node: '>=12'} - cpu: [loong64] + '@esbuild/linux-ia32@0.25.6': + resolution: {integrity: sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==} + engines: {node: '>=18'} + cpu: [ia32] os: [linux] '@esbuild/linux-loong64@0.20.0': @@ -1325,10 +1703,10 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.19.12': - resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} - engines: {node: '>=12'} - cpu: [mips64el] + '@esbuild/linux-loong64@0.25.6': + resolution: {integrity: sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==} + engines: {node: '>=18'} + cpu: [loong64] os: [linux] '@esbuild/linux-mips64el@0.20.0': @@ -1343,10 +1721,10 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.19.12': - resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} - engines: {node: '>=12'} - cpu: [ppc64] + '@esbuild/linux-mips64el@0.25.6': + resolution: {integrity: sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==} + engines: {node: '>=18'} + cpu: [mips64el] os: [linux] '@esbuild/linux-ppc64@0.20.0': @@ -1361,10 +1739,10 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.19.12': - resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} - engines: {node: '>=12'} - cpu: [riscv64] + '@esbuild/linux-ppc64@0.25.6': + resolution: {integrity: sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==} + engines: {node: '>=18'} + cpu: [ppc64] os: [linux] '@esbuild/linux-riscv64@0.20.0': @@ -1379,10 +1757,10 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.19.12': - resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} - engines: {node: '>=12'} - cpu: [s390x] + '@esbuild/linux-riscv64@0.25.6': + resolution: {integrity: sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==} + engines: {node: '>=18'} + cpu: [riscv64] os: [linux] '@esbuild/linux-s390x@0.20.0': @@ -1397,10 +1775,10 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.19.12': - resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/linux-s390x@0.25.6': + resolution: {integrity: sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==} + engines: {node: '>=18'} + cpu: [s390x] os: [linux] '@esbuild/linux-x64@0.20.0': @@ -1415,10 +1793,16 @@ packages: cpu: [x64] os: [linux] - '@esbuild/netbsd-x64@0.19.12': - resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} - engines: {node: '>=12'} + '@esbuild/linux-x64@0.25.6': + resolution: {integrity: sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==} + engines: {node: '>=18'} cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.6': + resolution: {integrity: sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==} + engines: {node: '>=18'} + cpu: [arm64] os: [netbsd] '@esbuild/netbsd-x64@0.20.0': @@ -1433,10 +1817,16 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/openbsd-x64@0.19.12': - resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} - engines: {node: '>=12'} + '@esbuild/netbsd-x64@0.25.6': + resolution: {integrity: sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==} + engines: {node: '>=18'} cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.6': + resolution: {integrity: sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==} + engines: {node: '>=18'} + cpu: [arm64] os: [openbsd] '@esbuild/openbsd-x64@0.20.0': @@ -1451,11 +1841,17 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.19.12': - resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} - engines: {node: '>=12'} + '@esbuild/openbsd-x64@0.25.6': + resolution: {integrity: sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==} + engines: {node: '>=18'} cpu: [x64] - os: [sunos] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.6': + resolution: {integrity: sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] '@esbuild/sunos-x64@0.20.0': resolution: {integrity: sha512-GDwAqgHQm1mVoPppGsoq4WJwT3vhnz/2N62CzhvApFD1eJyTroob30FPpOZabN+FgCjhG+AgcZyOPIkR8dfD7g==} @@ -1469,11 +1865,11 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.19.12': - resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] + '@esbuild/sunos-x64@0.25.6': + resolution: {integrity: sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] '@esbuild/win32-arm64@0.20.0': resolution: {integrity: sha512-0vYsP8aC4TvMlOQYozoksiaxjlvUcQrac+muDqj1Fxy6jh9l9CZJzj7zmh8JGfiV49cYLTorFLxg7593pGldwQ==} @@ -1487,10 +1883,10 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.19.12': - resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} - engines: {node: '>=12'} - cpu: [ia32] + '@esbuild/win32-arm64@0.25.6': + resolution: {integrity: sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==} + engines: {node: '>=18'} + cpu: [arm64] os: [win32] '@esbuild/win32-ia32@0.20.0': @@ -1505,10 +1901,10 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.19.12': - resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/win32-ia32@0.25.6': + resolution: {integrity: sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==} + engines: {node: '>=18'} + cpu: [ia32] os: [win32] '@esbuild/win32-x64@0.20.0': @@ -1523,8 +1919,14 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.5.1': - resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==} + '@esbuild/win32-x64@0.25.6': + resolution: {integrity: sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.7.0': + resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 @@ -1549,6 +1951,11 @@ packages: engines: {node: '>=14'} hasBin: true + '@ethereumjs/rlp@5.0.2': + resolution: {integrity: sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==} + engines: {node: '>=18'} + hasBin: true + '@ethereumjs/tx@4.2.0': resolution: {integrity: sha512-1nc6VO4jtFd172BbSnTnDQVr9IYBFl1y4xPzZdtkrkKIncBCkdbgfdRV+MiTkJYAtTxvV12GRZLqBFT1PNK6Yw==} engines: {node: '>=14'} @@ -1557,6 +1964,10 @@ packages: resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==} engines: {node: '>=14'} + '@ethereumjs/util@9.1.0': + resolution: {integrity: sha512-XBEKsYqLGXLah9PNJbgdkigthkG7TAGvlD/sH12beMXEyHDyigfcbdvHhmLyDWgDyOJn4QwiQUaF7yeuhnjdog==} + engines: {node: '>=18'} + '@ethersproject/abi@5.8.0': resolution: {integrity: sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==} @@ -1686,17 +2097,20 @@ packages: '@iden3/bigarray@0.0.2': resolution: {integrity: sha512-Xzdyxqm1bOFF6pdIsiHLLl3HkSLjbhqJHVyqaTxXt3RqXBEnmsUmEW47H7VOi/ak7TdkRpNkxjyK5Zbkm+y52g==} + '@iden3/binfileutils@0.0.11': + resolution: {integrity: sha512-LylnJoZ0CTdgErnKY8OxohvW4K+p6UHD3sxt+3P9AmMyBQjYR4IpoqoYZZ+9aMj89cmCQ21UvdhndAx04er3NA==} + '@iden3/binfileutils@0.0.12': resolution: {integrity: sha512-naAmzuDufRIcoNfQ1d99d7hGHufLA3wZSibtr4dMe6ZeiOPV1KwOZWTJ1YVz4HbaWlpDuzVU72dS4ATQS4PXBQ==} - '@img/sharp-darwin-arm64@0.34.1': - resolution: {integrity: sha512-pn44xgBtgpEbZsu+lWf2KNb6OAf70X68k+yk69Ic2Xz11zHR/w24/U49XT7AeRwJ0Px+mhALhU5LPci1Aymk7A==} + '@img/sharp-darwin-arm64@0.34.2': + resolution: {integrity: sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.34.1': - resolution: {integrity: sha512-VfuYgG2r8BpYiOUN+BfYeFo69nP/MIwAtSJ7/Zpxc5QF3KS22z8Pvg3FkrSFJBPNQ7mmcUcYQFBmEQp7eu1F8Q==} + '@img/sharp-darwin-x64@0.34.2': + resolution: {integrity: sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] @@ -1746,63 +2160,97 @@ packages: cpu: [x64] os: [linux] - '@img/sharp-linux-arm64@0.34.1': - resolution: {integrity: sha512-kX2c+vbvaXC6vly1RDf/IWNXxrlxLNpBVWkdpRq5Ka7OOKj6nr66etKy2IENf6FtOgklkg9ZdGpEu9kwdlcwOQ==} + '@img/sharp-linux-arm64@0.34.2': + resolution: {integrity: sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linux-arm@0.34.1': - resolution: {integrity: sha512-anKiszvACti2sGy9CirTlNyk7BjjZPiML1jt2ZkTdcvpLU1YH6CXwRAZCA2UmRXnhiIftXQ7+Oh62Ji25W72jA==} + '@img/sharp-linux-arm@0.34.2': + resolution: {integrity: sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] - '@img/sharp-linux-s390x@0.34.1': - resolution: {integrity: sha512-7s0KX2tI9mZI2buRipKIw2X1ufdTeaRgwmRabt5bi9chYfhur+/C1OXg3TKg/eag1W+6CCWLVmSauV1owmRPxA==} + '@img/sharp-linux-s390x@0.34.2': + resolution: {integrity: sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] - '@img/sharp-linux-x64@0.34.1': - resolution: {integrity: sha512-wExv7SH9nmoBW3Wr2gvQopX1k8q2g5V5Iag8Zk6AVENsjwd+3adjwxtp3Dcu2QhOXr8W9NusBU6XcQUohBZ5MA==} + '@img/sharp-linux-x64@0.34.2': + resolution: {integrity: sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-linuxmusl-arm64@0.34.1': - resolution: {integrity: sha512-DfvyxzHxw4WGdPiTF0SOHnm11Xv4aQexvqhRDAoD00MzHekAj9a/jADXeXYCDFH/DzYruwHbXU7uz+H+nWmSOQ==} + '@img/sharp-linuxmusl-arm64@0.34.2': + resolution: {integrity: sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linuxmusl-x64@0.34.1': - resolution: {integrity: sha512-pax/kTR407vNb9qaSIiWVnQplPcGU8LRIJpDT5o8PdAx5aAA7AS3X9PS8Isw1/WfqgQorPotjrZL3Pqh6C5EBg==} + '@img/sharp-linuxmusl-x64@0.34.2': + resolution: {integrity: sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-wasm32@0.34.1': - resolution: {integrity: sha512-YDybQnYrLQfEpzGOQe7OKcyLUCML4YOXl428gOOzBgN6Gw0rv8dpsJ7PqTHxBnXnwXr8S1mYFSLSa727tpz0xg==} + '@img/sharp-wasm32@0.34.2': + resolution: {integrity: sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] - '@img/sharp-win32-ia32@0.34.1': - resolution: {integrity: sha512-WKf/NAZITnonBf3U1LfdjoMgNO5JYRSlhovhRhMxXVdvWYveM4kM3L8m35onYIdh75cOMCo1BexgVQcCDzyoWw==} + '@img/sharp-win32-arm64@0.34.2': + resolution: {integrity: sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.34.2': + resolution: {integrity: sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.34.1': - resolution: {integrity: sha512-hw1iIAHpNE8q3uMIRCgGOeDoz9KtFNarFLQclLxr/LK1VBkj8nby18RjFvr6aP7USRYAjTZW6yisnBWMX571Tw==} + '@img/sharp-win32-x64@0.34.2': + resolution: {integrity: sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] + '@inquirer/core@9.2.1': + resolution: {integrity: sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==} + engines: {node: '>=18'} + + '@inquirer/figures@1.0.12': + resolution: {integrity: sha512-MJttijd8rMFcKJC8NYmprWr6hD3r9Gd9qUC0XwPNwoEPWSMVJwA2MlXxF+nhZZNMY+HXsWa+o7KY2emWYIn0jQ==} + engines: {node: '>=18'} + + '@inquirer/input@2.3.0': + resolution: {integrity: sha512-XfnpCStx2xgh1LIRqPXrTNEEByqQWoxsWYzNRSEUxJ5c6EQlhMogJ3vHKu8aXuTacebtaZzMAHwEL0kAflKOBw==} + engines: {node: '>=18'} + + '@inquirer/select@2.5.0': + resolution: {integrity: sha512-YmDobTItPP3WcEI86GvPo+T2sRHkxxOq/kXmsBjHS5BVXUgvgZ5AfJjkvQvZr03T81NnI3KrrRuMzeuYUQRFOA==} + engines: {node: '>=18'} + + '@inquirer/type@1.5.5': + resolution: {integrity: sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==} + engines: {node: '>=18'} + + '@inquirer/type@2.0.0': + resolution: {integrity: sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==} + engines: {node: '>=18'} + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jridgewell/gen-mapping@0.3.8': resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} @@ -1827,8 +2275,14 @@ packages: '@lit-labs/ssr-dom-shim@1.3.0': resolution: {integrity: sha512-nQIWonJ6eFAvUUrSlwyHDm/aE8PBDu5kRpL0vHMg6K8fK3Diq1xdPjTnsJSwxABhaZ+5eBi1btQB5ShUTKo4nQ==} - '@lit/reactive-element@1.6.3': - resolution: {integrity: sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==} + '@lit/reactive-element@2.1.0': + resolution: {integrity: sha512-L2qyoZSQClcBmq0qajBVbhYEcG6iK0XfLn66ifLe/RfC0/ihpc+pl0Wdn8bJ8o+hj38cG0fGXRgSS20MuXn7qA==} + + '@manypkg/find-root@1.1.0': + resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} + + '@manypkg/get-packages@1.1.3': + resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} '@mdx-js/mdx@2.3.0': resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==} @@ -1842,10 +2296,6 @@ packages: resolution: {integrity: sha512-whiUMPlAOrVGmX8aKYVPvlKyG4CpQXiNNyt74vE1xb5sPvmx5oA7B/kOi/JdBvhGQq97U1/AVdXEdk2zkP8qyA==} engines: {node: '>=14.0.0'} - '@metamask/eth-sig-util@4.0.1': - resolution: {integrity: sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==} - engines: {node: '>=12.0.0'} - '@metamask/json-rpc-engine@7.3.3': resolution: {integrity: sha512-dwZPq8wx9yV3IX2caLi9q9xZBw2XeIoYqdyihDDDpuHVCEiqadJLwqM3zy+uwf6F1QYQ65A8aOMQg1Uw7LMLNg==} engines: {node: '>=16.0.0'} @@ -1911,34 +2361,37 @@ packages: resolution: {integrity: sha512-w8CVbdkDrVXFJbfBSlDfafDR6BAkpDmv1bC1UJVCoVny5tW2RKAdn9i68Xf7asYT4TnUhl/hN4zfUiKQq9II4g==} engines: {node: '>=16.0.0'} + '@microsoft/api-extractor-model@7.30.6': + resolution: {integrity: sha512-znmFn69wf/AIrwHya3fxX6uB5etSIn6vg4Q4RB/tb5VDDs1rqREc+AvMC/p19MUN13CZ7+V/8pkYPTj7q8tftg==} + + '@microsoft/api-extractor@7.52.8': + resolution: {integrity: sha512-cszYIcjiNscDoMB1CIKZ3My61+JOhpERGlGr54i6bocvGLrcL/wo9o+RNXMBrb7XgLtKaizZWUpqRduQuHQLdg==} + hasBin: true + + '@microsoft/tsdoc-config@0.17.1': + resolution: {integrity: sha512-UtjIFe0C6oYgTnad4q1QP4qXwLhe6tIpNTRStJ2RZEPIkqQPREAwE5spzVxsdn9UaEMUqhh0AqSx3X4nWAKXWw==} + + '@microsoft/tsdoc@0.15.1': + resolution: {integrity: sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==} + '@motionone/animation@10.18.0': resolution: {integrity: sha512-9z2p5GFGCm0gBsZbi8rVMOAJCtw1WqBTIPw3ozk06gDvZInBPIsQcHgYogEJ4yuHJ+akuW8g1SEIOpTOvYs8hw==} '@motionone/dom@10.12.0': resolution: {integrity: sha512-UdPTtLMAktHiqV0atOczNYyDd/d8Cf5fFsd1tua03PqTwwCe/6lwhLSQ8a7TbnQ5SN0gm44N1slBfj+ORIhrqw==} - '@motionone/dom@10.18.0': - resolution: {integrity: sha512-bKLP7E0eyO4B2UaHBBN55tnppwRnaE3KFfh3Ps9HhnAkar3Cb69kUCJY9as8LrccVYKgHA+JY5dOQqJLOPhF5A==} - '@motionone/easing@10.18.0': resolution: {integrity: sha512-VcjByo7XpdLS4o9T8t99JtgxkdMcNWD3yHU/n6CLEz3bkmKDRZyYQ/wmSf6daum8ZXqfUAgFeCZSpJZIMxaCzg==} '@motionone/generators@10.18.0': resolution: {integrity: sha512-+qfkC2DtkDj4tHPu+AFKVfR/C30O1vYdvsGYaR13W/1cczPrrcjdvYCj0VLFuRMN+lP1xvpNZHCRNM4fBzn1jg==} - '@motionone/svelte@10.16.4': - resolution: {integrity: sha512-zRVqk20lD1xqe+yEDZhMYgftsuHc25+9JSo+r0a0OWUJFocjSV9D/+UGhX4xgJsuwB9acPzXLr20w40VnY2PQA==} - '@motionone/types@10.17.1': resolution: {integrity: sha512-KaC4kgiODDz8hswCrS0btrVrzyU2CSQKO7Ps90ibBVSQmjkrt2teqta6/sOG59v7+dPnKMAg13jyqtMKV2yJ7A==} '@motionone/utils@10.18.0': resolution: {integrity: sha512-3XVF7sgyTSI2KWvTf6uLlBJ5iAgRgmvp3bpuOiQJvInd4nZ19ET8lX5unn30SlmRH7hXbBbH+Gxd0m0klJ3Xtw==} - '@motionone/vue@10.16.4': - resolution: {integrity: sha512-z10PF9JV6SbjFq+/rYabM+8CVlMokgl8RFGvieSGNTmrkQanfHn+15XBrhG3BgUfvmTeSeyShfOHpG0i9zEdcg==} - deprecated: Motion One for Vue is deprecated. Use Oku Motion instead https://oku-ui.com/motion - '@napi-rs/simple-git-android-arm-eabi@0.1.19': resolution: {integrity: sha512-XryEH/hadZ4Duk/HS/HC/cA1j0RHmqUGey3MsCf65ZS0VrWMqChXM/xlTPWuY5jfCc/rPubHaqI7DZlbexnX/g==} engines: {node: '>= 10'} @@ -2027,59 +2480,59 @@ packages: resolution: {integrity: sha512-jMxvwzkKzd3cXo2EB9GM2ic0eYo2rP/BS6gJt6HnWbsDO1O8GSD4k7o2Cpr2YERtMpGF/MGcDfsfj2EbQPtrXw==} engines: {node: '>= 10'} - '@next/env@14.2.28': - resolution: {integrity: sha512-PAmWhJfJQlP+kxZwCjrVd9QnR5x0R3u0mTXTiZDgSd4h5LdXmjxCCWbN9kq6hkZBOax8Rm3xDW5HagWyJuT37g==} + '@next/env@14.2.30': + resolution: {integrity: sha512-KBiBKrDY6kxTQWGzKjQB7QirL3PiiOkV7KW98leHFjtVRKtft76Ra5qSA/SL75xT44dp6hOcqiiJ6iievLOYug==} - '@next/swc-darwin-arm64@14.2.28': - resolution: {integrity: sha512-kzGChl9setxYWpk3H6fTZXXPFFjg7urptLq5o5ZgYezCrqlemKttwMT5iFyx/p1e/JeglTwDFRtb923gTJ3R1w==} + '@next/swc-darwin-arm64@14.2.30': + resolution: {integrity: sha512-EAqfOTb3bTGh9+ewpO/jC59uACadRHM6TSA9DdxJB/6gxOpyV+zrbqeXiFTDy9uV6bmipFDkfpAskeaDcO+7/g==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@14.2.28': - resolution: {integrity: sha512-z6FXYHDJlFOzVEOiiJ/4NG8aLCeayZdcRSMjPDysW297Up6r22xw6Ea9AOwQqbNsth8JNgIK8EkWz2IDwaLQcw==} + '@next/swc-darwin-x64@14.2.30': + resolution: {integrity: sha512-TyO7Wz1IKE2kGv8dwQ0bmPL3s44EKVencOqwIY69myoS3rdpO1NPg5xPM5ymKu7nfX4oYJrpMxv8G9iqLsnL4A==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@14.2.28': - resolution: {integrity: sha512-9ARHLEQXhAilNJ7rgQX8xs9aH3yJSj888ssSjJLeldiZKR4D7N08MfMqljk77fAwZsWwsrp8ohHsMvurvv9liQ==} + '@next/swc-linux-arm64-gnu@14.2.30': + resolution: {integrity: sha512-I5lg1fgPJ7I5dk6mr3qCH1hJYKJu1FsfKSiTKoYwcuUf53HWTrEkwmMI0t5ojFKeA6Vu+SfT2zVy5NS0QLXV4Q==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@14.2.28': - resolution: {integrity: sha512-p6gvatI1nX41KCizEe6JkF0FS/cEEF0u23vKDpl+WhPe/fCTBeGkEBh7iW2cUM0rvquPVwPWdiUR6Ebr/kQWxQ==} + '@next/swc-linux-arm64-musl@14.2.30': + resolution: {integrity: sha512-8GkNA+sLclQyxgzCDs2/2GSwBc92QLMrmYAmoP2xehe5MUKBLB2cgo34Yu242L1siSkwQkiV4YLdCnjwc/Micw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@14.2.28': - resolution: {integrity: sha512-nsiSnz2wO6GwMAX2o0iucONlVL7dNgKUqt/mDTATGO2NY59EO/ZKnKEr80BJFhuA5UC1KZOMblJHWZoqIJddpA==} + '@next/swc-linux-x64-gnu@14.2.30': + resolution: {integrity: sha512-8Ly7okjssLuBoe8qaRCcjGtcMsv79hwzn/63wNeIkzJVFVX06h5S737XNr7DZwlsbTBDOyI6qbL2BJB5n6TV/w==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@14.2.28': - resolution: {integrity: sha512-+IuGQKoI3abrXFqx7GtlvNOpeExUH1mTIqCrh1LGFf8DnlUcTmOOCApEnPJUSLrSbzOdsF2ho2KhnQoO0I1RDw==} + '@next/swc-linux-x64-musl@14.2.30': + resolution: {integrity: sha512-dBmV1lLNeX4mR7uI7KNVHsGQU+OgTG5RGFPi3tBJpsKPvOPtg9poyav/BYWrB3GPQL4dW5YGGgalwZ79WukbKQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@14.2.28': - resolution: {integrity: sha512-l61WZ3nevt4BAnGksUVFKy2uJP5DPz2E0Ma/Oklvo3sGj9sw3q7vBWONFRgz+ICiHpW5mV+mBrkB3XEubMrKaA==} + '@next/swc-win32-arm64-msvc@14.2.30': + resolution: {integrity: sha512-6MMHi2Qc1Gkq+4YLXAgbYslE1f9zMGBikKMdmQRHXjkGPot1JY3n5/Qrbg40Uvbi8//wYnydPnyvNhI1DMUW1g==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-ia32-msvc@14.2.28': - resolution: {integrity: sha512-+Kcp1T3jHZnJ9v9VTJ/yf1t/xmtFAc/Sge4v7mVc1z+NYfYzisi8kJ9AsY8itbgq+WgEwMtOpiLLJsUy2qnXZw==} + '@next/swc-win32-ia32-msvc@14.2.30': + resolution: {integrity: sha512-pVZMnFok5qEX4RT59mK2hEVtJX+XFfak+/rjHpyFh7juiT52r177bfFKhnlafm0UOSldhXjj32b+LZIOdswGTg==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] - '@next/swc-win32-x64-msvc@14.2.28': - resolution: {integrity: sha512-1gCmpvyhz7DkB1srRItJTnmR2UwQPAUXXIg9r0/56g3O8etGmwlX68skKXJOp9EejW3hhv7nSQUJ2raFiz4MoA==} + '@next/swc-win32-x64-msvc@14.2.30': + resolution: {integrity: sha512-4KCo8hMZXMjpTzs3HOqOGYYwAXymXIy7PEPAXNEcEOyKqkjiDlECumrWziy+JEF0Oi4ILHGxzgQ3YiMGG2t/Lg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -2088,6 +2541,10 @@ packages: resolution: {integrity: sha512-rONPWMC7PeExE077uLE4oqWrZ1IvAfz3oH9LibVAcVCopJiA9R62uavnbEzdkVmJYI6M6Zgkbeb07+tWjlq2XA==} engines: {node: ^14.21.3 || >=16} + '@noble/ciphers@1.3.0': + resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==} + engines: {node: ^14.21.3 || >=16} + '@noble/curves@1.2.0': resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} @@ -2102,6 +2559,18 @@ packages: resolution: {integrity: sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==} engines: {node: ^14.21.3 || >=16} + '@noble/curves@1.8.2': + resolution: {integrity: sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==} + engines: {node: ^14.21.3 || >=16} + + '@noble/curves@1.9.1': + resolution: {integrity: sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==} + engines: {node: ^14.21.3 || >=16} + + '@noble/curves@1.9.2': + resolution: {integrity: sha512-HxngEd2XUcg9xi20JkwlLCtYwfoFw4JGkuZpT+WlsPD4gB/cxkvTD8fSsoAnphGZhFdZYKeQIPCuFlWPm1uE0g==} + engines: {node: ^14.21.3 || >=16} + '@noble/hashes@1.2.0': resolution: {integrity: sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==} @@ -2121,6 +2590,14 @@ packages: resolution: {integrity: sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==} engines: {node: ^14.21.3 || >=16} + '@noble/hashes@1.7.2': + resolution: {integrity: sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==} + engines: {node: ^14.21.3 || >=16} + + '@noble/hashes@1.8.0': + resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} + engines: {node: ^14.21.3 || >=16} + '@noble/secp256k1@1.7.1': resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} @@ -2136,100 +2613,89 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@nomicfoundation/edr-darwin-arm64@0.8.0': - resolution: {integrity: sha512-sKTmOu/P5YYhxT0ThN2Pe3hmCE/5Ag6K/eYoiavjLWbR7HEb5ZwPu2rC3DpuUk1H+UKJqt7o4/xIgJxqw9wu6A==} - engines: {node: '>= 18'} + '@noir-lang/acvm_js@1.0.0-beta.3': + resolution: {integrity: sha512-Dc6g5rJr/x7tKsWvnTbZvjwqI1uiAtvq+NAz5tcLRzUHJw6NAvDXEH5h117h+BfIAhhsHXuPTkDfDB1Gnqp/Bg==} - '@nomicfoundation/edr-darwin-x64@0.8.0': - resolution: {integrity: sha512-8ymEtWw1xf1Id1cc42XIeE+9wyo3Dpn9OD/X8GiaMz9R70Ebmj2g+FrbETu8o6UM+aL28sBZQCiCzjlft2yWAg==} - engines: {node: '>= 18'} + '@noir-lang/noir_js@1.0.0-beta.3': + resolution: {integrity: sha512-Nt/rP7zRMOfNq9urD8+GtRpYqEc0K10FoKXs/v+ZTbGaP6Jkm7+F+UPj2bkWy66k1HNzsN6ortli7c7mnLDHwA==} - '@nomicfoundation/edr-linux-arm64-gnu@0.8.0': - resolution: {integrity: sha512-h/wWzS2EyQuycz+x/SjMRbyA+QMCCVmotRsgM1WycPARvVZWIVfwRRsKoXKdCftsb3S8NTprqBdJlOmsFyETFA==} - engines: {node: '>= 18'} + '@noir-lang/noir_wasm@1.0.0-beta.3': + resolution: {integrity: sha512-1EZCmaSYISxJIBLZN1tEyu25E7WIWAYpT3JdnVx+YCHk5uPWtXgroZSqypkpi39TVOJZT6DU/bPfrx0N1GSyog==} - '@nomicfoundation/edr-linux-arm64-musl@0.8.0': - resolution: {integrity: sha512-gnWxDgdkka0O9GpPX/gZT3REeKYV28Guyg13+Vj/bbLpmK1HmGh6Kx+fMhWv+Ht/wEmGDBGMCW1wdyT/CftJaQ==} - engines: {node: '>= 18'} + '@noir-lang/noirc_abi@1.0.0-beta.3': + resolution: {integrity: sha512-L6BI64ennatwTUciHqQ14ahUFsgzL41tzghqUELzO7XojasStcWDaSMjlTxca/2pvpWtEJHDtseKe1VZWIIVXQ==} + + '@noir-lang/types@1.0.0-beta.3': + resolution: {integrity: sha512-BPOmf0qDiTn4wH1Lo7mHa67GTQFueIVaDUcUb+N9+ALiXC5nVU8HrzWmx1yvZB64ZiCEy7yPdNEaNrszSrE2fg==} - '@nomicfoundation/edr-linux-x64-gnu@0.8.0': - resolution: {integrity: sha512-DTMiAkgAx+nyxcxKyxFZk1HPakXXUCgrmei7r5G7kngiggiGp/AUuBBWFHi8xvl2y04GYhro5Wp+KprnLVoAPA==} + '@nomicfoundation/edr-darwin-arm64@0.11.2': + resolution: {integrity: sha512-/QU0GHeoLFOJp28qK46kkTG849NN/5Qgq9ifKzhqBas1MCqwcdjrUI3raGkvE9SWJevljWd1HdW16fFpxUrzbA==} engines: {node: '>= 18'} - '@nomicfoundation/edr-linux-x64-musl@0.8.0': - resolution: {integrity: sha512-iTITWe0Zj8cNqS0xTblmxPbHVWwEtMiDC+Yxwr64d7QBn/1W0ilFQ16J8gB6RVVFU3GpfNyoeg3tUoMpSnrm6Q==} + '@nomicfoundation/edr-darwin-x64@0.11.2': + resolution: {integrity: sha512-Dam+k00vyYNXCkM7JZGQBm0McNaL6ilbfY8BuIdHU2mpIVO5hpAFk8IQnMnG3FRuXuPJ0JoSTkn1R495T8AKqw==} engines: {node: '>= 18'} - '@nomicfoundation/edr-win32-x64-msvc@0.8.0': - resolution: {integrity: sha512-mNRDyd/C3j7RMcwapifzv2K57sfA5xOw8g2U84ZDvgSrXVXLC99ZPxn9kmolb+dz8VMm9FONTZz9ESS6v8DTnA==} + '@nomicfoundation/edr-linux-arm64-gnu@0.11.2': + resolution: {integrity: sha512-6Z+hZ61c0v5EPVhCAc/rV36eN20GbPRfcmUeFJ3t+RjdY20EiUQzP85YU0q3AgCuwr410W27pazoBoL73cCPbg==} engines: {node: '>= 18'} - '@nomicfoundation/edr@0.8.0': - resolution: {integrity: sha512-dwWRrghSVBQDpt0wP+6RXD8BMz2i/9TI34TcmZqeEAZuCLei3U9KZRgGTKVAM1rMRvrpf5ROfPqrWNetKVUTag==} + '@nomicfoundation/edr-linux-arm64-musl@0.11.2': + resolution: {integrity: sha512-AqC4AI3pR4vSsEcFyW/6rI1q16wEjIRYIR25IJO/EdBmXdsuVZgxsf/kMUCWQhhTuy89RTgIGTbMAQA0+DfSvA==} engines: {node: '>= 18'} - '@nomicfoundation/ethereumjs-common@4.0.4': - resolution: {integrity: sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==} + '@nomicfoundation/edr-linux-x64-gnu@0.11.2': + resolution: {integrity: sha512-vz1uiof1ZIi6RnXfHZiAXRgkloLciuYGD1rNDrqm1Pp7Nf0pbxw+e4TBQLoMYKzZn0MYS4u4Fa0AV2S7NjfptQ==} + engines: {node: '>= 18'} - '@nomicfoundation/ethereumjs-rlp@5.0.4': - resolution: {integrity: sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==} - engines: {node: '>=18'} - hasBin: true + '@nomicfoundation/edr-linux-x64-musl@0.11.2': + resolution: {integrity: sha512-ArAbcrWwn+8Ze8JAaA9349N2E7hfs9PYvxDgfhujEH9iVC9XI6L+OhMATPsS3wkOST/+ykxELAF1KT4YjSxcrA==} + engines: {node: '>= 18'} - '@nomicfoundation/ethereumjs-tx@5.0.4': - resolution: {integrity: sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw==} - engines: {node: '>=18'} - peerDependencies: - c-kzg: ^2.1.2 - peerDependenciesMeta: - c-kzg: - optional: true + '@nomicfoundation/edr-win32-x64-msvc@0.11.2': + resolution: {integrity: sha512-GDXBhxy5wlmZYQrTXu9Oh9OPTsi4tCdmHy1z8O9XqdH9wsP674Frh6Fb43yjVoS2Ek1F9yX11nexIrFXSuNyJQ==} + engines: {node: '>= 18'} - '@nomicfoundation/ethereumjs-util@9.0.4': - resolution: {integrity: sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q==} - engines: {node: '>=18'} - peerDependencies: - c-kzg: ^2.1.2 - peerDependenciesMeta: - c-kzg: - optional: true + '@nomicfoundation/edr@0.11.2': + resolution: {integrity: sha512-JEFMTs5Tju+YiCsv6EO+657O/fvPaQ7bkUCkWqHFYFFbCKH1yh0PeRIaqj5h4z4O16ckxbVpAM676ZFTmvFUGQ==} + engines: {node: '>= 18'} - '@nomicfoundation/hardhat-chai-matchers@2.0.8': - resolution: {integrity: sha512-Z5PiCXH4xhNLASROlSUOADfhfpfhYO6D7Hn9xp8PddmHey0jq704cr6kfU8TRrQ4PUZbpfsZadPj+pCfZdjPIg==} + '@nomicfoundation/hardhat-chai-matchers@2.0.9': + resolution: {integrity: sha512-AbCoBuTKMlwlf1lesSmi/4VvJHNG9EP13EmkCJ+MJS1SBdtVtU4YrBbdYmnYPEvRFcAIMFB/cwcQGmuBYeCoVg==} peerDependencies: - '@nomicfoundation/hardhat-ethers': ^3.0.0 + '@nomicfoundation/hardhat-ethers': ^3.0.9 chai: ^4.2.0 - ethers: ^6.1.0 + ethers: ^6.14.0 hardhat: ^2.9.4 - '@nomicfoundation/hardhat-ethers@3.0.8': - resolution: {integrity: sha512-zhOZ4hdRORls31DTOqg+GmEZM0ujly8GGIuRY7t7szEk2zW/arY1qDug/py8AEktT00v5K+b6RvbVog+va51IA==} + '@nomicfoundation/hardhat-ethers@3.0.9': + resolution: {integrity: sha512-xBJdRUiCwKpr0OYrOzPwAyNGtsVzoBx32HFPJVv6S+sFA9TmBIBDaqNlFPmBH58ZjgNnGhEr/4oBZvGr4q4TjQ==} peerDependencies: - ethers: ^6.1.0 + ethers: ^6.14.0 hardhat: ^2.0.0 - '@nomicfoundation/hardhat-foundry@1.1.3': - resolution: {integrity: sha512-30Ezc3hlZ4pC5Z/9W9euW5uoPKKQQKaecLETHJH8BPpd30zYOooy6HfjmcTY1/taOQjlwirOdNO7tHlje8Qcgw==} + '@nomicfoundation/hardhat-foundry@1.1.4': + resolution: {integrity: sha512-jpKyOr8bYKJPCuxJIJGOJzzyQPLcLJYq+kLPx135dkgCXyHiFdbSaGA9AEwqsPf97wlwXkskXGn4a21XOkSOPg==} peerDependencies: hardhat: ^2.17.2 - '@nomicfoundation/hardhat-ignition-ethers@0.15.11': - resolution: {integrity: sha512-srXzvf7qCDHLrnvQWtpVA9gWpcbp4BcnsOqJt6ISet9OlUnxk4GgRMbdFq4YpM48bHQTX397jS9yk1AtJCjt/g==} + '@nomicfoundation/hardhat-ignition-ethers@0.15.13': + resolution: {integrity: sha512-fJuImb0KBbsylTL5M1DdlChIO/GZoms2NUVJhU+AvfhlgB0jzRH+9jSXE9izYPktd8//tdVSC4kJloJPrR+BlA==} peerDependencies: - '@nomicfoundation/hardhat-ethers': ^3.0.4 - '@nomicfoundation/hardhat-ignition': ^0.15.11 - '@nomicfoundation/ignition-core': ^0.15.11 - ethers: ^6.7.0 + '@nomicfoundation/hardhat-ethers': ^3.0.9 + '@nomicfoundation/hardhat-ignition': ^0.15.12 + '@nomicfoundation/ignition-core': ^0.15.12 + ethers: ^6.14.0 hardhat: ^2.18.0 - '@nomicfoundation/hardhat-ignition@0.15.11': - resolution: {integrity: sha512-OXebmK9FCMwwbb4mIeHBbVFFicAGgyGKJT2zrONrpixrROxrVs6KEi1gzsiN25qtQhCQePt8BTjjYrgy86Dfxg==} + '@nomicfoundation/hardhat-ignition@0.15.12': + resolution: {integrity: sha512-T03bSjFy8vWeKGvFsR42vzl4PgmW06i1e/84m2oowZzdO3i9ax3XJhRiH4kC08QXzkdAdUPinx68hQea8Wh6Jw==} peerDependencies: '@nomicfoundation/hardhat-verify': ^2.0.1 hardhat: ^2.18.0 - '@nomicfoundation/hardhat-network-helpers@1.0.12': - resolution: {integrity: sha512-xTNQNI/9xkHvjmCJnJOTyqDSl8uq1rKb2WOVmixQxFtRd7Oa3ecO8zM0cyC2YmOK+jHB9WPZ+F/ijkHg1CoORA==} + '@nomicfoundation/hardhat-network-helpers@1.0.13': + resolution: {integrity: sha512-ptg0+SH8jnfoYHlR3dKWTNTB43HZSxkuy3OeDk+AufEKQvQ7Ru9LQEbJtLuDTQ4HGRBkhl4oJ9RABsEIbn7Taw==} peerDependencies: hardhat: ^2.9.5 @@ -2244,7 +2710,7 @@ packages: '@typechain/hardhat': ^9.0.0 '@types/chai': ^4.2.0 '@types/mocha': '>=9.1.0' - '@types/node': '>=16.0.0' + '@types/node': 22.7.5 chai: ^4.2.0 ethers: ^6.4.0 hardhat: ^2.11.0 @@ -2252,7 +2718,7 @@ packages: solidity-coverage: ^0.8.1 ts-node: '>=8.0.0' typechain: ^8.3.0 - typescript: '>=4.5.0' + typescript: 5.8.3 '@nomicfoundation/hardhat-toolbox@5.0.0': resolution: {integrity: sha512-FnUtUC5PsakCbwiVNsqlXVIWG5JIb5CEZoSXbJUsEBun22Bivx2jhF1/q9iQbzuaGpJKFQyOhemPB2+XlEE6pQ==} @@ -2266,7 +2732,7 @@ packages: '@typechain/hardhat': ^9.0.0 '@types/chai': ^4.2.0 '@types/mocha': '>=9.1.0' - '@types/node': '>=18.0.0' + '@types/node': 22.7.5 chai: ^4.2.0 ethers: ^6.4.0 hardhat: ^2.11.0 @@ -2274,15 +2740,15 @@ packages: solidity-coverage: ^0.8.1 ts-node: '>=8.0.0' typechain: ^8.3.0 - typescript: '>=4.5.0' + typescript: 5.8.3 - '@nomicfoundation/hardhat-verify@2.0.13': - resolution: {integrity: sha512-i57GX1sC0kYGyRVnbQrjjyBTpWTKgrvKC+jH8CMKV6gHp959Upb8lKaZ58WRHIU0espkulTxLnacYeUDirwJ2g==} + '@nomicfoundation/hardhat-verify@2.0.14': + resolution: {integrity: sha512-z3iVF1WYZHzcdMMUuureFpSAfcnlfJbJx3faOnGrOYg6PRTki1Ut9JAuRccnFzMHf1AmTEoSUpWcyvBCoxL5Rg==} peerDependencies: - hardhat: ^2.0.4 + hardhat: ^2.24.1 - '@nomicfoundation/ignition-core@0.15.11': - resolution: {integrity: sha512-PeYKRlrQ0koT72yRnlyyG66cXMFiv5X/cIB8hBFPl3ekeg5tPXcHAgs/VZhOsgwEox4ejphTtItLESb1IDBw0w==} + '@nomicfoundation/ignition-core@0.15.12': + resolution: {integrity: sha512-JJdyoyfM5RXaUqv4c2V/8xpuui4uqJbMCvVnEhgo6FMOK6bqj8wGP6hM4gNE5TLug6ZUCdjIB8kFpofl21RycQ==} '@nomicfoundation/ignition-ui@0.15.11': resolution: {integrity: sha512-VPOVl5xqCKhYCyPOQlposx+stjCwqXQ+BCs5lnw/f2YUfgII+G5Ye0JfHiJOfCJGmqyS03WertBslcj9zQg50A==} @@ -2319,20 +2785,20 @@ packages: resolution: {integrity: sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==} engines: {node: '>= 12'} - '@openzeppelin/contracts-upgradeable@5.2.0': - resolution: {integrity: sha512-mZIu9oa4tQTlGiOJHk6D3LdJlqFqF6oNOSn6S6UVJtzfs9UsY9/dhMEbAVTwElxUtJnjpf6yA062+oBp+eOyPg==} + '@openzeppelin/contracts-upgradeable@5.3.0': + resolution: {integrity: sha512-yVzSSyTMWO6rapGI5tuqkcLpcGGXA0UA1vScyV5EhE5yw8By3Ewex9rDUw8lfVw0iTkvR/egjfcW5vpk03lqZg==} peerDependencies: - '@openzeppelin/contracts': 5.2.0 + '@openzeppelin/contracts': 5.3.0 - '@openzeppelin/contracts@5.2.0': - resolution: {integrity: sha512-bxjNie5z89W1Ea0NZLZluFh8PrFNn9DH8DQlujEok2yjsOlraUPKID5p1Wk3qdNbf6XkQ1Os2RvfiHrrXLHWKA==} + '@openzeppelin/contracts@5.3.0': + resolution: {integrity: sha512-zj/KGoW7zxWUE8qOI++rUM18v+VeLTTzKs/DJFkSzHpQFPD/jKKF0TrMxBfGLl3kpdELCNccvB3zmofSzm4nlA==} '@paulmillr/qr@0.2.1': resolution: {integrity: sha512-IHnV6A+zxU7XwmKFinmYjUcwlyK9+xkG3/s9KcQhI9BjQKycrJ1JRO+FbNYPwZiPKW3je/DR0k7w8/gLa5eaxQ==} deprecated: 'The package is now available as "qr": npm install qr' - '@phosphor-icons/react@2.1.7': - resolution: {integrity: sha512-g2e2eVAn1XG2a+LI09QU3IORLhnFNAFkNbo2iwbX6NOKSLOwvEMmTa7CgOzEbgNWR47z8i8kwjdvYZ5fkGx1mQ==} + '@phosphor-icons/react@2.1.10': + resolution: {integrity: sha512-vt8Tvq8GLjheAZZYa+YG/pW7HDbov8El/MANW8pOAz4eGxrwhnbfrQZq0Cp4q8zBEu8NIhHdnr+r8thnfRSNYA==} engines: {node: '>=10'} peerDependencies: react: '>= 16.8' @@ -2371,6 +2837,38 @@ packages: resolution: {integrity: sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==} engines: {node: '>=14.0.0'} + '@reown/appkit-common@1.7.8': + resolution: {integrity: sha512-ridIhc/x6JOp7KbDdwGKY4zwf8/iK8EYBl+HtWrruutSLwZyVi5P8WaZa+8iajL6LcDcDF7LoyLwMTym7SRuwQ==} + + '@reown/appkit-controllers@1.7.8': + resolution: {integrity: sha512-IdXlJlivrlj6m63VsGLsjtPHHsTWvKGVzWIP1fXZHVqmK+rZCBDjCi9j267Rb9/nYRGHWBtlFQhO8dK35WfeDA==} + + '@reown/appkit-pay@1.7.8': + resolution: {integrity: sha512-OSGQ+QJkXx0FEEjlpQqIhT8zGJKOoHzVnyy/0QFrl3WrQTjCzg0L6+i91Ad5Iy1zb6V5JjqtfIFpRVRWN4M3pw==} + + '@reown/appkit-polyfills@1.7.8': + resolution: {integrity: sha512-W/kq786dcHHAuJ3IV2prRLEgD/2iOey4ueMHf1sIFjhhCGMynMkhsOhQMUH0tzodPqUgAC494z4bpIDYjwWXaA==} + + '@reown/appkit-scaffold-ui@1.7.8': + resolution: {integrity: sha512-RCeHhAwOrIgcvHwYlNWMcIDibdI91waaoEYBGw71inE0kDB8uZbE7tE6DAXJmDkvl0qPh+DqlC4QbJLF1FVYdQ==} + + '@reown/appkit-ui@1.7.8': + resolution: {integrity: sha512-1hjCKjf6FLMFzrulhl0Y9Vb9Fu4royE+SXCPSWh4VhZhWqlzUFc7kutnZKx8XZFVQH4pbBvY62SpRC93gqoHow==} + + '@reown/appkit-utils@1.7.8': + resolution: {integrity: sha512-8X7UvmE8GiaoitCwNoB86pttHgQtzy4ryHZM9kQpvjQ0ULpiER44t1qpVLXNM4X35O0v18W0Dk60DnYRMH2WRw==} + peerDependencies: + valtio: 1.13.2 + + '@reown/appkit-wallet@1.7.8': + resolution: {integrity: sha512-kspz32EwHIOT/eg/ZQbFPxgXq0B/olDOj3YMu7gvLEFz4xyOFd/wgzxxAXkp5LbG4Cp++s/elh79rVNmVFdB9A==} + + '@reown/appkit@1.7.8': + resolution: {integrity: sha512-51kTleozhA618T1UvMghkhKfaPcc9JlKwLJ5uV+riHyvSoWPKPRIa5A6M1Wano5puNyW0s3fwywhyqTHSilkaA==} + + '@rolldown/pluginutils@1.0.0-beta.19': + resolution: {integrity: sha512-3FL3mnMbPu0muGOCaKAhhFEYmqv9eTfPSJRJmANrCwtgK8VuxpsZDGK+m0LYAGoyO8+0j5uRe4PeyPDK1yA/hA==} + '@rollup/plugin-inject@5.0.5': resolution: {integrity: sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==} engines: {node: '>=14.0.0'} @@ -2389,8 +2887,8 @@ packages: rollup: optional: true - '@rollup/pluginutils@5.1.4': - resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} + '@rollup/pluginutils@5.2.0': + resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -2398,169 +2896,196 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.40.0': - resolution: {integrity: sha512-+Fbls/diZ0RDerhE8kyC6hjADCXA1K4yVNlH0EYfd2XjyH0UGgzaQ8MlT0pCXAThfxv3QUAczHaL+qSv1E4/Cg==} + '@rollup/rollup-android-arm-eabi@4.44.1': + resolution: {integrity: sha512-JAcBr1+fgqx20m7Fwe1DxPUl/hPkee6jA6Pl7n1v2EFiktAHenTaXl5aIFjUIEsfn9w3HE4gK1lEgNGMzBDs1w==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.40.0': - resolution: {integrity: sha512-PPA6aEEsTPRz+/4xxAmaoWDqh67N7wFbgFUJGMnanCFs0TV99M0M8QhhaSCks+n6EbQoFvLQgYOGXxlMGQe/6w==} + '@rollup/rollup-android-arm64@4.44.1': + resolution: {integrity: sha512-RurZetXqTu4p+G0ChbnkwBuAtwAbIwJkycw1n6GvlGlBuS4u5qlr5opix8cBAYFJgaY05TWtM+LaoFggUmbZEQ==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.40.0': - resolution: {integrity: sha512-GwYOcOakYHdfnjjKwqpTGgn5a6cUX7+Ra2HeNj/GdXvO2VJOOXCiYYlRFU4CubFM67EhbmzLOmACKEfvp3J1kQ==} + '@rollup/rollup-darwin-arm64@4.44.1': + resolution: {integrity: sha512-fM/xPesi7g2M7chk37LOnmnSTHLG/v2ggWqKj3CCA1rMA4mm5KVBT1fNoswbo1JhPuNNZrVwpTvlCVggv8A2zg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.40.0': - resolution: {integrity: sha512-CoLEGJ+2eheqD9KBSxmma6ld01czS52Iw0e2qMZNpPDlf7Z9mj8xmMemxEucinev4LgHalDPczMyxzbq+Q+EtA==} + '@rollup/rollup-darwin-x64@4.44.1': + resolution: {integrity: sha512-gDnWk57urJrkrHQ2WVx9TSVTH7lSlU7E3AFqiko+bgjlh78aJ88/3nycMax52VIVjIm3ObXnDL2H00e/xzoipw==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.40.0': - resolution: {integrity: sha512-r7yGiS4HN/kibvESzmrOB/PxKMhPTlz+FcGvoUIKYoTyGd5toHp48g1uZy1o1xQvybwwpqpe010JrcGG2s5nkg==} + '@rollup/rollup-freebsd-arm64@4.44.1': + resolution: {integrity: sha512-wnFQmJ/zPThM5zEGcnDcCJeYJgtSLjh1d//WuHzhf6zT3Md1BvvhJnWoy+HECKu2bMxaIcfWiu3bJgx6z4g2XA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.40.0': - resolution: {integrity: sha512-mVDxzlf0oLzV3oZOr0SMJ0lSDd3xC4CmnWJ8Val8isp9jRGl5Dq//LLDSPFrasS7pSm6m5xAcKaw3sHXhBjoRw==} + '@rollup/rollup-freebsd-x64@4.44.1': + resolution: {integrity: sha512-uBmIxoJ4493YATvU2c0upGz87f99e3wop7TJgOA/bXMFd2SvKCI7xkxY/5k50bv7J6dw1SXT4MQBQSLn8Bb/Uw==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.40.0': - resolution: {integrity: sha512-y/qUMOpJxBMy8xCXD++jeu8t7kzjlOCkoxxajL58G62PJGBZVl/Gwpm7JK9+YvlB701rcQTzjUZ1JgUoPTnoQA==} + '@rollup/rollup-linux-arm-gnueabihf@4.44.1': + resolution: {integrity: sha512-n0edDmSHlXFhrlmTK7XBuwKlG5MbS7yleS1cQ9nn4kIeW+dJH+ExqNgQ0RrFRew8Y+0V/x6C5IjsHrJmiHtkxQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.40.0': - resolution: {integrity: sha512-GoCsPibtVdJFPv/BOIvBKO/XmwZLwaNWdyD8TKlXuqp0veo2sHE+A/vpMQ5iSArRUz/uaoj4h5S6Pn0+PdhRjg==} + '@rollup/rollup-linux-arm-musleabihf@4.44.1': + resolution: {integrity: sha512-8WVUPy3FtAsKSpyk21kV52HCxB+me6YkbkFHATzC2Yd3yuqHwy2lbFL4alJOLXKljoRw08Zk8/xEj89cLQ/4Nw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.40.0': - resolution: {integrity: sha512-L5ZLphTjjAD9leJzSLI7rr8fNqJMlGDKlazW2tX4IUF9P7R5TMQPElpH82Q7eNIDQnQlAyiNVfRPfP2vM5Avvg==} + '@rollup/rollup-linux-arm64-gnu@4.44.1': + resolution: {integrity: sha512-yuktAOaeOgorWDeFJggjuCkMGeITfqvPgkIXhDqsfKX8J3jGyxdDZgBV/2kj/2DyPaLiX6bPdjJDTu9RB8lUPQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.40.0': - resolution: {integrity: sha512-ATZvCRGCDtv1Y4gpDIXsS+wfFeFuLwVxyUBSLawjgXK2tRE6fnsQEkE4csQQYWlBlsFztRzCnBvWVfcae/1qxQ==} + '@rollup/rollup-linux-arm64-musl@4.44.1': + resolution: {integrity: sha512-W+GBM4ifET1Plw8pdVaecwUgxmiH23CfAUj32u8knq0JPFyK4weRy6H7ooxYFD19YxBulL0Ktsflg5XS7+7u9g==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.40.0': - resolution: {integrity: sha512-wG9e2XtIhd++QugU5MD9i7OnpaVb08ji3P1y/hNbxrQ3sYEelKJOq1UJ5dXczeo6Hj2rfDEL5GdtkMSVLa/AOg==} + '@rollup/rollup-linux-loongarch64-gnu@4.44.1': + resolution: {integrity: sha512-1zqnUEMWp9WrGVuVak6jWTl4fEtrVKfZY7CvcBmUUpxAJ7WcSowPSAWIKa/0o5mBL/Ij50SIf9tuirGx63Ovew==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.40.0': - resolution: {integrity: sha512-vgXfWmj0f3jAUvC7TZSU/m/cOE558ILWDzS7jBhiCAFpY2WEBn5jqgbqvmzlMjtp8KlLcBlXVD2mkTSEQE6Ixw==} + '@rollup/rollup-linux-powerpc64le-gnu@4.44.1': + resolution: {integrity: sha512-Rl3JKaRu0LHIx7ExBAAnf0JcOQetQffaw34T8vLlg9b1IhzcBgaIdnvEbbsZq9uZp3uAH+JkHd20Nwn0h9zPjA==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.40.0': - resolution: {integrity: sha512-uJkYTugqtPZBS3Z136arevt/FsKTF/J9dEMTX/cwR7lsAW4bShzI2R0pJVw+hcBTWF4dxVckYh72Hk3/hWNKvA==} + '@rollup/rollup-linux-riscv64-gnu@4.44.1': + resolution: {integrity: sha512-j5akelU3snyL6K3N/iX7otLBIl347fGwmd95U5gS/7z6T4ftK288jKq3A5lcFKcx7wwzb5rgNvAg3ZbV4BqUSw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.40.0': - resolution: {integrity: sha512-rKmSj6EXQRnhSkE22+WvrqOqRtk733x3p5sWpZilhmjnkHkpeCgWsFFo0dGnUGeA+OZjRl3+VYq+HyCOEuwcxQ==} + '@rollup/rollup-linux-riscv64-musl@4.44.1': + resolution: {integrity: sha512-ppn5llVGgrZw7yxbIm8TTvtj1EoPgYUAbfw0uDjIOzzoqlZlZrLJ/KuiE7uf5EpTpCTrNt1EdtzF0naMm0wGYg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.40.0': - resolution: {integrity: sha512-SpnYlAfKPOoVsQqmTFJ0usx0z84bzGOS9anAC0AZ3rdSo3snecihbhFTlJZ8XMwzqAcodjFU4+/SM311dqE5Sw==} + '@rollup/rollup-linux-s390x-gnu@4.44.1': + resolution: {integrity: sha512-Hu6hEdix0oxtUma99jSP7xbvjkUM/ycke/AQQ4EC5g7jNRLLIwjcNwaUy95ZKBJJwg1ZowsclNnjYqzN4zwkAw==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.40.0': - resolution: {integrity: sha512-RcDGMtqF9EFN8i2RYN2W+64CdHruJ5rPqrlYw+cgM3uOVPSsnAQps7cpjXe9be/yDp8UC7VLoCoKC8J3Kn2FkQ==} + '@rollup/rollup-linux-x64-gnu@4.44.1': + resolution: {integrity: sha512-EtnsrmZGomz9WxK1bR5079zee3+7a+AdFlghyd6VbAjgRJDbTANJ9dcPIPAi76uG05micpEL+gPGmAKYTschQw==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.40.0': - resolution: {integrity: sha512-HZvjpiUmSNx5zFgwtQAV1GaGazT2RWvqeDi0hV+AtC8unqqDSsaFjPxfsO6qPtKRRg25SisACWnJ37Yio8ttaw==} + '@rollup/rollup-linux-x64-musl@4.44.1': + resolution: {integrity: sha512-iAS4p+J1az6Usn0f8xhgL4PaU878KEtutP4hqw52I4IO6AGoyOkHCxcc4bqufv1tQLdDWFx8lR9YlwxKuv3/3g==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.40.0': - resolution: {integrity: sha512-UtZQQI5k/b8d7d3i9AZmA/t+Q4tk3hOC0tMOMSq2GlMYOfxbesxG4mJSeDp0EHs30N9bsfwUvs3zF4v/RzOeTQ==} + '@rollup/rollup-win32-arm64-msvc@4.44.1': + resolution: {integrity: sha512-NtSJVKcXwcqozOl+FwI41OH3OApDyLk3kqTJgx8+gp6On9ZEt5mYhIsKNPGuaZr3p9T6NWPKGU/03Vw4CNU9qg==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.40.0': - resolution: {integrity: sha512-+m03kvI2f5syIqHXCZLPVYplP8pQch9JHyXKZ3AGMKlg8dCyr2PKHjwRLiW53LTrN/Nc3EqHOKxUxzoSPdKddA==} + '@rollup/rollup-win32-ia32-msvc@4.44.1': + resolution: {integrity: sha512-JYA3qvCOLXSsnTR3oiyGws1Dm0YTuxAAeaYGVlGpUsHqloPcFjPg+X0Fj2qODGLNwQOAcCiQmHub/V007kiH5A==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.40.0': - resolution: {integrity: sha512-lpPE1cLfP5oPzVjKMx10pgBmKELQnFJXHgvtHCtuJWOv8MxqdEIMNtgHgBFf7Ea2/7EuVwa9fodWUfXAlXZLZQ==} + '@rollup/rollup-win32-x64-msvc@4.44.1': + resolution: {integrity: sha512-J8o22LuF0kTe7m+8PvW9wk3/bRq5+mRo5Dqo6+vXb7otCm3TPhYOJqOaQtGU9YMWQSL3krMnoOxMr0+9E6F3Ug==} cpu: [x64] os: [win32] - '@safe-global/safe-apps-provider@0.18.5': - resolution: {integrity: sha512-9v9wjBi3TwLsEJ3C2ujYoexp3pFJ0omDLH/GX91e2QB+uwCKTBYyhxFSrTQ9qzoyQd+bfsk4gjOGW87QcJhf7g==} + '@rushstack/node-core-library@5.13.1': + resolution: {integrity: sha512-5yXhzPFGEkVc9Fu92wsNJ9jlvdwz4RNb2bMso+/+TH0nMm1jDDDsOIf4l8GAkPxGuwPw5DH24RliWVfSPhlW/Q==} + peerDependencies: + '@types/node': 22.7.5 + peerDependenciesMeta: + '@types/node': + optional: true + + '@rushstack/rig-package@0.5.3': + resolution: {integrity: sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow==} + + '@rushstack/terminal@0.15.3': + resolution: {integrity: sha512-DGJ0B2Vm69468kZCJkPj3AH5nN+nR9SPmC0rFHtzsS4lBQ7/dgOwtwVxYP7W9JPDMuRBkJ4KHmWKr036eJsj9g==} + peerDependencies: + '@types/node': 22.7.5 + peerDependenciesMeta: + '@types/node': + optional: true + + '@rushstack/ts-command-line@5.0.1': + resolution: {integrity: sha512-bsbUucn41UXrQK7wgM8CNM/jagBytEyJqXw/umtI8d68vFm1Jwxh1OtLrlW7uGZgjCWiiPH6ooUNa1aVsuVr3Q==} + + '@safe-global/safe-apps-provider@0.18.6': + resolution: {integrity: sha512-4LhMmjPWlIO8TTDC2AwLk44XKXaK6hfBTWyljDm0HQ6TWlOEijVWNrt2s3OCVMSxlXAcEzYfqyu1daHZooTC2Q==} '@safe-global/safe-apps-sdk@9.1.0': resolution: {integrity: sha512-N5p/ulfnnA2Pi2M3YeWjULeWbjo7ei22JwU/IXnhoHzKq3pYCN6ynL9mJBOlvDVv892EgLPCWCOwQk/uBT2v0Q==} - '@safe-global/safe-gateway-typescript-sdk@3.22.9': - resolution: {integrity: sha512-7ojVK/crhOaGowEO8uYWaopZzcr5rR76emgllGIfjCLR70aY4PbASpi9Pbs+7jIRzPDBBkM0RBo+zYx5UduX8Q==} + '@safe-global/safe-gateway-typescript-sdk@3.23.1': + resolution: {integrity: sha512-6ORQfwtEJYpalCeVO21L4XXGSdbEMfyp2hEv6cP82afKXSwvse6d3sdelgaPWUxHIsFRkWvHDdzh8IyyKHZKxw==} engines: {node: '>=16'} '@scure/base@1.1.9': resolution: {integrity: sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==} - '@scure/base@1.2.4': - resolution: {integrity: sha512-5Yy9czTO47mqz+/J8GM6GIId4umdCk1wc1q8rKERQulIoc8VP9pzDcghv10Tl2E7R96ZUx/PhND3ESYUQX8NuQ==} + '@scure/base@1.2.6': + resolution: {integrity: sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==} '@scure/bip32@1.1.5': resolution: {integrity: sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==} - '@scure/bip32@1.3.2': - resolution: {integrity: sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==} - '@scure/bip32@1.4.0': resolution: {integrity: sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==} - '@scure/bip32@1.6.2': - resolution: {integrity: sha512-t96EPDMbtGgtb7onKKqxRLfE5g05k7uHnHRM2xdE6BP/ZmxaLtPek4J4KfVn/90IQNrU1IOAqMgiDtUdtbe3nw==} + '@scure/bip32@1.7.0': + resolution: {integrity: sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==} '@scure/bip39@1.1.1': resolution: {integrity: sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==} - '@scure/bip39@1.2.1': - resolution: {integrity: sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==} - '@scure/bip39@1.3.0': resolution: {integrity: sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==} - '@scure/bip39@1.5.4': - resolution: {integrity: sha512-TFM4ni0vKvCfBpohoh+/lY05i9gRbSwXWngAsF4CABQxoaOHijxuaZ2R6cStDQ5CHtHO9aGJTr4ksVJASRRyMA==} + '@scure/bip39@1.6.0': + resolution: {integrity: sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==} - '@semaphore-protocol/contracts@4.9.2': - resolution: {integrity: sha512-/DnZ9SOzBsfv06Vz74djVHEPgZwIkdNt7e5Ay2612Rw22EwToedQX5ahJxfG9vbgHleOZ1iAV4y+XKmDhPpDBg==} + '@semaphore-protocol/contracts-noir@https://codeload.github.com/hmzakhalid/semaphore-noir/tar.gz/9cd8034957a6f66b787639e224e517d9b2a4c972': + resolution: {tarball: https://codeload.github.com/hmzakhalid/semaphore-noir/tar.gz/9cd8034957a6f66b787639e224e517d9b2a4c972} + version: 1.0.0 - '@semaphore-protocol/core@4.9.2': - resolution: {integrity: sha512-Dc0ZVCcWuCiCA2Y6GXmsRVjpA+sA06dUiGlx+e6CY/8B6xQtz8TQm10DNWayqe0YkL9Bld/JWyN3rdIoZf3uEA==} + '@semaphore-protocol/contracts@4.11.1': + resolution: {integrity: sha512-WYh598A6UE4+akDxxw+jU8DMKWqDgJBdV/iEUdzdXE+YGVJav4uOQJY8KetNKAakJf3z3/8rgkPab+dk3fJyuQ==} - '@semaphore-protocol/data@4.9.2': - resolution: {integrity: sha512-wKkxRrKY6RrTMyaglRH/62cq+zP+6Xn15ViR6O4wrKVzzEv4X3zLbjBNKBW6XgU9Lnh5UbVQFOdAQplvrrwGFw==} + '@semaphore-protocol/core@https://codeload.github.com/hmzakhalid/semaphore-noir/tar.gz/caad5529009ebdeb1613c552c4e188a54b681a43': + resolution: {tarball: https://codeload.github.com/hmzakhalid/semaphore-noir/tar.gz/caad5529009ebdeb1613c552c4e188a54b681a43} + version: 4.9.1 - '@semaphore-protocol/group@4.9.2': - resolution: {integrity: sha512-NkCYtl3BcaNaGy1Oc5LvDScimDPu47bebqYH9cm+21nLKOsCFNmFcG70if2TY2e1Q/eyvB8tnK01a39nHs4pLw==} + '@semaphore-protocol/data@4.11.1': + resolution: {integrity: sha512-vOwZ3ywD6wofUSR1s0tpS8wg1pL0H3rs1S8zHOEJ9zLnnBMFPGgjy6eUI68uoRC9kKDB6/hypDj0ncHyFq6nBA==} - '@semaphore-protocol/identity@4.9.2': - resolution: {integrity: sha512-kHxcAfOyJ5yfo5Y82JCsIc+UD1+nsYg0NA7tRLg/FqYYnkLd/YZ1BkvRGRccZOKUW7S9VQERN7CVqBzXprxjTg==} + '@semaphore-protocol/group@https://codeload.github.com/hmzakhalid/semaphore-noir/tar.gz/8c41614a00c121ec96e07d73145dc542739eefa8': + resolution: {tarball: https://codeload.github.com/hmzakhalid/semaphore-noir/tar.gz/8c41614a00c121ec96e07d73145dc542739eefa8} + version: 4.9.1 - '@semaphore-protocol/proof@4.9.2': - resolution: {integrity: sha512-bf8xg12R3mWsywIarEFOFTP/atmrEGPJIwneRliC3dFKT7kzdrZvta2czJGejNURp3PIVIKNRONPkp+JyThNAw==} + '@semaphore-protocol/identity@https://codeload.github.com/hmzakhalid/semaphore-noir/tar.gz/4137e5d6cf645af3fc8eb720b6c8ee33a125d0ef': + resolution: {tarball: https://codeload.github.com/hmzakhalid/semaphore-noir/tar.gz/4137e5d6cf645af3fc8eb720b6c8ee33a125d0ef} + version: 4.9.1 + + '@semaphore-protocol/proof@https://codeload.github.com/hmzakhalid/semaphore-noir/tar.gz/d8989c48201f05245965f992e4fc4f0bddb7725e': + resolution: {tarball: https://codeload.github.com/hmzakhalid/semaphore-noir/tar.gz/d8989c48201f05245965f992e4fc4f0bddb7725e} + version: 4.9.1 peerDependencies: - '@semaphore-protocol/group': 4.9.2 - '@semaphore-protocol/identity': 4.9.2 + '@semaphore-protocol/group': 4.9.1 + '@semaphore-protocol/identity': 4.9.1 + + '@semaphore-protocol/utils@4.11.1': + resolution: {integrity: sha512-lTzZo9RV1wUyFXVnDcnSV3cDYfoMfmG17Sl9M1I7L82JX19LBPNJ1olBQbloC6UvyzE6DaqQ783MJnTkWEoDjg==} - '@semaphore-protocol/utils@4.9.2': - resolution: {integrity: sha512-cSDwsk5ADLUaQv++3dX+GhCPm3dJB4/gTUK+Rhv6mPc9JEPk2xrmmDDB7DM+/wOAIK7wfo1IksMLwEK+/Du95Q==} + '@semaphore-protocol/utils@4.9.1': + resolution: {integrity: sha512-fhiVW/CL+zU/DvKAibBh3thEg2GKTMvNEl2V+fcJYbiyjxjZPfwvVHS/tP2wxBibU8bvtfcuqAk3WFdJXYFG2A==} '@sentry/core@5.30.0': resolution: {integrity: sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==} @@ -2599,6 +3124,9 @@ packages: '@sideway/pinpoint@2.0.0': resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + '@sindresorhus/is@5.6.0': resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} engines: {node: '>=14.16'} @@ -2609,8 +3137,8 @@ packages: '@solidity-parser/parser@0.14.5': resolution: {integrity: sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==} - '@solidity-parser/parser@0.19.0': - resolution: {integrity: sha512-RV16k/qIxW/wWc+mLzV3ARyKUaMUTBy9tOLMzFhtNSKYeTAanQ3a5MudJKf/8arIFnA2L27SNjarQKmFg0w/jA==} + '@solidity-parser/parser@0.20.1': + resolution: {integrity: sha512-58I2sRpzaQUN+jJmWbHfbWf9AKfzqCI8JAdFB0vbyY+u8tBRcuTt9LxzasvR0LGQpcRv97eyV7l61FQ3Ib7zVw==} '@svgr/babel-plugin-add-jsx-attribute@8.0.0': resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} @@ -2690,71 +3218,71 @@ packages: resolution: {integrity: sha512-0XR1poYvPQoPpmfDYLEqUGu5ePAQ4pdgN3VFsZBNAeze7qubVpsIY1o1R6PZpKep/DKu33GSm2NhwpCLkMs2Cw==} engines: {node: '>=14'} - '@swc/core-darwin-arm64@1.11.16': - resolution: {integrity: sha512-l6uWMU+MUdfLHCl3dJgtVEdsUHPskoA4BSu0L1hh9SGBwPZ8xeOz8iLIqZM27lTuXxL4KsYH6GQR/OdQ/vhLtg==} + '@swc/core-darwin-arm64@1.12.7': + resolution: {integrity: sha512-w6BBT0hBRS56yS+LbReVym0h+iB7/PpCddqrn1ha94ra4rZ4R/A91A/rkv+LnQlPqU/+fhqdlXtCJU9mrhCBtA==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.11.16': - resolution: {integrity: sha512-TH0IW8Ao1WZ4ARFHIh29dAQHYBEl4YnP74n++rjppmlCjY+8v3s5nXMA7IqxO3b5LVHyggWtU4+46DXTyMJM7g==} + '@swc/core-darwin-x64@1.12.7': + resolution: {integrity: sha512-jN6LhFfGOpm4DY2mXPgwH4aa9GLOwublwMVFFZ/bGnHYYCRitLZs9+JWBbyWs7MyGcA246Ew+EREx36KVEAxjA==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.11.16': - resolution: {integrity: sha512-2IxD9t09oNZrbv37p4cJ9cTHMUAK6qNiShi9s2FJ9LcqSnZSN4iS4hvaaX6KZuG54d58vWnMU7yycjkdOTQcMg==} + '@swc/core-linux-arm-gnueabihf@1.12.7': + resolution: {integrity: sha512-rHn8XXi7G2StEtZRAeJ6c7nhJPDnqsHXmeNrAaYwk8Tvpa6ZYG2nT9E1OQNXj1/dfbSFTjdiA8M8ZvGYBlpBoA==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.11.16': - resolution: {integrity: sha512-AYkN23DOiPh1bf3XBf/xzZQDKSsgZTxlbyTyUIhprLJpAAAT0ZCGAUcS5mHqydk0nWQ13ABUymodvHoroutNzw==} + '@swc/core-linux-arm64-gnu@1.12.7': + resolution: {integrity: sha512-N15hKizSSh+hkZ2x3TDVrxq0TDcbvDbkQJi2ZrLb9fK+NdFUV/x+XF16ZDPlbxtrGXl1CT7VD439SNaMN9F7qw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.11.16': - resolution: {integrity: sha512-n/nWXDRCIhM51dDGELfBcTMNnCiFatE7LDvsbYxb7DJt1HGjaCNvHHCKURb/apJTh/YNtWfgFap9dbsTgw8yPA==} + '@swc/core-linux-arm64-musl@1.12.7': + resolution: {integrity: sha512-jxyINtBezpxd3eIUDiDXv7UQ87YWlPsM9KumOwJk09FkFSO4oYxV2RT+Wu+Nt5tVWue4N0MdXT/p7SQsDEk4YA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.11.16': - resolution: {integrity: sha512-xr182YQrF47n7Awxj+/ruI21bYw+xO/B26KFVnb+i3ezF9NOhqoqTX+33RL1ZLA/uFTq8ksPZO/y+ZVS/odtQA==} + '@swc/core-linux-x64-gnu@1.12.7': + resolution: {integrity: sha512-PR4tPVwU1BQBfFDk2XfzXxsEIjF3x/bOV1BzZpYvrlkU0TKUDbR4t2wzvsYwD/coW7/yoQmlL70/qnuPtTp1Zw==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.11.16': - resolution: {integrity: sha512-k2JBfiwWfXCIKrBRjFO9/vEdLSYq0QLJ+iNSLdfrejZ/aENNkbEg8O7O2GKUSb30RBacn6k8HMfJrcPLFiEyCQ==} + '@swc/core-linux-x64-musl@1.12.7': + resolution: {integrity: sha512-zy7JWfQtQItgMfUjSbbcS3DZqQUn2d9VuV0LSGpJxtTXwgzhRpF1S2Sj7cU9hGpbM27Y8RJ4DeFb3qbAufjbrw==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.11.16': - resolution: {integrity: sha512-taOb5U+abyEhQgex+hr6cI48BoqSvSdfmdirWcxprIEUBHCxa1dSriVwnJRAJOFI9T+5BEz88by6rgbB9MjbHA==} + '@swc/core-win32-arm64-msvc@1.12.7': + resolution: {integrity: sha512-52PeF0tyX04ZFD8nibNhy/GjMFOZWTEWPmIB3wpD1vIJ1po+smtBnEdRRll5WIXITKoiND8AeHlBNBPqcsdcwA==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.11.16': - resolution: {integrity: sha512-b7yYggM9LBDiMY+XUt5kYWvs5sn0U3PXSOGvF3CbLufD/N/YQiDcYON2N3lrWHYL8aYnwbuZl45ojmQHSQPcdA==} + '@swc/core-win32-ia32-msvc@1.12.7': + resolution: {integrity: sha512-WzQwkNMuhB1qQShT9uUgz/mX2j7NIEPExEtzvGsBT7TlZ9j1kGZ8NJcZH/fwOFcSJL4W7DnkL7nAhx6DBlSPaA==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.11.16': - resolution: {integrity: sha512-/ibq/YDc3B5AROkpOKPGxVkSyCKOg+ml8k11RxrW7FAPy6a9y5y9KPcWIqV74Ahq4RuaMNslTQqHWAGSm0xJsQ==} + '@swc/core-win32-x64-msvc@1.12.7': + resolution: {integrity: sha512-R52ivBi2lgjl+Bd3XCPum0YfgbZq/W1AUExITysddP9ErsNSwnreYyNB3exEijiazWGcqHEas2ChiuMOP7NYrA==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.11.16': - resolution: {integrity: sha512-wgjrJqVUss8Lxqilg0vkiE0tkEKU3mZkoybQM1Ehy+PKWwwB6lFAwKi20cAEFlSSWo8jFR8hRo19ZELAoLDowg==} + '@swc/core@1.12.7': + resolution: {integrity: sha512-bcpllEihyUSnqp0UtXTvXc19CT4wp3tGWLENhWnjr4B5iEOkzqMu+xHGz1FI5IBatjfqOQb29tgIfv6IL05QaA==} engines: {node: '>=10'} peerDependencies: - '@swc/helpers': '*' + '@swc/helpers': '>=0.5.17' peerDependenciesMeta: '@swc/helpers': optional: true @@ -2762,14 +3290,11 @@ packages: '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - '@swc/helpers@0.5.17': - resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} - '@swc/helpers@0.5.5': resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==} - '@swc/types@0.1.21': - resolution: {integrity: sha512-2YEtj5HJVbKivud9N4bpPBAyZhj4S2Ipe5LkUG94alTpr7in/GU/EARgPAd3BwU+YOmFVJC2+kjqhGRi3r0ZpQ==} + '@swc/types@0.1.23': + resolution: {integrity: sha512-u1iIVZV9Q0jxY+yM2vw/hZGDNudsN85bBpTqzAQ9rzkxW9D+e3aEM4Han+ow518gSewkXgjmEK0BD79ZcNVgPw==} '@synthetixio/ethereum-wallet-mock@0.0.12': resolution: {integrity: sha512-n1b59v61cPBRA1ryJIqBZ2VybArkRN+7/Hjl24A51J0nKFUED646/EzHRxl3qvLN7Xv3lcmjcmXX0KOcRozFXg==} @@ -2812,22 +3337,22 @@ packages: peerDependencies: tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1' - '@tanstack/query-core@5.74.3': - resolution: {integrity: sha512-Mqk+5o3qTuAiZML248XpNH8r2cOzl15+LTbUsZQEwvSvn1GU4VQhvqzAbil36p+MBxpr/58oBSnRzhrBevDhfg==} + '@tanstack/query-core@5.81.2': + resolution: {integrity: sha512-QLYkPdrudoMATDFa3MiLEwRhNnAlzHWDf0LKaXUqJd0/+QxN8uTPi7bahRlxoAyH0UbLMBdeDbYzWALj7THOtw==} - '@tanstack/react-query@5.74.3': - resolution: {integrity: sha512-QrycUn0wxjVPzITvQvOxFRdhlAwIoOQSuav7qWD4SWCoKCdLbyRZ2vji2GuBq/glaxbF4wBx3fqcYRDOt8KDTA==} + '@tanstack/react-query@5.81.2': + resolution: {integrity: sha512-pe8kFlTrL2zFLlcAj2kZk9UaYYHDk9/1hg9EBaoO3cxDhOZf1FRGJeziSXKrVZyxIfs7b3aoOj/bw7Lie0mDUg==} peerDependencies: react: ^18 || ^19 - '@tanstack/react-virtual@3.13.8': - resolution: {integrity: sha512-meS2AanUg50f3FBSNoAdBSRAh8uS0ue01qm7zrw65KGJtiXB9QXfybqZwkh4uFpRv2iX/eu5tjcH5wqUpwYLPg==} + '@tanstack/react-virtual@3.13.11': + resolution: {integrity: sha512-u5EaOSJOq08T9NXFuDopMdxZBNDFuEMohIFFU45fBYDXXh9SjYdbpNq1OLFSOpQnDRPjqgmY96ipZTkzom9t9Q==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/virtual-core@3.13.8': - resolution: {integrity: sha512-BT6w89Hqy7YKaWewYzmecXQzcJh6HTBbKYJIIkMaNU49DZ06LoTV3z32DWWEdUsgW6n1xTmwTLs4GtWrZC261w==} + '@tanstack/virtual-core@3.13.11': + resolution: {integrity: sha512-ORL6UyuZJ0D9X33LDR4TcgcM+K2YiS2j4xbvH1vnhhObwR1Z4dKwPTL/c0kj2Yeb4Yp2lBv1wpyVaqlohk8zpg==} '@theguild/remark-mermaid@0.0.5': resolution: {integrity: sha512-e+ZIyJkEv9jabI4m7q29wZtZv+2iwPGsXJ2d46Zi7e+QcFudiyuqhLhHG/3gX3ZEB+hxTch+fpItyMS8jwbIcw==} @@ -2867,7 +3392,7 @@ packages: peerDependencies: ethers: 6.x typechain: ^8.3.2 - typescript: '>=4.7.0' + typescript: 5.8.3 '@typechain/hardhat@9.1.0': resolution: {integrity: sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA==} @@ -2880,6 +3405,9 @@ packages: '@types/acorn@4.0.6': resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} + '@types/argparse@1.0.38': + resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} + '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -2892,11 +3420,11 @@ packages: '@types/babel__traverse@7.20.7': resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} - '@types/bn.js@4.11.6': - resolution: {integrity: sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==} + '@types/bn.js@5.2.0': + resolution: {integrity: sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==} - '@types/bn.js@5.1.6': - resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==} + '@types/body-parser@1.19.6': + resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} '@types/chai-as-promised@7.1.8': resolution: {integrity: sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==} @@ -2907,6 +3435,9 @@ packages: '@types/concat-stream@1.6.1': resolution: {integrity: sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==} + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + '@types/d3-scale-chromatic@3.1.0': resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==} @@ -2922,8 +3453,14 @@ packages: '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} - '@types/estree@1.0.7': - resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/express-serve-static-core@5.0.6': + resolution: {integrity: sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==} + + '@types/express@5.0.3': + resolution: {integrity: sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==} '@types/form-data@0.0.33': resolution: {integrity: sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==} @@ -2943,6 +3480,9 @@ packages: '@types/http-cache-semantics@4.0.4': resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + '@types/http-errors@2.0.5': + resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} + '@types/js-yaml@4.0.9': resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} @@ -2964,6 +3504,9 @@ packages: '@types/mdx@2.0.13': resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} + '@types/mime@1.3.5': + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + '@types/minimatch@5.1.2': resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} @@ -2976,21 +3519,15 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@10.17.60': - resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} + '@types/mute-stream@0.0.4': + resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==} - '@types/node@20.10.4': - resolution: {integrity: sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==} - - '@types/node@20.17.30': - resolution: {integrity: sha512-7zf4YyHA+jvBNfVrk2Gtvs6x7E8V+YDW05bNfG2XkWDJfYRXrTiP/DsB2zSYTaHX0bGIujTBQdMVAhb+j7mwpg==} + '@types/node@22.15.33': + resolution: {integrity: sha512-wzoocdnnpSxZ+6CjW4ADCK1jVmd1S/J3ArNWfn8FDDQtRm8dkDg7TA+mvek2wNrfCgwuZxqEOiB9B1XCJ6+dbw==} '@types/node@22.7.5': resolution: {integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==} - '@types/node@8.10.66': - resolution: {integrity: sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==} - '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -3000,22 +3537,25 @@ packages: '@types/prettier@2.7.3': resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} - '@types/prop-types@15.7.14': - resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} + '@types/prop-types@15.7.15': + resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} - '@types/qs@6.9.18': - resolution: {integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==} + '@types/qs@6.14.0': + resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} - '@types/react-dom@18.3.6': - resolution: {integrity: sha512-nf22//wEbKXusP6E9pfOCDwFdHAX4u172eaJI4YkDRQEZiorm6KfYnSC2SWLDMVWUOWPERmJnN0ujeAfTBLvrw==} + '@types/range-parser@1.2.7': + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + + '@types/react-dom@18.3.7': + resolution: {integrity: sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==} peerDependencies: '@types/react': ^18.0.0 '@types/react-syntax-highlighter@15.5.13': resolution: {integrity: sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA==} - '@types/react@18.3.20': - resolution: {integrity: sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==} + '@types/react@18.3.23': + resolution: {integrity: sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==} '@types/resolve@0.0.8': resolution: {integrity: sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==} @@ -3023,6 +3563,15 @@ packages: '@types/secp256k1@4.0.6': resolution: {integrity: sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==} + '@types/send@0.17.5': + resolution: {integrity: sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==} + + '@types/serve-static@1.15.8': + resolution: {integrity: sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==} + + '@types/snarkjs@0.7.9': + resolution: {integrity: sha512-pb4Bq3GI2YQOQOG0dR/YuQs/mqcuL6k/vnz68LIPtpA2frrUL3twf69a3AUK9eUmNNeW0RIKkq6scDlC75Is+g==} + '@types/tinycolor2@1.4.6': resolution: {integrity: sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==} @@ -3035,6 +3584,15 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + '@types/wrap-ansi@3.0.0': + resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} + + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@17.0.33': + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} + '@typescript-eslint/eslint-plugin@7.18.0': resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} engines: {node: ^18.18.0 || >=20.0.0} @@ -3099,43 +3657,91 @@ packages: '@viem/anvil@0.0.7': resolution: {integrity: sha512-F+3ljCT1bEt8T4Fzm9gWpIgO3Dc7bzG1TtUtkStkJFMuummqZ8kvYc3UFMo5j3F51fSWZZvEkjs3+i7qf0AOqQ==} - '@vitejs/plugin-react@4.3.4': - resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==} + '@vitejs/plugin-react@4.6.0': + resolution: {integrity: sha512-5Kgff+m8e2PB+9j51eGHEpn5kUzRKH2Ry0qGoe8ItJg7pqnkPrYPkDQZGgGmTa0EGarHrkjLvOdU3b1fzI8otQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - vite: ^4.2.0 || ^5.0.0 || ^6.0.0 + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0 + + '@vitest/expect@1.6.1': + resolution: {integrity: sha512-jXL+9+ZNIJKruofqXuuTClf44eSpcHlgj3CiuNihUF3Ioujtmc0zIa3UJOW5RjDK1YLBJZnWBlPuqhYycLioog==} + + '@vitest/runner@1.6.1': + resolution: {integrity: sha512-3nSnYXkVkf3mXFfE7vVyPmi3Sazhb/2cfZGGs0JRzFsPFvAMBEcrweV1V1GsrstdXeKCTXlJbvnQwGWgEIHmOA==} + + '@vitest/snapshot@1.6.1': + resolution: {integrity: sha512-WvidQuWAzU2p95u8GAKlRMqMyN1yOJkGHnx3M1PL9Raf7AQ1kwLKg04ADlCa3+OXUZE7BceOhVZiuWAbzCKcUQ==} + + '@vitest/spy@1.6.1': + resolution: {integrity: sha512-MGcMmpGkZebsMZhbQKkAf9CX5zGvjkBTqf8Zx3ApYWXr3wG+QvEu2eXWfnIIWYSJExIp4V9FCKDEeygzkYrXMw==} + + '@vitest/utils@1.6.1': + resolution: {integrity: sha512-jOrrUvXM4Av9ZWiG1EajNto0u96kWAhJ1LmPmJhXXQx/32MecEKd10pOLYgS2BQx1TgkGhloPU1ArDW2vvaY6g==} + + '@volar/language-core@2.4.18': + resolution: {integrity: sha512-G3yYV85ekH4TV0EDS6DsS/dUJWrz675H9UgsxFz5pQbmas51a0Q2fF6Lb2q4RKgytuLZ4E0MBdT5PlVsJXNalw==} + + '@volar/source-map@2.4.18': + resolution: {integrity: sha512-zaj2V/zo/CHQ/xA75h60jBPgrz+Ou9s6aPl7dX0rT46/uill9aB/ZaDk92ROpJsa/9e2xftCeNAU9ZwVyB/egQ==} + + '@volar/typescript@2.4.18': + resolution: {integrity: sha512-xcbsMG8m/yhvO1VIKnTtc+llZxw3YtWkZiV7/F1qNpTORdPExkZRcBxJ5d19MXLpkeiQ+DG5JURHh1SV0bcWRA==} + + '@vue/compiler-core@3.5.17': + resolution: {integrity: sha512-Xe+AittLbAyV0pabcN7cP7/BenRBNcteM4aSDCtRvGw0d9OL+HG1u/XHLY/kt1q4fyMeZYXyIYrsHuPSiDPosA==} + + '@vue/compiler-dom@3.5.17': + resolution: {integrity: sha512-+2UgfLKoaNLhgfhV5Ihnk6wB4ljyW1/7wUIog2puUqajiC29Lp5R/IKDdkebh9jTbTogTbsgB+OY9cEWzG95JQ==} + + '@vue/compiler-vue2@2.7.16': + resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} + + '@vue/language-core@2.2.0': + resolution: {integrity: sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==} + peerDependencies: + typescript: 5.8.3 + peerDependenciesMeta: + typescript: + optional: true + + '@vue/shared@3.5.17': + resolution: {integrity: sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg==} - '@wagmi/connectors@5.7.12': - resolution: {integrity: sha512-pLFuZ1PsLkNyY11mx0+IOrMM7xACWCBRxaulfX17osqixkDFeOAyqFGBjh/XxkvRyrDJUdO4F+QHEeSoOiPpgg==} + '@wagmi/connectors@5.8.5': + resolution: {integrity: sha512-CHh4uYP6MziCMlSVXmuAv7wMoYWdxXliuzwCRAxHNNkgXE7z37ez5XzJu0Sm39NUau3Fl8WSjwKo4a4w9BOYNA==} peerDependencies: - '@wagmi/core': 2.16.7 - typescript: '>=5.0.4' - viem: 2.x + '@wagmi/core': 2.17.3 + typescript: 5.8.3 + viem: 2.30.6 peerDependenciesMeta: typescript: optional: true - '@wagmi/core@2.16.7': - resolution: {integrity: sha512-Kpgrw6OXV0VBhDs4toQVKQ0NK5yUO6uxEqnvRGjNjbO85d93Gbfsp5BlxSLeWq6iVMSBFSitdl5i9W7b1miq1g==} + '@wagmi/core@2.17.3': + resolution: {integrity: sha512-fgZR9fAiCFtGaosTspkTx5lidccq9Z5xRWOk1HG0VfB6euQGw2//Db7upiP4uQ7DPst2YS9yQN2A1m9+iJLYCw==} peerDependencies: '@tanstack/query-core': '>=5.0.0' - typescript: '>=5.0.4' - viem: 2.x + typescript: 5.8.3 + viem: 2.30.6 peerDependenciesMeta: '@tanstack/query-core': optional: true typescript: optional: true - '@walletconnect/core@2.19.2': - resolution: {integrity: sha512-iu0mgLj51AXcKpdNj8+4EdNNBd/mkNjLEhZn6UMc/r7BM9WbmpPMEydA39WeRLbdLO4kbpmq4wTbiskI1rg+HA==} + '@walletconnect/core@2.21.0': + resolution: {integrity: sha512-o6R7Ua4myxR8aRUAJ1z3gT9nM+jd2B2mfamu6arzy1Cc6vi10fIwFWb6vg3bC8xJ6o9H3n/cN5TOW3aA9Y1XVw==} + engines: {node: '>=18'} + + '@walletconnect/core@2.21.1': + resolution: {integrity: sha512-Tp4MHJYcdWD846PH//2r+Mu4wz1/ZU/fr9av1UWFiaYQ2t2TPLDiZxjLw54AAEpMqlEHemwCgiRiAmjR1NDdTQ==} engines: {node: '>=18'} '@walletconnect/environment@1.0.1': resolution: {integrity: sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg==} - '@walletconnect/ethereum-provider@2.19.2': - resolution: {integrity: sha512-NzPzNcjMLqow6ha2nssB1ciMD0cdHZesYcHSQKjCi9waIDMov9Fr2yEJccbiVFE3cxek7f9dCPsoZez2q8ihvg==} + '@walletconnect/ethereum-provider@2.21.1': + resolution: {integrity: sha512-SSlIG6QEVxClgl1s0LMk4xr2wg4eT3Zn/Hb81IocyqNSGfXpjtawWxKxiC5/9Z95f1INyBD6MctJbL/R1oBwIw==} '@walletconnect/events@1.0.1': resolution: {integrity: sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ==} @@ -3169,15 +3775,6 @@ packages: '@walletconnect/logger@2.1.2': resolution: {integrity: sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw==} - '@walletconnect/modal-core@2.7.0': - resolution: {integrity: sha512-oyMIfdlNdpyKF2kTJowTixZSo0PGlCJRdssUN/EZdA6H6v03hZnf09JnwpljZNfir2M65Dvjm/15nGrDQnlxSA==} - - '@walletconnect/modal-ui@2.7.0': - resolution: {integrity: sha512-gERYvU7D7K1ANCN/8vUgsE0d2hnRemfAFZ2novm9aZBg7TEd/4EgB+AqbJ+1dc7GhOL6dazckVq78TgccHb7mQ==} - - '@walletconnect/modal@2.7.0': - resolution: {integrity: sha512-RQVt58oJ+rwqnPcIvRFeMGKuXb9qkgSmwz4noF8JZGUym3gUAzVs+uW2NQ1Owm9XOJAV+sANrtJ+VoVq1ftElw==} - '@walletconnect/relay-api@1.0.11': resolution: {integrity: sha512-tLPErkze/HmC9aCmdZOhtVmYZq1wKfWTJtygQHoWtgg722Jd4homo54Cs4ak2RUFUZIGO2RsOpIcWipaua5D5Q==} @@ -3187,20 +3784,32 @@ packages: '@walletconnect/safe-json@1.0.2': resolution: {integrity: sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==} - '@walletconnect/sign-client@2.19.2': - resolution: {integrity: sha512-a/K5PRIFPCjfHq5xx3WYKHAAF8Ft2I1LtxloyibqiQOoUtNLfKgFB1r8sdMvXM7/PADNPe4iAw4uSE6PrARrfg==} + '@walletconnect/sign-client@2.21.0': + resolution: {integrity: sha512-z7h+PeLa5Au2R591d/8ZlziE0stJvdzP9jNFzFolf2RG/OiXulgFKum8PrIyXy+Rg2q95U9nRVUF9fWcn78yBA==} + + '@walletconnect/sign-client@2.21.1': + resolution: {integrity: sha512-QaXzmPsMnKGV6tc4UcdnQVNOz4zyXgarvdIQibJ4L3EmLat73r5ZVl4c0cCOcoaV7rgM9Wbphgu5E/7jNcd3Zg==} '@walletconnect/time@1.0.2': resolution: {integrity: sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==} - '@walletconnect/types@2.19.2': - resolution: {integrity: sha512-/LZWhkVCUN+fcTgQUxArxhn2R8DF+LSd/6Wh9FnpjeK/Sdupx1EPS8okWG6WPAqq2f404PRoNAfQytQ82Xdl3g==} + '@walletconnect/types@2.21.0': + resolution: {integrity: sha512-ll+9upzqt95ZBWcfkOszXZkfnpbJJ2CmxMfGgE5GmhdxxxCcO5bGhXkI+x8OpiS555RJ/v/sXJYMSOLkmu4fFw==} - '@walletconnect/universal-provider@2.19.2': - resolution: {integrity: sha512-LkKg+EjcSUpPUhhvRANgkjPL38wJPIWumAYD8OK/g4OFuJ4W3lS/XTCKthABQfFqmiNbNbVllmywiyE44KdpQg==} + '@walletconnect/types@2.21.1': + resolution: {integrity: sha512-UeefNadqP6IyfwWC1Yi7ux+ljbP2R66PLfDrDm8izmvlPmYlqRerJWJvYO4t0Vvr9wrG4Ko7E0c4M7FaPKT/sQ==} - '@walletconnect/utils@2.19.2': - resolution: {integrity: sha512-VU5CcUF4sZDg8a2/ov29OJzT3KfLuZqJUM0GemW30dlipI5fkpb0VPenZK7TcdLPXc1LN+Q+7eyTqHRoAu/BIA==} + '@walletconnect/universal-provider@2.21.0': + resolution: {integrity: sha512-mtUQvewt+X0VBQay/xOJBvxsB3Xsm1lTwFjZ6WUwSOTR1X+FNb71hSApnV5kbsdDIpYPXeQUbGt2se1n5E5UBg==} + + '@walletconnect/universal-provider@2.21.1': + resolution: {integrity: sha512-Wjx9G8gUHVMnYfxtasC9poGm8QMiPCpXpbbLFT+iPoQskDDly8BwueWnqKs4Mx2SdIAWAwuXeZ5ojk5qQOxJJg==} + + '@walletconnect/utils@2.21.0': + resolution: {integrity: sha512-zfHLiUoBrQ8rP57HTPXW7rQMnYxYI4gT9yTACxVW6LhIFROTF6/ytm5SKNoIvi4a5nX5dfXG4D9XwQUCu8Ilig==} + + '@walletconnect/utils@2.21.1': + resolution: {integrity: sha512-VPZvTcrNQCkbGOjFRbC24mm/pzbRMUq2DSQoiHlhh0X1U7ZhuIrzVtAoKsrzu6rqjz0EEtGxCr3K1TGRqDG4NA==} '@walletconnect/window-getters@1.0.1': resolution: {integrity: sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==} @@ -3208,8 +3817,10 @@ packages: '@walletconnect/window-metadata@1.0.1': resolution: {integrity: sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==} - '@zk-kit/artifacts@1.8.0': - resolution: {integrity: sha512-G2rQ1BxYt9CuVyU4Egc4ceSLLWx9BRrtFGZWS0RWwHhAMfSV/Fq9Qz6OX02leFzTbi7Tr3bTP6DgDSqr28OQnw==} + '@zk-kit/artifacts@https://codeload.github.com/hmzakhalid/snark-artifacts/tar.gz/a8eb62a0e3f1d4917f7895bf4511ee1f7f221dc3': + resolution: {tarball: https://codeload.github.com/hmzakhalid/snark-artifacts/tar.gz/a8eb62a0e3f1d4917f7895bf4511ee1f7f221dc3} + version: 2.0.1 + hasBin: true '@zk-kit/baby-jubjub@1.0.3': resolution: {integrity: sha512-Wl+QfV6XGOMk1yU2JTqHXeKWfJVXp83is0+dtqfj9wx4wsAPpb+qzYvwAxW5PBx5/Nu71Bh7jp/5vM+6QgHSwA==} @@ -3235,21 +3846,10 @@ packages: abbrev@1.0.9: resolution: {integrity: sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==} - abitype@1.0.0: - resolution: {integrity: sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ==} - peerDependencies: - typescript: '>=5.0.4' - zod: ^3 >=3.22.0 - peerDependenciesMeta: - typescript: - optional: true - zod: - optional: true - abitype@1.0.8: resolution: {integrity: sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg==} peerDependencies: - typescript: '>=5.0.4' + typescript: 5.8.3 zod: ^3 >=3.22.0 peerDependenciesMeta: typescript: @@ -3257,6 +3857,10 @@ packages: zod: optional: true + accepts@2.0.0: + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} + engines: {node: '>= 0.6'} + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -3266,8 +3870,8 @@ packages: resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} - acorn@8.14.1: - resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} hasBin: true @@ -3292,12 +3896,37 @@ packages: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} + ajv-draft-04@1.0.0: + resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} + peerDependencies: + ajv: ^8.5.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + + ajv@8.13.0: + resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} + ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + alien-signals@0.4.14: + resolution: {integrity: sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==} + amdefine@1.0.1: resolution: {integrity: sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==} engines: {node: '>=0.4.2'} @@ -3336,6 +3965,10 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} @@ -3445,15 +4078,18 @@ packages: axios@0.21.4: resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} + axios@0.26.1: + resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==} + + axios@1.10.0: + resolution: {integrity: sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==} + axios@1.6.6: resolution: {integrity: sha512-XZLZDFfXKM9U/Y/B4nNynfCRUqNyVZ4sBC/n9GDRCkq9vd2mIvKjKKsbIh1WPmHmNbg6ND7cTBY3Y2+u1G3/2Q==} axios@1.6.7: resolution: {integrity: sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==} - axios@1.8.4: - resolution: {integrity: sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==} - b4a@1.6.7: resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} @@ -3502,6 +4138,10 @@ packages: bech32@1.1.4: resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} + better-path-resolve@1.0.0: + resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} + engines: {node: '>=4'} + bfj@7.1.0: resolution: {integrity: sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==} engines: {node: '>= 8.0.0'} @@ -3510,13 +4150,23 @@ packages: resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} engines: {node: '>=0.6'} + big.js@6.2.2: + resolution: {integrity: sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==} + binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} + binary-install@1.1.0: + resolution: {integrity: sha512-rkwNGW+3aQVSZoD0/o3mfPN6Yxh3Id0R/xzTVBVVpGNlVz8EGwusksxRlbk/A5iKTZt9zkMn3qIqmAt3vpfbzg==} + engines: {node: '>=10'} + binary@0.3.0: resolution: {integrity: sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==} + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + blake2b-wasm@2.4.0: resolution: {integrity: sha512-S1kwmW2ZhZFFFOghcx73+ZajEfKBqhP82JMssxtLVMxlaPea1p9uoLiUZ5WYyHn0KddwbLc+0vh4wR0KBNoT5w==} @@ -3532,11 +4182,15 @@ packages: bn.js@4.11.6: resolution: {integrity: sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==} - bn.js@4.12.1: - resolution: {integrity: sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==} + bn.js@4.12.2: + resolution: {integrity: sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==} - bn.js@5.2.1: - resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + bn.js@5.2.2: + resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==} + + body-parser@2.2.0: + resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} + engines: {node: '>=18'} boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} @@ -3548,11 +4202,11 @@ packages: resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} engines: {node: '>=10'} - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} @@ -3590,8 +4244,8 @@ packages: browserify-zlib@0.2.0: resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} - browserslist@4.24.4: - resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + browserslist@4.25.1: + resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -3634,11 +4288,11 @@ packages: builtin-status-codes@3.0.0: resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} - bundle-require@4.2.1: - resolution: {integrity: sha512-7Q/6vkyYAwOmQNRw75x+4yRtZCZJXUDmHHlFdkiV0wgv/reNjtJwpu1jPJ0w2kbEpIM0uoKI3S4/f39dU7AjSA==} + bundle-require@5.1.0: + resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: - esbuild: '>=0.17' + esbuild: '>=0.18' busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} @@ -3691,8 +4345,8 @@ packages: camelize@1.0.1: resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} - caniuse-lite@1.0.30001713: - resolution: {integrity: sha512-wCIWIg+A4Xr7NfhTuHdX+/FKh3+Op3LBbSp2N5Pfx6T/LhdQy3GTyoTg48BReaW/MyMNZAkTadsBtai3ldWK0Q==} + caniuse-lite@1.0.30001726: + resolution: {integrity: sha512-VQAUIUzBiZ/UnlM28fSp2CRF3ivUn1BWEvxMcVTNwpw91Py1pGbPIyIKtd+tzct9C3ouceCVdGAXxZOpZAsgdw==} caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} @@ -3757,6 +4411,9 @@ packages: character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + charenc@0.0.2: resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} @@ -3766,6 +4423,9 @@ packages: check-types@11.2.3: resolution: {integrity: sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==} + child_process@1.0.2: + resolution: {integrity: sha512-Wmza/JzL0SiWz7kl6MhIKT5ceIlnFPJX+lwUGj7Clhy5MMldsSoJR0+uvRzOS5Kv45Mq7t1PoE8TsOA9bzvb6g==} + chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -3774,17 +4434,40 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + ci-info@2.0.0: resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + cipher-base@1.0.6: resolution: {integrity: sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==} engines: {node: '>= 0.10'} + circom_runtime@0.1.21: + resolution: {integrity: sha512-qTkud630B/GK8y76hnOaaS1aNuF6prfV0dTrkeRsiJKnlP1ryQbP2FWLgDOPqn6aKyaPlam+Z+DTbBhkEzh8dA==} + hasBin: true + circom_runtime@0.1.25: resolution: {integrity: sha512-xBGsBFF5Uv6AKvbpgExYqpHfmfawH2HKe+LyjfKSRevqEV8u63i9KGHVIILsbJNW+0c5bm/66f0PUYQ7qZSkJA==} hasBin: true + circom_tester@0.0.19: + resolution: {integrity: sha512-SNHaBsGxcBH6XsVWfsRbRPA7NF8m8AMKJI9dtJJCFGUtOTT2+zsoIqAwi50z6XCnO4TtjyXq7AeXa1PLHqT0tw==} + + circomkit@0.2.1: + resolution: {integrity: sha512-7O8QsOLUq2QvwGMimvWxwdg7OgV33OT7ZBND+81dv3JrVp8ove93yV16jF3TW6XBncSY92/Aka8F4CAi/H9VQw==} + engines: {node: '>=12.0.0'} + hasBin: true + peerDependencies: + '@types/snarkjs': ^0.7.x + snarkjs: ^0.7.x + clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} @@ -3793,6 +4476,14 @@ packages: resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} engines: {node: '>=6'} + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + cli-table3@0.5.1: resolution: {integrity: sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==} engines: {node: '>=6'} @@ -3801,6 +4492,10 @@ packages: resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} engines: {node: 10.* || >= 12.*} + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} @@ -3818,6 +4513,14 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + cliui@9.0.1: + resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} + engines: {node: '>=20'} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + clsx@1.2.1: resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} engines: {node: '>=6'} @@ -3854,6 +4557,9 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + comlink@4.4.2: + resolution: {integrity: sha512-OxGdvBmJuNKSCMO4NTl1L47VRp6xn2wG4F/2hYzB6tiCb709otOxtEYCSvK80PtjODfXXZu8ds+Nw5kVCjqd2g==} + comma-separated-tokens@1.0.8: resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==} @@ -3879,6 +4585,10 @@ packages: resolution: {integrity: sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==} engines: {node: '>=18'} + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + commander@13.1.0: resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} engines: {node: '>=18'} @@ -3898,6 +4608,9 @@ packages: commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + compare-versions@6.1.1: + resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} + compute-scroll-into-view@3.1.1: resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==} @@ -3908,30 +4621,48 @@ packages: resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} engines: {'0': node >= 0.8} - concurrently@9.1.2: - resolution: {integrity: sha512-H9MWcoPsYddwbOGM6difjVwVZHl63nwMEwDJG/L7VGtuaJhb12h2caPG2tVPWs7emuYix252iGfqOyrz1GczTQ==} + concurrently@9.2.0: + resolution: {integrity: sha512-IsB/fiXTupmagMW4MNp2lx2cdSN2FfZq78vF90LBB+zZHArbIQZjQtzXCiXnvTxCZSvXanTqFLWBjw2UkLx1SQ==} engines: {node: '>=18'} hasBin: true + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + confbox@0.2.2: + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} - connectkit@1.9.0: - resolution: {integrity: sha512-bkqg8zK35pWWG2q8xeo41J1mnBP8D2ffOd/ItB12aad9QZZU20SlEeiQM9iYfRyl0JAH1tqIDlZbXajqZBFfDw==} + connectkit@1.9.1: + resolution: {integrity: sha512-ac9Ki3+HdS3l5NCa6H86y7R+0PqwJ8yzsBQVtWk4/jkFo+JJioetO43A/Q0O7VtxLbfuLLfwDGZ09taePLNzfQ==} engines: {node: '>=12.4'} peerDependencies: '@tanstack/react-query': '>=5.0.0' react: 17.x || 18.x react-dom: 17.x || 18.x - viem: 2.x + viem: 2.30.6 wagmi: 2.x + consola@3.4.2: + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + engines: {node: ^14.18.0 || >=16.10.0} + console-browserify@1.2.0: resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} constants-browserify@1.0.0: resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} + content-disposition@1.0.0: + resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} @@ -3941,12 +4672,20 @@ packages: cookie-es@1.2.2: resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} + cookie-signature@1.2.2: + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} + engines: {node: '>=6.6.0'} + cookie@0.4.2: resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} engines: {node: '>= 0.6'} - core-js-compat@3.41.0: - resolution: {integrity: sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==} + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + + core-js-compat@3.43.0: + resolution: {integrity: sha512-2GML2ZsCc5LR7hZYz4AXmjQw8zuy2T//2QntwdnpuYI7jteT6GVYJL7F6C2C57R7gSYrcqVW3lAALefdbhBLDA==} core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -3962,7 +4701,7 @@ packages: resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} peerDependencies: - typescript: '>=4.9.5' + typescript: 5.8.3 peerDependenciesMeta: typescript: optional: true @@ -3975,6 +4714,9 @@ packages: create-ecdh@4.0.4: resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} + create-hash@1.1.3: + resolution: {integrity: sha512-snRpch/kwQhcdlnZKYanNF1m0RDlrCdSKQaH87w1FCFPVPNCQ/Il9QJKAX2jVBZddRdaHBMC+zXa9Gw9tmkNUA==} + create-hash@1.2.0: resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} @@ -4002,8 +4744,8 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - crossws@0.3.4: - resolution: {integrity: sha512-uj0O1ETYX1Bh6uSgktfPvwDiPYGQ3aI4qVsaC/LWpkIzGj1nUYm5FK3K+t11oOlpN01lGbprFCH4wBlKdJjVgw==} + crossws@0.3.5: + resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==} crypt@0.0.2: resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} @@ -4204,6 +4946,9 @@ packages: dayjs@1.11.13: resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} + de-indent@1.0.2: + resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} + death@1.1.0: resolution: {integrity: sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==} @@ -4216,8 +4961,8 @@ packages: supports-color: optional: true - debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -4233,8 +4978,8 @@ packages: resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} engines: {node: '>=10'} - decode-named-character-reference@1.1.0: - resolution: {integrity: sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==} + decode-named-character-reference@1.2.0: + resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} decode-uri-component@0.2.2: resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} @@ -4259,6 +5004,9 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + defer-to-connect@2.0.1: resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} engines: {node: '>=10'} @@ -4289,6 +5037,11 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + derive-valtio@0.1.0: + resolution: {integrity: sha512-OCg2UsLbXK7GmmpzMXhYkdO64vhJ1ROUUGaTFyHjVwEdMEcTTRj7W1TxLbSBxdY8QLBPCcp66MTyaSy0RpO17A==} + peerDependencies: + valtio: '*' + des.js@1.1.0: resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} @@ -4298,6 +5051,10 @@ packages: detect-browser@5.3.0: resolution: {integrity: sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==} + detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + detect-libc@2.0.4: resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} engines: {node: '>=8'} @@ -4308,6 +5065,10 @@ packages: didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} @@ -4359,8 +5120,8 @@ packages: dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - dotenv@16.4.7: - resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} + dotenv@16.6.0: + resolution: {integrity: sha512-Omf1L8paOy2VJhILjyhrhqwLIdstqm1BvcDPKg4NGAlkwEu9ODyrFbvk8UymUOMCT+HXo31jg1lArIrVAAhuGA==} engines: {node: '>=12'} dunder-proto@1.0.1: @@ -4376,17 +5137,20 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - eciesjs@0.4.14: - resolution: {integrity: sha512-eJAgf9pdv214Hn98FlUzclRMYWF7WfoLlkS9nWMTm1qcCwn6Ad4EGD9lr9HXMBfSrZhYQujRE+p0adPRkctC6A==} + eciesjs@0.4.15: + resolution: {integrity: sha512-r6kEJXDKecVOCj2nLMuXK/FCPeurW33+3JRpfXVbjLja3XUYFfD9I/JBreH6sUyzcm3G/YQboBjMla6poKeSdA==} engines: {bun: '>=1', deno: '>=2', node: '>=16'} + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + ejs@3.1.10: resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.5.137: - resolution: {integrity: sha512-/QSJaU2JyIuTbbABAo/crOs+SuAZLS+fVVS10PVrIT9hrRkmZl8Hb0xPSkKRUUWHQtYzXHpQUW3Dy5hwMzGZkA==} + electron-to-chromium@1.5.176: + resolution: {integrity: sha512-2nDK9orkm7M9ZZkjO3PjbEd3VUulQLyg5T9O3enJdFvUg46Hzd4DUvTvAuEgbdHYXyFsiG4A5sO9IzToMH1cDg==} elkjs@0.9.3: resolution: {integrity: sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ==} @@ -4397,6 +5161,9 @@ packages: email-addresses@5.0.0: resolution: {integrity: sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==} + emoji-regex@10.4.0: + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -4406,8 +5173,12 @@ packages: encode-utf8@1.0.3: resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==} - end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + end-of-stream@1.4.5: + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} engine.io-client@6.6.3: resolution: {integrity: sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w==} @@ -4424,8 +5195,8 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - entities@6.0.0: - resolution: {integrity: sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==} + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} env-paths@2.2.1: @@ -4454,11 +5225,6 @@ packages: es-toolkit@1.33.0: resolution: {integrity: sha512-X13Q/ZSc+vsO1q600bvNK4bxgXMkHcf//RxCmYDaRY5DAcT+eoXjY5hoAPGMdRnWQjvyLEcyauG3b6hz76LNqg==} - esbuild@0.19.12: - resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} - engines: {node: '>=12'} - hasBin: true - esbuild@0.20.0: resolution: {integrity: sha512-6iwE3Y2RVYCME1jLpBqq7LQWK3MW6vjV2bZy6gt/WrqkY+WE74Spyc0ThAOYpMtITvnjX09CrC6ym7A/m9mebA==} engines: {node: '>=12'} @@ -4469,10 +5235,18 @@ packages: engines: {node: '>=12'} hasBin: true + esbuild@0.25.6: + resolution: {integrity: sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} @@ -4485,6 +5259,11 @@ packages: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} + escodegen@1.14.3: + resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} + engines: {node: '>=4.0'} + hasBin: true + escodegen@1.8.1: resolution: {integrity: sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==} engines: {node: '>=0.12.0'} @@ -4502,8 +5281,8 @@ packages: peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - eslint-plugin-react-refresh@0.4.19: - resolution: {integrity: sha512-eyy8pcr/YxSYjBoqIFSrlbn9i/xvxUFa8CjzAYo9cFjgGXqq1hyjihcpZvxRLalpaWmueWR81xn7vuKmAFijDQ==} + eslint-plugin-react-refresh@0.4.20: + resolution: {integrity: sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==} peerDependencies: eslint: '>=8.40' @@ -4552,6 +5331,10 @@ packages: resolution: {integrity: sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==} engines: {node: '>=0.10.0'} + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} @@ -4587,6 +5370,10 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + eth-block-tracker@7.1.0: resolution: {integrity: sha512-8YdplnuE1IK4xfqpf4iU7oBxnOYAc35934o083G8ao+8WM8QQtt/mVlAY6yIAdY1eMeLqg4Z//PZjJGmWGPMRg==} engines: {node: '>=14.0.0'} @@ -4621,13 +5408,6 @@ packages: ethereum-cryptography@2.2.1: resolution: {integrity: sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==} - ethereumjs-abi@0.6.8: - resolution: {integrity: sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==} - deprecated: This library has been deprecated and usage is discouraged. - - ethereumjs-util@6.2.1: - resolution: {integrity: sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==} - ethereumjs-util@7.1.5: resolution: {integrity: sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==} engines: {node: '>=10.0.0'} @@ -4639,18 +5419,14 @@ packages: resolution: {integrity: sha512-21YtnZVg4/zKkCQPjrDj38B1r4nQvTZLopUGMLQ1ePU2zV/joCfDC3t3iKQjWRzjjjbzR+mdAIoikeBRNkdllA==} engines: {node: '>=14.0.0'} - ethers@6.13.5: - resolution: {integrity: sha512-+knKNieu5EKRThQJWwqaJ10a6HE9sSehGeqWN65//wE7j47ZpFhKAnHB/JJFibwwg61I/koxaPsXbXpD/skNOQ==} + ethers@6.14.4: + resolution: {integrity: sha512-Jm/dzRs2Z9iBrT6e9TvGxyb5YVKAPLlpna7hjxH7KH/++DSh2T/JVmQUv7iHI5E55hDbp/gEVvstWYXVxXFzsA==} engines: {node: '>=14.0.0'} ethjs-unit@0.1.6: resolution: {integrity: sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==} engines: {node: '>=6.5.0', npm: '>=3'} - ethjs-util@0.1.6: - resolution: {integrity: sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==} - engines: {node: '>=6.5.0', npm: '>=3'} - eventemitter2@6.4.9: resolution: {integrity: sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==} @@ -4671,14 +5447,21 @@ packages: resolution: {integrity: sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==} engines: {node: '>=4'} - execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - execa@7.2.0: resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + + express@5.1.0: + resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} + engines: {node: '>= 18'} + + exsolve@1.0.7: + resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==} + extend-shallow@2.0.1: resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} engines: {node: '>=0.10.0'} @@ -4686,17 +5469,24 @@ packages: extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + extendable-error@0.1.7: + resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} + extension-port-stream@3.0.0: resolution: {integrity: sha512-an2S5quJMiy5bnZKEf6AkfH/7r8CzHvhchU40gxN+OM6HPhe7Z9T1FUychcf2M9PpPOO0Hf7BAEfJkw2TDIBDw==} engines: {node: '>=12.0.0'} - family@0.1.1: - resolution: {integrity: sha512-X9gxkV4fm7U6ftSWcrHmNLfIhwwsvyn2uKEtLVgAGXbm+b+IAxXS1YdBC0HqQfooCZSUnw0vtVQg+eXN+kJAlw==} + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + family@0.1.3: + resolution: {integrity: sha512-5jvm4XrcJU/Hl0Bv9wL6VdzsfW8I20ssFcWmYWrUHVQGZlNqqLGoNqyEVWr3uLaPpdAY0Hn0+J9JWrK7MzeDXQ==} engines: {node: '>=12.4'} peerDependencies: react: 17.x || 18.x || 19.x react-dom: 17.x || 18.x || 19.x - viem: 2.x + viem: 2.30.6 wagmi: 2.x peerDependenciesMeta: react: @@ -4743,17 +5533,26 @@ packages: fault@1.0.4: resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} - fdir@6.4.3: - resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} + fdir@6.4.6: + resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: picomatch: optional: true + ffjavascript@0.2.56: + resolution: {integrity: sha512-em6G5Lrj7ucIqj4TYEgyoHs/j99Urwwqa4+YxEVY2hggnpRimVj+noX5pZQTxI1pvtiekZI4rG65JBf0xraXrg==} + + ffjavascript@0.2.63: + resolution: {integrity: sha512-dBgdsfGks58b66JnUZeZpGxdMIDQ4QsD3VYlRJyFVrKQHb2kJy4R2gufx5oetrTxXPT+aEjg0dOvOLg1N0on4A==} + ffjavascript@0.3.0: resolution: {integrity: sha512-l7sR5kmU3gRwDy8g0Z2tYBXy5ttmafRPFOqY7S6af5cq51JqJWt5eQ/lSR/rs2wQNbDYaYlQr5O+OSUf/oMLoQ==} + fflate@0.8.2: + resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -4777,6 +5576,10 @@ packages: resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} engines: {node: '>=0.10.0'} + finalhandler@2.1.0: + resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} + engines: {node: '>= 0.8'} + find-cache-dir@3.3.2: resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} engines: {node: '>=8'} @@ -4796,6 +5599,9 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} + fix-dts-default-cjs-exports@1.0.1: + resolution: {integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==} + flat-cache@3.2.0: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} @@ -4813,6 +5619,9 @@ packages: fmix@0.1.0: resolution: {integrity: sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==} + fnv-plus@1.3.1: + resolution: {integrity: sha512-Gz1EvfOneuFfk4yG458dJ3TLJ7gV19q3OM/vVvvHf7eT02Hm1DleB4edsia6ahbKgAYxO9gvyQ1ioWZR+a00Yw==} + focus-visible@5.2.1: resolution: {integrity: sha512-8Bx950VD1bWTQJEH/AM6SpEk+SU55aVnp4Ujhuuxy3eMEBCRwBnTBnVXr9YAPvZL3/CNjCa8u4IWfNmEO53whA==} @@ -4841,14 +5650,18 @@ packages: resolution: {integrity: sha512-XHIrMD0NpDrNM/Ckf7XJiBbLl57KEhT3+i3yY+eWm+cqYZJQTZrKo8Y8AWKnuV5GT4scfuUGt9LzNoIx3dU1nQ==} engines: {node: '>= 0.12'} - form-data@4.0.2: - resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} + form-data@4.0.3: + resolution: {integrity: sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==} engines: {node: '>= 6'} format@0.2.2: resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} engines: {node: '>=0.4.x'} + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + fp-ts@1.19.3: resolution: {integrity: sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==} @@ -4864,6 +5677,10 @@ packages: framesync@6.0.1: resolution: {integrity: sha512-fUY88kXvGiIItgNC7wcTOl0SNRCVXMKSWW2Yzfmn7EKNc+MpCzcz9DhdHcdjbrtN3c6R4H5dTY2jiCpPdysEjA==} + fresh@2.0.0: + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} + engines: {node: '>= 0.8'} + fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} @@ -4888,6 +5705,10 @@ packages: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} engines: {node: '>=10'} + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + fs-readdir-recursive@1.1.0: resolution: {integrity: sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==} @@ -4920,6 +5741,10 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + get-east-asian-width@1.3.0: + resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} + engines: {node: '>=18'} + get-func-name@2.0.2: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} @@ -4947,6 +5772,13 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + + get-tsconfig@4.10.1: + resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} + gh-pages@6.3.0: resolution: {integrity: sha512-Ot5lU6jK0Eb+sszG8pciXdjMXdBJ5wODvgjR+imihTqsUWF2K6dJ9HST55lgqcs8wWcw6o6wAsUzfcYRhJPXbA==} engines: {node: '>=10'} @@ -5051,8 +5883,8 @@ packages: resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} engines: {node: '>=6.0'} - h3@1.15.1: - resolution: {integrity: sha512-+ORaOBttdUm1E2Uu/obAyCguiI7MbBvsLTndc3gyK3zU+SYLoZXlyCP9Xgy0gikkGufFLTZXCXD6+4BsufnmHA==} + h3@1.15.3: + resolution: {integrity: sha512-z6GknHqyX0h9aQaTx22VZDf6QyZn+0Nh+Ym8O/u0SGSkyF5cuTJYKlc8MkzW3Nzf9LE1ivcpmYC3FUGpywhuUQ==} handlebars@4.7.8: resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} @@ -5067,17 +5899,17 @@ packages: peerDependencies: hardhat: ^2.0.2 - hardhat-gas-reporter@2.2.2: - resolution: {integrity: sha512-xlg3d00wrgUvP2S5tw3Zf6nO7OyS5crK3P6/ZP69i24pz4grM+6oFHGW/eJPSGqiDWBYX+gKp9XoqP4rwRXrdQ==} + hardhat-gas-reporter@2.3.0: + resolution: {integrity: sha512-ySdA+044xMQv1BlJu5CYXToHzMexKFfIWxlQTBNNoerx1x96+d15IMdN01iQZ/TJ7NH2V5sU73bz77LoS/PEVw==} peerDependencies: hardhat: ^2.16.0 - hardhat@2.22.19: - resolution: {integrity: sha512-jptJR5o6MCgNbhd7eKa3mrteR+Ggq1exmE5RUL5ydQEVKcZm0sss5laa86yZ0ixIavIvF4zzS7TdGDuyopj0sQ==} + hardhat@2.25.0: + resolution: {integrity: sha512-yBiA74Yj3VnTRj7lhnn8GalvBdvsMOqTKRrRATSy/2v0VIR2hR0Jcnmfn4aQBLtGAnr3Q2c8CxL0g3LYegUp+g==} hasBin: true peerDependencies: ts-node: '*' - typescript: '*' + typescript: 5.8.3 peerDependenciesMeta: ts-node: optional: true @@ -5111,6 +5943,9 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} + hash-base@2.0.2: + resolution: {integrity: sha512-0TROgQ1/SxE6KmxWSvXHvRj90/Xo1JvZShofnYF+f6ZsGtR4eES7WfrQzPalmyagfKZCXpVnitiRebZulWsbiw==} + hash-base@3.0.5: resolution: {integrity: sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==} engines: {node: '>= 0.10'} @@ -5214,8 +6049,8 @@ packages: resolution: {integrity: sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==} engines: {node: '>=6.0.0'} - http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} http-errors@2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} @@ -5239,14 +6074,18 @@ packages: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} - human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} + human-id@4.1.1: + resolution: {integrity: sha512-3gKm/gCSUipeLsRYZbbdA1BD83lBoWUkZ7G9VFrhWPAU76KwYo5KR8V28bpoPm/ygy0x5/GCbpRQdY7VLYCoIg==} + hasBin: true human-signals@4.3.1: resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} engines: {node: '>=14.18.0'} + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + husky@9.1.7: resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} engines: {node: '>=18'} @@ -5260,8 +6099,8 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} - idb-keyval@6.2.1: - resolution: {integrity: sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==} + idb-keyval@6.2.2: + resolution: {integrity: sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg==} ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -5283,6 +6122,10 @@ packages: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} + import-lazy@4.0.0: + resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} + engines: {node: '>=8'} + imul@1.0.1: resolution: {integrity: sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==} engines: {node: '>=0.10.0'} @@ -5328,6 +6171,10 @@ packages: io-ts@1.10.4: resolution: {integrity: sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==} + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + iron-webcrypto@1.2.1: resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} @@ -5409,6 +6256,10 @@ packages: is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + is-nan@1.3.2: resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} engines: {node: '>= 0.4'} @@ -5433,6 +6284,9 @@ packages: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + is-reference@3.0.3: resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} @@ -5455,6 +6309,10 @@ packages: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + is-subdir@1.2.0: + resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} + engines: {node: '>=4'} + is-typed-array@1.1.15: resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} @@ -5463,9 +6321,16 @@ packages: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -5473,13 +6338,8 @@ packages: resolution: {integrity: sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ==} engines: {node: '>=10'} - isows@1.0.3: - resolution: {integrity: sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg==} - peerDependencies: - ws: '*' - - isows@1.0.6: - resolution: {integrity: sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw==} + isows@1.0.7: + resolution: {integrity: sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg==} peerDependencies: ws: '*' @@ -5502,6 +6362,9 @@ packages: resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true + jju@1.4.0: + resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} + joi@17.13.3: resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} @@ -5515,6 +6378,9 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true @@ -5619,6 +6485,9 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} + kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + latest-version@7.0.0: resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==} engines: {node: '>=14.16'} @@ -5647,19 +6516,27 @@ packages: listenercount@1.0.1: resolution: {integrity: sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==} - lit-element@3.3.3: - resolution: {integrity: sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==} + lit-element@4.2.0: + resolution: {integrity: sha512-MGrXJVAI5x+Bfth/pU9Kst1iWID6GHDLEzFEnyULB/sFiRLgkd8NPK/PeeXxktA3T6EIIaq8U3KcbTU5XFcP2Q==} - lit-html@2.8.0: - resolution: {integrity: sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==} + lit-html@3.3.0: + resolution: {integrity: sha512-RHoswrFAxY2d8Cf2mm4OZ1DgzCoBKUKSPvA1fhtSELxUERq2aQQ2h05pO9j81gS1o7RIRJ+CePLogfyahwmynw==} - lit@2.8.0: - resolution: {integrity: sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==} + lit@3.3.0: + resolution: {integrity: sha512-DGVsqsOIHBww2DqnuZzW7QsuCdahp50ojuDaBPC7jUDRpYoH0z7kHBBYZewRzer75FwtrkmkKk7iOAwSaWdBmw==} load-tsconfig@0.2.5: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + local-pkg@0.5.1: + resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==} + engines: {node: '>=14'} + + local-pkg@1.1.1: + resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==} + engines: {node: '>=14'} + locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -5700,6 +6577,9 @@ packages: lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + lodash.truncate@4.4.2: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} @@ -5710,6 +6590,10 @@ packages: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} + loglevel@1.9.2: + resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} + engines: {node: '>= 0.6.0'} + logplease@1.2.15: resolution: {integrity: sha512-jLlHnlsPSJjpwUfcNyUxXCl33AYg2cHhIf9QhGL2T4iPT0XPB+xP1LRKFPgIg1M/sg9kAJvy94w9CzBNrfnstA==} @@ -5742,6 +6626,10 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + lru_map@0.3.3: resolution: {integrity: sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==} @@ -5865,10 +6753,18 @@ packages: mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + media-typer@1.1.0: + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} + engines: {node: '>= 0.8'} + memorystream@0.3.1: resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} engines: {node: '>= 0.10.0'} + merge-descriptors@2.0.0: + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} + engines: {node: '>=18'} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -5879,9 +6775,15 @@ packages: mermaid@10.9.3: resolution: {integrity: sha512-V80X1isSEvAewIL3xhmz/rVmc27CVljcsbWxkxlWJWY/1kQa4XOABqpDl2qQLGKzpKm6WbTfUEKImBlUfFYArw==} + micro-eth-signer@0.14.0: + resolution: {integrity: sha512-5PLLzHiVYPWClEvZIXXFu5yutzpadb73rnQCpUqIHu3No3coFuWQNfE5tkBQJ7djuLYl6aRLaS0MgWJYGoqiBw==} + micro-ftch@0.3.1: resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==} + micro-packed@0.7.3: + resolution: {integrity: sha512-2Milxs+WNC00TRlem41oRswvw31146GiSaoCT7s3Xi2gMUglW5QBeqlQaZeHr5tJx9nm3i57LNXPqxOOaWtTYg==} + micromark-core-commonmark@1.1.0: resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} @@ -6065,10 +6967,18 @@ packages: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + mime-types@3.0.1: + resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} + engines: {node: '>= 0.6'} + mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -6091,6 +7001,9 @@ packages: minimalistic-crypto-utils@1.0.1: resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + minimatch@3.0.8: + resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -6105,14 +7018,26 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + minipass@7.1.2: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + mipd@0.0.7: resolution: {integrity: sha512-aAPZPNDQ3uMTdKbuO2YmAw2TxLHO0moa4YKAyETM/DTj5FloZo+a+8tU+iv4GmW+sOxKLSRwcSFuczk+Cpt6fg==} peerDependencies: - typescript: '>=5.0.4' + typescript: 5.8.3 peerDependenciesMeta: typescript: optional: true @@ -6126,6 +7051,9 @@ packages: engines: {node: '>=10'} hasBin: true + mlly@1.7.4: + resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} + mnemonist@0.38.5: resolution: {integrity: sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==} @@ -6134,9 +7062,6 @@ packages: engines: {node: '>= 14.0.0'} hasBin: true - motion@10.16.2: - resolution: {integrity: sha512-p+PurYqfUdcJZvtnmAqu5fJgV2kR0uLFQuBKtLeFVTrYEVllI99tiOTSefVNYuip9ELTEkepIIDftNdze76NAQ==} - mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -6144,12 +7069,19 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + muggle-string@0.4.1: + resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + multiformats@9.9.0: resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} murmur-128@0.2.1: resolution: {integrity: sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg==} + mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -6169,6 +7101,10 @@ packages: engines: {node: '>=10'} hasBin: true + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} @@ -6179,8 +7115,8 @@ packages: react: '>=16.x <=18.x' react-dom: '>=16.x <=18.x' - next-seo@6.6.0: - resolution: {integrity: sha512-0VSted/W6XNtgAtH3D+BZrMLLudqfm0D5DYNJRXHcDgan/1ZF1tDFIsWrmvQlYngALyphPfZ3ZdOqlKpKdvG6w==} + next-seo@6.8.0: + resolution: {integrity: sha512-zcxaV67PFXCSf8e6SXxbxPaOTgc8St/esxfsYXfQXMM24UESUVSXFm7f2A9HMkAwa0Gqn4s64HxYZAGfdF4Vhg==} peerDependencies: next: ^8.1.1-canary.54 || >=9.0.0 react: '>=16.0.0' @@ -6193,8 +7129,8 @@ packages: react: '*' react-dom: '*' - next@14.2.28: - resolution: {integrity: sha512-QLEIP/kYXynIxtcKB6vNjtWLVs3Y4Sb+EClTC/CSVzdLD1gIuItccpu/n1lhmduffI32iPGEK2cLLxxt28qgYA==} + next@14.2.30: + resolution: {integrity: sha512-+COdu6HQrHHFQ1S/8BBsCag61jZacmvbuL2avHvQFbWa2Ox7bE+d8FyNgxRLjXQ5wtPyQwEmk85js/AuaG2Sbg==} engines: {node: '>=18.17.0'} hasBin: true peerDependencies: @@ -6255,8 +7191,8 @@ packages: resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} hasBin: true - node-mock-http@1.0.0: - resolution: {integrity: sha512-0uGYQ1WQL1M5kKvGRXWQ3uZCHtLTO8hln3oBjIusM75WoesZ909uQJs/Hb946i2SS+Gsrhkaa6iAO17jRIv6DQ==} + node-mock-http@1.0.1: + resolution: {integrity: sha512-0gJJgENizp4ghds/Ywu2FCmcRsgBTmRQzYPZm61wy+Em2sBarSka0OhQS5huLBg6od1zkNpnWMCZloQDFVvOMQ==} node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} @@ -6284,18 +7220,14 @@ packages: resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} engines: {node: '>=0.10.0'} - normalize-url@8.0.1: - resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==} + normalize-url@8.0.2: + resolution: {integrity: sha512-Ee/R3SyN4BuynXcnTaekmaVdbDAEiNrHqjQIA37mHU8G9pf7aaAD4ZX3XjBLo6rsdcxA/gtkcNYZLt30ACgynw==} engines: {node: '>=14.16'} npm-run-path@2.0.2: resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} engines: {node: '>=4'} - npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - npm-run-path@5.3.0: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -6347,6 +7279,10 @@ packages: on-exit-leak-free@0.2.0: resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==} + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -6366,6 +7302,10 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + ordinal@1.0.3: resolution: {integrity: sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==} @@ -6376,18 +7316,13 @@ packages: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} - ox@0.6.7: - resolution: {integrity: sha512-17Gk/eFsFRAZ80p5eKqv89a57uXjd3NgIf1CaXojATPBuujVc/fQSVhBeAU9JCRB+k7J50WQAyWTxK19T9GgbA==} - peerDependencies: - typescript: '>=5.4.0' - peerDependenciesMeta: - typescript: - optional: true + outdent@0.5.0: + resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} - ox@0.6.9: - resolution: {integrity: sha512-wi5ShvzE4eOcTwQVsIPdFr+8ycyX+5le/96iAJutaZAvCes1J0+RvpEPg5QDPDiaR0XQQAvZVl7AwqQcINuUug==} + ox@0.7.1: + resolution: {integrity: sha512-+k9fY9PRNuAMHRFIUbiK9Nt5seYHHzSQs9Bj+iMETcGtlpS7SmBzcGSVUQO3+nqGLEiNK4598pHNFlVRaZbRsg==} peerDependencies: - typescript: '>=5.4.0' + typescript: 5.8.3 peerDependenciesMeta: typescript: optional: true @@ -6396,6 +7331,10 @@ packages: resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} engines: {node: '>=12.20'} + p-filter@2.1.0: + resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} + engines: {node: '>=8'} + p-finally@1.0.0: resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} engines: {node: '>=4'} @@ -6408,6 +7347,10 @@ packages: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} + p-limit@5.0.0: + resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} + engines: {node: '>=18'} + p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -6416,6 +7359,10 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} + p-map@2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + p-map@4.0.0: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} @@ -6431,9 +7378,15 @@ packages: resolution: {integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==} engines: {node: '>=14.16'} + package-manager-detector@0.2.11: + resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==} + pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + pako@2.1.0: + resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -6467,6 +7420,10 @@ packages: parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} @@ -6497,15 +7454,25 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} + path-to-regexp@8.2.0: + resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} + engines: {node: '>=16'} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + pathval@1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} - pbkdf2@3.1.2: - resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} + pbkdf2@3.1.3: + resolution: {integrity: sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA==} engines: {node: '>=0.12'} periscopic@3.1.0: @@ -6560,6 +7527,12 @@ packages: resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} engines: {node: '>=10'} + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + pkg-types@2.2.0: + resolution: {integrity: sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==} + playwright-core@1.52.0: resolution: {integrity: sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==} engines: {node: '>=18'} @@ -6619,6 +7592,24 @@ packages: ts-node: optional: true + postcss-load-config@6.0.1: + resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} + engines: {node: '>= 18'} + peerDependencies: + jiti: '>=1.21.0' + postcss: '>=8.0.9' + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + jiti: + optional: true + postcss: + optional: true + tsx: + optional: true + yaml: + optional: true + postcss-nested@6.2.0: resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} engines: {node: '>=12.0'} @@ -6640,12 +7631,12 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.5.3: - resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} - preact@10.26.5: - resolution: {integrity: sha512-fmpDkgfGU6JYux9teDWLhj9mKN55tyepwYbxHgQuIxbWQzgFg5vk7Mrrtfx7xRxq798ynkY4DDDxZr235Kk+4w==} + preact@10.26.9: + resolution: {integrity: sha512-SSjF9vcnF27mJK1XyFMNJzFd5u3pQiATFqoaDy03XuN00u4ziveVVEGt5RKJrDR8MHE/wJo9Nnad56RLzS2RMA==} prelude-ls@1.1.2: resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} @@ -6659,8 +7650,8 @@ packages: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} - prettier-plugin-solidity@1.4.2: - resolution: {integrity: sha512-VVD/4XlDjSzyPWWCPW8JEleFa8JNKFYac5kNlMjVXemQyQZKfpekPMhFZSePuXB6L+RixlFvWe20iacGjFYrLw==} + prettier-plugin-solidity@1.4.3: + resolution: {integrity: sha512-Mrr/iiR9f9IaeGRMZY2ApumXcn/C5Gs3S7B7hWB3gigBFML06C0yEyW86oLp0eqiA0qg+46FaChgLPJCj/pIlg==} engines: {node: '>=18'} peerDependencies: prettier: '>=2.3.0' @@ -6722,11 +7713,15 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - prettier@3.5.3: - resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} + prettier@3.6.1: + resolution: {integrity: sha512-5xGWRa90Sp2+x1dQtNpIpeOQpTDBs9cZDmA/qs2vDNN2i18PdapqY7CmBeyLlMuGqXJRIOPaCaVZTLNQRWUH/A==} engines: {node: '>=14'} hasBin: true + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + prismjs@1.27.0: resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==} engines: {node: '>=6'} @@ -6762,8 +7757,8 @@ packages: property-information@6.5.0: resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} - property-information@7.0.0: - resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==} + property-information@7.1.0: + resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} @@ -6771,8 +7766,12 @@ packages: protocols@2.0.2: resolution: {integrity: sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==} - proxy-compare@2.5.1: - resolution: {integrity: sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA==} + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + proxy-compare@2.6.0: + resolution: {integrity: sha512-8xuCeM3l8yqdmbPoYeLbrAXCBWu19XEYc5/F28f5qOaoAIMyfmBUkl5axiK+x9olUvRlcekvnm98AP9RDngOIw==} proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} @@ -6783,8 +7782,8 @@ packages: public-encrypt@4.0.3: resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} - pump@3.0.2: - resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + pump@3.0.3: + resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} punycode@1.4.1: resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} @@ -6807,6 +7806,9 @@ packages: resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} engines: {node: '>=0.6'} + quansync@0.2.10: + resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} + query-string@7.1.3: resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==} engines: {node: '>=6'} @@ -6825,6 +7827,9 @@ packages: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} + r1csfile@0.0.41: + resolution: {integrity: sha512-Q1WDF3u1vYeAwjHo4YuddkA8Aq0TulbKjmGm99+Atn13Lf5fTsMZBnBV9T741w8iSyPFG6Uh6sapQby77sREqA==} + r1csfile@0.0.48: resolution: {integrity: sha512-kHRkKUJNaor31l05f2+RFzvcH5XSa7OfEfd/l4hzjte6NL6fjRkSMfZ4BjySW9wmfdwPOtq3mXurzPvPGEf5Tw==} @@ -6837,10 +7842,18 @@ packages: randomfill@1.0.4: resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + raw-body@2.5.2: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} + raw-body@3.0.0: + resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} + engines: {node: '>= 0.8'} + rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true @@ -6853,25 +7866,28 @@ packages: react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + react-markdown@9.1.0: resolution: {integrity: sha512-xaijuJB0kzGiUdG7nc2MOMDUDBWPyGAjZtUrow9XxUeua8IqeP+VlIfAZ3bphpcLTnSZXz6z9jcVC/TCwbfgdw==} peerDependencies: '@types/react': '>=18' react: '>=18' - react-refresh@0.14.2: - resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + react-refresh@0.17.0: + resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} engines: {node: '>=0.10.0'} - react-router-dom@6.30.0: - resolution: {integrity: sha512-x30B78HV5tFk8ex0ITwzC9TTZMua4jGyA9IUlH1JLQYQTFyxr/ZxwOJq7evg1JX1qGVUcvhsmQSKdPncQrjTgA==} + react-router-dom@6.30.1: + resolution: {integrity: sha512-llKsgOkZdbPU1Eg3zK8lCn+sjD9wMRZZPuzmdWWX5SUs8OFkN5HnFVC0u5KMeMaC9aoancFI/KoLuKPqN+hxHw==} engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' react-dom: '>=16.8' - react-router@6.30.0: - resolution: {integrity: sha512-D3X8FyH9nBcTSHGdEKurK7r8OYE1kKFn3d/CF+CoxbSHkxU7o37+Uh7eAHRXr6k2tSExXYO++07PeXJtA/dEhQ==} + react-router@6.30.1: + resolution: {integrity: sha512-X1m21aEmxGXqENEPG3T6u0Th7g0aS4ZmoNynhbs+Cn+q+QGTLt+d5IQ2bHAXKzKcxGJjxACpVbnYQSCRcfxHlQ==} engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' @@ -6903,6 +7919,10 @@ packages: read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + read-yaml-file@1.1.0: + resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} + engines: {node: '>=6'} + readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} @@ -6947,12 +7967,6 @@ packages: regenerate@1.4.2: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - - regenerator-transform@0.15.2: - resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} - regexpu-core@6.2.0: resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==} engines: {node: '>=4'} @@ -7055,6 +8069,9 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + resolve@1.1.7: resolution: {integrity: sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==} @@ -7070,6 +8087,10 @@ packages: resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} engines: {node: '>=14.16'} + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + reusify@1.1.0: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -7088,9 +8109,15 @@ packages: resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} hasBin: true + ripemd160@2.0.1: + resolution: {integrity: sha512-J7f4wutN8mdbV08MJnXibYpCOPHR+yzy+iQ/AsjMv2j8cLavQ8VGagDFUwwTAdF8FmRKVeNpbTTEwNHCW1g94w==} + ripemd160@2.0.2: resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + risc0-ethereum@file:templates/default/lib/risc0-ethereum: + resolution: {directory: templates/default/lib/risc0-ethereum, type: directory} + rlp@2.2.7: resolution: {integrity: sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==} hasBin: true @@ -7098,11 +8125,15 @@ packages: robust-predicates@3.0.2: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} - rollup@4.40.0: - resolution: {integrity: sha512-Noe455xmA96nnqH5piFtLobsGbCij7Tu+tb3c1vYjNbTkfzGqXqQXG3wJaYXkRZuQ0vEYN4bhwg7QnIrqB5B+w==} + rollup@4.44.1: + resolution: {integrity: sha512-x8H8aPvD+xbl0Do8oez5f5o8eMS3trfCghc4HhLAnCkj7Vl0d1JWGs0UF/D886zLW2rOj2QymV/JcSSsw+XDNg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + router@2.2.0: + resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} + engines: {node: '>= 18'} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -7162,14 +8193,27 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.7.1: - resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} engines: {node: '>=10'} hasBin: true + send@1.2.0: + resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} + engines: {node: '>= 18'} + serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + serve-static@2.2.0: + resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} + engines: {node: '>= 18'} + set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} @@ -7193,8 +8237,8 @@ packages: shallowequal@1.1.0: resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} - sharp@0.34.1: - resolution: {integrity: sha512-1j0w61+eVxu7DawFJtnfYcvSv6qPFvfTaqzTQ2BLknVhHTwGS8sc63ZBF4rzkWMBVKybo4S5OBtDdZahh2A1xg==} + sharp@0.34.2: + resolution: {integrity: sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} shebang-command@1.2.0: @@ -7213,8 +8257,8 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shell-quote@1.8.2: - resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} + shell-quote@1.8.3: + resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} engines: {node: '>= 0.4'} shelljs@0.8.5: @@ -7241,6 +8285,9 @@ packages: resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -7265,6 +8312,10 @@ packages: snake-case@3.0.4: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + snarkjs@0.5.0: + resolution: {integrity: sha512-KWz8mZ2Y+6wvn6GGkQo6/ZlKwETdAGohd40Lzpwp5TUZCn6N6O4Az1SuX1rw/qREGL6Im+ycb19suCFE8/xaKA==} + hasBin: true + snarkjs@0.7.4: resolution: {integrity: sha512-x4cOCR4YXSyBlLtfnUUwfbZrw8wFd/Y0lk83eexJzKwZB8ELdpH+10ts8YtDsm2/a3WK7c7p514bbE8NpqxW8w==} hasBin: true @@ -7277,8 +8328,8 @@ packages: resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} engines: {node: '>=10.0.0'} - solady@0.1.13: - resolution: {integrity: sha512-AA/VFTwxihDxk/LE2oN5xBiwE1vQtvmqOl55EDH2RwMuqLmUH1aOEMoGLCO0jyPMBZ3qnvXKfg2oRKy6s7V/zg==} + solady@0.1.22: + resolution: {integrity: sha512-FuoNeri7rutbQc0+0MTPA8NQ03z8u4TmVT25cVY7jA8qldwO11fR05wksWuYHFeVWKaDcnPmpTxLn2gZli3Chw==} solady@0.1.4: resolution: {integrity: sha512-BQKpX9Ezdp6WpUcT3H7cWdZKH31Ih7yZiUOQ6SUYzJ6gYjCB0KXPg77bS+pzmeQEtdMNK56gjlaqtn6ptFPSXQ==} @@ -7294,12 +8345,12 @@ packages: prettier: ^3.0.0 prettier-plugin-solidity: ^1.0.0 - solhint@5.0.5: - resolution: {integrity: sha512-WrnG6T+/UduuzSWsSOAbfq1ywLUDwNea3Gd5hg6PS+pLUm8lz2ECNr0beX609clBxmDeZ3676AiA9nPDljmbJQ==} + solhint@5.1.0: + resolution: {integrity: sha512-KWg4gnOnznxHXzH0fUvnhnxnk+1R50GiPChcPeQgA7SKQTSF1LLIEh8R1qbkCEn/fFzz4CfJs+Gh7Rl9uhHy+g==} hasBin: true - solidity-coverage@0.8.14: - resolution: {integrity: sha512-ItAAObe5GaEOp20kXC2BZRnph+9P7Rtoqg2mQc2SXGEHgSDF2wWd1Wxz3ntzQWXkbCtIIGdJT918HG00cObwbA==} + solidity-coverage@0.8.16: + resolution: {integrity: sha512-qKqgm8TPpcnCK0HCDLJrjbOA2tQNEJY4dHX/LSSQ9iwYFS973MwjtgYn2Iv3vfCEQJTj5xtm4cuUMzlJsJSMbg==} hasBin: true peerDependencies: hardhat: ^2.11.0 @@ -7344,6 +8395,9 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + spawndamnit@3.0.1: + resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} + split-on-first@1.1.0: resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} engines: {node: '>=6'} @@ -7358,6 +8412,9 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + stacktrace-parser@0.1.11: resolution: {integrity: sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==} engines: {node: '>=6'} @@ -7369,6 +8426,13 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} + statuses@2.0.2: + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} + engines: {node: '>= 0.8'} + + std-env@3.9.0: + resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} + stream-browserify@3.0.0: resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} @@ -7386,6 +8450,10 @@ packages: resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} engines: {node: '>=4'} + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + string-format@2.0.0: resolution: {integrity: sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==} @@ -7401,6 +8469,10 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} @@ -7426,14 +8498,14 @@ packages: resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} engines: {node: '>=0.10.0'} + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + strip-eof@1.0.0: resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} engines: {node: '>=0.10.0'} - strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} @@ -7450,18 +8522,21 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + strip-literal@2.1.1: + resolution: {integrity: sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==} + strip-outer@1.0.1: resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==} engines: {node: '>=0.10.0'} - style-to-js@1.1.16: - resolution: {integrity: sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==} + style-to-js@1.1.17: + resolution: {integrity: sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==} style-to-object@0.4.4: resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} - style-to-object@1.0.8: - resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==} + style-to-object@1.0.9: + resolution: {integrity: sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==} style-value-types@5.0.0: resolution: {integrity: sha512-08yq36Ikn4kx4YU6RD7jWEv27v4V+PUsOGa4n/as8Et3CuODMJQ00ENeAVXAeydX4Z2j1XHZF1K2sX4mGl18fA==} @@ -7490,6 +8565,9 @@ packages: stylis@4.2.0: resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + stylis@4.3.6: + resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==} + sucrase@3.35.0: resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} engines: {node: '>=16 || 14 >=14.17'} @@ -7551,6 +8629,14 @@ packages: engines: {node: '>=14.0.0'} hasBin: true + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + + term-size@2.2.1: + resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} + engines: {node: '>=8'} + text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -7575,16 +8661,30 @@ packages: resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==} engines: {node: '>=0.6.0'} + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + tinycolor2@1.6.0: resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} - tinyglobby@0.2.12: - resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + tinyglobby@0.2.14: + resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} tinygradient@1.1.5: resolution: {integrity: sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==} + tinypool@0.8.4: + resolution: {integrity: sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==} + engines: {node: '>=14.0.0'} + + tinyspy@2.2.1: + resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} + engines: {node: '>=14.0.0'} + title@3.5.3: resolution: {integrity: sha512-20JyowYglSEeCvZv3EZ0nZ046vLarO37prvV0mbtQV7C8DJPGgN967r8SJkqd3XK3K3lD3/Iyfp3avjfil8Q2Q==} hasBin: true @@ -7593,10 +8693,21 @@ packages: resolution: {integrity: sha512-TARUb7z1pGvlLxgPk++7wJ6aycXF3GJ0sNSBTAsTuJrQG5QuZlkUQP+zl+nbjAh4gMX9yDw9ZYklMd7vAfJKEw==} engines: {node: '>=0.10.0'} + tmp-promise@3.0.3: + resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} + tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} + tmp@0.2.3: + resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} + engines: {node: '>=14.14'} + + to-buffer@1.2.1: + resolution: {integrity: sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==} + engines: {node: '>= 0.4'} + to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} @@ -7639,7 +8750,7 @@ packages: resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} engines: {node: '>=16'} peerDependencies: - typescript: '>=4.2.0' + typescript: 5.8.3 ts-command-line-args@2.5.1: resolution: {integrity: sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==} @@ -7655,7 +8766,7 @@ packages: ts-essentials@7.0.3: resolution: {integrity: sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==} peerDependencies: - typescript: '>=3.7.0' + typescript: 5.8.3 ts-generator@0.1.1: resolution: {integrity: sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ==} @@ -7670,20 +8781,20 @@ packages: peerDependencies: '@swc/core': '>=1.2.50' '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' + '@types/node': 22.7.5 + typescript: 5.8.3 peerDependenciesMeta: '@swc/core': optional: true '@swc/wasm': optional: true - tsconfck@3.1.5: - resolution: {integrity: sha512-CLDfGgUp7XPswWnezWwsCRxNmgQjhYq3VXHM0/XIRxhVrKw0M1if9agzryh1QS3nxjCROvV+xWxoJO1YctzzWg==} + tsconfck@3.1.6: + resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==} engines: {node: ^18 || >=20} hasBin: true peerDependencies: - typescript: ^5.0.0 + typescript: 5.8.3 peerDependenciesMeta: typescript: optional: true @@ -7700,15 +8811,15 @@ packages: tsort@0.0.1: resolution: {integrity: sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==} - tsup@8.0.2: - resolution: {integrity: sha512-NY8xtQXdH7hDUAZwcQdY/Vzlw9johQsaqf7iwZ6g1DOUlFYQ5/AtVAjTvihhEyeRlGo4dLRVHtrRaL35M1daqQ==} + tsup@8.5.0: + resolution: {integrity: sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ==} engines: {node: '>=18'} hasBin: true peerDependencies: '@microsoft/api-extractor': ^7.36.0 '@swc/core': ^1 postcss: ^8.4.12 - typescript: '>=4.5.0' + typescript: 5.8.3 peerDependenciesMeta: '@microsoft/api-extractor': optional: true @@ -7719,15 +8830,14 @@ packages: typescript: optional: true + tsx@4.20.3: + resolution: {integrity: sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ==} + engines: {node: '>=18.0.0'} + hasBin: true + tty-browserify@0.0.1: resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} - tweetnacl-util@0.15.1: - resolution: {integrity: sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==} - - tweetnacl@1.0.3: - resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} - type-check@0.3.2: resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} engines: {node: '>= 0.8.0'} @@ -7756,22 +8866,28 @@ packages: resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} engines: {node: '>=10'} + type-is@2.0.1: + resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} + engines: {node: '>= 0.6'} + typechain@8.3.2: resolution: {integrity: sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==} hasBin: true peerDependencies: - typescript: '>=4.3.0' + typescript: 5.8.3 + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-rpc@6.1.1: + resolution: {integrity: sha512-PZCwvDWNyXHp5ZuHJqixU59jw+61JIL95jkW71VUXPJagYRJtpmRdFdIF3EL5tEz6XHLaBtrqgJEBysHIu4vOw==} typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - typescript@5.5.4: - resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} - engines: {node: '>=14.17'} - hasBin: true - - typescript@5.8.2: - resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} + typescript@5.8.3: + resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} engines: {node: '>=14.17'} hasBin: true @@ -7800,9 +8916,6 @@ packages: underscore@1.12.1: resolution: {integrity: sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==} - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} @@ -7898,8 +9011,8 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - unstorage@1.15.0: - resolution: {integrity: sha512-m40eHdGY/gA6xAPqo8eaxqXgBuzQTlAKfmB1iF7oCKXE1HfwHwzDJBywK+qQGn52dta+bPlZluPF7++yR3p/bg==} + unstorage@1.16.0: + resolution: {integrity: sha512-WQ37/H5A7LcRPWfYOrDa1Ys02xAbpPJq6q5GkO88FBXVSQzHd7+BjEwfRqyaSWCv9MbsJy058GWjjPjcJ16GGA==} peerDependencies: '@azure/app-configuration': ^1.8.0 '@azure/cosmos': ^4.2.0 @@ -7907,7 +9020,7 @@ packages: '@azure/identity': ^4.6.0 '@azure/keyvault-secrets': ^4.9.0 '@azure/storage-blob': ^12.26.0 - '@capacitor/preferences': ^6.0.3 + '@capacitor/preferences': ^6.0.3 || ^7.0.0 '@deno/kv': '>=0.9.0' '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 '@planetscale/database': ^1.19.0 @@ -8019,8 +9132,8 @@ packages: v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - valtio@1.11.2: - resolution: {integrity: sha512-1XfIxnUXzyswPAPXo1P3Pdx2mq/pIqZICkWN60Hby0d9Iqb+MEIpqgYVlbflvHdrp2YR/q3jyKWRPJJ100yxaw==} + valtio@1.13.2: + resolution: {integrity: sha512-Qik0o+DSy741TmkqmRfjq+0xpZBXi/Y6+fXZLn0xNF1z/waFMbE3rkivv5Zcf9RrMUp6zswf2J7sbh2KBlba5A==} engines: {node: '>=12.20.0'} peerDependencies: '@types/react': '>=16.8' @@ -8031,6 +9144,10 @@ packages: react: optional: true + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + vfile-location@5.0.3: resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} @@ -8049,36 +9166,26 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - viem@2.23.2: - resolution: {integrity: sha512-NVmW/E0c5crMOtbEAqMF0e3NmvQykFXhLOc/CkLIXOlzHSA6KXVz3CYVmaKqBF8/xtjsjHAGjdJN3Ru1kFJLaA==} - peerDependencies: - typescript: '>=5.0.4' - peerDependenciesMeta: - typescript: - optional: true - - viem@2.27.0: - resolution: {integrity: sha512-pKw2dcwDi6TaWlTzLHYazOgjO1GgbUpE1zdLsLNSiCjHNrMTpL/teL0wVHnJDLiB2tR5CL19LBqefYNtRUkH5Q==} + viem@2.30.6: + resolution: {integrity: sha512-N3vGy3pZ+EVgQRuWqQhZPFXxQE8qMRrBd3uM+KLc1Ub2w6+vkyr7umeWQCM4c+wlsCdByUgh2630MDMLquMtpg==} peerDependencies: - typescript: '>=5.0.4' + typescript: 5.8.3 peerDependenciesMeta: typescript: optional: true - viem@2.7.14: - resolution: {integrity: sha512-5b1KB1gXli02GOQHZIUsRluNUwssl2t4hqdFAzyWPwJ744N83jAOBOjOkrGz7K3qMIv9b0GQt3DoZIErSQTPkQ==} - peerDependencies: - typescript: '>=5.0.4' - peerDependenciesMeta: - typescript: - optional: true + vite-node@1.6.1: + resolution: {integrity: sha512-YAXkfvGtuTzwWbDSACdJSg4A4DZiAqckWe90Zapc/sEX3XvHcw1NdurM/6od8J207tSDqNbSsgdCacBgvJKFuA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true - viem@2.9.9: - resolution: {integrity: sha512-SUIHBL6M5IIlqDCMEQwAAvHzeglaM4FEqM6bCI+srLXtFYmrpV4tWhnpobQRNwh4f7HIksmKLLZ+cytv8FfnJQ==} + vite-plugin-dts@4.5.4: + resolution: {integrity: sha512-d4sOM8M/8z7vRXHHq/ebbblfaxENjogAAekcfcDCCwAyvGqnPrc7f4NZbvItS+g4WTgerW0xDwSz5qz11JT3vg==} peerDependencies: - typescript: '>=5.0.4' + typescript: 5.8.3 + vite: '*' peerDependenciesMeta: - typescript: + vite: optional: true vite-plugin-node-polyfills@0.22.0: @@ -8104,12 +9211,12 @@ packages: vite: optional: true - vite@5.4.18: - resolution: {integrity: sha512-1oDcnEp3lVyHCuQ2YFelM4Alm2o91xNoMncRm1U7S+JdYfYOvbiGZ3/CxGttrOu2M/KcGz7cRC2DoNUA6urmMA==} + vite@5.4.19: + resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 + '@types/node': 22.7.5 less: '*' lightningcss: ^1.21.0 sass: '*' @@ -8135,43 +9242,124 @@ packages: terser: optional: true - vm-browserify@1.1.2: - resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} - - vscode-oniguruma@1.7.0: - resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} - - vscode-textmate@8.0.0: - resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} - - wagmi@2.14.16: - resolution: {integrity: sha512-njOPvB8L0+jt3m1FTJiVF44T1u+kcjLtVWKvwI0mZnIesZTQZ/xDF0M/NHj3Uljyn3qJw3pyHjJe31NC+VVHMA==} + vite@6.3.5: + resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true peerDependencies: - '@tanstack/react-query': '>=5.0.0' - react: '>=18' - typescript: '>=5.0.4' - viem: 2.x - peerDependenciesMeta: - typescript: - optional: true + '@types/node': 22.7.5 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest@1.6.1: + resolution: {integrity: sha512-Ljb1cnSJSivGN0LqXd/zmDbWEM0RNNg2t1QW/XUhYl/qPqyu7CsqeWtqQXHVaJsecLPuDoak2oJcZN2QoRIOag==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/node': 22.7.5 + '@vitest/browser': 1.6.1 + '@vitest/ui': 1.6.1 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + vm-browserify@1.1.2: + resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} + + vscode-oniguruma@1.7.0: + resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} + + vscode-textmate@8.0.0: + resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} + + vscode-uri@3.1.0: + resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + + wagmi@2.15.6: + resolution: {integrity: sha512-tR4tm+7eE0UloQe1oi4hUIjIDyjv5ImQlzq/QcvvfJYWF/EquTfGrmht6+nTYGCIeSzeEvbK90KgWyNqa+HD7Q==} + peerDependencies: + '@tanstack/react-query': '>=5.0.0' + react: '>=18' + typescript: 5.8.3 + viem: 2.30.6 + peerDependenciesMeta: + typescript: + optional: true wait-on@8.0.3: resolution: {integrity: sha512-nQFqAFzZDeRxsu7S3C7LbuxslHhk+gnJZHyethuGKAn2IVleIbTB9I3vJSQiSR+DifUqmdzfPMoMPJfLqMF2vw==} engines: {node: '>=12.0.0'} hasBin: true + wasm-pack@0.13.1: + resolution: {integrity: sha512-P9exD4YkjpDbw68xUhF3MDm/CC/3eTmmthyG5bHJ56kalxOTewOunxTke4SyF8MTXV6jUtNjXggPgrGmMtczGg==} + hasBin: true + wasmbuilder@0.0.16: resolution: {integrity: sha512-Qx3lEFqaVvp1cEYW7Bfi+ebRJrOiwz2Ieu7ZG2l7YyeSJIok/reEQCQCuicj/Y32ITIJuGIM9xZQppGx5LrQdA==} + wasmcurves@0.2.0: + resolution: {integrity: sha512-3e2rbxdujOwaod657gxgmdhZNn+i1qKdHO3Y/bK+8E7bV8ttV/fu5FO4/WLBACF375cK0QDLOP+65Na63qYuWA==} + wasmcurves@0.2.2: resolution: {integrity: sha512-JRY908NkmKjFl4ytnTu5ED6AwPD+8VJ9oc94kdq7h5bIwbj0L4TDJ69mG+2aLs2SoCmGfqIesMWTEJjtYsoQXQ==} + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} web-worker@1.2.0: resolution: {integrity: sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==} + web-worker@1.5.0: + resolution: {integrity: sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==} + web3-utils@1.10.4: resolution: {integrity: sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==} engines: {node: '>=8.0.0'} @@ -8207,6 +9395,11 @@ packages: engines: {node: '>= 8'} hasBin: true + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + widest-line@3.1.0: resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} engines: {node: '>=8'} @@ -8237,6 +9430,10 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} + wrap-ansi@9.0.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + engines: {node: '>=18'} + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -8252,18 +9449,6 @@ packages: utf-8-validate: optional: true - ws@8.13.0: - resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - ws@8.17.1: resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} engines: {node: '>=10.0.0'} @@ -8288,8 +9473,8 @@ packages: utf-8-validate: optional: true - ws@8.18.1: - resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==} + ws@8.18.2: + resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -8324,13 +9509,16 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} - yaml@2.7.1: - resolution: {integrity: sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==} - engines: {node: '>= 14'} + yaml@2.8.0: + resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==} + engines: {node: '>= 14.6'} hasBin: true yargs-parser@18.1.3: @@ -8345,6 +9533,10 @@ packages: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} + yargs-parser@22.0.0: + resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + yargs-unparser@2.0.0: resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} engines: {node: '>=10'} @@ -8361,6 +9553,10 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} + yargs@18.0.0: + resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} @@ -8369,6 +9565,14 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + yocto-queue@1.2.1: + resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} + engines: {node: '>=12.20'} + + yoctocolors-cjs@2.1.2: + resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} + engines: {node: '>=18'} + zksync-ethers@5.10.0: resolution: {integrity: sha512-OAjTGAHF9wbdkRGkj7XZuF/a1Sk/FVbwH4pmLjAKlR7mJ7sQtQhBhrPU2dCc67xLaNvEESPfwil19ES5wooYFg==} engines: {node: '>=16.0.0'} @@ -8378,8 +9582,8 @@ packages: zod@3.22.4: resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} - zod@3.24.4: - resolution: {integrity: sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==} + zod@3.25.67: + resolution: {integrity: sha512-idA2YXwpCdqUSKRCACDE6ItZD9TZzy3OZMtpfLoh6oPR47lipysRrJfjzMqFxQ3uJuUPyUeWe1r9vLH33xO/Qw==} zustand@5.0.0: resolution: {integrity: sha512-LE+VcmbartOPM+auOjCCLQOsQ05zUTp8RkgwRzefUk+2jISdMMFnxvyTjA4YNWr5ZGXYbVsEMZosttuxUBkojQ==} @@ -8404,10 +9608,10 @@ packages: snapshots: - '@adraffy/ens-normalize@1.10.0': {} - '@adraffy/ens-normalize@1.10.1': {} + '@adraffy/ens-normalize@1.11.0': {} + '@alloc/quick-lru@5.2.0': {} '@ampproject/remapping@2.3.0': @@ -8415,28 +9619,50 @@ snapshots: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - '@babel/code-frame@7.26.2': + '@aztec/bb.js@0.82.2': + dependencies: + comlink: 4.4.2 + commander: 12.1.0 + debug: 4.4.1(supports-color@5.5.0) + fflate: 0.8.2 + pako: 2.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@aztec/bb.js@0.82.3': + dependencies: + comlink: 4.4.2 + commander: 12.1.0 + debug: 4.4.1(supports-color@5.5.0) + fflate: 0.8.2 + pako: 2.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@babel/code-frame@7.27.1': dependencies: - '@babel/helper-validator-identifier': 7.25.9 + '@babel/helper-validator-identifier': 7.27.1 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.26.8': {} + '@babel/compat-data@7.27.7': {} - '@babel/core@7.26.10': + '@babel/core@7.27.7': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.27.0 - '@babel/helper-compilation-targets': 7.27.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) - '@babel/helpers': 7.27.0 - '@babel/parser': 7.27.0 - '@babel/template': 7.27.0 - '@babel/traverse': 7.27.0(supports-color@5.5.0) - '@babel/types': 7.27.0 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.27.5 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.7) + '@babel/helpers': 7.27.6 + '@babel/parser': 7.27.7 + '@babel/template': 7.27.2 + '@babel/traverse': 7.27.7(supports-color@5.5.0) + '@babel/types': 7.27.7 convert-source-map: 2.0.0 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.1(supports-color@5.5.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -8445,56 +9671,56 @@ snapshots: '@babel/generator@7.17.7': dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.17.0 jsesc: 2.5.2 source-map: 0.5.7 - '@babel/generator@7.27.0': + '@babel/generator@7.27.5': dependencies: - '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 + '@babel/parser': 7.27.7 + '@babel/types': 7.27.7 '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 - '@babel/helper-annotate-as-pure@7.25.9': + '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.27.7 - '@babel/helper-compilation-targets@7.27.0': + '@babel/helper-compilation-targets@7.27.2': dependencies: - '@babel/compat-data': 7.26.8 - '@babel/helper-validator-option': 7.25.9 - browserslist: 4.24.4 + '@babel/compat-data': 7.27.7 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.25.1 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.27.0(@babel/core@7.26.10)': + '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-member-expression-to-functions': 7.25.9 - '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10) - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/traverse': 7.27.0(supports-color@5.5.0) + '@babel/core': 7.27.7 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.7) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.27.7(supports-color@5.5.0) semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.27.0(@babel/core@7.26.10)': + '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/core': 7.27.7 + '@babel/helper-annotate-as-pure': 7.27.3 regexpu-core: 6.2.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.26.10)': + '@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-compilation-targets': 7.27.0 - '@babel/helper-plugin-utils': 7.26.5 - debug: 4.4.0(supports-color@5.5.0) + '@babel/core': 7.27.7 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + debug: 4.4.1(supports-color@5.5.0) lodash.debounce: 4.0.8 resolve: 1.22.10 transitivePeerDependencies: @@ -8502,734 +9728,884 @@ snapshots: '@babel/helper-environment-visitor@7.24.7': dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.27.7 '@babel/helper-function-name@7.24.7': dependencies: - '@babel/template': 7.27.0 - '@babel/types': 7.27.0 + '@babel/template': 7.27.2 + '@babel/types': 7.27.7 '@babel/helper-hoist-variables@7.24.7': dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.27.7 - '@babel/helper-member-expression-to-functions@7.25.9': + '@babel/helper-member-expression-to-functions@7.27.1': dependencies: - '@babel/traverse': 7.27.0(supports-color@5.5.0) - '@babel/types': 7.27.0 + '@babel/traverse': 7.27.7(supports-color@5.5.0) + '@babel/types': 7.27.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-imports@7.25.9(supports-color@5.5.0)': + '@babel/helper-module-imports@7.27.1(supports-color@5.5.0)': dependencies: - '@babel/traverse': 7.27.0(supports-color@5.5.0) - '@babel/types': 7.27.0 + '@babel/traverse': 7.27.7(supports-color@5.5.0) + '@babel/types': 7.27.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)': + '@babel/helper-module-transforms@7.27.3(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.27.0(supports-color@5.5.0) + '@babel/core': 7.27.7 + '@babel/helper-module-imports': 7.27.1(supports-color@5.5.0) + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.27.7(supports-color@5.5.0) transitivePeerDependencies: - supports-color - '@babel/helper-optimise-call-expression@7.25.9': + '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.27.7 - '@babel/helper-plugin-utils@7.26.5': {} + '@babel/helper-plugin-utils@7.27.1': {} - '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.10)': + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-wrap-function': 7.25.9 - '@babel/traverse': 7.27.0(supports-color@5.5.0) + '@babel/core': 7.27.7 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-wrap-function': 7.27.1 + '@babel/traverse': 7.27.7(supports-color@5.5.0) transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.10)': + '@babel/helper-replace-supers@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-member-expression-to-functions': 7.25.9 - '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/traverse': 7.27.0(supports-color@5.5.0) + '@babel/core': 7.27.7 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.27.7(supports-color@5.5.0) transitivePeerDependencies: - supports-color - '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: - '@babel/traverse': 7.27.0(supports-color@5.5.0) - '@babel/types': 7.27.0 + '@babel/traverse': 7.27.7(supports-color@5.5.0) + '@babel/types': 7.27.7 transitivePeerDependencies: - supports-color '@babel/helper-split-export-declaration@7.24.7': dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.27.7 - '@babel/helper-string-parser@7.25.9': {} + '@babel/helper-string-parser@7.27.1': {} - '@babel/helper-validator-identifier@7.25.9': {} + '@babel/helper-validator-identifier@7.27.1': {} - '@babel/helper-validator-option@7.25.9': {} + '@babel/helper-validator-option@7.27.1': {} - '@babel/helper-wrap-function@7.25.9': + '@babel/helper-wrap-function@7.27.1': dependencies: - '@babel/template': 7.27.0 - '@babel/traverse': 7.27.0(supports-color@5.5.0) - '@babel/types': 7.27.0 + '@babel/template': 7.27.2 + '@babel/traverse': 7.27.7(supports-color@5.5.0) + '@babel/types': 7.27.7 transitivePeerDependencies: - supports-color - '@babel/helpers@7.27.0': + '@babel/helpers@7.27.6': dependencies: - '@babel/template': 7.27.0 - '@babel/types': 7.27.0 + '@babel/template': 7.27.2 + '@babel/types': 7.27.7 - '@babel/parser@7.27.0': + '@babel/parser@7.27.7': dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.27.7 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.27.0(supports-color@5.5.0) + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.27.7(supports-color@5.5.0) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.10) + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.7) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.27.0(supports-color@5.5.0) + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.27.7(supports-color@5.5.0) transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.10)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 + '@babel/core': 7.27.7 - '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.10)': + '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.10)': + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.10)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-async-generator-functions@7.26.8(@babel/core@7.26.10)': + '@babel/plugin-transform-async-generator-functions@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.10) - '@babel/traverse': 7.27.0(supports-color@5.5.0) + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.7) + '@babel/traverse': 7.27.7(supports-color@5.5.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.10) + '@babel/core': 7.27.7 + '@babel/helper-module-imports': 7.27.1(supports-color@5.5.0) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.7) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.26.10)': + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-block-scoping@7.27.0(@babel/core@7.26.10)': + '@babel/plugin-transform-block-scoping@7.27.5(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.10)': + '@babel/plugin-transform-class-static-block@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-classes@7.27.7(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-compilation-targets': 7.27.0 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10) - '@babel/traverse': 7.27.0(supports-color@5.5.0) + '@babel/core': 7.27.7 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.7) + '@babel/traverse': 7.27.7(supports-color@5.5.0) globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/template': 7.27.0 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/template': 7.27.2 - '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-destructuring@7.27.7(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.27.7(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.26.10)': + '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-for-of@7.26.9(@babel/core@7.26.10)': + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-compilation-targets': 7.27.0 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.27.0(supports-color@5.5.0) + '@babel/core': 7.27.7 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.27.7(supports-color@5.5.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.7) + '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.10)': + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.7) + '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.27.0(supports-color@5.5.0) + '@babel/core': 7.27.7 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.7) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.27.7(supports-color@5.5.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.7) + '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-nullish-coalescing-operator@7.26.6(@babel/core@7.26.10)': + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-object-rest-spread@7.27.7(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-compilation-targets': 7.27.0 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.10) + '@babel/core': 7.27.7 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-destructuring': 7.27.7(@babel/core@7.27.7) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.27.7) + '@babel/traverse': 7.27.7(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10) + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.7) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-constant-elements@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-react-constant-elements@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-react-display-name@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx-development@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.10) + '@babel/core': 7.27.7 + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.27.7) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10) - '@babel/types': 7.27.0 + '@babel/core': 7.27.7 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-module-imports': 7.27.1(supports-color@5.5.0) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.7) + '@babel/types': 7.27.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-pure-annotations@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-regenerator@7.27.0(@babel/core@7.26.10)': + '@babel/plugin-transform-regenerator@7.27.5(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - regenerator-transform: 0.15.2 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.10)': + '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-spread@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-template-literals@7.26.8(@babel/core@7.26.10)': + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-typeof-symbol@7.27.0(@babel/core@7.26.10)': + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-typescript@7.27.0(@babel/core@7.26.10)': + '@babel/plugin-transform-typescript@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.10) + '@babel/core': 7.27.7 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.7) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.10)': - dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.10)': - dependencies: - '@babel/core': 7.26.10 - '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.10)': - dependencies: - '@babel/core': 7.26.10 - '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.10)': - dependencies: - '@babel/core': 7.26.10 - '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/preset-env@7.26.9(@babel/core@7.26.10)': - dependencies: - '@babel/compat-data': 7.26.8 - '@babel/core': 7.26.10 - '@babel/helper-compilation-targets': 7.27.0 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-validator-option': 7.25.9 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.10) - '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.10) - '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.10) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.10) - '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-async-generator-functions': 7.26.8(@babel/core@7.26.10) - '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-block-scoped-functions': 7.26.5(@babel/core@7.26.10) - '@babel/plugin-transform-block-scoping': 7.27.0(@babel/core@7.26.10) - '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.26.10) - '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.26.10) - '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-for-of': 7.26.9(@babel/core@7.26.10) - '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.10) - '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.26.10) - '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-regenerator': 7.27.0(@babel/core@7.26.10) - '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.26.10) - '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-template-literals': 7.26.8(@babel/core@7.26.10) - '@babel/plugin-transform-typeof-symbol': 7.27.0(@babel/core@7.26.10) - '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.26.10) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.10) - babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.26.10) - babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.26.10) - babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.26.10) - core-js-compat: 3.41.0 + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.27.7)': + dependencies: + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.27.7)': + dependencies: + '@babel/core': 7.27.7 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.27.7)': + dependencies: + '@babel/core': 7.27.7 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.27.7)': + dependencies: + '@babel/core': 7.27.7 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/preset-env@7.27.2(@babel/core@7.27.7)': + dependencies: + '@babel/compat-data': 7.27.7 + '@babel/core': 7.27.7 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.7) + '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.27.7) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-async-generator-functions': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-block-scoping': 7.27.5(@babel/core@7.27.7) + '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-class-static-block': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-classes': 7.27.7(@babel/core@7.27.7) + '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-destructuring': 7.27.7(@babel/core@7.27.7) + '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-object-rest-spread': 7.27.7(@babel/core@7.27.7) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.27.7) + '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-regenerator': 7.27.5(@babel/core@7.27.7) + '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.27.7) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.27.7) + babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.27.7) + babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.27.7) + babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.27.7) + core-js-compat: 3.43.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.10)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/types': 7.27.0 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/types': 7.27.7 esutils: 2.0.3 - '@babel/preset-react@7.26.3(@babel/core@7.26.10)': + '@babel/preset-react@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-validator-option': 7.25.9 - '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-react-jsx-development': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-react-pure-annotations': 7.25.9(@babel/core@7.26.10) + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-transform-react-display-name': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.27.7) transitivePeerDependencies: - supports-color - '@babel/preset-typescript@7.27.0(@babel/core@7.26.10)': + '@babel/preset-typescript@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-validator-option': 7.25.9 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.10) - '@babel/plugin-transform-typescript': 7.27.0(@babel/core@7.26.10) + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.27.7) transitivePeerDependencies: - supports-color - '@babel/runtime@7.27.0': - dependencies: - regenerator-runtime: 0.14.1 + '@babel/runtime@7.27.6': {} - '@babel/template@7.27.0': + '@babel/template@7.27.2': dependencies: - '@babel/code-frame': 7.26.2 - '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.27.7 + '@babel/types': 7.27.7 '@babel/traverse@7.23.2': dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.27.0 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.27.5 '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-function-name': 7.24.7 '@babel/helper-hoist-variables': 7.24.7 '@babel/helper-split-export-declaration': 7.24.7 - '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 - debug: 4.4.0(supports-color@5.5.0) + '@babel/parser': 7.27.7 + '@babel/types': 7.27.7 + debug: 4.4.1(supports-color@5.5.0) globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/traverse@7.27.0(supports-color@5.5.0)': + '@babel/traverse@7.27.7(supports-color@5.5.0)': dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.27.0 - '@babel/parser': 7.27.0 - '@babel/template': 7.27.0 - '@babel/types': 7.27.0 - debug: 4.4.0(supports-color@5.5.0) + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.27.5 + '@babel/parser': 7.27.7 + '@babel/template': 7.27.2 + '@babel/types': 7.27.7 + debug: 4.4.1(supports-color@5.5.0) globals: 11.12.0 transitivePeerDependencies: - supports-color '@babel/types@7.17.0': dependencies: - '@babel/helper-validator-identifier': 7.25.9 + '@babel/helper-validator-identifier': 7.27.1 to-fast-properties: 2.0.0 - '@babel/types@7.27.0': + '@babel/types@7.27.7': dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 '@braintree/sanitize-url@6.0.4': {} + '@changesets/apply-release-plan@7.0.12': + dependencies: + '@changesets/config': 3.1.1 + '@changesets/get-version-range-type': 0.4.0 + '@changesets/git': 3.0.4 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + detect-indent: 6.1.0 + fs-extra: 7.0.1 + lodash.startcase: 4.4.0 + outdent: 0.5.0 + prettier: 2.8.8 + resolve-from: 5.0.0 + semver: 7.7.2 + + '@changesets/assemble-release-plan@6.0.9': + dependencies: + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.3 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + semver: 7.7.2 + + '@changesets/changelog-git@0.2.1': + dependencies: + '@changesets/types': 6.1.0 + + '@changesets/cli@2.29.5': + dependencies: + '@changesets/apply-release-plan': 7.0.12 + '@changesets/assemble-release-plan': 6.0.9 + '@changesets/changelog-git': 0.2.1 + '@changesets/config': 3.1.1 + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.3 + '@changesets/get-release-plan': 4.0.13 + '@changesets/git': 3.0.4 + '@changesets/logger': 0.1.1 + '@changesets/pre': 2.0.2 + '@changesets/read': 0.6.5 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 + '@changesets/write': 0.4.0 + '@manypkg/get-packages': 1.1.3 + ansi-colors: 4.1.3 + ci-info: 3.9.0 + enquirer: 2.4.1 + external-editor: 3.1.0 + fs-extra: 7.0.1 + mri: 1.2.0 + p-limit: 2.3.0 + package-manager-detector: 0.2.11 + picocolors: 1.1.1 + resolve-from: 5.0.0 + semver: 7.7.2 + spawndamnit: 3.0.1 + term-size: 2.2.1 + + '@changesets/config@3.1.1': + dependencies: + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.3 + '@changesets/logger': 0.1.1 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + micromatch: 4.0.8 + + '@changesets/errors@0.2.0': + dependencies: + extendable-error: 0.1.7 + + '@changesets/get-dependents-graph@2.1.3': + dependencies: + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + picocolors: 1.1.1 + semver: 7.7.2 + + '@changesets/get-release-plan@4.0.13': + dependencies: + '@changesets/assemble-release-plan': 6.0.9 + '@changesets/config': 3.1.1 + '@changesets/pre': 2.0.2 + '@changesets/read': 0.6.5 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + + '@changesets/get-version-range-type@0.4.0': {} + + '@changesets/git@3.0.4': + dependencies: + '@changesets/errors': 0.2.0 + '@manypkg/get-packages': 1.1.3 + is-subdir: 1.2.0 + micromatch: 4.0.8 + spawndamnit: 3.0.1 + + '@changesets/logger@0.1.1': + dependencies: + picocolors: 1.1.1 + + '@changesets/parse@0.4.1': + dependencies: + '@changesets/types': 6.1.0 + js-yaml: 3.14.1 + + '@changesets/pre@2.0.2': + dependencies: + '@changesets/errors': 0.2.0 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + + '@changesets/read@0.6.5': + dependencies: + '@changesets/git': 3.0.4 + '@changesets/logger': 0.1.1 + '@changesets/parse': 0.4.1 + '@changesets/types': 6.1.0 + fs-extra: 7.0.1 + p-filter: 2.1.0 + picocolors: 1.1.1 + + '@changesets/should-skip-package@0.1.2': + dependencies: + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + + '@changesets/types@4.1.0': {} + + '@changesets/types@6.1.0': {} + + '@changesets/write@0.4.0': + dependencies: + '@changesets/types': 6.1.0 + fs-extra: 7.0.1 + human-id: 4.1.1 + prettier: 2.8.8 + '@coinbase/wallet-sdk@3.9.3': dependencies: - bn.js: 5.2.1 + bn.js: 5.2.2 buffer: 6.0.3 clsx: 1.2.1 eth-block-tracker: 7.1.0 eth-json-rpc-filters: 6.0.1 eventemitter3: 5.0.1 keccak: 3.0.4 - preact: 10.26.5 + preact: 10.26.9 sha.js: 2.4.11 transitivePeerDependencies: - supports-color - '@coinbase/wallet-sdk@4.3.0': + '@coinbase/wallet-sdk@4.3.3': dependencies: - '@noble/hashes': 1.7.1 + '@noble/hashes': 1.8.0 clsx: 1.2.1 eventemitter3: 5.0.1 - preact: 10.26.5 + preact: 10.26.9 '@colors/colors@1.5.0': optional: true + '@commander-js/extra-typings@12.1.0(commander@13.1.0)': + dependencies: + commander: 13.1.0 + '@cspotcode/source-map-support@0.8.1': dependencies: '@jridgewell/trace-mapping': 0.3.9 - '@depay/solana-web3.js@1.98.1': + '@depay/solana-web3.js@1.98.2': dependencies: bs58: 5.0.0 - '@depay/web3-blockchains@9.8.2': {} + '@depay/web3-blockchains@9.8.6': {} - '@depay/web3-client@10.18.6(@depay/solana-web3.js@1.98.1)(@depay/web3-blockchains@9.8.2)(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@depay/web3-client@10.18.6(@depay/solana-web3.js@1.98.2)(@depay/web3-blockchains@9.8.6)(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: - '@depay/solana-web3.js': 1.98.1 - '@depay/web3-blockchains': 9.8.2 + '@depay/solana-web3.js': 1.98.2 + '@depay/web3-blockchains': 9.8.6 ethers: 5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@depay/web3-mock-evm@14.19.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: - '@depay/web3-blockchains': 9.8.2 + '@depay/web3-blockchains': 9.8.6 ethers: 5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil @@ -9237,16 +10613,16 @@ snapshots: '@depay/web3-mock@14.19.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: - '@depay/solana-web3.js': 1.98.1 - '@depay/web3-blockchains': 9.8.2 + '@depay/solana-web3.js': 1.98.2 + '@depay/web3-blockchains': 9.8.6 ethers: 5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate - '@ecies/ciphers@0.2.3(@noble/ciphers@1.2.1)': + '@ecies/ciphers@0.2.3(@noble/ciphers@1.3.0)': dependencies: - '@noble/ciphers': 1.2.1 + '@noble/ciphers': 1.3.0 '@emnapi/runtime@1.4.3': dependencies: @@ -9255,8 +10631,8 @@ snapshots: '@emotion/babel-plugin@11.13.5': dependencies: - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) - '@babel/runtime': 7.27.0 + '@babel/helper-module-imports': 7.27.1(supports-color@5.5.0) + '@babel/runtime': 7.27.6 '@emotion/hash': 0.9.2 '@emotion/memoize': 0.9.0 '@emotion/serialize': 1.3.3 @@ -9293,9 +10669,9 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.14.0(@types/react@18.3.20)(react@18.3.1)': + '@emotion/react@11.14.0(@types/react@18.3.23)(react@18.3.1)': dependencies: - '@babel/runtime': 7.27.0 + '@babel/runtime': 7.27.6 '@emotion/babel-plugin': 11.13.5 '@emotion/cache': 11.14.0 '@emotion/serialize': 1.3.3 @@ -9305,7 +10681,7 @@ snapshots: hoist-non-react-statics: 3.3.2 react: 18.3.1 optionalDependencies: - '@types/react': 18.3.20 + '@types/react': 18.3.23 transitivePeerDependencies: - supports-color @@ -9333,16 +10709,13 @@ snapshots: '@emotion/weak-memoize@0.4.0': {} - '@esbuild/aix-ppc64@0.19.12': - optional: true - '@esbuild/aix-ppc64@0.20.0': optional: true '@esbuild/aix-ppc64@0.21.5': optional: true - '@esbuild/android-arm64@0.19.12': + '@esbuild/aix-ppc64@0.25.6': optional: true '@esbuild/android-arm64@0.20.0': @@ -9351,7 +10724,7 @@ snapshots: '@esbuild/android-arm64@0.21.5': optional: true - '@esbuild/android-arm@0.19.12': + '@esbuild/android-arm64@0.25.6': optional: true '@esbuild/android-arm@0.20.0': @@ -9360,7 +10733,7 @@ snapshots: '@esbuild/android-arm@0.21.5': optional: true - '@esbuild/android-x64@0.19.12': + '@esbuild/android-arm@0.25.6': optional: true '@esbuild/android-x64@0.20.0': @@ -9369,7 +10742,7 @@ snapshots: '@esbuild/android-x64@0.21.5': optional: true - '@esbuild/darwin-arm64@0.19.12': + '@esbuild/android-x64@0.25.6': optional: true '@esbuild/darwin-arm64@0.20.0': @@ -9378,7 +10751,7 @@ snapshots: '@esbuild/darwin-arm64@0.21.5': optional: true - '@esbuild/darwin-x64@0.19.12': + '@esbuild/darwin-arm64@0.25.6': optional: true '@esbuild/darwin-x64@0.20.0': @@ -9387,7 +10760,7 @@ snapshots: '@esbuild/darwin-x64@0.21.5': optional: true - '@esbuild/freebsd-arm64@0.19.12': + '@esbuild/darwin-x64@0.25.6': optional: true '@esbuild/freebsd-arm64@0.20.0': @@ -9396,7 +10769,7 @@ snapshots: '@esbuild/freebsd-arm64@0.21.5': optional: true - '@esbuild/freebsd-x64@0.19.12': + '@esbuild/freebsd-arm64@0.25.6': optional: true '@esbuild/freebsd-x64@0.20.0': @@ -9405,7 +10778,7 @@ snapshots: '@esbuild/freebsd-x64@0.21.5': optional: true - '@esbuild/linux-arm64@0.19.12': + '@esbuild/freebsd-x64@0.25.6': optional: true '@esbuild/linux-arm64@0.20.0': @@ -9414,7 +10787,7 @@ snapshots: '@esbuild/linux-arm64@0.21.5': optional: true - '@esbuild/linux-arm@0.19.12': + '@esbuild/linux-arm64@0.25.6': optional: true '@esbuild/linux-arm@0.20.0': @@ -9423,7 +10796,7 @@ snapshots: '@esbuild/linux-arm@0.21.5': optional: true - '@esbuild/linux-ia32@0.19.12': + '@esbuild/linux-arm@0.25.6': optional: true '@esbuild/linux-ia32@0.20.0': @@ -9432,7 +10805,7 @@ snapshots: '@esbuild/linux-ia32@0.21.5': optional: true - '@esbuild/linux-loong64@0.19.12': + '@esbuild/linux-ia32@0.25.6': optional: true '@esbuild/linux-loong64@0.20.0': @@ -9441,7 +10814,7 @@ snapshots: '@esbuild/linux-loong64@0.21.5': optional: true - '@esbuild/linux-mips64el@0.19.12': + '@esbuild/linux-loong64@0.25.6': optional: true '@esbuild/linux-mips64el@0.20.0': @@ -9450,7 +10823,7 @@ snapshots: '@esbuild/linux-mips64el@0.21.5': optional: true - '@esbuild/linux-ppc64@0.19.12': + '@esbuild/linux-mips64el@0.25.6': optional: true '@esbuild/linux-ppc64@0.20.0': @@ -9459,7 +10832,7 @@ snapshots: '@esbuild/linux-ppc64@0.21.5': optional: true - '@esbuild/linux-riscv64@0.19.12': + '@esbuild/linux-ppc64@0.25.6': optional: true '@esbuild/linux-riscv64@0.20.0': @@ -9468,7 +10841,7 @@ snapshots: '@esbuild/linux-riscv64@0.21.5': optional: true - '@esbuild/linux-s390x@0.19.12': + '@esbuild/linux-riscv64@0.25.6': optional: true '@esbuild/linux-s390x@0.20.0': @@ -9477,7 +10850,7 @@ snapshots: '@esbuild/linux-s390x@0.21.5': optional: true - '@esbuild/linux-x64@0.19.12': + '@esbuild/linux-s390x@0.25.6': optional: true '@esbuild/linux-x64@0.20.0': @@ -9486,7 +10859,10 @@ snapshots: '@esbuild/linux-x64@0.21.5': optional: true - '@esbuild/netbsd-x64@0.19.12': + '@esbuild/linux-x64@0.25.6': + optional: true + + '@esbuild/netbsd-arm64@0.25.6': optional: true '@esbuild/netbsd-x64@0.20.0': @@ -9495,7 +10871,10 @@ snapshots: '@esbuild/netbsd-x64@0.21.5': optional: true - '@esbuild/openbsd-x64@0.19.12': + '@esbuild/netbsd-x64@0.25.6': + optional: true + + '@esbuild/openbsd-arm64@0.25.6': optional: true '@esbuild/openbsd-x64@0.20.0': @@ -9504,7 +10883,10 @@ snapshots: '@esbuild/openbsd-x64@0.21.5': optional: true - '@esbuild/sunos-x64@0.19.12': + '@esbuild/openbsd-x64@0.25.6': + optional: true + + '@esbuild/openharmony-arm64@0.25.6': optional: true '@esbuild/sunos-x64@0.20.0': @@ -9513,7 +10895,7 @@ snapshots: '@esbuild/sunos-x64@0.21.5': optional: true - '@esbuild/win32-arm64@0.19.12': + '@esbuild/sunos-x64@0.25.6': optional: true '@esbuild/win32-arm64@0.20.0': @@ -9522,7 +10904,7 @@ snapshots: '@esbuild/win32-arm64@0.21.5': optional: true - '@esbuild/win32-ia32@0.19.12': + '@esbuild/win32-arm64@0.25.6': optional: true '@esbuild/win32-ia32@0.20.0': @@ -9531,7 +10913,7 @@ snapshots: '@esbuild/win32-ia32@0.21.5': optional: true - '@esbuild/win32-x64@0.19.12': + '@esbuild/win32-ia32@0.25.6': optional: true '@esbuild/win32-x64@0.20.0': @@ -9540,7 +10922,10 @@ snapshots: '@esbuild/win32-x64@0.21.5': optional: true - '@eslint-community/eslint-utils@4.5.1(eslint@8.57.1)': + '@esbuild/win32-x64@0.25.6': + optional: true + + '@eslint-community/eslint-utils@4.7.0(eslint@8.57.1)': dependencies: eslint: 8.57.1 eslint-visitor-keys: 3.4.3 @@ -9550,7 +10935,7 @@ snapshots: '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.1(supports-color@5.5.0) espree: 9.6.1 globals: 13.24.0 ignore: 5.3.2 @@ -9570,6 +10955,8 @@ snapshots: '@ethereumjs/rlp@4.0.1': {} + '@ethereumjs/rlp@5.0.2': {} + '@ethereumjs/tx@4.2.0': dependencies: '@ethereumjs/common': 3.2.0 @@ -9583,6 +10970,11 @@ snapshots: ethereum-cryptography: 2.2.1 micro-ftch: 0.3.1 + '@ethereumjs/util@9.1.0': + dependencies: + '@ethereumjs/rlp': 5.0.2 + ethereum-cryptography: 2.2.1 + '@ethersproject/abi@5.8.0': dependencies: '@ethersproject/address': 5.8.0 @@ -9642,7 +11034,7 @@ snapshots: dependencies: '@ethersproject/bytes': 5.8.0 '@ethersproject/logger': 5.8.0 - bn.js: 5.2.1 + bn.js: 5.2.2 '@ethersproject/bytes@5.8.0': dependencies: @@ -9775,7 +11167,7 @@ snapshots: '@ethersproject/bytes': 5.8.0 '@ethersproject/logger': 5.8.0 '@ethersproject/properties': 5.8.0 - bn.js: 5.2.1 + bn.js: 5.2.2 elliptic: 6.6.1 hash.js: 1.1.7 @@ -9848,8 +11240,8 @@ snapshots: '@excubiae/contracts@0.4.0': dependencies: - '@openzeppelin/contracts': 5.2.0 - '@semaphore-protocol/contracts': 4.9.2 + '@openzeppelin/contracts': 5.3.0 + '@semaphore-protocol/contracts': 4.11.1 solady: 0.1.4 '@fastify/busboy@2.1.1': {} @@ -9862,7 +11254,7 @@ snapshots: '@headlessui/react@1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@tanstack/react-virtual': 3.13.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@tanstack/react-virtual': 3.13.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1) client-only: 0.0.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -9870,7 +11262,7 @@ snapshots: '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.1(supports-color@5.5.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -9881,17 +11273,22 @@ snapshots: '@iden3/bigarray@0.0.2': {} + '@iden3/binfileutils@0.0.11': + dependencies: + fastfile: 0.0.20 + ffjavascript: 0.2.63 + '@iden3/binfileutils@0.0.12': dependencies: fastfile: 0.0.20 ffjavascript: 0.3.0 - '@img/sharp-darwin-arm64@0.34.1': + '@img/sharp-darwin-arm64@0.34.2': optionalDependencies: '@img/sharp-libvips-darwin-arm64': 1.1.0 optional: true - '@img/sharp-darwin-x64@0.34.1': + '@img/sharp-darwin-x64@0.34.2': optionalDependencies: '@img/sharp-libvips-darwin-x64': 1.1.0 optional: true @@ -9923,47 +11320,88 @@ snapshots: '@img/sharp-libvips-linuxmusl-x64@1.1.0': optional: true - '@img/sharp-linux-arm64@0.34.1': + '@img/sharp-linux-arm64@0.34.2': optionalDependencies: '@img/sharp-libvips-linux-arm64': 1.1.0 optional: true - '@img/sharp-linux-arm@0.34.1': + '@img/sharp-linux-arm@0.34.2': optionalDependencies: '@img/sharp-libvips-linux-arm': 1.1.0 optional: true - '@img/sharp-linux-s390x@0.34.1': + '@img/sharp-linux-s390x@0.34.2': optionalDependencies: '@img/sharp-libvips-linux-s390x': 1.1.0 optional: true - '@img/sharp-linux-x64@0.34.1': + '@img/sharp-linux-x64@0.34.2': optionalDependencies: '@img/sharp-libvips-linux-x64': 1.1.0 optional: true - '@img/sharp-linuxmusl-arm64@0.34.1': + '@img/sharp-linuxmusl-arm64@0.34.2': optionalDependencies: '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 optional: true - '@img/sharp-linuxmusl-x64@0.34.1': + '@img/sharp-linuxmusl-x64@0.34.2': optionalDependencies: '@img/sharp-libvips-linuxmusl-x64': 1.1.0 optional: true - '@img/sharp-wasm32@0.34.1': + '@img/sharp-wasm32@0.34.2': dependencies: '@emnapi/runtime': 1.4.3 optional: true - '@img/sharp-win32-ia32@0.34.1': + '@img/sharp-win32-arm64@0.34.2': + optional: true + + '@img/sharp-win32-ia32@0.34.2': optional: true - '@img/sharp-win32-x64@0.34.1': + '@img/sharp-win32-x64@0.34.2': optional: true + '@inquirer/core@9.2.1': + dependencies: + '@inquirer/figures': 1.0.12 + '@inquirer/type': 2.0.0 + '@types/mute-stream': 0.0.4 + '@types/node': 22.7.5 + '@types/wrap-ansi': 3.0.0 + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 1.0.0 + signal-exit: 4.1.0 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + + '@inquirer/figures@1.0.12': {} + + '@inquirer/input@2.3.0': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + + '@inquirer/select@2.5.0': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/figures': 1.0.12 + '@inquirer/type': 1.5.5 + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + + '@inquirer/type@1.5.5': + dependencies: + mute-stream: 1.0.0 + + '@inquirer/type@2.0.0': + dependencies: + mute-stream: 1.0.0 + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -9973,6 +11411,10 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 @@ -9997,10 +11439,26 @@ snapshots: '@lit-labs/ssr-dom-shim@1.3.0': {} - '@lit/reactive-element@1.6.3': + '@lit/reactive-element@2.1.0': dependencies: '@lit-labs/ssr-dom-shim': 1.3.0 + '@manypkg/find-root@1.1.0': + dependencies: + '@babel/runtime': 7.27.6 + '@types/node': 22.7.5 + find-up: 4.1.0 + fs-extra: 8.1.0 + + '@manypkg/get-packages@1.1.3': + dependencies: + '@babel/runtime': 7.27.6 + '@changesets/types': 4.1.0 + '@manypkg/find-root': 1.1.0 + fs-extra: 8.1.0 + globby: 11.1.0 + read-yaml-file: 1.1.0 + '@mdx-js/mdx@2.3.0': dependencies: '@types/estree-jsx': 1.0.5 @@ -10026,7 +11484,7 @@ snapshots: '@mdx-js/react@2.3.0(react@18.3.1)': dependencies: '@types/mdx': 2.0.13 - '@types/react': 18.3.20 + '@types/react': 18.3.23 react: 18.3.1 '@metamask/eth-json-rpc-provider@1.0.1': @@ -10037,14 +11495,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@metamask/eth-sig-util@4.0.1': - dependencies: - ethereumjs-abi: 0.6.8 - ethereumjs-util: 6.2.1 - ethjs-util: 0.1.6 - tweetnacl: 1.0.3 - tweetnacl-util: 0.15.1 - '@metamask/json-rpc-engine@7.3.3': dependencies: '@metamask/rpc-errors': 6.4.0 @@ -10107,13 +11557,13 @@ snapshots: '@metamask/safe-event-emitter@3.1.2': {} - '@metamask/sdk-communication-layer@0.32.0(cross-fetch@4.1.0)(eciesjs@0.4.14)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@metamask/sdk-communication-layer@0.32.0(cross-fetch@4.1.0)(eciesjs@0.4.15)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: bufferutil: 4.0.9 cross-fetch: 4.1.0 date-fns: 2.30.0 - debug: 4.4.0(supports-color@5.5.0) - eciesjs: 0.4.14 + debug: 4.4.1(supports-color@5.5.0) + eciesjs: 0.4.15 eventemitter2: 6.4.9 readable-stream: 3.6.2 socket.io-client: 4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) @@ -10128,23 +11578,23 @@ snapshots: '@metamask/sdk@0.32.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: - '@babel/runtime': 7.27.0 + '@babel/runtime': 7.27.6 '@metamask/onboarding': 1.0.1 '@metamask/providers': 16.1.0 - '@metamask/sdk-communication-layer': 0.32.0(cross-fetch@4.1.0)(eciesjs@0.4.14)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@metamask/sdk-communication-layer': 0.32.0(cross-fetch@4.1.0)(eciesjs@0.4.15)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@metamask/sdk-install-modal-web': 0.32.0 '@paulmillr/qr': 0.2.1 bowser: 2.11.0 cross-fetch: 4.1.0 - debug: 4.4.0(supports-color@5.5.0) - eciesjs: 0.4.14 + debug: 4.4.1(supports-color@5.5.0) + eciesjs: 0.4.15 eth-rpc-errors: 4.0.3 eventemitter2: 6.4.9 obj-multiplex: 1.0.0 - pump: 3.0.2 + pump: 3.0.3 readable-stream: 3.6.2 socket.io-client: 4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) - tslib: 2.7.0 + tslib: 2.8.1 util: 0.12.5 uuid: 8.3.2 transitivePeerDependencies: @@ -10159,8 +11609,8 @@ snapshots: dependencies: '@ethereumjs/tx': 4.2.0 '@types/debug': 4.1.12 - debug: 4.4.0(supports-color@5.5.0) - semver: 7.7.1 + debug: 4.4.1(supports-color@5.5.0) + semver: 7.7.2 superstruct: 1.0.4 transitivePeerDependencies: - supports-color @@ -10169,12 +11619,12 @@ snapshots: dependencies: '@ethereumjs/tx': 4.2.0 '@metamask/superstruct': 3.2.1 - '@noble/hashes': 1.7.1 - '@scure/base': 1.2.4 + '@noble/hashes': 1.8.0 + '@scure/base': 1.2.6 '@types/debug': 4.1.12 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.1(supports-color@5.5.0) pony-cause: 2.1.11 - semver: 7.7.1 + semver: 7.7.2 uuid: 9.0.1 transitivePeerDependencies: - supports-color @@ -10183,16 +11633,79 @@ snapshots: dependencies: '@ethereumjs/tx': 4.2.0 '@metamask/superstruct': 3.2.1 - '@noble/hashes': 1.7.1 - '@scure/base': 1.2.4 + '@noble/hashes': 1.8.0 + '@scure/base': 1.2.6 '@types/debug': 4.1.12 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.1(supports-color@5.5.0) pony-cause: 2.1.11 - semver: 7.7.1 + semver: 7.7.2 uuid: 9.0.1 transitivePeerDependencies: - supports-color + '@microsoft/api-extractor-model@7.30.6(@types/node@22.15.33)': + dependencies: + '@microsoft/tsdoc': 0.15.1 + '@microsoft/tsdoc-config': 0.17.1 + '@rushstack/node-core-library': 5.13.1(@types/node@22.15.33) + transitivePeerDependencies: + - '@types/node' + optional: true + + '@microsoft/api-extractor-model@7.30.6(@types/node@22.7.5)': + dependencies: + '@microsoft/tsdoc': 0.15.1 + '@microsoft/tsdoc-config': 0.17.1 + '@rushstack/node-core-library': 5.13.1(@types/node@22.7.5) + transitivePeerDependencies: + - '@types/node' + + '@microsoft/api-extractor@7.52.8(@types/node@22.15.33)': + dependencies: + '@microsoft/api-extractor-model': 7.30.6(@types/node@22.15.33) + '@microsoft/tsdoc': 0.15.1 + '@microsoft/tsdoc-config': 0.17.1 + '@rushstack/node-core-library': 5.13.1(@types/node@22.15.33) + '@rushstack/rig-package': 0.5.3 + '@rushstack/terminal': 0.15.3(@types/node@22.15.33) + '@rushstack/ts-command-line': 5.0.1(@types/node@22.15.33) + lodash: 4.17.21 + minimatch: 3.0.8 + resolve: 1.22.10 + semver: 7.5.4 + source-map: 0.6.1 + typescript: 5.8.3 + transitivePeerDependencies: + - '@types/node' + optional: true + + '@microsoft/api-extractor@7.52.8(@types/node@22.7.5)': + dependencies: + '@microsoft/api-extractor-model': 7.30.6(@types/node@22.7.5) + '@microsoft/tsdoc': 0.15.1 + '@microsoft/tsdoc-config': 0.17.1 + '@rushstack/node-core-library': 5.13.1(@types/node@22.7.5) + '@rushstack/rig-package': 0.5.3 + '@rushstack/terminal': 0.15.3(@types/node@22.7.5) + '@rushstack/ts-command-line': 5.0.1(@types/node@22.7.5) + lodash: 4.17.21 + minimatch: 3.0.8 + resolve: 1.22.10 + semver: 7.5.4 + source-map: 0.6.1 + typescript: 5.8.3 + transitivePeerDependencies: + - '@types/node' + + '@microsoft/tsdoc-config@0.17.1': + dependencies: + '@microsoft/tsdoc': 0.15.1 + ajv: 8.12.0 + jju: 1.4.0 + resolve: 1.22.10 + + '@microsoft/tsdoc@0.15.1': {} + '@motionone/animation@10.18.0': dependencies: '@motionone/easing': 10.18.0 @@ -10201,15 +11714,6 @@ snapshots: tslib: 2.8.1 '@motionone/dom@10.12.0': - dependencies: - '@motionone/animation': 10.18.0 - '@motionone/generators': 10.18.0 - '@motionone/types': 10.17.1 - '@motionone/utils': 10.18.0 - hey-listen: 1.0.8 - tslib: 2.7.0 - - '@motionone/dom@10.18.0': dependencies: '@motionone/animation': 10.18.0 '@motionone/generators': 10.18.0 @@ -10229,11 +11733,6 @@ snapshots: '@motionone/utils': 10.18.0 tslib: 2.8.1 - '@motionone/svelte@10.16.4': - dependencies: - '@motionone/dom': 10.18.0 - tslib: 2.8.1 - '@motionone/types@10.17.1': {} '@motionone/utils@10.18.0': @@ -10242,11 +11741,6 @@ snapshots: hey-listen: 1.0.8 tslib: 2.8.1 - '@motionone/vue@10.16.4': - dependencies: - '@motionone/dom': 10.18.0 - tslib: 2.8.1 - '@napi-rs/simple-git-android-arm-eabi@0.1.19': optional: true @@ -10306,37 +11800,39 @@ snapshots: '@napi-rs/simple-git-win32-arm64-msvc': 0.1.19 '@napi-rs/simple-git-win32-x64-msvc': 0.1.19 - '@next/env@14.2.28': {} + '@next/env@14.2.30': {} - '@next/swc-darwin-arm64@14.2.28': + '@next/swc-darwin-arm64@14.2.30': optional: true - '@next/swc-darwin-x64@14.2.28': + '@next/swc-darwin-x64@14.2.30': optional: true - '@next/swc-linux-arm64-gnu@14.2.28': + '@next/swc-linux-arm64-gnu@14.2.30': optional: true - '@next/swc-linux-arm64-musl@14.2.28': + '@next/swc-linux-arm64-musl@14.2.30': optional: true - '@next/swc-linux-x64-gnu@14.2.28': + '@next/swc-linux-x64-gnu@14.2.30': optional: true - '@next/swc-linux-x64-musl@14.2.28': + '@next/swc-linux-x64-musl@14.2.30': optional: true - '@next/swc-win32-arm64-msvc@14.2.28': + '@next/swc-win32-arm64-msvc@14.2.30': optional: true - '@next/swc-win32-ia32-msvc@14.2.28': + '@next/swc-win32-ia32-msvc@14.2.30': optional: true - '@next/swc-win32-x64-msvc@14.2.28': + '@next/swc-win32-x64-msvc@14.2.30': optional: true '@noble/ciphers@1.2.1': {} + '@noble/ciphers@1.3.0': {} + '@noble/curves@1.2.0': dependencies: '@noble/hashes': 1.3.2 @@ -10353,6 +11849,18 @@ snapshots: dependencies: '@noble/hashes': 1.7.1 + '@noble/curves@1.8.2': + dependencies: + '@noble/hashes': 1.7.2 + + '@noble/curves@1.9.1': + dependencies: + '@noble/hashes': 1.8.0 + + '@noble/curves@1.9.2': + dependencies: + '@noble/hashes': 1.8.0 + '@noble/hashes@1.2.0': {} '@noble/hashes@1.3.2': {} @@ -10363,6 +11871,10 @@ snapshots: '@noble/hashes@1.7.1': {} + '@noble/hashes@1.7.2': {} + + '@noble/hashes@1.8.0': {} + '@noble/secp256k1@1.7.1': {} '@nodelib/fs.scandir@2.1.5': @@ -10377,112 +11889,111 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.1 - '@nomicfoundation/edr-darwin-arm64@0.8.0': {} + '@noir-lang/acvm_js@1.0.0-beta.3': {} - '@nomicfoundation/edr-darwin-x64@0.8.0': {} + '@noir-lang/noir_js@1.0.0-beta.3': + dependencies: + '@noir-lang/acvm_js': 1.0.0-beta.3 + '@noir-lang/noirc_abi': 1.0.0-beta.3 + '@noir-lang/types': 1.0.0-beta.3 - '@nomicfoundation/edr-linux-arm64-gnu@0.8.0': {} + '@noir-lang/noir_wasm@1.0.0-beta.3': + dependencies: + '@noir-lang/types': 1.0.0-beta.3 + pako: 2.1.0 - '@nomicfoundation/edr-linux-arm64-musl@0.8.0': {} + '@noir-lang/noirc_abi@1.0.0-beta.3': + dependencies: + '@noir-lang/types': 1.0.0-beta.3 - '@nomicfoundation/edr-linux-x64-gnu@0.8.0': {} + '@noir-lang/types@1.0.0-beta.3': {} - '@nomicfoundation/edr-linux-x64-musl@0.8.0': {} + '@nomicfoundation/edr-darwin-arm64@0.11.2': {} - '@nomicfoundation/edr-win32-x64-msvc@0.8.0': {} + '@nomicfoundation/edr-darwin-x64@0.11.2': {} - '@nomicfoundation/edr@0.8.0': - dependencies: - '@nomicfoundation/edr-darwin-arm64': 0.8.0 - '@nomicfoundation/edr-darwin-x64': 0.8.0 - '@nomicfoundation/edr-linux-arm64-gnu': 0.8.0 - '@nomicfoundation/edr-linux-arm64-musl': 0.8.0 - '@nomicfoundation/edr-linux-x64-gnu': 0.8.0 - '@nomicfoundation/edr-linux-x64-musl': 0.8.0 - '@nomicfoundation/edr-win32-x64-msvc': 0.8.0 + '@nomicfoundation/edr-linux-arm64-gnu@0.11.2': {} - '@nomicfoundation/ethereumjs-common@4.0.4': - dependencies: - '@nomicfoundation/ethereumjs-util': 9.0.4 - transitivePeerDependencies: - - c-kzg + '@nomicfoundation/edr-linux-arm64-musl@0.11.2': {} - '@nomicfoundation/ethereumjs-rlp@5.0.4': {} + '@nomicfoundation/edr-linux-x64-gnu@0.11.2': {} - '@nomicfoundation/ethereumjs-tx@5.0.4': - dependencies: - '@nomicfoundation/ethereumjs-common': 4.0.4 - '@nomicfoundation/ethereumjs-rlp': 5.0.4 - '@nomicfoundation/ethereumjs-util': 9.0.4 - ethereum-cryptography: 0.1.3 + '@nomicfoundation/edr-linux-x64-musl@0.11.2': {} + + '@nomicfoundation/edr-win32-x64-msvc@0.11.2': {} - '@nomicfoundation/ethereumjs-util@9.0.4': + '@nomicfoundation/edr@0.11.2': dependencies: - '@nomicfoundation/ethereumjs-rlp': 5.0.4 - ethereum-cryptography: 0.1.3 + '@nomicfoundation/edr-darwin-arm64': 0.11.2 + '@nomicfoundation/edr-darwin-x64': 0.11.2 + '@nomicfoundation/edr-linux-arm64-gnu': 0.11.2 + '@nomicfoundation/edr-linux-arm64-musl': 0.11.2 + '@nomicfoundation/edr-linux-x64-gnu': 0.11.2 + '@nomicfoundation/edr-linux-x64-musl': 0.11.2 + '@nomicfoundation/edr-win32-x64-msvc': 0.11.2 - '@nomicfoundation/hardhat-chai-matchers@2.0.8(@nomicfoundation/hardhat-ethers@3.0.8(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)))(chai@4.5.0)(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10))': + '@nomicfoundation/hardhat-chai-matchers@2.0.9(@nomicfoundation/hardhat-ethers@3.0.9(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)))(chai@4.5.0)(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))': dependencies: - '@nomicfoundation/hardhat-ethers': 3.0.8(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-ethers': 3.0.9(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) '@types/chai-as-promised': 7.1.8 chai: 4.5.0 chai-as-promised: 7.1.2(chai@4.5.0) deep-eql: 4.1.4 ethers: 5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) - hardhat: 2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10) + hardhat: 2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) ordinal: 1.0.3 - '@nomicfoundation/hardhat-chai-matchers@2.0.8(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)))(chai@4.5.0)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10))': + '@nomicfoundation/hardhat-chai-matchers@2.0.9(@nomicfoundation/hardhat-ethers@3.0.9(ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)))(chai@4.5.0)(ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))': dependencies: - '@nomicfoundation/hardhat-ethers': 3.0.8(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-ethers': 3.0.9(ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) '@types/chai-as-promised': 7.1.8 chai: 4.5.0 chai-as-promised: 7.1.2(chai@4.5.0) deep-eql: 4.1.4 - ethers: 6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) - hardhat: 2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10) + ethers: 6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) + hardhat: 2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) ordinal: 1.0.3 - '@nomicfoundation/hardhat-ethers@3.0.8(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10))': + '@nomicfoundation/hardhat-ethers@3.0.9(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))': dependencies: - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.1(supports-color@5.5.0) ethers: 5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) - hardhat: 2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10) + hardhat: 2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) lodash.isequal: 4.5.0 transitivePeerDependencies: - supports-color - '@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10))': + '@nomicfoundation/hardhat-ethers@3.0.9(ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))': dependencies: - debug: 4.4.0(supports-color@5.5.0) - ethers: 6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) - hardhat: 2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10) + debug: 4.4.1(supports-color@5.5.0) + ethers: 6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) + hardhat: 2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) lodash.isequal: 4.5.0 transitivePeerDependencies: - supports-color - '@nomicfoundation/hardhat-foundry@1.1.3(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10))': + '@nomicfoundation/hardhat-foundry@1.1.4(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))': dependencies: - hardhat: 2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10) + hardhat: 2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) picocolors: 1.1.1 - '@nomicfoundation/hardhat-ignition-ethers@0.15.11(225b6e328c7c72dea10c70026633527e)': + '@nomicfoundation/hardhat-ignition-ethers@0.15.13(@nomicfoundation/hardhat-ethers@3.0.9(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)))(@nomicfoundation/hardhat-ignition@0.15.12(@nomicfoundation/hardhat-verify@2.0.14(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@nomicfoundation/ignition-core@0.15.12(bufferutil@4.0.9)(utf-8-validate@5.0.10))(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))': dependencies: - '@nomicfoundation/hardhat-ethers': 3.0.8(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)) - '@nomicfoundation/hardhat-ignition': 0.15.11(@nomicfoundation/hardhat-verify@2.0.13(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) - '@nomicfoundation/ignition-core': 0.15.11(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@nomicfoundation/hardhat-ethers': 3.0.9(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-ignition': 0.15.12(@nomicfoundation/hardhat-verify@2.0.14(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + '@nomicfoundation/ignition-core': 0.15.12(bufferutil@4.0.9)(utf-8-validate@5.0.10) ethers: 5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) - hardhat: 2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10) + hardhat: 2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) - '@nomicfoundation/hardhat-ignition@0.15.11(@nomicfoundation/hardhat-verify@2.0.13(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)': + '@nomicfoundation/hardhat-ignition@0.15.12(@nomicfoundation/hardhat-verify@2.0.14(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)': dependencies: - '@nomicfoundation/hardhat-verify': 2.0.13(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)) - '@nomicfoundation/ignition-core': 0.15.11(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@nomicfoundation/hardhat-verify': 2.0.14(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@nomicfoundation/ignition-core': 0.15.12(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@nomicfoundation/ignition-ui': 0.15.11 chalk: 4.1.2 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.1(supports-color@5.5.0) fs-extra: 10.1.0 - hardhat: 2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10) + hardhat: 2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) json5: 2.2.3 prompts: 2.4.2 transitivePeerDependencies: @@ -10490,64 +12001,84 @@ snapshots: - supports-color - utf-8-validate - '@nomicfoundation/hardhat-network-helpers@1.0.12(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10))': + '@nomicfoundation/hardhat-network-helpers@1.0.13(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))': dependencies: ethereumjs-util: 7.1.5 - hardhat: 2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10) + hardhat: 2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) - '@nomicfoundation/hardhat-network-helpers@1.0.12(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10))': + '@nomicfoundation/hardhat-network-helpers@1.0.13(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))': dependencies: ethereumjs-util: 7.1.5 - hardhat: 2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10) + hardhat: 2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) - '@nomicfoundation/hardhat-toolbox@4.0.0(7a126116ab3a8428fc2292ff3b66a578)': + '@nomicfoundation/hardhat-toolbox@4.0.0(21df6d106862ca26965fedef68f78cbb)': dependencies: - '@nomicfoundation/hardhat-chai-matchers': 2.0.8(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)))(chai@4.5.0)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)) - '@nomicfoundation/hardhat-ethers': 3.0.8(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)) - '@nomicfoundation/hardhat-network-helpers': 1.0.12(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)) - '@nomicfoundation/hardhat-verify': 2.0.13(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)) - '@typechain/ethers-v6': 0.5.1(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.2))(typescript@5.8.2) - '@typechain/hardhat': 9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.2))(typescript@5.8.2))(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.2)) + '@nomicfoundation/hardhat-chai-matchers': 2.0.9(@nomicfoundation/hardhat-ethers@3.0.9(ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)))(chai@4.5.0)(ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-ethers': 3.0.9(ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-network-helpers': 1.0.13(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-verify': 2.0.14(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@typechain/ethers-v6': 0.5.1(ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.3))(typescript@5.8.3) + '@typechain/hardhat': 9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.3))(typescript@5.8.3))(ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.3)) '@types/chai': 4.3.20 '@types/mocha': 10.0.10 - '@types/node': 20.17.30 + '@types/node': 22.7.5 chai: 4.5.0 - ethers: 6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) - hardhat: 2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10) - hardhat-gas-reporter: 2.2.2(bufferutil@4.0.9)(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10))(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) - solidity-coverage: 0.8.14(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)) - ts-node: 10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2) - typechain: 8.3.2(typescript@5.8.2) - typescript: 5.8.2 - - '@nomicfoundation/hardhat-toolbox@5.0.0(b285d134f7bebf40fffb5d0c9e92a2e9)': - dependencies: - '@nomicfoundation/hardhat-chai-matchers': 2.0.8(@nomicfoundation/hardhat-ethers@3.0.8(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)))(chai@4.5.0)(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)) - '@nomicfoundation/hardhat-ethers': 3.0.8(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)) - '@nomicfoundation/hardhat-ignition-ethers': 0.15.11(225b6e328c7c72dea10c70026633527e) - '@nomicfoundation/hardhat-network-helpers': 1.0.12(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)) - '@nomicfoundation/hardhat-verify': 2.0.13(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)) - '@typechain/ethers-v6': 0.5.1(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.2))(typescript@5.8.2) - '@typechain/hardhat': 9.1.0(@typechain/ethers-v6@0.5.1(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.2))(typescript@5.8.2))(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.2)) + ethers: 6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) + hardhat: 2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) + hardhat-gas-reporter: 2.3.0(bufferutil@4.0.9)(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(typescript@5.8.3)(utf-8-validate@5.0.10) + solidity-coverage: 0.8.16(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) + ts-node: 10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3) + typechain: 8.3.2(typescript@5.8.3) + typescript: 5.8.3 + + '@nomicfoundation/hardhat-toolbox@4.0.0(79e6a2bdb20712d3f04f2697b228668d)': + dependencies: + '@nomicfoundation/hardhat-chai-matchers': 2.0.9(@nomicfoundation/hardhat-ethers@3.0.9(ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)))(chai@4.5.0)(ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-ethers': 3.0.9(ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-network-helpers': 1.0.13(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-verify': 2.0.14(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@typechain/ethers-v6': 0.5.1(ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.3))(typescript@5.8.3) + '@typechain/hardhat': 9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.3))(typescript@5.8.3))(ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.3)) '@types/chai': 4.3.20 '@types/mocha': 10.0.10 '@types/node': 22.7.5 chai: 4.5.0 + ethers: 6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) + hardhat: 2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) + hardhat-gas-reporter: 1.0.10(bufferutil@4.0.9)(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + solidity-coverage: 0.8.16(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) + ts-node: 10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3) + typechain: 8.3.2(typescript@5.8.3) + typescript: 5.8.3 + + '@nomicfoundation/hardhat-toolbox@5.0.0(62dbc94741f8fd6a7d8599a31638421d)': + dependencies: + '@nomicfoundation/hardhat-chai-matchers': 2.0.9(@nomicfoundation/hardhat-ethers@3.0.9(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)))(chai@4.5.0)(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-ethers': 3.0.9(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-ignition-ethers': 0.15.13(@nomicfoundation/hardhat-ethers@3.0.9(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)))(@nomicfoundation/hardhat-ignition@0.15.12(@nomicfoundation/hardhat-verify@2.0.14(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@nomicfoundation/ignition-core@0.15.12(bufferutil@4.0.9)(utf-8-validate@5.0.10))(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-network-helpers': 1.0.13(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-verify': 2.0.14(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@typechain/ethers-v6': 0.5.1(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.3))(typescript@5.8.3) + '@typechain/hardhat': 9.1.0(@typechain/ethers-v6@0.5.1(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.3))(typescript@5.8.3))(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.3)) + '@types/chai': 4.3.20 + '@types/mocha': 10.0.10 + '@types/node': 22.15.33 + chai: 4.5.0 ethers: 5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) - hardhat: 2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10) - hardhat-gas-reporter: 1.0.10(bufferutil@4.0.9)(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) - solidity-coverage: 0.8.14(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)) - ts-node: 10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2) - typechain: 8.3.2(typescript@5.8.2) - typescript: 5.8.2 + hardhat: 2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) + hardhat-gas-reporter: 1.0.10(bufferutil@4.0.9)(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + solidity-coverage: 0.8.16(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) + ts-node: 10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3) + typechain: 8.3.2(typescript@5.8.3) + typescript: 5.8.3 - '@nomicfoundation/hardhat-verify@2.0.13(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10))': + '@nomicfoundation/hardhat-verify@2.0.14(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))': dependencies: '@ethersproject/abi': 5.8.0 '@ethersproject/address': 5.8.0 cbor: 8.1.0 - debug: 4.4.0(supports-color@5.5.0) - hardhat: 2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10) + debug: 4.4.1(supports-color@5.5.0) + hardhat: 2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) lodash.clonedeep: 4.5.0 picocolors: 1.1.1 semver: 6.3.1 @@ -10556,13 +12087,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@nomicfoundation/hardhat-verify@2.0.13(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10))': + '@nomicfoundation/hardhat-verify@2.0.14(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))': dependencies: '@ethersproject/abi': 5.8.0 '@ethersproject/address': 5.8.0 cbor: 8.1.0 - debug: 4.4.0(supports-color@5.5.0) - hardhat: 2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10) + debug: 4.4.1(supports-color@5.5.0) + hardhat: 2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) lodash.clonedeep: 4.5.0 picocolors: 1.1.1 semver: 6.3.1 @@ -10571,13 +12102,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@nomicfoundation/ignition-core@0.15.11(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + '@nomicfoundation/ignition-core@0.15.12(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: '@ethersproject/address': 5.6.1 '@nomicfoundation/solidity-analyzer': 0.1.2 cbor: 9.0.2 - debug: 4.4.0(supports-color@5.5.0) - ethers: 6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) + debug: 4.4.1(supports-color@5.5.0) + ethers: 6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) fs-extra: 10.1.0 immer: 10.0.2 lodash: 4.17.21 @@ -10620,15 +12151,15 @@ snapshots: '@nomicfoundation/solidity-analyzer-linux-x64-musl': 0.1.2 '@nomicfoundation/solidity-analyzer-win32-x64-msvc': 0.1.2 - '@openzeppelin/contracts-upgradeable@5.2.0(@openzeppelin/contracts@5.2.0)': + '@openzeppelin/contracts-upgradeable@5.3.0(@openzeppelin/contracts@5.3.0)': dependencies: - '@openzeppelin/contracts': 5.2.0 + '@openzeppelin/contracts': 5.3.0 - '@openzeppelin/contracts@5.2.0': {} + '@openzeppelin/contracts@5.3.0': {} '@paulmillr/qr@0.2.1': {} - '@phosphor-icons/react@2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@phosphor-icons/react@2.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -10654,95 +12185,418 @@ snapshots: '@popperjs/core@2.11.8': {} - '@prettier/sync@0.3.0(prettier@3.5.3)': + '@prettier/sync@0.3.0(prettier@3.6.1)': dependencies: - prettier: 3.5.3 + prettier: 3.6.1 '@remix-run/router@1.23.0': {} - '@rollup/plugin-inject@5.0.5(rollup@4.40.0)': + '@reown/appkit-common@1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.22.4)': + dependencies: + big.js: 6.2.2 + dayjs: 1.11.13 + viem: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.22.4) + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + + '@reown/appkit-common@1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67)': + dependencies: + big.js: 6.2.2 + dayjs: 1.11.13 + viem: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + + '@reown/appkit-controllers@1.7.8(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67)': + dependencies: + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + valtio: 1.13.2(@types/react@18.3.23)(react@18.3.1) + viem: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + + '@reown/appkit-pay@1.7.8(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67)': + dependencies: + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + '@reown/appkit-controllers': 1.7.8(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + '@reown/appkit-ui': 1.7.8(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + '@reown/appkit-utils': 1.7.8(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.3.23)(react@18.3.1))(zod@3.25.67) + lit: 3.3.0 + valtio: 1.13.2(@types/react@18.3.23)(react@18.3.1) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + + '@reown/appkit-polyfills@1.7.8': + dependencies: + buffer: 6.0.3 + + '@reown/appkit-scaffold-ui@1.7.8(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.3.23)(react@18.3.1))(zod@3.25.67)': + dependencies: + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + '@reown/appkit-controllers': 1.7.8(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + '@reown/appkit-ui': 1.7.8(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + '@reown/appkit-utils': 1.7.8(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.3.23)(react@18.3.1))(zod@3.25.67) + '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + lit: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - valtio + - zod + + '@reown/appkit-ui@1.7.8(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.40.0) + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + '@reown/appkit-controllers': 1.7.8(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + lit: 3.3.0 + qrcode: 1.5.3 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + + '@reown/appkit-utils@1.7.8(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.3.23)(react@18.3.1))(zod@3.25.67)': + dependencies: + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + '@reown/appkit-controllers': 1.7.8(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + '@reown/appkit-polyfills': 1.7.8 + '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@walletconnect/logger': 2.1.2 + '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + valtio: 1.13.2(@types/react@18.3.23)(react@18.3.1) + viem: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + + '@reown/appkit-wallet@1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)': + dependencies: + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.22.4) + '@reown/appkit-polyfills': 1.7.8 + '@walletconnect/logger': 2.1.2 + zod: 3.22.4 + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + + '@reown/appkit@1.7.8(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67)': + dependencies: + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + '@reown/appkit-controllers': 1.7.8(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + '@reown/appkit-pay': 1.7.8(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + '@reown/appkit-polyfills': 1.7.8 + '@reown/appkit-scaffold-ui': 1.7.8(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.3.23)(react@18.3.1))(zod@3.25.67) + '@reown/appkit-ui': 1.7.8(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + '@reown/appkit-utils': 1.7.8(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.3.23)(react@18.3.1))(zod@3.25.67) + '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@walletconnect/types': 2.21.0 + '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + bs58: 6.0.0 + valtio: 1.13.2(@types/react@18.3.23)(react@18.3.1) + viem: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + + '@rolldown/pluginutils@1.0.0-beta.19': {} + + '@rollup/plugin-inject@5.0.5(rollup@4.44.1)': + dependencies: + '@rollup/pluginutils': 5.2.0(rollup@4.44.1) estree-walker: 2.0.2 magic-string: 0.30.17 optionalDependencies: - rollup: 4.40.0 + rollup: 4.44.1 - '@rollup/plugin-virtual@3.0.2(rollup@4.40.0)': + '@rollup/plugin-virtual@3.0.2(rollup@4.44.1)': optionalDependencies: - rollup: 4.40.0 + rollup: 4.44.1 - '@rollup/pluginutils@5.1.4(rollup@4.40.0)': + '@rollup/pluginutils@5.2.0(rollup@4.44.1)': dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.2 optionalDependencies: - rollup: 4.40.0 + rollup: 4.44.1 + + '@rollup/rollup-android-arm-eabi@4.44.1': + optional: true - '@rollup/rollup-android-arm-eabi@4.40.0': + '@rollup/rollup-android-arm64@4.44.1': optional: true - '@rollup/rollup-android-arm64@4.40.0': + '@rollup/rollup-darwin-arm64@4.44.1': optional: true - '@rollup/rollup-darwin-arm64@4.40.0': + '@rollup/rollup-darwin-x64@4.44.1': optional: true - '@rollup/rollup-darwin-x64@4.40.0': + '@rollup/rollup-freebsd-arm64@4.44.1': optional: true - '@rollup/rollup-freebsd-arm64@4.40.0': + '@rollup/rollup-freebsd-x64@4.44.1': optional: true - '@rollup/rollup-freebsd-x64@4.40.0': + '@rollup/rollup-linux-arm-gnueabihf@4.44.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.40.0': + '@rollup/rollup-linux-arm-musleabihf@4.44.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.40.0': + '@rollup/rollup-linux-arm64-gnu@4.44.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.40.0': + '@rollup/rollup-linux-arm64-musl@4.44.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.40.0': + '@rollup/rollup-linux-loongarch64-gnu@4.44.1': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.40.0': + '@rollup/rollup-linux-powerpc64le-gnu@4.44.1': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.40.0': + '@rollup/rollup-linux-riscv64-gnu@4.44.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.40.0': + '@rollup/rollup-linux-riscv64-musl@4.44.1': optional: true - '@rollup/rollup-linux-riscv64-musl@4.40.0': + '@rollup/rollup-linux-s390x-gnu@4.44.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.40.0': + '@rollup/rollup-linux-x64-gnu@4.44.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.40.0': + '@rollup/rollup-linux-x64-musl@4.44.1': optional: true - '@rollup/rollup-linux-x64-musl@4.40.0': + '@rollup/rollup-win32-arm64-msvc@4.44.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.40.0': + '@rollup/rollup-win32-ia32-msvc@4.44.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.40.0': + '@rollup/rollup-win32-x64-msvc@4.44.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.40.0': + '@rushstack/node-core-library@5.13.1(@types/node@22.15.33)': + dependencies: + ajv: 8.13.0 + ajv-draft-04: 1.0.0(ajv@8.13.0) + ajv-formats: 3.0.1(ajv@8.13.0) + fs-extra: 11.3.0 + import-lazy: 4.0.0 + jju: 1.4.0 + resolve: 1.22.10 + semver: 7.5.4 + optionalDependencies: + '@types/node': 22.15.33 + optional: true + + '@rushstack/node-core-library@5.13.1(@types/node@22.7.5)': + dependencies: + ajv: 8.13.0 + ajv-draft-04: 1.0.0(ajv@8.13.0) + ajv-formats: 3.0.1(ajv@8.13.0) + fs-extra: 11.3.0 + import-lazy: 4.0.0 + jju: 1.4.0 + resolve: 1.22.10 + semver: 7.5.4 + optionalDependencies: + '@types/node': 22.7.5 + + '@rushstack/rig-package@0.5.3': + dependencies: + resolve: 1.22.10 + strip-json-comments: 3.1.1 + + '@rushstack/terminal@0.15.3(@types/node@22.15.33)': + dependencies: + '@rushstack/node-core-library': 5.13.1(@types/node@22.15.33) + supports-color: 8.1.1 + optionalDependencies: + '@types/node': 22.15.33 optional: true - '@safe-global/safe-apps-provider@0.18.5(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4)': + '@rushstack/terminal@0.15.3(@types/node@22.7.5)': + dependencies: + '@rushstack/node-core-library': 5.13.1(@types/node@22.7.5) + supports-color: 8.1.1 + optionalDependencies: + '@types/node': 22.7.5 + + '@rushstack/ts-command-line@5.0.1(@types/node@22.15.33)': dependencies: - '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) + '@rushstack/terminal': 0.15.3(@types/node@22.15.33) + '@types/argparse': 1.0.38 + argparse: 1.0.10 + string-argv: 0.3.2 + transitivePeerDependencies: + - '@types/node' + optional: true + + '@rushstack/ts-command-line@5.0.1(@types/node@22.7.5)': + dependencies: + '@rushstack/terminal': 0.15.3(@types/node@22.7.5) + '@types/argparse': 1.0.38 + argparse: 1.0.10 + string-argv: 0.3.2 + transitivePeerDependencies: + - '@types/node' + + '@safe-global/safe-apps-provider@0.18.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67)': + dependencies: + '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) events: 3.3.0 transitivePeerDependencies: - bufferutil @@ -10750,21 +12604,21 @@ snapshots: - utf-8-validate - zod - '@safe-global/safe-apps-sdk@9.1.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4)': + '@safe-global/safe-apps-sdk@9.1.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67)': dependencies: - '@safe-global/safe-gateway-typescript-sdk': 3.22.9 - viem: 2.27.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) + '@safe-global/safe-gateway-typescript-sdk': 3.23.1 + viem: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) transitivePeerDependencies: - bufferutil - typescript - utf-8-validate - zod - '@safe-global/safe-gateway-typescript-sdk@3.22.9': {} + '@safe-global/safe-gateway-typescript-sdk@3.23.1': {} '@scure/base@1.1.9': {} - '@scure/base@1.2.4': {} + '@scure/base@1.2.6': {} '@scure/bip32@1.1.5': dependencies: @@ -10772,97 +12626,109 @@ snapshots: '@noble/secp256k1': 1.7.1 '@scure/base': 1.1.9 - '@scure/bip32@1.3.2': - dependencies: - '@noble/curves': 1.2.0 - '@noble/hashes': 1.3.2 - '@scure/base': 1.1.9 - '@scure/bip32@1.4.0': dependencies: '@noble/curves': 1.4.2 '@noble/hashes': 1.4.0 '@scure/base': 1.1.9 - '@scure/bip32@1.6.2': + '@scure/bip32@1.7.0': dependencies: - '@noble/curves': 1.8.1 - '@noble/hashes': 1.7.1 - '@scure/base': 1.2.4 + '@noble/curves': 1.9.2 + '@noble/hashes': 1.8.0 + '@scure/base': 1.2.6 '@scure/bip39@1.1.1': dependencies: '@noble/hashes': 1.2.0 '@scure/base': 1.1.9 - '@scure/bip39@1.2.1': - dependencies: - '@noble/hashes': 1.3.2 - '@scure/base': 1.1.9 - '@scure/bip39@1.3.0': dependencies: '@noble/hashes': 1.4.0 '@scure/base': 1.1.9 - '@scure/bip39@1.5.4': + '@scure/bip39@1.6.0': dependencies: - '@noble/hashes': 1.7.1 - '@scure/base': 1.2.4 + '@noble/hashes': 1.8.0 + '@scure/base': 1.2.6 - '@semaphore-protocol/contracts@4.9.2': + '@semaphore-protocol/contracts-noir@https://codeload.github.com/hmzakhalid/semaphore-noir/tar.gz/9cd8034957a6f66b787639e224e517d9b2a4c972': + dependencies: + '@zk-kit/lean-imt.sol': 2.0.0 + + '@semaphore-protocol/contracts@4.11.1': dependencies: '@zk-kit/lean-imt.sol': 2.0.1 - '@semaphore-protocol/core@4.9.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + '@semaphore-protocol/core@https://codeload.github.com/hmzakhalid/semaphore-noir/tar.gz/caad5529009ebdeb1613c552c4e188a54b681a43(@types/snarkjs@0.7.9)(bufferutil@4.0.9)(commander@13.1.0)(utf-8-validate@5.0.10)': dependencies: - '@semaphore-protocol/group': 4.9.2 - '@semaphore-protocol/identity': 4.9.2 - '@semaphore-protocol/proof': 4.9.2(@semaphore-protocol/group@4.9.2)(@semaphore-protocol/identity@4.9.2)(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@semaphore-protocol/group': https://codeload.github.com/hmzakhalid/semaphore-noir/tar.gz/8c41614a00c121ec96e07d73145dc542739eefa8 + '@semaphore-protocol/identity': https://codeload.github.com/hmzakhalid/semaphore-noir/tar.gz/4137e5d6cf645af3fc8eb720b6c8ee33a125d0ef + '@semaphore-protocol/proof': https://codeload.github.com/hmzakhalid/semaphore-noir/tar.gz/d8989c48201f05245965f992e4fc4f0bddb7725e(@semaphore-protocol/group@https://codeload.github.com/hmzakhalid/semaphore-noir/tar.gz/8c41614a00c121ec96e07d73145dc542739eefa8)(@semaphore-protocol/identity@https://codeload.github.com/hmzakhalid/semaphore-noir/tar.gz/4137e5d6cf645af3fc8eb720b6c8ee33a125d0ef)(@types/snarkjs@0.7.9)(bufferutil@4.0.9)(commander@13.1.0)(utf-8-validate@5.0.10) transitivePeerDependencies: + - '@types/snarkjs' - bufferutil + - commander + - supports-color - utf-8-validate - '@semaphore-protocol/data@4.9.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + '@semaphore-protocol/data@4.11.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67)': dependencies: - '@semaphore-protocol/utils': 4.9.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@semaphore-protocol/utils': 4.11.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@zk-kit/utils': 1.3.0 axios: 1.6.6 ethers: 6.13.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) + viem: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) transitivePeerDependencies: - bufferutil - debug + - typescript - utf-8-validate + - zod - '@semaphore-protocol/group@4.9.2': + '@semaphore-protocol/group@https://codeload.github.com/hmzakhalid/semaphore-noir/tar.gz/8c41614a00c121ec96e07d73145dc542739eefa8': dependencies: '@zk-kit/lean-imt': 2.2.3 '@zk-kit/utils': 1.3.0 poseidon-lite: 0.3.0 - '@semaphore-protocol/identity@4.9.2': + '@semaphore-protocol/identity@https://codeload.github.com/hmzakhalid/semaphore-noir/tar.gz/4137e5d6cf645af3fc8eb720b6c8ee33a125d0ef': dependencies: '@zk-kit/baby-jubjub': 1.0.3 '@zk-kit/eddsa-poseidon': 1.0.4 '@zk-kit/utils': 1.3.0 poseidon-lite: 0.3.0 - '@semaphore-protocol/proof@4.9.2(@semaphore-protocol/group@4.9.2)(@semaphore-protocol/identity@4.9.2)(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + '@semaphore-protocol/proof@https://codeload.github.com/hmzakhalid/semaphore-noir/tar.gz/d8989c48201f05245965f992e4fc4f0bddb7725e(@semaphore-protocol/group@https://codeload.github.com/hmzakhalid/semaphore-noir/tar.gz/8c41614a00c121ec96e07d73145dc542739eefa8)(@semaphore-protocol/identity@https://codeload.github.com/hmzakhalid/semaphore-noir/tar.gz/4137e5d6cf645af3fc8eb720b6c8ee33a125d0ef)(@types/snarkjs@0.7.9)(bufferutil@4.0.9)(commander@13.1.0)(utf-8-validate@5.0.10)': dependencies: - '@semaphore-protocol/group': 4.9.2 - '@semaphore-protocol/identity': 4.9.2 - '@semaphore-protocol/utils': 4.9.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) - '@zk-kit/artifacts': 1.8.0 + '@aztec/bb.js': 0.82.2 + '@noir-lang/noir_js': 1.0.0-beta.3 + '@noir-lang/noir_wasm': 1.0.0-beta.3 + '@semaphore-protocol/group': https://codeload.github.com/hmzakhalid/semaphore-noir/tar.gz/8c41614a00c121ec96e07d73145dc542739eefa8 + '@semaphore-protocol/identity': https://codeload.github.com/hmzakhalid/semaphore-noir/tar.gz/4137e5d6cf645af3fc8eb720b6c8ee33a125d0ef + '@semaphore-protocol/utils': 4.9.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@zk-kit/artifacts': https://codeload.github.com/hmzakhalid/snark-artifacts/tar.gz/a8eb62a0e3f1d4917f7895bf4511ee1f7f221dc3(@types/snarkjs@0.7.9)(commander@13.1.0) '@zk-kit/utils': 1.3.0 ethers: 6.13.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) snarkjs: 0.7.4 + transitivePeerDependencies: + - '@types/snarkjs' + - bufferutil + - commander + - supports-color + - utf-8-validate + + '@semaphore-protocol/utils@4.11.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + dependencies: + ethers: 6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate - '@semaphore-protocol/utils@4.9.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + '@semaphore-protocol/utils@4.9.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: - ethers: 6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) + ethers: 6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate @@ -10924,6 +12790,8 @@ snapshots: '@sideway/pinpoint@2.0.0': {} + '@sinclair/typebox@0.27.8': {} + '@sindresorhus/is@5.6.0': {} '@socket.io/component-emitter@3.1.2': {} @@ -10932,58 +12800,58 @@ snapshots: dependencies: antlr4ts: 0.5.0-alpha.4 - '@solidity-parser/parser@0.19.0': {} + '@solidity-parser/parser@0.20.1': {} - '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.26.10)': + '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 + '@babel/core': 7.27.7 - '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.26.10)': + '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 + '@babel/core': 7.27.7 - '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.26.10)': + '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 + '@babel/core': 7.27.7 - '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.26.10)': + '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 + '@babel/core': 7.27.7 - '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.26.10)': + '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 + '@babel/core': 7.27.7 - '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.26.10)': + '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 + '@babel/core': 7.27.7 - '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.26.10)': + '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 + '@babel/core': 7.27.7 - '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.26.10)': + '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 + '@babel/core': 7.27.7 - '@svgr/babel-preset@8.1.0(@babel/core@7.26.10)': + '@svgr/babel-preset@8.1.0(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.26.10 - '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.26.10) - '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.26.10) - '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.26.10) - '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.26.10) - '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.26.10) - '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.26.10) - '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.26.10) - '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.26.10) + '@babel/core': 7.27.7 + '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.27.7) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.27.7) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.27.7) + '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.27.7) + '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.27.7) + '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.27.7) + '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.27.7) + '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.27.7) - '@svgr/core@8.1.0(typescript@5.8.2)': + '@svgr/core@8.1.0(typescript@5.8.3)': dependencies: - '@babel/core': 7.26.10 - '@svgr/babel-preset': 8.1.0(@babel/core@7.26.10) + '@babel/core': 7.27.7 + '@svgr/babel-preset': 8.1.0(@babel/core@7.27.7) camelcase: 6.3.0 - cosmiconfig: 8.3.6(typescript@5.8.2) + cosmiconfig: 8.3.6(typescript@5.8.3) snake-case: 3.0.4 transitivePeerDependencies: - supports-color @@ -10991,115 +12859,109 @@ snapshots: '@svgr/hast-util-to-babel-ast@8.0.0': dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.27.7 entities: 4.5.0 - '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.8.2))': + '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.8.3))': dependencies: - '@babel/core': 7.26.10 - '@svgr/babel-preset': 8.1.0(@babel/core@7.26.10) - '@svgr/core': 8.1.0(typescript@5.8.2) + '@babel/core': 7.27.7 + '@svgr/babel-preset': 8.1.0(@babel/core@7.27.7) + '@svgr/core': 8.1.0(typescript@5.8.3) '@svgr/hast-util-to-babel-ast': 8.0.0 svg-parser: 2.0.4 transitivePeerDependencies: - supports-color - '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@5.8.2))(typescript@5.8.2)': + '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@5.8.3))(typescript@5.8.3)': dependencies: - '@svgr/core': 8.1.0(typescript@5.8.2) - cosmiconfig: 8.3.6(typescript@5.8.2) + '@svgr/core': 8.1.0(typescript@5.8.3) + cosmiconfig: 8.3.6(typescript@5.8.3) deepmerge: 4.3.1 svgo: 3.3.2 transitivePeerDependencies: - typescript - '@svgr/rollup@8.1.0(rollup@4.40.0)(typescript@5.8.2)': - dependencies: - '@babel/core': 7.26.10 - '@babel/plugin-transform-react-constant-elements': 7.25.9(@babel/core@7.26.10) - '@babel/preset-env': 7.26.9(@babel/core@7.26.10) - '@babel/preset-react': 7.26.3(@babel/core@7.26.10) - '@babel/preset-typescript': 7.27.0(@babel/core@7.26.10) - '@rollup/pluginutils': 5.1.4(rollup@4.40.0) - '@svgr/core': 8.1.0(typescript@5.8.2) - '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.8.2)) - '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.8.2))(typescript@5.8.2) + '@svgr/rollup@8.1.0(rollup@4.44.1)(typescript@5.8.3)': + dependencies: + '@babel/core': 7.27.7 + '@babel/plugin-transform-react-constant-elements': 7.27.1(@babel/core@7.27.7) + '@babel/preset-env': 7.27.2(@babel/core@7.27.7) + '@babel/preset-react': 7.27.1(@babel/core@7.27.7) + '@babel/preset-typescript': 7.27.1(@babel/core@7.27.7) + '@rollup/pluginutils': 5.2.0(rollup@4.44.1) + '@svgr/core': 8.1.0(typescript@5.8.3) + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.8.3)) + '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.8.3))(typescript@5.8.3) transitivePeerDependencies: - rollup - supports-color - typescript - '@swc/core-darwin-arm64@1.11.16': + '@swc/core-darwin-arm64@1.12.7': optional: true - '@swc/core-darwin-x64@1.11.16': + '@swc/core-darwin-x64@1.12.7': optional: true - '@swc/core-linux-arm-gnueabihf@1.11.16': + '@swc/core-linux-arm-gnueabihf@1.12.7': optional: true - '@swc/core-linux-arm64-gnu@1.11.16': + '@swc/core-linux-arm64-gnu@1.12.7': optional: true - '@swc/core-linux-arm64-musl@1.11.16': + '@swc/core-linux-arm64-musl@1.12.7': optional: true - '@swc/core-linux-x64-gnu@1.11.16': + '@swc/core-linux-x64-gnu@1.12.7': optional: true - '@swc/core-linux-x64-musl@1.11.16': + '@swc/core-linux-x64-musl@1.12.7': optional: true - '@swc/core-win32-arm64-msvc@1.11.16': + '@swc/core-win32-arm64-msvc@1.12.7': optional: true - '@swc/core-win32-ia32-msvc@1.11.16': + '@swc/core-win32-ia32-msvc@1.12.7': optional: true - '@swc/core-win32-x64-msvc@1.11.16': + '@swc/core-win32-x64-msvc@1.12.7': optional: true - '@swc/core@1.11.16(@swc/helpers@0.5.17)': + '@swc/core@1.12.7': dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.21 + '@swc/types': 0.1.23 optionalDependencies: - '@swc/core-darwin-arm64': 1.11.16 - '@swc/core-darwin-x64': 1.11.16 - '@swc/core-linux-arm-gnueabihf': 1.11.16 - '@swc/core-linux-arm64-gnu': 1.11.16 - '@swc/core-linux-arm64-musl': 1.11.16 - '@swc/core-linux-x64-gnu': 1.11.16 - '@swc/core-linux-x64-musl': 1.11.16 - '@swc/core-win32-arm64-msvc': 1.11.16 - '@swc/core-win32-ia32-msvc': 1.11.16 - '@swc/core-win32-x64-msvc': 1.11.16 - '@swc/helpers': 0.5.17 + '@swc/core-darwin-arm64': 1.12.7 + '@swc/core-darwin-x64': 1.12.7 + '@swc/core-linux-arm-gnueabihf': 1.12.7 + '@swc/core-linux-arm64-gnu': 1.12.7 + '@swc/core-linux-arm64-musl': 1.12.7 + '@swc/core-linux-x64-gnu': 1.12.7 + '@swc/core-linux-x64-musl': 1.12.7 + '@swc/core-win32-arm64-msvc': 1.12.7 + '@swc/core-win32-ia32-msvc': 1.12.7 + '@swc/core-win32-x64-msvc': 1.12.7 '@swc/counter@0.1.3': {} - '@swc/helpers@0.5.17': - dependencies: - tslib: 2.8.1 - optional: true - '@swc/helpers@0.5.5': dependencies: '@swc/counter': 0.1.3 tslib: 2.8.1 - '@swc/types@0.1.21': + '@swc/types@0.1.23': dependencies: '@swc/counter': 0.1.3 - '@synthetixio/ethereum-wallet-mock@0.0.12(@depay/solana-web3.js@1.98.1)(@depay/web3-blockchains@9.8.2)(@playwright/test@1.52.0)(bufferutil@4.0.9)(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4)': + '@synthetixio/ethereum-wallet-mock@0.0.12(@depay/solana-web3.js@1.98.2)(@depay/web3-blockchains@9.8.6)(@playwright/test@1.52.0)(bufferutil@4.0.9)(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - '@depay/web3-client': 10.18.6(@depay/solana-web3.js@1.98.1)(@depay/web3-blockchains@9.8.2)(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@depay/web3-client': 10.18.6(@depay/solana-web3.js@1.98.2)(@depay/web3-blockchains@9.8.6)(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@depay/web3-mock': 14.19.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@depay/web3-mock-evm': 14.19.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@playwright/test': 1.52.0 '@synthetixio/synpress-core': 0.0.12(@playwright/test@1.52.0) - viem: 2.9.9(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) + viem: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) transitivePeerDependencies: - '@depay/solana-web3.js' - '@depay/web3-blockchains' @@ -11109,7 +12971,7 @@ snapshots: - utf-8-validate - zod - '@synthetixio/synpress-cache@0.0.12(@swc/core@1.11.16(@swc/helpers@0.5.17))(playwright-core@1.52.0)(postcss@8.5.3)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)': + '@synthetixio/synpress-cache@0.0.12(@microsoft/api-extractor@7.52.8(@types/node@22.15.33))(@swc/core@1.12.7)(playwright-core@1.52.0)(postcss@8.5.6)(typescript@5.8.3)': dependencies: axios: 1.6.7 chalk: 5.3.0 @@ -11120,7 +12982,7 @@ snapshots: gradient-string: 2.0.2 playwright-core: 1.52.0 progress: 2.0.3 - tsup: 8.0.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(postcss@8.5.3)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2) + tsup: 8.5.0(@microsoft/api-extractor@7.52.8(@types/node@22.15.33))(@swc/core@1.12.7)(postcss@8.5.6)(typescript@5.8.3) unzip-crx-3: 0.2.0 unzipper: 0.10.14 zod: 3.22.4 @@ -11128,19 +12990,21 @@ snapshots: - '@microsoft/api-extractor' - '@swc/core' - debug + - jiti - postcss - supports-color - - ts-node + - tsx - typescript + - yaml '@synthetixio/synpress-core@0.0.12(@playwright/test@1.52.0)': dependencies: '@playwright/test': 1.52.0 - '@synthetixio/synpress-metamask@0.0.12(@playwright/test@1.52.0)(@swc/core@1.11.16(@swc/helpers@0.5.17))(bufferutil@4.0.9)(playwright-core@1.52.0)(postcss@8.5.3)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)': + '@synthetixio/synpress-metamask@0.0.12(@microsoft/api-extractor@7.52.8(@types/node@22.15.33))(@playwright/test@1.52.0)(@swc/core@1.12.7)(bufferutil@4.0.9)(playwright-core@1.52.0)(postcss@8.5.6)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: '@playwright/test': 1.52.0 - '@synthetixio/synpress-cache': 0.0.12(@swc/core@1.11.16(@swc/helpers@0.5.17))(playwright-core@1.52.0)(postcss@8.5.3)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2) + '@synthetixio/synpress-cache': 0.0.12(@microsoft/api-extractor@7.52.8(@types/node@22.15.33))(@swc/core@1.12.7)(playwright-core@1.52.0)(postcss@8.5.6)(typescript@5.8.3) '@synthetixio/synpress-core': 0.0.12(@playwright/test@1.52.0) '@viem/anvil': 0.0.7(bufferutil@4.0.9)(utf-8-validate@5.0.10) fs-extra: 11.2.0 @@ -11150,17 +13014,19 @@ snapshots: - '@swc/core' - bufferutil - debug + - jiti - playwright-core - postcss - supports-color - - ts-node + - tsx - typescript - utf-8-validate + - yaml - '@synthetixio/synpress-phantom@0.0.12(@playwright/test@1.52.0)(@swc/core@1.11.16(@swc/helpers@0.5.17))(bufferutil@4.0.9)(playwright-core@1.52.0)(postcss@8.5.3)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)': + '@synthetixio/synpress-phantom@0.0.12(@microsoft/api-extractor@7.52.8(@types/node@22.15.33))(@playwright/test@1.52.0)(@swc/core@1.12.7)(bufferutil@4.0.9)(playwright-core@1.52.0)(postcss@8.5.6)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: '@playwright/test': 1.52.0 - '@synthetixio/synpress-cache': 0.0.12(@swc/core@1.11.16(@swc/helpers@0.5.17))(playwright-core@1.52.0)(postcss@8.5.3)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2) + '@synthetixio/synpress-cache': 0.0.12(@microsoft/api-extractor@7.52.8(@types/node@22.15.33))(@swc/core@1.12.7)(playwright-core@1.52.0)(postcss@8.5.6)(typescript@5.8.3) '@synthetixio/synpress-core': 0.0.12(@playwright/test@1.52.0) '@viem/anvil': 0.0.7(bufferutil@4.0.9)(utf-8-validate@5.0.10) fs-extra: 11.2.0 @@ -11170,21 +13036,23 @@ snapshots: - '@swc/core' - bufferutil - debug + - jiti - playwright-core - postcss - supports-color - - ts-node + - tsx - typescript - utf-8-validate + - yaml - '@synthetixio/synpress@4.1.0(@depay/solana-web3.js@1.98.1)(@depay/web3-blockchains@9.8.2)(@playwright/test@1.52.0)(@swc/core@1.11.16(@swc/helpers@0.5.17))(bufferutil@4.0.9)(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(playwright-core@1.52.0)(postcss@8.5.3)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4)': + '@synthetixio/synpress@4.1.0(@depay/solana-web3.js@1.98.2)(@depay/web3-blockchains@9.8.6)(@microsoft/api-extractor@7.52.8(@types/node@22.15.33))(@playwright/test@1.52.0)(@swc/core@1.12.7)(bufferutil@4.0.9)(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(playwright-core@1.52.0)(postcss@8.5.6)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: '@playwright/test': 1.52.0 - '@synthetixio/ethereum-wallet-mock': 0.0.12(@depay/solana-web3.js@1.98.1)(@depay/web3-blockchains@9.8.2)(@playwright/test@1.52.0)(bufferutil@4.0.9)(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) - '@synthetixio/synpress-cache': 0.0.12(@swc/core@1.11.16(@swc/helpers@0.5.17))(playwright-core@1.52.0)(postcss@8.5.3)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2) + '@synthetixio/ethereum-wallet-mock': 0.0.12(@depay/solana-web3.js@1.98.2)(@depay/web3-blockchains@9.8.6)(@playwright/test@1.52.0)(bufferutil@4.0.9)(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typescript@5.8.3)(utf-8-validate@5.0.10) + '@synthetixio/synpress-cache': 0.0.12(@microsoft/api-extractor@7.52.8(@types/node@22.15.33))(@swc/core@1.12.7)(playwright-core@1.52.0)(postcss@8.5.6)(typescript@5.8.3) '@synthetixio/synpress-core': 0.0.12(@playwright/test@1.52.0) - '@synthetixio/synpress-metamask': 0.0.12(@playwright/test@1.52.0)(@swc/core@1.11.16(@swc/helpers@0.5.17))(bufferutil@4.0.9)(playwright-core@1.52.0)(postcss@8.5.3)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10) - '@synthetixio/synpress-phantom': 0.0.12(@playwright/test@1.52.0)(@swc/core@1.11.16(@swc/helpers@0.5.17))(bufferutil@4.0.9)(playwright-core@1.52.0)(postcss@8.5.3)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10) + '@synthetixio/synpress-metamask': 0.0.12(@microsoft/api-extractor@7.52.8(@types/node@22.15.33))(@playwright/test@1.52.0)(@swc/core@1.12.7)(bufferutil@4.0.9)(playwright-core@1.52.0)(postcss@8.5.6)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@synthetixio/synpress-phantom': 0.0.12(@microsoft/api-extractor@7.52.8(@types/node@22.15.33))(@playwright/test@1.52.0)(@swc/core@1.12.7)(bufferutil@4.0.9)(playwright-core@1.52.0)(postcss@8.5.6)(typescript@5.8.3)(utf-8-validate@5.0.10) transitivePeerDependencies: - '@depay/solana-web3.js' - '@depay/web3-blockchains' @@ -11193,40 +13061,42 @@ snapshots: - bufferutil - debug - ethers + - jiti - playwright-core - postcss - supports-color - - ts-node + - tsx - typescript - utf-8-validate + - yaml - zod '@szmarczak/http-timer@5.0.1': dependencies: defer-to-connect: 2.0.1 - '@tailwindcss/typography@0.5.16(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2)))': + '@tailwindcss/typography@0.5.16(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3)))': dependencies: lodash.castarray: 4.4.0 lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 - tailwindcss: 3.4.17(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2)) + tailwindcss: 3.4.17(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3)) - '@tanstack/query-core@5.74.3': {} + '@tanstack/query-core@5.81.2': {} - '@tanstack/react-query@5.74.3(react@18.3.1)': + '@tanstack/react-query@5.81.2(react@18.3.1)': dependencies: - '@tanstack/query-core': 5.74.3 + '@tanstack/query-core': 5.81.2 react: 18.3.1 - '@tanstack/react-virtual@3.13.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@tanstack/react-virtual@3.13.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@tanstack/virtual-core': 3.13.8 + '@tanstack/virtual-core': 3.13.11 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@tanstack/virtual-core@3.13.8': {} + '@tanstack/virtual-core@3.13.11': {} '@theguild/remark-mermaid@0.0.5(react@18.3.1)': dependencies: @@ -11241,15 +13111,15 @@ snapshots: npm-to-yarn: 2.2.1 unist-util-visit: 5.0.0 - '@trivago/prettier-plugin-sort-imports@4.3.0(prettier@3.5.3)': + '@trivago/prettier-plugin-sort-imports@4.3.0(prettier@3.6.1)': dependencies: '@babel/generator': 7.17.7 - '@babel/parser': 7.27.0 + '@babel/parser': 7.27.7 '@babel/traverse': 7.23.2 '@babel/types': 7.17.0 javascript-natural-sort: 0.7.1 lodash: 4.17.21 - prettier: 3.5.3 + prettier: 3.6.1 transitivePeerDependencies: - supports-color @@ -11263,70 +13133,73 @@ snapshots: '@tsconfig/node16@1.0.4': {} - '@typechain/ethers-v6@0.5.1(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.2))(typescript@5.8.2)': + '@typechain/ethers-v6@0.5.1(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.3))(typescript@5.8.3)': dependencies: ethers: 5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) lodash: 4.17.21 - ts-essentials: 7.0.3(typescript@5.8.2) - typechain: 8.3.2(typescript@5.8.2) - typescript: 5.8.2 + ts-essentials: 7.0.3(typescript@5.8.3) + typechain: 8.3.2(typescript@5.8.3) + typescript: 5.8.3 - '@typechain/ethers-v6@0.5.1(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.2))(typescript@5.8.2)': + '@typechain/ethers-v6@0.5.1(ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.3))(typescript@5.8.3)': dependencies: - ethers: 6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) + ethers: 6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) lodash: 4.17.21 - ts-essentials: 7.0.3(typescript@5.8.2) - typechain: 8.3.2(typescript@5.8.2) - typescript: 5.8.2 + ts-essentials: 7.0.3(typescript@5.8.3) + typechain: 8.3.2(typescript@5.8.3) + typescript: 5.8.3 - '@typechain/hardhat@9.1.0(@typechain/ethers-v6@0.5.1(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.2))(typescript@5.8.2))(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.2))': + '@typechain/hardhat@9.1.0(@typechain/ethers-v6@0.5.1(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.3))(typescript@5.8.3))(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.3))': dependencies: - '@typechain/ethers-v6': 0.5.1(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.2))(typescript@5.8.2) + '@typechain/ethers-v6': 0.5.1(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.3))(typescript@5.8.3) ethers: 5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) fs-extra: 9.1.0 - hardhat: 2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10) - typechain: 8.3.2(typescript@5.8.2) + hardhat: 2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) + typechain: 8.3.2(typescript@5.8.3) - '@typechain/hardhat@9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.2))(typescript@5.8.2))(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.2))': + '@typechain/hardhat@9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.3))(typescript@5.8.3))(ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.3))': dependencies: - '@typechain/ethers-v6': 0.5.1(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.2))(typescript@5.8.2) - ethers: 6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@typechain/ethers-v6': 0.5.1(ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.8.3))(typescript@5.8.3) + ethers: 6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) fs-extra: 9.1.0 - hardhat: 2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10) - typechain: 8.3.2(typescript@5.8.2) + hardhat: 2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) + typechain: 8.3.2(typescript@5.8.3) '@types/acorn@4.0.6': dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 + + '@types/argparse@1.0.38': {} '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 + '@babel/parser': 7.27.7 + '@babel/types': 7.27.7 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.7 '@types/babel__generator@7.27.0': dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.27.7 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 + '@babel/parser': 7.27.7 + '@babel/types': 7.27.7 '@types/babel__traverse@7.20.7': dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.27.7 - '@types/bn.js@4.11.6': + '@types/bn.js@5.2.0': dependencies: - '@types/node': 20.10.4 + '@types/node': 22.7.5 - '@types/bn.js@5.1.6': + '@types/body-parser@1.19.6': dependencies: - '@types/node': 20.10.4 + '@types/connect': 3.4.38 + '@types/node': 22.7.5 '@types/chai-as-promised@7.1.8': dependencies: @@ -11336,7 +13209,11 @@ snapshots: '@types/concat-stream@1.6.1': dependencies: - '@types/node': 20.10.4 + '@types/node': 22.7.5 + + '@types/connect@3.4.38': + dependencies: + '@types/node': 22.7.5 '@types/d3-scale-chromatic@3.1.0': {} @@ -11352,23 +13229,36 @@ snapshots: '@types/estree-jsx@1.0.5': dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 + + '@types/estree@1.0.8': {} + + '@types/express-serve-static-core@5.0.6': + dependencies: + '@types/node': 22.7.5 + '@types/qs': 6.14.0 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.5 - '@types/estree@1.0.7': {} + '@types/express@5.0.3': + dependencies: + '@types/body-parser': 1.19.6 + '@types/express-serve-static-core': 5.0.6 + '@types/serve-static': 1.15.8 '@types/form-data@0.0.33': dependencies: - '@types/node': 20.10.4 + '@types/node': 22.7.5 '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 20.10.4 + '@types/node': 22.7.5 '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.10.4 + '@types/node': 22.7.5 '@types/hast@2.3.10': dependencies: @@ -11380,11 +13270,13 @@ snapshots: '@types/http-cache-semantics@4.0.4': {} + '@types/http-errors@2.0.5': {} + '@types/js-yaml@4.0.9': {} '@types/jsonfile@6.1.4': dependencies: - '@types/node': 20.10.4 + '@types/node': 22.7.5 '@types/katex@0.16.7': {} @@ -11400,23 +13292,23 @@ snapshots: '@types/mdx@2.0.13': {} + '@types/mime@1.3.5': {} + '@types/minimatch@5.1.2': {} '@types/mkdirp@0.5.2': dependencies: - '@types/node': 20.10.4 + '@types/node': 22.7.5 '@types/mocha@10.0.10': {} '@types/ms@2.1.0': {} - '@types/node@10.17.60': {} - - '@types/node@20.10.4': + '@types/mute-stream@0.0.4': dependencies: - undici-types: 5.26.5 + '@types/node': 22.7.5 - '@types/node@20.17.30': + '@types/node@22.15.33': dependencies: undici-types: 6.19.8 @@ -11424,40 +13316,53 @@ snapshots: dependencies: undici-types: 6.19.8 - '@types/node@8.10.66': {} - '@types/parse-json@4.0.2': {} '@types/pbkdf2@3.1.2': dependencies: - '@types/node': 20.10.4 + '@types/node': 22.7.5 '@types/prettier@2.7.3': {} - '@types/prop-types@15.7.14': {} + '@types/prop-types@15.7.15': {} + + '@types/qs@6.14.0': {} - '@types/qs@6.9.18': {} + '@types/range-parser@1.2.7': {} - '@types/react-dom@18.3.6(@types/react@18.3.20)': + '@types/react-dom@18.3.7(@types/react@18.3.23)': dependencies: - '@types/react': 18.3.20 + '@types/react': 18.3.23 '@types/react-syntax-highlighter@15.5.13': dependencies: - '@types/react': 18.3.20 + '@types/react': 18.3.23 - '@types/react@18.3.20': + '@types/react@18.3.23': dependencies: - '@types/prop-types': 15.7.14 + '@types/prop-types': 15.7.15 csstype: 3.1.3 '@types/resolve@0.0.8': dependencies: - '@types/node': 20.10.4 + '@types/node': 22.7.5 '@types/secp256k1@4.0.6': dependencies: - '@types/node': 20.10.4 + '@types/node': 22.7.5 + + '@types/send@0.17.5': + dependencies: + '@types/mime': 1.3.5 + '@types/node': 22.7.5 + + '@types/serve-static@1.15.8': + dependencies: + '@types/http-errors': 2.0.5 + '@types/node': 22.7.5 + '@types/send': 0.17.5 + + '@types/snarkjs@0.7.9': {} '@types/tinycolor2@1.4.6': {} @@ -11467,34 +13372,42 @@ snapshots: '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2)': + '@types/wrap-ansi@3.0.0': {} + + '@types/yargs-parser@21.0.3': {} + + '@types/yargs@17.0.33': + dependencies: + '@types/yargs-parser': 21.0.3 + + '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.8.2) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.8.3) '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.1)(typescript@5.8.2) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.8.2) + '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.8.3) '@typescript-eslint/visitor-keys': 7.18.0 eslint: 8.57.1 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.4.3(typescript@5.8.2) + ts-api-utils: 1.4.3(typescript@5.8.3) optionalDependencies: - typescript: 5.8.2 + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.2)': + '@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.3)': dependencies: '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.2) + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.3) '@typescript-eslint/visitor-keys': 7.18.0 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.1(supports-color@5.5.0) eslint: 8.57.1 optionalDependencies: - typescript: 5.8.2 + typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -11503,41 +13416,41 @@ snapshots: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - '@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.8.2)': + '@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.8.3)': dependencies: - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.2) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.8.2) - debug: 4.4.0(supports-color@5.5.0) + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.3) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.8.3) + debug: 4.4.1(supports-color@5.5.0) eslint: 8.57.1 - ts-api-utils: 1.4.3(typescript@5.8.2) + ts-api-utils: 1.4.3(typescript@5.8.3) optionalDependencies: - typescript: 5.8.2 + typescript: 5.8.3 transitivePeerDependencies: - supports-color '@typescript-eslint/types@7.18.0': {} - '@typescript-eslint/typescript-estree@7.18.0(typescript@5.8.2)': + '@typescript-eslint/typescript-estree@7.18.0(typescript@5.8.3)': dependencies: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.1(supports-color@5.5.0) globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.1 - ts-api-utils: 1.4.3(typescript@5.8.2) + semver: 7.7.2 + ts-api-utils: 1.4.3(typescript@5.8.3) optionalDependencies: - typescript: 5.8.2 + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.8.2)': + '@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.5.1(eslint@8.57.1) + '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.2) + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.3) eslint: 8.57.1 transitivePeerDependencies: - supports-color @@ -11555,35 +13468,149 @@ snapshots: execa: 7.2.0 get-port: 6.1.2 http-proxy: 1.18.1 - ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - debug + - utf-8-validate + + '@vitejs/plugin-react@4.6.0(vite@5.4.19(@types/node@22.7.5))': + dependencies: + '@babel/core': 7.27.7 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.27.7) + '@rolldown/pluginutils': 1.0.0-beta.19 + '@types/babel__core': 7.20.5 + react-refresh: 0.17.0 + vite: 5.4.19(@types/node@22.7.5) + transitivePeerDependencies: + - supports-color + + '@vitest/expect@1.6.1': + dependencies: + '@vitest/spy': 1.6.1 + '@vitest/utils': 1.6.1 + chai: 4.5.0 + + '@vitest/runner@1.6.1': + dependencies: + '@vitest/utils': 1.6.1 + p-limit: 5.0.0 + pathe: 1.1.2 + + '@vitest/snapshot@1.6.1': + dependencies: + magic-string: 0.30.17 + pathe: 1.1.2 + pretty-format: 29.7.0 + + '@vitest/spy@1.6.1': + dependencies: + tinyspy: 2.2.1 + + '@vitest/utils@1.6.1': + dependencies: + diff-sequences: 29.6.3 + estree-walker: 3.0.3 + loupe: 2.3.7 + pretty-format: 29.7.0 + + '@volar/language-core@2.4.18': + dependencies: + '@volar/source-map': 2.4.18 + + '@volar/source-map@2.4.18': {} + + '@volar/typescript@2.4.18': + dependencies: + '@volar/language-core': 2.4.18 + path-browserify: 1.0.1 + vscode-uri: 3.1.0 + + '@vue/compiler-core@3.5.17': + dependencies: + '@babel/parser': 7.27.7 + '@vue/shared': 3.5.17 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.17': + dependencies: + '@vue/compiler-core': 3.5.17 + '@vue/shared': 3.5.17 + + '@vue/compiler-vue2@2.7.16': + dependencies: + de-indent: 1.0.2 + he: 1.2.0 + + '@vue/language-core@2.2.0(typescript@5.8.3)': + dependencies: + '@volar/language-core': 2.4.18 + '@vue/compiler-dom': 3.5.17 + '@vue/compiler-vue2': 2.7.16 + '@vue/shared': 3.5.17 + alien-signals: 0.4.14 + minimatch: 9.0.5 + muggle-string: 0.4.1 + path-browserify: 1.0.1 + optionalDependencies: + typescript: 5.8.3 + + '@vue/shared@3.5.17': {} + + '@wagmi/connectors@5.8.5(@types/react@18.3.23)(@wagmi/core@2.17.3(@tanstack/query-core@5.81.2)(@types/react@18.3.23)(immer@10.0.2)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67)))(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67))(zod@3.25.67)': + dependencies: + '@coinbase/wallet-sdk': 4.3.3 + '@metamask/sdk': 0.32.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + '@wagmi/core': 2.17.3(@tanstack/query-core@5.81.2)(@types/react@18.3.23)(immer@10.0.2)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67)) + '@walletconnect/ethereum-provider': 2.21.1(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + cbw-sdk: '@coinbase/wallet-sdk@3.9.3' + viem: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + optionalDependencies: + typescript: 5.8.3 transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch - bufferutil - - debug - - utf-8-validate - - '@vitejs/plugin-react@4.3.4(vite@5.4.18(@types/node@22.7.5))': - dependencies: - '@babel/core': 7.26.10 - '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) - '@types/babel__core': 7.20.5 - react-refresh: 0.14.2 - vite: 5.4.18(@types/node@22.7.5) - transitivePeerDependencies: + - db0 + - encoding + - ioredis + - react - supports-color + - uploadthing + - utf-8-validate + - zod - '@wagmi/connectors@5.7.12(@types/react@18.3.20)(@wagmi/core@2.16.7(@tanstack/query-core@5.74.3)(@types/react@18.3.20)(immer@10.0.2)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.27.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4)))(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.27.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))(zod@3.24.4)': + '@wagmi/connectors@5.8.5(@types/react@18.3.23)(@wagmi/core@2.17.3(@tanstack/query-core@5.81.2)(@types/react@18.3.23)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67)))(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67))(zod@3.25.67)': dependencies: - '@coinbase/wallet-sdk': 4.3.0 + '@coinbase/wallet-sdk': 4.3.3 '@metamask/sdk': 0.32.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) - '@safe-global/safe-apps-provider': 0.18.5(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) - '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) - '@wagmi/core': 2.16.7(@tanstack/query-core@5.74.3)(@types/react@18.3.20)(immer@10.0.2)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.27.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4)) - '@walletconnect/ethereum-provider': 2.19.2(@types/react@18.3.20)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) + '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + '@wagmi/core': 2.17.3(@tanstack/query-core@5.81.2)(@types/react@18.3.23)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67)) + '@walletconnect/ethereum-provider': 2.21.1(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) cbw-sdk: '@coinbase/wallet-sdk@3.9.3' - viem: 2.27.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) + viem: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) optionalDependencies: - typescript: 5.8.2 + typescript: 5.8.3 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -11611,22 +13638,80 @@ snapshots: - utf-8-validate - zod - '@wagmi/core@2.16.7(@tanstack/query-core@5.74.3)(@types/react@18.3.20)(immer@10.0.2)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.27.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))': + '@wagmi/core@2.17.3(@tanstack/query-core@5.81.2)(@types/react@18.3.23)(immer@10.0.2)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67))': dependencies: eventemitter3: 5.0.1 - mipd: 0.0.7(typescript@5.8.2) - viem: 2.27.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) - zustand: 5.0.0(@types/react@18.3.20)(immer@10.0.2)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) + mipd: 0.0.7(typescript@5.8.3) + viem: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + zustand: 5.0.0(@types/react@18.3.23)(immer@10.0.2)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) optionalDependencies: - '@tanstack/query-core': 5.74.3 - typescript: 5.8.2 + '@tanstack/query-core': 5.81.2 + typescript: 5.8.3 transitivePeerDependencies: - '@types/react' - immer - react - use-sync-external-store - '@walletconnect/core@2.19.2(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4)': + '@wagmi/core@2.17.3(@tanstack/query-core@5.81.2)(@types/react@18.3.23)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67))': + dependencies: + eventemitter3: 5.0.1 + mipd: 0.0.7(typescript@5.8.3) + viem: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + zustand: 5.0.0(@types/react@18.3.23)(immer@10.0.2)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) + optionalDependencies: + '@tanstack/query-core': 5.81.2 + typescript: 5.8.3 + transitivePeerDependencies: + - '@types/react' + - immer + - react + - use-sync-external-store + + '@walletconnect/core@2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67)': + dependencies: + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/jsonrpc-ws-connection': 1.0.16(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.1.0 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.21.0 + '@walletconnect/utils': 2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + '@walletconnect/window-getters': 1.0.1 + es-toolkit: 1.33.0 + events: 3.3.0 + uint8arrays: 3.1.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + + '@walletconnect/core@2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67)': dependencies: '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-provider': 1.0.14 @@ -11639,8 +13724,8 @@ snapshots: '@walletconnect/relay-auth': 1.1.0 '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.19.2 - '@walletconnect/utils': 2.19.2(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) + '@walletconnect/types': 2.21.1 + '@walletconnect/utils': 2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) '@walletconnect/window-getters': 1.0.1 es-toolkit: 1.33.0 events: 3.3.0 @@ -11673,18 +13758,18 @@ snapshots: dependencies: tslib: 1.14.1 - '@walletconnect/ethereum-provider@2.19.2(@types/react@18.3.20)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4)': + '@walletconnect/ethereum-provider@2.21.1(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67)': dependencies: + '@reown/appkit': 1.7.8(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) '@walletconnect/jsonrpc-http-connection': 1.0.8 '@walletconnect/jsonrpc-provider': 1.0.14 '@walletconnect/jsonrpc-types': 1.0.4 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/keyvaluestorage': 1.1.1 - '@walletconnect/modal': 2.7.0(@types/react@18.3.20)(react@18.3.1) - '@walletconnect/sign-client': 2.19.2(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) - '@walletconnect/types': 2.19.2 - '@walletconnect/universal-provider': 2.19.2(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) - '@walletconnect/utils': 2.19.2(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) + '@walletconnect/sign-client': 2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + '@walletconnect/types': 2.21.1 + '@walletconnect/universal-provider': 2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + '@walletconnect/utils': 2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -11763,8 +13848,8 @@ snapshots: '@walletconnect/keyvaluestorage@1.1.1': dependencies: '@walletconnect/safe-json': 1.0.2 - idb-keyval: 6.2.1 - unstorage: 1.15.0(idb-keyval@6.2.1) + idb-keyval: 6.2.2 + unstorage: 1.16.0(idb-keyval@6.2.2) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -11789,31 +13874,6 @@ snapshots: '@walletconnect/safe-json': 1.0.2 pino: 7.11.0 - '@walletconnect/modal-core@2.7.0(@types/react@18.3.20)(react@18.3.1)': - dependencies: - valtio: 1.11.2(@types/react@18.3.20)(react@18.3.1) - transitivePeerDependencies: - - '@types/react' - - react - - '@walletconnect/modal-ui@2.7.0(@types/react@18.3.20)(react@18.3.1)': - dependencies: - '@walletconnect/modal-core': 2.7.0(@types/react@18.3.20)(react@18.3.1) - lit: 2.8.0 - motion: 10.16.2 - qrcode: 1.5.3 - transitivePeerDependencies: - - '@types/react' - - react - - '@walletconnect/modal@2.7.0(@types/react@18.3.20)(react@18.3.1)': - dependencies: - '@walletconnect/modal-core': 2.7.0(@types/react@18.3.20)(react@18.3.1) - '@walletconnect/modal-ui': 2.7.0(@types/react@18.3.20)(react@18.3.1) - transitivePeerDependencies: - - '@types/react' - - react - '@walletconnect/relay-api@1.0.11': dependencies: '@walletconnect/jsonrpc-types': 1.0.4 @@ -11830,16 +13890,51 @@ snapshots: dependencies: tslib: 1.14.1 - '@walletconnect/sign-client@2.19.2(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4)': + '@walletconnect/sign-client@2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67)': + dependencies: + '@walletconnect/core': 2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/logger': 2.1.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.21.0 + '@walletconnect/utils': 2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + + '@walletconnect/sign-client@2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67)': dependencies: - '@walletconnect/core': 2.19.2(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) + '@walletconnect/core': 2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/logger': 2.1.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.19.2 - '@walletconnect/utils': 2.19.2(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) + '@walletconnect/types': 2.21.1 + '@walletconnect/utils': 2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -11869,7 +13964,35 @@ snapshots: dependencies: tslib: 1.14.1 - '@walletconnect/types@2.19.2': + '@walletconnect/types@2.21.0': + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - db0 + - ioredis + - uploadthing + + '@walletconnect/types@2.21.1': dependencies: '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 @@ -11897,7 +14020,46 @@ snapshots: - ioredis - uploadthing - '@walletconnect/universal-provider@2.19.2(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4)': + '@walletconnect/universal-provider@2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67)': + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/jsonrpc-http-connection': 1.0.8 + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + '@walletconnect/sign-client': 2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + '@walletconnect/types': 2.21.0 + '@walletconnect/utils': 2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + es-toolkit: 1.33.0 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + + '@walletconnect/universal-provider@2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67)': dependencies: '@walletconnect/events': 1.0.1 '@walletconnect/jsonrpc-http-connection': 1.0.8 @@ -11906,9 +14068,9 @@ snapshots: '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/keyvaluestorage': 1.1.1 '@walletconnect/logger': 2.1.2 - '@walletconnect/sign-client': 2.19.2(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) - '@walletconnect/types': 2.19.2 - '@walletconnect/utils': 2.19.2(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) + '@walletconnect/sign-client': 2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + '@walletconnect/types': 2.21.1 + '@walletconnect/utils': 2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) es-toolkit: 1.33.0 events: 3.3.0 transitivePeerDependencies: @@ -11936,7 +14098,50 @@ snapshots: - utf-8-validate - zod - '@walletconnect/utils@2.19.2(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4)': + '@walletconnect/utils@2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67)': + dependencies: + '@noble/ciphers': 1.2.1 + '@noble/curves': 1.8.1 + '@noble/hashes': 1.7.1 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.1.0 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.21.0 + '@walletconnect/window-getters': 1.0.1 + '@walletconnect/window-metadata': 1.0.1 + bs58: 6.0.0 + detect-browser: 5.3.0 + query-string: 7.1.3 + uint8arrays: 3.1.0 + viem: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + + '@walletconnect/utils@2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67)': dependencies: '@noble/ciphers': 1.2.1 '@noble/curves': 1.8.1 @@ -11947,14 +14152,14 @@ snapshots: '@walletconnect/relay-auth': 1.1.0 '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.19.2 + '@walletconnect/types': 2.21.1 '@walletconnect/window-getters': 1.0.1 '@walletconnect/window-metadata': 1.0.1 bs58: 6.0.0 detect-browser: 5.3.0 query-string: 7.1.3 uint8arrays: 3.1.0 - viem: 2.23.2(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) + viem: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -11988,7 +14193,18 @@ snapshots: '@walletconnect/window-getters': 1.0.1 tslib: 1.14.1 - '@zk-kit/artifacts@1.8.0': {} + '@zk-kit/artifacts@https://codeload.github.com/hmzakhalid/snark-artifacts/tar.gz/a8eb62a0e3f1d4917f7895bf4511ee1f7f221dc3(@types/snarkjs@0.7.9)(commander@13.1.0)': + dependencies: + '@commander-js/extra-typings': 12.1.0(commander@13.1.0) + '@inquirer/input': 2.3.0 + '@inquirer/select': 2.5.0 + '@noir-lang/noir_js': 1.0.0-beta.3 + circomkit: 0.2.1(@types/snarkjs@0.7.9)(snarkjs@0.7.4) + ora: 5.4.1 + snarkjs: 0.7.4 + transitivePeerDependencies: + - '@types/snarkjs' + - commander '@zk-kit/baby-jubjub@1.0.3': dependencies: @@ -12023,25 +14239,30 @@ snapshots: abbrev@1.0.9: {} - abitype@1.0.0(typescript@5.8.2)(zod@3.24.4): + abitype@1.0.8(typescript@5.8.3)(zod@3.22.4): optionalDependencies: - typescript: 5.8.2 - zod: 3.24.4 + typescript: 5.8.3 + zod: 3.22.4 - abitype@1.0.8(typescript@5.8.2)(zod@3.24.4): + abitype@1.0.8(typescript@5.8.3)(zod@3.25.67): optionalDependencies: - typescript: 5.8.2 - zod: 3.24.4 + typescript: 5.8.3 + zod: 3.25.67 + + accepts@2.0.0: + dependencies: + mime-types: 3.0.1 + negotiator: 1.0.0 - acorn-jsx@5.3.2(acorn@8.14.1): + acorn-jsx@5.3.2(acorn@8.15.0): dependencies: - acorn: 8.14.1 + acorn: 8.15.0 acorn-walk@8.3.4: dependencies: - acorn: 8.14.1 + acorn: 8.15.0 - acorn@8.14.1: {} + acorn@8.15.0: {} add@2.0.6: {} @@ -12053,7 +14274,7 @@ snapshots: agent-base@6.0.2: dependencies: - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.1(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -12062,6 +14283,14 @@ snapshots: clean-stack: 2.2.0 indent-string: 4.0.0 + ajv-draft-04@1.0.0(ajv@8.13.0): + optionalDependencies: + ajv: 8.13.0 + + ajv-formats@3.0.1(ajv@8.13.0): + optionalDependencies: + ajv: 8.13.0 + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -12069,6 +14298,20 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ajv@8.12.0: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + + ajv@8.13.0: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 @@ -12076,6 +14319,8 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + alien-signals@0.4.14: {} + amdefine@1.0.1: optional: true @@ -12105,6 +14350,8 @@ snapshots: dependencies: color-convert: 2.0.1 + ansi-styles@5.2.0: {} + ansi-styles@6.2.1: {} antlr4@4.13.2: {} @@ -12144,7 +14391,7 @@ snapshots: asn1.js@4.10.1: dependencies: - bn.js: 4.12.1 + bn.js: 4.12.2 inherits: 2.0.4 minimalistic-assert: 1.0.1 @@ -12178,46 +14425,52 @@ snapshots: atomic-sleep@1.0.0: {} - autoprefixer@10.4.21(postcss@8.5.3): + autoprefixer@10.4.21(postcss@8.5.6): dependencies: - browserslist: 4.24.4 - caniuse-lite: 1.0.30001713 + browserslist: 4.25.1 + caniuse-lite: 1.0.30001726 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.1.0 - axios@0.21.4(debug@4.4.0): + axios@0.21.4(debug@4.4.1): dependencies: - follow-redirects: 1.15.9(debug@4.4.0) + follow-redirects: 1.15.9(debug@4.4.1) transitivePeerDependencies: - debug - axios@1.6.6: + axios@0.26.1: + dependencies: + follow-redirects: 1.15.9(debug@4.4.1) + transitivePeerDependencies: + - debug + + axios@1.10.0: dependencies: - follow-redirects: 1.15.9(debug@4.4.0) - form-data: 4.0.2 + follow-redirects: 1.15.9(debug@4.4.1) + form-data: 4.0.3 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug - axios@1.6.7: + axios@1.6.6: dependencies: - follow-redirects: 1.15.9(debug@4.4.0) - form-data: 4.0.2 + follow-redirects: 1.15.9(debug@4.4.1) + form-data: 4.0.3 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug - axios@1.8.4: + axios@1.6.7: dependencies: - follow-redirects: 1.15.9(debug@4.4.0) - form-data: 4.0.2 + follow-redirects: 1.15.9(debug@4.4.1) + form-data: 4.0.3 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug @@ -12226,42 +14479,42 @@ snapshots: babel-plugin-macros@3.1.0: dependencies: - '@babel/runtime': 7.27.0 + '@babel/runtime': 7.27.6 cosmiconfig: 7.1.0 resolve: 1.22.10 - babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.26.10): + babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.27.7): dependencies: - '@babel/compat-data': 7.26.8 - '@babel/core': 7.26.10 - '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.10) + '@babel/compat-data': 7.27.7 + '@babel/core': 7.27.7 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.7) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.26.10): + babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.27.7): dependencies: - '@babel/core': 7.26.10 - '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.10) - core-js-compat: 3.41.0 + '@babel/core': 7.27.7 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.7) + core-js-compat: 3.43.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.26.10): + babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.27.7): dependencies: - '@babel/core': 7.26.10 - '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.10) + '@babel/core': 7.27.7 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.7) transitivePeerDependencies: - supports-color - babel-plugin-styled-components@2.1.4(@babel/core@7.26.10)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@18.3.1(react@18.3.1))(react-is@16.13.1)(react@18.3.1))(supports-color@5.5.0): + babel-plugin-styled-components@2.1.4(@babel/core@7.27.7)(styled-components@5.3.11(@babel/core@7.27.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(supports-color@5.5.0): dependencies: - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10) + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-module-imports': 7.27.1(supports-color@5.5.0) + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.7) lodash: 4.17.21 picomatch: 2.3.1 - styled-components: 5.3.11(@babel/core@7.26.10)(react-dom@18.3.1(react@18.3.1))(react-is@16.13.1)(react@18.3.1) + styled-components: 5.3.11(@babel/core@7.27.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1) transitivePeerDependencies: - '@babel/core' - supports-color @@ -12282,6 +14535,10 @@ snapshots: bech32@1.1.4: {} + better-path-resolve@1.0.0: + dependencies: + is-windows: 1.0.2 + bfj@7.1.0: dependencies: bluebird: 3.7.2 @@ -12292,13 +14549,29 @@ snapshots: big-integer@1.6.52: {} + big.js@6.2.2: {} + binary-extensions@2.3.0: {} + binary-install@1.1.0: + dependencies: + axios: 0.26.1 + rimraf: 3.0.2 + tar: 6.2.1 + transitivePeerDependencies: + - debug + binary@0.3.0: dependencies: buffers: 0.1.1 chainsaw: 0.1.0 + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + blake2b-wasm@2.4.0: dependencies: b4a: 1.6.7 @@ -12312,9 +14585,23 @@ snapshots: bn.js@4.11.6: {} - bn.js@4.12.1: {} + bn.js@4.12.2: {} + + bn.js@5.2.2: {} - bn.js@5.2.1: {} + body-parser@2.2.0: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 4.4.1(supports-color@5.5.0) + http-errors: 2.0.0 + iconv-lite: 0.6.3 + on-finished: 2.4.1 + qs: 6.14.0 + raw-body: 3.0.0 + type-is: 2.0.1 + transitivePeerDependencies: + - supports-color boolbase@1.0.0: {} @@ -12331,12 +14618,12 @@ snapshots: widest-line: 3.1.0 wrap-ansi: 7.0.0 - brace-expansion@1.1.11: + brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.0.1: + brace-expansion@2.0.2: dependencies: balanced-match: 1.0.2 @@ -12378,13 +14665,13 @@ snapshots: browserify-rsa@4.1.1: dependencies: - bn.js: 5.2.1 + bn.js: 5.2.2 randombytes: 2.1.0 safe-buffer: 5.2.1 browserify-sign@4.2.3: dependencies: - bn.js: 5.2.1 + bn.js: 5.2.2 browserify-rsa: 4.1.1 create-hash: 1.2.0 create-hmac: 1.1.7 @@ -12399,12 +14686,12 @@ snapshots: dependencies: pako: 1.0.11 - browserslist@4.24.4: + browserslist@4.25.1: dependencies: - caniuse-lite: 1.0.30001713 - electron-to-chromium: 1.5.137 + caniuse-lite: 1.0.30001726 + electron-to-chromium: 1.5.176 node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.24.4) + update-browserslist-db: 1.1.3(browserslist@4.25.1) bs58@4.0.1: dependencies: @@ -12448,9 +14735,9 @@ snapshots: builtin-status-codes@3.0.0: {} - bundle-require@4.2.1(esbuild@0.19.12): + bundle-require@5.1.0(esbuild@0.25.6): dependencies: - esbuild: 0.19.12 + esbuild: 0.25.6 load-tsconfig: 0.2.5 busboy@1.6.0: @@ -12467,10 +14754,10 @@ snapshots: dependencies: '@types/http-cache-semantics': 4.0.4 get-stream: 6.0.1 - http-cache-semantics: 4.1.1 + http-cache-semantics: 4.2.0 keyv: 4.5.4 mimic-response: 4.0.0 - normalize-url: 8.0.1 + normalize-url: 8.0.2 responselike: 3.0.0 call-bind-apply-helpers@1.0.2: @@ -12500,7 +14787,7 @@ snapshots: camelize@1.0.1: {} - caniuse-lite@1.0.30001713: {} + caniuse-lite@1.0.30001726: {} caseless@0.12.0: {} @@ -12566,6 +14853,8 @@ snapshots: character-reference-invalid@2.0.1: {} + chardet@0.7.0: {} + charenc@0.0.2: {} check-error@1.0.3: @@ -12574,6 +14863,8 @@ snapshots: check-types@11.2.3: {} + child_process@1.0.2: {} + chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -12590,21 +14881,54 @@ snapshots: dependencies: readdirp: 4.1.2 + chownr@2.0.0: {} + ci-info@2.0.0: {} + ci-info@3.9.0: {} + cipher-base@1.0.6: dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 + circom_runtime@0.1.21: + dependencies: + ffjavascript: 0.2.56 + circom_runtime@0.1.25: dependencies: ffjavascript: 0.3.0 + circom_tester@0.0.19: + dependencies: + chai: 4.5.0 + child_process: 1.0.2 + ffjavascript: 0.2.63 + fnv-plus: 1.3.1 + r1csfile: 0.0.41 + snarkjs: 0.5.0 + tmp-promise: 3.0.3 + util: 0.12.5 + + circomkit@0.2.1(@types/snarkjs@0.7.9)(snarkjs@0.7.4): + dependencies: + '@types/snarkjs': 0.7.9 + circom_tester: 0.0.19 + commander: 12.1.0 + loglevel: 1.9.2 + snarkjs: 0.7.4 + clean-stack@2.2.0: {} cli-boxes@2.2.1: {} + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + + cli-spinners@2.9.2: {} + cli-table3@0.5.1: dependencies: object-assign: 4.1.1 @@ -12618,6 +14942,8 @@ snapshots: optionalDependencies: '@colors/colors': 1.5.0 + cli-width@4.1.0: {} + client-only@0.0.1: {} clipboardy@1.2.2: @@ -12643,6 +14969,14 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + cliui@9.0.1: + dependencies: + string-width: 7.2.0 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.0 + + clone@1.0.4: {} + clsx@1.2.1: {} clsx@2.1.1: {} @@ -12675,6 +15009,8 @@ snapshots: dependencies: delayed-stream: 1.0.0 + comlink@4.4.2: {} + comma-separated-tokens@1.0.8: {} comma-separated-tokens@2.0.3: {} @@ -12699,6 +15035,8 @@ snapshots: commander@12.0.0: {} + commander@12.1.0: {} + commander@13.1.0: {} commander@4.1.1: {} @@ -12709,6 +15047,8 @@ snapshots: commondir@1.0.1: {} + compare-versions@6.1.1: {} + compute-scroll-into-view@3.1.1: {} concat-map@0.0.1: {} @@ -12720,27 +15060,51 @@ snapshots: readable-stream: 2.3.8 typedarray: 0.0.6 - concurrently@9.1.2: + concurrently@9.2.0: dependencies: chalk: 4.1.2 lodash: 4.17.21 rxjs: 7.8.2 - shell-quote: 1.8.2 + shell-quote: 1.8.3 supports-color: 8.1.1 tree-kill: 1.2.2 yargs: 17.7.2 + confbox@0.1.8: {} + + confbox@0.2.2: {} + config-chain@1.1.13: dependencies: ini: 1.3.8 proto-list: 1.2.4 - connectkit@1.9.0(@babel/core@7.26.10)(@tanstack/react-query@5.74.3(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@16.13.1)(react@18.3.1)(viem@2.27.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))(wagmi@2.14.16(@tanstack/query-core@5.74.3)(@tanstack/react-query@5.74.3(react@18.3.1))(@types/react@18.3.20)(bufferutil@4.0.9)(immer@10.0.2)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.27.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))(zod@3.24.4)): + connectkit@1.9.1(@babel/core@7.27.7)(@tanstack/react-query@5.81.2(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67))(wagmi@2.15.6(@tanstack/query-core@5.81.2)(@tanstack/react-query@5.81.2(react@18.3.1))(@types/react@18.3.23)(bufferutil@4.0.9)(immer@10.0.2)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67))(zod@3.25.67)): + dependencies: + '@tanstack/react-query': 5.81.2(react@18.3.1) + buffer: 6.0.3 + detect-browser: 5.3.0 + family: 0.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67))(wagmi@2.15.6(@tanstack/query-core@5.81.2)(@tanstack/react-query@5.81.2(react@18.3.1))(@types/react@18.3.23)(bufferutil@4.0.9)(immer@10.0.2)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67))(zod@3.25.67)) + framer-motion: 6.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + qrcode: 1.5.4 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-transition-state: 1.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-use-measure: 2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + resize-observer-polyfill: 1.5.1 + styled-components: 5.3.11(@babel/core@7.27.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1) + viem: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + wagmi: 2.15.6(@tanstack/query-core@5.81.2)(@tanstack/react-query@5.81.2(react@18.3.1))(@types/react@18.3.23)(bufferutil@4.0.9)(immer@10.0.2)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67))(zod@3.25.67) + transitivePeerDependencies: + - '@babel/core' + - react-is + + connectkit@1.9.1(@babel/core@7.27.7)(@tanstack/react-query@5.81.2(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67))(wagmi@2.15.6(@tanstack/query-core@5.81.2)(@tanstack/react-query@5.81.2(react@18.3.1))(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67))(zod@3.25.67)): dependencies: - '@tanstack/react-query': 5.74.3(react@18.3.1) + '@tanstack/react-query': 5.81.2(react@18.3.1) buffer: 6.0.3 detect-browser: 5.3.0 - family: 0.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(viem@2.27.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))(wagmi@2.14.16(@tanstack/query-core@5.74.3)(@tanstack/react-query@5.74.3(react@18.3.1))(@types/react@18.3.20)(bufferutil@4.0.9)(immer@10.0.2)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.27.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))(zod@3.24.4)) + family: 0.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67))(wagmi@2.15.6(@tanstack/query-core@5.81.2)(@tanstack/react-query@5.81.2(react@18.3.1))(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67))(zod@3.25.67)) framer-motion: 6.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) qrcode: 1.5.4 react: 18.3.1 @@ -12748,28 +15112,40 @@ snapshots: react-transition-state: 1.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-use-measure: 2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) resize-observer-polyfill: 1.5.1 - styled-components: 5.3.11(@babel/core@7.26.10)(react-dom@18.3.1(react@18.3.1))(react-is@16.13.1)(react@18.3.1) - viem: 2.27.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) - wagmi: 2.14.16(@tanstack/query-core@5.74.3)(@tanstack/react-query@5.74.3(react@18.3.1))(@types/react@18.3.20)(bufferutil@4.0.9)(immer@10.0.2)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.27.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))(zod@3.24.4) + styled-components: 5.3.11(@babel/core@7.27.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1) + viem: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + wagmi: 2.15.6(@tanstack/query-core@5.81.2)(@tanstack/react-query@5.81.2(react@18.3.1))(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67))(zod@3.25.67) transitivePeerDependencies: - '@babel/core' - react-is + consola@3.4.2: {} + console-browserify@1.2.0: {} constants-browserify@1.0.0: {} + content-disposition@1.0.0: + dependencies: + safe-buffer: 5.2.1 + + content-type@1.0.5: {} + convert-source-map@1.9.0: {} convert-source-map@2.0.0: {} cookie-es@1.2.2: {} + cookie-signature@1.2.2: {} + cookie@0.4.2: {} - core-js-compat@3.41.0: + cookie@0.7.2: {} + + core-js-compat@3.43.0: dependencies: - browserslist: 4.24.4 + browserslist: 4.25.1 core-util-is@1.0.3: {} @@ -12785,22 +15161,29 @@ snapshots: path-type: 4.0.0 yaml: 1.10.2 - cosmiconfig@8.3.6(typescript@5.8.2): + cosmiconfig@8.3.6(typescript@5.8.3): dependencies: import-fresh: 3.3.1 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: - typescript: 5.8.2 + typescript: 5.8.3 crc-32@1.2.2: {} create-ecdh@4.0.4: dependencies: - bn.js: 4.12.1 + bn.js: 4.12.2 elliptic: 6.6.1 + create-hash@1.1.3: + dependencies: + cipher-base: 1.0.6 + inherits: 2.0.4 + ripemd160: 2.0.1 + sha.js: 2.4.11 + create-hash@1.2.0: dependencies: cipher-base: 1.0.6 @@ -12848,7 +15231,7 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - crossws@0.3.4: + crossws@0.3.5: dependencies: uncrypto: 0.1.3 @@ -12864,7 +15247,7 @@ snapshots: diffie-hellman: 5.0.3 hash-base: 3.0.5 inherits: 2.0.4 - pbkdf2: 3.1.2 + pbkdf2: 3.1.3 public-encrypt: 4.0.3 randombytes: 2.1.0 randomfill: 1.0.4 @@ -13086,23 +15469,25 @@ snapshots: date-fns@2.30.0: dependencies: - '@babel/runtime': 7.27.0 + '@babel/runtime': 7.27.6 dayjs@1.11.13: {} + de-indent@1.0.2: {} + death@1.1.0: {} debug@4.3.7: dependencies: ms: 2.1.3 - debug@4.4.0(supports-color@5.5.0): + debug@4.4.1(supports-color@5.5.0): dependencies: ms: 2.1.3 optionalDependencies: supports-color: 5.5.0 - debug@4.4.0(supports-color@8.1.1): + debug@4.4.1(supports-color@8.1.1): dependencies: ms: 2.1.3 optionalDependencies: @@ -13112,7 +15497,7 @@ snapshots: decamelize@4.0.0: {} - decode-named-character-reference@1.1.0: + decode-named-character-reference@1.2.0: dependencies: character-entities: 2.0.2 @@ -13132,6 +15517,10 @@ snapshots: deepmerge@4.3.1: {} + defaults@1.0.4: + dependencies: + clone: 1.0.4 + defer-to-connect@2.0.1: {} define-data-property@1.1.4: @@ -13158,6 +15547,10 @@ snapshots: dequal@2.0.3: {} + derive-valtio@0.1.0(valtio@1.13.2(@types/react@18.3.23)(react@18.3.1)): + dependencies: + valtio: 1.13.2(@types/react@18.3.23)(react@18.3.1) + des.js@1.1.0: dependencies: inherits: 2.0.4 @@ -13167,6 +15560,8 @@ snapshots: detect-browser@5.3.0: {} + detect-indent@6.1.0: {} + detect-libc@2.0.4: {} devlop@1.1.0: @@ -13175,13 +15570,15 @@ snapshots: didyoumean@1.2.2: {} + diff-sequences@29.6.3: {} + diff@4.0.2: {} diff@5.2.0: {} diffie-hellman@5.0.3: dependencies: - bn.js: 4.12.1 + bn.js: 4.12.2 miller-rabin: 4.0.1 randombytes: 2.1.0 @@ -13228,7 +15625,7 @@ snapshots: no-case: 3.0.4 tslib: 2.8.1 - dotenv@16.4.7: {} + dotenv@16.6.0: {} dunder-proto@1.0.1: dependencies: @@ -13242,31 +15639,33 @@ snapshots: duplexify@4.1.3: dependencies: - end-of-stream: 1.4.4 + end-of-stream: 1.4.5 inherits: 2.0.4 readable-stream: 3.6.2 stream-shift: 1.0.3 eastasianwidth@0.2.0: {} - eciesjs@0.4.14: + eciesjs@0.4.15: dependencies: - '@ecies/ciphers': 0.2.3(@noble/ciphers@1.2.1) - '@noble/ciphers': 1.2.1 - '@noble/curves': 1.8.1 - '@noble/hashes': 1.7.1 + '@ecies/ciphers': 0.2.3(@noble/ciphers@1.3.0) + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.2 + '@noble/hashes': 1.8.0 + + ee-first@1.1.1: {} ejs@3.1.10: dependencies: jake: 10.9.2 - electron-to-chromium@1.5.137: {} + electron-to-chromium@1.5.176: {} elkjs@0.9.3: {} elliptic@6.6.1: dependencies: - bn.js: 4.12.1 + bn.js: 4.12.2 brorand: 1.1.0 hash.js: 1.1.7 hmac-drbg: 1.0.1 @@ -13276,13 +15675,17 @@ snapshots: email-addresses@5.0.0: {} + emoji-regex@10.4.0: {} + emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} encode-utf8@1.0.3: {} - end-of-stream@1.4.4: + encodeurl@2.0.0: {} + + end-of-stream@1.4.5: dependencies: once: 1.4.0 @@ -13307,7 +15710,7 @@ snapshots: entities@4.5.0: {} - entities@6.0.0: {} + entities@6.0.1: {} env-paths@2.2.1: {} @@ -13332,32 +15735,6 @@ snapshots: es-toolkit@1.33.0: {} - esbuild@0.19.12: - optionalDependencies: - '@esbuild/aix-ppc64': 0.19.12 - '@esbuild/android-arm': 0.19.12 - '@esbuild/android-arm64': 0.19.12 - '@esbuild/android-x64': 0.19.12 - '@esbuild/darwin-arm64': 0.19.12 - '@esbuild/darwin-x64': 0.19.12 - '@esbuild/freebsd-arm64': 0.19.12 - '@esbuild/freebsd-x64': 0.19.12 - '@esbuild/linux-arm': 0.19.12 - '@esbuild/linux-arm64': 0.19.12 - '@esbuild/linux-ia32': 0.19.12 - '@esbuild/linux-loong64': 0.19.12 - '@esbuild/linux-mips64el': 0.19.12 - '@esbuild/linux-ppc64': 0.19.12 - '@esbuild/linux-riscv64': 0.19.12 - '@esbuild/linux-s390x': 0.19.12 - '@esbuild/linux-x64': 0.19.12 - '@esbuild/netbsd-x64': 0.19.12 - '@esbuild/openbsd-x64': 0.19.12 - '@esbuild/sunos-x64': 0.19.12 - '@esbuild/win32-arm64': 0.19.12 - '@esbuild/win32-ia32': 0.19.12 - '@esbuild/win32-x64': 0.19.12 - esbuild@0.20.0: optionalDependencies: '@esbuild/aix-ppc64': 0.20.0 @@ -13410,14 +15787,54 @@ snapshots: '@esbuild/win32-ia32': 0.21.5 '@esbuild/win32-x64': 0.21.5 + esbuild@0.25.6: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.6 + '@esbuild/android-arm': 0.25.6 + '@esbuild/android-arm64': 0.25.6 + '@esbuild/android-x64': 0.25.6 + '@esbuild/darwin-arm64': 0.25.6 + '@esbuild/darwin-x64': 0.25.6 + '@esbuild/freebsd-arm64': 0.25.6 + '@esbuild/freebsd-x64': 0.25.6 + '@esbuild/linux-arm': 0.25.6 + '@esbuild/linux-arm64': 0.25.6 + '@esbuild/linux-ia32': 0.25.6 + '@esbuild/linux-loong64': 0.25.6 + '@esbuild/linux-mips64el': 0.25.6 + '@esbuild/linux-ppc64': 0.25.6 + '@esbuild/linux-riscv64': 0.25.6 + '@esbuild/linux-s390x': 0.25.6 + '@esbuild/linux-x64': 0.25.6 + '@esbuild/netbsd-arm64': 0.25.6 + '@esbuild/netbsd-x64': 0.25.6 + '@esbuild/openbsd-arm64': 0.25.6 + '@esbuild/openbsd-x64': 0.25.6 + '@esbuild/openharmony-arm64': 0.25.6 + '@esbuild/sunos-x64': 0.25.6 + '@esbuild/win32-arm64': 0.25.6 + '@esbuild/win32-ia32': 0.25.6 + '@esbuild/win32-x64': 0.25.6 + escalade@3.2.0: {} + escape-html@1.0.3: {} + escape-string-regexp@1.0.5: {} escape-string-regexp@4.0.0: {} escape-string-regexp@5.0.0: {} + escodegen@1.14.3: + dependencies: + esprima: 4.0.1 + estraverse: 4.3.0 + esutils: 2.0.3 + optionator: 0.8.3 + optionalDependencies: + source-map: 0.6.1 + escodegen@1.8.1: dependencies: esprima: 2.7.3 @@ -13435,7 +15852,7 @@ snapshots: dependencies: eslint: 8.57.1 - eslint-plugin-react-refresh@0.4.19(eslint@8.57.1): + eslint-plugin-react-refresh@0.4.20(eslint@8.57.1): dependencies: eslint: 8.57.1 @@ -13448,7 +15865,7 @@ snapshots: eslint@8.57.1: dependencies: - '@eslint-community/eslint-utils': 4.5.1(eslint@8.57.1) + '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) '@eslint-community/regexpp': 4.12.1 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.57.1 @@ -13459,7 +15876,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.1(supports-color@5.5.0) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -13491,8 +15908,8 @@ snapshots: espree@9.6.1: dependencies: - acorn: 8.14.1 - acorn-jsx: 5.3.2(acorn@8.14.1) + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) eslint-visitor-keys: 3.4.3 esprima@1.2.2: {} @@ -13511,11 +15928,13 @@ snapshots: estraverse@1.9.3: {} + estraverse@4.3.0: {} + estraverse@5.3.0: {} estree-util-attach-comments@2.1.1: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 estree-util-build-jsx@2.2.2: dependencies: @@ -13535,7 +15954,7 @@ snapshots: estree-util-value-to-estree@3.4.0: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 estree-util-visit@1.2.1: dependencies: @@ -13546,10 +15965,12 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 esutils@2.0.3: {} + etag@1.8.1: {} + eth-block-tracker@7.1.0: dependencies: '@metamask/eth-json-rpc-provider': 1.0.1 @@ -13563,7 +15984,7 @@ snapshots: eth-gas-reporter@0.2.27(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@solidity-parser/parser': 0.14.5 - axios: 1.8.4 + axios: 1.10.0 cli-table3: 0.5.1 colors: 1.4.0 ethereum-cryptography: 1.2.0 @@ -13599,7 +16020,7 @@ snapshots: ethereum-bloom-filters@1.2.0: dependencies: - '@noble/hashes': 1.7.1 + '@noble/hashes': 1.8.0 ethereum-cryptography@0.1.3: dependencies: @@ -13612,7 +16033,7 @@ snapshots: create-hmac: 1.1.7 hash.js: 1.1.7 keccak: 3.0.4 - pbkdf2: 3.1.2 + pbkdf2: 3.1.3 randombytes: 2.1.0 safe-buffer: 5.2.1 scrypt-js: 3.0.1 @@ -13633,25 +16054,10 @@ snapshots: '@scure/bip32': 1.4.0 '@scure/bip39': 1.3.0 - ethereumjs-abi@0.6.8: - dependencies: - bn.js: 4.12.1 - ethereumjs-util: 6.2.1 - - ethereumjs-util@6.2.1: - dependencies: - '@types/bn.js': 4.11.6 - bn.js: 4.12.1 - create-hash: 1.2.0 - elliptic: 6.6.1 - ethereum-cryptography: 0.1.3 - ethjs-util: 0.1.6 - rlp: 2.2.7 - ethereumjs-util@7.1.5: dependencies: - '@types/bn.js': 5.1.6 - bn.js: 5.2.1 + '@types/bn.js': 5.2.0 + bn.js: 5.2.2 create-hash: 1.2.0 ethereum-cryptography: 0.1.3 rlp: 2.2.7 @@ -13705,7 +16111,7 @@ snapshots: - bufferutil - utf-8-validate - ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10): + ethers@6.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@adraffy/ens-normalize': 1.10.1 '@noble/curves': 1.2.0 @@ -13723,11 +16129,6 @@ snapshots: bn.js: 4.11.6 number-to-bn: 1.7.0 - ethjs-util@0.1.6: - dependencies: - is-hex-prefixed: 1.0.0 - strip-hex-prefix: 1.0.0 - eventemitter2@6.4.9: {} eventemitter3@4.0.7: {} @@ -13751,47 +16152,96 @@ snapshots: signal-exit: 3.0.7 strip-eof: 1.0.0 - execa@5.1.1: + execa@7.2.0: dependencies: cross-spawn: 7.0.6 get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 + human-signals: 4.3.1 + is-stream: 3.0.0 merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 + npm-run-path: 5.3.0 + onetime: 6.0.0 signal-exit: 3.0.7 - strip-final-newline: 2.0.0 + strip-final-newline: 3.0.0 - execa@7.2.0: + execa@8.0.1: dependencies: cross-spawn: 7.0.6 - get-stream: 6.0.1 - human-signals: 4.3.1 + get-stream: 8.0.1 + human-signals: 5.0.0 is-stream: 3.0.0 merge-stream: 2.0.0 npm-run-path: 5.3.0 onetime: 6.0.0 - signal-exit: 3.0.7 + signal-exit: 4.1.0 strip-final-newline: 3.0.0 + express@5.1.0: + dependencies: + accepts: 2.0.0 + body-parser: 2.2.0 + content-disposition: 1.0.0 + content-type: 1.0.5 + cookie: 0.7.2 + cookie-signature: 1.2.2 + debug: 4.4.1(supports-color@5.5.0) + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 2.1.0 + fresh: 2.0.0 + http-errors: 2.0.0 + merge-descriptors: 2.0.0 + mime-types: 3.0.1 + on-finished: 2.4.1 + once: 1.4.0 + parseurl: 1.3.3 + proxy-addr: 2.0.7 + qs: 6.14.0 + range-parser: 1.2.1 + router: 2.2.0 + send: 1.2.0 + serve-static: 2.2.0 + statuses: 2.0.2 + type-is: 2.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + exsolve@1.0.7: {} + extend-shallow@2.0.1: dependencies: is-extendable: 0.1.1 extend@3.0.2: {} + extendable-error@0.1.7: {} + extension-port-stream@3.0.0: dependencies: readable-stream: 3.6.2 webextension-polyfill: 0.10.0 - family@0.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(viem@2.27.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))(wagmi@2.14.16(@tanstack/query-core@5.74.3)(@tanstack/react-query@5.74.3(react@18.3.1))(@types/react@18.3.20)(bufferutil@4.0.9)(immer@10.0.2)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.27.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))(zod@3.24.4)): + external-editor@3.1.0: + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + + family@0.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67))(wagmi@2.15.6(@tanstack/query-core@5.81.2)(@tanstack/react-query@5.81.2(react@18.3.1))(@types/react@18.3.23)(bufferutil@4.0.9)(immer@10.0.2)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67))(zod@3.25.67)): optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - viem: 2.27.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) - wagmi: 2.14.16(@tanstack/query-core@5.74.3)(@tanstack/react-query@5.74.3(react@18.3.1))(@types/react@18.3.20)(bufferutil@4.0.9)(immer@10.0.2)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.27.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))(zod@3.24.4) + viem: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + wagmi: 2.15.6(@tanstack/query-core@5.81.2)(@tanstack/react-query@5.81.2(react@18.3.1))(@types/react@18.3.23)(bufferutil@4.0.9)(immer@10.0.2)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67))(zod@3.25.67) + + family@0.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67))(wagmi@2.15.6(@tanstack/query-core@5.81.2)(@tanstack/react-query@5.81.2(react@18.3.1))(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67))(zod@3.25.67)): + optionalDependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + viem: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + wagmi: 2.15.6(@tanstack/query-core@5.81.2)(@tanstack/react-query@5.81.2(react@18.3.1))(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67))(zod@3.25.67) fast-deep-equal@3.1.3: {} @@ -13825,16 +16275,30 @@ snapshots: dependencies: format: 0.2.2 - fdir@6.4.3(picomatch@4.0.2): + fdir@6.4.6(picomatch@4.0.2): optionalDependencies: picomatch: 4.0.2 + ffjavascript@0.2.56: + dependencies: + wasmbuilder: 0.0.16 + wasmcurves: 0.2.0 + web-worker: 1.5.0 + + ffjavascript@0.2.63: + dependencies: + wasmbuilder: 0.0.16 + wasmcurves: 0.2.2 + web-worker: 1.2.0 + ffjavascript@0.3.0: dependencies: wasmbuilder: 0.0.16 wasmcurves: 0.2.2 web-worker: 1.2.0 + fflate@0.8.2: {} + file-entry-cache@6.0.1: dependencies: flat-cache: 3.2.0 @@ -13857,6 +16321,17 @@ snapshots: filter-obj@1.1.0: {} + finalhandler@2.1.0: + dependencies: + debug: 4.4.1(supports-color@5.5.0) + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + find-cache-dir@3.3.2: dependencies: commondir: 1.0.1 @@ -13879,6 +16354,12 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 + fix-dts-default-cjs-exports@1.0.1: + dependencies: + magic-string: 0.30.17 + mlly: 1.7.4 + rollup: 4.44.1 + flat-cache@3.2.0: dependencies: flatted: 3.3.3 @@ -13895,11 +16376,13 @@ snapshots: dependencies: imul: 1.0.1 + fnv-plus@1.3.1: {} + focus-visible@5.2.1: {} - follow-redirects@1.15.9(debug@4.4.0): + follow-redirects@1.15.9(debug@4.4.1): optionalDependencies: - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.1(supports-color@5.5.0) for-each@0.3.5: dependencies: @@ -13920,15 +16403,18 @@ snapshots: mime-types: 2.1.35 safe-buffer: 5.2.1 - form-data@4.0.2: + form-data@4.0.3: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 es-set-tostringtag: 2.1.0 + hasown: 2.0.2 mime-types: 2.1.35 format@0.2.2: {} + forwarded@0.2.0: {} + fp-ts@1.19.3: {} fraction.js@4.3.7: {} @@ -13942,13 +16428,15 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) style-value-types: 5.0.0 - tslib: 2.7.0 + tslib: 2.8.1 optionalDependencies: '@emotion/is-prop-valid': 0.8.8 framesync@6.0.1: dependencies: - tslib: 2.7.0 + tslib: 2.8.1 + + fresh@2.0.0: {} fs-extra@10.1.0: dependencies: @@ -13987,6 +16475,10 @@ snapshots: jsonfile: 6.1.0 universalify: 2.0.1 + fs-minipass@2.1.0: + dependencies: + minipass: 3.3.6 + fs-readdir-recursive@1.1.0: {} fs.realpath@1.0.0: {} @@ -14010,6 +16502,8 @@ snapshots: get-caller-file@2.0.5: {} + get-east-asian-width@1.3.0: {} + get-func-name@2.0.2: {} get-intrinsic@1.3.0: @@ -14038,6 +16532,12 @@ snapshots: get-stream@6.0.1: {} + get-stream@8.0.1: {} + + get-tsconfig@4.10.1: + dependencies: + resolve-pkg-maps: 1.0.0 + gh-pages@6.3.0: dependencies: async: 3.2.6 @@ -14195,14 +16695,14 @@ snapshots: section-matter: 1.0.0 strip-bom-string: 1.0.0 - h3@1.15.1: + h3@1.15.3: dependencies: cookie-es: 1.2.2 - crossws: 0.3.4 + crossws: 0.3.5 defu: 6.1.4 destr: 2.0.5 iron-webcrypto: 1.2.1 - node-mock-http: 1.0.0 + node-mock-http: 1.0.1 radix3: 1.1.2 ufo: 1.6.1 uncrypto: 0.1.3 @@ -14229,14 +16729,14 @@ snapshots: '@ethersproject/solidity': 5.8.0 '@ethersproject/transactions': 5.8.0 '@ethersproject/wallet': 5.8.0 - '@types/qs': 6.9.18 - axios: 0.21.4(debug@4.4.0) + '@types/qs': 6.14.0 + axios: 0.21.4(debug@4.4.1) chalk: 4.1.2 chokidar: 3.6.0 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.1(supports-color@5.5.0) enquirer: 2.4.1 ethers: 5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) - form-data: 4.0.2 + form-data: 4.0.3 fs-extra: 10.1.0 match-all: 1.2.7 murmur-128: 0.2.1 @@ -14247,11 +16747,23 @@ snapshots: - supports-color - utf-8-validate - hardhat-gas-reporter@1.0.10(bufferutil@4.0.9)(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10): + hardhat-gas-reporter@1.0.10(bufferutil@4.0.9)(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10): + dependencies: + array-uniq: 1.0.3 + eth-gas-reporter: 0.2.27(bufferutil@4.0.9)(utf-8-validate@5.0.10) + hardhat: 2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) + sha1: 1.1.1 + transitivePeerDependencies: + - '@codechecks/client' + - bufferutil + - debug + - utf-8-validate + + hardhat-gas-reporter@1.0.10(bufferutil@4.0.9)(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10): dependencies: array-uniq: 1.0.3 eth-gas-reporter: 0.2.27(bufferutil@4.0.9)(utf-8-validate@5.0.10) - hardhat: 2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10) + hardhat: 2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) sha1: 1.1.1 transitivePeerDependencies: - '@codechecks/client' @@ -14259,24 +16771,24 @@ snapshots: - debug - utf-8-validate - hardhat-gas-reporter@2.2.2(bufferutil@4.0.9)(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10))(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4): + hardhat-gas-reporter@2.3.0(bufferutil@4.0.9)(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(typescript@5.8.3)(utf-8-validate@5.0.10): dependencies: '@ethersproject/abi': 5.8.0 '@ethersproject/bytes': 5.8.0 '@ethersproject/units': 5.8.0 - '@solidity-parser/parser': 0.19.0 - axios: 1.8.4 + '@solidity-parser/parser': 0.20.1 + axios: 1.10.0 brotli-wasm: 2.0.1 chalk: 4.1.2 cli-table3: 0.6.5 ethereum-cryptography: 2.2.1 glob: 10.4.5 - hardhat: 2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10) + hardhat: 2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) jsonschema: 1.5.0 lodash: 4.17.21 markdown-table: 2.0.0 sha1: 1.1.1 - viem: 2.7.14(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) + viem: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) transitivePeerDependencies: - bufferutil - debug @@ -14284,17 +16796,14 @@ snapshots: - utf-8-validate - zod - hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10): + hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10): dependencies: + '@ethereumjs/util': 9.1.0 '@ethersproject/abi': 5.8.0 - '@metamask/eth-sig-util': 4.0.1 - '@nomicfoundation/edr': 0.8.0 - '@nomicfoundation/ethereumjs-common': 4.0.4 - '@nomicfoundation/ethereumjs-tx': 5.0.4 - '@nomicfoundation/ethereumjs-util': 9.0.4 + '@nomicfoundation/edr': 0.11.2 '@nomicfoundation/solidity-analyzer': 0.1.2 '@sentry/node': 5.30.0 - '@types/bn.js': 5.1.6 + '@types/bn.js': 5.2.0 '@types/lru-cache': 5.1.1 adm-zip: 0.4.16 aggregate-error: 3.1.0 @@ -14302,11 +16811,10 @@ snapshots: boxen: 5.1.2 chokidar: 4.0.3 ci-info: 2.0.0 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.1(supports-color@5.5.0) enquirer: 2.4.1 env-paths: 2.2.1 ethereum-cryptography: 1.2.0 - ethereumjs-abi: 0.6.8 find-up: 5.0.0 fp-ts: 1.19.3 fs-extra: 7.0.1 @@ -14315,6 +16823,7 @@ snapshots: json-stream-stringify: 3.1.6 keccak: 3.0.4 lodash: 4.17.21 + micro-eth-signer: 0.14.0 mnemonist: 0.38.5 mocha: 10.8.2 p-map: 4.0.0 @@ -14322,34 +16831,30 @@ snapshots: raw-body: 2.5.2 resolve: 1.17.0 semver: 6.3.1 - solc: 0.8.26(debug@4.4.0) + solc: 0.8.26(debug@4.4.1) source-map-support: 0.5.21 stacktrace-parser: 0.1.11 - tinyglobby: 0.2.12 + tinyglobby: 0.2.14 tsort: 0.0.1 undici: 5.29.0 uuid: 8.3.2 ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: - ts-node: 10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2) - typescript: 5.8.2 + ts-node: 10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3) + typescript: 5.8.3 transitivePeerDependencies: - bufferutil - - c-kzg - supports-color - utf-8-validate - hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10): + hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10): dependencies: + '@ethereumjs/util': 9.1.0 '@ethersproject/abi': 5.8.0 - '@metamask/eth-sig-util': 4.0.1 - '@nomicfoundation/edr': 0.8.0 - '@nomicfoundation/ethereumjs-common': 4.0.4 - '@nomicfoundation/ethereumjs-tx': 5.0.4 - '@nomicfoundation/ethereumjs-util': 9.0.4 + '@nomicfoundation/edr': 0.11.2 '@nomicfoundation/solidity-analyzer': 0.1.2 '@sentry/node': 5.30.0 - '@types/bn.js': 5.1.6 + '@types/bn.js': 5.2.0 '@types/lru-cache': 5.1.1 adm-zip: 0.4.16 aggregate-error: 3.1.0 @@ -14357,11 +16862,10 @@ snapshots: boxen: 5.1.2 chokidar: 4.0.3 ci-info: 2.0.0 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.1(supports-color@5.5.0) enquirer: 2.4.1 env-paths: 2.2.1 ethereum-cryptography: 1.2.0 - ethereumjs-abi: 0.6.8 find-up: 5.0.0 fp-ts: 1.19.3 fs-extra: 7.0.1 @@ -14370,6 +16874,7 @@ snapshots: json-stream-stringify: 3.1.6 keccak: 3.0.4 lodash: 4.17.21 + micro-eth-signer: 0.14.0 mnemonist: 0.38.5 mocha: 10.8.2 p-map: 4.0.0 @@ -14377,20 +16882,19 @@ snapshots: raw-body: 2.5.2 resolve: 1.17.0 semver: 6.3.1 - solc: 0.8.26(debug@4.4.0) + solc: 0.8.26(debug@4.4.1) source-map-support: 0.5.21 stacktrace-parser: 0.1.11 - tinyglobby: 0.2.12 + tinyglobby: 0.2.14 tsort: 0.0.1 undici: 5.29.0 uuid: 8.3.2 ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: - ts-node: 10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2) - typescript: 5.8.2 + ts-node: 10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3) + typescript: 5.8.3 transitivePeerDependencies: - bufferutil - - c-kzg - supports-color - utf-8-validate @@ -14412,6 +16916,10 @@ snapshots: dependencies: has-symbols: 1.1.0 + hash-base@2.0.2: + dependencies: + inherits: 2.0.4 + hash-base@3.0.5: dependencies: inherits: 2.0.4 @@ -14466,7 +16974,7 @@ snapshots: '@types/unist': 3.0.3 devlop: 1.1.0 hastscript: 9.0.1 - property-information: 7.0.0 + property-information: 7.1.0 vfile: 6.0.3 vfile-location: 5.0.3 web-namespaces: 2.0.1 @@ -14499,7 +17007,7 @@ snapshots: hast-util-to-estree@2.3.3: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/estree-jsx': 1.0.5 '@types/hast': 2.3.10 '@types/unist': 2.0.11 @@ -14519,7 +17027,7 @@ snapshots: hast-util-to-jsx-runtime@2.3.6: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/hast': 3.0.4 '@types/unist': 3.0.3 comma-separated-tokens: 2.0.3 @@ -14529,9 +17037,9 @@ snapshots: mdast-util-mdx-expression: 2.0.1 mdast-util-mdx-jsx: 3.2.0 mdast-util-mdxjs-esm: 2.0.1 - property-information: 7.0.0 + property-information: 7.1.0 space-separated-tokens: 2.0.2 - style-to-js: 1.1.16 + style-to-js: 1.1.17 unist-util-position: 5.0.0 vfile-message: 4.0.2 transitivePeerDependencies: @@ -14573,7 +17081,7 @@ snapshots: '@types/hast': 3.0.4 comma-separated-tokens: 2.0.3 hast-util-parse-selector: 4.0.0 - property-information: 7.0.0 + property-information: 7.1.0 space-separated-tokens: 2.0.2 he@1.2.0: {} @@ -14609,7 +17117,7 @@ snapshots: http-response-object: 3.0.2 parse-cache-control: 1.0.1 - http-cache-semantics@4.1.1: {} + http-cache-semantics@4.2.0: {} http-errors@2.0.0: dependencies: @@ -14622,14 +17130,14 @@ snapshots: http-proxy@1.18.1: dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.9(debug@4.4.0) + follow-redirects: 1.15.9(debug@4.4.1) requires-port: 1.0.0 transitivePeerDependencies: - debug http-response-object@3.0.2: dependencies: - '@types/node': 10.17.60 + '@types/node': 22.7.5 http2-wrapper@2.2.1: dependencies: @@ -14641,14 +17149,16 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.1(supports-color@5.5.0) transitivePeerDependencies: - supports-color - human-signals@2.1.0: {} + human-id@4.1.1: {} human-signals@4.3.1: {} + human-signals@5.0.0: {} + husky@9.1.7: {} iconv-lite@0.4.24: @@ -14659,7 +17169,7 @@ snapshots: dependencies: safer-buffer: 2.1.2 - idb-keyval@6.2.1: {} + idb-keyval@6.2.2: {} ieee754@1.2.1: {} @@ -14676,6 +17186,8 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 + import-lazy@4.0.0: {} + imul@1.0.1: {} imurmurhash@0.1.4: {} @@ -14707,6 +17219,8 @@ snapshots: dependencies: fp-ts: 1.19.3 + ipaddr.js@1.9.1: {} + iron-webcrypto@1.2.1: {} is-alphabetical@1.0.4: {} @@ -14773,6 +17287,8 @@ snapshots: is-hexadecimal@2.0.1: {} + is-interactive@1.0.0: {} + is-nan@1.3.2: dependencies: call-bind: 1.0.8 @@ -14788,9 +17304,11 @@ snapshots: is-plain-obj@4.1.0: {} + is-promise@4.0.0: {} + is-reference@3.0.3: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 is-regex@1.2.1: dependencies: @@ -14809,29 +17327,29 @@ snapshots: is-stream@3.0.0: {} + is-subdir@1.2.0: + dependencies: + better-path-resolve: 1.0.0 + is-typed-array@1.1.15: dependencies: which-typed-array: 1.1.19 is-unicode-supported@0.1.0: {} + is-windows@1.0.2: {} + isarray@1.0.0: {} + isarray@2.0.5: {} + isexe@2.0.0: {} isomorphic-timers-promises@1.0.1: {} - isows@1.0.3(ws@8.13.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)): - dependencies: - ws: 8.13.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) - - isows@1.0.6(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)): - dependencies: - ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) - - isows@1.0.6(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + isows@1.0.7(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: - ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) jackspeak@2.3.6: dependencies: @@ -14856,6 +17374,8 @@ snapshots: jiti@1.21.7: {} + jju@1.4.0: {} + joi@17.13.3: dependencies: '@hapi/hoek': 9.3.0 @@ -14870,6 +17390,8 @@ snapshots: js-tokens@4.0.0: {} + js-tokens@9.0.1: {} + js-yaml@3.14.1: dependencies: argparse: 1.0.10 @@ -14959,6 +17481,8 @@ snapshots: kleur@4.1.5: {} + kolorist@1.8.0: {} + latest-version@7.0.0: dependencies: package-json: 8.1.1 @@ -14985,24 +17509,35 @@ snapshots: listenercount@1.0.1: {} - lit-element@3.3.3: + lit-element@4.2.0: dependencies: '@lit-labs/ssr-dom-shim': 1.3.0 - '@lit/reactive-element': 1.6.3 - lit-html: 2.8.0 + '@lit/reactive-element': 2.1.0 + lit-html: 3.3.0 - lit-html@2.8.0: + lit-html@3.3.0: dependencies: '@types/trusted-types': 2.0.7 - lit@2.8.0: + lit@3.3.0: dependencies: - '@lit/reactive-element': 1.6.3 - lit-element: 3.3.3 - lit-html: 2.8.0 + '@lit/reactive-element': 2.1.0 + lit-element: 4.2.0 + lit-html: 3.3.0 load-tsconfig@0.2.5: {} + local-pkg@0.5.1: + dependencies: + mlly: 1.7.4 + pkg-types: 1.3.1 + + local-pkg@1.1.1: + dependencies: + mlly: 1.7.4 + pkg-types: 2.2.0 + quansync: 0.2.10 + locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -15031,6 +17566,8 @@ snapshots: lodash.sortby@4.7.0: {} + lodash.startcase@4.4.0: {} + lodash.truncate@4.4.2: {} lodash@4.17.21: {} @@ -15040,6 +17577,8 @@ snapshots: chalk: 4.1.2 is-unicode-supported: 0.1.0 + loglevel@1.9.2: {} + logplease@1.2.15: {} longest-streak@3.1.0: {} @@ -15074,6 +17613,10 @@ snapshots: dependencies: yallist: 3.1.1 + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + lru_map@0.3.3: {} magic-string@0.30.17: @@ -15100,7 +17643,7 @@ snapshots: match-sorter@6.3.4: dependencies: - '@babel/runtime': 7.27.0 + '@babel/runtime': 7.27.6 remove-accents: 0.5.0 math-intrinsics@1.1.0: {} @@ -15128,7 +17671,7 @@ snapshots: dependencies: '@types/mdast': 3.0.15 '@types/unist': 2.0.11 - decode-named-character-reference: 1.1.0 + decode-named-character-reference: 1.2.0 mdast-util-to-string: 3.2.0 micromark: 3.2.0 micromark-util-decode-numeric-character-reference: 1.1.0 @@ -15145,7 +17688,7 @@ snapshots: dependencies: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 - decode-named-character-reference: 1.1.0 + decode-named-character-reference: 1.2.0 devlop: 1.1.0 mdast-util-to-string: 4.0.0 micromark: 4.0.2 @@ -15362,8 +17905,12 @@ snapshots: mdn-data@2.0.30: {} + media-typer@1.1.0: {} + memorystream@0.3.1: {} + merge-descriptors@2.0.0: {} + merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -15386,18 +17933,28 @@ snapshots: lodash-es: 4.17.21 mdast-util-from-markdown: 1.3.1 non-layered-tidy-tree-layout: 2.0.2 - stylis: 4.2.0 + stylis: 4.3.6 ts-dedent: 2.2.0 uuid: 9.0.1 - web-worker: 1.2.0 + web-worker: 1.5.0 transitivePeerDependencies: - supports-color + micro-eth-signer@0.14.0: + dependencies: + '@noble/curves': 1.8.2 + '@noble/hashes': 1.7.2 + micro-packed: 0.7.3 + micro-ftch@0.3.1: {} + micro-packed@0.7.3: + dependencies: + '@scure/base': 1.2.6 + micromark-core-commonmark@1.1.0: dependencies: - decode-named-character-reference: 1.1.0 + decode-named-character-reference: 1.2.0 micromark-factory-destination: 1.1.0 micromark-factory-label: 1.1.0 micromark-factory-space: 1.1.0 @@ -15416,7 +17973,7 @@ snapshots: micromark-core-commonmark@2.0.3: dependencies: - decode-named-character-reference: 1.1.0 + decode-named-character-reference: 1.2.0 devlop: 1.1.0 micromark-factory-destination: 2.0.1 micromark-factory-label: 2.0.1 @@ -15503,7 +18060,7 @@ snapshots: micromark-extension-mdx-expression@1.0.8: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 micromark-factory-mdx-expression: 1.0.9 micromark-factory-space: 1.1.0 micromark-util-character: 1.2.0 @@ -15515,7 +18072,7 @@ snapshots: micromark-extension-mdx-jsx@1.0.5: dependencies: '@types/acorn': 4.0.6 - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 estree-util-is-identifier-name: 2.1.0 micromark-factory-mdx-expression: 1.0.9 micromark-factory-space: 1.1.0 @@ -15531,7 +18088,7 @@ snapshots: micromark-extension-mdxjs-esm@1.0.5: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 micromark-core-commonmark: 1.1.0 micromark-util-character: 1.2.0 micromark-util-events-to-acorn: 1.2.3 @@ -15543,8 +18100,8 @@ snapshots: micromark-extension-mdxjs@1.0.1: dependencies: - acorn: 8.14.1 - acorn-jsx: 5.3.2(acorn@8.14.1) + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) micromark-extension-mdx-expression: 1.0.8 micromark-extension-mdx-jsx: 1.0.5 micromark-extension-mdx-md: 1.0.1 @@ -15580,7 +18137,7 @@ snapshots: micromark-factory-mdx-expression@1.0.9: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 micromark-util-character: 1.2.0 micromark-util-events-to-acorn: 1.2.3 micromark-util-symbol: 1.1.0 @@ -15677,14 +18234,14 @@ snapshots: micromark-util-decode-string@1.1.0: dependencies: - decode-named-character-reference: 1.1.0 + decode-named-character-reference: 1.2.0 micromark-util-character: 1.2.0 micromark-util-decode-numeric-character-reference: 1.1.0 micromark-util-symbol: 1.1.0 micromark-util-decode-string@2.0.1: dependencies: - decode-named-character-reference: 1.1.0 + decode-named-character-reference: 1.2.0 micromark-util-character: 2.1.1 micromark-util-decode-numeric-character-reference: 2.0.2 micromark-util-symbol: 2.0.1 @@ -15696,7 +18253,7 @@ snapshots: micromark-util-events-to-acorn@1.2.3: dependencies: '@types/acorn': 4.0.6 - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/unist': 2.0.11 estree-util-visit: 1.2.1 micromark-util-symbol: 1.1.0 @@ -15761,8 +18318,8 @@ snapshots: micromark@3.2.0: dependencies: '@types/debug': 4.1.12 - debug: 4.4.0(supports-color@5.5.0) - decode-named-character-reference: 1.1.0 + debug: 4.4.1(supports-color@5.5.0) + decode-named-character-reference: 1.2.0 micromark-core-commonmark: 1.1.0 micromark-factory-space: 1.1.0 micromark-util-character: 1.2.0 @@ -15783,8 +18340,8 @@ snapshots: micromark@4.0.2: dependencies: '@types/debug': 4.1.12 - debug: 4.4.0(supports-color@5.5.0) - decode-named-character-reference: 1.1.0 + debug: 4.4.1(supports-color@5.5.0) + decode-named-character-reference: 1.2.0 devlop: 1.1.0 micromark-core-commonmark: 2.0.3 micromark-factory-space: 2.0.1 @@ -15809,15 +18366,21 @@ snapshots: miller-rabin@4.0.1: dependencies: - bn.js: 4.12.1 + bn.js: 4.12.2 brorand: 1.1.0 mime-db@1.52.0: {} + mime-db@1.54.0: {} + mime-types@2.1.35: dependencies: mime-db: 1.52.0 + mime-types@3.0.1: + dependencies: + mime-db: 1.54.0 + mimic-fn@2.1.0: {} mimic-fn@4.0.0: {} @@ -15830,25 +18393,40 @@ snapshots: minimalistic-crypto-utils@1.0.1: {} + minimatch@3.0.8: + dependencies: + brace-expansion: 1.1.12 + minimatch@3.1.2: dependencies: - brace-expansion: 1.1.11 + brace-expansion: 1.1.12 minimatch@5.1.6: dependencies: - brace-expansion: 2.0.1 + brace-expansion: 2.0.2 minimatch@9.0.5: dependencies: - brace-expansion: 2.0.1 + brace-expansion: 2.0.2 minimist@1.2.8: {} + minipass@3.3.6: + dependencies: + yallist: 4.0.0 + + minipass@5.0.0: {} + minipass@7.1.2: {} - mipd@0.0.7(typescript@5.8.2): + minizlib@2.1.2: + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + + mipd@0.0.7(typescript@5.8.3): optionalDependencies: - typescript: 5.8.2 + typescript: 5.8.3 mkdirp@0.5.6: dependencies: @@ -15856,6 +18434,13 @@ snapshots: mkdirp@1.0.4: {} + mlly@1.7.4: + dependencies: + acorn: 8.15.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.1 + mnemonist@0.38.5: dependencies: obliterator: 2.0.5 @@ -15865,7 +18450,7 @@ snapshots: ansi-colors: 4.1.3 browser-stdout: 1.3.1 chokidar: 3.6.0 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.1(supports-color@8.1.1) diff: 5.2.0 escape-string-regexp: 4.0.0 find-up: 5.0.0 @@ -15883,19 +18468,12 @@ snapshots: yargs-parser: 20.2.9 yargs-unparser: 2.0.0 - motion@10.16.2: - dependencies: - '@motionone/animation': 10.18.0 - '@motionone/dom': 10.18.0 - '@motionone/svelte': 10.16.4 - '@motionone/types': 10.17.1 - '@motionone/utils': 10.18.0 - '@motionone/vue': 10.16.4 - mri@1.2.0: {} ms@2.1.3: {} + muggle-string@0.4.1: {} + multiformats@9.9.0: {} murmur-128@0.2.1: @@ -15904,6 +18482,8 @@ snapshots: fmix: 0.1.0 imul: 1.0.1 + mute-stream@1.0.0: {} + mz@2.7.0: dependencies: any-promise: 1.3.0 @@ -15924,6 +18504,8 @@ snapshots: split2: 3.2.2 through2: 4.0.2 + negotiator@1.0.0: {} + neo-async@2.6.2: {} next-mdx-remote@4.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): @@ -15937,45 +18519,45 @@ snapshots: transitivePeerDependencies: - supports-color - next-seo@6.6.0(next@14.2.28(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next-seo@6.8.0(next@14.2.30(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - next: 14.2.28(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.30(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - next-themes@0.2.1(next@14.2.28(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next-themes@0.2.1(next@14.2.30(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - next: 14.2.28(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.30(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - next@14.2.28(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@14.2.30(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@next/env': 14.2.28 + '@next/env': 14.2.30 '@swc/helpers': 0.5.5 busboy: 1.6.0 - caniuse-lite: 1.0.30001713 + caniuse-lite: 1.0.30001726 graceful-fs: 4.2.11 postcss: 8.4.31 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) styled-jsx: 5.1.1(react@18.3.1) optionalDependencies: - '@next/swc-darwin-arm64': 14.2.28 - '@next/swc-darwin-x64': 14.2.28 - '@next/swc-linux-arm64-gnu': 14.2.28 - '@next/swc-linux-arm64-musl': 14.2.28 - '@next/swc-linux-x64-gnu': 14.2.28 - '@next/swc-linux-x64-musl': 14.2.28 - '@next/swc-win32-arm64-msvc': 14.2.28 - '@next/swc-win32-ia32-msvc': 14.2.28 - '@next/swc-win32-x64-msvc': 14.2.28 + '@next/swc-darwin-arm64': 14.2.30 + '@next/swc-darwin-x64': 14.2.30 + '@next/swc-linux-arm64-gnu': 14.2.30 + '@next/swc-linux-arm64-musl': 14.2.30 + '@next/swc-linux-x64-gnu': 14.2.30 + '@next/swc-linux-x64-musl': 14.2.30 + '@next/swc-win32-arm64-msvc': 14.2.30 + '@next/swc-win32-ia32-msvc': 14.2.30 + '@next/swc-win32-x64-msvc': 14.2.30 '@playwright/test': 1.52.0 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros - nextra-theme-docs@2.13.4(next@14.2.28(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nextra@2.13.4(next@14.2.28(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + nextra-theme-docs@2.13.4(next@14.2.30(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nextra@2.13.4(next@14.2.30(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@headlessui/react': 1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@popperjs/core': 2.11.8 @@ -15986,16 +18568,16 @@ snapshots: git-url-parse: 13.1.1 intersection-observer: 0.12.2 match-sorter: 6.3.4 - next: 14.2.28(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - next-seo: 6.6.0(next@14.2.28(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - next-themes: 0.2.1(next@14.2.28(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - nextra: 2.13.4(next@14.2.28(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.30(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next-seo: 6.8.0(next@14.2.30(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next-themes: 0.2.1(next@14.2.30(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + nextra: 2.13.4(next@14.2.30(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) scroll-into-view-if-needed: 3.1.0 - zod: 3.24.4 + zod: 3.25.67 - nextra@2.13.4(next@14.2.28(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + nextra@2.13.4(next@14.2.30(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@headlessui/react': 1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mdx-js/mdx': 2.3.0 @@ -16009,7 +18591,7 @@ snapshots: gray-matter: 4.0.3 katex: 0.16.22 lodash.get: 4.4.2 - next: 14.2.28(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.30(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-mdx-remote: 4.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) p-limit: 3.1.0 react: 18.3.1 @@ -16025,7 +18607,7 @@ snapshots: title: 3.5.3 unist-util-remove: 4.0.0 unist-util-visit: 5.0.0 - zod: 3.24.4 + zod: 3.25.67 transitivePeerDependencies: - supports-color @@ -16050,7 +18632,7 @@ snapshots: node-gyp-build@4.8.4: {} - node-mock-http@1.0.0: {} + node-mock-http@1.0.1: {} node-releases@2.0.19: {} @@ -16096,16 +18678,12 @@ snapshots: normalize-range@0.1.2: {} - normalize-url@8.0.1: {} + normalize-url@8.0.2: {} npm-run-path@2.0.2: dependencies: path-key: 2.0.1 - npm-run-path@4.0.1: - dependencies: - path-key: 3.1.1 - npm-run-path@5.3.0: dependencies: path-key: 4.0.0 @@ -16123,7 +18701,7 @@ snapshots: obj-multiplex@1.0.0: dependencies: - end-of-stream: 1.4.4 + end-of-stream: 1.4.5 once: 1.4.0 readable-stream: 2.3.8 @@ -16159,6 +18737,10 @@ snapshots: on-exit-leak-free@0.2.0: {} + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + once@1.4.0: dependencies: wrappy: 1.0.2 @@ -16189,42 +18771,62 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + ordinal@1.0.3: {} os-browserify@0.3.0: {} os-tmpdir@1.0.2: {} - ox@0.6.7(typescript@5.8.2)(zod@3.24.4): + outdent@0.5.0: {} + + ox@0.7.1(typescript@5.8.3)(zod@3.22.4): dependencies: - '@adraffy/ens-normalize': 1.10.1 - '@noble/curves': 1.8.1 - '@noble/hashes': 1.7.1 - '@scure/bip32': 1.6.2 - '@scure/bip39': 1.5.4 - abitype: 1.0.8(typescript@5.8.2)(zod@3.24.4) + '@adraffy/ens-normalize': 1.11.0 + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.2 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.0.8(typescript@5.8.3)(zod@3.22.4) eventemitter3: 5.0.1 optionalDependencies: - typescript: 5.8.2 + typescript: 5.8.3 transitivePeerDependencies: - zod - ox@0.6.9(typescript@5.8.2)(zod@3.24.4): + ox@0.7.1(typescript@5.8.3)(zod@3.25.67): dependencies: - '@adraffy/ens-normalize': 1.10.1 - '@noble/curves': 1.8.1 - '@noble/hashes': 1.7.1 - '@scure/bip32': 1.6.2 - '@scure/bip39': 1.5.4 - abitype: 1.0.8(typescript@5.8.2)(zod@3.24.4) + '@adraffy/ens-normalize': 1.11.0 + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.2 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.0.8(typescript@5.8.3)(zod@3.25.67) eventemitter3: 5.0.1 optionalDependencies: - typescript: 5.8.2 + typescript: 5.8.3 transitivePeerDependencies: - zod p-cancelable@3.0.0: {} + p-filter@2.1.0: + dependencies: + p-map: 2.1.0 + p-finally@1.0.0: {} p-limit@2.3.0: @@ -16235,6 +18837,10 @@ snapshots: dependencies: yocto-queue: 0.1.0 + p-limit@5.0.0: + dependencies: + yocto-queue: 1.2.1 + p-locate@4.1.0: dependencies: p-limit: 2.3.0 @@ -16243,6 +18849,8 @@ snapshots: dependencies: p-limit: 3.1.0 + p-map@2.1.0: {} + p-map@4.0.0: dependencies: aggregate-error: 3.1.0 @@ -16256,10 +18864,16 @@ snapshots: got: 12.6.1 registry-auth-token: 5.1.0 registry-url: 6.0.1 - semver: 7.7.1 + semver: 7.7.2 + + package-manager-detector@0.2.11: + dependencies: + quansync: 0.2.10 pako@1.0.11: {} + pako@2.1.0: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -16270,7 +18884,7 @@ snapshots: browserify-aes: 1.2.0 evp_bytestokey: 1.0.3 hash-base: 3.0.5 - pbkdf2: 3.1.2 + pbkdf2: 3.1.3 safe-buffer: 5.2.1 parse-cache-control@1.0.1: {} @@ -16289,14 +18903,14 @@ snapshots: '@types/unist': 2.0.11 character-entities-legacy: 3.0.0 character-reference-invalid: 2.0.1 - decode-named-character-reference: 1.1.0 + decode-named-character-reference: 1.2.0 is-alphanumerical: 2.0.1 is-decimal: 2.0.1 is-hexadecimal: 2.0.1 parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.26.2 + '@babel/code-frame': 7.27.1 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -16313,7 +18927,9 @@ snapshots: parse5@7.3.0: dependencies: - entities: 6.0.0 + entities: 6.0.1 + + parseurl@1.3.3: {} path-browserify@1.0.1: {} @@ -16334,21 +18950,28 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 + path-to-regexp@8.2.0: {} + path-type@4.0.0: {} + pathe@1.1.2: {} + + pathe@2.0.3: {} + pathval@1.1.1: {} - pbkdf2@3.1.2: + pbkdf2@3.1.3: dependencies: - create-hash: 1.2.0 + create-hash: 1.1.3 create-hmac: 1.1.7 - ripemd160: 2.0.2 + ripemd160: 2.0.1 safe-buffer: 5.2.1 sha.js: 2.4.11 + to-buffer: 1.2.1 periscopic@3.1.0: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 estree-walker: 3.0.3 is-reference: 3.0.3 @@ -16397,6 +19020,18 @@ snapshots: dependencies: find-up: 5.0.0 + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.7.4 + pathe: 2.0.3 + + pkg-types@2.2.0: + dependencies: + confbox: 0.2.2 + exsolve: 1.0.7 + pathe: 2.0.3 + playwright-core@1.52.0: {} playwright@1.52.0: @@ -16416,7 +19051,7 @@ snapshots: framesync: 6.0.1 hey-listen: 1.0.8 style-value-types: 5.0.0 - tslib: 2.7.0 + tslib: 2.8.1 poseidon-lite@0.3.0: {} @@ -16424,29 +19059,38 @@ snapshots: possible-typed-array-names@1.1.0: {} - postcss-import@15.1.0(postcss@8.5.3): + postcss-import@15.1.0(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.10 - postcss-js@4.0.1(postcss@8.5.3): + postcss-js@4.0.1(postcss@8.5.6): dependencies: camelcase-css: 2.0.1 - postcss: 8.5.3 + postcss: 8.5.6 + + postcss-load-config@4.0.2(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3)): + dependencies: + lilconfig: 3.1.3 + yaml: 2.8.0 + optionalDependencies: + postcss: 8.5.6 + ts-node: 10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3) - postcss-load-config@4.0.2(postcss@8.5.3)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2)): + postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.3)(yaml@2.8.0): dependencies: lilconfig: 3.1.3 - yaml: 2.7.1 optionalDependencies: - postcss: 8.5.3 - ts-node: 10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2) + jiti: 1.21.7 + postcss: 8.5.6 + tsx: 4.20.3 + yaml: 2.8.0 - postcss-nested@6.2.0(postcss@8.5.3): + postcss-nested@6.2.0(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 postcss-selector-parser@6.0.10: @@ -16467,13 +19111,13 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.5.3: + postcss@8.5.6: dependencies: nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 - preact@10.26.5: {} + preact@10.26.9: {} prelude-ls@1.1.2: {} @@ -16483,21 +19127,27 @@ snapshots: dependencies: fast-diff: 1.3.0 - prettier-plugin-solidity@1.4.2(prettier@3.5.3): + prettier-plugin-solidity@1.4.3(prettier@3.6.1): dependencies: - '@solidity-parser/parser': 0.19.0 - prettier: 3.5.3 - semver: 7.7.1 + '@solidity-parser/parser': 0.20.1 + prettier: 3.6.1 + semver: 7.7.2 - prettier-plugin-tailwindcss@0.5.14(@trivago/prettier-plugin-sort-imports@4.3.0(prettier@3.5.3))(prettier@3.5.3): + prettier-plugin-tailwindcss@0.5.14(@trivago/prettier-plugin-sort-imports@4.3.0(prettier@3.6.1))(prettier@3.6.1): dependencies: - prettier: 3.5.3 + prettier: 3.6.1 optionalDependencies: - '@trivago/prettier-plugin-sort-imports': 4.3.0(prettier@3.5.3) + '@trivago/prettier-plugin-sort-imports': 4.3.0(prettier@3.6.1) prettier@2.8.8: {} - prettier@3.5.3: {} + prettier@3.6.1: {} + + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 prismjs@1.27.0: {} @@ -16526,13 +19176,18 @@ snapshots: property-information@6.5.0: {} - property-information@7.0.0: {} + property-information@7.1.0: {} proto-list@1.2.4: {} protocols@2.0.2: {} - proxy-compare@2.5.1: {} + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + proxy-compare@2.6.0: {} proxy-from-env@1.1.0: {} @@ -16540,16 +19195,16 @@ snapshots: public-encrypt@4.0.3: dependencies: - bn.js: 4.12.1 + bn.js: 4.12.2 browserify-rsa: 4.1.1 create-hash: 1.2.0 parse-asn1: 5.1.7 randombytes: 2.1.0 safe-buffer: 5.2.1 - pump@3.0.2: + pump@3.0.3: dependencies: - end-of-stream: 1.4.4 + end-of-stream: 1.4.5 once: 1.4.0 punycode@1.4.1: {} @@ -16573,6 +19228,8 @@ snapshots: dependencies: side-channel: 1.1.0 + quansync@0.2.10: {} + query-string@7.1.3: dependencies: decode-uri-component: 0.2.2 @@ -16588,6 +19245,13 @@ snapshots: quick-lru@5.1.1: {} + r1csfile@0.0.41: + dependencies: + '@iden3/bigarray': 0.0.2 + '@iden3/binfileutils': 0.0.11 + fastfile: 0.0.20 + ffjavascript: 0.2.56 + r1csfile@0.0.48: dependencies: '@iden3/bigarray': 0.0.2 @@ -16606,6 +19270,8 @@ snapshots: randombytes: 2.1.0 safe-buffer: 5.2.1 + range-parser@1.2.1: {} + raw-body@2.5.2: dependencies: bytes: 3.1.2 @@ -16613,6 +19279,13 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 + raw-body@3.0.0: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.6.3 + unpipe: 1.0.0 + rc@1.2.8: dependencies: deep-extend: 0.6.0 @@ -16628,11 +19301,13 @@ snapshots: react-is@16.13.1: {} - react-markdown@9.1.0(@types/react@18.3.20)(react@18.3.1): + react-is@18.3.1: {} + + react-markdown@9.1.0(@types/react@18.3.23)(react@18.3.1): dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 - '@types/react': 18.3.20 + '@types/react': 18.3.23 devlop: 1.1.0 hast-util-to-jsx-runtime: 2.3.6 html-url-attributes: 3.0.1 @@ -16646,23 +19321,23 @@ snapshots: transitivePeerDependencies: - supports-color - react-refresh@0.14.2: {} + react-refresh@0.17.0: {} - react-router-dom@6.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-router-dom@6.30.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@remix-run/router': 1.23.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-router: 6.30.0(react@18.3.1) + react-router: 6.30.1(react@18.3.1) - react-router@6.30.0(react@18.3.1): + react-router@6.30.1(react@18.3.1): dependencies: '@remix-run/router': 1.23.0 react: 18.3.1 react-syntax-highlighter@15.6.1(react@18.3.1): dependencies: - '@babel/runtime': 7.27.0 + '@babel/runtime': 7.27.6 highlight.js: 10.7.3 highlightjs-vue: 1.0.0 lowlight: 1.20.0 @@ -16689,6 +19364,13 @@ snapshots: dependencies: pify: 2.3.0 + read-yaml-file@1.1.0: + dependencies: + graceful-fs: 4.2.11 + js-yaml: 3.14.1 + pify: 4.0.1 + strip-bom: 3.0.0 + readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 @@ -16737,12 +19419,6 @@ snapshots: regenerate@1.4.2: {} - regenerator-runtime@0.14.1: {} - - regenerator-transform@0.15.2: - dependencies: - '@babel/runtime': 7.27.0 - regexpu-core@6.2.0: dependencies: regenerate: 1.4.2 @@ -16881,6 +19557,8 @@ snapshots: resolve-from@5.0.0: {} + resolve-pkg-maps@1.0.0: {} + resolve@1.1.7: {} resolve@1.17.0: @@ -16897,6 +19575,11 @@ snapshots: dependencies: lowercase-keys: 3.0.0 + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + reusify@1.1.0: {} rimraf@2.7.1: @@ -16911,43 +19594,60 @@ snapshots: dependencies: glob: 10.4.5 + ripemd160@2.0.1: + dependencies: + hash-base: 2.0.2 + inherits: 2.0.4 + ripemd160@2.0.2: dependencies: hash-base: 3.1.0 inherits: 2.0.4 + risc0-ethereum@file:templates/default/lib/risc0-ethereum: {} + rlp@2.2.7: dependencies: - bn.js: 5.2.1 + bn.js: 5.2.2 robust-predicates@3.0.2: {} - rollup@4.40.0: + rollup@4.44.1: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.40.0 - '@rollup/rollup-android-arm64': 4.40.0 - '@rollup/rollup-darwin-arm64': 4.40.0 - '@rollup/rollup-darwin-x64': 4.40.0 - '@rollup/rollup-freebsd-arm64': 4.40.0 - '@rollup/rollup-freebsd-x64': 4.40.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.40.0 - '@rollup/rollup-linux-arm-musleabihf': 4.40.0 - '@rollup/rollup-linux-arm64-gnu': 4.40.0 - '@rollup/rollup-linux-arm64-musl': 4.40.0 - '@rollup/rollup-linux-loongarch64-gnu': 4.40.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.40.0 - '@rollup/rollup-linux-riscv64-gnu': 4.40.0 - '@rollup/rollup-linux-riscv64-musl': 4.40.0 - '@rollup/rollup-linux-s390x-gnu': 4.40.0 - '@rollup/rollup-linux-x64-gnu': 4.40.0 - '@rollup/rollup-linux-x64-musl': 4.40.0 - '@rollup/rollup-win32-arm64-msvc': 4.40.0 - '@rollup/rollup-win32-ia32-msvc': 4.40.0 - '@rollup/rollup-win32-x64-msvc': 4.40.0 + '@rollup/rollup-android-arm-eabi': 4.44.1 + '@rollup/rollup-android-arm64': 4.44.1 + '@rollup/rollup-darwin-arm64': 4.44.1 + '@rollup/rollup-darwin-x64': 4.44.1 + '@rollup/rollup-freebsd-arm64': 4.44.1 + '@rollup/rollup-freebsd-x64': 4.44.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.44.1 + '@rollup/rollup-linux-arm-musleabihf': 4.44.1 + '@rollup/rollup-linux-arm64-gnu': 4.44.1 + '@rollup/rollup-linux-arm64-musl': 4.44.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.44.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.44.1 + '@rollup/rollup-linux-riscv64-gnu': 4.44.1 + '@rollup/rollup-linux-riscv64-musl': 4.44.1 + '@rollup/rollup-linux-s390x-gnu': 4.44.1 + '@rollup/rollup-linux-x64-gnu': 4.44.1 + '@rollup/rollup-linux-x64-musl': 4.44.1 + '@rollup/rollup-win32-arm64-msvc': 4.44.1 + '@rollup/rollup-win32-ia32-msvc': 4.44.1 + '@rollup/rollup-win32-x64-msvc': 4.44.1 fsevents: 2.3.3 + router@2.2.0: + dependencies: + debug: 4.4.1(supports-color@5.5.0) + depd: 2.0.0 + is-promise: 4.0.0 + parseurl: 1.3.3 + path-to-regexp: 8.2.0 + transitivePeerDependencies: + - supports-color + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -17018,12 +19718,41 @@ snapshots: semver@6.3.1: {} - semver@7.7.1: {} + semver@7.5.4: + dependencies: + lru-cache: 6.0.0 + + semver@7.7.2: {} + + send@1.2.0: + dependencies: + debug: 4.4.1(supports-color@5.5.0) + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 2.0.0 + http-errors: 2.0.0 + mime-types: 3.0.1 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0 + serve-static@2.2.0: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 1.2.0 + transitivePeerDependencies: + - supports-color + set-blocking@2.0.0: {} set-function-length@1.2.2: @@ -17051,14 +19780,14 @@ snapshots: shallowequal@1.1.0: {} - sharp@0.34.1: + sharp@0.34.2: dependencies: color: 4.2.3 detect-libc: 2.0.4 - semver: 7.7.1 + semver: 7.7.2 optionalDependencies: - '@img/sharp-darwin-arm64': 0.34.1 - '@img/sharp-darwin-x64': 0.34.1 + '@img/sharp-darwin-arm64': 0.34.2 + '@img/sharp-darwin-x64': 0.34.2 '@img/sharp-libvips-darwin-arm64': 1.1.0 '@img/sharp-libvips-darwin-x64': 1.1.0 '@img/sharp-libvips-linux-arm': 1.1.0 @@ -17068,15 +19797,16 @@ snapshots: '@img/sharp-libvips-linux-x64': 1.1.0 '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 '@img/sharp-libvips-linuxmusl-x64': 1.1.0 - '@img/sharp-linux-arm': 0.34.1 - '@img/sharp-linux-arm64': 0.34.1 - '@img/sharp-linux-s390x': 0.34.1 - '@img/sharp-linux-x64': 0.34.1 - '@img/sharp-linuxmusl-arm64': 0.34.1 - '@img/sharp-linuxmusl-x64': 0.34.1 - '@img/sharp-wasm32': 0.34.1 - '@img/sharp-win32-ia32': 0.34.1 - '@img/sharp-win32-x64': 0.34.1 + '@img/sharp-linux-arm': 0.34.2 + '@img/sharp-linux-arm64': 0.34.2 + '@img/sharp-linux-s390x': 0.34.2 + '@img/sharp-linux-x64': 0.34.2 + '@img/sharp-linuxmusl-arm64': 0.34.2 + '@img/sharp-linuxmusl-x64': 0.34.2 + '@img/sharp-wasm32': 0.34.2 + '@img/sharp-win32-arm64': 0.34.2 + '@img/sharp-win32-ia32': 0.34.2 + '@img/sharp-win32-x64': 0.34.2 shebang-command@1.2.0: dependencies: @@ -17090,7 +19820,7 @@ snapshots: shebang-regex@3.0.0: {} - shell-quote@1.8.2: {} + shell-quote@1.8.3: {} shelljs@0.8.5: dependencies: @@ -17133,6 +19863,8 @@ snapshots: side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 + siginfo@2.0.0: {} + signal-exit@3.0.7: {} signal-exit@4.1.0: {} @@ -17154,7 +19886,20 @@ snapshots: snake-case@3.0.4: dependencies: dot-case: 3.0.4 - tslib: 2.7.0 + tslib: 2.8.1 + + snarkjs@0.5.0: + dependencies: + '@iden3/binfileutils': 0.0.11 + bfj: 7.1.0 + blake2b-wasm: 2.4.0 + circom_runtime: 0.1.21 + ejs: 3.1.10 + fastfile: 0.0.20 + ffjavascript: 0.2.56 + js-sha3: 0.8.0 + logplease: 1.2.15 + r1csfile: 0.0.41 snarkjs@0.7.4: dependencies: @@ -17187,15 +19932,15 @@ snapshots: transitivePeerDependencies: - supports-color - solady@0.1.13: {} + solady@0.1.22: {} solady@0.1.4: {} - solc@0.8.26(debug@4.4.0): + solc@0.8.26(debug@4.4.1): dependencies: command-exists: 1.2.9 commander: 8.3.0 - follow-redirects: 1.15.9(debug@4.4.0) + follow-redirects: 1.15.9(debug@4.4.1) js-sha3: 0.8.0 memorystream: 0.3.1 semver: 5.7.2 @@ -17203,22 +19948,22 @@ snapshots: transitivePeerDependencies: - debug - solhint-plugin-prettier@0.1.0(prettier-plugin-solidity@1.4.2(prettier@3.5.3))(prettier@3.5.3): + solhint-plugin-prettier@0.1.0(prettier-plugin-solidity@1.4.3(prettier@3.6.1))(prettier@3.6.1): dependencies: - '@prettier/sync': 0.3.0(prettier@3.5.3) - prettier: 3.5.3 + '@prettier/sync': 0.3.0(prettier@3.6.1) + prettier: 3.6.1 prettier-linter-helpers: 1.0.0 - prettier-plugin-solidity: 1.4.2(prettier@3.5.3) + prettier-plugin-solidity: 1.4.3(prettier@3.6.1) - solhint@5.0.5(typescript@5.8.2): + solhint@5.1.0(typescript@5.8.3): dependencies: - '@solidity-parser/parser': 0.19.0 + '@solidity-parser/parser': 0.20.1 ajv: 6.12.6 antlr4: 4.13.2 ast-parents: 0.0.1 chalk: 4.1.2 commander: 10.0.1 - cosmiconfig: 8.3.6(typescript@5.8.2) + cosmiconfig: 8.3.6(typescript@5.8.3) fast-diff: 1.3.0 glob: 8.1.0 ignore: 5.3.2 @@ -17226,7 +19971,7 @@ snapshots: latest-version: 7.0.0 lodash: 4.17.21 pluralize: 8.0.0 - semver: 7.7.1 + semver: 7.7.2 strip-ansi: 6.0.1 table: 6.9.0 text-table: 0.2.0 @@ -17235,10 +19980,10 @@ snapshots: transitivePeerDependencies: - typescript - solidity-coverage@0.8.14(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)): + solidity-coverage@0.8.16(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)): dependencies: '@ethersproject/abi': 5.8.0 - '@solidity-parser/parser': 0.19.0 + '@solidity-parser/parser': 0.20.1 chalk: 2.4.2 death: 1.1.0 difflib: 0.2.4 @@ -17246,7 +19991,7 @@ snapshots: ghost-testrpc: 0.0.2 global-modules: 2.0.0 globby: 10.0.2 - hardhat: 2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10) + hardhat: 2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) jsonschema: 1.5.0 lodash: 4.17.21 mocha: 10.8.2 @@ -17254,14 +19999,14 @@ snapshots: pify: 4.0.1 recursive-readdir: 2.2.3 sc-istanbul: 0.4.6 - semver: 7.7.1 + semver: 7.7.2 shelljs: 0.8.5 web3-utils: 1.10.4 - solidity-coverage@0.8.14(hardhat@2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10)): + solidity-coverage@0.8.16(hardhat@2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)): dependencies: '@ethersproject/abi': 5.8.0 - '@solidity-parser/parser': 0.19.0 + '@solidity-parser/parser': 0.20.1 chalk: 2.4.2 death: 1.1.0 difflib: 0.2.4 @@ -17269,7 +20014,7 @@ snapshots: ghost-testrpc: 0.0.2 global-modules: 2.0.0 globby: 10.0.2 - hardhat: 2.22.19(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2)(utf-8-validate@5.0.10) + hardhat: 2.25.0(bufferutil@4.0.9)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) jsonschema: 1.5.0 lodash: 4.17.21 mocha: 10.8.2 @@ -17277,7 +20022,7 @@ snapshots: pify: 4.0.1 recursive-readdir: 2.2.3 sc-istanbul: 0.4.6 - semver: 7.7.1 + semver: 7.7.2 shelljs: 0.8.5 web3-utils: 1.10.4 @@ -17315,6 +20060,11 @@ snapshots: space-separated-tokens@2.0.2: {} + spawndamnit@3.0.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + split-on-first@1.1.0: {} split2@3.2.2: @@ -17325,16 +20075,22 @@ snapshots: sprintf-js@1.0.3: {} + stackback@0.0.2: {} + stacktrace-parser@0.1.11: dependencies: type-fest: 0.7.1 static-eval@2.0.2: dependencies: - escodegen: 1.8.1 + escodegen: 1.14.3 statuses@2.0.1: {} + statuses@2.0.2: {} + + std-env@3.9.0: {} + stream-browserify@3.0.0: dependencies: inherits: 2.0.4 @@ -17353,6 +20109,8 @@ snapshots: strict-uri-encode@2.0.0: {} + string-argv@0.3.2: {} + string-format@2.0.0: {} string-width@2.1.1: @@ -17372,6 +20130,12 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 + string-width@7.2.0: + dependencies: + emoji-regex: 10.4.0 + get-east-asian-width: 1.3.0 + strip-ansi: 7.1.0 + string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 @@ -17399,9 +20163,9 @@ snapshots: strip-bom-string@1.0.0: {} - strip-eof@1.0.0: {} + strip-bom@3.0.0: {} - strip-final-newline@2.0.0: {} + strip-eof@1.0.0: {} strip-final-newline@3.0.0: {} @@ -17413,40 +20177,44 @@ snapshots: strip-json-comments@3.1.1: {} + strip-literal@2.1.1: + dependencies: + js-tokens: 9.0.1 + strip-outer@1.0.1: dependencies: escape-string-regexp: 1.0.5 - style-to-js@1.1.16: + style-to-js@1.1.17: dependencies: - style-to-object: 1.0.8 + style-to-object: 1.0.9 style-to-object@0.4.4: dependencies: inline-style-parser: 0.1.1 - style-to-object@1.0.8: + style-to-object@1.0.9: dependencies: inline-style-parser: 0.2.4 style-value-types@5.0.0: dependencies: hey-listen: 1.0.8 - tslib: 2.7.0 + tslib: 2.8.1 - styled-components@5.3.11(@babel/core@7.26.10)(react-dom@18.3.1(react@18.3.1))(react-is@16.13.1)(react@18.3.1): + styled-components@5.3.11(@babel/core@7.27.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1): dependencies: - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) - '@babel/traverse': 7.27.0(supports-color@5.5.0) + '@babel/helper-module-imports': 7.27.1(supports-color@5.5.0) + '@babel/traverse': 7.27.7(supports-color@5.5.0) '@emotion/is-prop-valid': 1.3.1 '@emotion/stylis': 0.8.5 '@emotion/unitless': 0.7.5 - babel-plugin-styled-components: 2.1.4(@babel/core@7.26.10)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@18.3.1(react@18.3.1))(react-is@16.13.1)(react@18.3.1))(supports-color@5.5.0) + babel-plugin-styled-components: 2.1.4(@babel/core@7.27.7)(styled-components@5.3.11(@babel/core@7.27.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(supports-color@5.5.0) css-to-react-native: 3.2.0 hoist-non-react-statics: 3.3.2 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-is: 16.13.1 + react-is: 18.3.1 shallowequal: 1.1.0 supports-color: 5.5.0 transitivePeerDependencies: @@ -17459,6 +20227,8 @@ snapshots: stylis@4.2.0: {} + stylis@4.3.6: {} + sucrase@3.35.0: dependencies: '@jridgewell/gen-mapping': 0.3.8 @@ -17530,7 +20300,7 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2)): + tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -17546,25 +20316,36 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.1.1 - postcss: 8.5.3 - postcss-import: 15.1.0(postcss@8.5.3) - postcss-js: 4.0.1(postcss@8.5.3) - postcss-load-config: 4.0.2(postcss@8.5.3)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2)) - postcss-nested: 6.2.0(postcss@8.5.3) + postcss: 8.5.6 + postcss-import: 15.1.0(postcss@8.5.6) + postcss-js: 4.0.1(postcss@8.5.6) + postcss-load-config: 4.0.2(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3)) + postcss-nested: 6.2.0(postcss@8.5.6) postcss-selector-parser: 6.1.2 resolve: 1.22.10 sucrase: 3.35.0 transitivePeerDependencies: - ts-node + tar@6.2.1: + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + + term-size@2.2.1: {} + text-table@0.2.0: {} then-request@6.0.2: dependencies: '@types/concat-stream': 1.6.1 '@types/form-data': 0.0.33 - '@types/node': 8.10.66 - '@types/qs': 6.9.18 + '@types/node': 22.7.5 + '@types/qs': 6.14.0 caseless: 0.12.0 concat-stream: 1.6.2 form-data: 2.5.3 @@ -17593,11 +20374,15 @@ snapshots: dependencies: setimmediate: 1.0.5 + tinybench@2.9.0: {} + tinycolor2@1.6.0: {} - tinyglobby@0.2.12: + tinyexec@0.3.2: {} + + tinyglobby@0.2.14: dependencies: - fdir: 6.4.3(picomatch@4.0.2) + fdir: 6.4.6(picomatch@4.0.2) picomatch: 4.0.2 tinygradient@1.1.5: @@ -17605,6 +20390,10 @@ snapshots: '@types/tinycolor2': 1.4.6 tinycolor2: 1.6.0 + tinypool@0.8.4: {} + + tinyspy@2.2.1: {} + title@3.5.3: dependencies: arg: 1.0.0 @@ -17614,10 +20403,22 @@ snapshots: titleize@1.0.0: {} + tmp-promise@3.0.3: + dependencies: + tmp: 0.2.3 + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 + tmp@0.2.3: {} + + to-buffer@1.2.1: + dependencies: + isarray: 2.0.5 + safe-buffer: 5.2.1 + typed-array-buffer: 1.0.3 + to-fast-properties@2.0.0: {} to-regex-range@5.0.1: @@ -17646,9 +20447,9 @@ snapshots: tryer@1.0.1: {} - ts-api-utils@1.4.3(typescript@5.8.2): + ts-api-utils@1.4.3(typescript@5.8.3): dependencies: - typescript: 5.8.2 + typescript: 5.8.3 ts-command-line-args@2.5.1: dependencies: @@ -17661,9 +20462,9 @@ snapshots: ts-essentials@1.0.4: {} - ts-essentials@7.0.3(typescript@5.8.2): + ts-essentials@7.0.3(typescript@5.8.3): dependencies: - typescript: 5.8.2 + typescript: 5.8.3 ts-generator@0.1.1: dependencies: @@ -17679,27 +20480,27 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@20.17.30)(typescript@5.8.2): + ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.15.33)(typescript@5.8.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.17.30 - acorn: 8.14.1 + '@types/node': 22.15.33 + acorn: 8.15.0 acorn-walk: 8.3.4 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.8.2 + typescript: 5.8.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.11.16(@swc/helpers@0.5.17) + '@swc/core': 1.12.7 - ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2): + ts-node@10.9.2(@swc/core@1.12.7)(@types/node@22.7.5)(typescript@5.8.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -17707,21 +20508,21 @@ snapshots: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 22.7.5 - acorn: 8.14.1 + acorn: 8.15.0 acorn-walk: 8.3.4 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.8.2 + typescript: 5.8.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.11.16(@swc/helpers@0.5.17) + '@swc/core': 1.12.7 - tsconfck@3.1.5(typescript@5.8.2): + tsconfck@3.1.6(typescript@5.8.3): optionalDependencies: - typescript: 5.8.2 + typescript: 5.8.3 tslib@1.14.1: {} @@ -17731,35 +20532,74 @@ snapshots: tsort@0.0.1: {} - tsup@8.0.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(postcss@8.5.3)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2))(typescript@5.8.2): + tsup@8.5.0(@microsoft/api-extractor@7.52.8(@types/node@22.15.33))(@swc/core@1.12.7)(postcss@8.5.6)(typescript@5.8.3): dependencies: - bundle-require: 4.2.1(esbuild@0.19.12) + bundle-require: 5.1.0(esbuild@0.25.6) cac: 6.7.14 - chokidar: 3.6.0 - debug: 4.4.0(supports-color@5.5.0) - esbuild: 0.19.12 - execa: 5.1.1 - globby: 11.1.0 + chokidar: 4.0.3 + consola: 3.4.2 + debug: 4.4.1(supports-color@5.5.0) + esbuild: 0.25.6 + fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 - postcss-load-config: 4.0.2(postcss@8.5.3)(ts-node@10.9.2(@swc/core@1.11.16(@swc/helpers@0.5.17))(@types/node@22.7.5)(typescript@5.8.2)) + picocolors: 1.1.1 + postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.3)(yaml@2.8.0) resolve-from: 5.0.0 - rollup: 4.40.0 + rollup: 4.44.1 source-map: 0.8.0-beta.0 sucrase: 3.35.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.14 tree-kill: 1.2.2 optionalDependencies: - '@swc/core': 1.11.16(@swc/helpers@0.5.17) - postcss: 8.5.3 - typescript: 5.8.2 + '@microsoft/api-extractor': 7.52.8(@types/node@22.15.33) + '@swc/core': 1.12.7 + postcss: 8.5.6 + typescript: 5.8.3 transitivePeerDependencies: + - jiti - supports-color - - ts-node + - tsx + - yaml - tty-browserify@0.0.1: {} + tsup@8.5.0(@microsoft/api-extractor@7.52.8(@types/node@22.7.5))(@swc/core@1.12.7)(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3)(yaml@2.8.0): + dependencies: + bundle-require: 5.1.0(esbuild@0.25.6) + cac: 6.7.14 + chokidar: 4.0.3 + consola: 3.4.2 + debug: 4.4.1(supports-color@5.5.0) + esbuild: 0.25.6 + fix-dts-default-cjs-exports: 1.0.1 + joycon: 3.1.1 + picocolors: 1.1.1 + postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.3)(yaml@2.8.0) + resolve-from: 5.0.0 + rollup: 4.44.1 + source-map: 0.8.0-beta.0 + sucrase: 3.35.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.14 + tree-kill: 1.2.2 + optionalDependencies: + '@microsoft/api-extractor': 7.52.8(@types/node@22.7.5) + '@swc/core': 1.12.7 + postcss: 8.5.6 + typescript: 5.8.3 + transitivePeerDependencies: + - jiti + - supports-color + - tsx + - yaml - tweetnacl-util@0.15.1: {} + tsx@4.20.3: + dependencies: + esbuild: 0.25.6 + get-tsconfig: 4.10.1 + optionalDependencies: + fsevents: 2.3.3 - tweetnacl@1.0.3: {} + tty-browserify@0.0.1: {} type-check@0.3.2: dependencies: @@ -17779,10 +20619,16 @@ snapshots: type-fest@1.4.0: {} - typechain@8.3.2(typescript@5.8.2): + type-is@2.0.1: + dependencies: + content-type: 1.0.5 + media-typer: 1.1.0 + mime-types: 3.0.1 + + typechain@8.3.2(typescript@5.8.3): dependencies: '@types/prettier': 2.7.3 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.1(supports-color@5.5.0) fs-extra: 7.0.1 glob: 7.1.7 js-sha3: 0.8.0 @@ -17790,16 +20636,22 @@ snapshots: mkdirp: 1.0.4 prettier: 2.8.8 ts-command-line-args: 2.5.1 - ts-essentials: 7.0.3(typescript@5.8.2) - typescript: 5.8.2 + ts-essentials: 7.0.3(typescript@5.8.3) + typescript: 5.8.3 transitivePeerDependencies: - supports-color - typedarray@0.0.6: {} + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typed-rpc@6.1.1: {} - typescript@5.5.4: {} + typedarray@0.0.6: {} - typescript@5.8.2: {} + typescript@5.8.3: {} typical@4.0.0: {} @@ -17818,8 +20670,6 @@ snapshots: underscore@1.12.1: {} - undici-types@5.26.5: {} - undici-types@6.19.8: {} undici@5.29.0: @@ -17947,18 +20797,18 @@ snapshots: unpipe@1.0.0: {} - unstorage@1.15.0(idb-keyval@6.2.1): + unstorage@1.16.0(idb-keyval@6.2.2): dependencies: anymatch: 3.1.3 chokidar: 4.0.3 destr: 2.0.5 - h3: 1.15.1 + h3: 1.15.3 lru-cache: 10.4.3 node-fetch-native: 1.6.6 ofetch: 1.4.1 ufo: 1.6.1 optionalDependencies: - idb-keyval: 6.2.1 + idb-keyval: 6.2.2 unzip-crx-3@0.2.0: dependencies: @@ -17979,9 +20829,9 @@ snapshots: readable-stream: 2.3.8 setimmediate: 1.0.5 - update-browserslist-db@1.1.3(browserslist@4.24.4): + update-browserslist-db@1.1.3(browserslist@4.25.1): dependencies: - browserslist: 4.24.4 + browserslist: 4.25.1 escalade: 3.2.0 picocolors: 1.1.1 @@ -18033,14 +20883,17 @@ snapshots: v8-compile-cache-lib@3.0.1: {} - valtio@1.11.2(@types/react@18.3.20)(react@18.3.1): + valtio@1.13.2(@types/react@18.3.23)(react@18.3.1): dependencies: - proxy-compare: 2.5.1 + derive-valtio: 0.1.0(valtio@1.13.2(@types/react@18.3.23)(react@18.3.1)) + proxy-compare: 2.6.0 use-sync-external-store: 1.2.0(react@18.3.1) optionalDependencies: - '@types/react': 18.3.20 + '@types/react': 18.3.23 react: 18.3.1 + vary@1.1.2: {} + vfile-location@5.0.3: dependencies: '@types/unist': 3.0.3 @@ -18074,115 +20927,181 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - viem@2.23.2(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4): + viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.22.4): dependencies: - '@noble/curves': 1.8.1 - '@noble/hashes': 1.7.1 - '@scure/bip32': 1.6.2 - '@scure/bip39': 1.5.4 - abitype: 1.0.8(typescript@5.8.2)(zod@3.24.4) - isows: 1.0.6(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - ox: 0.6.7(typescript@5.8.2)(zod@3.24.4) - ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.0.8(typescript@5.8.3)(zod@3.22.4) + isows: 1.0.7(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + ox: 0.7.1(typescript@5.8.3)(zod@3.22.4) + ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: - typescript: 5.8.2 + typescript: 5.8.3 transitivePeerDependencies: - bufferutil - utf-8-validate - zod - viem@2.27.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4): + viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67): dependencies: - '@noble/curves': 1.8.1 - '@noble/hashes': 1.7.1 - '@scure/bip32': 1.6.2 - '@scure/bip39': 1.5.4 - abitype: 1.0.8(typescript@5.8.2)(zod@3.24.4) - isows: 1.0.6(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - ox: 0.6.9(typescript@5.8.2)(zod@3.24.4) - ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.0.8(typescript@5.8.3)(zod@3.25.67) + isows: 1.0.7(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + ox: 0.7.1(typescript@5.8.3)(zod@3.25.67) + ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: - typescript: 5.8.2 + typescript: 5.8.3 transitivePeerDependencies: - bufferutil - utf-8-validate - zod - viem@2.7.14(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4): + vite-node@1.6.1(@types/node@22.7.5): dependencies: - '@adraffy/ens-normalize': 1.10.0 - '@noble/curves': 1.2.0 - '@noble/hashes': 1.3.2 - '@scure/bip32': 1.3.2 - '@scure/bip39': 1.2.1 - abitype: 1.0.0(typescript@5.8.2)(zod@3.24.4) - isows: 1.0.3(ws@8.13.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - ws: 8.13.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + cac: 6.7.14 + debug: 4.4.1(supports-color@5.5.0) + pathe: 1.1.2 + picocolors: 1.1.1 + vite: 5.4.19(@types/node@22.7.5) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + vite-plugin-dts@4.5.4(@types/node@22.7.5)(rollup@4.44.1)(typescript@5.8.3)(vite@6.3.5(@types/node@22.7.5)(jiti@1.21.7)(tsx@4.20.3)(yaml@2.8.0)): + dependencies: + '@microsoft/api-extractor': 7.52.8(@types/node@22.7.5) + '@rollup/pluginutils': 5.2.0(rollup@4.44.1) + '@volar/typescript': 2.4.18 + '@vue/language-core': 2.2.0(typescript@5.8.3) + compare-versions: 6.1.1 + debug: 4.4.1(supports-color@5.5.0) + kolorist: 1.8.0 + local-pkg: 1.1.1 + magic-string: 0.30.17 + typescript: 5.8.3 optionalDependencies: - typescript: 5.8.2 + vite: 6.3.5(@types/node@22.7.5)(jiti@1.21.7)(tsx@4.20.3)(yaml@2.8.0) transitivePeerDependencies: - - bufferutil - - utf-8-validate - - zod + - '@types/node' + - rollup + - supports-color - viem@2.9.9(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4): + vite-plugin-node-polyfills@0.22.0(rollup@4.44.1)(vite@5.4.19(@types/node@22.7.5)): dependencies: - '@adraffy/ens-normalize': 1.10.0 - '@noble/curves': 1.2.0 - '@noble/hashes': 1.3.2 - '@scure/bip32': 1.3.2 - '@scure/bip39': 1.2.1 - abitype: 1.0.0(typescript@5.8.2)(zod@3.24.4) - isows: 1.0.3(ws@8.13.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - ws: 8.13.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) - optionalDependencies: - typescript: 5.8.2 + '@rollup/plugin-inject': 5.0.5(rollup@4.44.1) + node-stdlib-browser: 1.3.1 + vite: 5.4.19(@types/node@22.7.5) transitivePeerDependencies: - - bufferutil - - utf-8-validate - - zod + - rollup - vite-plugin-node-polyfills@0.22.0(rollup@4.40.0)(vite@5.4.18(@types/node@22.7.5)): + vite-plugin-top-level-await@1.5.0(rollup@4.44.1)(vite@5.4.19(@types/node@22.7.5)): dependencies: - '@rollup/plugin-inject': 5.0.5(rollup@4.40.0) - node-stdlib-browser: 1.3.1 - vite: 5.4.18(@types/node@22.7.5) + '@rollup/plugin-virtual': 3.0.2(rollup@4.44.1) + '@swc/core': 1.12.7 + uuid: 10.0.0 + vite: 5.4.19(@types/node@22.7.5) transitivePeerDependencies: + - '@swc/helpers' - rollup - vite-plugin-top-level-await@1.5.0(@swc/helpers@0.5.17)(rollup@4.40.0)(vite@5.4.18(@types/node@22.7.5)): + vite-plugin-top-level-await@1.5.0(rollup@4.44.1)(vite@6.3.5(@types/node@22.7.5)(jiti@1.21.7)(tsx@4.20.3)(yaml@2.8.0)): dependencies: - '@rollup/plugin-virtual': 3.0.2(rollup@4.40.0) - '@swc/core': 1.11.16(@swc/helpers@0.5.17) + '@rollup/plugin-virtual': 3.0.2(rollup@4.44.1) + '@swc/core': 1.12.7 uuid: 10.0.0 - vite: 5.4.18(@types/node@22.7.5) + vite: 6.3.5(@types/node@22.7.5)(jiti@1.21.7)(tsx@4.20.3)(yaml@2.8.0) transitivePeerDependencies: - '@swc/helpers' - rollup - vite-plugin-wasm@3.4.1(vite@5.4.18(@types/node@22.7.5)): + vite-plugin-wasm@3.4.1(vite@5.4.19(@types/node@22.7.5)): + dependencies: + vite: 5.4.19(@types/node@22.7.5) + + vite-plugin-wasm@3.4.1(vite@6.3.5(@types/node@22.7.5)(jiti@1.21.7)(tsx@4.20.3)(yaml@2.8.0)): dependencies: - vite: 5.4.18(@types/node@22.7.5) + vite: 6.3.5(@types/node@22.7.5)(jiti@1.21.7)(tsx@4.20.3)(yaml@2.8.0) - vite-tsconfig-paths@4.3.2(typescript@5.8.2)(vite@5.4.18(@types/node@22.7.5)): + vite-tsconfig-paths@4.3.2(typescript@5.8.3)(vite@5.4.19(@types/node@22.7.5)): dependencies: - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.1(supports-color@5.5.0) globrex: 0.1.2 - tsconfck: 3.1.5(typescript@5.8.2) + tsconfck: 3.1.6(typescript@5.8.3) optionalDependencies: - vite: 5.4.18(@types/node@22.7.5) + vite: 5.4.19(@types/node@22.7.5) transitivePeerDependencies: - supports-color - typescript - vite@5.4.18(@types/node@22.7.5): + vite@5.4.19(@types/node@22.7.5): dependencies: esbuild: 0.21.5 - postcss: 8.5.3 - rollup: 4.40.0 + postcss: 8.5.6 + rollup: 4.44.1 + optionalDependencies: + '@types/node': 22.7.5 + fsevents: 2.3.3 + + vite@6.3.5(@types/node@22.7.5)(jiti@1.21.7)(tsx@4.20.3)(yaml@2.8.0): + dependencies: + esbuild: 0.25.6 + fdir: 6.4.6(picomatch@4.0.2) + picomatch: 4.0.2 + postcss: 8.5.6 + rollup: 4.44.1 + tinyglobby: 0.2.14 optionalDependencies: '@types/node': 22.7.5 fsevents: 2.3.3 + jiti: 1.21.7 + tsx: 4.20.3 + yaml: 2.8.0 + + vitest@1.6.1(@types/node@22.7.5): + dependencies: + '@vitest/expect': 1.6.1 + '@vitest/runner': 1.6.1 + '@vitest/snapshot': 1.6.1 + '@vitest/spy': 1.6.1 + '@vitest/utils': 1.6.1 + acorn-walk: 8.3.4 + chai: 4.5.0 + debug: 4.4.1(supports-color@5.5.0) + execa: 8.0.1 + local-pkg: 0.5.1 + magic-string: 0.30.17 + pathe: 1.1.2 + picocolors: 1.1.1 + std-env: 3.9.0 + strip-literal: 2.1.1 + tinybench: 2.9.0 + tinypool: 0.8.4 + vite: 5.4.19(@types/node@22.7.5) + vite-node: 1.6.1(@types/node@22.7.5) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 22.7.5 + transitivePeerDependencies: + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser vm-browserify@1.1.2: {} @@ -18190,16 +21109,56 @@ snapshots: vscode-textmate@8.0.0: {} - wagmi@2.14.16(@tanstack/query-core@5.74.3)(@tanstack/react-query@5.74.3(react@18.3.1))(@types/react@18.3.20)(bufferutil@4.0.9)(immer@10.0.2)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.27.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))(zod@3.24.4): + vscode-uri@3.1.0: {} + + wagmi@2.15.6(@tanstack/query-core@5.81.2)(@tanstack/react-query@5.81.2(react@18.3.1))(@types/react@18.3.23)(bufferutil@4.0.9)(immer@10.0.2)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67))(zod@3.25.67): + dependencies: + '@tanstack/react-query': 5.81.2(react@18.3.1) + '@wagmi/connectors': 5.8.5(@types/react@18.3.23)(@wagmi/core@2.17.3(@tanstack/query-core@5.81.2)(@types/react@18.3.23)(immer@10.0.2)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67)))(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67))(zod@3.25.67) + '@wagmi/core': 2.17.3(@tanstack/query-core@5.81.2)(@types/react@18.3.23)(immer@10.0.2)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67)) + react: 18.3.1 + use-sync-external-store: 1.4.0(react@18.3.1) + viem: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@tanstack/query-core' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - immer + - ioredis + - supports-color + - uploadthing + - utf-8-validate + - zod + + wagmi@2.15.6(@tanstack/query-core@5.81.2)(@tanstack/react-query@5.81.2(react@18.3.1))(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67))(zod@3.25.67): dependencies: - '@tanstack/react-query': 5.74.3(react@18.3.1) - '@wagmi/connectors': 5.7.12(@types/react@18.3.20)(@wagmi/core@2.16.7(@tanstack/query-core@5.74.3)(@types/react@18.3.20)(immer@10.0.2)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.27.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4)))(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.27.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))(zod@3.24.4) - '@wagmi/core': 2.16.7(@tanstack/query-core@5.74.3)(@types/react@18.3.20)(immer@10.0.2)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.27.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4)) + '@tanstack/react-query': 5.81.2(react@18.3.1) + '@wagmi/connectors': 5.8.5(@types/react@18.3.23)(@wagmi/core@2.17.3(@tanstack/query-core@5.81.2)(@types/react@18.3.23)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67)))(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67))(zod@3.25.67) + '@wagmi/core': 2.17.3(@tanstack/query-core@5.81.2)(@types/react@18.3.23)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67)) react: 18.3.1 use-sync-external-store: 1.4.0(react@18.3.1) - viem: 2.27.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) + viem: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.67) optionalDependencies: - typescript: 5.8.2 + typescript: 5.8.3 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -18230,7 +21189,7 @@ snapshots: wait-on@8.0.3: dependencies: - axios: 1.8.4 + axios: 1.10.0 joi: 17.13.3 lodash: 4.17.21 minimist: 1.2.8 @@ -18238,20 +21197,36 @@ snapshots: transitivePeerDependencies: - debug + wasm-pack@0.13.1: + dependencies: + binary-install: 1.1.0 + transitivePeerDependencies: + - debug + wasmbuilder@0.0.16: {} + wasmcurves@0.2.0: + dependencies: + wasmbuilder: 0.0.16 + wasmcurves@0.2.2: dependencies: wasmbuilder: 0.0.16 + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + web-namespaces@2.0.1: {} web-worker@1.2.0: {} + web-worker@1.5.0: {} + web3-utils@1.10.4: dependencies: '@ethereumjs/util': 8.1.0 - bn.js: 5.2.1 + bn.js: 5.2.2 ethereum-bloom-filters: 1.2.0 ethereum-cryptography: 2.2.1 ethjs-unit: 0.1.6 @@ -18296,6 +21271,11 @@ snapshots: dependencies: isexe: 2.0.0 + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + widest-line@3.1.0: dependencies: string-width: 4.2.3 @@ -18329,6 +21309,12 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.1.0 + wrap-ansi@9.0.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 7.2.0 + strip-ansi: 7.1.0 + wrappy@1.0.2: {} ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10): @@ -18336,11 +21322,6 @@ snapshots: bufferutil: 4.0.9 utf-8-validate: 5.0.10 - ws@8.13.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): - optionalDependencies: - bufferutil: 4.0.9 - utf-8-validate: 5.0.10 - ws@8.17.1(bufferutil@4.0.9)(utf-8-validate@5.0.10): optionalDependencies: bufferutil: 4.0.9 @@ -18351,7 +21332,7 @@ snapshots: bufferutil: 4.0.9 utf-8-validate: 5.0.10 - ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10): + ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10): optionalDependencies: bufferutil: 4.0.9 utf-8-validate: 5.0.10 @@ -18370,9 +21351,11 @@ snapshots: yallist@3.1.1: {} + yallist@4.0.0: {} + yaml@1.10.2: {} - yaml@2.7.1: {} + yaml@2.8.0: {} yargs-parser@18.1.3: dependencies: @@ -18383,6 +21366,8 @@ snapshots: yargs-parser@21.1.1: {} + yargs-parser@22.0.0: {} + yargs-unparser@2.0.0: dependencies: camelcase: 6.3.0 @@ -18424,21 +21409,34 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 + yargs@18.0.0: + dependencies: + cliui: 9.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + string-width: 7.2.0 + y18n: 5.0.8 + yargs-parser: 22.0.0 + yn@3.1.1: {} yocto-queue@0.1.0: {} + yocto-queue@1.2.1: {} + + yoctocolors-cjs@2.1.2: {} + zksync-ethers@5.10.0(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: ethers: 5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) zod@3.22.4: {} - zod@3.24.4: {} + zod@3.25.67: {} - zustand@5.0.0(@types/react@18.3.20)(immer@10.0.2)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)): + zustand@5.0.0(@types/react@18.3.23)(immer@10.0.2)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)): optionalDependencies: - '@types/react': 18.3.20 + '@types/react': 18.3.23 immer: 10.0.2 react: 18.3.1 use-sync-external-store: 1.4.0(react@18.3.1) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 0a60b1c870..af2e0bea74 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,5 +1,11 @@ packages: - - packages/evm + - crates/wasm + - docs - examples/CRISP - examples/CRISP/apps/client - - docs + - packages/enclave-config + - packages/enclave-react + - packages/enclave-sdk + - packages/evm + - templates/default + - templates/default/client diff --git a/packages/ciphernode/rust-toolchain.toml b/rust-toolchain.toml similarity index 59% rename from packages/ciphernode/rust-toolchain.toml rename to rust-toolchain.toml index c68e3d8ae1..d0efd2d0a4 100644 --- a/packages/ciphernode/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,3 +1,4 @@ [toolchain] channel = "1.85" components = ["rustfmt"] +targets = ["wasm32-unknown-unknown"] diff --git a/templates/default/.enclave/support/ctl b/templates/default/.enclave/support/ctl new file mode 120000 index 0000000000..e8e450169d --- /dev/null +++ b/templates/default/.enclave/support/ctl @@ -0,0 +1 @@ +../../../../crates/support-scripts/ctl \ No newline at end of file diff --git a/templates/default/.enclave/support/dev b/templates/default/.enclave/support/dev new file mode 120000 index 0000000000..b26305626a --- /dev/null +++ b/templates/default/.enclave/support/dev @@ -0,0 +1 @@ +../../../../crates/support-scripts/dev \ No newline at end of file diff --git a/templates/default/.envrc b/templates/default/.envrc new file mode 100644 index 0000000000..3550a30f2d --- /dev/null +++ b/templates/default/.envrc @@ -0,0 +1 @@ +use flake diff --git a/templates/default/.gitignore b/templates/default/.gitignore new file mode 100644 index 0000000000..8347b0a1f3 --- /dev/null +++ b/templates/default/.gitignore @@ -0,0 +1,29 @@ +node_modules +.env +.direnv + +# Hardhat files +/cache +/artifacts + +# TypeChain files +/typechain +/typechain-types + +# solidity-coverage files +/coverage +/coverage.json + +.enclave/data/ +.enclave/config/ +.enclave/caches/ + +/target + +# Ignore risc0 files +tests/Elf.sol + +/deployments + +# Hardhat Ignition default folder for deployments against a local node +ignition/deployments/chain-31337 diff --git a/templates/default/.gitignore.bak b/templates/default/.gitignore.bak new file mode 100644 index 0000000000..7b1d1b5934 --- /dev/null +++ b/templates/default/.gitignore.bak @@ -0,0 +1,27 @@ +node_modules +.env + +.direnv + +/.enclave + +# Hardhat files +/cache +/artifacts + +# TypeChain files +/typechain +/typechain-types + +/target + +# solidity-coverage files +/coverage +/coverage.json + +# Ignore risc0 files +contracts/ImageID.sol +tests/Elf.sol + +# Hardhat Ignition default folder for deployments against a local node +ignition/deployments/chain-31337 diff --git a/templates/default/.gitmodules.bak b/templates/default/.gitmodules.bak new file mode 100644 index 0000000000..e056661b1d --- /dev/null +++ b/templates/default/.gitmodules.bak @@ -0,0 +1,3 @@ +[submodule "lib/risc0-ethereum"] + path = lib/risc0-ethereum + url = https://github.com/gnosisguild/risc0-ethereum diff --git a/examples/CRISP/apps/program/methods/Cargo.lock b/templates/default/Cargo.lock similarity index 71% rename from examples/CRISP/apps/program/methods/Cargo.lock rename to templates/default/Cargo.lock index 5ba7c8be2f..e83d224fa4 100644 --- a/examples/CRISP/apps/program/methods/Cargo.lock +++ b/templates/default/Cargo.lock @@ -2,6 +2,189 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "actix-codec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f7b0a21988c1bf877cf4759ef5ddaac04c1c9fe808c9142ecb78ba97d97a28a" +dependencies = [ + "bitflags", + "bytes", + "futures-core", + "futures-sink", + "memchr", + "pin-project-lite", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "actix-http" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44dfe5c9e0004c623edc65391dfd51daa201e7e30ebd9c9bedf873048ec32bc2" +dependencies = [ + "actix-codec", + "actix-rt", + "actix-service", + "actix-utils", + "base64", + "bitflags", + "brotli", + "bytes", + "bytestring", + "derive_more", + "encoding_rs", + "flate2", + "foldhash", + "futures-core", + "h2 0.3.26", + "http 0.2.12", + "httparse", + "httpdate", + "itoa", + "language-tags", + "local-channel", + "mime", + "percent-encoding", + "pin-project-lite", + "rand 0.9.1", + "sha1", + "smallvec", + "tokio", + "tokio-util", + "tracing", + "zstd", +] + +[[package]] +name = "actix-macros" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" +dependencies = [ + "quote", + "syn 2.0.101", +] + +[[package]] +name = "actix-router" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13d324164c51f63867b57e73ba5936ea151b8a41a1d23d1031eeb9f70d0236f8" +dependencies = [ + "bytestring", + "cfg-if", + "http 0.2.12", + "regex", + "regex-lite", + "serde", + "tracing", +] + +[[package]] +name = "actix-rt" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24eda4e2a6e042aa4e55ac438a2ae052d3b5da0ecf83d7411e1a368946925208" +dependencies = [ + "futures-core", + "tokio", +] + +[[package]] +name = "actix-server" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a65064ea4a457eaf07f2fba30b4c695bf43b721790e9530d26cb6f9019ff7502" +dependencies = [ + "actix-rt", + "actix-service", + "actix-utils", + "futures-core", + "futures-util", + "mio", + "socket2", + "tokio", + "tracing", +] + +[[package]] +name = "actix-service" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e46f36bf0e5af44bdc4bdb36fbbd421aa98c79a9bce724e1edeb3894e10dc7f" +dependencies = [ + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "actix-utils" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a1dcdff1466e3c2488e1cb5c36a71822750ad43839937f85d2f4d9f8b705d8" +dependencies = [ + "local-waker", + "pin-project-lite", +] + +[[package]] +name = "actix-web" +version = "4.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a597b77b5c6d6a1e1097fddde329a83665e25c5437c696a3a9a4aa514a614dea" +dependencies = [ + "actix-codec", + "actix-http", + "actix-macros", + "actix-router", + "actix-rt", + "actix-server", + "actix-service", + "actix-utils", + "actix-web-codegen", + "bytes", + "bytestring", + "cfg-if", + "cookie", + "derive_more", + "encoding_rs", + "foldhash", + "futures-core", + "futures-util", + "impl-more", + "itoa", + "language-tags", + "log", + "mime", + "once_cell", + "pin-project-lite", + "regex", + "regex-lite", + "serde", + "serde_json", + "serde_urlencoded", + "smallvec", + "socket2", + "time", + "tracing", + "url", +] + +[[package]] +name = "actix-web-codegen" +version = "4.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f591380e2e68490b5dfaf1dd1aa0ebe78d84ba7067078512b4ea6e4492d622b8" +dependencies = [ + "actix-router", + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "addr2line" version = "0.24.2" @@ -19,14 +202,14 @@ checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "ahash" -version = "0.8.11" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", "once_cell", "version_check", - "zerocopy 0.7.35", + "zerocopy", ] [[package]] @@ -38,6 +221,21 @@ dependencies = [ "memchr", ] +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + [[package]] name = "allocator-api2" version = "0.2.21" @@ -45,38 +243,44 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] -name = "alloy-primitives" -version = "0.6.4" +name = "alloy-dyn-abi" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "600d34d8de81e23b6d909c094e23b3d357e01ca36b78a8c5424c501eedbe86f0" +checksum = "7b95b3deca680efc7e9cba781f1a1db352fa1ea50e6384a514944dcf4419e652" dependencies = [ - "alloy-rlp", - "bytes", - "cfg-if", - "const-hex", - "derive_more 0.99.20", - "hex-literal", + "alloy-json-abi", + "alloy-primitives", + "alloy-sol-type-parser", + "alloy-sol-types", "itoa", - "k256", - "keccak-asm", - "proptest", - "rand 0.8.5", - "ruint", "serde", - "tiny-keccak", + "serde_json", + "winnow", +] + +[[package]] +name = "alloy-json-abi" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15516116086325c157c18261d768a20677f0f699348000ed391d4ad0dcb82530" +dependencies = [ + "alloy-primitives", + "alloy-sol-type-parser", + "serde", + "serde_json", ] [[package]] name = "alloy-primitives" -version = "0.8.25" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c77490fe91a0ce933a1f219029521f20fc28c2c0ca95d53fa4da9c00b8d9d4e" +checksum = "6177ed26655d4e84e00b65cb494d4e0b8830e7cae7ef5d63087d445a2600fb55" dependencies = [ "alloy-rlp", "bytes", "cfg-if", "const-hex", - "derive_more 2.0.1", + "derive_more", "foldhash", "hashbrown 0.15.3", "indexmap", @@ -85,7 +289,7 @@ dependencies = [ "keccak-asm", "paste", "proptest", - "rand 0.8.5", + "rand 0.9.1", "ruint", "rustc-hash", "serde", @@ -95,9 +299,9 @@ dependencies = [ [[package]] name = "alloy-rlp" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6c1d995bff8d011f7cd6c81820d51825e6e06d6db73914c1630ecf544d83d6" +checksum = "5f70d83b765fdc080dbcd4f4db70d8d23fe4761f2f02ebfa9146b833900634b4" dependencies = [ "arrayvec", "bytes", @@ -105,15 +309,29 @@ dependencies = [ [[package]] name = "alloy-sol-macro" -version = "0.6.4" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a14f21d053aea4c6630687c2f4ad614bed4c81e14737a9b904798b24f30ea849" +dependencies = [ + "alloy-sol-macro-expander", + "alloy-sol-macro-input", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "alloy-sol-macro-expander" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86ec0a47740b20bc5613b8712d0d321d031c4efc58e9645af96085d5cccfc27" +checksum = "34d99282e7c9ef14eb62727981a985a01869e586d1dec729d3bb33679094c100" dependencies = [ + "alloy-sol-macro-input", "const-hex", - "dunce", - "heck 0.4.1", + "heck", "indexmap", - "proc-macro-error", + "proc-macro-error2", "proc-macro2", "quote", "syn 2.0.101", @@ -122,85 +340,73 @@ dependencies = [ ] [[package]] -name = "alloy-sol-types" -version = "0.6.4" +name = "alloy-sol-macro-input" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad09ec5853fa700d12d778ad224dcdec636af424d29fad84fb9a2f16a5b0ef09" +checksum = "eda029f955b78e493360ee1d7bd11e1ab9f2a220a5715449babc79d6d0a01105" dependencies = [ - "alloy-primitives 0.6.4", - "alloy-sol-macro", "const-hex", - "serde", + "dunce", + "heck", + "macro-string", + "proc-macro2", + "quote", + "syn 2.0.101", + "syn-solidity", ] [[package]] -name = "anyhow" -version = "1.0.98" +name = "alloy-sol-type-parser" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" +checksum = "10db1bd7baa35bc8d4a1b07efbf734e73e5ba09f2580fb8cee3483a36087ceb2" +dependencies = [ + "serde", + "winnow", +] [[package]] -name = "ark-bn254" -version = "0.5.0" +name = "alloy-sol-types" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d69eab57e8d2663efa5c63135b2af4f396d66424f88954c21104125ab6b3e6bc" +checksum = "58377025a47d8b8426b3e4846a251f2c1991033b27f517aade368146f6ab1dfe" dependencies = [ - "ark-ec", - "ark-ff 0.5.0", - "ark-r1cs-std", - "ark-std 0.5.0", + "alloy-json-abi", + "alloy-primitives", + "alloy-sol-macro", + "serde", ] [[package]] -name = "ark-crypto-primitives" -version = "0.5.0" +name = "anyhow" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e0c292754729c8a190e50414fd1a37093c786c709899f29c9f7daccecfa855e" -dependencies = [ - "ahash", - "ark-crypto-primitives-macros", - "ark-ec", - "ark-ff 0.5.0", - "ark-relations", - "ark-serialize 0.5.0", - "ark-snark", - "ark-std 0.5.0", - "blake2", - "derivative", - "digest 0.10.7", - "fnv", - "merlin", - "sha2", -] +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" [[package]] -name = "ark-crypto-primitives-macros" -version = "0.5.0" +name = "ark-bn254" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7e89fe77d1f0f4fe5b96dfc940923d88d17b6a773808124f21e764dfb063c6a" +checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", + "ark-ec", + "ark-ff 0.4.2", + "ark-std 0.4.0", ] [[package]] name = "ark-ec" -version = "0.5.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43d68f2d516162846c1238e755a7c4d131b892b70cc70c471a8e3ca3ed818fce" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" dependencies = [ - "ahash", - "ark-ff 0.5.0", + "ark-ff 0.4.2", "ark-poly", - "ark-serialize 0.5.0", - "ark-std 0.5.0", - "educe", - "fnv", - "hashbrown 0.15.3", - "itertools 0.13.0", - "num-bigint", - "num-integer", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "hashbrown 0.13.2", + "itertools 0.10.5", "num-traits", "zeroize", ] @@ -243,26 +449,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "ark-ff" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a177aba0ed1e0fbb62aa9f6d0502e9b46dad8c2eab04c14258a1212d2557ea70" -dependencies = [ - "ark-ff-asm 0.5.0", - "ark-ff-macros 0.5.0", - "ark-serialize 0.5.0", - "ark-std 0.5.0", - "arrayvec", - "digest 0.10.7", - "educe", - "itertools 0.13.0", - "num-bigint", - "num-traits", - "paste", - "zeroize", -] - [[package]] name = "ark-ff-asm" version = "0.3.0" @@ -283,16 +469,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "ark-ff-asm" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" -dependencies = [ - "quote", - "syn 2.0.101", -] - [[package]] name = "ark-ff-macros" version = "0.3.0" @@ -318,76 +494,17 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "ark-ff-macros" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09be120733ee33f7693ceaa202ca41accd5653b779563608f1234f78ae07c4b3" -dependencies = [ - "num-bigint", - "num-traits", - "proc-macro2", - "quote", - "syn 2.0.101", -] - -[[package]] -name = "ark-groth16" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88f1d0f3a534bb54188b8dcc104307db6c56cdae574ddc3212aec0625740fc7e" -dependencies = [ - "ark-crypto-primitives", - "ark-ec", - "ark-ff 0.5.0", - "ark-poly", - "ark-relations", - "ark-serialize 0.5.0", - "ark-std 0.5.0", -] - [[package]] name = "ark-poly" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579305839da207f02b89cd1679e50e67b4331e2f9294a57693e5051b7703fe27" -dependencies = [ - "ahash", - "ark-ff 0.5.0", - "ark-serialize 0.5.0", - "ark-std 0.5.0", - "educe", - "fnv", - "hashbrown 0.15.3", -] - -[[package]] -name = "ark-r1cs-std" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "941551ef1df4c7a401de7068758db6503598e6f01850bdb2cfdb614a1f9dbea1" -dependencies = [ - "ark-ec", - "ark-ff 0.5.0", - "ark-relations", - "ark-std 0.5.0", - "educe", - "num-bigint", - "num-integer", - "num-traits", - "tracing", -] - -[[package]] -name = "ark-relations" -version = "0.5.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec46ddc93e7af44bcab5230937635b06fb5744464dd6a7e7b083e80ebd274384" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" dependencies = [ - "ark-ff 0.5.0", - "ark-std 0.5.0", - "tracing", - "tracing-subscriber", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "hashbrown 0.13.2", ] [[package]] @@ -405,46 +522,22 @@ name = "ark-serialize" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" -dependencies = [ - "ark-std 0.4.0", - "digest 0.10.7", - "num-bigint", -] - -[[package]] -name = "ark-serialize" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7" dependencies = [ "ark-serialize-derive", - "ark-std 0.5.0", - "arrayvec", + "ark-std 0.4.0", "digest 0.10.7", "num-bigint", ] [[package]] name = "ark-serialize-derive" -version = "0.5.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", -] - -[[package]] -name = "ark-snark" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d368e2848c2d4c129ce7679a7d0d2d612b6a274d3ea6a13bad4445d61b381b88" -dependencies = [ - "ark-ff 0.5.0", - "ark-relations", - "ark-serialize 0.5.0", - "ark-std 0.5.0", + "syn 1.0.109", ] [[package]] @@ -467,28 +560,18 @@ dependencies = [ "rand 0.8.5", ] -[[package]] -name = "ark-std" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "246a225cc6131e9ee4f24619af0f19d67761fff15d7ccc22e42b80846e69449a" -dependencies = [ - "num-traits", - "rand 0.8.5", -] - -[[package]] -name = "arraydeque" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d902e3d592a523def97af8f317b08ce16b7ab854c1985a0c671e6f15cebc236" - [[package]] name = "arrayvec" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + [[package]] name = "auto_impl" version = "1.3.0" @@ -508,9 +591,9 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" -version = "0.3.74" +version = "0.3.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" dependencies = [ "addr2line", "cfg-if", @@ -518,7 +601,7 @@ dependencies = [ "miniz_oxide", "object", "rustc-demangle", - "windows-targets 0.52.6", + "windows-targets", ] [[package]] @@ -535,18 +618,9 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" -version = "1.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89e25b6adfb930f02d1981565a6e5d9c547ac15a96606256d3b59040e5cd4ca3" - -[[package]] -name = "bincode" -version = "1.3.3" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] +checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" [[package]] name = "bit-set" @@ -565,15 +639,9 @@ checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" [[package]] name = "bitflags" -version = "1.3.2" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" +checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" [[package]] name = "bitvec" @@ -587,21 +655,6 @@ dependencies = [ "wyz", ] -[[package]] -name = "blake2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - [[package]] name = "block-buffer" version = "0.10.4" @@ -612,72 +665,37 @@ dependencies = [ ] [[package]] -name = "bonsai-sdk" -version = "1.4.0" +name = "brotli" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bce8d6acc5286a16e94c29e9c885d1869358885e08a6feeb6bc54e36fe20055" +checksum = "9991eea70ea4f293524138648e41ee89b0b2b12ddef3b255effa43c8056e0e0d" dependencies = [ - "duplicate", - "maybe-async", - "reqwest", - "serde", - "thiserror 1.0.69", + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", ] [[package]] -name = "borsh" -version = "1.5.7" +name = "brotli-decompressor" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad8646f98db542e39fc66e68a20b2144f6a732636df7c2354e74645faaa433ce" +checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" dependencies = [ - "borsh-derive", - "cfg_aliases", -] - -[[package]] -name = "borsh-derive" -version = "1.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdd1d3c0c2f5833f22386f252fe8ed005c7f59fdcddeef025c01b4c3b9fd9ac3" -dependencies = [ - "once_cell", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.101", + "alloc-no-stdlib", + "alloc-stdlib", ] [[package]] name = "bumpalo" -version = "3.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" - -[[package]] -name = "byte-slice-cast" -version = "1.2.3" +version = "3.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" +checksum = "793db76d6187cd04dff33004d8e6c9cc4e05cd330500379d2394209271b4aeee" -[[package]] -name = "bytemuck" -version = "1.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9134a6ef01ce4b366b50689c94f82c14bc72bc5d0386829828a2e2752ef7958c" -dependencies = [ - "bytemuck_derive", -] - -[[package]] -name = "bytemuck_derive" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fa76293b4f7bb636ab88fd78228235b5248b4d05cc589aed610f954af5d7c7a" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", -] +[[package]] +name = "byte-slice-cast" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" [[package]] name = "byteorder" @@ -695,43 +713,22 @@ dependencies = [ ] [[package]] -name = "camino" -version = "1.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo-platform" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.19.2" +name = "bytestring" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" +checksum = "e465647ae23b2823b0753f50decb2d5a86d2bb2cac04788fafd1f80e45378e5f" dependencies = [ - "camino", - "cargo-platform", - "semver 1.0.26", - "serde", - "serde_json", - "thiserror 2.0.12", + "bytes", ] [[package]] name = "cc" -version = "1.2.21" +version = "1.2.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8691782945451c1c383942c4874dbe63814f61cb57ef773cda2972682b7bb3c0" +checksum = "956a5e21988b87f372569b66183b78babf23ebc2e744b733e4350a752c4dafac" dependencies = [ + "jobserver", + "libc", "shlex", ] @@ -741,23 +738,11 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "cfg_aliases" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" - -[[package]] -name = "cobs" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15" - [[package]] name = "const-hex" -version = "1.14.0" +version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b0485bab839b018a8f1723fc5391819fea5f8f0f32288ef8a735fd096b6160c" +checksum = "83e22e0ed40b96a48d3db274f72fd365bd78f67af39b6bbd47e8a15e1c6207ff" dependencies = [ "cfg-if", "cpufeatures", @@ -793,10 +778,15 @@ dependencies = [ ] [[package]] -name = "convert_case" -version = "0.4.0" +name = "cookie" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" +checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" +dependencies = [ + "percent-encoding", + "time", + "version_check", +] [[package]] name = "core-foundation" @@ -815,25 +805,48 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] -name = "core-graphics-types" -version = "0.1.3" +name = "cpufeatures" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ - "bitflags 1.3.2", - "core-foundation", "libc", ] [[package]] -name = "cpufeatures" -version = "0.2.17" +name = "crc32fast" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ - "libc", + "cfg-if", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", ] +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + [[package]] name = "crunchy" version = "0.2.3" @@ -862,41 +875,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "darling" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 2.0.101", -] - -[[package]] -name = "darling_macro" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" -dependencies = [ - "darling_core", - "quote", - "syn 2.0.101", -] - [[package]] name = "der" version = "0.7.10" @@ -908,58 +886,23 @@ dependencies = [ ] [[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "derive_builder" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" -dependencies = [ - "derive_builder_macro", -] - -[[package]] -name = "derive_builder_core" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 2.0.101", -] - -[[package]] -name = "derive_builder_macro" -version = "0.20.2" +name = "deranged" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" +checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" dependencies = [ - "derive_builder_core", - "syn 2.0.101", + "powerfmt", ] [[package]] -name = "derive_more" -version = "0.99.20" +name = "derivative" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ - "convert_case", "proc-macro2", "quote", - "rustc_version 0.4.1", - "syn 2.0.101", + "syn 1.0.109", ] [[package]] @@ -1004,27 +947,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "dirs" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "dirs-sys" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" -dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.48.0", -] - [[package]] name = "displaydoc" version = "0.2.5" @@ -1037,16 +959,10 @@ dependencies = [ ] [[package]] -name = "docker-generate" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf673e0848ef09fa4aeeba78e681cf651c0c7d35f76ee38cec8e55bc32fa111" - -[[package]] -name = "downcast-rs" -version = "1.2.1" +name = "doc-comment" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" [[package]] name = "dunce" @@ -1055,13 +971,70 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] -name = "duplicate" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de78e66ac9061e030587b2a2e75cc88f22304913c907b11307bca737141230cb" +name = "e3-bfv-helpers" +version = "0.1.0" +source = "git+https://github.com/gnosisguild/enclave?rev=2ca0aa5f47dd962add5d1d0f74900d9bceb957e5#2ca0aa5f47dd962add5d1d0f74900d9bceb957e5" +dependencies = [ + "alloy-dyn-abi", + "alloy-primitives", + "anyhow", + "fhe", + "fhe-traits", + "rand 0.8.5", +] + +[[package]] +name = "e3-compute-provider" +version = "0.1.0" +source = "git+https://github.com/gnosisguild/enclave?rev=2ca0aa5f47dd962add5d1d0f74900d9bceb957e5#2ca0aa5f47dd962add5d1d0f74900d9bceb957e5" +dependencies = [ + "ark-bn254", + "ark-ff 0.4.2", + "hex", + "lean-imt", + "light-poseidon", + "num-bigint", + "num-traits", + "rayon", + "serde", + "sha3", +] + +[[package]] +name = "e3-program-server" +version = "0.1.0" +source = "git+https://github.com/gnosisguild/enclave?rev=2ca0aa5f47dd962add5d1d0f74900d9bceb957e5#2ca0aa5f47dd962add5d1d0f74900d9bceb957e5" +dependencies = [ + "actix-web", + "anyhow", + "e3-compute-provider", + "hex", + "reqwest", + "serde", + "serde_json", + "tokio", +] + +[[package]] +name = "e3-support-scripts-dev" +version = "0.1.0" +dependencies = [ + "anyhow", + "e3-program-server", + "e3-user-program", + "tokio", +] + +[[package]] +name = "e3-user-program" +version = "0.1.0" dependencies = [ - "heck 0.4.1", - "proc-macro-error", + "anyhow", + "e3-bfv-helpers", + "e3-compute-provider", + "fhe", + "fhe-traits", + "rand 0.8.5", ] [[package]] @@ -1078,30 +1051,12 @@ dependencies = [ "spki", ] -[[package]] -name = "educe" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417" -dependencies = [ - "enum-ordinalize", - "proc-macro2", - "quote", - "syn 2.0.101", -] - [[package]] name = "either" version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" -[[package]] -name = "elf" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4445909572dbd556c457c849c4ca58623d84b27c8fff1e74b0b4227d8b90d17b" - [[package]] name = "elliptic-curve" version = "0.13.8" @@ -1121,18 +1076,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "embedded-io" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" - -[[package]] -name = "embedded-io" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" - [[package]] name = "encoding_rs" version = "0.8.35" @@ -1142,26 +1085,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "enum-ordinalize" -version = "4.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea0dcfa4e54eeb516fe454635a95753ddd39acda650ce703031c6973e315dd5" -dependencies = [ - "enum-ordinalize-derive", -] - -[[package]] -name = "enum-ordinalize-derive" -version = "4.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", -] - [[package]] name = "equivalent" version = "1.0.2" @@ -1170,14 +1093,20 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" +checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18" dependencies = [ "libc", "windows-sys 0.59.0", ] +[[package]] +name = "ethnum" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca81e6b4777c89fd810c25a4be2b1bd93ea034fbe58e6a75216a34c6b82c539b" + [[package]] name = "fastrand" version = "2.3.0" @@ -1196,24 +1125,90 @@ dependencies = [ ] [[package]] -name = "fastrlp" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce8dba4714ef14b8274c371879b175aa55b16b30f269663f19d576f380018dc4" +name = "fastrlp" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce8dba4714ef14b8274c371879b175aa55b16b30f269663f19d576f380018dc4" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", +] + +[[package]] +name = "ff" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "fhe" +version = "0.1.0-beta.7" +source = "git+https://github.com/gnosisguild/fhe.rs#11cdd749a8e01c486160d5f62572c4520af5358f" +dependencies = [ + "doc-comment", + "fhe-math", + "fhe-traits", + "fhe-util", + "itertools 0.12.1", + "ndarray", + "num-bigint", + "num-traits", + "prost", + "prost-build", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "thiserror 1.0.69", + "zeroize", + "zeroize_derive", +] + +[[package]] +name = "fhe-math" +version = "0.1.0-beta.7" +source = "git+https://github.com/gnosisguild/fhe.rs#11cdd749a8e01c486160d5f62572c4520af5358f" +dependencies = [ + "ethnum", + "fhe-traits", + "fhe-util", + "itertools 0.12.1", + "ndarray", + "num-bigint", + "num-bigint-dig", + "num-traits", + "prost", + "prost-build", + "rand 0.8.5", + "rand_chacha 0.3.1", + "sha2", + "thiserror 1.0.69", + "zeroize", +] + +[[package]] +name = "fhe-traits" +version = "0.1.0-beta.7" +source = "git+https://github.com/gnosisguild/fhe.rs#11cdd749a8e01c486160d5f62572c4520af5358f" dependencies = [ - "arrayvec", - "auto_impl", - "bytes", + "rand 0.8.5", ] [[package]] -name = "ff" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +name = "fhe-util" +version = "0.1.0-beta.7" +source = "git+https://github.com/gnosisguild/fhe.rs#11cdd749a8e01c486160d5f62572c4520af5358f" dependencies = [ - "rand_core 0.6.4", - "subtle", + "itertools 0.12.1", + "num-bigint-dig", + "num-traits", + "prime_factorization", + "rand 0.8.5", + "rayon", ] [[package]] @@ -1228,6 +1223,22 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + [[package]] name = "fnv" version = "1.0.7" @@ -1242,30 +1253,18 @@ checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" [[package]] name = "foreign-types" -version = "0.5.0" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" dependencies = [ - "foreign-types-macros", "foreign-types-shared", ] -[[package]] -name = "foreign-types-macros" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", -] - [[package]] name = "foreign-types-shared" -version = "0.3.1" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" @@ -1289,7 +1288,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", - "futures-sink", ] [[package]] @@ -1298,23 +1296,6 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" -[[package]] -name = "futures-io" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" - -[[package]] -name = "futures-macro" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", -] - [[package]] name = "futures-sink" version = "0.3.31" @@ -1334,14 +1315,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-core", - "futures-io", - "futures-macro", - "futures-sink", "futures-task", - "memchr", "pin-project-lite", "pin-utils", - "slab", ] [[package]] @@ -1362,24 +1338,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", - "js-sys", "libc", "wasi 0.11.0+wasi-snapshot-preview1", - "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" dependencies = [ "cfg-if", - "js-sys", "libc", "r-efi", "wasi 0.14.2+wasi-0.2.4", - "wasm-bindgen", ] [[package]] @@ -1400,38 +1372,63 @@ dependencies = [ ] [[package]] -name = "hashbrown" -version = "0.14.5" +name = "h2" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" dependencies = [ - "ahash", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", ] [[package]] -name = "hashbrown" -version = "0.15.3" +name = "h2" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3" +checksum = "17da50a276f1e01e0ba6c029e47b7100754904ee8a278f886546e98575380785" dependencies = [ - "allocator-api2", - "foldhash", + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.3.1", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", ] [[package]] -name = "hashlink" -version = "0.9.1" +name = "hashbrown" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "hashbrown 0.14.5", + "ahash", ] [[package]] -name = "heck" -version = "0.4.1" +name = "hashbrown" +version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", + "serde", +] [[package]] name = "heck" @@ -1444,12 +1441,9 @@ name = "hex" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "hex-literal" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" +dependencies = [ + "serde", +] [[package]] name = "hmac" @@ -1460,6 +1454,17 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + [[package]] name = "http" version = "1.3.1" @@ -1478,7 +1483,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http", + "http 1.3.1", ] [[package]] @@ -1489,7 +1494,7 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http", + "http 1.3.1", "http-body", "pin-project-lite", ] @@ -1500,6 +1505,12 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + [[package]] name = "hyper" version = "1.6.0" @@ -1509,7 +1520,8 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "http", + "h2 0.4.11", + "http 1.3.1", "http-body", "httparse", "itoa", @@ -1521,12 +1533,11 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.5" +version = "0.27.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ - "futures-util", - "http", + "http 1.3.1", "hyper", "hyper-util", "rustls", @@ -1534,46 +1545,68 @@ dependencies = [ "tokio", "tokio-rustls", "tower-service", - "webpki-roots 0.26.11", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", ] [[package]] name = "hyper-util" -version = "0.1.11" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497bbc33a26fdd4af9ed9c70d63f61cf56a938375fbb32df34db9b1cd6d643f2" +checksum = "dc2fdfdbff08affe55bb779f33b053aa1fe5dd5b54c257343c17edfa55711bdb" dependencies = [ + "base64", "bytes", "futures-channel", + "futures-core", "futures-util", - "http", + "http 1.3.1", "http-body", "hyper", + "ipnet", "libc", + "percent-encoding", "pin-project-lite", "socket2", + "system-configuration", "tokio", "tower-service", "tracing", + "windows-registry", ] [[package]] name = "icu_collections" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" dependencies = [ "displaydoc", + "potential_utf", "yoke", "zerofrom", "zerovec", ] [[package]] -name = "icu_locid" -version = "1.5.0" +name = "icu_locale_core" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" dependencies = [ "displaydoc", "litemap", @@ -1582,31 +1615,11 @@ dependencies = [ "zerovec", ] -[[package]] -name = "icu_locid_transform" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" -dependencies = [ - "displaydoc", - "icu_locid", - "icu_locid_transform_data", - "icu_provider", - "tinystr", - "zerovec", -] - -[[package]] -name = "icu_locid_transform_data" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" - [[package]] name = "icu_normalizer" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" dependencies = [ "displaydoc", "icu_collections", @@ -1614,73 +1627,54 @@ dependencies = [ "icu_properties", "icu_provider", "smallvec", - "utf16_iter", - "utf8_iter", - "write16", "zerovec", ] [[package]] name = "icu_normalizer_data" -version = "1.5.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" [[package]] name = "icu_properties" -version = "1.5.1" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" dependencies = [ "displaydoc", "icu_collections", - "icu_locid_transform", + "icu_locale_core", "icu_properties_data", "icu_provider", - "tinystr", + "potential_utf", + "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "1.5.1" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" [[package]] name = "icu_provider" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" dependencies = [ "displaydoc", - "icu_locid", - "icu_provider_macros", + "icu_locale_core", "stable_deref_trait", "tinystr", "writeable", "yoke", "zerofrom", + "zerotrie", "zerovec", ] -[[package]] -name = "icu_provider_macros" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - [[package]] name = "idna" version = "1.0.3" @@ -1694,9 +1688,9 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" dependencies = [ "icu_normalizer", "icu_properties", @@ -1711,6 +1705,12 @@ dependencies = [ "parity-scale-codec", ] +[[package]] +name = "impl-more" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a5a9a0ff0086c7a148acb942baaabeadf9504d10400b5a05645853729b9cd2" + [[package]] name = "impl-trait-for-tuples" version = "0.2.3" @@ -1722,12 +1722,6 @@ dependencies = [ "syn 2.0.101", ] -[[package]] -name = "include_bytes_aligned" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee796ad498c8d9a1d68e477df8f754ed784ef875de1414ebdaf169f70a6a784" - [[package]] name = "indexmap" version = "2.9.0" @@ -1736,6 +1730,7 @@ checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" dependencies = [ "equivalent", "hashbrown 0.15.3", + "serde", ] [[package]] @@ -1744,6 +1739,16 @@ version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +[[package]] +name = "iri-string" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" +dependencies = [ + "memchr", + "serde", +] + [[package]] name = "itertools" version = "0.10.5" @@ -1755,18 +1760,18 @@ dependencies = [ [[package]] name = "itertools" -version = "0.13.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" dependencies = [ "either", ] [[package]] name = "itertools" -version = "0.14.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" dependencies = [ "either", ] @@ -1777,6 +1782,16 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +[[package]] +name = "jobserver" +version = "0.1.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" +dependencies = [ + "getrandom 0.3.3", + "libc", +] + [[package]] name = "js-sys" version = "0.3.77" @@ -1798,7 +1813,6 @@ dependencies = [ "elliptic-curve", "once_cell", "sha2", - "signature", ] [[package]] @@ -1821,35 +1835,27 @@ dependencies = [ ] [[package]] -name = "lazy-regex" -version = "3.4.1" +name = "language-tags" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60c7310b93682b36b98fa7ea4de998d3463ccbebd94d935d6b48ba5b6ffa7126" -dependencies = [ - "lazy-regex-proc_macros", - "once_cell", - "regex", -] +checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" [[package]] -name = "lazy-regex-proc_macros" -version = "3.4.1" +name = "lazy_static" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ba01db5ef81e17eb10a5e0f2109d1b3a3e29bac3070fdbd7d156bf7dbd206a1" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" dependencies = [ - "proc-macro2", - "quote", - "regex", - "syn 2.0.101", + "spin", ] [[package]] -name = "lazy_static" -version = "1.5.0" +name = "lean-imt" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +checksum = "fa2acc6dee32b12409446a76b9c1877e5ba9afb36dfcbe96d0ddaf15ca08f18d" dependencies = [ - "spin", + "hashbrown 0.15.3", ] [[package]] @@ -1860,18 +1866,20 @@ checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" [[package]] name = "libm" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a25169bd5913a4b437588a7e3d127cd6e90127b60e0ffbd834a38f1599e016b8" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] -name = "libredox" -version = "0.1.3" +name = "light-poseidon" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +checksum = "3c9a85a9752c549ceb7578064b4ed891179d20acd85f27318573b64d2d7ee7ee" dependencies = [ - "bitflags 2.9.0", - "libc", + "ark-bn254", + "ark-ff 0.4.2", + "num-bigint", + "thiserror 1.0.69", ] [[package]] @@ -1882,9 +1890,36 @@ checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" [[package]] name = "litemap" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" + +[[package]] +name = "local-channel" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6cbc85e69b8df4b8bb8b89ec634e7189099cea8927a276b7384ce5488e53ec8" +dependencies = [ + "futures-core", + "futures-sink", + "local-waker", +] + +[[package]] +name = "local-waker" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d873d7c67ce09b42110d801813efbc9364414e356be9935700d368351657487" + +[[package]] +name = "lock_api" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" +dependencies = [ + "autocfg", + "scopeguard", +] [[package]] name = "log" @@ -1893,23 +1928,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] -name = "malloc_buf" -version = "0.0.6" +name = "macro-string" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" dependencies = [ - "libc", + "proc-macro2", + "quote", + "syn 2.0.101", ] [[package]] -name = "maybe-async" -version = "0.2.10" +name = "matrixmultiply" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cf92c10c7e361d6b99666ec1c6f9805b0bea2c3bd8c78dc6fe98ac5bd78db11" +checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", + "autocfg", + "rawpointer", ] [[package]] @@ -1919,76 +1955,81 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] -name = "merlin" -version = "3.0.0" +name = "mime" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" -dependencies = [ - "byteorder", - "keccak", - "rand_core 0.6.4", - "zeroize", -] +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] -name = "metal" -version = "0.29.0" +name = "miniz_oxide" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21" +checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" dependencies = [ - "bitflags 2.9.0", - "block", - "core-graphics-types", - "foreign-types", - "log", - "objc", - "paste", + "adler2", ] [[package]] -name = "methods" -version = "0.1.0" +name = "mio" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ - "alloy-primitives 0.8.25", - "alloy-sol-types", - "hex", - "risc0-build", - "risc0-build-ethereum", - "risc0-zkp", - "risc0-zkvm", + "libc", + "log", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.59.0", ] [[package]] -name = "mime" -version = "0.3.17" +name = "multimap" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084" [[package]] -name = "miniz_oxide" -version = "0.8.8" +name = "native-tls" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" +checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" dependencies = [ - "adler2", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", ] [[package]] -name = "mio" -version = "1.0.3" +name = "ndarray" +version = "0.15.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +checksum = "adb12d4e967ec485a5f71c6311fe28158e9d6f4bc4a447b474184d0f91a8fa32" dependencies = [ - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.52.0", + "matrixmultiply", + "num-complex", + "num-integer", + "num-traits", + "rawpointer", ] [[package]] -name = "no_std_strings" -version = "0.1.3" +name = "num" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5b0c77c1b780822bc749a33e39aeb2c07584ab93332303babeabb645298a76e" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] [[package]] name = "num-bigint" @@ -2000,6 +2041,38 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-bigint-dig" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +dependencies = [ + "byteorder", + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand 0.8.5", + "serde", + "smallvec", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-integer" version = "0.1.46" @@ -2010,22 +2083,35 @@ dependencies = [ ] [[package]] -name = "num-traits" -version = "0.2.19" +name = "num-iter" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" dependencies = [ "autocfg", - "libm", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", ] [[package]] -name = "objc" -version = "0.2.7" +name = "num-traits" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ - "malloc_buf", + "autocfg", + "libm", ] [[package]] @@ -2044,16 +2130,54 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] -name = "option-ext" -version = "0.2.0" +name = "openssl" +version = "0.10.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" +dependencies = [ + "bitflags", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "openssl-probe" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + +[[package]] +name = "openssl-sys" +version = "0.9.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" +checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] [[package]] name = "parity-scale-codec" -version = "3.7.4" +version = "3.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9fde3d0718baf5bc92f577d652001da0f8d54cd03a7974e118d04fc888dc23d" +checksum = "799781ae679d79a948e13d4824a40970bfa500058d245760dd857301059810fa" dependencies = [ "arrayvec", "bitvec", @@ -2067,9 +2191,9 @@ dependencies = [ [[package]] name = "parity-scale-codec-derive" -version = "3.7.4" +version = "3.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581c837bb6b9541ce7faa9377c20616e4fb7650f6b0f68bc93c827ee504fb7b3" +checksum = "34b4653168b563151153c9e4c08ebed57fb8262bebfa79711552fa983c623e7a" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2077,6 +2201,29 @@ dependencies = [ "syn 2.0.101", ] +[[package]] +name = "parking_lot" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets", +] + [[package]] name = "paste" version = "1.0.15" @@ -2100,6 +2247,16 @@ dependencies = [ "ucd-trie", ] +[[package]] +name = "petgraph" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +dependencies = [ + "fixedbitset", + "indexmap", +] + [[package]] name = "pin-project-lite" version = "0.2.16" @@ -2123,24 +2280,54 @@ dependencies = [ ] [[package]] -name = "postcard" -version = "1.1.1" +name = "pkg-config" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" + +[[package]] +name = "potential_utf" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "170a2601f67cc9dba8edd8c4870b15f71a6a2dc196daec8c83f72b59dff628a8" +checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" dependencies = [ - "cobs", - "embedded-io 0.4.0", - "embedded-io 0.6.1", - "serde", + "zerovec", ] +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "zerocopy 0.8.25", + "zerocopy", +] + +[[package]] +name = "prettyplease" +version = "0.2.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dee91521343f4c5c6a63edd65e54f31f5c92fe8978c40a4282f8372194c6a7d" +dependencies = [ + "proc-macro2", + "syn 2.0.101", +] + +[[package]] +name = "prime_factorization" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb24cb4f70d64221509ab3dca82ad2ec24e1d7f3fa3e7cb9eed4ced578683287" +dependencies = [ + "itertools 0.10.5", + "num", + "rand 0.8.5", ] [[package]] @@ -2164,27 +2351,25 @@ dependencies = [ ] [[package]] -name = "proc-macro-error" -version = "1.0.4" +name = "proc-macro-error-attr2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" dependencies = [ - "proc-macro-error-attr", "proc-macro2", "quote", - "syn 1.0.109", - "version_check", ] [[package]] -name = "proc-macro-error-attr" -version = "1.0.4" +name = "proc-macro-error2" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" dependencies = [ + "proc-macro-error-attr2", "proc-macro2", "quote", - "version_check", + "syn 2.0.101", ] [[package]] @@ -2204,7 +2389,7 @@ checksum = "14cae93065090804185d3b75f0bf93b8eeda30c7a9b4a33d3bdb3988d6229e50" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.9.0", + "bitflags", "lazy_static", "num-traits", "rand 0.8.5", @@ -2218,86 +2403,62 @@ dependencies = [ [[package]] name = "prost" -version = "0.13.5" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" +checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" dependencies = [ "bytes", "prost-derive", ] [[package]] -name = "prost-derive" -version = "0.13.5" +name = "prost-build" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" +checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" dependencies = [ - "anyhow", - "itertools 0.14.0", - "proc-macro2", - "quote", + "bytes", + "heck", + "itertools 0.11.0", + "log", + "multimap", + "once_cell", + "petgraph", + "prettyplease", + "prost", + "prost-types", + "regex", "syn 2.0.101", + "tempfile", ] [[package]] -name = "quick-error" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" - -[[package]] -name = "quinn" -version = "0.11.7" +name = "prost-derive" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3bd15a6f2967aef83887dcb9fec0014580467e33720d073560cf015a5683012" +checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ - "bytes", - "cfg_aliases", - "pin-project-lite", - "quinn-proto", - "quinn-udp", - "rustc-hash", - "rustls", - "socket2", - "thiserror 2.0.12", - "tokio", - "tracing", - "web-time", + "anyhow", + "itertools 0.11.0", + "proc-macro2", + "quote", + "syn 2.0.101", ] [[package]] -name = "quinn-proto" -version = "0.11.11" +name = "prost-types" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcbafbbdbb0f638fe3f35f3c56739f77a8a1d070cb25603226c83339b391472b" +checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" dependencies = [ - "bytes", - "getrandom 0.3.2", - "rand 0.9.1", - "ring", - "rustc-hash", - "rustls", - "rustls-pki-types", - "slab", - "thiserror 2.0.12", - "tinyvec", - "tracing", - "web-time", + "prost", ] [[package]] -name = "quinn-udp" -version = "0.5.12" +name = "quick-error" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee4e529991f949c5e25755532370b8af5d114acae52326361d68d47af64aa842" -dependencies = [ - "cfg_aliases", - "libc", - "once_cell", - "socket2", - "tracing", - "windows-sys 0.59.0", -] +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quote" @@ -2339,6 +2500,7 @@ checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.3", + "serde", ] [[package]] @@ -2374,29 +2536,54 @@ dependencies = [ name = "rand_core" version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.3", + "serde", +] + +[[package]] +name = "rand_xorshift" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +dependencies = [ + "rand_core 0.6.4", +] + +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" dependencies = [ - "getrandom 0.3.2", + "either", + "rayon-core", ] [[package]] -name = "rand_xorshift" -version = "0.3.0" +name = "rayon-core" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ - "rand_core 0.6.4", + "crossbeam-deque", + "crossbeam-utils", ] [[package]] -name = "redox_users" -version = "0.4.6" +name = "redox_syscall" +version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" dependencies = [ - "getrandom 0.2.16", - "libredox", - "thiserror 1.0.69", + "bitflags", ] [[package]] @@ -2422,6 +2609,12 @@ dependencies = [ "regex-syntax", ] +[[package]] +name = "regex-lite" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53a49587ad06b26609c52e423de037e7f57f20d53535d66e08c695f347df952a" + [[package]] name = "regex-syntax" version = "0.8.5" @@ -2430,48 +2623,44 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" -version = "0.12.15" +version = "0.12.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d19c46a6fdd48bc4dab94b6103fccc55d34c67cc0ad04653aad4ea2a07cd7bbb" +checksum = "a2f8e5513d63f2e5b386eb5106dc67eaf3f84e95258e210489136b8b92ad6119" dependencies = [ "base64", "bytes", - "futures-channel", + "encoding_rs", "futures-core", - "futures-util", - "http", + "h2 0.4.11", + "http 1.3.1", "http-body", "http-body-util", "hyper", "hyper-rustls", + "hyper-tls", "hyper-util", "ipnet", "js-sys", "log", "mime", + "native-tls", "once_cell", "percent-encoding", "pin-project-lite", - "quinn", - "rustls", - "rustls-pemfile", "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", "sync_wrapper", "tokio", - "tokio-rustls", - "tokio-util", + "tokio-native-tls", "tower", + "tower-http", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", - "wasm-streams", "web-sys", - "webpki-roots 0.26.11", - "windows-registry", ] [[package]] @@ -2498,229 +2687,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "risc0-binfmt" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4fe7599ac55ad77515608ec42a9727001559fe4f579c533cb7c973b54800c05" -dependencies = [ - "anyhow", - "borsh", - "derive_more 2.0.1", - "elf", - "lazy_static", - "postcard", - "risc0-zkp", - "risc0-zkvm-platform", - "semver 1.0.26", - "serde", - "tracing", -] - -[[package]] -name = "risc0-build" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31d104165340cba919a3dac26c4be7da04b20b941601a7ad50c04834c4d26de5" -dependencies = [ - "anyhow", - "cargo_metadata", - "derive_builder", - "dirs", - "docker-generate", - "hex", - "risc0-binfmt", - "risc0-zkos-v1compat", - "risc0-zkp", - "risc0-zkvm-platform", - "rzup", - "semver 1.0.26", - "serde", - "serde_json", - "stability", - "tempfile", -] - -[[package]] -name = "risc0-build-ethereum" -version = "2.0.0" -source = "git+https://github.com/risc0/risc0-ethereum?tag=v2.0.0#38591d7a1302d437b76937bd3e0432005b33f616" -dependencies = [ - "anyhow", - "bytemuck", - "hex", - "risc0-build", - "risc0-zkp", - "risc0-zkvm", -] - -[[package]] -name = "risc0-circuit-keccak" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd8acfc84307ed1be64cf9fefc390963fc22b2865d027f03405977a0cfa9747" -dependencies = [ - "anyhow", - "bytemuck", - "paste", - "risc0-binfmt", - "risc0-circuit-recursion", - "risc0-core", - "risc0-zkp", - "tracing", -] - -[[package]] -name = "risc0-circuit-recursion" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd1514e94440e2da301f48d345e1937b315147f58c5dc4992feb045324651d" -dependencies = [ - "anyhow", - "bytemuck", - "hex", - "metal", - "risc0-core", - "risc0-zkp", - "tracing", -] - -[[package]] -name = "risc0-circuit-rv32im" -version = "2.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f6ed144d8b8f93c4a6096e3dd90f9dcbd91eff83eae690a72fd6e640760b94" -dependencies = [ - "anyhow", - "bit-vec", - "bytemuck", - "derive_more 2.0.1", - "paste", - "risc0-binfmt", - "risc0-core", - "risc0-zkp", - "serde", - "tracing", -] - -[[package]] -name = "risc0-core" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317bbf70a8750b64d4fd7a2bdc9d7d5f30d8bb305cae486962c797ef35c8d08e" -dependencies = [ - "bytemuck", - "bytemuck_derive", - "rand_core 0.6.4", -] - -[[package]] -name = "risc0-groth16" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b31cb7b2a46f0cdaf71803ea7e0389af9f5bc1aea2531106f2972b241f26e98" -dependencies = [ - "anyhow", - "ark-bn254", - "ark-ec", - "ark-groth16", - "ark-serialize 0.5.0", - "bytemuck", - "hex", - "num-bigint", - "num-traits", - "risc0-binfmt", - "risc0-zkp", - "serde", - "stability", -] - -[[package]] -name = "risc0-zkos-v1compat" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f76c479b69d1987cb54ac72dcc017197296fdcd6daf78fafc10cbbd3a167a7de" -dependencies = [ - "include_bytes_aligned", - "no_std_strings", -] - -[[package]] -name = "risc0-zkp" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa210a232361fd671b30918469856b64d715f2564956d0a5df97ab6cb116d28b" -dependencies = [ - "anyhow", - "blake2", - "borsh", - "bytemuck", - "cfg-if", - "digest 0.10.7", - "hex", - "hex-literal", - "metal", - "paste", - "rand_core 0.6.4", - "risc0-core", - "risc0-zkvm-platform", - "serde", - "sha2", - "stability", - "tracing", -] - -[[package]] -name = "risc0-zkvm" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a049319790277845335445b549d49e66341f4a7ffba7f7aaa1e77e2fc4a9c19" -dependencies = [ - "anyhow", - "bincode", - "bonsai-sdk", - "borsh", - "bytemuck", - "bytes", - "derive_more 2.0.1", - "getrandom 0.2.16", - "hex", - "lazy-regex", - "prost", - "risc0-binfmt", - "risc0-build", - "risc0-circuit-keccak", - "risc0-circuit-recursion", - "risc0-circuit-rv32im", - "risc0-core", - "risc0-groth16", - "risc0-zkos-v1compat", - "risc0-zkp", - "risc0-zkvm-platform", - "rrs-lib", - "rzup", - "semver 1.0.26", - "serde", - "sha2", - "stability", - "tempfile", - "tracing", -] - -[[package]] -name = "risc0-zkvm-platform" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e4de2938eaf24892ef927d9cef6e4acb6a19ce01c017cd498533896f633f332" -dependencies = [ - "bytemuck", - "cfg-if", - "getrandom 0.2.16", - "getrandom 0.3.2", - "libm", - "stability", -] - [[package]] name = "rlp" version = "0.5.2" @@ -2731,21 +2697,11 @@ dependencies = [ "rustc-hex", ] -[[package]] -name = "rrs-lib" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4382d3af3a4ebdae7f64ba6edd9114fff92c89808004c4943b393377a25d001" -dependencies = [ - "downcast-rs", - "paste", -] - [[package]] name = "ruint" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78a46eb779843b2c4f21fac5773e25d6d5b7c8f0922876c91541790d2ca27eef" +checksum = "11256b5fe8c68f56ac6f39ef0720e592f33d2367a4782740d9c9142e889c7fb4" dependencies = [ "alloy-rlp", "ark-ff 0.3.0", @@ -2816,7 +2772,7 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" dependencies = [ - "bitflags 2.9.0", + "bitflags", "errno", "libc", "linux-raw-sys", @@ -2825,41 +2781,31 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.27" +version = "0.23.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "730944ca083c1c233a75c09f199e973ca499344a2b7ba9e755c457e86fb4a321" +checksum = "7160e3e10bf4535308537f3c4e1641468cd0e485175d6163087c0393c7d46643" dependencies = [ "once_cell", - "ring", "rustls-pki-types", "rustls-webpki", "subtle", "zeroize", ] -[[package]] -name = "rustls-pemfile" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" -dependencies = [ - "rustls-pki-types", -] - [[package]] name = "rustls-pki-types" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" +checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" dependencies = [ - "web-time", + "zeroize", ] [[package]] name = "rustls-webpki" -version = "0.103.2" +version = "0.103.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7149975849f1abb3832b246010ef62ccc80d3a76169517ada7188252b9cfb437" +checksum = "e4a72fe2bcf7a6ac6fd7d0b9e5cb68aeb7d4c0a0271730218b3e92d43b4eb435" dependencies = [ "ring", "rustls-pki-types", @@ -2868,9 +2814,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" [[package]] name = "rusty-fork" @@ -2891,20 +2837,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] -name = "rzup" -version = "0.4.1" +name = "schannel" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "400558bf12d4292a7804093b60a437ba8b0219ea7d53716b2c010a0d31e5f4a8" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ - "semver 1.0.26", - "serde", - "strum", - "tempfile", - "thiserror 2.0.12", - "toml", - "yaml-rust2", + "windows-sys 0.59.0", ] +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + [[package]] name = "sec1" version = "0.7.3" @@ -2919,6 +2865,29 @@ dependencies = [ "zeroize", ] +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "semver" version = "0.11.0" @@ -2933,9 +2902,6 @@ name = "semver" version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" -dependencies = [ - "serde", -] [[package]] name = "semver-parser" @@ -2978,15 +2944,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_spanned" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" -dependencies = [ - "serde", -] - [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -2999,6 +2956,17 @@ dependencies = [ "serde", ] +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + [[package]] name = "sha2" version = "0.10.9" @@ -3036,6 +3004,15 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "signal-hook-registry" +version = "1.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" +dependencies = [ + "libc", +] + [[package]] name = "signature" version = "2.2.0" @@ -3063,9 +3040,9 @@ checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" [[package]] name = "socket2" -version = "0.5.9" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" dependencies = [ "libc", "windows-sys 0.52.0", @@ -3087,16 +3064,6 @@ dependencies = [ "der", ] -[[package]] -name = "stability" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d904e7009df136af5297832a3ace3370cd14ff1546a232f4f185036c2736fcac" -dependencies = [ - "quote", - "syn 2.0.101", -] - [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -3109,34 +3076,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" -[[package]] -name = "strsim" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - -[[package]] -name = "strum" -version = "0.26.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.101", -] - [[package]] name = "subtle" version = "2.6.1" @@ -3167,9 +3106,9 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "0.6.4" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb3d0961cd53c23ea94eeec56ba940f636f6394788976e9f16ca5ee0aca7464a" +checksum = "b9ac494e7266fcdd2ad80bf4375d55d27a117ea5c866c26d0e97fe5b3caeeb75" dependencies = [ "paste", "proc-macro2", @@ -3197,6 +3136,27 @@ dependencies = [ "syn 2.0.101", ] +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tap" version = "1.0.1" @@ -3205,12 +3165,12 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.19.1" +version = "3.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" +checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" dependencies = [ "fastrand", - "getrandom 0.3.2", + "getrandom 0.3.3", "once_cell", "rustix", "windows-sys 0.59.0", @@ -3257,54 +3217,94 @@ dependencies = [ ] [[package]] -name = "tiny-keccak" -version = "2.0.2" +name = "time" +version = "0.3.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" dependencies = [ - "crunchy", + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", ] [[package]] -name = "tinystr" -version = "0.7.6" +name = "time-core" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" + +[[package]] +name = "time-macros" +version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" dependencies = [ - "displaydoc", - "zerovec", + "num-conv", + "time-core", ] [[package]] -name = "tinyvec" -version = "1.9.0" +name = "tiny-keccak" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" dependencies = [ - "tinyvec_macros", + "crunchy", ] [[package]] -name = "tinyvec_macros" -version = "0.1.1" +name = "tinystr" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +dependencies = [ + "displaydoc", + "zerovec", +] [[package]] name = "tokio" -version = "1.45.0" +version = "1.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2513ca694ef9ede0fb23fe71a4ee4107cb102b9dc1930f6d0fd77aae068ae165" +checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" dependencies = [ "backtrace", "bytes", "libc", "mio", + "parking_lot", "pin-project-lite", + "signal-hook-registry", "socket2", + "tokio-macros", "windows-sys 0.52.0", ] +[[package]] +name = "tokio-macros" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + [[package]] name = "tokio-rustls" version = "0.26.2" @@ -3328,26 +3328,11 @@ dependencies = [ "tokio", ] -[[package]] -name = "toml" -version = "0.8.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ae329d1f08c4d17a59bed7ff5b5a769d062e64a62d34a3261b219e62cd5aae" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit", -] - [[package]] name = "toml_datetime" version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3" -dependencies = [ - "serde", -] [[package]] name = "toml_edit" @@ -3356,19 +3341,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e" dependencies = [ "indexmap", - "serde", - "serde_spanned", "toml_datetime", - "toml_write", "winnow", ] -[[package]] -name = "toml_write" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfb942dfe1d8e29a7ee7fcbde5bd2b9a25fb89aa70caea2eba3bee836ff41076" - [[package]] name = "tower" version = "0.5.2" @@ -3384,6 +3360,24 @@ dependencies = [ "tower-service", ] +[[package]] +name = "tower-http" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +dependencies = [ + "bitflags", + "bytes", + "futures-util", + "http 1.3.1", + "http-body", + "iri-string", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", +] + [[package]] name = "tower-layer" version = "0.3.3" @@ -3410,9 +3404,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.28" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +checksum = "1b1ffbcf9c6f6b99d386e7444eb608ba646ae452a36b39737deb9663b610f662" dependencies = [ "proc-macro2", "quote", @@ -3421,21 +3415,11 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" dependencies = [ "once_cell", - "valuable", -] - -[[package]] -name = "tracing-subscriber" -version = "0.2.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" -dependencies = [ - "tracing-core", ] [[package]] @@ -3503,12 +3487,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "utf16_iter" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" - [[package]] name = "utf8_iter" version = "1.0.4" @@ -3521,6 +3499,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + [[package]] name = "version_check" version = "0.9.5" @@ -3631,19 +3615,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "wasm-streams" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" -dependencies = [ - "futures-util", - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - [[package]] name = "web-sys" version = "0.3.77" @@ -3654,85 +3625,48 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "web-time" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webpki-roots" -version = "0.26.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" -dependencies = [ - "webpki-roots 1.0.0", -] - -[[package]] -name = "webpki-roots" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2853738d1cc4f2da3a225c18ec6c3721abb31961096e9dbf5ab35fa88b19cfdb" -dependencies = [ - "rustls-pki-types", -] - [[package]] name = "windows-link" -version = "0.1.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" [[package]] name = "windows-registry" -version = "0.4.0" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3" +checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" dependencies = [ + "windows-link", "windows-result", "windows-strings", - "windows-targets 0.53.0", ] [[package]] name = "windows-result" -version = "0.3.2" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ "windows-link", ] [[package]] name = "windows-strings" -version = "0.3.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ "windows-link", ] -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - [[package]] name = "windows-sys" version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.6", + "windows-targets", ] [[package]] @@ -3741,22 +3675,7 @@ version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", + "windows-targets", ] [[package]] @@ -3765,175 +3684,69 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm 0.52.6", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", -] - -[[package]] -name = "windows-targets" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1e4c7e8ceaaf9cb7d7507c974735728ab453b67ef8f18febdd7c11fe59dca8b" -dependencies = [ - "windows_aarch64_gnullvm 0.53.0", - "windows_aarch64_msvc 0.53.0", - "windows_i686_gnu 0.53.0", - "windows_i686_gnullvm 0.53.0", - "windows_i686_msvc 0.53.0", - "windows_x86_64_gnu 0.53.0", - "windows_x86_64_gnullvm 0.53.0", - "windows_x86_64_msvc 0.53.0", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" -[[package]] -name = "windows_aarch64_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - [[package]] name = "windows_i686_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" -[[package]] -name = "windows_i686_gnu" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" - [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" -[[package]] -name = "windows_i686_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" -[[package]] -name = "windows_i686_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" -[[package]] -name = "windows_x86_64_gnu" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - [[package]] name = "windows_x86_64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" -[[package]] -name = "windows_x86_64_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" - [[package]] name = "winnow" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9fb597c990f03753e08d3c29efbfcf2019a003b4bf4ba19225c158e1549f0f3" +checksum = "c06928c8748d81b05c9be96aad92e1b6ff01833332f281e8cfca3be4b35fc9ec" dependencies = [ "memchr", ] @@ -3944,20 +3757,14 @@ version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" dependencies = [ - "bitflags 2.9.0", + "bitflags", ] -[[package]] -name = "write16" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" - [[package]] name = "writeable" -version = "0.5.5" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" [[package]] name = "wyz" @@ -3968,22 +3775,11 @@ dependencies = [ "tap", ] -[[package]] -name = "yaml-rust2" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a1a1c0bc9823338a3bdf8c61f994f23ac004c6fa32c08cd152984499b445e8d" -dependencies = [ - "arraydeque", - "encoding_rs", - "hashlink", -] - [[package]] name = "yoke" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" dependencies = [ "serde", "stable_deref_trait", @@ -3993,9 +3789,9 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", @@ -4003,33 +3799,13 @@ dependencies = [ "synstructure", ] -[[package]] -name = "zerocopy" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" -dependencies = [ - "zerocopy-derive 0.7.35", -] - [[package]] name = "zerocopy" version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" dependencies = [ - "zerocopy-derive 0.8.25", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", + "zerocopy-derive", ] [[package]] @@ -4084,11 +3860,22 @@ dependencies = [ "syn 2.0.101", ] +[[package]] +name = "zerotrie" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + [[package]] name = "zerovec" -version = "0.10.4" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" dependencies = [ "yoke", "zerofrom", @@ -4097,11 +3884,39 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.10.3" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", "syn 2.0.101", ] + +[[package]] +name = "zstd" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "7.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.15+zstd.1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/templates/default/Cargo.toml b/templates/default/Cargo.toml new file mode 100644 index 0000000000..ffd914ce40 --- /dev/null +++ b/templates/default/Cargo.toml @@ -0,0 +1,11 @@ +[workspace] +members = [ + "program", + ".enclave/support/dev" +] + +[workspace.dependencies] +fhe_rs = { package = "fhe", git = "https://github.com/gnosisguild/fhe.rs" } +fhe-traits = { git = "https://github.com/gnosisguild/fhe.rs" } +rand = "0.8.5" +anyhow = "1.0.86" diff --git a/templates/default/README.md b/templates/default/README.md new file mode 100644 index 0000000000..13bacf87b1 --- /dev/null +++ b/templates/default/README.md @@ -0,0 +1,138 @@ +# Enclave Protocol Template Setup + +The Enclave Protocol Template provides a complete development environment for building and testing applications with Fully Homomorphic Encryption (FHE). This template enables local deployment and interaction with the Enclave protocol without requiring the core contracts to be copied. + +## Prerequisites + +Before getting started, ensure your development environment meets the following requirements: + +### Required Software + +**Docker** (tested with version 25.0.6 or later) + +```bash +docker --version +# Expected output: Docker version 25.0.6, build v25.0.6 +``` + +**Node.js** (version 22.10.0 or later) + +```bash +node --version +# Expected output: v22.10.0 +``` + +**pnpm** (version 10.7.1 or later) + +```bash +pnpm --version +# Expected output: 10.7.1 +``` + +**Rust** (version 1.85.1 or later) + +```bash +rustc --version +# Expected output: rustc 1.85.1 (4eb161250 2025-03-15) +``` + +### Optional Software + +**tmux** (recommended for managing multiple processes) + +```bash +tmux -V +# Expected output: tmux 3.4 +``` + +### System Requirements + +- Linux/POSIX environment +- For Nix users: A Nix flake is included in the generated template + +## Installation + +### 1. Install the Enclave CLI + +Install the Enclave CLI tool from the official repository: + +```bash +cargo install --git https://github.com/gnosisguild/enclave --branch main e3-cli +``` + +### 2. Install wasm-pack + +Install wasm-pack for WebAssembly compilation: + +```bash +cargo install wasm-pack +``` + +## Project Setup + +### Generate a New Project + +Create a new Enclave project using the CLI: + +```bash +enclave init myenclave +cd ./myenclave +``` + +Replace `myenclave` with your desired project name. + +### Project Structure + +The generated project contains the following directories and files: + +| File/Directory | Description | +| ----------------------- | -------------------------------------------------- | +| `./client` | Client-side application | +| `./contracts` | Your contracts that interact with the protocol | +| `./deploy` | Your deploy scripts | +| `./enclave.config.yaml` | Configuration for the enclave CLI | +| `./program` | FHE computation code | +| `./scripts` | Scripts to run the project | +| `./server` | TypeScript server that coordinates the FHE process | + +## Running the Development Environment + +### Start All Services + +Launch the complete development stack with a single command: + +```bash +pnpm dev:all +``` + +### What Happens Next + +The command will start multiple processes simultaneously: + +1. **Hardhat EVM Node** - Local Ethereum development network +2. **Enclave Ciphernodes** - Set of nodes for FHE processing +3. **TypeScript Coordination Server** - Manages FHE process coordination +4. **FHE Program Server** - Handles encrypted computation execution +5. **Frontend Application** - User interface for interaction + +### Process Management + +- **With tmux installed**: Your terminal will split into multiple panes, each showing logs from different services +- **Without tmux**: You'll see a stream of logs from all processes in a single terminal + +### Accessing the Application + +1. **Wait for initialization**: Allow all processes to fully start and stabilize +2. **Open your browser**: Navigate to [http://localhost:3000](http://localhost:3000) +3. **Configure MetaMask**: Ensure MetaMask is installed and configured with a local network pointing to `http://localhost:8545` + +## Next Steps + +Once your development environment is running, you can: + +- Modify the FHE computation logic in the `./program` directory +- Update smart contracts in the `./contracts` directory +- Customize the client application in the `./client` directory +- Configure deployment scripts in the `./deploy` directory + +For detailed usage instructions and API documentation, refer to the project's README.md file and the official Enclave Protocol documentation. diff --git a/templates/default/client/.eslintrc.cjs b/templates/default/client/.eslintrc.cjs new file mode 100644 index 0000000000..fc8d761de0 --- /dev/null +++ b/templates/default/client/.eslintrc.cjs @@ -0,0 +1,19 @@ +module.exports = { + root: true, + env: { browser: true, es2020: true }, + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:react-hooks/recommended', + 'prettier' + ], + ignorePatterns: ['dist', '.eslintrc.cjs'], + parser: '@typescript-eslint/parser', + plugins: ['react-refresh'], + rules: { + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, +} diff --git a/templates/default/client/.gitignore b/templates/default/client/.gitignore new file mode 100644 index 0000000000..f57eb99b0c --- /dev/null +++ b/templates/default/client/.gitignore @@ -0,0 +1,39 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +.yarn/install-state.gz +.DS_Store + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts +/dist/ diff --git a/templates/default/client/.prettierignore b/templates/default/client/.prettierignore new file mode 100644 index 0000000000..b5971906d5 --- /dev/null +++ b/templates/default/client/.prettierignore @@ -0,0 +1,5 @@ + +out/ +dist/ +build/ +node_modules/ \ No newline at end of file diff --git a/templates/default/client/.prettierrc b/templates/default/client/.prettierrc new file mode 100644 index 0000000000..6f412dcc66 --- /dev/null +++ b/templates/default/client/.prettierrc @@ -0,0 +1,11 @@ +{ + "printWidth": 140, + "useTabs": false, + "tabWidth": 2, + "singleQuote": true, + "jsxSingleQuote": true, + "semi": false, + "trailingComma": "all", + "arrowParens": "always", + "plugins": ["prettier-plugin-tailwindcss"] +} diff --git a/templates/default/client/index.html b/templates/default/client/index.html new file mode 100644 index 0000000000..e9dc495af7 --- /dev/null +++ b/templates/default/client/index.html @@ -0,0 +1,48 @@ + + + + + Enclave + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + + + \ No newline at end of file diff --git a/templates/default/client/package.json b/templates/default/client/package.json new file mode 100644 index 0000000000..a1b2199c21 --- /dev/null +++ b/templates/default/client/package.json @@ -0,0 +1,52 @@ +{ + "name": "enclave-client", + "private": true, + "version": "1.0.0", + "type": "module", + "author": { + "name": "gnosisguild", + "url": "https://github.com/gnosisguild" + }, + "homepage": "https://github.com/gnosisguild/enclave", + "scripts": { + "dev": "vite --no-open --host", + "build": "tsc && vite build", + "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", + "preview": "vite preview" + }, + "dependencies": { + "@gnosis-guild/enclave": "workspace:*", + "@gnosis-guild/enclave-react": "workspace:*", + "@gnosis-guild/enclave-sdk": "workspace:*", + "@phosphor-icons/react": "^2.1.4", + "@tanstack/react-query": "^5.74.3", + "@wagmi/core": "^2.14.16", + "connectkit": "^1.9.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "viem": "2.30.6", + "wagmi": "^2.14.16" + }, + "devDependencies": { + "@tailwindcss/typography": "^0.5.12", + "@types/react": "^18.2.66", + "@types/react-dom": "^18.2.22", + "@typescript-eslint/eslint-plugin": "^7.2.0", + "@typescript-eslint/parser": "^7.2.0", + "@vitejs/plugin-react": "^4.2.1", + "autoprefixer": "^10.4.19", + "eslint": "^8.57.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.6", + "prettier": "^3.2.5", + "prettier-plugin-tailwindcss": "^0.5.13", + "tailwindcss": "^3.4.2", + "typescript": "^5.8.3", + "vite": "^5.2.0", + "vite-plugin-top-level-await": "^1.4.1", + "vite-plugin-wasm": "^3.3.0", + "vite-tsconfig-paths": "^4.3.2", + "wasm-pack": "^0.13.1" + }, + "packageManager": "pnpm@10.7.1+sha512.2d92c86b7928dc8284f53494fb4201f983da65f0fb4f0d40baafa5cf628fa31dae3e5968f12466f17df7e97310e30f343a648baea1b9b350685dafafffdf5808" +} diff --git a/templates/default/client/postcss.config.cjs b/templates/default/client/postcss.config.cjs new file mode 100644 index 0000000000..33ad091d26 --- /dev/null +++ b/templates/default/client/postcss.config.cjs @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/templates/default/client/public/favicon.ico b/templates/default/client/public/favicon.ico new file mode 100644 index 0000000000..0485337a2a Binary files /dev/null and b/templates/default/client/public/favicon.ico differ diff --git a/templates/default/client/public/favicon.png b/templates/default/client/public/favicon.png new file mode 100644 index 0000000000..0485337a2a Binary files /dev/null and b/templates/default/client/public/favicon.png differ diff --git a/templates/default/client/public/manifest.json b/templates/default/client/public/manifest.json new file mode 100644 index 0000000000..57757aca82 --- /dev/null +++ b/templates/default/client/public/manifest.json @@ -0,0 +1,15 @@ +{ + "short_name": "Enclave", + "name": "Enclave Encrypted Execution Environment", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} \ No newline at end of file diff --git a/templates/default/client/src/App.tsx b/templates/default/client/src/App.tsx new file mode 100644 index 0000000000..eec6d6503d --- /dev/null +++ b/templates/default/client/src/App.tsx @@ -0,0 +1,13 @@ +import React from 'react' +import WizardSDK from './pages/WizardSDK' +import './globals.css' + +const App: React.FC = () => { + return ( +
+ +
+ ) +} + +export default App diff --git a/templates/default/client/src/globals.css b/templates/default/client/src/globals.css new file mode 100644 index 0000000000..f51899eaa6 --- /dev/null +++ b/templates/default/client/src/globals.css @@ -0,0 +1,314 @@ +@import url('https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:ital,wght@0,200..800;1,200..800&display=swap'); +@tailwind base; +@tailwind utilities; +@tailwind components; + +body, +html { + margin: 0; + padding: 0; + overflow-x: hidden; + min-height: 100vh; + display: flex; + flex-direction: column; +} + +footer { + margin-top: auto; +} + +@layer components { + .toast-alert { + @apply translate-x-[-10rem] opacity-0; /* Start off-screen to the left */ + animation: slideIn 0.5s forwards; + } + + @keyframes slideIn { + from { + opacity: 0; + transform: translateX(-10rem); /* Start from -10rem on the X axis */ + } + to { + opacity: 1; + transform: translateX(0); /* End at 0 on the X axis */ + } + } +} + +@layer base { + /* Global Styles */ + + body { + @apply transition-element bg-slate-200 p-0 font-jakarta text-slate-600; + } + + img { + @apply max-w-full select-none; + -webkit-user-drag: none; + user-drag: none; + -webkit-touch-callout: none; + } + + button, + input { + @apply focus:outline-none; + } + + ol, + ul { + list-style: initial; + } + + select { + @apply outline-none focus:outline-none; + } + + /* Headings & Subtitles */ + h1 { + @apply text-4xl font-bold md:text-6xl; + } + + h2 { + @apply text-3xl font-bold md:text-5xl; + } + + h3 { + @apply text-2xl font-bold md:text-4xl; + } + + h4 { + @apply text-lg font-semibold leading-tight md:text-xl; + } + + h5 { + @apply text-[20px] text-lg font-semibold; + } + + h6 { + @apply text-[20px] text-lg font-medium; + } + + p { + @apply !block whitespace-pre-line text-base font-normal; + } + + .subtitle1 { + @apply font-jakarta text-base font-light text-zinc-400; + } + + .subtitle2 { + @apply text-2xl font-semibold; + } + + .subtext { + @apply font-jakarta text-sm font-normal; + } + + /* Remove Input Arrows & Search X */ + input::-webkit-outer-spin-button, + input::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; + } + input[type='search']::-webkit-search-decoration, + input[type='search']::-webkit-search-cancel-button, + input[type='search']::-webkit-search-results-button, + input[type='search']::-webkit-search-results-decoration { + -webkit-appearance: none; + } + input[type='number'] { + -moz-appearance: textfield; + } + + /* Selection Color */ + ::selection { + @apply bg-blue-500; + } + + ::-moz-selection { + @apply bg-blue-500; + } +} + +@layer components { + /* Buttons */ + .button-primary { + @apply button-styles border-lime-600/80 bg-lime-400 text-white active:bg-lime-600 active:text-white/70 enabled:shadow-button enabled:hover:bg-lime-500 active:enabled:translate-y-1 active:enabled:shadow-sm disabled:cursor-not-allowed disabled:border-gray-500 disabled:bg-slate-200 disabled:text-gray-500 disabled:shadow-none; + } + + .button-outlined { + @apply button-styles border-lime-400 bg-white text-lime-400 active:bg-lime-200 active:text-lime-400/70 enabled:shadow-button-outlined enabled:hover:bg-lime-100 active:enabled:translate-y-1 active:enabled:shadow-sm disabled:border-gray-500/30 disabled:bg-slate-200 disabled:text-gray-500/30 disabled:shadow-none; + } + + .button-connect { + @apply button h-12 w-full text-lg; + } + + .button-max { + @apply h-[46px] w-auto rounded-2xl px-6; + } + + .button-cancel { + @apply button-styles border-red h-9 border-2 px-3.5 py-2 text-[15px] font-medium; + } + + /* Inputs & Selects */ + .dropdown-select { + @apply flex h-12 cursor-pointer items-center gap-2.5 rounded-full bg-zinc-700 bg-[url('/assets/icons/caret.svg')] bg-[right_16px_center] bg-no-repeat py-4 pl-4 pr-9 text-sm; + } + + /* opacity-5 transition-all duration-300 ease-in-out placeholder:text-slate-600/50 focus:border-slate-600 focus:bg-opacity-20 focus:outline-none */ + .input { + @apply flex h-12 w-full items-center rounded-lg border-2 border-slate-600/20 bg-slate-300/10 px-4 py-2 font-jakarta text-slate-600 focus:border-slate-300 focus:bg-white; + } + + .input-search { + @apply input bg-zinc-800 bg-[url('/assets/icons/search.svg')] bg-[left_16px_center] bg-no-repeat py-3 pl-12 pr-4; + } + + /* Cards */ + .card { + @apply flex flex-col rounded-2xl bg-zinc-800 p-8; + } + + .card-dropdown { + @apply flex flex-col rounded-2xl bg-zinc-700 p-6 shadow; + } + + /* Icons */ + .external-icon { + @apply icon h-[14px] w-[14px] bg-[url('./assets/icons/arrow.svg')]; + } + .close-icon { + @apply icon h-[18px] w-[18px] bg-[url('./assets/icons/close.svg')]; + } + + /* Modals */ + .modal-overlay { + @apply side-padding fixed left-0 top-0 z-50 flex h-full w-full flex-col items-center justify-center bg-zinc-950/50 backdrop-blur-sm; + } + + /* Misc */ + .menu-item { + @apply flex h-12 cursor-pointer items-center gap-2 p-4 text-lg font-medium hover:rounded-lg hover:bg-emerald-900/20; + } + + .menu-text { + @apply text-zinc-300 group-hover:text-emerald-400; + } + + .truncate-2-lines { + @apply truncate-lines; + -webkit-line-clamp: 2; + } + + .page-number { + @apply flex h-6 w-6 cursor-pointer items-center justify-center; + } +} + +@layer utilities { + .button-styles { + @apply flex h-12 items-center justify-center rounded-2xl border-2 px-4 py-1 font-jakarta text-base font-extrabold uppercase leading-none tracking-custom transition-all duration-300 ease-in-out enabled:cursor-pointer; + } + + .icon { + @apply cursor-pointer bg-contain bg-center bg-no-repeat; + } + + .transition-element { + @apply transition-all duration-75 ease-linear; + } + + .side-padding { + @apply px-[5%] md:px-[10%]; + } + + .line { + @apply h-px w-full bg-slate-200; + } + + .icon-placeholder { + @apply h-6 w-6 rounded-full bg-white/50; + } + + .h-screen-minus-header { + height: calc(100vh - 16px); + } + + .h-screen-minus-header-footer { + height: calc(100vh - 156px); + } + + .footer-fixed { + @apply fixed inset-x-0 bottom-0; + } + + .footer-dynamic { + @apply relative mt-auto; + } + + .truncate-lines { + display: -webkit-box; + overflow: hidden; + text-overflow: ellipsis; + -webkit-box-orient: vertical; + } + + .show-scrollbar { + overflow-y: scroll !important; + } + + .hide-scrollbar { + overflow: hidden !important; + } +} + +._1n3pr306 svg g { + fill: #65a30d !important; +} + +/* Custom Scrollbar */ +/* Firefox */ +/* \* { + scrollbar-width: thin; + scrollbar-color: #6b6b6b transparent; +} */ + +/* Chrome, Edge, and Safari */ +/* html::-webkit-scrollbar, +body::-webkit-scrollbar { + width: 9px !important; +} + +::-webkit-scrollbar { + width: 12px; +} + +::-webkit-scrollbar-track { + background: transparent; + margin-right: 4px; +} + +html::-webkit-scrollbar-thumb, +body::-webkit-scrollbar-thumb { + border: none !important; + transition: all 0.4s; + -moz-transition: all 0.4s; + -webkit-transition: all 0.4s; +} + +::-webkit-scrollbar-thumb { + border-right: 4px transparent solid; + background-clip: padding-box; + border-radius: 8px; + background-color: #6b6b6b; + padding-top: 8px; + transition: all 0.4s; + -moz-transition: all 0.4s; + -webkit-transition: all 0.4s; +} + +::-webkit-scrollbar-thumb:hover { + background-color: #4c4b4b; +} */ diff --git a/templates/default/client/src/main.tsx b/templates/default/client/src/main.tsx new file mode 100644 index 0000000000..8f4cc8fc64 --- /dev/null +++ b/templates/default/client/src/main.tsx @@ -0,0 +1,35 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import { WagmiProvider, createConfig } from 'wagmi' +import { sepolia, anvil } from 'wagmi/chains' +import { QueryClient, QueryClientProvider } from '@tanstack/react-query' +import { ConnectKitProvider, getDefaultConfig } from 'connectkit' +import App from './App.tsx' + +const wagmiConfig = createConfig( + getDefaultConfig({ + appName: 'Enclave E3', + enableFamily: false, + chains: import.meta.env.DEV + ? ([sepolia, anvil] as const) + : ([sepolia] as const), + walletConnectProjectId: import.meta.env.VITE_WALLETCONNECT_PROJECT_ID!, + }), +) + +const queryClient = new QueryClient() +const connectKitOptions = import.meta.env.DEV + ? { initialChainId: 0 } + : { initialChainId: sepolia.id } + +createRoot(document.getElementById('root')!).render( + + + + + + + + + , +) diff --git a/templates/default/client/src/pages/WizardSDK.tsx b/templates/default/client/src/pages/WizardSDK.tsx new file mode 100644 index 0000000000..f800163032 --- /dev/null +++ b/templates/default/client/src/pages/WizardSDK.tsx @@ -0,0 +1,973 @@ +import React, { useState, useEffect, useMemo } from 'react' +import { useAccount } from 'wagmi' +import { ConnectKitButton } from 'connectkit' +import { hexToBytes } from 'viem' + +// Components +import CardContent from './components/CardContent' +import EnvironmentError from './components/EnvironmentError' +import Spinner from './components/Spinner' + +// SDK and utilities +import { useEnclaveSDK } from '@gnosis-guild/enclave-react' +import { + encodeBfvParams, + encodeComputeProviderParams, + calculateStartWindow, + decodePlaintextOutput, + DEFAULT_COMPUTE_PROVIDER_PARAMS, + DEFAULT_E3_CONFIG, + encryptNumber, +} from '@gnosis-guild/enclave-sdk' +import { HAS_MISSING_ENV_VARS, MISSING_ENV_VARS, getContractAddresses } from '@/utils/env-config' +import { formatContractError } from '@/utils/error-formatting' + +// Icons +import { + Wallet, + Calculator, + Lock, + CheckCircle, + NumberSquareOne, + NumberSquareTwo, + NumberSquareThree, + NumberSquareFour, + NumberSquareFive, + NumberSquareSix, +} from '@phosphor-icons/react' + +// ============================================================================ +// TYPES & ENUMS +// ============================================================================ + +enum WizardStep { + CONNECT_WALLET = 1, + REQUEST_COMPUTATION = 2, + ACTIVATE_E3 = 3, + ENTER_INPUTS = 4, + ENCRYPT_SUBMIT = 5, + RESULTS = 6, +} + +interface E3State { + id: bigint | null + isRequested: boolean + isCommitteePublished: boolean + isActivated: boolean + publicKey: `0x${string}` | null + expiresAt: bigint | null + plaintextOutput: string | null + hasPlaintextOutput: boolean +} + +// ============================================================================ +// ERROR DISPLAY COMPONENT +// ============================================================================ + +interface ErrorDisplayProps { + error: any + showDetails: boolean + onToggleDetails: () => void +} + +const ErrorDisplay: React.FC = ({ error, showDetails, onToggleDetails }) => { + if (!error) return null + + const userMessage = formatContractError(error) + const technicalMessage = error.message || JSON.stringify(error, null, 2) + + return ( +
+

+ Error: {userMessage} +

+ {userMessage !== technicalMessage && ( + + )} + {showDetails && userMessage !== technicalMessage && ( +
{technicalMessage}
+ )} +
+ ) +} + +// ============================================================================ +// STEP COMPONENTS +// ============================================================================ + +const ConnectWalletStep: React.FC = () => ( + +
+
+ +
+

Step 1: Connect Your Wallet

+
+

Welcome to Enclave

+

+ Enclave is a protocol for Encrypted Execution Environments (E3) that enables secure computations on private data using fully + homomorphic encryption (FHE), zero-knowledge proofs, and distributed key cryptography. Connect your wallet to experience + privacy-preserving computation. +

+
+

+ How it works: You'll request an E3 computation → Ciphernode committee is selected → Committee publishes shared + public key → You encrypt and submit inputs → Secure computation executes → Only verified outputs are decrypted by the committee. +

+
+
+
+ +
+
+
+) + +interface RequestComputationStepProps { + e3State: E3State + isRequesting: boolean + transactionHash: string | undefined + error: any + isSuccess: boolean + onRequestComputation: () => Promise +} + +const RequestComputationStep: React.FC = ({ + e3State, + isRequesting, + transactionHash, + error, + isSuccess, + onRequestComputation, +}) => ( + +
+
+ +
+

Step 2: Request Computation

+
+

Request Encrypted Execution Environment

+

+ Request an E3 computation from Enclave's decentralized network. This initiates the selection of a Ciphernode Committee through + cryptographic sortition, who will generate shared keys for securing your computation without any single point of trust. +

+
+

+ Process: Request E3 → Committee Selection via Sortition → Key Generation → Ready for Activation +

+
+ + {/* E3 State Progress */} + {e3State.id !== null && ( +
+
+

+ ✅ E3 ID: {String(e3State.id)} +
+ Status: Computation requested +

+
+ + {e3State.isCommitteePublished && e3State.publicKey ? ( +
+

+ 🔑 Committee Published Public Key! +
+ Public Key: {e3State.publicKey.slice(0, 20)}...{e3State.publicKey.slice(-10)} +
+ Ready to activate E3 environment. +

+
+ ) : ( +
+
+ +

+ ⏳ Waiting for committee to publish public key... +
+ The computation committee is being selected and will provide the public key shortly. +

+
+
+ )} +
+ )} + + {error && {}} />} + + {isSuccess && transactionHash && ( +
+

+ ✅ Transaction Successful! +
+ Hash: {transactionHash.slice(0, 10)}...{transactionHash.slice(-8)} +

+
+ )} +
+ + {isRequesting && ( +
+ +
+ )} + + +
+
+) + +interface ActivateE3StepProps { + e3State: E3State + isRequesting: boolean + transactionHash: string | undefined + error: any + isSuccess: boolean + onActivateE3: () => Promise +} + +const ActivateE3Step: React.FC = ({ e3State, isRequesting, transactionHash, error, isSuccess, onActivateE3 }) => ( + +
+
+ +
+

Step 3: Activate E3

+
+

Activate Encrypted Execution Environment

+

+ Activate the E3 using the Ciphernode Committee's shared public key. This distributed key ensures no single node can decrypt your + inputs or intermediate states - only the verified final output can be collectively decrypted by the committee. +

+ + {e3State.isActivated && e3State.expiresAt && ( +
+

+ ✅ E3 Environment Activated! +
+ Expires At: {new Date(Number(e3State.expiresAt) * 1000).toLocaleString()} +

+
+ )} + + {error && {}} />} + + {isSuccess && transactionHash && ( +
+

+ ✅ Transaction Successful! +
+ Hash: {transactionHash.slice(0, 10)}...{transactionHash.slice(-8)} +

+
+ )} +
+ + {isRequesting && ( +
+ +
+ )} + + +
+
+) + +interface EnterInputsStepProps { + e3State: E3State + input1: string + input2: string + onInput1Change: (value: string) => void + onInput2Change: (value: string) => void + onSubmit: (e: React.FormEvent) => void +} + +const EnterInputsStep: React.FC = ({ e3State, input1, input2, onInput1Change, onInput2Change, onSubmit }) => ( + +
+
+ +
+

Step 4: Enter Your Numbers

+
+

Homomorphic Encrypted Computation

+

+ Enter two numbers for a privacy-preserving addition using fully homomorphic encryption (FHE). Your inputs will be encrypted + locally and remain encrypted throughout the entire computation process, with only the final result being decrypted. +

+
+

+ Privacy Guarantee: FHE allows computation on encrypted data. Your numbers remain private throughout the process + - inputs, intermediate states, and execution are all encrypted. +

+
+ +
+
+ + onInput1Change(e.target.value)} + className='w-full rounded-md border border-slate-300 px-3 py-2 focus:border-transparent focus:outline-none focus:ring-2 focus:ring-enclave-500' + placeholder='Enter first number' + required + /> +
+
+ + onInput2Change(e.target.value)} + className='w-full rounded-md border border-slate-300 px-3 py-2 focus:border-transparent focus:outline-none focus:ring-2 focus:ring-enclave-500' + placeholder='Enter second number' + required + /> +
+
+ + {input1 && input2 && ( +
+

+ Ready to compute: {input1} + {input2} = ? +

+
+ )} +
+ + +
+
+) + +interface EncryptSubmitStepProps { + inputPublishError: string | null + inputPublishSuccess: boolean + showErrorDetails: boolean + onToggleErrorDetails: () => void + onTryAgain: () => void +} + +const EncryptSubmitStep: React.FC = ({ + inputPublishError, + inputPublishSuccess, + showErrorDetails, + onToggleErrorDetails, + onTryAgain, +}) => ( + +
+
+ +
+

Step 5: Encrypting & Submitting

+
+

Secure Process Execution

+ + {!inputPublishError && !inputPublishSuccess && ( +
+
+ +
+

+ Your inputs are being encrypted to the committee's public key and submitted to the E3. The Compute Provider will execute the + FHE computation over your encrypted data... +

+
+

+ Process: Encrypt to Key → Submit to E3 → FHE Computation → Ciphertext Output +

+
+
+ )} + + {inputPublishError && ( +
+ + +
+ )} + + {inputPublishSuccess && ( +
+
+ +
+
+

+ ✅ Inputs Successfully Submitted! +
+ Your encrypted inputs have been published to the E3. The Compute Provider is executing the FHE computation and will publish + the ciphertext output for committee decryption. +

+
+
+
+ +
+

+ Computing... Waiting for the Ciphernode Committee to collectively decrypt the verified output. +

+
+
+ )} +
+
+
+) + +interface ResultsStepProps { + input1: string + input2: string + result: number | null + e3State: E3State + transactionHash: string | undefined + onReset: () => void +} + +const ResultsStep: React.FC = ({ input1, input2, result, e3State, transactionHash, onReset }) => ( + +
+
+ +
+

Step 6: Results

+
+

Computation Complete!

+ +
+
+

+ Your Encrypted Computation: +

+

+ {input1} + {input2} = {result !== null ? result : 'Computing...'} +

+ {result !== null &&

✅ Computed securely using FHE with distributed key decryption!

} +
+
+ +
+
+

+ E3 ID: {String(e3State.id)} +

+
+ {transactionHash && ( +
+

+ Transaction: {transactionHash.slice(0, 10)}...{transactionHash.slice(-8)} +

+
+ )} + {e3State.plaintextOutput && ( +
+

+ Raw Output: {e3State.plaintextOutput.slice(0, 20)}... +

+
+ )} +
+ +
+

+ 🔒 Cryptographic Guarantees: Your inputs remained encrypted throughout the entire process. The Ciphernode + Committee used distributed key cryptography to decrypt only the verified output, ensuring data privacy, data integrity, and + correct execution. +

+
+
+ + +
+
+) + +// ============================================================================ +// MAIN WIZARD COMPONENT +// ============================================================================ + +const WizardSDK: React.FC = () => { + const { isConnected } = useAccount() + + if (HAS_MISSING_ENV_VARS) { + return + } + const contracts = getContractAddresses() + const sdkConfig = useMemo( + () => ({ + autoConnect: true, + contracts: { + enclave: contracts.enclave, + ciphernodeRegistry: contracts.ciphernodeRegistry, + }, + }), + [contracts.enclave, contracts.ciphernodeRegistry], + ) + + const { + isInitialized, + error: sdkError, + requestE3, + activateE3, + publishInput, + onEnclaveEvent, + off, + EnclaveEventType, + RegistryEventType, + } = useEnclaveSDK(sdkConfig) + + // Component state + const [currentStep, setCurrentStep] = useState(WizardStep.CONNECT_WALLET) + const [input1, setInput1] = useState('') + const [input2, setInput2] = useState('') + const [lastTransactionHash, setLastTransactionHash] = useState() + const [inputPublishError, setInputPublishError] = useState(null) + const [inputPublishSuccess, setInputPublishSuccess] = useState(false) + const [requestError, setRequestError] = useState(null) + const [showErrorDetails, setShowErrorDetails] = useState(false) + const [isRequesting, setIsRequesting] = useState(false) + const [requestSuccess, setRequestSuccess] = useState(false) + const [result, setResult] = useState(null) + + // E3 state tracking + const [e3State, setE3State] = useState({ + id: null, + isRequested: false, + isCommitteePublished: false, + isActivated: false, + publicKey: null, + expiresAt: null, + plaintextOutput: null, + hasPlaintextOutput: false, + }) + + // Set up event listeners + useEffect(() => { + console.log('running use effect') + if (!isInitialized) { + console.log('refusing to run because sdk is not initialized!') + return + } + + const handleE3Requested = (event: any) => { + const e3Id = event.data.e3Id + setE3State((prev) => ({ + ...prev, + id: e3Id, + isRequested: true, + })) + } + + const handleCommitteePublished = (event: any) => { + const { e3Id, publicKey } = event.data + + // I added a 2 second delay to show the waiting state, its too fast on anvil + setTimeout(() => { + setE3State((prev) => { + if (prev.id !== null && e3Id === prev.id) { + return { + ...prev, + isCommitteePublished: true, + publicKey: publicKey as `0x${string}`, + } + } + return prev + }) + }, 2000) + } + + const handleE3Activated = (event: any) => { + const { e3Id, expiration } = event.data + setE3State((prev) => { + if (prev.id !== null && e3Id === prev.id) { + return { + ...prev, + isActivated: true, + expiresAt: expiration || null, + } + } + return prev + }) + } + + const handlePlaintextOutput = (event: any) => { + const { e3Id, plaintextOutput } = event.data + setE3State((prev) => { + if (prev.id !== null && e3Id === prev.id) { + const decodedResult = decodePlaintextOutput(plaintextOutput) + setResult(decodedResult) + return { + ...prev, + plaintextOutput: plaintextOutput as string, + hasPlaintextOutput: true, + } + } + return prev + }) + } + + // Set up event listeners + console.log('Setting up listeners...') + onEnclaveEvent(EnclaveEventType.E3_REQUESTED, handleE3Requested) + onEnclaveEvent(RegistryEventType.COMMITTEE_PUBLISHED, handleCommitteePublished) + onEnclaveEvent(EnclaveEventType.E3_ACTIVATED, handleE3Activated) + onEnclaveEvent(EnclaveEventType.PLAINTEXT_OUTPUT_PUBLISHED, handlePlaintextOutput) + + // Cleanup + return () => { + console.log('Cleaning up listeners...') + off(EnclaveEventType.E3_REQUESTED, handleE3Requested) + off(RegistryEventType.COMMITTEE_PUBLISHED, handleCommitteePublished) + off(EnclaveEventType.E3_ACTIVATED, handleE3Activated) + off(EnclaveEventType.PLAINTEXT_OUTPUT_PUBLISHED, handlePlaintextOutput) + } + }, [isInitialized, onEnclaveEvent, off, EnclaveEventType, RegistryEventType]) + + // Auto-advance steps based on state + useEffect(() => { + if (!isConnected && currentStep > WizardStep.CONNECT_WALLET) { + setCurrentStep(WizardStep.CONNECT_WALLET) + } else if (isConnected && isInitialized && currentStep === WizardStep.CONNECT_WALLET) { + setCurrentStep(WizardStep.REQUEST_COMPUTATION) + } else if (e3State.isCommitteePublished && currentStep === WizardStep.REQUEST_COMPUTATION) { + setCurrentStep(WizardStep.ACTIVATE_E3) + } else if (e3State.isActivated && currentStep === WizardStep.ACTIVATE_E3) { + setCurrentStep(WizardStep.ENTER_INPUTS) + } else if (e3State.hasPlaintextOutput && currentStep < WizardStep.RESULTS) { + setCurrentStep(WizardStep.RESULTS) + } + }, [isConnected, isInitialized, currentStep, e3State]) + + const handleRequestComputation = async () => { + console.log('handleRequestComputation') + setIsRequesting(true) + setRequestError(null) + setRequestSuccess(false) + + // Reset E3 state + setE3State({ + id: null, + isRequested: false, + isCommitteePublished: false, + isActivated: false, + publicKey: null, + expiresAt: null, + plaintextOutput: null, + hasPlaintextOutput: false, + }) + + try { + const threshold: [number, number] = [DEFAULT_E3_CONFIG.threshold_min, DEFAULT_E3_CONFIG.threshold_max] + const startWindow = calculateStartWindow(60) // 1 minute + const duration = BigInt(60) // 1 minute + const e3ProgramParams = encodeBfvParams() + const computeProviderParams = encodeComputeProviderParams(DEFAULT_COMPUTE_PROVIDER_PARAMS) + + console.log('requestE3') + const hash = await requestE3({ + filter: contracts.filterRegistry, + threshold, + startWindow, + duration, + e3Program: contracts.e3Program, + e3ProgramParams, + computeProviderParams, + value: BigInt('1000000000000000'), // 0.001 ETH + }) + + setLastTransactionHash(hash) + setRequestSuccess(true) + } catch (error) { + setRequestError(error) + console.error('Error requesting computation:', error) + } finally { + setIsRequesting(false) + } + } + + const handleActivateE3 = async () => { + console.log('handleActivateE3') + + if (e3State.id === null || e3State.publicKey === null) { + console.log('refusing to run handler because id or publicKey is null') + return + } + setIsRequesting(true) + setRequestError(null) + + try { + const hash = await activateE3(e3State.id, e3State.publicKey) + setLastTransactionHash(hash) + setRequestSuccess(true) + } catch (error) { + setRequestError(error) + console.error('Error activating E3:', error) + } finally { + setIsRequesting(false) + } + } + + const handleInputSubmit = async (e: React.FormEvent) => { + e.preventDefault() + console.log('handleInputSubmit') + if (!input1 || !input2 || e3State.publicKey === null || e3State.id === null) { + console.log('Refusing to submit input because input is empty or publickey is null or is is null') + return + } + + setCurrentStep(WizardStep.ENCRYPT_SUBMIT) + setInputPublishError(null) + setInputPublishSuccess(false) + + try { + // Parse inputs + const num1 = BigInt(input1) + const num2 = BigInt(input2) + + // Convert hex public key to bytes + const publicKeyBytes = hexToBytes(e3State.publicKey) + + // Encrypt both inputs + const encryptedInput1 = await encryptNumber(num1, publicKeyBytes) + const encryptedInput2 = await encryptNumber(num2, publicKeyBytes) + + if (!encryptedInput1 || !encryptedInput2) { + throw new Error('Failed to encrypt inputs') + } + + // Publish first input + await publishInput(e3State.id, `0x${Array.from(encryptedInput1, (b) => b.toString(16).padStart(2, '0')).join('')}` as `0x${string}`) + + // Publish second input + const hash2 = await publishInput( + e3State.id, + `0x${Array.from(encryptedInput2, (b) => b.toString(16).padStart(2, '0')).join('')}` as `0x${string}`, + ) + + setLastTransactionHash(hash2) + setInputPublishSuccess(true) + } catch (error) { + setInputPublishError(error instanceof Error ? error.message : 'Failed to encrypt and publish inputs') + console.error('Error encrypting/publishing inputs:', error) + } + } + + const handleReset = () => { + console.log('handleReset') + setCurrentStep(WizardStep.CONNECT_WALLET) + setInput1('') + setInput2('') + setLastTransactionHash(undefined) + setInputPublishError(null) + setInputPublishSuccess(false) + setRequestError(null) + setIsRequesting(false) + setRequestSuccess(false) + setResult(null) + setE3State({ + id: null, + isRequested: false, + isCommitteePublished: false, + isActivated: false, + publicKey: null, + expiresAt: null, + plaintextOutput: null, + hasPlaintextOutput: false, + }) + } + + const handleTryAgain = () => { + console.log('HandleTryAgain') + setCurrentStep(WizardStep.ENTER_INPUTS) + setInputPublishError(null) + setInputPublishSuccess(false) + } + + const getStepIcon = (step: WizardStep) => { + const iconProps = { size: 24, className: currentStep >= step ? 'text-enclave-500' : 'text-slate-400' } + switch (step) { + case WizardStep.CONNECT_WALLET: + return + case WizardStep.REQUEST_COMPUTATION: + return + case WizardStep.ACTIVATE_E3: + return + case WizardStep.ENTER_INPUTS: + return + case WizardStep.ENCRYPT_SUBMIT: + return + case WizardStep.RESULTS: + return + } + } + + const renderStepIndicator = () => ( +
+
+ {[1, 2, 3, 4, 5, 6].map((step) => ( +
+
= step ? 'border-enclave-400 bg-enclave-100 text-enclave-600' : 'border-slate-300 bg-slate-100 text-slate-400' + }`} + > + {getStepIcon(step as WizardStep)} +
+ {step < 6 && ( +
step ? 'bg-enclave-400' : 'bg-slate-300'}`} /> + )} +
+ ))} +
+
+ ) + + const renderStepContent = () => { + switch (currentStep) { + case WizardStep.CONNECT_WALLET: + return + case WizardStep.REQUEST_COMPUTATION: + return ( + + ) + case WizardStep.ACTIVATE_E3: + return ( + + ) + case WizardStep.ENTER_INPUTS: + return ( + + ) + case WizardStep.ENCRYPT_SUBMIT: + return ( + setShowErrorDetails(!showErrorDetails)} + onTryAgain={handleTryAgain} + /> + ) + case WizardStep.RESULTS: + return ( + + ) + default: + return null + } + } + + if (sdkError) { + return ( +
+
+
+
+
+

SDK Error

+
{sdkError}
+
+
+
+
+
+ ) + } + + return ( +
+
+
+

Enclave E3

+

Confidential computation with Enclave Encrypted Execution Environments

+
+ + {renderStepIndicator()} + +
{renderStepContent()}
+
+
+ ) +} + +export default WizardSDK diff --git a/templates/default/client/src/pages/components/CardContent.tsx b/templates/default/client/src/pages/components/CardContent.tsx new file mode 100644 index 0000000000..d536e7fd99 --- /dev/null +++ b/templates/default/client/src/pages/components/CardContent.tsx @@ -0,0 +1,15 @@ +import React from 'react' + +interface CardContentProps { + children: React.ReactNode +} + +const CardContent: React.FC = ({ children }) => { + return ( +
+ {children} +
+ ) +} + +export default CardContent diff --git a/templates/default/client/src/pages/components/EnvironmentError.tsx b/templates/default/client/src/pages/components/EnvironmentError.tsx new file mode 100644 index 0000000000..72a2e44b85 --- /dev/null +++ b/templates/default/client/src/pages/components/EnvironmentError.tsx @@ -0,0 +1,60 @@ +import React from 'react' +import { Warning } from '@phosphor-icons/react' + +interface EnvironmentErrorProps { + missingVars: string[] +} + +const EnvironmentError: React.FC = ({ missingVars }) => { + return ( +
+
+
+
+ +
+ +

+ Environment Configuration Required +

+ +

+ The following environment variables need to be configured before you can use the encrypted computation features: +

+ +
+
    + {missingVars.map((varName) => ( +
  • + + {varName} + +
  • + ))} +
+
+ +
+

How to configure:

+
    +
  1. Create a .env file in the client directory
  2. +
  3. Add the missing environment variables with their appropriate values
  4. +
  5. Restart the development server
  6. +
+
+ +
+ +
+
+
+
+ ) +} + +export default EnvironmentError \ No newline at end of file diff --git a/templates/default/client/src/pages/components/Spinner.tsx b/templates/default/client/src/pages/components/Spinner.tsx new file mode 100644 index 0000000000..740ae3fa8b --- /dev/null +++ b/templates/default/client/src/pages/components/Spinner.tsx @@ -0,0 +1,18 @@ +// ============================================================================ +// SIMPLE SPINNER +// ============================================================================ + +import React from 'react' + +interface SpinnerProps { + size?: number +} + +const Spinner: React.FC = ({ size = 24 }) => ( +
+) + +export default Spinner \ No newline at end of file diff --git a/templates/default/client/src/utils/env-config.ts b/templates/default/client/src/utils/env-config.ts new file mode 100644 index 0000000000..aa36ef789c --- /dev/null +++ b/templates/default/client/src/utils/env-config.ts @@ -0,0 +1,43 @@ +export const ENCLAVE_ADDRESS = import.meta.env.VITE_ENCLAVE_ADDRESS +export const E3_PROGRAM_ADDRESS = import.meta.env.VITE_E3_PROGRAM_ADDRESS +export const REGISTRY_ADDRESS = import.meta.env.VITE_REGISTRY_ADDRESS +export const FILTER_REGISTRY_ADDRESS = import.meta.env.VITE_FILTER_REGISTRY_ADDRESS +export const RPC_URL = import.meta.env.VITE_RPC_URL || 'http://localhost:8545' + +const requiredEnvVars = { + VITE_ENCLAVE_ADDRESS: ENCLAVE_ADDRESS, + VITE_E3_PROGRAM_ADDRESS: E3_PROGRAM_ADDRESS, + VITE_REGISTRY_ADDRESS: REGISTRY_ADDRESS, + VITE_FILTER_REGISTRY_ADDRESS: FILTER_REGISTRY_ADDRESS, +} + +export const MISSING_ENV_VARS = Object.entries(requiredEnvVars) + .filter(([, value]) => !value) + .map(([key]) => key) + +export const HAS_MISSING_ENV_VARS = MISSING_ENV_VARS.length > 0 + +/** + * Validate environment variables and throw an error if any are missing + */ +export function validateEnvVars(): void { + if (HAS_MISSING_ENV_VARS) { + throw new Error( + `Missing required environment variables: ${MISSING_ENV_VARS.join(', ')}\n` + + 'Please check your .env file and ensure all required variables are set.' + ) + } +} + +/** + * Get validated contract addresses + */ +export function getContractAddresses() { + validateEnvVars() + return { + enclave: ENCLAVE_ADDRESS as `0x${string}`, + ciphernodeRegistry: REGISTRY_ADDRESS as `0x${string}`, + filterRegistry: FILTER_REGISTRY_ADDRESS as `0x${string}`, + e3Program: E3_PROGRAM_ADDRESS as `0x${string}`, + } +} \ No newline at end of file diff --git a/templates/default/client/src/utils/error-formatting.ts b/templates/default/client/src/utils/error-formatting.ts new file mode 100644 index 0000000000..5b8a832754 --- /dev/null +++ b/templates/default/client/src/utils/error-formatting.ts @@ -0,0 +1,53 @@ +/** + * Format contract errors into user-friendly messages + */ +export function formatContractError(error: any): string { + if (!error) return 'Unknown error occurred'; + + if (error.name === 'ContractFunctionExecutionError') { + const functionMatch = error.message.match(/The contract function "([^"]+)" reverted/); + const functionName = functionMatch ? functionMatch[1] : 'contract function'; + + const contractErrors: Record = { + 'publishInput': 'Failed to submit encrypted inputs. The computation may not be ready or inputs are invalid.', + 'activate': 'Failed to activate the computation environment. Please ensure the committee has been published.', + 'request': 'Failed to request computation. Please check your parameters and try again.', + 'addCiphernode': 'Failed to add ciphernode. You may not have permission or the node is already registered.', + 'removeCiphernode': 'Failed to remove ciphernode. You may not have permission or invalid parameters.' + }; + + return contractErrors[functionName] || `The ${functionName} operation failed. Please check your inputs and try again.`; + } + + if (error.message) { + if (error.message.includes('User rejected')) { + return 'Transaction was cancelled by user.'; + } + if (error.message.includes('insufficient funds')) { + return 'Insufficient funds to complete the transaction.'; + } + if (error.message.includes('nonce too low')) { + return 'Transaction nonce error. Please refresh and try again.'; + } + if (error.message.includes('gas')) { + return 'Transaction failed due to gas issues. Please try again with higher gas.'; + } + if (error.message.includes('network')) { + return 'Network error occurred. Please check your connection and try again.'; + } + } + + if (error.code && error.message) { + return error.message; + } + + return 'An unexpected error occurred. Please try again.'; +} + +/** + * Extract a simple error message for display + */ +export function getDisplayErrorMessage(error: any): string { + const formatted = formatContractError(error); + return formatted; +} \ No newline at end of file diff --git a/templates/default/client/src/vite-env.d.ts b/templates/default/client/src/vite-env.d.ts new file mode 100644 index 0000000000..8e23ca4f58 --- /dev/null +++ b/templates/default/client/src/vite-env.d.ts @@ -0,0 +1,7 @@ +/// +declare module '*.svg' { + import React = require('react') + export const ReactComponent: React.FunctionComponent> + const src: string + export default src +} diff --git a/templates/default/client/tailwind.config.js b/templates/default/client/tailwind.config.js new file mode 100644 index 0000000000..7c5edad7fa --- /dev/null +++ b/templates/default/client/tailwind.config.js @@ -0,0 +1,48 @@ +const config = { + content: ['./src/**/*.{js,jsx,ts,tsx,mdx}'], + variant: { + extend: { + borderColor: ['disabled'], + backgroundColor: ['disabled'], + textColor: ['disabled'], + boxShadow: ['disabled'], + cursor: ['disabled'], + }, + }, + theme: { + extend: { + fontFamily: { + jakarta: ['Plus Jakarta Sans', 'sans-serif'], + sans: ['Inter', 'ui-sans-serif', 'system-ui'], + }, + colors: { + slate: { + 200: '#E3E9F5', + }, + 'enclave': { + 50: '#eff9ff', + 100: '#def2ff', + 200: '#b6e8ff', + 300: '#75d8ff', + 400: '#2cc4ff', + 500: '#60c2ff', + 600: '#0ea5e9', + 700: '#0284c7', + 800: '#0369a1', + 900: '#0c4a6e', + 950: '#082f49', + } + }, + letterSpacing: { + custom: '0.03em', + }, + boxShadow: { + button: '0 2px 0 0 #5F9715, 0 8px 16px rgba(0,0,0,0.1)', + 'button-outlined': '0 2px 0 0 #A6E05A, 0 8px 16px rgba(0,0,0,0.1)', + danger: '0 2px 0 0 #EF4444, 0 8px 16px rgba(0,0,0,0.1)', + }, + }, + }, + plugins: [require('@tailwindcss/typography')], +} +export default config diff --git a/templates/default/client/tsconfig.json b/templates/default/client/tsconfig.json new file mode 100644 index 0000000000..6160d3f9d3 --- /dev/null +++ b/templates/default/client/tsconfig.json @@ -0,0 +1,29 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "paths": { + "@/*": ["./src/*"], + "libs/*": ["./libs/*"] + } + }, + "include": ["src", "src/**/*.d.ts", "pkg", "libs/wasm/pkg"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/templates/default/client/tsconfig.node.json b/templates/default/client/tsconfig.node.json new file mode 100644 index 0000000000..97ede7ee6f --- /dev/null +++ b/templates/default/client/tsconfig.node.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true, + "strict": true + }, + "include": ["vite.config.ts"] +} diff --git a/templates/default/client/vite.config.ts b/templates/default/client/vite.config.ts new file mode 100644 index 0000000000..3cc3baa97e --- /dev/null +++ b/templates/default/client/vite.config.ts @@ -0,0 +1,36 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' +import viteTsconfigPaths from 'vite-tsconfig-paths' +import wasm from 'vite-plugin-wasm' +import topLevelAwait from 'vite-plugin-top-level-await' +import path from 'path' + +export default defineConfig({ + base: '/', + define: { + global: 'globalThis', + }, + optimizeDeps: { + exclude: ['@rollup/browser', '@gnosis-guild/e3-wasm'], + }, + build: { + commonjsOptions: { + include: [/node_modules/, /packages\/evm/], + }, + }, + resolve: { + alias: { + '@': path.resolve(__dirname, './src'), + libs: path.resolve(__dirname, './libs'), + }, + }, + plugins: [wasm(), topLevelAwait(), react(), viteTsconfigPaths()], + server: { + open: true, + port: 3000, + }, + preview: { + port: 3000, + open: true, + }, +}) diff --git a/templates/default/contracts/.keep b/templates/default/contracts/.keep new file mode 100755 index 0000000000..e69de29bb2 diff --git a/templates/default/contracts/ImageID.sol b/templates/default/contracts/ImageID.sol new file mode 100755 index 0000000000..0f622886a7 --- /dev/null +++ b/templates/default/contracts/ImageID.sol @@ -0,0 +1,23 @@ +// Copyright 2024 RISC Zero, Inc. +// +// 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. +// +// SPDX-License-Identifier: Apache-2.0 + +// This file is automatically generated + +pragma solidity ^0.8.20; + +library ImageID { + bytes32 public constant PROGRAM_ID = bytes32(0xaf928ebf39fec4696c3f41f473a1a9473b67d723c6373149c6ab99ba4c1a76ef); +} diff --git a/templates/default/contracts/InputValidator.sol b/templates/default/contracts/InputValidator.sol new file mode 100644 index 0000000000..ab2766ff7f --- /dev/null +++ b/templates/default/contracts/InputValidator.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: LGPL-3.0-only +pragma solidity >=0.8.27; + +import {IInputValidator} from "@gnosis-guild/enclave/contracts/interfaces/IInputValidator.sol"; + +contract InputValidator is IInputValidator { + error EmptyInputData(); + + /// @notice Validates input + /// @param sender The account that is submitting the input. + /// @param data The input to be verified. + /// @return input The input data. + function validate( + address sender, + bytes memory data + ) external returns (bytes memory input) { + if (data.length == 0) revert EmptyInputData(); + + // You can add your own validation logic here. + // EXAMPLE: https://github.com/gnosisguild/enclave/blob/main/examples/CRISP/contracts/CRISPInputValidator.sol + + input = data; + } +} diff --git a/templates/default/contracts/Mocks/MockRISC0Verifier.sol b/templates/default/contracts/Mocks/MockRISC0Verifier.sol new file mode 100644 index 0000000000..181ca8216c --- /dev/null +++ b/templates/default/contracts/Mocks/MockRISC0Verifier.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.27; + +import {IRiscZeroVerifier, Receipt} from "@risc0/ethereum/contracts/src/IRiscZeroVerifier.sol"; + +contract MockRISC0Verifier is IRiscZeroVerifier { + function verify( + bytes calldata seal, + bytes32 imageId, + bytes32 journalDigest + ) public view override {} + + function verifyIntegrity(Receipt calldata receipt) external view override {} +} diff --git a/templates/default/contracts/MyProgram.sol b/templates/default/contracts/MyProgram.sol new file mode 100755 index 0000000000..65e10684e3 --- /dev/null +++ b/templates/default/contracts/MyProgram.sol @@ -0,0 +1,106 @@ +// SPDX-License-Identifier: LGPL-3.0-only +pragma solidity >=0.8.27; + +import {IRiscZeroVerifier} from "@risc0/ethereum/contracts/src/IRiscZeroVerifier.sol"; +import {IE3Program} from "@gnosis-guild/enclave/contracts/interfaces/IE3Program.sol"; +import {IInputValidator} from "@gnosis-guild/enclave/contracts/interfaces/IInputValidator.sol"; +import {IEnclave} from "@gnosis-guild/enclave/contracts/interfaces/IEnclave.sol"; +import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; + +contract MyProgram is IE3Program, Ownable { + // Constants + bytes32 public constant ENCRYPTION_SCHEME_ID = keccak256("fhe.rs:BFV"); + + // State variables + IEnclave public enclave; + IRiscZeroVerifier public verifier; + IInputValidator public inputValidator; + bytes32 public imageId; + + // Mappings + mapping(address => bool) public authorizedContracts; + mapping(uint256 e3Id => bytes32 paramsHash) public paramsHashes; + + // Errors + error CallerNotAuthorized(); + error E3AlreadyInitialized(); + error E3DoesNotExist(); + error VerifierAddressZero(); + error AlreadyRegistered(); + + /// @notice Initialize the contract, binding it to a specified RISC Zero verifier. + /// @param _enclave The Enclave contract address + /// @param _verifier The RISC Zero verifier address + /// @param _imageId The image ID for the guest program + /// @param _inputValidator The input validator address + constructor( + IEnclave _enclave, + IRiscZeroVerifier _verifier, + bytes32 _imageId, + IInputValidator _inputValidator + ) Ownable(msg.sender) { + require(address(_verifier) != address(0), VerifierAddressZero()); + + enclave = _enclave; + verifier = _verifier; + inputValidator = _inputValidator; + imageId = _imageId; + authorizedContracts[address(_enclave)] = true; + } + + /// @notice Validate the E3 program parameters + /// @param e3Id The E3 program ID + /// @param e3ProgramParams The E3 program parameters + function validate( + uint256 e3Id, + uint256, + bytes calldata e3ProgramParams, + bytes calldata + ) external returns (bytes32, IInputValidator) { + require( + authorizedContracts[msg.sender] || msg.sender == owner(), + CallerNotAuthorized() + ); + require(paramsHashes[e3Id] == bytes32(0), E3AlreadyInitialized()); + paramsHashes[e3Id] = keccak256(e3ProgramParams); + + return (ENCRYPTION_SCHEME_ID, IInputValidator(address(inputValidator))); + } + + /// @notice Verify the proof + /// @param e3Id The E3 program ID + /// @param ciphertextOutputHash The hash of the ciphertext output + /// @param proof The proof to verify + function verify( + uint256 e3Id, + bytes32 ciphertextOutputHash, + bytes memory proof + ) external view override returns (bool) { + require(paramsHashes[e3Id] != bytes32(0), E3DoesNotExist()); + bytes32 inputRoot = bytes32(enclave.getInputRoot(e3Id)); + bytes memory journal = new bytes(396); // (32 + 1) * 4 * 3 + + encodeLengthPrefixAndHash(journal, 0, ciphertextOutputHash); + encodeLengthPrefixAndHash(journal, 132, paramsHashes[e3Id]); + encodeLengthPrefixAndHash(journal, 264, inputRoot); + + verifier.verify(proof, imageId, sha256(journal)); + return true; + } + + /// @notice Encode length prefix and hash + /// @param journal The journal to encode into + /// @param startIndex The start index in the journal + /// @param hashVal The hash value to encode + function encodeLengthPrefixAndHash( + bytes memory journal, + uint256 startIndex, + bytes32 hashVal + ) internal pure { + journal[startIndex] = 0x20; + startIndex += 4; + for (uint256 i = 0; i < 32; i++) { + journal[startIndex + i * 4] = hashVal[i]; + } + } +} diff --git a/templates/default/deploy/default.ts b/templates/default/deploy/default.ts new file mode 100644 index 0000000000..ba67ab163b --- /dev/null +++ b/templates/default/deploy/default.ts @@ -0,0 +1,57 @@ +import { DeployFunction } from "hardhat-deploy/types"; +import { HardhatRuntimeEnvironment } from "hardhat/types"; + +const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { + const { deployer } = await hre.getNamedAccounts(); + const { deploy } = hre.deployments; + + const [deployerAccount] = await hre.ethers.getSigners(); + const enclave = await hre.deployments.get("Enclave"); + + const verifier = await deploy("MockRISC0Verifier", { + from: deployer, + args: [], + log: true, + }); + + const imageId = await deploy("ImageID", { + from: deployer, + args: [], + log: true, + }); + const imageIdContract = await hre.ethers.getContractAt( + "ImageID", + imageId.address, + ); + const programId = await imageIdContract.PROGRAM_ID(); + + const inputValidator = await deploy("InputValidator", { + from: deployer, + args: [], + log: true, + }); + + const e3Program = await deploy("MyProgram", { + from: deployer, + args: [enclave.address, verifier.address, programId, inputValidator.address], + log: true, + }); + + const enclaveContract = new hre.ethers.Contract( + enclave.address, + enclave.abi, + deployerAccount, + ); + const result = enclaveContract.interface.encodeFunctionData( + "enableE3Program", + [e3Program.address], + ); + const tx = await deployerAccount.sendTransaction({ + to: enclave.address, + data: result, + }); + await tx.wait(); +}; +export default func; +func.tags = ["default"]; +func.dependencies = ["enclave"]; diff --git a/templates/default/deploy/enclave.ts b/templates/default/deploy/enclave.ts new file mode 100644 index 0000000000..a87f8d1fe9 --- /dev/null +++ b/templates/default/deploy/enclave.ts @@ -0,0 +1,14 @@ +import deployEnclave from "@gnosis-guild/enclave/deploy/enclave"; +import deployMocks from "@gnosis-guild/enclave/deploy/mocks"; +import { DeployFunction } from "hardhat-deploy/types"; +import { HardhatRuntimeEnvironment } from "hardhat/types"; + +const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { + await deployEnclave(hre); + // INFO: We need to deploy the mock contract due to the decryptionVerifier. + // Once we have a real verifier, we can remove this. + await deployMocks(hre); +}; + +export default func; +func.tags = ["enclave", "mocks"]; diff --git a/templates/default/enclave.config.yaml b/templates/default/enclave.config.yaml new file mode 100644 index 0000000000..729e7543d6 --- /dev/null +++ b/templates/default/enclave.config.yaml @@ -0,0 +1,39 @@ +chains: + - name: "hardhat" + rpc_url: "ws://localhost:8545" + contracts: + e3_program: "0x9A676e781A523b5d0C0e43731313A708CB607508" + enclave: "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0" + ciphernode_registry: "0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9" + filter_registry: "0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9" + +program: + dev: true + # risc0: + # risc0_dev_mode: 1 + # bonsai_api_key: xxxxxxxxxxxxxxxx + # bonsai_api_url: xxxxxxxxxxxxxxxx + +nodes: + cn1: + address: "0xbDA5747bFD65F08deb54cb465eB87D40e51B197E" + quic_port: 9201 + autonetkey: true + autopassword: true + cn2: + address: "0xdD2FD4581271e230360230F9337D5c0430Bf44C0" + quic_port: 9202 + autonetkey: true + autopassword: true + cn3: + address: "0x2546BcD3c84621e976D8185a91A922aE77ECEc30" + quic_port: 9203 + autonetkey: true + autopassword: true + ag: + address: "0x8626f6940E2eb28930eFb4CeF49B2d1F2C9C1199" + quic_port: 9094 + autonetkey: true + autopassword: true + role: + type: aggregator diff --git a/templates/default/flake.lock b/templates/default/flake.lock new file mode 100644 index 0000000000..6d5c2012d8 --- /dev/null +++ b/templates/default/flake.lock @@ -0,0 +1,96 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1748929857, + "narHash": "sha256-lcZQ8RhsmhsK8u7LIFsJhsLh/pzR9yZ8yqpTzyGdj+Q=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c2a03962b8e24e669fb37b7df10e7c79531ff1a4", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1744536153, + "narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs", + "rust-overlay": "rust-overlay" + } + }, + "rust-overlay": { + "inputs": { + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1749177458, + "narHash": "sha256-9HNq3EHZIvvxXQyEn0sYOywcESF1Xqw2Q8J1ZewcXuk=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "d58933b88cef7a05e9677e94352fd6fedba402cd", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/templates/default/flake.nix b/templates/default/flake.nix new file mode 100644 index 0000000000..9274bb3d76 --- /dev/null +++ b/templates/default/flake.nix @@ -0,0 +1,38 @@ +{ + description = "Rust + WASM development environment"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + rust-overlay.url = "github:oxalica/rust-overlay"; + flake-utils.url = "github:numtide/flake-utils"; + }; + + outputs = { + self, + nixpkgs, + rust-overlay, + flake-utils, + }: + flake-utils.lib.eachDefaultSystem (system: let + overlays = [(import rust-overlay)]; + pkgs = import nixpkgs { + inherit system overlays; + }; + + rustToolchain = pkgs.rust-bin.stable."1.85.1".default.override { + targets = ["wasm32-unknown-unknown"]; + }; + in { + devShells.default = pkgs.mkShell { + buildInputs = with pkgs; [ + openssl + pkg-config + rustToolchain + wasm-pack + nodejs + nodePackages.pnpm + rust-analyzer + ]; + }; + }); +} diff --git a/templates/default/hardhat.config.ts b/templates/default/hardhat.config.ts new file mode 100644 index 0000000000..930d59fc00 --- /dev/null +++ b/templates/default/hardhat.config.ts @@ -0,0 +1,59 @@ +import "@nomicfoundation/hardhat-toolbox"; +import "hardhat-deploy"; +import "@gnosis-guild/enclave/deploy/enclave"; +import { task } from "hardhat/config"; +import type { TaskArguments } from "hardhat/types"; +import type { HardhatUserConfig } from "hardhat/config"; + +task("ciphernode:add", "Register a ciphernode to the registry") + .addParam("ciphernodeAddress", "address of ciphernode to register") + .setAction(async function (taskArguments: TaskArguments, hre) { + const registry = await hre.deployments.get("CiphernodeRegistryOwnable"); + const [deployer] = await hre.ethers.getSigners(); + const registryContract = new hre.ethers.Contract( + registry.address, + registry.abi, + deployer, + ); + const result = registryContract.interface.encodeFunctionData( + "addCiphernode", + [taskArguments.ciphernodeAddress.replace(/"/g, "")], + ); + const tx = await deployer.sendTransaction({ + to: registryContract.target, + data: result, + }); + await tx.wait(); + console.log(`Ciphernode ${taskArguments.ciphernodeAddress} registered`); + }); + +const config: HardhatUserConfig = { + solidity: { + version: "0.8.27", + overrides: { + "node_modules/poseidon-solidity/PoseidonT3.sol": { + version: "0.7.0", + settings: { + optimizer: { + enabled: true, + runs: 2 ** 32 - 1, + }, + }, + }, + }, + }, + external: { + contracts: [ + { + artifacts: "node_modules/@gnosis-guild/enclave/artifacts", + }, + ], + }, + namedAccounts: { + deployer: { + default: 0, // Use the first account as deployer + }, + }, +}; + +export default config; diff --git a/templates/default/lib/risc0-ethereum b/templates/default/lib/risc0-ethereum new file mode 160000 index 0000000000..ef94105fbf --- /dev/null +++ b/templates/default/lib/risc0-ethereum @@ -0,0 +1 @@ +Subproject commit ef94105fbfbc2775d7a7f0c4773190e04cb67a04 diff --git a/templates/default/package.json b/templates/default/package.json new file mode 100644 index 0000000000..a8fde872c4 --- /dev/null +++ b/templates/default/package.json @@ -0,0 +1,57 @@ +{ + "name": "enclave-example", + "scripts": { + "ciphernode:add": "hardhat run scripts/ciphernode-add.ts -- ", + "compile": "hardhat compile", + "deploy": "hardhat run scripts/deploy-local.ts --network localhost", + "deploy:dev": "hardhat run scripts/deploy-local.ts", + "dev:all": "./scripts/dev_all.sh", + "dev:ciphernodes": "./scripts/dev_ciphernodes.sh", + "dev:evm": "hardhat node", + "dev:frontend": "./scripts/dev_frontend.sh", + "dev:program": "./scripts/dev_program.sh", + "dev:server": "./scripts/dev_server.sh", + "predev:all": "[ ! -f './contracts/ImageID.sol' ] && enclave program compile || true", + "test": "hardhat test", + "test:integration": "./scripts/test_integration.sh" + }, + "dependencies": { + "@gnosis-guild/enclave": "workspace:*", + "@gnosis-guild/enclave-sdk": "workspace:*", + "@types/yargs": "^17.0.33", + "viem": "2.30.6", + "yargs": "^18.0.0" + }, + "devDependencies": { + "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", + "@nomicfoundation/hardhat-ethers": "^3.0.5", + "@nomicfoundation/hardhat-network-helpers": "^1.0.10", + "@nomicfoundation/hardhat-toolbox": "^4.0.0", + "@nomicfoundation/hardhat-verify": "^2.0.2", + "@openzeppelin/contracts": "5.3.0", + "@risc0/ethereum": "file:lib/risc0-ethereum", + "@typechain/ethers-v6": "^0.5.0", + "@typechain/hardhat": "^9.1.0", + "@types/chai": "^4.2.0", + "@types/express": "^5.0.2", + "@types/mocha": ">=9.1.0", + "@types/node": ">=18.0.0", + "@zk-kit/lean-imt": "^2.1.0", + "@zk-kit/lean-imt.sol": "2.0.0", + "chai": "^4.2.0", + "concurrently": "^9.1.2", + "ethers": "^6.9.0", + "express": "^5.1.0", + "hardhat": "^2.22.10", + "hardhat-deploy": "^0.12.1", + "hardhat-gas-reporter": "^1.0.8", + "poseidon-lite": "^0.3.0", + "solidity-coverage": "^0.8.0", + "ts-node": "^10.9.2", + "tsx": "^4.20.3", + "typechain": "^8.3.0", + "typed-rpc": "^6.1.1", + "typescript": "^5.8.3", + "wait-on": "^8.0.3" + } +} diff --git a/templates/default/pnpm-workspace.yaml.bak b/templates/default/pnpm-workspace.yaml.bak new file mode 100644 index 0000000000..a9f19eb4e2 --- /dev/null +++ b/templates/default/pnpm-workspace.yaml.bak @@ -0,0 +1,2 @@ +packages: + - client diff --git a/templates/default/program/Cargo.toml b/templates/default/program/Cargo.toml new file mode 100644 index 0000000000..cba0c4e96c --- /dev/null +++ b/templates/default/program/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "e3-user-program" +version = "0.1.0" +edition = "2024" + +[dependencies] +fhe_rs = { workspace = true } +fhe-traits = { workspace = true } +e3-compute-provider = { git = "https://github.com/gnosisguild/enclave", rev = "2ca0aa5f47dd962add5d1d0f74900d9bceb957e5" } +e3-bfv-helpers = { git = "https://github.com/gnosisguild/enclave", rev = "2ca0aa5f47dd962add5d1d0f74900d9bceb957e5" } + +[dev-dependencies] +rand = { workspace = true } +anyhow = { workspace = true } diff --git a/templates/default/program/src/lib.rs b/templates/default/program/src/lib.rs new file mode 100644 index 0000000000..538b99d64f --- /dev/null +++ b/templates/default/program/src/lib.rs @@ -0,0 +1,67 @@ +use e3_bfv_helpers::decode_bfv_params_arc; +use e3_compute_provider::FHEInputs; +use fhe_rs::bfv::Ciphertext; +use fhe_traits::{DeserializeParametrized, Serialize}; + +/// Implementation of the CiphertextProcessor function +pub fn fhe_processor(fhe_inputs: &FHEInputs) -> Vec { + let params = decode_bfv_params_arc(&fhe_inputs.params); + + let mut sum = Ciphertext::zero(¶ms); + for ciphertext_bytes in &fhe_inputs.ciphertexts { + let ciphertext = Ciphertext::from_bytes(&ciphertext_bytes.0, ¶ms).unwrap(); + sum += &ciphertext; + } + + sum.to_bytes() +} + +#[cfg(test)] +mod tests { + use super::*; + use anyhow::Result; + use e3_bfv_helpers::{build_bfv_params_arc, encode_bfv_params, params::SET_2048_1032193_1}; + use fhe_rs::bfv::{Encoding, Plaintext, PublicKey, SecretKey}; + use fhe_traits::FheEncoder; + use fhe_traits::FheEncrypter; + use fhe_traits::{DeserializeParametrized, FheDecrypter, Serialize}; + use rand::{rngs::OsRng, thread_rng}; + + #[test] + fn test() -> Result<()> { + let mut rng = thread_rng(); + + let (degree, plaintext_modulus, moduli) = SET_2048_1032193_1; + let params = build_bfv_params_arc(degree, plaintext_modulus, &moduli); + + let secret_key = SecretKey::random(¶ms, &mut OsRng); + let public_key = PublicKey::new(&secret_key, &mut rng); + + // 10 + let ten = public_key.try_encrypt( + &Plaintext::try_encode(&[10u64], Encoding::poly(), ¶ms)?, + &mut rng, + )?; + + // 2 + let two = public_key.try_encrypt( + &Plaintext::try_encode(&[2u64], Encoding::poly(), ¶ms)?, + &mut rng, + )?; + + // Prepare inputs + let fhe_inputs = FHEInputs { + params: encode_bfv_params(¶ms), + ciphertexts: vec![(ten.to_bytes(), 0), (two.to_bytes(), 1)], + }; + + // Run the processor + let result = fhe_processor(&fhe_inputs); + + // Decrypt result + let decrypted = secret_key.try_decrypt(&Ciphertext::from_bytes(&result, ¶ms)?)?; + + assert_eq!(decrypted.value[0], 12); + Ok(()) + } +} diff --git a/templates/default/scripts/deploy-local.ts b/templates/default/scripts/deploy-local.ts new file mode 100644 index 0000000000..8157a8c727 --- /dev/null +++ b/templates/default/scripts/deploy-local.ts @@ -0,0 +1,52 @@ +// scripts/deploy-local.ts +import { DeployFunction } from "hardhat-deploy/types"; +import { HardhatRuntimeEnvironment } from "hardhat/types"; +// Import the deployment logic from your published package +// This assumes your package exports the deployment function +import deployEnclave from "@gnosis-guild/enclave/deploy/enclave"; + +async function main() { + console.log("🚀 Deploying Enclave protocol locally..."); + + // Get hardhat runtime environment + const hre = require("hardhat"); + + // Get deployer account + const [deployer] = await hre.ethers.getSigners(); + console.log("Deploying with account:", deployer.address); + console.log( + "Account balance:", + hre.ethers.formatEther( + await hre.ethers.provider.getBalance(deployer.address), + ), + ); + + try { + // Execute the deployment + await deployEnclave(hre); + console.log("✅ Enclave protocol deployed successfully!"); + + // Log deployed contract addresses + const enclave = await hre.deployments.get("Enclave"); + const registry = await hre.deployments.get("CiphernodeRegistryOwnable"); + const filter = await hre.deployments.get("NaiveRegistryFilter"); + + console.log("\n📋 Deployed Contracts:"); + console.log("Enclave:", enclave.address); + console.log("CiphernodeRegistryOwnable:", registry.address); + console.log("NaiveRegistryFilter:", filter.address); + } catch (error) { + console.error("❌ Deployment failed:", error); + process.exit(1); + } +} + +// Execute the deployment +if (require.main === module) { + main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); +} diff --git a/templates/default/scripts/dev_all.sh b/templates/default/scripts/dev_all.sh new file mode 100755 index 0000000000..fdf868e014 --- /dev/null +++ b/templates/default/scripts/dev_all.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash + +set -e + +for arg in "$@"; do + if [[ "$arg" == "--tmux" ]]; then + ./scripts/dev_all_tmux.sh + exit 0 + fi +done + +./scripts/dev_all_concurrently.sh diff --git a/templates/default/scripts/dev_all_concurrently.sh b/templates/default/scripts/dev_all_concurrently.sh new file mode 100755 index 0000000000..46cb8ca8a9 --- /dev/null +++ b/templates/default/scripts/dev_all_concurrently.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +set -e + +# Check if pnpm is available +if ! command -v pnpm &> /dev/null; then + echo "ERROR: pnpm is not installed or not in PATH" + echo "Please install pnpm or tmux to run this script" + exit 1 +fi + +# Run all processes concurrently using pnpm +pnpm concurrently \ + --names "FRONTEND,EVM,CIPHER,SERVER,PROGRAM" \ + --prefix-colors "blue,cyan,magenta,yellow,green" \ + --kill-others-on-fail \ + "pnpm dev:frontend" \ + "pnpm dev:evm" \ + "pnpm dev:ciphernodes" \ + "TEST_MODE=1 pnpm dev:server" \ + "enclave program start" + diff --git a/templates/default/scripts/dev_all_tmux.sh b/templates/default/scripts/dev_all_tmux.sh new file mode 100755 index 0000000000..612760696b --- /dev/null +++ b/templates/default/scripts/dev_all_tmux.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash +set -e + +SESSION_NAME="enclave-splits" + +# Check if tmux is available +if command -v tmux &> /dev/null; then + echo "tmux found - using tmux session..." + # Kill existing session if it exists + tmux kill-session -t "$SESSION_NAME" &> /dev/null || true + + echo "Creating new session '$SESSION_NAME'..." + # Create new session + tmux new-session -d -s "$SESSION_NAME" + tmux select-pane -t 1 + tmux split-window -h + tmux split-window -h + tmux select-layout even-horizontal + tmux select-pane -t 1 + tmux split-window -v + tmux select-pane -t 3 + tmux split-window -v + tmux send-keys -t 1 'clear' C-m + tmux send-keys -t 2 'clear' C-m + tmux send-keys -t 3 'clear' C-m + tmux send-keys -t 4 'clear' C-m + tmux send-keys -t 5 'clear' C-m + tmux send-keys -t 1 'pnpm dev:evm' C-m + sleep 1 + tmux send-keys -t 2 'pnpm dev:ciphernodes' C-m + sleep 1 + tmux send-keys -t 3 'TEST_MODE=1 pnpm dev:server' C-m + sleep 1 + tmux send-keys -t 4 'pnpm dev:program' C-m + sleep 1 + tmux send-keys -t 5 'pnpm dev:frontend' C-m + + tmux attach-session -t "$SESSION_NAME" +else + echo "This script requires tmux to be installed.\n\n https://github.com/tmux/tmux/wiki/Installing" +fi diff --git a/templates/default/scripts/dev_ciphernodes.sh b/templates/default/scripts/dev_ciphernodes.sh new file mode 100755 index 0000000000..f140b9a803 --- /dev/null +++ b/templates/default/scripts/dev_ciphernodes.sh @@ -0,0 +1,47 @@ +#!/usr/bin/env bash + +set -euo pipefail + +SIGNAL_FILE=/tmp/enclave_ciphernodes_ready + +cleanup() { + echo "Cleaning up processes..." + enclave nodes down + sleep 2 + pkill enclave + echo "Cleanup complete" + exit 0 +} + +rm -rf $SIGNAL_FILE + +trap cleanup INT TERM + +echo "Waiting for local evm node..." +pnpm wait-on http://localhost:8545 + +# nuke past installations as we are adding these nodes to the contract +rm -rf .enclave/data +rm -rf .enclave/config + +PRIVATE_KEY="0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" + +enclave wallet set --name ag --private-key "$PRIVATE_KEY" + +# using & instead of -d so that wait works below +enclave nodes up -v & + +sleep 2 + +CN1=$(cat enclave.config.yaml | yq '.nodes.cn1.address') +CN2=$(cat enclave.config.yaml | yq '.nodes.cn2.address') +CN3=$(cat enclave.config.yaml | yq '.nodes.cn3.address') + +# Add ciphernodes using variables from config.sh +pnpm hardhat ciphernode:add --ciphernode-address $CN1 --network localhost +pnpm hardhat ciphernode:add --ciphernode-address $CN2 --network localhost +pnpm hardhat ciphernode:add --ciphernode-address $CN3 --network localhost + +touch $SIGNAL_FILE + +wait diff --git a/templates/default/scripts/dev_frontend.sh b/templates/default/scripts/dev_frontend.sh new file mode 100755 index 0000000000..c99770ee22 --- /dev/null +++ b/templates/default/scripts/dev_frontend.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +set -euo pipefail + +echo "Waiting for local evm node..." +pnpm wait-on http://localhost:8545 + +echo "Waiting for program runner..." +pnpm wait-on http://localhost:13151/health + +cd client && (export $(enclave print-env --vite --chain hardhat) && pnpm dev) diff --git a/templates/default/scripts/dev_program.sh b/templates/default/scripts/dev_program.sh new file mode 100755 index 0000000000..9fee0a6903 --- /dev/null +++ b/templates/default/scripts/dev_program.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +set -euo pipefail +echo "enclave rev = $(enclave rev)" +echo "Waiting on ciphernodes to be ready..." +pnpm wait-on file:/tmp/enclave_ciphernodes_ready +echo "Ciphernodes are ready!" +enclave program start diff --git a/templates/default/scripts/dev_server.sh b/templates/default/scripts/dev_server.sh new file mode 100755 index 0000000000..f5aeaefbf5 --- /dev/null +++ b/templates/default/scripts/dev_server.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +set -euo pipefail + +echo "Waiting for evm node..." +pnpm wait-on http://localhost:8545 && \ + (export PRIVATE_KEY="0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" CHAIN_ID=31337 && \ + export $(enclave print-env --chain hardhat) && \ + export RPC_URL="http://localhost:8545" && \ + pnpm tsx ./server/index.ts) diff --git a/templates/default/scripts/test_integration.sh b/templates/default/scripts/test_integration.sh new file mode 100755 index 0000000000..442b43cbf2 --- /dev/null +++ b/templates/default/scripts/test_integration.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash + +set -euo pipefail + +passed_message() { + echo "" + echo "------------------------" + echo " ✅ Test has passed! " + echo "------------------------" + echo "" +} + +failed_message() { + echo "" + echo "------------------------" + echo " ❌ Test failed " + echo "------------------------" + echo "" + exit 1 +} + +export $(enclave print-env --chain hardhat) +(pnpm concurrently \ + --names "TEST,EVM,CIPHER,SERVER,PROGRAM" \ + --prefix-colors "blue,cyan,magenta,yellow,green" \ + --kill-others \ + --success first \ + "wait-on http://localhost:13151/health && pnpm tsx ./tests/integration.spec.ts" \ + "pnpm dev:evm" \ + "pnpm dev:ciphernodes" \ + "TEST_MODE=1 pnpm dev:server" \ + "pnpm dev:program" && passed_message) || failed_message diff --git a/templates/default/server/index.ts b/templates/default/server/index.ts new file mode 100644 index 0000000000..86e4bd8156 --- /dev/null +++ b/templates/default/server/index.ts @@ -0,0 +1,320 @@ +import express, { Request, Response } from "express"; +import { + EnclaveSDK, + EnclaveEventType, + type E3ActivatedData, + type InputPublishedData, +} from "@gnosis-guild/enclave-sdk"; +import { handleTestInteraction } from "./testHandler"; +import { getCheckedEnvVars } from "./utils"; +import { callFheRunner } from "./runner"; +import { createPublicClient, http } from "viem"; +import { hardhat } from "viem/chains"; + +interface E3Session { + e3Id: bigint; + expiration: bigint; + e3ProgramParams?: string; + inputs: Array<{ data: string; index: bigint }>; + isProcessing: boolean; + isCompleted: boolean; +} + +const e3Sessions = new Map(); + +async function createPrivateSDK() { + const { + CHAIN_ID, + PRIVATE_KEY, + CIPHERNODE_REGISTRY_CONTRACT, + ENCLAVE_CONTRACT, + RPC_URL, + } = getCheckedEnvVars(); + + if (!isSupportedChain(CHAIN_ID)) { + throw new Error(`Unsupported CHAIN_ID: ${CHAIN_ID}`); + } + + const sdk = EnclaveSDK.create({ + rpcUrl: RPC_URL, + privateKey: PRIVATE_KEY as `0x${string}`, + contracts: { + enclave: ENCLAVE_CONTRACT as `0x${string}`, + ciphernodeRegistry: CIPHERNODE_REGISTRY_CONTRACT as `0x${string}`, + }, + chainId: CHAIN_ID, + }); + + await sdk.initialize(); + return sdk; +} + +async function runProgram(e3Id: bigint): Promise { + const sessionKey = e3Id.toString(); + const session = e3Sessions.get(sessionKey); + + if (!session || session.isProcessing || session.isCompleted) { + return; + } + + console.log( + `📊 Processing E3 session ${e3Id} with ${session.inputs.length} inputs`, + ); + + try { + session.isProcessing = true; + + if (session.inputs.length <= 1) { + console.log( + `⏭️ Skipping E3 ${e3Id}: not enough inputs (${session.inputs.length})`, + ); + session.isCompleted = true; + return; + } + + let e3ProgramParams = session.e3ProgramParams; + if (!e3ProgramParams) { + const sdk = await createPrivateSDK(); + const e3Details = (await sdk.getE3(e3Id)) as any; + e3ProgramParams = e3Details.e3ProgramParams; + session.e3ProgramParams = e3ProgramParams; + } + + const ciphertextInputs: Array<[string, number]> = session.inputs.map( + (input) => [input.data, Number(input.index)], + ); + + console.log(`🔄 Calling FHE runner for E3 ${e3Id}...`); + await callFheRunner(e3Id, e3ProgramParams!, ciphertextInputs); + + console.log(`✅ E3 ${e3Id} sent to FHE runner - awaiting callback`); + } catch (error) { + console.error(`❌ Error processing E3 ${e3Id}:`, error); + session.isProcessing = false; + } +} + +function defer() { + let resolve: () => void = () => {}; + let reject: (e?: any) => void = () => {}; + + const promise = new Promise((res, rej) => { + resolve = res; + reject = rej; + }); + + return { + promise, + resolve, + reject, + }; +} + +type Defer = ReturnType; + +const currentlyActivating = new Map(); + +function getActivationDefer(e3Id: bigint): Defer { + let d = currentlyActivating.get(e3Id); + if (!d) { + const def = defer(); + currentlyActivating.set(e3Id, def); + return def; + } + return d; +} + +async function handleE3ActivatedEvent(event: any) { + const data = event.data as E3ActivatedData; + const e3Id = data.e3Id; + const expiration = data.expiration; + + // This allows us to wait until the session has been activated avoiding race conditions + const def = getActivationDefer(e3Id); + + console.log(`🎯 E3 Activated: ${e3Id}, expiration: ${expiration}`); + + const sessionKey = e3Id.toString(); + + if (!e3Sessions.has(sessionKey)) { + const sdk = await createPrivateSDK(); + console.log("📡 Fetching E3 data from contract..."); + + const e3 = await sdk.getE3(e3Id); + console.log("✅ Reveived E3 data from contract."); + + e3Sessions.set(sessionKey, { + e3Id, + e3ProgramParams: e3.e3ProgramParams, + expiration, + inputs: [], + isProcessing: false, + isCompleted: false, + }); + def.resolve(); + } + + const currentTime = BigInt(Math.floor(Date.now() / 1000)); + const sleepSeconds = + expiration > currentTime ? Number(expiration - currentTime) : 0; + + if (sleepSeconds > 0) { + console.log( + `⏰ Scheduling E3 ${e3Id} processing in ${sleepSeconds} seconds...`, + ); + setTimeout(async () => { + await runProgram(e3Id); + }, sleepSeconds * 1000); + } else { + console.log(`⚡ E3 ${e3Id} already expired, processing immediately...`); + await runProgram(e3Id); + } +} + +async function handleInputPublishedEvent(event: any) { + const data = event.data as InputPublishedData; + const e3Id = data.e3Id; + + console.log(`📝 Input Published for E3 ${e3Id}: index ${data.index}`); + + const sessionKey = e3Id.toString(); + + // Ensure the session is available + await getActivationDefer(e3Id).promise; + + const session = e3Sessions.get(sessionKey); + + if (session) { + session.inputs.push({ + data: data.data, + index: data.index, + }); + console.log(`📊 E3 ${e3Id} now has ${session.inputs.length} inputs`); + } else { + console.warn(`⚠️ Received input for unknown E3 session: ${e3Id}`); + } +} + +async function setupEventListeners() { + const sdk = await createPrivateSDK(); + + console.log("📡 Setting up event listeners..."); + + sdk.onEnclaveEvent(EnclaveEventType.E3_ACTIVATED, handleE3ActivatedEvent); + sdk.onEnclaveEvent( + EnclaveEventType.INPUT_PUBLISHED, + handleInputPublishedEvent, + ); + + console.log("✅ Event listeners set up successfully"); +} + +function isValidHexString(value: string): value is `0x${string}` { + return value.startsWith("0x") && /^0x[a-fA-F0-9]*$/.test(value); +} + +function isSupportedChain(value: any): value is keyof typeof EnclaveSDK.chains { + return value in EnclaveSDK.chains; +} + +async function handleWebhookRequest(req: Request, res: Response) { + try { + console.log("📨 Webhook received:"); + + const { e3_id, ciphertext, proof } = req.body; + if (e3_id === undefined || !ciphertext || !proof) { + console.error("Missing required fields: e3_id, ciphertext, proof"); + + res + .status(400) + .json({ error: "Missing required fields: e3_id, ciphertext, proof" }); + return; + } + + if (!isValidHexString(ciphertext) || !isValidHexString(proof)) { + console.error("ciphertext and proof must be valid hex strings"); + res + .status(400) + .json({ error: "ciphertext and proof must be valid hex strings" }); + return; + } + + console.log(`🔄 Publishing output for E3 ${e3_id}...`); + if (process.env.TEST_MODE) { + const client = createPublicClient({ + transport: http("http://127.0.0.1:8545"), // your Hardhat node URL + chain: hardhat, + }); + // The following ensures that if we are in test mode using hardhat + // We make sure we are past the input window + await client.request({ + method: "evm_increaseTime" as any, + params: [60] as any, // seconds + }); + await client.request({ + method: "evm_mine" as any, + params: [] as any, + }); + } + + const sdk = await createPrivateSDK(); + await sdk.publishCiphertextOutput(BigInt(e3_id), ciphertext, proof); + + // Mark session as completed + const sessionKey = e3_id.toString(); + const session = e3Sessions.get(sessionKey); + if (session) { + session.isCompleted = true; + session.isProcessing = false; + console.log(`✅ Successfully completed E3 ${e3_id}`); + } + + res.json({ status: "success", e3_id }); + } catch (error) { + console.error("❌ Webhook processing failed:", error); + res.status(500).json({ error: "Internal server error" }); + } +} + +function handleGetSessions(req: Request, res: Response) { + const sessions = Array.from(e3Sessions.entries()).map(([key, session]) => ({ + e3Id: key, + expiration: session.expiration.toString(), + inputCount: session.inputs.length, + isProcessing: session.isProcessing, + isCompleted: session.isCompleted, + })); + res.json(sessions); +} + +const app = express(); +app.use(express.json()); + +app.post("/", handleWebhookRequest); +app.get("/sessions", handleGetSessions); + +// This allows us to test interaction between server and program +// TEST_MODE=1 pnpm dev:server +if (process.env.TEST_MODE) { + app.get("/test", handleTestInteraction); +} + +app.get("/sessions", handleGetSessions); + +async function startServer() { + try { + await setupEventListeners(); + + const PORT = process.env.PORT ? parseInt(process.env.PORT) : 8080; + app.listen(PORT, "0.0.0.0", () => { + console.log(`🚀 Enclave Server listening on port ${PORT}`); + console.log(`📡 Event listeners active`); + console.log(`📊 Sessions: http://localhost:${PORT}/sessions`); + }); + } catch (error) { + console.error("❌ Failed to start server:", error); + process.exit(1); + } +} + +startServer().catch(console.error); diff --git a/templates/default/server/payload.json b/templates/default/server/payload.json new file mode 100644 index 0000000000..24f2b1c7a4 --- /dev/null +++ b/templates/default/server/payload.json @@ -0,0 +1,15 @@ +{ + "e3_id": 0, + "params": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000fc00100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000003fffffff000001", + "ciphertext_inputs": [ + [ + "0x0a8a6c08021080101a806ca049c3e165dd0d724db8e7ff91bd3cbdcaa21b19e3f5d254b350b328207a2d854f4b244107b674477d101f50daafd23feca3771c0923bfc2a19a419e095aa967a0d7ed0c7b59665acbe2fe8ea7a99874546e2092f93f37be13879d8dd6364d06b18f3fdf4a678d31b7456222e772f9c6c49ba9e4d7541fd859905f357acc380e3bc259eb987a800d20feb5fc4ec89a5d6ba519ffcd7d75e6ceb448852592db96bf1ba3e29054b4aad860a6f433eda762cce5960a23f19ca5f6dff895bf5bb78a15e3808a608b9ed38603481edaa9208f0887841ac4af289cf6b6486042dbf5e2ac1b53199beeef6129a45df4c6521664f304b955108539dd14596065a14d3f339936b421dd47bb66b2a49b367e40c8f9dd09697bc04aef671d1db930b0855326a8eb31975415d500b0040e6e56f40b6574e5ff2cb154d6168015522e504de9b25ecdcf3837d854017be5c80bb847f368958cc1ae157e82475ee52c9dc7b5e5ef334201c370af95a3af1c790ea9e27a538e44e3d82a6b0181b7ad883e4f7def4d2706c208b3e7441d9afcca4dce9247fab7762a6ce2d1624b3e18672610f219bc9755c8314265185fdcaa3dc203bd79ec6e6ed4a7b0b3ad5db383cbf290acb4ae9eaa8904d3216df99b68acd1efaa78207b89aa7814d05835b501680dfbf8d8079dc01312ca147f54234f010370df9ffbcfedc737c87bded7a901cea5a3077ee7fc4af96f8e6386245abf707a6b68f1fabc4b6b0d1704c45852aba599db14fb1cb62d6a1740d5813d6bacda9107fb6b0a1e26c2d5388fbafd9d53b6c0e26298742d3c20ec17cde0720805295ccc8d5fc930bf683b83ab644c8c59b55d4a0418938f44f597cdec69c97c8a1baef1f674cc18afaab16a3138ec1ac664c200659b55f18fabb7db1b17251e63b05a556f129659504f6a2a0207cbf2ffe353aa816ef078ad4f6ec2a6a2e5a7bac9b3104b1b6c234811e1bbd415594151b73a334b4c3f28dd865348568b3a4fa406e56dd7b1b0562859c8cc1d0dbd2b72d34c5e4c9a7625024b6e3918e1346aa9c82280787c4de8842620ff78483eebe5349de09703afe32eb938e68c2030e9c0a8e4ec730279a1eb63291801d391cc89b6d13febfaf85c82c832af74681c0483efb6ca8a384b33775720246832bbcaec495efd92f72602e682a75c9d9f6d0ad35e73d1a4017a3868adb52ebe5a080ff6c1b8c7355eb39730b59c3c6e9a24c483bc997eabbdfa778eebe9d3f44e2e195b8740ed960bb27dc1fe08edd8bac12b264cecbe548dfd8264ed7669d7534a24f098aee146d46fc5efb6ada42af40899b0de9ffe27fdfbdbc6f914d6be23d9bc15691876a7d64c7aaa0fd58132f514fd3e772ae6b8dfc76e939576efec7bec78214a7aa2675402cbfd1c44f39af967004ac409b6743ca4f3a7acd50ad4af945c4d2abe0397079eb39735cc7ee1418026bc6822b8e42d0dc46b1e2c7db2862fa057c312c3c76e82d2e0987d27b7225e4b40eb67edcc2b35e671884937f2992c25c00fd8cd24e987ffb0674627dd613b2393040a70d5f7caa12010651d0d7ebddf17acff6b156562e61086e68971955c03fe0a7355038ea108302df3f47a91dbcd4fdc24a5e37920923f61c3a8cb665dc41687c3f6108f4dfd4536e305fa394a92e554f5fe3cbcb7f6c1a2b6799ef2690315ba07964fdafc64944d6c54a600362cdc6e4e00d1747cfcf9c433422607d51ce54dff2d7c09dcbf9fc282d4621c8d881e6643eabb28ed20188d6cf67ab7ba7f45fab1aca01d26b4a0076a6b6f029427ad2cc7babda3fb75cc044d70cf4aa9b6da079d318b5b4d8379a1913e80c5268ca4151db34da60343ecfd5fbc4fa5749cbdc8d432180dff3a480c8acfa6197c400c42e3f8eacebbd769e4ddd2374de9c750f84063a827715457272559035fdcb6e39fdaac699d7285be86d3aa64486085d3ad9c43344c9b3736c2469b9c7eb00cf98f0466f07f738cd3c96e12ef0728f20116ad462fa9cba27b7b7b0f6b18e94050c19fd674e43a2127bff51045ba975540790ef36fe3bfc2db738475b36f6abf5e9140bcddc95b1ef31992c38e9c96553d662f5f9b352b33237cc46efdf5f2e35980f07342678ade5ac5258463973f4d05f63edd0479723ae6a701989433c7d0dd4534d82e73acf22e4486d1c61e890e0246020b4b21563a4290ec4361b91517cf8c63847d48b36d8fb36c0dddc454f80671bf2d9d71f35307bc789948e27d9f23b079fe2ee1ba9e0504de1ca324c24bd915e049394bbf7c28fd327ab906a18abb6f33b40cf01a1217961948e8417adb55d54b7ad18e04c8da27f881bd554cfa46636e11d0a60ae5dd7f2e7ad27800ce53e0ac3dcb2e8556485b874b16f49486f9d26acd1d6afbcb06e1da93717fb6e94f8f0cd80840ad3f1ead39dd3faa2fc7818228963b1db2400984f94513ddb427176a63e4af53da9c31f9d279439a53b07e19ab68085f5ebd9091b2cdf4fd85d19ea757cdaf462b13871ed5a918b48aace7c5ac1287bcca734c65c5e330de3c96ea6eda9ab1450afb830e5afc88b2b925955097c4ad1609465368fda745843da614a97f7411d79268b4f2361e9bd83c83528dbf1a87fc6f89a7e2abd6bfa27c1be2270d28b6963142a07e6ee8608806f34247e2848e7a5befc8bc87b221fca7bce629d1c72e242f40e44edf71f062501947d68b2fcc6e038ce8a43dac30e7eff4e74f3c9d8f642ae90b57a6ab886bfb60d3ba42840270b15830a75538cc33fcc2bb149217530754ff370719d125f2b41096cfa4c745de9089e69dbd086a06a704abf108331a20a5ca1a72b723ffa157c6c1cc7b8a97bbbf3928f014748c9fa89542eaa6016c664eebd6cb01db4839c2083d5a4cc38a871cffeb3a52667c593ef5bf65c11b4ea4732bd3a6fbeb8ac389de161c565a6653499ffab5a71b09ace40dd79b6d7ee919db59541ed7ab694d817e37e467dc8429bd58b8ebdaa6c1380b0269a87e6fbea6edcaac0b42f5798cf0cde4a3d5cf5ddb724858b63fae88826b115d00c00bf0a909c1d364ba5766c890eb4fb865b2edb3d6726c61d449406a438c7f1c853329a62cc791f928ff449c4f289aef8a72da06b772aedb21113c27e79fdff81550f7f5269ead35348116eaf8401459efd3da0ee6918429ba16335d535f0af3d33d8a4c146bbe390b0ae6228aa41b37ba9177f5fdec944ff8156cb4ba786145caa47e4c3513be0fb8e9cbb220aa647f9c87cec202b8d625c639c8324e6233a10d0d74dcbe6d391cb7f5bd3e9ce30299cb4e01e569bfdc0324d503737e9c28c58e3269deb1688bc70c0db4c6e4c088c5d1aaf31c598c010a5590fc03d9262601741dbf0662aa71f14fc4cb3643fd6559b3407f2f3469ca208187e22f6bcca28df708aa93e8dc85a64489565cd69966cbad6a0ed805bff40c1c9ab84ccc6c4fc5ba8aa71720274301702df3c874813977ce2f2026213924a66557b88fb526e12b943bf9bdbc496c2e35c4193457650797b599b6362bb6869939c0fbb51486112a8ec38ce49d3b3a3990895f0aefba7bfb928357551589346830eb3882cc840965eb55b8860a2594e613cde2613663327c062feaa3bfbe192c5c53a29166add212d7ace1bc858fc65725163dd5fcce9e12f1102e320ecc623904339e370514e0ebc4a3ec8ab11bd099ff8805695436548433fad5a69d7e08b3b8e1569a0eb79a77e2252442434393008bc2bdb003b2175b79f47593d99146d041c6df7abf8bbed6a957e7deca154d53d597625849050c453ac2b8bccbf3b49989d8d0276223dcb97e9d3f209640fa2d455538fffff1502987953d5a34e27088515bd08cabce3d9ff2e35ed40f3b464a1797896eb05f79714a855b013d864714e16a553ecf79f71ee935871bccaa30c408e188a48f4538413ae13fd2091fa1a36acc981753e937ddb90a20af6f9eb2679ba5ba50a77d69b5ee62f11d1bad3d3efe31bdf108f1620417933170bc9062c739b3848ac61f68cc02b01987b74d33a6ef2025dc512e412153ef6a69fbd767516582dd090ad42b4e74c726cf49fa79f7ee18fa003420f5559f345c5b7deaaafdf33dd1664926ec339da5e08cec6a207f264323d70f90109a3621fb5bf2ce0672aa9c4bb52f66a0b661866c9792328bcf9b39c0073bab28757a006c9c3d862d6e208a16f35714f4e562fc10881f503277e035b9bdb9b2851204f5fe78347c6cb34fe3094fc5b41433fd509bbddb549840ded7aea3e13e3226893852e037c12f1ddff92ae671db83e64f24245e2148194b006448bfc6a3ca1b961c49f6850f8115f3c17c7452cef01aa260a2f648bcc4551ed00ae3b124f0bb37a2b50a206483cdd72673bc366c88396b76ecd789bc32c52a59cfb322a1758d7be23599e2f41a9d50aa3ca12739f0ea9fa82840dbb113fffd6e9e1fed7af23938c81d1801b1551216180f6a891b50a4336f67d4bcec74d8748ca2289da14cdb975c22a00f746183fb2407c38f006a246e9b1f562ad6a0ddc95f820c9768975310558044df1c44c6abc099753272ec06650a4a1117cdc10662bd19f66d9c2d8596ca2eab7137fc731f53a93154f37dc24b254d1c03d1d85244dfda7fb8ffe8711f6bdab0da62f7bc77f172c4d485f878aeb1ba4fc9ef1883bac943982341a39753ec2ef9b5c305d706a8b48c69a119986e4a35ba87036ccf1a2f3306f07b5776a25659b7256581a9bc471dd86c4f07b348dda7bd4f9f902e41b0155b0307209d5d61c400c1347b4de54caf3161ccb3d7f0b28661d57e737dc625ae60c587d3c55fe039dfc5afde9d4c159e1945f42586617501ad8b1aa0d8cd2449ab7f6df7aed7cb73b90c06753456b929039012451957670d1ac9370f28e5b6581965f8b143ddf2e2e5fbb6d8e43f7de75ee7358749047e97169899285e85b6fcfd4e4bf3238e8ac109e6b399c9209469b7804390970b9d0bfdae2ddb5a9e3bec72bbf458e1a23faca596cd1a432ba9e294503a97870e42ecabd3b5e372b9021d96951e98b85e4899f18d818189e64497f89d9e3ea93fafdb6ab31d88322e6f82341535ca39520827b8af3966c16ef6bcebabe58546f206b63745214c8d2b2d31ab1a54638402ac48ce253e8de8226f3640f989ff5968a1809dc010feb1a8693782aba839563c8c18d2d23a7969878f1585019a0c4475f3413479eee743f29d26a1bdde1922bf9fc61bbdd0ab390fe7cf74cc7ced8242c2c024e097fd17a96dc1e6cf5974d8b9469aade07334da346f589890a1d98fdbeb3a268c165ed4caf2655a2133095aa1e4574f260d79355123feff27cad8b5c51cc1e8bfba3af0834e90875e34129253e9d4659ef75ff71cfc49fe82b1c57b3f1deb3e9a37daf35e37f52cfe98a56ed9d3633ab21d39376a4c6e55771983ee57693b2dc28e6a935f84071d2729d308b8ad192568800ada82ae9ee44269189951f120939fc73f2318f75ed4d89cc135ddf2a5d648dfc530d55c63ca4283ffb7153fe86a37a549878995e4fd48dbc816e3a7eb705f8373ca1d1c3cc07de5cbb5dd5b0ff68a8e6f64f76c60e3362a10851321383a7f98aac1e0006c0fbe193c2a7827a298fd7d5e30cbc661b93172e4e6144f6bf2d23abcb7b8740b6f8459f3bce6177f6d0a92a26e9683c76f0e6b615cb09d251896d30c23e0ec1ce88433b8f8ba00014382bc87e0769588b5b5b970046dc9274e56d466ee4ef59d4287185aa4e6b9dc241145421443ab0c631b579462513a87468a7ea08c4f76d2d4d788017a4892a4efe60207f7c884bcd6a72ed45ceb6e99246f18b0b94d854a27a1084224299ea2669029ed01957952ce10075804bdff3d4ae0e58115319fc146481902fad05923e1bdf3a1511bdbeda1ae9d587edaa02acf0ac613889c4ab7e8b5bdd28e85427921e15c0b4f1c8404bc76d40d138e5deb02d632d7aa4d2fe8460ab8136928b456ddd4f642dc24ac0e0c21946392b8ec5f74f4ee9ff0f66d1042333396d4cf14f0cd6c8d76746af2440d70b22810e34f5d34d679a82118320fdb397e65fe2279337a226161197e72a3146d006f24fa88647293d959d8956a480cee9c298d734ace59297f0e51506da0ae462fa966d869bcb7923278b4e74926384ff9ef102a71d74dac0290e670d1123440484aeec7c77ea1388214422c27994239017c1b2473540b662bc30222affca45b054fc1903991bcff310321fa37af7af15f2051d11d8b12a44f20ed4dabc8f4be5c2ed91c35e9ba597db04fa8c1169c1765fca0e7884446c4787cae17ea7970d566ce218de3c76a7e65cdce6eade69e8aab807093057f4489606ba4ef49e70fc78974ac2d7305cabf142f3d0277dd995b13eef79b0fc397b60bce1827bb75e7cecaec8ee33ef0e0fc01600c8d6e4961801639aeb287159f7e7ca0aa151772a66952ba9c91a803c59d15c81e2431faa3274aac8bb2feafb490f46acc508d4d018b39a140f69ae252f798abf2d3671fd6ab08995b4a4ed85be958b7f44b837453b6596b610b7abe2d06842fb4e95142367e80d2dabe6b8c17c27316747328bc93d665dca6280654557bd14caa9ed1c808bf12bc2cc47ef2f4773f7fe596dd6ebde449ca20bd3946e67074229a69ac1f08dee5d9ace9c3d9ab7dfdfd9771fc6c7c2366116ebd7417dec676d1ee48de0a4a498c2eb031c89a82ba8f6916989ccf32c3c029af45a08d0d30199897d05b29a120c299812e7c8f992383992324861d57f27a553cb6b50a39003b567a293f496969bf5a6f4a3a197fd41b3fcabad659b426398942cd8b79fda00d644ec1429e60c3f16d3000c7b751818a548722026deeae5bc9dd295debbf52296adfce9e8715d6649942cc23bf80b38c2dc82f8ed1cfa30a0d9bb1d8c4a4eece32fb7d8e3e792ca8879785151a0e5443b63f81c9e52f842c2dd5633ca97a1d550bdcf7b165cb04cb381984483f0a49e79dbc578ca731d0bdc7e48921ec371f40b28ca92b99f2c6a022c23f23f9ac8eaf9e9cbd7a35fe8546dde4cbe7024ef9cc1b161e56fe8d8394372ea871efbcde6ab292797853a8feb11fb95ec02ec9ffddef8eb58e94b949a33c08fcdc5190ce14b60e82ca9012bd9869f376b6bed0d8582ff1f782e2821fd410a5249ec3bb5ea0efbc01df1c5859c179a7d64d2645f6fa02ca93d88c998f644dcd892d25a6a9a449bcebbc87f4b0861b5af3165bd30638e61236ff2f857160a8ae9cf9309efbc8fe94ff8e6fc7454f1c81ddce47dcc0bb80192352b4e25554250151c21a21104abdbe8507348763beff441739eed1aca278a244e812e5efaca70127a16a3c9c64779b2de4eaf936e5f159f8f38d5197575fc83ecae499b6a0e427dadc7717e166009a4026ba04938a55f00dab1587a4fdf75d89ae6d0c9c21debd128445fc922804097bfe260311fb19aa1d1835c1f0db069982e7a9e2ce09ff8913bf9e3fcc9988de2ffc237acac8f54f95b6e1794513c89e2dad62b5775f588f5fc6d2a48a43b9174332040bc89a27e1512facefba82d77f9a3216a36f28271502bb784cfd5f5715c806f04b46273bab8fc0a8b12f39d4d4da79bdb865598a774e710e44327ca33bc39d70e93d36cd05bbc3d56b997d9f2ec01c46e64af25b6005091d0c04de503d46a046c9a146aa35f0b06a7bd877e84d2cf52d6bf8c353d807c4d962eee67f2d5aafc6071fd62a10120abe17fac0281a0478d53b37eba1cd17e31ef4af12f42f52694982300f2a046fb3af606a9ff257cfe9ab0171f4ddc6e45d2613c16fd3336394c13764b98a2fe8f22f85bdca4967bb7c0cd0711fdaea11f56be8dc79ca079bed6d73957d3fa816ae883613bcb98699b833d55e22167a4c5303e5a5a0e8c3f5f385b269b9297eaca3aa023b91ac1cfe193042fa92a26ccdd96f522d729335b5abdc6aab80eefdf02e85a97b4a0a21d5173ad451294cbeb99288a1d6acccb087a4d9b3218dc3ad84868b3b21d01acd4cfc3a97a3579f2f23db1d955307008d9251999d362bec24d50ce11038fff143d70b5b8523c60fb2f56ea4b5101046e46b219c09f181ab3d0c6edb7cf2c7f901427314f0f0ef6636f7d670c8b241d8ce9d3161e1a7d736e47135c6167e26422d684515dc6d90dde11f2a38423ef2cf9b25c8ce0c97d1f8fbd3f4b7d5a3cf97d6424bd532345c4e4024bd3ed6ceac4c922632d42bb4f187509d63f32fb0181cd061e8ccdc45f2a30702389c798490e9b82a0b4c23dae3bf95e246312eaecdda39d9d4b601fca0b2bda3d26250fd35655d2517f068927965273a9a6d14cfe908f0466befdee963b766bd18a85b9af93dae09688d10cfeabdd3405737bd9ce484b16184772c3a40c9695fb54dba677bd1db8aa64b69ef2069e14493e7e18b9e86cfdbbb85198d73a932a6e972d830a0de56fda439507dc95e27db1c1512774aa91a4042ad17e2c356e94cf3bcdd247b39e5825440f65552b006db2923cca9e22f200fb21e6b7a7534e67d5a79670cd03659cc3501d752613341c413558de1ce4b52d2d3d5243b0e1f1c3a3d14bc6ae6947cd11157040804d2412d27b20d567e0ba88c03c1b60196fccb44a43a75ea0d0b70e465bdbcafaf74df63f5d1f5d958a59da490bd166dd18c60a726d0b56a1c67b04241a7f169fad65144ba0f0150abcec159c1693089ee93dcc37c2d099dc7f68181971aeef873a7e20d7772413d5cd245f3d9a5e56e0807139872bc332ae7df88ff36f4ced695582e986706d686359bf23903f994e5fa239c30fcb3dc85d3f8e28197a50b31c58dd19a8d33286fb03f923323072fe91a337a8d63aeb8b33e35011db017acd3287ac3e222f4534fd097e102eec9f22031b0ff0eae8ebdda1f1eb36cb540160fe985cfa28b36490fd350b5fe78a76758eb8bd26234832075e2435fcae22f60d6206cfe7bad8e5858e17800d3f55cfed826b920ec582674cf1ffa0c2517540b3742b09f0117cfb63cd68b13bf61f10742ab301a859122d862cd2c9bb9a70e58cad3c896686f937b21f653b35275c7b292b044d0e82868467f5d293f6e6ec7370c9ee7721b44dc6f19470726fe79dbe51f2a03bcf462f2194b0caaecc00550ef59edc6aa9acce9c2128263b782c5aba11e01ddba83c94e394d805c635b5ba01d55742554b3f2c80a05ca7257bfda43583e9e5cec06d9d0d55fd36ba42bda87662243a2978ee3427ade52075573018cd0b429fe7276f9fcff19f5df1596d76e253f8d6228821a5da697abcfe70ecc243934b0f75361f607ab8a2ee00dc5a2db003089039fd19d63c569aed4795debd782b262e8b968c5bcdeba373be6a41dfa08ad64da32ef7cb42c13a0f757c13e2d40bd8e9eb209b345bbb422ac8627f20b2d3db75f7f497f338f96ec013c81044e5761f0a562aebe1471cf5c47cacfabaaa93f9d659a90c3919f7fc4a9a9c1fd0435cdcc64815378aefeb182c95883cc6e18032e67067c59b2ccc094fb9d52f571873fbb59960050e2a04bece86a4d23640a0e251ba502ec4e2b3e0851ca98f88bd707a0aa4f2b507c15e4b6d38f2aebaab994ff884cb4ec0b3e7742b9f912bc63db025722787b5bbd7318fa362e83687e33233fc419ec2b65336cc88b10c73944f20ee4b57cc6d01e00505b0197be281a316006deb57ca466fd8e1c67122a8d95289f1bc4ebea5f30c3bfb7bdd322a4a993560e075951375fd901ae2a6b531b35ffb0c0797b3aca5e13d0063ea60e2ad9af26e2ff31b6dab7d7705e5475daa187aed78b2814c460742140e4375f9feeff8f0e67750bce584f0c2aa1627ea49f7cec1fda009dc47479359982a75c0a0e9e62e30e8ed113053cb4995e04997b2d1610fa58915ea4c87af5ef7e86d839a98a42686648e6210220fbc3392815c72d67a2e7d9d84590a4a733c4fe5e539ce418be57eebe16b2d8059d61f61a6f4c9a314d99973557fb2a57f54e3ff24398954d71fb9403ee44cee0e83dc8a90af13a57ba60b9040b575ee7045246e1279439f88a875d9dcfde6d9b132e46cafb43f5353a623b11b0d357e19470f764a53c43922feb3a9995bc8535ae4e577166837090775fdb4d94ee07bc13e780110207ca424fef4cbeb95bfe4da4fb151a8b3f2e864071a964c4746867f4fbc091b62a30860b9d61658f14615736eb244cc923a16fb5462290769d4e9cef84918aa806baf16cfb383397165ddd39ce9e9ea1524133eabe820447c1bd50878a1569db9fcbceca624e9e7695b7cfaafcd2e9ff876f05f6da03848caede660b8bba9dbe898ca05c0a076ee95ff213cad1b3854b51349aebe065a2b1d1f5c9ab080c27a15a9120ef9193eabe60f38505f62d3d473d9236f81d0a359c506eb4530185b8071178b8545df1f831e93d3992282df185d698471522868bee153dfa1678571fa9a800b035ec08d37f62b19849410db87915464260c7678b485e053a90bbac8b364aefc448aeb176231eb7800b17648023a9acaa69c193b9fff902f6f1c09dc10141b931f38a53860f20c57f3b2f2ab8e0c0d858a13ee3d0f73395929528854d9a2a8fac97fdc4384516ed54c114c96dc88f0dcdb2f921be29778a1b61b2c4b6339d6844227a7bf3b8c344f0b1f2eef8a27048ea785c7181a018721400b1c4b604497de4546d954c76186dc12986cbf08aa90bee611ac28c426c2040dd29e8437a2d11c29a1dac00476012338911e0fa245df97a6cdb8ef23d13506a838f19c43fd33b11476782d58135ed7189da165e41fa04890f15409062f391e381adaf33619571ccfcbcd60742e2d430dcab8425ce7dfbd46ef3a72e027a376f1a2fd1e92e78b86d5d82d45a66f9e55a32fa4b0096f5abe089187c8b032b4b9f224042bd0a45a5b6fd3e29c167b5e715cc89549fb40e2e4e96fbced9de4b4ea8e4018c665d17d6076208141a94bc5362583b2bbffc9fc8d79306be6a310c95a9b6be38ce429237b74c332e1ee1bea197917a1a2e4b7abf7abe3eacee0a945b138df1fd6b8942788cad7f116ed1dc5a419b1ce1fc3965ee17a3766ebd58c5ab61058cf6ee1f321c518614646cea26911914851c312f372583f385e79a1dd2ece6455dd30245dc046742a8b25763e6cb7e940432f46d10c5be70d81954067ff3f9db070df81cfc4da0db1d2a733e2770febf22858a766e984ca8b7b607cd749bd3a8ea0147d840bd24ab0022688bf942b651bc0a5651a479392eb507da1a3d9de2015e57b72ac1abcabe2c407ce6894087e565e27bd3ee9eb156d384839c01c5357df067e95fdb896b956906a734d5f6cf767882f2a45ab63e46f984030ad9a51b82e38ef8ccbdba7a0617f5ff499433d168a7d60194c076c3a66c1b52bf9cd0efcdc4cfc92b7f3c7a4dd0f7a12c1cd58a477a072033c156a7fc81ae128b9b3d50cc41acdb56b129ec2edb6d1b81ecd60737217382157ac1ea63e56c28f82c6d3facde849d4bb5cff9e749a88f7afeb464225d6f334c03f70b3da3bc743e7f7c5eaa46937c4e412a498ea1063ce4115d74565faf6f6f81cddac4595a32ab8f9867494e4793d1b5965558e264f7b65085441007adde5634feaebaca9cb0c4fbd33942fcdd7ece91664c54524f00d6dfb9563421527dcd219ff54b2578dede9ab9e2e01b5e5012385de900747caa4eeb772943fefffcf862be39080c2614c4d2d02ade05f30129d01007643e2e5105de0775f8f9bd63a83be110ac8b47d5c1986fad0fb3f7cfef8230b9e6eeceec85df2758631b1fc5bcbb91a3f8de6f7251a31e22ddf822cadd66adaadccd0a8853cda0ea06e2825aa6a8530412d88cf37845bc0443d3de39f7338c5898f82c268f60278d366235768c692946009a93d9f6f21ccd38b52301dab871016fe534b0528cde20e8d30bb8b3143875d84aefd0e2264b39098578871d0ede2cbcb274251ee0ce92ded6edd794089b7f9ad131a1ed69f349ab91b8d82f2cc76d9e3ad216404964d2a8d2e9226c3121730770cf43be4ec216cabd1c637b652c15964bbbd8bb22ef6080eecfac4b99bf87e16f4973299cfcf0d666317b178ab8c56b3ca8d7b0da257ae7f875db68ec2da25722ac7fcc1a1fbcfb3b8b771db8f6b4f9d079265cec3a343fa4a90c8281a3e2068d915fd4ccb1bc8a679e11595bd84f9024404e986316b450c87352f7e818a48083573af94b41571ac81aeef6c9c97436e622143bd2fdd82a54ecf0d3a254528c0218bc322cc72d5ba4e6e737cd1321b55145727772337b5667ac8a60b783c30130dd7961b2e63159cc9ef866219d2e316f5bb54cd399a4a5c3f465b924337f1f9d522087ef76bbe4a605dbf72ca09ef27274c77e765df97eb974f84b39a228f65d5558439cc7259dc4ea0b308c2afb7346236496dfe89a4b4986558d6822fb409ab59dd2d9552cb595a40b83aa7bd1cf0562bc97cf704f25d710799dbea51cd0cab61d3891a1fdbbe46343c593fca944acfff6887eef099f895a13772aca46265b3a87d4792beabcb97827205da5b93aa61275f2f619743caec9327fa981bcc549393c0b58ac2f076f10506378bf963cbe55b0f06c9a71c251d22990aee58e31587857028c107f5e610c1c780b378e78bb2b761aedb9e764cd7bc26b5425197ab833892b8454ab02e91215340f032ce6f35249517289ff62266a30d636c532f065b5540c1c55e746ce4c605f53f3844dfc12c24c4ab941613cb2acf8571219a1ad04ec2f5568f454c089b82186afa26a0b8d5ad36a79d73f1ab9a9ae3980e41ac827ecb5bab47a86841f14134aae92f2debb3813f315d909bf3dcc16707ba9fed3f471ad442108468661fcec68424f7cdaa62cf35a2b355437d42269a551f87866cec04d0e421aff55f7c80ab439ded71b50dd03365fa71167537fc450b83fa442e1c91de25c09d07d51bb1775e95d75e74420fa51c71770ae1c0830a56d648fef688ef9779406ed4b5e965a9a667947f28f241d0a22e8f01df4c18ef4e3cb5304ade9fe45747050250e64f9585d5de7f783b37ba9368f482bd5a4d2d9d1ecf819ebb0be6442a531d7a1c458078e399f37b4f251adb56b7c972355c6a0de6b7cbc740fec8065035d7166acd87390f13d5baf7d6edf176275181f288cb1b24242291d133d8838b69e6c9351f090abf52da73ee16b8a98c808a2afb0c486dd186e245075b1f28d70068aba8b907215901ac0dabcc3417f08aa1fa485941860865dc0d904d39bf2f18fce14030ae958879ce9deaf78b83cb4de9a57efbe56a7aabd834cfcce75123ca9f036f3cef1d56937a84d3bb92744a515252b0f3bdc9d82a03ad639f7e13fc8d6fee9aa8a561c787c391d237f4ad892f1d50e37284ccdf7539afa53c53bf97326d72d71a9b70133029aa169b998c3ea757dd2555180a4beb95825c6f39bfae8c15bcdb4be0a6cca7eea462f562ab23f53ca0a800d440746bdb3b4aeac234eac7acf05288181a72ac40fe2a8e0cdc0ff5282bc0aed6ed99b7f060cf92cfd8beea2ee30b2463bdb8ff236ac3068ca5d7c295ec61417fc6b802f1bcf425bdecd2342a962d2ee7ea00e1850830e5f45667fc150b30f0fa2effe1adac431da05b4eae913636ac6c69fb9666d889ce21a21725e444355b200efb4d9296738840e88ead1798cfe9dd4918ddf02c78dff8bdfc382287fdf8980d88b513224cf2afb3d73f248b99e3e97eb414ee266b3cee0d08a9880b0acb157fca424420319bdfe587734d568cde589bb80bfbd79924e3393ac550271e6fa13d70f8491a276157f5fd11ab6b09e94288304486bcc2b636c79af0d64496b7513f6bb34ae9a656e5d0e44605852076fa4c606e5d9131b9ac6f1fdc4e415d663cca6e76fa6a43483d97f17e4de38104db7974643cc068862c1c56b903cef19fcb16150c0b7c7c1172c58e388c33a1b55c728ab95954c515afba56bff5147acf7f3005942714c1cd3b24ed9f3b4b8418c5d6d3a3442d7cb0870f0a5bca6fb4ce31c87e59f320c34d57aff72e2c7de0eeb3998f4a5841f949909d786932b41b05f2dd4e190ba7284045fadc4c0b057c79d00d30e30aa31dbb02c5867fe2d81612eb64316979adc69f9e7668d12aa8b1cc28e7606aaf8a03f11caa67ebb821cf69bfbeff78c544759ab760ca211defd33f0018adf69eab503634dc2958a0231418fad840600b915ccb318193d0716f1206fec5846ccfbd43f985bf9474846b710b5456b9cc2275bc9bc83375e83c87b31668927523d50bff35ca11d8f5c2d23e5423b3a9a496eaec7145e419425e0b5644046c1a60b363a6e06ebbd668138ad4521b1cf09f591a80ed36ae37671b90330a180fc97be3d579940fbf9368de2178a087ecf9eeebdb81fe6e8e2f0549f7ca790d78914c4cc74731e092033f57d918e74fbb664d7e47760a6e1adfc6e67706465ddffa05dff9435eaef6b218668819274764123b4f1a1f1c16f01df4c102efa17752d0357de1184d5ac0b72150e56394c09a8007178f014905b420c81b1a457ef7cfa268cfb4b16216a8238b95466cb11e02824feaf841e7594a65eaaef75f6de5043db3a8dbba764e98add0dbeab420a93f874c5de458fe73e3b175df6c97052c10641d7a8ad310f4416ed84e837c6088e9685394d9a41d8b7e35fd49de1544c90c6113bb16d8cf6e7b365762122260a6c7ce36ac0e0c914e558423791d7c22cf505eb6debdc82c15eeab882e6214e018be2174ba8a3e1f0fdd87c9883d5e3c65cc8c649dcd268cb41f3488adaddde719ed5fd9ca571126cdd6ec76e9f1e831cddf9bb932d26586f934382e15038286ca068160636beb3e1af45c45b42976385adbc2c216875b1d4c6e743c21c241ab4c592e9b95565d0dcbef265446fa1aab340017c87a70a9aec75a8456e52affccbe4011c71287d69c6252acaa8ef47131f1403ff927ac985c40d724e5685c3f482acda6216710d83351c8671dc4a2e693398af92ecb0c9888b9a664c9d70054287738467f9ce13902ff41f4b8f1270eadd50f3a6f3e255275795531eaf8caf034925caffe36343540848f6e6f03033cbbf9c517e06cba124401b2c5985ea60eb52ad88ed9af17b251ba2ba3c59b0b2dcdaaed59bc3a34527f2df832a0d0d6b08cc2e801d332e445e921bd8de2b285d0e4e3d87b1d638aadaf75e0a265b5e1b1170d80bd73b8ad3342a7a981d43835835a62e1c73f3ec7293eff4e91607bb9a365876981a3c93d9aff0831380c6858c6c45c54249843ac6693d530f445dad5afd0f1b7316efc5262225b79cc44942a88bd00a1d98122b730cbae148b7abbc1a6a8dc454d53ef6ead421709ef84b5e7ddaa33c047b3902d4c78c09f8b91f4244068c3dcad9da3f3411a75380ff86d46b50c15e37da32d5869b9de60b907154ccbd6e667c4ab8ddcd730b23d96d0c841932742ec4351e58e6f878eb3d66c268ea3bc2745dee1e8e905293c647cfba938cfda9636868be0a645249fa1165965e02d8eba91860f28cedfffdf435eb5b9c5eab18956af4ea5c449435d6d2927b8206d9192bc0bc1a75f98ececea21d8087551e8b709279372cdcea4f5ecd29efbb7261040180448e293a7d2e71fa407a1962e5c970c603ac44fb4636b37582957b2b7eaf93408118a40ecf8175c8c3d4497df790407182a45f4ceaefb4df68294eec6f8308f5ad7808de8af5eda19d1ca224b3dda516412d2eb76d14bceaaff94ecc976b7f0a761d712825373a5a634245d2df02eec2950c2bd5c125022e6af75f9ff4448cc8c84c2e3081f7e4c1c3c4fd8439db822ac30ac24e8747269bc72b6c71e2d6c6a3720cc54a1d95636054a8e437227c09fea15a46b214ff445dd91a1c8f6fcf5878b6ed8e624aea8777549a80106e5e9b9428e64c3d5630878c033a0e14b5bc306102f380c1d7eaded4ad20b92660fcdb1fd8547d7fd7663bc1b298941b1b4bc15a6964feee961612cc398ca14a74c30982811db9cafdaac5bb5e22d3fc055738f42853f6007fbd198d0414621540386075ebef65a953cf072321d8c2cb8fd3b9f114ff88bca9d0717179b2733f83fbd6ef6b6f645605e3e20675e4b7eb519eb9bd0a50e1e73b8b93418a1677e4c42c371e720fad30134ee2ec4130fc7157f40817cca05ba1e6e585bd8aacf73c0b0ca4fb0de263199277e772594901418a7bc92ca3b787cdf103910bf7a25a48693501f0c1d3d81652fc7af935ec8aa70772d64249e1d68c1c5ad5705e67e9af387a7ba1faae7a69474dd10ca50c1691bf1dd7ba3cf0335ae341701db62bdf231219296c30a991dc370994a08c9204c00c043ff685dd26dbf4298a005cb2352fbd453abf8303739e2731c1ea0406cfa434550a3b93c486a8563de78e8f02bb2ed5ddb358efd6ed39a7610ab2cd00a4c5f29323a0a6a7783a5f5d1e43f88bc428841b0b46bceee1f60e52c16f2e833b15c48736a62050db111808952fa12572f9a52c7f5c31f77fa8159fa95e1d0a10f9e2aa831d98c8d8d2d97d1aa768694de823e78db257ac05fba35708acea795adff54fdbbd9caa9329601abecd27a679b75c53fde5386ca188d83c02097b82064337e402f58df7c1ba86466fbf23392b3c055fae44d72e5c21acf8e281e087b1952be9500d93c6d0d415c4b1fbea5f31dad8064ab7cda41b8eb8052285e64fbfa6fa12db84230c47aa582905926135766e87b4722d8d78ac1affd2318b5b52d37faeb2ac6cc36095f8de3be2cb7a8dda78e6642efaa0bd3d8866509d622adec0d6c1b628f7ca3ac62cd898a5cf870557847c6ea326b4cf4081e2bff183b45cf2689d174562538e34325b07524fcc8cce4cec5fdd8d74c9605d62f93e8ebdb4be0944583dc1d6e2aeb74b6ae978643ae71342e9e1072d717881d2c1e488e87d8b31a38e3e77c37c5402851573ba66482f175f1327174469b7850428a026d8545e9e150e8c739309bb6867f5a26d637eab865a3d97ed91520aa9f8ea9eb1e80ab7c4d7f5a095dcc3eed11427b4a02b9bbb9d7a708290793421ebb69d827d3cf69bbc755d9b7d90320cdabe81a19479639af5d8926d99e9ecd999333e110f4622ca0cd1d003394dcf4547cddc0fbc157709590ea56f1a39e642d0232cd667535b2ee233025ec1846f80850747034bc1491e5fd7b09c3133c0b3a04393f788a5f63d67bd70f45cf446b07e91da3797b2e485fda1f60344558a7a24c5858bd753b422fd568ef37992782ed90b811e3250e1f61ff01b7ef8020e55d76544c5277befc6662c5605d3a02944d6e81cbec2133a9ef3b9a686ee4e3ab58e8ddb1a082af6d91a2686c59b041ad900ba1a1ba9e867b078c3086a5fe8938bc34bf2719610e9319b2692a9f3e6ada18b014ef59ffe8503ce28775d59ec62347bc9ef646f35c099350391354d454852dcbadf2da9f74ff890847c6ccc0f304061d18d3e9d5d1bcb7bcff2ff297c48cd3c2a9930b3d55aa49856c2696c98559990909d2d966407e2dae527a39074863b15186fba55d0c33fbb46ac4a1e596bc647552447e9fbf93e70fc89a88373d8a19d3c29ce4d980b8580e5bc199b8d1f166f60e88e766c1cdb658b93a82704be97e12532141a409ce9a1767118b77379c57b00b085dc643f84a849cf4dbb0b00442a8be01b1496ea5b6f21c43d2f85ef6265fc58ac2a29247cc8ffb3b333daeb386f42b816ba68fa3373691ded54143ccc8473d279a00574a3732f7ca0217d431907e7ada6237ef2e556b04ef999b41fb5d4acd9145a54152367fc86ee509fbf088dddf2c486fbbce8293f3e248046739346f891cb428328e5a161a3ce49fce92410044922346c480ae00523cbd86c2ebc962ee95c6dc4d36447ad88668e6fba64c41da002e371bcc83d7c9f3df5685cae0581272b923ca29878e19fe6f16cfa72ae1dd24dd88aa3704ddc26e2164214e4b9fdc6a494ca7986df01c2196bb6062d34e4c6b29988c2b68bdfd96840aa8d6998ce2058294614e0331ccd2e8e86e5205a55a69db78afa706de10a4c1766255f9a71effc0a29f7c49fad73067d6486fbcde0c88d15e54f3153ce8eccc76a1cac24ba2f710aa16e1f93a1a235e628940c05b6a4ebc53073b767de18b5aecf118afef486fa033b451f145d2c03ebdf47fd8a6a1a42d05d4c2e28c6edd9c0733fe8bbf0f7d1fd1710cdcfd34eb82f80f0b42e05b5d40ae7fe7823deaf5af004d8cb50d8ebbe9b465882c2fd0267c82edf7255df91653080e94d0da44f1919241ff187219d33e385ea43cb36da7e652b3b5b9a229c4c74eb7f1a3011e2cc2edb93fdb00bf7fafbb28d3b5e4d626b29cbac94ec19a772eb7e27dcc38d6309b5feff03bcce8907f6b9720b02f08a8456954cf7718c04461c44ead0c36679dd414eb34f03f29d10db68507ed1f5d08b3754b4974feddc85dd22968f283fc83ad2b4a7feae9e1522415c7f0f818df363b01c1dc9405c5bbab8257ede9dbf02e10736c14e88b293481620719a27378c3ae015357ece9e706a8b1dc8fbb5a2dfb373f63e84bc5393d42d21eee4b5be99e6fe6fef77746049ea781930ae07f924b745b83862b6da37133aca7b6745c46fb035129352a45a7566ef3a53d5ad265421521fdcde90d29849ba7ca321206aa343902ad0efda87ec812d39f512be76121dcce4cce858ee66c743d37de0007e8a63f3ab0fab3e87a90a03377a8d1f38ee93c2b7ec561594e62b43da5862d51e14106bb162a5b54c119e03cd16b46d90b1567f4d5f22e9f8505bfe26d5affad99ba842cc72254a57465819b3484cefb02ff4324d7418f6d5d50727da163e032f275183a4b2f4950843a35cf916a4810aad2580b0de2328d41f4ff8f224cc15626a226da66ccb21869166bfb00c144bcd5d2113aaea3a6652644648b4299440a4015babfb199cb8b89eb599a956eade5e79e86cf87e4c05dc753c749407ca82189741db092ab2cbea875cf4a60335f3b61809b630e5754513b4eafe32da1e9e02bf6dd322f64155c1c17819fa76cbd196d192a7a81ec50df7ba0bd91681aa065cd0511cd05be43bd1c790a508fb131f91d6b71545170cba29c6c69665e01d6866c24635cfb50c6d24f83368342ef09936e31309ba3ddc3542b40aa63cf3ac272ea028a9bcf50b89f8c9f4fd8fab27ecc296d5c313b8c925ede2ca17576e428323b4476252e4a13752d09bfa48b6c15e3df8a3beb91f9c5237fd9df890e5af4a30bb9322d09f193a0ecf40eac9c3654f5fe88e7fd702bfa8c2bf5afe1ecf212d1fa20e1bd6236d709e286f55bb244f3521ecedc94e4039523f55f49c428442ae8a72cb8a104ee227c161b6e48d38ff676d8b262f5476040e0b025d0853bbc9a88192b927fb1d0d770f74b06b1b76c46dcc9eaa6cbce637aba6a980d1313ea76183061f793fe3df6a2c7e5badffbef0cc2d4a7272a3d781000874000c6dedb13d8e65574b3a766b6553b72b93e3fe81c85220da7cb4627ae062f90db660cdbae98f22c173fdcfeab0214fb35383f197113e96a0d2342fefa2f75e297a92e8c65b971e2338862af1a34b2d1eda3b44559edf38ad0985c68d032c45a50ab146d73e106905515b086a56a2efdd0a59bf7f20010a8a6c08021080101a806cc40a5a5e343aee2824b13e7ed4fb4de0cf1398b32fc5a5fdb22e7730f36fabf13b2fb370c2f839f5d0fb6fd3682a98d458a311083ebe20f8476b3abe63c6f9782b1e3e21e6cfbf16dad7bc61747f79a13313874ceab8b619f97b9110d2d07eefe65d7dfd3c347980634fe855caf2796d865a3258abb0d109eab7029d8453cdba2d0b99585cd8757816da59704f028b688535d5a7105a49b6c4bcb38912965e064b485f8599c31808f6b13a16ac2546a24668a3f1a9fb26b14e0b1a3dcd0250192fbc1dfb33c48631ce125084c4fdc2770dc8ec6208997a1bbc99f14eb2bc3050c5177d3678f37011484d7cb8f8d81f8f14f1b9b5a559c210e858480f9ae76408ac7431e01e31317858d4676f2550ea4a5e59a4da03cb11f68fd7091a1489a2a391616171a6ca733254f8d731ca91c11819e3135b2010f54948a3853b966d55d8c8c993e8ec1ded1efcbcbdadcb0468ce3cb1dac35561ed369d3f6b655a92960c4cf4520d0b7fd5505248d7cf9825c5ea35d991db943bb42a867255341fa9a9381389353c6004df18f1c629bf2de786a0291830c7f1f6bce65e2654f7cdbb3c4dbbdc4e62f7417e53d9e8fb1b8ff0ec4a9804bc2ea029561324292767c2c92ee5d31a3d1273dae232ceefc3168036e35723f0cbacf7ebd0a879f9f7bc0e24c90def80706379272b9384682a8d58b6cf28bd17fdc0a04d9e14b3330275eb50a5a9f1ace136a98358f985d549853045e5c0bdd61cb9b01bff8226a46b98734d51dac928c3806b1ab4bafa245f658c33be6e0ff4103cbe7806dea0f7071ef60a877757fc64bdcf2ab4bde05e9fd9d2145ff576cf0b3dbb4b0c674588216bf5e381f506895967ce837263f94095a537b5972dfc5fb6de8d99ea8b8be00fb04fd83dcb2bda36e420f9d87e43e0c559b95605a6effac66372464ae2680c45c67ccd68996e21f080416ae45bd621de88893d537b4c70223a47f8419ed20cbb6a19a095f2122b5df8306b2e1e665a5300269f399ac20a10dfa85252a3c8b70a47e6c11391cfed49f06425f6f140524cf2f23450d975b62303b4f2b478848c83e879222654fcc5f7cb0a34499e3ced1800722da54aef809a9d7654ee0837c41423145a54d1d40d22719a9f659156e184f406493ff7e48a0e37f31dd968d990a1edccebda1f6b55e6f9e46646b5cdad66de43718de1eba0fe11d43cf38a6bf428ce5e79eb2332d6e50583c7baa349301190d3e53f4495f07a0966c47d800dba1e53c7da241287cc77f5f6cd38aef7f91e751ed918af8802a768c536d19fdb15654c380171303378b6fed33cdf61c1f526f61b0c3e9e0cac4bb88de5fb55108f35d3ae47d9f8914c3d883b7a80afd4c2875a38d166a98d78169c448330b8a07956ba52845c1145a82f19fbad4ac171d17940d5c449e7526bb9f7190928123cd98d8a78a8eefde90be4ff4597ac102432faa1752b334b05b7d52049aecc0acc9934bb486300a23f5aea60a754ec895f1ecbc1710a32e559b79d2754acb000ee648ae5c782425ce3dc26a22d85575a8b02016853c471e05f189507f4ab700a5177ca1d501bbd54eb93e5c9ee92f79f79fc5377edd7694bca346cc67a4c0baaee03354f57b8d57b065a1b8df0131cb7583b1b6aaf6f8ab37839006f328aa6b2e5f8bc8488e7f90307a4917b9a0f78cc8b2b2e68d41363dd29d0f890a84f3bdea1cdc0f47fd620059c90524dffbfe9d1d9c48fedd4aed0c5e0dfb4c81b91fe9f4d0b611d4793dab526423dfab0d530dee889fedda823ec9a7213a7323503da49125cb9d93b0dd4ce641bd815a9009c9cd769f32de500358b1fb01e023b54e09783820bbb25e2009f9bd9f8fa8bddc64cdc90180edbdad11ba15674c9c8097428fc49b59643b68a11c6c0ba00d2a8a3001a9b1e4352b31c639a57698a18a049302bc95f78024dc9b9e8457723735d60fca2f0b5934360236fcf1b17c044efb507a6c3d69b05659f538eb4a97eb34636f6053f6619ecde2aabefe6409051c7567b17cfafff93111130a7f84270d91a2c758085cf88ea878e70ed4ced7f3641c67eb2545f2c76024735a274d3521642f6582ef7003840e7f012350fd514b72fa66f59bf865084857c215644edb9e0e75143b1afe221b345982588049715eb0042126ad8ddc70428928f47ed79579855383c75ab7df7a11e9216e995b1171fc55031110852e893950457e423f3bc861686908a2af5c65edb2e5c5716d27f0dc175e89099c8f3289042e2a0c7b8dad546a5097bbb0ec5a4487a97106e3b1f2cc81f966cdadf47e9fdec40623634911a9ef493476c39b3b15a29312668574853ad0202c24cead2e186e39477695cbce98dbeff3d1086144404927296824b84b6b28886f9e7924bb64b550c174dac2f806f916e78619d0b9bed92928fc9319361dafed6f682a839ea049626a74dd3accb61b028968d5fd162684a6357d5b221360cd8adde9f6ec52b803aa2c9d2f9f2cdd1223ecfeb212bbae78329f07a586fcd016f75490fc943a755ef7aec1fd5dfacdabfd71e92ffb00e823afd7c7c33e9c32f7fe0253978f7b654063bc766a23b5848a6b91d151cb8c7af5d49d2142ea518e2ae2424ca8a90684d97cc6c13ebad034a043fbecfcfe529b5cf75b6139cc4e1f3fe90575c4b8d06c07f4cc465d02f074b610be717b1123fb24245fe30c411018e4838b2eebc7c65663494790e08424abdd84e9752b0e689dc6539b802bd2daaf9bb9a24a6f322add96b80f24e79d499340823cdf69f67faf66ddc92055941b9991377ba0118ea86257132e7f99325715bffa7242ecddfe8051b05bf16f8b21df98c78f25eeb125537534032ab0b0de1b9e4c94064172e37880f05893e818904435d045369fa78cd80c2ca56779b461348d44615ab44dab10bbf7fcbb8da1f3757901a39dc4dba0de65b4a3362ecb07e81623a2d7b05685e197169311433dbee448ba93e80b0d0580e5ed231a4fa78251fa02830a437df8e76c668e7cf8394c3fa838552e82c97be755536da9372165d7afbb2997931d736d5388a732edb5aa54774adb45aad60829ea0b56d897c9060af9e5763fab6f5f231c115fe5ede8a6fefb9669b8a9d6f92235528afe5be1c19592e317cde339bc2fe9f5b6b40f00495002320fadac0855ffdb593c1d459ffdca721f624ef1d47d3f4e3329269480274d1f7aec1c86c9bb65adf4a36b06e6cad4774e7a5c5636cc6e9b1fe5ebad9cb30f5afc8b31ec16dbda5e3808ec9f5a9ad1de5fe8cd9ba29b295ca25a341833b33e1c8745eb44e9fb910c438545777ec875fc7ccd2f79d62f947c82e3f2daac82bbab2ecfa4ed3f39129e1c4a0f91eab6bc8a7303ecf55eb666c0039a9b733fb1e6d7d6cb0a852a26bc160529223f78dcfb388d6a0ef4929321bb8b561c5cfa2cbdb04a23d500056f847f393040495b7270588f2f7477cc90ed91093910b093ea510c4b96891380d539e1c971de0d352475838f22f5e4d10c089edf27838a0ca092c700f88401b62a8e62a9578cab647d1dfd53b031a7602751983f7a852f444b6a50651753072fdebfb67a86e420034492eeb94531e86652e08063233c84ab3121def3794d54189b08c3d55705f0af6d4e664188fc6115e985240238afea4eb1e26b91a0f451427b401dc1cdc816fc7f769ad463900d85563fd950fbe0a51713873fa97673e702084b00bdcb4028ac0a5974259de8657ab5b5e0df66c28c2307896103b142e4024c6416df4e4cb1ad934a348ab4a94932e75d063b71e8557e3bfea407e774c434afbda9a418a5bf39ee37e82e9780a67f94cad916ba6ae63735873528318180a8e7a9d60b366f2a8a05a2b368fd36685d1546d88218e7ca99b585e0aa228eea2aa8a896c77ec2569c9a6678e441f6fc44c4da7b3c8eb805e711adcd0d0ab0bc64cba3134a046752d2911748f5e07ec796837ab7787fb533308826a397686a53411d731d341127bd62d7a469ade421859f4fac7d3a7dc3f79ae824b8280489aaf45b7f1b73aaf82900f6bdf0340b9443f242c389449efd6ffed88eb38de8547afd55f7fd59e8c064126d094fba943369f5477d963c36fcad0eead625393ad7b2f903e7e0d9e1bf43618bfae9d5ee9743c7aa7480120cd134ab8ded4125373a76a9348748e2b9ee43ffa54548ddd175aceaae045fd32b5e94c68a131c41fbaba16667d2fd7b7feff6aa5596fe79dc5ce615f045060e625b1c285173dc9a73b99f185d4f2d279723b8ca243b95be151197da9b8597377ad361bfb0a0d410919a6dd4a3286a25a8eefa296a93fe629d8eb688bae4794f99136a78d698a8df0933dfcb5d0324b6431d377597cf0d1e24d44be50da7b00153201b21d885449cdcef7e26995d4a94227a69e1eb7e1405d79d18c4e94b2c9ac9e2b23c7a94d58f3e81a6e4b314ceffd6f162e50d1e23b846049a3a0d3bafaea480a85ce017355cba563cdd96c99183affdfae9dfde777b66bf583c41a6d3a7ab41380ebfbd63ea9181f0c65f0cfa68dae9395a7bc11cfbd5f94f1799a501554c5a8a3226712753f9f5825a50620fd1c5f5723bb34c2191bccd6eacdb2c3a0368d6f8d0c5743d25f948b9a80c915dd3edcdff42ed57d2bf4f8aa477aa7327260ba52be9d409abb573f56be311b55d684f637590e52433bd3280664215d502120e5fbc3f5763f1bd5459233776a44ec8e0348510330d8f20a69fd03962fc18422034507b0e4c3d272985b72aa94f561c4841526c15e268b1c6b8d4be47ed3ed765da7b6843605b25b1ff3741a6146f6958698a46c0f61c10c205145ce2cf79480199c94d92feeadce8a9b8c34b8c87c6f807e81d3bd002fa4945d012c1b1c2e5dc9d45f52f64b139bb436339ae7a1c4e314142e0771c28e27bd6867a53cc222848e0d292c2e70d9bd5cb1d3f9624844fbe49fe02da09161a4bff2ab56d8f1c6c3e71f8d73e706a7636b9a0b88826fa8ca7b121c5e7fdca80e3fb7c1bf48dcc872655cc5c6f4176d3559e687b1244836a2d44eb70aeb1b54adbd771984ee7ff0b415b98d5d8957032751bae77226196c48068c4287703c0beb0c20adfb11462c82f9d400bcb9317564292ea9afddc9d177b9f8386dc2d2f9c69b02f3f1fa2e7531c6c60b03447f5b98447d049902ee5b53ce9a9f54830a216ddf576fd2e17b5db6132c64f30880468fca4877015f0a28ff55753b1c535c8170335445a27cf6d07cb3c939d3c0c3d679245dad437ffcfe59853eeed91fb83ee49a4f5649563ded657a3664d269e902951e38e9c417c40fd6720c7afa30007e00710d9f3a982ca771cf6fecd32d7596b86158c363becca480d3b80a8c0b7c24537bb607a2ce0fd4c1883f4da984b8d125fc814fd6561080a5b202ca652c4e2540e8a8d48cba462d61c5039c6865d5233e36de07f4c615b3483be1542df8ff8ff65f86d61a20215b138c2b2b140568b66f216cdbd5a9a0e3592e94faba56e4f168740aecc849ebf695bfb49f234bd649ddd63afdac719649d09dce8a0f647e39906217fae1dec1acc9585f76ef418a4da92509e1aa3cc7a0d9dcf8415f0f12ea3b248132168dd3128eee5692b7d2223d6f45cb809fda742309c1a19595340e46e4b677d561018260edff6ffef213acfe571496f5a3c6e67a350878e0a453a9b90feddc9cb50eb919028100fcf9d7776edabfbaf25accccb4bdfd10955bc9dfe43e1076a980aa40af6cca67b53a85e2c343e2e1992415b73e62ce5f216cb6d4cf77200d6cc4ff87e99236dcd4c7a0ec95c92431e005e6ab49304298176cf475524f34a6eb5df593cf841b844739ec60e7c3ffc2b6f581c473b06251131d82cf1e6e26b88e2df00cb4e5e0eaf2f17700b58c674cac2ab08f7342bda833b219a781c072dbda63369206ae069bd281f1d886807ed18fe386a9fde17b18774025f3c6cc9f97b7906c2a8620581e94b79957cabaab202f045905c60f8a1c78dbb74ea34ed95ae7a1f35f67f30c2caba2134f4bd32cb4bf81e2efb72e9fdb8e57a940be50df13d04f39eeab82a8f43461918f71c8d175b2a7fe098f39ad15b26b4a04aa863ce508e5796843465b81477cc56184a9905bb325b412b359510ba169ccc0e46dc4567734de9dbaa1deda791b90bd5adea2c7c7d4ff42024430778adc3eec32115992595793c6cca2774e42e714418a6d84cc868489db3d3c1d1c934cf9c2bcc43e0b1a7e85452bac1041531e5d9206f514609b98ac3c7d410cdf717128bd39d0ece6f4d377d6eace3f892d6f973659efd1183a3a9ecbdea46a6af922a53f1220d4347c8268a784a00f1933af4f9a0dc251b3dbb3758e77d3914a51ccebfd593b07f4140bb1e08c32ad367c193f5322699b121557c2b732e84a9caf5c77bdffb3c6366238c5d5dfe6f060ca8a3699086e1f6494b74b02f49caaeaa880029005a0552542b667320a05d90f37e3cd4d1d221cf2067b045b7255fa50ba776df1b0fffeaa0a046d09a8f13520ea7e1884c5fcc1d1c82817501649a30a6df415bf403f528d7cf5b127db1805fc2549947a3e8cca9890b0fdf25378d7d136eb44f0e2aa046cd56ffc7026f08d9c630f90b750c7e56b22b971e06911946620e613d4140249e6a2fb2c0dcfdfa0c96ee8955af10f1d19a06130103cb24871a5ea018373992df2b1246e544dcb5202fb9c580fd626f79781fd7e0b4d7492aefdd5508287a0b109fb376ded9dd58ffa47a18b066069d4084024e0b0995cb6b9177ab2467af0ce72ed0f9f1f591536a17f9a93e2e4a25751605b2b76be006d6e1cf48f0e39bca6d361f7f98d52776737a02cc7ca572683c953196585168037ad5458b62e41d8540c2987cecfbd2154afcefb36afee3dbc495bb451a9b0efb15ec2f172eca85463161d9fd4ac57098d2f3830a5f2ebb0daa012a443463fa44f5905b30b26fa9149f8d860fdbd80203c856845338e72a7c1ca48ce784e83bfc3474b20d42416ddf9be1c89c76bdf1f9cc39966795ed882a8f3a274a3426b0ec6a15b3d63a8cbb4aa27ba80548a56b0a3e924d9a54974f7a4fb7d00746d03fb458829569029f39e4946b8c627edf9e41fa4cffe11969212b4a0f35990a19be5c07356ed8afd41080de013502700a238124f0570b0d371f861f6af8d093f562734b68db1b2997f0b3e0c2ce1aec980b2a03523a73f8a065dffb8dd17515f0e8ac4d271a627f6cc649415650b309d89757dd63448d97424b0af68be878b6846efcad7779f10a6ea484ecd9ec3002895f0d96d65a68c81b7699af28b66cbaa528a102dd7bf423a3a4174dce46af6fa5e98aef0105e244dffea6d8f2f1e10bcd69cab32ff7b455479dac07dd402ad69f934c549722c48980aca5582322ae36befe26440926290affef1748b5eaef807e847ed68623a4407e8380efc4c706d0fe0d103803efd7a0ef719774d650e9fdf7dd9b71beb45427d2d6f150aff61d935bddc60b38d9af1530f7a0472ee220336e96da68b29687427f09a94fc47f9d7e078eb92a3df59870e0e02f32f53776a5d29c74bfabf82fd46e713fa7b4c3544668265a4db942102b2f127eaadb57af5981ed04f2c28e7d922f3b3998dc7867199d6e4cb32f4a22b5824f9c9c01067afb3277dbd0da0c7a4f43b1eec362d6ed77ac014cde31f06708ee9bd21b709e874705e345955a125aa86e2f74d5311cba9a78219ce7aae5e392975e5519971baecd602024bcaabf4ef37973d488486e0fe5ebc30c333636c5ca131faacd7bbeb465c49094e485c672608eaf903138b8736a4f4bff230ede9176c349bbeb932f27cd3e0a0d9f0a8d5157912db833b0312d4a1257c4bbd9b31c3cb80ad355cd2a4f62834aa552e5e047fdc23c878309c9c80f626789e998095931e9e6512047a45ab4d730b75a68c22053ed0d9a2a5edd4a9caa012b03f1e992b42dbf8964036401b56ebbe680b35997231548a8632d6f4702fffb3dedb575ff0aff2ecde771a8c529b67a9decf40ee476a90a3a2f3cee61f827344ae02f3547b1e696f1128e58a8c1fd7e077e433c0a35aa7216bee91a9277677c8c2bebb3cf42bed2fc45e0ce406437d209c01c3f1fc27b61acde25cfd7b40f1b2722e1a428d05913f5c4ae9bab05de704d060715a5e8bb298a68a2231d1b08702cd7a52420205dbab9daffb0505584a6a9f449d306475bf68368ab4cee06597c703a89f4ff4dafd8317403e7d781d586a5916eb6f814ddb0375ced7d51ef4650ab2c48108ddca1f01b01800de41a5297426a54bfe2415b0a9896ccc4f3b973b45e0b1a4fa59f430e8e67b17d03368690397a457dd06be64d0279ef4751923332827abf32e7582697d655bcd3944403541d78bd5e5487623004327b3a8d984b6b89e18f2ddbac928e87c55bbea7c797a9cbc681ae257b4e58658935fb1ff87deebc755884b420fc77949c523c59f505740290e17501d871b4331e5a28e8c00d875302a306e819e3c8b915cfac72d5ff52ef5162f5953355792959dd5d4be46e54f9c38cfe9fdcb71fad9b0a02eef0ddb5329134d313a087a4aa49e36ebfdedf2eec6a723d565ba092b87d4528a6f2ccb2cea6b0f3f7fafede9183b24ddfc42467e7cdd094a2b1299c81a6fe8b7f13a5574fa1b2090c559724ad90916e0a079716f0c720ae2a22184db917945a4192a2f9765ad12132c8822fb4173120bdf6d91baf67864c8b3805fb87b92832251b45f0452139a367b7bcd5f2cc071836d2fe2c2f982d71632e4bed7682611f7e91c58ba111ba9e36dbcc296580b8ced40a7670b0759492e765edbe1f33ddc004a413440fb301096e55983fbc58ab1b420e5023303d7aab8e6fab1206044626f38b60493fa0068eba6cb974621d3152416a07637eecef4ca3e1895e2e5f79b66fd353db4babeddba2320f9eeb529148b15b6849c24313b17beff15bbc7cdebfb9dd980edd6a246df52bbb9749065f4d81e7af3daaa209914bbabc5bd40dbdb753680140ee05175230b74cb8b6c30ef4862686d18a332b41255a29eb37e9eea2e5cecc8f29cf0605c55b0b0b9553e231089400c0adf629052c9856ced87b96cf06b7aab580554e5c156dd81d564d661e1a803ca185f8b8ee7364653f827e86c2734ce9e65912b7239be93363980ad87190a4c989584f3df6940a9d1b6f9bdc4f75cfbc21566714b2e4d51e61aafaaa2f9a4494db78d347b6e93ac0e03e9a92796b3bb25b0ee85eec95784b175eed0bc6d5b502f11d3b7cfdd78a7dcd3959804a8953ce623842988c1b7abe04df5bc4d6ee90ba24ef4d85e321770f1abb8f39729d881b875bbf2731e899349b7796878c7d727855261121e33293a5e5fdbcc57134b8efb2fe0eb31ec34702913eeaa377cc1fb135a9495a0a1667a88de6086fee22fe573fb4a1e11d66be6168709333cc516326512e2a515b6ca9b0ef7d31096eb490096b32e57ddbd73fa334eb539b8f1a5f45fffe2d7c85c124588b8e645058364df45013c6cad1e729434f90f1b37507ce459f33ef77fe4644279f2cb398945c286fb4fa2bc1b5e44d5cd69faa98f6f9b9f7ed7e8f6982922b1b332a2e26d6ea9c14b8a4c403e449ca832dea4406f21399e5d1d4c45feae6ed318a7f40667b3d96822e7a6efdeb88c04e80347e73aa3cc3c361b455f1b5b334c32a3d32528ef6ca28b5ac68338627065c0aca53af1ee66880252b822d59f8d099c122906e390d7821caf20d0375082e83d548bad0f6b4e424c576941bb50234ac06bd2afc2f4fb9354ca501e273002582293af82559821a65257604ac10a2d2cce3e39e9028a29cb2452cfcc1baf2868c3d32ca3919232caedfd4a3c13309751a6b4189cfabf442cc938064b6beb754dc11198ed29e5c5ad6625e0e0b8c37b37a2781dd45c936698d51f36029f93fc3fb88d8792f998c0cac930043db8d262e6347a15d94dd128fc2b2e50c79e7fd039f8cec35dcf3397ee44c9e21dff66b4daeedfb4e6b4a79b723b2e2c2cd721587b99a7d41274691be7c8b9f8144eeccb453954ca11f7cd70628e52f9cc7eb2ac6cbf51a338b4f3c868091df803c81ff81a9447c9ab0f7d4317ea1f9138dcf0852efe907cbd28516dfb6546f25324053c83b0d0ab9b1b4ee181c4a7882775fc708c8171f3854c4ff0c76e72b0b818bd232f3aeb8825946d793552b3a79029b471cbdbfdc7fbd764cbc59cccaf67ee5cbde869e6f44701bd62c4c604019b9c4a28426137eb55c857ef92304d3d24134ada35ebdda7512067f6bd16d7c1d1ea6e0ed8e27cc395c5131c06bbe8d5a94169eb7e80b7779beaeb1d552e545954107e2decf315840c30e97fe3ad177f487c8a04a355e5c1f9efd0e5974572c222a437b23e62339d2a38b58c7fd0c0892ca2c5bb198e798fce395ffb5911cfaffe8a55f23f7fc906596089081850c362e64bb6f69ce3296801bd32db9cd1edc6f0bdc03796f28e9e6ae92afc4cd390f0b2c94c34e3f76b28c97c1cbab9b16bb1c4d680a840ad05c3f40a2957ad8fa1d49c1940074ea55eeda292cadaf05edfd22317c9d48ea26b708ef6db48c9d8ed968ac138e9ef7373056b7f98505f27de10c360a084c63c82ac0f3bbc7a047f8ddd16dd063953158369f8ed48dc878cd1069fc2f7d001fc17f956db2000718769d7eac07328a2e24793fbb8dbda5f8b515928885ca65e72c544f54d07b3a6489f22202332396e37a02e15796e6e6aa7c9e9df6b8cc2a34194b6cd734e59cb608498e9b41bf5d23d63b9d6d15a412ccaccee1cc74d9a0e7e164757dfca4a642b75f44a1d88758db6a1b28afbdbbe28bc3a89f21c08e2a0c941b5cce308421f0bc6a62455120c4c0af0238ac5998c02fea7f42bfa239d01e39007f2d53e1ae7e48789f883098c5a0f5db3b39a51e109312f35780f526f532ecd428412127d2f7f5c7a9ca0df0635e557da30e9d86f1678781bb95d089c847393fe51bf3fbdb4121786cf46ed1d2f976a446ae230842aed51786812e6a4e43d90057abe8843f8c30f811065c6e49ef26e840c463b560b3b892204fa2cad1f9fd3c6c7a25dd4db956c2f5bed0d5a2b3d08225174a108af9415e70c61862f3b51596439a98087a66e4352cd7d70b4a8b9f98985de6fabf8cdeef8ec5a2e790ba3007bc716b72bd21b8962ca9d445abf4ab1272f3194aa397e0e57e790e44cd6b16cdeb987b948532924727fd1eb25a3cec752a175c599c1e60af1aba977c25118bcf67d242b682a646d03e50fd2ebe5ea61a627603432833cafe52d6f07e1a6f45e48216bd057c25d57661af31e3dc27a018f156a273b45aca344c665ca3660b46a281a37f29dd34cf09ade186e3bcee512393adec99e1a6eb27fd4eef5a561b3a6bb2b7d6b96fd48c35aae4301f65a03548fc33d92a5ff035c618028852604a91fd31c3bf5953942cdf511c05649c84b7aca3aac5e1bf74768f926834b415eff60d5c12307b81e4ad49c22b4a9c6f0c6164504121074a1dd20a202fb877762c313f1484bb39ef5c134e705477198a5d2a42548836c9f6585fe629b287a4125b668c91d3571aa689ac66c40c20b5a5518192a0b1a458baab89c5ae738f9592b22770b647042549b23080aec0ff3f08ccb2cd85eabb18c305f06ed0fd29bdb0c7933bbe0947e709e056076126f9980ca51d6e172102d66b8fad996cbac4b70bcae218abbcbe9336e48c5c0154a6e0dcf3452e28c5018ad24ba6110614b851d24ff609673b176a62647e168be9db8c688672c2e3494e4e0553cf7d9c4ede27181a5e670264855a459b20d0f62e4be811ca87cb8681e58a21f892174f1e3b8d3fc51377cac1a6995ee6c86f5286bdf28e8266181261b13680c82a24b6c7b5047d9306ef4606dda5a1b2b8d016b585aaff23985c5d18cd9a9e03bef061c4906b0a044ac990f090bd037e86559307bf0d3b5be515b6f0b8aa4f4e582a9de1fe040f35d542c8afc5823b1ef4ecc612fa3c25e1226064fd4e2b9f88475dc3fa7058ac737ca85dc17808b649a2aefcc60c0b00bb7fe6f0794fd285f8afd029d8f0e23ea5fb9b34afc4bf5957d2b36c0b5d6ddfe2f17188e9c2bdb3d183c38002e1d18e3bd4723fa6c70be85bd26e3eb7131da6b1ec2ff3954b019f1dde9cca69d50d1d9b7469f210b1f0f9740756f426a194cdb0f7a3339470e539eda0443c490f6071615dde096f6b3ff573e3ca7861408b5dea735a75d13ca8bd5852249668960cfaff101c575071615a1f27942c93e261f0eec5ad3fa7c4e925999292be2222b1da928afda55cf34aeee8b641f8a1144a5ccc5da6c8aa23c7c937530965fdff1da838d11f7d484384b544ad53ec54ba544be0eeb27bd5987dbbde0137e10b907f7aa987f331f736638770cb509055f5bc60dc618e66bc15771d88efff8c9c6037c26e4216aeff0d2b341f48c6ec00c820ff0c8e69b83b81d59648f2f043f0b48a70e70535a1446e3c7c9f5caaccd3f98fe95ea65ec8ece3d9e7b8e836fbb1e7a44bc8d3133a1550287515f97bcaec4538056066d8a1533e00db804357404bd926fe7f193c7b41b8fd0a944c1683383aec9dd0476cc62a2c7010965da2cc016a8c44df0ab4741a3c1a52f8dd45b30795a531f02be86b851e9cfff65ee5495fde3aeae4d82a24a375eacd7a71cbac5299b552179cf89cc48d325a5418a7f8964014ffe2aaa2234f12c3e10614fc5fa4b9da994c05ca75c78ef29b3147a32fa4da90b7225702c793ccd4d68daf326b85e60bc28557109b400718933bdd62081418db176c5bd759040b7096682f592bb94b889b70d15a051a80c41800329bfb8b41c59d3c4f02494b60cf77584f2899871d6dccdfcd60fe0839d6a5d604b41358b6ec2f6a71501937d3eb250e70e8c19483a64abfc2a2624dbb63e2c81586417cd0487452c2ff059238a6eaa451ec44cdc2180c7a03f07ec146c19dbccc5e1e68f2ff5402f54630a3c5be17a2c75bc2039b301b3defc3efc291abfe98d6db6cb1227583a0f7abaa903543d4c9de3fb040b6f064a71f81cdbca5e389b4da240c135065138887007fea831b91ee6299cebfc03645181c726c72153a6bbc9ba9a6f8c7c5850475b6aa0a9f1eea1288a64977ae17646cf8c109851116d98e3f4f7e9ed2f3f5d8ef319eb333ccef576c09dcbd0f89c648166f17bca0aca799feae2a9689da6f5a956637d5036b8522a9b9923a7ad360539b00aa79ce1f1d237325b348bbede44258bb2f8b1b7119c174133c9620645e89c8fdc8e5d5a6a88fb4f5c3a8b5f050929071ba99de3634b97fc535732b655badd7f5f0ba5ed1adee9665145256f20d3a92f31a87f9bfe96c0a09307c438f7f52c7a10445022bf1068082ba37f6636beca13e57731851b118a9fd662c5e0a5a41633a68464a95ba241b97cef5d6aabeacba3d5e4e18d1fda18ef1b1bc23dc4226a3b86d32c84ca56a883012b6ac8196180bbccd3a347a55b9fc6bded44686ef8ac416bbd03b1b9b154f70212e5977f60d804f527497928abd372d220beccddb0108a7ae7ff7813eee21e4fef72c15171e6d73d13b4541d7a6838ab9394c5ac8412c35e7db7e81663b7a3384153ddb2ec4a67558180faf5691a02cbc15c03968f85fc4fff191537c6d5f77e8ce36e013d75322685e845fba008dfb2dd8771175bf0f9964106c9b7c04288a820c134a68a7796924e6aba6e6751864cc2a1943cc1f0925b79bcfd2c2cf76760e0072cfb2107e7d3ea41c349de9381c3c263665674674188c4d5bb7d4efdb8892d986564ce342edd93f18c28837e893a1f80c5bd0ee0a9e42d2005bf018b3448eadcc5364d94c6b7ae4e1f609029b5e191e9003186103f2df0603f6ba4da24702fef16080d24cd1a59ac5fda327b93f5c7e8cead87770e562da363adcba4feb630c51a839ff8d2539481e7f4f076afa835c69fc90d01886ecf70c70a46b4f1301c75feb4f6e5e2f126acf82c9f12e806af04e25290962db5c43899a77d0b8d6a7193bd3021297c47c067bf744bf6a1bd9e807e86f5b871499149ce57a72683cb710067fcdd75889d46bad7ec5463ccd75e45ae85fe6d4217da3289d0d9331ce1c9926f7f7ba335609c11d5b559105e79d9cf461b3cd2583440e37ae934561a8c2a7ee40bd630a064120a6c4648a11edea0d0054a8521363f51979bed301492bf4f458e81729bbd53102c3cafb6cb13837c8ccc0006c1c297f1cdcf38a535cc84f767cd99870db4535eda39df6c9c92352aa70c3da0355c6db5215250884cf1bc144058e699eeeb95eaeae2775cfefe23fe35e2716774e5af0011b31ed56b2aaff1e6ccdce673f124445bc8dfb04439e157097e1f3f97bc26aff6bb015418cd9476ace0c832d4a18e3dc35e293cdef1bfde508be814db448836a0950b23b77bd9413e0c5114813436668a133cad7086f93593612a81ab62adbe7d4f07ff78b4cd7f88f71edb685e25d33c800012f68fae51bad93a5cb412949a6283b969dad2647ec8c729a6ffae5b14034a28936b09c6e8c8180455c465adb4535a3e1165e9a3429cfa7b406dd86016801b5a0b1027562d242cde2fc14bfb440d20d99d573fed25c00b86fdf767d5d7753b4e05b4a05acec2be60f97c998b3a6aea27e6be940eae22da331a82243c1538f7d264d6dd1962b0c499c9bf9d2c4a2aec9b4dd7cccee9dc91c9044e0ffbc5c12bf699ed2d28f80b0cfef6d82bcb0fe543b61ac72bad344dbc023a86243219114f25d72cad332ac3500c32e33a64655b78d5173a4afb8bbe06b01f420f3fee36ed0095457d9de9de0d671650c04966232ec44a734782262c0a196d90c56e9b61961a0c37de2f7300773ebc701706c069efddb84b3ae8937e0a78ca3360b35646415fe38fa64308c0b8ae17e9bb5c03b12d72527efd2f2ca3602793c3901115aa38ee7947df0d3bfe474f893ee830322134be25b7d85c763c504f75849d13689e34781256836f60a2f5eb63da12f558b65dac6539610549743460c354b90ac2f2efec8b4c6ef0a07caa9e1240b402d46cbcfcc5e5394aee696de938c33fdb4b84370460abf921eacb3ee7f2d05cce6f360a19ff80b6681b4c583c7b8d13c99c8c191214607323f6ec9af489bcbcc196d5be57c4ca58071c54e4e6f6ad906cd3deec8e789e0e1af588c3170c5bde50c21565c538c093c0d98c6f5084790fe65f82539cb8ec898a819e14f986c0ad5dc6c7ec1087dcc6e939d4b9cff8407f656f59e7fc72e159f29ef09209b9de142fbd359c7f6882bb6b105fc24909defd74ea2102881b237ad6ea29d885cdba8a20a769869ac985aa7598b4bd1e98b62ba1f18115c091b9ddefac8259d295f9faf5350f7d3f5276f80e43ef803d2b35c167f10fe37e4e4ae254e3bb23985a96fb74953353849100b8eb7f230eadbc98dc9f8132de4da07c7d5eb835edc06b3c2c315246e79f486bcc02a5b06af8332755c244fb8f005f64743c4d56f43f291808c6620592d5929b83f92650f103646d76428a5214f5f9c635be70e881951ce3dce230ebfb755038a920cf13615cb5e53e165f82a0d28bf366b42d7012986de1793feef26eb1fdb60702a32766aae9696cba13e025caa3e740e11c4572c3f7b0a90c3c82894e31c0430ed26faf752320b993c40e92c567acb44e62318031bd1f242d96614680af9f88e3a7c64512afa9b4d2df1c17c519892a80f3d321d2d1f8882f5f53841583af3e07d4a970e2b2b42d2c6d353c0721d7dcbebf98e865319bdf173de289aff3054a68fc4be5865e8cba9568a7e009dd3d80071086476ed8bfd1badfe4c24382c32bfebb1a301aeddb70954de1d4c9dbd1bdab8228250fc30840d600809af90686cae00ee76e7d6647321c970aa877eb85d14b26224d945e355188460704c85e2c992272ddc1098d3f12132419dc0a6f9fc17917233a2eafb073a730f1dcd4242bed3564af01d88ca17aa08f49fcc0ce4cfc86ba337c90e731307710b0325abddc7bb1cc7e670d83bb15e0f7baff02a36a5b40b69b2f8cd9c7b32b5647f15b5dc683aa29b14b83d12d1568ba39d2497ff19b15ac464ca977dce2945b9eb416f41749ef1dea511d003f479a3f88d080ea09f29d4291ab387e9018e8d7ab953719853edc8c2b4daed6083d769f6f07c7d46e82c7f53bfacc8b1cc0137b6fe9939f2f7e84a4775ab7ac39258e0a0daf9170d74e6c3f3c9c90e56a4d8033ce2c4f7335f88993ca0a24c8d42feecb35c7b5b1b4687761d7171a3deda275c00b32f9e6fb3eba5acd553afb313a9da58e4de220034321b3cc1f518352c305c11c2ebf1f96f986c462eb5e027952d6a832de4f357653bfe535f032a59d0bbfcea2969909c99ad35525624d3fcc28e152a8ce391bf2c6c6818ea36adf43b35b165e5683c5bf50013429ae5a2e7c5456e5f10c4413332b008a2cd8e677f813681d754cd5e3ec13dbb03aa3088b61041e41764ba3e7600b1f8b5ce9ed9166686de05f5c7928fdf849bd0a9b72aa0f46302249a5ab939416db0af414e47f523f6f7613b63547ef132ba67c456685cf6a98c90dca0cdc9e68dc328c4aa8ec3e2ba7104290e06b2a92ef53e30cb24afc5f22ebac8273fd0f192bc13f6b50a980e7abe55e5f935ca43d4863944189866714e9c1a82c8bd586360383df92d672efb7cf402df9d72d10fdadcebbbbe4ea0f6ec8b72743adcb5fb14c31369f3210dfc8d6b4c5e19e63e56b37a5a8b5750a0f7f16c2818ff0cbbbf9e92581bf655b0f3df8276a4a7903596f1ae8826307fb7978f9aec6bb298bab4f8ede3cac45349f70544c7aee8ee49f928b7a7f597776aaf68b254247e410b429e7d936bd35ec65089ccc2aa86c56ad2273ebbfcecbd752d913dd65f62a5b947d7bf63db3bcf608053569fe392dcecdcaaa10031e09ed45e5769d6f8c3b92e128e570238d8a3c641621c0b331156bc7e85ee4dfe4ca05da896c5e557375130d814f647c421dd6b794963c0e49309cd13ab6ea0abf7d2baaeec32f733bd39988a6a5298dc31c31bfa0e78af17a87cda158dd2b78e7bb9ff12b91c2c9d67c555098c1b71c79651116bc2d1312704d885402f94b78453a1d97e82f1ad413b940be527c51bcb81d108bf94c3a9ee5c04b19a38e933a4f6fbad24a4e0690ff184ef095f18e0c3ecf87fa34097b37493fb8794bb07036406159be797350dd8373fdcca70f39be4d8bec3aaa1b9b58be42f80e0fb8a82fbf1ee8193bdb15e21e243b0de385fb22048a916a15d04554eb214b81f54bc04ac6e290899718687d6af490756bd3bb55cc6d0e530068d54fdde6243a6170026c33daa82bc736a7c77259ef557656da3a865c5de70b0c65639801719ff63c18547f64c93ce4c58243186f52dfff9556088e8f3299f048f0ed69bee21fda64aca7d92b344c1a7f921a4e90a31747bc110165bdfdc0d9eb0266470cd3614b5d003d9f45a1409327629548bf7dbc556696857112a445709731d17797932d337dd9cad8ec42525dee7b35001c80184d3d03949a99816571a809877627bc3dbc341d86d0ac9c659ac676b5428ed5850ecdaebe140fa8cc4760bf15d886aad4676ee336acd467289a26909c14826a4c0cd07886e8bba864c10b8e551038bd22d62547377320790a55bcddfc15eec7756d1faf95edeff7d651c152e9eda95c7a4bf3a511e8c97556f26556977ac193cb3a072591b94a06757905c2a6ae0d9cc817312b01e27c275eb309a99cf45dc748678ad52b872b05a465e82d98a913cec8506781ad3c74235219500a9a3b8bc5f4ee3a1e4070d0a833186dcba224116011573d956451f63eaccf12e3c6a4651c21fba6dfecd830aeb25ef97649ea884b0f8a8ccbcca14473e6717c659967544b1aa2108c16ef9c7f0d90517bfdd36432c8fcaccb806393ce1eeb5e5bb558911da71be13cfb83df90b949f6a64d57656816f9047407759dba413d0ca941e20aeb3e131f59a81b835a32cd8233f4c66e5fc4fc8a79ad8ce8d378ad52e342e91297ad599b80b29901d996aad6efef50c9854871a2d160193f4849efaffc8e8750395f7b12ddc613a6697b74e8d72f53d8101da5cd4a54f36d4d924c05704a9da68745745772018e9ed8bd476b930d0f9f92c7dc3abfce9e802a47b9ddafef0684611bc7e1557ad82b34ea3f627f4b8941c4b457616add2d40368f1be7bf28d03a18b583b6f07fef42891776b11712b99d6c89429152e57fb96f17ed56ac10ef48c6fca8922eb191db4c23f44e1ca63906a4d2786a5b4957007ba4c75ce00dd72d1f798e654bb936ea0ec54d2b5acdc95d8a3f8c55f516ecb1496faa99158f025ccd5a3f65e976b5799f3dd22d84a1b46829b0882d154ed55931b8e48a82715503c1a9f97b4f3482ac9959372ae55b1e09739b7c9336ef5fbfcb68bf31c90fb4fce181fa2ede8cd3e83357923a702086dc2a1352eb88d3935b1269f21f045cb3c9f9c6fc6e746ea9989869eb9fdd5067bf72af4ba291ca235c28b645c1dfd22a709bc4499f047d9c46b54ce020aa3a9ecb0b54ad95dba6e2dabcc653b63fe19c77fa368f9e9207588b33b85f9d3285697fd218c3e89295f685ccb6120d600de157504424b108c5c1f799d57194040f08fe83ce748b3d9d0b646b8b1fb9a353ab9548b2cd34bca40309ae93be2a051d3dff8ee4e6673fba5646eb5f63e6b32556d3e9d8036bb55c5996de9c0852e93dfe79181c91717f44291b99387ed41569b23e8e09789fe3e4b36df18a5e9518a42d9c5a77d0973299abeceba15f281e70cd5061c162345ed134b68340c37a60d719115d2d0197eb90fe09170f1b4fdb36e53581b1ddeca62c47aed61f90c547ac152854fe2c76f746d48e5be18148038c8952026d1dd6469f135bc54ff323624696106f3235480ee68088d82ba41df978c5f47bf2f497b72d77de5a8c531c6c7a023b6d5f3392f1c962ef5de45d17ae5521f062105b55dbdae4a4679a2c29fc0825f8696f79ea9d8ef454ff10c83200696bc7a3bc235b29e0c97db473518469109d3cbcd0dd188775dce184168d911fceb6fb436f44da25673fe8f8a510760ba8af0750200cd34f33190c8e9a7f46b83814a826d5dd4cfdb21b1e3404598734ad958bc5604de993055cda5f2d36dd10d8c7457347bc8ca022c6dba73cf3233dcb99ea21e992c80d7f9316a09ac8e3dc02835b3928ea3716ec3f71ece138114b1a8d549d77e20d5777afcddb5c7a8c0c5d903a02d5707fd1afd9d8b962c4f9e1cd22d852843eb6fb7aef12b30dbeef7e30d192e1b8f7c7dcb0a4ff10e6b90b5afa700ef6e4e1fc9b7cff254711c9dd04597bb31507bed87f516311f38df4ba87cf2c57ca3c619a0edf3d7f1e04efc5750fdf04fe9cec670832bb16e249ac8788f41d67a917069fbaba659759581fa2b0a10f78b926b857befb2eb2570ebb9a2295a4c002648733d0fb9aa89f35541c74bbc36944160fdf15f38f4e1f4dae35150f1f97c71d313d087a31693af164272bf145f4fc54a9d80fdb9a98a4f3325655deba242f25d70ff47702714de1979eddfd83bc2ecc0d42a052c480f704127fd0651a85793ef16bf5b6feae9951c32bf36ee52bec8dc22001", + 0 + ], + [ + "0x0a8a6c08021080101a806cc3319b5df1c8ca5bd9148831a54a296ee8692e8e2bcfb697aa49d031f4e1e74b3f4893e30eda0d44ce2fe9d902cab4e837782e18d4c7807c52fedfe4bc02605c6b0dff0af05efadd364c794527fd8ce044a42650a13242b3f80e96ac2861167c7264ca220185834ef71bbba7bf2850aa2ed72b2345672d7f29a39634b1f3e4eb9f055b7992d84e0feb2afed0b9dbdbae3bcf433bc4ee39df235600bbfab6d6803a67f434b7dda4947c4e174144e03e74714ecb64745c03d21a0a5aebdfa0fe2e2a07ffadf5344d1eb15e7001e57463e4dcd38ac2d6c3427301602980a17e1717f48f6b915033011afad2b8e1abab98d3245eb218b3eb6d3afa072a767c8f51795ca2506496cf9c058d121e88ad720e57d8af7449b4a66ad3e89f2f05f592fd9c1dcbfa85b336e51324f5ecddd0c78b486528616485db1f1f3849dc768b1cf7c219c7d6123ff5c48c3e0a96d94f34ca32e11a2d05be1542b3ac9d2cf59718108676e97ed353846bcc81ab7af14289ce7f11029113919468f000455440743cd16504aeb0d87c4a8dae61a179230ff30145bf414dac12e81604796158b2fc0bab52583a5ad52c47270977f156b37f175b6b91de7441b594dc174c41c6d47403f4f94baea74a9f7782aa92eecdbe3231cf3a98b995466d0fc327e53356dd13b7cd4ac2f7811c468951b82bf2c1b50e6c6a6d050a1c374235b9d5584d2530c06203196b0b8c2954755b02466b1c8fe71f2fb9af57f3b514c9ef2c5d96031eaad2d1314da681fba9f7eb3e545f0d6e28efa084219277783941305fecaa6d9b7d3f3d93c6e02d53d955ec1f07b7af95b139734515c88eff9529b9dd9a9c82694cdd0885b4007ee0992cf8fd100d148721cdc9af10fc6347dac93c5cb1de5b7abf20ae513eec43e03d8ed218a38e088914b58bb69267bb5b7e494623a84f0da7ff2810b3efbe8367d5235e0471ac32287b6803709fc686a1ca118a79b9e6b65586c328e33fb0d52de785c8a6f1dc56f11a90b01cb678078fdb7c0890179ac44670ab80a3a6cc6ce0415c2647099d6034fa22effb5e73fa66ba0982b849de898ba4f5cd5c19f508457f8b28b382a60dfbab22746896d71072a9e70462d29930290c38900175323c285232527b84e6793fa98ad2dcea9daf9021f09ffb6f824a16d9e96333a257a3aa666d98aa2cb589e9b18acd62839f736fb123f82a5d6b388f6044e8781166013cd47b2ba4fe8a301bf3e3a831f6f0a07c88f6c309ad90e5012c0bac243455954db06f9f698093281b04d930477ff3d50001c0bf677beee1be64a807379b3f91f5977a6a7de504c9cfea5dbc8d5188b98ec7bf50f38d8e2fc1ba6de9ab7ddbd18b419df3e1834505e564838cd761947366a20120b2bc993cc6ef457b3b1d78b2fcdcb29b1f8569fb714fa18e1f59761838b94a6a6829db2336990aaf241bd2aaec0c1081eb36161f4d644ea64b6f6d7905fc9b4783348183696e178dabc74fad0166669675645b41dc2a9927415d29b81c19eea3cf021c183e398750f76aab4bc07c97ece5130ecd53100308bf35e7688b5563153a8002feefe82a63eb540b23903c4817fad40826116f5277dde3c855e10fde07a9a54d45c9f854f94b9234efa1b020167d52542fed897960078d55942273134be864c5c97bc1035e1abd4d138bb3e12664fb0ec014185e2f4f8c4b6c2e1ab33cd935340340db53bb03562f8c9b10c8640fc0e3e8ea08f7954d529ba61907c20ecb3befdbccd522c1cdd75b15f2c9fa560f44f90a57566ae86a9c5513366d59e7ffe0aa1de399b4148c12734b2317038a25b6e8a72f21f782fec51f24d16894f308d5367e595131bb5f73cf501b3345bad54a42e06e078a1693c063e48139d3939d1839e7560c3f55e5d8ac78760df9f0bb1bfecf8c51e611a6ba833815e38760225161a6309c5359e8f1b7ed9d707007b17d1a870ba7ac25e0cbc12923883214829fac999bd56077bc48e20e20cf23b759ddc125e58a67cac34b3c01ab2ce905195d166e5429f69eb4402d809d05cf596ecb9d0d4f20bcb133bba0fbb704311cdb68317eebbdcde8cd80ec6ba20774e1b6d0e8d2b0ed6c9964d9f1e65dac2bd74a89f4a4dccc9e91920549f1b87fcfd33c24c4e2d8ff7ae59287160372b14f2e8bcc8ae410cf3be2c18149df686333217025f62b53a2df0dc6c573e1c07c5030726cbe7c78405afcf91567efffc066d4f2d76b81e8e824e69bb58192f402c1ba0bdfc632f5907daef4e7340627e26cf371918596897e1ec51f4568dfe9ed6406cbcd812847b4edcb8a1ff69015735bf4bcac011f8e5a62c85ac6be97b5b91a1314f1d37eab0e8e61dc24a155b41306272eebc4da8df6e2856a74edb692984b94af223e57dbd8eb7f23ada0498d9aed26ed0770c7be86a7320d7a534477b3b5c7e64e2229e79fbfb4072f68706fc47ca0ff4e138a7982349d0bba1232f98f39f28469470c4e0e95883178e595dcd06414006e200714baab0e5925af9d1c3313514d375280a4b0fc402220dda8621e4ff4e173142b113e40547a3598edd7ed60b72bdd22d62fdbcf5e4113016687c9d1af01e2fbb6aa0daf2cfd13abf7d36075caa2056c83d39e7c34d2f89a433a326ab01ff27953f865919be6866361991335b9f68e597d2b5bf1b732a38afcb33cc6933b32433f9cc72c7d0a9319fe55a531e744213037b3453e0444a50c36b89b699abd3d5951568d2432671310ac2960f06aca48497880546a6e3f0b4f3dd3a78cbc5c6465eb5b12a791de1b8a27e4c49f2c1c923e0eeaab94de3210ac4dfb67697a365740da550aab8704fe638a9a00c1f0427c80309c3d80956616fd36d8df1b5f98987d23cb79296247795a46b6c259adcf8fe6013f76dfa48137282e45cd102de060597c6ba5cdd64ed78c4eb5935197193ab2831504b64642ffabf1718950ab124282a4cc06bc9a2e84d52c5eb6895d5987d0b4ade4c31797591411eeb2c4e30b74ddd851ba2ef8345893efd5a146e40ecd7619e4292349a8814d0438b662fde8c3130c121928620ac5c5babc74014bda986aac4474fc5c983af422596fd88763ee485992a33708eb48ca57253ce1620447a88497d7d570eff72d1d4cb46005202cf5f6c0d477ff9ad8f8eb8e1537ce1f5a6e8d080b3b28183f8cc82f5c7a9069d578a99095da6e79080a81ed27526ee8c3614273d9050c28ebe27f31623003dfef51776e3078a2d2f7f353585a367c50cc931114ff87797c65d35c943ddb9f04643b5b079ec0767c06eb43846f4cab0095291b847fe18c4615d21d7267d0b2a8ddba6bab7515fc6aeadac8e930abc6820f5e1fa3182f725182c5b59bed3c47eac7e27db39790fee88fece2327dea6dc1887e415706b4f1ce5420bc062c0314dfc66ce3a3234a90dca4c71bfc06189edba318e23b189d4499518e7d9f8aface33cb6a9e0c45505bc3da9700740bbac0158a55caf35b93310aefbe2ca2b1d0416a4d55592ed068e65d364cf80674d6c6ffb79d6247c4914b0ae34400ec3def61b3f7d5416600fc985b6f318a1f183f5a5f14c09ccc6791661fcf477a75fc0ad9c80aef45dea6f5068f09d23ea72db5934cfca4c7ce5a230aabba563805bba4d4c27d4ea117d51d4df8d28804b1a837306ac84a460f4b8c2bb5648751f474db64b1326dc5e1c0631aed12a48249f3092cc1f88595088fa9218165eabf6e7b31c0eaac37cc005d7eef284c9957d17b14a4e41719eee641147308b2dc032b0c0ced5d67a9326d5d039ecf3a62dbda07b4ab0d6cc201e17debf69b642bf06729b25138c2745bb200854ced5758d883fe127e918bd2af2da5e899bbf83bb3a42b350befc9b1b1b25daa05c7382046e23e4a658b7fac99b0729614c60396e3ce848ce06eb4f77f0a7e6cb4124a451eaf2848b5e7f2616c3504d1c5c714802375340c910b902dbd7757f80a5825ccf8466fb15c8d85897d4d048aba1cc48ecce90ce9ac9c87ce7daed5bed8f6c79975f347a638c83a67784be7cd0fd64b95574f1189d608ab3f5728e0ea3eb70c29293f51d4b1d4498827b7fb6f968780b03a590335435dd11cac8fad110ad11dabb4afa40bd9632b279a233d3363ce05f09abf86b64f99e8eaded1e4c131dee8c05689749874766768891cc86aa3f8bb9ed5fceb4bc3701c7cc439a8a3ca92204f4f7534b87ba1197da6c7f009e2a1bd0af09c12cf91024fb2c798ce2e4a2b4fa6c60735245155f5496eec6ee836f94a5102e5a74e1c059287c7ae34a0b3a917224ce7b2e596c43475f6f7ae2302239c3bfad1802fec29300df28132e38222ea0609ab3526515fadfafeb8019e6fcd798143a37cdf1bdb434c4b8e5cee91e01d2080d5d12f8ac6ad2a3a421732fde139cbbab219cac320d63d02a011af806e68362fea72bff4fb11be197b022862a4e48bcf6e8d7a745afae69b96b8643fdb3b3db821697f77ea350c08043631a4c65a81b5352669216e5a44fd3a0d0ee1e427d41a99b7d1e0cc5c5919f92c7a9d6966f6f158a40076b8290b22c783b0b245b961d2dfe7d176522680b35092d7d2c8779e452c00f6bffe788033087a1730b7a47910dcdd60fcc57ce750cf925cc5d9c7056786b1361b35aa60ec081b4730fa9746babdfbb2640cc4bc98a157a4ae8d6b20d74bf68f17d08b6deaea4d715dc1a74a2cc4ca8031ca6922f1e434e09c52bfb97e9a66e53103180fe4bbf51a4126e180c3ac0a82c16c5cf02356f39db877035edd05d4afe759ab267c2e8869aae4c11530bfcbfc6b0974a14232e73d920a0c11bf3bd452835193d1b4084566e03bbd13da2c01db06d79b7407b10b2a91435671bd59f4a59b9baa4b7213310ab6343020c91dd0cb9f70b0919bf35a4a2caedf95248e73f2dc1ac6765d825f2d53a827c0165316ab4ab1d124ef785118b5527ddfb12b806669dc34d78547868674c4f6d8f744ceae5ec28c19be281acc842b8d26b2fadfaec839e8d9d92b034d0193e4ccf373868c5d16a7bebdaebe8c31929c8ad936d74ec5a0425bdfa507cdccf57514515ed5503fc4b707cfbc0336a5f70745640f70a39c1e98a29959a873bc90afcf6e172a6e2bcbea716293f66933b9640b864871b370d5121624c4991545d801b045904cc61022ed99c70619984fe8cb370912e302df6c01f935f13c2202ee4c3422830746f1387d9e898929d5097a53ca0ddd804120ba0195993343d70ac5db85ad93844f8a9a3e6968a27d48808a4948e74909ad4b47ec17be53364532b213a741529be98b2e861709ac8e425885de58e189331da7277d2958b1d6b76e7255bd69f8ec9dadbb8a167a31d393d9bcf5517aa90eab46b1716df454981bd95e958058747c6099078da94d7914ed6e82ce90e96a9e01bdc0110ed13cea1b58e095145289096698838d776187b754930ced4d08aef8af96829696a02b40b7c5689da27b64831024c80821a5ffe42d78ae2103ca76ce5438a264e5ca5a94f8a7308c2c3df7949b6af653f93b9ce2bce99c1f43b1a9237a680dc971f6590b2c4d4821616638bb35acaa18ad0d1534110a8eeb9fcc91e77b5dd65118384297916312f75447e5e1549057bbca2a485d12235f2e3c477e0ad23d6603c617a003f363be94cd8d99e0d00b3bbb519728383f0def22f1f77cf62c42a4dd582b7fb254bb8f342c1129f546f02bb3e614d21a121e626c285e5e995010c6bd51d252627d2fefb0b2c7399f0bdd2ab1543bed32d558fb570b133885bd1712cdef582035b2f97f7a5f6e985af60e4a5b430f0cbbaf51c66bb0ec901c7ca04f87501895a065dd43ac2352c2dabf8711a76abf5de7da151021879244b6e41638de6a3522ee3f14e74ab755758407eb516b4aebd6eeec127317119f9ddf9edc21daa0ccbe898ecb9737da00cd2bf73f395bce8852e7caed3c2bb9d67ed1a811640b8e2b36eb9d151218d0ba61b52f7a686aa694c2a76e12df8b3ce97df2a7fe4cd75e290bda3e756e79a53f755e51aa6200c502850e97bb5c1f2bd97a872a299ab4b0fd691ebb160b1327eee3d1a1c0f4cf0decb77faa7d7601cb52e54c3b49c4e56ce730c05b1c34a9660210e67599dd63fabc58b422f9c78a487cf3af3fe6f9106d4bfc1ccbc7c7054aceb4b44c971949409f3e28ad9d12c6119f146f0d00cd7a1a90333a2627a565f43d13633cfe2e970b087fdd898ccc36d6677696f6a2ca618d8969c83e11e7d53aee1e5729273712eb52b927a356a3321e8a54e8e1dcb4774410d82b21d800429e7a34cf49b8561ef6b7f48db426a6bbda606ec282768fb36f5f508d5b1a1995e7b03c5da7e348552a4d0b02a508472dc791a9aa201ecd2ffbea41de41632f4d11a8b9bf51eb47aadbb4aabb83472044d546557500ae2eb487282261728c4249cc1b5fc22f75bdd069c99732334c471a50c2c944d2563c67b93901e0304333b407a4ab2289db5a9cb0b3efad1d357e329199a3b9693595f0e1b5f2a0355a110761655f9bf94eaef537e648f23bbd57bdc53b5790c5b23b50e0003e0ac603bf9f4ce0632004b0407b87da898c0ce89ce4718f382daf347e69f873ecdc82d4151b86694782569fb114979e8f499c3e48377f7eb4e84b63ff841c972dc195c14cec134c7ed425222dbb704bb09beb8a6fd7067e3c9dd6c26a8aee5c59922052d6d1367956edf672b62245f044af38b78e67b780523b610c0b40879faf4fe71224659aba7852a9d95d87eab777dec8787576cd33b827b8d33aedfca5c21a4317c0d554fb78321992f8da9e11c286b50aa9f42dbe474c611f7f6e41647e2effe5b61282a7d0a7adae4c4a22b54596075eaa729668e731c6d040cc1429725bffbadd620757e38c57ac5ed36ff6861a75db7c32b41459f5209e709e0708a8f825cf50eff912049332f159ba6e5a2a05ceb243e9972ca4b1a2984ddbd19f3b5159474c0a6d00befc794c23b3b9160b6e57d804b506e17161dd1614e2be8b4d30cfda057aeaa5d75182cf870d66aab9b3ad927dcdfb212fa83be8089f935fa5bc21269a60a59c0d59e6914e1b8556211ce2e57d06b387dce4cd3e9aa6b6430859f823e6f94c1cbb4ec599028ccced912726679cf9ca9c40cde1fea539a5130e5756fc5750a125110f57b158778b0c25a61ced4f7ba63ed6f67ac77cb9a23c3d1e9355f1f04182a0ef0a9a9758283f1100830aeb9a66bc4da38c5047a149165620718641b943dc0bf3fe991f3aa0e3aecb8e019651c262d5378c2fb3f86c50e49f62d6d47bb90f7f10e5120aeab73c9384b8ccd23801037c5af5aba4d507ebdcb3bfde67ac7c1bc7e7d3bf632189f47cea9ac61318818fdc1fdfcae63a4c421b43e0ed36a461eccf485ca86bf5347b0c2a2bb0af6257b9044355a45ba1d486cba67456c0c606e0b654fc45462d56371a625447617409b0f1891782addbf8e3877f38e49b634a8bc2e17b47e49e482b4157cc15680e4542a5fe270fe7001d663fe374f8e5cf64c01458c639c8785227200315283ea01465d001dd031f56b846ea02dfadd6ddecd7482cc31614400d557d0ddc816577adc77347e29297a19ee21c1dfe7aad972f0a3dddce5c1d42474f205097091a4f6edefc218d219dc5304d5dbf27985c29a0ce7eced298d1970353037b4eacf69a4808f1e3ef9cb726336c970699dd83385278ff63ac472c4923927cd12eb9376de17d0640006e1e0ee90e10836462552a02c220179d7f1f9058a12be5835ff350db5c94cd2e92c5cd25950bb4760fb920c210a14d1905552f43366c98724fb2459bf0fffe5c202af3d293cc97c6c0ae1cf5486fb78e0cc0d26aed4819fc050b1b2c8f1175d10c94e6942a56b028f7f3f25a59c6cc8735cf823cc7c21859093d5accd8dec34a6dcbeb790f12e82f59b3b62ff8b9ff0a9d12c688f72e51ef7b8967bcf459487f4ba361559fa2da7eea647608410057174cb7afd86353abe59c521975a7e0ebed3a9b05b696a83063ad693ec4738f6cbc816ca03f97e4fedb59674be736e8cce508628a93511d20cd3f417fed7e10bdb5ead332183eb20c59acfb0c77adbb7c2dd3f16394fed64c62bae9f97b94303597e9cffeb7dcef628d63549ee484432ae2c5b6987d40cfff6e11b6037a1bc3e0f48bf87d8e1e30bcfbc739a2307dfe12e5e23aec7ec4802ab4e5afd4fa7bcdb3b81d8341cab08645f10947f1b772cb2391bdff0573d335f148457624116c72b20a5e53ec983f6e601dfe152e35e4b28de209f6aa4055c271cd85ea04746bd4efaa4816e8a71a8d61ed88d3791f9606b965d8aaad7741a9f6bf06d55e3d1bba1b88f2bdb6ae9e48db89f40e3d65eab834167837130a4e80d3a9838d5ba0d09c011f80aeaf5a3e8a291672408898b4933849a468b786464bbb3fb7d944e8bb9ef85d1fd671b2792d5faf68c5e307bda8df5daf543f6ecf3919a63b3d6800257bab48afe18274b8a1a08f823670a33fe58aebd2123cc46b754bee7318eae4637c2a6885d8d1d5f6539b152681b986c297f17116e17cdde777ba39aa54402774eebaf093ffebc8db90d071812c02849665f03171eeff40f527be475d8f49d87ac77454ec24c214b9e2eeaf973176654c5238cd272b57166145bfd917b8213041d605eae8e33eeb31d83069d046cb482eb6bff7c885bbb029f4dc120cb3853fe18a345ccc9281a867642a0823e5e02ef01635470b44c92b917481d93090a95a75b8cf7ffae94922a928c26846dd8df14a07e737495990e22d82fe19a2f3e06252a8b1a299a4a1d483a4e9abbb0e261b1100c03b87b126fd074037b9a84f8a891462f5aaff53ad5b09fae1459f217543ff00485eba91800de8a58afe5951b06af1e2cb6a25e679da1ced0d4e0b3421b00e712e1208e1dbd10118e81457c6fcfdaf5e8c6570096b7bab3b08d4fd56200bee44b89f3a03bf6e245a50cbfcd4287cdbf41a8820b57102ce49ceb482a9b2362e223e5a99d4efa31f27244265493066b74695a960ac0976097ca62a9c740706907fffcaf11e4501bc05aed9b3d34ed7922b740aba00d2c4e3424125ac3dcb2c3cd743bd159a1443ea5cb27d6d3d09c927d84598f37511efb4e77343dddba507507d73719d7b53a43d7710ceb196795677d73962fc2f9e3d7c0602240bf5ff0556098077be4d75230266e936b2f7eeceb7a35baf9a91a2c8faa1b1f96d9d5b8b551caf0e94420e3edd126ef1dddd4d0e0961592b1cb3b2b67290663c086a0d96929fadd74b0da3dd64d3885b2f9e2e275f54b0ae3f1edac0fe568a28108f93bd9e9d2f4cc8c6265e3ee79c9e416d4d124145270cee7b41a4f32716c9742ab6cbfe3cd6e9298df8becd717fac63c5a7880169691d12a31b0763310d7e558e2c1afa6ed8e9ac776a50fe7cae2c3100e8f484fae1565b5cdd2ddb2aac7d9062e8cb25e75311d0b447c8149245c92a76cfac862173b37074aba19153ae7baa1f780ea899d99397fcc25fafb780bdf0b43978e325a7d355721ed2b4361eb08ece897670744beef4d31e52703e0736f8846f4c1a4678824bcc4eee0ac0a64106e586fbfedbd246fa7ffb090b1e4e807b1766d0820ea328654aaba569ad0290a2195349d25485e35668ef113054c39cba9153d212485ec2d3fe6d3c1b888fd6f47b479703598582b048552f9a3981ccb544c1a4836da60f776c5f3e485a8b5907903472ca2ab9f5ce92fe2434f444970e1a757fe19843ed55c1c6489b963664980b030c034ca92d5ff3a00197db40239f937bfdaafe4b1b4ba85bf6d041b96f5a422e754ffc5705248226bffe006e8efe943f5ee74df69ce5734cee1faa4e9be43edaf5e763a5cabd2048a89936143e8489489915d6ab1a51a2d85379045c99ee6267daf8ca67991ce9189d314d61b07b93241b4fc4c7dee8c9b7eecc2b4b9e74ec89706f47dd17eab6d08bf77195f1659733e7e2384246f3024df6faa50f76a6b556de4ac9b16926fda83a686ce2cbb98aba9e050bd5fb44a66d16617b4695be24bbb1337bd0aab29f504d6d6eb89d0a949786ac64954494cceeb6f3c4c87c39bc9c3f06e321dd8c172fc355c9faa8740809e1d325955d1dd4258d88bc20e931c572fbec36f5a4e045179356486f8ee53e1401c61127b8c5a17cb81614951e5e889366ab04243f08fb481ffdae619973ffed5bcc98cad271bd882b65719f5bd3e2a35896dc4e219dfa1a377d27879d0e97cbe046ed40b629773cc279076a300bb51d0ede08e148364300ec9b2ccf809e628daaa622160cf705b7186884ec5cf45b3a297b76b8add4067539b375544dc17dab27df841036bb2d2526705d184f9727d87aadc2d352c61174449b4417a93cf44d8103f09a0c03d2bc02e345bdb2ab8923b8a074ff48ed7cedad936cb633d39e273d152eaeba3b9e381f9067a6f4b1756a1346c966b77a550cad884699a3ec5aa31dc2adc12693915f21951faeb4c91d19577a0c7209e5d3bbca8d84c605a8918cd9761ed1240f258881f3608afad4415fd74bdda742a83da4a399a436aed7133ff24414ebbef1e2764d4c34d17b8d06bee52c338b59264f080ff06e728c5c8cc9a62d41316e796aeb17783031bda05aafd8e9656ca0f004884c33f87f4b1886c24e23fc7b59fc83077642245f4a584128111721c9aeb19fc6cdeab204a817367f04453ee8b58c4ebb16c7fbb62116f0e10f9dc288c3daf1631cb3e66ac5e7a0ebdc60a35ea7b486ee62c97e10e59a93837fd7e8e0e9d53c79d666a6432d1c78127ef6cac5a4fce8e85407d651b6e6fdac8283ba50512b8267a326e856dedc91489b2036d8cfdf3c571cde2ef5a4a6228abf440b43b29bcddd5a0237c002bb1b2a85378834ed97ccdcaff962da3583b1e63d2ef6b391b887d67eecb82cee4128e2f71086bd5762a1860a45c59d94fb7e845cd2f5416ac1f80bf12315190ef0526d532a1e9d9a8157fbb44a7cfee66de0a8b0480ea16dff23b4c9dce31131039aa6f6af41a772ea19ff3c5df7416686154e06c6e20424daddeafe3e6e6ae2cafcff58fec7ec45b288ef73e9916405204f2adaaffefe6a5ecd93ba602ca79223f994ba487f99ddd8bd0c35600e11048789b279ef585d37e62ce1d1c437239a58511df68bd316063787177f8a91925176f69a7450cb03828698ca31905a27f98318cab30186d0f34e2ff45cb365776a0f94f5e44e0410cc051e5b96266e26682fcea87604d0d73361fdb9fb957d31db5b07f4b5d97b52ebaae31b067359afb0c8d68dee37bc442cf5ff86b05538dc8d31fb7768cbd3756490a30d194065d849c57e791287260435b3acceca1363b96eaf52bed43cc6ba3b554403a47beb7ce32bcbcb18c56e6d918e36f6b420640f867e4982342b57ae1e2126f5bd1398913935af5b57852b8fda4a277cdba6ccd850ae578ca2622af0896d7872227f029c5a9529488f9ad5625ae5a7a6567d87e8a3a84329d1b9f0c2b3711c7ff37f14ab6f81780aaa7c7bc3434eee2284f02dba4110396697d43a2a3b64cf25dec64a2c59943839ac1b45a059f366236ba2c0d8d7a42da04684c0b212de066ae4cb8de50ab1472caf2d53a718dec4d64e31b2aee32616119d8a3558317237212d18d2ffc5e0a5616a7906b91c888ac6a76f70a15236beffee275964268ac5f91e955842d91c2bbd04c19b1a8a9d5e6df05bf224aca4517d8db9f0b9086b3a053cd7f7a15082ed0413f6eec98088203c78e8ded7192623329b4a533fabff89b89cf100ca1574ab15255e84c2033481dbd5ac0464b1f5e79731308df18d9164b2aa51818ea9dcc058fd8e983d38d7e84f89483c6c03ecf65fbdd4f3eed1f654eeadc7225faed914478ed94409689d216f03a306a3c52e2c153b1de98d7773266bd5a5e930868620c9d20544b2b0e157abc0c664302bd0a7bede6cf157a542407aaa30895b57515cc265e8d571918712c774abf68c42dfb6e5b67167d1a0b03d49d99812ccdcb4907cd6ca52afb9a82b17254250cbf56c2886b71cd2570168310ba7ae6ef46520632686d28c0ed495629a59b361004819ac13c8b1b27735ada548b91af4695d1247034ad9af3b2ba6659101b49ab3fe3276756e7ddca48d0d26cd4f5867b8ecaedc9644a9209b00fd076bda19e15c3fea4e02fc6159c5b96b0d31649c99928352eeaefc3179f82511b37f7a25739e279cbf7c3eabae2488bd0389496f3e4112536a473bc1233f27b472468ca847eee082a6afa4ca365a87362603ccb61935101c997b7ee946e89d47abc3d0abd883914c194c17cc17b510a19585881f224e89ed237a90ebe2fe7bc47e7274222b7d16ac9d56cd007c570a8f4f9052babb73f899d677fa2edf7babff38e5f718ed09b8148d4dc5aa24df54e2ad34067b91bafabf89dfd19a4c835e9dc528565949bb78bf1f886e0e1981d86e3ee9103240ac14981b074af45cc61c40f581a4ba630a920ff9e14b5a8ac8cbc1ac2863a6a64f144add63683e1713f5eb2edf832229b45912ece8d971ee3c3773d2653144847f6e6ea89449cf9cf1a7c6f0f676dc4ad67af5a880979fba322dbee26725cbf57971281d6b87a7cf02515dec94c7618054e58dd5937498f28f752e46157f7a232437c3a0cdb4a6781a09f91485392c11519f4618588a03aa1c6bff54ef2225c1080731cfe30dc237a4cae3421a98243d1a0b42366ac9256dac8dfe7694ee3869fdc28967caff931f5a7400f50d42b9453eda8b9e29bb9eccbc99592b87f26f42904fdb24837503d47e1e123a5cf278accd82f95ae3a0fcd20fcb73f4d8e4cb9eda50863a84fe21a34da368889f814015122fa33b859dd7de701b3160383223813451cdb5534f966a956efe2218fc9cba9952b5f6a9020bcabb23e1c0028e0b3f26a003d169bdac4f54beffa27e2f5f9cad71db9d3a097035acba205a9c60898338da3f32fafa4cf5dadc2e70336f4268518048b98f8637640f0ea45ad29646fd4fbc270b661b5a5bc596e0d1b2207666fa6283504ff88c21563c4b03e0817d3e3f4a9fdaf1ddc668574b2341c6afc67ae3377322ac9626c85e088cac7387234b7d5743ef93cc7df7076bcdd36de3e1deb00c6a2e2a34abe0dbe8fc75ee0198ce8b14ec8bc5d6fb211fde84d9629babcae5001ad4e6ec8afffa9cd02f355b466dcd8a81115f98ad896cbbed33c8dc2d3247a598e4ae78e2277748ead8a5071633b4512204098c4d9a0b717125ce53993759fb12abc550cf1415fce5001c397d9629c237a7a3e609317db5b3b483d4e99331100cb7f417a899fb92be3f6546aa3849314c863ad1d78c74bf97a0b79a3cc8bafc3ad58aa6a5da5ad8d5fd09a9d679d96d12d4311da3591556592e381e9239cb77bd66d9065d8dd2616d2807b55376d8e907ede7f34383cc0a53c300c6e6b6a498fc060f871305a2d560f926e2c7ba668452d73d44af62d15afceaf2e939cceeb50bc98d079c4482da75636061a334c400892f2b1ee1da8e32c7004e5285737c1b311a432f2b4408fb69a15d36234489a7f1f50c451d8275f4083a9124f7fd070eac8be98f16a0c5f467f93b2cb5f283ed0dc022a45946e5c46b39e0be9bc844164ce032b430587e2419752dec1b67c5aff5ff72758965de79b5122b80ab292b4704a0ae5ec9b3176e6d647627c53f52d4e363af7db58ed976ac4f63adaf19775f297e599c01bc85425e822d0c3963889be7afe7aa9584c912ef23fec578f6efb4b46dff66bd5fce6446f8a1f880947c33fd81298539b63f2b88881a2d4f064bd945cf598ffdad4dac5e70a1c386f2fa9a92d3fbd4029e27018c8dab866cd313fa045ad914cb1ce7f9fd727effb3d9d34b12fef06c1c0db513a2715d9a247b52de1005d87ba20e3bfc3b06986021c4f834cab4c86098d7549fa4d26fff7c779aa1106090a4be096ec7bf9b975af6f4c174282f4893501dc462b5f0d3e9c56aec1f65c489a77bd8429c180b3094da23b098e620ad94f86a3bdd87225ad40cdf07f291a06c909dd9202ead4266db2d39cc52ab7dacb868f967bc01b8e79e125e8f43f323cb86712a0b94e12d9c9ab524db75bbf49c0f75b1cf83e3752a2de2621d5e3f9e469f6a25585ff444936a12f2d704bd6365a555a4e182410d9a85d84cf4dc40d57088d06452cad2457eeb0792fda119b21625b0c048816dd5356462085ac82c81a6982fdda285d5fb14e87d11edbdc21e4958db8c8083617b3195a3e74457aa6be4ac12c288b6d999109e6f7bafcef8b669cbbe352437b3bb4803628e8e2fa2282b677ed41afd2a48550f80b8ca281e8f10e39769df87c51de50dc550a9e9bee3ea7eec1b2d35fabf2c3fb129a02a895799707a36cc192a1821dbeddd61323d711ab03022df2a438971821329ebfc27ae89b468a9ae30a0a8dfd4192f996e5afbee98e0fcf82d0885daf4f614a03597d9d873b2a0c4d88d02cee84e4037c3ba5895bb88f2a6979789c9a32d68612cc31ee8f9c39092d645913feda93b53b44db136b3576a3c877df9006651ef36f9712d306ac6ecedd2f3597c93cd8285592a85eac0223bd3d5a041a66bfa6864901f9217f36b13f6c8a47772de206e27cc6802702e3011549d6af9bf6b14bce532ee7ba1a1a1fbe15f3732b8ed806af1108e56d43f20d2724f9621f307615eb4060412af5ec7d9029fd3a339e5d9585268005268abf1755f9be78ceecb0bcbfcb96f09c1627dc1b22b28597388a97f43b1dbf0203dd6654a005a2b6442c4893b62a28534c49f1a234abc94bcaeab075825e599fb27224e4254099d297e2a659a79745368fb1f9e38d042008fb3e035c68ef0b799a3c14ad38893b63c7e189754128be43c9130502f2931fcf910729edb2d3ee71aec9df98d269730df66aa1a0f5b7043774b2a3bb4d57761b5ef702fd35c35e34f9b0f476a83d32295b48ec62e42ec0cc4fe0b9e7f1d3b205a6fbf848ed347dbe3d339a296d0b467783119f6cdea07be058c64e9c96c781f39a214d64acbaae211ce76dd6bc4aebb365bc3917ea27cdb53e5849b0dff068ddaef33a9a3a92000fe284528c9f591592bfb98fde74246e08dc6a001a91118cc9ca9c05186d3aff33d53d0577c5061ddd3ca7ca5bbc3dbe2ff63d54d23dd3cb8d12a4b2ae65e111b6b335e6bfbcf07cbf6663a179b6c21d8e5ad6b678223203c54083e5772671474b713185378def76392c934dd896755613b3dfa3c816b013922db4e77919ec4e4be1dcd0ae98d1738e53902d4ce86afc184b21f7da1371458bf68dda0ddb25c486bf88d754c1e10524d067f9d77af7d0220652357de578766af2676fa2a22c9dee118e54a75268a0f15e6bc825b0f7d34cbe65c510eae604d3b987038f45df0b4bbff97629e623ee14f48b893e66186c6edc961ab6292082d3f368ed74f663272ea5400852f09d5c6be4530b99b87d22b05aed8a646ca8bb6ea29c66f9786cec8566b1f1ced4bc7b933338d7076cabe2e2d7706cb30cf63d82026894fd8929766e8f5b622ece3b29a52971de73cb9c50bcf76b259302fe71175ccaa16359556d2162be8cb9e6fd7e3d4ad5d722fe8276c3bb3b19e15ec4bddf4b675e22d26ab99abbd23b818eb75d41d8c3d250ef239434f7961176de77971a87eb245aa2fc652796e9dcb2f0d021315c8f23b5ca5338f6d6b16625285b4f5f4f1aaa46bab1e434fd885c0e0532127d415047423c6dbc753e3385514a0acdfb6d5ba988ceea40db458d2b4001c02858b62654d736208d0a954a18174ea63a48c0795f0c27020715656d0b049fbf9cf3630ebb4240cf69824e10da3c6744866ea20bc07171fa33598b4e5ee5eaa5d59973886524f278f831e8b71787dac358b9a05c271289496c842ec49865f43e1e1d888afb3d85b3a8b74c17321897e3c5fa8abc51844aca9374ff066db410e2a4b45ddb2fabf1b202c2391fc3266accbde91a95318f35afb69883ee5ec3721bba12213c7181de23e6651655d2b9619d4aac08de66989afcffa2e5c1ee67b04958fa58bb4bdab3fa299a97b59e499721817e83998478156bad449558b11200234352f3d33c745ab26ab111a073509a90c6514175d295fa71695d8e485290ba63f136778eb864ad000673d4daf53e782a5e52684892aab6a4fd0430e404ce4195d880a0067018247ddd2cd07f4b19a8d65369e2aa6e74e42d5a6b32ec3ec32f4a7480f81358ef84ee201e10cba1379897ac62df5b359a357e344efb72763271157da8aca1bc9f4a2d39ffd4173e89dcdf6bae37c43d2c665ed38dc6d17e38a0f691cde3fa04d3d9c1df7325131c7734f582ccf15578fa8e0c6f3bf164bf2896671e624dfbea87bf08204041e6ea5c57cd14ac676ccc0727c8d55b14c4a1a6f3f227912686bad380d0bbabf3ea10b44efdf8ed6f2fd359773fcf4abec3f7f3ac6feef96a33e0436fd632969e4e127b4fb7579cda127af98e56160be2ddf7e6d8b868a8491a0e25152a6912ad6bdc561f63169315cefef202575fcd0b9c7de473cf3a447049292b95e08c0a3bbf5a969a7e563c3cb016da033b7e5e68ce78c2a877cb2ba806b21aa5a37ea175d11c3b548e1c47c6460d91419214603862f6728861f8f36d2682b1f177716857c3eb345f0641e569e31cb992b6c2046fbf083adc38044bbdf17bb115f707a7f72da8503fb6aa7a082b2b1905cf35d416ffa996723a23123f5567a5c9cad55cfeb470c394123e2874c27cf9ec3cb830e6edc2b66f43b4342f45fe260022f175e94279e2a202a18a052888aef459ff82e1505fb343869c793d56fd0e58555dd28c87242147d81787c57e1f8a964a1e8839986d308f0ad3f9acb65109eb19d821bd58c19cf30e071d8132a4cbe782d4054b870ab71c8e88a47c934644cb3b164feecd2d54272b0e4d54ed9e7483d1309d3ed79b46ae1feb65abe11ae879496c10a0479569e533d78b321b30242681f3a6f6460f608d853b748710602460771c578eb6c4d7c0ca0b8d46557947048d5d8c05c80bc2f12ec3a2de865047ce8e8c8edcbcd26ddbe5f25ffea6f7a76d4b693bed20f69da7ef5c892f4e78e53b6e68ea86e83f0da67b7474244ee0f4c71d4e10654ce6663bc746bdd984c91fc47c9e740b70635f9365de39652f1c0ba24e6d5db5da3c0203691add207aa9ef38dcc261d97497613a3663187d01ccba51793ee43837729b070168ff01c2e33c57f91c962c621942795223d4700025175287359a25a9954b81591e390ad580e88dd0416593d1022312294785d97e1854a797150c19d4e9467dba068a8112434ce4f49a7125aaad95050b68c40ddbabe531399870ea39386732f30ca67d1d6b59bbed9c55592ef67556d054c05741c5a1afc3a4b0a34f4e89bbb7d2493966cb0c473a0a6fc40cec1f71429c7a826a286c7d84f1f00bb66275cf6f0271136e7b599a06f95f7158e6f432dc35686aaf6c3ed3e3de856abb88e80552c4f3d2a3bacc981b1a49d83434c707fbf7fcb6bdb36ee4159d7a59854ede3b8dc21759f047a481041f25fceb00cdf403efbcc90f82b39e2ee050a105043e7e22c6eb6c1d12ca8b5695e109a3f4fd2fbd56373a4e0f34229d666abe0d1ad62e2a66946972af508e888797ba4b913e7c659b3f5715362e953fcc3494c904ebf9e86352845985b23e4e6cb642d402b2382327e8a25f2ec616ba5f7b42ac1192f862468d711c66662fe965f8743b8ddee4588a00916a8d3ac82b07f2ad78cc4fff6897a0a4b14881f5c746b8304a7413ae2fa5856cc75beb14d27b7d966b5137f658520acf11ddb4ba8f9b2041d906179c03c749c90a2a53d4a2bedcac3ad680e17b585e2348005d7f7fd1b2c72bac3e9512195578b0721215819429e59f189e5b681e63b9bb0528565c6c413e8fb06b93385b446e3427e1189ee0f91c97605d25a244d4ed63d9c551c1851af75b38648114e0592b9cac74cabbf28b93166fc46e336c065d1f09a0f26cc6d0a7b480fa52a79ac6d006bd4f95eed6e6d47b5eee066da00cf27c4c2a5cd136f36f48c20d81e1ab1c3aab6d6cc7f8dd8bed31a60951818fbef26eabde0d93ef1b1d4b206192ee0e3b484e5c6fe603891ff507b01e146bb674b457420031cfdc0809384daf0901afd58e429f32c25d8286e1c70a7b7a126c8e3801ff4d91c71f33ad2daab27b30397da7d104314f84391744de33a67aec1f47e3e933f142e42845b040fa2682232462752d453f84eb8e5aa2e82852dbcc64490c61c98cf2bb0051d230a3d726426fb8857404962951f9f1970c8f708ed93fe4ce9e8bfc7262f5c120a133f329b0f005f4e5f59839d3e007c027c118bda957d8a6eb697a832656a6b17750f809314477e5032729bddd47c9b7c6ebc2baa0982d6ea1275f5f16d9a3c987628bd3c1e9fe558816f044440d1ba2367af1044afec53ccdbe042e8c0fdf8fd772fd9cc813125b7b5e9f0124fe15cc920cc0abdb6c8cdfc67d5019167fd2cf5d060cc0b64a6aaf03423a816aafe3b250ea048b52835991fe9444c5c0ff4e94859d7c881c73708876bf3478e9817394eb784b324b2918044e51246b9b4a108a89b3453a852d3d40c9851f573510f58519f4beaf06b4b578e7d9bf346a621e188a4ba4f3137d3e9dcd83ed317ff1971eb42182f0b8c70b24ecab4132e01d6ae65b149e18cdcdf50c05038188b8408e87fd5df998fa6365406d820a7abb2062db37593c31ca523db22827f761c8d9ec4a8d2c1112dcde7a8f114102a10cce708be77755352ab9f1c2b980ad6da6a0c046ea024ee92b98296b293264200daa4398b3731764fc6d68a3add782567186b3ea8673f84e54abb859cd81170377ff3cee91e5cbdb3e37072ef262f698eb43c35cd526b3525c4dc6468cf760bb81784911fb513846274946b05608f687c4dc970e5d2a97b0532fdb6b3bdc176fd4937fbbf1b18803762f2bab1abb0a46003613bad8c7a596d691d86b909f6bdff11ed62fdeb2d71b0ca8f1b96519ae532d8e6c4854b3615f2ce1a9b53f3f1f41cd733f647a04076370b524fe2111d3f66e9c85a936391ac4b0adc0df553a11240d4af6ebda207608c473db8111949b756b46dc26fa70c9e80988fccd0ec6e2ffddbd3e12d8bc77fdb5d87963d32dc3a9f174510f530d3157e9abdeeb0b72113abeb945faa39f7a0f507f8096a7a6da674c49ea752d46936a8a812d1a4d475ae349942f59def4c38147037d89956127c321ae16722cfef8107fa7248110861605a5961a37586673f756b431d169133de7340da04ae9ff00f0e09385ccabb3f49a89c8663eebf6e721f992b994f77bdd81db84c6fbd21b2bc609877aee6d438da6b20f63b5cd4b5f96f7949312bd9d827d4f0db56bf0c2959c600986c70a884262e3b1d889c25c5ec936f4af59040009b7853603ec5b88ff07c3f96c6e5ea62409b22ce6898f792c222499a11bfcc101990ca9082eb6808f85acff3002adb6b99c344b13b489967fad0689f30e975baa23dce933b136471dbcb07a38d04e0f72cfd13f8bc89e111b42cf1e453871462b93ac96b7e570a6db3db83f9dbbea7b353b6e7f2b36e55d6a88ee220d2a2796d448e305820010a8a6c08021080101a806cca51809f6fb028bac197a1ad2b2aa3a9ca7e1f29e640d91fb2e89476bb2d14e4b14aa2af28ed8f66e884a4dddaca97dd84f1ae5cac96986f514152806ecf71c7b2abb22312e4dfd3aa6b2acf96885bce250bac75b45bfd5bb4ca1b140e8be097220474c23fdef63d7b951105a0745354f3773a4c04848432e10dbde3033aeede189c1d1c7e08f4557bdfb708a44b0754eb183dcb47f6affb554c7d4b851162ee4e5e57e66361311fdb7d5f1efd942199107fb61e477ce239e1badc0180b3eeadad1fb7774d6b2454c1e596044063767c21022066f563d4d49f203e21748961109a1cc3263856897d41d7fd7822c6f0c71f63c6f40e3b9d291005f94ee1bfe29405c89f19d28f26a2370ec9cf9167a2447bcafd8627b8d091756ed5037412795a19486386e1f2250c80f42b758d6b284ec3146b369387af07e98ef39c1fb536579ac9f39a3f1c809c5ee3d9b6666ecc7edadc3c45e4b9cd611b33fcdad85356c8d5943027ba91d3db8fd606503bc47aae6f430b62a15cb762921b53bb1e72a22062579865409eb70407bb1984b84e167f799a80e66db69adb195d58a5005968c55197cca467679ece0c80ed94976202fd0eb34635fdfda421bac7064769ea85cef8e8f9a1c89d59146ead0e7ed5ebb2d74c2b75fece75a5ac721892ae2bce38b12d858a61ea386a5e811fe5f477e2dda001e6bec1adaf5f77efd7a97bd1def6742fba28818a975d06cb74c92b062578c65fe6299a85f28a7bf44318dc3c81d6c3daa6f01693beeb5b00159583ec2de1e8e350a4339a014001ff2837714cb6dd226582cf4b9c5e3e83d5ddb23eaa2ad0e9777fb73fd7ad34e7890ec4614984a399ee135e6ea168c270313574ab37537d421244832c8cce09c5c1d74d3823014167f2e01f5a33bba2b7bc9cb7f101507ebc27cce5dd19288c8ee68828e1f191dcba7187c8ab25aabb33feb843e6c0c7325df43627271b3017fe27c62a6dd719c9c385fbf57c5b9a5f983f44534c8371e181eb29c168cdefd6befe8de3b7c938e6d61496cb92f3b141da2707d4570fc4e559acf912a8be0c2eb8d8958f8cb73497da499944377f5be83d8f0d54fbb6e5d76f0ec714c0177dcf7e9455473d99e8e1bb74b8273e14dab62890ed45726a1424c8d360c600c7cdd49c3b0559131e2759ff11dad5448b56a1191819b7ba7d70916d5b6b75a4abeecf14253e6ff71dd36b001ab8d10479653a64a3074775be9251aa18bff3dc236c9c2a12aa597085fb9900763733d305ccc10c21ffd1d8f3a128979f3664de4d7eaa87e22ad62072ca7c729d2acd682e66b058e6bca192de134e16803090537f797302b277c1d256d72b71406d30150e8ccc2b555f81a65bc7f63ab80cf19a84b1b35da933a5ad46d35ecaee9e22a68891c11157dfcef7773b37ed10b65a56dd8931e7e1aea10a43c0d42b0ea6aa017fe9bd0c5d9c5c1c7c51c51ead05ef77bddc327a59bdc0875d0b7ef8824fae892f46855e342af4cf8424b4bbc1da56fbfa735d56a8b5d94a4690632a56629d2a4b2b0a634f83bfc92cb77847fab265dbb4aabce07f5ccfa1c397cba9b627e7f9327b142d0d9aaf10110573a9789d2edd6a04f6506dfbe1a26182948feff185363ed4b8ae595e120a7098e6accc69df8fef256f2b0fa05d212670f4d55830843ad59b3829074e55b7117c2ea91c22092f6ae0585e7eb1d569d27ad2c16355d5a83df7805c5645ca2ccc6a20215c48ee0f0ab77b3203f61e5916542cb99fedb1e3e18f6d4e370cc2ca73f2fe059688047a4a067d626aa1aaa03616ef8447e3fe311a583f4cbda175f8b9ddb3062afa626d582f21753deee94df19b0eadf9ffd72a9af623b902d106f7322d94e8e6c8201d053497cea11a8b9a97d1e76b8d1c4f749d34c268f784e1d35ff8504aed4431140087dea1c043bc01fea4c5000519d7959720d9e5e45bf9a6c74890e04d44dad266df3bce699dd25e462d089d272d65cc3446c8b33bbbb16ab921b20e14b159b2beaace745653d801bcef30af5bc2a76816c02dde348a8bd4663350742f682d22b27e2b4712341f23811e151cc339dde6fa637137475ccfd1f02cd38f212eaff8d52bf4229647eab61690542f7364dee53fc41ce629a22fec802f41f52f19c3047ad3e85d6175486676cfbae47546401c86a7f5dac96cb65b194fbd3a1895d4b5cc54cb30594d81674a1212205214d624e10e0d300ee36ad5c2211191401d28c56bc7126d3961dda7532ebfb05a4ff206374007fe49968bb2fb8e4cb2d95dfebbd7f207fa8ae6fc535564e6cfa76af8596e56138af4b685b52f7744ca12396ca78e918271ab1444e65f5a79c3327bacfb8280bf5bc54b4cf3d1c03b998d7d9b2487d9d42b1405fb25f9530dc3f1fad04863d9bf5cf4bed1102be34883c7f1dbde224a3ca31430438e1abc23490f65f8d39bd3b0e79adf91b824191a16dde672754392b857a245e40979d2fb6226dea5f17e0d9c5b4c519f1b08bf9e32e314cf4275fce2031cb3977f946e18c2655ef6fb0f571826af2a1cf9a1dfbee4c07bc13659b609751e227a30555a43862020d4347fab9812efa82f235e775c6f1e29d9371db0592a9a4bfcee6d7bc779ce5fe11fd558dbb1463db8889e7658b9f0d2d71f4c2bdb3caba1a73f785741d3b47af729f390760dd8b67587b06fea1ad78fe61a2cf6978fefb282b0df576182fa3077d8c8bf722b8f6a26f889de3326c5230c6293b6e18c12c73ac42799bf91acac3484696b724c0f60f060a5cfd8a52187af85f4becdb7aff67bb0c5ef57b67ca455a0cdafaff7d96b267d265ffc0105f57de09922ef72561c82e16fac5cc9f1b3f968e45990a5fedb3403a13d8b577a6c2dfbeb911ca924012763d198b902378a94701b9edcf5a48f57d1c526598f9d678e503769fcc2d7246f955ae257efc44cedcadb44921f109631cd8987eadea41bf35c54e44e23accdb5c514d6622b0d51f4705594d272c6962481c037bf15b0e50ec42e370ecb1c3202c8ec4ddc36beceaa2f505baa3a89c1c4bacd872b7b89b99e9accdc802131c347540acf30b20ca42dece9f6549b9b33416426b4d67aa7b1d2304b0d3d3e606e1dd225b69a865e8916c28b1f8c7a8ec0213fd421186838a69bb38a2d442168e29cca916aa8c9cb133ba34e739ea93d54fe2f58ca8d24210a59193b9aecc9ae7c4176ebc07858c323788848611e4821f2b57213ac290314a45f7f31f2f68f0023beb3f473844c19ad281672b3aeda7005ef11baeefc492f04eca6cb6f0925c62898343958a5f10ee828bc51c7e2bdd07efac5eb9ff41d1fb46f240ac837635e964ecbc431abf57a9eb681f720ef661edfee907d66e550327f0fc61af0e2489b2232a543fa5b4d8bc75cafae7db71ffd3c555fcb5416fe3d7506c5e03f1850785605df8c6fcd1e41fc485f12d421980632bf85a408c42ce430c0688a2f2062be7ecbae4c319317285c2d5b8bc66087e6c892f1f85451a02711aa81da20e8d3c6b8d0fa8779f8ca2bdd4af1cb83dddeb1de43d6d9e2c1c26f91e216c26517b1ea54d36a4c2bbd7f999b1ad2c3f6f9ebbde6f2fd236519fa12feaecf9796cc8cebb843edc166fbd2ec3b91c1ccdefdbe42b22a938118b86b74c821d974cd65e14d5c7b384182d1ecfa22670d6e818f25da7eace1aa80c0f5ef7a208da22faa029393cbf52687b80c02de2ead3010d86e2728dbc031c88253a3977f9b6228ca760b29a47d1a71a1473058ca7c2c8adf38965b748a523ee9c6d44a4f288da885258bea149a2f3c25f77bdded0355cde33b32f55f1c9104fddbd13a17fed4ac27a1f798b98f7f9058b3d8ec630c6d1887c2c2d9ea89dc79d6e5d1b0fa202b6e3160c0ce1a0b6aa2456cb9a708f9a8480d94df87f6030dafc80e5f51bd7181065309b20bc156d58dd1ede6a73fe5b970e7bbba58e615841de209b560a6464cf381624793e2cb3012eaefb371fed189e1cde846781341f965d43f59f1e234b77e62cab81dc3a1a79d9de9cd64f7677d5a14fd7b1c50e91db4d8208dbe3e1ad67399e2bb9715b059097f47134d9bc8dcc91ff16e60cf084881db05059b747e275a880fbef8b7271dbfc354009f832420736f0ea70c015f2dfbb46adb69c20595baa9d66366876e843a74ac92c0647ab29e16cad1b1d76615741a547963d172e56fad058d4f0cb9281ba78be66d9d09cfb1ba5971fdd077e1a2bb77942461f04da4f7fbee5e8247c3fae0e7fe664f2f564399496682dec224a9bf502c974c5ab6318bccc127354d870f3c94659988be135dcde6e804b1cb76ae44a54f38712689b0cd86fb2cd2a4bf257c91b6cd474b629d5616d4b47ef282d1b74d633749342963c424b8cc3bd3c8a944e48ef888755d09571e3e8b86439bd7777cd6dc922f0dd1a236442514ef8131c628a0b73e6841518ec88f693f1e16d8f39a52706c631e44d20e71894b00c1f14b75a3e58fdc27dce0581cd46bd9ae66f54520842ed060d9eae67230c58df9b8694fc443d4530b51e7ff5ba44a3aeed4ac6b7bbbb125075e1933d7a0fe997296b12f0136a6cf5c78f1c24560f4a0c99e1038529c4f8f3244ce2ec56132cf45ca12989a6ac41a897f34d83c0168ca71c83060097cef3cf7f97b4d78f1c1d0fd01c18b4ef5835632bf20080c579d1e82e7d032f3c1e7e9bb295c8319e88dd001c69106d74e4ec0c3dd5d24bd1cff2c287ca61ae5b45e4d2d659233be3ce6a7c232d1c535a28086f4b1fc1ae25bc8196520ec1429413deb2d777b35069304a928c12526d2b4755ab052011a0fd6b5501f3193ac49b37ffa85d0be031c972d47e6a390149a08d8a84314dc3fb086cf5cfb2ce66087ea5ed9ffc80b10cab0d05fa179dd20fcea5cb922e750c60b74a2844afc5872aa6f43f4659562e3841d5d2d5335dff24ae360a697effbcaee3c3b511213446e53eb924243ab9c04c9f90123377a038a09b9932a0bf78fdc40d3b4c6706630649e797089df761f25baa62a2eeff55049d2b3fc566802498b3ce10ae69de25cf9c881ed786907c199c3bba7c835debe55419e87445a402ff6cc169cc152695c2005039eb1a55275f958f933223cb0145cf67581b64c0740dc3df73a465c9fe74a064b9e855edb72ccc80dd0090143e28450e5ebb1c1a13eb4cd3d5f93aa1354a3f18386ae358ae061406393cce531959725aa945652a14a3ce40100368699dec490c7d0b494145d48a35396046faca1cf9b3cb39d8392e3728c22adfaa327ad54bcca94df2d949a3bf9b84f1faca6c6ae612e99949a11f03f7ec045efd0207d21c75bd64537c9f6465cb2e917985d7ef0ba320c5dd713fc5c8718eeb1e50f37eeb176dd37ad7a50f6d0c666b7bbc05e4e168b07ff2a87c025c8b51eb60a2c8e04c745be1aeae87711a1f1c030b8623a82064ceeacae6f9f04dd67466330756b425f776e9919d1cf56a6dd4bccf0c5465120212ead57b65478f189fd3803b3c6963c67bf30fee8f6a80dffeaa427cde1b34012f1a2d2d4775d395d4c5537071c29aa6cad2d09f66800bc787ab700c90c028c2b7246d64d0840f0cdfdc89db41617f6e72e65516c1e8cc944e76899663f29746eaf5bd7e22b81428abd2193370a545f47e3a1e025c697da235ce500f2535cb4d416bdfc433b91b2f8852369c313c88d483ec9f9f59e70ab8cb504c13c6fe465067ad02361db2546aa6182f0538ad0d6e2a40a81fcac68c97af900ac6813cc174cd69e4df2699b42e915745d0b0ad601abe784d39823dcf3878f373f9e2350cf0eb0ee7ce6fb155649e06297174dd000d9af83c8c4320f0425617879dbc8b6733b9e42646efa95206bf84336dee38841f3813ada30976b9af372e48684eddeb7076df5afcdbae6989f8ed56845d34ec557bf749d3bc629aff0395464dc4666dece07dc31795d73edc284785e8052ec57d8138b3347ba547981c591c873468087ab5eca1398dec718b8347e879ccef782093e5eaf82412d1308b2e794387448cb04a750e8295c684e6b9d2a7d4e97f06b631cb5ed148e8ea7210e8020f41b4317006077096e64ad73b3c9e0bd2ea3863ee9142d00690bd61e1d1499006fc4bfa9ad54b993261f779490d0971f18148bf3678d70601b9a1938cc8ae66ac52499d0ef692e23bb769c3fbb60df42214c552469591188bcd0768c65ea3c90c002bc9b50bded4527fecec42921c6f349b8cbce3ee07704e4c9896ba524e006e3c8509c6a82574b5e4547de5022b287896e943344f32b7c2f144dd49934f301930ce74f46fd8e000c6b56e1c5cc531a5996315028828159e0c6b8ad7874f4d478182ddb4b8d864313a116711ead8ef45b1bc131645655f387ab13247406a7bde67f9a01cc4b25a7f8a46b2deb4b53dd1b61401b6ca4a0ca1f8206f460c4d0afbdbb364ac0f56ea56f1b9ff44f51f55423c371a375c6197c000b37ab4575f9f2c1a4ac06d2d37ca4028fb566f0b0a7a3a8120ea9edf8913f03e2a5ba56797525220dca17f28b740c004b12651c914ed37d7da669f7c7290f144c8f656ae4cfcbded82752ee2d2c9e622d5d083b1249d2dad020acb1398112a96b4ea7925e691158486bb609666170179576a8529a2df4ca1aacdd72596811a27f43ab46115943a2e931a230a8347a1688240b0a8c58f5bacf3f721a96fb6124ad6a92dc596ff1dc96012fbdedd095749a4b1334041c01cc82450999ef7987fa08cf6a681d323e5f4030be248570dea2ec5a33dadcabb98a0869a9e308f7a54c660cf6b8fa92fc79ffc2c218234203e45fa4e253255aea9ac6e03c715d9908829b3e9f36ad5a068298aa5c5e47b05e2fdb4517749c6149c8c8e9c9ee27bc64bab5f02deafa4bd663783251a5840d733554f17e325c234d78c3ee68ec4ff0547d5ed09e93c67a4d5f355a53e12cb330e4f044250c90a58f41541e87afa7ec2c2268ec95bc7644828d0b105191c4c6a6641c9344810b5bca1864e578a9f765d8827c5782012320e83399ecdee4606650aff3dca5d680de18cd2b1e4159a63034514442d7786e323216fede840f792fb8ac9feda1c38ae8f0d3837825b1a5c1e81fd1e06ed97724137304c6ba67df69e6c3085175e100c3eea911b1b85aec953755b9c3b76d29e2f69f2f3f8ff859f6a3a3edeccae8f266140c281b95a9da0733a57627ed7f23b52ed705fd27f7544867f9c13bc81e4252d8121d8fd471ade562a961344b35bd63b78dae83ea4c61282440ddb519cb0ae5c2e48bffe7171cc2b645d1ff1428878250d969d7a204ed95ee78f119c9d7b8990a9178a351e48d49433f5d5e1f79a01ee759168a721ca9dc36865092b6e7fc5af1ba338a75377b5eaddcb7196f57dea9be9b082e6d149fe2f34da8cb16e62735e80b2a8c959b041578f37cb6125ab7a1ea6fed9d68285f0db10c21ca87b6eb45a8f04d55436d22883f788ccb60d78d0ea34e989f020d5aaf123186d41487980df028c7f8b325755ff0a09b24910033ad6b7cbd03efed54dca1a59b42e8f11bdd8319d3a2e0cb9f614ed315e68a65bb681278fb97ab62b5351aec2766ce5d67522f2cceeb20e077fa6d0f1faf611f1d11cc00506f7124e46ed3711a8dc3f9d475b1a92c32a7a00f2a16e02727a4b467f99063501715fe9c888000dc03dffd0f963613deed7106920c8d003cdd144c184117d373c050aa664ab1aa0d874b8ec3d0e075ee29f965212ed06c361a18690c987cc7fa44b19d01e7dd7bab2119d55cd4bf112f79f375b54f8a1b6f1e8c51a0b3abe2708fe1c00b927c467d33f6a65a7572fb39a85578fd375f67fec14f8893f1c3652863177f38d1cefecc41d38706d5f03d5ecb160ead5805336e78ae1af1ef24ca86d507368723f71056794a2b999cddc975712245c213e221328a2ba8c5ae14e8639f4aec34df7116045d1e0a17ae5386c242d502c2f3242eace9f9aa33ac862f77bca6494ad7c531aa32c1aca70c702fe52c2a2c1a5ad43c8614dfb323edfe00de127b741e5c5f8000d892d982ec6782cbe4d183257e8715a52fbcd845b684999eba74c769661db3049de41dd47e523b79685d79f41286ff5d165b462f1d33b8f9ed5b6660605ce65b63172412061cd0a055be6414019ded66443d52ad6fef801f4830e33526399b4ca356cfd67e4bbf9ce7641e70df73a0141975fb8b7c0a2d71140904d7dcda3f8851bf8a207189b29c25617543a07a7ab3788c2bd6a7ddf531d444a1b43d5330d2887bc1271386051dcca5607caad836b0b8d9472e133594f2506c8edd3052a79085827e32d682fe13941563f0f8d888caf374909265ad5ee869094258212f75a1fddd931d511992dbce5bb4ec52ea7bf0b9bae5be67117eb45d7d7d523e3190b4f814eb77ee410c40e1fd5820747546b69849ee6514cb29eff5554c3d22e1fe0ce7114f540953f1b5d780b0486449950df22ba93221ad7008424308d6358a3704a1b449845669072ef58a5b68f40147af8231ccba2ab4e2751df1bbb00085ed112a7148954e5c5e8cecdc4b5f0b1e33de3351ae93b1241e04fe55dbaf1c8df079e0731bddfdea75cd41573c703ae3d10eaec247d6e4c217db27543ca630f12d6618b2437508aca230cef127971938db02aa57b782ab448888faeb19048c18a2d3b7b4c179581b3cdc1953a7f6f96b719b0f2e75fbf6359f1fe1890f4cb4f8f1f064a4a891ed65958b4bc1cef84a3f36825a15b326939229f1b7c4897f99bcf206b3b65f29ea7274fef2704dfc2605d9438b556cd2cc1eb0986bc356219c70df8d22da60b3e45baa768292cac53480f738a5ebc6b1a64950bf3809f9c37ff97f4a4c3a14fcc1ae39b775bd0efd01428d41d82c8b2ccceecf4333cc4cbd9f03c42b781be8f0a495c2997a9edcc73b9e900b02173718c0feccb52a28ddb8cb439c5c7254978ac06ea601c08f3f7a824a951a6590e1bed0257e0384f1b20a10252d53713472190ed15dc09ed005f4e808060435330603b9d3b856a8d9979c0eb747ebf946a9b73b4d39a239f7f0eccc36021d1b3348b9681f9de1115342a1aaa7019a2e9d4f4d29863fe0f343977caaf03d4990cdde431c279749bda1c247fe76bc07c5a14a6414e64a607a4f48ba3f20432642ad88213f1ece7ce8cbf1a95cee334d60aa366223d35ff207ecc6683976f3d3193fd25a257cc420513554ee30598764efc07d11ee3980794e775bb71c8d7b8ccd7f3533df68e7d2f17228b6f76172ac7c8ddae5baf844ea02ff5c17b363b4564389d449551e785193353676f81ad72a7e15e23f2bf11a2d1a399c6f3b22c082c49fa57166b0434f21fa8e659b3f8eae83289aba1136c48e11967c62c9f94334f5354e83da6fa3f4dde915cbb829914351a17fb4eda0811410ac4181ad41c8c4c7f04edd028f0e77217d7d606961f8eb07fc23064d8b9c73b12b1a634543bbc52601283a7ea1995dc459191ce002aa216df7f35615a0598598aa18ac5319992c2a73d77ef98575192ba9a8322834faa9a38f3d4863339c55f4f3972ce8e2b79dd112eae87fcb5c95ba8bbcb867da56e7b42a6ad919f56293600a40697f82fc2551c6aa2cbd20610acefa003b1a4e1c08248803c940844730cd22df38677ea2ccb6e6fd5e30036d92d3668f3c0464881367517f04c15ff77cd508c1f42bc5a4ad243c116b78184ba34a3bdbd4edd8062a8982926e36d916a8ef52db205e65a71568c17a50a742d1cee993ca1479a90120524c0ee0ce6266c4bae96e81aa6537a04ad820b683b1c8a01397be4c69cc96131f1a9bcb611b03546c082e63b6a1cd324661a30a91841294654123e6346513a4c69d98d9074706387897476145cbbdee48d5e587e6160b1f506200c46b8a4be24a345b8cadc2ddf4e1e777873b4adeceed2b6fd739f63c0fc73b29c24685c57989acf539e876f5ee13d3c9c4934e523b1cd3610a8e8585d963d4c13fd5d9fc935a9d0c1a8179aae1501f4743d7278ef08b92ee6a9d574b627435d836a5f3d7cbc64fc6d3c7751ea00090a2258aa9a877ec198ede3f84af892fa3ecf113f036667c743ee2d2c111f006eaa848de2628bbbac82e1adb7b91f2165d9e26eb3efdc9ac3a3ed1c90120bb8cd4eaa7a4b779477a4db47508e621c6e7279f8c7fead38aa6a7190291a902b6c6d190001f511a4c146e080e9fc4422fd281bb03529ab7432a798227a769167e610ec58d79c9fce50ec66501276e96aaa20f0c2840e8d8be2913cf9e6d617b9e8c4292ec3de4d0d0d2378ebf64bf0abdc4f05e9a9be664a526d3ccac50dd689631f8a259cc98e5ded2f0bec288cc7d2f3dd39ad84a8d3ced964a483ea1dbbc8de54295f69b02de86b06b4044fbc79cfd3a71b3a584f4777d7bd9904fccdea3842069f3e37bd750295500b53000ff6b03aa1647ce3199cdb1e52937adf58bdfef7299e211989e972183261265766e1dcb01b7779c4ec16df03a639e461b917f668f338c5ddbe98e6a2d12aeb994fb33665c7faced75f888cad5f1a58605038bbf715ca5c4d07ee3a0af9c29da545ba66c279e0afa580ed95a62d86871d741f805e2aaaf9ebf55f1835751fe0c667deb6cc970c728e5cbea49934fc7636a03453e9cc84a03f46d1d45cfd25c948edcb4ea277942d2d2ed4422eb89dc7f374e3101d730767739f642faa3e585e7efcdbefa35223b8e2f740ab7441f60385eaee0337aedb758a3693a72b2cf92e6d119469451677d2cc3cf81c2df76eee59cfab7748213a0435f2d1f28c5ccaeedd45aae23c70e48f0cffe2fe059d42f4a8bd2204b425d9ea970f7788260d89cec29fb0f5234aab238af7e9aa89c33992b86f84be73aaf959ee44e58b6b7ce8e5cb1e1ed9a2e49971cdadc97c1c7c0b2212dd3743e779ca3685063fab308c907f7d8ed662c69abb378ea5ece02b1cf5b2a23d98e3259f1a71092676eab7ddcd0267e61054e3049d39996fbc6fbcce2113a774cc2b1ed611f4571e7a2afe45bfa362b450715006619ddde58c6805c4b5d8278838c3ff9a33ba4f534b870a3a2d77e6de26b3ff3b74251f3271190aedc8a2e9ae9c80db393bad6ae9379b5d01d6fc161eeae1bc945d86cda537c2966ae6536010d43894955f03295da361757f9dc21c3ddd52ff1d68a9d60dd01a361c0b97f29f942d5da8c48d9c3c403332089433b72c66a69b0aab8f45737d91ea3027dcdc083c79b1b42c09c5fdd09dc403d44f3e19e6af7c324acc82d265ddd04b4c333f91464a2adf04cd17e22fb2cd7a72404d31e66e1d48e8b92ab7ca3bb4d4f4e301342bdce04ef1fd9c06240a403c1387edcfac9d862412c5638b58475ea4e831302a4938358e54647c6a1a764bb79a801451f6a3e7bb4f27efa72737447db72d77ef42a9fdfa2dc52bc06c8ab6fefaff92edfd3cd95ac57d7ac3a8ae6bdfefa1542a0cae653f7b78626fce19736a373896be22a245357671ff4fc3172066e70f30b9dac186943b92cd63796ee555c64ae34df577f0a81d648f1a55997c58df296a18c89f0a48c3c214108fa009f6d59f44242a877494f1b4eb9e92447b17fd63fa2d32a7bd88dc050fa85dc585a83c346ed82817b22593f444554a77ac6855b50640a1cc0e4b6e112e1bdd4ba1fce9e3788c50287cb96c50bde9563b11cd41cbe2338901bd1da4b9523995d4924fd66b5d070951757ca28361f2d322677705bc8c9fbe8043551cca46ad1c1c5d4d5b73a787321102fca6a50a215648cec49045b5c95dfa5233e60df80799d2fa746ac5785b5163a1e632c9e8dceeb0a857056e60597f0a31d113810a5e5b1254892521cae4a10f321aa478444cfd831d7cf3a14333bc890166d70043a4c7256177df981a8eb72dd4e7dd34a71d5c4a33f48168186aa51f1b03ea92a4c8214b0ca9f76c255f068602b54b15b1394b762d3f212951bea56a7d6cb5d0d124714f03c6a3300bb1bdb8faa730f18facaeafec1de34c78c00702fa2188658dff7e8270603110299ee314c404340f936073316593957dcbb798b057b01e743438caec716ca0fd5cd22f04454bb64bfae9360ced000491645a505c7b98a2d088d9167c6b3e3bf20abee4b04a05c0e47325936b4a5fed06d4d955f84254ab394975314d2df19f495d854a86ba06984421ec194a0d278c3f9cff99fbe3c3b8d29e3c73dff4d6a69173b3c48b967b47ad4a7ae5a2db3f7477e9b92f99468936685d1f566341f82186f53cfe098bd75b6e75e6c5196588578fa19e31131ab330a3531091d48e0f69152b077eac82f3287353756165062746356927c2e9fa2ec028d3a6580c8f1d84bb0fe897924a074f575f6eb756f5d89a6cc47232276dd83171f54f505cb28ae34c7f3bac3ab649933f4dcd6bccf7430d37b0e53abef0eb599f79be237cad6b19c748e0e503b9a7146f16c716bda7c4e2d5ee84a595f6abae029a2dc1cd5992439d603c92c18446b6ae34fa4e101c6af92054a5bab740f509b8915bd84ef86b86ccaeffc46d358db737e065cc7cd28db50c720a406fcb53c91fd7ea37d8304af1e036256397b5241a540dd1658e00873bd7b54b5d62158aad92185de760a974c4d0de3556823f2d269ecf7af9e209bc798b1ab53aea094b02df91a373b297b7565973ef52fdb0cf868439db8e9b88c6ced779c809fb7bc4d2946d1318ebe3679154ff510a5df173a47e9b9296dc96f3f43d219e4dacb90cdca8ff4cf75ecc60b43a79afdc6294bdb534b24da6533e8e54ebb1a34a0e7bdbf6dd4c79ffe9eadc3a002e2a53f0582953da8861b8cba715f4a3042d4e863d88a178b003b9a05b60b6b5feff3f0b42aaa814e79890b3f664e045e52c8bf873942e14543bb39e49f1007053da237f26b7bdc4b0ae7530913b0a629bc9838150276a3f40edaf75b481d3d1becddf14c39bffaf7fff2c1f8e828d32eeb43bf65242c7ad64b1d8a3e81112eec2f36bf5fe34a8bd43726c976ffaa0f41361a32cdcf5feb35706ebf6effa281d93d5dfb7f925c7c24e96a5b79036ba3e8db7f52cbf35aaf0f50d4c2308d03a6bdd58445f95fd4a347069cf26913c6f5379933a47a3211776fbaec01f6b2e212de4379cd7d367fac28897a821e856c578a2c65517fe7d867dc8df702edf3519a79107c885612342961300b32f68768f5cd616c862ae242b4e513ff711f2052809b4faddb982312ab95654bc6669623f6cb9136dd9d6555ad877fc065c405fbb1f58a5c393a4438f8a74534ccf6184f50b37207e7521ddb5e145570836d16f3ab27e318804d47bd4b33c140a3029516ce5162966723f903069446b8a8f544cb42d86528d2538d7eb32c435040337306919d7b9028e9d8de4d03a091bb7f915dedc0dc8ce8e6da8aeb0be210aeaae459b28d28f282f1a481b821f0d6a3fbd7f1c518b022b48992ac155aa4516021e942c8395241ab6719e64b7783ac2bb5e3e9d3eac0ef794281c42a64db73585e6dfe5902878232595b489f8d17c3dce3e26cd61288f003f110f9525dd6fc65a8c1bfdee3d7cfef891bd546e90e0c24698c50aafe8ede905257bc8b8f7cacffa90ee2b9b618afdae3de3bbd74a5c8a572df9c7ac8090a4efcf3d0a06b648669bc1d4bf17fdc7d1bf3425881c5059c87a30f5b79c92940f499005ef60d31f41143d919048fadbb7b7bda08d98031cd04fda6567cb8f671d76538d9da8345c04ba130652c4d6e9c95bb52e72d8059a7d99497f08c9fcaf03e7776523dd491bcfed0d6ff69d083e7f09d8469a4be78d8bc508dfc02f1e45f4e3ed9f5a25d41dd290c1c32a3a2847ebffa3ac300576aae59f24a954a6e57d3f4f84d8151b4076ac82665a0ea0c86a7f9115dc28a3ce34d6775b465611d07af445be5fa05a897850edef3bbc81cef43ac80df37c378aab2f8e28d8120694ca66289c50d963106beb146e95490734d749bbb2c49525945efbf670aba9ff7487ffe7972d5c422738ffd0c22aa722dcfa728a5866b30c368420e7a01ad326c7119d2fbbfa77dd80adca8f2360b387c386faa62f12524f322d5ee15cbf1d9ae1238eec586b28293d353c35bf0a914b19b22fd600837945b46ef80f20b04de7716e5d62cb85e48cc33c6396951bc7149a35d5e040982ea2675273cdbacf1822d6f01a8462a4b3f1a1cb44a7059d49fb732e9593b872563d9deefefb327a748d8098c3d82e2fe4ac46f213919d3dc2ad12ec87164c2eb1b78f133bba3e513d8f911181621a7cfd138423b17556d9263f625b618c74ee90afe891b73098460fb427683c9172d137caa977ad6ebab93f14b28613f60be6871b9bab80fe12e8a75b231b68bb37d925b942f3551a4f308cf5c8008c72e9ea3f3e21e187da1ad73cbd7a14c538c46b5621add6246f1d7980c9ff363da112d39469ab8bf67ecc087ab650d9be309aadf139584ba5f0ce082cae5bf51c77c21eaf8973c3218878f9c134a9910ce2dedfc65b833f587d03c065c024942f5e2b8f48ae80b6c11638ee45d25c91099d07121126000759ab5c4cfb72eb4b8decab6abbec1f4fa5ac32300cb3f6c64c82c9b037c4f188bf9da701fe84c1ab53092eced7c9aee69ca82caa6247a4e43c3c6542f20eb77568f8055b196850aac10eb7553c75e340675957a36ce9088c7791973ad33edb88dec96f8acbdeb949eddace60acadd9d3e3c1e65b65d42e22d0ca4cecac1ef63604ffe7a6bda658ad6baf8d09321ea117560a836fd44370793653fa0a8e6d084b33c1e01d4b9bf96c6e28d841f48c8d9590d8a99d06af7639a86c3609cc35b32e9e98454dc73ad034690214f75da4d63aa47e5c3168fa9e73e4d3d474efeabb5675b77a194a076becd0c5795776839697562f7fa54977075cf0764377eecda40f4c7f0c82124ac479244264418c11792d33294cb4fffdf9dd25a5b101a7e67eef825ff80754d1419df5df648222f8de777ccc37e835435fe0c378f8bd5e34c2e76977f60ed17ff7497803850d469d59469dca2253366a28c60c769ee5e07e5e450696577305859cb65edcf9cb69c949ae49e41e8ac16adc95080e97582a09a963d6b2749b0b41737f041cf529187aaeceea4e566add29d1c4a6a771c7254c7934abade89317a1b32aaa628356c72f643fc5379cf1eedbd0060309e65d8f30b1305d7cfb1bae60ea264260c48f3fd14e595b504ab4454e63462bb3430b2b6fe751ced4646570ef0c0dc8dcc6077b2ebf738e96cee8fe194455939c8802698dea9e983bc251eb5015dfe1cc802a2e525f0d990185b4c64954a94f0d6a4fe2abeecee27c4eba28a63be77e83a217b89883f4e5cab1cf4b04a5c07857fceb6276a3b32bff1f4f2850caea84f468ccd1b13946c011ebefb88d17a70d16591d7d990973475f322ffe86c70cdb66082a8f8d91e21dcd126c1dde4ccacc0a9e25e7cd7350d0823668c646f56029eec5a64cc66591b4494ad631201c64dd1cdb32d9ee74c4cb1a6ef5a13074203c4341a5d3107a29752eb3ce772a3c995938362f224264786189796e43a08d4f19ee309114392ab5deb6bb2cd0b28540d06c4e31ad73867e804484f7ed3538f0d5017206b0bd78755edf80f3421c74ff08564d39c702a6ae3671706cef5359580002ccb9ad48bf5ce5a07f44315b88a002420e084709b89ca25bc6f71b61f445f52de0503678e06f60e82d7896b8aa9131151df5d81c56572c10fd3d19cf16a319205a9014058a006ff6f64593f40e71b3d08f076845b98404128286b3731882fb1ff36ed24424b4cc18766986e8fd411bb389e9af81b49177d96a9b613f579da5a2e42d30ea0239b405e58d0deaf7634171d0499f4bf8aabb42c50a089b7484c4adfd3eb036c816b9c876601241f910c841d17b29d6f28862e155a0052f9c3640f3e85bd383ef54d997fd7c067126f40188a9c453a17dc2d35050738788c014bf9aeb45bdb0fc040a3dae9087843b7a7d61f736710c7246843faf1b159429555db921d3b6afbab29b487f99e22ad23a223ed953ef0558d3eaf690c2feeb587b53e85cd4f7460cc94dceef788abef63fc43585fae5c1ba451989b98b955b923ef28772d5de73791519800929ae90c966d2108f77be48d537f7f976bf526d422a3825f79099425dbdcc692bac4312a1816c573e6585d1c7848983d0f778a4cef8fa42351eb600d2abcfabbcf4fe884c524182755343a65ed4649e016fe55b38c5c4ad656a0fef36c5ff6d7cd2364a866a15f87e6d8efa4ee4ae17704f22280e3dd7021c13b0790cd53175a165355fc7fc818fc8fb947d281a81dfa6950a5e0946e667ff1c8408fc9b145900d8e71a91f9da8d2621627bc39e0cce4a714ed35affa7b0d602ff5f74b2e4aa4c165e1179b0413493bba42354bb21f021237f4fa51086f6f1a4b8926c68f2686efde9f3189a6eb7b0628ee7136c45bfe19113c5ecf8793b2baf64073cc4001c04ed6224adcd6dbe6739f80ad25150602f845d82fddb2b4a70477eaf63681b656fd07a86ce20c1d5077d3702ac7d8db563bee75d5b1b4fc18445232d29f4c477b0aaa668d8f36699b31331e8d7c485b8d6f2cc753d24cda807660b9305def828e7f88d8052c16d69b1a183e5592d7233224cabe76f357177124550ccdd8caad9e3a494a6db74f6ffa6acefbd37e8faafdd31d69716b3ee5922fd82a20343c8fd8f52cc1a0a7bbaf68f160bf007298c0a6724271cab4d800a7d9d074b12260a7bcd7fe613308b2559ec10def2753129826c019ad891456a599f97dd0a8bc629410912ca781ed51c5e74de646f73e6feca16dc5c1dbf20834edd2bc2f50c19d613a8cb4c6406781f4e533b0aff13084f8df3555d0834cb3e24db0ff2f41d1d3f21e7bc81202f56ef7e6607d169c39c6df1d9538745e9fff829e09a0f910e9a5d315501efa46c12d4af8587fe660c95154cf1c23b56635217d77577c7f9be1ff52c514df03229ceede0233f5048e82025f8a63bc3fe857dd01ba2c5844137b3a410257f2f318fa766a3b8c03c1186b927b724fdee1150e662a832ca1d91fd44de3c5da86e0172b6eccbffa626e487033d445b1d301432ebe23b03d832312482878f6706a73ab41b1c0c0607c78d44ab949292fc5be0ff9594dada1fe7340a78502bf712290a24c4d39abe18e57f72d6f268823e8917c07462602b43a0b31c34f0fe7a3182465b849b07b8379d2b8c8cd5c2cff07f283e4502f8b3f75329e7a8748ff0560c28a3defd9e19d7d75b309343e1b34a0363b783064e1297c0f341bf588a9753df9d7d664b8cea83cf99cd1f7d157801188b792f96d480152ffda80398b36c1891f77dfbb39455e323846e4bc043785d86ba579b028858e153a808a8423dae771712cbddeec0e1a37a0c11bfe5f9d60028c0d54eaac1491ee9eb6adf9483b8386cdc02c9b3d92e4c5d87bc5ce1c8c88182077139432fc35f8bf5c382b7d33d833c50209cd004c49be28680932e6b79c745ad6d5247fd84e03fb78a6a2f8952c3d350b565a0edf93889065ca671984aeb44323dc9dc4ee64902bb1e00e12157c4db2f6cab8ce09acb961afa48a58446a678b19f6d9edd8e6f3880cd713dec1c5003fece8c9214518e2afb7fb2b59529c71c5a50c99352bff9432ef3a34da9d4cbc13105c45c100538fcf17a891668c889b91200e0934d5b7eb2f8c6fd60712742953c36ea6b1a4fc7e1403f71077c8cb0a58fd7fc94c9eb7b26ee44b4d123918e03e064263ee7651bca931f447eccd4d8ace1662ad79bdd80f25446c2a8f3e19b3fdf94620952f79511b0eaf5d3872f4b7e5038e0628ddb50440c12e5e4eb6d57c37ce56cfab5eafa6e7c65053783b618962d07d549146e595ae4761a3912d9d7cc97f76bacf0ace92aadeee7664d50c63241dd99d8ce02cfc7aacfdca5441671be9f28a8aa7c34bde965f7878db559201c6d78e9d0f11aeff961fc4f6cbf89124e0e792e8cc7af62b130b8aa6b28ef1b7242dc651413d8b622cce56bf39c5b483074add091d6a45bd8a63576e065d8a01b9762344f1dae45dac3bfbb0ecb39ce206e75151d819dbbfb7bd95dfa8e81e2d1c0959abfb74e59683a9739ee78f2332085f52b342e1c2649db0202b9a721d52dc0ce3bfc6028e78de5182b60f5cc9a80ee7f01076f4816c3d5ffeb1874d58136d07b260f069c5e0b064df19884e50f9d55f5af31b65d57d26ae78d816408c51ad4c5cd16a83cd333594f3955799bb2e9ae6fe1faa1c927a9a7d68c544d285d177aecd253c67290b5b5c1858af9c9305b21fc1ce5d8b49b61f0bc22f746cd6a537a39970dce09c2ffaed8ce20d4b8105fd1c3bec1746e26057aec542b6e0f9aec5511fec1331aac9af4e9a70940b36963103e2e68bbf8bab41cf93434600c2b4749904c6109217e9167df1225c9e153e15e1b3f8a03b4c07b29b4e856c3258d73cd9978bef0a2fc48dc8c621ae6eca8ae14a42df29bd5b9f8b3aecf907bf2dd119f24b52a69486ea4a78286c219fa8706c488a3be95fc01fca255f76f266871f1c59d05290ccd6df0c72cce285549573cfaf0e94e58aef790c22f7d45ba34e570cf3177c396b190a9b3471b0acad51f7e9c97e6b51f44cb936b5121bce8d2689ab7a15aa1b7d06e22038f27963deaf110c31b5fb2bffdbd0f4d17441142862412cc09344142a8c5a04ec6c14edc9b22db758d23187d18518edd0a131bcb7c8f9008728912dc31ca149b2a01363dc9d9b9d842e8afc8158dff47a6f0be510bc6e84391de527e514a847aed0f6e96dabb954074a7693039c1bff2284d427538315c2df1397a69cb119463e9f1635a7c83599226e0527f20dcfadb087cfdb8da5d0f1d9114cd7d834ad5d210324ff6776dafe44853a9745436a24d2914a8b5afc9291aeebfa0ff7b918f71c2cbe58e1b4e14474bf21c2fc1439cc6bab3f95eafe7ef0b5872478ba1e7e59ccc4b13577844d288043c2914dbb368c8d9eb6c0583995736c7620fe39d65d72432578a8bab90839206a1ce2565d23e67c352527476f0f619fecb253c663bc273948c262b74b628855090a58c78f41d5452c49a57e133b8f87f3b04e1f4b0544efaf2a215b7fbb44e0bdc7bcfceff343c9ea2dcccbcf92708fb3a633d20e55c57b8fb2c58d63810d7fb3c148b4b79ba6e7cd167465e1dbd6473337cd890c01cb4d9f5d66ee7c99d38183f6df06fa0b6d0f8a413ffe189d06af350192e30fc8aa211641f0e0f9d2a76aec9906a19af17f27071194c75100e0f5edce561bafc3a55bcbb3452ad0b0c862d8e62c984879ce026817673d1dbc08bd82df6a691cc2cfb09f3c8ab8111322cbc366db71c3189ec557b4a978e1776442d10ed8433aa3e748858cc43901904f0f51a70d960b9a570406070df94a97b79721b9517f97ac09d9c5c57e27445e8fad05e96504d2695604955f8c65bc8fa8408cdb3e1014da7928cc9ba01649668c47f7c9b8889ba1402d384c659eea3e146f8c05c0887682a55b64ca3022c9cbeb208b4428578c84e181cb502650e5676f08b3d7f40704825c22c83cc4ecf660d437db95b2b6d9841cf5e182c0b5373aeaa47870379b2c1176e45710c4c074b7116d0ff12922fe2001", + 1 + ] + ], + "callback_url": "http://127.0.0.1:8080" +} diff --git a/templates/default/server/runner.ts b/templates/default/server/runner.ts new file mode 100644 index 0000000000..c9f5dab3d0 --- /dev/null +++ b/templates/default/server/runner.ts @@ -0,0 +1,35 @@ +import { getCheckedEnvVars } from "./utils"; + +export async function callFheRunner( + e3Id: bigint, + params: string, + ciphertextInputs: Array<[string, number]>, +): Promise { + const { PROGRAM_RUNNER_URL, CALLBACK_URL } = getCheckedEnvVars(); + + const payload = { + e3_id: Number(e3Id), + params, + ciphertext_inputs: ciphertextInputs, + callback_url: CALLBACK_URL, + }; + console.log("payload:"); + console.log(JSON.stringify(payload)); + + const response = await fetch(`${PROGRAM_RUNNER_URL}/run_compute`, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(payload), + }); + + if (!response.ok) { + throw new Error( + `FHE Runner failed: ${response.status} ${response.statusText}`, + ); + } + + const result = await response.json(); + console.log(`✓ FHE Runner accepted E3 ${e3Id}:`, result); +} diff --git a/templates/default/server/testHandler.ts b/templates/default/server/testHandler.ts new file mode 100644 index 0000000000..0a3c6e055b --- /dev/null +++ b/templates/default/server/testHandler.ts @@ -0,0 +1,9 @@ +import payload from "./payload.json"; +import { callFheRunner } from "./runner"; + +export async function handleTestInteraction() { + let e3Id = BigInt(payload.e3_id); + let params = payload.params; + let ciphertextInputs = payload.ciphertext_inputs as Array<[string, number]>; + await callFheRunner(e3Id, params, ciphertextInputs); +} diff --git a/templates/default/server/utils.ts b/templates/default/server/utils.ts new file mode 100644 index 0000000000..260872d538 --- /dev/null +++ b/templates/default/server/utils.ts @@ -0,0 +1,20 @@ +export function ensureEnv(key: string): string { + const value = process.env[key]; + if (!value) { + throw new Error(`Missing required env var: ${key}`); + } + return value; +} + +export function getCheckedEnvVars() { + return { + RPC_URL: ensureEnv("RPC_URL"), + ENCLAVE_CONTRACT: ensureEnv("ENCLAVE_ADDRESS"), + CIPHERNODE_REGISTRY_CONTRACT: ensureEnv("REGISTRY_ADDRESS"), + PRIVATE_KEY: ensureEnv("PRIVATE_KEY"), + CHAIN_ID: parseInt(ensureEnv("CHAIN_ID")), + PROGRAM_RUNNER_URL: + process.env.PROGRAM_RUNNER_URL || "http://127.0.0.1:13151", + CALLBACK_URL: process.env.CALLBACK_URL || "http://127.0.0.1:8080", + }; +} diff --git a/templates/default/tests/.keep b/templates/default/tests/.keep new file mode 100755 index 0000000000..e69de29bb2 diff --git a/templates/default/tests/integration.spec.ts b/templates/default/tests/integration.spec.ts new file mode 100644 index 0000000000..c9dbf0eda9 --- /dev/null +++ b/templates/default/tests/integration.spec.ts @@ -0,0 +1,273 @@ +import { + AllEventTypes, + calculateStartWindow, + DEFAULT_COMPUTE_PROVIDER_PARAMS, + DEFAULT_E3_CONFIG, + E3, + EnclaveEvent, + EnclaveEventType, + EnclaveSDK, + encodeBfvParams, + encodeComputeProviderParams, + encryptNumber, + RegistryEventType, +} from "@gnosis-guild/enclave-sdk"; +import { hexToBytes } from "viem"; +import assert from "assert"; + +export function getContractAddresses() { + return { + enclave: process.env.ENCLAVE_ADDRESS as `0x${string}`, + ciphernodeRegistry: process.env.REGISTRY_ADDRESS as `0x${string}`, + filterRegistry: process.env.FILTER_REGISTRY_ADDRESS as `0x${string}`, + e3Program: process.env.E3_PROGRAM_ADDRESS as `0x${string}`, + }; +} + +type E3Shared = { + e3Id: bigint; + e3Program: string; + e3: E3; + filter: string; +}; + +type E3StateRequested = E3Shared & { + type: "requested"; +}; + +type E3StatePublished = E3Shared & { + type: "committee_published"; + publicKey: `0x${string}`; +}; + +type E3StateActivated = E3Shared & { + type: "activated"; + publicKey: `0x${string}`; + expiration: bigint; +}; + +type E3StateOutputPublished = E3Shared & { + type: "output_published"; + plaintextOutput: string; +}; + +type E3State = + | E3StateRequested + | E3StatePublished + | E3StateActivated + | E3StateOutputPublished; + +async function setupEventListeners( + sdk: EnclaveSDK, + store: Map, +) { + async function waitForEvent( + type: T, + trigger?: () => Promise, + ): Promise> { + return new Promise((resolve) => { + sdk.once(type, resolve); + trigger && trigger(); + }); + } + + sdk.onEnclaveEvent(EnclaveEventType.E3_REQUESTED, (event) => { + const id = event.data.e3Id; + + if (store.has(id)) { + throw new Error("E3 has already been requested "); + } + + store.set(event.data.e3Id, { + type: "requested", + ...event.data, + }); + }); + + sdk.onEnclaveEvent(RegistryEventType.COMMITTEE_PUBLISHED, (event) => { + const id = event.data.e3Id; + + const state = store.get(id); + + if (!state) { + throw new Error(`State for ID '${id}'not found.`); + } + + if (state.type !== "requested") { + throw new Error(`State must be in the ${state.type} state`); + } + + store.set(id, { + publicKey: event.data.publicKey as `0x${string}`, + ...state, + type: "committee_published", + }); + }); + + sdk.onEnclaveEvent(EnclaveEventType.E3_ACTIVATED, (event) => { + const id = event.data.e3Id; + const state = store.get(id); + + if (!state) { + throw new Error(`State for ID '${id}' not found.`); + } + + if (state.type !== "committee_published") { + throw new Error(`State must be in the ${state.type} state`); + } + + store.set(id, { + ...state, + expiration: event.data.expiration, + publicKey: event.data.committeePublicKey as `0x${string}`, + type: "activated", + }); + }); + + sdk.onEnclaveEvent(EnclaveEventType.PLAINTEXT_OUTPUT_PUBLISHED, (event) => { + const id = event.data.e3Id; + const state = store.get(id); + + if (!state) { + throw new Error(`State for ID '${id}' not found.`); + } + + if (state.type !== "activated") { + throw new Error(`State must be in the ${state.type} state`); + } + + store.set(id, { + ...state, + plaintextOutput: event.data.plaintextOutput, + type: "output_published", + }); + }); + + return { waitForEvent }; +} + +async function main() { + console.log("Testing..."); + + const contracts = getContractAddresses(); + + const store = new Map(); + const sdk = EnclaveSDK.create({ + chainId: 31337, + contracts: { + enclave: contracts.enclave, + ciphernodeRegistry: contracts.ciphernodeRegistry, + }, + rpcUrl: "ws://localhost:8545", + privateKey: + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", + }); + + const { waitForEvent } = await setupEventListeners(sdk, store); + + const threshold: [number, number] = [ + DEFAULT_E3_CONFIG.threshold_min, + DEFAULT_E3_CONFIG.threshold_max, + ]; + const startWindow = calculateStartWindow(60); + const duration = BigInt(10); + const e3ProgramParams = encodeBfvParams(); + const computeProviderParams = encodeComputeProviderParams( + DEFAULT_COMPUTE_PROVIDER_PARAMS, + ); + + let state; + let event; + + // REQUEST phase + await waitForEvent(EnclaveEventType.E3_REQUESTED, async () => { + await sdk.requestE3({ + filter: contracts.filterRegistry, + threshold, + startWindow, + duration, + e3Program: contracts.e3Program, + e3ProgramParams, + computeProviderParams, + value: BigInt("1000000000000000"), // 0.001 ETH + }); + }); + + state = store.get(0n); + assert(state); + assert.strictEqual(state.e3Id, 0n); + assert.strictEqual(state.filter, contracts.filterRegistry); + assert.strictEqual(state.type, "requested"); + + // Ciphernodes will publish a public key within the COMMITTEE_PUBLISHED event + event = await waitForEvent(RegistryEventType.COMMITTEE_PUBLISHED); + + state = store.get(0n); + assert(state); + assert.strictEqual(state.type, "committee_published"); + assert.strictEqual(state.publicKey, event.data.publicKey); + + let { e3Id, publicKey } = state; + + // ACTIVATION phase + event = await waitForEvent(EnclaveEventType.E3_ACTIVATED, async () => { + await sdk.activateE3(e3Id, publicKey); + }); + + state = store.get(0n); + assert(state); + assert.strictEqual(state.type, "activated"); + + // INPUT PUBLISHING phase + const num1 = 12n; + const num2 = 21n; + const publicKeyBytes = hexToBytes(state.publicKey); + const enc1 = await encryptNumber(num1, publicKeyBytes); + const enc2 = await encryptNumber(num2, publicKeyBytes); + + await waitForEvent(EnclaveEventType.INPUT_PUBLISHED, async () => { + await sdk.publishInput( + e3Id, + `0x${Array.from(enc1, (b) => b.toString(16).padStart(2, "0")).join("")}` as `0x${string}`, + ); + }); + await waitForEvent(EnclaveEventType.INPUT_PUBLISHED, async () => { + const hash2 = await sdk.publishInput( + e3Id, + `0x${Array.from(enc2, (b) => b.toString(16).padStart(2, "0")).join("")}` as `0x${string}`, + ); + }); + + const plaintextEvent = await waitForEvent( + EnclaveEventType.PLAINTEXT_OUTPUT_PUBLISHED, + ); + + const parsed = hexToUint8Array(plaintextEvent.data.plaintextOutput); + + assert.strictEqual(BigInt(parsed[0]), num1 + num2); + + console.log(""); + console.log("*****************************************"); + console.log(" TEST WAS SUCCESSFUL!"); + console.log(" SHUTTING DOWN SERVICES"); + console.log("*****************************************"); + console.log(""); + + process.exit(0); +} + +main() + .then(() => console.log("Test successful")) + .catch((err) => { + console.log(""); + console.log(" ❌ Test failed "); + console.log(""); + console.log(err); + process.exit(1); + }); + +function hexToUint8Array(hexString: string) { + const hex = hexString.startsWith("0x") ? hexString.slice(2) : hexString; + const m = hex.match(/.{2}/g)?.map((byte) => parseInt(byte, 16)) ?? []; + return new Uint8Array(m); +} diff --git a/templates/default/tsconfig.json b/templates/default/tsconfig.json new file mode 100644 index 0000000000..b91e93146e --- /dev/null +++ b/templates/default/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "nodenext", + "esModuleInterop": true, + "moduleResolution": "nodenext", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noEmit": true, + "skipLibCheck": true, + "resolveJsonModule": true + }, + "include": [ + "./tests/**/*", + "./deploy/**/*", + "./server/**/*", + "hardhat.config.ts" + ] +} diff --git a/tests/integration/base.sh b/tests/integration/base.sh index 36a9f9090e..0fd5ac75f6 100755 --- a/tests/integration/base.sh +++ b/tests/integration/base.sh @@ -24,7 +24,7 @@ enclave_nodes_up echo "waiting on binaries and utilities..." -waiton-files "$ROOT_DIR/packages/ciphernode/target/debug/enclave" "$ROOT_DIR/packages/ciphernode/target/debug/fake_encrypt" +waiton-files "$ROOT_DIR/target/debug/fake_encrypt" sleep 4 diff --git a/tests/integration/fns.sh b/tests/integration/fns.sh index 4d5b751fd2..68b8ae7f9e 100644 --- a/tests/integration/fns.sh +++ b/tests/integration/fns.sh @@ -38,7 +38,15 @@ NETWORK_PRIVATE_KEY_2="0x21a1e500a548b70d88184a1e042900c0ed6c57f8710bcc35dc8c85f NETWORK_PRIVATE_KEY_3="0x31a1e500a548b70d88184a1e042900c0ed6c57f8710bcc35dc8c85fa33d3f580" NETWORK_PRIVATE_KEY_4="0x41a1e500a548b70d88184a1e042900c0ed6c57f8710bcc35dc8c85fa33d3f580" -ENCLAVE_BIN=$ROOT_DIR/packages/ciphernode/target/debug/enclave +if command -v enclave >/dev/null 2>&1; then + ENCLAVE_BIN="enclave" +elif [[ -f "$ROOT_DIR/target/debug/enclave" ]]; then + ENCLAVE_BIN="$ROOT_DIR/target/debug/enclave" +else + cargo build --bin enclave + ENCLAVE_BIN="$ROOT_DIR/target/debug/enclave" +fi +echo "Enclave binary: $ENCLAVE_BIN" # Function to clean up background processes cleanup() { diff --git a/tests/integration/lib/fake_encrypt.sh b/tests/integration/lib/fake_encrypt.sh index 7095ef3b88..4eec7c75e8 100755 --- a/tests/integration/lib/fake_encrypt.sh +++ b/tests/integration/lib/fake_encrypt.sh @@ -1,3 +1,3 @@ #!/usr/bin/env bash -../../packages/ciphernode/target/debug/fake_encrypt "$@" +../../target/debug/fake_encrypt "$@" diff --git a/tests/integration/lib/pack_e3_params.sh b/tests/integration/lib/pack_e3_params.sh index a5a012c0e6..db80ee906c 100755 --- a/tests/integration/lib/pack_e3_params.sh +++ b/tests/integration/lib/pack_e3_params.sh @@ -1,3 +1,3 @@ #!/usr/bin/env bash -../../packages/ciphernode/target/debug/pack_e3_params "$@" +../../target/debug/pack_e3_params "$@" diff --git a/tests/integration/lib/prebuild.sh b/tests/integration/lib/prebuild.sh index da0254551d..84aefd6e7d 100755 --- a/tests/integration/lib/prebuild.sh +++ b/tests/integration/lib/prebuild.sh @@ -3,7 +3,7 @@ set -eu # Exit immediately if a command exits with a non-zero status echo "" echo "PREBUILDING BINARIES..." echo "" -cd ../../packages/ciphernode && cargo build --bin fake_encrypt --bin enclave --bin pack_e3_params; +cd ../../crates && cargo build --bin fake_encrypt --bin pack_e3_params; echo "" echo "FINISHED PREBUILDING BINARIES" echo "" diff --git a/tests/integration/net.sh b/tests/integration/net.sh index 8b2304629e..20dba05ceb 100755 --- a/tests/integration/net.sh +++ b/tests/integration/net.sh @@ -2,4 +2,4 @@ set -eu -cd ../../packages/ciphernode/net/tests && ./run.sh +cd ../../crates/net/tests && ./run.sh diff --git a/tests/integration/persist.sh b/tests/integration/persist.sh index c152b4bc01..39e97b3f58 100755 --- a/tests/integration/persist.sh +++ b/tests/integration/persist.sh @@ -22,7 +22,7 @@ enclave_wallet_set ag "$PRIVATE_KEY" # start swarm enclave_nodes_up -waiton-files "$ROOT_DIR/packages/ciphernode/target/debug/enclave" "$ROOT_DIR/packages/ciphernode/target/debug/fake_encrypt" +waiton-files "$ROOT_DIR/target/debug/fake_encrypt" heading "Add ciphernode $CIPHERNODE_ADDRESS_1" pnpm ciphernode:add --ciphernode-address $CIPHERNODE_ADDRESS_1 --network localhost